0

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;

我怎么才能得到它?这里有什么问题?谢谢你。

4

0 回答 0