Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ DirectX后处理着色器_C++_Directx_Shader - Fatal编程技术网

C++ DirectX后处理着色器

C++ DirectX后处理着色器,c++,directx,shader,C++,Directx,Shader,我有一个简单的应用程序,我需要让用户选择一个着色器(.fx-HLSL或汇编文件,可能有多个过程,但全部和唯一的像素着色器)并预览它 应用程序运行时,着色器列表出现,一个按钮启动“预览窗口” 从该预览窗口(其中包含DirectX视口)中,用户选择一个图像,着色器将在该图像上运行并显示。只有一帧需要渲染(不是实时渲染) 我设置了一个顶点/像素着色器组合,它使用一个四边形并将其渲染到屏幕上,使用所选图像进行纹理处理。这很好用。 然后,我需要在第一个效果的输出上运行另一个效果,纯像素着色器,并将最终图像

我有一个简单的应用程序,我需要让用户选择一个着色器(.fx-HLSL或汇编文件,可能有多个过程,但全部和唯一的像素着色器)并预览它

应用程序运行时,着色器列表出现,一个按钮启动“预览窗口” 从该预览窗口(其中包含DirectX视口)中,用户选择一个图像,着色器将在该图像上运行并显示。只有一帧需要渲染(不是实时渲染)

我设置了一个顶点/像素着色器组合,它使用一个四边形并将其渲染到屏幕上,使用所选图像进行纹理处理。这很好用。 然后,我需要在第一个效果的输出上运行另一个效果,纯像素着色器,并将最终图像(后处理)显示到屏幕上。这根本不起作用

在过去的几天里,我一直试图让它工作,但没有明显的原因,用于渲染每个效果的相同代码块只渲染第一个效果。我可以将第二个着色器文件作为第二个过程添加到第一个着色器文件中,并且它运行得非常完美(尽管完全违背了我预览用户创建的着色器的目标)。当我尝试使用第二个效果(加载和编译都很好)时,它什么也不做。 我已经获取了第一个着色器(使用GetRenderTargetData)的结果,并将它们放置在纹理和曲面(destTex和destSur)中,然后将该纹理设置为第二个过程的输入(使用dev->SetTexture和更高版本的effect->SetTexture(“thisframe”,destTex))

所有调用成功,效果编译,纹理加载,四边形绘制,但效果不可见。 起初我怀疑是设备(使用软件顶点处理创建)导致了问题,但事实似乎并非如此(我尝试了硬件和混合)。 此外,使用HAL和REF设备(这不是问题,因为应用程序无论如何都不是实时的),第二个着色器不可见。
一切都是用C++编写的Direct3D 9。

< P>必须有某种顶点输入和顶点处理(固定函数或着色器),以便像素着色器运行。是否提供顶点着色器,如果是,是否确定它符合像素着色器的预期?你的抽签电话是什么样子的


在尝试使用用户效果时,可能值得查看应用程序的PIX跟踪,以查看设备状态。

首先创建一个纹理,然后将第一个着色器直接渲染到该纹理中。最后使用纹理作为Backbuffer的输入渲染第二个着色器。

每次渲染四边形后,请尝试清除深度模具缓冲区