|
@ -1295,9 +1295,10 @@ void rlglDraw(void) |
|
|
if ((lines.vCounter > 0) || (triangles.vCounter > 0) || (quads.vCounter > 0)) |
|
|
if ((lines.vCounter > 0) || (triangles.vCounter > 0) || (quads.vCounter > 0)) |
|
|
{ |
|
|
{ |
|
|
glUseProgram(currentShader.id); |
|
|
glUseProgram(currentShader.id); |
|
|
|
|
|
|
|
|
|
|
|
Matrix matMVP = MatrixMultiply(modelview, projection); // Create modelview-projection matrix |
|
|
|
|
|
|
|
|
glUniformMatrix4fv(currentShader.projectionLoc, 1, false, MatrixToFloat(projection)); |
|
|
|
|
|
glUniformMatrix4fv(currentShader.modelviewLoc, 1, false, MatrixToFloat(modelview)); |
|
|
|
|
|
|
|
|
glUniformMatrix4fv(currentShader.mvpLoc, 1, false, MatrixToFloat(matMVP)); |
|
|
glUniform1i(currentShader.mapDiffuseLoc, 0); |
|
|
glUniform1i(currentShader.mapDiffuseLoc, 0); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -1520,14 +1521,14 @@ void rlglDrawModel(Model model, Vector3 position, float rotationAngle, Vector3 r |
|
|
Matrix matModelView = MatrixMultiply(matModel, matView); // Transform to camera-space coordinates |
|
|
Matrix matModelView = MatrixMultiply(matModel, matView); // Transform to camera-space coordinates |
|
|
|
|
|
|
|
|
// Calculate model-view-projection matrix (MVP) |
|
|
// Calculate model-view-projection matrix (MVP) |
|
|
o">//Matrix matMVP = MatrixMultiply(matModelView, matProjection); // Transform to screen-space coordinates |
|
|
|
|
|
|
|
|
Matrix matMVP = MatrixMultiply(matModelView, matProjection); // Transform to screen-space coordinates |
|
|
|
|
|
|
|
|
// NOTE: Drawing in OpenGL 3.3+, matrices are passed to shader |
|
|
// NOTE: Drawing in OpenGL 3.3+, matrices are passed to shader |
|
|
// TODO: Reduce number of matrices passed to shaders, use only matMVP |
|
|
// TODO: Reduce number of matrices passed to shaders, use only matMVP |
|
|
glUniformMatrix4fv(model.shader.modelLoc, 1, false, MatrixToFloat(matModel)); |
|
|
glUniformMatrix4fv(model.shader.modelLoc, 1, false, MatrixToFloat(matModel)); |
|
|
glUniformMatrix4fv(model.shader.viewLoc, 1, false, MatrixToFloat(matView)); |
|
|
glUniformMatrix4fv(model.shader.viewLoc, 1, false, MatrixToFloat(matView)); |
|
|
glUniformMatrix4fv(model.shader.projectionLoc, 1, false, MatrixToFloat(matProjection)); |
|
|
|
|
|
glUniformMatrix4fv(model.shader.modelviewLoc, 1, false, MatrixToFloat(matModelView)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
glUniformMatrix4fv(model.shader.mvpLoc, 1, false, MatrixToFloat(matMVP)); |
|
|
|
|
|
|
|
|
// Apply color tinting to model |
|
|
// Apply color tinting to model |
|
|
// NOTE: Just update one uniform on fragment shader |
|
|
// NOTE: Just update one uniform on fragment shader |
|
@ -2247,13 +2248,13 @@ Shader LoadShader(char *vsFileName, char *fsFileName) |
|
|
shader.colorLoc = -1; |
|
|
shader.colorLoc = -1; |
|
|
|
|
|
|
|
|
// Get handles to GLSL uniform locations (vertex shader) |
|
|
// Get handles to GLSL uniform locations (vertex shader) |
|
|
shader.modelviewLoc = glGetUniformLocation(shader.id, "modelviewMatrix"); |
|
|
|
|
|
|
|
|
shader.mvpLoc = glGetUniformLocation(shader.id, "mvpMatrix"); |
|
|
|
|
|
|
|
|
shader.modelLoc = glGetUniformLocation(shader.id, "modelMatrix"); |
|
|
shader.modelLoc = glGetUniformLocation(shader.id, "modelMatrix"); |
|
|
shader.viewLoc = glGetUniformLocation(shader.id, "viewMatrix"); |
|
|
shader.viewLoc = glGetUniformLocation(shader.id, "viewMatrix"); |
|
|
shader.projectionLoc = glGetUniformLocation(shader.id, "projectionMatrix"); |
|
|
|
|
|
|
|
|
|
|
|
// Get handles to GLSL uniform locations (fragment shader) |
|
|
// Get handles to GLSL uniform locations (fragment shader) |
|
|
shader.tintColorLoc = glGetUniformLocation(shader.id, "tintColor"); |
|
|
|
|
|
|
|
|
shader.tintColorLoc = glGetUniformLocation(shader.id, "fragTintColor"); |
|
|
shader.mapDiffuseLoc = glGetUniformLocation(shader.id, "texture0"); |
|
|
shader.mapDiffuseLoc = glGetUniformLocation(shader.id, "texture0"); |
|
|
shader.mapNormalLoc = -1; // It can be set later |
|
|
shader.mapNormalLoc = -1; // It can be set later |
|
|
shader.mapSpecularLoc = -1; // It can be set later |
|
|
shader.mapSpecularLoc = -1; // It can be set later |
|
@ -2738,40 +2739,39 @@ static Shader LoadDefaultShader(void) |
|
|
"in vec2 vertexTexCoord; \n" |
|
|
"in vec2 vertexTexCoord; \n" |
|
|
"in vec4 vertexColor; \n" |
|
|
"in vec4 vertexColor; \n" |
|
|
"out vec2 fragTexCoord; \n" |
|
|
"out vec2 fragTexCoord; \n" |
|
|
"out vec4 tintColor; \n" |
|
|
|
|
|
|
|
|
"out vec4 fragTintColor; \n" |
|
|
#elif defined(GRAPHICS_API_OPENGL_ES2) |
|
|
#elif defined(GRAPHICS_API_OPENGL_ES2) |
|
|
char vShaderStr[] = "#version 100 \n" |
|
|
char vShaderStr[] = "#version 100 \n" |
|
|
"attribute vec3 vertexPosition; \n" |
|
|
"attribute vec3 vertexPosition; \n" |
|
|
"attribute vec2 vertexTexCoord; \n" |
|
|
"attribute vec2 vertexTexCoord; \n" |
|
|
"attribute vec4 vertexColor; \n" |
|
|
"attribute vec4 vertexColor; \n" |
|
|
"varying vec2 fragTexCoord; \n" |
|
|
"varying vec2 fragTexCoord; \n" |
|
|
"varying vec4 tintColor; \n" |
|
|
|
|
|
|
|
|
"varying vec4 fragTintColor; \n" |
|
|
#endif |
|
|
#endif |
|
|
"uniform mat4 projectionMatrix; \n" |
|
|
|
|
|
"uniform mat4 modelviewMatrix; \n" |
|
|
|
|
|
|
|
|
"uniform mat4 mvpMatrix; \n" |
|
|
"void main() \n" |
|
|
"void main() \n" |
|
|
"{ \n" |
|
|
"{ \n" |
|
|
" fragTexCoord = vertexTexCoord; \n" |
|
|
" fragTexCoord = vertexTexCoord; \n" |
|
|
" tintColor = vertexColor; \n" |
|
|
|
|
|
" gl_Position = projectionMatrix*modelviewMatrix*vec4(vertexPosition, 1.0); \n" |
|
|
|
|
|
|
|
|
" fragTintColor = vertexColor; \n" |
|
|
|
|
|
" gl_Position = mvpMatrix*vec4(vertexPosition, 1.0); \n" |
|
|
"} \n"; |
|
|
"} \n"; |
|
|
|
|
|
|
|
|
// Fragment shader directly defined, no external file required |
|
|
// Fragment shader directly defined, no external file required |
|
|
#if defined(GRAPHICS_API_OPENGL_33) |
|
|
#if defined(GRAPHICS_API_OPENGL_33) |
|
|
char fShaderStr[] = "#version 330 \n" |
|
|
char fShaderStr[] = "#version 330 \n" |
|
|
"in vec2 fragTexCoord; \n" |
|
|
"in vec2 fragTexCoord; \n" |
|
|
"in vec4 tintColor; \n" |
|
|
|
|
|
|
|
|
"in vec4 fragTintColor; \n" |
|
|
#elif defined(GRAPHICS_API_OPENGL_ES2) |
|
|
#elif defined(GRAPHICS_API_OPENGL_ES2) |
|
|
char fShaderStr[] = "#version 100 \n" |
|
|
char fShaderStr[] = "#version 100 \n" |
|
|
"precision mediump float; \n" // precision required for OpenGL ES2 (WebGL) |
|
|
"precision mediump float; \n" // precision required for OpenGL ES2 (WebGL) |
|
|
"varying vec2 fragTexCoord; \n" |
|
|
"varying vec2 fragTexCoord; \n" |
|
|
"varying vec4 tintColor; \n" |
|
|
|
|
|
|
|
|
"varying vec4 fragTintColor; \n" |
|
|
#endif |
|
|
#endif |
|
|
"uniform sampler2D texture0; \n" |
|
|
"uniform sampler2D texture0; \n" |
|
|
"void main() \n" |
|
|
"void main() \n" |
|
|
"{ \n" |
|
|
"{ \n" |
|
|
" vec4 texelColor = texture2D(texture0, fragTexCoord); \n" // NOTE: texture2D() is deprecated on OpenGL 3.3 and ES 3.0, use texture() instead |
|
|
" vec4 texelColor = texture2D(texture0, fragTexCoord); \n" // NOTE: texture2D() is deprecated on OpenGL 3.3 and ES 3.0, use texture() instead |
|
|
" gl_FragColor = texelColor*tintColor; \n" |
|
|
|
|
|
|
|
|
" gl_FragColor = texelColor*fragTintColor; \n" |
|
|
"} \n"; |
|
|
"} \n"; |
|
|
|
|
|
|
|
|
shader.id = LoadShaderProgram(vShaderStr, fShaderStr); |
|
|
shader.id = LoadShaderProgram(vShaderStr, fShaderStr); |
|
@ -2788,10 +2788,10 @@ static Shader LoadDefaultShader(void) |
|
|
shader.normalLoc = -1; |
|
|
shader.normalLoc = -1; |
|
|
|
|
|
|
|
|
// Get handles to GLSL uniform locations (vertex shader) |
|
|
// Get handles to GLSL uniform locations (vertex shader) |
|
|
shader.modelviewLoc = glGetUniformLocation(shader.id, "modelviewMatrix"); |
|
|
|
|
|
|
|
|
shader.mvpLoc = glGetUniformLocation(shader.id, "mvpMatrix"); |
|
|
|
|
|
|
|
|
shader.modelLoc = glGetUniformLocation(shader.id, "modelMatrix"); |
|
|
shader.modelLoc = glGetUniformLocation(shader.id, "modelMatrix"); |
|
|
shader.viewLoc = glGetUniformLocation(shader.id, "viewMatrix"); |
|
|
shader.viewLoc = glGetUniformLocation(shader.id, "viewMatrix"); |
|
|
shader.projectionLoc = glGetUniformLocation(shader.id, "projectionMatrix"); |
|
|
|
|
|
|
|
|
|
|
|
// Get handles to GLSL uniform locations (fragment shader) |
|
|
// Get handles to GLSL uniform locations (fragment shader) |
|
|
shader.tintColorLoc = -1; |
|
|
shader.tintColorLoc = -1; |
|
@ -2831,12 +2831,11 @@ static Shader LoadSimpleShader(void) |
|
|
"attribute vec3 vertexNormal; \n" |
|
|
"attribute vec3 vertexNormal; \n" |
|
|
"varying vec2 fragTexCoord; \n" |
|
|
"varying vec2 fragTexCoord; \n" |
|
|
#endif |
|
|
#endif |
|
|
"uniform mat4 projectionMatrix; \n" |
|
|
|
|
|
"uniform mat4 modelviewMatrix; \n" |
|
|
|
|
|
|
|
|
"uniform mat4 mvpMatrix; \n" |
|
|
"void main() \n" |
|
|
"void main() \n" |
|
|
"{ \n" |
|
|
"{ \n" |
|
|
" fragTexCoord = vertexTexCoord; \n" |
|
|
" fragTexCoord = vertexTexCoord; \n" |
|
|
" gl_Position = projectionMatrix*modelviewMatrix*vec4(vertexPosition, 1.0); \n" |
|
|
|
|
|
|
|
|
" gl_Position = mvpMatrix*vec4(vertexPosition, 1.0); \n" |
|
|
"} \n"; |
|
|
"} \n"; |
|
|
|
|
|
|
|
|
// Fragment shader directly defined, no external file required |
|
|
// Fragment shader directly defined, no external file required |
|
@ -2849,11 +2848,11 @@ static Shader LoadSimpleShader(void) |
|
|
"varying vec2 fragTexCoord; \n" |
|
|
"varying vec2 fragTexCoord; \n" |
|
|
#endif |
|
|
#endif |
|
|
"uniform sampler2D texture0; \n" |
|
|
"uniform sampler2D texture0; \n" |
|
|
"uniform vec4 tintColor; \n" |
|
|
|
|
|
|
|
|
"uniform vec4 fragTintColor; \n" |
|
|
"void main() \n" |
|
|
"void main() \n" |
|
|
"{ \n" |
|
|
"{ \n" |
|
|
" vec4 texelColor = texture2D(texture0, fragTexCoord); \n" // NOTE: texture2D() is deprecated on OpenGL 3.3 and ES 3.0, use texture() instead |
|
|
" vec4 texelColor = texture2D(texture0, fragTexCoord); \n" // NOTE: texture2D() is deprecated on OpenGL 3.3 and ES 3.0, use texture() instead |
|
|
" gl_FragColor = texelColor*tintColor; \n" |
|
|
|
|
|
|
|
|
" gl_FragColor = texelColor*fragTintColor; \n" |
|
|
"} \n"; |
|
|
"} \n"; |
|
|
|
|
|
|
|
|
shader.id = LoadShaderProgram(vShaderStr, fShaderStr); |
|
|
shader.id = LoadShaderProgram(vShaderStr, fShaderStr); |
|
@ -2870,13 +2869,13 @@ static Shader LoadSimpleShader(void) |
|
|
shader.colorLoc = -1; |
|
|
shader.colorLoc = -1; |
|
|
|
|
|
|
|
|
// Get handles to GLSL uniform locations (vertex shader) |
|
|
// Get handles to GLSL uniform locations (vertex shader) |
|
|
shader.modelviewLoc = glGetUniformLocation(shader.id, "modelviewMatrix"); |
|
|
|
|
|
|
|
|
shader.mvpLoc = glGetUniformLocation(shader.id, "mvpMatrix"); |
|
|
|
|
|
|
|
|
shader.modelLoc = glGetUniformLocation(shader.id, "modelMatrix"); |
|
|
shader.modelLoc = glGetUniformLocation(shader.id, "modelMatrix"); |
|
|
shader.viewLoc = glGetUniformLocation(shader.id, "viewMatrix"); |
|
|
shader.viewLoc = glGetUniformLocation(shader.id, "viewMatrix"); |
|
|
shader.projectionLoc = glGetUniformLocation(shader.id, "projectionMatrix"); |
|
|
|
|
|
|
|
|
|
|
|
// Get handles to GLSL uniform locations (fragment shader) |
|
|
// Get handles to GLSL uniform locations (fragment shader) |
|
|
shader.tintColorLoc = glGetUniformLocation(shader.id, "tintColor"); |
|
|
|
|
|
|
|
|
shader.tintColorLoc = glGetUniformLocation(shader.id, "fragTintColor"); |
|
|
shader.mapDiffuseLoc = glGetUniformLocation(shader.id, "texture0"); |
|
|
shader.mapDiffuseLoc = glGetUniformLocation(shader.id, "texture0"); |
|
|
shader.mapNormalLoc = -1; // It can be set later |
|
|
shader.mapNormalLoc = -1; // It can be set later |
|
|
shader.mapSpecularLoc = -1; // It can be set later |
|
|
shader.mapSpecularLoc = -1; // It can be set later |
|
|