Added 2D renderer header.
This commit is contained in:
parent
2d531dafa9
commit
e3f2da430f
231
public/sdlpp/renderer.hpp
Normal file
231
public/sdlpp/renderer.hpp
Normal file
@ -0,0 +1,231 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#if !defined(SDLPP_RENDERER_HPP_INCLUDED)
|
||||
#define SDLPP_RENDERER_HPP_INCLUDED 1
|
||||
|
||||
#include "./common.hpp"
|
||||
|
||||
namespace sdlpp
|
||||
{
|
||||
enum class PixelFormat
|
||||
{
|
||||
UNKNOWN = SDL_PIXELFORMAT_UNKNOWN,
|
||||
INDEX1LSB = SDL_PIXELFORMAT_INDEX1LSB,
|
||||
INDEX1MSB = SDL_PIXELFORMAT_INDEX1MSB,
|
||||
INDEX2LSB = SDL_PIXELFORMAT_INDEX2LSB,
|
||||
INDEX2MSB = SDL_PIXELFORMAT_INDEX2MSB,
|
||||
INDEX4LSB = SDL_PIXELFORMAT_INDEX4LSB,
|
||||
INDEX4MSB = SDL_PIXELFORMAT_INDEX4MSB,
|
||||
INDEX8 = SDL_PIXELFORMAT_INDEX8,
|
||||
RGB332 = SDL_PIXELFORMAT_RGB332,
|
||||
XRGB4444 = SDL_PIXELFORMAT_XRGB4444,
|
||||
XBGR4444 = SDL_PIXELFORMAT_XBGR4444,
|
||||
XRGB1555 = SDL_PIXELFORMAT_XRGB1555,
|
||||
XBGR1555 = SDL_PIXELFORMAT_XBGR1555,
|
||||
ARGB4444 = SDL_PIXELFORMAT_ARGB4444,
|
||||
RGBA4444 = SDL_PIXELFORMAT_RGBA4444,
|
||||
ABGR4444 = SDL_PIXELFORMAT_ABGR4444,
|
||||
BGRA4444 = SDL_PIXELFORMAT_BGRA4444,
|
||||
ARGB1555 = SDL_PIXELFORMAT_ARGB1555,
|
||||
RGBA5551 = SDL_PIXELFORMAT_RGBA5551,
|
||||
ABGR1555 = SDL_PIXELFORMAT_ABGR1555,
|
||||
BGRA5551 = SDL_PIXELFORMAT_BGRA5551,
|
||||
RGB565 = SDL_PIXELFORMAT_RGB565,
|
||||
BGR565 = SDL_PIXELFORMAT_BGR565,
|
||||
RGB24 = SDL_PIXELFORMAT_RGB24,
|
||||
BGR24 = SDL_PIXELFORMAT_BGR24,
|
||||
XRGB8888 = SDL_PIXELFORMAT_XRGB8888,
|
||||
RGBX8888 = SDL_PIXELFORMAT_RGBX8888,
|
||||
XBGR8888 = SDL_PIXELFORMAT_XBGR8888,
|
||||
BGRX8888 = SDL_PIXELFORMAT_BGRX8888,
|
||||
ARGB8888 = SDL_PIXELFORMAT_ARGB8888,
|
||||
RGBA8888 = SDL_PIXELFORMAT_RGBA8888,
|
||||
ABGR8888 = SDL_PIXELFORMAT_ABGR8888,
|
||||
BGRA8888 = SDL_PIXELFORMAT_BGRA8888,
|
||||
XRGB2101010 = SDL_PIXELFORMAT_XRGB2101010,
|
||||
XBGR2101010 = SDL_PIXELFORMAT_XBGR2101010,
|
||||
ARGB2101010 = SDL_PIXELFORMAT_ARGB2101010,
|
||||
ABGR2101010 = SDL_PIXELFORMAT_ABGR2101010,
|
||||
RGB48 = SDL_PIXELFORMAT_RGB48,
|
||||
BGR48 = SDL_PIXELFORMAT_BGR48,
|
||||
RGBA64 = SDL_PIXELFORMAT_RGBA64,
|
||||
ARGB64 = SDL_PIXELFORMAT_ARGB64,
|
||||
BGRA64 = SDL_PIXELFORMAT_BGRA64,
|
||||
ABGR64 = SDL_PIXELFORMAT_ABGR64,
|
||||
RGB48_FLOAT = SDL_PIXELFORMAT_RGB48_FLOAT,
|
||||
BGR48_FLOAT = SDL_PIXELFORMAT_BGR48_FLOAT,
|
||||
RGBA64_FLOAT = SDL_PIXELFORMAT_RGBA64_FLOAT,
|
||||
ARGB64_FLOAT = SDL_PIXELFORMAT_ARGB64_FLOAT,
|
||||
BGRA64_FLOAT = SDL_PIXELFORMAT_BGRA64_FLOAT,
|
||||
ABGR64_FLOAT = SDL_PIXELFORMAT_ABGR64_FLOAT,
|
||||
RGB96_FLOAT = SDL_PIXELFORMAT_RGB96_FLOAT,
|
||||
BGR96_FLOAT = SDL_PIXELFORMAT_BGR96_FLOAT,
|
||||
RGBA128_FLOAT = SDL_PIXELFORMAT_RGBA128_FLOAT,
|
||||
ARGB128_FLOAT = SDL_PIXELFORMAT_ARGB128_FLOAT,
|
||||
BGRA128_FLOAT = SDL_PIXELFORMAT_BGRA128_FLOAT,
|
||||
ABGR128_FLOAT = SDL_PIXELFORMAT_ABGR128_FLOAT,
|
||||
YV12 = SDL_PIXELFORMAT_YV12,
|
||||
IYUV = SDL_PIXELFORMAT_IYUV,
|
||||
YUY2 = SDL_PIXELFORMAT_YUY2,
|
||||
UYVY = SDL_PIXELFORMAT_UYVY,
|
||||
YVYU = SDL_PIXELFORMAT_YVYU,
|
||||
NV12 = SDL_PIXELFORMAT_NV12,
|
||||
NV21 = SDL_PIXELFORMAT_NV21,
|
||||
P010 = SDL_PIXELFORMAT_P010,
|
||||
EXTERNAL_OES = SDL_PIXELFORMAT_EXTERNAL_OES,
|
||||
RGBA32 = SDL_PIXELFORMAT_RGBA32,
|
||||
ARGB32 = SDL_PIXELFORMAT_ARGB32,
|
||||
BGRA32 = SDL_PIXELFORMAT_BGRA32,
|
||||
ABGR32 = SDL_PIXELFORMAT_ABGR32,
|
||||
RGBX32 = SDL_PIXELFORMAT_RGBX32,
|
||||
XRGB32 = SDL_PIXELFORMAT_XRGB32,
|
||||
BGRX32 = SDL_PIXELFORMAT_BGRX32,
|
||||
XBGR32 = SDL_PIXELFORMAT_XBGR32
|
||||
};
|
||||
|
||||
enum class TextureAccess
|
||||
{
|
||||
STATIC = SDL_TEXTUREACCESS_STATIC,
|
||||
STREAMING = SDL_TEXTUREACCESS_STREAMING,
|
||||
TARGET = SDL_TEXTUREACCESS_TARGET
|
||||
};
|
||||
|
||||
struct TextureCreateArgs
|
||||
{
|
||||
PixelFormat format;
|
||||
TextureAccess access;
|
||||
int w;
|
||||
int h;
|
||||
};
|
||||
|
||||
class Texture : public Base<SDL_Texture, Texture>
|
||||
{
|
||||
public:
|
||||
Texture() noexcept = default;
|
||||
Texture(const Texture&) = delete;
|
||||
Texture(Texture&& other) noexcept : Base(std::move(other)) {}
|
||||
|
||||
Texture& operator=(const Texture&) = delete;
|
||||
Texture& operator=(Texture&& other) noexcept
|
||||
{
|
||||
Base::operator=(std::move(other));
|
||||
return *this;
|
||||
}
|
||||
auto operator<=>(const Texture&) const noexcept = default;
|
||||
|
||||
void create(SDL_Renderer* renderer, const TextureCreateArgs& args)
|
||||
{
|
||||
mHandle = SDL_CreateTexture(
|
||||
/* renderer = */ renderer,
|
||||
/* format = */ static_cast<SDL_PixelFormat>(args.format),
|
||||
/* access = */ static_cast<SDL_TextureAccess>(args.access),
|
||||
/* w = */ args.w,
|
||||
/* h = */ args.h
|
||||
);
|
||||
if (mHandle == nullptr)
|
||||
{
|
||||
throw SDLError();
|
||||
}
|
||||
}
|
||||
|
||||
void destroy() noexcept
|
||||
{
|
||||
if (mHandle != nullptr)
|
||||
{
|
||||
SDL_DestroyTexture(mHandle);
|
||||
}
|
||||
}
|
||||
|
||||
void update(const SDL_Rect& rect, const void* pixels, int pitch)
|
||||
{
|
||||
if (!SDL_UpdateTexture(mHandle, &rect, pixels, pitch))
|
||||
{
|
||||
throw SDLError();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
struct RendererCreateArgs
|
||||
{
|
||||
SDL_Window* window;
|
||||
const char* driver = nullptr;
|
||||
};
|
||||
|
||||
class Renderer : public Base<SDL_Renderer, Renderer>
|
||||
{
|
||||
public:
|
||||
Renderer() noexcept = default;
|
||||
Renderer(const Renderer&) = delete;
|
||||
Renderer(Renderer&& other) noexcept : Base(std::move(other)) {}
|
||||
|
||||
Renderer& operator=(const Renderer&) = delete;
|
||||
Renderer& operator=(Renderer&& other) noexcept
|
||||
{
|
||||
Base::operator=(std::move(other));
|
||||
return *this;
|
||||
}
|
||||
auto operator<=>(const Renderer&) const noexcept = default;
|
||||
|
||||
void create(const RendererCreateArgs& args)
|
||||
{
|
||||
MIJIN_ASSERT(mHandle == nullptr, "Renderer has already been created.");
|
||||
mHandle = SDL_CreateRenderer(args.window, args.driver);
|
||||
if (mHandle == nullptr)
|
||||
{
|
||||
throw SDLError();
|
||||
}
|
||||
}
|
||||
|
||||
void destroy() noexcept
|
||||
{
|
||||
if (mHandle != nullptr)
|
||||
{
|
||||
SDL_DestroyRenderer(mHandle);
|
||||
mHandle = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void clear() noexcept
|
||||
{
|
||||
SDL_RenderClear(mHandle);
|
||||
}
|
||||
|
||||
void present() noexcept
|
||||
{
|
||||
SDL_RenderPresent(mHandle);
|
||||
}
|
||||
|
||||
void setDrawColor(Uint8 r, Uint8 g, Uint8 b, Uint8 a) noexcept
|
||||
{
|
||||
SDL_SetRenderDrawColor(mHandle, r, g, b, a);
|
||||
}
|
||||
|
||||
void setDrawColorFloat(float r, float g, float b, float a) noexcept
|
||||
{
|
||||
SDL_SetRenderDrawColorFloat(mHandle, r, g, b, a);
|
||||
}
|
||||
|
||||
void rect(const SDL_FRect& rect) noexcept
|
||||
{
|
||||
SDL_RenderRect(mHandle, &rect);
|
||||
}
|
||||
|
||||
void rects(std::span<const SDL_FRect> rects) noexcept
|
||||
{
|
||||
SDL_RenderRects(mHandle, rects.data(), static_cast<int>(rects.size()));
|
||||
}
|
||||
|
||||
void fillRect(const SDL_FRect& rect) noexcept
|
||||
{
|
||||
SDL_RenderFillRect(mHandle, &rect);
|
||||
}
|
||||
|
||||
void fillRects(std::span<const SDL_FRect> rects) noexcept
|
||||
{
|
||||
SDL_RenderFillRects(mHandle, rects.data(), static_cast<int>(rects.size()));
|
||||
}
|
||||
};
|
||||
} // namespace sdlpp
|
||||
|
||||
#endif // !defined(SDLPP_RENDERER_HPP_INCLUDED)
|
@ -1,8 +1,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#if !defined(SDL_GPU_TEST_PRIVATE_SDL_GPU_TEST_SDLPP_WINDOW_HPP_INCLUDED)
|
||||
#define SDL_GPU_TEST_PRIVATE_SDL_GPU_TEST_SDLPP_WINDOW_HPP_INCLUDED 1
|
||||
#if !defined(SDLPP_WINDOW_HPP_INCLUDED)
|
||||
#define SDLPP_WINDOW_HPP_INCLUDED 1
|
||||
|
||||
#include "./common.hpp"
|
||||
|
||||
@ -70,7 +70,7 @@ public:
|
||||
Base::operator=(std::move(other));
|
||||
return *this;
|
||||
}
|
||||
auto operator<=>(const Window& other) const noexcept = default;
|
||||
auto operator<=>(const Window&) const noexcept = default;
|
||||
|
||||
void create(const WindowCreateArgs& args = {})
|
||||
{
|
||||
@ -110,4 +110,4 @@ public:
|
||||
};
|
||||
} // namespace sdlpp
|
||||
|
||||
#endif // !defined(SDL_GPU_TEST_PRIVATE_SDL_GPU_TEST_SDLPP_WINDOW_HPP_INCLUDED)
|
||||
#endif // !defined(SDLPP_WINDOW_HPP_INCLUDED)
|
||||
|
Loading…
x
Reference in New Issue
Block a user