More SDL2 fixes
[supertux.git] / src / video / video_systems.cpp
index c148990..27fd417 100644 (file)
 #include <config.h>
 
 #include "supertux/gameconfig.hpp"
-#include "video/gl/gl_lightmap.hpp"
-#include "video/gl/gl_renderer.hpp"
-#include "video/gl/gl_surface_data.hpp"
-#include "video/gl/gl_texture.hpp"
 #include "video/lightmap.hpp"
 #include "video/renderer.hpp"
 #include "video/sdl/sdl_lightmap.hpp"
 #include "video/texture.hpp"
 #include "video/video_systems.hpp"
 
+#ifdef HAVE_OPENGL
+#include "video/gl/gl_lightmap.hpp"
+#include "video/gl/gl_renderer.hpp"
+#include "video/gl/gl_surface_data.hpp"
+#include "video/gl/gl_texture.hpp"
+#endif
+
 Renderer*
 VideoSystem::new_renderer()
 {
@@ -37,19 +40,22 @@ VideoSystem::new_renderer()
   {
     case AUTO_VIDEO:
 #ifdef HAVE_OPENGL
-      log_info << "new GL renderer\n";
-      return new GLRenderer();
-#else
-      log_warning << "new SDL renderer\n";
-      return new SDLRenderer();
+      try {
+        log_info << "new GL renderer\n";
+        return new GLRenderer();
+      } catch(std::runtime_error& e) {
+        log_warning << "Error creating GL renderer: "  << e.what() << std::endl;
 #endif
+        log_warning << "new SDL renderer\n";
+        return new SDLRenderer();
 #ifdef HAVE_OPENGL
+      }
     case OPENGL:
       log_info << "new GL renderer\n";
       return new GLRenderer();
 #endif
     case PURE_SDL:
-      log_warning << "new SDL renderer\n";
+      log_info << "new SDL renderer\n";
       return new SDLRenderer();
     default:
       assert(0 && "invalid video system in config");
@@ -90,34 +96,34 @@ VideoSystem::new_lightmap()
   }
 }
 
-Texture*
+TexturePtr
 VideoSystem::new_texture(SDL_Surface *image)
 {
   switch(g_config->video)
   {
     case AUTO_VIDEO:
 #ifdef HAVE_OPENGL
-      return new GLTexture(image);
+      return TexturePtr(new GLTexture(image));
 #else
-      return new SDLTexture(image);
+      return TexturePtr(new SDLTexture(image));
 #endif
 #ifdef HAVE_OPENGL
     case OPENGL:
-      return new GLTexture(image);
+      return TexturePtr(new GLTexture(image));
 #endif
     case PURE_SDL:
-      return new SDLTexture(image);
+      return TexturePtr(new SDLTexture(image));
     default:
       assert(0 && "invalid video system in config");
 #ifdef HAVE_OPENGL
-      return new GLTexture(image);
+      return TexturePtr(new GLTexture(image));
 #else
-      return new SDLTexture(image);
+      return TexturePtr(new SDLTexture(image));
 #endif
   }
 }
 
-void*
+SurfaceData*
 VideoSystem::new_surface_data(const Surface &surface)
 {
   switch(g_config->video)
@@ -145,10 +151,9 @@ VideoSystem::new_surface_data(const Surface &surface)
 }
 
 void
-VideoSystem::free_surface_data(void *surface_data)
+VideoSystem::free_surface_data(SurfaceData* surface_data)
 {
-  // FIXME: this won't call any destructors
-  delete reinterpret_cast<char *>(surface_data);
+  delete surface_data;
 }
 
 VideoSystem::Enum