RayLib (для Си) не могу подключить русский шрифт

Установил Raylib 5 версия, последняя на 2024. Не могу вывести ничего на русском языке. Там с raylib идет в комплекте notepad++, компилятор, raylib библиотека. Я вначале в notepad менял различные кодировки. Потом в примере увидел как загружают свой шрифт TTF. Загрузил свой, подключил, не выводит русский. То квадраты, то вопросительные знаки. Если у кого есть опыт, как в RayLib вывести на русском, прошу помощи. Использую Windows 10 64, ЯП Си.


Ответы (1 шт):

Автор решения: FrancNet

Вот код для RAYLIB для ЯП Си, под Windows, который выводит русский текст. Нашел решение при помощи AI_Cursor. К сожалению такая реализация не подразумевает изменение размера шрифта, как вам хочется. Но можно собрать несколько "глифов" для нужного размера. По идее вывод текста идет как картинки букв. Изменяя размер, появляются квадратики, как при увеличении картинки.

Но теперь работает с русским языком. Такие красивые делают эффекты, для вроде бы простых приложений:

#include "raylib.h"
//Запуск компиляции F6
// Функция инициализации русского шрифта
Font InitRussianFont(const char* fontPath, int fontSize) {
    int charsCount = 0;
    // Загружаем все русские буквы, цифры и знаки препинания
    int* chars = LoadCodepoints(
        "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя"
        "0123456789"
        ".,!?-+()[]{}:;/\\\"'`~@#$%^&*=_|<> ", 
        &charsCount
    );
    
    Font font = LoadFontEx(fontPath, fontSize, chars, charsCount);
    UnloadCodepoints(chars);
    return font;
}

// Функция для центрирования текста
void DrawTextCentered(
    Font font, const char* text, 
    Vector2 position, float fontSize,
    float spacing, Color color) {
    Vector2 textSize = MeasureTextEx(font, text, fontSize, spacing);
    Vector2 pos = {
        position.x - textSize.x/2,
        position.y - textSize.y/2
    };
    DrawTextEx(font, text, pos, fontSize, spacing, color);
}

// Пример использования
int main(void) {
    SetConfigFlags(FLAG_WINDOW_HIGHDPI);
    InitWindow(800, 450, "Русский текст");
    
    // Инициализируем шрифт
    Font font = InitRussianFont("C:/Windows/Fonts/arial.ttf", 32);
    
    while (!WindowShouldClose()) {
        BeginDrawing();
        ClearBackground(RAYWHITE);
        
        // Обычный текст
        DrawTextEx(
            font, "Привет, мир! Я написал текс на русском!", 
            (Vector2){20, 50}, 32, 2, BLACK);
        
        // Центрированный текст
        DrawTextCentered(
            font, "Центрированный текст", 
            (Vector2){GetScreenWidth()/2, GetScreenHeight()/2},
            32, 2, RED);
        
        // Текст, следующий за мышью
        Vector2 mousePos = GetMousePosition();
        DrawTextEx(font, "Курсор здесь!", mousePos, 20, 1, DARKGRAY);
        
        EndDrawing();
    }
    
    UnloadFont(font);
    CloseWindow();
    return 0;
}
→ Ссылка