Expose wgpu instance in app context
This commit is contained in:
parent
46f672599d
commit
b1255f7a14
4 changed files with 9 additions and 3 deletions
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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_;
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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));
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue