summaryrefslogtreecommitdiffstats
path: root/src/Game.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Game.cpp')
-rw-r--r--src/Game.cpp34
1 files changed, 3 insertions, 31 deletions
diff --git a/src/Game.cpp b/src/Game.cpp
index 1b23222..d265e83 100644
--- a/src/Game.cpp
+++ b/src/Game.cpp
@@ -55,6 +55,8 @@ Game::Game() : playerPos(vmml::vec3f::ZERO), playerRotY(vmml::mat4f::IDENTITY),
glEnable(GL_CULL_FACE);
glFrontFace(GL_CCW);
+ glEnable(GL_STENCIL_TEST);
+
loadLevel("level.xml");
triangles.insert(triangles.end(), level->getRooms().front().walls.begin(), level->getRooms().front().walls.end());
std::sort(triangles.begin(), triangles.end(), Renderer::TextureSorter());
@@ -137,7 +139,7 @@ void Game::render() {
light.z() = -8.0;
}
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
vmml::mat4f transform(playerRotY), inverse;
transform.rotate_x(playerRotX);
@@ -147,36 +149,6 @@ void Game::render() {
glLoadMatrixf(inverse.array);
renderer.render(triangles, light);
-
- Shader::disable();
- glDepthMask(GL_FALSE);
- glBlendFunc(GL_ONE, GL_ONE);
- glBlendEquation(GL_FUNC_ADD);
- glDepthFunc(GL_GREATER);
- glColor3f(0.05, 0.05, 0.05);
- glFrontFace(GL_CCW);
-
- glBegin(GL_TRIANGLES);
- for(std::vector<BSPTree::TriangleRecord>::iterator t = triangles.begin(); t != triangles.end(); ++t) {
- ShadowVolume v(t->triangle, light);
- v.render();
- }
- glEnd();
-
- glFrontFace(GL_CW);
- glBlendEquation(GL_FUNC_REVERSE_SUBTRACT);
-
- glBegin(GL_TRIANGLES);
- for(std::vector<BSPTree::TriangleRecord>::iterator t = triangles.begin(); t != triangles.end(); ++t) {
- ShadowVolume v(t->triangle, light);
- v.render();
- }
- glEnd();
-
- glFrontFace(GL_CCW);
- glDepthMask(GL_TRUE);
- glDepthFunc(GL_LEQUAL);
- glBlendEquation(GL_FUNC_ADD);
}
}