【问题标题】:OpenGL Problems When Compiling Across Linux Distributions跨 Linux 发行版编译时的 OpenGL 问题
【发布时间】:2010-07-26 17:52:29
【问题描述】:

我最近在 opengl(使用 freeglut)中编写了一个迷宫游戏,在 Ubuntu 或 Cygwin 中构建时运行良好,但在使用 freeglut 构建在 Fedora Core 12 上时,游戏崩溃了,我的教授什么也看不到他在他的机器上构建它(他没有透露操作系统)。

另外,在之前的作业中,即使我已经实现了双缓冲,并且在每次显示后刷新缓冲区,我也会出现闪烁。闪烁发生在我的 Fedora 机器上,很少发生在我的 Ubunutu 机器上,而在 cygwin 中则完全没有。

最后,在 Fedora 机器上,雾非常浓,似乎忽略了对“glFogf(GL_FOG_DENSITY, 0.1)”的调用。然而,在 Cygwin 和 Ubuntu 上,雾的表现完美无缺。

操作系统之间的 freeglut 实现之间是否存在许多差异,这将是一个问题?我的教授似乎准备在这些项目上让我失望,但我不知道为什么 opengl 在操作系统之间表现得如此不稳定。

如果您有任何见解,请告诉我,感谢您的宝贵时间。

【问题讨论】:

  • 每种情况涉及哪些 GPU?
  • 好吧,首先确保你们都使用相同的库和相同的版本。此外,您的应用程序的性能高度依赖于显卡。你的教授有哪个 GPU?这些都是需要考虑的事情。

标签: c++ opengl ubuntu fedora freeglut


【解决方案1】:

我把以下两个电话按顺序混在一起了。应该是这样的。

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutCreateWindow("我的窗口");

我是这样的:

glutCreateWindow("我的窗口"); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);

因此,我不能保证一个双缓冲窗口,因此有时它会闪烁,有时它不会。

同样在 Red-Hat 发行版中,size_t 被定义为有符号整数,而 Ubuntu 使用无符号整数。这导致我的教授机器在尝试使用函数 fread() 时出现循环问题,该函数的返回类型在 Fedora 中为 -1,在 Ubuntu 中为 static_cast(-1),我认为这不好:/。我花了几天时间在 Ubuntu 内核源代码中查找问题。

【讨论】:

    【解决方案2】:

    我有教 OpenGL 的经验,当 glut 的使用方式与预期不同时,就会发生这种情况。一些实现/驱动程序处理它,而另一些则不处理 - 当它们以非标准方式使用时,实现之间存在很大差异。当以标准方式使用时,差异非常小。

    我见过的最常见的原因是每次更改屏幕后都没有调用 glutPostRedisplay。

    其他可能的原因是在显示功能以外的地方绘图,或者没有正确设置回调。

    除此之外,我只能猜测发生了什么,但如果一个实现根本没有显示任何内容,那么我很确定你有一些基本错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      • 1970-01-01
      • 1970-01-01
      • 2015-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多