2012-03-14 3 views
1

이 문제는 큰 문제입니다. 우선 XLib API에 대해 비트를 알고 있지만 테스트하기를 원했고, 실제로 내가 OpenGL 렌더링 컨텍스트 (3.0)를 만들 수 있는지 확인하기를 원했기 때문에 테스트 코드를 복사하여 붙여 넣기 만하면됩니다.OpenGL 렌더링 컨텍스트 "실패한 요청 152 (GLX)의 opcode"(Mesa 8.0 - OpenGL 3.0, Linux)

GLX_ARB_get_proc_address GLX_ARB_multisample GLX_EXT_import_context GLX_EXT_visual_info GLX_EXT_visual_rating GLX_MESA_copy_sub_buffer GLX_MESA_multithread_makecurrent GLX_MESA_swap_control GLX_OML_swap_method GLX_OML_sync_control GLX_SGI_make_current_read GLX_SGI_swap_control GLX_SGI_video_sync GLX_SGIS_multisample GLX_SGIX_fbconfig GLX_SGIX_pbuffer GLX_SGIX_visual_select_group GLX_EXT_texture_from_pixmap 
Getting framebuffer config 
Getting XVisualInfo 
Creating colormap 
Creating window 
Mapping window 
Creating context 
X Error of failed request: BadRequest (invalid request code or no such operation) 
    Major opcode of failed request: 152 (GLX) 
    Minor opcode of failed request: 34() 
    Serial number of failed request: 27 
    Current serial number in output stream: 26 

을 더욱 더 내 수, glxinfo에 대한 후속 호출은이 사양에 따라

name of display: :0 
display: :0 screen: 0 
direct rendering: Yes 
server glx vendor string: SGI 
server glx version string: 1.4 
server glx extensions: 
    GLX_ARB_multisample, GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, 
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_MESA_copy_sub_buffer, 
    GLX_OML_swap_method, GLX_SGI_swap_control, GLX_SGIS_multisample, 
    GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, GLX_SGIX_visual_select_group, 
    GLX_INTEL_swap_event 
client glx vendor string: Mesa Project and SGI 
client glx version string: 1.4 
client glx extensions: 
    GLX_ARB_create_context, GLX_ARB_create_context_profile, 
    GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context, 
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_EXT_framebuffer_sRGB, 
    GLX_EXT_create_context_es2_profile, GLX_MESA_copy_sub_buffer, 
    GLX_MESA_multithread_makecurrent, GLX_MESA_swap_control, 
    GLX_OML_swap_method, GLX_OML_sync_control, GLX_SGI_make_current_read, 
    GLX_SGI_swap_control, GLX_SGI_video_sync, GLX_SGIS_multisample, 
    GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, GLX_SGIX_visual_select_group, 
    GLX_EXT_texture_from_pixmap, GLX_INTEL_swap_event 
GLX version: 1.4 
GLX extensions: 
    GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context, 
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_MESA_copy_sub_buffer, 
    GLX_MESA_multithread_makecurrent, GLX_MESA_swap_control, 
    GLX_OML_swap_method, GLX_OML_sync_control, GLX_SGI_make_current_read, 
    GLX_SGI_swap_control, GLX_SGI_video_sync, GLX_SGIS_multisample, 
    GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, GLX_SGIX_visual_select_group, 
    GLX_EXT_texture_from_pixmap 
