2015-04-05 3 views
-2

Мне нужна помощь, чтобы запустить этот код в Ubuntu 14.10 64 бит. Я скомпилировал этот код в ubuntu 14.04 32 бит и работал нормально ... но если я перевешу это на 14.10 в 64 бит (тот же ПК, другой раздел), я не могу создать контекст Opengl 3.3. Я не знаю, в чем проблема.ошибка создания Opengl 3.3 Контекст под ubuntu 14.10 64 бит

здесь мили код glxwindow.h

#ifndef GLXWINDOW_H_INCLUDED 
#define GLXWINDOW_H_INCLUDED 

#ifndef WIN32 

#include "oslibraries.h" 
#include <ctime> 

#include "boglgpwindow.h" 

namespace SGE3D 
{ 
    class core; //Declara la clase principal del juego 
} 

namespace SGE3D 
{ 

class SimpleGLXWindow : public BOGLGPWindow 
{ 
public: 
    SimpleGLXWindow(); //default constructor 
    virtual ~SimpleGLXWindow(); 

    bool create(int width, int height, int bpp, bool fullscreen); 
    void destroy(); 
    void processEvents(); 
    void attachExample(SGE3D::core* example); 
    void setWindowTitle(char* wName); 

    bool isRunning(); //Is the window running? 

    void swapBuffers(); 

    float getElapsedSeconds(); 

    KeyboardInterface* getKeyboard() const { return m_keyboard; } 
    MouseInterface* getMouse() const { return m_mouse; } 
    void resizeOpenGLViewPortFull(float wRight, float wLeft); 
    void resizeOpenGLViewPort(float x, float y, float wRight, float wLeft); 
    int getViewPortWidth(); 
    int getViewPortHeight(); 
    int getWindowWidth(); 
    int getWindowHeight(); 
private: 
    SGE3D::core* m_example; //manejador de la clase principal del juego 
    bool m_isRunning; //Is the window still running? 
    char* m_windowTitle; 

    SGE3D::core* getAttachedExample() { return m_example; } 

    unsigned int m_lastTime; 

    Display* m_display; 
    Window m_XWindow; 
    GLXContext m_glContext; 
    XF86VidModeModeInfo m_XF86DeskMode; 
    XSetWindowAttributes m_XSetAttr; 
    //agregado 
    XWindowAttributes m_gwa; 
    int m_screenID; 

    bool m_isFullscreen; 
    unsigned int m_width; 
    unsigned int m_height; 
    unsigned int m_bpp; 

    bool m_GL3Supported; 

    SGE3D::KeyboardInterface* m_keyboard;//manejador del teclado 
    SGE3D::MouseInterface* m_mouse;//manejador del mouse 

    //viewPort 
    int viewPortWidth,viewPortHeight; 
    int windowWidth,windowHeight; 

    //cierra la ventana 
    Atom WM_DELETE_WINDOW; 
}; 
} 
#endif //WIN32 
#endif // GLXWINDOW_H_INCLUDED 

это glxwindow.cpp

#ifndef WIN32 

#include <iostream> 
#include <string> 

#include <sys/time.h> 

#include "opengl.h" 
#include "glxwindow.h" 
#include "core.h" 
#include "xkeyboardinterface.h" 
#include "xmouseinterface.h" 

//SOLO DEBUG 
#include "sysconfiguration.h" 
#include "pcreport.h" 
#include <iostream> 
#include <stdio.h> 
using std::cout; 

using std::string; 

typedef GLXContext (*glXCreateContextAttribsARBProc)(Display*, GLXFBConfig, GLXContext, Bool, const int*); 

