我正在开发游戏的扩展程序,该程序仅打开HDC,供插件开发人员使用。
但是,我已经用尽了GDI + / Direct2D绘图功能,该功能对于我想要实现的速度已经足够快了-图像效果(添加,混合,乘以混合等)。
我很清楚Direct2D提供了一个效果工具包,但是它需要平台更新(适用于Windows 7),这一点都不理想。
因此,我只剩下Direct3D。MSDN / Google搜索提供了许多执行D2D-> D3D的方法,但是ZERO显示了如何执行D3D-> D2D。我知道有一种方法可以转换D3D-> D2D,即映射和复制像素数据,但是效率很低,因为(如果我是对的话)它是从GPU VRAM-> CPU / RAM-> GPU VRAM传输的。我可能只会将其用作最后的选择。
或者,如果有人对如何从D3D11中的RenderTarget抓取HDC有任何想法,以便可以使用BitBlt,它也可能起作用。
如果有人可以帮助我,我将不胜感激。
好,我知道了。可能不是最有效的,但可以完成工作。没有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();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句