diff --git a/libs/app/include/psemek/app/application.hpp b/libs/app/include/psemek/app/application.hpp index b6948266..544e0dd0 100644 --- a/libs/app/include/psemek/app/application.hpp +++ b/libs/app/include/psemek/app/application.hpp @@ -3,6 +3,7 @@ #include #if defined(PSEMEK_GRAPHICS_API_WEBGPU) +#include #include #include #include @@ -42,6 +43,7 @@ namespace psemek::app std::function vsync; #endif #if defined(PSEMEK_GRAPHICS_API_WEBGPU) + wgpu::instance instance; wgpu::adapter adapter; wgpu::surface surface; wgpu::device device; diff --git a/libs/sdl2/include/psemek/sdl2/window.hpp b/libs/sdl2/include/psemek/sdl2/window.hpp index dc344505..dd8f2e61 100644 --- a/libs/sdl2/include/psemek/sdl2/window.hpp +++ b/libs/sdl2/include/psemek/sdl2/window.hpp @@ -3,6 +3,7 @@ #include #if defined(PSEMEK_GRAPHICS_API_WEBGPU) +#include #include #include #include @@ -28,6 +29,7 @@ namespace psemek::sdl2 void windowed(bool on); #if defined(PSEMEK_GRAPHICS_API_WEBGPU) + wgpu::instance wgpu_instance() const { return wgpu_instance_; } wgpu::adapter wgpu_adapter() const { return wgpu_adapter_; } wgpu::surface wgpu_surface() const { return wgpu_surface_; } wgpu::device wgpu_device() const { return wgpu_device_; } @@ -40,6 +42,7 @@ namespace psemek::sdl2 #if defined(PSEMEK_GRAPHICS_API_OPENGL) SDL_GLContext gl_context_ = nullptr; #elif defined(PSEMEK_GRAPHICS_API_WEBGPU) + wgpu::instance wgpu_instance_; wgpu::adapter wgpu_adapter_; wgpu::surface wgpu_surface_; wgpu::device wgpu_device_; diff --git a/libs/sdl2/source/main.cpp b/libs/sdl2/source/main.cpp index 2849d16d..20d433b0 100644 --- a/libs/sdl2/source/main.cpp +++ b/libs/sdl2/source/main.cpp @@ -55,6 +55,7 @@ int main(int argc, char ** argv) try #endif #if defined(PSEMEK_GRAPHICS_API_WEBGPU) + context.instance = window.wgpu_instance(); context.adapter = window.wgpu_adapter(); context.surface = window.wgpu_surface(); context.device = window.wgpu_device(); diff --git a/libs/sdl2/source/window.cpp b/libs/sdl2/source/window.cpp index 34009f34..b35cfde5 100644 --- a/libs/sdl2/source/window.cpp +++ b/libs/sdl2/source/window.cpp @@ -77,7 +77,7 @@ namespace psemek::sdl2 #elif defined(PSEMEK_GRAPHICS_API_WEBGPU) wgpu::setup_logging(log::level::error); - auto instance = wgpu::instance::create({}); + wgpu_instance_ = wgpu::instance::create({}); SDL_SysWMinfo wminfo; SDL_VERSION(&wminfo.version); @@ -89,14 +89,14 @@ namespace psemek::sdl2 #else surface_descriptor.chain = {wgpu::surface::from_xlib_window{ .display = wminfo.info.x11.display, .window = wminfo.info.x11.window }}; #endif - wgpu_surface_ = instance.create_surface(surface_descriptor); + wgpu_surface_ = wgpu_instance_.create_surface(surface_descriptor); wgpu::adapter::request_options adapter_request_options; // adapter_request_options.feature_level = wgpu::feature_level::compatibility; adapter_request_options.compatible_surface = wgpu_surface_; adapter_request_options.backend_type = wgpu::backend_type::undefined; - instance.request_adapter(wgpu::callback_mode::allow_process_events, adapter_request_options, [this](wgpu::adapter::request_status status, wgpu::adapter adapter_in, std::string_view message) + wgpu_instance_.request_adapter(wgpu::callback_mode::allow_process_events, adapter_request_options, [this](wgpu::adapter::request_status status, wgpu::adapter adapter_in, std::string_view message) { if (status != wgpu::adapter::request_status::success) throw std::runtime_error("Failed to request WebGPU adapter: " + std::string(message));