Отображение строки Unicode с использованием opengl, qt и freetype - PullRequest
1 голос
/ 05 июня 2011

Я хочу отображать текст в OGL, используя FTGL (обертка для FreeType2) в Qt.У меня проблема с unicode-> FTGL должен иметь код для фактического рендеринга char, чтобы получить глиф из шрифта TrueType, что проблематично, когда этот символ является одним из: 'Zażółć gęślą jaźń'.

У вас есть идеи, почему этот код:

const unsigned char *string=(const unsigned char*)"POCZUJ GĘŚLĄ JAŹŃ";
// for multibyte - we can't rely on sizeof(T) == character
FTUnicodeStringItr<T> ustr(string);

for(int i = 0; (len < 0 && *ustr) || (len >= 0 && i < len); i++)
{
    unsigned int thisChar = *ustr++;
    unsigned int nextChar = *ustr;
    if(CheckGlyph(thisChar))
    {
        position += glyphList->Render(thisChar, nextChar,
                                      position, renderMode);
    }
}

работает в Visual, а в Qt - нет (он не получает надлежащие коды, поэтому он отображает скобки)?

Шаблон FTUnicodeStringItr выглядит так: http://www.nopaste.pl/11xt Спасибо.

1 Ответ

0 голосов
/ 05 июня 2011

Проблема, с которой вы сталкиваетесь, заключается в том, что C / C ++ не поддерживает Unicode / широкие символы в исходном коде. Для правильного выполнения вы должны будете указать символы Юникода либо с помощью \uXXXX escape-последовательностей (если компилятор поддерживает их), либо с помощью \xXX\xXX последовательностей, создающих кодовые точки с нуля. Visual C ++ имеет поддержку широких символов (по той простой причине, что все манипуляции со строками в Windows выполняются широкими символами - не путайте это с кодовыми точками Unicode!).

Я предлагаю вам сделать следующее: Qt имеет встроенную поддержку интернационализации. Он сводится к определению строк с помощью вспомогательной функции / макроса tr(...) с языком по умолчанию, т.е. английскими строками. Затем Qt Linguist can используется для создания правил замещения, которые применяются с использованием tr(...), и делает это с полной поддержкой Unicode.

...