]> git.tdb.fi Git - libs/gl.git/blobdiff - source/materials/renderpass.cpp
Refactor winding-based culling
[libs/gl.git] / source / materials / renderpass.cpp
index 62056ff9f56c63f103edb920ee8b546c7b13fe91..9a7ceef782075ee38821aa5ae9b45f1b6e13c425 100644 (file)
@@ -9,7 +9,6 @@
 #include "renderer.h"
 #include "texture.h"
 #include "texture2d.h"
-#include "texturing.h"
 #include "uniform.h"
 
 using namespace std;
@@ -22,7 +21,7 @@ RenderPass::RenderPass():
        shprog_from_material(false),
        shdata(0),
        material(0),
-       back_faces(false),
+       face_cull(CULL_BACK),
        receive_shadows(false),
        image_based_lighting(false)
 { }
@@ -31,7 +30,7 @@ void RenderPass::set_material_textures()
 {
        const Tag *material_texture_tags = material->get_texture_tags();
        for(const Tag *tag=material_texture_tags; tag->id; ++tag)
-               set_texture(*tag, material->get_texture(*tag), material->get_sampler());
+               set_texture(*tag, material->get_texture(*tag), material->get_sampler(*tag));
 }
 
 void RenderPass::maybe_create_material_shader()
@@ -125,9 +124,9 @@ int RenderPass::get_texture_index(const string &n) const
        return (shprog && i!=textures.end() ? shprog->get_uniform_binding(i->tag) : -1);
 }
 
-void RenderPass::set_back_faces(bool bf)
+void RenderPass::set_face_cull(CullMode fc)
 {
-       back_faces = bf;
+       face_cull = fc;
 }
 
 void RenderPass::set_receive_shadows(bool rs)
@@ -139,9 +138,10 @@ void RenderPass::apply(Renderer &renderer) const
 {
        for(vector<TextureSlot>::const_iterator i=textures.begin(); i!=textures.end(); ++i)
                renderer.set_texture(i->tag, i->texture, i->sampler);
-       renderer.set_material(material);
        renderer.set_shader_program(shprog, shdata.get());
-       renderer.set_reverse_winding(back_faces);
+       if(material)
+               renderer.add_shader_data(material->get_shader_data());
+       renderer.set_face_cull(face_cull);
 }
 
 void RenderPass::set_debug_name(const string &name)
@@ -171,12 +171,12 @@ RenderPass::Loader::Loader(RenderPass &p, Collection &c):
 
 void RenderPass::Loader::init_actions()
 {
+       add("face_cull", &RenderPass::face_cull);
        add("shader",   &Loader::shader);
        add("image_based_lighting", &RenderPass::image_based_lighting);
        add("material", &Loader::material_inline);
        add("material", &Loader::material);
        add("material_slot", &RenderPass::material_slot);
-       add("back_faces",&RenderPass::back_faces);
        add("receive_shadows", &RenderPass::receive_shadows);
        add("texture", &Loader::texture);
        add("uniforms", &Loader::uniforms);