20 bool enable_validation =
true;
23 bool enable_debug_markers =
false;
27 bool compute_shaders =
true;
28 bool geometry_shaders =
false;
29 bool tessellation_shaders =
false;
30 bool multi_viewport =
false;
31 bool sampler_anisotropy =
true;
32 bool fill_mode_non_solid =
false;
40 } memory_strategy = MemoryStrategy::BALANCED;
47 } command_pooling = CommandPooling::PER_THREAD;
50 uint32_t max_frames_in_flight = 2;
53 bool enable_compute_queue =
true;
56 bool enable_transfer_queue =
false;
63 } shader_compilation = ShaderCompilation::CACHED;
66 std::filesystem::path shader_cache_dir =
"cache/shaders";
74 return std::make_tuple(
75 IO::member(
"enable_validation", &GraphicsBackendInfo::enable_validation),
76 IO::member(
"enable_debug_markers", &GraphicsBackendInfo::enable_debug_markers),
78 IO::member(
"memory_strategy", &GraphicsBackendInfo::memory_strategy),
79 IO::member(
"command_pooling", &GraphicsBackendInfo::command_pooling),
80 IO::member(
"max_frames_in_flight", &GraphicsBackendInfo::max_frames_in_flight),
81 IO::member(
"enable_compute_queue", &GraphicsBackendInfo::enable_compute_queue),
82 IO::member(
"enable_transfer_queue", &GraphicsBackendInfo::enable_transfer_queue),
83 IO::member(
"shader_compilation", &GraphicsBackendInfo::shader_compilation),
84 IO::member(
"shader_cache_dir", &GraphicsBackendInfo::shader_cache_dir),
85 IO::member(
"required_extensions", &GraphicsBackendInfo::required_extensions),
86 IO::member(
"optional_extensions", &GraphicsBackendInfo::optional_extensions));
98 uint32_t max_windows = 16;
101 uint32_t max_staging_buffer_mb = 256;
104 uint32_t max_compute_buffer_mb = 1024;
107 uint32_t max_texture_cache_mb = 2048;
110 uint32_t max_descriptor_sets = 1024;
113 uint32_t max_pipelines = 256;
117 return std::make_tuple(
118 IO::member(
"max_windows", &GraphicsResourceLimits::max_windows),
119 IO::member(
"max_staging_buffer_mb", &GraphicsResourceLimits::max_staging_buffer_mb),
120 IO::member(
"max_compute_buffer_mb", &GraphicsResourceLimits::max_compute_buffer_mb),
121 IO::member(
"max_texture_cache_mb", &GraphicsResourceLimits::max_texture_cache_mb),
122 IO::member(
"max_descriptor_sets", &GraphicsResourceLimits::max_descriptor_sets),
123 IO::member(
"max_pipelines", &GraphicsResourceLimits::max_pipelines));
187 uint32_t image_count = 3;
190 bool enable_regions =
true;
193 uint32_t max_regions_per_window = 256;
199 bool measure_frame_time {};
206 return std::make_tuple(
207 IO::member(
"format", &GraphicsSurfaceInfo::format),
208 IO::member(
"color_space", &GraphicsSurfaceInfo::color_space),
209 IO::member(
"present_mode", &GraphicsSurfaceInfo::present_mode),
210 IO::member(
"image_count", &GraphicsSurfaceInfo::image_count),
211 IO::member(
"enable_regions", &GraphicsSurfaceInfo::enable_regions),
212 IO::member(
"max_regions_per_window", &GraphicsSurfaceInfo::max_regions_per_window),
213 IO::member(
"enable_hdr", &GraphicsSurfaceInfo::enable_hdr),
214 IO::member(
"measure_frame_time", &GraphicsSurfaceInfo::measure_frame_time));
218#ifdef MAYAFLUX_PLATFORM_MACOS
227struct GlfwPreInitConfig {
228 bool cocoa_chdir_resources =
true;
229 bool cocoa_menubar =
true;
234 static constexpr auto describe()
236 return std::make_tuple(
237 IO::member(
"cocoa_chdir_resources", &GlfwPreInitConfig::cocoa_chdir_resources),
238 IO::member(
"cocoa_menubar", &GlfwPreInitConfig::cocoa_menubar),
239 IO::member(
"headless", &GlfwPreInitConfig::headless));
263 return std::make_tuple(
298 return std::make_tuple(
307#ifdef MAYAFLUX_PLATFORM_MACOS
309 GlfwPreInitConfig glfw_preinit_config;
347 uint32_t target_frame_rate = 60;
349#if defined(MAYAFLUX_PLATFORM_WINDOWS)
351#error "Windows builds require WIN32_BACKEND"
355#elif defined(WAYLAND_BACKEND)
368#if defined(MAYAFLUX_PLATFORM_LINUX)
369 "sans-serif",
"", 24, 512
370#elif defined(MAYAFLUX_PLATFORM_MACOS)
371 "Helvetica Neue",
"", 24, 512
372#elif defined(MAYAFLUX_PLATFORM_WINDOWS)
373 "Segoe UI",
"", 24, 512
375 "sans-serif",
"", 24, 512
379#ifdef MAYAFLUX_PLATFORM_MACOS
380 static constexpr auto describe()
382 return std::make_tuple(
383 IO::member(
"glfw_preinit_config", &GlobalGraphicsConfig::glfw_preinit_config),
384 IO::member(
"key_repeat_config", &GlobalGraphicsConfig::key_repeat_config),
385 IO::member(
"surface_info", &GlobalGraphicsConfig::surface_info),
386 IO::member(
"backend_info", &GlobalGraphicsConfig::backend_info),
387 IO::member(
"resource_limits", &GlobalGraphicsConfig::resource_limits),
388 IO::member(
"target_frame_rate", &GlobalGraphicsConfig::target_frame_rate),
389 IO::member(
"windowing_backend", &GlobalGraphicsConfig::windowing_backend),
390 IO::member(
"requested_api", &GlobalGraphicsConfig::requested_api),
391 IO::member(
"text_config", &GlobalGraphicsConfig::text_config));
396 return std::make_tuple(
397 IO::member(
"key_repeat_config", &GlobalGraphicsConfig::key_repeat_config),
398 IO::member(
"surface_info", &GlobalGraphicsConfig::surface_info),
399 IO::member(
"backend_info", &GlobalGraphicsConfig::backend_info),
400 IO::member(
"resource_limits", &GlobalGraphicsConfig::resource_limits),
401 IO::member(
"target_frame_rate", &GlobalGraphicsConfig::target_frame_rate),
402 IO::member(
"windowing_backend", &GlobalGraphicsConfig::windowing_backend),
403 IO::member(
"requested_api", &GlobalGraphicsConfig::requested_api),
404 IO::member(
"text_config", &GlobalGraphicsConfig::text_config));
424 std::string title {
"MayaFlux Window" };
428 uint32_t height { 1080 };
431 int32_t monitor_id { -1 };
437 bool resizable {
true };
440 bool decorated {
true };
449 bool register_for_processing {
true };
459 uint32_t color_channels { 4 };
464 std::array<float, 4> clear_color { { 0.0F, 0.0F, 0.0F, 1.0F } };
634 bool is_primary =
false;
CursorMode
Cursor visibility and behavior.
@ DISABLED
Invisible and locked (FPS camera)
@ NORMAL
Visible and movable.
@ CAPTURED
Invisible, locked, raw motion.
@ HIDDEN
Invisible but movable.
WindowEventType
Types of window and input events.
std::function< void(const WindowEvent &)> WindowEventCallback
constexpr auto member(std::string_view key, T Class::*ptr)
GraphicsSurfaceInfo surface_info
System-wide configuration for visual stream processing.
WindowingBackend
Windowing library selection.
static constexpr auto describe()
GraphicsResourceLimits resource_limits
Resource limits.
GraphicsBackendInfo backend_info
Graphics backend configuration.
KeyRepeatConfig key_repeat_config
Key repeat timing for native Wayland and Win32 backends.
std::vector< std::string > required_extensions
Backend-specific extensions to request.
MemoryStrategy
Memory allocation strategy.
std::vector< std::string > optional_extensions
CommandPooling
Command buffer pooling strategy.
static constexpr auto describe()
ShaderCompilation
Shader compilation strategy.
Configuration for graphics API backend (Vulkan/OpenGL/etc.)
static constexpr auto describe()
Resource limits and budgets for graphics subsystem.
ColorSpace
Default color space for window surfaces.
SurfaceFormat
Default pixel format for window surfaces (Vulkan-compatible)
static constexpr auto describe()
PresentMode
Frame presentation strategy.
std::unordered_map< std::string, std::any > backend_options
Backend-specific configuration parameters.
System-wide configuration for visual stream processing.
uint32_t interval_ms
Interval between repeat events in milliseconds.
uint32_t initial_delay_ms
Delay before repeat starts in milliseconds.
static constexpr auto describe()
bool allow_compositor_override
If true, compositor-reported repeat_info overrides these values.
Key repeat timing for native window backends.
Information about a physical display.
std::string style
Optional style hint (e.g.
static constexpr auto describe()
uint32_t atlas_size
Atlas texture dimension (power of two).
uint32_t pixel_size
Glyph rasterization height in pixels.
std::string family
Font family name forwarded to Platform::find_font().
Default font configuration for Portal::Text.
bool operator==(const VideoMode &other) const
std::optional< GraphicsSurfaceInfo::PresentMode > present_mode
Override global present mode (nullopt = use global default)
std::optional< GraphicsSurfaceInfo::SurfaceFormat > surface_format
Override global surface format (nullopt = use global default)
Configuration for creating a single window instance.
std::variant< std::monostate, ResizeData, KeyData, MousePosData, MouseButtonData, ScrollData, std::any > EventData
WindowEvent(const WindowEvent &)=default
WindowEvent(WindowEvent &&) noexcept=default
Event data for window and input events.
double average_frame_time
Runtime state of a window (mutable by system, read by user)