Direct3D 백 버퍼 캡처를 수행합니다. 픽셀을 다운로드 할 때 이미지 프레임이 세로축을 따라 뒤집 힙니다. 리소스를 복사하거나 대상을 만들 때 프레임을 뒤집기 위해 D3D를 "알리는"것이 가능합니까? ID3D11Texture2D
? 여기Direct3D11 : Flipping ID3D11Texture2D
는 그것을 어떻게 : I 프레임 버퍼에 복사되는 텍스처 이렇게 생성
:
D3D11_TEXTURE2D_DESC description =
{
desc.BufferDesc.Width, desc.BufferDesc.Height, 1, 1,
DXGI_FORMAT_R8G8B8A8_UNORM,
{ 1, 0 }, // DXGI_SAMPLE_DESC
D3D11_USAGE_STAGING,//transder from GPU to CPU
0, D3D11_CPU_ACCESS_READ, 0
};
D3D11_SUBRESOURCE_DATA data = { buffer, desc.BufferDesc.Width * PIXEL_SIZE, 0 };
device->CreateTexture2D(&description, &data, &pNewTexture);
다음 각 프레임에 I가 수행
pSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), reinterpret_cast< void** >(&pSurface));
pContext->CopyResource(pNewTexture, pSurface);
D3D11_MAPPED_SUBRESOURCE resource;
pContext->Map(pNewTexture, 0, D3D11_MAP_READ , 0, &resource);
//reading from resource.pData
//...
추신 : 렌더링 파이프 라인에 대한 제어 권한이 없습니다. 나는이 코드로 외부 앱을 연결한다. 또한 루프의 역 복사와 같이 CPU의 픽셀 버퍼를 엉망으로 만들고 싶지 않습니다. 낮은 대기 시간의 복사본이 우선 순위가 높습니다.
업데이트 : 나는 또한이 시도
:
컨텐츠에서 비어있는 프레임이 발생D3D11_BOX box;
box.left = 0;
box.right = desc.BufferDesc.Width;
box.top = desc.BufferDesc.Height;
box.bottom = 0;
box.front = 0;
box.back = 1;
pContext->CopySubresourceRegion(pNewTexture, 0, 0, 0, 0, pSurface, 0, &box);
.
비 -''void'를 반환하는 함수에서''HRESULT'' 값을 확인하는 것을 잊지 마십시오. 현재 작동하고 있다고 가정합니다. ''SUCCEEDED'',''FAILED'' 또는 [ThrowIfFailed] (https://github.com/Microsoft/DirectXTK/wiki/ThrowIfFailed)와 같은 것을 사용하십시오. –
@ChuckWalbourn 실제로 모든 방법을하고 있습니다. 단순함을 위해 여기에 버려졌습니다. –
멀티 프로젝트를 기반으로 한 예 : 낡은 프로젝트 : https://github.com/headmax/Cplus/blob/master/Projet4/Main.cpp dunno가 도움이된다면 ... –