IPhone: Разделение прозрачного представления openGL поверх UIView?

Я работаю над iPhone-приложением, и у меня есть рендеринг представления openGL поверх обычного UIView. Он работает, но я не могу заставить openGL иметь прозрачный фон, который показывает UIView внизу. Вместо этого я получаю большой черный ящик.

Я попытался установить цвет фона в UIColor clearColor, я установил opaque в NO, я установил glClearColor в 0.0.0.0.0.0.0.0.

Я думаю, что я неправильно понимаю/неправильно использую что-то, связанное с режимами наложения, но я не уверен. Может ли кто-нибудь дать мне несколько примеров кода, который показывает, как это сделать?

Спасибо заранее.

Ответ 1

Вот что я должен был сделать, чтобы заставить это работать:

eaglLayer.opaque = NO;      
eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:
                                kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat, nil];
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

И если вы делаете то, что делаете, и пытаетесь протестировать его с помощью демонстрации GLGravity, там вызывается еще один вызов glClearColor(0.0f, 0.0f, 0.0f, 1.0f); при каждом вызове drawView - поэтому убедитесь, что вы изменили его на glClearColor(0.0f, 0.0f, 0.0f, 0.0f); тоже!:)

Ответ 2

Добавьте те в EAGLView.m

-(id)initWithCoder:(NSCoder*)coder

self.opaque = NO;
self.backgroundColor = [UIColor clearColor];

CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer;
eaglLayer.opaque = NO;

CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
const CGFloat myColor[] = {0.0, 0.0, 0.0, 0.0};
eaglLayer.backgroundColor = CGColorCreate(rgb, myColor);
CGColorSpaceRelease(rgb);

Ответ 3

Проверьте цветовой формат вашего представления. Если вы установили его в kEAGLColorFormatRGB565 через словарь drawableProperties, альфа-канал содержимого представлений будет неявно рассматриваться как 1.0, независимо от того, что вы рисуете в нем.