77 lines
2.0 KiB
C++
77 lines
2.0 KiB
C++
#ifndef HEADER_ARRAS_RENDER_WINDOW_HPP
|
|
#define HEADER_ARRAS_RENDER_WINDOW_HPP
|
|
|
|
#include "render.h"
|
|
#define Pi 3.14159265358979323846
|
|
|
|
using namespace arras;
|
|
|
|
RenderWindow::RenderWindow(RenderWindow&& rd)
|
|
: w(rd.w), h(rd.h), window(rd.window), renderer(rd.renderer) {
|
|
rd.renderer = nullptr;
|
|
rd.window = nullptr;
|
|
}
|
|
|
|
RenderWindow::RenderWindow(int w, int h): w(w), h(h) {
|
|
if (SDL_CreateWindowAndRenderer(w, h, SDL_WINDOW_SHOWN | SDL_WINDOW_ALLOW_HIGHDPI, &window, &renderer) != 0) {
|
|
throw std::runtime_error(
|
|
fmt::format("SDL_CreateWindowAndRenderer() failed: {}", SDL_GetError()));
|
|
}
|
|
}
|
|
|
|
RenderWindow::~RenderWindow() {
|
|
SDL_DestroyRenderer(renderer);
|
|
SDL_DestroyWindow(window);
|
|
}
|
|
|
|
SDL_Renderer* RenderWindow::nativeHandle() const noexcept {
|
|
return renderer;
|
|
}
|
|
|
|
void RenderWindow::renderTextureAt(const RenderTexture& t, const Vec2& pos) const {
|
|
if (SDL_RenderCopyF(renderer,
|
|
t.nativeHandle(),
|
|
NULL,
|
|
makeFRect(pos, {t.width(), t.height()}).get())) {
|
|
throw std::runtime_error(fmt::format("SDL_RenderCopy() failed: {}", SDL_GetError()));
|
|
}
|
|
}
|
|
|
|
void RenderWindow::renderTextureAt(const RenderTexture& t,
|
|
const Vec2& pos,
|
|
const Vec2& direction) const {
|
|
if (SDL_RenderCopyExF(renderer,
|
|
t.nativeHandle(),
|
|
NULL,
|
|
makeFRect(pos, {t.width(), t.height()}).get(),
|
|
-asAngle(direction) * 180 / Pi,
|
|
nullptr,
|
|
SDL_FLIP_NONE)) {
|
|
throw std::runtime_error(fmt::format("SDL_RenderCopy() failed: {}", SDL_GetError()));
|
|
}
|
|
}
|
|
|
|
void RenderWindow::present() const noexcept {
|
|
SDL_RenderPresent(renderer);
|
|
}
|
|
|
|
void RenderWindow::clear(const Color& c) const {
|
|
if (SDL_SetRenderDrawColor(renderer, c.r, c.g, c.b, c.a)) {
|
|
throw std::runtime_error(
|
|
fmt::format("SDL_SetRenderDrawColor() failed: {}", SDL_GetError()));
|
|
}
|
|
if (SDL_RenderClear(renderer)) {
|
|
throw std::runtime_error(fmt::format("SDL_RenderClear() failed: {}", SDL_GetError()));
|
|
}
|
|
}
|
|
|
|
int RenderWindow::width() const noexcept {
|
|
return w;
|
|
}
|
|
|
|
int RenderWindow::height() const noexcept {
|
|
return h;
|
|
}
|
|
|
|
#endif
|