[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