-setWantsLayer вызывает искажение NSOpenGLView

Это то, что я хочу сделать с моим NSOpenGLView. В настоящее время NSOpenGLView покрывает всю область окна, и я хотел бы добавить кнопки, nsviews и изображения поверх NSOpenGLView. Я просмотрел Интернет и обнаружил, что [myOpenGLView setWantsLayer:YES]; позволяет мне делать такие вещи, как [myOpenGLView addSubView:someView].

Вот что я получаю в результате:

введите здесь описание изображения

(Несколько плохой пример, так как я смотрел Гриффинов, но доказывает тот факт, что здесь происходит перехват буфера видеопамяти)

Как вы можете видеть, это искажает некоторый буфер видеопамяти на окно. Теперь я занимался отладкой, и проблема заключается в -setWantsLayer. Как только я закомментирую эту строку в своем коде, все элементы OpenGL будут отображаться правильно.

Это то, что я должен получить:

введите здесь описание изображения

Итак, мой вопрос: как я могу правильно отображать свое представление OpenGL и в то же время -addSubViews?

У Apple есть действительно хороший пример проекта под названием «LayerBackedOpenGLView» (http://developer.apple.com/library/mac/#samplecode/LayerBackedOpenGLView/Introduction/Intro.html), и я уже давно смотрю на это, и я не знаю что я делаю по-другому в нем. Одна вещь, которую я заметил, заключалась в том, что вместо использования NSOpenGLView Apple использует NSView и изменяет класс на пользовательский класс, который является подклассом NSOpenGLView, в то время как я использую NSOpenGLView и изменяю класс на пользовательский класс, который снова является подклассом NSOpenGLView. Не уверен, что это вызовет какие-либо проблемы, но у меня все равно возникнет та же проблема, если я поменяю ее на NSView.


person lab12    schedule 20.08.2011    source источник
comment
Выходи за меня замуж, и я-и-и-и куплю тебе чиееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее-гууууууууу! ;-)   -  person Joshua Nozzi    schedule 02.10.2011


Ответы (1)


У меня была такая же проблема, но я решил ее, прочитав пример кода ReadMe. Вам нужно реализовать -drawRect: в вашем подклассе NSOpenGLView. Без него резервное копирование слоев не поддерживается.

Итак, реализуйте -drawRect и рисуйте там. Одна раздражающая вещь заключается в том, что вам, вероятно, лучше отделить сцену от openglview. Это то, что они сделали в примере кода.

person Fatso    schedule 02.10.2011