static bool isExtensionSupported(const char *extList, const char *extension) 
{ 
    const char *start; 
    const char *where, *terminator; 

    /* Extension names should not have spaces. */ 
    where = strchr(extension, ' '); 
    if (where || *extension == '\0') 
    return false; 

    /* It takes a bit of care to be fool-proof about parsing the 
    OpenGL extensions string. Don't be fooled by sub-strings, 
    etc. */ 
    for (start=extList;;) { 
    where = strstr(start, extension); 

    if (!where) 
     break; 

    terminator = where + strlen(extension); 

    if (where == start || *(where - 1) == ' ') 
     if (*terminator == ' ' || *terminator == '\0') 
     return true; 

    start = terminator; 
    } 

    return false; 
} 

unsigned int GetTickCount() { 
    struct timeval t; 
    gettimeofday(&t, NULL); 

    unsigned long secs = t.tv_sec * 1000; 
    secs += (t.tv_usec/1000); 
    return secs; 
} 

static bool ctxErrorOccurred = false; 
static int ctxErrorHandler(Display *dpy, XErrorEvent *ev) 
{ 
    ctxErrorOccurred = true; 
    return 0; 
} 

namespace SGE3D 
{ 

SimpleGLXWindow::SimpleGLXWindow(): 
m_example(NULL), 
m_windowTitle("Skalium Graphic Engine 3D"), 
m_isRunning(true), 
m_lastTime(0), 
m_display(NULL), 
m_XWindow(0), 
m_glContext(0), 
m_screenID(0), 
m_isFullscreen(false), 
m_width(0), 
m_height(0), 
m_bpp(0), 
m_GL3Supported(false), 
m_keyboard(NULL), 
m_mouse(NULL) 
{ 
    m_keyboard = new XKeyboardInterface();//instancia el teclado 
} 

SimpleGLXWindow::~SimpleGLXWindow() 
{ 
    delete m_keyboard; 
    delete m_mouse; 
} 

void SimpleGLXWindow::resizeOpenGLViewPortFull(float wRight, float wLeft) 
{ 
    glViewport(0, 0, wRight, wLeft); 
    viewPortWidth = wRight; 
    viewPortHeight = wLeft; 
} 

void SimpleGLXWindow::resizeOpenGLViewPort(float x, float y, float wRight, float wLeft) 
{ 
    glViewport(x, y, wRight, wLeft); 
    viewPortWidth = wRight; 
    viewPortHeight = wLeft; 
} 

int SimpleGLXWindow::getViewPortWidth() 
{ 
    return viewPortWidth; 
} 

int SimpleGLXWindow::getViewPortHeight() 
{ 
    return viewPortHeight; 
} 

int SimpleGLXWindow::getWindowWidth() 
{ 
    return windowWidth; 
} 

int SimpleGLXWindow::getWindowHeight() 
{ 
    return windowHeight; 
} 

bool SimpleGLXWindow::create(int width, int height, int bpp, bool fullscreen) 
{ 
    windowWidth = width; 
    windowHeight = height; 
    m_isFullscreen = fullscreen; //guarda el flag "fullscreen" 

    m_display = XOpenDisplay(NULL); //Open default display 

    if (m_display == NULL) 
    { 
     std::cerr << "No se pudo abrir el display." << std::endl; 
     return false; 
    } 


    int doubleBufferedAttribList [] = { 
     GLX_X_RENDERABLE , True, 
     GLX_DRAWABLE_TYPE , GLX_WINDOW_BIT, 
     GLX_RENDER_TYPE  , GLX_RGBA_BIT, 
     GLX_X_VISUAL_TYPE , GLX_TRUE_COLOR, 
     GLX_RED_SIZE  , 8, 
     GLX_GREEN_SIZE  , 8, 
     GLX_BLUE_SIZE  , 8, 
     GLX_ALPHA_SIZE  , 8, 
     GLX_DEPTH_SIZE  , 24, 
     GLX_STENCIL_SIZE , 8, 
     GLX_DOUBLEBUFFER , True, 
     GLX_SAMPLE_BUFFERS , 1, 
     GLX_SAMPLES   , 4, 
     None 
    }; 


    int glx_major, glx_minor; 

    // FBConfigs were added in GLX version 1.3. 
    if (!glXQueryVersion(m_display, &glx_major, &glx_minor) || ((glx_major == 1) && (glx_minor < 3)) || (glx_major < 1)) 
    { 
     cout << "Invalid GLX version\n"; 
     return false; 
    } 

// XVisualInfo* vi = NULL; 
    //Attempt to create a double buffered window 
    int fbcount; 
// vi = glXChooseVisual(m_display, m_screenID, doubleBufferedAttribList,&fbcount); 
    GLXFBConfig* fbc = glXChooseFBConfig(m_display, DefaultScreen(m_display), doubleBufferedAttribList,&fbcount); 

    if (!fbc) 
    { 
    cout <<"Failed to retrieve a framebuffer config\n"; 
return false; 
    } 
    cout << "Found "<< fbcount<< " matching FB configs.\n"; 

    // Pick the FB config/visual with the most samples per pixel 
cout << "Getting XVisualInfos\n"; 
    int best_fbc = -1, worst_fbc = -1, best_num_samp = -1, worst_num_samp = 999; 

    int i; 
    for (i=0; i<fbcount; ++i) 
    { 
    XVisualInfo *vi = glXGetVisualFromFBConfig(m_display, fbc[i]); 
    if (vi) 
    { 
     int samp_buf, samples; 
     glXGetFBConfigAttrib(m_display, fbc[i], GLX_SAMPLE_BUFFERS, &samp_buf); 
     glXGetFBConfigAttrib(m_display, fbc[i], GLX_SAMPLES  , &samples ); 

     cout << "Matching fbconfig " << i <<", visual ID "<< vi -> visualid <<": SAMPLE_BUFFERS = " << samp_buf << ", SAMPLES = "<< samples << "\n"; 

     if (best_fbc < 0 || samp_buf && samples > best_num_samp) 
     best_fbc = i, best_num_samp = samples; 
     if (worst_fbc < 0 || !samp_buf || samples < worst_num_samp) 
     worst_fbc = i, worst_num_samp = samples; 
    } 
    XFree(vi); 
    } 

    GLXFBConfig bestFbc = fbc[ best_fbc ]; 

    // Be sure to free the FBConfig list allocated by glXChooseFBConfig() 
    XFree(fbc); 

    // Get a visual 
    XVisualInfo *vi = glXGetVisualFromFBConfig(m_display, bestFbc); 
    cout << "Chosen visual ID = " << vi->visualid << "\n"; 

    cout << "Creating colormap\n"; 
    XSetWindowAttributes swa; 
    Colormap cmap; 
    swa.colormap = cmap = XCreateColormap(m_display, 
             RootWindow(m_display, vi->screen), 
             vi->visual, AllocNone); 
    swa.background_pixmap = None ; 
    swa.border_pixel  = 0; 
    swa.event_mask  = ExposureMask | KeyPressMask | ButtonPress | 
          StructureNotifyMask | ButtonReleaseMask | 
          KeyReleaseMask | EnterWindowMask | LeaveWindowMask | 
          PointerMotionMask | Button1MotionMask | VisibilityChangeMask | 
          ColormapChangeMask; 

    cout << "Creating window\n"; 
    m_XWindow = XCreateWindow(m_display, RootWindow(m_display, vi->screen), 
           0, 0, windowWidth, windowHeight, 0, vi->depth, InputOutput, 
           vi->visual, 
           CWBorderPixel | CWColormap | CWEventMask | CWOverrideRedirect | CWCursor, &swa); 
    if (!m_XWindow) 
    { 
    cout << "Failed to create window.\n"; 
    return false; 
    } 

    // Done with the visual info data 
    XFree(vi); 

    XStoreName(m_display, m_XWindow, m_windowTitle); 

    cout <<"Mapping window\n"; 
    XMapWindow(m_display, m_XWindow); 

    // Get the default screen's GLX extension list 
    const char *glxExts = glXQueryExtensionsString(m_display, 
                DefaultScreen(m_display)); 

    // NOTE: It is not necessary to create or make current to a context before 
    // calling glXGetProcAddressARB 
    glXCreateContextAttribsARBProc glXCreateContextAttribsARB = 0; 
    glXCreateContextAttribsARB = (glXCreateContextAttribsARBProc) 
      glXGetProcAddressARB((const GLubyte *) "glXCreateContextAttribsARB"); 

    GLXContext ctx = 0; 

    // Install an X error handler so the application won't exit if GL 3.0 
    // context allocation fails. 
    // 
    // Note this error handler is global. All display connections in all threads 
    // of a process use the same error handler, so be sure to guard against other 
    // threads issuing X commands while this code is running. 
    ctxErrorOccurred = false; 
    int (*oldHandler)(Display*, XErrorEvent*) = 
     XSetErrorHandler(&ctxErrorHandler); 

    // Check for the GLX_ARB_create_context extension string and the function. 
    // If either is not present, use GLX 1.3 context creation method. 
    if (!isExtensionSupported(glxExts, "GLX_ARB_create_context") || 
     !glXCreateContextAttribsARB) 
    { 
    printf("glXCreateContextAttribsARB() not found" 
      " ... using old-style GLX context\n"); 
    ctx = glXCreateNewContext(m_display, bestFbc, GLX_RGBA_TYPE, 0, True); 
    } 

    //If it does, try to get a GL 3.0 context! 
    else 
    { 
    int context_attribs[] = 
     { 
     GLX_CONTEXT_MAJOR_VERSION_ARB, 3, 
     GLX_CONTEXT_MINOR_VERSION_ARB, 3, 
     GLX_CONTEXT_PROFILE_MASK_ARB , GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB, 
     //GLX_CONTEXT_FLAGS_ARB  , GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB, 
     None 
     }; 

    cout << "Creating context\n"; 
    ctx = glXCreateContextAttribsARB(m_display, bestFbc, 0, 
             True, context_attribs); 

    // Sync to ensure any errors generated are processed. 
    XSync(m_display, False); 
    if (!ctxErrorOccurred && ctx) 
     cout << "Created GL 3.0 context\n"; 
    else 
    { 
     // Couldn't create GL 3.0 context. Fall back to old-style 2.x context. 
     // When a context version below 3.0 is requested, implementations will 
     // return the newest context version compatible with OpenGL versions less 
     // than version 3.0. 
     // GLX_CONTEXT_MAJOR_VERSION_ARB = 1 
     context_attribs[1] = 1; 
     // GLX_CONTEXT_MINOR_VERSION_ARB = 0 
     context_attribs[3] = 0; 

     ctxErrorOccurred = false; 

     cout << "Failed to create GL 3.3 context ... using old-style GLX context\n"; 
     ctx = glXCreateContextAttribsARB(m_display, bestFbc, 0, 
             True, context_attribs); 
    } 
    } 

    // Sync to ensure any errors generated are processed. 
    XSync(m_display, False); 

    // Restore the original error handler 
    XSetErrorHandler(oldHandler); 

    if (ctxErrorOccurred || !ctx) 
    { 
    cout <<"Failed to create an OpenGL context\n"; 
    return false; 
    } 

    // Verifying that context is a direct context 
    if (! glXIsDirect (m_display, ctx)) 
    { 
    cout << "Indirect GLX rendering context obtained\n"; 
    } 
    else 
    { 
    cout << "Direct GLX rendering context obtained\n"; 
    } 

    cout <<"Making context current\n" ; 
    glXMakeCurrent(m_display, m_XWindow, ctx); 

    m_GL3Supported = true; 

    //para correcto cerrado de la ventana 
    WM_DELETE_WINDOW = XInternAtom(m_display, "WM_DELETE_WINDOW", False); 
    XSetWMProtocols(m_display, m_XWindow, &WM_DELETE_WINDOW, 1); 

    m_mouse = new XMouseInterface(&m_XWindow); 
    m_mouse->showCursor(true); 
// //Make the new context current 
// glXMakeCurrent(m_display, m_XWindow, m_glContext); 
//// 
//// int posx = 0; 
//// int posy = 0; 
//// Window winDummy; 
// unsigned int borderDummy; 
// 
    m_width = (unsigned) width; 
    m_height = (unsigned) height; 
// m_bpp = (unsigned) bpp; 
// 
// XGetGeometry(m_display, m_XWindow, &winDummy, 
//     &posx, &posy, &m_width, &m_height, 
//     &borderDummy, &m_bpp); 

    m_lastTime = GetTickCount(); //Initialize the time 

    if(m_GL3Supported) 
    { 
     cout << "inicializando glew...\n"; 
     glewExperimental = GL_TRUE; 
     //inicializando glew 
     GLenum error = glewInit(); // Enable GLEW 
     if (error != GLEW_OK) // If GLEW fails 
     { 
      cout << "Error al iniciar la librería GLEW: " << glewGetErrorString(error) << ".\nNo es posible continuar con la ejecución de Skalium Graphic Engine 3D."; 
      return false; 
     } 
    } 

    return m_GL3Supported; 
} 

void SimpleGLXWindow::destroy() 
{ 
    m_mouse->showCursor(true); 
    if (m_glContext) 
    { 
     glXMakeCurrent(m_display, None, NULL); 
     glXDestroyContext(m_display, m_glContext); 
     m_glContext = NULL; 
    } 

    if (m_isFullscreen) 
    { 
     XF86VidModeSwitchToMode(m_display, m_screenID, &m_XF86DeskMode); 
     XF86VidModeSetViewPort(m_display, m_screenID, 0, 0); 
    } 
    XDestroyWindow(m_display, m_XWindow); 
    XCloseDisplay(m_display); 
} 


void SimpleGLXWindow::setWindowTitle(char* wName) 
{ 
    m_windowTitle = wName; 
} 

void SimpleGLXWindow::swapBuffers() { glXSwapBuffers(m_display, m_XWindow); } 

void SimpleGLXWindow::processEvents() 
{ 

    m_keyboard->update(); 
    m_mouse->update(); 

    XEvent event; 
    while (XPending(m_display)) 
    { 
     XNextEvent(m_display, &event); 
     switch (event.type) 
     { 
      case Expose: 
      { 
       if (event.xexpose.count != 0) 
        break; 

       break; 
      } 

      case ConfigureNotify: 
      { 
       windowWidth = event.xconfigure.width; 
       windowHeight = event.xconfigure.height; 
       getAttachedExample()->onResize(windowWidth, windowHeight); 
      } 
      case MotionNotify: 
      { 
       //on mouse move 
       m_mouse->changeMouseMoveState(); 
       break; 
      } 

      case ButtonRelease: 
      { 
      //Eventos del Mouse 
       switch (event.xbutton.button) 
       { 
        case 1: 
        { 
         //click izquierdo 
    //     t_prev=t_new; 
    //     printf("Click Occured  : [%d, %d]\n", 
    //       xevent.xbutton.x_root, 
    //       xevent.xbutton.y_root); 
         m_mouse->changeMouseButtonState(0,false); 
         break; 
        } 

        case 2: 
        { 
         //click central 
         m_mouse->changeMouseButtonState(2,false); 
         break; 
        } 

        case 3: 
        { 
         //click derecho 
         m_mouse->changeMouseButtonState(1,false); 
         break; 
        } 

        case 4: 
        { 
         //scroll up 
         break; 
        } 

        case 5: 
        { 
         //scroll down 
         break; 
        } 
        //en el default entra si no se toco ningún botón, por lo tanto hace que todos 
        //vuelvan al estado false. 
        default: 
        { 
         break; 
        } 
       } 
       break; 

      } 

      case ButtonPress: 
      { 
       //Eventos del Mouse 
       switch (event.xbutton.button) 
       { 
        case 1: 
        { 
         //click izquierdo 
    //     t_prev=t_new; 
    //     printf("Click Occured  : [%d, %d]\n", 
    //       xevent.xbutton.x_root, 
    //       xevent.xbutton.y_root); 
         m_mouse->changeMouseButtonState(0,true); 
         break; 
        } 
        case 2: 
        { 
         //click central 
         m_mouse->changeMouseButtonState(2,true); 
         break; 
        } 
        case 3: 
        { 
         //click derecho 
         m_mouse->changeMouseButtonState(1,true); 
         break; 
        } 
        case 4: 
        { 
         //scroll up 
         break; 
        } 
        case 5: 
        { 
         //scroll down 
         break; 
        } 
        //en el default entra si no se toco ningún botón, por lo tanto hace que todos 
        //vuelvan al estado false. 
        default: 
        { 
         break; 
        } 
       } 
       break; 
      } 



      case KeyPress: 
      { 
       if (XLookupKeysym(&event.xkey,0) == XK_Escape) { 
        m_isRunning = false; 
       } 

       //Register the key press with the keyboard interface 
       m_keyboard->handleKeyDown(m_keyboard->translateKey(XLookupKeysym(&event.xkey,0))); 
       break; 
      } 

      case KeyRelease: 
      { 
       BOGLGPKeyCode code = m_keyboard->translateKey(XLookupKeysym(&event.xkey,0)); 
       m_keyboard->handleKeyUp(code); 
       break; 
      } 

      case ClientMessage: 
      { 
//    if (string(XGetAtomName(m_display, event.xclient.message_type)) == string("WM_PROTOCOLS")) 
//    { 
//     m_isRunning = false; 
//    } 

       if((static_cast<unsigned int>(event.xclient.data.l[0]) == WM_DELETE_WINDOW)) 
       { 
        m_isRunning = false; 
       } 
       break; 
      } 


      default: 
      { 
       break; 
      } 

     } 

    } 

} 

bool SimpleGLXWindow::isRunning() 
{ 
    return m_isRunning; 
} 

void SimpleGLXWindow::attachExample(SGE3D::core* example) 
{ 
    m_example = example; 
} 


float SimpleGLXWindow::getElapsedSeconds() 
{ 
    unsigned int currentTime = GetTickCount(); 
    unsigned int diff = currentTime - m_lastTime; 
    m_lastTime = currentTime; 
    return float(diff)/1000.0f; 
} 
} 
#endif //WIN32 

