]> git.tdb.fi Git - libs/gl.git/blobdiff - source/renderpass.cpp
Share shader data between copied RenderPasses
[libs/gl.git] / source / renderpass.cpp
index 3f63ec47a8c382b058bd3321df01161290e387f2..eb4ae1f93ba145b029ff5a23847b02e557f56c37 100644 (file)
@@ -25,7 +25,7 @@ RenderPass::RenderPass():
 
 RenderPass::RenderPass(const RenderPass &other):
        shprog(other.shprog),
-       shdata(other.shdata ? new ProgramData(*other.shdata) : 0),
+       shdata(other.shdata),
        uniform_slots(other.uniform_slots),
        material(other.material),
        texturing(other.texturing ? new Texturing(*other.texturing) : 0),
@@ -36,7 +36,7 @@ RenderPass::RenderPass(const RenderPass &other):
 RenderPass &RenderPass::operator=(const RenderPass &other)
 {
        shprog = other.shprog;
-       shdata = other.shdata ? new ProgramData(*other.shdata) : 0;
+       shdata = other.shdata;
        uniform_slots = other.uniform_slots;
        material = other.material;
        texturing = other.texturing ? new Texturing(*other.texturing) : 0;
@@ -48,13 +48,11 @@ 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;
-       delete shdata;
        shdata = new ProgramData(*data);
 }
 
@@ -95,7 +93,7 @@ void RenderPass::apply(Renderer &renderer) const
 {
        renderer.set_texturing(texturing);
        renderer.set_material(material.get());
-       renderer.set_shader_program(shprog, shdata);
+       renderer.set_shader_program(shprog, shdata.get());
        renderer.set_reverse_winding(back_faces);
 }