【问题标题】:Cocoa application crashing on OpenGL call可可应用程序在 OpenGL 调用上崩溃
【发布时间】:2009-11-20 22:39:14
【问题描述】:

我创建了一个新项目并且几乎复制了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". 首先,如果它确实有效,那么这段代码好吗?每次被调用时都在顶部做所有这些事情?它应该是二维的,原点在左上角。为什么会崩溃?我已经链接并导入了 CoreVideo 和 OpenGL...我想设置一个使用 OpenGL 的 Cocoa 应用程序,这样我就可以专注于游戏代码。

谢谢。

【问题讨论】:

  • 我没有看到标有“Drawing code here”的地方。
  • 另外,您可以使用调试器(或崩溃日志,当不在 Xcode 中运行您的应用时)找到导致崩溃的确切函数调用。
  • @Peter Hosey:哦,原来是// Add your drawing codes here。而且我确实使用了调试器,它在任何 OpenGL 函数调用时都会崩溃。但如果我使用 -drawRect(不使用 CVDisplayLink)来做,它就可以工作。嗯……

标签: cocoa opengl macos crash function-call


【解决方案1】:

您链接的文章实际上并不是一个完整的项目——它只是使用 CVDisplayLink 驱动绘图循环的讨论和示例。从 Apple 的 OpenGL Programming Guide. 开始,您可能会做得更好

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 没区别,还是会崩溃。
      • 我在 Mac 上进行了有限的 OpenGL 开发,它可以工作。但是,我直接使用 C/C++ 并尽可能避免使用所有 Objective-C 和 Mac OS/X GUI 的东西。我什至不使用 XCode IDE 构建,只是进行通用命令行构建,只为链接器指定“-framework AGL”和“-framework Carbon”参数。我使用 SDL 进行所有窗口和 OpenGL 初始化,这是一个不错的跨平台 KISS 解决方案。不知道这对你是否更有效,你可以试试。
      • 除了使用 Cocoa 而不是 Carbon,我怎么能做到这一点? Carbon 不会被弃用(并且没有 64 位)吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多