D3D11
+ -

D3D11最基本的工程

2024-11-21 33 0

1.创建Deivce和DeivceContext(ImmediateContet)

    HRESULT hr = D3D11CreateDevice(
        0,    // 使用默认显卡
        md3dDriverType,    // 一般使用D3D_DRIVER_TYPE_HARDWARE作为参数,不然买来的显卡只能吃灰了
        0,    // 不使用软件驱动
        createDeviceFlags,    // Debug下,我们要求Dx输出一些log信息
        0, 0,    // 默认等级的特性,默认就是11
        D3D11_SDK_VERSION,    // 我们使用Dx11的SDK
        &md3dDevice,
        &featureLevel,
        &md3dImmediateContext);

2.创建交换链
D3D11Deivce->IDXGIAdapter->IDXGIFactory->IDXGISwapChain

    IDXGIDevice2 * pDXGIDevice;
    hr = g_pd3dDevice->QueryInterface(__uuidof(IDXGIDevice2), (void **)&pDXGIDevice);


    IDXGIAdapter * dxgiAdapter;
    hr = pDXGIDevice->GetParent(__uuidof(IDXGIAdapter), (void **)&dxgiAdapter);

    IDXGIFactory* dxgiFactory = 0;
    HR(dxgiAdapter->GetParent(__uuidof(IDXGIFactory), (void**)&dxgiFactory));

    IDXGISwapChain* mSwapChain;
    HR(dxgiFactory->CreateSwapChain(md3dDevice, &sd, &mSwapChain));    // 根据设备和切换链描述创建切换链

3.创建目标渲染视图

根据交换链的后台缓冲区创建其对应的目标渲染视图

    ID3D11Texture2D* backBuffer;
    //获取后台缓冲区
    HR(mSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), reinterpret_cast<void**>(&backBuffer)));    

    ID3D11RenderTargetView* mRenderTargetView;
    HR(md3dDevice->CreateRenderTargetView(backBuffer, 0, &mRenderTargetView));    // 创建渲染对象
    ReleaseCOM(backBuffer);

    //设置目标视图
    md3dImmediateContext->OMSetRenderTargets(1, &mRenderTargetView, NULL);

4.设置视口
https://www.pnpon.com/article/detail-777.html

    D3D11_VIEWPORT mScreenViewport;
    mScreenViewport.TopLeftX = 0;    // 视窗距窗口的X距离
    mScreenViewport.TopLeftY = 0;    // 视窗距窗口的Y距离
    mScreenViewport.Width = static_cast<float>(mClientWidth);    // 视口宽
    mScreenViewport.Height = static_cast<float>(mClientHeight);    // 视口高
    mScreenViewport.MinDepth = 0.0f;    // 最小深度
    mScreenViewport.MaxDepth = 1.0f;    // 最大深度
md3dImmediateContext->RSSetViewports(1, &mScreenViewport);    // 重置视窗

5.渲染目标视图

    md3dImmediateContext->ClearRenderTargetView(mRenderTargetView, color);

6.提交翻转后台缓冲区为前台绘冲区,进行渲染出图

    mSwapChain->Present(0, 0);

0 篇笔记 写笔记

作者信息
站长漫谈
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!