環境
SDL と OpenGL を使用してゲーム エンジンを作成しています。ファンシーなTrue Typeフォントを使用して画面にテキストを出力する最良の方法を見つけようとしていますが、FTGLに出会いました。(より良い/より簡単な解決策がある場合は、自由に共有してください。)
FTGL のコンパイル
動作させるには FreeType2 が必要なので、入手してコンパイルし (Code::Block を使用)、次に Code::Block を使用して FTGL ライブラリをコンパイルしました。
CDT プラグインで Eclipse Indigo を使用しています。.libと.dllファイルがあるため、どのライブラリを使用すればよいかわかりません。私は両方を試しましたが、これは現在この行にある私の問題をまったく変えないようです:
FTfont* m_Font = new FTTextureFont(filename.c_str());
エラーは次のとおりです。
The type 'FTTextureFont' must implement the inherited pure virtual method 'FTFont::MakeGlyph'
FTPixmapFont コンストラクターなど、別の FTfont サブクラスを使用しても変わりません。
私が試したリンカーフラグは次のとおりです。
-lmingw32 -lSDLmain -lSDL -lSDL_image -lSDL_net -lSDL_ttf -lftgl -lfreetype234_D -lopengl32 -lglu32
-lmingw32 -lSDLmain -lSDL -lSDL_image -lSDL_net -lSDL_ttf -lftgl -llibfreetype -lopengl32 -lglu32
MinGWでEclipseを使用しています。
コピーして貼り付けました
src/FTGLフォルダとIncludeフリータイプ ライブラリのフォルダの内容
MinGWディレクトリのincludeフォルダに。
freetype2 ( と があり、freetype.libプロジェクトのプロパティにリンクするかどうかは不明) と ftgl ( 、、) の両方の lib ファイルを、MinGW ディレクトリの対応する lib フォルダーに入れます。freetype248_D.libfreetype-bcc.libftgl.dllftgl_D.libftgl_static_D.lib
エラーがあり、Open Declaration オプションを使用している行をクリックすると、Eclipse によって、定義済みのFTTextureFontヘッダー ファイルとFTTextureFont(char const*)定義済みのMakeGlyph関数が表示されます。
詳細を確認したい場合、またはリファレンスとして、GetRandomGame プロジェクト ページで完全なコードを見つけることができます。
コンパイラ版はこちら
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.6.1/lto-wrapper.exe
Target: mingw32
Configured with: ../gcc-4.6.1/configure --enable-languages=c,c++,fortran,objc,ob
j-c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgomp -
-disable-win32-registry --enable-libstdcxx-debug --enable-version-specific-runti
me-libs --build=mingw32 --prefix=/mingw
Thread model: win32
gcc version 4.6.1 (GCC)
編集
同様の質問: FTGL 未定義の参照はすべてありますか? 、しかし、その質問の答えは私の問題を解決しません.私はまだこれらの2つのエラーを受け取ります.
編集2
最初に FTGL を使用しようとしたとき、MSVC を使用してコンパイルしていましたが、2 つのエラーが発生しました。
最後に code::block を使用して、両方のライブラリで提供される MSVC プロジェクトをインポートしました。2 つのエラーのうちの 1 つが解決されました。しかし、私はまだこれを持っています:
The type 'FTTextureFont' must implement the inherited pure virtual method 'FTFont::MakeGlyph'
編集3
freetype 2.3.4 で FTGL 2.1.2 をコンパイルしようとしましたが、問題は解決しませんでした。freetype 2.3.4でFTGL 2.1.3 rc5を試しましたが、同じです。念のため、freetype 2.3.5 と 2.4.8 も試しました (最初は既に 2.4.8 でした)。
コードをヘッダー ファイルに移動しようとしましたMakeGlyphが、問題は解決しませんでした。
ここに私が見つけた便利なリンクがいくつかありますが、まだ問題を解決していません。
編集4
リンカーフラグを削除するftglと、コンパイラはこれについて不平を言います:
undefined reference to FTPixmapFont::FTPixmapFont(char const*)'
collect2: ld returned 1 exit status
Build error occurred, build is stopped
そして、まだ純粋仮想メソッドMakeGlyphエラーが発生します。
リンカー フラグを使用すると、 「継承された Pure Virtual メソッド MakeGlyph を実装する必要があります」ftglというエラーのみが表示されます。コンパイラはプロジェクトを正常にビルドします (ただし、起動時にクラッシュします)。
-lmingw32 -lSDLmain -lSDL -lSDL_image -lSDL_net -lSDL_ttf -lfreetype -lftgl -lopengl32 -lglu32
Build complete for project GetRandomGame
FTPixmapFont.cppしたがって、純粋仮想メソッドを定義する必要があるため、FTGL lib が正しくコンパイルされていないと考えていMakeGlyphます。私はC ++でこれらすべてのlibのことを初めて知り、libの構築に何か間違ったことをしている可能性があります。
編集5
ファイルが必要な例を読んで見たので、FTGLに付属するconfig.h適切に構成されたファイルを追加しました。config.h
ftgl次に、ディレクトリで提供されている例で次のコードを見つけ、それをFontクラスに追加しました。
class FTHaloFont : public FTFont
{
public:
FTHaloFont(char const *fontFilePath) : FTFont(fontFilePath) {}
protected:
virtual FTGlyph* MakeGlyph(FT_GlyphSlot slot)
{
return new FTHaloGlyph(slot);
}
};
そこに定義しMakeGlyphても、Eclipse は実装されていない純粋仮想メソッドについて文句を言いFTFont::MakeGlyphます。
編集6
gdb を使用してコマンド ラインからデバッグを試みましたが、freetype6.dll が見つからないことがわかりました。私は今、解決策を見つけようとしています。