Orz_TanLaLa 2022-01-09 21:30 采纳率: 66.7%
浏览 22

m_pd3dDevice.As(&dxgiDevice); 的作用是什么

Learning D3D11
看微软教程:https://docs.microsoft.com/en-us/windows/win32/direct3dgetstarted/work-with-dxgi

对这行代码感到很不理解:m_pd3dDevice.As(&dxgiDevice);

它的作用是什么?可以用经典指针代替吗

获取您之前创建的ID3D11设备引用。将其升级到IDXGIDevice3(如果尚未),然后调用IDXGIDevice::GetAdapter以获取 DXGI 适配器。通过调用IDXGIFactory2::GetParent获取该适配器的父工厂(IDXGIFactory2继承自IDXGIObject)- 现在,您可以使用该工厂通过调用CreateSwapChainForHwnd来创建交换链,如下面的代码示例所示。

DXGI_SWAP_CHAIN_DESC desc;
ZeroMemory(&desc, sizeof(DXGI_SWAP_CHAIN_DESC));
desc.Windowed = TRUE; // Sets the initial state of full-screen mode.
desc.BufferCount = 2;
desc.BufferDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
desc.SampleDesc.Count = 1;      //multisampling setting
desc.SampleDesc.Quality = 0;    //vendor-specific flag
desc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;
desc.OutputWindow = hWnd;

// Create the DXGI device object to use in other factories, such as Direct2D.
Microsoft::WRL::ComPtr<IDXGIDevice3> dxgiDevice;
m_pd3dDevice.As(&dxgiDevice); //这句话在干什么???

// Create swap chain.
Microsoft::WRL::ComPtr<IDXGIAdapter> adapter;
Microsoft::WRL::ComPtr<IDXGIFactory> factory;

hr = dxgiDevice->GetAdapter(&adapter);

if (SUCCEEDED(hr))
{
    adapter->GetParent(IID_PPV_ARGS(&factory));

    hr = factory->CreateSwapChain(
        m_pd3dDevice.Get(),
        &desc,
        &m_pDXGISwapChain
        );
}

  • 写回答

1条回答 默认 最新

  • 狐狸小十 2022-01-11 15:59
    关注

    COM智能指针,和QueryInterface一样,同过D3D设备获取DXGI设备

    评论

报告相同问题?

问题事件

  • 创建了问题 1月9日

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序