summaryrefslogtreecommitdiffstats
path: root/src/Renderer.h
diff options
context:
space:
mode:
authorMatthias Schiffer <matthias@gamezock.de>2009-12-18 13:31:07 +0100
committerMatthias Schiffer <matthias@gamezock.de>2009-12-18 13:31:07 +0100
commit4e3efa239c9bcb5dd26b4ad9a4d43d4d6a266e6f (patch)
treee39e9698513687a3213ecae7eab942bce88b12d6 /src/Renderer.h
parentb3b74dc2afe4c67a6b74c2a681aa7bbad7077511 (diff)
downloadzoom++-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.h25
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;