Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2010-10-24 16:02:09 +0000
committerStijn Buys <ingar@osirion.org>2010-10-24 16:02:09 +0000
commita704318f507f486ac04834747eb209d0a9410702 (patch)
treeb6f3f6df4b285be0b9c6e91c0486271daf0bb6ee /src/render/state.cc
parentc2a6f7c2ee6245109c897ee23b093b5277a30594 (diff)
keepalive optimizations, r_lights engine variable, OpenGL VBO support
Diffstat (limited to 'src/render/state.cc')
-rw-r--r--src/render/state.cc51
1 files changed, 50 insertions, 1 deletions
diff --git a/src/render/state.cc b/src/render/state.cc
index 1a345c7..df2af75 100644
--- a/src/render/state.cc
+++ b/src/render/state.cc
@@ -7,6 +7,8 @@
#include <string>
#include <sstream>
+#include "SDL/SDL.h"
+
#include "render/state.h"
#include "render/gl.h"
#include "render/render.h"
@@ -17,7 +19,9 @@ namespace render
int State::render_width = 0;
int State::render_height = 0;
float State::render_aspect = 0;
-bool State::render_has_generate_mipmaps = 0;
+bool State::render_has_generate_mipmaps = false;
+bool State::render_has_vbo = false;
+GLuint State::render_vbo = 0;
void State::init(int width, int height)
{
@@ -45,10 +49,55 @@ void State::init(int width, int height)
} else {
con_warn << "Could not determine OpenGL version!" << std::endl;
}
+
+ con_print << " Hardware generate mipmaps ";
+ if (render_has_generate_mipmaps)
+ con_print << "enabled" << std::endl;
+ else
+ con_print << "disabled" << std::endl;
+
+ // initialize gl functions
+ render_has_vbo = true;
+ gl::genbuffers = (gl::genbuffers_func) SDL_GL_GetProcAddress("glGenBuffers");
+ if (!gl::genbuffers) {
+ con_debug << " glGenBuffers not available" << std::endl;
+ render_has_vbo = false;
+ }
+
+ gl::deletebuffers = (gl::deletebuffers_func) SDL_GL_GetProcAddress("glDeleteBuffers");
+ if (!gl::deletebuffers) {
+ con_debug << " glDeleteBuffers not available" << std::endl;
+ render_has_vbo = false;
+ }
+
+ gl::bindbuffer = (gl::bindbuffer_func) SDL_GL_GetProcAddress("glBindBuffer");
+ if (!gl::bindbuffer) {
+ con_debug << " glBindBuffer not available" << std::endl;
+ render_has_vbo = false;
+ }
+
+ gl::bufferdata = (gl::bufferdata_func) SDL_GL_GetProcAddress("glBufferData");
+ if (!gl::bufferdata) {
+ con_debug << " glBufferData not available" << std::endl;
+ render_has_vbo = false;
+ }
+
+ con_print << " Vertex bufer objects ";
+ if (render_has_vbo)
+ con_print << "enabled" << std::endl;
+ else
+ con_print << "disabled" << std::endl;
+
+ // Generate VBO
+ if (render_has_vbo)
+ gl::genbuffers(1, &render_vbo);
}
void State::shutdown()
{
+ // Delete VBO
+ if (render_has_vbo)
+ gl::deletebuffers(1, &render_vbo);
}
void State::resize(int width, int height)