Это то, что я хочу сделать с моим 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.