不确定如何解决着色器错误?

时间:2013-11-21 14:51:25

标签: java opengl glsl vertex-shader

错误:

ERROR: 0:1: 'basicVertex120' : syntax error parse error

代码:

#version 120

attribute vec3 position;
attribute vec2 texCoord;

varying vec2 texCoord0;

uniform mat4 transform;

void main()
{
    gl_Position = transform * vec4(position, 1.0);
    texCoord0 = texCoord;
}

我从这里开始关注教程:http://www.youtube.com/watch?v=8n1GV99FJ2Y&list=PLEETnX-uPtBXP_B2yupUKlflXBznWIlL5&index=11

他的教程中的所有代码都在这里:https://github.com/BennyQBD/3DGameEngine

我并没有完全遵循它,但就着色器类而言,它完全相同。如果您需要张贴任何其他代码......请告诉我。

我仍然是OpenGL 2.0+和GLSL的新手,并试图弄清楚如何知道哪一行有错误。是否有像GL11.glGetError();?

这样的顶点着色器

我可以使用任何工具或文档,我可以浏览以尝试解决问题吗?

我真的想学习自己解决这些问题。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

当人们尝试逐行读取着色器文件而不是一次读取整个文件时,这种情况经常发生。他们经常忘记在读取行缓冲文件时,会从每行中删除行结尾。因此,一切都在第1行结束,预处理器认为整个着色器是一个可笑的长#version指令。

如果您逐字地遵循该代码,这不应成为问题,但您永远不会知道。

我会考虑从GL查询着色器字符串并查看 实际 解析的内容,以及编译器日志:

GLsizei src_len,
        log_len;

glGetShaderiv (shader, GL_INFO_LOG_LENGTH,      &log_len);
glGetShaderiv (shader, GL_SHADER_SOURCE_LENGTH, &src_len);

GLchar* src_str = calloc (src_len + 1, sizeof (GLchar));
GLchar* log_str = calloc (log_len + 1, sizeof (GLchar));

glGetShaderInfoLog (shader, log_len, NULL, log_str);
glGetShaderSource  (shader, src_len, NULL, src_str);

printf ("Shader %d\n",      shader);
printf (" >> Info:   %s\n", log_str);
printf (" >> Source: %s\n", src_str);

free (log_str);
free (src_str);

我意识到这是用C写的;我不熟悉Java绑定,但一般过程是一样的。