GLKView 有一个问题,我经常被困在这里。首先,我创建 EAGLContext 上下文并将其设为最新:
EAGLContext* pOpenGLContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3];
if(!pOpenGLContext)
return nil;
if(![EAGLContext setCurrentContext:pOpenGLContext])
return nil;
运行正常(我需要第 3 版,所以它很适合我)!然后我创建 GLKView,附加到先前创建的上下文:
GLKView* pOpenGLView = [[GLKView alloc] initWithFrame:Frame context:pOpenGLContext];
没关系。但是这段代码根本没有改变任何东西:(
[pOpenGLView setDrawableColorFormat:GLKViewDrawableColorFormatRGBA8888];
[pOpenGLView setDrawableDepthFormat:GLKViewDrawableDepthFormat24];
[pOpenGLView setDrawableStencilFormat:GLKViewDrawableStencilFormatNone];
[pOpenGLView setDrawableMultisample:GLKViewDrawableMultisampleNone];
然后我做一些最后的事情:
pOpenGLView.delegate = self;
[pMainWindow addSubview:pOpenGLView];
...
但是,在使用 GLKViewDrawableStencilFormatNone 之后,我向 OpenGL 询问深度和模板格式……我得到:
glGetIntegerv(GL_DEPTH_BITS, &OpenGLDepthBits); // = 32 (I need 24)
glGetIntegerv(GL_STENCIL_BITS, &OpenGLStencilBits); // = 8 (I need 0)
我需要关闭模板缓冲区!我需要设置 24 位格式的深度缓冲区。我也尝试这样做:
pOpenGLView.drawableColorFormat = GLKViewDrawableColorFormatRGBA8888;
pOpenGLView.drawableDepthFormat = GLKViewDrawableDepthFormat24;
pOpenGLView.drawableStencilFormat = GLKViewDrawableStencilFormatNone;
我怎么才能得到它?这里有什么问题?谢谢你。