2013-10-18 28 views
0

我想用ubuntu上的頂點着色器編寫一個簡單的程序,它是這樣的。無法編譯着色器,我需要在Intel平臺上使用ubuntu的openGL驅動程序嗎?

const GLchar* vertexSource = (const GLchar*) "#version 130 core \n in vec2 position; \n void main() \n { \n gl_Position = vec4(position, 0.0, 1.0); \n }"; 

這是我的着色器,和我編譯它像這樣,在程序

GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER); 
glShaderSource(vertexShader, 1, &vertexSource, 0); 
glCompileShader(vertexShader); 

我試圖通過在glShaderSourceFunction頂點着色器字符串的長度,但是這是給我的同樣的錯誤。

但glGetShaderiv()給我編譯代碼時出錯。我無法理解這裏出了什麼問題。

我錯過了什麼嗎?或者由於驅動程序的取消而引發錯誤?

我在我的英特爾i5 windows 8系統上安裝了Ubuntu 12.04,這是否意味着我在Ubuntu上沒有openGL圖形驅動程序? 有人可以請我指出我可以得到他們的地方嗎?另外,當驅動程序不存在時,openGL應該用軟件完成整個事情嗎?

+2

什麼是着色器的信息日誌的輸出? –

+0

這是... 0:1(15):預處理器錯誤:語法錯誤,意外的IDENTIFIER,期待NEWLINE –

+0

如果您沒有OpenGL驅動程序,那麼在嘗試調用glCreateShader(...)時會崩潰。 '。這是一個OpenGL 2.0功能,除OS X之外,沒有其他平臺提供開箱即用的OpenGL 2.0+軟件回退實現;你可以通過Mesa在Linux上獲得它,但是你必須在大多數發行版上設置這個包。當像Microsoft Windows這樣的平臺上沒有硬件驅動程序時,它將回落到OpenGL 1.1的軟件實現中。 OS X實際上是比規則更多的例外。 –

回答

2
#version 130 core 
      ^^^^ wat 

OpenGL 3.0中沒有Core上下文。

+0

Woah !!所以這是問題!謝謝 –

0

你可以得到你的着色器編譯日誌與下面的代碼:

GLint log_len; 
glGetShaderiv(vertexshader, GL_INFO_LOG_LENGTH, &log_len); 
GLchar* comp_log = new GLchar[log_len + 1]; 
glGetShaderInfoLog(vertexshader, log_len, NULL, comp_log); 
std::cout << "Shader compilation result: " << comp_log << std::endl; 
delete[] comp_log; 
相關問題