Dandelion 1.1.1
A light-weight 3D builder for educational usage
载入中...
搜索中...
未找到
platform.h
浏览该文件的文档.
1#ifndef DANDELION_PLATFORM_PLATFORM_H
2#define DANDELION_PLATFORM_PLATFORM_H
3
4/*!
5 * \file platform/platform.h
6 */
7
8#include <memory>
9
10#ifdef _WIN32
11#include <Windows.h>
12#endif
13#include <glad/glad.h>
14#include <GLFW/glfw3.h>
15#include <imgui/imgui.h>
16#include <imgui/imgui_impl_glfw.h>
17#include <imgui/imgui_impl_opengl3.h>
18#include <spdlog/spdlog.h>
19
20#include "shader.hpp"
21
22/*!
23 * \ingroup platform
24 * \~english
25 * \brief The Platform class manages the platform-dependent window and some platform-
26 * dependent parameters.
27 *
28 * \~chinese
29 * \brief 这个类管理平台相关的窗口和配置信息。
30 */
32{
33public:
34 /*!
35 * \~chinese
36 * \brief 初始化 OpenGL Context、创建窗口、初始化 Dear ImGui、创建预览场景用的 shader。
37 *
38 * 构造函数按照 4.6 -> 4.3 -> 3.3 的版本顺序尝试创建 OpenGL Context,若全部失败,
39 * 则程序终止直接退出(OpenGL 3.3 是使用 GLSL shader 的最低要求)。
40 *
41 * OpenGL Context 创建成功后,构造函数加载 OpenGL API 并创建窗口,再探测用户显示器的
42 * DPI 来决定程序的全局缩放比例。Dear ImGui 的初始化过程依赖于全局缩放。
43 * 最后,构造函数编译、链接渲染预览场景的 shader。
44 */
45 Platform();
46 ~Platform();
47 /*!
48 * \~chinese
49 * \brief 事件循环主体。
50 *
51 * 这是 GUI 的主循环,负责接收消息(输入)并转发给 Controller 对象。
52 * 此循环内的过程基本上是与平台 (OpenGL / GLFW) 相关的,平台无关的处理则移交 Controller。
53 */
54 void eventloop();
55
56private:
57 static constexpr float mouse_wheel_threshold = 1e-2f;
58 /*! \~chinese 检测显示器 DPI。 */
59 double get_dpi() noexcept;
60 /*! \~chinese 按 DPI 缩放窗口。 */
61 void resize_window() noexcept;
62 /*!
63 * \~chinese
64 * 创建 `major.minor` 版本的 OpenGL Context。
65 * \param major OpenGL 主版本
66 * \param minor OpenGL 次版本(小版本)
67 * \returns 创建是否成功
68 */
69 bool create_context(int major, int minor) noexcept;
70 /*! \~chinese
71 * 设置一些全局通用的 OpenGL 属性,例如开启深度测试等。
72 */
73 void set_opengl_properties() noexcept;
74 /*! \~chinese 初始化 Dear ImGui,加载字体、设置缩放和基础样式。 */
75 bool init_ui();
76 static void on_framebuffer_resized(GLFWwindow* window, GLsizei width, GLsizei height);
77
78 std::shared_ptr<spdlog::logger> logger;
79 GLFWwindow* window;
80 int window_width, window_height;
81 double dpi;
82 std::unique_ptr<Shader> shader;
83};
84
85#endif
Platform()
初始化 OpenGL Context、创建窗口、初始化 Dear ImGui、创建预览场景用的 shader。
定义 platform.cpp:25
void eventloop()
事件循环主体。
定义 platform.cpp:99
bool create_context(int major, int minor) noexcept
定义 platform.cpp:166
double get_dpi() noexcept
定义 platform.cpp:121
void resize_window() noexcept
定义 platform.cpp:141
void set_opengl_properties() noexcept
定义 platform.cpp:184
bool init_ui()
定义 platform.cpp:191