#pragma once #include #include "gfx.hpp" class GFXWebGPU : public GFX { public: bool initialize(const GFXCreateInfo& createInfo) override; const char* get_name() override; // buffer GFXBuffer* create_buffer(void* data, GFXSize size, bool is_dynamic, GFXBufferUsage usage) override; void copy_buffer(GFXBuffer* buffer, void* data, GFXSize offset, GFXSize size) override; void* get_buffer_contents(GFXBuffer* buffer) override; void release_buffer_contents(GFXBuffer* buffer, void* handle) override; // texture GFXTexture* create_texture(const GFXTextureCreateInfo& info) override; void copy_texture(GFXTexture* texture, void* data, GFXSize size) override; void copy_texture(GFXTexture* from, GFXTexture* to) override; void copy_texture(GFXTexture* from, GFXBuffer* to) override; // sampler GFXSampler* create_sampler(const GFXSamplerCreateInfo& info) override; // framebuffer GFXFramebuffer* create_framebuffer(const GFXFramebufferCreateInfo& info) override; // render pass GFXRenderPass* create_render_pass(const GFXRenderPassCreateInfo& info) override; // pipeline GFXPipeline* create_graphics_pipeline(const GFXGraphicsPipelineCreateInfo& info) override; GFXPipeline* create_compute_pipeline(const GFXComputePipelineCreateInfo& info) override; GFXCommandBuffer* acquire_command_buffer(bool for_presentation_use) override; void submit(GFXCommandBuffer* command_buffer, platform::window_ptr window) override; private: WGPUSwapChain create_swapchain(); WGPUShaderModule create_shader(const uint32_t* code, uint32_t size, std::string_view label); WGPUDevice device; WGPUQueue queue; WGPUSwapChain swapchain; };