|
|
|
@ -279,7 +279,7 @@ typedef enum { |
|
|
|
|
|
|
|
// Dynamic vertex buffers (position + texcoords + colors + indices arrays) |
|
|
|
typedef struct rlVertexBuffer { |
|
|
|
int elementsCount; // Number of elements in the buffer (QUADS) |
|
|
|
int elementCount; // Number of elements in the buffer (QUADS) |
|
|
|
|
|
|
|
int vCounter; // Vertex position counter to process (and draw) from full buffer |
|
|
|
int tcCounter; // Vertex texcoord counter to process (and draw) from full buffer |
|
|
|
@ -316,12 +316,12 @@ typedef struct rlDrawCall { |
|
|
|
|
|
|
|
// rlRenderBatch type |
|
|
|
typedef struct rlRenderBatch { |
|
|
|
int buffersCount; // Number of vertex buffers (multi-buffering support) |
|
|
|
int bufferCount; // Number of vertex buffers (multi-buffering support) |
|
|
|
int currentBuffer; // Current buffer tracking in case of multi-buffering |
|
|
|
rlVertexBuffer *vertexBuffer; // Dynamic buffer(s) for vertex data |
|
|
|
|
|
|
|
rlDrawCall *draws; // Draw calls array, depends on textureId |
|
|
|
int drawsCounter; // Draw calls counter |
|
|
|
int drawCounterer; // Draw calls counter |
|
|
|
float currentDepth; // Current depth value for next draw |
|
|
|
} rlRenderBatch; |
|
|
|
|
|
|
|
@ -1210,34 +1210,34 @@ void rlBegin(int mode) |
|
|
|
{ |
|
|
|
// Draw mode can be RL_LINES, RL_TRIANGLES and RL_QUADS |
|
|
|
// NOTE: In all three cases, vertex are accumulated over default internal vertex buffer |
|
|
|
if (RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].mode != mode) |
|
|
|
if (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].mode != mode) |
|
|
|
{ |
|
|
|
if (RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount > 0) |
|
|
|
if (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexCount > 0) |
|
|
|
{ |
|
|
|
// Make sure current RLGL.currentBatch->draws[i].vertexCount is aligned a multiple of 4, |
|
|
|
// that way, following QUADS drawing will keep aligned with index processing |
|
|
|
// It implies adding some extra alignment vertex at the end of the draw, |
|
|
|
// those vertex are not processed but they are considered as an additional offset |
|
|
|
// for the next set of vertex to be drawn |
|
|
|
if (RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].mode == RL_LINES) RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment = ((RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount < 4)? RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount : RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount%4); |
|
|
|
else if (RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].mode == RL_TRIANGLES) RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment = ((RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount < 4)? 1 : (4 - (RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount%4))); |
|
|
|
else RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment = 0; |
|
|
|
if (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].mode == RL_LINES) RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexAlignment = ((RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexCount < 4)? RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexCount : RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexCount%4); |
|
|
|
else if (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].mode == RL_TRIANGLES) RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexAlignment = ((RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexCount < 4)? 1 : (4 - (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexCount%4))); |
|
|
|
else RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexAlignment = 0; |
|
|
|
|
|
|
|
if (!rlCheckRenderBatchLimit(RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment)) |
|
|
|
if (!rlCheckRenderBatchLimit(RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexAlignment)) |
|
|
|
{ |
|
|
|
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter += RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment; |
|
|
|
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].cCounter += RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment; |
|
|
|
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].tcCounter += RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment; |
|
|
|
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter += RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexAlignment; |
|
|
|
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].cCounter += RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexAlignment; |
|
|
|
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].tcCounter += RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexAlignment; |
|
|
|
|
|
|
|
RLGL.currentBatch->drawsCounter++; |
|
|
|
RLGL.currentBatch->drawCounterer++; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (RLGL.currentBatch->drawsCounter >= RL_DEFAULT_BATCH_DRAWCALLS) rlDrawRenderBatch(RLGL.currentBatch); |
|
|
|
if (RLGL.currentBatch->drawCounterer >= RL_DEFAULT_BATCH_DRAWCALLS) rlDrawRenderBatch(RLGL.currentBatch); |
|
|
|
|
|
|
|
RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].mode = mode; |
|
|
|
RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount = 0; |
|
|
|
RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].textureId = RLGL.State.defaultTextureId; |
|
|
|
RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].mode = mode; |
|
|
|
RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexCount = 0; |
|
|
|
RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].textureId = RLGL.State.defaultTextureId; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -1285,7 +1285,7 @@ void rlEnd(void) |
|
|
|
// Verify internal buffers limits |
|
|
|
// NOTE: This check is combined with usage of rlCheckRenderBatchLimit() |
|
|
|
if ((RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter) >= |
|
|
|
(RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].elementsCount*4 - 4)) |
|
|
|
(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! |
|
|
|
@ -1312,14 +1312,14 @@ void rlVertex3f(float x, float y, float z) |
|
|
|
} |
|
|
|
|
|
|
|
// Verify that current vertex buffer elements limit has not been reached |
|
|
|
if (RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter < (RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].elementsCount*4)) |
|
|
|
if (RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter < (RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].elementCount*4)) |
|
|
|
{ |
|
|
|
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vertices[3*RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter] = tx; |
|
|
|
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vertices[3*RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter + 1] = ty; |
|
|
|
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vertices[3*RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter + 2] = tz; |
|
|
|
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter++; |
|
|
|
|
|
|
|
RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount++; |
|
|
|
RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexCount++; |
|
|
|
} |
|
|
|
else TRACELOG(RL_LOG_ERROR, "RLGL: Batch elements overflow"); |
|
|
|
} |
|
|
|
@ -1390,7 +1390,7 @@ void rlSetTexture(unsigned int id) |
|
|
|
#else |
|
|
|
// NOTE: If quads batch limit is reached, we force a draw call and next batch starts |
|
|
|
if (RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter >= |
|
|
|
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].elementsCount*4) |
|
|
|
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].elementCount*4) |
|
|
|
{ |
|
|
|
rlDrawRenderBatch(RLGL.currentBatch); |
|
|
|
} |
|
|
|
@ -1401,33 +1401,33 @@ void rlSetTexture(unsigned int id) |
|
|
|
#if defined(GRAPHICS_API_OPENGL_11) |
|
|
|
rlEnableTexture(id); |
|
|
|
#else |
|
|
|
if (RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].textureId != id) |
|
|
|
if (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].textureId != id) |
|
|
|
{ |
|
|
|
if (RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount > 0) |
|
|
|
if (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexCount > 0) |
|
|
|
{ |
|
|
|
// Make sure current RLGL.currentBatch->draws[i].vertexCount is aligned a multiple of 4, |
|
|
|
// that way, following QUADS drawing will keep aligned with index processing |
|
|
|
// It implies adding some extra alignment vertex at the end of the draw, |
|
|
|
// those vertex are not processed but they are considered as an additional offset |
|
|
|
// for the next set of vertex to be drawn |
|
|
|
if (RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].mode == RL_LINES) RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment = ((RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount < 4)? RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount : RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount%4); |
|
|
|
else if (RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].mode == RL_TRIANGLES) RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment = ((RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount < 4)? 1 : (4 - (RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount%4))); |
|
|
|
else RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment = 0; |
|
|
|
if (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].mode == RL_LINES) RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexAlignment = ((RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexCount < 4)? RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexCount : RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexCount%4); |
|
|
|
else if (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].mode == RL_TRIANGLES) RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexAlignment = ((RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexCount < 4)? 1 : (4 - (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexCount%4))); |
|
|
|
else RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexAlignment = 0; |
|
|
|
|
|
|
|
if (!rlCheckRenderBatchLimit(RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment)) |
|
|
|
if (!rlCheckRenderBatchLimit(RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexAlignment)) |
|
|
|
{ |
|
|
|
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter += RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment; |
|
|
|
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].cCounter += RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment; |
|
|
|
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].tcCounter += RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment; |
|
|
|
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter += RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexAlignment; |
|
|
|
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].cCounter += RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexAlignment; |
|
|
|
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].tcCounter += RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexAlignment; |
|
|
|
|
|
|
|
RLGL.currentBatch->drawsCounter++; |
|
|
|
RLGL.currentBatch->drawCounterer++; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (RLGL.currentBatch->drawsCounter >= RL_DEFAULT_BATCH_DRAWCALLS) rlDrawRenderBatch(RLGL.currentBatch); |
|
|
|
if (RLGL.currentBatch->drawCounterer >= RL_DEFAULT_BATCH_DRAWCALLS) rlDrawRenderBatch(RLGL.currentBatch); |
|
|
|
|
|
|
|
RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].textureId = id; |
|
|
|
RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount = 0; |
|
|
|
RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].textureId = id; |
|
|
|
RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexCount = 0; |
|
|
|
} |
|
|
|
#endif |
|
|
|
} |
|
|
|
@ -2169,7 +2169,7 @@ rlRenderBatch rlLoadRenderBatch(int numBuffers, int bufferElements) |
|
|
|
|
|
|
|
for (int i = 0; i < numBuffers; i++) |
|
|
|
{ |
|
|
|
batch.vertexBuffer[i].elementsCount = bufferElements; |
|
|
|
batch.vertexBuffer[i].elementCount = bufferElements; |
|
|
|
|
|
|
|
batch.vertexBuffer[i].vertices = (float *)RL_MALLOC(bufferElements*3*4*sizeof(float)); // 3 float by vertex, 4 vertex by quad |
|
|
|
batch.vertexBuffer[i].texcoords = (float *)RL_MALLOC(bufferElements*2*4*sizeof(float)); // 2 float by texcoord, 4 texcoord by quad |
|
|
|
@ -2274,8 +2274,8 @@ rlRenderBatch rlLoadRenderBatch(int numBuffers, int bufferElements) |
|
|
|
//batch.draws[i].RLGL.State.modelview = rlMatrixIdentity(); |
|
|
|
} |
|
|
|
|
|
|
|
batch.buffersCount = numBuffers; // Record buffer count |
|
|
|
batch.drawsCounter = 1; // Reset draws counter |
|
|
|
batch.bufferCount = numBuffers; // Record buffer count |
|
|
|
batch.drawCounterer = 1; // Reset draws counter |
|
|
|
batch.currentDepth = -1.0f; // Reset depth value |
|
|
|
//-------------------------------------------------------------------------------------------- |
|
|
|
#endif |
|
|
|
@ -2297,7 +2297,7 @@ void rlUnloadRenderBatch(rlRenderBatch batch) |
|
|
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); |
|
|
|
|
|
|
|
// Unload all vertex buffers data |
|
|
|
for (int i = 0; i < batch.buffersCount; i++) |
|
|
|
for (int i = 0; i < batch.bufferCount; i++) |
|
|
|
{ |
|
|
|
// Delete VBOs from GPU (VRAM) |
|
|
|
glDeleteBuffers(1, &batch.vertexBuffer[i].vboId[0]); |
|
|
|
@ -2338,17 +2338,17 @@ void rlDrawRenderBatch(rlRenderBatch *batch) |
|
|
|
// Vertex positions buffer |
|
|
|
glBindBuffer(GL_ARRAY_BUFFER, batch->vertexBuffer[batch->currentBuffer].vboId[0]); |
|
|
|
glBufferSubData(GL_ARRAY_BUFFER, 0, batch->vertexBuffer[batch->currentBuffer].vCounter*3*sizeof(float), batch->vertexBuffer[batch->currentBuffer].vertices); |
|
|
|
//glBufferData(GL_ARRAY_BUFFER, sizeof(float)*3*4*batch->vertexBuffer[batch->currentBuffer].elementsCount, batch->vertexBuffer[batch->currentBuffer].vertices, GL_DYNAMIC_DRAW); // Update all buffer |
|
|
|
//glBufferData(GL_ARRAY_BUFFER, sizeof(float)*3*4*batch->vertexBuffer[batch->currentBuffer].elementCount, batch->vertexBuffer[batch->currentBuffer].vertices, GL_DYNAMIC_DRAW); // Update all buffer |
|
|
|
|
|
|
|
// Texture coordinates buffer |
|
|
|
glBindBuffer(GL_ARRAY_BUFFER, batch->vertexBuffer[batch->currentBuffer].vboId[1]); |
|
|
|
glBufferSubData(GL_ARRAY_BUFFER, 0, batch->vertexBuffer[batch->currentBuffer].vCounter*2*sizeof(float), batch->vertexBuffer[batch->currentBuffer].texcoords); |
|
|
|
//glBufferData(GL_ARRAY_BUFFER, sizeof(float)*2*4*batch->vertexBuffer[batch->currentBuffer].elementsCount, batch->vertexBuffer[batch->currentBuffer].texcoords, GL_DYNAMIC_DRAW); // Update all buffer |
|
|
|
//glBufferData(GL_ARRAY_BUFFER, sizeof(float)*2*4*batch->vertexBuffer[batch->currentBuffer].elementCount, batch->vertexBuffer[batch->currentBuffer].texcoords, GL_DYNAMIC_DRAW); // Update all buffer |
|
|
|
|
|
|
|
// Colors buffer |
|
|
|
glBindBuffer(GL_ARRAY_BUFFER, batch->vertexBuffer[batch->currentBuffer].vboId[2]); |
|
|
|
glBufferSubData(GL_ARRAY_BUFFER, 0, batch->vertexBuffer[batch->currentBuffer].vCounter*4*sizeof(unsigned char), batch->vertexBuffer[batch->currentBuffer].colors); |
|
|
|
//glBufferData(GL_ARRAY_BUFFER, sizeof(float)*4*4*batch->vertexBuffer[batch->currentBuffer].elementsCount, batch->vertexBuffer[batch->currentBuffer].colors, GL_DYNAMIC_DRAW); // Update all buffer |
|
|
|
//glBufferData(GL_ARRAY_BUFFER, sizeof(float)*4*4*batch->vertexBuffer[batch->currentBuffer].elementCount, batch->vertexBuffer[batch->currentBuffer].colors, GL_DYNAMIC_DRAW); // Update all buffer |
|
|
|
|
|
|
|
// NOTE: glMapBuffer() causes sync issue. |
|
|
|
// If GPU is working with this buffer, glMapBuffer() will wait(stall) until GPU to finish its job. |
|
|
|
@ -2375,12 +2375,12 @@ void rlDrawRenderBatch(rlRenderBatch *batch) |
|
|
|
Matrix matProjection = RLGL.State.projection; |
|
|
|
Matrix matModelView = RLGL.State.modelview; |
|
|
|
|
|
|
|
int eyesCount = 1; |
|
|
|
if (RLGL.State.stereoRender) eyesCount = 2; |
|
|
|
int eyeCount = 1; |
|
|
|
if (RLGL.State.stereoRender) eyeCount = 2; |
|
|
|
|
|
|
|
for (int eye = 0; eye < eyesCount; eye++) |
|
|
|
for (int eye = 0; eye < eyeCount; eye++) |
|
|
|
{ |
|
|
|
if (eyesCount == 2) |
|
|
|
if (eyeCount == 2) |
|
|
|
{ |
|
|
|
// Setup current eye viewport (half screen width) |
|
|
|
rlViewport(eye*RLGL.State.framebufferWidth/2, 0, RLGL.State.framebufferWidth/2, RLGL.State.framebufferHeight); |
|
|
|
@ -2447,7 +2447,7 @@ void rlDrawRenderBatch(rlRenderBatch *batch) |
|
|
|
// NOTE: Batch system accumulates calls by texture0 changes, additional textures are enabled for all the draw calls |
|
|
|
glActiveTexture(GL_TEXTURE0); |
|
|
|
|
|
|
|
for (int i = 0, vertexOffset = 0; i < batch->drawsCounter; i++) |
|
|
|
for (int i = 0, vertexOffset = 0; i < batch->drawCounterer; i++) |
|
|
|
{ |
|
|
|
// Bind current draw call texture, activated as GL_TEXTURE0 and binded to sampler2D texture0 by default |
|
|
|
glBindTexture(GL_TEXTURE_2D, batch->draws[i].textureId); |
|
|
|
@ -2456,7 +2456,7 @@ void rlDrawRenderBatch(rlRenderBatch *batch) |
|
|
|
else |
|
|
|
{ |
|
|
|
#if defined(GRAPHICS_API_OPENGL_33) |
|
|
|
// We need to define the number of indices to be processed: quadsCount*6 |
|
|
|
// We need to define the number of indices to be processed: elementCount*6 |
|
|
|
// NOTE: The final parameter tells the GPU the offset in bytes from the |
|
|
|
// start of the index buffer to the location of the first index to process |
|
|
|
glDrawElements(GL_TRIANGLES, batch->draws[i].vertexCount/4*6, GL_UNSIGNED_INT, (GLvoid *)(vertexOffset/4*6*sizeof(GLuint))); |
|
|
|
@ -2510,12 +2510,12 @@ void rlDrawRenderBatch(rlRenderBatch *batch) |
|
|
|
for (int i = 0; i < RL_DEFAULT_BATCH_MAX_TEXTURE_UNITS; i++) RLGL.State.activeTextureId[i] = 0; |
|
|
|
|
|
|
|
// Reset draws counter to one draw for the batch |
|
|
|
batch->drawsCounter = 1; |
|
|
|
batch->drawCounterer = 1; |
|
|
|
//------------------------------------------------------------------------------------------------------------ |
|
|
|
|
|
|
|
// Change to next buffer in the list (in case of multi-buffering) |
|
|
|
batch->currentBuffer++; |
|
|
|
if (batch->currentBuffer >= batch->buffersCount) batch->currentBuffer = 0; |
|
|
|
if (batch->currentBuffer >= batch->bufferCount) batch->currentBuffer = 0; |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|
@ -2546,7 +2546,7 @@ bool rlCheckRenderBatchLimit(int vCount) |
|
|
|
|
|
|
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) |
|
|
|
if ((RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter + vCount) >= |
|
|
|
(RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].elementsCount*4)) |
|
|
|
(RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].elementCount*4)) |
|
|
|
{ |
|
|
|
overflow = true; |
|
|
|
rlDrawRenderBatch(RLGL.currentBatch); // NOTE: Stereo rendering is checked inside |
|
|
|
|