2013-10-03 3 views
1

gl 컨텍스트를 가져 오려고하는데 PixelBuffer가 그 안에 사물을 바인딩합니다. 그러나 glClearColor와 같은 호출이 작동하는지 확인할 수는 있지만 어떤 gl 목록도 생성 할 수 없습니다. 아이디어가 없습니다. 코드는 다음과 같습니다.glGenLists는 유효한 GLX 컨텍스트와 함께 0을 반환합니다.

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); 

답변

3

표시 코어 목록이 없으므로 4.2 코어 컨텍스트를 요청하고 있습니다. 그들은 GL 3.0부터 사용되지 않습니다.

관련 문제