我需要一些关于使用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
然后我按照Microsoft在这里所说的方式从这个纹理创建了一个普通的RenderTargetView:http://msdn.microsoft.com/en-us/library/ff476203%28v=vs.85%29.aspx
下一步:获取DXGI接口:
m_pTexFSText->QueryInterface(__uuidof(IDXGISurface1), (void **)(&m_pDXGISurface));
在Render函数中,我只是这样做:
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进行了测试)。 一切都正常,没有错误消息。
我希望有人能解释一下它的工作原理。
谢谢,Stefan
编辑:也尝试了根据文档使用GetDC(FALSE,&hDc):相同的结果-> 什么也没有。
DXGI_FORMAT_R8G8B8A8_UINT
格式吗? - Necrolis