Недавно я начал переходить с использования SDL (1.2.15) на SDL2 (2.0.0) и ранее зависел от использования библиотеки расширений SDL_ttf (2.0.11) для визуализации шрифтов. Когда я пытаюсь использовать ту же текстовую библиотеку, которую я использовал с SDL первой версии с SDL2 (по общему признанию, еще не выпущен официально), она компилируется просто отлично. Однако, когда я запускаю исполняемый файл (сейчас я использую VS2012 for Desktop), я получаю следующую ошибку:
Unhandled exception at 0x6C7D8C24 (SDL2.dll) in test.exe: 0xC0000005: Access violation reading location 0x00000045.
Из того, что я могу собрать, это связано со следующими частями кода. Я создал класс Window для инкапсуляции некоторых обычных функций SDL:
window.cpp:
SDL_Texture* Window::RenderText(const std::string &message, const std::string &fontFile, SDL_Color color, int fontSize){
//Open the font
TTF_Font *font = nullptr;
font = TTF_OpenFont(fontFile.c_str(), fontSize);
if (font == nullptr)
throw std::runtime_error("Failed to load font: " + fontFile + TTF_GetError());
//Render the message to an SDL_Surface, as that's what TTF_RenderText_X returns
SDL_Surface *surf = TTF_RenderText_Blended(font, message.c_str(), color);
SDL_Texture *texture = SDL_CreateTextureFromSurface(mRenderer.get(), surf);
//Clean up unneeded stuff
SDL_FreeSurface(surf);
TTF_CloseFont(font);
return texture;
}
Это сбито с толку
SDL_Texture *texture = SDL_CreateTextureFromSurface(mRenderer.get(), surf);
строка, в которой созданный SDL_Surface несовместим с определением Surfaces для SDL2, и поэтому, когда он пытается преобразовать SDL_Surface в текстуру SDL_Texture, он переворачивается.
Я не думаю, что я единственный, кто столкнулся с этой проблемой, так есть ли обходной путь / обновленная версия SDL_ttf, которая исправляет это, или я должен отложить переход на SDL2, пока я не смогу заставить работать шрифты?
Вы проверили Mercurial Repository для SDL_TTF? Кажется, он был обновлен для SDL2
, безусловно, стоило бы синхронизировать последний код и создать его.
Других решений пока нет …