根据khronos.org,的说法,GL_MAX_UNIFORM_BLOCK_SIZE指的是均匀块的基本机器单元中的最大尺寸。该值必须至少为16384。
我有一个片段着色器,在这里我声明了一个统一的接口块,并附加了一个统一的缓冲区对象。
#version 460 core
layout(std140, binding=2) uniform primitives{
vec3 foo[3430];
};
...如果我使用以下方法查询GL_MAX_UNIFORM_BLOCK_SIZE的大小:
GLuint info;
glGetUniformiv(shaderProgram.getShaderProgram_id(), GL_MAX_UNIFORM_BLOCK_SIZE, reinterpret_cast<GLint *>(&info));
cout << "GL_MAX_UNIFORM_BLOCK_SIZE: " << info << endl;我得到: GL_MAX_UNIFORM_BLOCK_SIZE: 22098。可以,但例如:当我将数组的大小更改为3000 (而不是3430)时,我得到了GL_MAX_UNIFORM_BLOCK_SIZE: 21956
据我所知,GL_MAX_UNIFORM_BLOCK_SIZE应该是一个常数,取决于我的GPU。那么,当我修改数组的大小时,它为什么会改变呢?
发布于 2020-04-10 13:35:07
GL_MAX_UNIFORM_BLOCK_SIZE被正确地用glGetIntegerv查询。它是由实现定义的常量,它告诉您实现定义的最大值。glGetUniform返回给定程序中统一的值。您可能得到了某种类型的OpenGL错误,因为GL_MAX_UNIFORM_BLOCK_SIZE不是一个有效的统一位置,因此您的整数从未写入。所以你只是在读取未初始化的数据。
https://stackoverflow.com/questions/61138962
复制相似问题