gpt4 book ai didi

c - glGetUniform 为事件制服返回 -1

转载 作者:太空宇宙 更新时间:2023-11-03 23:50:09 24 4
gpt4 key购买 nike

我有这段代码调用 glGetUniform 位置,但它返回 -1,即使我在我的顶点着色器中使用了制服。我没有从 glGetErrorglGetProgramInfoLogglGetShaderInfoLog 收到任何错误,着色器/程序都已成功创建。我也只在编译和链接后才调用它。

int projectionUniform = glGetUniformLocation(shaderProgram, "dfProjection");

#version 410

uniform float dfRealTime;
uniform float dfGameTime;
uniform mat4 dfProjection;
uniform mat4 dfModelView;

layout(location = 0) in vec3 vertPosition;
layout(location = 1) in vec4 vertColor;

smooth out vec4 color;

out vec4 position;

void main() {
color = vertColor;

position = (dfModelView * dfProjection) * vec4(vertPosition, 1.0);
}

这是片段着色器:

smooth in vec4 color;
out vec4 fragColor;

void main() {
fragColor = color;
}

最佳答案

存在三种可能性:

  • 您在 glGetUniformLocation 中拼错了 dfProjection,但看起来并非如此。
  • 在使用 glUseProgram 调用 glGetUniformLocation 之前,您没有绑定(bind)正确的程序。
  • 或者您没有在片段着色器中使用 position,这意味着 dfProjection 并不是真正活跃的。

代码中的另一件事似乎是您正在将着色器句柄传递给 glGetUniformLocation,您应该传递链接的程序 句柄。

在你编辑之后你没有在你的片段着色器中使用位置,

smooth in vec4 color;
out vec4 fragColor;
in vec4 position;
void main() {
// do sth with position here
fragColor = color*position;
}

请记住,您仍然需要使用 gl_Position 以便片段着色器知道最终的片段位置。但我是在回答为什么未检测到统一变量的问题。

关于c - glGetUniform 为事件制服返回 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21982031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com