summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorRay <[email protected]>2021-06-25 00:46:14 +0200
committerRay <[email protected]>2021-06-25 00:46:14 +0200
commitd4c03b47ec625c2de723ef686d8ec306a1784ec1 (patch)
tree944398b026dad8ee65689db23d98fcbd33a0aa19 /src
parenta226e11aac964c503f8102061b5d6efc7ffd920e (diff)
downloadraylib-d4c03b47ec625c2de723ef686d8ec306a1784ec1.tar.gz
raylib-d4c03b47ec625c2de723ef686d8ec306a1784ec1.zip
REVIEWED: LoadShader() and default locations
Reviewed locations descriptions
Diffstat (limited to 'src')
-rw-r--r--src/core.c61
-rw-r--r--src/raylib.h52
-rw-r--r--src/rlgl.h52
3 files changed, 64 insertions, 101 deletions
diff --git a/src/core.c b/src/core.c
index 2ec441ad..fc38203e 100644
--- a/src/core.c
+++ b/src/core.c
@@ -2330,55 +2330,14 @@ void UnloadVrStereoConfig(VrStereoConfig config)
Shader LoadShader(const char *vsFileName, const char *fsFileName)
{
Shader shader = { 0 };
- shader.locs = (int *)RL_CALLOC(MAX_SHADER_LOCATIONS, sizeof(int));
-
- // NOTE: All locations must be reseted to -1 (no location)
- for (int i = 0; i < MAX_SHADER_LOCATIONS; i++) shader.locs[i] = -1;
-
- char *vShaderStr = NULL;
- char *fShaderStr = NULL;
- if (vsFileName != NULL) vShaderStr = LoadFileText(vsFileName);
- if (fsFileName != NULL) fShaderStr = LoadFileText(fsFileName);
+ char *vShaderStr = LoadFileText(vsFileName);
+ char *fShaderStr = LoadFileText(fsFileName);
- shader.id = rlLoadShaderCode(vShaderStr, fShaderStr);
-
- if (vShaderStr != NULL) UnloadFileText(vShaderStr);
- if (fShaderStr != NULL) UnloadFileText(fShaderStr);
-
- // After shader loading, we TRY to set default location names
- if (shader.id > 0)
- {
- // Default shader attrib locations have been fixed before linking:
- // vertex position location = 0
- // vertex texcoord location = 1
- // vertex normal location = 2
- // vertex color location = 3
- // vertex tangent location = 4
- // vertex texcoord2 location = 5
+ shader = LoadShaderFromMemory(vShaderStr, fShaderStr);
- // NOTE: If any location is not found, loc point becomes -1
-
- // Get handles to GLSL input attibute locations
- shader.locs[SHADER_LOC_VERTEX_POSITION] = rlGetLocationAttrib(shader.id, DEFAULT_SHADER_ATTRIB_NAME_POSITION);
- shader.locs[SHADER_LOC_VERTEX_TEXCOORD01] = rlGetLocationAttrib(shader.id, DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD);
- shader.locs[SHADER_LOC_VERTEX_TEXCOORD02] = rlGetLocationAttrib(shader.id, DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2);
- shader.locs[SHADER_LOC_VERTEX_NORMAL] = rlGetLocationAttrib(shader.id, DEFAULT_SHADER_ATTRIB_NAME_NORMAL);
- shader.locs[SHADER_LOC_VERTEX_TANGENT] = rlGetLocationAttrib(shader.id, DEFAULT_SHADER_ATTRIB_NAME_TANGENT);
- shader.locs[SHADER_LOC_VERTEX_COLOR] = rlGetLocationAttrib(shader.id, DEFAULT_SHADER_ATTRIB_NAME_COLOR);
-
- // Get handles to GLSL uniform locations (vertex shader)
- shader.locs[SHADER_LOC_MATRIX_MVP] = rlGetLocationUniform(shader.id, "mvp");
- shader.locs[SHADER_LOC_MATRIX_VIEW] = rlGetLocationUniform(shader.id, "view");
- shader.locs[SHADER_LOC_MATRIX_PROJECTION] = rlGetLocationUniform(shader.id, "projection");
- shader.locs[SHADER_LOC_MATRIX_NORMAL] = rlGetLocationUniform(shader.id, "matNormal");
-
- // Get handles to GLSL uniform locations (fragment shader)
- shader.locs[SHADER_LOC_COLOR_DIFFUSE] = rlGetLocationUniform(shader.id, "colDiffuse");
- shader.locs[SHADER_LOC_MAP_DIFFUSE] = rlGetLocationUniform(shader.id, "texture0");
- shader.locs[SHADER_LOC_MAP_SPECULAR] = rlGetLocationUniform(shader.id, "texture1");
- shader.locs[SHADER_LOC_MAP_NORMAL] = rlGetLocationUniform(shader.id, "texture2");
- }
+ UnloadFileText(vShaderStr);
+ UnloadFileText(fShaderStr);
return shader;
}
@@ -2388,13 +2347,16 @@ RLAPI Shader LoadShaderFromMemory(const char *vsCode, const char *fsCode)
{
Shader shader = { 0 };
shader.locs = (int *)RL_CALLOC(MAX_SHADER_LOCATIONS, sizeof(int));
+
+ // NOTE: All locations must be reseted to -1 (no location)
+ for (int i = 0; i < MAX_SHADER_LOCATIONS; i++) shader.locs[i] = -1;
shader.id = rlLoadShaderCode(vsCode, fsCode);
// After shader loading, we TRY to set default location names
if (shader.id > 0)
{
- // Default shader attrib locations have been fixed before linking:
+ // Default shader attribute locations have been binded before linking:
// vertex position location = 0
// vertex texcoord location = 1
// vertex normal location = 2
@@ -2416,12 +2378,13 @@ RLAPI Shader LoadShaderFromMemory(const char *vsCode, const char *fsCode)
shader.locs[SHADER_LOC_MATRIX_MVP] = rlGetLocationUniform(shader.id, "mvp");
shader.locs[SHADER_LOC_MATRIX_VIEW] = rlGetLocationUniform(shader.id, "view");
shader.locs[SHADER_LOC_MATRIX_PROJECTION] = rlGetLocationUniform(shader.id, "projection");
+ //shader.locs[SHADER_LOC_MATRIX_MODEL] = rlGetLocationUniform(shader.id, "matModel");
shader.locs[SHADER_LOC_MATRIX_NORMAL] = rlGetLocationUniform(shader.id, "matNormal");
// Get handles to GLSL uniform locations (fragment shader)
shader.locs[SHADER_LOC_COLOR_DIFFUSE] = rlGetLocationUniform(shader.id, "colDiffuse");
- shader.locs[SHADER_LOC_MAP_DIFFUSE] = rlGetLocationUniform(shader.id, "texture0");
- shader.locs[SHADER_LOC_MAP_SPECULAR] = rlGetLocationUniform(shader.id, "texture1");
+ shader.locs[SHADER_LOC_MAP_DIFFUSE] = rlGetLocationUniform(shader.id, "texture0"); // SHADER_LOC_MAP_ALBEDO
+ shader.locs[SHADER_LOC_MAP_SPECULAR] = rlGetLocationUniform(shader.id, "texture1"); // SHADER_LOC_MAP_METALNESS
shader.locs[SHADER_LOC_MAP_NORMAL] = rlGetLocationUniform(shader.id, "texture2");
}
diff --git a/src/raylib.h b/src/raylib.h
index 6c4ab45e..210c36b8 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -734,32 +734,32 @@ typedef enum {
// Shader location index
typedef enum {
- SHADER_LOC_VERTEX_POSITION = 0, // Shader location point: position
- SHADER_LOC_VERTEX_TEXCOORD01, // Shader location point: texcoord01
- SHADER_LOC_VERTEX_TEXCOORD02, // Shader location point: texcoord02
- SHADER_LOC_VERTEX_NORMAL, // Shader location point: normal
- SHADER_LOC_VERTEX_TANGENT, // Shader location point: tangent
- SHADER_LOC_VERTEX_COLOR, // Shader location point: color
- SHADER_LOC_MATRIX_MVP, // Shader location point: model-view-projection matrix
- SHADER_LOC_MATRIX_VIEW, // Shader location point: view matrix
- SHADER_LOC_MATRIX_PROJECTION, // Shader location point: projection matrix
- SHADER_LOC_MATRIX_MODEL, // Shader location point: model matrix
- SHADER_LOC_MATRIX_NORMAL, // Shader location point: normal matrix
- SHADER_LOC_VECTOR_VIEW, // Shader location point: view vector
- SHADER_LOC_COLOR_DIFFUSE, // Shader location point: diffuse color
- SHADER_LOC_COLOR_SPECULAR, // Shader location point: specular color
- SHADER_LOC_COLOR_AMBIENT, // Shader location point: ambient color
- SHADER_LOC_MAP_ALBEDO, // Shader location point: albedo texture (same as: SHADER_LOC_MAP_DIFFUSE)
- SHADER_LOC_MAP_METALNESS, // Shader location point: metalness texture (same as: SHADER_LOC_MAP_SPECULAR)
- SHADER_LOC_MAP_NORMAL, // Shader location point: normal texture
- SHADER_LOC_MAP_ROUGHNESS, // Shader location point: roughness texture
- SHADER_LOC_MAP_OCCLUSION, // Shader location point: occlusion texture
- SHADER_LOC_MAP_EMISSION, // Shader location point: emission texture
- SHADER_LOC_MAP_HEIGHT, // Shader location point: height texture
- SHADER_LOC_MAP_CUBEMAP, // Shader location point: cubemap texture_cube_map
- SHADER_LOC_MAP_IRRADIANCE, // Shader location point: irradiance texture_cube_map
- SHADER_LOC_MAP_PREFILTER, // Shader location point: prefilter texture_cube_map
- SHADER_LOC_MAP_BRDF // Shader location point: brdf texture
+ SHADER_LOC_VERTEX_POSITION = 0, // Shader location: vertex attribute: position
+ SHADER_LOC_VERTEX_TEXCOORD01, // Shader location: vertex attribute: texcoord01
+ SHADER_LOC_VERTEX_TEXCOORD02, // Shader location: vertex attribute: texcoord02
+ SHADER_LOC_VERTEX_NORMAL, // Shader location: vertex attribute: normal
+ SHADER_LOC_VERTEX_TANGENT, // Shader location: vertex attribute: tangent
+ SHADER_LOC_VERTEX_COLOR, // Shader location: vertex attribute: color
+ SHADER_LOC_MATRIX_MVP, // Shader location: matrix uniform: model-view-projection
+ SHADER_LOC_MATRIX_VIEW, // Shader location: matrix uniform: view (camera transform)
+ SHADER_LOC_MATRIX_PROJECTION, // Shader location: matrix uniform: projection
+ SHADER_LOC_MATRIX_MODEL, // Shader location: matrix uniform: model (transform)
+ SHADER_LOC_MATRIX_NORMAL, // Shader location: matrix uniform: normal
+ SHADER_LOC_VECTOR_VIEW, // Shader location: vector uniform: view
+ SHADER_LOC_COLOR_DIFFUSE, // Shader location: vector uniform: diffuse color
+ SHADER_LOC_COLOR_SPECULAR, // Shader location: vector uniform: specular color
+ SHADER_LOC_COLOR_AMBIENT, // Shader location: vector uniform: ambient color
+ SHADER_LOC_MAP_ALBEDO, // Shader location: sampler2d texture: albedo (same as: SHADER_LOC_MAP_DIFFUSE)
+ SHADER_LOC_MAP_METALNESS, // Shader location: sampler2d texture: metalness (same as: SHADER_LOC_MAP_SPECULAR)
+ SHADER_LOC_MAP_NORMAL, // Shader location: sampler2d texture: normal
+ SHADER_LOC_MAP_ROUGHNESS, // Shader location: sampler2d texture: roughness
+ SHADER_LOC_MAP_OCCLUSION, // Shader location: sampler2d texture: occlusion
+ SHADER_LOC_MAP_EMISSION, // Shader location: sampler2d texture: emission
+ SHADER_LOC_MAP_HEIGHT, // Shader location: sampler2d texture: height
+ SHADER_LOC_MAP_CUBEMAP, // Shader location: samplerCube texture: cubemap
+ SHADER_LOC_MAP_IRRADIANCE, // Shader location: samplerCube texture: irradiance
+ SHADER_LOC_MAP_PREFILTER, // Shader location: samplerCube texture: prefilter
+ SHADER_LOC_MAP_BRDF // Shader location: sampler2d texture: brdf
} ShaderLocationIndex;
#define SHADER_LOC_MAP_DIFFUSE SHADER_LOC_MAP_ALBEDO
diff --git a/src/rlgl.h b/src/rlgl.h
index 662ec834..fcee91fd 100644
--- a/src/rlgl.h
+++ b/src/rlgl.h
@@ -383,32 +383,32 @@ typedef struct RenderBatch {
// Shader location point type
typedef enum {
- SHADER_LOC_VERTEX_POSITION = 0, // Shader location point: position
- SHADER_LOC_VERTEX_TEXCOORD01, // Shader location point: texcoord01
- SHADER_LOC_VERTEX_TEXCOORD02, // Shader location point: texcoord02
- SHADER_LOC_VERTEX_NORMAL, // Shader location point: normal
- SHADER_LOC_VERTEX_TANGENT, // Shader location point: tangent
- SHADER_LOC_VERTEX_COLOR, // Shader location point: color
- SHADER_LOC_MATRIX_MVP, // Shader location point: model-view-projection matrix
- SHADER_LOC_MATRIX_VIEW, // Shader location point: view matrix
- SHADER_LOC_MATRIX_PROJECTION, // Shader location point: projection matrix
- SHADER_LOC_MATRIX_MODEL, // Shader location point: model matrix
- SHADER_LOC_MATRIX_NORMAL, // Shader location point: normal matrix
- SHADER_LOC_VECTOR_VIEW, // Shader location point: view vector
- SHADER_LOC_COLOR_DIFFUSE, // Shader location point: diffuse color
- SHADER_LOC_COLOR_SPECULAR, // Shader location point: specular color
- SHADER_LOC_COLOR_AMBIENT, // Shader location point: ambient color
- SHADER_LOC_MAP_ALBEDO, // Shader location point: albedo texture (same as: SHADER_LOC_MAP_DIFFUSE)
- SHADER_LOC_MAP_METALNESS, // Shader location point: metalness texture (same as: SHADER_LOC_MAP_SPECULAR)
- SHADER_LOC_MAP_NORMAL, // Shader location point: normal texture
- SHADER_LOC_MAP_ROUGHNESS, // Shader location point: roughness texture
- SHADER_LOC_MAP_OCCLUSION, // Shader location point: occlusion texture
- SHADER_LOC_MAP_EMISSION, // Shader location point: emission texture
- SHADER_LOC_MAP_HEIGHT, // Shader location point: height texture
- SHADER_LOC_MAP_CUBEMAP, // Shader location point: cubemap texture_cube_map
- SHADER_LOC_MAP_IRRADIANCE, // Shader location point: irradiance texture_cube_map
- SHADER_LOC_MAP_PREFILTER, // Shader location point: prefilter texture_cube_map
- SHADER_LOC_MAP_BRDF // Shader location point: brdf texture
+ SHADER_LOC_VERTEX_POSITION = 0, // Shader location: vertex attribute: position
+ SHADER_LOC_VERTEX_TEXCOORD01, // Shader location: vertex attribute: texcoord01
+ SHADER_LOC_VERTEX_TEXCOORD02, // Shader location: vertex attribute: texcoord02
+ SHADER_LOC_VERTEX_NORMAL, // Shader location: vertex attribute: normal
+ SHADER_LOC_VERTEX_TANGENT, // Shader location: vertex attribute: tangent
+ SHADER_LOC_VERTEX_COLOR, // Shader location: vertex attribute: color
+ SHADER_LOC_MATRIX_MVP, // Shader location: matrix uniform: model-view-projection
+ SHADER_LOC_MATRIX_VIEW, // Shader location: matrix uniform: view (camera transform)
+ SHADER_LOC_MATRIX_PROJECTION, // Shader location: matrix uniform: projection
+ SHADER_LOC_MATRIX_MODEL, // Shader location: matrix uniform: model (transform)
+ SHADER_LOC_MATRIX_NORMAL, // Shader location: matrix uniform: normal
+ SHADER_LOC_VECTOR_VIEW, // Shader location: vector uniform: view
+ SHADER_LOC_COLOR_DIFFUSE, // Shader location: vector uniform: diffuse color
+ SHADER_LOC_COLOR_SPECULAR, // Shader location: vector uniform: specular color
+ SHADER_LOC_COLOR_AMBIENT, // Shader location: vector uniform: ambient color
+ SHADER_LOC_MAP_ALBEDO, // Shader location: sampler2d texture: albedo (same as: SHADER_LOC_MAP_DIFFUSE)
+ SHADER_LOC_MAP_METALNESS, // Shader location: sampler2d texture: metalness (same as: SHADER_LOC_MAP_SPECULAR)
+ SHADER_LOC_MAP_NORMAL, // Shader location: sampler2d texture: normal
+ SHADER_LOC_MAP_ROUGHNESS, // Shader location: sampler2d texture: roughness
+ SHADER_LOC_MAP_OCCLUSION, // Shader location: sampler2d texture: occlusion
+ SHADER_LOC_MAP_EMISSION, // Shader location: sampler2d texture: emission
+ SHADER_LOC_MAP_HEIGHT, // Shader location: sampler2d texture: height
+ SHADER_LOC_MAP_CUBEMAP, // Shader location: samplerCube texture: cubemap
+ SHADER_LOC_MAP_IRRADIANCE, // Shader location: samplerCube texture: irradiance
+ SHADER_LOC_MAP_PREFILTER, // Shader location: samplerCube texture: prefilter
+ SHADER_LOC_MAP_BRDF // Shader location: sampler2d texture: brdf
} ShaderLocationIndex;
#define SHADER_LOC_MAP_DIFFUSE SHADER_LOC_MAP_ALBEDO