是否禁止在片段着色器中更改in-variable的值?当我尝试将新值设置为“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语句中用一些任意值初始化它,那就没有错误。
答案 0 :(得分:5)
GLSL 4.20 spec, Page 38, Section 4.3.4: Input Variables:
使用中的存储限定符声明着色器输入变量。它们构成了OpenGL管道的前几个阶段和声明着色器之间的输入接口。输入变量必须在全局范围内声明。在着色器执行开始时,将前一个管道阶段的值复制到输入变量中。 在着色器执行期间无法写入声明为输入的变量。