Проблемы OpenGL при компиляции через дистрибутивы Linux - PullRequest
3 голосов
/ 26 июля 2010

Я недавно написал игру-лабиринт в opengl (с использованием freeglut), которая прекрасно работает при сборке в Ubuntu или Cygwin, но когда она построена на Fedora Core 12 с freeglut, игра разваливается, и мой профессор не видит ничего, когда он строит его на своей машине (ОС, которую он не раскрыл).

Кроме того, в предыдущих заданиях у меня мерцало, хотя я реализовал двойную буферизацию и очищаю буфер после каждого отображения. Мерцание происходит на моей машине Fedora, нечасто на моей машине Ubunutu, а не на cygwin.

Наконец, на машине Fedora туман очень густой и, похоже, игнорирует вызов glFogf (GL_FOG_DENSITY, 0.1). Однако на Cygwin и Ubuntu туман работает безупречно.

Есть ли так много различий между реализациями freeglut между ОС, что это будет проблемой? Похоже, мой профессор готов подвести меня к этим проектам, но я понятия не имею, почему opengl ведет себя странно между операционными системами.

Пожалуйста, дайте мне знать, если у вас есть понимание и спасибо за ваше время.

Ответы [ 2 ]

2 голосов
/ 11 августа 2010

Я получил следующие два вызова по порядку. Должно быть так.

glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutCreateWindow ("Мое окно");

У меня было так:

glutCreateWindow ("Мое окно"); glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);

Как таковое, мне не было гарантировано окно с двойной буферизацией, и поэтому иногда оно мерцало, а иногда - нет.

Также в дистрибутивах Red-Hat size_t определяется как int со знаком, а Ubuntu использует int без знака. Это привело к проблеме с циклом на моей машине профессора при попытке использовать функцию fread (), чей тип возвращаемого значения равен -1 в Fedora и static_cast (-1) в Ubuntu, что я считаю не очень хорошим: /. Мне понадобилось пару дней, чтобы отследить проблему в исходном коде ядра Ubuntu.

0 голосов
/ 31 июля 2010

По моему опыту преподавания OpenGL, подобные вещи случаются, когда избыток используется не так, как предполагалось.Некоторые реализации / драйверы обрабатывают это, а другие нет - между реализациями есть довольно большие различия, когда они используются нестандартными способами.При использовании стандартными способами различия довольно малы.

Наиболее распространенная причина, которую я видел для этого, - это когда glutPostRedisplay не вызывается после каждого изменения на экране.

Другие возможныепричины - рисовать в местах, отличных от функции отображения, или не правильно настроить обратные вызовы.

Помимо этого, я могу только догадываться, что происходит, но если одна реализация вообще ничего не показывает, то я быбудь уверен, что у тебя что-то не так.

...