PlayImage使用OpenGL实现视频渲染
PlayImage的OpenGL实现
基础架构
类继承
- 继承QOpenGLWidget和QOpenGLFunctions_3_3
- 新版本OpenGL(>2.0)从固定管线转向可编程管线
缓冲区概念
- VBO:保存单个顶点数据(数据集)
- VAO:保存如何使用这些VBO的数据(使用说明)
资源管理
- 添加资源文件:通过Qt的resource系统
- GLSL文件需要添加到资源系统中
OpenGL渲染流程类比
整个流程类似于布置电影院:
- 摆放设备
- 调整投影仪滤镜(着色器)
- 准备海报并裁剪(texture)
- 播放时绑定海报(texture.bind())
- 执行播放
着色器工作原理
着色器特点
- 每份着色器代码只是单个像素的绘制蓝图
- GPU中多个工作单元并行处理
- 每个工作单元负责一个像素的绘制
- 着色器是工作单元的执行指南
着色器类型
- 顶点着色器:确定位置
- 片段着色器(像素着色器):绘制颜色
工作流程
- 顶点着色器执行(仅执行顶点次数)
- 图元装配(组合成三角形/线段)
- 光栅化(填充像素块)
- 片段着色器处理每个fragment(执行像素数量次)
实现注意事项
OpenGL封装选择
- 放弃Qt封装的OpenGL
- 直接使用原生句柄操作VAO/VBO
位置管理
- m_pos使用QPoint类型
评论