, когда я называю SimpleGLXWindow :: создать функцию(), я получаю эту ошибку (между моим отладочные сообщения):

iniciando ventana linux 
Found 2 matching FB configs. 
Getting XVisualInfos 
Matching fbconfig 0, visual ID 163: SAMPLE_BUFFERS = 1, SAMPLES = 4 
Matching fbconfig 1, visual ID 164: SAMPLE_BUFFERS = 1, SAMPLES = 8 
Chosen visual ID = 164 
Creating colormap 
Creating window 
Mapping window 
Creating context 
Failed to create GL 3.3 context ... using old-style GLX context 
Direct GLX rendering context obtained 
Making context current 
X Error of failed request: BadDrawable (invalid Pixmap or Window parameter) 
    Major opcode of failed request: 154 (DRI2) 
    Minor opcode of failed request: 3 (DRI2CreateDrawable) 
    Resource id in failed request: 0x4200002 
    Serial number of failed request: 40 
    Current serial number in output stream: 42 

я работаю с CodeBlocks IDE и моих связанных библиотек:

-L libs -Wl,-rpath libs 
-Wl,-Bstatic 
/home/fabian/Proyectos/SGE3D/libs/SOIL/lib/libSOIL.a 
/home/fabian/libreriasDeDesarrollo/minGW/lib/libglu32.a 
/home/fabian/libreriasDeDesarrollo/minGW/lib/libfreeglut.a 
-Wl,-Bdynamic 
libs/libGlew-1-10-sge3d.so 
/usr/lib/x86_64-linux-gnu/libX11.so 
/usr/lib/x86_64-linux-gnu/mesa/libGL.so 
/usr/lib/x86_64-linux-gnu/libXxf86vm.so 
libs/libfreetype-6-11-1-sge3d.so 
libs/libfreeimage-3-sge3d.so 
libs/libassimp-3-sge3d.so 

