+void RenderPass::ensure_private_shader_data()
+{
+ if(!shprog)
+ throw invalid_operation("RenderPass::ensure_private_shader_data");
+
+ if(!shdata)
+ shdata = new ProgramData(shprog.get());
+ else if(shdata.refcount()>1)
+ shdata = new ProgramData(*shdata);
+}
+
+void RenderPass::set_shader_program(const Program *prog, const ProgramData *data)
+{
+ shprog = prog;
+ shprog.keep();
+ shprog_from_material = false;
+ shdata = (data ? new ProgramData(*data) : 0);