【问题标题】:Is it possible to *retrieve* integer data from shader code?是否可以从着色器代码中*检索*整数数据?
【发布时间】:2010-11-13 20:13:03
【问题描述】:

我有一个简单的问题要问.. 这是您在将着色器与 XNA 一起使用时了解的第一件事之一,您可以通过 Effect.Parameters 函数将变量从 C# 传递到着色器代码。例如:

Effect.Parameters["shaderVariable"].SetValue(someValue);

在上述行中,您将存储在“someValue”中的值发送到着色器变量“shaderVariable”..

我们也可以反过来吗?例如,您想调试着色器代码的内部工作,并想将一些数值数据发送回您的 C# 应用程序,那么是否还有任何类似但相反的关系函数可用?

【问题讨论】:

    标签: xna shader


    【解决方案1】:

    不是真的。问题是每个像素执行一次像素着色器,每个顶点执行一次顶点着色器。因此,当您绘制时,您可能有数百个程序实例可供选择,那么您如何知道要从哪个实例中获取输出值?

    从着色器获取输出的唯一真正方法是通过它最终输出的图像(GPGPU 除外)。

    但是 - 如果您只想进行着色器调试,请在 DirectX SDK 中使用 PIX

    【讨论】:

      【解决方案2】:

      图形管道只会向前,CPU -> Vertex -> Pixel -> Frame。如果您要检查像素着色器中的值,只需稍微修改着色器,使其将该值作为颜色返回。例如,您可以将 texCoord 的 xy 值作为图像中的红色和绿色通道返回。

      【讨论】:

        【解决方案3】:

        是的,您可以从着色器中获取数据(至少在 XNA 4.0 中),例如:

        var projection = <your effect>.Parameters["projection"].GetValueMatrix();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-05-11
          • 1970-01-01
          • 2012-05-12
          • 1970-01-01
          • 2010-11-25
          • 2018-12-17
          • 1970-01-01
          相关资源
          最近更新 更多