Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/render/sky.cc')
-rw-r--r--src/render/sky.cc41
1 files changed, 26 insertions, 15 deletions
diff --git a/src/render/sky.cc b/src/render/sky.cc
index e40c4be..1b914a6 100644
--- a/src/render/sky.cc
+++ b/src/render/sky.cc
@@ -4,6 +4,7 @@
the terms of the GNU General Public License version 2
*/
+#include "render/render.h"
#include "render/camera.h"
#include "render/sky.h"
#include "render/textures.h"
@@ -20,7 +21,7 @@ size_t Sky::sky_texture_back = 0;
std::string Sky::sky_name;
-void Sky::draw(const std::string & name)
+void Sky::draw(const std::string & name, const float wireframe)
{
if (sky_name.compare(name) != 0) {
unload();
@@ -31,28 +32,36 @@ void Sky::draw(const std::string & name)
if (name.size()) {
const std::string basename("textures/sky/" + name);
- sky_texture_up = Textures::load(basename + "_up");
- sky_texture_down = Textures::load(basename + "_down");
- sky_texture_left = Textures::load(basename + "_left");
- sky_texture_right = Textures::load(basename + "_right");
- sky_texture_front = Textures::load(basename + "_front");
- sky_texture_back = Textures::load(basename + "_back");
+ sky_texture_up = Textures::load(basename + "_up", false);
+ sky_texture_down = Textures::load(basename + "_down", false);
+ sky_texture_left = Textures::load(basename + "_left", false);
+ sky_texture_right = Textures::load(basename + "_right", false);
+ sky_texture_front = Textures::load(basename + "_front", false);
+ sky_texture_back = Textures::load(basename + "_back", false);
}
sky_name.assign(name);
}
/*
- * NOTE
- * for quake3 skyboxes: the _left texture is actually the right side of the skybox
+ * NOTE:
+ * to use quake3 skyboxes:
+ * switch left and right images
+ * rotate top image 90 degrees clockwise
+ * rotate bottom image 90 degrees counter-clockwise
+ *
*/
+
+ const gl::Primitive primitive = (wireframe ? gl::LineLoop : gl::Quads);
+
gl::push();
gl::translate(Camera::eye());
+
gl::enable(GL_TEXTURE_2D);
gl::color(1.0f, 1.0f, 1.0f, 1.0f);
// front
Textures::bind(sky_texture_front);
- gl::begin(gl::Quads);
+ gl::begin(primitive);
gl::texcoord(0, 0); gl::vertex(1, 1, 1);
gl::texcoord(1, 0); gl::vertex(1, -1, 1);
gl::texcoord(1, 1); gl::vertex(1, -1, -1);
@@ -61,7 +70,7 @@ void Sky::draw(const std::string & name)
// right
Textures::bind(sky_texture_right);
- gl::begin(gl::Quads);
+ gl::begin(primitive);
gl::texcoord(0, 0); gl::vertex(1, -1, 1);
gl::texcoord(1, 0); gl::vertex(-1, -1, 1);
gl::texcoord(1, 1); gl::vertex(-1, -1, -1);
@@ -70,7 +79,7 @@ void Sky::draw(const std::string & name)
// back
Textures::bind(sky_texture_back);
- gl::begin(gl::Quads);
+ gl::begin(primitive);
gl::texcoord(0, 0); gl::vertex(-1, -1, 1);
gl::texcoord(1, 0); gl::vertex(-1, 1, 1);
gl::texcoord(1, 1); gl::vertex(-1, 1, -1);
@@ -79,7 +88,7 @@ void Sky::draw(const std::string & name)
// left
Textures::bind(sky_texture_left);
- gl::begin(gl::Quads);
+ gl::begin(primitive);
gl::texcoord(0, 0); gl::vertex(-1, 1, 1);
gl::texcoord(1, 0); gl::vertex(1, 1, 1);
gl::texcoord(1, 1); gl::vertex(1, 1, -1);
@@ -88,7 +97,7 @@ void Sky::draw(const std::string & name)
// up
Textures::bind(sky_texture_up);
- gl::begin(gl::Quads);
+ gl::begin(primitive);
gl::texcoord(0, 0); gl::vertex(-1, 1, 1);
gl::texcoord(1, 0); gl::vertex(-1, -1, 1);
gl::texcoord(1, 1); gl::vertex(1, -1, 1);
@@ -97,7 +106,7 @@ void Sky::draw(const std::string & name)
// down
Textures::bind(sky_texture_down);
- gl::begin(gl::Quads);
+ gl::begin(primitive);
gl::texcoord(0, 0); gl::vertex(1, 1, -1);
gl::texcoord(1, 0); gl::vertex(1, -1, -1);
gl::texcoord(1, 1); gl::vertex(-1, -1, -1);
@@ -107,6 +116,8 @@ void Sky::draw(const std::string & name)
gl::pop();
gl::disable(GL_TEXTURE_2D);
+
+ Stats::quads += 6;
}
void Sky::unload()