我正在用OpenGL编写自己的着色器,而且我难以理解为什么这个着色器不能编译。其他人可以看看吗?为什么GLSL Vertex Shader不能编译?
我传递什么作为一个顶点是在这种格式2个漂浮(如分离字节):
Float 1:
Byte 1: Position X
Byte 2: Position Y
Byte 3: Position Z
Byte 4: Texture Coordinate X
Float 2:
Byte 1: Color R
Byte 2: Color G
Byte 3: Color B
Byte 4: Texture Coordinate Y
这是我的着色器:
in vec2 Data;
varying vec3 Color;
varying vec2 TextureCoords;
uniform mat4 projection_mat;
uniform mat4 view_mat;
uniform mat4 world_mat;
void main()
{
vec4 dataPosition = UnpackValues(Data.x);
vec4 dataColor = UnpackValues(Data.y);
vec4 position = dataPosition * vec4(1.0, 1.0, 1.0, 0.0);
Color = dataColor.xyz;
TextureCoords = vec2(dataPosition.w, dataColor.w)
gl_Position = projection_mat * view_mat * world_mat * position;
}
vec4 UnpackValues(float value)
{
return vec4(value % 255, (value >> 8) % 255, (value >> 16) % 255, value >> 24);
}
如果您需要更多信息,我很乐意遵守。
请复制粘贴错误信息。 – tibur
如何收到错误信息?当我调用glGetProgramInfoLog时,我得到一个,但这只是“在调用glLinkProgram()之前没有成功编译顶点着色器,链接失败。” – Azzi777
@ Azzi777:有glGetShaderInfoLog,它在glCompileShader失败时起作用。您应该_ALLways_检查着色器对象和程序对象的编译状态。 –