-sge3d.so являются системные библиотеки (/ USR/Lib /) копировать/вставить с другим именем, чтобы избежать этого пользователю необходимо установить его (эта работа штраф в 32 бита).

я смотрю вывод LDD и это выглядит правильно:

linux-vdso.so.1 => (0x00007fff3f3ad000) 
    libGLEW.so.1.10 => /usr/lib/x86_64-linux-gnu/libGLEW.so.1.10 (0x00007f70b6530000) 
    libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f70b61f7000) 
    libGL.so.1 => /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 (0x00007f70b5f5a000) 
    libXxf86vm.so.1 => /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1 (0x00007f70b5d54000) 
    libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f70b5aac000) 
    libfreeimage.so.3 => /usr/lib/libfreeimage.so.3 (0x00007f70b5803000) 
    libassimp.so.3 => /usr/lib/libassimp.so.3 (0x00007f70b4f8d000) 
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f70b4c7e000) 
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f70b4977000) 
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f70b4760000) 
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f70b439c000) 
    libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f70b417c000) 
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f70b3f78000) 
    libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f70b3d4f000) 
    libglapi.so.0 => /usr/lib/x86_64-linux-gnu/libglapi.so.0 (0x00007f70b3b22000) 
    libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f70b3910000) 
    libXdamage.so.1 => /usr/lib/x86_64-linux-gnu/libXdamage.so.1 (0x00007f70b370d000) 
    libXfixes.so.3 => /usr/lib/x86_64-linux-gnu/libXfixes.so.3 (0x00007f70b3506000) 
    libX11-xcb.so.1 => /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1 (0x00007f70b3304000) 
    libxcb-glx.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0 (0x00007f70b30ed000) 
    libxcb-dri2.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-dri2.so.0 (0x00007f70b2ee7000) 
    libxcb-dri3.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0 (0x00007f70b2ce4000) 
    libxcb-present.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-present.so.0 (0x00007f70b2ae1000) 
    libxcb-sync.so.1 => /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1 (0x00007f70b28da000) 
    libxshmfence.so.1 => /usr/lib/x86_64-linux-gnu/libxshmfence.so.1 (0x00007f70b26d8000) 
    libdrm.so.2 => /usr/lib/x86_64-linux-gnu/libdrm.so.2 (0x00007f70b24cb000) 
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f70b22ac000) 
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f70b2093000) 
    libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f70b1e6c000) 
    libjpeg.so.8 => /usr/lib/x86_64-linux-gnu/libjpeg.so.8 (0x00007f70b1c17000) 
    libopenjpeg.so.5 => /usr/lib/x86_64-linux-gnu/libopenjpeg.so.5 (0x00007f70b19f4000) 
    libIlmImf.so.6 => /usr/lib/x86_64-linux-gnu/libIlmImf.so.6 (0x00007f70b1744000) 
    libHalf.so.6 => /usr/lib/x86_64-linux-gnu/libHalf.so.6 (0x00007f70b1501000) 
    libIex.so.6 => /usr/lib/x86_64-linux-gnu/libIex.so.6 (0x00007f70b12e3000) 
    libraw.so.10 => /usr/lib/x86_64-linux-gnu/libraw.so.10 (0x00007f70b103d000) 
    libtiff.so.5 => /usr/lib/x86_64-linux-gnu/libtiff.so.5 (0x00007f70b0dc9000) 
    /lib64/ld-linux-x86-64.so.2 (0x00007f70b67d7000) 
    libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f70b0bc4000) 
    libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f70b09be000) 
    libIlmThread.so.6 => /usr/lib/x86_64-linux-gnu/libIlmThread.so.6 (0x00007f70b07b6000) 
    libjasper.so.1 => /usr/lib/x86_64-linux-gnu/libjasper.so.1 (0x00007f70b055f000) 
    liblcms2.so.2 => /usr/lib/x86_64-linux-gnu/liblcms2.so.2 (0x00007f70b0308000) 
    libgomp.so.1 => /usr/lib/x86_64-linux-gnu/libgomp.so.1 (0x00007f70b00f1000) 
    liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f70afecf000) 
    libjbig.so.0 => /usr/lib/x86_64-linux-gnu/libjbig.so.0 (0x00007f70afcc1000) 

