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)
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
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
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
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
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()
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)