cocoa opengl如何显示多个视口

时间:2013-01-20 15:14:27

标签: cocoa opengl

我正在使用以下示例:http://dragonsandbytecode.wordpress.com/2012/06/07/game-dev-diary-5-about-textures-and-2d/

我希望显示多个视口,最好是我可以通过按1,2,3,4等来打开和关闭它们。但首先,我如何显示多个视口?在以下功能中:

- (void)reshape {
NSRect rect = [self bounds];

glViewport(0, rect.size.height/2, rect.size.width/2, rect.size.height/2);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(50, rect.size.width/rect.size.height, .1, 30);


glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glEnable(GL_DEPTH_TEST);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable( GL_BLEND );
glEnable(GL_TEXTURE_2D);

}

如果我写了一个以上的glviewport,它会覆盖另一个。我在某个地方读到了我必须首先让opengl画到屏幕上,但是我该怎么做?如果我听起来毫无头绪,我会道歉,但我非常感谢能帮助我的人。在GLUT中,我总是使用子窗口,但看到它会使用许多不同的上下文,我认为更好的方法是使用glViewport()代替。

1 个答案:

答案 0 :(得分:0)

如果你再次调用glviewport,你只需要将相同的OpenGL上下文的视口设置为一个新的矩形,覆盖以前的设置,这显然不是你想要的。

如果您的各种基于OpenGL的视图位于屏幕的不同区域,并且它们之间具有非OpenGL内容,那么在OpenGL中,您需要的是为每个视图使用单独的GL上下文(您可以实现通过使用基于NSOpenGLView的多个视图)。或者,如果您的GL视图是相邻的,您会发现使用单个OpenGL上下文(就像您正在做的那样)更简单,但是在一个地方绘制所有内容。

对于同一窗口中GLUT的多个上下文,它并不像我这样可能。相反,我强烈建议使用Apple提供的OpenGL集成(NSOpenGLView,NSOpenGLContext等)。见这里:https://developer.apple.com/opengl/