LibGame v0.4.0
The LG Game Engine - Copyright (C) 2024-2026 ETMSoftware
Loading...
Searching...
No Matches
lg_shader_progs.c File Reference

Functions

LG_ShaderProg LG_ShaderProg_create (const char **vertex_shader_code, const char **fragment_shader_code, const char **geometry_shader_code, LG_VAP_params *params)
 
void LG_ShaderProg_delete (LG_ShaderProg *shader_prog)
 
void LG_ShaderProg_use (LG_ShaderProg *shader_prog, zboolean gl_checking)
 
char * LG_ShaderProg_load_src_from_file (const char *path)
 
int LG_ShaderProg_get_attrib_loc (LG_ShaderProg *shader_prog, const char *attrib_name)
 
int LG_ShaderProg_get_uniform_loc (LG_ShaderProg *shader_prog, const char *uniform_name)
 
uint32_t lg_compile_shader (int type, const char **shader_code)
 
void lg_shader_info_log (uint32_t shader)
 
void lg_shader_program_info_log (uint32_t shader_prog_id)
 
const char * lg_shader_get_string_from_type (int type)
 

Detailed Description

 === Wrapper functions to more easily create and manage shader progs ===

 LG_VAP_params = Vertex Attrib Pointer params

Function Documentation

◆ LG_ShaderProg_create()

LG_ShaderProg LG_ShaderProg_create ( const char **  vertex_shader_code,
const char **  fragment_shader_code,
const char **  geometry_shader_code,
LG_VAP_params params 
)

Create shader prog from vertex and fragment shader source code

Also set vertex attrib pointer params if params != NULL

Shader prog id set to LG_INVALID_SHADER_PROG_ID on error

Parameters
vertex_shader_codeGLSL source code
fragment_shader_codeGLSL source code
geometry_shader_codeGLSL source code, may be NULL
paramsAn array of LG_VAP_params, may be NULL - VAP stands for Vertex Attrib Pointer

Example code:

// Vertex shader
#version 310 es
precision highp float;
uniform mat4 u_mvp_matrix;
in vec4 a_position;
in lowp vec4 a_color;
out lowp vec4 v_color;
void main() {
gl_Position = u_mvp_matrix * a_position;
v_color = a_color;
}
// Fragment shader
#version 310 es
in lowp vec4 v_color;
out lowp vec4 fragColor;
void main()
{
fragColor = v_color;
}
char *vert_shader[1], *frag_shader[1];
*vert_shader = LG_ShaderProg_load_src_from_file(lg_engine_shader("shader1.vert"));
*frag_shader = LG_ShaderProg_load_src_from_file(lg_engine_shader("shader1.frag"));
LG_VAP_params draw_params[] = {
{0, "a_position", 3, GL_FLOAT, FALSE, sizeof(Vertex_rgba), (void *)0},
{1, "a_color", 4, GL_UNSIGNED_BYTE, TRUE, sizeof(Vertex_rgba), (void *)offsetof(Vertex_rgba, r)},
VAP_END
};
LG_ShaderProg shader_prog = LG_ShaderProg_create((const char **)vert_shader, (const char **)frag_shader, NULL, draw_params);
const char * lg_engine_shader(const char *relative_path)
Definition lg_dirs_stuff.c:148
vec4_t vec4(float x, float y, float z, float w)
Definition lg_math_extra.c:124
char * LG_ShaderProg_load_src_from_file(const char *path)
Definition lg_shader_progs.c:239
LG_ShaderProg LG_ShaderProg_create(const char **vertex_shader_code, const char **fragment_shader_code, const char **geometry_shader_code, LG_VAP_params *params)
Definition lg_shader_progs.c:72
static mat4_t mat4(float m00, float m10, float m20, float m30, float m01, float m11, float m21, float m31, float m02, float m12, float m22, float m32, float m03, float m13, float m23, float m33)
Definition math_3d.c:351
Definition lg_shader_progs.h:11
Definition lg_shader_progs.h:34
Definition lg_vertex.h:80
Returns
A new LG_ShaderProg

◆ LG_ShaderProg_delete()

void LG_ShaderProg_delete ( LG_ShaderProg shader_prog)

Delete shader prog

Parameters
shader_progAddr of shader prog

◆ LG_ShaderProg_use()

void LG_ShaderProg_use ( LG_ShaderProg shader_prog,
zboolean  gl_checking 
)

Use shader prog

Parameters
shader_progAddr of shader prog
gl_checkingEnable (TRUE) / disable (FALSE) GL checking

◆ LG_ShaderProg_load_src_from_file()

char * LG_ShaderProg_load_src_from_file ( const char *  path)

Load shader source code (GLSL) from file

Path should be inside assets/

If not NULL, returned string must be freed afterwards

Example use:

char *src;
if ((src = LG_ShaderProg_load_src_from_file(lg_shader("mesh_shader1.vert"))) != NULL) {
// Do something with src
free3(src);
} else {
INFO_ERR("Bla bla\n")
}
const char * lg_shader(const char *relative_path)
Definition lg_dirs_stuff.c:137
Parameters
pathGLSL file name, inside assets/
Returns
Pointer to a string containing GLSL source code if OK, NULL on error

◆ LG_ShaderProg_get_attrib_loc()

int LG_ShaderProg_get_attrib_loc ( LG_ShaderProg shader_prog,
const char *  attrib_name 
)

Get the location of an attribute variable in the shader prog

Return -1 on error

From: https://docs.gl/es2/glGetAttribLocation
"If the named attribute variable is not an active attribute in the specified program object
or if name starts with the reserved prefix 'gl_', a value of -1 is returned."
Parameters
shader_prog
attrib_name
Returns
Attribute location, set to -1 on error

◆ LG_ShaderProg_get_uniform_loc()

int LG_ShaderProg_get_uniform_loc ( LG_ShaderProg shader_prog,
const char *  uniform_name 
)

Get the location of a uniform variable in the shader prog

Return -1 on error

From: https://docs.gl/es2/glGetUniformLocation
"This function returns -1 if name does not correspond to an active uniform variable in program
or if name starts with the reserved prefix 'gl_'."
Parameters
shader_prog
uniform_name
Returns
Uniform location, set to -1 on error

◆ lg_compile_shader()

uint32_t lg_compile_shader ( int  type,
const char **  shader_code 
)

Load and compile shader from source

Parameters
typeGL_VERTEX_SHADER, GL_FRAGMENT_SHADER, or GL_GEOMETRY_SHADER_OES
shader_codeGLSL source code
Returns
Shader or 0 on error

◆ lg_shader_info_log()

void lg_shader_info_log ( uint32_t  shader)

Print out shader compilation log

Parameters
shader

◆ lg_shader_program_info_log()

void lg_shader_program_info_log ( uint32_t  shader_prog_id)

Print out shader prog linking log

Parameters
shader_prog_id

◆ lg_shader_get_string_from_type()

const char * lg_shader_get_string_from_type ( int  type)

Get shader string from type, ie

GL_VERTEX_SHADER -> "vertex"
GL_FRAGMENT_SHADER -> "fragment"
GL_GEOMETRY_SHADER_OES -> "geometry"
Another value -> "<unknown type>"
Parameters
type
Returns
String