X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Fprogram.cpp;h=9c2968497f302ccad397ea311be277da98d683e5;hb=171d9bbde3416bcb73339fc4175035817cdf963d;hp=23069392a78727b544e9a6dcb7f26a4f3ddf4066;hpb=7af200475facc657a0bbffaa17520d3ec9d809af;p=libs%2Fgl.git diff --git a/source/core/program.cpp b/source/core/program.cpp index 23069392..9c296849 100644 --- a/source/core/program.cpp +++ b/source/core/program.cpp @@ -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 &uniforms_by_index) { - uniform_blocks.clear(); - std::set used_bind_points; unsigned count = get_program_i(id, GL_ACTIVE_UNIFORM_BLOCKS); for(unsigned i=0; i(*module); UniformBlockInfo &default_block = uniform_blocks[string()]; - default_block.data_size = 0; - default_block.bind_point = -1; const vector &variables = mod.get_variables(); for(vector::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); } @@ -635,6 +626,30 @@ void Program::unbind() } +Program::UniformInfo::UniformInfo(): + block(0), + location(0), + 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(p, &c) {