我在浮动 NSPanel 中有一个 NSOpenGLView 对象,我使用 glDrawPixels 渲染图像。在调整窗口大小之前,一切正常。当调用 NSPanel 对象的调整大小函数时,我通过返回固定大小来阻止调整大小,但是当光标单击在窗口边缘并尝试调整窗口大小时,窗口不会调整大小,但在按住几秒钟后,OpenGL 视图的自动更新停止被调用。
以下是简化的步骤列表:
- 自动调用drawRect
- 用户尝试调整窗口大小(单击并拖动几秒钟)
- drawRect 停止自动调用。(reshape 函数中的 setNeedsDisplay 或 [openglcontext update] 无济于事)
我的 OpenGLContext 设置为以下格式:
NSOpenGLPFANoRecovery,
NSOpenGLPFAWindow,
NSOpenGLPFAAccelerated,
NSOpenGLPFADoubleBuffer,
NSOpenGLPFAColorSize, 24,
NSOpenGLPFAAlphaSize, 8,
NSOpenGLPFADepthSize, 2,
NSOpenGLPFAStencilSize, 8,
NSOpenGLPFAAccumSize, 0, 0
在drawRect中:
glClearColor(0, 0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT);
[[self openGLContext] makeCurrentContext];
glOrtho(0, self.frame.size.width, 0, self.frame.size.height, 1, -1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glDisable(GL_DEPTH_TEST);
// Drawing code here.
[[self openGLContext] flushBuffer];
有谁知道让drawRect自动更新重新启动的解决方案?我知道,或者我可以完全摆脱自动更新并使用 NSNotificationCenter 或使用 NSTimer 自己调用它,但如果我可以使用默认的 OpenGL 上下文和默认更新方法,我更愿意。提前感谢您的帮助!
- - - - - 编辑 - - - - - -
我找到了上述问题的可能解决方案,但我意识到还有另一个问题,即更新会突然停止。上述解决方案的问题不是一个优雅的问题,但它确实有效。我基本上禁用了启用调整大小蒙版的窗口样式蒙版。任何人都知道为什么 drawRect 会随机停止?有时它会完全渲染,但有时它会冻结并且永远不会继续。