【问题标题】:Change in-variable inside fragment shader更改片段着色器内部的变量
【发布时间】:2013-01-31 15:23:54
【问题描述】:

是否禁止在片段着色器中更改不变量的值?当我尝试将新值设置为“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 语句中使用任意值对其进行初始化,则不会出错。

【问题讨论】:

标签: opengl shader


【解决方案1】:

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

着色器输入变量使用存储限定符in声明。它们形成了 OpenGL 流水线的先前阶段和声明着色器之间的输入接口。输入变量必须在全局范围内声明。在着色器执行开始时,来自前一个管道阶段的值被复制到输入变量中。 在着色器执行期间无法写入声明为输入的变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多