Merge branch 'master' of gitler.moe:suwako/cpputils

諏訪子 <suwako@076.moe>、2026-07-14 18:03
コミット 1331b6b18d63295af3794bcf12fbbe83785f95a4 ・親 7391239 ・親 7f019b7 ・ファイルを見る

4個のファイル、+89 -1

@@ -24,7 +24,7 @@
2424 target_sources(076cpputils PRIVATE "${CPPUTILS_SRC}")
2525 target_include_directories(076cpputils PUBLIC include)
2626
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")
2828 set(DB_NAME "test.db" CACHE STRING "データベースのパス" FORCE)
2929 set(PRODUCTION_BUILD OFF CACHE BOOL "リリース版?" FORCE)
3030 target_compile_definitions(076cpputils PRIVATE
@@ -41,6 +41,14 @@
4141 set(DB_NAME "test.db" CACHE STRING "データベースのパス" FORCE)
4242 endif()
4343 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)
4452 endif()
4553
4654 target_link_libraries(076cpputils PRIVATE
変更 README.md
@@ -1,2 +1,13 @@
11 # C++ Utils
22 便利な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 @@
2424 #ifndef GLFWPP_HH
2525 #define GLFWPP_HH
2626
27+#if defined(USING_VULKAN)
28+#define GLFW_INCLUDE_VULKAN
2729 #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
2844 #include <util/types.hh>
2945 #include <span>
3046
@@ -143,6 +159,8 @@
143159 void SetOpenGLProfile(int profile);
144160 void SetForwardCompatibility(bool fc);
145161 void SetMaximized(bool fc);
162+ void SetApi(int api);
163+ void SetResizable(bool tf);
146164
147165 void CreateWindowHints();
148166 void PollEvents();
@@ -156,6 +174,9 @@
156174 void InitHint(int hint, int value);
157175 void GetVersion(int *major, int *minor, int *rev);
158176 cstr GetVersionString(void);
177+#if defined(USING_VULKAN)
178+ const char **GetRequiredInstanceExtensions(u32 *count);
179+#endif
159180
160181 int GetError(cstr *description);
161182 GLFWerrorfun SetErrorCallback(GLFWerrorfun cbfun);
@@ -164,8 +185,10 @@
164185 int m_Major = 0;
165186 int m_Minor = 0;
166187 int m_Profile = 0;
188+ int m_Api = 0;
167189 bool m_ForwardCompat = false;
168190 bool m_IsMaximized = false;
191+ bool m_IsResizable = false;
169192 }; // class Instance
170193
171194 class Window {
@@ -174,11 +197,18 @@
174197 ~Window();
175198
176199 GLFWwindow *Get() const { return m_Window; }
200+#if defined(USING_GLAD)
177201 GLFWframebuffersizefun SetFramebufferSizeCallback();
202+#endif
178203
204+#if defined(USING_VULKAN)
205+ vk::Result CreateWindowSurface(vk::Instance instance, vk::SurfaceKHR &surface);
206+#endif
207+
179208 bool ShouldClose() const;
180209 void SwapBuffers();
181210
211+ void SetWindowShouldClose(bool value);
182212 void GetSize(int *w, int *h);
183213 void Maximize();
184214 void SetClipboardString(string str);
@@ -221,6 +251,8 @@
221251 int JoystickIsGamepad(int jid);
222252 cstr GetGamepadName(int jid);
223253 int GetGamepadState(int jid, GLFWgamepadstate *state);
254+
255+ void GetFramebufferSize(int &width, int &height);
224256
225257 private:
226258 GLFWwindow *m_Window = {};
@@ -51,6 +51,10 @@
5151 void Instance::SetContextMinorVersion(int minor) {
5252 m_Minor = minor;
5353 }
54+
55+ void Instance::SetApi(int api) {
56+ m_Api = api;
57+ }
5458
5559 void Instance::SetOpenGLProfile(int profile) {
5660 m_Profile = profile;
@@ -64,12 +68,21 @@
6468 m_IsMaximized = fc;
6569 }
6670
71+ void Instance::SetResizable(bool tf) {
72+ m_IsResizable = tf;
73+ }
74+
6775 void Instance::CreateWindowHints() {
76+#if defined(USING_GLAD)
6877 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, m_Major);
6978 glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, m_Minor);
7079 glfwWindowHint(GLFW_OPENGL_PROFILE, m_Profile);
7180 glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, m_ForwardCompat);
81+#else
82+ glfwWindowHint(GLFW_CLIENT_API, m_Api);
83+#endif
7284 glfwWindowHint(GLFW_MAXIMIZED, m_IsMaximized);
85+ glfwWindowHint(GLFW_RESIZABLE, m_IsResizable);
7386 }
7487
7588 void Instance::PollEvents() {
@@ -108,6 +121,12 @@
108121 return glfwGetVersionString();
109122 }
110123
124+#if defined(USING_VULKAN)
125+ const char **Instance::GetRequiredInstanceExtensions(u32 *count) {
126+ return glfwGetRequiredInstanceExtensions(count);
127+ }
128+#endif
129+
111130 int Instance::GetError(cstr *description) {
112131 return glfwGetError(description);
113132 }
@@ -126,13 +145,16 @@
126145 throw std::runtime_error("GLFWウィンドウの作成に失敗しました");
127146 }
128147
148+#if defined(USING_GLAD)
129149 glfwMakeContextCurrent(m_Window);
150+#endif
130151 }
131152
132153 Window::~Window() {
133154 glfwDestroyWindow(m_Window);
134155 }
135156
157+#if defined(USING_GLAD)
136158 void framebuffer_size_callback(GLFWwindow *window, int width, int height) {
137159 (void)window;
138160 glViewport(0, 0, width, height);
@@ -142,7 +164,14 @@
142164 glfwSetFramebufferSizeCallback(m_Window, framebuffer_size_callback);
143165 return nullptr;
144166 }
167+#endif
145168
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+
146175 bool Window::ShouldClose() const {
147176 return glfwWindowShouldClose(m_Window);
148177 }
@@ -151,6 +180,10 @@
151180 glfwSwapBuffers(m_Window);
152181 }
153182
183+ void Window::SetWindowShouldClose(bool value) {
184+ glfwSetWindowShouldClose(m_Window, value);
185+ }
186+
154187 void Window::GetSize(int *w, int *h) {
155188 glfwGetWindowSize(m_Window, w, h);
156189 }
@@ -305,6 +338,10 @@
305338
306339 int Window::GetGamepadState(int jid, GLFWgamepadstate *state) {
307340 return glfwGetGamepadState(jid, state);
341+ }
342+
343+ void Window::GetFramebufferSize(int &width, int &height) {
344+ glfwGetFramebufferSize(m_Window, &width, &height);
308345 }
309346
310347 ///////////////////