6 #include <loader/image/Image.h>
7 #include <math/Color.h>
8 #include <math/Vertex.h>
9 #include "../RenderTypes.h"
18 struct TextureHandle {
19 unsigned int handle = 0;
20 SDL_Texture* texture =
nullptr;
22 TextureType type = TextureType::TWO_DIMENSIONAL;
24 explicit inline operator bool()
const {
return handle; }
25 inline bool operator!()
const {
return !handle; }
28 struct FrameBufferHandle {
29 SDL_Texture* texture =
nullptr;
30 unsigned int colorHandle = 0;
36 explicit inline operator bool()
const {
return texture; }
37 inline bool operator!()
const {
return !texture; }
40 struct ShaderModuleHandle {
43 explicit inline operator bool()
const {
return handle; }
44 inline bool operator!()
const {
return !handle; }
49 ShaderModuleHandle vertex{};
50 ShaderModuleHandle fragment{};
52 explicit inline operator bool()
const {
return handle && vertex && fragment; }
53 inline bool operator!()
const {
return !handle || !vertex || !fragment; }
56 struct UniformBufferHandle {
57 unsigned int handle = 0;
58 unsigned int bindingPoint = 0;
60 explicit inline operator bool()
const {
return handle; }
61 inline bool operator!()
const {
return !handle; }
65 std::vector<Vertex> vertices;
66 std::vector<int> indices;
70 explicit inline operator bool()
const {
return numIndices; }
71 inline bool operator!()
const {
return !numIndices; }
74 [[nodiscard]] std::string_view getHumanName();
75 [[nodiscard]]
bool setupForDebugging();
77 void setClearColor(ColorRGBA color);
79 [[nodiscard]] TextureHandle createTexture2D(
const Image& image, WrapMode wrapS, WrapMode wrapT, FilterMode filter,
80 bool genMipmaps, TextureUnit activeTextureUnit);
81 [[nodiscard]] TextureHandle createTextureCubemap(
const Image& imageRT,
const Image& imageLT,
const Image& imageUP,
82 const Image& imageDN,
const Image& imageFD,
const Image& imageBK,
83 WrapMode wrapS, WrapMode wrapT, WrapMode wrapR, FilterMode filter,
84 bool genMipmaps, TextureUnit activeTextureUnit);
85 void useTexture(TextureHandle handle, TextureUnit activeTextureUnit);
86 [[nodiscard]]
void* getImGuiTextureHandle(TextureHandle handle);
87 void destroyTexture(TextureHandle handle);
89 [[nodiscard]] FrameBufferHandle createFrameBuffer(
int width,
int height, WrapMode wrapS, WrapMode wrapT, FilterMode filter,
bool hasDepth);
90 void recreateFrameBuffer(Renderer::FrameBufferHandle* handle,
int width,
int height, WrapMode wrapS, WrapMode wrapT, FilterMode filter,
bool hasDepth);
91 void pushFrameBuffer(FrameBufferHandle handle);
92 void popFrameBuffer();
93 void useFrameBufferTexture(
const FrameBufferHandle handle, TextureUnit activeTextureUnit);
94 [[nodiscard]]
void* getImGuiFrameBufferHandle(FrameBufferHandle handle);
95 void destroyFrameBuffer(FrameBufferHandle handle);
96 [[nodiscard]]
int getFrameBufferWidth(FrameBufferHandle handle);
97 [[nodiscard]]
int getFrameBufferHeight(FrameBufferHandle handle);
99 [[nodiscard]] ShaderHandle createShader(std::string_view vertex, std::string_view fragment);
100 void useShader(ShaderHandle handle);
101 void destroyShader(ShaderHandle handle);
103 void setShaderUniform1b(ShaderHandle handle, std::string_view name,
bool value);
104 void setShaderUniform1u(ShaderHandle handle, std::string_view name,
unsigned int value);
105 void setShaderUniform1i(ShaderHandle handle, std::string_view name,
int value);
106 void setShaderUniform1f(ShaderHandle handle, std::string_view name,
float value);
107 void setShaderUniform2b(ShaderHandle handle, std::string_view name, glm::vec2b value);
108 void setShaderUniform2u(ShaderHandle handle, std::string_view name, glm::vec2u value);
109 void setShaderUniform2i(ShaderHandle handle, std::string_view name, glm::vec2i value);
110 void setShaderUniform2f(ShaderHandle handle, std::string_view name, glm::vec2f value);
111 void setShaderUniform3b(ShaderHandle handle, std::string_view name, glm::vec3b value);
112 void setShaderUniform3u(ShaderHandle handle, std::string_view name, glm::vec3u value);
113 void setShaderUniform3i(ShaderHandle handle, std::string_view name, glm::vec3i value);
114 void setShaderUniform3f(ShaderHandle handle, std::string_view name, glm::vec3f value);
115 void setShaderUniform4b(ShaderHandle handle, std::string_view name, glm::vec4b value);
116 void setShaderUniform4u(ShaderHandle handle, std::string_view name, glm::vec4u value);
117 void setShaderUniform4i(ShaderHandle handle, std::string_view name, glm::vec4i value);
118 void setShaderUniform4f(ShaderHandle handle, std::string_view name, glm::vec4f value);
119 void setShaderUniform4m(ShaderHandle handle, std::string_view name, glm::mat4 value);
121 [[nodiscard]] UniformBufferHandle createUniformBuffer(std::ptrdiff_t size);
122 void bindUniformBufferToShader(ShaderHandle shaderHandle, UniformBufferHandle uniformBufferHandle, std::string_view name);
123 void updateUniformBuffer(UniformBufferHandle handle,
const void* buffer, std::ptrdiff_t length);
124 void updateUniformBufferPart(UniformBufferHandle handle, std::ptrdiff_t start,
const void* buffer, std::ptrdiff_t length);
125 void destroyUniformBuffer(UniformBufferHandle handle);
127 [[nodiscard]] MeshHandle createMesh(
const std::vector<Vertex>& vertices,
const std::vector<Index>& indices, MeshDrawMode drawMode);
128 void updateMesh(MeshHandle* handle,
const std::vector<Vertex>& vertices,
const std::vector<Index>& indices, MeshDrawMode drawMode);
129 void drawMesh(MeshHandle handle, MeshDepthFunction depthFunction, MeshCullType cullType);
130 void destroyMesh(MeshHandle handle);
132 void initImGui(SDL_Window* window, SDL_Renderer* renderer);
133 void startImGuiFrame();
134 void endImGuiFrame();