NSOpenGLView子类不用窗口调整大小

时间:2015-03-27 02:23:06

标签: macos cocoa opengl nsopenglview

在调整窗口大小时,我一直试图让NSOpenGLView正确调整大小,但我一直在做一些我无法解释的怪异行为。它看起来像这样:

原创(开头的样子):

调整大小后:

这是我的调整代码:

- (void)reshape
{
    [super reshape];

    CGLLockContext([[self openGLContext] CGLContextObj]);

    NSRect viewRectPoints = [self bounds];

#if SUPPORT_RETINA_RESOLUTION

    NSRect viewRectPixels = [self convertRectToBacking:viewRectPoints];

#else //if !SUPPORT_RETINA_RESOLUTION

    NSRect viewRectPixels = viewRectPoints;

#endif // !SUPPORT_RETINA_RESOLUTION

    [self resizeWithWidth:viewRectPixels.size.width
                  AndHeight:viewRectPixels.size.height];

    CGLUnlockContext([[self openGLContext] CGLContextObj]);
}

- (void) resizeWithWidth:(GLuint)width AndHeight:(GLuint)height
{
    glViewport(0, 0, width, height);

    m_width = width;
    m_height = height;
}

我正在使用:" glViewport(0,0,m_width,m_height);"每当我调用glDrawArrays();

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

调整窗口大小时,还应设置投影矩阵以反映新尺寸。您没有发布您的设置/绘图代码,但通常看起来像:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(...); // or glFrustum(), glOrtho(), gluOrtho2D(), ...
glMatrixMode(GL_MODELVIEW);

答案 1 :(得分:0)

说真的,在这些日子里,您可能需要考虑退出NSOpenGLView并直接转到CAOpenGLLayer

我对这个愚蠢的课程有太多问题,不再需要关注NSOpenGLView,而且在图层支持的视图中,尤其是CAOpenGLLayer恕我直言,只会给你更多的灵活性和控制权。<登记/> (以及更少的错误 - 尝试让NSOpenGLView在10.9或之前的图层支持的视图层次结构中工作。)。

开箱即用的更多功能 - 或至少在您的指尖下(如内置CVDisplayLink支持)。

只是我的2c。