2015-02-26 3 views
2

Я передаю программу из OSX в Windows, но одна ошибка все еще меня злит. Ошибка возникает во время выполнения в gdb. Компиляция и привязка идут отлично.Ошибка Freeglut: fgInitGL2: fghGenBuffers - NULL

freeglut (C:\path\to\file.exe): fgInitGL2: fghGenBuffers is NULL

Вне среды GDB это дает APPCRASH (окна-оболочке) или неисправность сегментации (mingw64-оболочка).

Мои флаги компоновщика являются:

-std=c++11 -lstdc++ -lz -lm -lmysqlcleint -lpthread -lboost_thread-mgw49-mt-d-1_57 -lboost_system-mgw49-mt-d-1_57 -lboost_regex-mgw49-mt-d-1_57 -lcurl -lfreeglut -lglu32 -lopengl32 -lws2_32 -lwsock32 -U__CYGWIN__

Я работаю в msys2 MinGW-w64. Во время выполнения программа пытается открыть новое окно (по крайней мере, пиктограммы на панели задач Windows), но построение окна не будет выполнено. Программа отлично работает на OSX, где я использую глют вместо freeglut.

Заголовок (среди прочих):

#include <direct.h> 
#include <GL/glut.h> 
#include <GL/freeglut.h> 

CPP (среди прочих):

void interface::startInterface(int &argc, char **argv){ 

    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); 
    glutInitWindowSize (width, height); 
    glutInitWindowPosition (1920, 0); 
    glutInit   (&argc, argv); 
    glutCreateWindow ("TIFAR 2.0"); 


    LoadGLTextures();       // Load The Texture(s) (NEW) 
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);  // This Will Clear The Background Color To Black 
    glClearDepth(1.0);       // Enables Clearing Of The Depth Buffer 
    glDepthFunc(GL_LESS);      // The Type Of Depth Test To Do 
    glEnable(GL_DEPTH_TEST);     // Enables Depth Testing 
    glEnable(GL_BLEND); 
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
    glShadeModel(GL_SMOOTH);     // Enables Smooth Color Shading 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity();       // Reset The Projection Matrix 

    gluPerspective(45.0f, (GLfloat) width/(GLfloat) height, 0.1f, 100.0f); 
    // Calculate The Aspect Ratio Of The Window 

    glMatrixMode(GL_MODELVIEW); 

    glutDisplayFunc  (interface::display); 
    glutReshapeFunc  (interface::reshape); 
    glutIdleFunc  (interface::idle); 
    glutKeyboardFunc (interface::processNormalKeys); 

    glutMainLoop(); 
} 

Есть некоторые другие части в программе, как, где загружаются изображения, но я думаю, что это будет быть много информации, когда я упоминаю все здесь.

+0

В какой версии FreeGLUT вы используете? – genpfault

+0

@genpfault: Из определений freeglut_std.h: FREEGLUT 1, GLUT_API_VERSION 4, GLUT_XLIB_IMPLEMENTATION 13, FREEGLUT_VERSION_2_0 1. – martinvb

ответ

3

Мне потребовалось некоторое время, но причиной этой проблемы было аппаратное обеспечение. Я работал на виртуальной машине (VMware), и хотя в спецификациях говорилось, что он поддерживает OpenGL до 2.1, я узнал, что он вообще не поддерживает OpenGL.

Моим решением было взять старую машину, установить на нее Windows и скопировать все файлы. Он скомпилирован и работает как можно более гладко.

Если кто-то еще сталкивается с той же проблемой, я могу посоветовать заставить ее работать над собственной установкой перед виртуализацией. Это может вас сэкономить много времени.

+0

Я получаю 'fgInitGL2: fghFrameBuffers - NULL' во время выполнения при удаленном удалении моей программы с помощью Remote Desktop на Windows 8.1. Работает нормально при работе с машиной локально. Не может показаться, что он обходит вокруг него, не используя VNC – ObjectiveTruth

+1

Дорогой ObjectiveTruth, это связано с тем, как Microsoft виртуализирует графическую карту. Попробуйте RealVNC. См. Также https://www.opengl.org/discussion_boards/showthread.php/198132-OpenGL-and-Microsoft-Remote-Desktop – martinvb

 Смежные вопросы

  • Нет связанных вопросов^_^