Engine²
Open-source game engine written in C++.
Loading...
Searching...
No Matches
GraphicSettings.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "resource/Limits.hpp"
4#include <ranges>
5
6namespace Graphic::Resource {
7
8enum class WindowSystem {
11};
12
17
19 private:
20 using RequiredFeatureContainer = std::vector<WGPUFeatureName>;
21
22 public:
23 GraphicSettings() = default;
24 ~GraphicSettings() = default;
25
28 {
29 windowSystem = system;
30 return *this;
31 }
32
35 {
36 powerPreference = preference;
37 return *this;
38 }
39
41
43
44 GraphicSettings &AddRequiredFeature(wgpu::FeatureName feature)
45 {
46 requiredFeatures.push_back(feature);
47 return *this;
48 }
49
50 GraphicSettings &RemoveRequiredFeature(wgpu::FeatureName feature)
51 {
52 if (auto it = _GetRequiredFeature(feature); it != requiredFeatures.end())
53 {
54 requiredFeatures.erase(it);
55 }
56 return *this;
57 }
58 bool HasRequiredFeature(wgpu::FeatureName feature) const
59 {
60 auto it = _GetRequiredFeature(feature);
61 return it != requiredFeatures.end();
62 }
63
64 GraphicSettings &SetOnErrorCallback(WGPUUncapturedErrorCallback callback)
65 {
66 onErrorCallback = callback;
67 return *this;
68 }
69
70 WGPUUncapturedErrorCallback GetOnErrorCallback() const { return onErrorCallback; }
71
72 private:
73 RequiredFeatureContainer::iterator _GetRequiredFeature(const wgpu::FeatureName &feature)
74 {
75 return std::ranges::find(requiredFeatures, static_cast<WGPUFeatureName>(feature));
76 }
77
78 RequiredFeatureContainer::const_iterator _GetRequiredFeature(const wgpu::FeatureName &feature) const
79 {
80 return _GetRequiredFeature(feature);
81 }
82
83 WGPUUncapturedErrorCallback onErrorCallback = [](WGPUDevice const *device, WGPUErrorType type,
84 WGPUStringView message, WGPU_NULLABLE void *userdata1,
85 WGPU_NULLABLE void *userdata2) {
86 Log::Error(fmt::format("Uncaptured device error: type {:x} ({})", static_cast<uint32_t>(type),
87 std::string(message.data, message.length)));
88 };
93};
94} // namespace Graphic::Resource
GraphicSettings & RemoveRequiredFeature(wgpu::FeatureName feature)
Definition GraphicSettings.hpp:50
RequiredFeatureContainer::iterator _GetRequiredFeature(const wgpu::FeatureName &feature)
Definition GraphicSettings.hpp:73
PowerPreference GetPowerPreference() const
Definition GraphicSettings.hpp:33
GraphicSettings & SetOnErrorCallback(WGPUUncapturedErrorCallback callback)
Definition GraphicSettings.hpp:64
std::vector< WGPUFeatureName > RequiredFeatureContainer
Definition GraphicSettings.hpp:20
RequiredFeatureContainer requiredFeatures
Definition GraphicSettings.hpp:92
WGPUUncapturedErrorCallback onErrorCallback
Definition GraphicSettings.hpp:83
bool HasRequiredFeature(wgpu::FeatureName feature) const
Definition GraphicSettings.hpp:58
Limits & GetWantedLimits()
Definition GraphicSettings.hpp:40
GraphicSettings & AddRequiredFeature(wgpu::FeatureName feature)
Definition GraphicSettings.hpp:44
WGPUUncapturedErrorCallback GetOnErrorCallback() const
Definition GraphicSettings.hpp:70
PowerPreference powerPreference
Definition GraphicSettings.hpp:90
GraphicSettings & SetWindowSystem(WindowSystem system)
Definition GraphicSettings.hpp:27
GraphicSettings & SetPowerPreference(PowerPreference preference)
Definition GraphicSettings.hpp:34
WindowSystem windowSystem
Definition GraphicSettings.hpp:89
WindowSystem GetWindowSystem() const
Definition GraphicSettings.hpp:26
Limits wantedLimits
Definition GraphicSettings.hpp:91
const RequiredFeatureContainer & GetRequiredFeatures() const
Definition GraphicSettings.hpp:42
RequiredFeatureContainer::const_iterator _GetRequiredFeature(const wgpu::FeatureName &feature) const
Definition GraphicSettings.hpp:78
Definition AGPUBuffer.hpp:6
WindowSystem
Definition GraphicSettings.hpp:8
@ None
Definition GraphicSettings.hpp:9
@ GLFW
Definition GraphicSettings.hpp:10
PowerPreference
Definition GraphicSettings.hpp:13
@ LowPower
Definition GraphicSettings.hpp:14
@ HighPerformance
Definition GraphicSettings.hpp:15
void Error(const T &msg) noexcept
Definition Logger.hpp:51
constexpr DefaultFlag Default
Definition webgpu.hpp:78
Definition Limits.hpp:6