Буфер обмена D3D11 равен NULL - PullRequest
       122

Буфер обмена D3D11 равен NULL

0 голосов
/ 09 апреля 2020

Всякий раз, когда я запускаю этот код, данные, на которые указывает (элемент pData) внутри структуры _TextureData, равны 0 (например, 300 байтов, равных 0). Возвращаемое HRESULT result всегда равно S_OK, а глубина строк и столбцов является точной. Я уверен, что что-то отображается в буфере, потому что в окне, к которому я выполняю, отображаются вещи. Я попытался получить данные буфера до и после представления, и в любом случае данные по-прежнему нулевые.

D3D11_TEXTURE2D_DESC desc { };
ID3D11Texture2D * pCopy = nullptr;
ID3D11Texture2D * pBackBufferTexture = nullptr;
desc.Width = 800;
desc.Height = 800;
desc.MipLevels = 1;
desc.ArraySize = 1;
desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
desc.SampleDesc.Count = 1;
desc.Usage = D3D11_USAGE_STAGING;
desc.BindFlags = 0;
desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ;
desc.MiscFlags = 0;

assert( SUCCEEDED( pSwapChain->Present( 0,
                                        0 ) ) );
pDevice->CreateTexture2D( &desc, nullptr, &pCopy );
pSwapChain->GetBuffer( 0,
                       __uuidof( ID3D11Texture2D ),
                       reinterpret_cast< void ** >( &pBackBufferTexture ) );
pContext->CopyResource( pCopy, pBackBufferTexture );
D3D11_MAPPED_SUBRESOURCE _TextureData { };
auto result = pContext->Map( pCopy, 0, D3D11_MAP_READ, 0, &_TextureData );
pContext->Unmap( pCopy, 0 );
pCopy->Release( );

1 Ответ

1 голос
/ 10 апреля 2020

Код для цепочки подкачки содержит ответ ... Цепочка обмена была создана с 4-кратным MSAA, но промежуточная текстура для одного образца.

В этом случае вы не можете CopyResource. Вместо этого вы должны разрешить MSAA:

pContext->ResolveSubresource(pCopy, 0, pBackBufferTexture, 0, DXGI_FORMAT_R8G8B8A8_UNORM);

См. DirectX Tool Kit ScreenGrab источник, который обрабатывает этот случай более широко.

Код также показывает, что вы не используете устройство отладки (D3D11_CREATE_DEVICE_DEBUG), которое сообщило бы вам об этой проблеме. Подробнее см. в этом блоге .

...