Skip to content

Commit 4dc8c57

Browse files
authored
Merge pull request #1 from asarium/fix/shaderDefaultUniforms
Set default shader uniforms every time the shader is compiled
2 parents cc876f8 + 8df4835 commit 4dc8c57

1 file changed

Lines changed: 27 additions & 51 deletions

File tree

code/graphics/opengl/gropenglshader.cpp

Lines changed: 27 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -643,6 +643,27 @@ static void cache_program_binary(GLuint program, const SCP_string& hash) {
643643
cfclose(binary_fp);
644644
}
645645

646+
static void opengl_set_default_uniforms(const opengl_shader_t& sdr) {
647+
switch (sdr.shader) {
648+
case SDR_TYPE_DEFERRED_LIGHTING:
649+
Current_shader->program->Uniforms.setUniformi("ColorBuffer", 0);
650+
Current_shader->program->Uniforms.setUniformi("NormalBuffer", 1);
651+
Current_shader->program->Uniforms.setUniformi("PositionBuffer", 2);
652+
Current_shader->program->Uniforms.setUniformi("SpecBuffer", 3);
653+
Current_shader->program->Uniforms.setUniformi("shadow_map", 4);
654+
break;
655+
656+
case SDR_TYPE_PASSTHROUGH_RENDER:
657+
Current_shader->program->Uniforms.setUniformi("baseMap", 0);
658+
Current_shader->program->Uniforms.setUniformi("clipEnabled", 0);
659+
break;
660+
661+
default:
662+
// No default values for this shader type.
663+
break;
664+
}
665+
}
666+
646667
void opengl_compile_shader_actual(shader_type sdr, const uint &flags, opengl_shader_t &new_shader)
647668
{
648669
opengl_shader_type_t *sdr_info = &GL_shader_types[sdr];
@@ -751,6 +772,8 @@ void opengl_compile_shader_actual(shader_type sdr, const uint &flags, opengl_sha
751772
mprintf((" %s\n", variant.description));
752773
}
753774
}
775+
776+
opengl_set_default_uniforms(new_shader);
754777
}
755778

756779
/**
@@ -841,10 +864,12 @@ void opengl_shader_init()
841864
gr_opengl_maybe_create_shader(SDR_TYPE_SHIELD_DECAL, 0);
842865

843866
// compile deferred lighting shaders
844-
opengl_shader_compile_deferred_light_shader();
867+
gr_opengl_maybe_create_shader(SDR_TYPE_DEFERRED_LIGHTING, 0);
868+
gr_opengl_maybe_create_shader(SDR_TYPE_DEFERRED_CLEAR, 0);
845869

846870
// compile passthrough shader
847-
opengl_shader_compile_passthrough_shader();
871+
mprintf(("Compiling passthrough shader...\n"));
872+
gr_opengl_maybe_create_shader(SDR_TYPE_PASSTHROUGH_RENDER, 0);
848873

849874
mprintf(("\n"));
850875
}
@@ -862,55 +887,6 @@ GLint opengl_shader_get_attribute(opengl_vert_attrib::attrib_id attribute)
862887
return Current_shader->program->getAttributeLocation(attribute);
863888
}
864889

865-
/**
866-
* Compile the deferred light shader and the clear shader.
867-
*/
868-
void opengl_shader_compile_deferred_light_shader()
869-
{
870-
bool in_error = false;
871-
872-
int sdr_handle = gr_opengl_maybe_create_shader(SDR_TYPE_DEFERRED_LIGHTING, 0);
873-
874-
if ( sdr_handle >= 0 ) {
875-
opengl_shader_set_current(sdr_handle);
876-
877-
Current_shader->program->Uniforms.setUniformi("ColorBuffer", 0);
878-
Current_shader->program->Uniforms.setUniformi("NormalBuffer", 1);
879-
Current_shader->program->Uniforms.setUniformi("PositionBuffer", 2);
880-
Current_shader->program->Uniforms.setUniformi("SpecBuffer", 3);
881-
Current_shader->program->Uniforms.setUniformi("shadow_map", 4);
882-
} else {
883-
opengl_shader_set_current();
884-
mprintf(("Failed to compile deferred lighting shader!\n"));
885-
in_error = true;
886-
}
887-
888-
if ( gr_opengl_maybe_create_shader(SDR_TYPE_DEFERRED_CLEAR, 0) < 0 ) {
889-
mprintf(("Failed to compile deferred lighting buffer clear shader!\n"));
890-
in_error = true;
891-
}
892-
893-
if ( in_error ) {
894-
mprintf((" Shader in_error! Disabling deferred lighting!\n"));
895-
Cmdline_no_deferred_lighting = 1;
896-
}
897-
}
898-
899-
void opengl_shader_compile_passthrough_shader()
900-
{
901-
mprintf(("Compiling passthrough shader...\n"));
902-
903-
int sdr_handle = gr_opengl_maybe_create_shader(SDR_TYPE_PASSTHROUGH_RENDER, 0);
904-
905-
opengl_shader_set_current(sdr_handle);
906-
907-
//Hardcoded Uniforms
908-
Current_shader->program->Uniforms.setUniformi("baseMap", 0);
909-
Current_shader->program->Uniforms.setUniformi("clipEnabled", 0);
910-
911-
opengl_shader_set_current();
912-
}
913-
914890
void opengl_shader_set_passthrough(bool textured)
915891
{
916892
opengl_shader_set_current(gr_opengl_maybe_create_shader(SDR_TYPE_PASSTHROUGH_RENDER, 0));

0 commit comments

Comments
 (0)