150 lines
3.2 KiB
Markdown
150 lines
3.2 KiB
Markdown
|
|
# OpenGL 测试文档
|
||
|
|
|
||
|
|
> **版本**: 1.0
|
||
|
|
> **日期**: 2026-03-16
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 1. 概述
|
||
|
|
|
||
|
|
OpenGL 测试是 XCEngine 渲染硬件接口 (RHI) 的集成测试,用于验证 OpenGL 渲染管线的正确性。
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 2. 测试内容
|
||
|
|
|
||
|
|
### 2.1 渲染管线测试
|
||
|
|
|
||
|
|
| 测试项 | 说明 |
|
||
|
|
|--------|------|
|
||
|
|
| 窗口初始化 | GLFW 窗口、OpenGL 上下文创建 |
|
||
|
|
| GLAD 初始化 | OpenGL 函数加载 |
|
||
|
|
| 着色器编译 | 顶点着色器、片段着色器编译 |
|
||
|
|
| 模型加载 | 使用 Assimp 加载背包模型 |
|
||
|
|
| 纹理加载 | 加载 diffuse/specular 纹理 |
|
||
|
|
| 渲染输出 | PBR 渲染到屏幕 |
|
||
|
|
|
||
|
|
### 2.2 截图测试
|
||
|
|
|
||
|
|
程序在第 30 帧自动截图,并与基准图 `GT.ppm` 进行像素级对比。
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 3. 构建与运行
|
||
|
|
|
||
|
|
### 3.1 构建
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 创建构建目录
|
||
|
|
mkdir build && cd build
|
||
|
|
|
||
|
|
# 配置 CMake
|
||
|
|
cmake .. -A x64
|
||
|
|
|
||
|
|
# 编译
|
||
|
|
cmake --build . --config Debug --target XCRender
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3.2 运行
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 方式一:直接运行可执行文件
|
||
|
|
./build/tests/OpenGL/Debug/XCRender.exe
|
||
|
|
|
||
|
|
# 方式二:运行测试脚本(自动截图并对比)
|
||
|
|
./build/tests/OpenGL/Debug/run.bat
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 4. 测试流程
|
||
|
|
|
||
|
|
```
|
||
|
|
1. 初始化 GLFW
|
||
|
|
├── 创建窗口
|
||
|
|
└── 创建 OpenGL 上下文
|
||
|
|
|
||
|
|
2. 初始化 GLAD
|
||
|
|
└── 加载 OpenGL 函数
|
||
|
|
|
||
|
|
3. 加载资源
|
||
|
|
├── 编译着色器
|
||
|
|
├── 加载模型 (Assimp)
|
||
|
|
└── 加载纹理 (stb_image)
|
||
|
|
|
||
|
|
4. 渲染循环
|
||
|
|
├── 清空帧缓冲
|
||
|
|
├── 设置 Uniforms
|
||
|
|
├── 绘制模型
|
||
|
|
└── 交换缓冲区
|
||
|
|
|
||
|
|
5. 截图验证 (第 30 帧)
|
||
|
|
├── 读取帧缓冲 (glReadPixels)
|
||
|
|
├── 保存为 PPM 格式
|
||
|
|
└── 与 GT.ppm 对比
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 5. 文件结构
|
||
|
|
|
||
|
|
```
|
||
|
|
tests/OpenGL/
|
||
|
|
├── CMakeLists.txt # 构建配置
|
||
|
|
├── main.cpp # 测试程序入口
|
||
|
|
├── run.bat # 运行脚本
|
||
|
|
├── compare_ppm.py # 图片对比脚本
|
||
|
|
├── Res/ # 资源目录
|
||
|
|
│ ├── models/ # 模型文件 (backpack)
|
||
|
|
│ └── shaders/ # 着色器
|
||
|
|
└── package/ # 第三方库
|
||
|
|
├── include/ # 头文件 (GLFW, GLAD, Assimp, GLM, stb_image)
|
||
|
|
└── lib/ # 库文件
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 6. 基准图
|
||
|
|
|
||
|
|
- **GT.ppm**: 正确渲染的参考截图 (1280x720)
|
||
|
|
- **screenshot.ppm**: 程序渲染的实际截图
|
||
|
|
- **对比阈值**: 5 (像素差异容忍度)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 7. 调试
|
||
|
|
|
||
|
|
### 7.1 日志输出
|
||
|
|
|
||
|
|
程序使用 XCEngine Logger 系统,日志输出到:
|
||
|
|
- 控制台 (ConsoleLogSink)
|
||
|
|
- 文件 (FileLogSink): `OpenGL_engine_log.txt`
|
||
|
|
|
||
|
|
### 7.2 常见问题
|
||
|
|
|
||
|
|
| 问题 | 原因 | 解决方案 |
|
||
|
|
|------|------|----------|
|
||
|
|
| 黑色画面 | 着色器编译失败 | 检查着色器错误日志 |
|
||
|
|
| 无纹理 | 纹理路径错误 | 确认 res/models/ 目录 |
|
||
|
|
| 模型未显示 | Assimp 加载失败 | 检查模型文件是否存在 |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 8. 技术细节
|
||
|
|
|
||
|
|
- **分辨率**: 1280x720
|
||
|
|
- **OpenGL 版本**: 3.3 Core Profile
|
||
|
|
- **依赖库**: GLFW, GLAD, Assimp, GLM, stb_image
|
||
|
|
- **平台**: Windows
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 9. 与 D3D12 测试对比
|
||
|
|
|
||
|
|
| 特性 | D3D12 | OpenGL |
|
||
|
|
|------|-------|--------|
|
||
|
|
| 分辨率 | 1280x720 | 1280x720 |
|
||
|
|
| 截图帧 | 30 | 30 |
|
||
|
|
| 模型 | Sphere.lhsm | backpack.obj |
|
||
|
|
| 日志系统 | XCEngine Logger | XCEngine Logger |
|