From f4cc942c85bd4068b4c1d9590629eb1ec8866db3 Mon Sep 17 00:00:00 2001 From: Eduardo Bart Date: Sun, 19 Aug 2012 22:38:43 -0300 Subject: [PATCH] Fix some graphics issues with old drivers --- src/framework/graphics/graphics.cpp | 35 ++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/src/framework/graphics/graphics.cpp b/src/framework/graphics/graphics.cpp index 37e0a49e..7eb1c46b 100644 --- a/src/framework/graphics/graphics.cpp +++ b/src/framework/graphics/graphics.cpp @@ -87,6 +87,9 @@ void Graphics::init() if(m_maxTextureSize == -1 || m_maxTextureSize > maxTextureSize) m_maxTextureSize = maxTextureSize; + if(Size(m_maxTextureSize,m_maxTextureSize) < g_window.getDisplaySize()) + m_cacheBackbuffer = false; + m_alphaBits = 0; glGetIntegerv(GL_ALPHA_BITS, &m_alphaBits); @@ -169,28 +172,40 @@ bool Graphics::isPainterEngineAvailable(Graphics::PainterEngine painterEngine) bool Graphics::selectPainterEngine(PainterEngine painterEngine) { Painter *painter = nullptr; + Painter *fallbackPainter = nullptr; #ifdef PAINTER_OGL2 // always prefer OpenGL 2 over OpenGL 1 - if(!painter && g_painterOGL2 && (painterEngine == Painter_OpenGL2 || painterEngine == Painter_Any)) { - m_selectedPainterEngine = Painter_OpenGL2; - painter = g_painterOGL2; + if(g_painterOGL2) { + if(!painter && (painterEngine == Painter_OpenGL2 || painterEngine == Painter_Any)) { + m_selectedPainterEngine = Painter_OpenGL2; + painter = g_painterOGL2; + } + fallbackPainter = g_painterOGL2; } #endif #ifdef PAINTER_OGL1 // fallback to OpenGL 1 in older hardwares - if(!painter && g_painterOGL1 && (painterEngine == Painter_OpenGL1 || painterEngine == Painter_Any)) { - m_selectedPainterEngine = Painter_OpenGL1; - painter = g_painterOGL1; + if(g_painterOGL1) { + if(!painter && (painterEngine == Painter_OpenGL1 || painterEngine == Painter_Any)) { + m_selectedPainterEngine = Painter_OpenGL1; + painter = g_painterOGL1; + } + fallbackPainter = g_painterOGL1; } #endif + if(!painter) + painter = fallbackPainter; + // switch painters GL state if(painter) { - if(g_painter) - g_painter->unbind(); - painter->bind(); - g_painter = painter; + if(painter != g_painter) { + if(g_painter) + g_painter->unbind(); + painter->bind(); + g_painter = painter; + } if(painterEngine == Painter_Any) return true;