From 4e3efa239c9bcb5dd26b4ad9a4d43d4d6a266e6f Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Fri, 18 Dec 2009 13:31:07 +0100 Subject: Use multi-pass rendering with seperate ambient and light shaders --- src/Renderer.h | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'src/Renderer.h') 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 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 ambientShader, lightShader; unsigned activeTexture; const RenderVisitor renderVisitor; -- cgit v1.2.3