#include "video/sdl/sdl_renderer.hpp"
+#include "util/log.hpp"
#include "video/drawing_request.hpp"
#include "video/sdl/sdl_surface_data.hpp"
#include "video/sdl/sdl_texture.hpp"
#include <sstream>
#include <stdexcept>
#include "SDL2/SDL_video.h"
-//#include "SDL/SDL.h"
-//#include "SDL/SDL_opengl.h"
-
namespace {
} // namespace
SDLRenderer::SDLRenderer() :
- screen(),
+ window(),
+ renderer(),
numerator(),
denominator()
{
// if(g_config->use_fullscreen)
// flags |= SDL_FULLSCREEN;
+ log_info << "creating SDLRenderer" << std::endl;
int width = 800; //FIXME: config->screenwidth;
int height = 600; //FIXME: config->screenheight;
-
- SDL_Init(SDL_INIT_VIDEO); // Initialize SDL2
-
- window = SDL_CreateWindow(
- "SuperTux",
- SDL_WINDOWPOS_UNDEFINED,
- SDL_WINDOWPOS_UNDEFINED,
- width, height,
- SDL_WINDOW_OPENGL );
- SDL_GLContext glcontext = SDL_GL_CreateContext(window);
- renderer = SDL_CreateRenderer(window, -1, 0);
-
-
- if(window == 0) {
+ int flags = 0;
+ int ret = SDL_CreateWindowAndRenderer(width, height, flags,
+ &window, &renderer);
+
+ if(ret != 0) {
std::stringstream msg;
msg << "Couldn't set video mode (" << width << "x" << height
<< "): " << SDL_GetError();
throw std::runtime_error(msg.str());
}
+ SDL_SetWindowTitle(window, "SuperTux");
+ if(texture_manager == 0)
+ texture_manager = new TextureManager();
+#ifdef OLD_SDL1
numerator = 1;
denominator = 1;
/* FIXME:
denominator = SCREEN_HEIGHT;
}
*/
- if(texture_manager == 0)
- texture_manager = new TextureManager();
+#endif
}
SDLRenderer::~SDLRenderer()
{
+ SDL_DestroyRenderer(renderer);
+ SDL_DestroyWindow(window);
}
void
SDLRenderer::draw_surface(const DrawingRequest& request)
{
+#ifdef OLD_SDL1
//FIXME: support parameters request.alpha, request.angle, request.blend
const Surface* surface = (const Surface*) request.request_data;
boost::shared_ptr<SDLTexture> sdltexture = boost::dynamic_pointer_cast<SDLTexture>(surface->get_texture());
dst_rect.y = (int) request.pos.y * numerator / denominator;
Uint8 alpha = 0;
-#ifdef OLD_SDL1
if(request.alpha != 1.0)
{
if(!transform->format->Amask)
transform = apply_alpha(transform, request.alpha);
}*/
}
-#endif
SDL_BlitSurface(transform, src_rect, screen, &dst_rect);
SDL_FreeSurface(transform);
}*/
}
+#endif
}
void
SDLRenderer::draw_surface_part(const DrawingRequest& request)
{
+#ifdef OLD_SDL1
const SurfacePartRequest* surfacepartrequest
= (SurfacePartRequest*) request.request_data;
dst_rect.x = (int) request.pos.x * numerator / denominator;
dst_rect.y = (int) request.pos.y * numerator / denominator;
-#ifdef OLD_SDL1
Uint8 alpha = 0;
if(request.alpha != 1.0)
{
}
#endif
+#ifdef OLD_SDL1
SDL_BlitSurface(transform, &src_rect, screen, &dst_rect);
+#endif
+#ifdef OLD_SDL1
if(request.alpha != 1.0)
{
if(!transform->format->Amask)
{
-#ifdef OLD_SDL1
if(alpha == 255)
{
SDL_SetSurfaceAlphaMod(transform, 0);
{
SDL_SetSurfaceAlphaMod(transform, alpha);
}
-#endif
}
/*else
{
SDL_FreeSurface(transform);
}*/
}
+#endif
}
void
SDLRenderer::draw_gradient(const DrawingRequest& request)
{
+#ifdef OLD_SDL1
const GradientRequest* gradientrequest
= (GradientRequest*) request.request_data;
const Color& top = gradientrequest->top;
SDL_FreeSurface(temp);
}
}
+#endif
}
void
SDLRenderer::draw_filled_rect(const DrawingRequest& request)
{
+#ifdef OLD_SDL1
const FillRectRequest* fillrectrequest
= (FillRectRequest*) request.request_data;
SDL_BlitSurface(temp, 0, screen, &rect);
SDL_FreeSurface(temp);
}
+#endif
}
void