]> git.tdb.fi Git - libs/gl.git/commitdiff
Rearrange shader reflection calls
authorMikko Rasa <tdb@tdb.fi>
Sun, 7 Nov 2021 17:07:34 +0000 (19:07 +0200)
committerMikko Rasa <tdb@tdb.fi>
Sun, 7 Nov 2021 17:07:34 +0000 (19:07 +0200)
The OpenGL-specific query calls are now done from the OpenGL backend.

source/backends/opengl/program_backend.cpp
source/backends/opengl/program_backend.h
source/core/program.cpp

index 767811802ebf5c10eded6718324f7f1a106f4ab7..d78a5b4206505ee51c9b3ecce1a201579bfe18ee 100644 (file)
@@ -211,7 +211,7 @@ void OpenGLProgram::add_spirv_stages(const SpirVModule &mod, const map<string, i
                        glSpecializeShader(stage_ids[i], j->name.c_str(), spec_id_array.size(), &spec_id_array[0], &spec_value_array[0]);
 }
 
-void OpenGLProgram::finalize(const Module &mod)
+void OpenGLProgram::finalize(const Module &mod, TransientData &transient)
 {
        glLinkProgram(id);
        int status = 0;
@@ -232,6 +232,13 @@ void OpenGLProgram::finalize(const Module &mod)
        if(!info_log.empty())
                IO::print("Program link info log:\n%s", info_log);
 #endif
+
+       if(mod.get_format()==Module::GLSL)
+       {
+               query_uniforms();
+               query_attributes();
+               apply_bindings(transient);
+       }
 }
 
 void OpenGLProgram::query_uniforms()
index 95df989173df059f7ec59434d2ab56cd275fdca6..8fa68102c2ddd0f714ec8d4dfb062e3133183a70 100644 (file)
@@ -55,7 +55,7 @@ protected:
        void compile_glsl_stage(const GlslModule &, unsigned);
        void add_spirv_stages(const SpirVModule &, const std::map<std::string, int> &, TransientData &);
 
-       void finalize(const Module &);
+       void finalize(const Module &, TransientData &);
        void query_uniforms();
        void query_uniform_blocks(const std::vector<ReflectData::UniformInfo *> &);
        void query_attributes();
index 1a7ac17b3e99325d33918cebff6593b4c257a989..6013e7e82e9f35656f6741bb3743ea25a0237f5b 100644 (file)
@@ -32,15 +32,9 @@ void Program::add_stages(const Module &mod, const map<string, int> &spec_values)
                throw invalid_argument("Program::add_stages");
        }
 
-       finalize(mod);
+       finalize(mod, transient);
 
-       if(mod.get_format()==Module::GLSL)
-       {
-               query_uniforms();
-               query_attributes();
-               apply_bindings(transient);
-       }
-       else if(mod.get_format()==Module::SPIR_V)
+       if(mod.get_format()==Module::SPIR_V)
        {
                collect_uniforms(static_cast<const SpirVModule &>(mod), transient.spec_values);
                collect_attributes(static_cast<const SpirVModule &>(mod));