jtsiomb / stereowrap

OpenGL stereoscopic visual wrapper
http://nuclear.mutantstargoat.com/sw/stereowrap/
GNU General Public License v3.0
2 stars 1 forks source link

SDL - Couldn't find matching GLX visual #1

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
I'm trying to get stereowrap working with SDL, applying a simple patch to the 
'testgl.c' (included with SDL under 'test' directory, also here 
"www.libsdl.org/release/SDL-1.2.15/test/testgl.c").
--
        //SDW
        SDL_GL_SetAttribute( SDL_GL_STEREO, 1 );

        if ( SDL_SetVideoMode( w, h, bpp, video_flags ) == NULL ) {
                fprintf(stderr, "Couldn't set GL mode: %s\n", SDL_GetError());
                SDL_Quit();
                exit(1);
        }
--

When SDL_GL_STEREO is enabled ('1') I get the following error when run
--
simon@drifter:~/SDL-1.2.14/test$ stereowrap -m cross ./testgl
-- stereowrap(cross): ./testgl
Couldn't set GL mode: Couldn't find matching GLX visual
--

Setting SDL_GL_STEREO to 0 functions fine, ie. gets a visual and starts 
drawing... Any suggestions?
Simon.

Original issue reported on code.google.com by mungew...@gmail.com on 29 Mar 2012 at 5:41

GoogleCodeExporter commented 9 years ago
I should add glxgears works fine, and I'm using Nouveau on Xubuntu 11.10

Original comment by mungew...@gmail.com on 29 Mar 2012 at 5:48

GoogleCodeExporter commented 9 years ago
with STEREO off, I also get same error with the '-fsaa' option 
(MULTISAMPLEBUFFERS)
--
simon@drifter:~/SDL-1.2.14/test$ stereowrap -m cross ./testgl -slow -fsaa 
-- stereowrap(cross): ./testgl -slow -fsaa
Couldn't set GL mode: Couldn't find matching GLX visual

simon@drifter:~/SDL-1.2.14/test$ stereowrap -m cross ./testgl -slow 
-- stereowrap(cross): ./testgl -slow
Screen BPP: 32

Vendor     : nouveau
Renderer   : Gallium 0.4 on NV98
Version    : 2.1 Mesa 7.10.2
Extensions : GL_ARB_copy_buffer GL_ARB_depth_clamp GL_ARB_depth_texture 
GL_ARB_draw_buffers GL_ARB_draw_elements_base_vertex 
GL_ARB_explicit_attrib_location GL_ARB_fragment_coord_conventions 
GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader 
GL_ARB_framebuffer_object GL_ARB_half_float_vertex GL_ARB_map_buffer_range 
GL_ARB_multisample GL_ARB_multitexture GL_ARB_occlusion_query 
GL_ARB_pixel_buffer_object GL_ARB_point_parameters GL_ARB_point_sprite 
GL_ARB_provoking_vertex GL_ARB_shader_objects GL_ARB_shading_language_100 
GL_ARB_shadow GL_ARB_texture_border_clamp GL_ARB_texture_compression 
GL_ARB_texture_cube_map GL_ARB_texture_env_add GL_ARB_texture_env_combine 
GL_ARB_texture_env_crossbar GL_ARB_texture_env_dot3 
GL_ARB_texture_mirrored_repeat GL_ARB_texture_non_power_of_two 
GL_ARB_texture_rectangle GL_ARB_texture_rg GL_ARB_texture_swizzle 
GL_ARB_transpose_matrix GL_ARB_vertex_array_bgra GL_ARB_vertex_array_object 
GL_ARB_vertex_buffer_object GL_ARB_vertex_program GL_ARB_vertex_shader 
GL_ARB_window_pos GL_EXT_abgr GL_EXT_bgra GL_EXT_blend_color 
GL_EXT_blend_equation_separate GL_EXT_blend_func_separate GL_EXT_blend_logic_op 
GL_EXT_blend_minmax GL_EXT_blend_subtract GL_EXT_compiled_vertex_array 
GL_EXT_copy_texture GL_EXT_draw_buffers2 GL_EXT_draw_range_elements 
GL_EXT_fog_coord GL_EXT_framebuffer_blit GL_EXT_framebuffer_multisample 
GL_EXT_framebuffer_object GL_EXT_gpu_program_parameters 
GL_EXT_multi_draw_arrays GL_EXT_packed_depth_stencil GL_EXT_packed_pixels 
GL_EXT_pixel_buffer_object GL_EXT_point_parameters GL_EXT_polygon_offset 
GL_EXT_provoking_vertex GL_EXT_rescale_normal GL_EXT_secondary_color 
GL_EXT_separate_shader_objects GL_EXT_separate_specular_color 
GL_EXT_shadow_funcs GL_EXT_stencil_two_side GL_EXT_stencil_wrap 
GL_EXT_subtexture GL_EXT_texture3D GL_EXT_texture_cube_map 
GL_EXT_texture_edge_clamp GL_EXT_texture_env_add GL_EXT_texture_env_combine 
GL_EXT_texture_env_dot3 GL_EXT_texture_filter_anisotropic 
GL_EXT_texture_lod_bias GL_EXT_texture_mirror_clamp GL_EXT_texture_object 
GL_EXT_texture GL_EXT_texture_rectangle GL_EXT_texture_sRGB 
GL_EXT_texture_swizzle GL_EXT_vertex_array_bgra GL_EXT_vertex_array 
GL_OES_EGL_image GL_OES_read_format GL_APPLE_packed_pixels 
GL_APPLE_vertex_array_object GL_ATI_blend_equation_separate 
GL_ATI_separate_stencil GL_ATI_texture_env_combine3 GL_ATI_texture_mirror_once 
GL_IBM_multimode_draw_arrays GL_IBM_rasterpos_clip 
GL_IBM_texture_mirrored_repeat GL_INGR_blend_func_separate GL_MESA_pack_invert 
GL_MESA_window_pos GL_NV_blend_square GL_NV_conditional_render 
GL_NV_depth_clamp GL_NV_light_max_exponent GL_NV_packed_depth_stencil 
GL_NV_texgen_reflection GL_NV_texture_env_combine4 GL_NV_texture_rectangle 
GL_SGIS_generate_mipmap GL_SGIS_texture_border_clamp GL_SGIS_texture_edge_clamp 
GL_SGIS_texture_lod GL_SUN_multi_draw_arrays 

