|  |  | @ -321,7 +321,7 @@ typedef struct rlRenderBatch { | 
		
	
		
			
			|  |  |  | rlVertexBuffer *vertexBuffer; // Dynamic buffer(s) for vertex data | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | rlDrawCall *draws;          // Draw calls array, depends on textureId | 
		
	
		
			
			|  |  |  | int drawCounterer;           // Draw calls counter | 
		
	
		
			
			|  |  |  | int drawCounter;            // 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->drawCounterer - 1].mode != mode) | 
		
	
		
			
			|  |  |  | if (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].mode != mode) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | if (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexCount > 0) | 
		
	
		
			
			|  |  |  | if (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 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->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 (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].mode == RL_LINES) RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexAlignment = ((RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexCount < 4)? RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexCount : RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexCount%4); | 
		
	
		
			
			|  |  |  | else if (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].mode == RL_TRIANGLES) RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexAlignment = ((RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexCount < 4)? 1 : (4 - (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexCount%4))); | 
		
	
		
			
			|  |  |  | else RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexAlignment = 0; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | if (!rlCheckRenderBatchLimit(RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexAlignment)) | 
		
	
		
			
			|  |  |  | if (!rlCheckRenderBatchLimit(RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 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->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter += RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexAlignment; | 
		
	
		
			
			|  |  |  | RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].cCounter += RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexAlignment; | 
		
	
		
			
			|  |  |  | RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].tcCounter += RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexAlignment; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | RLGL.currentBatch->drawCounterer++; | 
		
	
		
			
			|  |  |  | RLGL.currentBatch->drawCounter++; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | if (RLGL.currentBatch->drawCounterer >= RL_DEFAULT_BATCH_DRAWCALLS) rlDrawRenderBatch(RLGL.currentBatch); | 
		
	
		
			
			|  |  |  | if (RLGL.currentBatch->drawCounter >= RL_DEFAULT_BATCH_DRAWCALLS) rlDrawRenderBatch(RLGL.currentBatch); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | 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; | 
		
	
		
			
			|  |  |  | 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; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
	
		
			
				|  |  | @ -1319,7 +1319,7 @@ void rlVertex3f(float x, float y, float z) | 
		
	
		
			
			|  |  |  | 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->drawCounterer - 1].vertexCount++; | 
		
	
		
			
			|  |  |  | RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexCount++; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | else TRACELOG(RL_LOG_ERROR, "RLGL: Batch elements overflow"); | 
		
	
		
			
			|  |  |  | } | 
		
	
	
		
			
				|  |  | @ -1401,33 +1401,33 @@ void rlSetTexture(unsigned int id) | 
		
	
		
			
			|  |  |  | #if defined(GRAPHICS_API_OPENGL_11) | 
		
	
		
			
			|  |  |  | rlEnableTexture(id); | 
		
	
		
			
			|  |  |  | #else | 
		
	
		
			
			|  |  |  | if (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].textureId != id) | 
		
	
		
			
			|  |  |  | if (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].textureId != id) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | if (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexCount > 0) | 
		
	
		
			
			|  |  |  | if (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 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->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 (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].mode == RL_LINES) RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexAlignment = ((RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexCount < 4)? RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexCount : RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexCount%4); | 
		
	
		
			
			|  |  |  | else if (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].mode == RL_TRIANGLES) RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexAlignment = ((RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexCount < 4)? 1 : (4 - (RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexCount%4))); | 
		
	
		
			
			|  |  |  | else RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexAlignment = 0; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | if (!rlCheckRenderBatchLimit(RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexAlignment)) | 
		
	
		
			
			|  |  |  | if (!rlCheckRenderBatchLimit(RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 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->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter += RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexAlignment; | 
		
	
		
			
			|  |  |  | RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].cCounter += RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexAlignment; | 
		
	
		
			
			|  |  |  | RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].tcCounter += RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexAlignment; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | RLGL.currentBatch->drawCounterer++; | 
		
	
		
			
			|  |  |  | RLGL.currentBatch->drawCounter++; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | if (RLGL.currentBatch->drawCounterer >= RL_DEFAULT_BATCH_DRAWCALLS) rlDrawRenderBatch(RLGL.currentBatch); | 
		
	
		
			
			|  |  |  | if (RLGL.currentBatch->drawCounter >= RL_DEFAULT_BATCH_DRAWCALLS) rlDrawRenderBatch(RLGL.currentBatch); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].textureId = id; | 
		
	
		
			
			|  |  |  | RLGL.currentBatch->draws[RLGL.currentBatch->drawCounterer - 1].vertexCount = 0; | 
		
	
		
			
			|  |  |  | RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].textureId = id; | 
		
	
		
			
			|  |  |  | RLGL.currentBatch->draws[RLGL.currentBatch->drawCounter - 1].vertexCount = 0; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | #endif | 
		
	
		
			
			|  |  |  | } | 
		
	
	
		
			
				|  |  | @ -1910,12 +1910,12 @@ void rlLoadExtensions(void *loader) | 
		
	
		
			
			|  |  |  | const char *extensions = (const char *)glGetString(GL_EXTENSIONS);  // One big const string | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // NOTE: We have to duplicate string because glGetString() returns a const string | 
		
	
		
			
			|  |  |  | int len = strlen(extensions) + 1; | 
		
	
		
			
			|  |  |  | char *extensionsDup = (char *)RL_CALLOC(len, sizeof(char)); | 
		
	
		
			
			|  |  |  | int size = strlen(extensions) + 1;      // Get extensions string size in bytes | 
		
	
		
			
			|  |  |  | char *extensionsDup = (char *)RL_CALLOC(size, sizeof(char)); | 
		
	
		
			
			|  |  |  | strcpy(extensionsDup, extensions); | 
		
	
		
			
			|  |  |  | extList[numExt] = extensionsDup; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | for (int i = 0; i < len; i++) | 
		
	
		
			
			|  |  |  | for (int i = 0; i < size; i++) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | if (extensionsDup[i] == ' ') | 
		
	
		
			
			|  |  |  | { | 
		
	
	
		
			
				|  |  | @ -2275,7 +2275,7 @@ rlRenderBatch rlLoadRenderBatch(int numBuffers, int bufferElements) | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | batch.bufferCount = numBuffers;    // Record buffer count | 
		
	
		
			
			|  |  |  | batch.drawCounterer = 1;             // Reset draws counter | 
		
	
		
			
			|  |  |  | batch.drawCounter = 1;             // Reset draws counter | 
		
	
		
			
			|  |  |  | batch.currentDepth = -1.0f;         // Reset depth value | 
		
	
		
			
			|  |  |  | //-------------------------------------------------------------------------------------------- | 
		
	
		
			
			|  |  |  | #endif | 
		
	
	
		
			
				|  |  | @ -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->drawCounterer; i++) | 
		
	
		
			
			|  |  |  | for (int i = 0, vertexOffset = 0; i < batch->drawCounter; 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); | 
		
	
	
		
			
				|  |  | @ -2510,7 +2510,7 @@ 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->drawCounterer = 1; | 
		
	
		
			
			|  |  |  | batch->drawCounter = 1; | 
		
	
		
			
			|  |  |  | //------------------------------------------------------------------------------------------------------------ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // Change to next buffer in the list (in case of multi-buffering) | 
		
	
	
		
			
				|  |  |  |