zoukankan      html  css  js  c++  java
  • d3d多渲染窗口结构

    使用d3d的交换链可以方便的实现多渲染窗口结构,类的层次结构如下图所示:

    D3DRes用来定义dx设备丢失的处理,所有需要关心设备丢失的资源都从此类继承,然后重写设备丢失回调函数和设备重置回调函数即可方便的处理设备丢失。

    RenderTarget用来定义基本的渲染目标,成员包括长宽及大小的定义,及渲染目标的虚接口定义(比如:缓冲区切换等)。

    Win32Window封装win32接口,传入配置参数创建并注册windows窗口,并定义消息处理回调,利用监听器或者事件机制向外部应用层传递鼠标键盘操作。

    RenderWindow从D3DRes及RenderTarget继承,并聚合Win32Window对象,表示一个可渲染的窗口。在RenderWindow创建的时候,根据外部传入的D3D对象(IDirect3D9)创建D3D Device;有了D3D Device,对于主窗口可通过接口函数GetSwapChain获取Device的SwapChain对象,代码如下:

    IDirect3DSwapChain9* pSwapChain = 0;
    if( d3d_device) {
    d3d_device
    ->GetSwapChain(0, &pSwapChain);
    }

    对于非主窗口,则需要利用Device的接口CreateAdditionalSwapChain来创建更多的交换链对象,此接口需要硬件支持,因此创建之前需要检查硬件设备能力。 准备好RenderWindow的交换链对象后,在渲染帧即可调用Present接口驱动硬件渲染:

    void RenderWindow::SwapBuffers() {
    LPDIRECT3DDEVICE9 d3d_device
    = Graphics::Inst()->GetD3DDevice();
    if(d3d_device) {
    if (D3DERR_DEVICELOST == mSwapChain->Present(NULL, NULL, mhWnd, NULL, 0))
    {
    this->ResetDevice();
    }
    }
    }
     

    ———-分割线—————

    应用层通过创建并管理一个RenderWindow的数组,并在渲染主循环中依次切换渲染,即可实现多渲染窗口结构。

  • 相关阅读:
    HDU 1098 Ignatius's puzzle 也不大懂
    HDU 1099 Lottery
    图算法-Prime
    并查集
    CSS笔记2
    css笔记1
    HDU 5019 Revenge of GCD
    POJ 2255 Tree Recovery
    判断两条线段是否相交
    PAT 数列求和-加强版   (20分)(简单模拟)
  • 原文地址:https://www.cnblogs.com/konlil/p/1956653.html
Copyright © 2011-2022 走看看