我在浮动NSPanel中有一个NSOpenGLView对象,我使用glDrawPixels渲染图像。一切正常,直到窗口调整大小。当调用NSPanel对象的resize函数时,我通过返回固定大小来阻止调整大小,但是当光标单击位于窗口边缘并尝试调整窗口大小时,窗口不会调整大小但是在保持之后几秒钟后,OpenGL视图的自动更新停止被调用。
以下是简化的步骤列表:
我的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会随机停止?有时它会完全呈现,但有时它会冻结而永远不会继续。