]> git.tdb.fi Git - libs/gl.git/blobdiff - source/renderpass.cpp
Recreate RenderPass shdata if a new program is specified
[libs/gl.git] / source / renderpass.cpp
index 34a311e79ece2f7e4df91d382010dca39137be1f..7c7cf2c4a2022cbb1da62c84c385914d543c2edf 100644 (file)
@@ -135,7 +135,7 @@ RenderPass::Loader::Loader(RenderPass &p, Collection &c):
 
 void RenderPass::Loader::init()
 {
-       add("shader",   &RenderPass::shprog);
+       add("shader",   &Loader::shader);
        add("material", &Loader::material_inline);
        add("material", &Loader::material);
        add("material_slot", &RenderPass::material_slot);
@@ -162,6 +162,15 @@ void RenderPass::Loader::material(const string &name)
        obj.finalize_material();
 }
 
+void RenderPass::Loader::shader(const string &n)
+{
+       obj.shprog = &get_collection().get<Program>(n);
+       if(obj.shdata)
+               obj.shdata = new ProgramData(*obj.shdata, obj.shprog);
+       if(obj.material)
+               obj.finalize_material();
+}
+
 void RenderPass::Loader::texunit(unsigned i)
 {
        if(!obj.texturing)