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 zcmdnjE%>2FaDptWxq-Qb=|&}0#`+5k4Ar#3j7B>c2;zET6p^5Y$>Iaa zOr+p#-x!!k!S|~enC@5AgNOmd^;Pu<3I?j+dTJR2GN*4912c)Zo)ir%B2^4j z#PQBK`I`^0tQQ7nN2BQqMvP*cyCkfwSwPuyy1WsixTK+hk)e?S2qbX%FtRd$zz#(Q z2D9mc_nE{6D?}L>?l3Sg1W1D<7#O-ID~4nH(gXz?j5`tqoQ-uMMdXk z2t?6M8IXE`7a&(1cTr(sU}&&E&Y}XMz+xbSZn&su!1aMl0$Cse);HZ?97_RU$F!WD9D9S84`BAPG>keiH zhLp*IdD5ykm>C#21Q{4MK(tFR&FA7{apLv{xjBS^f#C-;1H+EVfqB8Q0W1s*K0*u( zVGxxDOhJ4sAYWy$Ffc5cd@xU#wSk3!;lbpadD@&CSQr@I2!pHyxpT96em_%v3?~DF zE(0heGB_C+)WEEMP6h^bFl#j@1A`uzwV#uLK_ASz%*nu@1!g^mi}7;7#1y$;>RjPs zk#MnGxL6Sv1A`_5gARiT!+$QA#oF93i_N(i7&O3^xWie&lbwsy>$~Cn>2TJ4ZkP#d zJTMcacwkOagR{)wtPUQSj`eUIhvBl<;jGti)_(}Aoalo%Ko*cgoX7#Os{I-K}Gfdh({7(SS7 zReTH#^$>-V;0hPP74Cs6Jj(|TTm}(_5Pq1&)%-Avr}D!LTn=aLgtOkmb%+VTbm$7e zblCI3nUz8e45pJG7Khqab1^U&fL*$=9kz~I4yECMR8 zOn8w+J~J>dJm5nX`Om<>pi|F}EX2*oz;FRYM23-pAwd9HjR_+I1B)QCNFXBv!xj{g zR7M5{4TA|g0_ zhY*X-^u=45)VTuk3w#qxiZUx0n&qmu%T+V7?*&(#rqds&F^g|^v|uWUMAV(zFHB_W zR6*jGY-7sQ0BbM-*R|V!++%v|4i+%o{y>e{P?+rj3j;&zrRfi?m^By!rgK>{TbSv7 z0ExZj@7u$`z_8GVm4Ts?MdiOJr~nS@wiRGyU}*i%-`Bywz|bwq!^*&5c-!#X>-6bv zR?LBn%F}09F*{9nvSxn4cy+tB4fA%T>B8~M64M{WF&l2zj%S|DS8pT4z~BWg4nPHa z4LDnbz{O&P7#JeJvdM6A#({o&k63bn4Qgc)DN{Sr}&9*=9VOC=V2QW0mHTsyhwjvAs5N0`M2mrrXZsY&} delta 3182 zcmey+Be<_yaDptWnTfHb#YQDn#(FshhHBbiMk6)`g1DX-MI@+UvJhY(1=r(LJaGX7 z6DfF`3j-4=_}&Qyrh6yqLBs&!dax@5F$SvOdTJR2GN<prCB*YDjjTJy3fy;-Hl>r306d4$d zrZXBdiVG%)GBDg>U|Y#;8c#bWsVp8KWX|(?uoXW{ir$O&67zn=vXX$5~VuCkKQY)Yqu! zrFFZg=xyOi>vU1kx#^-Jb2CRp=XQ*W#?2fRz3vhfjhiki5-4IhDjJ<7DlDBkDlb58 z0_nNoqM~vW-7I8tYE(2jYf$t^+;CA*Fv6=T2C7L0ViCmB$*u_s+&0m1@v$#Kwx>;Y zkN06L-8?0J4iB#l0|UboMg|50P6h_6=@+AzCD@$#0+_WJr$1z46t-qy5Mf|oP+?+V z$l+pO2nK0)<_lo*=VK9IU|_IeVqiGH#lXM>5@%pwuwY&)51%)qdRpMjx&a$~O8XuEJU2|QKAdF@Vev7DF!)253?dBC zlVgk2>yLB8jCcn(f{BNLK@038J~&Gb&MM%6>6p#~vvf6Fc0ZhT8P0kRXZ?n=_<6y0 z)Po$t%fO%uwl1HSfk6+GKerNfU_=4kLO{Lp1iH}Tzv)?0|O(20yN7nVqjp{gCeqp0a7F& z)SO^oV3@#-tm_&B1A_q%vIwYLlHo-b`OLt;aDoq6iLm{xEUE3cA$vJFfuTB z2q3F5VPs%=5KGP$2umDv13Uy{_VYUw}3=FN8rW;x_i%5qq6kugw zXg$E+*U7-Z&@IZt%D`ZF+wj}#j0w{dteFEDyQgomW_Dt?eE`z*fBJ80W@$kORtAPn z7M1^^ATNe3e84hY%Z}M(`e$qAmyEgF@7geLSDL;ip4o8w(Rk*~eDw}O3=Cf2eC{d4 zzz_ju`NPFx;jB6#28J3?gflD=VqmBRv)008Pr_MW;OhRu#n^;lc8CeXOp$|#DKM}x zs0+g^)`bW%uras_GceSFESWBz&+N@uw>>$ZS&@;kZhLD1^F|RSM)vI%t<0_*GOjtP zxv6<2#SVsM4DsnXE=7sujzvX@mBkK*M%!ohGOICygBTph@}2#9ZAEy8lt F5CD6_X6^t0 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