#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*>(Renderer::instance())->get_sdl_renderer()),
+ m_texture(),
+ m_width(),
+ m_height(),
+ m_LIGHTMAP_DIV()
{
- LIGHTMAP_DIV = 8;
+ m_LIGHTMAP_DIV = 8;
- width = 800; //screen->w / LIGHTMAP_DIV;
- height = 600; //screen->h / LIGHTMAP_DIV;
+ m_width = SCREEN_WIDTH;
+ m_height = SCREEN_HEIGHT;
- SDL_Renderer* renderer = static_cast<SDLRenderer*>(Renderer::instance())->get_sdl_renderer();
- texture = SDL_CreateTexture(renderer,
- SDL_PIXELFORMAT_RGB888,
- SDL_TEXTUREACCESS_TARGET,
- width, height);
- if (!texture)
+ 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();
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);
{
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,