窗口大小调整后,NSOpenGLView drawRect未调用

时间:2014-02-26 08:22:16

标签: objective-c opengl resize drawrect nsopenglview

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

以下是简化的步骤列表:

  1. drawRect自动调用
  2. 用户尝试调整窗口大小(单击并拖动几秒钟)
  3. drawRect会自动停止调用。 (重塑函数中的setNeedsDisplay或[openglcontext update]没有帮助)
  4. 我的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会随机停止?有时它会完全呈现,但有时它会冻结而永远不会继续。

0 个答案:

没有答案