GLFW++の関数の追加
テクニカル諏訪子 <suwako@076.moe>、2026-07-14 18:01
コミット 7f019b70106980183d761cfc890e11e439ab725e
・親 1714cdf
・ファイルを見る
4個のファイル、+89 -1
| @@ -24,7 +24,7 @@ | ||
| 24 | 24 | target_sources(076cpputils PRIVATE "${CPPUTILS_SRC}") |
| 25 | 25 | target_include_directories(076cpputils PUBLIC include) |
| 26 | 26 | |
| 27 | - if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") | |
| 27 | +if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") | |
| 28 | 28 | set(DB_NAME "test.db" CACHE STRING "データベースのパス" FORCE) |
| 29 | 29 | set(PRODUCTION_BUILD OFF CACHE BOOL "リリース版?" FORCE) |
| 30 | 30 | target_compile_definitions(076cpputils PRIVATE |
| @@ -41,6 +41,14 @@ | ||
| 41 | 41 | set(DB_NAME "test.db" CACHE STRING "データベースのパス" FORCE) |
| 42 | 42 | endif() |
| 43 | 43 | target_compile_definitions(076cpputils PRIVATE PRODUCTION_BUILD DB_NAME="${DB_NAME}") |
| 44 | +endif() | |
| 45 | + | |
| 46 | +if(WIN32) | |
| 47 | + target_compile_definitions(076cpputils PRIVATE VK_USE_PLATFORM_WIN32_KHR) | |
| 48 | +elseif(APPLE) | |
| 49 | + target_compile_definitions(076cpputils PRIVATE VK_USE_PLATFORM_METAL_EXT) | |
| 50 | +elseif(UNIX) | |
| 51 | + target_compile_definitions(076cpputils PRIVATE VK_USE_PLATFORM_XCB_KHR) | |
| 44 | 52 | endif() |
| 45 | 53 | |
| 46 | 54 | target_link_libraries(076cpputils PRIVATE |
変更
README.md
| @@ -1,2 +1,13 @@ | ||
| 1 | 1 | # C++ Utils |
| 2 | 2 | 便利なC++ライブラリ |
| 3 | + | |
| 4 | +GLFW++の場合: | |
| 5 | +```cmake | |
| 6 | +target_compile_definitions(MyProject PRIVATE USING_VULKAN) | |
| 7 | +``` | |
| 8 | + | |
| 9 | +OR | |
| 10 | + | |
| 11 | +```cmake | |
| 12 | +target_compile_definitions(MyProject PRIVATE USING_OPENGL) | |
| 13 | +``` |
| @@ -24,7 +24,23 @@ | ||
| 24 | 24 | #ifndef GLFWPP_HH |
| 25 | 25 | #define GLFWPP_HH |
| 26 | 26 | |
| 27 | +#if defined(USING_VULKAN) | |
| 28 | +#define GLFW_INCLUDE_VULKAN | |
| 27 | 29 | #include <glfw/glfw3.h> |
| 30 | + | |
| 31 | +#include <vulkan/vulkan.hpp> | |
| 32 | + | |
| 33 | +#if defined(_WIN64) | |
| 34 | +#define GLFW_EXPOSE_NATIVE_WIN32 | |
| 35 | +#elif defined(__APPLE__) | |
| 36 | +#define GLFW_EXPOSE_NATIVE_COCOA | |
| 37 | +#else | |
| 38 | +#define GLFW_EXPOSE_NATIVE_X11 | |
| 39 | +#endif | |
| 40 | +#include <GLFW/glfw3native.h> | |
| 41 | +#else | |
| 42 | +#include <glfw/glfw3.h> | |
| 43 | +#endif | |
| 28 | 44 | #include <util/types.hh> |
| 29 | 45 | #include <span> |
| 30 | 46 | |
| @@ -143,6 +159,8 @@ | ||
| 143 | 159 | void SetOpenGLProfile(int profile); |
| 144 | 160 | void SetForwardCompatibility(bool fc); |
| 145 | 161 | void SetMaximized(bool fc); |
| 162 | + void SetApi(int api); | |
| 163 | + void SetResizable(bool tf); | |
| 146 | 164 | |
| 147 | 165 | void CreateWindowHints(); |
| 148 | 166 | void PollEvents(); |
| @@ -156,6 +174,9 @@ | ||
| 156 | 174 | void InitHint(int hint, int value); |
| 157 | 175 | void GetVersion(int *major, int *minor, int *rev); |
| 158 | 176 | cstr GetVersionString(void); |
| 177 | +#if defined(USING_VULKAN) | |
| 178 | + const char **GetRequiredInstanceExtensions(u32 *count); | |
| 179 | +#endif | |
| 159 | 180 | |
| 160 | 181 | int GetError(cstr *description); |
| 161 | 182 | GLFWerrorfun SetErrorCallback(GLFWerrorfun cbfun); |
| @@ -164,8 +185,10 @@ | ||
| 164 | 185 | int m_Major = 0; |
| 165 | 186 | int m_Minor = 0; |
| 166 | 187 | int m_Profile = 0; |
| 188 | + int m_Api = 0; | |
| 167 | 189 | bool m_ForwardCompat = false; |
| 168 | 190 | bool m_IsMaximized = false; |
| 191 | + bool m_IsResizable = false; | |
| 169 | 192 | }; // class Instance |
| 170 | 193 | |
| 171 | 194 | class Window { |
| @@ -174,11 +197,18 @@ | ||
| 174 | 197 | ~Window(); |
| 175 | 198 | |
| 176 | 199 | GLFWwindow *Get() const { return m_Window; } |
| 200 | +#if defined(USING_GLAD) | |
| 177 | 201 | GLFWframebuffersizefun SetFramebufferSizeCallback(); |
| 202 | +#endif | |
| 178 | 203 | |
| 204 | +#if defined(USING_VULKAN) | |
| 205 | + vk::Result CreateWindowSurface(vk::Instance instance, vk::SurfaceKHR &surface); | |
| 206 | +#endif | |
| 207 | + | |
| 179 | 208 | bool ShouldClose() const; |
| 180 | 209 | void SwapBuffers(); |
| 181 | 210 | |
| 211 | + void SetWindowShouldClose(bool value); | |
| 182 | 212 | void GetSize(int *w, int *h); |
| 183 | 213 | void Maximize(); |
| 184 | 214 | void SetClipboardString(string str); |
| @@ -221,6 +251,8 @@ | ||
| 221 | 251 | int JoystickIsGamepad(int jid); |
| 222 | 252 | cstr GetGamepadName(int jid); |
| 223 | 253 | int GetGamepadState(int jid, GLFWgamepadstate *state); |
| 254 | + | |
| 255 | + void GetFramebufferSize(int &width, int &height); | |
| 224 | 256 | |
| 225 | 257 | private: |
| 226 | 258 | GLFWwindow *m_Window = {}; |
| @@ -51,6 +51,10 @@ | ||
| 51 | 51 | void Instance::SetContextMinorVersion(int minor) { |
| 52 | 52 | m_Minor = minor; |
| 53 | 53 | } |
| 54 | + | |
| 55 | + void Instance::SetApi(int api) { | |
| 56 | + m_Api = api; | |
| 57 | + } | |
| 54 | 58 | |
| 55 | 59 | void Instance::SetOpenGLProfile(int profile) { |
| 56 | 60 | m_Profile = profile; |
| @@ -64,12 +68,21 @@ | ||
| 64 | 68 | m_IsMaximized = fc; |
| 65 | 69 | } |
| 66 | 70 | |
| 71 | + void Instance::SetResizable(bool tf) { | |
| 72 | + m_IsResizable = tf; | |
| 73 | + } | |
| 74 | + | |
| 67 | 75 | void Instance::CreateWindowHints() { |
| 76 | +#if defined(USING_GLAD) | |
| 68 | 77 | glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, m_Major); |
| 69 | 78 | glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, m_Minor); |
| 70 | 79 | glfwWindowHint(GLFW_OPENGL_PROFILE, m_Profile); |
| 71 | 80 | glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, m_ForwardCompat); |
| 81 | +#else | |
| 82 | + glfwWindowHint(GLFW_CLIENT_API, m_Api); | |
| 83 | +#endif | |
| 72 | 84 | glfwWindowHint(GLFW_MAXIMIZED, m_IsMaximized); |
| 85 | + glfwWindowHint(GLFW_RESIZABLE, m_IsResizable); | |
| 73 | 86 | } |
| 74 | 87 | |
| 75 | 88 | void Instance::PollEvents() { |
| @@ -108,6 +121,12 @@ | ||
| 108 | 121 | return glfwGetVersionString(); |
| 109 | 122 | } |
| 110 | 123 | |
| 124 | +#if defined(USING_VULKAN) | |
| 125 | + const char **Instance::GetRequiredInstanceExtensions(u32 *count) { | |
| 126 | + return glfwGetRequiredInstanceExtensions(count); | |
| 127 | + } | |
| 128 | +#endif | |
| 129 | + | |
| 111 | 130 | int Instance::GetError(cstr *description) { |
| 112 | 131 | return glfwGetError(description); |
| 113 | 132 | } |
| @@ -126,13 +145,16 @@ | ||
| 126 | 145 | throw std::runtime_error("GLFWウィンドウの作成に失敗しました"); |
| 127 | 146 | } |
| 128 | 147 | |
| 148 | +#if defined(USING_GLAD) | |
| 129 | 149 | glfwMakeContextCurrent(m_Window); |
| 150 | +#endif | |
| 130 | 151 | } |
| 131 | 152 | |
| 132 | 153 | Window::~Window() { |
| 133 | 154 | glfwDestroyWindow(m_Window); |
| 134 | 155 | } |
| 135 | 156 | |
| 157 | +#if defined(USING_GLAD) | |
| 136 | 158 | void framebuffer_size_callback(GLFWwindow *window, int width, int height) { |
| 137 | 159 | (void)window; |
| 138 | 160 | glViewport(0, 0, width, height); |
| @@ -142,7 +164,14 @@ | ||
| 142 | 164 | glfwSetFramebufferSizeCallback(m_Window, framebuffer_size_callback); |
| 143 | 165 | return nullptr; |
| 144 | 166 | } |
| 167 | +#endif | |
| 145 | 168 | |
| 169 | +#if defined(USING_VULKAN) | |
| 170 | + vk::Result Window::CreateWindowSurface(vk::Instance instance, vk::SurfaceKHR &surface) { | |
| 171 | + return static_cast<vk::Result>(glfwCreateWindowSurface(instance, m_Window, nullptr, reinterpret_cast<VkSurfaceKHR *>(&surface))); | |
| 172 | + } | |
| 173 | +#endif | |
| 174 | + | |
| 146 | 175 | bool Window::ShouldClose() const { |
| 147 | 176 | return glfwWindowShouldClose(m_Window); |
| 148 | 177 | } |
| @@ -151,6 +180,10 @@ | ||
| 151 | 180 | glfwSwapBuffers(m_Window); |
| 152 | 181 | } |
| 153 | 182 | |
| 183 | + void Window::SetWindowShouldClose(bool value) { | |
| 184 | + glfwSetWindowShouldClose(m_Window, value); | |
| 185 | + } | |
| 186 | + | |
| 154 | 187 | void Window::GetSize(int *w, int *h) { |
| 155 | 188 | glfwGetWindowSize(m_Window, w, h); |
| 156 | 189 | } |
| @@ -305,6 +338,10 @@ | ||
| 305 | 338 | |
| 306 | 339 | int Window::GetGamepadState(int jid, GLFWgamepadstate *state) { |
| 307 | 340 | return glfwGetGamepadState(jid, state); |
| 341 | + } | |
| 342 | + | |
| 343 | + void Window::GetFramebufferSize(int &width, int &height) { | |
| 344 | + glfwGetFramebufferSize(m_Window, &width, &height); | |
| 308 | 345 | } |
| 309 | 346 | |
| 310 | 347 | /////////////////// |