From a704318f507f486ac04834747eb209d0a9410702 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sun, 24 Oct 2010 16:02:09 +0000 Subject: keepalive optimizations, r_lights engine variable, OpenGL VBO support --- src/render/state.cc | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) (limited to 'src/render/state.cc') 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 #include +#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) -- cgit v1.2.3