RendererOGL::RendererOGL(WindowSDL *window, const Graphics::Settings &vs) : Renderer(window, window->GetWidth(), window->GetHeight()) , m_numLights(0) , m_numDirLights(0) //the range is very large due to a "logarithmic z-buffer" trick used //http://outerra.blogspot.com/2009/08/logarithmic-z-buffer.html //http://www.gamedev.net/blog/73/entry-2006307-tip-of-the-day-logarithmic-zbuffer-artifacts-fix/ , m_minZNear(0.0001f) , m_maxZFar(10000000.0f) , m_useCompressedTextures(false) , m_invLogZfarPlus1(0.f) , m_activeRenderTarget(0) , m_activeRenderState(nullptr) , m_matrixMode(MatrixMode::MODELVIEW) { if (!initted) { initted = true; if (!ogl_LoadFunctions()) Error("glLoadGen failed to load functions.\n"); if (ogl_ext_EXT_texture_compression_s3tc == ogl_LOAD_FAILED) Error( "OpenGL extension GL_EXT_texture_compression_s3tc not supported.\n" "Pioneer can not run on your graphics card as it does not support compressed (DXTn/S3TC) format textures." ); } m_viewportStack.push(Viewport()); const bool useDXTnTextures = vs.useTextureCompression; m_useCompressedTextures = useDXTnTextures; //XXX bunch of fixed function states here! glCullFace(GL_BACK); glFrontFace(GL_CCW); glEnable(GL_CULL_FACE); glEnable(GL_DEPTH_TEST); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS); SetMatrixMode(MatrixMode::MODELVIEW); m_modelViewStack.push(matrix4x4f::Identity()); m_projectionStack.push(matrix4x4f::Identity()); SetClearColor(Color4f(0.f, 0.f, 0.f, 0.f)); SetViewport(0, 0, m_width, m_height); if (vs.enableDebugMessages) GLDebug::Enable(); }
// ---------------------------------------------------------------------------- RendererOGL::RendererOGL(WindowSDL *window, const Graphics::Settings &vs) : Renderer(window, window->GetWidth(), window->GetHeight()) , m_numLights(0) , m_numDirLights(0) //the range is very large due to a "logarithmic z-buffer" trick used //http://outerra.blogspot.com/2009/08/logarithmic-z-buffer.html //http://www.gamedev.net/blog/73/entry-2006307-tip-of-the-day-logarithmic-zbuffer-artifacts-fix/ , m_minZNear(0.0001f) , m_maxZFar(10000000.0f) , m_useCompressedTextures(false) , m_invLogZfarPlus1(0.f) , m_activeRenderTarget(0) , m_activeRenderState(nullptr) , m_matrixMode(MatrixMode::MODELVIEW) { if (!initted) { initted = true; if (!ogl_LoadFunctions()) Error( "Pioneer can not run on your graphics card as it does not appear to support OpenGL 3.3\n" "Please check to see if your GPU driver vendor has an updated driver - or that drivers are installed correctly." ); if (ogl_ext_EXT_texture_compression_s3tc == ogl_LOAD_FAILED) Error( "OpenGL extension GL_EXT_texture_compression_s3tc not supported.\n" "Pioneer can not run on your graphics card as it does not support compressed (DXTn/S3TC) format textures." ); } m_viewportStack.push(Viewport()); const bool useDXTnTextures = vs.useTextureCompression; m_useCompressedTextures = useDXTnTextures; const bool useAnisotropicFiltering = vs.useAnisotropicFiltering; m_useAnisotropicFiltering = useAnisotropicFiltering; //XXX bunch of fixed function states here! glCullFace(GL_BACK); glFrontFace(GL_CCW); glEnable(GL_CULL_FACE); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); glDepthRange(0.0,1.0); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS); glEnable(GL_PROGRAM_POINT_SIZE); glHint(GL_TEXTURE_COMPRESSION_HINT, GL_NICEST); glHint(GL_FRAGMENT_SHADER_DERIVATIVE_HINT, GL_NICEST); SetMatrixMode(MatrixMode::MODELVIEW); m_modelViewStack.push(matrix4x4f::Identity()); m_projectionStack.push(matrix4x4f::Identity()); SetClearColor(Color4f(0.f, 0.f, 0.f, 0.f)); SetViewport(0, 0, m_width, m_height); if (vs.enableDebugMessages) GLDebug::Enable(); // check enum PrimitiveType matches OpenGL values assert(POINTS == GL_POINTS); assert(LINE_SINGLE == GL_LINES); assert(LINE_LOOP == GL_LINE_LOOP); assert(LINE_STRIP == GL_LINE_STRIP); assert(TRIANGLES == GL_TRIANGLES); assert(TRIANGLE_STRIP == GL_TRIANGLE_STRIP); assert(TRIANGLE_FAN == GL_TRIANGLE_FAN); }