程序员

OpenGL ES 3.0 | 统一变量和属性的概念与(在程序中

2020-08-11  本文已影响0人  凌川江雪

应用步骤

统一变量和属性

获取统一变量

例程(查询活动统一变量的流程复盘)

统一变量缓冲区对象

  • 可以使用glBufferDataglBufferSubDataglMapBufferRangeglUnmapBuffer等函数
    修改缓冲区对象中的统一变量数据
统一变量缓冲区对象中,统一变量在内存中以如下的形式出现:

std140例程与规范

编程统一变量块时,应该注意如下的限制:

  • 顶点或者片段着色器使用的最大活动统一变量块的数量
    可以分别用带GL_MAX_VERTEX_UNIFORM_BLOCKS
    GL_MAX_FRAGMENT_UNIFORM_BLOCKS参数的glGetIntegerv查询,
    所有实现中最小的支持数量为12;

  • 程序中所有着色器 使用的最大活动统一变量块的数量
    可以用带GL_MAX_COMBINED_UNIFORM_BLOCKS参数的glGetIntegerv查询,
    所有实现中最小的支持数量为24;

  • 每个统一变量缓冲区最大可用存储量可以
    用带GL_MAX_UNIFORM_BLOCK_SIZE参数的glGetInteger64v查询,
    返回的大小以字节数表示。
    所有实现中最小的支持数量为16KB;

如果违反了这些限制,程序就无法链接;

程序示例,
说明如何用前面描述的命名统一变量块LightTransform【std140例程处】
建立一个统一变量缓冲区对象
【思路:
自定义绑定点关联,
创建缓冲区实例对象
缓冲区实例对象绑定到与关联的绑定点,即用建立了一个统一变量缓冲区对象
【!!!!!!
注意注释,关于代码的功能,注释写的很清楚
!!!!!!】

可以看到glBindBufferBaseAPI 二参要传入的是
GLuint index | (准备要跟 程序实例中的统一变量缓冲区绑定点 进行绑定的)绑定索引】,
而实际上 代码运用中,
传入的数值
跟传给glUniformBlockBindingAPI 第三个参数一样
GLunit blockBinding | 统一变量缓冲区对象绑定点】,
都是【bindingPoint | 绑定点】,
也就是它们两个形参位置,其实是传入的是一个东西;

因为glUniformBlockBindingAPI 第三个参数
自定义的一个与索引相关联的统一变量缓冲区绑定点
这个uniform block【统一变量块】
跟它的索引、跟这个统一变量缓冲区绑定点 !三者!是【相互关联】的;


glBindBufferBase二参
即是这个uniform block【统一变量块】对应的(统一变量缓冲区)绑定点
glBindBufferBase便是
buffer实例(的id)【三参】绑定到绑定点(bindingPoint)【二参】上来
Bind the 【buffer object】 to the 【uniform block binding point】

获取和设置属性










参考自:

上一篇 下一篇

猜你喜欢

热点阅读