diff options
| author | Ray <raysan5@gmail.com> | 2019-01-09 17:01:59 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-01-09 17:01:59 +0100 |
| commit | 35bcbd1b603f77d9686e24f04a72d9300a7b338d (patch) | |
| tree | e459baa3c2e966c5717821625632865216d34d4e /src | |
| parent | df54e73b21bbdbf27bbf8c7ee9841a8a7af11375 (diff) | |
| parent | 0c5bee4c9addc20b8b3c443820764854c63f76d7 (diff) | |
| download | raylib-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.h | 2 | ||||
| -rw-r--r-- | src/rlgl.h | 42 |
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) @@ -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 } |
