2013-01-31 44 views
1

是否禁止更改片段着色器內部的變量值?下面的代碼崩潰什麼時候我嘗試設置一個新的值設置爲「doseValue」:更改片段着色器內部的變量

const GLchar *point_fragment_shader = 
"#version 420\n" 
"" 
"/* Per Fragment Input Attributes */" 
"in float doseValue;" 
"in float alphaValue;" 
"in vec2 displayUncertaintyByChangedColor;" 
"" 
"/* Uniform Attributes */" 
"uniform float minDisplayDoseValue;" 
"uniform int pointVisualizationMode;" 
"" 
"/* Per Fragment Output Values */" 
"out vec4 out_color;" 
"" 
"void main()" 
"{" 
" " 
" /* Discard all Points whose dose value is below the minimum */" 
" if(doseValue < minDisplayDoseValue)" 
" {" 
"  discard;" 
" }" 
" else" 
" {" 
"  if(displayUncertaintyByChangedColor.x == 1.0)" 
"  {" 
"   doseValue = 500.0;" 
"  }" 
" ..." 

的VEC2內部,所述第一組分是0.0或1.0,第二個是一些浮點數。如果我在第二個if語句中設置了一個新變量並用一些任意值初始化它,那麼就沒有錯誤。

+1

[嘗試此](http://stackoverflow.com/a/13874526/44729)內聯GLSL。 – genpfault

回答

4

GLSL 4.20 spec, Page 38, Section 4.3.4: Input Variables

着色器輸入變量的聲明與存儲預選賽。它們構成了OpenGL流水線的前幾階段和聲明着色器之間的輸入接口。輸入變量必須在全局範圍內聲明。來自前一個流水線階段的值在着色器執行開始時被複制到輸入變量中。 在着色器執行期間,聲明爲輸入的變量不能寫入。

+0

非常感謝! – Schnigges

相關問題