OpenGL vendor string: Tungsten Graphics, Inc 
OpenGL renderer string: Mesa DRI Intel(R) Sandybridge Mobile 
OpenGL version string: 3.0 Mesa 8.0 
OpenGL shading language version string: 1.30 
OpenGL extensions: 
    GL_ARB_multisample, GL_EXT_abgr, GL_EXT_bgra, GL_EXT_blend_color, 
    GL_EXT_blend_minmax, GL_EXT_blend_subtract, GL_EXT_copy_texture, 
    GL_EXT_polygon_offset, GL_EXT_subtexture, GL_EXT_texture_object, 
    GL_EXT_vertex_array, GL_EXT_compiled_vertex_array, GL_EXT_texture, 
    GL_EXT_texture3D, GL_IBM_rasterpos_clip, GL_ARB_point_parameters, 
    GL_EXT_draw_range_elements, GL_EXT_packed_pixels, GL_EXT_point_parameters, 
    GL_EXT_rescale_normal, GL_EXT_separate_specular_color, 
    GL_EXT_texture_edge_clamp, GL_SGIS_generate_mipmap, 
    GL_SGIS_texture_border_clamp, GL_SGIS_texture_edge_clamp, 
    GL_SGIS_texture_lod, GL_ARB_framebuffer_sRGB, GL_ARB_multitexture, 
    GL_EXT_framebuffer_sRGB, GL_IBM_multimode_draw_arrays, 
    GL_IBM_texture_mirrored_repeat, GL_3DFX_texture_compression_FXT1, 
    GL_ARB_texture_cube_map, GL_ARB_texture_env_add, GL_ARB_transpose_matrix, 
    GL_EXT_blend_func_separate, GL_EXT_fog_coord, GL_EXT_multi_draw_arrays, 
    GL_EXT_secondary_color, GL_EXT_texture_env_add, 
    GL_EXT_texture_filter_anisotropic, GL_EXT_texture_lod_bias, 
    GL_INGR_blend_func_separate, GL_NV_blend_square, GL_NV_light_max_exponent, 
    GL_NV_texgen_reflection, GL_NV_texture_env_combine4, 
    GL_SUN_multi_draw_arrays, GL_ARB_texture_border_clamp, 
    GL_ARB_texture_compression, GL_EXT_framebuffer_object, 
    GL_EXT_texture_env_combine, GL_EXT_texture_env_dot3, GL_MESA_window_pos, 
    GL_NV_packed_depth_stencil, GL_NV_texture_rectangle, GL_NV_vertex_program, 
    GL_ARB_depth_texture, GL_ARB_occlusion_query, GL_ARB_shadow, 
    GL_ARB_texture_env_combine, GL_ARB_texture_env_crossbar, 
    GL_ARB_texture_env_dot3, GL_ARB_texture_mirrored_repeat, 
    GL_ARB_window_pos, GL_ATI_envmap_bumpmap, GL_EXT_stencil_two_side, 
    GL_EXT_texture_cube_map, GL_NV_depth_clamp, GL_NV_vertex_program1_1, 
    GL_APPLE_packed_pixels, GL_APPLE_vertex_array_object, GL_ARB_draw_buffers, 
    GL_ARB_fragment_program, GL_ARB_fragment_shader, GL_ARB_shader_objects, 
    GL_ARB_vertex_program, GL_ARB_vertex_shader, GL_ATI_draw_buffers, 
    GL_ATI_texture_env_combine3, GL_ATI_texture_float, GL_EXT_shadow_funcs, 
    GL_EXT_stencil_wrap, GL_MESA_pack_invert, GL_MESA_ycbcr_texture, 
    GL_ARB_depth_clamp, GL_ARB_fragment_program_shadow, 
    GL_ARB_half_float_pixel, GL_ARB_point_sprite, GL_ARB_shading_language_100, 
    GL_ARB_sync, GL_ARB_texture_non_power_of_two, GL_ARB_vertex_buffer_object, 
    GL_ATI_blend_equation_separate, GL_EXT_blend_equation_separate, 
    GL_OES_read_format, GL_ARB_color_buffer_float, GL_ARB_pixel_buffer_object, 
    GL_ARB_texture_compression_rgtc, GL_ARB_texture_float, 
    GL_ARB_texture_rectangle, GL_EXT_packed_float, GL_EXT_pixel_buffer_object, 
    GL_EXT_texture_compression_rgtc, GL_EXT_texture_rectangle, 
    GL_EXT_texture_sRGB, GL_EXT_texture_shared_exponent, 
    GL_ARB_framebuffer_object, GL_EXT_framebuffer_blit, 
    GL_EXT_framebuffer_multisample, GL_EXT_packed_depth_stencil, 
    GL_APPLE_object_purgeable, GL_ARB_vertex_array_object, 
    GL_ATI_separate_stencil, GL_EXT_draw_buffers2, 
    GL_EXT_gpu_program_parameters, GL_EXT_texture_array, 
    GL_EXT_texture_integer, GL_EXT_texture_sRGB_decode, GL_EXT_timer_query, 
    GL_OES_EGL_image, GL_MESA_texture_array, GL_ARB_copy_buffer, 
    GL_ARB_depth_buffer_float, GL_ARB_half_float_vertex, 
    GL_ARB_map_buffer_range, GL_ARB_texture_rg, GL_ARB_texture_swizzle, 
    GL_ARB_vertex_array_bgra, GL_EXT_separate_shader_objects, 
    GL_EXT_texture_swizzle, GL_EXT_vertex_array_bgra, 
    GL_NV_conditional_render, GL_ARB_ES2_compatibility, 
    GL_ARB_draw_elements_base_vertex, GL_ARB_explicit_attrib_location, 
    GL_ARB_fragment_coord_conventions, GL_ARB_provoking_vertex, 
    GL_ARB_sampler_objects, GL_ARB_seamless_cube_map, 
    GL_ARB_shader_texture_lod, GL_EXT_provoking_vertex, GL_EXT_texture_snorm, 
    GL_MESA_texture_signed_rgba, GL_ARB_robustness, GL_EXT_transform_feedback 

