]> git.tdb.fi Git - libs/gl.git/blobdiff - source/renderpass.cpp
Minor fixes, courtesy of Apple's compiler
[libs/gl.git] / source / renderpass.cpp
index b0289284033f4935066db0aafdcb07638dc9c2f2..158e9fc8390206aea6025f7fae37ab844048068c 100644 (file)
@@ -5,6 +5,7 @@
 #include "renderpass.h"
 #include "program.h"
 #include "programdata.h"
+#include "renderer.h"
 #include "texenv.h"
 #include "texture.h"
 #include "texture2d.h"
@@ -19,7 +20,8 @@ RenderPass::RenderPass():
        shprog(0),
        shdata(0),
        material(0),
-       texturing(0)
+       texturing(0),
+       back_faces(false)
 { }
 
 RenderPass::RenderPass(const RenderPass &other):
@@ -27,15 +29,22 @@ RenderPass::RenderPass(const RenderPass &other):
        shdata(other.shdata ? new ProgramData(*other.shdata) : 0),
        material(other.material),
        texturing(other.texturing ? new Texturing(*other.texturing) : 0),
-       tex_names(other.tex_names)
+       tex_names(other.tex_names),
+       back_faces(other.back_faces)
 { }
 
 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;
@@ -58,6 +67,14 @@ int RenderPass::get_texture_index(const string &n) const
        return i->second;
 }
 
+void RenderPass::apply(Renderer &renderer) const
+{
+       renderer.set_texturing(texturing);
+       renderer.set_material(material.get());
+       renderer.set_shader_program(shprog, shdata.get());
+       renderer.set_reverse_winding(back_faces);
+}
+
 
 RenderPass::Loader::Loader(RenderPass &p):
        DataFile::CollectionObjectLoader<RenderPass>(p, 0)
@@ -76,6 +93,7 @@ void RenderPass::Loader::init()
        add("shader",   &RenderPass::shprog);
        add("material", &Loader::material_inline);
        add("material", &Loader::material);
+       add("back_faces",&RenderPass::back_faces);
        add("texunit",  &Loader::texunit);
        add("texunit",  &Loader::texunit_named);
        add("uniforms", &Loader::uniforms);
@@ -112,9 +130,9 @@ void RenderPass::Loader::uniforms()
 {
        if(!obj.shprog)
                throw invalid_operation("RenderPass::Loader::uniforms");
-       if(!obj.shdata)
-               obj.shdata = new ProgramData;
-       load_sub(*obj.shdata);
+       RefPtr<ProgramData> shd = new ProgramData;
+       load_sub(*shd);
+       obj.shdata = shd;
 }