19 bool initialize(SDL_Window* sdl_window)
override;
24 const void* fragment_bytecode,
size_t fragment_size,
25 uint32_t num_samplers = 0, uint32_t num_uniform_buffers = 1);
28 RID buffer_create(
size_t size, uint32_t usage_flags,
const void* data =
nullptr)
override;
29 void buffer_update(
RID buffer,
size_t offset,
size_t size,
const void* data)
override;
33 void texture_update(
RID texture, uint32_t mip_level, uint32_t layer,
const void* data,
size_t size)
override;
63 void draw(uint32_t vertex_count, uint32_t instance_count = 1, uint32_t first_vertex = 0, uint32_t first_instance = 0)
override;
64 void draw_indexed(uint32_t index_count, uint32_t instance_count = 1, uint32_t first_index = 0,
65 int32_t vertex_offset = 0, uint32_t first_instance = 0)
override;
75 SDL_GPUDevice* _device =
nullptr;
76 SDL_GPUCommandBuffer* _cmd_buffer =
nullptr;
77 SDL_GPURenderPass* _render_pass =
nullptr;
80 SDL_GPUShader* vertex =
nullptr;
81 SDL_GPUShader* fragment =
nullptr;
85 SDL_GPUBuffer* handle =
nullptr;
91 SDL_GPUTexture* handle =
nullptr;
104 glm::vec4 _clear_color = glm::vec4(0.0f, 0.0f, 0.0f, 1.0f);
106 struct BoundVertexBuffer {
107 SDL_GPUBuffer* buffer =
nullptr;
113 SDL_GPUBuffer* _bound_index_buffer =
nullptr;
114 SDL_GPUIndexElementSize _bound_index_type = SDL_GPU_INDEXELEMENTSIZE_16BIT;
115 Uint32 _bound_index_offset = 0;
117 struct BoundTextureSampler {
118 SDL_GPUTexture* texture =
nullptr;
119 SDL_GPUSampler* sampler =
nullptr;
123 SDL_GPUTextureFormat sdl_format(
DataFormat fmt);
124 SDL_GPUVertexElementFormat sdl_vertex_format(
DataFormat fmt);
126 SDL_GPUSamplerMipmapMode sdl_mipmap_mode(
TextureFilter filter);
127 SDL_GPUSamplerAddressMode sdl_wrap(
TextureWrap wrap);
128 SDL_GPUCompareOp sdl_compare(
CompareOp op);
129 SDL_GPUStencilOp sdl_stencil(
StencilOp op);
130 SDL_GPUBlendFactor sdl_blend_factor(
BlendFactor f);
131 SDL_GPUBlendOp sdl_blend_op(
BlendOp op);
132 SDL_GPUCullMode sdl_cull(
CullMode mode);
135 SDL_GPUIndexElementSize sdl_index_type(
IndexType type);
136 SDL_GPUBufferUsageFlags sdl_buffer_usage(uint32_t flags);
Rendering device implementation using SDL_GPU.
Definition: rendering_device_sdl_gpu.h:14
void draw(uint32_t vertex_count, uint32_t instance_count=1, uint32_t first_vertex=0, uint32_t first_instance=0) override
Definition: rendering_device_sdl_gpu.cpp:848
RenderingDeviceSDL_GPU()=default
Texture get_texture(RID texture) override
Definition: rendering_device_sdl_gpu.cpp:440
void draw_indexed(uint32_t index_count, uint32_t instance_count=1, uint32_t first_index=0, int32_t vertex_offset=0, uint32_t first_instance=0) override
Definition: rendering_device_sdl_gpu.cpp:856
void swap_buffers() override
Definition: rendering_device_sdl_gpu.cpp:905
bool initialize(SDL_Window *sdl_window) override
Definition: rendering_device_sdl_gpu.cpp:9
void texture_update(RID texture, uint32_t mip_level, uint32_t layer, const void *data, size_t size) override
Definition: rendering_device_sdl_gpu.cpp:369
void bind_index_buffer(RID buffer, IndexType type, size_t offset=0) override
Definition: rendering_device_sdl_gpu.cpp:786
void get_texture_size(RID texture, uint32_t &width, uint32_t &height) override
Definition: rendering_device_sdl_gpu.cpp:426
void texture_generate_mipmaps(RID texture) override
Definition: rendering_device_sdl_gpu.cpp:411
RID buffer_create(size_t size, uint32_t usage_flags, const void *data=nullptr) override
Definition: rendering_device_sdl_gpu.cpp:189
uint32_t texture_get_native_handle(RID texture) override
Definition: rendering_device_sdl_gpu.cpp:435
void clear_depth_stencil(float depth=1.0f, uint32_t stencil=0) override
Definition: rendering_device_sdl_gpu.cpp:900
void render_pass_end() override
Definition: rendering_device_sdl_gpu.cpp:731
void set_scissor(const Scissor &scissor) override
Definition: rendering_device_sdl_gpu.cpp:882
void render_pass_begin(RID framebuffer, const Viewport &viewport, const Scissor &scissor) override
Definition: rendering_device_sdl_gpu.cpp:650
void buffer_destroy(RID buffer) override
Definition: rendering_device_sdl_gpu.cpp:291
void begin_frame() override
Definition: rendering_device_sdl_gpu.cpp:628
RID texture_create(const TextureFormat &format, void *data=nullptr) override
Definition: rendering_device_sdl_gpu.cpp:302
void bind_texture(uint32_t binding, RID texture, RID sampler) override
Definition: rendering_device_sdl_gpu.cpp:814
RID shader_create_from_source(const String &vertex_src, const String &fragment_src) override
Definition: rendering_device_sdl_gpu.cpp:93
~RenderingDeviceSDL_GPU() override
void framebuffer_destroy(RID framebuffer) override
Definition: rendering_device_sdl_gpu.cpp:497
void clear_color(const glm::vec4 &color) override
Definition: rendering_device_sdl_gpu.cpp:896
void set_viewport(const Viewport &viewport) override
Definition: rendering_device_sdl_gpu.cpp:865
void bind_uniform_buffer(uint32_t binding, RID buffer, size_t offset=0, size_t size=0) override
Definition: rendering_device_sdl_gpu.cpp:807
void bind_vertex_buffers(const Vector< RID > &buffers, const Vector< size_t > &offsets={}) override
Definition: rendering_device_sdl_gpu.cpp:753
void buffer_update(RID buffer, size_t offset, size_t size, const void *data) override
Definition: rendering_device_sdl_gpu.cpp:234
RID framebuffer_create(const Vector< RenderPassAttachment > &attachments) override
Definition: rendering_device_sdl_gpu.cpp:491
void shutdown() override
Definition: rendering_device_sdl_gpu.cpp:40
void end_frame() override
Definition: rendering_device_sdl_gpu.cpp:635
RID sampler_create(const SamplerState &state) override
Definition: rendering_device_sdl_gpu.cpp:453
RID shader_create_from_bytecode(const void *vertex_bytecode, size_t vertex_size, const void *fragment_bytecode, size_t fragment_size, uint32_t num_samplers=0, uint32_t num_uniform_buffers=1)
Definition: rendering_device_sdl_gpu.cpp:122
void push_constant(const String &name, const void *data, size_t size) override
Definition: rendering_device_sdl_gpu.cpp:838
RID pipeline_create(const PipelineState &state) override
Definition: rendering_device_sdl_gpu.cpp:501
void sampler_destroy(RID sampler) override
Definition: rendering_device_sdl_gpu.cpp:480
void bind_pipeline(RID pipeline) override
Definition: rendering_device_sdl_gpu.cpp:739
void pipeline_destroy(RID pipeline) override
Definition: rendering_device_sdl_gpu.cpp:617
void shader_destroy(RID shader) override
Definition: rendering_device_sdl_gpu.cpp:175
void texture_destroy(RID texture) override
Definition: rendering_device_sdl_gpu.cpp:415
Abstract base class for rendering devices.
Definition: rendering_device.h:326
IndexType
Definition: rendering_device.h:151
BlendFactor
Definition: rendering_device.h:117
CompareOp
Definition: rendering_device.h:113
DataFormat
Definition: rendering_device.h:83
PrimitiveTopology
Definition: rendering_device.h:136
CullMode
Definition: rendering_device.h:132
PolygonMode
Definition: rendering_device.h:134
BlendOp
Definition: rendering_device.h:130
constexpr RID INVALID_RID
Definition: rendering_device.h:13
TextureFilter
Definition: rendering_device.h:109
TextureWrap
Definition: rendering_device.h:111
StencilOp
Definition: rendering_device.h:115
uint32_t RID
Definition: rendering_device.h:12
Definition: rendering_device.h:238
Definition: rendering_device.h:188
Definition: rendering_device.h:253
Definition: rendering_device.h:176
Definition: rendering_device.h:301
Definition: rendering_device.h:248
std::unordered_map< K, V > HashMap
Definition: type_alias.h:20