2011-03-09 36 views
1

我有一种情况,每次旋转时都需要将一些算法应用于我的纹理。通过Texture2D执行图像处理算法的有效方法

我的问题是 - 在XNA中应用图像处理算法的最佳方法是什么?

现在纹理是一个RenderTarget2D,算法用它的像素执行一些操作并将它们设置回RenderTarget2D。这种方法导致我的应用程序终止,它的性能非常糟糕。

我通过stackoverflow搜索,但没有发现任何相关的主题。 我也读过这篇文章http://blogs.msdn.com/b/shawnhar/archive/2008/04/14/stalling-the-pipeline.aspx并了解我的方法有多糟糕。

+0

这取决于算法是什么,应用它的频率以及何时需要应用它(编译时间,加载时间,运行时间?)。你能提供更多细节吗? – 2011-03-10 06:47:46

+0

Andrew,这个算法被应用在运行时(每次纹理旋转时)。考虑到纹理可以在每次更新时旋转,这意味着算法应该在每次绘制之前应用。 – zavolokas 2011-03-10 08:14:10

+1

真的这是一个性能问题。从渲染目标读取是一种选择。使用像素着色器通常是最快的方法 - 但有很多限制 - 然后用于克服这些限制的一系列技术。在我缩小范围之前,我需要了解更多有关该算法的信息。另外,你的意思是“旋转”?你在移动顶点吗?纹理坐标?或者更复杂的东西? – 2011-03-10 13:56:34

回答

1

根据您可能需要的操作,然后通过HLSL着色器进行操作将是一个非常好的主意。

着色器确实是正确的选择,因为您可以利用GPU具有的多个内核,并且不需要解析rendertarget中的数据;数据在进入屏幕的过程中不会造成任何拖延。