试图使用CARenderer将Core Animation图层树渲染到OpenGL上下文中,我已经呆了几个小时。OpenGL上下文当前由Interface Builder中设置的NSOpenGLView子类提供,默认设置为。
这是我在示例中设置CALayers的方法:
l1 = [[CALayer layer] retain]; // l1 is an instance variable
l1.bounds = CGRectMake(0, 0, 100, 100);
l1.backgroundColor = CGColorCreateGenericRGB(1, 1, 0, 1);
CALayer* l2 = [CALayer layer];
l2.bounds = CGRectMake(0, 0, 20, 20);
l2.backgroundColor = CGColorCreateGenericRGB(1, 0, 0, 1);
l2.position = CGPointMake(50, 50);
[l1 addSublayer:l2];
Run Code Online (Sandbox Code Playgroud)
如果我将它们添加到常规NSView中,它们会很好显示。
这是我的NSOpenGLView子类的绘图代码:
- (void) drawRect:(NSRect)dirtyRect
{
NSRect frame = [self frame];
// set up context according to CARenderer.h instructions
glViewport(0, 0, frame.size.width, frame.size.height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, frame.size.width, 0, frame.size.height, -1, …Run Code Online (Sandbox Code Playgroud)