@@ -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+
646667void 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-
914890void 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