gpt4 book ai didi

c++ - DirectX 后处理着色器

转载 作者:行者123 更新时间:2023-11-30 04:40:36 25 4
gpt4 key购买 nike

我有一个简单的应用程序,我需要让用户在其中选择一个着色器(.fx HLSL 或程序集文件,可能有多个 channel ,但只有像素着色器)并进行预览。

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

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

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

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

最佳答案

每次渲染四边形后尝试清除深度模板缓冲区。

关于c++ - DirectX 后处理着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1045675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com