Мне нужна помощь в рисовании текста текстуры с помощью GDI и D3D11. Я пробовал использовать D2D/DirectWrite, но он поддерживает только D3D10, а не D3D11 по мере необходимости. Все, что я пробовал до сих пор ... Теперь я хочу использовать методы GDI для записи в текстуре. Так что я создал текстуру с этим Params:D3D11: Как нарисовать текст GDI на поверхность GXDI? (Без 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
Затем я создал нормальный RenderTargetView из этой текстуры, как Microsoft саев здесь: 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). Все работает и сообщений об ошибках нет.
Я надеюсь, что кто-нибудь может объяснить, как это работает.
Спасибо, Стефан
EDIT: Пытался это также с GetDC(FALSE,&hDc)
(согласно документации): одни и те же результаты -> ничего.
Вы пробовали формат 'DXGI_FORMAT_R8G8B8A8_UINT'? – Necrolis
в соответствии с документом по ссылке выше совместимой с gdi текстурой нужны специальные форматы. «Вы должны настроить формат текстуры одним из следующих типов: DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_B8G8R8A8_TYPELESS, DXGI_FORMAT_B8G8R8A8_UNORM_SRGB« – sandicz