2009-11-20 93 views
1

我做了一个新项目并且复制了this guide,但是每当我调用任何OpenGL函数时,它就会标记为// Drawing code here的地方崩溃。我有这样的有:可可应用程序在OpenGL调用上崩溃

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,这样我就可以专注于游戏代码。

谢谢。

+0

我没有看到标有“此处绘制代码”的位置。 – 2009-11-21 02:19:23

+0

另外,您可以使用调试器(或在Xcode中不运行应用程序时的崩溃日志)来查找导致崩溃的确切函数调用。 – 2009-11-21 02:20:04

+0

@Peter Hosey:哦,它实际上是//在这里添加你的绘图代码。我确实使用过调试器,它在任何OpenGL函数调用中崩溃。但是,如果我使用-drawRect(不使用CVDisplayLink),它就可以工作。嗯... – mk12 2009-11-21 02:36:01

回答

1

您链接的文章并不是一个完整的项目 - 它只是使用CVDisplayLink来驱动绘图循环的讨论和示例。你可能会更好地开始与苹果的OpenGL Programming Guide.

-1

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

+0

没有区别,它仍然崩溃。 – mk12 2009-12-15 01:17:32

+0

我在Mac上完成了有限的OpenGL开发,并且工作正常。但是,我使用直接的C/C++,尽可能避免使用Objective-C和Mac OS/X GUI的所有东西。我甚至没有用XCode IDE构建,只做通用的命令行构建,仅为链接器指定'-framework AGL'和'-framework Carbon'参数。我使用SDL来完成所有的窗口和OpenGL初始化,这是一个很好的跨平台KISS解决方案。不知道这是否会对你更好,你可以试试。 – 2009-12-15 17:56:34

+0

除了用可可代替碳之外,我该怎么做? Carbon是否会被弃用(而且不是64位)? – mk12 2010-01-01 22:22:18

0

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