DirectX11 创建渲染目标视图

来源:互联网 发布:b站mac 编辑:程序博客网 时间:2024/05/20 10:13

创建渲染目标视图

  1. 什么是渲染目标视图?为什么要创建渲染目标视图?

    什么是渲染目标视图?首先从渲染目标说起。前面我们说了在显示前台缓冲区的时候,DirectX在后台渲染后台缓冲区,后台缓冲区就是渲染目标。而渲染目标视图就是在缓冲区的颜色贴图基础上来渲染的。(因为很多时候缓冲区的颜色贴图还没有完成,我们要在其基础上继续渲染)

  2. 如何创建渲染目标视图?

    渲染目标视图通过调用设备的CreateRenderTargetView函数来创建,该函数有三个参数:
    [in]第一个参数,是我们从后备缓冲区获得的2D视图贴图,我们在这个贴图的基础上继续渲染。
    [in]第二个参数,是渲染视图描述。设置为NULL将给我们物体表面的Mip映射等级设为0。
    [out]第三个参数,保存创建的渲染目标视图。

  3. 如何从后备缓冲区获得2D贴图?

    交换链中的主缓存和后备缓存其实就是一种颜色贴图,可以通过交换链的GetBuffer来获得缓存(贴图)。GetBuffer有三个参数:
    [in]第一个参数,缓存索引(0给出第一个缓存,就是交换链此时的后备缓存)。
    [in]第二个参数,尝试操纵的接口类型,2D贴图类型就是ID3D11Texture2D。这里要用到__uuidof来查找跟ID3D11Texture2D绑定全局唯一标识符(GUID)。
    [out]第三个参数,保存获得的缓存(2D贴图)。

  4. 创建完渲染目标视图,如何绑定到设备?

    我们需要调用设备的OMSetRenderTargets函数例将渲染目标绑定到设备上,该函数有三个参数:
    [in]第一个参数:要绑定的渲染目标视图总数量。
    [in]第二个参数:渲染目标视图数组或一个渲染目标视图的指针。
    [in]第三个参数:深度模板缓冲视图。设为NULL为不绑定。

下面给出一个完整的渲染目标视图的创建和绑定示例代码:

    ID3D11RenderTargetView* backBufferTarget_;     ID3D11Texture2D* backBufferTexture;     result = swapChain_->GetBuffer( 0, __uuidof( ID3D11Texture2D ), ( LPVOID* )&backBufferTexture );     if( FAILED( result ) )         {         DXTRACE_MSG( "Failed to get the swap chain back buffer!" );         return false;     }     result = d3dDevice_->CreateRenderTargetView( backBufferTexture, 0, &backBufferTarget_ );     if( backBufferTexture )         backBufferTexture->Release( );     if( FAILED( result ) )     {         DXTRACE_MSG( "Failed to create the render target view!" );         return false;     }     d3dContext_->OMSetRenderTargets( 1, &backBufferTarget_, 0 ); 
0 0