错误:
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();?
这样的顶点着色器我可以使用任何工具或文档,我可以浏览以尝试解决问题吗?
我真的想学习自己解决这些问题。我怎么能这样做?
答案 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绑定,但一般过程是一样的。