在使用 GDI 和 D3D11 将文本绘制到纹理上时,我需要一些帮助。我尝试使用 D2D/DirectWrite,但它只支持 D3D10 而不是我需要的 D3D11。到目前为止我尝试的一切都失败了......现在我想使用 GDI 方法在纹理中写入。所以我用这个参数创建了一个纹理:
Usage = D3D11_USAGE_DEFAULT;
Format = DXGI_FORMAT_B8G8R8A8_UNORM;
BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET;
CPUAccessFlags = 0;
MiscFlags = D3D11_RESOURCE_MISC_GDI_COMPATIBLE
然后我从这个纹理创建了一个普通的 RenderTargetView,就像微软在这里所说的那样:http: //msdn.microsoft.com/en-us/library/ff476203%28v=vs.85%29.aspx
下一步:获取 DXGI 接口:
m_pTexFSText->QueryInterface(__uuidof(IDXGISurface1), (void **)(&m_pDXGISurface));
在渲染功能上,我这样做:
m_pDeviceContext->OMSetRenderTargets(1,&m_pTextRenderTarget,NULL);
HDC hDc = NULL;
if(FAILED(m_pDXGISurface->GetDC(TRUE,&hDc)))
return E_FAIL;
COLORREF bla = SetPixel(hDc,1,1,RGB(255,255,255));
bool hmm = TextOutA(hDc, 10, 10, "LALALA!", 7);
if(FAILED(m_pDXGISurface->ReleaseDC(NULL)))
return E_FAIL;
问题是,在 GDI 绘图之后纹理仍然是空的(也用 PIX 测试过)。一切正常,没有错误消息。
我希望任何人都可以解释它是如何工作的。
谢谢,斯特凡
编辑:也尝试过GetDC(FALSE,&hDc)
(根据文档):相同的结果->没有。