Merge branch 'feature/init-cleanup'
[supertux.git] / src / video / sdl / sdl_lightmap.cpp
index 9638c2a..68dc085 100644 (file)
 #include "video/sdl/sdl_painter.hpp"
 
 SDLLightmap::SDLLightmap() :
-  renderer(static_cast<SDLRenderer*>(Renderer::instance())->get_sdl_renderer()),
-  width(),
-  height(),
-  LIGHTMAP_DIV()
+  m_renderer(static_cast<SDLRenderer&>(VideoSystem::current()->get_renderer()).get_sdl_renderer()),
+  m_texture(),
+  m_width(),
+  m_height(),
+  m_LIGHTMAP_DIV()
 {
-  LIGHTMAP_DIV = 8;
-
-  SDL_Renderer* renderer = static_cast<SDLRenderer*>(Renderer::instance())->get_sdl_renderer();
-  texture = SDL_CreateTexture(renderer,
-                              SDL_PIXELFORMAT_RGB888,
-                              SDL_TEXTUREACCESS_TARGET,
-                              SCREEN_WIDTH, SCREEN_HEIGHT);
-  if (!texture)
+  m_LIGHTMAP_DIV = 8;
+
+  m_width = SCREEN_WIDTH;
+  m_height = SCREEN_HEIGHT;
+
+  m_texture = SDL_CreateTexture(m_renderer,
+                                SDL_PIXELFORMAT_RGB888,
+                                SDL_TEXTUREACCESS_TARGET,
+                                m_width / m_LIGHTMAP_DIV,
+                                m_height / m_LIGHTMAP_DIV);
+  if (!m_texture)
   {
     std::stringstream msg;
     msg << "Couldn't create lightmap texture: " << SDL_GetError();
@@ -45,81 +49,83 @@ SDLLightmap::SDLLightmap() :
 
 SDLLightmap::~SDLLightmap()
 {
-  SDL_DestroyTexture(texture);
+  SDL_DestroyTexture(m_texture);
 }
 
 void
 SDLLightmap::start_draw(const Color &ambient_color)
 {
-  SDL_SetRenderTarget(renderer, texture);
+  SDL_SetRenderTarget(m_renderer, m_texture);
+
   Uint8 r = static_cast<Uint8>(ambient_color.red * 255);
   Uint8 g = static_cast<Uint8>(ambient_color.green * 255);
   Uint8 b = static_cast<Uint8>(ambient_color.blue * 255);
 
-  SDL_SetRenderDrawColor(renderer, r, g, b, 255);
-  SDL_RenderClear(renderer);
+  SDL_SetRenderDrawColor(m_renderer, r, g, b, 255);
+  SDL_RenderClear(m_renderer);
+  SDL_RenderSetScale(m_renderer, 1.0f / m_LIGHTMAP_DIV, 1.0f / m_LIGHTMAP_DIV);
 }
 
 void
 SDLLightmap::end_draw()
 {
-  SDL_SetRenderTarget(renderer, NULL);
+  SDL_RenderSetScale(m_renderer, 1.0f, 1.0f);
+  SDL_SetRenderTarget(m_renderer, NULL);
 }
 
 void
 SDLLightmap::do_draw()
 {
-  SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_MOD);
+  SDL_SetTextureBlendMode(m_texture, SDL_BLENDMODE_MOD);
 
   SDL_Rect dst_rect;
   dst_rect.x = 0;
   dst_rect.y = 0;
-  dst_rect.w = width;
-  dst_rect.h = height;
+  dst_rect.w = m_width;
+  dst_rect.h = m_height;
 
-  SDL_RenderCopy(renderer, texture, NULL, &dst_rect);
+  SDL_RenderCopy(m_renderer, m_texture, NULL, &dst_rect);
 }
 
 void
 SDLLightmap::draw_surface(const DrawingRequest& request)
 {
-  SDLPainter::draw_surface(renderer, request);
+  SDLPainter::draw_surface(m_renderer, request);
 }
 
 void
 SDLLightmap::draw_surface_part(const DrawingRequest& request)
 {
-  SDLPainter::draw_surface_part(renderer, request);
+  SDLPainter::draw_surface_part(m_renderer, request);
 }
 
 void
 SDLLightmap::draw_gradient(const DrawingRequest& request)
 {
-  SDLPainter::draw_gradient(renderer, request);
+  SDLPainter::draw_gradient(m_renderer, request);
 }
 
 void
 SDLLightmap::draw_filled_rect(const DrawingRequest& request)
 {
-  SDLPainter::draw_filled_rect(renderer, request);
+  SDLPainter::draw_filled_rect(m_renderer, request);
 }
 
 void
 SDLLightmap::get_light(const DrawingRequest& request) const
 {
-  const GetLightRequest* getlightrequest 
-    = (GetLightRequest*) request.request_data;
+  const GetLightRequest* getlightrequest
+    = static_cast<GetLightRequest*>(request.request_data);
 
   SDL_Rect rect;
-  rect.x = static_cast<int>(request.pos.x * width / SCREEN_WIDTH);
-  rect.y = static_cast<int>(request.pos.y * height / SCREEN_HEIGHT);
+  rect.x = static_cast<int>(request.pos.x * m_width / SCREEN_WIDTH);
+  rect.y = static_cast<int>(request.pos.y * m_height / SCREEN_HEIGHT);
   rect.w = 1;
   rect.h = 1;
 
-  SDL_SetRenderTarget(renderer, texture);
+  SDL_SetRenderTarget(m_renderer, m_texture);
   Uint8 pixel[4];
-  int ret = SDL_RenderReadPixels(renderer, &rect,
+  int ret = SDL_RenderReadPixels(m_renderer, &rect,
                                  SDL_PIXELFORMAT_RGB888,
                                  pixel,
                                  1);
@@ -127,7 +133,7 @@ SDLLightmap::get_light(const DrawingRequest& request) const
   {
     log_warning << "failed to read pixels: " << SDL_GetError() << std::endl;
   }
-  SDL_SetRenderTarget(renderer, 0);
+  SDL_SetRenderTarget(m_renderer, 0);
 
   *(getlightrequest->color_ptr) = Color(pixel[2] / 255.0f,
                                         pixel[1] / 255.0f,