napari: Napari 0.3.4 release crashes when switching to volume rendering
π Bug
Napari 0.3.4 (release version) crashes when trying to render volume in 3D.
To Reproduce
Steps to reproduce the behavior:
- Load a volume
- Display and navigate through slices in 2D
- Switch to 3D -> Crash
(stardist) Ξ» napari
WARNING: Error drawing visual <Volume at 0x1b6364c0d48>
10:17:55 WARNING Error drawing visual <Volume at 0x1b6364c0d48>
WARNING: Traceback (most recent call last):
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\OpenGL\latebind.py", line 43, in __call__
return self._finalCall( *args, **named )
TypeError: 'NoneType' object is not callable
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\app\backends\_qt.py", line 825, in paintGL
self._vispy_canvas.events.draw(region=None)
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\util\event.py", line 455, in __call__
self._invoke_callback(cb, event)
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\util\event.py", line 475, in _invoke_callback
self, cb_event=(cb, event))
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\util\event.py", line 471, in _invoke_callback
cb(event)
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\scene\canvas.py", line 217, in on_draw
self._draw_scene()
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\scene\canvas.py", line 266, in _draw_scene
self.draw_visual(self.scene)
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\scene\canvas.py", line 304, in draw_visual
node.draw()
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\scene\visuals.py", line 99, in draw
self._visual_superclass.draw(self)
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\visuals\visual.py", line 443, in draw
self._vshare.index_buffer)
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\visuals\shaders\program.py", line 101, in draw
Program.draw(self, *args, **kwargs)
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\gloo\program.py", line 533, in draw
canvas.context.flush_commands()
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\gloo\context.py", line 176, in flush_commands
self.glir.flush(self.shared.parser)
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\gloo\glir.py", line 572, in flush
self._shared.flush(parser)
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\gloo\glir.py", line 494, in flush
parser.parse(self._filter(self.clear(), parser))
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\gloo\glir.py", line 819, in parse
self._parse(command)
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\gloo\glir.py", line 789, in _parse
ob.set_size(*args) # Texture[1D, 2D, 3D], RenderBuffer
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\gloo\glir.py", line 1624, in set_size
gl.GL_BYTE, shape[:3])
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\gloo\glir.py", line 1573, in glTexImage3D
width, height, depth, border, format, type, None)
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\OpenGL\latebind.py", line 47, in __call__
return self._finalCall( *args, **named )
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\OpenGL\wrapper.py", line 882, in wrapperCall
result = wrappedOperation( *cArguments )
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\OpenGL\platform\baseplatform.py", line 425, in __call__
self.__name__, self.__name__,
OpenGL.error.NullFunctionError: Attempt to call an undefined function glTexImage3D, check for bool(glTexImage3D) before calling
10:17:56 WARNING Traceback (most recent call last):
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\OpenGL\latebind.py", line 43, in __call__
return self._finalCall( *args, **named )
TypeError: 'NoneType' object is not callable
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\app\backends\_qt.py", line 825, in paintGL
self._vispy_canvas.events.draw(region=None)
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\util\event.py", line 455, in __call__
self._invoke_callback(cb, event)
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\util\event.py", line 475, in _invoke_callback
self, cb_event=(cb, event))
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\util\event.py", line 471, in _invoke_callback
cb(event)
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\scene\canvas.py", line 217, in on_draw
self._draw_scene()
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\scene\canvas.py", line 266, in _draw_scene
self.draw_visual(self.scene)
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\scene\canvas.py", line 304, in draw_visual
node.draw()
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\scene\visuals.py", line 99, in draw
self._visual_superclass.draw(self)
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\visuals\visual.py", line 443, in draw
self._vshare.index_buffer)
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\visuals\shaders\program.py", line 101, in draw
Program.draw(self, *args, **kwargs)
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\gloo\program.py", line 533, in draw
canvas.context.flush_commands()
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\gloo\context.py", line 176, in flush_commands
self.glir.flush(self.shared.parser)
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\gloo\glir.py", line 572, in flush
self._shared.flush(parser)
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\gloo\glir.py", line 494, in flush
parser.parse(self._filter(self.clear(), parser))
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\gloo\glir.py", line 819, in parse
self._parse(command)
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\gloo\glir.py", line 789, in _parse
ob.set_size(*args) # Texture[1D, 2D, 3D], RenderBuffer
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\gloo\glir.py", line 1624, in set_size
gl.GL_BYTE, shape[:3])
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\vispy\gloo\glir.py", line 1573, in glTexImage3D
width, height, depth, border, format, type, None)
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\OpenGL\latebind.py", line 47, in __call__
return self._finalCall( *args, **named )
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\OpenGL\wrapper.py", line 882, in wrapperCall
result = wrappedOperation( *cArguments )
File "c:\users\volker\anaconda3\envs\stardist\lib\site-packages\OpenGL\platform\baseplatform.py", line 425, in __call__
self.__name__, self.__name__,
OpenGL.error.NullFunctionError: Attempt to call an undefined function glTexImage3D, check for bool(glTexImage3D) before calling
Expected behavior
The same volume renders fine in an earlier version of napari.
Environment
- Please copy and paste the information at napari info option in help menubar here:
napari: 0.3.4
Platform: Windows-10-10.0.18362-SP0
Python: 3.7.7 (default, Apr 15 2020, 05:09:04) [MSC v.1916 64 bit (AMD64)]
Qt: 5.14.2
PyQt5: 5.14.2
NumPy: 1.18.1
SciPy: 1.3.1
Dask: 2.18.0
VisPy: 0.6.4
GL version: 4.6.0 - Build 26.20.100.7812
MAX_TEXTURE_SIZE: 16384
Plugins:
- napari-plugin-engine: 0.1.6
- svg: 0.1.3
This was pip installed into an existing conda environment from the PyPI release.
Additional context
In the same environment, when I open an IPython console before switching to volume rendering (same volume), napari does not crash !
Also, the volume renders fine in one of my older napari installations/environments that has the same version of vispy, which rules out my initial thought that this would be a vispy issue. My current guess is that this may be PyQt-related. The environment below works. Note a few things are different, notably PySide instead of PyQt.
napari: 0.3.1+12.g0cd943c
Platform: Windows-10-10.0.18362-SP0
Python: 3.7.7 (default, May 6 2020, 11:45:54) [MSC v.1916 64 bit (AMD64)]
Qt: 5.14.2
PySide2: 5.14.2.1
NumPy: 1.18.4
SciPy: 1.4.1
Dask: 2.16.0
VisPy: 0.6.4
GL version: 4.6.0 - Build 26.20.100.7812
MAX_TEXTURE_SIZE: 16384
Plugins:
- napari-plugin-engine: 0.1.5
- svg: 0.1.2
About this issue
- Original URL
- State: closed
- Created 4 years ago
- Comments: 51 (45 by maintainers)
Commits related to this issue
- Revert "remove scipy.stats import (#1250)" This reverts commit 96e9722419a5b0adddbc14fe12c69a7d769f8758. Fixes #1347 See https://github.com/napari/napari/issues/1347 for more details. — committed to jni/napari by jni 4 years ago
- Revert "remove scipy.stats import (#1250)" This reverts commit 96e9722419a5b0adddbc14fe12c69a7d769f8758. Fixes #1347 See https://github.com/napari/napari/issues/1347 for more details. — committed to jni/napari by jni 4 years ago
- Add reference to issue #1347 — committed to jni/napari by jni 4 years ago
- Revert "remove scipy.stats import (#1250)" (#1371) * Revert "remove scipy.stats import (#1250)" This reverts commit 96e9722419a5b0adddbc14fe12c69a7d769f8758. Fixes #1347 See https://github.c... — committed to napari/napari by jni 4 years ago
I found the nd_labels.py consistently produce the problem: run the python file -> merge dimension -> drag and crashed
Yes, after adding the import as suggested it no longer crashes for that volume.
This has been closed by #1445
fwiw, the reproduce of the problem only works for me on windows. On macbook everything worked out fine. If we can reproduce on other platform and see the same issue, maybe it is certain graphical driver being incompatible with opengl/vispy?
my investigation leads me to a few related threads, fwiw: https://github.com/vispy/vispy/pull/1394 https://github.com/vispy/vispy/issues/1540
and my stack traced to a suspecious call to <WinDLL βopengl32β, handle 7ffdf3570000 at 0x1aae1d22880> from vispy 0.6.4: venv\Lib\site-packages\vispy\gloo\gl_gl2.py line 415
The
IndexError
insize = [size[i] for i in self.dims.displayed]
seems to be a direct result of the error in_calc_bbox
as the bbox calculation (or seomthing upstream) drops a dimension. So if the_calc_bbox
has been dropped/replaced in #1360 there is a good chance it is gone (will try and confirm).On my system,
import scipy.stats ... napari.view_image(data)
andv=napari.view_image(data)
(withoutimport scipy.stats
) both work, but not simplynapari.view_image(data)
.