Browse Source

[rlgl] Preserve texture on mode switching (#4364)

* Fix textures on draw mode switch

* formatting fix

* ident
Destructor17 6 months ago
parent
commit
27af359d1c
2 changed files with 4 additions and 6 deletions
  1. 1 5
      examples/textures/textures_polygon.c
  2. 3 1
      src/rlgl.h

+ 1 - 5
examples/textures/textures_polygon.c

@@ -117,8 +117,7 @@ void DrawTexturePoly(Texture2D texture, Vector2 center, Vector2 *points, Vector2
 {
     rlSetTexture(texture.id);
 
-    // Texturing is only supported on RL_QUADS
-    rlBegin(RL_QUADS);
+    rlBegin(RL_TRIANGLES);
 
         rlColor4ub(tint.r, tint.g, tint.b, tint.a);
 
@@ -132,9 +131,6 @@ void DrawTexturePoly(Texture2D texture, Vector2 center, Vector2 *points, Vector2
 
             rlTexCoord2f(texcoords[i + 1].x, texcoords[i + 1].y);
             rlVertex2f(points[i + 1].x + center.x, points[i + 1].y + center.y);
-
-            rlTexCoord2f(texcoords[i + 1].x, texcoords[i + 1].y);
-            rlVertex2f(points[i + 1].x + center.x, points[i + 1].y + center.y);
         }
     rlEnd();
 

+ 3 - 1
src/rlgl.h

@@ -1459,6 +1459,7 @@ void rlBegin(int mode)
     // NOTE: In all three cases, vertex are accumulated over default internal vertex buffer
     if (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].mode != mode)
     {
+        int currentTexture = RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].textureId;
         if (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexCount > 0)
         {
             // Make sure current RLGL.currentBatch->draws[i].vertexCount is aligned a multiple of 4,
@@ -1481,13 +1482,14 @@ void rlBegin(int mode)
 
         RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].mode = mode;
         RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexCount = 0;
-        RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].textureId = RLGL.State.defaultTextureId;
+        RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].textureId = currentTexture;
     }
 }
 
 // Finish vertex providing
 void rlEnd(void)
 {
+    rlSetTexture(RLGL.State.defaultTextureId);
     // NOTE: Depth increment is dependant on rlOrtho(): z-near and z-far values,
     // as well as depth buffer bit-depth (16bit or 24bit or 32bit)
     // Correct increment formula would be: depthInc = (zfar - znear)/pow(2, bits)