3

これが私の NSOpenGLView でやりたいことです。現在、NSOpenGLView はウィンドウの全領域をカバーしており、NSOpenGLView の上にボタン、nsview、および画像を追加したいと考えています。Web を調べたところ、次の[myOpenGLView setWantsLayer:YES];ようなことができることがわかりました[myOpenGLView addSubView:someView]

これは私が結果として得るものです:

ここに画像の説明を入力

(Family Guy を見ていたため、やや悪い例ですが、ここでビデオ メモリ バッファーが傍受されているという事実を証明しています)

ご覧のとおり、一部のビデオ メモリ バッファがウィンドウ上で歪んでいます。今、私はいくつかのデバッグを行っていましたが、問題は-setWantsLayer. コードでその行をコメントアウトすると、すべての OpenGL が正しく表示されます。

これは私が得るべきものです:

ここに画像の説明を入力

私の質問は、どうすれば OpenGL ビューを正しく表示でき-addSubViewsますか?

Apple には、「LayerBackedOpenGLView」( http://developer.apple.com/library/mac/#samplecode/LayerBackedOpenGLView/Introduction/Intro.html ) と呼ばれるこの作業の非常に優れたサンプル プロジェクトがあり、私はそれをしばらく見てきました。今は良い時間で、私はそれで何が違うのかわかりません。私が気づいたことの 1 つは、NSOpenGLView を使用する代わりに、Apple が NSView を使用してクラスを NSOpenGLView をサブクラス化するカスタム クラスに変更しているのに対し、私は NSOpenGLView を使用してクラスを NSOpenGLView をサブクラス化するカスタム クラスに変更していることです。それが問題を引き起こすかどうかはわかりませんが、NSView に変更しても同じ問題が発生します。

4

1 に答える 1

2

私も同じ問題を抱えていましたが、サンプルコードのReadMeを読んで解決しました。-drawRect: を NSOpenGLView サブクラスに実装する必要があります。これがないと、レイヤー バッキングはサポートされません。

したがって、-drawRect を実装し、そこで描画を行います。それに関する厄介なことの1つは、シーンをopenglviewから分離した方がよいということです。それが、サンプル コードで行ったことです。

于 2011-10-02T13:55:24.040 に答える