Opened 5 years ago

Closed 5 years ago

Last modified 5 years ago

#3125 closed defect (fixed)

glBlitFramebuffer() error drawing selection outline

Reported by: florejo@… 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 Tom Goddard, 5 years ago

Component: UnassignedGraphics
Owner: set to Tom Goddard
Platform: all
Project: ChimeraX
Status: newassigned
Summary: ChimeraX bug report submissionglBlitFramebuffer() error drawing selection outline

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

graphics driver verbose true

and tell me the "depthbits" value reported to the log?

in reply to:  2 ; comment:2 by florejo@…, 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




in reply to:  3 ; comment:3 by goddard@…, 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).

in reply to:  4 ; comment:4 by florejo@…, 5 years ago

thanks so much, Tom! I will look out for your message. 

best, 
jonny




comment:5 by Tom Goddard, 5 years ago

Resolution: fixed
Status: assignedclosed

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.

in reply to:  6 ; comment:6 by florejo@…, 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




in reply to:  7 ; comment:7 by goddard@…, 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.

Note: See TracTickets for help on using tickets.