確定我想通了。可能不是最有效率的,但做這項工作。 沒有memcpy,bitblt(儘管內存中的CreateBitmap內部可能有這些函數)。避免所有的DXGI版本垃圾。
D3D11_TEXTURE2D_DESC td;
m_backBufferTexture->GetDesc(&td);
td.Usage = D3D11_USAGE_STAGING;
td.BindFlags = 0;
td.CPUAccessFlags = D3D11_CPU_ACCESS_READ;
m_pDevice->CreateTexture2D(&td, NULL, &(m_pNewTexture));
m_pContext->CopyResource(m_pNewTexture, m_backBufferTexture);
m_pNewTexture->QueryInterface(__uuidof(IDXGISurface), (void**)&m_NewTextDXGI);
DXGI_MAPPED_RECT bitmap2Dmap;
m_NewTextDXGI->Map(&bitmap2Dmap,DXGI_MAP_READ);
D2D1_PIXEL_FORMAT desc2d;
D2D1_BITMAP_PROPERTIES bmpprops;
desc2d.format = DXGI_FORMAT_B8G8R8A8_UNORM;
desc2d.alphaMode = D2D1_ALPHA_MODE_IGNORE; // Adapt to your needs.
bmpprops.dpiX = 96.0f;
bmpprops.dpiY = 96.0f;
bmpprops.pixelFormat = desc2d;
D2D1_SIZE_U size = D2D1::SizeU(
dim.x,
dim.y
); // Adapt to your own size.
pRT->CreateBitmap(size,(void*)bitmap2Dmap.pBits,bitmap2Dmap.Pitch,bmpprops,&m_pD2DBitmap);
m_NewTextDXGI->Unmap();
不是很清楚你的問題,你想要什麼? – zdd
將D3D的Backbuffer作爲ID3D11Texture2D捕獲並轉換爲ID2D1Bitmap發送給D2D,如果可能的話,如何做到這一點。希望它足夠清楚。 – user3416064
您應該介紹一些關於業務邏輯的內容,您是否希望在D3D和D2D之間進行實時同步? – zdd