diff options
author | Stijn Buys <ingar@osirion.org> | 2008-11-11 19:11:57 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2008-11-11 19:11:57 +0000 |
commit | 773c1bafe0f1d8b706e0f72e235f8466e7a9ccf5 (patch) | |
tree | ab4b3058f436a4e4c54618f132a9179ee40e330c /src/render/render.cc | |
parent | 3082cb197fb6af7d069f9ad211ff6ea5657d924a (diff) |
cleanups
Diffstat (limited to 'src/render/render.cc')
-rw-r--r-- | src/render/render.cc | 214 |
1 files changed, 39 insertions, 175 deletions
diff --git a/src/render/render.cc b/src/render/render.cc index 02bd586..9afa179 100644 --- a/src/render/render.cc +++ b/src/render/render.cc @@ -14,93 +14,47 @@ #include "filesystem/filesystem.h" #include "model/model.h" #include "render/gl.h" +#include "render/state.h" #include "render/dust.h" -#include "render/textures.h" -#include "render/tga.h" #include "render/render.h" +#include "render/screenshot.h" +#include "render/textures.h" #include "sys/sys.h" namespace render { +model::VertexArray *vertexarray = 0; + core::Cvar *r_arraysize = 0; core::Cvar *r_bbox = 0; core::Cvar *r_grid = 0; core::Cvar *r_radius = 0; core::Cvar *r_sky = 0; core::Cvar *r_wireframe = 0; -core::Cvar *screenshotformat = 0; -core::Cvar *screenshotquality = 0; - -int screenshot_number = 0; - -using model::VertexArray; -VertexArray *vertexarray = 0; void func_list_textures(std::string const &args) { Textures::list(); } -void reset_gl() +void init(int width, int height) { - // set clear color - gl::clearcolor(0.0f, 0.0f, 0.0f, 1.0f); - - // load identity matrices - gl::matrixmode(GL_MODELVIEW); - gl::loadidentity(); - - gl::matrixmode(GL_MODELVIEW); - gl::loadidentity(); - - // shading model: Gouraud (smooth, the default) - gl::shademodel(GL_SMOOTH); - //gl::shademodel(GL_FLAT); - - // lighting settings for the default light GL_LIGHT0 - GLfloat light_position[] = { 0.0, 0.0, 0.0, 1.0 }; - GLfloat ambient_light[] = { 0.01f, 0.01f, 0.01f, 1.0f }; - GLfloat diffuse_light[] = { 0.2f, 0.2f, 0.2f, 1.0f }; - GLfloat specular_light[] = { 0.2f, 0.2f, 0.2f, 1.0f }; - - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - glLightfv(GL_LIGHT0, GL_AMBIENT, ambient_light); - glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse_light); - glLightfv(GL_LIGHT0, GL_SPECULAR, specular_light); - - // GL_LIGHT0 is always enabled - gl::enable(GL_LIGHT0); - - // color tracking - glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); - - // material settings - GLfloat specular_reflectance[] = { 0.2f, 0.2f, 0.2f, 1.0f }; - glMaterialfv(GL_FRONT, GL_SPECULAR, specular_reflectance); - glMateriali(GL_FRONT, GL_SHININESS, 128); // shininess 1-128 + con_print << "^BInitializing renderer..." << std::endl; - // alpha blending function - gl::blendfunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + con_print << " renderer ^B" << gl::renderer() << std::endl; + con_print << " vendor ^B" << gl::vendor() << std::endl; + con_print << " version ^B" << gl::version() << std::endl; - gl::disable(GL_LIGHTING); - gl::disable(GL_COLOR_MATERIAL); + // initialize render state + State::init(width, height); - gl::cullface(GL_BACK); - gl::frontface(GL_CCW); - gl::disable(GL_CULL_FACE); - gl::disable(GL_DEPTH_TEST); - gl::disable(GL_BLEND); + Camera::init(); - gl::disable(GL_TEXTURE_2D); -} + Textures::init(); -void init() -{ - con_print << "^BInitializing renderer..." << std::endl; + Text::init(); - con_print << " renderer ^B" << gl::renderer() << std::endl; - con_print << " vendor ^B" << gl::vendor() << std::endl; - con_print << " version ^B" << gl::version() << std::endl; + Dust::init(); // size of the vertex array in megabytes r_arraysize = core::Cvar::get("r_arraysize", 0.0f , core::Cvar::Archive); @@ -112,8 +66,9 @@ void init() if (mb > 256) mb = 256; (*r_arraysize) = (float) mb; - vertexarray = new VertexArray(mb); + vertexarray = new model::VertexArray(mb); + // engine variables r_radius = core::Cvar::get("r_radius", "0", core::Cvar::Archive); r_radius->set_info("[bool] render entity radius"); @@ -129,33 +84,17 @@ void init() r_sky = core::Cvar::get("r_sky", "1", core::Cvar::Archive); r_sky->set_info("[bool] render the sky globe"); - screenshotformat = core::Cvar::get("screenshotformat", "jpg", core::Cvar::Archive); - screenshotformat->set_info("[string] screenshot format: jpg png tga"); - - screenshotquality = core::Cvar::get("screenshotquality", "85", core::Cvar::Archive); - screenshotquality->set_info("[int] screenshot jpg quality"); - - reset_gl(); - - Camera::init(); - - Textures::init(); + Screenshot::screenshotformat = core::Cvar::get("screenshotformat", "jpg", core::Cvar::Archive); + Screenshot::screenshotformat->set_info("[string] screenshot format: jpg png tga"); - Text::init(); + Screenshot::screenshotquality = core::Cvar::get("screenshotquality", "85", core::Cvar::Archive); + Screenshot::screenshotquality->set_info("[int] screenshot jpg quality"); - Dust::init(); - + // engine functions core::Func *func = core::Func::add("list_textures", func_list_textures); func->set_info("list loaded textures"); } -void resize(int width, int height) -{ - // setup our viewport. - gl::viewport(0, 0, width, height); - Camera::resize(width, height); -} - // unload game assets (zone change) void unload() { @@ -184,7 +123,8 @@ void unload() // clear all assets void clear() { - con_debug << "Clearing render data...\n"; + //con_debug << " vclearing render data...\n"; + // clear zone sky textures for (core::Zone::Registry::iterator it = core::Zone::registry().begin(); it != core::Zone::registry().end(); it++) { core::Zone *zone = (*it).second; @@ -204,7 +144,7 @@ void clear() } } - // clear models + // clear model refistry model::Model::clear(); // clear vertex array @@ -212,25 +152,33 @@ void clear() vertexarray = 0; } -// reset render subsystem +// reset render subsystem (module disconnect) void reset() { clear(); + State::clear(); + Textures::shutdown(); + Textures::init(); + size_t mb = (size_t) r_arraysize->value(); if (mb < 4 * sizeof(float)) mb = 4 * sizeof(float); if (mb > 256) mb = 256; (*r_arraysize) = (float) mb; - vertexarray = new VertexArray(mb); + vertexarray = new model::VertexArray(mb); - reset_gl(); Dust::reset(); } +void resize(int width, int height) +{ + State::resize(width, height); +} + void shutdown() { con_print << "^BShutting down renderer..." << std::endl; @@ -246,92 +194,8 @@ void shutdown() Camera::shutdown(); Dust::shutdown(); -} - - -void screenshot() -{ - bool available = false; - std::string shortname; - std::string filename; - const int TYPETGA = 0; - const int TYPEPNG = 1; - const int TYPEJPG = 2; - int filetype = TYPETGA; - - // make sure the screenshots folder exists - filename.assign(filesystem::writedir()); - filename.append("screenshots/"); - sys::mkdir(filename); - - aux::lowercase(screenshotformat->str()); - - if ((screenshotformat->str().compare("jpg") == 0) || (screenshotformat->str().compare("jpeg") == 0)) { - filetype = TYPEJPG; - if (screenshotquality->value() < 10) { - (*screenshotquality) = 10; - } else if (screenshotquality->value() > 100) { - (*screenshotquality) = 100; - } - - } else if (screenshotformat->str().compare("png") == 0) { - filetype = TYPEPNG; - - } else if (screenshotformat->str().compare("tga") == 0) { - filetype = TYPETGA; - - } else { - filetype = TYPETGA; - (*screenshotformat) = "tga"; - } - - // find the first available screenshotxxxx - do { - std::stringstream nstr; - nstr << screenshot_number; - shortname.assign(nstr.str()); - - while(shortname.size() < 4) - shortname.insert(0, 1, '0'); - - shortname.insert(0, "screenshots/osirion"); - shortname.append("."); - shortname.append(screenshotformat->str()); - - filename.assign(filesystem::writedir()); - filename.append(shortname); - - FILE *handle = fopen(filename.c_str(), "r"); - if (handle) { - fclose(handle); - } else { - available = true; - } - screenshot_number++; - } while (!available); - - render::Image image(Camera::width(), Camera::height(), 3); - - glReadPixels(0, 0, (GLsizei) Camera::width(), (GLsizei) Camera::height(), - GL_RGB, GL_UNSIGNED_BYTE, (void *) image.data()); - - image.flip(); - - if (filetype == TYPEPNG) { -/* if ((Camera::width() % 8 != 0 ) || (Camera::height() % 8 != 0 )) { - image.pad(); - }*/ - render::PNG::save(filename.c_str(), image); - } else if (filetype == TYPEJPG) { -/* if ((Camera::width() % 8 != 0 ) || (Camera::height() % 8 != 0 )) { - image.pad(); - } -*/ - render::JPG::save(filename.c_str(), image, (int) screenshotquality->value()); - } else if (filetype == TYPETGA) { - render::TGA::save(filename.c_str(), image); - } -} + State::shutdown(); } +} // namespace render |