Files
hdk-sdl/include/hdk/sdl/video.hpp
T
2026-05-13 19:48:22 +00:00

30 lines
1.4 KiB
C++

#pragma once
/// @file video.hpp
/// For complete documentation, see src/video.cpp
#include <hdk/sdl/video/Display.hpp>
#include <hdk/sdl/video/Surface.hpp>
#include <hdk/sdl/video/Window.hpp>
#include <hdk/sdl/pixels/Palette.hpp>
/// We need to be able to return a Renderer from Window, but Renderer also needs to be able to return a Window, so we
/// have to include both headers here to resolve the circular dependency.
#include <hdk/sdl/render/Renderer.hpp>
namespace hdk::sdl {
inline Renderer Window::GetRenderer() const { return Renderer(Renderer::get_or_view(SDL_GetRenderer(*this))); }
inline Window Renderer::GetWindow() const { return Window(Window::get_or_view(SDL_GetRenderWindow(*this))); }
inline std::pair<Window, Renderer> CreateWindowAndRenderer(
const char* title, int width, int height, SDL_WindowFlags window_flags) {
SDL_Window* window_ptr = nullptr;
SDL_Renderer* renderer_ptr = nullptr;
if (SDL_CreateWindowAndRenderer(title, width, height, window_flags, &window_ptr, &renderer_ptr)) {
return { Window::get_or_cache(window_ptr, SDL_DestroyWindow),
Renderer::get_or_cache(renderer_ptr, SDL_DestroyRenderer) };
} else {
return { Window(nullptr), Renderer(nullptr) };
}
}
inline Palette Surface::CreatePalette() const {
return Palette::get_or_cache(SDL_CreateSurfacePalette(*this), SDL_DestroyPalette);
}
}