2011-08-20 32 views
3

我一直想弄明白這一點,但這是我想要做的與我的NSOpenGLView。目前,NSOpenGLView覆蓋了窗口的整個區域,我想在NSOpenGLView上添加按鈕,nsviews和圖像。我瀏覽網頁,發現[myOpenGLView setWantsLayer:YES];可以讓我做像[myOpenGLView addSubView:someView]這樣的事情。嗯,這是我得到的結果:-setWantsLayer導致NSOpenGLView失真?

enter image description here

(有點壞榜樣,因爲我是看家庭蓋伊,但證明了一個事實,即視頻內存緩衝區抵達該處攔截)

正如你所看到的,它將一些視頻內存緩衝區扭曲到窗口上。現在我正在做一些調試,問題在於-setWantsLayer。一旦我在我的代碼中註釋掉該行,所有的OpenGL東西都會正確顯示。

enter image description here (這是我應該得到......)

所以我的問題是我怎麼能正確地顯示我的OpenGL視圖,並在同一時間-addSubViews

蘋果有這方面的工作被稱爲「LayerBackedOpenGLView」(http://developer.apple.com/library/mac/#samplecode/LayerBackedOpenGLView/Introduction/Intro.html)的一個很好的例子項目,我一直在尋找它的好時機,我不知道我在裏面做什麼不同。我注意到的一件事是,不使用NSOpenGLView,Apple使用NSView並將類更改爲子類NSOpenGLView的自定義類,同時我使用NSOpenGLView並將該類更改爲自定義類,該類自動再次對NSOpenGLView進行子類化。不知道這是否會導致任何問題,但如果將其更改爲NSView,我仍然會遇到同樣的問題。

任何幫助,非常感謝!

+2

嫁給我和IIIII會買youuuu cheeeewwwwwwing guuum! ;-) –

回答

2

我自己也有同樣的問題,但通過閱讀示例代碼ReadMe解決了這個問題。您需要在您的NSOpenGLView子類中實現-drawRect:。沒有它,層支持不被支持。

因此,執行-drawRect並在那裏執行繪製。一個令人討厭的事情是,你可能更好地將場景從openglview中分離出來。這就是他們在示例代碼中所做的。