WARNING: BREAKING: Removed rlCheckRenderBatchLimit()
requirement
Updated version to `rlgl 4.2`
This commit is contained in:
parent
ad5ffd78d6
commit
9996e328cb
4 changed files with 115 additions and 223 deletions
50
src/rlgl.h
50
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
|
||||
|
@ -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,9 +1331,31 @@ 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))
|
||||
{
|
||||
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 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;
|
||||
|
@ -1364,10 +1375,7 @@ void rlVertex3f(float x, float y, float z)
|
|||
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].colors[4*RLGL.State.vertexCounter + 3] = RLGL.State.colora;
|
||||
|
||||
RLGL.State.vertexCounter++;
|
||||
|
||||
RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexCount++;
|
||||
}
|
||||
else TRACELOG(RL_LOG_ERROR, "RLGL: Batch elements overflow");
|
||||
}
|
||||
|
||||
// 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
|
||||
|
|
109
src/rmodels.c
109
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,9 +216,7 @@ 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);
|
||||
|
@ -250,7 +237,6 @@ void DrawTriangleStrip3D(Vector3 *points, int pointCount, Color color)
|
|||
}
|
||||
}
|
||||
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();
|
||||
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue