From ecb3c47704ccaa349ee4824b019181d700919582 Mon Sep 17 00:00:00 2001 From: raysan5 Date: Wed, 23 Jul 2014 01:25:33 +0200 Subject: [PATCH] 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... --- CHANGELOG | 1 + release/win32-mingw/lib/libraylib.a | Bin 279998 -> 280176 bytes src/rlgl.c | 22 +++++++++++----------- src/shapes.c | 25 +++++++++++++++++++++++++ 4 files changed, 37 insertions(+), 11 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 9c7242bc0..4e2797825 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -15,6 +15,7 @@ Release: raylib 1.1.1 (22 July 2014) [rlgl] Removed double buffer system (no performance improvement) [rlgl] rlglDraw() - Reorganized buffers drawing order [rlgl] Corrected bug on screen resizing +[shapes] DrawRectangle() - Use QUADS instead of TRIANGLES [models] DrawSphereWires() - Corrected some issues [models] LoadOBJ() - Redesigned to support multiple meshes [models] LoadCubesMap() - Loading a map as cubes (by pixel color) diff --git a/release/win32-mingw/lib/libraylib.a b/release/win32-mingw/lib/libraylib.a index d900d3201a0f539f9ff4db5ca8a17a43ed6b3283..3f56d8a68424b14748729689e9245070a1a1fe33 100644 GIT binary patch delta 3223 zcmc(hc}!GC9LMJ!i(D=&yBu=JqAO5Y>h2a{16t*<&`J}OZBtVeh!Qnjj=&lbw9f`@ z)m1!Rn%Bmrhnm!?iO^LS6KiX2wSTk;skW6!1nnV4Ol_JNlQyB>H&bRMrfF$x`jXlC z%y)jr%!qj{E76^aK{_r#ar1k~0vQYWiHN zjr!4_uFu>r-qIthb80Jv<$;a0Z$;-?G5!IIcSI0Ut#6{(7~Un88W&1W3&!x`^G2+} z0y$hHWQ$twHBYmGu0#@oj$Us3=3y|X?(!CdwSbOAX)S_~qWK=bFrh&7fg*peZM!2Q+HdQ|jvsWHs*=l^Rqh7xosi29!x@HzSMb(&=0b+KGxVDUIja+L5Jw}KfiN}B}aZc2D;sQ`MO;XOOS}kqOQv7_Z zaT)@#2w~CV5t2c(X@pEp`JA?an8$Gt+w6Hh`yHp-oW>X_Sg;xQnuX5d)CO|WbgzM2 zl#YU)pcDkLbOa9tOJ@PGEhd9zz%GoqKsnT-1Z1aF17g`aKngS5#|;l~!!z9QD-eo{ zrF!s$vBaGqmiToL3-~^#)0}<=F^`1UagSUO^H^ZyxB*YyT=ja}bMreR@lexr2XP}< z;u4gLkpp{YG=OF0QM)gZglS9FHs4Am8gEc4ow0FpbMkTO;dGgk1@8j$wR7@uI>Tv@ z)9;)-cq8DOgi3iCg0^rvp*F6&rEJFb1Y-U3SU7-XUY?+wfTAB8A)7Ct97ZWZ%C}G| zP?C^x3rZeJ6H<1lrboF1+@xEQ8>x^Cn%{<>Tp*=HhEBFoE{-%36v8Plm;jj zxPu{^jZog5plDDA<0eQwkVedEU3s!$J-#%4RVh!`B0m%>)Y0`eaa300+7Fre0ZPV; z7Oky|k!Kdzansl}K2i9PQt^;dtzK7Bvpox+rl*gsiqI8#at7Q02?ve36P*uPiYZhK(tJ0-5orVe@ZTN}K8P5i!` zMF=8-(;PO8hhgj2+Vw&yTd2|^izIh`?p2=6i1mV;iPvn#pQ3ED*M_JNqkem;AcQ!j}5_Hpe3r=LLZwIW?K zz7j9ffbk%<80R=?4NcNwVNM@YOBSqVUw>*4FwBZ3~?)QoGt) l)>^-Qk+-3-p~(j+KX`Melqoz|@$7EtRm_~Eoe0m2Wborw|tOib2){>LW&yW~Rd`{a%^`A!AW<7~Y)>?RM#Nwmhu9c;mh zP)qcP__|fpA4hdZo{$;c;_&&5r*pcRrtywUPf3YezZ#OOxg?@rTXF~~R=E-`Grb{$ zkgp-tIgJt0rR3B-#`%@4bra1aVO?z}q&NCjozFaN(F2PYZo1@;)JqKm0jYMNUUHzX zL+?Vr1ic%5J$mW5C~->dB9Gi56*WZyQqh6brtW}Lh;i3INGd#CFXf{zinOB-AkI)N zB;|LvOJaASbU~k!?sF<2Ndte3HPojAJ{<`@4*0l>|I!JQFq~X85lyO8Hn>y#OCJs{ zyQpVxQmTU0-0JAg;I7nBeh5Esgm}z^%uqjhNN|`cEVV)br+#bVtUf|)FpzjcLdk?I z)ZH=6*I2|fpdb1X=;(~A48OIwISTD#wNK!(l$Szd%{`EIrV#QxmA(&+O^QJ(Rk(1r z`4Y%IijY@~hN#aD}-Cba*r&+m)xncI9k% za?(jC)yk-5r|BwaFik0H&PuY0gzQ%4H!r*^1S%av$YL7O!{2Wa^_4vXy$3oLs;Ba- zv52G)xC?qr`Mi0G`2^^s6{(E*MRQtq@Ny8v%7vAUbb;~=`Vf?F&`n0gr~}nzF`CP0 zF{AS!8qbO{(RkS)>N|~*kCFw6YnZrHS=N>(AICinaT!EI@Tr6p7*nz^8qcT|L_Jgx z_1Mcs-(~a}qw|ceGa8MpLk<~JS_+(Mq-y~c8Ki)w8T0~(rn>;5>3#*#HS*Z*39vJf zEYK9gqX1NBPyj?1vYgpH$?Ud(WNNsF86E^pHk|!9Cp7U25KX)RL<4ST)W_&c5cRkT zq8=GI@6;oYQ6mnH*T~VNWVF}JT%LS8X9RmdvlpOJlpI(rrS~v5kKuO!@u@aL>1$sh z=i^~;86)M4>KOGhI>Bg=kq76V`p#k0%jguNYm6K?+SH?!k^{TAnTfj@^{c^D(Wx9- z{gJ#1YvhRg_ecIk%=K`BasZ0{N{HLUp!A|1apemr9@HhST!i96ed5X$C^6J2uH1rR zlTom^l!6!6n+b{w${cJ^+@=)Dr37UGlwIjVZB|0@U^C-h9Z)tWC@PerV-ln{AoW|7 zhAO9sPfnL2S7ob*_w#d)4dqme%==?QM^)CCQum*K7Ujxe;&Ef2jI5(60Sl#;<-b{!z4RPe03dOH|Nc zA?F)>w{D%O?LEtXS2fiA6ovp$?8_$i<$~uM0k*>*FcI~Te!okkCfK9N8$GpD*d&6e# diff --git a/src/rlgl.c b/src/rlgl.c index c181c7d6c..75978e11d 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 2c5895124..ad02de170 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