SDL_GL_ALPHA_SIZE: got 0
SDL_GL_RED_SIZE: requested 5, got 8
SDL_GL_GREEN_SIZE: requested 5, got 8
SDL_GL_BLUE_SIZE: requested 5, got 8
SDL_GL_DEPTH_SIZE: requested 16, got 24
SDL_GL_DOUBLEBUFFER: requested 1, got 1
app lost mouse focus
key 'left ctrl' pressed
key 'v' pressed
key 'c' pressed
key 'left alt' pressed
app lost input focus
^C41.43 FPS

--

Original comment by mungew...@gmail.com on 29 Mar 2012 at 6:26

GoogleCodeExporter commented 9 years ago
If I enable DEBUG (with export STEREOWRAP_DEBUG=1) I see glxgears call 
ChooseVisual
--
simon@drifter:~/stereowrap-0.1$ stereowrap -m cross glxgears
-- stereowrap(cross): glxgears
STEREOWRAP_DEBUG: glXChooseVisual called
Running synchronized to the vertical refresh.  The framerate should be
approximately the same as the monitor refresh rate.
STEREOWRAP_DEBUG: glXSwapBuffers called
STEREOWRAP_DEBUG: glXSwapBuffers called
--

testgl does not, but does call glDrawBuffer.... strange...

Original comment by mungew...@gmail.com on 29 Mar 2012 at 6:48

GoogleCodeExporter commented 9 years ago
It looks like SDL 'collects' the pointers to the appropriate OpenGL calls when 
starting up and then calls them directly as required.

http://hg.libsdl.org/SDL/file/6bb657898f55/src/video/x11/SDL_x11opengl.c#l157

I'm guessing that this is not compatible with PRELOAD stuff, but if anyone has 
a 'work around' for this I'd be real interested.
Simon.

Original comment by mungew...@gmail.com on 29 Mar 2012 at 3:21

GoogleCodeExporter commented 9 years ago
Yes it's definately how SDL handles the pointers to GL functions, if I rebuild 
with these calling GL functions directly I am able to get the 'testgl' demo 
producing stereo images.

ie in src/video/x11/SDL_x11gl.c
--
#if 0 //SDW
        glx_visualinfo = this->gl_data->glXChooseVisual(GFX_Display, 
                                                  SDL_Screen, attribs);
#else
        glx_visualinfo = glXChooseVisual(GFX_Display, SDL_Screen, attribs);
#endif
--

Original comment by mungew...@gmail.com on 3 Apr 2012 at 1:28

Attachments: