summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRay <[email protected]>2021-06-25 13:35:43 +0200
committerRay <[email protected]>2021-06-25 13:35:43 +0200
commite0720a0a5577cfb69ecb34fb4bd89e59f40f6b29 (patch)
tree57779983514bb66665ab497339c6348143b5ee3f
parentd4c03b47ec625c2de723ef686d8ec306a1784ec1 (diff)
downloadraylib-e0720a0a5577cfb69ecb34fb4bd89e59f40f6b29.tar.gz
raylib-e0720a0a5577cfb69ecb34fb4bd89e59f40f6b29.zip
WARNING: REVIEWED: Default shader uniform names
When a shader is loaded, by default, several locations are tried to be set automatically.
-rw-r--r--examples/models/resources/shaders/glsl100/cubemap.vs6
-rw-r--r--examples/models/resources/shaders/glsl100/skybox.vs10
-rw-r--r--examples/models/resources/shaders/glsl330/cubemap.vs6
-rw-r--r--examples/models/resources/shaders/glsl330/skybox.vs10
-rw-r--r--src/config.h23
-rw-r--r--src/core.c18
-rw-r--r--src/rlgl.h40
7 files changed, 76 insertions, 37 deletions
diff --git a/examples/models/resources/shaders/glsl100/cubemap.vs b/examples/models/resources/shaders/glsl100/cubemap.vs
index fd8d17e1..6f486fba 100644
--- a/examples/models/resources/shaders/glsl100/cubemap.vs
+++ b/examples/models/resources/shaders/glsl100/cubemap.vs
@@ -4,8 +4,8 @@
attribute vec3 vertexPosition;
// Input uniform values
-uniform mat4 projection;
-uniform mat4 view;
+uniform mat4 matProjection;
+uniform mat4 matView;
// Output vertex attributes (to fragment shader)
varying vec3 fragPosition;
@@ -16,5 +16,5 @@ void main()
fragPosition = vertexPosition;
// Calculate final vertex position
- gl_Position = projection*view*vec4(vertexPosition, 1.0);
+ gl_Position = matProjection*matView*vec4(vertexPosition, 1.0);
}
diff --git a/examples/models/resources/shaders/glsl100/skybox.vs b/examples/models/resources/shaders/glsl100/skybox.vs
index 0d00d54f..e440ace3 100644
--- a/examples/models/resources/shaders/glsl100/skybox.vs
+++ b/examples/models/resources/shaders/glsl100/skybox.vs
@@ -4,8 +4,8 @@
attribute vec3 vertexPosition;
// Input uniform values
-uniform mat4 projection;
-uniform mat4 view;
+uniform mat4 matProjection;
+uniform mat4 matView;
// Output vertex attributes (to fragment shader)
varying vec3 fragPosition;
@@ -16,9 +16,9 @@ void main()
fragPosition = vertexPosition;
// Remove translation from the view matrix
- mat4 rotView = mat4(mat3(view));
- vec4 clipPos = projection*rotView*vec4(vertexPosition, 1.0);
+ mat4 rotView = mat4(mat3(matView));
+ vec4 clipPos = matProjection*rotView*vec4(vertexPosition, 1.0);
// Calculate final vertex position
- gl_Position = clipPos.xyzw;
+ gl_Position = clipPos;
}
diff --git a/examples/models/resources/shaders/glsl330/cubemap.vs b/examples/models/resources/shaders/glsl330/cubemap.vs
index d3565dfd..d71f8086 100644
--- a/examples/models/resources/shaders/glsl330/cubemap.vs
+++ b/examples/models/resources/shaders/glsl330/cubemap.vs
@@ -4,8 +4,8 @@
in vec3 vertexPosition;
// Input uniform values
-uniform mat4 projection;
-uniform mat4 view;
+uniform mat4 matProjection;
+uniform mat4 matView;
// Output vertex attributes (to fragment shader)
out vec3 fragPosition;
@@ -16,5 +16,5 @@ void main()
fragPosition = vertexPosition;
// Calculate final vertex position
- gl_Position = projection*view*vec4(vertexPosition, 1.0);
+ gl_Position = matProjection*matView*vec4(vertexPosition, 1.0);
}
diff --git a/examples/models/resources/shaders/glsl330/skybox.vs b/examples/models/resources/shaders/glsl330/skybox.vs
index 6279bc49..f41d4692 100644
--- a/examples/models/resources/shaders/glsl330/skybox.vs
+++ b/examples/models/resources/shaders/glsl330/skybox.vs
@@ -4,8 +4,8 @@
in vec3 vertexPosition;
// Input uniform values
-uniform mat4 projection;
-uniform mat4 view;
+uniform mat4 matProjection;
+uniform mat4 matView;
// Output vertex attributes (to fragment shader)
out vec3 fragPosition;
@@ -16,9 +16,9 @@ void main()
fragPosition = vertexPosition;
// Remove translation from the view matrix
- mat4 rotView = mat4(mat3(view));
- vec4 clipPos = projection*rotView*vec4(vertexPosition, 1.0);
+ mat4 rotView = mat4(mat3(matView));
+ vec4 clipPos = matProjection*rotView*vec4(vertexPosition, 1.0);
// Calculate final vertex position
- gl_Position = clipPos.xyzw;
+ gl_Position = clipPos;
}
diff --git a/src/config.h b/src/config.h
index 6479d409..4a74655c 100644
--- a/src/config.h
+++ b/src/config.h
@@ -105,12 +105,23 @@
#define RL_CULL_DISTANCE_FAR 1000.0 // Default projection matrix far cull distance
// Default shader vertex attribute names to set location points
-#define DEFAULT_SHADER_ATTRIB_NAME_POSITION "vertexPosition" // Binded by default to shader location: 0
-#define DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD "vertexTexCoord" // Binded by default to shader location: 1
-#define DEFAULT_SHADER_ATTRIB_NAME_NORMAL "vertexNormal" // Binded by default to shader location: 2
-#define DEFAULT_SHADER_ATTRIB_NAME_COLOR "vertexColor" // Binded by default to shader location: 3
-#define DEFAULT_SHADER_ATTRIB_NAME_TANGENT "vertexTangent" // Binded by default to shader location: 4
-#define DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2 "vertexTexCoord2" // Binded by default to shader location: 5
+// NOTE: When a new shader is loaded, the following locations are tried to be set for convenience
+#define DEFAULT_SHADER_ATTRIB_NAME_POSITION "vertexPosition" // Binded by default to shader location: 0
+#define DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD "vertexTexCoord" // Binded by default to shader location: 1
+#define DEFAULT_SHADER_ATTRIB_NAME_NORMAL "vertexNormal" // Binded by default to shader location: 2
+#define DEFAULT_SHADER_ATTRIB_NAME_COLOR "vertexColor" // Binded by default to shader location: 3
+#define DEFAULT_SHADER_ATTRIB_NAME_TANGENT "vertexTangent" // Binded by default to shader location: 4
+#define DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2 "vertexTexCoord2" // Binded by default to shader location: 5
+
+#define DEFAULT_SHADER_UNIFORM_NAME_MVP "mvp" // model-view-projection matrix
+#define DEFAULT_SHADER_UNIFORM_NAME_VIEW "matView" // view matrix
+#define DEFAULT_SHADER_UNIFORM_NAME_PROJECTION "matProjection" // projection matrix
+#define DEFAULT_SHADER_UNIFORM_NAME_MODEL "matModel" // model matrix
+#define DEFAULT_SHADER_UNIFORM_NAME_NORMAL "matNormal" // normal matrix (transpose(inverse(matModelView))
+#define DEFAULT_SHADER_UNIFORM_NAME_COLOR "colDiffuse" // color diffuse (base tint color, multiplied by texture color)
+#define DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE0 "texture0" // texture0 (texture slot active 0)
+#define DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE1 "texture1" // texture1 (texture slot active 1)
+#define DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE2 "texture2" // texture2 (texture slot active 2)
//------------------------------------------------------------------------------------
diff --git a/src/core.c b/src/core.c
index fc38203e..a456fab2 100644
--- a/src/core.c
+++ b/src/core.c
@@ -2375,17 +2375,17 @@ RLAPI Shader LoadShaderFromMemory(const char *vsCode, const char *fsCode)
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_MODEL] = rlGetLocationUniform(shader.id, "matModel");
- shader.locs[SHADER_LOC_MATRIX_NORMAL] = rlGetLocationUniform(shader.id, "matNormal");
+ shader.locs[SHADER_LOC_MATRIX_MVP] = rlGetLocationUniform(shader.id, DEFAULT_SHADER_UNIFORM_NAME_MVP);
+ shader.locs[SHADER_LOC_MATRIX_VIEW] = rlGetLocationUniform(shader.id, DEFAULT_SHADER_UNIFORM_NAME_VIEW);
+ shader.locs[SHADER_LOC_MATRIX_PROJECTION] = rlGetLocationUniform(shader.id, DEFAULT_SHADER_UNIFORM_NAME_PROJECTION);
+ shader.locs[SHADER_LOC_MATRIX_MODEL] = rlGetLocationUniform(shader.id, DEFAULT_SHADER_UNIFORM_NAME_MODEL);
+ shader.locs[SHADER_LOC_MATRIX_NORMAL] = rlGetLocationUniform(shader.id, DEFAULT_SHADER_UNIFORM_NAME_NORMAL);
// 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_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");
+ shader.locs[SHADER_LOC_COLOR_DIFFUSE] = rlGetLocationUniform(shader.id, DEFAULT_SHADER_UNIFORM_NAME_COLOR);
+ shader.locs[SHADER_LOC_MAP_DIFFUSE] = rlGetLocationUniform(shader.id, DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE0); // SHADER_LOC_MAP_ALBEDO
+ shader.locs[SHADER_LOC_MAP_SPECULAR] = rlGetLocationUniform(shader.id, DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE1); // SHADER_LOC_MAP_METALNESS
+ shader.locs[SHADER_LOC_MAP_NORMAL] = rlGetLocationUniform(shader.id, DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE2);
}
return shader;
diff --git a/src/rlgl.h b/src/rlgl.h
index fcee91fd..5d37e9a1 100644
--- a/src/rlgl.h
+++ b/src/rlgl.h
@@ -762,22 +762,50 @@ RLAPI void rlLoadDrawQuad(void); // Load and draw a quad
// Default shader vertex attribute names to set location points
#ifndef DEFAULT_SHADER_ATTRIB_NAME_POSITION
- #define DEFAULT_SHADER_ATTRIB_NAME_POSITION "vertexPosition" // Binded by default to shader location: 0
+ #define DEFAULT_SHADER_ATTRIB_NAME_POSITION "vertexPosition" // Binded by default to shader location: 0
#endif
#ifndef DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD
- #define DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD "vertexTexCoord" // Binded by default to shader location: 1
+ #define DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD "vertexTexCoord" // Binded by default to shader location: 1
#endif
#ifndef DEFAULT_SHADER_ATTRIB_NAME_NORMAL
- #define DEFAULT_SHADER_ATTRIB_NAME_NORMAL "vertexNormal" // Binded by default to shader location: 2
+ #define DEFAULT_SHADER_ATTRIB_NAME_NORMAL "vertexNormal" // Binded by default to shader location: 2
#endif
#ifndef DEFAULT_SHADER_ATTRIB_NAME_COLOR
- #define DEFAULT_SHADER_ATTRIB_NAME_COLOR "vertexColor" // Binded by default to shader location: 3
+ #define DEFAULT_SHADER_ATTRIB_NAME_COLOR "vertexColor" // Binded by default to shader location: 3
#endif
#ifndef DEFAULT_SHADER_ATTRIB_NAME_TANGENT
- #define DEFAULT_SHADER_ATTRIB_NAME_TANGENT "vertexTangent" // Binded by default to shader location: 4
+ #define DEFAULT_SHADER_ATTRIB_NAME_TANGENT "vertexTangent" // Binded by default to shader location: 4
#endif
#ifndef DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2
- #define DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2 "vertexTexCoord2" // Binded by default to shader location: 5
+ #define DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2 "vertexTexCoord2" // Binded by default to shader location: 5
+#endif
+
+#ifndef DEFAULT_SHADER_UNIFORM_NAME_MVP
+ #define DEFAULT_SHADER_UNIFORM_NAME_MVP "mvp" // model-view-projection matrix
+#endif
+#ifndef DEFAULT_SHADER_UNIFORM_NAME_VIEW
+ #define DEFAULT_SHADER_UNIFORM_NAME_VIEW "matView" // view matrix
+#endif
+#ifndef DEFAULT_SHADER_UNIFORM_NAME_PROJECTION
+ #define DEFAULT_SHADER_UNIFORM_NAME_PROJECTION "matProjection" // projection matrix
+#endif
+#ifndef DEFAULT_SHADER_UNIFORM_NAME_MODEL
+ #define DEFAULT_SHADER_UNIFORM_NAME_MODEL "matModel" // model matrix
+#endif
+#ifndef DEFAULT_SHADER_UNIFORM_NAME_NORMAL
+ #define DEFAULT_SHADER_UNIFORM_NAME_NORMAL "matNormal" // normal matrix (transpose(inverse(matModelView))
+#endif
+#ifndef DEFAULT_SHADER_UNIFORM_NAME_COLOR
+ #define DEFAULT_SHADER_UNIFORM_NAME_COLOR "colDiffuse" // color diffuse (base tint color, multiplied by texture color)
+#endif
+#ifndef DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE0
+ #define DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE0 "texture0" // texture0 (texture slot active 0)
+#endif
+#ifndef DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE1
+ #define DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE1 "texture1" // texture1 (texture slot active 1)
+#endif
+#ifndef DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE2
+ #define DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE2 "texture2" // texture2 (texture slot active 2)
#endif
//----------------------------------------------------------------------------------