我有一个简单的应用程序,其中我需要让用户选择的着色器(HLSL名为.fx或组件文件,可能与多遍,但所有和仅像素着色器),并进行预览。

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

我有一个顶点/像素着色器组合成立,需要一个四并将其呈现到屏幕,与所选择的图像纹理化。这完美的作品。 我需要再运行另一个效果,纯粹的像素着色器,来自所述第一效果的输出,并且显示最终图像(后处理-)到屏幕上。这并不是在所有的工作。

我试过在过去的几天里得到它的工作,但没有明显的原因,使用相同的代码块,从而使得各实际上只是渲染的第一个。我可以添加第二个着色器文件作为第一个着色器文件中的第二次,它完美地运行(虽然完全违背了我的预览用户创建着色器的目标)。当我尝试使用第二个效应(它加载和编译就好了),它什么都不做。 我已经采取第一着色器(具有GetRenderTargetData)的结果,并放置在它们中的纹理表面和(destTex和destSur),然后设置纹理作为输入用于第二遍的(使用的dev->的SetTexture后来效应 - >的SetTexture( “thisframe”,destTex))。

所有呼叫成功,效果编译,纹理负载,四边形绘制,但效果并不明显。 我怀疑在第一设备(软件顶点处理创建)是造成问题,但似乎并没有这样的情况(我试着用硬件和混合型)。 另外,同时使用HAL和REF设备(不是一个问题,因为该应用不反正实时),即第二着色器是不可见的。 一切都用C ++编写支持Direct3D 9。

有帮助吗?

解决方案

尝试清除以后每次渲染四深度模版缓冲器。

其他提示

首先创建纹理,然后直接使第一着色成质地。最后呈现与该纹理作为输入提供给后备缓冲区第二着色器。

必须有某种输入顶点和顶点的处理(或者是固定的功能或着色器),以便为要运行的像素着色器。您提供的顶点着色器,如果是的话,你肯定它的像素着色器所期待的?什么是您的绘制调用会是什么样子?

这可能值得你的应用程序的PIX跟踪,看看哪些设备状态正在尝试使用的用户时生效。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top