From d4fa9aa551c5bf227b4e68f6ed0ce4b739fea819 Mon Sep 17 00:00:00 2001 From: "bart@bartbes.ath.cx" Date: Sun, 18 Apr 2010 14:44:46 +0200 Subject: [PATCH] Prevent error when setting an incompatible FSAA value (warning is displayed) --- src/modules/graphics/opengl/Graphics.cpp | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/modules/graphics/opengl/Graphics.cpp b/src/modules/graphics/opengl/Graphics.cpp index c304e849a..d3d08cc38 100644 --- a/src/modules/graphics/opengl/Graphics.cpp +++ b/src/modules/graphics/opengl/Graphics.cpp @@ -192,8 +192,18 @@ namespace opengl // Have SDL set the video mode. if(SDL_SetVideoMode(width, height, 32, sdlflags ) == 0) { - std::cerr << "Could not set video mode: " << SDL_GetError() << std::endl; - return false; + bool failed = true; + if(fsaa > 0) + { + // FSAA might have failed, disable it and try again + SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 0); + failed = SDL_SetVideoMode(width, height, 32, sdlflags ) == 0; + } + if(failed) + { + std::cerr << "Could not set video mode: " << SDL_GetError() << std::endl; + return false; + } } // Check if FSAA failed or not @@ -207,7 +217,7 @@ namespace opengl // Don't fail because of this, but issue a warning. if ( ! buffers || (samples != fsaa)) - std::cerr << "Warning, quality setting failed! (Result: buffers: " << buffers << ", samples: " << samples << std::endl; + std::cerr << "Warning, quality setting failed! (Result: buffers: " << buffers << ", samples: " << samples << ")" << std::endl; } // Okay, setup OpenGL. @@ -845,13 +855,13 @@ namespace opengl glPopMatrix(); glEnable(GL_TEXTURE_2D); } - + int Graphics::polyline( lua_State * L) { // Get number of params. int args = lua_gettop(L); bool table = false; - + if (args == 1) { // we've got a table, hopefully int type = lua_type(L, 1); if (type != LUA_TTABLE) @@ -859,10 +869,10 @@ namespace opengl table = true; args = lua_objlen(L, 1); } - + if (args % 2) // an odd number of arguments, no good for a polyline return luaL_error(L, "Number of vertices must be a multiple of two"); - + // right, let's draw this polyline, then glDisable(GL_TEXTURE_2D); glBegin(GL_LINE_STRIP);