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
|
#pragma once
|
||||||
|
|
||||||
#if !defined(SDL_GPU_TEST_PRIVATE_SDL_GPU_TEST_SDLPP_WINDOW_HPP_INCLUDED)
|
#if !defined(SDLPP_WINDOW_HPP_INCLUDED)
|
||||||
#define SDL_GPU_TEST_PRIVATE_SDL_GPU_TEST_SDLPP_WINDOW_HPP_INCLUDED 1
|
#define SDLPP_WINDOW_HPP_INCLUDED 1
|
||||||
|
|
||||||
#include "./common.hpp"
|
#include "./common.hpp"
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ public:
|
|||||||
Base::operator=(std::move(other));
|
Base::operator=(std::move(other));
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
auto operator<=>(const Window& other) const noexcept = default;
|
auto operator<=>(const Window&) const noexcept = default;
|
||||||
|
|
||||||
void create(const WindowCreateArgs& args = {})
|
void create(const WindowCreateArgs& args = {})
|
||||||
{
|
{
|
||||||
@ -110,4 +110,4 @@ public:
|
|||||||
};
|
};
|
||||||
} // namespace sdlpp
|
} // 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