2012-03-14 11 views
1

この問題は大きな問題です。まず、XLib APIについて少ししかビットを知っていますが、私が何かをする前に実際にOpenGLレンダリングコンテキスト(3.0)を作成できることをテストしたいと思っていたので、テストコードをコピーして貼り付けて実行しました。OpenGLレンダリングコンテキスト「失敗したリクエスト152のオペコード」(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 wikiにあります:http://www.opengl.org/wiki/Tutorial:_OpenGL_3.0_Context_Creation_(GLX) – datenwolf

+0

@datenwolfこれは空のwikiページです:) –

+1

@VJovic:をクリックするとスタックオーバーフローはリンク '' 'を取り除き、URLに追加すると動作します – datenwolf

答えて

1

私のシステムでは、このプログラムはエラーなく実行されます。

ld.soによって実行可能ファイルにリンクされているライブラリは、X11サーバーでは間違っています。

は例えば、ldd <your program>を試してみて、libGL.soのための行を探します。:

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

そのライブラリを使用するシステムの適切なライブラリではない場合、何が起こる可能性があります。 X11の "無効なオペコード"エラーが発生する可能性があります。

また、GLEWを使用してください。 GLコールの検索などの詳細を処理します。

関連する問題