我需要一些帮助来使用 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)
(根据文档):相同的结果 -> 什么也没有。