iOSのレンダリングにフレームバッファオブジェクトを使用すると、AppleのiOS向けOpenGL ESプログラミングガイドに従ってiOS上でレンダリングするのが好ましいと思われます。幅と高さなどのプロパティを指定するには、glRenderbufferStorage()を使用する必要があります。 Munshi、Ginsburg、ShreinerのOpenGL ES 2.0プログラミングガイドへ。 Appleはこれを上記のguideのEAGLContextに送られたrenderbufferStorage:fromDrawable:メッセージで置き換えます。OpenGL ESのCAEAGLLayerプロパティを設定していますか?
アップリケは、Renderbufferから幅と高さを取得するように書いています。詳細については何も書かれていません。
幅と高さは0です。
CAEAGLLayer Class Referenceは、「ディスプレイのサイズに合わせてレイヤーの境界を設定する」と書いています。 CAEAGLLayerクラスは、Appleが使用するビューのバッキングクラスとして使用するクラスです。これは、viewClassメソッドから返すことで行われます。このCAEAGLLayerには、NSDictionaryである1つのプロパティ "drawableProperties"しかありません。残念ながら、そのドキュメントはまばらです。寸法は設定できません。
したがって、OpenGL ESのCAEAGLLayerプロパティを設定するにはどうすればよいですか?
はここに(私はどちらか推測したり、どこか私はinitWithFrameを使用することを覚えていないからだ、initWithCoderを使用して、アップルの古い例注)これまでに私のコードです:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
// Initialization code
theCAEAGLLayer = (CAEAGLLayer*)self.layer;
theCAEAGLLayer.opaque = YES;
theEAGLContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
[EAGLContext setCurrentContext:theEAGLContext];
glGenFramebuffers(1, &theFramebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, theFramebuffer);
glGenRenderbuffers(1, &theColorRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, theColorRenderbuffer);
[theEAGLContext renderbufferStorage:GL_RENDERBUFFER fromDrawable:theCAEAGLLayer];
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, theColorRenderbuffer);
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &widthOfTheColorRenderbuffer);
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &heightOfTheColorRenderbuffer);
glGenRenderbuffers(1, &theDepthRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, theDepthRenderbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, widthOfTheColorRenderbuffer, heightOfTheColorRenderbuffer);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, theDepthRenderbuffer);
if(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
{
}
}
return self;
}
ご意見ありがとうございます。私はlayoutSubviewsに移動しようとしましたが、これで解決できませんでした。 layerClassは実際に[CAEAGLLayer class]を返しています。ビューのサイズは「Xcode」に「適合するように」設定されています。レイヤのサイズを変更するにはどうすればよいですか?私はGLKViewとGLKViewControllerで何ができるかを見ていきます。 – Lars
レイヤーは自動的にビューのサイズに合わせる必要がありますので、見ているものは非常に興味があります。チャンスをつかんだときにGLコードを掘り下げて、もっと役に立つものを見つけられるかどうかを見てみましょう。申し訳ありませんが、私はまだここに、これは間違いなく答えのタイプです供給することができていません。 – Tommy