none
IDXGIFactory RRS feed

  • Вопрос

  • Здравствуйте, занимаюсь обучением DirectX 11 и в примере наткнулся на IDXGIFactory1 но описание на английском, знающие люди помогите так как мои знания английского желают быть лучшего, вот ссылка:

    https://msdn.microsoft.com/en-us/library/windows/desktop/bb174537(v=vs.85).aspx

    и вот это:

    https://msdn.microsoft.com/en-us/library/windows/desktop/ff471335(v=vs.85).aspx

    или объясните этот кусок кода:

    // Obtain DXGI factory from device (since we used nullptr for pAdapter above)
        IDXGIFactory1* dxgiFactory = nullptr;
        {
            IDXGIDevice* dxgiDevice = nullptr;
            hr = g_pd3dDevice->QueryInterface( __uuidof(IDXGIDevice), reinterpret_cast<void**>(&dxgiDevice) );
            if (SUCCEEDED(hr))
            {
                IDXGIAdapter* adapter = nullptr;
                hr = dxgiDevice->GetAdapter(&adapter);
                if (SUCCEEDED(hr))
                {
                    hr = adapter->GetParent( __uuidof(IDXGIFactory1), reinterpret_cast<void**>(&dxgiFactory) );
                    adapter->Release();
                }
                dxgiDevice->Release();
            }
        }
        if (FAILED(hr))
            return hr;
    
        // Create swap chain
        IDXGIFactory2* dxgiFactory2 = nullptr;
        hr = dxgiFactory->QueryInterface( __uuidof(IDXGIFactory2), reinterpret_cast<void**>(&dxgiFactory2) );
        if ( dxgiFactory2 )
        {
            // DirectX 11.1 or later
            hr = g_pd3dDevice->QueryInterface( __uuidof(ID3D11Device1), reinterpret_cast<void**>(&g_pd3dDevice1) );
            if (SUCCEEDED(hr))
            {
                (void) g_pImmediateContext->QueryInterface( __uuidof(ID3D11DeviceContext1), reinterpret_cast<void**>(&g_pImmediateContext1) );
            }
    
            DXGI_SWAP_CHAIN_DESC1 sd;
            ZeroMemory(&sd, sizeof(sd));
            sd.Width = width;
            sd.Height = height;
            sd.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
            sd.SampleDesc.Count = 1;
            sd.SampleDesc.Quality = 0;
            sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
            sd.BufferCount = 1;
    
            hr = dxgiFactory2->CreateSwapChainForHwnd( g_pd3dDevice, g_hWnd, &sd, nullptr, nullptr, &g_pSwapChain1 );
            if (SUCCEEDED(hr))
            {
                hr = g_pSwapChain1->QueryInterface( __uuidof(IDXGISwapChain), reinterpret_cast<void**>(&g_pSwapChain) );
            }
    
            dxgiFactory2->Release();
        }

    или хотя бы правильно переведите комментарии.

    Буду признателен, кто поможет тому плюс балы.





    • Изменено МГС 9 апреля 2017 г. 11:18
    8 апреля 2017 г. 16:20

Ответы

  • Я знаком с данным интерфейсом. Но мне не понятно что именно требует объяснения. Большая часть кода - просто касты в стиле COM. В общем код просто кастит объекты, в конечном, итоге достает IDXGIFactory2 вызывает на нем метод для создания цепи переключения, которую затем тоже кластит к старшей версии. 

    Комментарии, кстати, ничем вам не помогут, они не описывают код в примере (и легко переводятся роботом).

    Я бы сказал если у вас сложности в понимании данного кода то они скорее всего вызваны незнанием базовых принципов работы с COM. Если так то попробуйте управляемый код с одним из враперов DX. Там всея это мишура отпадает.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    9 апреля 2017 г. 18:31
    Модератор

Все ответы

  • Неужели никто не знаком с IDXGIFactory?
    9 апреля 2017 г. 11:18
  • Я знаком с данным интерфейсом. Но мне не понятно что именно требует объяснения. Большая часть кода - просто касты в стиле COM. В общем код просто кастит объекты, в конечном, итоге достает IDXGIFactory2 вызывает на нем метод для создания цепи переключения, которую затем тоже кластит к старшей версии. 

    Комментарии, кстати, ничем вам не помогут, они не описывают код в примере (и легко переводятся роботом).

    Я бы сказал если у вас сложности в понимании данного кода то они скорее всего вызваны незнанием базовых принципов работы с COM. Если так то попробуйте управляемый код с одним из враперов DX. Там всея это мишура отпадает.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    9 апреля 2017 г. 18:31
    Модератор