diff options
| author | untodesu <kirill@untode.su> | 2025-12-30 13:20:33 +0500 |
|---|---|---|
| committer | untodesu <kirill@untode.su> | 2025-12-30 13:20:33 +0500 |
| commit | a1c83d56f41e6f2e0ad86dcd76d1446bfc60a37c (patch) | |
| tree | 5754f0cd6ef3678c2e9d9c31174ae435d463c8ed /src/game/client/io/video.hh | |
| parent | 49d3dff9e98e70e599dfd3059f85bb08ae247fe5 (diff) | |
| download | voxelius-a1c83d56f41e6f2e0ad86dcd76d1446bfc60a37c.tar.bz2 voxelius-a1c83d56f41e6f2e0ad86dcd76d1446bfc60a37c.zip | |
begin working on qf ports (#21)
Diffstat (limited to 'src/game/client/io/video.hh')
| -rw-r--r-- | src/game/client/io/video.hh | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/src/game/client/io/video.hh b/src/game/client/io/video.hh new file mode 100644 index 0000000..858983f --- /dev/null +++ b/src/game/client/io/video.hh @@ -0,0 +1,115 @@ +// SPDX-License-Identifier: BSD-2-Clause +// Copyright (c) 2025 Kirill Dmitrievich +// File: video.hh; Created: Tue Dec 30 2025 12:59:09 +// Description: Video mode handling + +#ifndef CLIENT_IO_VIDEO_HH +#define CLIENT_IO_VIDEO_HH +#pragma once + +class VideoMode final { +public: + constexpr explicit VideoMode(const GLFWvidmode& mode) noexcept; + constexpr explicit VideoMode(int wide, int tall, int rate = GLFW_DONT_CARE) noexcept; + + constexpr int wide(void) const noexcept; + constexpr int tall(void) const noexcept; + constexpr int rate(void) const noexcept; + + constexpr bool operator==(const VideoMode& other) const noexcept; + +private: + int m_wide; + int m_tall; + int m_rate; +}; + +class FramebufferSizeEvent final { +public: + constexpr explicit FramebufferSizeEvent(int wide, int tall) noexcept; + constexpr int wide(void) const noexcept; + constexpr int tall(void) const noexcept; + +private: + int m_wide; + int m_tall; +}; + +namespace video +{ +void init(void); +void init_late(void); +void shutdown(void); +void update(void); +void update_late(void); +} // namespace video + +namespace video +{ +void query_current_mode(int& wide, int& tall) noexcept; +void query_current_mode(int& wide, int& tall, bool& fullscreen) noexcept; +const std::vector<VideoMode>& query_fullscreen_modes(void) noexcept; +} // namespace video + +namespace video +{ +void request_fullscreen(int wide, int tall, int rate) noexcept; +void request_windowed(int wide, int tall) noexcept; +void request_windowed(void) noexcept; +} // namespace video + +namespace video +{ +void update_window_title(void); +} // namespace video + +constexpr VideoMode::VideoMode(int wide, int tall, int rate) noexcept : m_wide(wide), m_tall(tall), m_rate(rate) +{ + // empty +} + +constexpr VideoMode::VideoMode(const GLFWvidmode& mode) noexcept : m_wide(mode.width), m_tall(mode.height), m_rate(mode.refreshRate) +{ + // empty +} + +constexpr int VideoMode::wide(void) const noexcept +{ + return m_wide; +} + +constexpr int VideoMode::tall(void) const noexcept +{ + return m_tall; +} + +constexpr int VideoMode::rate(void) const noexcept +{ + return m_rate; +} + +constexpr bool VideoMode::operator==(const VideoMode& other) const noexcept +{ + auto result = true; + result = result && (m_wide == other.m_wide || m_wide == GLFW_DONT_CARE || other.m_wide == GLFW_DONT_CARE); + result = result && (m_tall == other.m_tall || m_tall == GLFW_DONT_CARE || other.m_tall == GLFW_DONT_CARE); + result = result && (m_rate == other.m_rate || m_rate == GLFW_DONT_CARE || other.m_rate == GLFW_DONT_CARE); + return result; +} + +constexpr FramebufferSizeEvent::FramebufferSizeEvent(int wide, int tall) noexcept : m_wide(wide), m_tall(tall) +{ + // empty +} + +constexpr int FramebufferSizeEvent::wide(void) const noexcept +{ + return m_wide; +} + +constexpr int FramebufferSizeEvent::tall(void) const noexcept +{ + return m_tall; +} + +#endif |
