アプリ ストア以外のアプリでは、プライベート フレームワーク Core Surface を使用して、iPhone の画面に直接描画しています。ただし、CPU を大量に使用して描画を行うため、古いデバイスではかなり遅くなる可能性があります。これを修正するために、OpenGLES を使用してピクセルを画面にレンダリングすることにしました。
現在 (これを変更する方法はありません)、BaseAddress と呼ばれる unsigned short * 変数への参照があり、重要なサード パーティ コードが BaseAddress にアクセスし、新しいピクセル データで更新します。
GLKViewController をセットアップし、viewDidLoad を次のように実装しました。
- (void)viewDidLoad {
[super viewDidLoad];
self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
if (!self.context) {
NSLog(@"Failed to create ES context");
}
[EAGLContext setCurrentContext:self.context];
GLKView *view = (GLKView *)self.view;
view.context = self.context;
glGenBuffers(1, &screenBuffer);
glBindBuffer(GL_ARRAY_BUFFER, screenBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(BaseAddress), BaseAddress, GL_DYNAMIC_DRAW);
}
screenBuffer はインスタンス変数です。glkView:drawInRect: メソッドには、次のものがあります。
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
glDrawElements(GL_ARRAY_BUFFER, sizeof(BaseAddress)/sizeof(BaseAddress[0]), GL_UNSIGNED_SHORT, BaseAddress);
}
残念ながら、アプリを実行すると黒い画面しか表示されません。Core Surface の使用に戻ると、アプリは正常に動作します。基本的に、OpenGLES を使用して画面にピクセルを描画するにはどうすればよいですか?