【发布时间】:2012-01-09 20:37:31
【问题描述】:
我正在尝试学习如何使用统一缓冲区对象,阅读 OpenGL Superbible 5。我的着色器中有一个统一块:
layout(std140) uniform SkeletonBlock
{
vec3 position[64];
vec4 orientation[64];
} Skeleton;
现在我获取索引的代码是:
const GLchar* uniformNames[2] =
{
"SkeletonBlock.position",
"SkeletonBlock.orientation"
};
GLuint uniformIndex[2];
glGetUniformIndices(shaderProgram, 2, uniformNames, uniformIndex);
由于某种原因,这个电话给了我一个非常高的指数(4294967295,始终如一),我不知道为什么。我觉得我错过了一些明显的东西。 OpenGL 正在报告一个活动的统一块,这是正确的,最多允许 15 个。在这部分代码之前或之后也没有错误标志处于活动状态。有什么建议可能会出错吗?
【问题讨论】:
-
glGetError()返回什么?那个非常高的索引是-1的代名词,这让我觉得 OpenGL 试图告诉你一些事情。 -
在调用 glGetUniformIndices() 前后,glGetError() 没有返回错误。
-
位置 -1 表示着色器中不存在制服。您是否在实际着色器中的任何地方使用这些制服? GLSL 编译器可能正在优化它们。
-
是的,它们用于计算顶点的最终位置。感谢您的澄清,但不知道这一点。 :)