DirectX9 中的多个呈现目标
Multiple Render Targets in DirectX9
我正在尝试在DirectX9中实现非常基本的延迟着色。我现在只能使用 2 个渲染目标(后台缓冲区和另一个纹理)。所以我可以渲染法线或深度,但不能同时渲染两者。我的问题是有人可以解释如何渲染到多个纹理目标。我的印象是我可以使用类似下面的代码的东西。仅当索引为零时才有效,这可能意味着其中一个表面未被写入。
d3dDevice->SetRenderTarget(0, surfaceDepth);
d3dDevice->SetRenderTarget(1, surfaceNormal);
我收到此消息:Direct3D9:(WARN):无法呈现到也用作纹理的呈现器目标。呈现器目标被检测为绑定,但无法检测渲染中是否实际使用了纹理。
我知道可能有一些事情可能与此消息有关......我想如果有人可以解释如何正确使用多个呈现目标索引。此外,还要更改每个呈现目标的技术。现在我的着色器有一个"普通技术"和一个"深度技术"以及管道的"后处理技术"。
谢谢你的时间。
下面是更多代码:
SetTransforms();
d3dDevice->SetRenderTarget(0, surfaceDepth);
HR(d3dDevice->Clear( 0, NULL, D3DCLEAR_ZBUFFER | D3DCLEAR_TARGET, 0xff000000, 1.0f, 0));
scenes[sceneIndex]->setTechnique("depthTech");
scenes[sceneIndex]->render(dt);
d3dDevice->SetRenderTarget(1, surfaceNormal);
HR(d3dDevice->Clear( 0, NULL, D3DCLEAR_ZBUFFER | D3DCLEAR_TARGET, 0xff000000, 1.0f, 0));
scenes[sceneIndex]->setTechnique("normalTech");
scenes[sceneIndex]->render(dt);
你只需说为所有目标设置 d3dDevice->SetRenderTarget(n, surface),其中 n 是目标数字,然后设置输出到像素着色器中的多渲染目标结构的技术
你的问题让我更深入地发现了这个问题。
这就是我发现的:
首先,您必须检查您的D3DCAPS9。NumSimultaneousRTs.是不是多于1?所有呈现目标必须是相同的资源和位深度,但可以是不同的格式。不能使用任何抗锯齿。
相关文章:
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- C++A*算法并不总是在路径中具有目标节点
- 基于树莓pi的tensorflow lite量化ssd目标检测
- 为测试目标创建具有不同源文件夹的文件
- 使用源向量作为目标
- 是否可以用C++/WinRT将windows 10.0.14393作为目标
- 在 CMake 中为每个目标设置编译器/链接器标志
- qmake:检测目标位宽(32 位或 64 位)
- 如何在 CMake 中对目标依赖项进行分组?
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 如何为包含头文件的目标编写生成文件?
- 线性优化目标函数中的绝对值
- 制作文件:没有规则来制定目标:如何设置正确的规则?
- 字符串函数在目标C++上运行时C++返回空
- 如何定义自定义生成配置类型,其中通常是.exe的目标改为 DLL
- 请求最简单的 OpenMP 目标 GPU 示例
- LLVM 编译:目标的配方 '../lib/IR/Release+Asserts/Intrinsics.gen.tmp' failed
- 当目标指针不是基类的类型时,为什么允许dynamic_cast为多态类生成 null 指针?
- 我应该如何在没有变量的情况下将相同的参数传递给 CMAKE 中的多个目标?
- DirectX9 中的多个呈现目标