Можно ли поместить представление рендеринга OpenGL ES поверх UIView, тогда как UIView просвечивает, как если бы OpenGL ES был PNG с прозрачностью? - PullRequest
1 голос
/ 31 мая 2009

Я понятия не имею об этом, но если бы это было возможно (как, например, Flash), то это было бы действительно здорово.

У меня есть приложение на основе представлений, где мне, вероятно, нужны некоторые возможности OpenGL ES, но я не хочу иметь полноэкранный OpenGL ES. Мне просто нужно это в определенных небольших областях для рисования маленьких диаграмм и других вещей, которые могут быть трудно сделать с основной графикой.

Ответы [ 3 ]

2 голосов
/ 31 мая 2009

Да, это возможно, но я настоятельно рекомендую против этого .

Техническое примечание Apple TN2230: Оптимизация OpenGL ES для iPhone OS охватывает все, что можно и чего нельзя делать.

Эта документация Apple, охватывающая передовой опыт , может помочь понять, что нужно делать и чего не делать.

2 голосов
/ 31 мая 2009

Да,

вы сможете реализовать это через Quartz Core, используя слои (см. Документацию по классу CALayer). Действительно, у вас могут быть иерархии слоев. По сути, вы связываете каждый UIView с другим слоем, затем слои визуализируются вместе, образуя один составной слой. Кроме того, вы также можете применять преобразования и анимацию к слоям.

Вам нужно импортировать заголовок QuartzCore и сделать что-то вроде

#import <QuartzCore/QuartzCore.h>
UIView *myView = [[UIView alloc] initWithFrame...
UIView *openGLView = [UIView alloc] initWithFrame...

CaLayer *myViewLayer = myView.layer;
[myViewLayer addSubLayer: openGLView.layer];

Затем, когда на экране появляется myView, все подслои объединяются и отображаются на экране. Что происходит, так это то, что каждое представление визуализирует свой слой, в то время как myViewLayer визуализируется, объединяя два слоя.

Вы можете иметь столько слоев, сколько захотите. Вы можете создать произвольную иерархию, используя методы CALayer

- addSublayer: - removeFromSuperlayer
- insertSublayer: atIndex:
- insertSublayer: ниже:
- insertSublayer: выше:
- заменить Subublayer: на:

0 голосов
/ 28 июня 2010

Эта «техника» работает очень хорошо и довольно распространена, поскольку UIKit предназначен именно для такого рода вещей, он также работает и другим способом (OpenGL на заднем или переднем плане или в любой комбинации). Просто не забудьте отключить непрозрачный флаг.

Но я не уверен насчет рендеринга GL для CALayer, который активно анимируется; он может просто не обновляться во время анимации. =) Веселитесь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...