有关统一缓冲区对象的问题

皮尔佩尔

是否可以保证在多个着色器程序中将统一块声明为相同,例如

uniform Matrices
{
    mat4 ProjectionMatrix;
    mat4 CameraMatrix;
    mat4 ModelMatrix;
};

它具有与返回的相同的块索引glGetUniformBlockIndex(program, "Matrices")吗?

如果答案是肯定的,那么我能够一次查询该块的索引,并将其用于包含该块的所有着色器程序,对吗?

第二个问题:会ProjectionMatrixCameraMatrixModelMatrix,总是有相同的布局顺序在内存中,分别?我问这个问题是因为我阅读的教程使用了以下功能

// Query for the offsets of each block variable
const GLchar *names[] = { "InnerColor", "OuterColor",
"RadiusInner", "RadiusOuter" };
GLuint indices[4];
glGetUniformIndices(programHandle, 4, names, indices);
GLint offset[4];
glGetActiveUniformsiv(programHandle, 4, indices,
GL_UNIFORM_OFFSET, offset);

而且我不确定是否真的需要,只要我知道制服区中的制服顺序即可。

legends2k

ProjectionMatrixCameraMatrixModelMatrix,总是有相同的布局顺序在内存中,分别?

否。这是标准规定的内容(强调我的意思):

如果pnameUNIFORM_BLOCK_DATA_SIZE则以基本机器单位为单位,返回与实现相关的最小总缓冲区对象大小,该大小必须将所有活动的制服保持在由uniformBlockIndex标识的统一块中既不能保证也不能期望给定的实现将紧密包装在缓冲区对象中的统一值排列在一起。唯一的例外是std140统一的块布局,它保证了特定的打包行为,并且不需要应用程序查询偏移和步幅。

我不确定是否真的需要,只要我知道制服区中的制服顺序即可。

因此,是的,作者正确的假设假设布局是连续的,并且做了明智的事情(保证在所有实现中始终有效):获取统一的索引并分别分配其值。

指定layout(std140)可以解决问题,对吗?

是的,您可以避免同时使用统一缓冲区对象和来查询位置并上传数据std140但是,请确保您了解其对齐要求。该信息在其ARB_uniform_buffer_object规范中有详细说明有关示例的详细处理,请参阅OpenTK关于使用std140布局规范的统一缓冲区对象(UBO)的文章

是否可以保证如果在多个着色器程序中声明的统一块相同,则其返回的块索引是否相同glGetUniformBlockIndex(program, "Matrices")

否。我搜索了OpenGL 3.3规范,该规范不提供此类保证。从标准的角度来看,统一的块(默认块或命名块)与程序,周期关联。在规范中,不存在统一程序块的存在/关联。

因为不能保证统一的块在不同的着色器程序中具有相同的索引,所以这意味着我glBindBufferBase()每次切换程序时都需要调用,对吗?

是的,请参见ARB_uniform_buffer_object的规范以获取示例。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有关统一问候语的文档

来自分类Dev

使用统一缓冲区对象的批处理渲染

来自分类Dev

JOGL中具有顶点缓冲区对象的问题

来自分类Dev

如何通过使用统一的缓冲区对象和实例渲染来绘制多个对象?

来自分类Dev

更新统一缓冲区对象会提高性能吗?

来自分类Dev

OpenGL / GLSL-使用缓冲区对象获得统一的数组值

来自分类Dev

opengl:将数组类型加载到统一缓冲区对象

来自分类Dev

统一缓冲区对象未对齐。GLSL存取中断

来自分类Dev

OpenGL统一缓冲区对象(数组)彼此跳过Vec2

来自分类Dev

GLSL-统一缓冲区对象怪异行为

来自分类Dev

有关C中文件流和缓冲区的问题

来自分类Dev

顶点缓冲区绑定索引和统一缓冲区绑定点?

来自分类Dev

使用uvec3的统一缓冲区[]

来自分类Dev

更新WebGL 2中的统一缓冲区数据?

来自分类Dev

更新WebGL 2中的统一缓冲区数据?

来自分类Dev

同步Metal中的统一缓冲区更新

来自分类Dev

glDrawElements索引缓冲区对象索引问题

来自分类Dev

将缓冲区转换为JS对象的问题

来自分类Dev

OpenGL缓冲区问题

来自分类Dev

同一顶点缓冲区对象中有多个网格?

来自分类Dev

mio中的缓冲区类型有问题

来自分类Dev

mio中的缓冲区类型有问题

来自分类Dev

mio中的缓冲区类型有问题

来自分类Dev

Simulink:具有范围的模拟时间缓冲区问题

来自分类Dev

绑定FBO(帧缓冲区对象)的成本有多高

来自分类Dev

是否有最大允许数量的帧缓冲区对象?

来自分类Dev

Vulkan:更新统一变量而不重置命令缓冲区

来自分类Dev

有关数据包和缓冲区大小的TCP套接字编程

来自分类Dev

Android OpenSLES缓冲区饥饿问题

Related 相关文章

热门标签

归档