#include #include "Renderer.h" #include "SceneManager.h" #include "Texture2D.h" int GetOpenGLDriverIndex() { auto openglIndex = -1; const auto driverCount = SDL_GetNumRenderDrivers(); for (auto i = 0; i < driverCount; i++) { SDL_RendererInfo info; if (!SDL_GetRenderDriverInfo(i, &info)) if (!strcmp(info.name, "opengl")) openglIndex = i; } return openglIndex; } void dae::Renderer::Init(SDL_Window* window) { m_window = window; m_renderer = SDL_CreateRenderer(window, GetOpenGLDriverIndex(), SDL_RENDERER_ACCELERATED); if (m_renderer == nullptr) { throw std::runtime_error(std::string("SDL_CreateRenderer Error: ") + SDL_GetError()); } } void dae::Renderer::Render() const { const auto& color = GetBackgroundColor(); SDL_SetRenderDrawColor(m_renderer, color.r, color.g, color.b, color.a); //SDL_RenderSetLogicalSize(m_renderer, 256, 224); SDL_RenderClear(m_renderer); SceneManager::GetInstance().Render(); SDL_RenderPresent(m_renderer); } void dae::Renderer::Destroy() { if (m_renderer != nullptr) { SDL_DestroyRenderer(m_renderer); m_renderer = nullptr; } } void dae::Renderer::RenderTexture(const Texture2D& texture, const float x, const float y) const { SDL_Rect dst{}; dst.x = static_cast(x); dst.y = static_cast(y); SDL_QueryTexture(texture.GetSDLTexture(), nullptr, nullptr, &dst.w, &dst.h); SDL_RenderCopy(GetSDLRenderer(), texture.GetSDLTexture(), nullptr, &dst); } void dae::Renderer::RenderTexture(const Texture2D& texture, const float x, const float y, const int width, const int height, const int srcX, const int srcY, bool isFlipped) const { SDL_Rect src{}; src.x = srcX; src.y = srcY; src.w = width; src.h = height; SDL_Rect dst{}; dst.x = static_cast(x); dst.y = static_cast(y); dst.w = width; dst.h = height; //SDL_RenderCopy(GetSDLRenderer(), texture.GetSDLTexture(), &src, &dst); SDL_RenderCopyEx(GetSDLRenderer(), texture.GetSDLTexture(), &src, &dst, 0, nullptr, static_cast(isFlipped)); } void dae::Renderer::RenderTexture(const Texture2D& texture, const float x, const float y, const float width, const float height) const { SDL_Rect dst{}; dst.x = static_cast(x); dst.y = static_cast(y); dst.w = static_cast(width); dst.h = static_cast(height); SDL_RenderCopy(GetSDLRenderer(), texture.GetSDLTexture(), nullptr, &dst); } inline SDL_Renderer* dae::Renderer::GetSDLRenderer() const { return m_renderer; }