Direct2D / DirectDraw будет рисовать текст только шрифтом Arial

Я использую Direct2D для некоторой графики, я получил его для рисования текста с помощью DirectDraw (используя функцию DrawText в ID2D1RenderTarget), но по какой-то причине он не будет рисовать с тем шрифтом, который я хочу. Когда я создаю текстовый формат для шрифта, который мне нужен, я не получаю никаких ошибок. Я компилирую с установленной опцией Multibyte.

Код загрузки шрифта:

std::wstring unicode(name, name + strlen(name));
        HRESULT r = g_writeFactory->CreateTextFormat(unicode.c_str(), NULL, DWRITE_FONT_WEIGHT_NORMAL,
            DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, (float)size, L"en-us", &g_fonts[i]);
        g_fonts[i]->SetTextAlignment(DWRITE_TEXT_ALIGNMENT_LEADING);
        g_fonts[i]->SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT_NEAR);

        if (FAILED(r))
        {
            dgSetLastError(dgERROR_CREATIONFAILED);
            return -1;
        }

        return i;

Рисунок текста:

std::wstring unicode(text, text + strlen(text));
D2D1_RECT_F r = D2D1::RectF(x, y, x + width, y + height);
int len = unicode.size();

if (g_isRenderToTexture)
    g_textureTarget->DrawText(unicode.c_str(), len, g_fonts[fontId], &r, g_solidBrush);
else
    g_bufferTarget->DrawText(unicode.c_str(), len, g_fonts[fontId], &r, g_solidBrush);

person Captain Picard    schedule 25.07.2015    source источник
comment
Что вы устанавливаете в строке имени? Я не вижу ничего плохого, что могло бы вызвать это.   -  person user1610015    schedule 25.07.2015
comment
Я установил его на строку Терминал для шрифта Терминала.   -  person Captain Picard    schedule 25.07.2015
comment
Вы удостоверились, что в вашей системе установлен шрифт Terminal? Вы пробовали другой шрифт, например Тахома? Arial в основном используется в качестве шрифта по умолчанию, поэтому либо средство визуализации не может использовать шрифт, либо передача не сработала должным образом.   -  person Gnietschow    schedule 26.07.2015
comment
Да, я пробовал разные шрифты, но всегда использовал Arial.   -  person Captain Picard    schedule 26.07.2015


Ответы (1)


Я не могу сказать, почему Tahoma уступит Arial, учитывая фрагмент кода, который я вижу, но Terminal - это старый растровый шрифт, поддерживаемый только GDI. Этот формат файла шрифта не поддерживается GDI + / DWrite / WPF / XAML, только OpenType с таблицей глифов TrueType, OpenType с таблицей CFF или коллекциями TrueType (начиная с Windows 7..10). Попробуйте вместо этого "Segoe UI".

person Dwayne Robinson    schedule 29.10.2015