2013-03-29 47 views
0

我的顯卡的一些信息:
GL_RENDERER:英特爾(R)G41 Express芯片組
OpenGL_VERSION:2.1.0 - 建立8.15.10.1986
GLSL_VERSION:1.20 - 英特爾構建8.15.10.1986爲什麼GLSL着色器無法在Intel G41上工作?

頂點着色器1:

#version 110 
attribute vec3 vertexPosition_modelspace; 

varying vec3 normal; 
varying vec3 vertex; 

void light(inout vec3 ver, out vec3 nor); 

void main() 
{ 
    gl_Position = vec4(vertexPosition_modelspace, 1.0); 
    light(vertex, normal); 
} 

頂點着色器2:

#version 110 

void light(inout vec3 ver, out vec3 nor) 
{ 
    ver = vec3(0.0,1.0,0.0); 
    //vec3 v = -ver; // wrong line 
    nor = vec3(0.0,0.0,1.0); 
    //float f = dot(ver, nor); // wrong line 
} 

片段着色器:

#version 110 

varying vec3 normal; 
varying vec3 vertex; 

void main() 
{ 
    gl_FragColor = vec4(vertex, 1.0); 
} 

這些着色器效果很好,如果兩條線在第二頂點着色器評論。但是,一旦啓用其中一個,我們會收到錯誤。該錯誤發生在opengl函數glDrawArrays

看來變量out/inout不能用作正確的值。
我已經英特爾高清顯卡3000這OpenGL的版本是3.1 GLSL的版本是1.4 ,且運行良好運行同一程序。這是英特爾驅動程序的錯誤還是我錯誤使用?

+2

你會得到什麼錯誤?你有着色器編譯錯誤嗎?你是否正確地將這些着色器連接在一起? –

+0

當執行glDrawArrays()時,我得到一個錯誤對話框(Visual Studio 2010)。 「xx.exe中0x10173169未處理的異常:0xC0000005:寫入位置0xbaadf00d的訪問衝突」。我認爲這些着色器的彙編和鏈接是正確的。這是我找到的同樣的問題。[鏈接](http://stackoverflow.com/questions/14834180/why-does-this-glsl-shader-work-fine-with-a-geforce-but-flickers-strangely- on-an) – wan

回答

-1

因爲intel g41是一個非常弱的GPU。 通過它的唯一方法是升級你的GPU。

+1

如果你可以添加這種信息作爲評論而不是答案,那會更好。 –