Example #1
0
def create_mappable_buffer(size,
                           target=GL_ARRAY_BUFFER,
                           usage=GL_DYNAMIC_DRAW,
                           vbo=True):
    '''Create a mappable buffer of vertex data.

    :Parameters:
        `size` : int
            Size of the buffer, in bytes
        `target` : int
            OpenGL target buffer
        `usage` : int
            OpenGL usage constant
        `vbo` : bool
            True if a `VertexBufferObject` should be created if the driver
            supports it; otherwise only a `VertexArray` is created.

    :rtype: `AbstractBuffer` with `AbstractMappable`
    '''
    from pyglet import gl
    if (vbo and gl_info.have_version(1, 5) and _enable_vbo
            and not gl.current_context._workaround_vbo):
        return MappableVertexBufferObject(size, target, usage)
    else:
        return VertexArray(size)
Example #2
0
def create_mappable_buffer(size,
                           target=GL_ARRAY_BUFFER,
                           usage=GL_DYNAMIC_DRAW,
                           vbo=True):
    '''Create a mappable buffer of vertex data.

    :Parameters:
        `size` : int
            Size of the buffer, in bytes
        `target` : int
            OpenGL target buffer
        `usage` : int
            OpenGL usage constant
        `vbo` : bool
            True if a `VertexBufferObject` should be created if the driver
            supports it; otherwise only a `VertexArray` is created.

    :rtype: `AbstractBuffer` with `AbstractMappable`
    '''
    from pyglet import gl
    if (vbo and
        gl_info.have_version(1, 5) and
        _enable_vbo and
        not gl.current_context._workaround_vbo):
        return MappableVertexBufferObject(size, target, usage)
    else:
        return VertexArray(size)
Example #3
0
    def _get_texture(self):
        if self._current_texture:
            return self._current_texture

        texture = Texture.create_for_size(GL_TEXTURE_2D, self.width, self.height)
        glBindTexture(texture.target, texture.id)
        glTexParameteri(texture.target, GL_TEXTURE_MIN_FILTER, GL_LINEAR)

        if not gl_info.have_version(1, 2) or True:
            self.unpack()

        glTexImage2D(
            texture.target,
            texture.level,
            self.format,
            self.width,
            self.height,
            0,
            self.format,
            self.packed_format,
            self.data,
        )

        self._current_texture = texture
        return texture
Example #4
0
def check_requirements(target_gl, target_glsl):
    client_glsl = bytearray()
    for i in glGetString(GL_SHADING_LANGUAGE_VERSION):
        if i != 0: client_glsl.append(i)
        else: break

    client_glsl = [ int(v) for v in re.match(r"(\d+)\.(\d+)", client_glsl.decode('utf8')).groups() ]
    
    gl_ok = gl_info.have_version(*target_gl)
    glsl_ok = ((client_glsl[0] > target_glsl[0]) or 
              (client_glsl[0] == target_glsl[0] and client_glsl[1] >= target_glsl[1]))
    
    return gl_ok and glsl_ok   
Example #5
0
def check_requirements(target_gl, target_glsl):
    client_glsl = bytearray()
    for i in glGetString(GL_SHADING_LANGUAGE_VERSION):
        if i != 0: client_glsl.append(i)
        else: break
    
    client_glsl = [ int(v) for v in client_glsl.decode('utf8').split('.') ]
    
    gl_ok = gl_info.have_version(*target_gl)
    glsl_ok = ((client_glsl[0] > target_glsl[0]) or 
              (client_glsl[0] == target_glsl[0] and client_glsl[1] >= target_glsl[1]))
    
    return gl_ok and glsl_ok   
Example #6
0
    def _get_texture(self):
        if self._current_texture:
            return self._current_texture

        texture = Texture.create(self.width, self.height, GL_TEXTURE_2D, None)
        glBindTexture(texture.target, texture.id)
        glTexParameteri(texture.target, GL_TEXTURE_MIN_FILTER, GL_LINEAR)

        if not gl_info.have_version(1, 2) or True:
            self.unpack()

        glTexImage2D(texture.target, texture.level, self.format, self.width,
                     self.height, 0, self.format, self.packed_format,
                     self.data)

        self._current_texture = texture
        return texture
Example #7
0
def dump_window():
    """Dump display, window, screen and default config info."""
    from pyglet.gl import gl_info
    if not gl_info.have_version(3):
        print(f"Insufficient OpenGL version: {gl_info.get_version_string()}")
        return
    import pyglet.window
    display = pyglet.canvas.get_display()
    print('display:', repr(display))
    screens = display.get_screens()
    for i, screen in enumerate(screens):
        print('screens[%d]: %r' % (i, screen))
    window = pyglet.window.Window(visible=False)
    for key, value in window.config.get_gl_attributes():
        print("config['%s'] = %r" % (key, value))
    print('context:', repr(window.context))

    _heading('window.context._info')
    dump_gl(window.context)
    window.close()
Example #8
0
def create_buffer(size, 
                  target=GL_ARRAY_BUFFER, 
                  usage=GL_DYNAMIC_DRAW, 
                  vbo=True):
    '''Create a buffer of vertex data.

    :Parameters:
        `size` : int
            Size of the buffer, in bytes
        `target` : int
            OpenGL target buffer
        `usage` : int
            OpenGL usage constant
        `vbo` : bool
            True if a `VertexBufferObject` should be created if the driver
            supports it; otherwise only a `VertexArray` is created.

    :rtype: `AbstractBuffer`
    '''
    if vbo and gl_info.have_version(1, 5) and _enable_vbo:
        return VertexBufferObject(size, target, usage)
    else:
        return VertexArray(size)
def create_buffer(size,
                  target=GL_ARRAY_BUFFER,
                  usage=GL_DYNAMIC_DRAW,
                  vbo=True):
    '''Create a buffer of vertex data.

    :Parameters:
        `size` : int
            Size of the buffer, in bytes
        `target` : int
            OpenGL target buffer
        `usage` : int
            OpenGL usage constant
        `vbo` : bool
            True if a `VertexBufferObject` should be created if the driver
            supports it; otherwise only a `VertexArray` is created.

    :rtype: `AbstractBuffer`
    '''
    if vbo and gl_info.have_version(1, 5) and _enable_vbo:
        return VertexBufferObject(size, target, usage)
    else:
        return VertexArray(size)