0
我正在學習OpenGL並嘗試做一些簡單的紋理。因此我提供我的紋理座標作爲屬性。無法鏈接glsl頂點着色器
我有一個奇怪的錯誤與我的頂點着色器:
#version 150
in vec2 position;
in vec3 color;
in vec2 texcoord;
out vec3 Color;
out vec2 Texcoord;
void main()
{
Color = color;
Texcoord = vec2 (1.0, 0.5); /* just for debugging hardcode texcords */
gl_Position = vec4(position, 0.0, 1.0);
}
着色器編譯罰款,但是當我嘗試到着色器屬於glGetProgramInfoLog程序鏈接()的日誌說:
ERROR: Compiled vertex shader was corrupt.
當我刪除
in vec2 texcoord;
錯誤消失。無論我如何命名屬性都無關緊要。只要我添加第三個我得到這個錯誤。
沒有編譯錯誤。只是這個鏈接錯誤。
我在OS X 10.8.3上使用了OpenGL 3.2 Core Context。我使用GLEW。
更新:
現在我可以鏈接此:
#version 150
in vec2 position;
in vec3 color;
in vec2 texcoord;
out vec3 Color;
out vec2 Texcoord;
void main()
{
Color = color;
gl_Position = vec4(position, 0.0, 1.0);
}
,但只要我添加
Texcoord = texcoord;
的主要功能着色器被損壞。我很絕望。這是什麼?
你有片段着色器中有'vec2 Texcoord'嗎? (我不確定,但可能是名稱是相同的問題,除了字母的情況下,我總是選擇不同的名稱),而編譯未使用的變量將被刪除,這將防止鏈接錯誤。 –
如果您將「texcoord」重命名爲其他內容,會發生什麼情況? – bwroga
它可以幫助我們,如果我們可以看到你的片段着色器以及編譯/鏈接你的程序的重要OpenGL調用的一小段摘錄。只要閱讀['#150']的規範(http://www.opengl.org/registry/doc/GLSLangSpec.1.50.11.pdf),我看不到只有你的頂點着色器有什麼問題。 – Hydronium