... но я не вижу, что мои «sge3d» библиотеки связаны

Это отчет glxinfo (это кажется. что все это нормально):

[email protected]:~$ glxinfo | grep "OpenGL" 
OpenGL vendor string: Intel Open Source Technology Center 
OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile 
OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.6.0-devel (git-ba35393 2015-04-04 utopic-oibaf-ppa) 
OpenGL core profile shading language version string: 3.30 
OpenGL core profile context flags: (none) 
OpenGL core profile profile mask: core profile 
OpenGL core profile extensions: 
OpenGL version string: 3.0 Mesa 10.6.0-devel (git-ba35393 2015-04-04 utopic-oibaf-ppa) 
OpenGL shading language version string: 1.30 
OpenGL context flags: (none) 
OpenGL extensions: 
OpenGL ES profile version string: OpenGL ES 3.0 Mesa 10.6.0-devel (git-ba35393 2015-04-04 utopic-oibaf-ppa) 
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00 
OpenGL ES profile extensions: 
+2

Это выглядит как больше кода, чем строго необходимо. Можете ли вы уменьшить код до тех пор, пока [код не будет удален, пока проблема не будет устранена] (http://stackoverflow.com/help/mcve)? –

+0

Что такое 'glxinfo', сообщающая об этой системе? Возможно, проблема связана с драйверами GL. – derhass

+0

Я добавил glxinfo в сообщение. спасибо – user2303826

ответ

2

Вы запрашиваете 3,3 совместимости профиля здесь:

int context_attribs[] = 
    { 
    GLX_CONTEXT_MAJOR_VERSION_ARB, 3, 
    GLX_CONTEXT_MINOR_VERSION_ARB, 3, 
    GLX_CONTEXT_PROFILE_MASK_ARB , GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB, 
    //GLX_CONTEXT_FLAGS_ARB  , GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB, 
    None 
    }; 

Mesa does not support the compatibility profile:

OpenGL ядро ​​и совместимость контекст поддержка

OpenGL 3.1 и более поздние версии поддерживаются только с профилем сердечник . Планируется не поддерживать совместимость GL_ARB_. Последняя версия с поддержкой OpenGL со всеми устаревшими функциями - 3.0. Некоторые из более поздних функций GL раскрываются в контексте 3.0 в качестве расширений.

(обратите внимание, что профиль ядра OpenGL 3.1 даже не существует, Mesa сделал это.

И это именно то, что glxinfo говорит вам:

OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.6.0-devel (git-ba35393 2015-04-04 utopic-oibaf-ppa) 
OpenGL version string: 3.0 Mesa 10.6.0-devel (git-ba35393 2015-04-04 utopic-oibaf-ppa) 
+0

спасибо derhass!но это не решает проблему :(я изменил это в коде: INT context_attribs [] = { GLX_CONTEXT_MAJOR_VERSION_ARB, 3, GLX_CONTEXT_MINOR_VERSION_ARB, 3, Отсутствует }; – user2303826

+0

и проблема продолжает с той же ошибкой сообщения, которые я указал в сообщении, «не могут создать контекст Opengl 3.3» (этот код в 32 бит работает нормально). Я не понимаю, почему :( – user2303826

+0

Ну, просто удаление запроса профиля сопоставления не будет wotk. запросить основной профиль. – derhass

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