aboutsummaryrefslogtreecommitdiff
path: root/src/rlgl.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/rlgl.c')
-rw-r--r--src/rlgl.c44
1 files changed, 21 insertions, 23 deletions
diff --git a/src/rlgl.c b/src/rlgl.c
index ec909385..8ea7d0f2 100644
--- a/src/rlgl.c
+++ b/src/rlgl.c
@@ -171,7 +171,7 @@ typedef struct {
typedef struct {
GLuint textureId;
int vertexCount;
- // TODO: DrawState state -> Blending mode, shader
+ // TODO: Store draw state -> blending mode, shader
} DrawCall;
// pixel type (same as Color type)
@@ -411,7 +411,7 @@ void rlRotatef(float angleDeg, float x, float y, float z)
Vector3 axis = (Vector3){ x, y, z };
VectorNormalize(&axis);
- matRotation = MatrixRotate(angleDeg*DEG2RAD, axis);
+ matRotation = MatrixRotate(axis, angleDeg*DEG2RAD);
MatrixTranspose(&matRotation);
@@ -981,7 +981,7 @@ void rlglInit(void)
else TraceLog(WARNING, "[EXTENSION] VAO extension not found, VAO usage not supported");
if (npotSupported) TraceLog(INFO, "[EXTENSION] NPOT textures extension detected, full NPOT textures supported");
- else TraceLog(WARNING, "[EXTENSION] NPOT textures extension not found, NPOT textures support is limited (no-mipmaps, no-repeat)");
+ else TraceLog(WARNING, "[EXTENSION] NPOT textures extension not found, limited NPOT support (no-mipmaps, no-repeat)");
#endif
if (texCompDXTSupported) TraceLog(INFO, "[EXTENSION] DXT compressed textures supported");
@@ -1406,13 +1406,13 @@ void rlglDrawPostpro(void)
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
glBindFramebuffer(GL_FRAMEBUFFER, 0);
- rlglDrawModel(postproQuad, (Vector3){0,0,0}, 0.0f, (Vector3){0,0,0}, (Vector3){1.0f, 1.0f, 1.0f}, (Color){ 255, 255, 255, 255 }, false);
+ rlglDrawModel(postproQuad, (Vector3){ 0.0f, 0.0f, 0.0f }, (Vector3){ 0.0f, 0.0f, 0.0f }, 0.0f, (Vector3){1.0f, 1.0f, 1.0f}, (Color){ 255, 255, 255, 255 }, false);
#endif
}
// Draw a 3d model
// NOTE: Model transform can come within model struct
-void rlglDrawModel(Model model, Vector3 position, float rotationAngle, Vector3 rotationAxis, Vector3 scale, Color color, bool wires)
+void rlglDrawModel(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color color, bool wires)
{
#if defined (GRAPHICS_API_OPENGL_11) || defined(GRAPHICS_API_OPENGL_33)
// NOTE: glPolygonMode() not available on OpenGL ES
@@ -1461,10 +1461,10 @@ void rlglDrawModel(Model model, Vector3 position, float rotationAngle, Vector3 r
// Calculate transformation matrix from function parameters
// Get transform matrix (rotation -> scale -> translation)
- Matrix matRotation = MatrixRotate(rotationAngle*DEG2RAD, rotationAxis);
+ Matrix matRotation = MatrixRotate(rotationAxis, rotationAngle*DEG2RAD);
Matrix matScale = MatrixScale(scale.x, scale.y, scale.z);
Matrix matTranslation = MatrixTranslate(position.x, position.y, position.z);
- Matrix matTransform = MatrixMultiply(MatrixMultiply(matRotation, matScale), matTranslation);
+ Matrix matTransform = MatrixMultiply(MatrixMultiply(matScale, matRotation), matTranslation);
// Combine model internal transformation matrix (model.transform) with matrix generated by function parameters (matTransform)
Matrix matModel = MatrixMultiply(model.transform, matTransform); // Transform to world-space coordinates
@@ -1475,11 +1475,7 @@ void rlglDrawModel(Model model, Vector3 position, float rotationAngle, Vector3 r
// Calculate model-view-projection matrix (MVP)
Matrix matMVP = MatrixMultiply(matModelView, matProjection); // Transform to screen-space coordinates
- // NOTE: Drawing in OpenGL 3.3+, matrices are passed to shader
- // TODO: Reduce number of matrices passed to shaders, use only matMVP
- glUniformMatrix4fv(model.shader.modelLoc, 1, false, MatrixToFloat(matModel));
- glUniformMatrix4fv(model.shader.viewLoc, 1, false, MatrixToFloat(matView));
-
+ // Send combined model-view-projection matrix to shader
glUniformMatrix4fv(model.shader.mvpLoc, 1, false, MatrixToFloat(matMVP));
// Apply color tinting to model
@@ -1615,7 +1611,6 @@ void rlglInitGraphics(int offsetX, int offsetY, int width, int height)
}
// Get world coordinates from screen coordinates
-// TODO: It doesn't work! It drives me crazy!
// NOTE: Using global variables: screenWidth, screenHeight
Vector3 rlglUnproject(Vector3 source, Matrix proj, Matrix view)
{
@@ -1900,7 +1895,7 @@ void rlglGenerateMipmaps(Texture2D texture)
int mipmapCount = GenerateMipmaps(data, texture.width, texture.height);
// TODO: Adjust mipmap size depending on texture format!
- int size = texture.width*texture.height*4;
+ int size = texture.width*texture.height*4; // RGBA 32bit only
int offset = size;
int mipWidth = texture.width/2;
@@ -2201,9 +2196,6 @@ Shader LoadShader(char *vsFileName, char *fsFileName)
// Get handles to GLSL uniform locations (vertex shader)
shader.mvpLoc = glGetUniformLocation(shader.id, "mvpMatrix");
-
- shader.modelLoc = glGetUniformLocation(shader.id, "modelMatrix");
- shader.viewLoc = glGetUniformLocation(shader.id, "viewMatrix");
// Get handles to GLSL uniform locations (fragment shader)
shader.tintColorLoc = glGetUniformLocation(shader.id, "fragTintColor");
@@ -2503,6 +2495,18 @@ void SetShaderValuei(Shader shader, int uniformLoc, int *value, int size)
#endif
}
+// Set shader uniform value (matrix 4x4)
+void SetShaderValueMatrix(Shader shader, int uniformLoc, Matrix mat)
+{
+#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
+ glUseProgram(shader.id);
+
+ glUniformMatrix4fv(uniformLoc, 1, false, MatrixToFloat(mat));
+
+ glUseProgram(0);
+#endif
+}
+
// Default diffuse shader map texture assignment
void SetShaderMapDiffuse(Shader *shader, Texture2D texture)
{
@@ -2741,9 +2745,6 @@ static Shader LoadDefaultShader(void)
// Get handles to GLSL uniform locations (vertex shader)
shader.mvpLoc = glGetUniformLocation(shader.id, "mvpMatrix");
-
- shader.modelLoc = glGetUniformLocation(shader.id, "modelMatrix");
- shader.viewLoc = glGetUniformLocation(shader.id, "viewMatrix");
// Get handles to GLSL uniform locations (fragment shader)
shader.tintColorLoc = -1;
@@ -2822,9 +2823,6 @@ static Shader LoadSimpleShader(void)
// Get handles to GLSL uniform locations (vertex shader)
shader.mvpLoc = glGetUniformLocation(shader.id, "mvpMatrix");
-
- shader.modelLoc = glGetUniformLocation(shader.id, "modelMatrix");
- shader.viewLoc = glGetUniformLocation(shader.id, "viewMatrix");
// Get handles to GLSL uniform locations (fragment shader)
shader.tintColorLoc = glGetUniformLocation(shader.id, "fragTintColor");