2012-12-28 60 views
1

我目前正在嘗試編譯GLSL着色器時遇到的錯誤令我沮喪,我成功地設法編譯了兩個着色器,但是當涉及到鏈接它們時,我得到一個錯誤。沒有輸出,但鏈接失敗。GLSL鏈接錯誤

這裏是編譯+鏈接代碼:

GLuint program = NULL; 
GLint compile_ok = GL_FALSE, link_ok = GL_FALSE; 

GLuint vs = glCreateShader(GL_VERTEX_SHADER); 
glShaderSource(vs, 1, &vertCont, NULL); 
glCompileShader(vs); 
glGetShaderiv(vs, GL_COMPILE_STATUS, &compile_ok); 
char logBuf[1024]; 
int len; 
if (0 == compile_ok) 
{ 
    glGetShaderInfoLog(vs, sizeof(logBuf), &len, logBuf); 
    LogMgr::logMessage(LogMgr::CRITICAL, "Error in vertex shader\n", logBuf); 
    return false; 
} 

GLuint fs = glCreateShader(GL_FRAGMENT_SHADER); 
glShaderSource(fs, 1, &fragCont, NULL); 
glCompileShader(fs); 
glGetShaderiv(fs, GL_COMPILE_STATUS, &compile_ok); 
if (!compile_ok) 
{ 
    glGetShaderInfoLog(vs, sizeof(logBuf), &len, logBuf); 
    LogMgr::logMessage(LogMgr::CRITICAL, "Error in fragment shader", logBuf); 
    return false; 
} 

glAttachShader(program, vs); 
glAttachShader(program, fs); 
glLinkProgram(program); 
glGetProgramiv(program, GL_LINK_STATUS, &link_ok); 
if (!link_ok) 
{ 
    glGetShaderInfoLog(vs, sizeof(logBuf), &len, logBuf); 
    LogMgr::logMessage(LogMgr::CRITICAL, "Could not link basic shaders!", logBuf); 
    return false; 
} 
return program; 

這裏是頂點着色器:

#version 330 

layout(location = 0) in vec4 position; 
void main() 
{ 
    gl_Position = position; 
} 

片段着色器:

#version 330 

out vec4 outputColor; 
void main() 
{ 
    outputColor = vec4(1.0f, 0.0f, 1.0f, 1.0f); 
} 

任何線索?

+4

而錯誤信息? –

回答

0

的問題是,我沒有創建程序對象。我添加了這行代碼befor鏈接和它的工作:

program = glCreateProgram(); 
7

您對getShaderInfoLog的調用錯誤。你總是檢查頂點着色器的編譯日誌。這解釋了爲什麼你沒有看到任何錯誤消息。而這正是你得到複製和粘貼代碼;)

對於片段着色器,它應該是:

glGetShaderInfoLog(fs, sizeof(logBuf), &len, logBuf); 

而對於鏈路狀態:

glGetProgramInfoLog(program, sizeof(logBuf), &len, logBuf); 
+0

謝謝!我會嘗試,現在,我忘了改變這件事xD – Alx101

+0

好吧,我改變它後,這就是我得到的鏈接器錯誤:[| [| [| [| [| [| [ | [| [| [| [| [| [| [| [| [| [| [| [| [| [| [| [| [| [| [| [| [| [| [| [| [ | [| [| [| [| [| [| [| [| [| [| [| [| [| [| [| [| [| [| 現在看起來不太好:S 編輯:這裏是一個圖片顯示REAL錯誤文本的鏈接(我不能用它寫的相同方式複製它)https://dl.dropbox.com/ u/38127392/Untitled.png – Alx101

+0

你能否將問題中的代碼更新爲現在的內容? – Thomas