summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRay <[email protected]>2022-09-05 13:20:09 +0200
committerRay <[email protected]>2022-09-05 13:20:09 +0200
commit9996e328cb036b9bc63249bab77de5499ad2e4e8 (patch)
treef08a8bf2cc76da054afacefdf2e4424071e50a97
parentad5ffd78d616aafabf18458a25aa78c0850b3e3d (diff)
downloadraylib-9996e328cb036b9bc63249bab77de5499ad2e4e8.tar.gz
raylib-9996e328cb036b9bc63249bab77de5499ad2e4e8.zip
WARNING: BREAKING: Removed `rlCheckRenderBatchLimit()` requirement
Updated version to `rlgl 4.2`
-rw-r--r--src/rlgl.h104
-rw-r--r--src/rmodels.c153
-rw-r--r--src/rshapes.c69
-rw-r--r--src/rtextures.c6
4 files changed, 112 insertions, 220 deletions
diff --git a/src/rlgl.h b/src/rlgl.h
index 057c42b5..2c83d08a 100644
--- a/src/rlgl.h
+++ b/src/rlgl.h
@@ -1,6 +1,6 @@
/**********************************************************************************************
*
-* rlgl v4.0 - A multi-OpenGL abstraction layer with an immediate-mode style API
+* rlgl v4.2 - A multi-OpenGL abstraction layer with an immediate-mode style API
*
* An abstraction layer for multiple OpenGL versions (1.1, 2.1, 3.3 Core, 4.3 Core, ES 2.0)
* that provides a pseudo-OpenGL 1.1 immediate-mode style API (rlVertex, rlTranslate, rlRotate...)
@@ -107,7 +107,7 @@
#ifndef RLGL_H
#define RLGL_H
-#define RLGL_VERSION "4.0"
+#define RLGL_VERSION "4.2"
// Function specifiers in case library is build/used as a shared library (Windows)
// NOTE: Microsoft specifiers to tell compiler that symbols are imported/exported from a .dll
@@ -345,7 +345,6 @@ typedef struct rlRenderBatch {
float currentDepth; // Current depth value for next draw
} rlRenderBatch;
-
// OpenGL version
typedef enum {
RL_OPENGL_11 = 1, // OpenGL 1.1
@@ -601,18 +600,18 @@ RLAPI void rlSetBlendFactors(int glSrcFactor, int glDstFactor, int glEquation);
// Functions Declaration - rlgl functionality
//------------------------------------------------------------------------------------
// rlgl initialization functions
-RLAPI void rlglInit(int width, int height); // Initialize rlgl (buffers, shaders, textures, states)
-RLAPI void rlglClose(void); // De-inititialize rlgl (buffers, shaders, textures)
-RLAPI void rlLoadExtensions(void *loader); // Load OpenGL extensions (loader function required)
-RLAPI int rlGetVersion(void); // Get current OpenGL version
-RLAPI void rlSetFramebufferWidth(int width); // Set current framebuffer width
-RLAPI int rlGetFramebufferWidth(void); // Get default framebuffer width
-RLAPI void rlSetFramebufferHeight(int height); // Set current framebuffer height
-RLAPI int rlGetFramebufferHeight(void); // Get default framebuffer height
-
-RLAPI unsigned int rlGetTextureIdDefault(void); // Get default texture id
-RLAPI unsigned int rlGetShaderIdDefault(void); // Get default shader id
-RLAPI int *rlGetShaderLocsDefault(void); // Get default shader locations
+RLAPI void rlglInit(int width, int height); // Initialize rlgl (buffers, shaders, textures, states)
+RLAPI void rlglClose(void); // De-inititialize rlgl (buffers, shaders, textures)
+RLAPI void rlLoadExtensions(void *loader); // Load OpenGL extensions (loader function required)
+RLAPI int rlGetVersion(void); // Get current OpenGL version
+RLAPI void rlSetFramebufferWidth(int width); // Set current framebuffer width
+RLAPI int rlGetFramebufferWidth(void); // Get default framebuffer width
+RLAPI void rlSetFramebufferHeight(int height); // Set current framebuffer height
+RLAPI int rlGetFramebufferHeight(void); // Get default framebuffer height
+
+RLAPI unsigned int rlGetTextureIdDefault(void); // Get default texture id
+RLAPI unsigned int rlGetShaderIdDefault(void); // Get default shader id
+RLAPI int *rlGetShaderLocsDefault(void); // Get default shader locations
// Render batch management
// NOTE: rlgl provides a default render batch to behave like OpenGL 1.1 immediate mode
@@ -623,6 +622,7 @@ RLAPI void rlDrawRenderBatch(rlRenderBatch *batch); // D
RLAPI void rlSetRenderBatchActive(rlRenderBatch *batch); // Set the active render batch for rlgl (NULL for default internal)
RLAPI void rlDrawRenderBatchActive(void); // Update and draw internal render batch
RLAPI bool rlCheckRenderBatchLimit(int vCount); // Check internal buffer overflow for a given number of vertex
+
RLAPI void rlSetTexture(unsigned int id); // Set current texture for render batch and check buffers limits
//------------------------------------------------------------------------------------------------------------------------
@@ -1313,17 +1313,6 @@ void rlEnd(void)
// as well as depth buffer bit-depth (16bit or 24bit or 32bit)
// Correct increment formula would be: depthInc = (zfar - znear)/pow(2, bits)
RLGL.currentBatch->currentDepth += (1.0f/20000.0f);
-
- // Verify internal buffers limits
- // NOTE: This check is combined with usage of rlCheckRenderBatchLimit()
- if (RLGL.State.vertexCounter >= (RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].elementCount*4 - 4))
- {
- // WARNING: If we are between rlPushMatrix() and rlPopMatrix() and we need to force a rlDrawRenderBatch(),
- // we need to call rlPopMatrix() before to recover *RLGL.State.currentMatrix (RLGL.State.modelview) for the next forced draw call!
- // If we have multiple matrix pushed, it will require "RLGL.State.stackCounter" pops before launching the draw
- for (int i = RLGL.State.stackCounter; i >= 0; i--) rlPopMatrix();
- rlDrawRenderBatch(RLGL.currentBatch);
- }
}
// Define one vertex (position)
@@ -1342,32 +1331,51 @@ void rlVertex3f(float x, float y, float z)
tz = RLGL.State.transform.m2*x + RLGL.State.transform.m6*y + RLGL.State.transform.m10*z + RLGL.State.transform.m14;
}
- // Verify that current vertex buffer elements limit has not been reached
- if (RLGL.State.vertexCounter < (RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].elementCount*4))
+ // WARNING: We can't break primitives when launching a new batch.
+ // RL_LINES comes in pairs, RL_TRIANGLES come in groups of 3 vertices and RL_QUADS come in groups of 4 vertices.
+ // We must check current draw.mode when a new vertex is required and finish the batch only if the draw.mode draw.vertexCount is %2, %3 or %4
+ if (RLGL.State.vertexCounter > (RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].elementCount*4 - 4))
{
- // Add vertices
- RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vertices[3*RLGL.State.vertexCounter] = tx;
- RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vertices[3*RLGL.State.vertexCounter + 1] = ty;
- RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vertices[3*RLGL.State.vertexCounter + 2] = tz;
+ if ((RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].mode == RL_LINES) &&
+ (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexCount%2 == 0))
+ {
+ // Reached the maximum number of vertices for RL_LINES drawing
+ // Launch a draw call but keep current state for next vertices comming
+ // NOTE: We add +1 vertex to the check for security
+ rlCheckRenderBatchLimit(2 + 1);
+ }
+ else if ((RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].mode == RL_TRIANGLES) &&
+ (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexCount%3 == 0))
+ {
+ rlCheckRenderBatchLimit(3 + 1);
+ }
+ else if ((RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].mode == RL_QUADS) &&
+ (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexCount%4 == 0))
+ {
+ rlCheckRenderBatchLimit(4 + 1);
+ }
+ }
- // Add current texcoord
- RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].texcoords[2*RLGL.State.vertexCounter] = RLGL.State.texcoordx;
- RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].texcoords[2*RLGL.State.vertexCounter + 1] = RLGL.State.texcoordy;
+ // Add vertices
+ RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vertices[3*RLGL.State.vertexCounter] = tx;
+ RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vertices[3*RLGL.State.vertexCounter + 1] = ty;
+ RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vertices[3*RLGL.State.vertexCounter + 2] = tz;
- // TODO: Add current normal
- // By default rlVertexBuffer type does not store normals
+ // Add current texcoord
+ RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].texcoords[2*RLGL.State.vertexCounter] = RLGL.State.texcoordx;
+ RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].texcoords[2*RLGL.State.vertexCounter + 1] = RLGL.State.texcoordy;
- // Add current color
- RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].colors[4*RLGL.State.vertexCounter] = RLGL.State.colorr;
- RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].colors[4*RLGL.State.vertexCounter + 1] = RLGL.State.colorg;
- RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].colors[4*RLGL.State.vertexCounter + 2] = RLGL.State.colorb;
- RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].colors[4*RLGL.State.vertexCounter + 3] = RLGL.State.colora;
+ // TODO: Add current normal
+ // By default rlVertexBuffer type does not store normals
- RLGL.State.vertexCounter++;
+ // Add current color
+ RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].colors[4*RLGL.State.vertexCounter] = RLGL.State.colorr;
+ RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].colors[4*RLGL.State.vertexCounter + 1] = RLGL.State.colorg;
+ RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].colors[4*RLGL.State.vertexCounter + 2] = RLGL.State.colorb;
+ RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].colors[4*RLGL.State.vertexCounter + 3] = RLGL.State.colora;
- RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexCount++;
- }
- else TRACELOG(RL_LOG_ERROR, "RLGL: Batch elements overflow");
+ RLGL.State.vertexCounter++;
+ RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexCount++;
}
// Define one vertex (position)
@@ -2702,10 +2710,12 @@ bool rlCheckRenderBatchLimit(int vCount)
if ((RLGL.State.vertexCounter + vCount) >=
(RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].elementCount*4))
{
+ overflow = true;
+
+ // Store current primitive drawing mode and texture id
int currentMode = RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].mode;
int currentTexture = RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].textureId;
- overflow = true;
rlDrawRenderBatch(RLGL.currentBatch); // NOTE: Stereo rendering is checked inside
// Restore state of last batch so we can continue adding vertices
diff --git a/src/rmodels.c b/src/rmodels.c
index 3160ecf8..cb6551eb 100644
--- a/src/rmodels.c
+++ b/src/rmodels.c
@@ -163,11 +163,6 @@ static ModelAnimation *LoadModelAnimationsM3D(const char *fileName, unsigned int
// Draw a line in 3D world space
void DrawLine3D(Vector3 startPos, Vector3 endPos, Color color)
{
- // WARNING: Be careful with internal buffer vertex alignment
- // when using RL_LINES or RL_TRIANGLES, data is aligned to fit
- // lines-triangles-quads in the same indexed buffers!!!
- rlCheckRenderBatchLimit(8);
-
rlBegin(RL_LINES);
rlColor4ub(color.r, color.g, color.b, color.a);
rlVertex3f(startPos.x, startPos.y, startPos.z);
@@ -178,8 +173,6 @@ void DrawLine3D(Vector3 startPos, Vector3 endPos, Color color)
// Draw a point in 3D space, actually a small line
void DrawPoint3D(Vector3 position, Color color)
{
- rlCheckRenderBatchLimit(8);
-
rlPushMatrix();
rlTranslatef(position.x, position.y, position.z);
rlBegin(RL_LINES);
@@ -193,8 +186,6 @@ void DrawPoint3D(Vector3 position, Color color)
// Draw a circle in 3D world space
void DrawCircle3D(Vector3 center, float radius, Vector3 rotationAxis, float rotationAngle, Color color)
{
- rlCheckRenderBatchLimit(2*36);
-
rlPushMatrix();
rlTranslatef(center.x, center.y, center.z);
rlRotatef(rotationAngle, rotationAxis.x, rotationAxis.y, rotationAxis.z);
@@ -214,8 +205,6 @@ void DrawCircle3D(Vector3 center, float radius, Vector3 rotationAxis, float rota
// Draw a color-filled triangle (vertex in counter-clockwise order!)
void DrawTriangle3D(Vector3 v1, Vector3 v2, Vector3 v3, Color color)
{
- rlCheckRenderBatchLimit(8);
-
rlBegin(RL_TRIANGLES);
rlColor4ub(color.r, color.g, color.b, color.a);
rlVertex3f(v1.x, v1.y, v1.z);
@@ -227,30 +216,27 @@ void DrawTriangle3D(Vector3 v1, Vector3 v2, Vector3 v3, Color color)
// Draw a triangle strip defined by points
void DrawTriangleStrip3D(Vector3 *points, int pointCount, Color color)
{
- if (pointCount >= 3)
- {
- rlCheckRenderBatchLimit(3*(pointCount - 2));
+ if (pointCount < 3) return;
- rlBegin(RL_TRIANGLES);
- rlColor4ub(color.r, color.g, color.b, color.a);
+ rlBegin(RL_TRIANGLES);
+ rlColor4ub(color.r, color.g, color.b, color.a);
- for (int i = 2; i < pointCount; i++)
+ for (int i = 2; i < pointCount; i++)
+ {
+ if ((i%2) == 0)
{
- if ((i%2) == 0)
- {
- rlVertex3f(points[i].x, points[i].y, points[i].z);
- rlVertex3f(points[i - 2].x, points[i - 2].y, points[i - 2].z);
- rlVertex3f(points[i - 1].x, points[i - 1].y, points[i - 1].z);
- }
- else
- {
- rlVertex3f(points[i].x, points[i].y, points[i].z);
- rlVertex3f(points[i - 1].x, points[i - 1].y, points[i - 1].z);
- rlVertex3f(points[i - 2].x, points[i - 2].y, points[i - 2].z);
- }
+ rlVertex3f(points[i].x, points[i].y, points[i].z);
+ rlVertex3f(points[i - 2].x, points[i - 2].y, points[i - 2].z);
+ rlVertex3f(points[i - 1].x, points[i - 1].y, points[i - 1].z);
}
- rlEnd();
- }
+ else
+ {
+ rlVertex3f(points[i].x, points[i].y, points[i].z);
+ rlVertex3f(points[i - 1].x, points[i - 1].y, points[i - 1].z);
+ rlVertex3f(points[i - 2].x, points[i - 2].y, points[i - 2].z);
+ }
+ }
+ rlEnd();
}
// Draw cube
@@ -261,8 +247,6 @@ void DrawCube(Vector3 position, float width, float height, float length, Color c
float y = 0.0f;
float z = 0.0f;
- rlCheckRenderBatchLimit(36);
-
rlPushMatrix();
// NOTE: Transformation is applied in inverse order (scale -> rotate -> translate)
rlTranslatef(position.x, position.y, position.z);
@@ -342,65 +326,67 @@ void DrawCubeWires(Vector3 position, float width, float height, float length, Co
float y = 0.0f;
float z = 0.0f;
- rlCheckRenderBatchLimit(36);
-
rlPushMatrix();
rlTranslatef(position.x, position.y, position.z);
rlBegin(RL_LINES);
rlColor4ub(color.r, color.g, color.b, color.a);
- // Front face -----------------------------------------------------
+ // Front face
+ //------------------------------------------------------------------
// Bottom line
- rlVertex3f(x-width/2, y-height/2, z+length/2); // Bottom left
- rlVertex3f(x+width/2, y-height/2, z+length/2); // Bottom right
+ rlVertex3f(x - width/2, y - height/2, z + length/2); // Bottom left
+ rlVertex3f(x + width/2, y - height/2, z + length/2); // Bottom right
// Left line
- rlVertex3f(x+width/2, y-height/2, z+length/2); // Bottom right
- rlVertex3f(x+width/2, y+height/2, z+length/2); // Top right
+ rlVertex3f(x + width/2, y - height/2, z + length/2); // Bottom right
+ rlVertex3f(x + width/2, y + height/2, z + length/2); // Top right
// Top line
- rlVertex3f(x+width/2, y+height/2, z+length/2); // Top right
- rlVertex3f(x-width/2, y+height/2, z+length/2); // Top left
+ rlVertex3f(x + width/2, y + height/2, z + length/2); // Top right
+ rlVertex3f(x - width/2, y + height/2, z + length/2); // Top left
// Right line
- rlVertex3f(x-width/2, y+height/2, z+length/2); // Top left
- rlVertex3f(x-width/2, y-height/2, z+length/2); // Bottom left
+ rlVertex3f(x - width/2, y + height/2, z + length/2); // Top left
+ rlVertex3f(x - width/2, y - height/2, z + length/2); // Bottom left
- // Back face ------------------------------------------------------
+ // Back face
+ //------------------------------------------------------------------
// Bottom line
- rlVertex3f(x-width/2, y-height/2, z-length/2); // Bottom left
- rlVertex3f(x+width/2, y-height/2, z-length/2); // Bottom right
+ rlVertex3f(x - width/2, y - height/2, z - length/2); // Bottom left
+ rlVertex3f(x + width/2, y - height/2, z - length/2); // Bottom right
// Left line
- rlVertex3f(x+width/2, y-height/2, z-length/2); // Bottom right
- rlVertex3f(x+width/2, y+height/2, z-length/2); // Top right
+ rlVertex3f(x + width/2, y - height/2, z - length/2); // Bottom right
+ rlVertex3f(x + width/2, y + height/2, z - length/2); // Top right
// Top line
- rlVertex3f(x+width/2, y+height/2, z-length/2); // Top right
- rlVertex3f(x-width/2, y+height/2, z-length/2); // Top left
+ rlVertex3f(x + width/2, y + height/2, z - length/2); // Top right
+ rlVertex3f(x - width/2, y + height/2, z - length/2); // Top left
// Right line
- rlVertex3f(x-width/2, y+height/2, z-length/2); // Top left
- rlVertex3f(x-width/2, y-height/2, z-length/2); // Bottom left
+ rlVertex3f(x - width/2, y + height/2, z - length/2); // Top left
+ rlVertex3f(x - width/2, y - height/2, z - length/2); // Bottom left
- // Top face -------------------------------------------------------
+ // Top face
+ //------------------------------------------------------------------
// Left line
- rlVertex3f(x-width/2, y+height/2, z+length/2); // Top left front
- rlVertex3f(x-width/2, y+height/2, z-length/2); // Top left back
+ rlVertex3f(x - width/2, y + height/2, z + length/2); // Top left front
+ rlVertex3f(x - width/2, y + height/2, z - length/2); // Top left back
// Right line
- rlVertex3f(x+width/2, y+height/2, z+length/2); // Top right front
- rlVertex3f(x+width/2, y+height/2, z-length/2); // Top right back
+ rlVertex3f(x + width/2, y + height/2, z + length/2); // Top right front
+ rlVertex3f(x + width/2, y + height/2, z - length/2); // Top right back
- // Bottom face ---------------------------------------------------
+ // Bottom face
+ //------------------------------------------------------------------
// Left line
- rlVertex3f(x-width/2, y-height/2, z+length/2); // Top left front
- rlVertex3f(x-width/2, y-height/2, z-length/2); // Top left back
+ rlVertex3f(x - width/2, y - height/2, z + length/2); // Top left front
+ rlVertex3f(x - width/2, y - height/2, z - length/2); // Top left back
// Right line
- rlVertex3f(x+width/2, y-height/2, z+length/2); // Top right front
- rlVertex3f(x+width/2, y-height/2, z-length/2); // Top right back
+ rlVertex3f(x + width/2, y - height/2, z + length/2); // Top right front
+ rlVertex3f(x + width/2, y - height/2, z - length/2); // Top right back
rlEnd();
rlPopMatrix();
}
@@ -419,8 +405,6 @@ void DrawCubeTexture(Texture2D texture, Vector3 position, float width, float hei
float y = position.y;
float z = position.z;
- rlCheckRenderBatchLimit(36);
-
rlSetTexture(texture.id);
//rlPushMatrix();
@@ -432,37 +416,37 @@ void DrawCubeTexture(Texture2D texture, Vector3 position, float width, float hei
rlBegin(RL_QUADS);
rlColor4ub(color.r, color.g, color.b, color.a);
// Front Face
- rlNormal3f(0.0f, 0.0f, 1.0f); // Normal Pointing Towards Viewer
+ rlNormal3f(0.0f, 0.0f, 1.0f); // Normal Pointing Towards Viewer
rlTexCoord2f(0.0f, 0.0f); rlVertex3f(x - width/2, y - height/2, z + length/2); // Bottom Left Of The Texture and Quad
rlTexCoord2f(1.0f, 0.0f); rlVertex3f(x + width/2, y - height/2, z + length/2); // Bottom Right Of The Texture and Quad
rlTexCoord2f(1.0f, 1.0f); rlVertex3f(x + width/2, y + height/2, z + length/2); // Top Right Of The Texture and Quad
rlTexCoord2f(0.0f, 1.0f); rlVertex3f(x - width/2, y + height/2, z + length/2); // Top Left Of The Texture and Quad
// Back Face
- rlNormal3f(0.0f, 0.0f, - 1.0f); // Normal Pointing Away From Viewer
+ rlNormal3f(0.0f, 0.0f, - 1.0f); // Normal Pointing Away From Viewer
rlTexCoord2f(1.0f, 0.0f); rlVertex3f(x - width/2, y - height/2, z - length/2); // Bottom Right Of The Texture and Quad
rlTexCoord2f(1.0f, 1.0f); rlVertex3f(x - width/2, y + height/2, z - length/2); // Top Right Of The Texture and Quad
rlTexCoord2f(0.0f, 1.0f); rlVertex3f(x + width/2, y + height/2, z - length/2); // Top Left Of The Texture and Quad
rlTexCoord2f(0.0f, 0.0f); rlVertex3f(x + width/2, y - height/2, z - length/2); // Bottom Left Of The Texture and Quad
// Top Face
- rlNormal3f(0.0f, 1.0f, 0.0f); // Normal Pointing Up
+ rlNormal3f(0.0f, 1.0f, 0.0f); // Normal Pointing Up
rlTexCoord2f(0.0f, 1.0f); rlVertex3f(x - width/2, y + height/2, z - length/2); // Top Left Of The Texture and Quad
rlTexCoord2f(0.0f, 0.0f); rlVertex3f(x - width/2, y + height/2, z + length/2); // Bottom Left Of The Texture and Quad
rlTexCoord2f(1.0f, 0.0f); rlVertex3f(x + width/2, y + height/2, z + length/2); // Bottom Right Of The Texture and Quad
rlTexCoord2f(1.0f, 1.0f); rlVertex3f(x + width/2, y + height/2, z - length/2); // Top Right Of The Texture and Quad
// Bottom Face
- rlNormal3f(0.0f, - 1.0f, 0.0f); // Normal Pointing Down
+ rlNormal3f(0.0f, - 1.0f, 0.0f); // Normal Pointing Down
rlTexCoord2f(1.0f, 1.0f); rlVertex3f(x - width/2, y - height/2, z - length/2); // Top Right Of The Texture and Quad
rlTexCoord2f(0.0f, 1.0f); rlVertex3f(x + width/2, y - height/2, z - length/2); // Top Left Of The Texture and Quad
rlTexCoord2f(0.0f, 0.0f); rlVertex3f(x + width/2, y - height/2, z + length/2); // Bottom Left Of The Texture and Quad
rlTexCoord2f(1.0f, 0.0f); rlVertex3f(x - width/2, y - height/2, z + length/2); // Bottom Right Of The Texture and Quad
// Right face
- rlNormal3f(1.0f, 0.0f, 0.0f); // Normal Pointing Right
+ rlNormal3f(1.0f, 0.0f, 0.0f); // Normal Pointing Right
rlTexCoord2f(1.0f, 0.0f); rlVertex3f(x + width/2, y - height/2, z - length/2); // Bottom Right Of The Texture and Quad
rlTexCoord2f(1.0f, 1.0f); rlVertex3f(x + width/2, y + height/2, z - length/2); // Top Right Of The Texture and Quad
rlTexCoord2f(0.0f, 1.0f); rlVertex3f(x + width/2, y + height/2, z + length/2); // Top Left Of The Texture and Quad
rlTexCoord2f(0.0f, 0.0f); rlVertex3f(x + width/2, y - height/2, z + length/2); // Bottom Left Of The Texture and Quad
// Left Face
- rlNormal3f( - 1.0f, 0.0f, 0.0f); // Normal Pointing Left
+ rlNormal3f( - 1.0f, 0.0f, 0.0f); // Normal Pointing Left
rlTexCoord2f(0.0f, 0.0f); rlVertex3f(x - width/2, y - height/2, z - length/2); // Bottom Left Of The Texture and Quad
rlTexCoord2f(1.0f, 0.0f); rlVertex3f(x - width/2, y - height/2, z + length/2); // Bottom Right Of The Texture and Quad
rlTexCoord2f(1.0f, 1.0f); rlVertex3f(x - width/2, y + height/2, z + length/2); // Top Right Of The Texture and Quad
@@ -482,8 +466,6 @@ void DrawCubeTextureRec(Texture2D texture, Rectangle source, Vector3 position, f
float texWidth = (float)texture.width;
float texHeight = (float)texture.height;
- rlCheckRenderBatchLimit(36);
-
rlSetTexture(texture.id);
rlBegin(RL_QUADS);
@@ -569,9 +551,6 @@ void DrawSphere(Vector3 centerPos, float radius, Color color)
// Draw sphere with extended parameters
void DrawSphereEx(Vector3 centerPos, float radius, int rings, int slices, Color color)
{
- int numVertex = (rings + 2)*slices*6;
- rlCheckRenderBatchLimit(numVertex);
-
rlPushMatrix();
// NOTE: Transformation is applied in inverse order (scale -> translate)
rlTranslatef(centerPos.x, centerPos.y, centerPos.z);
@@ -612,9 +591,6 @@ void DrawSphereEx(Vector3 centerPos, float radius, int rings, int slices, Color
// Draw sphere wires
void DrawSphereWires(Vector3 centerPos, float radius, int rings, int slices, Color color)
{
- int numVertex = (rings + 2)*slices*6;
- rlCheckRenderBatchLimit(numVertex);
-
rlPushMatrix();
// NOTE: Transformation is applied in inverse order (scale -> translate)
rlTranslatef(centerPos.x, centerPos.y, centerPos.z);
@@ -659,9 +635,6 @@ void DrawCylinder(Vector3 position, float radiusTop, float radiusBottom, float h
{
if (sides < 3) sides = 3;
- int numVertex = sides*6;
- rlCheckRenderBatchLimit(numVertex);
-
rlPushMatrix();
rlTranslatef(position.x, position.y, position.z);
@@ -718,9 +691,6 @@ void DrawCylinderEx(Vector3 startPos, Vector3 endPos, float startRadius, float e
{
if (sides < 3) sides = 3;
- int numVertex = sides*6;
- rlCheckRenderBatchLimit(numVertex);
-
Vector3 direction = { endPos.x - startPos.x, endPos.y - startPos.y, endPos.z - startPos.z };
if ((direction.x == 0) && (direction.y == 0) && (direction.z == 0)) return;
@@ -777,9 +747,6 @@ void DrawCylinderWires(Vector3 position, float radiusTop, float radiusBottom, fl
{
if (sides < 3) sides = 3;
- int numVertex = sides*8;
- rlCheckRenderBatchLimit(numVertex);
-
rlPushMatrix();
rlTranslatef(position.x, position.y, position.z);
@@ -811,9 +778,6 @@ void DrawCylinderWiresEx(Vector3 startPos, Vector3 endPos, float startRadius, fl
{
if (sides < 3) sides = 3;
- int numVertex = sides*6;
- rlCheckRenderBatchLimit(numVertex);
-
Vector3 direction = { endPos.x - startPos.x, endPos.y - startPos.y, endPos.z - startPos.z };
if ((direction.x == 0) && (direction.y == 0) && (direction.z == 0))return;
@@ -853,12 +817,9 @@ void DrawCylinderWiresEx(Vector3 startPos, Vector3 endPos, float startRadius, fl
rlEnd();
}
-
// Draw a plane
void DrawPlane(Vector3 centerPos, Vector2 size, Color color)
{
- rlCheckRenderBatchLimit(4);
-
// NOTE: Plane is always created on XZ ground
rlPushMatrix();
rlTranslatef(centerPos.x, centerPos.y, centerPos.z);
@@ -895,8 +856,6 @@ void DrawGrid(int slices, float spacing)
{
int halfSlices = slices/2;
- rlCheckRenderBatchLimit((slices + 2)*4);
-
rlBegin(RL_LINES);
for (int i = -halfSlices; i <= halfSlices; i++)
{
@@ -3421,8 +3380,6 @@ void DrawBillboardPro(Camera camera, Texture2D texture, Rectangle source, Vector
bottomRight = Vector3Add(bottomRight, position);
bottomLeft = Vector3Add(bottomLeft, position);
- rlCheckRenderBatchLimit(8);
-
rlSetTexture(texture.id);
rlBegin(RL_QUADS);
diff --git a/src/rshapes.c b/src/rshapes.c
index 5e79d893..458569a5 100644
--- a/src/rshapes.c
+++ b/src/rshapes.c
@@ -238,8 +238,6 @@ void DrawLineStrip(Vector2 *points, int pointCount, Color color)
{
if (pointCount >= 2)
{
- rlCheckRenderBatchLimit(pointCount);
-
rlBegin(RL_LINES);
rlColor4ub(color.r, color.g, color.b, color.a);
@@ -287,8 +285,6 @@ void DrawCircleSector(Vector2 center, float radius, float startAngle, float endA
float angle = startAngle;
#if defined(SUPPORT_QUADS_DRAW_MODE)
- rlCheckRenderBatchLimit(4*segments/2);
-
rlSetTexture(texShapes.id);
rlBegin(RL_QUADS);
@@ -333,8 +329,6 @@ void DrawCircleSector(Vector2 center, float radius, float startAngle, float endA
rlSetTexture(0);
#else
- rlCheckRenderBatchLimit(3*segments);
-
rlBegin(RL_TRIANGLES);
for (int i = 0; i < segments; i++)
{
@@ -377,13 +371,7 @@ void DrawCircleSectorLines(Vector2 center, float radius, float startAngle, float
float stepLength = (endAngle - startAngle)/(float)segments;
float angle = startAngle;
-
- // Hide the cap lines when the circle is full
bool showCapLines = true;
- int limit = 2*(segments + 2);
- if ((int)(endAngle - startAngle)%360 == 0) { limit = 2*segments; showCapLines = false; }
-
- rlCheckRenderBatchLimit(limit);
rlBegin(RL_LINES);
if (showCapLines)
@@ -416,8 +404,6 @@ void DrawCircleSectorLines(Vector2 center, float radius, float startAngle, float
// NOTE: Gradient goes from center (color1) to border (color2)
void DrawCircleGradient(int centerX, int centerY, float radius, Color color1, Color color2)
{
- rlCheckRenderBatchLimit(3*36);
-
rlBegin(RL_TRIANGLES);
for (int i = 0; i < 360; i += 10)
{
@@ -441,8 +427,6 @@ void DrawCircleV(Vector2 center, float radius, Color color)
// Draw circle outline
void DrawCircleLines(int centerX, int centerY, float radius, Color color)
{
- rlCheckRenderBatchLimit(2*36);
-
rlBegin(RL_LINES);
rlColor4ub(color.r, color.g, color.b, color.a);
@@ -458,8 +442,6 @@ void DrawCircleLines(int centerX, int centerY, float radius, Color color)
// Draw ellipse
void DrawEllipse(int centerX, int centerY, float radiusH, float radiusV, Color color)
{
- rlCheckRenderBatchLimit(3*36);
-
rlBegin(RL_TRIANGLES);
for (int i = 0; i < 360; i += 10)
{
@@ -474,8 +456,6 @@ void DrawEllipse(int centerX, int centerY, float radiusH, float radiusV, Color c
// Draw ellipse outline
void DrawEllipseLines(int centerX, int centerY, float radiusH, float radiusV, Color color)
{
- rlCheckRenderBatchLimit(2*36);
-
rlBegin(RL_LINES);
for (int i = 0; i < 360; i += 10)
{
@@ -532,8 +512,6 @@ void DrawRing(Vector2 center, float innerRadius, float outerRadius, float startA
float angle = startAngle;
#if defined(SUPPORT_QUADS_DRAW_MODE)
- rlCheckRenderBatchLimit(4*segments);
-
rlSetTexture(texShapes.id);
rlBegin(RL_QUADS);
@@ -559,8 +537,6 @@ void DrawRing(Vector2 center, float innerRadius, float outerRadius, float startA
rlSetTexture(0);
#else
- rlCheckRenderBatchLimit(6*segments);
-
rlBegin(RL_TRIANGLES);
for (int i = 0; i < segments; i++)
{
@@ -623,12 +599,7 @@ void DrawRingLines(Vector2 center, float innerRadius, float outerRadius, float s
float stepLength = (endAngle - startAngle)/(float)segments;
float angle = startAngle;
-
bool showCapLines = true;
- int limit = 4*(segments + 1);
- if ((int)(endAngle - startAngle)%360 == 0) { limit = 4*segments; showCapLines = false; }
-
- rlCheckRenderBatchLimit(limit);
rlBegin(RL_LINES);
if (showCapLines)
@@ -720,8 +691,6 @@ void DrawRectanglePro(Rectangle rec, Vector2 origin, float rotation, Color color
}
#if defined(SUPPORT_QUADS_DRAW_MODE)
- rlCheckRenderBatchLimit(4);
-
rlSetTexture(texShapes.id);
rlBegin(RL_QUADS);
@@ -745,8 +714,6 @@ void DrawRectanglePro(Rectangle rec, Vector2 origin, float rotation, Color color
rlSetTexture(0);
#else
- rlCheckRenderBatchLimit(6);
-
rlBegin(RL_TRIANGLES);
rlColor4ub(color.r, color.g, color.b, color.a);
@@ -781,8 +748,6 @@ void DrawRectangleGradientH(int posX, int posY, int width, int height, Color col
// NOTE: Colors refer to corners, starting at top-lef corner and counter-clockwise
void DrawRectangleGradientEx(Rectangle rec, Color col1, Color col2, Color col3, Color col4)
{
- rlCheckRenderBatchLimit(4);
-
rlSetTexture(texShapes.id);
rlBegin(RL_QUADS);
@@ -923,8 +888,6 @@ void DrawRectangleRounded(Rectangle rec, float roundness, int segments, Color co
const float angles[4] = { 180.0f, 90.0f, 0.0f, 270.0f };
#if defined(SUPPORT_QUADS_DRAW_MODE)
- rlCheckRenderBatchLimit(16*segments/2 + 5*4);
-
rlSetTexture(texShapes.id);
rlBegin(RL_QUADS);
@@ -1022,8 +985,6 @@ void DrawRectangleRounded(Rectangle rec, float roundness, int segments, Color co
rlEnd();
rlSetTexture(0);
#else
- rlCheckRenderBatchLimit(12*segments + 5*6); // 4 corners with 3 vertices per segment + 5 rectangles with 6 vertices each
-
rlBegin(RL_TRIANGLES);
// Draw all of the 4 corners: [1] Upper Left Corner, [3] Upper Right Corner, [5] Lower Right Corner, [7] Lower Left Corner
@@ -1155,8 +1116,6 @@ void DrawRectangleRoundedLines(Rectangle rec, float roundness, int segments, flo
if (lineThick > 1)
{
#if defined(SUPPORT_QUADS_DRAW_MODE)
- rlCheckRenderBatchLimit(4*4*segments + 4*4); // 4 corners with 4 vertices for each segment + 4 rectangles with 4 vertices each
-
rlSetTexture(texShapes.id);
rlBegin(RL_QUADS);
@@ -1229,8 +1188,6 @@ void DrawRectangleRoundedLines(Rectangle rec, float roundness, int segments, flo
rlEnd();
rlSetTexture(0);
#else
- rlCheckRenderBatchLimit(4*6*segments + 4*6); // 4 corners with 6(2*3) vertices for each segment + 4 rectangles with 6 vertices each
-
rlBegin(RL_TRIANGLES);
// Draw all of the 4 corners first: Upper Left Corner, Upper Right Corner, Lower Right Corner, Lower Left Corner
@@ -1296,8 +1253,6 @@ void DrawRectangleRoundedLines(Rectangle rec, float roundness, int segments, flo
else
{
// Use LINES to draw the outline
- rlCheckRenderBatchLimit(8*segments + 4*2); // 4 corners with 2 vertices for each segment + 4 rectangles with 2 vertices each
-
rlBegin(RL_LINES);
// Draw all of the 4 corners first: Upper Left Corner, Upper Right Corner, Lower Right Corner, Lower Left Corner
@@ -1332,8 +1287,6 @@ void DrawRectangleRoundedLines(Rectangle rec, float roundness, int segments, flo
void DrawTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color color)
{
#if defined(SUPPORT_QUADS_DRAW_MODE)
- rlCheckRenderBatchLimit(4);
-
rlSetTexture(texShapes.id);
rlBegin(RL_QUADS);
@@ -1354,8 +1307,6 @@ void DrawTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color color)
rlSetTexture(0);
#else
- rlCheckRenderBatchLimit(3);
-
rlBegin(RL_TRIANGLES);
rlColor4ub(color.r, color.g, color.b, color.a);
rlVertex2f(v1.x, v1.y);
@@ -1369,8 +1320,6 @@ void DrawTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color color)
// NOTE: Vertex must be provided in counter-clockwise order
void DrawTriangleLines(Vector2 v1, Vector2 v2, Vector2 v3, Color color)
{
- rlCheckRenderBatchLimit(6);
-
rlBegin(RL_LINES);
rlColor4ub(color.r, color.g, color.b, color.a);
rlVertex2f(v1.x, v1.y);
@@ -1391,8 +1340,6 @@ void DrawTriangleFan(Vector2 *points, int pointCount, Color color)
{
if (pointCount >= 3)
{
- rlCheckRenderBatchLimit((pointCount - 2)*4);
-
rlSetTexture(texShapes.id);
rlBegin(RL_QUADS);
rlColor4ub(color.r, color.g, color.b, color.a);
@@ -1422,8 +1369,6 @@ void DrawTriangleStrip(Vector2 *points, int pointCount, Color color)
{
if (pointCount >= 3)
{
- rlCheckRenderBatchLimit(3*(pointCount - 2));
-
rlBegin(RL_TRIANGLES);
rlColor4ub(color.r, color.g, color.b, color.a);
@@ -1452,12 +1397,6 @@ void DrawPoly(Vector2 center, int sides, float radius, float rotation, Color col
if (sides < 3) sides = 3;
float centralAngle = 0.0f;
-#if defined(SUPPORT_QUADS_DRAW_MODE)
- rlCheckRenderBatchLimit(4*sides); // Each side is a quad
-#else
- rlCheckRenderBatchLimit(3*sides);
-#endif
-
rlPushMatrix();
rlTranslatef(center.x, center.y, 0.0f);
rlRotatef(rotation, 0.0f, 0.0f, 1.0f);
@@ -1508,8 +1447,6 @@ void DrawPolyLines(Vector2 center, int sides, float radius, float rotation, Colo
if (sides < 3) sides = 3;
float centralAngle = 0.0f;
- rlCheckRenderBatchLimit(2*sides);
-
rlPushMatrix();
rlTranslatef(center.x, center.y, 0.0f);
rlRotatef(rotation, 0.0f, 0.0f, 1.0f);
@@ -1534,12 +1471,6 @@ void DrawPolyLinesEx(Vector2 center, int sides, float radius, float rotation, fl
float exteriorAngle = 360.0f/(float)sides;
float innerRadius = radius - (lineThick*cosf(DEG2RAD*exteriorAngle/2.0f));
-#if defined(SUPPORT_QUADS_DRAW_MODE)
- rlCheckRenderBatchLimit(4*sides);
-#else
- rlCheckRenderBatchLimit(6*sides);
-#endif
-
rlPushMatrix();
rlTranslatef(center.x, center.y, 0.0f);
rlRotatef(rotation, 0.0f, 0.0f, 1.0f);
diff --git a/src/rtextures.c b/src/rtextures.c
index 2490d1d1..24fbafd2 100644
--- a/src/rtextures.c
+++ b/src/rtextures.c
@@ -3362,8 +3362,6 @@ void DrawTexturePro(Texture2D texture, Rectangle source, Rectangle dest, Vector2
bottomRight.y = y + (dx + dest.width)*sinRotation + (dy + dest.height)*cosRotation;
}
- rlCheckRenderBatchLimit(4); // Make sure there is enough free space on the batch buffer
-
rlSetTexture(texture.id);
rlBegin(RL_QUADS);
@@ -3494,8 +3492,6 @@ void DrawTextureNPatch(Texture2D texture, NPatchInfo nPatchInfo, Rectangle dest,
coordD.x = (nPatchInfo.source.x + nPatchInfo.source.width)/width;
coordD.y = (nPatchInfo.source.y + nPatchInfo.source.height)/height;
- rlCheckRenderBatchLimit(9 * 3 * 2); // Maxium number of verts that could happen
-
rlSetTexture(texture.id);
rlPushMatrix();
@@ -3639,8 +3635,6 @@ void DrawTextureNPatch(Texture2D texture, NPatchInfo nPatchInfo, Rectangle dest,
// without crossing perimeter, points must be in anticlockwise order
void DrawTexturePoly(Texture2D texture, Vector2 center, Vector2 *points, Vector2 *texcoords, int pointCount, Color tint)
{
- rlCheckRenderBatchLimit((pointCount - 1)*4);
-
rlSetTexture(texture.id);
// Texturing is only supported on RL_QUADS