X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fgenerate.cpp;h=d4623a7fd85064acf8eb0860c9e9dae149e2798c;hb=d8bdf61007978e2c3670a22a58e2f105e8347537;hp=42b24a9caa949655c6f2a475187aa573d4376447;hpb=22d5405729048ee2677a1e45e309e6328de64a26;p=libs%2Fgl.git diff --git a/source/glsl/generate.cpp b/source/glsl/generate.cpp index 42b24a9c..d4623a7f 100644 --- a/source/glsl/generate.cpp +++ b/source/glsl/generate.cpp @@ -182,7 +182,7 @@ void TypeResolver::visit(InterfaceBlock &iface) StructDeclaration *strct = new StructDeclaration; strct->source = INTERNAL_SOURCE; - strct->name = format("_%s_%s", iface.interface, iface.name); + strct->name = format("_%s_%s", iface.interface, iface.block_name); strct->members.body.splice(strct->members.body.begin(), iface.members->body); stage->content.body.insert(type_insert_point, strct); stage->types.insert(make_pair(strct->name, strct)); @@ -488,7 +488,7 @@ void VariableResolver::visit(InterfaceBlock &iface) { /* Block names can be reused in different interfaces. Prefix the name with the first character of the interface to avoid conflicts. */ - stage->interface_blocks.insert(make_pair(iface.interface+iface.name, &iface)); + stage->interface_blocks.insert(make_pair(iface.interface+iface.block_name, &iface)); if(!iface.instance_name.empty()) stage->interface_blocks.insert(make_pair("_"+iface.instance_name, &iface)); @@ -579,8 +579,7 @@ void ExpressionResolver::convert_to(RefPtr &expr, BasicTypeDeclarati RefPtr call = new FunctionCall; call->name = type.name; call->constructor = true; - call->arguments.push_back(0); - call->arguments.back() = expr; + call->arguments.push_back_nocopy(expr); call->type = &type; expr = call; } @@ -1346,12 +1345,12 @@ VariableDeclaration *InterfaceGenerator::generate_interface(VariableDeclaration InterfaceBlock *InterfaceGenerator::generate_interface(InterfaceBlock &out_block) { - if(stage->interface_blocks.count("in"+out_block.name)) + if(stage->interface_blocks.count("in"+out_block.block_name)) return 0; InterfaceBlock *in_block = new InterfaceBlock; in_block->interface = "in"; - in_block->name = out_block.name; + in_block->block_name = out_block.block_name; in_block->members = new Block; in_block->instance_name = out_block.instance_name; if(stage->type==Stage::GEOMETRY) @@ -1372,7 +1371,7 @@ InterfaceBlock *InterfaceGenerator::generate_interface(InterfaceBlock &out_block } iface_target_block->body.insert(iface_insert_point, in_block); - stage->interface_blocks.insert(make_pair("in"+in_block->name, in_block)); + stage->interface_blocks.insert(make_pair("in"+in_block->block_name, in_block)); if(!in_block->instance_name.empty()) stage->interface_blocks.insert(make_pair("_"+in_block->instance_name, in_block)); @@ -1503,7 +1502,7 @@ void InterfaceGenerator::visit(InterfaceBlock &iface) if(!iface.linked_block && stage->previous) { const map &prev_blocks = stage->previous->interface_blocks; - map::const_iterator i = prev_blocks.find("out"+iface.name); + map::const_iterator i = prev_blocks.find("out"+iface.block_name); if(i!=prev_blocks.end()) { iface.linked_block = i->second;