#3125 closed defect (fixed)
glBlitFramebuffer() error drawing selection outline
Reported by: | Owned by: | Tom Goddard | |
---|---|---|---|
Priority: | normal | Milestone: | |
Component: | Graphics | Version: | |
Keywords: | Cc: | ||
Blocked By: | Blocking: | ||
Notify when closed: | Platform: | all | |
Project: | ChimeraX |
Description
The following bug report has been submitted: Platform: Linux-5.3.11-100.fc29.x86_64-x86_64-with-fedora-29-Twenty_Nine ChimeraX Version: 0.93 (2020-04-03) Description Starting up the ISOLDE tutorial "intro to cryoem model building" Log: Startup Messages --- warning | 'clip' is a prefix of an existing command 'clipper' UCSF ChimeraX version: 0.93 (2020-04-03) © 2016-2020 Regents of the University of California. All rights reserved. How to cite UCSF ChimeraX > toolshed show ISOLDE > set selectionWidth 4 Done loading forcefield > isolde demo cryo_em_intro modelOnly true startIsolde false 6out.pdb title: Asymmetric focused reconstruction of human norovirus gi.1 norwalk strain VLP asymmetric unit In T=3 symmetry [more info...] Chain information for 6out.pdb #1 --- Chain | Description A B C | capsid protein VP1 6out.pdb title: Asymmetric focused reconstruction of human norovirus gi.1 norwalk strain VLP asymmetric unit In T=3 symmetry [more info...] Chain information for 6out.pdb --- Chain | Description 1.2/A 1.2/B 1.2/C | capsid protein VP1 Loaded cryo-EM demo: PDB ID 6out, EMDB ID 20205 > open 20205 fromDatabase emdb Opened emd_20205.map, grid size 98,112,104, pixel 1.07,1.07,1.07, shown at level 0.287, step 1, values float32 > clipper associate #2 toModel #1 > isolde start > set bgColor white > addh Summary of feedback from adding hydrogens to 6out.pdb #1.2 --- notes | Termini for 6out.pdb (#1.2) chain A determined from SEQRES records Termini for 6out.pdb (#1.2) chain B determined from SEQRES records Termini for 6out.pdb (#1.2) chain C determined from SEQRES records Chain-initial residues that are actual N termini: /B THR 9 Chain-initial residues that are not actual N termini: /A ASP 29, /C ASP 29 Chain-final residues that are actual C termini: /A SER 520 Chain-final residues that are not actual C termini: /B ALA 519, /C ALA 519 Missing OXT added to C-terminal residue /A SER 520 1438 hydrogen bonds Adding 'H' to /A ASP 29 Adding 'H' to /C ASP 29 /B ALA 519 is not terminus, removing H atom from 'C' /C ALA 519 is not terminus, removing H atom from 'C' 11439 hydrogens added > hide HC > isolde restrain ligands #1 > select #1 22945 atoms, 23062 bonds, 14 models selected An error occurred in drawing the scene. Redrawing graphics is now stopped to avoid a continuous stream of error messages. To restart graphics use the command "graphics restart" after changing the settings that caused the error. Traceback (most recent call last): File "/usr/local/chimerax-0.93/lib/python3.7/site- packages/chimerax/core/updateloop.py", line 73, in draw_new_frame view.draw(check_for_changes = False) File "/usr/local/chimerax-0.93/lib/python3.7/site- packages/chimerax/graphics/view.py", line 166, in draw self._draw_scene(camera, drawings) File "/usr/local/chimerax-0.93/lib/python3.7/site- packages/chimerax/graphics/view.py", line 235, in _draw_scene r.outline.set_outline_mask() # copy depth to outline framebuffer File "/usr/local/chimerax-0.93/lib/python3.7/site- packages/chimerax/graphics/opengl.py", line 1734, in set_outline_mask cfb.copy_to_framebuffer(mfb, color=False) File "/usr/local/chimerax-0.93/lib/python3.7/site- packages/chimerax/graphics/opengl.py", line 2167, in copy_to_framebuffer GL.glBlitFramebuffer(0, 0, w, h, 0, 0, w, h, what, GL.GL_NEAREST) File "/usr/local/chimerax-0.93/lib/python3.7/site- packages/PyOpenGL-3.1.5-py3.7.egg/OpenGL/platform/baseplatform.py", line 415, in __call__ return self( *args, **named ) File "src/errorchecker.pyx", line 58, in OpenGL_accelerate.errorchecker._ErrorChecker.glCheckError OpenGL.error.GLError: GLError( err = 1282, description = b'invalid operation', baseOperation = glBlitFramebuffer, cArguments = ( 0, 0, 669, 610, 0, 0, 669, 610, 256, GL_NEAREST, ) ) OpenGL version: 3.3 (Core Profile) Mesa 18.3.6 OpenGL renderer: llvmpipe (LLVM 7.0, 256 bits) OpenGL vendor: VMware, Inc. Manufacturer: Supermicro Model: SYS-7048A-T OS: Fedora 29 Architecture: 64bit ELF CPU: 48 Intel(R) Xeon(R) CPU E5-2690 v3 @ 2.60GHz Cache Size: 30720 KB Graphics: 02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP104 [GeForce GTX 1080] [10de:1b80] (rev a1) Subsystem: ASUSTeK Computer Inc. Device [1043:85aa] Kernel driver in use: nvidia
Change History (7)
comment:1 by , 5 years ago
Component: | Unassigned → Graphics |
---|---|
Owner: | set to |
Platform: | → all |
Project: | → ChimeraX |
Status: | new → assigned |
Summary: | ChimeraX bug report submission → glBlitFramebuffer() error drawing selection outline |
follow-up: 2 comment:2 by , 5 years ago
Hi Tom—thanks for getting back to me so quickly, and for your detailed reply! The depthbits value in the log after entering the command in your previous reply: depthbits 32 best, jonny
follow-up: 3 comment:3 by , 5 years ago
That is what I wanted to hear! I will put in a fix today for this bug, should be in tomorrow's ChimeraX (I will confirm it is in with another message).
follow-up: 4 comment:4 by , 5 years ago
thanks so much, Tom! I will look out for your message. best, jonny
comment:5 by , 5 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
Fixed in tonight's ChimeraX builds.
The Linux VMware OpenGL driver provided default depth buffer with 32 bits despite ChimeraX requesting 24 bits. This is legal, it does not need to give you what you asked for, although OpenGL requires that 24 bits depth buffers are available. The code that drew selection outlines uses an offscreen depth buffer of 24 bits and the mismatch caused this error. The fix is to not use the default framebuffer if its depth is not 24 bits and selection outlines are being drawn.
I do not have a Linux VMware system to test on. So this fix needs testing. I tested on a non-VMware Ubuntu 18 -- it would not give 32-bit depth buffer when I asked for it (Intel OpenGL driver) but I tried its 24 bit depth buffer with the offscreen buffer changed to 16 bits and it reproduced the same error and the fix worked.
follow-up: 6 comment:6 by , 5 years ago
Hi Tom, I wanted to follow up on this--now my issue is trying to match compatible versions of ChimeraX/ISOLDE. The depthbuffer issue is fixed the latest daily builds as of our last email exchange, but this version is ChimeraX-0.94, which is currently incompatible with the latest builds of ISOLDE. Do you have any suggestions for a workaround? Thanks! jonny
follow-up: 7 comment:7 by , 5 years ago
The simplest fix would be to edit a ChimeraX distribution Python file chimerax/lib/python3.7/site-packages/chimerax/graphics/opengl.py That file has lines around line number 1060: self.outline.offscreen_outline_needed = sys.platform.startswith('darwin') and self.opengl_renderer().startswith('AMD Radeon Pro Vega')) Just add a line right after that self.outline.offscreen_outline_needed = True Make sure it has the same indentation since that matters in Python. We expect to have a ChimeraX 1.0 release candidate out tomorrow and an ISOLDE version for that will likely be out this week too -- and those will have the fix.
Drawing selection outlines is giving a graphics error. I've seen several reports of this but only with Linux VMware OpenGL drivers. I think the cause of the problem is this driver is using an unusual depth buffer (not 24 bits) and the outline drawing relies on the depth buffer being 24 bits.
Could you try the following ChimeraX command
and tell me the "depthbits" value reported to the log?