是否可以从着色器代码中检索*整数数据?

时间:2010-11-13 20:13:03

标签: xna shader

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

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

在上面一行中,您将存储在'someValue'中的值发送到着色器变量'shaderVariable'。

我们也可以这样做吗?例如,您想要调试着色器代码的内部工作,并希望将一些数字数据发送回您的C#应用​​程序,那么是否有任何类似但相反的关系功能可用?

3 个答案:

答案 0 :(得分:4)

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

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

但是 - 如果你想要做的就是着色器调试,请在DirectX SDK中使用PIX

答案 1 :(得分:0)

图形管道只会前进,CPU - >顶点 - >像素 - >帧。如果您想要检查的像素着色器中有一个值,只需稍微修改着色器,以便将该值作为颜色返回。例如,您可以将texCoord的xy值作为图像中的红色和绿色通道返回。

答案 2 :(得分:0)

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

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