X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frenderpass.cpp;h=de5ac07f8f6bcf34356eab49bb693c6c26d3ecde;hb=6afbace895a7bbcf216ab8e48280ea0303ab5892;hp=fc2d37ed1a72d6a6a46335f50b46db09bd96bd6a;hpb=0fc02952ed449ff85f5f9e96ea2fc724c8456891;p=libs%2Fgl.git diff --git a/source/renderpass.cpp b/source/renderpass.cpp index fc2d37ed..de5ac07f 100644 --- a/source/renderpass.cpp +++ b/source/renderpass.cpp @@ -32,10 +32,16 @@ RenderPass::RenderPass(const RenderPass &other): RenderPass::~RenderPass() { - delete shdata; delete texturing; } +void RenderPass::set_shader_program(const Program *prog, const ProgramData *data) +{ + shprog = prog; + shdata = data; + shdata.keep(); +} + void RenderPass::set_material(const Material *mat) { material = mat; @@ -112,9 +118,9 @@ void RenderPass::Loader::uniforms() { if(!obj.shprog) throw invalid_operation("RenderPass::Loader::uniforms"); - if(!obj.shdata) - obj.shdata = new ProgramData(*obj.shprog); - load_sub(*obj.shdata); + RefPtr shd = new ProgramData; + load_sub(*shd); + obj.shdata = shd; }