diff options
author | Matthias Schiffer <matthias@gamezock.de> | 2009-12-18 13:31:07 +0100 |
---|---|---|
committer | Matthias Schiffer <matthias@gamezock.de> | 2009-12-18 13:31:07 +0100 |
commit | 4e3efa239c9bcb5dd26b4ad9a4d43d4d6a266e6f (patch) | |
tree | e39e9698513687a3213ecae7eab942bce88b12d6 /src/Renderer.h | |
parent | b3b74dc2afe4c67a6b74c2a681aa7bbad7077511 (diff) | |
download | zoom++-4e3efa239c9bcb5dd26b4ad9a4d43d4d6a266e6f.tar zoom++-4e3efa239c9bcb5dd26b4ad9a4d43d4d6a266e6f.zip |
Use multi-pass rendering with seperate ambient and light shaders
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; |