Cocoa应用程序崩溃在OpenGL调用上

时间:2009-11-20 22:39:15

标签: cocoa opengl macos crash function-call

我创建了一个新项目并且几乎复制了this guide,但每当我调用任何OpenGL函数时,标记为// Drawing code here的地点就会崩溃。我在那里:

glViewport(0, 0, [self bounds].size.width, [self bounds].size.height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, [self bounds].size.width, [self bounds].size.height, 0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.375, 0.375, 0.0);

glClearColor(1, 1, 1, 1);
glClear(GL_COLOR_BUFFER_BIT);

glColor3f(0, 0, 0);

glBegin(GL_LINES);
glVertex2f(10, 10);
glVertex2f(300, 300);
glEnd();

glFlush();

但是只是调用一个OpenGL函数会崩溃它,报告GDB: Program received signal: "EXC_BAD_ACCESS".首先,如果它确实有效,那么代码是否正常?每次被调用时都在顶部做所有的事情?它应该是2d,原点在左上角。为什么会崩溃?我已经链接并导入了CoreVideo和OpenGL ......我想设置一个Cocoa应用程序来使用OpenGL,这样我就可以专注于游戏代码了。

感谢。

3 个答案:

答案 0 :(得分:1)

您链接的文章并不是一个完整的项目 - 它只是使用CVDisplayLink来驱动绘图循环的讨论和示例。从Apple的OpenGL Programming Guide.

开始,你可能会做得更好

答案 1 :(得分:0)

Apple's sample code for GLFullScreen中查看MyOpenGLView.m。他们成功使用了CVDisplayLink。 “驱动OpenGL渲染循环”中缺少的是您需要添加互斥锁以避免两个线程访问相同的opengl上下文。

答案 2 :(得分:-1)

您可以尝试用硬编码的数字替换'[self bounds] .size.width',看看是否是问题的一部分。