From ecb3c47704ccaa349ee4824b019181d700919582 Mon Sep 17 00:00:00 2001 From: raysan5 Date: Wed, 23 Jul 2014 01:25:33 +0200 Subject: Corrected bug with drawing order We have three vertex buffers: lines, triangles and quads for textures. Drawing in a desired order could become a nighmare... noww it seems it works prety well... --- src/rlgl.c | 22 +++++++++++----------- src/shapes.c | 25 +++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/rlgl.c b/src/rlgl.c index c181c7d6..75978e11 100644 --- a/src/rlgl.c +++ b/src/rlgl.c @@ -825,7 +825,17 @@ void rlglDraw() glUniformMatrix4fv(modelviewMatrixLoc, 1, false, GetMatrixVector(modelview)); glUniform1i(textureLoc, 0); - // NOTE: We draw in this order: textured quads, triangles shapes, lines + // NOTE: We draw in this order: triangle shapes, textured quads and lines + + if (triangles.vCounter > 0) + { + glBindTexture(GL_TEXTURE_2D, whiteTexture); + + glBindVertexArray(vaoTriangles); + glDrawArrays(GL_TRIANGLES, 0, triangles.vCounter); + + glBindTexture(GL_TEXTURE_2D, 0); + } if (quads.vCounter > 0) { @@ -855,16 +865,6 @@ void rlglDraw() glBindTexture(GL_TEXTURE_2D, 0); // Unbind textures } - if (triangles.vCounter > 0) - { - glBindTexture(GL_TEXTURE_2D, whiteTexture); - - glBindVertexArray(vaoTriangles); - glDrawArrays(GL_TRIANGLES, 0, triangles.vCounter); - - glBindTexture(GL_TEXTURE_2D, 0); - } - if (lines.vCounter > 0) { glBindTexture(GL_TEXTURE_2D, whiteTexture); diff --git a/src/shapes.c b/src/shapes.c index 2c589512..ad02de17 100644 --- a/src/shapes.c +++ b/src/shapes.c @@ -180,6 +180,7 @@ void DrawRectangleGradient(int posX, int posY, int width, int height, Color colo // Draw a color-filled rectangle (Vector version) void DrawRectangleV(Vector2 position, Vector2 size, Color color) { +/* rlBegin(RL_TRIANGLES); rlColor4ub(color.r, color.g, color.b, color.a); @@ -191,6 +192,30 @@ void DrawRectangleV(Vector2 position, Vector2 size, Color color) rlVertex2i(position.x + size.x, position.y + size.y); rlVertex2i(position.x + size.x, position.y); rlEnd(); +*/ + + // NOTE: This shape uses QUADS to avoid drawing order issues (view rlglDraw) + + rlEnableTexture(1); // Default white texture + + rlBegin(RL_QUADS); + rlColor4ub(color.r, color.g, color.b, color.a); + rlNormal3f(0.0f, 0.0f, 1.0f); // Normal Pointing Towards Viewer + + rlTexCoord2f(0.0f, 0.0f); + rlVertex2f(position.x, position.y); + + rlTexCoord2f(0.0f, 1.0f); + rlVertex2f(position.x, position.y + size.y); + + rlTexCoord2f(1.0f, 1.0f); + rlVertex2f(position.x + size.x, position.y + size.y); + + rlTexCoord2f(1.0f, 0.0f); + rlVertex2f(position.x + size.x, position.y); + rlEnd(); + + rlDisableTexture(); } // Draw rectangle outline -- cgit v1.2.3