23.6UniformBufferObject


## 23.6 Uniform Buffer Object 你有没有和我一样,觉得很奇怪。 场景中只有一个相机,为什么每渲染一个物体,都需要上传一次MVP矩阵? 作为静态变量不行吗? 整个游戏场景中所有的模型,都是使用相同的环境光,为什么每一帧、绘制每个模型都要设置一次环境光参数? 环境光参数作为静态变量不行吗? 这一节,就来解决这个疑问。 Uniform的作用范围 在顶点着色器中,使用 修饰了MVP 3个矩阵。 GPU程序是并行的, 修饰的变量,表示在这一次绘制中,是唯一的、不变的。 但是它不是跨GPU程序的。 当这一次绘制完成后, 变量就无效了。 使用相同Shader,再绘制另一个物体,需要重新设置。 变量类似于C++的成员变量,类实例A 中的成员变量,不能作用到 类实例B。 在C++...

## 23.6 Uniform Buffer Object 你有没有和我一样,觉得很奇怪。 场景中只有一个相机,为什么每渲染一个物体,都需要上传一次MVP矩阵? 作为静态变量不行吗? 整个游戏场景中所有的模型,都是使用相同的环境光,为什么每一帧、绘制每个模型都要设置一次环境光参数? 环境光参数作为静态变量不行吗? 这一节,就来解决这个疑问。 Uniform的作用范围 在顶点着色器中,使用 修饰了MVP 3个矩阵。 GPU程序是并行的, 修饰的变量,表示在这一次绘制中,是唯一的、不变的。 但是它不是跨GPU程序的。 当这一次绘制完成后, 变量就无效了。 使用相同Shader,再绘制另一个物体,需要重新设置。 变量类似于C++的成员变量,类实例A 中的成员变量,不能作用到 类实例B。 在C++中,可以使用 static 变量,让它全局生效。 或者申请一块内存buffer,使用指针访问,只要不删除,那这块内存buffer也是全局生效的。 在OpenGL里,也可以申请这样一块Buffer,用来存储 变量,它叫做 Uniform Buffer Object,简称UBO。 2 定义UBO结构 U...

发布者: 作者: 转发
评论区 (0)
U