1

我在浮动 NSPanel 中有一个 NSOpenGLView 对象,我使用 glDrawPixels 渲染图像。在调整窗口大小之前,一切正常。当调用 NSPanel 对象的调整大小函数时,我通过返回固定大小来阻止调整大小,但是当光标单击在窗口边缘并尝试调整窗口大小时,窗口不会调整大小,但在按住几秒钟后,OpenGL 视图的自动更新停止被调用。

以下是简化的步骤列表:

  1. 自动调用drawRect
  2. 用户尝试调整窗口大小(单击并拖动几秒钟)
  3. 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 会随机停止?有时它会完全渲染,但有时它会冻结并且永远不会继续。

4

0 回答 0