|
@ -3356,12 +3356,14 @@ void SetShaderValueTexture(Shader shader, int uniformLoc, Texture2D texture) |
|
|
glUseProgram(shader.id); |
|
|
glUseProgram(shader.id); |
|
|
|
|
|
|
|
|
// Register a new active texture for the internal batch system |
|
|
// Register a new active texture for the internal batch system |
|
|
|
|
|
// NOTE: Default texture is always activated as GL_TEXTURE0 |
|
|
for (int i = 0; i < 4; i++) |
|
|
for (int i = 0; i < 4; i++) |
|
|
{ |
|
|
{ |
|
|
if (RLGL.State.activeTextureId[i] == 0) |
|
|
|
|
|
|
|
|
if (RLGL.State.activeTextureId[i] == 0) |
|
|
{ |
|
|
{ |
|
|
glUniform1i(uniformLoc, n">i + 1); // Activate new texture unit (0 is used by default texture) |
|
|
|
|
|
|
|
|
glUniform1i(uniformLoc, mi">1 + i); // Activate new texture unit |
|
|
RLGL.State.activeTextureId[i] = texture.id; // Save texture id for binding on drawing |
|
|
RLGL.State.activeTextureId[i] = texture.id; // Save texture id for binding on drawing |
|
|
|
|
|
break; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -4461,9 +4463,10 @@ static void DrawRenderBatch(RenderBatch *batch) |
|
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, batch->vertexBuffer[batch->currentBuffer].vboId[3]); |
|
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, batch->vertexBuffer[batch->currentBuffer].vboId[3]); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
glActiveTexture(GL_TEXTURE0); // One texture is always active for default shader |
|
|
|
|
|
glUniform1i(RLGL.State.currentShader.locs[LOC_MAP_DIFFUSE], 0); // Active texture 0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Setup some default shader values |
|
|
|
|
|
glUniform4f(RLGL.State.currentShader.locs[LOC_COLOR_DIFFUSE], 1.0f, 1.0f, 1.0f, 1.0f); |
|
|
|
|
|
glUniform1i(RLGL.State.currentShader.locs[LOC_MAP_DIFFUSE], 0); // Active default sampler2D: texture0 |
|
|
|
|
|
|
|
|
// Activate additional sampler textures |
|
|
// Activate additional sampler textures |
|
|
// Those additional textures will be common for all draw calls of the batch |
|
|
// Those additional textures will be common for all draw calls of the batch |
|
|
for (int i = 0; i < 4; i++) |
|
|
for (int i = 0; i < 4; i++) |
|
@ -4474,13 +4477,15 @@ static void DrawRenderBatch(RenderBatch *batch) |
|
|
glBindTexture(GL_TEXTURE_2D, RLGL.State.activeTextureId[i]); |
|
|
glBindTexture(GL_TEXTURE_2D, RLGL.State.activeTextureId[i]); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// Setup some default shader values |
|
|
|
|
|
glUniform4f(RLGL.State.currentShader.locs[LOC_COLOR_DIFFUSE], 1.0f, 1.0f, 1.0f, 1.0f); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Activate default sampler texture (one texture is always active for default shader) |
|
|
|
|
|
// 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->drawsCounter; i++) |
|
|
{ |
|
|
{ |
|
|
// Texture 0 is always active by default, bind the texture for current draw call |
|
|
|
|
|
|
|
|
// Texture0 is always active by default, bind the texture for current draw call |
|
|
glBindTexture(GL_TEXTURE_2D, batch->draws[i].textureId); |
|
|
glBindTexture(GL_TEXTURE_2D, batch->draws[i].textureId); |
|
|
|
|
|
|
|
|
if ((batch->draws[i].mode == RL_LINES) || (batch->draws[i].mode == RL_TRIANGLES)) glDrawArrays(batch->draws[i].mode, vertexOffset, batch->draws[i].vertexCount); |
|
|
if ((batch->draws[i].mode == RL_LINES) || (batch->draws[i].mode == RL_TRIANGLES)) glDrawArrays(batch->draws[i].mode, vertexOffset, batch->draws[i].vertexCount); |
|
|