diff options
Diffstat (limited to 'src/render/render.cc')
-rw-r--r-- | src/render/render.cc | 39 |
1 files changed, 33 insertions, 6 deletions
diff --git a/src/render/render.cc b/src/render/render.cc index 76704a4..8311c16 100644 --- a/src/render/render.cc +++ b/src/render/render.cc @@ -20,9 +20,11 @@ namespace render { GLuint textures[32]; -core::Cvar *r_drawradius = 0; -core::Cvar *r_drawstats = 0; +core::Cvar *r_radius = 0; core::Cvar *r_wireframe = 0; +core::Cvar * r_arraysize = 0; + +core::VertexArray *vertexarray = 0; bool texture(const char *filename, size_t id) { @@ -30,8 +32,6 @@ bool texture(const char *filename, size_t id) if (!image) return false; - // FIXME - I don't get this part... yet - glGenTextures(1, &textures[id]); glBindTexture(GL_TEXTURE_2D, textures[id]); @@ -64,19 +64,46 @@ void init() con_error << "Essential file bitmaps/loader.tga missing" << std::endl; core::application()->shutdown(); } + if (!texture("bitmaps/conchars.tga", 1)) { con_error << "Essential file bitmaps/conchars.tga missing" << std::endl; core::application()->shutdown(); } - r_drawradius = core::Cvar::get("r_drawradius", "0", core::Cvar::Archive); - r_drawstats = core::Cvar::get("r_drawstats", "0", core::Cvar::Archive); + if (!texture("bitmaps/crosshair.tga", 2)) { + con_error << "Essential file bitmaps/crosshair.tga missing" << std::endl; + core::application()->shutdown(); + } + + r_arraysize = core::Cvar::get("r_arraysize", 4.0f * (float) sizeof(float) , core::Cvar::Archive); + size_t mb = (size_t) r_arraysize->value(); + if (mb < 8) + mb = 8; + if (mb > 256) + mb = 256; + (*r_arraysize) = (float) mb; + vertexarray = new core::VertexArray(mb); + + r_radius = core::Cvar::get("r_radius", "0", core::Cvar::Archive); r_wireframe = core::Cvar::get("r_wireframe", "0", core::Cvar::Archive); } void shutdown() { con_print << "Shutting down renderer..." << std::endl; + + glDeleteTextures(2, textures); + + // clear entity models, this will force a reload + for (std::map<unsigned int, core::Entity *>::iterator it=core::Entity::registry.begin(); it != core::Entity::registry.end(); it++) { + core::Entity *entity = (*it).second; + if (entity->model()) + entity->entity_model = 0; + } + + core::Model::clear(); + delete vertexarray; + vertexarray = 0; } } |