我如何:将曲面转换为纹理或使用某些多重采样参数创建纹理或使用alpha图层渲染曲面
我正在创建两个渲染目标,两者都必须共享后缓冲区的深度缓冲区,所以我将它们设置为具有相同的多采样参数非常重要,但是pDevice-> CreateTexture(..)不提供任何用于设置多个参数的参数抽样类型。所以我使用pDevice-> CreateRenderTarget(...)创建了两个渲染目标曲面,给出了与深度缓冲区相同的值,现在深度缓冲区与我的渲染目标一起工作,但是我无法在屏幕上正确渲染它们,因为alpha混合不适用于 - > StretchRect(或者我被告知,当我尝试时它不起作用)。
所以这个问题的标题基本上是我的问题,我该怎么做:
- 将表面转换为纹理或
- 使用某些多重采样参数创建纹理或
- 使用alpha图层正确渲染曲面
没有找到相关结果
已邀请:
2 个回复
攫怂绵十
辅奈
我的RenderTarget包装器包含一个IDirect3DTexture9 *(m_pTexture),它与D3DXCreateTexture一起使用来生成要绘制的纹理。它还包含一个由纹理给出的IDirect3DSurface9 *(m_pSurface)。它还包含另一个IDirect3DSurface9 *(m_pMSAASurface)。 在我的RenderTarget初始化中,有一个选项可以启用多重采样。如果关闭此选项,则m_pMSAASurface将初始化为nullptr。如果启用此选项,则使用IDirect3DDevice9 :: CreateRenderTarget函数为您创建m_pMSAASurface,将当前的多重采样设置指定为第4和第5个参数。 渲染目标::初始化 *创建纹理 *从纹理中获取一个曲面(添加到曲面的引用计数) *如果是MSAA,则创建启用msaa的表面
如果禁用此MSAA设置,则RenderTarget :: Activate将m_pSurface设置为渲染目标。如果启用此MSAA设置,则RenderTarget :: Activate将m_pMSAASurface设置为渲染目标并启用多重采样渲染状态。 渲染目标::激活 *存储当前渲染目标(添加到该曲面的引用计数) *如果不是MSAA,则将surface设置为新的渲染目标 *如果MSAA将msaa surface设置为新的渲染目标,则启用msaa渲染状态
如果关闭此MSAA设置,RenderTarget :: Deactivate只会恢复原始渲染目标。如果启用此MSAA设置,RenderTarget :: Deactivate也会恢复原始渲染目标,但也会将m_pMSAASurface复制到m_pSurface上。 渲染目标::停用 *如果是MSAA,则禁用MSAA渲染状态 *恢复先前的渲染目标 *删除前一个渲染目标上的引用计数
当渲染器稍后向几何图层请求其RenderTarget纹理以便将其与其他图层组合时,该纹理将从其上的m_pMSAASurface复制图像。假设你正在使用一种促进alpha通道的格式,这个纹理可以与其他纹理混合,就像我正在使用几个图层的渲染目标一样。