32 GLX Visuals 
    visual x bf lv rg d st colorbuffer sr ax dp st accumbuffer ms cav 
    id dep cl sp sz l ci b ro r g b a F gb bf th cl r g b a ns b eat 

을 생산 : 나는이 코드를 실행하면 다음과 같이

, 내 출력은 작동해야합니까? 그렇지 않다면 변경하기 위해 내가 할 수있는 일이 있습니까? 이와 같은 문제에 관해 읽은 포럼 게시물은 일반적으로 컨텍스트를 초기화 할 때 OpenGL 3.x의 적절한 구현이 부족하여 테스트 한 코드와 비슷한 결과를 얻는 사람들이 있었기 때문입니다 .

필자는 배포본에 대한 다양한 X11 패키지를 검색하여 일부 기회가 누락되었거나 누락 된 것인지 여부를 확인했습니다. 물론, 이것은 아무 것도 쓸데 없었습니다. 을 만들었습니다. 설치/변경된 것 중 하나가 더 나쁘거나 제대로 작동하지 않았습니다.

xorg.conf로

Section "Module" 
    SubSection "extmod" 
     Option "omit xfree86-dga" 
    EndSubSection 
    Load "i2c" 
    Load "ddc" 
    Load "vbe" 
    Load "dri" 
    Load "glx" 
    Load "synaptics" 
    Load "drm" 
EndSection 

Section "ServerFlags" 
    Option "AllowMouseOpenFail" "true" 
EndSection 

Section "Monitor" 
    Identifier "Generic Monitor" 
    VertRefresh 43 - 60 
    HorizSync  28 - 80 
EndSection 


Section "Device" 

    Identifier "SabayonVga0" 
    Driver  "intel" 
    #BusID "PCI:00:02" 
    #Option "RenderAccel" "on" 
    #Option "XAANoOffscreenPixmaps" 
    #Option "BusType" "PCI" 
    #Option "ColorTiling" "on" 
    #Option "EnablePageFlip" "on" 
    # UseEvents is causing segmentation faults with 
    # NVIDIA 6xxx, 7xxx and >=275.xx.xx drivers 
    #Option "UseEvents" "True" 
    Option "LogoPath" "/usr/share/backgrounds/sabayonlinux-nvidia.png" 

EndSection 



Section "Screen" 

    Identifier "Screen 0" 
    Device  "SabayonVga0" 
    Monitor  "Generic Monitor" 
    Option  "AddARGBGLXVisuals" "true" 

    DefaultDepth 24 

    SubSection "Display" 
     Depth  8 
     ViewPort 0 0 
     #Modes  "1024x768" "800x600" "640x480" 
    EndSubsection 

    SubSection "Display" 
     Depth   16 
     ViewPort  0 0 
     #Modes  "1024x768" "800x600" "640x480" 
    EndSubsection 

    SubSection "Display" 
     Depth   24 
     ViewPort  0 0 
     #Modes  "1024x768" "800x600" "640x480" 
    EndSubsection 

EndSection 


Section "DRI" 
    Mode 0666 
EndSection 

Section "ServerLayout" 
    Identifier "Main Layout" 
    Screen 0 "Screen 0" 
EndSection 

Section "Extensions" 
    #Option "Composite" "Enable" 
EndSection 

실행되는 코드 내가 꽤 어떻게 이런 일이 수에 관한 난처한 상황에 빠진거야

#include <GL/glx.h> 
#include <GL/gl.h> 
#include <unistd.h> 
#include <iostream> 

#include <stdlib.h> 
#include <string.h> 
#include <stdio.h> 

#define GLX_CONTEXT_MAJOR_VERSION_ARB  0x2091 
#define GLX_CONTEXT_MINOR_VERSION_ARB  0x2092 
typedef GLXContext (*glXCreateContextAttribsARBProc)(Display*, GLXFBConfig, GLXContext, Bool, const int*); 

