gpt4 book ai didi

c++ - 顶点着色器编译失败,但信息日志中没有消息

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:50:38 25 4
gpt4 key购买 nike

我正在尝试设置一个简单的顶点着色器。当我编译它时,它失败了(根据 GL_COMPILE_STATUS),但是信息日志是空的,从调试的角度来看,我没有任何可以使用的东西。

这是我的代码:

GLuint vertexShader, fragmentShader;

char *code =

"void main(void)\
{\
vec4 a = gl_Vertex;\
a.x = a.x * 0.5;\
a.y = a.y * 0.5;\
gl_Position = gl_ModelViewProjectionMatrix * a;\
}";


int length = strlen(code);

vertexShader = glCreateShader(GL_VERTEX_SHADER);
//fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(vertexShader, 1, &code, &length);

glCompileShader(GL_VERTEX_SHADER);

GLint compiled;
GLint logLength;

glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &compiled);

glGetShaderiv(vertexShader, GL_INFO_LOG_LENGTH , &logLength);
if (logLength > 1)
{
GLchar* compiler_log = (GLchar*)malloc(logLength);
glGetShaderInfoLog(vertexShader, logLength, 0, compiler_log);
printf("%s\n", compiler_log);
free (compiler_log);
}

我知道这很困惑,因为我是着色器的新手,所以我确定我的着色器代码有问题。然而,最让我烦恼的是缺少调试信息。上面的代码导致 compiledGL_FALSE(意味着代码编译失败)和 logLength 为 0(意味着信息日志为空)。是什么赋予了?这不是信息日志的全部意义吗?

最佳答案

glCompileShader 获取从 glCreateShader 返回的着色器编号,而不是着色器类型。

在这种情况下

glCompileShader(GL_VERTEX_SHADER);

应该是

glCompileShader(vertexShader);

关于c++ - 顶点着色器编译失败,但信息日志中没有消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16448487/

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