glGenLists返回0,具有有效的GLX上下文

时间:2013-10-03 16:44:04

标签: opengl opengl-3 glx

我正在尝试获取gl上下文,将PixelBuffer绑定到其中。我可以验证像glClearColor这样的调用是否有效但是我无法生成任何gl列表。我没有想法,这是代码:

typedef GLXContext (*glXCreateContextAttribsARBProc)(Display*, GLXFBConfig, GLXContext, Bool, const int*);
typedef Bool (*glXMakeContextCurrentARBProc)(Display*, GLXDrawable, GLXDrawable, GLXContext);
static glXCreateContextAttribsARBProc glXCreateContextAttribsARB = NULL;
static glXMakeContextCurrentARBProc   glXMakeContextCurrentARB   = NULL;

glXCreateContextAttribsARB = (glXCreateContextAttribsARBProc) glXGetProcAddressARB( (const GLubyte *) "glXCreateContextAttribsARB" );
glXMakeContextCurrentARB   = (glXMakeContextCurrentARBProc)   glXGetProcAddressARB( (const GLubyte *) "glXMakeContextCurrent"      );

const char *displayName = NULL;
Display* display = XOpenDisplay( displayName );

static int visualAttribs[] = { None };

int numberOfFramebufferConfigurations = 0;
GLXFBConfig* fbConfigs = glXChooseFBConfig( display, DefaultScreen(display), visualAttribs, &numberOfFramebufferConfigurations );

if (!fbConfigs)
{
    fprintf(stderr, "The OpenGL on this system does not support glXCreateContextAttribsARB or glXMakeContextCurrent.");
    return;
}

int context_attribs[] = {
    GLX_CONTEXT_MAJOR_VERSION_ARB, 4,
    GLX_CONTEXT_MINOR_VERSION_ARB, 2,
    GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_DEBUG_BIT_ARB,
    GLX_CONTEXT_PROFILE_MASK_ARB, GLX_CONTEXT_CORE_PROFILE_BIT_ARB,
    None
};

GLXContext openGLContext = glXCreateContextAttribsARB( display, fbConfigs[0], 0, True, context_attribs);


int pbufferAttribs[] = {
    GLX_PBUFFER_WIDTH,  cols,
    GLX_PBUFFER_HEIGHT, rows,
    None
};

GLXPbuffer pbuffer = glXCreatePbuffer( display, fbConfigs[0], pbufferAttribs );

// clean up:
XFree( fbConfigs );
XSync( display, False );

if (glXMakeContextCurrent( display, pbuffer, pbuffer, openGLContext ) )
{

    if (openGLContext)
            fprintf(stdout, "Got context \n");
    GLuint list = glGenLists(1);
    fprintf(stdout, "Got list %d\n", list); // This is always zero.
    glNewList(list, GL_COMPILE);
    glEndList();

    glClearColor(0, 1, 0, 0);

1 个答案:

答案 0 :(得分:3)

您正在请求4.2核心上下文,因此没有显示列表。自GL 3.0以来,它们已被弃用。