1
0
mirror of https://github.com/LearnOpenGL-CN/LearnOpenGL-CN.git synced 2025-08-23 04:35:28 +08:00
This commit is contained in:
Meow J
2017-04-05 21:08:07 +08:00
parent 0cc832b4ec
commit b87ef76828

View File

@@ -306,7 +306,7 @@ layout (std140) uniform ExampleBlock
尝试自己计算出偏移量把它们和表格对比你可以把这件事当作一个练习。使用计算出来的偏移量根据std140布局规则我们可以用`glBufferSubData`这样的函数使用变量数据填充缓冲。虽然不是很高效但std140布局可以保证在每个程序中声明的这个uniform块的布局保持一致。 尝试自己计算出偏移量把它们和表格对比你可以把这件事当作一个练习。使用计算出来的偏移量根据std140布局规则我们可以用`glBufferSubData`这样的函数使用变量数据填充缓冲。虽然不是很高效但std140布局可以保证在每个程序中声明的这个uniform块的布局保持一致。
定义uniform块前面添加layout (std140)声明,我们就能告诉OpenGL这个uniform块使用了std140布局。另外还有两种其他的布局可以选择,它们需要我们在填充缓冲之前查询每个偏移量。我们已经了解了分享布局shared layout和其他的布局都将被封装packed。当使用封装packed布局的时候,不能保证布局在别的程序能够保持一致因为它允许编译器从uniform块中优化出去uniform变量这在每个着色器中都可能不同 通过在uniform块的定义前面添加`layout (std140)`声明我们告诉OpenGL这个uniform块使用了std140布局。我们还有其它的另外两种布局可以选择,它们需要我们在填充缓冲之前查询每个偏移量。前面我们已经见过的**共享**布局(Shared Layout),还有一种则是**紧凑**布局(Packed Layout)。当我们使用紧凑布局的时候,不能保证这个布局在所有程序能够保持一致(即并非共享)因为它允许编译器从uniform块中优化出去uniform变量而具体优化出去的是哪个则根据着色器的不同会有所变化
## 使用uniform缓冲 ## 使用uniform缓冲