2012年12月26日

非同期テクスチャ読み込み

非同期のテクスチャ処理ではまったのでメモ

OpenGL使って画像を表示していたのですがいままでは同期処理で読み込んでました。
次作るゲームは画像が多そう&遷移多そうなので非同期処理を実装しようと思いコーディング

まずは単純にdispatch_asyncを使いロード→ロード終了時コールバックの流れで構築
なぜか、画像が表示されない。
glGenTexturesでうまくテクスチャIDが割り当てされていない。
関連資料をあさってみる

どうやらGLコンテキストを扱う処理(この場合はテクスチャ割りあて〜テクスチャロード)は
作成したスレッド(通常メインスレッド)のみでしか扱えないらしい。

ということで修正

glのテクスチャ関連処理をのみメインスレッドに投げることで画像が表示されましたとさ。
一応、同期処理との兼ね合い等々も考慮して以下のソースで正しく動いてるぽい。

if( dispatch_get_current_queue() != dispatch_get_main_queue() )
{
    dispatch_async(dispatch_get_main_queue(), ^{
        /* テクスチャロード処理 */
    });
}
else
{
    /* テクスチャロード処理 */
}


なんかもう少しスマートな方法無いかしら...
【関連する記事】
posted by slaia at 15:03| Comment(0) | iphoneアプリ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

×

この広告は180日以上新しい記事の投稿がないブログに表示されております。