2010-11-13 33 views
2

我有一个简单的问题要问..当你使用XNA使用它们,你可以通过Effect.Parameters函数将变量从C#传递给着色器代码时,它首先了解着色器。例如:是否可以从着色器代码中检索*整数数据?

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

在上面的线,你将存储在“someValue中”着色器变量“shaderVariable”的值..

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

回答

4

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

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

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

0

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

0

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

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