]> git.tdb.fi Git - libs/gl.git/blobdiff - source/renderpass.cpp
Add missing includes
[libs/gl.git] / source / renderpass.cpp
index 4b458f6d5f9b57ca555b542e4724ed3b08d0b5ae..b588ff2dc8a119624bcf5297ad5483f8fef972dc 100644 (file)
@@ -46,13 +46,14 @@ RenderPass &RenderPass::operator=(const RenderPass &other)
 RenderPass::~RenderPass()
 {
        delete texturing;
+       delete shdata;
 }
 
 void RenderPass::set_shader_program(const Program *prog, const ProgramData *data)
 {
        shprog = prog;
-       shdata = data;
-       shdata.keep();
+       delete shdata;
+       shdata = new ProgramData(*data);
 }
 
 void RenderPass::set_material(const Material *mat)
@@ -81,7 +82,7 @@ void RenderPass::apply(Renderer &renderer) const
 {
        renderer.set_texturing(texturing);
        renderer.set_material(material.get());
-       renderer.set_shader_program(shprog, shdata.get());
+       renderer.set_shader_program(shprog, shdata);
        renderer.set_reverse_winding(back_faces);
 }
 
@@ -103,6 +104,7 @@ void RenderPass::Loader::init()
        add("shader",   &RenderPass::shprog);
        add("material", &Loader::material_inline);
        add("material", &Loader::material);
+       add("material_slot", &RenderPass::material_slot);
        add("back_faces",&RenderPass::back_faces);
        add("texunit",  &Loader::texunit);
        add("texunit",  &Loader::texunit_named);
@@ -145,7 +147,7 @@ void RenderPass::Loader::uniforms()
                throw invalid_operation("RenderPass::Loader::uniforms");
        RefPtr<ProgramData> shd = new ProgramData(obj.shprog);
        load_sub(*shd);
-       obj.shdata = shd;
+       obj.shdata = shd.release();
 }