2017-02-28 227 views
0

我正在为openGl写一个顶点着色器。这是我的代码:GLSL错误:非法非ASCII字符

#version 150 

in vec4 vPosition; 
in vec3 vNormal; 

out vec3 fN; 
out vec3 fE; 
out vec3 fL; 

uniform mat4 model_matrix; 
uniform mat4 view_matrix; 
uniform mat4 proj_matrix; 

uniform vec4 lightPos; 

void main() 
{ 
    vec3 pos = (view_matrix * model_matrix * vPosition).xyz; 
    vec3 lightPosInCam = (view_matrix * lightPos).xyz; 

    fN = normalize(view_matrix * model_matrix * vec4(vNormal,1.0)).xyz; 
    fE = normalize(vec3(0,0,0) - pos); 
    fL = normalize(lightPosInCam.xyz - pos); 

    gl_Position = proj_matrix*view_matrix*model_matrix*vPosition; 
} 

然而,当我运行我的程序,这似乎是错误说,有一些非ASCII字符我}后,因为在控制台打印:

#version 150 

in vec4 vPosition; 
in vec3 vNormal; 

out vec3 fN; 
out vec3 fE; 
out vec3 fL; 

uniform mat4 model_matrix; 
uniform mat4 view_matrix; 
uniform mat4 proj_matrix; 

uniform vec4 lightPos; 

void main() 
{ 
     vec3 pos = (view_matrix * model_matrix * vPosition).xyz; 
     vec3 lightPosInCam = (view_matrix * lightPos).xyz; 

     fN = normalize(view_matrix * model_matrix * vec4(vNormal,1.0)).xyz; 
     fE = normalize(vec3(0,0,0) - pos); 
     fL = normalize(lightPosInCam.xyz - pos); 

     gl_Position = proj_matrix*view_matrix*model_matrix*vPosition; 
}═════════════════════════ 
Printed Shader Read Status 
vshader_hw5.glsl failed to compile: 
ERROR: 0:26: '' : illegal non-ASCII character (0xcd) 
ERROR: 0:26: '' : illegal non-ASCII character (0xcd) 
ERROR: 0:26: '' : illegal non-ASCII character (0xcd) 
ERROR: 0:26: '' : illegal non-ASCII character (0xcd) 
ERROR: 0:26: '' : illegal non-ASCII character (0xcd) 
ERROR: 0:26: '' : illegal non-ASCII character (0xcd) 
+1

对于我们所知道的你的着色器加载器是fubar。在[mcve]中编辑。 – genpfault

+2

也许显示您正在使用的代码将着色器源提供给GL?似乎也许你的字符串没有正确的空终止,或者你传递了不正确的长度。 – MuertoExcobito

+0

一些看不见的unicode字符或控制代码也是一个选项... – Spektre

回答

1

However, when I run my program, it seems like the error says there is some nonASCII character after my }, because in console prints:

这是在OpenGL的着色器源字符串未正确终止零字节(NUL)和/或传递的缓冲区长度与源字符串的长度不匹配时遇到的典型错误。

解决方案:如果您没有明确传递长度(即传递NULL参数为length),请确保源字符串正确地以零终止。否则,请确保长度正确匹配源字符串缓冲区的长度。