Potrzebuję pomocy przy rysowaniu tekstu do tekstury za pomocą GDI i D3D11. Próbowałem używać D2D/DirectWrite, ale obsługuje tylko D3D10, a nie D3D11, tak jak potrzebuję. Wszystko, czego próbowałem, zawiodło do tej pory ... Teraz chcę użyć metod GDI do napisania tekstury. Więc stworzyłem teksturę z tego params:D3D11: Jak narysować tekst GDI na powierzchni GXDI? (Bez D2D)
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
Potem stworzył normalny RenderTargetView z tej tekstury jak Microsoft NOK tutaj: http://msdn.microsoft.com/en-us/library/ff476203%28v=vs.85%29.aspx
Następny krok: Get interfejsu DXGI:
m_pTexFSText->QueryInterface(__uuidof(IDXGISurface1), (void **)(&m_pDXGISurface));
W funkcji renderowania robię tylko to:
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;
Problem polega na tym, że tekstura jest nadal pusta po tym rysunku GDI (również testowany przy użyciu PIX). Wszystko działa i nie ma komunikatów o błędach.
Mam nadzieję, że każdy może wyjaśnić, jak to działa.
Dzięki Stefan
EDIT: Próbowałem go również z GetDC(FALSE,&hDc)
(zgodnie z dokumentacją): same wyniki -> nic.
Czy próbowałeś formatu 'DXGI_FORMAT_R8G8B8A8_UINT'? – Necrolis
zgodnie z dokumentem na łączu powyżej tekstury kompatybilnej z gdi wymaga specjalnych formatów "Musisz ustawić format tekstury na jeden z następujących typów: DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_B8G8R8A8_TYPELESS, DXGI_FORMAT_B8G8R8A8_UNORM_SRGB" – sandicz