最近、SDL (1.2.15) から SDL2 (2.0.0) への移行を開始しましたが、以前は拡張ライブラリ SDL_ttf (2.0.11) を使用してフォントをレンダリングしていました。バージョン 1 の SDL で使用したのと同じテキスト ライブラリを SDL2 で使用しようとすると (確かにまだ正式にリリースされていません)、問題なくコンパイルされます。ただし、実行可能ファイルを実行すると (現在、デスクトップに VS2012 を使用しています)、次のエラーが発生します。
Unhandled exception at 0x6C7D8C24 (SDL2.dll) in test.exe: 0xC0000005: Access violation reading location 0x00000045.
私が収集できることから、これは次のコードのビットによるものです。通常の 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がSDL2のSurfaceの定義と互換性がないため、SDL_SurfaceをSDL_Textureに変換しようとすると、反転します。
この問題に遭遇したのは私だけではないと思うので、これを修正する SDL_ttf の回避策/更新バージョンはありますか、それともフォントが機能するようになるまで SDL2 への移行を延期する必要がありますか?