Expose wgpu instance in app context

This commit is contained in:
Nikita Lisitsa 2025-08-09 13:31:23 +03:00
parent 46f672599d
commit b1255f7a14
4 changed files with 9 additions and 3 deletions

View file

@ -3,6 +3,7 @@
#include <psemek/app/event_handler.hpp> #include <psemek/app/event_handler.hpp>
#if defined(PSEMEK_GRAPHICS_API_WEBGPU) #if defined(PSEMEK_GRAPHICS_API_WEBGPU)
#include <psemek/wgpu/instance.hpp>
#include <psemek/wgpu/adapter.hpp> #include <psemek/wgpu/adapter.hpp>
#include <psemek/wgpu/surface.hpp> #include <psemek/wgpu/surface.hpp>
#include <psemek/wgpu/device.hpp> #include <psemek/wgpu/device.hpp>
@ -42,6 +43,7 @@ namespace psemek::app
std::function<void(bool)> vsync; std::function<void(bool)> vsync;
#endif #endif
#if defined(PSEMEK_GRAPHICS_API_WEBGPU) #if defined(PSEMEK_GRAPHICS_API_WEBGPU)
wgpu::instance instance;
wgpu::adapter adapter; wgpu::adapter adapter;
wgpu::surface surface; wgpu::surface surface;
wgpu::device device; wgpu::device device;

View file

@ -3,6 +3,7 @@
#include <psemek/app/application.hpp> #include <psemek/app/application.hpp>
#if defined(PSEMEK_GRAPHICS_API_WEBGPU) #if defined(PSEMEK_GRAPHICS_API_WEBGPU)
#include <psemek/wgpu/instance.hpp>
#include <psemek/wgpu/surface.hpp> #include <psemek/wgpu/surface.hpp>
#include <psemek/wgpu/adapter.hpp> #include <psemek/wgpu/adapter.hpp>
#include <psemek/wgpu/device.hpp> #include <psemek/wgpu/device.hpp>
@ -28,6 +29,7 @@ namespace psemek::sdl2
void windowed(bool on); void windowed(bool on);
#if defined(PSEMEK_GRAPHICS_API_WEBGPU) #if defined(PSEMEK_GRAPHICS_API_WEBGPU)
wgpu::instance wgpu_instance() const { return wgpu_instance_; }
wgpu::adapter wgpu_adapter() const { return wgpu_adapter_; } wgpu::adapter wgpu_adapter() const { return wgpu_adapter_; }
wgpu::surface wgpu_surface() const { return wgpu_surface_; } wgpu::surface wgpu_surface() const { return wgpu_surface_; }
wgpu::device wgpu_device() const { return wgpu_device_; } wgpu::device wgpu_device() const { return wgpu_device_; }
@ -40,6 +42,7 @@ namespace psemek::sdl2
#if defined(PSEMEK_GRAPHICS_API_OPENGL) #if defined(PSEMEK_GRAPHICS_API_OPENGL)
SDL_GLContext gl_context_ = nullptr; SDL_GLContext gl_context_ = nullptr;
#elif defined(PSEMEK_GRAPHICS_API_WEBGPU) #elif defined(PSEMEK_GRAPHICS_API_WEBGPU)
wgpu::instance wgpu_instance_;
wgpu::adapter wgpu_adapter_; wgpu::adapter wgpu_adapter_;
wgpu::surface wgpu_surface_; wgpu::surface wgpu_surface_;
wgpu::device wgpu_device_; wgpu::device wgpu_device_;

View file

@ -55,6 +55,7 @@ int main(int argc, char ** argv) try
#endif #endif
#if defined(PSEMEK_GRAPHICS_API_WEBGPU) #if defined(PSEMEK_GRAPHICS_API_WEBGPU)
context.instance = window.wgpu_instance();
context.adapter = window.wgpu_adapter(); context.adapter = window.wgpu_adapter();
context.surface = window.wgpu_surface(); context.surface = window.wgpu_surface();
context.device = window.wgpu_device(); context.device = window.wgpu_device();

View file

@ -77,7 +77,7 @@ namespace psemek::sdl2
#elif defined(PSEMEK_GRAPHICS_API_WEBGPU) #elif defined(PSEMEK_GRAPHICS_API_WEBGPU)
wgpu::setup_logging(log::level::error); wgpu::setup_logging(log::level::error);
auto instance = wgpu::instance::create({}); wgpu_instance_ = wgpu::instance::create({});
SDL_SysWMinfo wminfo; SDL_SysWMinfo wminfo;
SDL_VERSION(&wminfo.version); SDL_VERSION(&wminfo.version);
@ -89,14 +89,14 @@ namespace psemek::sdl2
#else #else
surface_descriptor.chain = {wgpu::surface::from_xlib_window{ .display = wminfo.info.x11.display, .window = wminfo.info.x11.window }}; surface_descriptor.chain = {wgpu::surface::from_xlib_window{ .display = wminfo.info.x11.display, .window = wminfo.info.x11.window }};
#endif #endif
wgpu_surface_ = instance.create_surface(surface_descriptor); wgpu_surface_ = wgpu_instance_.create_surface(surface_descriptor);
wgpu::adapter::request_options adapter_request_options; wgpu::adapter::request_options adapter_request_options;
// adapter_request_options.feature_level = wgpu::feature_level::compatibility; // adapter_request_options.feature_level = wgpu::feature_level::compatibility;
adapter_request_options.compatible_surface = wgpu_surface_; adapter_request_options.compatible_surface = wgpu_surface_;
adapter_request_options.backend_type = wgpu::backend_type::undefined; 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) if (status != wgpu::adapter::request_status::success)
throw std::runtime_error("Failed to request WebGPU adapter: " + std::string(message)); throw std::runtime_error("Failed to request WebGPU adapter: " + std::string(message));