С латиницей проблем нет, все работает как надо, но вместо кириллицы совершенно другие символы. Вот код, если это поможет.
#include <iostream>
#include <vector>
#include <SDL.h>
#include <SDL_ttf.h>
#include <stdlib.h>
using namespace std;
string OUT_STRING;
SDL_Color color = { 255,255,255 };
char* cts(char c)
{
char *ptr = (char*)malloc(2 * sizeof(char));
ptr[0] = c;
ptr[1] = '\0';
return ptr;
}
void TextOut(SDL_Renderer *ren, TTF_Font *f)
{
SDL_Surface *sur;
SDL_Texture *tex;
static SDL_Rect rect;
static int32_t x;
if (OUT_STRING[x] == NULL) return;
char *temp = cts(OUT_STRING[x]);
TTF_SizeText(f, temp, &rect.w, &rect.h);
if (!(sur = TTF_RenderText_Blended(f, temp, color))) cout << "BLEND - ERROR" << endl;
else cout << "BLEND - SUCCESS" << endl;
free(temp);
tex = SDL_CreateTextureFromSurface(ren, sur);
if (!tex) cout << "TEX - ERROR" << endl;
else cout << "TEX - SUCCESS" << endl;
SDL_RenderCopy(ren, tex, NULL, &rect);
SDL_RenderPresent(ren);
rect.x += rect.w;
x++;
SDL_FreeSurface(sur);
SDL_Delay(50);
}
int main(int argc, char* argv[])
{
SDL_Window *main_window;
SDL_Renderer *renderer;
SDL_Surface *screen;
SDL_Surface *text;
SDL_Event e;
TTF_Font *font;
SDL_Rect rect;
SDL_Texture *texture;
bool quit = false;
SDL_Init(SDL_INIT_EVERYTHING);
TTF_Init();
main_window = SDL_CreateWindow("My window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1000, 1000, SDL_WINDOW_SHOWN);
font = TTF_OpenFont("C:/Users/STAS/source/repos/ConsoleApplication3/ConsoleApplication3/l_10646.ttf", 32);
if (!font) cout << "FONT - ERROR" << endl;
else cout << "FONT - SUCCESS" << endl;
renderer = SDL_CreateRenderer(main_window, -1, 0);
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
SDL_RenderClear(renderer);
OUT_STRING = "English текст";
rect.x = 100;
rect.y = 100;
while (!quit)
{
while (SDL_PollEvent(&e) != 0)
{
if (e.type == SDL_QUIT) quit = true;
}
TextOut(renderer, font);
cout << "SECOND LOOP" << endl;
}
SDL_Delay(3000);
return 0;
}
Функция TTF_RenderText_Blended
принимает на вход строку с латиницей в кодировке ISO/IEC 8859-1
. Для рисования прочих символов следует использовать RenderUTF8_Blended
или RenderUNICODE_Blended
:
static_assert(sizeof(wchar_t) == sizeof(Uint16));
TTF_RenderUNICODE_Blended(font, reinterpret_cast<Uint16 const *>(L"English текст"), color)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Самостоятельно обучаюсь программированиюСейчас пытаюсь решить задачу, найденную в интернете
Появилась проблема с getline(file, string)Я хочу, чтобы с помощью этой программы было сначала высчитано количество строк в файле, а потом уже эти строки...
Всем привет! В приложении при нажатии кнопки появляется Textview с фономПри нажатии кнопки повторно, Textview "пропадает"