OpenGL Rendering Context Производит «код операции неудачного запроса 152 (GLX)» (Mesa 8.0 – OpenGL 3.0, Linux)

Это огромная проблема: во-первых, хотя я немного разбираюсь в API XLib, я хотел протестировать и убедиться, что смогу создать контекст рендеринга OpenGL (3.0), прежде чем что-либо сделать, поэтому я просто скопировал и вставил некоторый тестовый код и запустил его.

Когда я запускаю код, мой вывод выглядит следующим образом:

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 rgba F gb bf th cl rgba 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  #include  #include  #include  #include  #include  #include  #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" <screen), vi->visual, AllocNone); swa.border_pixel = 0; swa.event_mask = StructureNotifyMask; std::cout << "Creating window" <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); } 

Я довольно тупой, как это может происходить. Может ли кто-нибудь прокомментировать эту проблему и / или решить эту проблему?

Эта программа работает без ошибок в моей системе.

По предположению, библиотека, которая связана с исполняемым файлом ld.so, неверна для сервера X11.

попробуйте ldd и найдите строку для libGL.so, например:

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

Если эта библиотека не является правильной библиотекой для вашей системы, все может произойти. Ошибка X11 «неверный код операции» более чем вероятна.

Кроме того, используйте GLEW . Он заботится о деталях, таких как поиск вызовов GL.