]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/program.cpp
Rename some things in Program
[libs/gl.git] / source / core / program.cpp
index 23069392a78727b544e9a6dcb7f26a4f3ddf4066..f28736bd9a63b7550ef712e0ab531d5a6b26b68d 100644 (file)
@@ -277,6 +277,8 @@ void Program::link()
                throw invalid_operation("Program::link");
 
        uniforms.clear();
+       uniform_blocks.clear();
+       attributes.clear();
 
        glLinkProgram(id);
        linked = get_program_i(id, GL_LINK_STATUS);
@@ -331,11 +333,8 @@ void Program::query_uniforms()
                                name[len-3] = 0;
 
                        UniformInfo &info = uniforms[name];
-                       info.block = 0;
                        info.name = name;
                        info.array_size = size;
-                       info.array_stride = 0;
-                       info.matrix_stride = 0;
                        info.type = from_gl_type(type);
                        uniforms_by_index[i] = &info;
                }
@@ -345,8 +344,6 @@ void Program::query_uniforms()
                query_uniform_blocks(uniforms_by_index);
 
        UniformBlockInfo &default_block = uniform_blocks[string()];
-       default_block.data_size = 0;
-       default_block.bind_point = -1;
 
        for(UniformMap::iterator i=uniforms.begin(); i!=uniforms.end(); ++i)
                if(!i->second.block)
@@ -363,8 +360,6 @@ void Program::query_uniforms()
 
 void Program::query_uniform_blocks(const vector<UniformInfo *> &uniforms_by_index)
 {
-       uniform_blocks.clear();
-
        std::set<unsigned> used_bind_points;
        unsigned count = get_program_i(id, GL_ACTIVE_UNIFORM_BLOCKS);
        for(unsigned i=0; i<count; ++i)
@@ -390,35 +385,35 @@ void Program::query_uniform_blocks(const vector<UniformInfo *> &uniforms_by_inde
                        uniforms_by_index[*j]->block = &info;
                }
 
-               vector<unsigned> indices2(indices.begin(), indices.end());
+               vector<unsigned> query_indices(indices.begin(), indices.end());
                vector<int> values(indices.size());
-               glGetActiveUniformsiv(id, indices.size(), &indices2[0], GL_UNIFORM_OFFSET, &values[0]);
+               glGetActiveUniformsiv(id, query_indices.size(), &query_indices[0], GL_UNIFORM_OFFSET, &values[0]);
                for(unsigned j=0; j<indices.size(); ++j)
-                       uniforms_by_index[indices[j]]->location = values[j];
+                       uniforms_by_index[indices[j]]->offset = values[j];
 
-               indices2.clear();
+               query_indices.clear();
                for(vector<int>::iterator j=indices.begin(); j!=indices.end(); ++j)
                        if(uniforms_by_index[*j]->array_size>1)
-                               indices2.push_back(*j);
-               if(!indices2.empty())
+                               query_indices.push_back(*j);
+               if(!query_indices.empty())
                {
-                       glGetActiveUniformsiv(id, indices2.size(), &indices2[0], GL_UNIFORM_ARRAY_STRIDE, &values[0]);
-                       for(unsigned j=0; j<indices2.size(); ++j)
-                               uniforms_by_index[indices2[j]]->array_stride = values[j];
+                       glGetActiveUniformsiv(id, query_indices.size(), &query_indices[0], GL_UNIFORM_ARRAY_STRIDE, &values[0]);
+                       for(unsigned j=0; j<query_indices.size(); ++j)
+                               uniforms_by_index[query_indices[j]]->array_stride = values[j];
                }
 
-               indices2.clear();
+               query_indices.clear();
                for(vector<int>::iterator j=indices.begin(); j!=indices.end(); ++j)
                {
                        DataType t = uniforms_by_index[*j]->type;
                        if(is_matrix(t))
-                               indices2.push_back(*j);
+                               query_indices.push_back(*j);
                }
-               if(!indices2.empty())
+               if(!query_indices.empty())
                {
-                       glGetActiveUniformsiv(id, indices2.size(), &indices2[0], GL_UNIFORM_MATRIX_STRIDE, &values[0]);
-                       for(unsigned j=0; j<indices2.size(); ++j)
-                               uniforms_by_index[indices2[j]]->matrix_stride = values[j];
+                       glGetActiveUniformsiv(id, query_indices.size(), &query_indices[0], GL_UNIFORM_MATRIX_STRIDE, &values[0]);
+                       for(unsigned j=0; j<query_indices.size(); ++j)
+                               uniforms_by_index[query_indices[j]]->matrix_stride = values[j];
                }
 
                sort(info.uniforms.begin(), info.uniforms.end(), uniform_location_compare);
@@ -461,8 +456,6 @@ void Program::collect_uniforms()
        const SpirVModule &mod = static_cast<const SpirVModule &>(*module);
 
        UniformBlockInfo &default_block = uniform_blocks[string()];
-       default_block.data_size = 0;
-       default_block.bind_point = -1;
 
        const vector<SpirVModule::Variable> &variables = mod.get_variables();
        for(vector<SpirVModule::Variable>::const_iterator i=variables.begin(); i!=variables.end(); ++i)
@@ -488,8 +481,6 @@ void Program::collect_uniforms()
                        info.block = &default_block;
                        info.location = i->location;
                        info.array_size = i->array_size;
-                       info.array_stride = 0;
-                       info.matrix_stride = 0;
                        info.type = i->type;
                        default_block.uniforms.push_back(&info);
                }
