[vtkusers] VTK 7.0.0.RC1 (and releases before): X-OpenGL depth test(?) problems when using QVTKRenderWindow

David Gobbi david.gobbi at gmail.com
Mon Jan 18 09:16:41 EST 2016


As you know, when a window is created for OpenGL, all of the necessary
buffers have to be created in order for it to work.  The function
glXChooseVisual() is used to request a specific set of buffers.  So a
regular Qt widget does not call glxChooseVisual() and will therefore just
get a "default" context, which may or may not have all the attributes that
are needed for OpenGL rendering.  If VTK's own call to glXChooseVisual()
comes after Qt has already created the window, it might not be entirely
successful.

Yes, please submit a patch or at least submit your changes to the list.
I've used QGLWidget with VTK in the past, and my experience (on the systems
that I was using at the time) was that it was less reliable than just using
QWidget.  The QGLWidget does a lot of stuff under-the-hood that doesn't fit
perfectly with VTK.

 - David

On Mon, Jan 18, 2016 at 6:46 AM, Sophonet <vtk12af6bc42 at kant.sophonet.de>
wrote:

> It works! When deriving QVTKRenderWindowInteractor from
> PySide.QtOpenGL.QGLWidget instead of QWidget, the error messages regarding
> glDrawBuffer etc. disappear and depth test / rendering seems to be correct.
>
> I do not fully understand the potential cause of being a VMDriver issue,
> since (i) I would assume that this applies to the Cone - example as well
> (which works) and (ii) the rendering string reveals the Gallium llvm engine
> (a software renderer, which should not depend on the graphics driver).
> Nevermind, the good news that this seems to be resolved.
>
> The same change on MS Windows seems to work as well.
>
> However, the constructor of QGLWidget does not accept window flags (for MS
> windows MSWindowsOwnDC is currently set in the current
> QVTKRenderWindowInteractor.py), so I had to omit them and I cannot fully
> judge whether this change would create a problem for other scripts.
> However, I would think that deriving from an QGLWidget is actually a
> reasonable thing to do.
>
> David, what do you think about the wflag issue and do you think a patch
> can make it to VTK7? Shall I submit one?
>
> Thanks,
>
>      Sophonet
>
>
>
> Am 2016-01-18 14:15, schrieb David Gobbi:
>
>> If you are running linux on a VM, you can try fiddling with the 3D
>> acceleration settings in the VMWare manager (though I can't give any
>> specific advice here, I haven't use VMWare recently).  One
>> possibility is that VMWare isn't creating a depth buffer on the client
>> side.  You can try some of the Qt OpenGL examples to see if they
>> work, and if they do, you can try changing with
>> the QVTKRenderWindow.py code to make it use a QGLWidget to create the
>> VTK drawing context.
>>
>>  - David
>>
>> On Mon, Jan 18, 2016 at 5:17 AM, Sophonet
>> <vtk12af6bc42 at kant.sophonet.de> wrote:
>>
>> Hi David,
>>>
>>> just tried it - the information you suggested is identical for
>>> Cone5.py (works, with vtkRenderWindowInteractor) and
>>> QVTKRenderWindow.py (depth problems). Info is attached below.
>>>
>>> Still, the error message
>>>
>>> Mesa: User error: GL_INVALID_OPERATION in
>>> glDrawBuffer(buffer=0x405)
>>>
>>> only occurs when starting QVTKRenderWindow.py (where the depth
>>> problems occur).
>>>
>>> Any more thoughts?
>>>
>>> Thanks,
>>>
>>>      Fabian
>>>
>>> ----
>>>
>>> Support OpenGL: 1
>>>
>>> IsDirect: 1
>>>
>>> server glx vendor string:  SGI
>>> server glx version string:  1.2
>>> server glx extensions:  GLX_ARB_multisample GLX_EXT_visual_info
>>> GLX_EXT_visual_rating GLX_EXT_import_context GLX_OML_swap_method
>>> GLX_SGI_make_current_read GLX_SGIS_multisample GLX_SGIX_hyperpipe
>>> GLX_SGIX_swap_barrier GLX_SGIX_fbconfig
>>> 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_create_context_robustness
>>> GLX_ARB_fbconfig_float GLX_ARB_framebuffer_sRGB
>>> GLX_ARB_get_proc_address GLX_ARB_multisample GLX_EXT_import_context
>>> GLX_EXT_visual_info GLX_EXT_visual_rating
>>> GLX_EXT_fbconfig_packed_float 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 extensions:  GLX_ARB_get_proc_address GLX_ARB_multisample
>>> GLX_EXT_import_context GLX_EXT_visual_info GLX_EXT_visual_rating
>>> GLX_MESA_multithread_makecurrent GLX_OML_swap_method
>>> GLX_SGI_make_current_read GLX_SGIS_multisample GLX_SGIX_fbconfig
>>> OpenGL vendor string:  VMware, Inc.
>>> OpenGL renderer string:  Gallium 0.4 on llvmpipe (LLVM 3.3, 128
>>> bits)
>>> OpenGL version string:  2.1 Mesa 9.2.3
>>> 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_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_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_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_EXT_stencil_two_side GL_EXT_texture_cube_map
>>> GL_NV_fog_distance 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_NV_primitive_restart GL_ARB_fragment_program_shadow
>>> GL_ARB_half_float_pixel GL_ARB_occlusion_query2 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_ATI_texture_compression_3dc GL_EXT_packed_float
>>> GL_EXT_pixel_buffer_object GL_EXT_texture_compression_rgtc
>>> GL_EXT_texture_mirror_clamp GL_EXT_texture_rectangle
>>> GL_EXT_texture_sRGB GL_EXT_texture_shared_exponent
>>> GL_ARB_framebuffer_object GL_EXT_framebuffer_blit
>>> GL_EXT_packed_depth_stencil GL_ARB_vertex_array_object
>>> GL_ATI_separate_stencil GL_ATI_texture_mirror_once
>>> GL_EXT_draw_buffers2 GL_EXT_draw_instanced
>>> GL_EXT_gpu_program_parameters GL_EXT_texture_array
>>> GL_EXT_texture_compression_latc 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_draw_instanced GL_ARB_half_float_vertex
>>> GL_ARB_instanced_arrays GL_ARB_map_buffer_range GL_ARB_texture_rg
>>> GL_ARB_texture_swizzle GL_ARB_vertex_array_bgra
>>> GL_EXT_texture_swizzle GL_EXT_vertex_array_bgra
>>> GL_NV_conditional_render GL_AMD_conservative_depth
>>> GL_AMD_draw_buffers_blend GL_ARB_ES2_compatibility
>>> GL_ARB_blend_func_extended GL_ARB_debug_output
>>> GL_ARB_draw_buffers_blend 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_shader_texture_lod GL_ARB_texture_rgb10_a2ui
>>> GL_ARB_uniform_buffer_object GL_ARB_vertex_type_2_10_10_10_rev
>>> GL_EXT_provoking_vertex GL_EXT_texture_snorm
>>> GL_MESA_texture_signed_rgba GL_ARB_get_program_binary
>>> GL_ARB_robustness GL_ARB_shader_bit_encoding GL_ARB_timer_query
>>> GL_ARB_transform_feedback2 GL_ARB_transform_feedback3
>>> GL_ARB_conservative_depth GL_ARB_internalformat_query
>>> GL_ARB_shading_language_420pack GL_ARB_shading_language_packing
>>> GL_ARB_texture_storage GL_ARB_transform_feedback_instanced
>>> GL_EXT_transform_feedback GL_ARB_invalidate_subdata
>>> X Extensions:  SHAPE, Extended-Visual-Information,
>>> XInputExtension, XTEST, BIG-REQUESTS, MIT-SUNDRY-NONSTANDARD,
>>> DEC-XTRAP, SYNC, XKEYBOARD, XC-MISC, RECORD, DOUBLE-BUFFER,
>>> XC-APPGROUP, SECURITY, TOG-CUP, GLX, SGI-GLX, XFIXES, RENDER, RANDR,
>>> X-Resource, XEVIE, DAMAGE
>>>
>>> Am 2016-01-15 23:01, schrieb David Gobbi:
>>> Hi Sophonet,
>>>
>>> You can try using the vtkRenderWindow to get info from the context,
>>> to
>>> see if it's different with QVTKRenderWindowInteractor than
>>> without.
>>>
>>> There are two boolean methods for vtkRenderWindow:
>>>    window.SupportsOpenGL()
>>>    window.IsDirect()
>>>
>>> And also this method that prints a bunch of info:
>>>    print window.ReportCapabilities()
>>>
>>> You might have to all Render() once before calling these methods.
>>>
>>>  - David
>>>
>>> On Fri, Jan 15, 2016 at 2:55 AM, Sophonet
>>> <vtk12af6bc42 at kant.sophonet.de> wrote:
>>>
>>> Hi David,
>>>
>>> The problem occurs as well when running
>>> QVTKRenderWindowInteractor.py directly.
>>>
>>> I have tried picking the Mesa software renderer to exclude a
>>> graphics driver problem by
>>>
>>> LIBGL_ALWAYS_SOFTWARE=1 GALLIUM_DRIVER=softpipe python
>>> PATHTO_/QVTKRenderWindowInteractor.py, but same problem.
>>>
>>> The software renderer is chosen by setting the two variables as I
>>> could verify with
>>>
>>> LIBGL_ALWAYS_SOFTWARE=1 GALLIUM_DRIVER=softpipe glxinfo:
>>>
>>> ...
>>> OpenGL renderer string: Gallium 0.4 on softpipe
>>> OpenGL version string: 2.1 Mesa 9.2.3
>>> OpenGL shading language version string: 1.30
>>> ...
>>>
>>> I have found a related thread here (8 years old):
>>>
>>> http://osdir.com/ml/python-enthought-devel/2008-04/msg00491.html
>>> [1]
>>> [1]
>>>
>>> ...but as opposed to the problem described there, I do not see
>>> warnings on a missing depth buffer when turning on MESA_DEBUG=1 -
>>> only the errors with respect to glDrawBuffer / glReadBuffer (see my
>>> previous e-mail)... and in order to rule out device driver
>>> problems,
>>> I have forced software rendering as mentioned above.
>>>
>>> I would be happy to debug further if I would know how.
>>>
>>> Thanks,
>>>
>>>        sophonet
>>>
>>> Am 2016-01-14 21:39, schrieb David Gobbi:
>>> Hi Sophonet,
>>>
>>> QVTKRenderWindowInteractor.py has a "main" and can be run as an
>>> example.  If you run it, does it show the same problem?
>>>
>>> I recently tried it with VTK 7.0.0.rc1 and didn't see any depth
>>> buffer
>>> issues (using Ubuntu 12.04).
>>>
>>>  - David
>>>
>>> On Thu, Jan 14, 2016 at 1:17 PM, Sophonet
>>> <vtk12af6bc42 at kant.sophonet.de> wrote:
>>>
>>> Dear list,
>>>
>>> when trying to run a Qt Python application using the
>>> qt.QTVTKRenderWindow, there are depth test problems.
>>>
>>> Examples/Tutorial/Step1/Python/Cone.py works perfect, but with a
>>> simple QVTKRenderWindow example (based on
>>> https://gist.github.com/samueljohn/3090097 [2] [2] [1], needs two
>>>
>>> more
>>>
>>> imports though), there are depth test problems, i.e. it appears
>>> that
>>> for some reason no depth test is applied (so the last drawn
>>> primitive is always visible on top).
>>>
>>> When doing
>>>
>>> export MESA_DEBUG=1
>>>
>>> before running the two scripts, there is one warning in the
>>> Examples/Tutorial/Step1/Python/Cone.py,
>>>
>>> Mesa warning: couldn't open libtxc_dxtn.so, software DXTn
>>> compression/decompression unavailable
>>>
>>> [but everything looks fine],
>>>
>>> but many more with the QVTKRenderWindow
>>>
>>> Mesa: User error: GL_INVALID_OPERATION in
>>> glDrawBuffer(buffer=0x405)
>>> Mesa: User error: GL_INVALID_OPERATION in
>>> glReadBuffer(buffer=0x405)
>>> ...
>>>
>>> I am running Mesa 9.2.3 on my system (OpenSUSE 13.1), so I cannot
>>> switch to the OpenGL2 rendering backend (which might resolve the
>>> problem? - don't know...).
>>>
>>> Any hints?
>>>
>>> Thanks,
>>>
>>>      sophonet
>>>
>>> Links:
>>> ------
>>> [1] https://gist.github.com/samueljohn/3090097 [2] [2]
>>>
>>> Links:
>>> ------
>>> [1]
>>> http://osdir.com/ml/python-enthought-devel/2008-04/msg00491.html [1]
>>> [2] https://gist.github.com/samueljohn/3090097 [2]
>>>
>>
>>
>>
>> Links:
>> ------
>> [1] http://osdir.com/ml/python-enthought-devel/2008-04/msg00491.html
>> [2] https://gist.github.com/samueljohn/3090097
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20160118/713791f3/attachment.html>


More information about the vtkusers mailing list