def get_max_texture_sizes(): """Get maximum texture sizes for 2D and 3D rendering. Returns ------- MAX_TEXTURE_SIZE_2D : int or None Max texture size allowed by the vispy canvas during 2D rendering. MAX_TEXTURE_SIZE_3D : int or None Max texture size allowed by the vispy canvas during 2D rendering. """ # A canvas must be created to access gl values c = Canvas(show=False) try: MAX_TEXTURE_SIZE_2D = gl.glGetParameter(gl.GL_MAX_TEXTURE_SIZE) finally: c.close() if MAX_TEXTURE_SIZE_2D == (): MAX_TEXTURE_SIZE_2D = None # vispy doesn't expose GL_MAX_3D_TEXTURE_SIZE so hard coding # MAX_TEXTURE_SIZE_3D = gl.glGetParameter(gl.GL_MAX_3D_TEXTURE_SIZE) # if MAX_TEXTURE_SIZE_3D == (): # MAX_TEXTURE_SIZE_3D = None MAX_TEXTURE_SIZE_3D = 2048 return MAX_TEXTURE_SIZE_2D, MAX_TEXTURE_SIZE_3D
def test_simultaneous_backends(): """Test running multiple backends simultaneously""" # XXX knownfail Note: All the _update_process_check calls have # been crippled here because they don't work 100% of the time # depending on backend order, etc. This is not critical for # the software currently, so we let it slide for now. names = dict(qt=has_qt, pyglet=has_pyglet, glfw=has_glfw, glut=has_glut) if sys.platform == 'darwin': names.pop('glut') # XXX knownfail, fails for unknown reason... backends = [name for name, check in names.items() if check()] canvases = dict() bgcolor = dict() try: for bi, backend in enumerate(backends): canvas = Canvas(app=backend, size=_win_size, title=backend + ' simul', autoswap=False) canvas.__enter__() # invoke warmup canvases[backend] = canvas @canvas.events.paint.connect def paint(event): print(' {0:7}: {1}'.format(backend, bgcolor[backend])) gl.glViewport(0, 0, *list(_win_size)) gl.glClearColor(*bgcolor[backend]) gl.glClear(gl.GL_COLOR_BUFFER_BIT) gl.glFinish() bgcolor[backend] = [0.5, 0.5, 0.5, 1.0] _update_process_check(canvases[backend], 127) for backend in backends: print('test %s' % backend) _update_process_check(canvases[backend], 127, False, _ig_fail) bgcolor[backend] = [1., 1., 1., 1.] _update_process_check(canvases[backend], 255, True, _ig_fail) bgcolor[backend] = [0.25, 0.25, 0.25, 0.25] _update_process_check(canvases[backend], 64, True, _ig_fail) # now we do the same thing, but with sequential close() calls for backend in backends: print('test %s' % backend) _update_process_check(canvases[backend], 64, False, _ig_fail) bgcolor[backend] = [1., 1., 1., 1.] _update_process_check(canvases[backend], 255, True, _ig_fail) bgcolor[backend] = [0.25, 0.25, 0.25, 0.25] _update_process_check(canvases[backend], 64, True, _ig_fail) finally: for canvas in canvases.values(): canvas.close()
def _opengl_context(): """Assure we are running with a valid OpenGL context. Only create a Canvas is one doesn't exist. Creating and closing a Canvas causes vispy to process Qt events which can cause problems. Ideally call opengl_context() on start after creating your first Canvas. However it will work either way. """ canvas = Canvas(show=False) if get_current_canvas() is None else None try: yield finally: if canvas is not None: canvas.close()