Engine²
Open-source game engine written in C++.
Loading...
Searching...
No Matches
Surface.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "Logger.hpp"
4#include "utils/webgpu.hpp"
5
6namespace Graphic::Resource {
7struct Surface {
8 explicit Surface(std::optional<wgpu::Surface> surface = std::nullopt) : value(surface) {}
9 ~Surface() = default;
10
11 std::optional<wgpu::Surface> value = std::nullopt;
12 std::optional<wgpu::SurfaceCapabilities> capabilities = std::nullopt;
13 bool configured = false;
14
15 inline wgpu::Status updateCapabilities(wgpu::Adapter &adapter)
16 {
17 wgpu::SurfaceCapabilities caps;
18 if (!value.has_value())
19 {
20 Log::Error("Cannot update surface capabilities: surface is not created");
21 return wgpu::Status::Error;
22 }
23 wgpu::Status status = value->getCapabilities(adapter, &caps);
24 if (capabilities.has_value())
25 {
26 Log::Warning("Surface capabilities already requested, overwriting");
27 capabilities->freeMembers();
28 }
29 capabilities = caps;
30 return status;
31 }
32
33 inline void Release() noexcept
34 {
35 if (value.has_value())
36 {
37 value->release();
38 value.reset();
39 }
40 if (capabilities.has_value())
41 {
42 capabilities->freeMembers();
43 capabilities.reset();
44 }
45 configured = false;
46 }
47};
48} // namespace Graphic::Resource
Definition AGPUBuffer.hpp:6
void Warning(const T &msg) noexcept
Definition Logger.hpp:49
void Error(const T &msg) noexcept
Definition Logger.hpp:51
wgpu::Status updateCapabilities(wgpu::Adapter &adapter)
Definition Surface.hpp:15
std::optional< wgpu::Surface > value
Definition Surface.hpp:11
std::optional< wgpu::SurfaceCapabilities > capabilities
Definition Surface.hpp:12
void Release() noexcept
Definition Surface.hpp:33
Surface(std::optional< wgpu::Surface > surface=std::nullopt)
Definition Surface.hpp:8
bool configured
Definition Surface.hpp:13