2016-09-01 18 views
0

libgdxスレッドのFreeTypeFontGeneratorでフォントを読み込もうとすると、フォントが黒くなります(スレッドにロードされていない場合は問題ありません)。私は下の画像を掲載します。どうすればこの問題を回避できますか?私はそれらを私のassetManagerでasynconiouslyロードすることを望みますが、動的に作成する必要があるため、assetManagerを使用してフォントを読み込むことはできません。ありがとう!あなたが見たいコードがあるかどうかを教えてください。Libgdx |スレッドでフォントを作成すると、黒のテクスチャが付いていないフォントが作成されます

enter image description here

+0

コードを表示します。 –

+0

FreeTypeFontGeneratorはこれをサポートしていません。誰かがそれを更新してGL以外のものを別のメソッドに分割するのはいいかもしれないので、最初の非同期、GLスレッドの2番目の同期の2つのステージで行うことができます。 – Tenfour04

答えて

0

これはlibgdxが構築されているの上に基礎であるのOpenGLの制限です。

OpenGLでは、アセットを現在のrendering contextにロード(リリース)する必要があります。リソース(アセットまたはフォント)を別のスレッドにロードするには、コンテキストを明示的に変更する必要があります。

私が作成し、OpenGLコンテキストが入っているものとは別のスレッドでリソースを処分することができOpenGL and multithreadingを参照してください?

コンテキストを最新にする場合(Windowsの場合はwglMakeCurrent)。しかし、それは何かがあれば、あなたにはあまり買わないので、トラブルの価値はありません。

GLコンテキストが別のスレッドの現在のものである場合はwglMakeCurrent(NULL、NULL)を呼び出し、もう一方のスレッドではwglMakeCurrent(dc、glrc)を呼び出すことをお勧めします。

Thread_1:

wglMakeCurrent(NULL, NULL); 
WaitForThread2(); OrDoSomeCPUJob(); 
wglMakeCurrent(dc, glrc); 

Thread_2:

wglMakeCurrent(dc, glrc); 
DoSome_GL_Work(); 
wglMakeCurrent(NULL, NULL); 
TerminateThread2_And_GiveControlToThread1(); 

AssetManagerの目的は、安全ながら非同期に読み込むことです前述のOpenGLコンテキストスイッチを処理します。したがって、手動で作成したスレッドにそれらをロードする代わりに、を使用する方がはるかに安全で優れた方法です。

手動スレッドを使用する必要がある場合は、上記の手動切り替えも作成する必要があります。実行されていない場合、ロードされたリソースはgpuメモリに正しく転送されない可能性があるため、レンダリングには使用できません(したがって、黒)。

関連する問題