@@ -520,7 +511,7 @@ void Program::collect_block_uniforms(UniformBlockInfo &block, const SpirVModule:
                        UniformInfo &info = uniforms[name];
                        info.name = name;
                        info.block = &block;
-                       info.location = i->offset;
+                       info.offset = i->offset;
                        info.array_size = i->array_size;
                        info.array_stride = i->array_stride;
                        info.matrix_stride = i->matrix_stride;
@@ -589,12 +580,12 @@ const Program::UniformInfo &Program::get_uniform_info(const string &name) const
        return get_item(uniforms, name);
 }
 
-int Program::get_uniform_location(const string &n) const
+int Program::get_uniform_location(const string &name) const
 {
-       if(n[n.size()-1]==']')
+       if(name[name.size()-1]==']')
                throw invalid_argument("Program::get_uniform_location");
 
-       UniformMap::const_iterator i = uniforms.find(n);
+       UniformMap::const_iterator i = uniforms.find(name);
        if(i==uniforms.end())
                return -1;
 
@@ -606,12 +597,12 @@ const Program::AttributeInfo &Program::get_attribute_info(const string &name) co
        return get_item(attributes, name);
 }
 
-int Program::get_attribute_location(const string &n) const
+int Program::get_attribute_location(const string &name) const
 {
-       if(n[n.size()-1]==']')
+       if(name[name.size()-1]==']')
                throw invalid_argument("Program::get_attribute_location");
 
-       AttributeMap::const_iterator i = attributes.find(n);
+       AttributeMap::const_iterator i = attributes.find(name);
        return i!=attributes.end() ? i->second.location : -1;
 }
 
@@ -635,6 +626,30 @@ void Program::unbind()
 }
 
 
+Program::UniformInfo::UniformInfo():
+       block(0),
+       location(-1),
+       array_size(0),
+       array_stride(0),
+       matrix_stride(0),
+       type(VOID)
+{ }
+
+
+Program::UniformBlockInfo::UniformBlockInfo():
+       data_size(0),
+       bind_point(-1),
+       layout_hash(0)
+{ }
+
+
+Program::AttributeInfo::AttributeInfo():
+       location(-1),
+       array_size(0),
+       type(VOID)
+{ }
+
+
 Program::Loader::Loader(Program &p, Collection &c):
        DataFile::CollectionObjectLoader<Program>(p, &c)
 {