1

私はiPhoneでopenGLプログラミングとマルチスレッドを初めて使用し、小さなopenGLゲームを作成しようとしていて、小さなパフォーマンスの問題に直面しています。

ゲームはグラフィックスを個別のopenGLビューとしてレンダリングし(私は今のところES 1.1を使用しています)、レンダリングエンジンはユーザーの方向(コンパスなど)に応じてグラフィックスを更新します。オンラインで人々の経験を経て、私は次のことを決めました。

  1. すべての openGL 関連の操作を別のスレッドで実行します (スレッド間での openGL 関連の操作はありません)。
  2. メインスレッドで位置情報サービスからコールバックを実行する
  3. デリゲートを使用して、Location Controller と私の openGLViews の間で見出しの更新を通信します。

    -(void)loadGame{
    
    //other loading operations
    
    [self loadThreads];
    
    [graphicsThread start];
    
    }
    
    -(void)loadThreads{
    
    //graphics thread is an ivar          
        graphicsThread = [[NSThread alloc] initWithTarget:self selector:@selector(loadGameViews) object:Nil];
    
        //load other thread related stuff
    
    }
    
    
    -(void)loadGameViews{
    
         //create and load all openGLViews
    
    
        }
    

編集 :

 -(void)loadGameViews{

         //create and load all openGLViews
        [self.openGLView performSelector:@selector(startAnimation) onThread:graphicsThread withObject:NULL waitUntilDone:NO];

        }         

コードは正常に動作しますが、フレーム レート (iPad でのテスト) が 40 FPS に低下していることに気付きました (シングル スレッドで実行している場合、iot は 60 でした)。知りたかった:

  1. 40 FPS がゲームの許容フレーム レートである場合。
  2. スレッド ロジックが正しい場合 (または、これを行うためのより良い方法はありますか?)
  3. フレームレートを 60 FPS に戻す方法があれば
4

0 に答える 0