Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 20 additions & 5 deletions src/gl/gl_renderer.c
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ static void flushBatch(GLRenderer* gl) {
if (gl->base.currentShader != -1) {
GMLShader* shader = &gl->gmlShaders[gl->base.currentShader];

GLShaderUniform* uniform = findShaderUniformByName(shader, "gm_BaseTexture");
GLShaderUniform* uniform = shader->gmBaseTexture;
if (uniform != nullptr)
glActiveTexture(GL_TEXTURE0 + uniform->samplerSlot);
glBindTexture(GL_TEXTURE_2D, gl->currentTextureId);
Expand Down Expand Up @@ -251,6 +251,17 @@ static bool compileProgram(GMLShader* gmlShader, const char* name, const char* v
gmlShader->uniforms[b].samplerSlot = samplerIndex;
samplerIndex += 1;
}

if (strcmp(uniformName, "gm_BaseTexture") == 0)
gmlShader->gmBaseTexture = &gmlShader->uniforms[b];
if (strcmp(uniformName, "gm_Matrices[0]") == 0)
gmlShader->gmMatrices = &gmlShader->uniforms[b];
if (strcmp(uniformName, "gm_FogColour") == 0)
gmlShader->gmFogColour = &gmlShader->uniforms[b];
if (strcmp(uniformName, "gm_AlphaTestEnabled") == 0)
gmlShader->gmAlphaTestEnabled = &gmlShader->uniforms[b];
if (strcmp(uniformName, "gm_AlphaRefValue") == 0)
gmlShader->gmAlphaRefValue = &gmlShader->uniforms[b];
}

gmlShader->shaderId = shaderId;
Expand Down Expand Up @@ -508,13 +519,13 @@ static void glGpuSetShader(Renderer* renderer, int32_t shaderIndex) {

glUseProgram(gmlShader->shaderId);
//Gotta set those built-ins! they ain't gonna set themselves
GLShaderUniform* gmMatricesUniform = findShaderUniformByName(gmlShader, "gm_Matrices[0]");
GLShaderUniform* gmFogColourUniform = findShaderUniformByName(gmlShader, "gm_FogColour");
GLShaderUniform* gmMatricesUniform = gmlShader->gmMatrices;
GLShaderUniform* gmFogColourUniform = gmlShader->gmFogColour;

//Lights are for another time

GLShaderUniform* gmAlphaTestEnabledUniform = findShaderUniformByName(gmlShader, "gm_AlphaTestEnabled");
GLShaderUniform* gmAlphaRefValue = findShaderUniformByName(gmlShader, "gm_AlphaRefValue");
GLShaderUniform* gmAlphaTestEnabledUniform = gmlShader->gmAlphaTestEnabled;
GLShaderUniform* gmAlphaRefValue = gmlShader->gmAlphaRefValue;

Matrix4f flippedClip[MATRICES_MAX];
memcpy(flippedClip, renderer->gmlMatrices, sizeof(flippedClip));
Expand Down Expand Up @@ -2372,6 +2383,7 @@ static int32_t glGpuGetBlendMode(Renderer* renderer) {

static void glGpuSetBlendMode(Renderer* renderer, int32_t mode) {
GLRenderer* gl = (GLRenderer*) renderer;
if (mode == gl->currentBlendMode) return;
flushBatch(gl);

gl->currentBlendMode = mode;
Expand All @@ -2386,6 +2398,8 @@ static void glGpuSetBlendMode(Renderer* renderer, int32_t mode) {

static void glGpuSetBlendModeExt(Renderer* renderer, int32_t sfactor, int32_t dfactor, int32_t sfactor_alpha, int32_t dfactor_alpha) {
GLRenderer* gl = (GLRenderer*) renderer;
if (sfactor == gl->currentSFactor && dfactor == gl->currentDFactor && \
sfactor_alpha == gl->currentSFactorAlpha && dfactor_alpha == gl->currentDFactorAlpha) return;
flushBatch(gl);
gl->currentBlendMode = bm_complex;
gl->currentSFactor = sfactor;
Expand Down Expand Up @@ -2430,6 +2444,7 @@ static void glGpuSetAlphaTestRef(Renderer* renderer, uint8_t ref) {

static void glGpuSetColorWriteEnable(Renderer* renderer, bool red, bool green, bool blue, bool alpha) {
GLRenderer* gl = (GLRenderer*) renderer;
if (gl->colorWriteR == red && gl->colorWriteG == green && gl->colorWriteB == blue && gl->colorWriteA == alpha) return;
flushBatch(gl);
gl->colorWriteR = red;
gl->colorWriteG = green;
Expand Down
7 changes: 7 additions & 0 deletions src/gl/gl_renderer.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,13 @@ typedef struct {
bool compiled;
uint32_t uniformCount;
GLShaderUniform* uniforms;

// cached uniforms
GLShaderUniform* gmBaseTexture;
GLShaderUniform* gmMatrices;
GLShaderUniform* gmFogColour;
GLShaderUniform* gmAlphaTestEnabled;
GLShaderUniform* gmAlphaRefValue;
} GMLShader;

typedef struct {
Expand Down
Loading