![]() |
Dandelion 1.1.2
A light-weight 3D builder for educational usage
|
这个类管理平台相关的窗口、配置信息以及应用启动的入口和事件循环。 更多...
#include <platform.h>
Public 成员函数 | |
Platform () | |
初始化 OpenGL Context、创建窗口、初始化 Dear ImGui、创建预览场景用的 shader。 | |
~Platform () | |
void | eventloop () |
事件循环主体。 |
Private 成员函数 | |
double | get_dpi () noexcept |
void | resize_window () noexcept |
bool | create_context (int major, int minor) noexcept |
void | set_opengl_properties () noexcept |
bool | init_ui () |
静态 Private 成员函数 | |
static void | on_framebuffer_resized (GLFWwindow *window, GLsizei width, GLsizei height) |
Private 属性 | |
std::shared_ptr< spdlog::logger > | logger |
GLFWwindow * | window |
double | dpi |
std::unique_ptr< Shader > | shader |
int | window_width |
int | window_height |
静态 Private 属性 | |
static constexpr float | mouse_wheel_threshold = 1e-2f |
这个类管理平台相关的窗口、配置信息以及应用启动的入口和事件循环。
Platform::Platform | ( | ) |
初始化 OpenGL Context、创建窗口、初始化 Dear ImGui、创建预览场景用的 shader。
构造函数按照 4.6 -> 4.3 -> 3.3 的版本顺序尝试创建 OpenGL Context,若全部失败, 则程序终止直接退出(OpenGL 3.3 是使用 GLSL shader 的最低要求)。
OpenGL Context 创建成功后,构造函数加载 OpenGL API 并创建窗口,再探测用户显示器的 DPI 来决定程序的全局缩放比例。Dear ImGui 的初始化过程依赖于全局缩放。 最后,构造函数编译、链接渲染预览场景的 shader。
Platform::~Platform | ( | ) |
执行 OpenGL 销毁窗口的操作。
|
privatenoexcept |
创建 major.minor 版本的 OpenGL Context。
major | OpenGL 主版本 |
minor | OpenGL 次版本(小版本) |
void Platform::eventloop | ( | ) |
事件循环主体。
这是 GUI 的主循环,负责接收消息(输入)并转发给 Controller 对象。 此循环内的过程基本上是与平台 (OpenGL / GLFW) 相关的,平台无关的处理则移交 Controller。
|
privatenoexcept |
检测显示器 DPI。
|
private |
初始化 Dear ImGui,加载字体、设置缩放和基础样式。
|
staticprivate |
处理窗口缩放的回调函数。
|
privatenoexcept |
按 DPI 缩放窗口。
|
privatenoexcept |
设置一些全局通用的 OpenGL 属性,例如开启深度测试等。
|
private |
屏幕分辨率,实际是 PPI (Pixels Per Inch),称为 DPI 只是出于习惯。
|
private |
持有的日志记录器。
|
private |
窗口对象。
|
private |
实时更新的窗口长宽。
|
private |
实时更新的窗口长宽。