OpenGL ES 2.0 でシーンを描画するアプリがあります。Retina ディスプレイを使用しない限り、iPhone と iPad のシミュレーター、および実際のデバイスですべてが正しくレンダリングされます。Retina デバイスは引き続き描画しますが、古いデバイスと同じ解像度です。
新しいデバイスでは、黒い画面しか表示されません。Retina シミュレーターでは、ピンク色の画面が表示されます。プログラムは、glClearColor(); で設定した値を使用することさえありません。
次のコードを使用して、デバイスの倍率を正しく設定できます。
_eaglLayer = (CAEAGLLayer *)self.layer;
_eaglLayer.opaque = YES;
self.contentScaleFactor = [[UIScreen mainScreen] scale];
_eaglLayer.contentsScale = [[UIScreen mainScreen] scale];
そして、ここでレンダー バッファーを正しく作成できます。
glGenRenderbuffers(1, &_depthRenderBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, _depthRenderBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, self.frame.size.width, self.frame.size.height);
//Context is an instance of EAGLContext
[_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:_eaglLayer];
ビューポートのサイズを次のように設定しました。
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &_backingWidth);
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &_backingHeight);
...
glViewport(0, 0, _backingWidth, _backingHeight);
このコードはすべて古いデバイスで動作し、次の行をコメントアウトすると問題なく動作します。
self.contentScaleFactor = [[UIScreen mainScreen] scale];
_eaglLayer.contentsScale = [[UIScreen mainScreen] scale];
ビューの読み込み時にスケールをログに記録したところ、Retina デバイスでは値が 2.0 に、古いデバイスでは 1.0 に正しく設定されました。
スケール係数を設定するさまざまなソリューションと方法をいくつか試しましたが、役に立ちませんでした。見えないものがあることは知っていますが、見つけることができません。提案?