summaryrefslogtreecommitdiffstats
path: root/src/Renderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Renderer.cpp')
-rw-r--r--src/Renderer.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/Renderer.cpp b/src/Renderer.cpp
index 8aaf9c5..b02c5ff 100644
--- a/src/Renderer.cpp
+++ b/src/Renderer.cpp
@@ -23,6 +23,7 @@
namespace Zoom {
Renderer::Renderer() : activeTexture(0), renderVisitor(this) {
+ nullShader = boost::shared_ptr<Shader>(Shader::load("null.vert", "null.frag"));
ambientShader = boost::shared_ptr<Shader>(Shader::load("ambient.vert", "ambient.frag"));
lightShader = boost::shared_ptr<Shader>(Shader::load("light.vert", "light.frag"));
}
@@ -57,6 +58,33 @@ void Renderer::renderTriangle(const Triangle &t) {
}
}
+void Renderer::renderShadowVolume(const ShadowVolume &v) {
+ if(!v.isVisible())
+ return;
+
+ glVertex3fv(v.getVertex(2).array);
+ glVertex3fv(v.getVertex(1).array);
+ glVertex3fv(v.getVertex(0).array);
+
+ for(int i = 0; i < 3; ++i) {
+ const vmml::vec3f &p1 = v.getVertex(i), &p2 = v.getVertex((i+1)%3);
+ const vmml::vec4f &dir1 = vmml::vec4f(v.getDirection(i), 0);
+ const vmml::vec4f &dir2 = vmml::vec4f(v.getDirection((i+1)%3), 0);
+
+ glVertex3fv(p1.array);
+ glVertex3fv(p2.array);
+ glVertex4fv(dir1.array);
+
+ glVertex4fv(dir1.array);
+ glVertex3fv(p2.array);
+ glVertex4fv(dir2.array);
+ }
+
+ glVertex4fv(vmml::vec4f(v.getDirection(0), 0).array);
+ glVertex4fv(vmml::vec4f(v.getDirection(1), 0).array);
+ glVertex4fv(vmml::vec4f(v.getDirection(2), 0).array);
+}
+
void Renderer::useTexture(unsigned texture) {
if(texture) {
glBindTexture(GL_TEXTURE_2D, texture);