aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRay <raysan5@gmail.com>2019-01-09 17:01:59 +0100
committerGitHub <noreply@github.com>2019-01-09 17:01:59 +0100
commit35bcbd1b603f77d9686e24f04a72d9300a7b338d (patch)
treee459baa3c2e966c5717821625632865216d34d4e /src
parentdf54e73b21bbdbf27bbf8c7ee9841a8a7af11375 (diff)
parent0c5bee4c9addc20b8b3c443820764854c63f76d7 (diff)
downloadraylib-35bcbd1b603f77d9686e24f04a72d9300a7b338d.tar.gz
raylib-35bcbd1b603f77d9686e24f04a72d9300a7b338d.zip
Merge pull request #718 from MarcoLizza/shaders-uniforms-array
Shaders uniforms array
Diffstat (limited to 'src')
-rw-r--r--src/raylib.h2
-rw-r--r--src/rlgl.h42
2 files changed, 30 insertions, 14 deletions
diff --git a/src/raylib.h b/src/raylib.h
index 6d4b08d0..275a3b63 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -1231,6 +1231,8 @@ RLAPI Texture2D GetTextureDefault(void); // Get
RLAPI int GetShaderLocation(Shader shader, const char *uniformName); // Get shader uniform location
RLAPI void SetShaderValue(Shader shader, int uniformLoc, const float *value, int size); // Set shader uniform value (float)
RLAPI void SetShaderValuei(Shader shader, int uniformLoc, const int *value, int size); // Set shader uniform value (int)
+RLAPI void SetShaderValueArray(Shader shader, int uniformLoc, const float *value, int size, int count); // Set shader uniform value (array of float/vec2/vec3/vec4)
+RLAPI void SetShaderValueArrayi(Shader shader, int uniformLoc, const int *value, int size, int count); // Set shader uniform value (array of int/ivec2/ivec3/ivec4)
RLAPI void SetShaderValueMatrix(Shader shader, int uniformLoc, Matrix mat); // Set shader uniform value (matrix 4x4)
RLAPI void SetMatrixProjection(Matrix proj); // Set a custom projection matrix (replaces internal projection matrix)
RLAPI void SetMatrixModelview(Matrix view); // Set a custom modelview matrix (replaces internal modelview matrix)
diff --git a/src/rlgl.h b/src/rlgl.h
index 384f00f7..07f18f0f 100644
--- a/src/rlgl.h
+++ b/src/rlgl.h
@@ -470,6 +470,8 @@ Texture2D GetTextureDefault(void); // Get defau
int GetShaderLocation(Shader shader, const char *uniformName); // Get shader uniform location
void SetShaderValue(Shader shader, int uniformLoc, const float *value, int size); // Set shader uniform value (float)
void SetShaderValuei(Shader shader, int uniformLoc, const int *value, int size); // Set shader uniform value (int)
+void SetShaderValueArray(Shader shader, int uniformLoc, const float *value, int size, int count); // Set shader uniform value (array of float/vec2/vec3/vec4)
+void SetShaderValueArrayi(Shader shader, int uniformLoc, const int *value, int size, int count); // Set shader uniform value (array of int/ivec2/ivec3/ivec4)
void SetShaderValueMatrix(Shader shader, int uniformLoc, Matrix mat); // Set shader uniform value (matrix 4x4)
void SetMatrixProjection(Matrix proj); // Set a custom projection matrix (replaces internal projection matrix)
void SetMatrixModelview(Matrix view); // Set a custom modelview matrix (replaces internal modelview matrix)
@@ -2891,35 +2893,47 @@ int GetShaderLocation(Shader shader, const char *uniformName)
return location;
}
-// Set shader uniform value (float)
+// Set shader uniform value (float/vec2/vec3/vec4)
void SetShaderValue(Shader shader, int uniformLoc, const float *value, int size)
{
+ SetShaderValueArray(shader, uniformLoc, value, size, 1);
+}
+
+// Set shader uniform value (int/ivec2/ivec3/ivec4)
+void SetShaderValuei(Shader shader, int uniformLoc, const int *value, int size)
+{
+ SetShaderValueArrayi(shader, uniformLoc, value, size, 1);
+}
+
+// Set shader uniform value (array of float/vec2/vec3/vec4)
+void SetShaderValueArray(Shader shader, int uniformLoc, const float *value, int size, int count)
+{
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
glUseProgram(shader.id);
- if (size == 1) glUniform1fv(uniformLoc, 1, value); // Shader uniform type: float
- else if (size == 2) glUniform2fv(uniformLoc, 1, value); // Shader uniform type: vec2
- else if (size == 3) glUniform3fv(uniformLoc, 1, value); // Shader uniform type: vec3
- else if (size == 4) glUniform4fv(uniformLoc, 1, value); // Shader uniform type: vec4
- else TraceLog(LOG_WARNING, "Shader value float array size not supported");
+ if (size == 1) glUniform1fv(uniformLoc, count, value); // Shader uniform type: float[]
+ else if (size == 2) glUniform2fv(uniformLoc, count, value); // Shader uniform type: vec2[]
+ else if (size == 3) glUniform3fv(uniformLoc, count, value); // Shader uniform type: vec3[]
+ else if (size == 4) glUniform4fv(uniformLoc, count, value); // Shader uniform type: vec4[]
+ else TraceLog(LOG_WARNING, "Wrong size for shader's uniform value (1 to 4 supported)");
//glUseProgram(0); // Avoid reseting current shader program, in case other uniforms are set
#endif
}
-// Set shader uniform value (int)
-void SetShaderValuei(Shader shader, int uniformLoc, const int *value, int size)
+// Set shader uniform value (array of int/ivec2/ivec3/ivec4)
+void SetShaderValueArrayi(Shader shader, int uniformLoc, const int *value, int size, int count)
{
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
glUseProgram(shader.id);
- if (size == 1) glUniform1iv(uniformLoc, 1, value); // Shader uniform type: int
- else if (size == 2) glUniform2iv(uniformLoc, 1, value); // Shader uniform type: ivec2
- else if (size == 3) glUniform3iv(uniformLoc, 1, value); // Shader uniform type: ivec3
- else if (size == 4) glUniform4iv(uniformLoc, 1, value); // Shader uniform type: ivec4
- else TraceLog(LOG_WARNING, "Shader value int array size not supported");
+ if (size == 1) glUniform1iv(uniformLoc, count, value); // Shader uniform type: int[]
+ else if (size == 2) glUniform2iv(uniformLoc, count, value); // Shader uniform type: ivec2[]
+ else if (size == 3) glUniform3iv(uniformLoc, count, value); // Shader uniform type: ivec3[]
+ else if (size == 4) glUniform4iv(uniformLoc, count, value); // Shader uniform type: ivec4[]
+ else TraceLog(LOG_WARNING, "Wrong size for shader's uniform value (1 to 4 supported)");
- //glUseProgram(0);
+ //glUseProgram(0); // Avoid reseting current shader program, in case other uniforms are set
#endif
}