所以我正在尝试实现一些Direct3D后期处理,而且我在渲染纹理方面遇到了问题。基本上,我的程序看起来像这样:
// Render scene to "scene_texture" (an HDR texture)...
...
device->SetRenderTarget(0, brightpass_surface);
device->SetTexture(0, scene_texture);
// Render "scene_texture" to "brightpass_texture" using full-screen quad.
// This involves passing the quad geometry through a brightpass shader.
...
device->SetRenderTarget(0, ldr_surface);
device->SetTexture(0, brightpass_texture);
// Render "brightpass_texture" to "ldr_surface" using full-screen quad...
我遗漏了一些部分b / c有相当数量的代码(我只是试图了解一般的想法)。不幸的是,上面的结果是空白屏幕。这就是我想要发生的事情:
请注意,如果我从
更改上一行device->SetTexture(0, brightpass_texture);
到
device->SetTexture(0, scene_texture);
然后一切正常。请注意,我尝试跳过brightpass着色器并简单地传递像素,但这也不起作用。
答案 0 :(得分:2)
问题是多重采样。在D3DPRESENT_PARAMS
结构中,我启用了多重采样。在启用多重采样时,无法使用“全屏四元组”技术从一个浮点纹理渲染到另一个浮点纹理。
相反,我在HDR场景渲染目标(scene_texture
)中启用了多重采样,并在PRESENT_PARAMS
结构中禁用了它。这很好,因为我只需要对场景渲染进行多重采样。
答案 1 :(得分:1)
您是否确定使用渲染到纹理标志创建了brightpass_texture?
答案 2 :(得分:0)
调试运行时是否会出现任何错误?你怎么得到ldr_surface?
如果您将场景直接渲染到ldr_surface并绕过所有HDR内容会发生什么?事情可能看起来有点饱和,但它应该给你一个想法...