+void ProgramCompiler::process()
+{
+ if(module->vertex_context.present)
+ process(module->vertex_context);
+ if(module->geometry_context.present)
+ process(module->geometry_context);
+ if(module->fragment_context.present)
+ process(module->fragment_context);
+}
+
+void ProgramCompiler::process(Context &context)
+{
+ inject_block(context.content, module->global_context.content);
+}
+
+void ProgramCompiler::inject_block(Block &target, const Block &source)
+{
+ list<NodePtr<Node> >::iterator insert_point = target.body.begin();
+ for(list<NodePtr<Node> >::const_iterator i=source.body.begin(); i!=source.body.end(); ++i)
+ target.body.insert(insert_point, (*i)->clone());
+}
+