]> git.tdb.fi Git - libs/gl.git/blobdiff - source/backends/opengl/program_backend.cpp
Fix incorrect exception messages
[libs/gl.git] / source / backends / opengl / program_backend.cpp
index 4dbf38a7197e5bd40e58f1f5c4151bbfafe2a594..bd54fbaa788348d2358163759de2549e83afbaf8 100644 (file)
@@ -69,11 +69,11 @@ unsigned OpenGLProgram::add_stage(Stage type)
        case VERTEX: { static Require _req(ARB_vertex_shader); gl_type = GL_VERTEX_SHADER; } break;
        case GEOMETRY: { static Require _req(ARB_geometry_shader4); gl_type = GL_GEOMETRY_SHADER; } break;
        case FRAGMENT: { static Require _req(ARB_fragment_shader); gl_type = GL_FRAGMENT_SHADER; } break;
-       default: throw invalid_argument("Program::add_stage");
+       default: throw invalid_argument("OpenGLProgram::add_stage");
        }
 
        if(stage_ids[type])
-               throw invalid_operation("Program::add_stage");
+               throw invalid_operation("OpenGLProgram::add_stage");
 
        unsigned stage_id = glCreateShader(gl_type);
        stage_ids[type] = stage_id;
@@ -101,7 +101,7 @@ void OpenGLProgram::add_glsl_stages(const GlslModule &mod, const map<string, int
 
        vector<SL::Stage::Type> stages = compiler.get_stages();
        if(stages.empty())
-               throw invalid_argument("Program::add_glsl_stages");
+               throw invalid_argument("OpenGLProgram::add_glsl_stages");
 
        for(SL::Stage::Type st: stages)
        {
@@ -111,7 +111,7 @@ void OpenGLProgram::add_glsl_stages(const GlslModule &mod, const map<string, int
                case SL::Stage::VERTEX: stage_id = add_stage(VERTEX); break;
                case SL::Stage::GEOMETRY: stage_id = add_stage(GEOMETRY); break;
                case SL::Stage::FRAGMENT: stage_id = add_stage(FRAGMENT); break;
-               default: throw invalid_operation("Program::add_glsl_stages");
+               default: throw invalid_operation("OpenGLProgram::add_glsl_stages");
                }
 
                string stage_src = compiler.get_stage_glsl(st);
@@ -136,6 +136,9 @@ void OpenGLProgram::add_glsl_stages(const GlslModule &mod, const map<string, int
 
        transient.textures = compiler.get_texture_bindings();
        transient.blocks = compiler.get_uniform_block_bindings();
+
+       ReflectData &rd = static_cast<Program *>(this)->reflect_data;
+       rd.n_clip_distances = compiler.get_n_clip_distances();
 }
 
 void OpenGLProgram::compile_glsl_stage(const GlslModule &mod, unsigned stage_id)
@@ -174,14 +177,14 @@ void OpenGLProgram::add_spirv_stages(const SpirVModule &mod, const map<string, i
                case SpirVModule::VERTEX: stage_id = add_stage(VERTEX); break;
                case SpirVModule::GEOMETRY: stage_id = add_stage(GEOMETRY); break;
                case SpirVModule::FRAGMENT: stage_id = add_stage(FRAGMENT); break;
-               default: throw invalid_operation("Program::add_spirv_stages");
+               default: throw invalid_operation("OpenGLProgram::add_spirv_stages");
                }
 
                used_stage_ids[n_stages++] = stage_id;
        }
 
        if(!n_stages)
-               throw invalid_argument("Program::add_spirv_stages");
+               throw invalid_argument("OpenGLProgram::add_spirv_stages");
 
        const vector<uint32_t> &code = mod.get_code();
        glShaderBinary(n_stages, used_stage_ids, GL_SHADER_BINARY_FORMAT_SPIR_V, &code[0], code.size()*4);
@@ -334,11 +337,6 @@ void OpenGLProgram::query_uniforms()
                }
 
        default_block.sort_uniforms();
-       if(!default_block.uniforms.empty())
-       {
-               const ReflectData::UniformInfo &uni = *default_block.uniforms.back();
-               default_block.data_size = uni.location*16+uni.array_size*get_type_size(uni.type);
-       }
        default_block.update_layout_hash();
        rd.update_layout_hash();
 }
@@ -373,7 +371,7 @@ void OpenGLProgram::query_uniform_blocks(const vector<ReflectData::UniformInfo *
                for(int j: indices)
                {
                        if(!uniforms_by_index[j])
-                               throw logic_error("Program::link");
+                               throw logic_error("OpenGLProgram::query_uniform_blocks");
                        info.uniforms.push_back(uniforms_by_index[j]);
                        uniforms_by_index[j]->block = &info;
                }