diff options
Diffstat (limited to 'src/Renderer.h')
-rw-r--r-- | src/Renderer.h | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/src/Renderer.h b/src/Renderer.h index fb98e38..ae9af4a 100644 --- a/src/Renderer.h +++ b/src/Renderer.h @@ -20,19 +20,25 @@ #ifndef ZOOM_RENDERER_H_ #define ZOOM_RENDERER_H_ -#include "BSPTree.h" #include "gl.h" +#include "BSPTree.h" +#include "Shader.h" + namespace Zoom { class Renderer { public: - Renderer() : activeTexture(0), renderVisitor(this) {} + Renderer(); void render(const BSPTree &tree); template <typename T> void render(const T &triangles) { + Shader::enable(ambientShader); + glBlendFunc(GL_ONE, GL_ZERO); + glDepthFunc(GL_LEQUAL); + typename T::const_iterator t = triangles.begin(); if(t == triangles.end()) return; @@ -44,6 +50,20 @@ class Renderer { renderTriangle(t->triangle); } glEnd(); + + Shader::enable(lightShader); + glBlendFunc(GL_ONE, GL_ONE); + glDepthFunc(GL_EQUAL); + + t = triangles.begin(); + + useTexture(t->triangle.getTexture()); + + glBegin(GL_TRIANGLES); + for(; t != triangles.end(); ++t) { + renderTriangle(t->triangle); + } + glEnd(); } struct TextureSorter { @@ -68,6 +88,7 @@ class Renderer { Renderer *renderer; }; + boost::shared_ptr<Shader> ambientShader, lightShader; unsigned activeTexture; const RenderVisitor renderVisitor; |