int main (int argc, char ** argv) 
{ 
    Display *display = XOpenDisplay(0); 

    glXCreateContextAttribsARBProc glXCreateContextAttribsARB = NULL; 

    const char *extensions = glXQueryExtensionsString(display, DefaultScreen(display)); 
    std::cout << extensions << std::endl; 

    static int visual_attribs[] = 
    { 
     GLX_RENDER_TYPE, GLX_RGBA_BIT, 
     GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT, 
     GLX_DOUBLEBUFFER, true, 
     GLX_RED_SIZE, 1, 
     GLX_GREEN_SIZE, 1, 
     GLX_BLUE_SIZE, 1, 
     None 
    }; 

    std::cout << "Getting framebuffer config" << std::endl; 
    int fbcount; 
    GLXFBConfig *fbc = glXChooseFBConfig(display, DefaultScreen(display), visual_attribs, &fbcount); 
    if (!fbc) 
    { 
     std::cout << "Failed to retrieve a framebuffer config" << std::endl; 
     return 1; 
    } 

    std::cout << "Getting XVisualInfo" << std::endl; 
    XVisualInfo *vi = glXGetVisualFromFBConfig(display, fbc[0]); 

    XSetWindowAttributes swa; 
    std::cout << "Creating colormap" << std::endl; 
    swa.colormap = XCreateColormap(display, RootWindow(display, vi->screen), vi->visual, AllocNone); 
    swa.border_pixel = 0; 
    swa.event_mask = StructureNotifyMask; 

    std::cout << "Creating window" << std::endl; 
    Window win = XCreateWindow(display, RootWindow(display, vi->screen), 0, 0, 100, 100, 0, vi->depth, InputOutput, vi->visual, CWBorderPixel|CWColormap|CWEventMask, &swa); 
    if (!win) 
    { 
     std::cout << "Failed to create window." << std::endl; 
     return 1; 
    } 

    std::cout << "Mapping window" << std::endl; 
    XMapWindow(display, win); 

    // Create an oldstyle context first, to get the correct function pointer for glXCreateContextAttribsARB 
    GLXContext ctx_old = glXCreateContext(display, vi, 0, GL_TRUE); 
    glXCreateContextAttribsARB = (glXCreateContextAttribsARBProc)glXGetProcAddress((const GLubyte*)"glXCreateContextAttribsARB"); 
    glXMakeCurrent(display, 0, 0); 
    glXDestroyContext(display, ctx_old); 

    if (glXCreateContextAttribsARB == NULL) 
    { 
     std::cout << "glXCreateContextAttribsARB entry point not found. Aborting." << std::endl; 
     return false; 
    } 

    static int context_attribs[] = 
    { 
     GLX_CONTEXT_MAJOR_VERSION_ARB, 3, 
     GLX_CONTEXT_MINOR_VERSION_ARB, 0, 
     None 
    }; 

    std::cout << "Creating context" << std::endl; 
    GLXContext ctx = glXCreateContextAttribsARB(display, fbc[0], NULL, true, context_attribs); 
    if (!ctx) 
    { 
     std::cout << "Failed to create GL3 context." << std::endl; 
     return 1; 
    } 

    std::cout << "Making context current" << std::endl; 
    glXMakeCurrent(display, win, ctx); 

     glClearColor (0, 0.5, 1, 1); 
     glClear (GL_COLOR_BUFFER_BIT); 
     glXSwapBuffers (display, win); 

     sleep(1); 

     glClearColor (1, 0.5, 0, 1); 
     glClear (GL_COLOR_BUFFER_BIT); 
     glXSwapBuffers (display, win); 

     sleep(1); 

    ctx = glXGetCurrentContext(); 
    glXMakeCurrent(display, 0, 0); 
    glXDestroyContext(display, ctx); 
} 

. 누군가이 문제에 대한 통찰력 및/또는 해결책을 제공해 주시겠습니까?

+1

참고 : 이것은 OpenGL 위키에 있습니다. http://www.opengl.org/wiki/Tutorial:_OpenGL_3.0_Context_Creation_(GLX) – datenwolf

+0

@datenwolf 비어있는 위키 페이지입니다. –

+1

@VJovic : 클릭하면 스택 오버플로 링크는')'을 가져 와서 URL에 추가하면 작동합니다. – datenwolf

답변

1

해당 프로그램이 시스템에서 오류없이 실행됩니다.

ld.so에 의해 실행 가능 파일로 링크되는 라이브러리는 X11 서버에서 잘못된 라이브러리입니다. 해당 라이브러리가 시스템에 대한 올바른 라이브러리가 아닌 경우

libGL.so.1 => /usr/lib/nvidia-current/libGL.so.1 (0x00007f9d4bdf5000) 

:, 예컨대을 ldd <your program>을 시도하고 libGL.so의 라인을 찾아, 아무것도 발생할 수 있습니다. X11 "잘못된 opcode"오류가 발생할 확률이 높습니다.

또한 GLEW을 사용하십시오. GL 호출 찾기와 같은 세부 사항을 처리합니다.