[vtkusers] GPURayCast and Texture3D volume mappers fail to render
Miro Drahos
mdrahos at robodoc.com
Wed Sep 11 21:58:54 EDT 2013
Hi burlen,
thanks for the valuable insights. The glXGetProcAddress* functions were
present, in both the nvidia version of libGL.so:
$ nm -CD /usr/lib/nvidia-310/libGL.so | grep glXGetProcAdd
000000000007d360 T glXGetProcAddress
000000000007d470 T glXGetProcAddressARB
as well as the original mesa implementation (that I renamed to get it
out of the way):
$ nm -CD /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0.renamed | grep
glXGetProcAdd
00000000000190e0 T glXGetProcAddress
00000000000190e0 T glXGetProcAddressARB
But the cmake didn't seem to find them:
$ grep -i GLX ./CMakeCache.txt
<...>
*//Have function glXGetProcAddress**
**VTK_USE_GLX_GET_PROC_ADDRESS:INTERNAL=**
**//Have function glXGetProcAddressARB**
**VTK_USE_GLX_GET_PROC_ADDRESS_ARB:INTERNAL=**
*
I had done only 'make clean' when I recompiled VTK with new nvidia
drivers. After erasing the cmake cache and recompiling against nvidia
libGL.so I am a happy camper, all the extensions are reported, all the
regression tests pass and my volume renders smoothly.
Thank you tons!!! :)
Miro
On 09/11/2013 05:03 PM, burlen wrote:
> Hi Miro
>
>> 203 - LoadOpenGLExtension (Failed)
> keep it simple. forget about the GPURayCast until this test passes.
>
>> *#define VTK_NO_EXTENSION_LOADING*
> that happens if neither glXGetProcAddressARB nor glXGetProcAddress is
> found. I think this is your problem. I could verify these are around
> as follows:
>
> $ grep glXGetProcAddress /usr/include/GL/ -rIn
> $ nm -CD /usr/lib/x86_64-linux-gnu/libGL.so | grep glXGetProcAdd
>
> and verify that VTK found them too:
>
> $grep GLX ./CMakeCache.txt
>
>
>> after I installed nvidia propriatory driver, I got another libGL.so
>> in /usr/lib/nvidia-310/libGL.so so I re-configured vtk
> did you rm -rf your build just to make sure that there's no bad values
> in your cmake cache? might be worth a try if you hadn't.
>
> Burlen
>
>
> On 09/11/2013 03:36 PM, Miro Drahos wrote:
>> Thanks burlen and Julien.
>>
>> I did call Render() to initialize the GL context. Created a new plain
>> vtkRenderWindow too (in my application I use QVTKWidget):
>> cout << " DEBUG standalone renwin" << endl;
>> vtkRenderWindow * rw = vtkRenderWindow::New();
>> rw->SetSize(512, 512);
>> rw->Render();
>>
>> VTK_CREATE(vtkRenderer, ren);
>> ren->AddViewProp(this->m_volume);
>> rw->AddRenderer(ren);
>>
>> vtkOpenGLExtensionManager *extensions=vtkOpenGLExtensionManager::New();
>> extensions->SetRenderWindow(rw);
>> extensions->Update();
>>
>> cout << " SUPPORTS 1.3? " <<
>> extensions->ExtensionSupported("GL_VERSION_1_3") << endl;
>> cout << "====================== exts: ==================== " <<
>> extensions->GetExtensionsString() <<
>> "================================================== " << endl;
>> rw->Render();
>> cout << " DEBUG standalone renwin done" << endl;
>>
>> But the terminal output shows empty string:
>> DEBUG standalone renwin
>> SUPPORTS 1.3? 0
>> ====================== exts: ====================
>> ==================================================
>> ERROR: In
>> /home/miro/BUILDS/VTK5.10.1/VolumeRendering/vtkOpenGLVolumeTextureMapper3D.cxx,
>> line 100
>> vtkOpenGLVolumeTextureMapper3D (0xba0c9c0): required extensions not
>> supported
>>
>> DEBUG standalone renwin done
>>
>> Julien's hint got me to dig deeper into why I am getting the empty
>> GetExtensionsString().
>>
>> Looking at the sources, the reason why it returns an empty string is
>> because of this #define:
>> VTK_NO_EXTENSION_LOADING
>> which causes vtkOpenGLExtensionManager::ReadOpenGLExtensions() to set
>> the extensions to empty string
>> This #define gets into play from #include'd
>> vtkOpenGLExtensionManagerConfigure.h which contains only the following:
>>
>> /* #undef VTK_USE_WGL_GET_PROC_ADDRESS */
>> /* #undef VTK_USE_APPLE_LOADER */
>> /* #undef VTK_USE_GLX_GET_PROC_ADDRESS */
>> /* #undef VTK_USE_GLX_GET_PROC_ADDRESS_ARB */
>> /* #undef VTK_USE_VTK_DYNAMIC_LOADER */
>> *#define VTK_NO_EXTENSION_LOADING*
>>
>> /* #undef VTK_DEFINE_GLX_GET_PROC_ADDRESS_PROTOTYPE */
>>
>> // If using vtkDynamicLoader, we need to know where the libraries are.
>> #define OPENGL_LIBRARIES
>> "/usr/lib/x86_64-linux-gnu/libGLU.so;/usr/lib/x86_64-linux-gnu/libGL.so;/usr/lib/x86_64-linux-gnu/libSM.so;/usr/lib/x86_64-linux-gnu/libICE.so;/usr/lib/x86_64-linux-gnu/libX11.so;/usr/lib/x86_64-linux-gnu/libXext.so"
>>
>> This #define must have gotten there when configuring the VTK build. I
>> tried to search CMakeLists.txt for VTK_NO_EXTENSION_LOADING and it
>> appers in this section (which I admit I have no clue about):
>> IF(VTK_USE_X)
>> CHECK_FUNCTION_EXISTS(glXGetProcAddressARB
>> VTK_USE_GLX_GET_PROC_ADDRESS_ARB)
>> IF (VTK_USE_GLX_GET_PROC_ADDRESS_ARB)
>> IF (NOT
>> "${VTK_GLX_GET_PROC_ADDRESS_ARB_PROTOTYPE_EXISTS_INCLUDES}" STREQUAL
>> "${OPENGL_INCLUDE_DIR}")
>> # The OpenGL includes changed. Retest glXGetProcAddressARB
>> prototype.
>> SET(VTK_GLX_GET_PROC_ADDRESS_ARB_PROTOTYPE_EXISTS_TESTED 0)
>> ENDIF (NOT
>> "${VTK_GLX_GET_PROC_ADDRESS_ARB_PROTOTYPE_EXISTS_INCLUDES}" STREQUAL
>> "${OPENGL_INCLUDE_DIR}")
>> IF (NOT VTK_GLX_GET_PROC_ADDRESS_ARB_PROTOTYPE_EXISTS_TESTED)
>> MESSAGE(STATUS "Looking for glXGetProcAddressARB in GL/glx.h")
>> TRY_COMPILE(VTK_GLX_GET_PROC_ADDRESS_ARB_PROTOTYPE_EXISTS
>> ${CMAKE_BINARY_DIR}
>> ${CMAKE_CURRENT_SOURCE_DIR}/CheckglXGetProcAddressARB.cxx
>> CMAKE_FLAGS
>> "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}"
>> "-DINCLUDE_DIRECTORIES:STRING=${OPENGL_INCLUDE_DIR}"
>> OUTPUT_VARIABLE OUTPUT)
>> MESSAGE(STATUS "Looking for glXGetProcAddressARB in
>> GL/glx.h - ${VTK_GLX_GET_PROC_ADDRESS_ARB_PROTOTYPE_EXISTS}")
>> FILE(APPEND ${CMAKE_BINARY_DIR}/CMakeOutput.log
>> "Determining if glXGetProcAddressARB exists in GL/glx.h
>> ${VTK_GLX_GET_PROC_ADDRESS_ARB_PROTOTYPE_EXISTS} with the following
>> output:\n"
>> "${OUTPUT}\n\n")
>> SET(VTK_GLX_GET_PROC_ADDRESS_ARB_PROTOTYPE_EXISTS_TESTED 1
>> CACHE INTERNAL "Already set
>> VTK_GLX_GET_PROC_ADDRESS_ARB_PROTOTYPE_EXISTS")
>> SET(VTK_GLX_GET_PROC_ADDRESS_ARB_PROTOTYPE_EXISTS_INCLUDES
>> "${OPENGL_INCLUDE_DIR}"
>> CACHE INTERNAL "OpenGL includes used to test
>> glXGetProcAddressARB prototype.")
>> ENDIF (NOT VTK_GLX_GET_PROC_ADDRESS_ARB_PROTOTYPE_EXISTS_TESTED)
>> IF (NOT VTK_GLX_GET_PROC_ADDRESS_ARB_PROTOTYPE_EXISTS)
>> SET(VTK_DEFINE_GLX_GET_PROC_ADDRESS_PROTOTYPE 1)
>> ENDIF (NOT VTK_GLX_GET_PROC_ADDRESS_ARB_PROTOTYPE_EXISTS)
>> ELSE (VTK_USE_GLX_GET_PROC_ADDRESS_ARB)
>> CHECK_FUNCTION_EXISTS(glXGetProcAddress
>> VTK_USE_GLX_GET_PROC_ADDRESS)
>> IF (NOT VTK_USE_GLX_GET_PROC_ADDRESS)
>> # SET(VTK_USE_VTK_DYNAMIC_LOADER 1)
>> MESSAGE(STATUS "Could not find extension loader.
>> Extensions disabled.")
>> * SET(VTK_NO_EXTENSION_LOADING 1)*
>> ENDIF (NOT VTK_USE_GLX_GET_PROC_ADDRESS)
>> ENDIF (VTK_USE_GLX_GET_PROC_ADDRESS_ARB)
>> ELSE(VTK_USE_X)
>> * SET(VTK_NO_EXTENSION_LOADING 1)*
>> ENDIF(VTK_USE_X)
>>
>> When configuring VTK, the cmake option VTK_OPENGL_HAS_OSMESA was OFF,
>> if it matters at all.
>> Some other openGL options in cmake config:
>> OPENGL_INCLUDE_DIR /usr/include
>> OPENGL_gl_LIBRARY /usr/lib/x86_64-linux-gnu/libGL.so
>> OPENGL_glu_LIBRARY /usr/lib/x86_64-linux-gnu/libGLU.so
>> OPENGL_xmesa_INCLUDE_DIR OPENGL_xmesa_INCLUDE_DIR-NOTFOUND
>>
>> Now after I installed nvidia propriatory driver, I got another
>> libGL.so in /usr/lib/nvidia-310/libGL.so so I re-configured vtk with
>> OPENGL_gl_LIBRARY /usr/lib/nvidia-310/libGL.so
>> instead and recompiled, but it didn't change things. The
>> vtkOpenGLExtensionManagerConfigure.h still #defines
>> VTK_NO_EXTENSION_LOADING.
>>
>> The tests (thanks burlen!) show the following:
>>
>> $ ctest -R LoadOpenGL --verbose | grep GL_
>> 203: GL_VENDOR: NVIDIA Corporation
>> 203: GL_VERSION: 4.3.0 NVIDIA 310.44
>> 203: GL_RENDERER: GeForce GT 520/PCIe/SSE2
>> Errors while running CTest
>>
>> The relevant failed line was this:
>> The following tests FAILED:
>> 203 - LoadOpenGLExtension (Failed)
>>
>> Then the Tests binary shows nvidia's libGL.so in use, as expected:
>> $ ldd bin/RenderingCxxTests | grep GL
>> libGL.so.1 => /usr/lib/nvidia-310/libGL.so.1 (0x00007f75d8888000)
>>
>> But most interestingly,
>> ctest -R GPURay
>> all tests in this battery pass, only one segfaults:
>>
>> 8/17 Test #303: TestGPURayCastDataTypesMinIP
>> .....................***Exception: SegFault 0.02 sec
>>
>> That being said, I see the renderwindow flicker, but I don't see any
>> content (e.g. sphere) rendered. I'd like to run the tests in
>> interactive mode, but not sure how?
>>
>> I could build the latest vtk version from git and see whether I can
>> replicate the issue there if you think it would make debugging easier.
>>
>> Some more info on my system:
>> Installed OpenGL-related packages:
>> $ sudo dpkg-query -l | egrep -i 'mesa|opengl'
>> ii compiz-core 1:0.9.9~daily13.06.19~13.04-0ubuntu1
>> amd64 OpenGL window and compositing manager
>> ii compiz-plugins-default 1:0.9.9~daily13.06.19~13.04-0ubuntu1
>> amd64 OpenGL window and compositing manager - default plugins
>> ii glew-utils 1.9.0.is.1.8.0-0ubuntu1
>> amd64 OpenGL Extension Wrangler - utilities
>> ii libegl1-mesa:amd64 9.1.3-0ubuntu0.3
>> amd64 free implementation of the EGL API -- runtime
>> ii libegl1-mesa-dev 9.1.3-0ubuntu0.3
>> amd64 free implementation of the EGL API -- development files
>> ii libegl1-mesa-drivers:amd64
>> 9.1.3-0ubuntu0.3 amd64 free
>> implementation of the EGL API -- hardware drivers
>> ii libgl1-mesa-dev 9.1.3-0ubuntu0.3
>> amd64 free implementation of the OpenGL API -- GLX development
>> files
>> ii libgl1-mesa-dri:amd64 9.1.3-0ubuntu0.3
>> amd64 free implementation of the OpenGL API -- DRI modules
>> ii libgl1-mesa-dri-dbg:amd64
>> 9.1.3-0ubuntu0.3 amd64 Debugging symbols
>> for the Mesa DRI modules
>> ii libgl1-mesa-glx:amd64 9.1.3-0ubuntu0.3
>> amd64 free implementation of the OpenGL API -- GLX runtime
>> ii libgl2ps0 1.3.6-1 amd64
>> Lib providing high quality vector output for OpenGL application
>> ii libglapi-mesa:amd64 9.1.3-0ubuntu0.3
>> amd64 free implementation of the GL API -- shared library
>> ii libgles2-mesa:amd64 9.1.3-0ubuntu0.3
>> amd64 free implementation of the OpenGL|ES 2.x API -- runtime
>> ii libglew1.8:amd64 1.9.0.is.1.8.0-0ubuntu1
>> amd64 OpenGL Extension Wrangler - runtime environment
>> ii libglewmx1.8:amd64 1.9.0.is.1.8.0-0ubuntu1
>> amd64 OpenGL Extension Wrangler (Multiple Rendering Contexts)
>> ii libglu1-mesa:amd64 9.0.0-0ubuntu1
>> amd64 Mesa OpenGL utility library (GLU)
>> ii libglu1-mesa-dev 9.0.0-0ubuntu1
>> amd64 Mesa OpenGL utility library -- development files
>> ii libopenvg1-mesa:amd64 9.1.3-0ubuntu0.3
>> amd64 free implementation of the OpenVG API -- runtime
>> ii libopenvg1-mesa-dev 9.1.3-0ubuntu0.3
>> amd64 free implementation of the OpenVG API -- development files
>> ii libqt4-opengl:amd64 4:4.8.4+dfsg-0ubuntu9.2
>> amd64 Qt 4 OpenGL module
>> ii libreoffice-ogltrans 1:4.0.2-0ubuntu1
>> amd64 LibreOffice Impress extension for transitions using OpenGL
>> ii libtxc-dxtn-s2tc0:amd64
>> 0~git20121227-1 amd64 Texture compression
>> library for Mesa
>> ii mesa-common-dev 9.1.3-0ubuntu0.3 amd64
>> Developer documentation for Mesa
>> ii mesa-utils 8.0.1+git20110129+d8f7d6b-0ubuntu2 amd64
>> Miscellaneous Mesa GL utilities
>> ii x11proto-gl-dev 1.4.16-1
>> all X11 OpenGL extension wire protocol
>>
>> Thanks again!
>> Miro
>>
>>
>>
>>
>>
>> On 09/11/2013 03:08 PM, burlen wrote:
>>> also, did you call "renWin->Render()" once before using the
>>> extension manager? or class that uses the extension manager?
>>>
>>> On 09/11/2013 02:21 PM, burlen wrote:
>>>> in your vtk build dir, what does the output of
>>>>
>>>> $ ctest -R LoadOpenGL --verbose | grep GL_
>>>>
>>>> say? If it's not reporting the expected versions then you could
>>>> verify which driver VTK using with:
>>>>
>>>> $ ldd bin/vtkRenderingVolumeCxxTests | grep GL
>>>>
>>>> you may try this also on your app to verify. Do VTK's tests have
>>>> the same issue?
>>>>
>>>> $ ctest -R GPURay --verbose
>>>>
>>>> if none of this helps, would you be willing to work with the
>>>> development version of VTK? it will be easier to find and fix the bug.
>>>>
>>>> Burlen
>>>>
>>>> On 09/10/2013 07:21 PM, Miro Drahos wrote:
>>>>> Hi all,
>>>>> I am having an issue with volume mappers and hope someone can
>>>>> provide some constructive feedback.
>>>>> When trying to use vtkGPUVolumeRayCastMapper rendering fails with
>>>>> the message:
>>>>> ERROR: In
>>>>> /home/miro/BUILDS/VTK5.10.1/VolumeRendering/vtkOpenGLGPUVolumeRayCastMapper.cxx,
>>>>> line 4011
>>>>> vtkOpenGLGPUVolumeRayCastMapper (0x12e15ce0): Rendering failed
>>>>> because the following OpenGL extensions are required but not
>>>>> supported: OpenGL 1.3 is required but not supported
>>>>>
>>>>> If I run
>>>>> glGetString(GL_VERSION)
>>>>> I get the correct output string:
>>>>> 4.3.0 NVIDIA 310.44
>>>>>
>>>>> and yet the
>>>>> vtkOpenGLExtensionManager::ExtensionSupported("GL_VERSION_1_3")
>>>>> somehow returns 0.
>>>>>
>>>>> I am using vtk 5.10, my graphics card is NVIDIA GT520, using
>>>>> NVIDIA propriatory driver 310.44 on Linux Mint 15 (same thing with
>>>>> open-source nouveau driver).
>>>>> Some terminal output that may be relevant:
>>>>>
>>>>> $ glewinfo | grep GL_VER
>>>>> GL_VERSION_1_1: OK
>>>>> GL_VERSION_1_2: OK
>>>>> GL_VERSION_1_2_1: OK
>>>>> GL_VERSION_1_3: OK
>>>>> GL_VERSION_1_4: OK
>>>>> GL_VERSION_1_5: OK
>>>>> GL_VERSION_2_0: OK
>>>>> GL_VERSION_2_1: OK
>>>>> GL_VERSION_3_0: OK
>>>>> GL_VERSION_3_1: OK
>>>>> GL_VERSION_3_2: OK
>>>>> GL_VERSION_3_3: OK
>>>>> GL_VERSION_4_0: OK
>>>>> GL_VERSION_4_1: OK
>>>>> GL_VERSION_4_2: OK
>>>>>
>>>>> $ inxi -Gx
>>>>> Graphics: Card: NVIDIA GF119 [GeForce GT 520] bus-ID: 01:00.0
>>>>> X.Org: 1.13.3 drivers: nvidia (unloaded:
>>>>> fbdev,vesa,nouveau) Resolution: 1920x1080 at 60.0hz, 1920x1080 at 60.0hz
>>>>> GLX Renderer: GeForce GT 520/PCIe/SSE2 GLX Version:
>>>>> 4.3.0 NVIDIA 310.44 Direct Rendering: Yes
>>>>>
>>>>>
>>>>> More puzzling yet it gets when I try to use
>>>>> vtkVolumeMapperTexture3D, I get
>>>>> ERROR: In
>>>>> /home/miro/BUILDS/VTK5.10.1/VolumeRendering/vtkOpenGLGPUVolumeRayCastMapper.cxx,
>>>>> line 4011
>>>>> vtkOpenGLGPUVolumeRayCastMapper (0x12e15ce0): Rendering failed
>>>>> because the following OpenGL extensions are required but not
>>>>> supported:
>>>>>
>>>>> With no list of problem extensions...
>>>>>
>>>>> Thank you very much for any input on this!
>>>>>
>>>>> ------------------------------------------------------------------------
>>>>> Miroslav Drahoš
>>>>> software engineer
>>>>> <http://www.robodoc.com>
>>>>> *Curexo Technology Corporation*
>>>>> 47320 Mission Falls Ct
>>>>> Fremont CA, 94539
>>>>> Tel: (510) 249-2300 x2372
>>>>> Fax: (510) 249-2396
>>>>> www.robodoc.com <http://www.robodoc.com>
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Powered bywww.kitware.com
>>>>>
>>>>> Visit other Kitware open-source projects athttp://www.kitware.com/opensource/opensource.html
>>>>>
>>>>> Please keep messages on-topic and check the VTK FAQ at:http://www.vtk.org/Wiki/VTK_FAQ
>>>>>
>>>>> Follow this link to subscribe/unsubscribe:
>>>>> http://www.vtk.org/mailman/listinfo/vtkusers
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20130911/f5bfadc7/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/jpeg
Size: 7158 bytes
Desc: not available
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20130911/f5bfadc7/attachment.jpeg>
More information about the vtkusers
mailing list