我有一个简单的应用程序,我需要让用户选择一个着色器(.fx HLSL或程序集文件,可能有多遍,但只有所有像素着色器)并预览它。DirectX后期处理着色器
应用程序运行,着色器列表出现,并且一个按钮启动“预览窗口”。 从这个预览窗口(里面有一个DirectX视口),用户选择一个图像,着色器在该图像上运行并显示。只需渲染一个帧(不是实时的)。
我有一个顶点/像素着色器组合设置,需要一个四边形并将其渲染到屏幕上,并使用所选图像进行纹理化。这工作完美。 我需要在第一个效果的输出上运行另一个效果,纯像素着色器,并将最终图像(后处理)显示在屏幕上。这根本不起作用。
我已经尝试了几天,以获得它的工作,但没有明显的原因,相同的代码块用于呈现每个效果只呈现第一个。我可以在第一个着色器文件中添加第二个着色器文件作为第二遍,并且它可以完美运行(尽管完全无法实现预览用户创建的着色器的目标)。当我尝试使用第二个效果(加载和编译很好)时,它什么都不做。 我已经将第一个着色器的结果(使用GetRenderTargetData)并将它们放置在纹理表面(destTex和destSur)中,然后将该纹理设置为第二遍的输入(使用dev-> SetTexture和后来的效果 - > SetTexture(“thisframe”,destTex))。
所有调用都成功,效果编译,纹理加载,四边形绘制,但效果不可见。 我最初怀疑该设备(使用软件顶点处理创建)导致了这个问题,但似乎并非如此(我尝试使用硬件并混合使用)。 此外,使用HAL和REF设备(不是问题,因为该应用程序不是实时的),第二个着色器不可见。 一切都是用C++编写的Direct3D 9.