Exemple #1
0
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
Exemple #2
0
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()
Exemple #3
0
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()