glXGetCurrentDisplay()分段错误(Linux)

时间:2013-01-11 13:19:53

标签: c++ opengl interop segmentation-fault opencl

我正在使用OpenCL / OpenGL互操作,并且能够成功地在OSX上工作:

props[0] = CL_CONTEXT_PROPERTY_USE_CGL_SHAREGROUP_APPLE;
props[1] = (cl_context_properties) CGLGetShareGroup( CGLGetCurrentContext() );

然而,当使用X通讯员时:

props[0] = CL_GL_CONTEXT_KHR;
props[1] = (cl_context_properties) glXGetCurrentContext();
props[2] = CL_GLX_DISPLAY_KHR;
props[3] = (cl_context_properties) glXGetCurrentDisplay();
props[4] = CL_CONTEXT_PLATFORM;
props[5] = (cl_context_properties) pID;

OpenGL初始化代码:

glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

screenWidth  = glutGet(GLUT_SCREEN_WIDTH);
screenHeight = glutGet(GLUT_SCREEN_HEIGHT);

glutInitWindowPosition( (screenWidth - width)/2 , (screenHeight - height)/2 );
glutInitWindowSize(width, height);
glutCreateWindow(appName.c_str());

glClearColor (0.0, 0.0, 0.0, 0.0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);

glEnable(GL_COLOR_MATERIAL);

glShadeModel(GL_SMOOTH);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

glEnable (GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glutDisplayFunc(render_s);
glutIdleFunc(render_s);
glutReshapeFunc(resize_s);
glutKeyboardFunc(keyPress_s);
glutKeyboardUpFunc(keyRelease_s);
glutMouseFunc(mousePress_s);
glutMotionFunc(mouseDrag_s);
glutPassiveMotionFunc(mouseMove_s);

在获取上下文之前调用init代码。

glXGetCurrentContext()没有段错误,但glXGetCurrentDisplay()没有。

排除互操作,为什么即使在调用glutInit()之后glXGetCurrentDisplay()也会出错?

P.S。有没有办法在OpenGL下明确选择平台/设备?

2 个答案:

答案 0 :(得分:5)

  

即使在调用glutInit()

之后也是错误的

glutInit不会创建OpenGL上下文,因此glXGetCurrentDisplay将失败。您需要调用glutCreateWindow来实际创建上下文。

答案 1 :(得分:1)

我只是面临同样的问题。我发现你需要初始化glx扩展。我正在使用glew这个,所以我需要在创建上下文后调用glewInit(),以便glXGetCurrentDisplay()正常工作。

检查标题。如果包含GL/glxew.h,则需要以某种方式初始化函数指针。如果你包含GL/glx.h,它应该可以正常工作。