summaryrefslogtreecommitdiffstats
path: root/src/Renderer.h
diff options
context:
space:
mode:
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;