/* * SdlRenderer.cpp * * Created on: Nov 13, 2016 * Author: tibi */ #include #include #include #include #include #include #include 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 */