109 lines
2.2 KiB
C++
109 lines
2.2 KiB
C++
/*
|
|
* SdlRenderer.cpp
|
|
*
|
|
* Created on: Nov 13, 2016
|
|
* Author: tibi
|
|
*/
|
|
|
|
#include <GameState.h>
|
|
#include <graphics/SdlRenderer.h>
|
|
|
|
#include <iostream>
|
|
#include <cassert>
|
|
|
|
#include <SDL2/SDL.h>
|
|
#include <SDL2/SDL_image.h>
|
|
#include <SDL2/SDL_ttf.h>
|
|
|
|
namespace farmlands
|
|
{
|
|
namespace graphics
|
|
{
|
|
|
|
SdlRenderer::SdlRenderer()
|
|
: m_sdlWindow(nullptr),
|
|
m_sdlRenderer(nullptr),
|
|
m_gameState(nullptr)
|
|
{
|
|
}
|
|
|
|
SdlRenderer::~SdlRenderer()
|
|
{
|
|
if (m_sdlRenderer)
|
|
SDL_DestroyRenderer(m_sdlRenderer);
|
|
|
|
if (m_sdlWindow)
|
|
SDL_DestroyWindow(m_sdlWindow);
|
|
|
|
SDL_Quit();
|
|
}
|
|
|
|
bool SdlRenderer::initialize(GameState* gameState)
|
|
{
|
|
m_gameState = gameState;
|
|
|
|
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
|
|
std::cerr << "Failed to initialize SDL!\n";
|
|
return false;
|
|
}
|
|
|
|
int imgFlags = IMG_INIT_PNG;
|
|
if (IMG_Init(IMG_INIT_PNG) != imgFlags) {
|
|
std::cerr << "Failed to initialize SDL_image!\n";
|
|
return false;
|
|
}
|
|
|
|
if (TTF_Init() != 0) {
|
|
std::cerr << "Failed to initialize SDL_ttf!\n";
|
|
return false;
|
|
}
|
|
|
|
m_gameState->viewport.initialized = true;
|
|
m_gameState->viewport.width = 1024;
|
|
m_gameState->viewport.height = 768;
|
|
m_sdlWindow = SDL_CreateWindow("Farmlands", 0, 0, m_gameState->viewport.width, m_gameState->viewport.height, SDL_WINDOW_SHOWN);
|
|
if (!m_sdlWindow) {
|
|
std::cerr << "Failed to create main window!\n";
|
|
return false;
|
|
}
|
|
|
|
m_sdlRenderer = SDL_CreateRenderer(m_sdlWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
|
|
if (!m_sdlRenderer) {
|
|
std::cerr << "Failed to create renderer!\n";
|
|
return false;
|
|
}
|
|
SDL_SetRenderDrawBlendMode(m_sdlRenderer, SDL_BlendMode::SDL_BLENDMODE_BLEND);
|
|
|
|
return true;
|
|
}
|
|
|
|
void SdlRenderer::renderBegin()
|
|
{
|
|
SDL_SetRenderDrawColor(m_sdlRenderer, 0, 0, 0, 255);
|
|
SDL_RenderClear(m_sdlRenderer);
|
|
}
|
|
|
|
void SdlRenderer::renderEnd()
|
|
{
|
|
SDL_RenderPresent(m_sdlRenderer);
|
|
}
|
|
|
|
SDL_Texture* SdlRenderer::renderText(const std::string& text, TTF_Font* font, SDL_Color color)
|
|
{
|
|
assert(font != nullptr);
|
|
|
|
SDL_Surface* surface = TTF_RenderText_Blended(font, text.c_str(), color);
|
|
if (surface == nullptr)
|
|
return nullptr;
|
|
|
|
SDL_Texture* texture = SDL_CreateTextureFromSurface(m_sdlRenderer, surface);
|
|
|
|
SDL_FreeSurface(surface);
|
|
return texture;
|
|
}
|
|
|
|
} /* namespace graphics */
|
|
} /* namespace farmlands */
|
|
|
|
|