// Blocks are intentionally left uncopied
ProgramData::ProgramData(const ProgramData &other):
- tied_program(0),
+ tied_program(other.tied_program),
uniforms(other.uniforms),
last_block(0),
buffer(0),
i->value = i->value->clone();
}
+ProgramData::ProgramData(const ProgramData &other, const Program *p):
+ tied_program(p),
+ last_block(0),
+ buffer(0),
+ dirty(0)
+{
+ if(tied_program)
+ {
+ for(vector<NamedUniform>::const_iterator i=other.uniforms.begin(); i!=other.uniforms.end(); ++i)
+ tied_program->get_uniform_info(i->name);
+ }
+
+ uniforms = other.uniforms;
+ for(vector<NamedUniform>::iterator i=uniforms.begin(); i!=uniforms.end(); ++i)
+ i->value = i->value->clone();
+}
+
ProgramData &ProgramData::operator=(const ProgramData &other)
{
tied_program = other.tied_program;
return *uniforms[i].value;
}
+const Uniform *ProgramData::find_uniform(const string &name) const
+{
+ int i = find_uniform_index(name);
+ return (i>=0 ? uniforms[i].value : 0);
+}
+
bool ProgramData::uniform_name_compare(const NamedUniform &nu, const string &name)
{
return nu.name<name;