/* video.cc This file is part of the Osirion project and is distributed under the terms and conditions of the GNU General Public License version 2 */ #include "client/client.h" #include "gl/gllib.h" #include "sys/sys.h" #include namespace client { Video::Video() { width = 0; height = 0; initialized = false; ratio = 1; } Video::~Video() { } void Video::reset() { ratio = (float) width / (float) height; // Our shading model--Gouraud (smooth). gl::shademodel(GL_SMOOTH); // Culling gl::cullface( GL_BACK ); gl::frontface(GL_CCW ); gl::enable( GL_CULL_FACE ); // Depth buffer writing gl::depthmask(GL_TRUE); gl::enable(GL_DEPTH_TEST); // Alpha blending gl::blendfunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Set the clear color gl::clearcolor( 0, 0, 0, 0 ); // Setup our viewport. gl::viewport(0, 0, width, height ); view.reset(); } void Video::init() { if (initialized) { return; } int bpp = 0; int flags = 0; if( SDL_Init(SDL_INIT_VIDEO) < 0 ) { con_warn << "SDL_Init() failed: " << SDL_GetError() << std::endl; return; } const SDL_VideoInfo* sdl_videoinfo = SDL_GetVideoInfo(); if( !sdl_videoinfo) { con_warn << "SDL_GetVideoInfo() failed: " << SDL_GetError() << std::endl; return; } width = 800; height = 600; bpp = sdl_videoinfo->vfmt->BitsPerPixel; SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 5 ); SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 5 ); SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 5 ); SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16 ); SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 2); SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); flags = SDL_OPENGL | SDL_FULLSCREEN; if(!SDL_SetVideoMode(width, height, bpp, flags )) { con_warn << "SDL_SetVideoMode() failed: " << SDL_GetError() << std::endl; return; } gl::init(); initialized = true; view.init(); reset(); return; } void Video::draw(float elapsed) { view.draw(elapsed); } void Video::shutdown() { view.shutdown(); gl::shutdown(); initialized = false; width = 0; height = 0; } } // namespace client