20#if defined(MAYAFLUX_DEBUG) && MAYAFLUX_DEBUG
21 bool enable_validation =
true;
23 bool enable_validation =
false;
27 bool enable_debug_markers =
false;
31 bool compute_shaders =
true;
32 bool geometry_shaders =
false;
33 bool tessellation_shaders =
false;
34 bool multi_viewport =
false;
35 bool sampler_anisotropy =
true;
36 bool fill_mode_non_solid =
false;
60 } device_preference = DevicePreference::AUTO;
63 int32_t device_index = -1;
72 bool require_presentation =
true;
75 bool strict_device_selection =
false;
82 } memory_strategy = MemoryStrategy::BALANCED;
89 } command_pooling = CommandPooling::PER_THREAD;
92 uint32_t max_frames_in_flight = 2;
95 bool enable_compute_queue =
true;
98 bool enable_transfer_queue =
false;
105 } shader_compilation = ShaderCompilation::CACHED;
108 std::filesystem::path shader_cache_dir =
"cache/shaders";
116 return std::make_tuple(
117 Reflect::member(
"enable_validation", &GraphicsBackendInfo::enable_validation),
118 Reflect::member(
"enable_debug_markers", &GraphicsBackendInfo::enable_debug_markers),
119 Reflect::member(
"device_preference", &GraphicsBackendInfo::device_preference),
120 Reflect::member(
"device_index", &GraphicsBackendInfo::device_index),
121 Reflect::member(
"device_uuid", &GraphicsBackendInfo::device_uuid),
122 Reflect::member(
"device_name", &GraphicsBackendInfo::device_name),
123 Reflect::member(
"require_presentation", &GraphicsBackendInfo::require_presentation),
124 Reflect::member(
"strict_device_selection", &GraphicsBackendInfo::strict_device_selection),
126 Reflect::member(
"memory_strategy", &GraphicsBackendInfo::memory_strategy),
127 Reflect::member(
"command_pooling", &GraphicsBackendInfo::command_pooling),
128 Reflect::member(
"max_frames_in_flight", &GraphicsBackendInfo::max_frames_in_flight),
129 Reflect::member(
"enable_compute_queue", &GraphicsBackendInfo::enable_compute_queue),
130 Reflect::member(
"enable_transfer_queue", &GraphicsBackendInfo::enable_transfer_queue),
131 Reflect::member(
"shader_compilation", &GraphicsBackendInfo::shader_compilation),
132 Reflect::member(
"shader_cache_dir", &GraphicsBackendInfo::shader_cache_dir),
133 Reflect::member(
"required_extensions", &GraphicsBackendInfo::required_extensions),
134 Reflect::member(
"optional_extensions", &GraphicsBackendInfo::optional_extensions));
146 uint32_t max_windows = 16;
149 uint32_t max_staging_buffer_mb = 256;
152 uint32_t max_compute_buffer_mb = 1024;
155 uint32_t max_texture_cache_mb = 2048;
158 uint32_t max_descriptor_sets = 1024;
161 uint32_t max_pipelines = 256;
165 return std::make_tuple(
166 Reflect::member(
"max_windows", &GraphicsResourceLimits::max_windows),
167 Reflect::member(
"max_staging_buffer_mb", &GraphicsResourceLimits::max_staging_buffer_mb),
168 Reflect::member(
"max_compute_buffer_mb", &GraphicsResourceLimits::max_compute_buffer_mb),
169 Reflect::member(
"max_texture_cache_mb", &GraphicsResourceLimits::max_texture_cache_mb),
170 Reflect::member(
"max_descriptor_sets", &GraphicsResourceLimits::max_descriptor_sets),
171 Reflect::member(
"max_pipelines", &GraphicsResourceLimits::max_pipelines));
235 uint32_t image_count = 3;
238 bool enable_regions =
true;
241 uint32_t max_regions_per_window = 256;
247 bool measure_frame_time {};
254 return std::make_tuple(
255 Reflect::member(
"format", &GraphicsSurfaceInfo::format),
256 Reflect::member(
"color_space", &GraphicsSurfaceInfo::color_space),
257 Reflect::member(
"present_mode", &GraphicsSurfaceInfo::present_mode),
258 Reflect::member(
"image_count", &GraphicsSurfaceInfo::image_count),
259 Reflect::member(
"enable_regions", &GraphicsSurfaceInfo::enable_regions),
260 Reflect::member(
"max_regions_per_window", &GraphicsSurfaceInfo::max_regions_per_window),
261 Reflect::member(
"enable_hdr", &GraphicsSurfaceInfo::enable_hdr),
262 Reflect::member(
"measure_frame_time", &GraphicsSurfaceInfo::measure_frame_time));
290 return std::make_tuple(
327 return std::make_tuple(
371 uint32_t target_frame_rate = 60;
373#if defined(MAYAFLUX_PLATFORM_WINDOWS)
375#error "Windows builds require WIN32_BACKEND"
379#elif defined(WAYLAND_BACKEND)
382#elif defined(COCOA_BACKEND)
395#if defined(MAYAFLUX_PLATFORM_LINUX)
396 "sans-serif",
"", 24, 512
397#elif defined(MAYAFLUX_PLATFORM_MACOS)
398 "Helvetica Neue",
"", 24, 512
399#elif defined(MAYAFLUX_PLATFORM_WINDOWS)
400 "Segoe UI",
"", 24, 512
402 "sans-serif",
"", 24, 512
408 return std::make_tuple(
409 Reflect::member(
"key_repeat_config", &GlobalGraphicsConfig::key_repeat_config),
410 Reflect::member(
"surface_info", &GlobalGraphicsConfig::surface_info),
411 Reflect::member(
"backend_info", &GlobalGraphicsConfig::backend_info),
412 Reflect::member(
"resource_limits", &GlobalGraphicsConfig::resource_limits),
413 Reflect::member(
"target_frame_rate", &GlobalGraphicsConfig::target_frame_rate),
414 Reflect::member(
"windowing_backend", &GlobalGraphicsConfig::windowing_backend),
415 Reflect::member(
"requested_api", &GlobalGraphicsConfig::requested_api),
416 Reflect::member(
"text_config", &GlobalGraphicsConfig::text_config));
434 std::string title {
"MayaFlux Window" };
441 int32_t monitor_id { -1 };
447 bool resizable {
true };
450 bool decorated {
true };
459 bool register_for_processing {
true };
469 uint32_t color_channels { 4 };
474 std::array<float, 4> clear_color { { 0.0F, 0.0F, 0.0F, 1.0F } };
650 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, Win32 and Cocoa backends.
std::vector< std::string > required_extensions
Backend-specific extensions to request.
MemoryStrategy
Memory allocation strategy.
DevicePreference
Preferred physical device class when no explicit selector matches.
std::vector< std::string > optional_extensions
std::string device_name
Case-insensitive substring of the device name; empty disables.
CommandPooling
Command buffer pooling strategy.
static constexpr auto describe()
ShaderCompilation
Shader compilation strategy.
std::string device_uuid
Device UUID as 32 lowercase hex chars, no separators; empty disables.
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 text_interval_ms
Interval between repeated text character 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.
uint32_t text_initial_delay_ms
Delay before text character repeat starts in milliseconds.
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.
Resolved Unicode codepoint, layout/shift/dead-key/IME composed.
std::variant< std::monostate, ResizeData, KeyData, TextData, 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)