pyglet 2.1.13__py3-none-any.whl → 3.0.dev1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pyglet/__init__.py +67 -61
- pyglet/__init__.pyi +15 -8
- pyglet/app/__init__.py +22 -13
- pyglet/app/async_app.py +212 -0
- pyglet/app/base.py +2 -1
- pyglet/app/{xlib.py → linux.py} +3 -3
- pyglet/config/__init__.py +101 -0
- pyglet/config/gl/__init__.py +30 -0
- pyglet/config/gl/egl.py +120 -0
- pyglet/config/gl/macos.py +262 -0
- pyglet/config/gl/windows.py +267 -0
- pyglet/config/gl/x11.py +142 -0
- pyglet/customtypes.py +43 -2
- pyglet/display/__init__.py +8 -6
- pyglet/display/base.py +3 -63
- pyglet/display/cocoa.py +12 -17
- pyglet/display/emscripten.py +39 -0
- pyglet/display/headless.py +23 -30
- pyglet/display/wayland.py +157 -0
- pyglet/display/win32.py +5 -21
- pyglet/display/xlib.py +19 -27
- pyglet/display/xlib_vidmoderestore.py +2 -2
- pyglet/enums.py +183 -0
- pyglet/event.py +0 -1
- pyglet/experimental/geoshader_sprite.py +15 -13
- pyglet/experimental/hidraw.py +6 -15
- pyglet/experimental/multitexture_sprite.py +31 -19
- pyglet/experimental/particles.py +13 -35
- pyglet/font/__init__.py +251 -85
- pyglet/font/base.py +116 -61
- pyglet/font/dwrite/__init__.py +349 -204
- pyglet/font/dwrite/dwrite_lib.py +27 -5
- pyglet/font/fontconfig.py +14 -6
- pyglet/font/freetype.py +138 -87
- pyglet/font/freetype_lib.py +19 -0
- pyglet/font/group.py +179 -0
- pyglet/font/harfbuzz/__init__.py +3 -3
- pyglet/font/pyodide_js.py +310 -0
- pyglet/font/quartz.py +319 -126
- pyglet/font/ttf.py +45 -3
- pyglet/font/user.py +14 -19
- pyglet/font/win32.py +45 -21
- pyglet/graphics/__init__.py +8 -787
- pyglet/graphics/allocation.py +115 -1
- pyglet/graphics/api/__init__.py +77 -0
- pyglet/graphics/api/base.py +299 -0
- pyglet/graphics/api/gl/__init__.py +58 -0
- pyglet/graphics/api/gl/base.py +24 -0
- pyglet/graphics/{vertexbuffer.py → api/gl/buffer.py} +104 -159
- pyglet/graphics/api/gl/cocoa/context.py +76 -0
- pyglet/graphics/api/gl/context.py +391 -0
- pyglet/graphics/api/gl/default_shaders.py +0 -0
- pyglet/graphics/api/gl/draw.py +627 -0
- pyglet/graphics/api/gl/egl/__init__.py +0 -0
- pyglet/graphics/api/gl/egl/context.py +92 -0
- pyglet/graphics/api/gl/enums.py +76 -0
- pyglet/graphics/api/gl/framebuffer.py +315 -0
- pyglet/graphics/api/gl/gl.py +5463 -0
- pyglet/graphics/api/gl/gl_info.py +188 -0
- pyglet/graphics/api/gl/global_opengl.py +226 -0
- pyglet/{gl → graphics/api/gl}/lib.py +34 -18
- pyglet/graphics/api/gl/shader.py +1476 -0
- pyglet/graphics/api/gl/shapes.py +55 -0
- pyglet/graphics/api/gl/sprite.py +102 -0
- pyglet/graphics/api/gl/state.py +219 -0
- pyglet/graphics/api/gl/text.py +190 -0
- pyglet/graphics/api/gl/texture.py +1526 -0
- pyglet/graphics/{vertexarray.py → api/gl/vertexarray.py} +11 -13
- pyglet/graphics/api/gl/vertexdomain.py +751 -0
- pyglet/graphics/api/gl/win32/__init__.py +0 -0
- pyglet/graphics/api/gl/win32/context.py +108 -0
- pyglet/graphics/api/gl/win32/wgl_info.py +24 -0
- pyglet/graphics/api/gl/xlib/__init__.py +0 -0
- pyglet/graphics/api/gl/xlib/context.py +174 -0
- pyglet/{gl → graphics/api/gl/xlib}/glx_info.py +26 -31
- pyglet/graphics/api/gl1/__init__.py +0 -0
- pyglet/{gl → graphics/api/gl1}/gl_compat.py +3 -2
- pyglet/graphics/api/gl2/__init__.py +0 -0
- pyglet/graphics/api/gl2/buffer.py +320 -0
- pyglet/graphics/api/gl2/draw.py +600 -0
- pyglet/graphics/api/gl2/global_opengl.py +122 -0
- pyglet/graphics/api/gl2/shader.py +200 -0
- pyglet/graphics/api/gl2/shapes.py +51 -0
- pyglet/graphics/api/gl2/sprite.py +79 -0
- pyglet/graphics/api/gl2/text.py +175 -0
- pyglet/graphics/api/gl2/vertexdomain.py +364 -0
- pyglet/graphics/api/webgl/__init__.py +233 -0
- pyglet/graphics/api/webgl/buffer.py +302 -0
- pyglet/graphics/api/webgl/context.py +234 -0
- pyglet/graphics/api/webgl/draw.py +590 -0
- pyglet/graphics/api/webgl/enums.py +76 -0
- pyglet/graphics/api/webgl/framebuffer.py +360 -0
- pyglet/graphics/api/webgl/gl.py +1537 -0
- pyglet/graphics/api/webgl/gl_info.py +130 -0
- pyglet/graphics/api/webgl/shader.py +1346 -0
- pyglet/graphics/api/webgl/shapes.py +92 -0
- pyglet/graphics/api/webgl/sprite.py +102 -0
- pyglet/graphics/api/webgl/state.py +227 -0
- pyglet/graphics/api/webgl/text.py +187 -0
- pyglet/graphics/api/webgl/texture.py +1227 -0
- pyglet/graphics/api/webgl/vertexarray.py +54 -0
- pyglet/graphics/api/webgl/vertexdomain.py +616 -0
- pyglet/graphics/api/webgl/webgl_js.pyi +307 -0
- pyglet/{image → graphics}/atlas.py +33 -32
- pyglet/graphics/base.py +10 -0
- pyglet/graphics/buffer.py +245 -0
- pyglet/graphics/draw.py +578 -0
- pyglet/graphics/framebuffer.py +26 -0
- pyglet/graphics/instance.py +178 -69
- pyglet/graphics/shader.py +267 -1553
- pyglet/graphics/state.py +83 -0
- pyglet/graphics/texture.py +703 -0
- pyglet/graphics/vertexdomain.py +695 -538
- pyglet/gui/ninepatch.py +10 -10
- pyglet/gui/widgets.py +120 -10
- pyglet/image/__init__.py +20 -1973
- pyglet/image/animation.py +12 -12
- pyglet/image/base.py +730 -0
- pyglet/image/codecs/__init__.py +9 -0
- pyglet/image/codecs/bmp.py +53 -30
- pyglet/image/codecs/dds.py +53 -31
- pyglet/image/codecs/gdiplus.py +38 -14
- pyglet/image/codecs/gdkpixbuf2.py +0 -2
- pyglet/image/codecs/js_image.py +99 -0
- pyglet/image/codecs/ktx2.py +161 -0
- pyglet/image/codecs/pil.py +1 -1
- pyglet/image/codecs/png.py +1 -1
- pyglet/image/codecs/wic.py +11 -2
- pyglet/info.py +26 -24
- pyglet/input/__init__.py +8 -0
- pyglet/input/base.py +163 -105
- pyglet/input/controller.py +13 -19
- pyglet/input/controller_db.py +39 -24
- pyglet/input/emscripten/__init__.py +18 -0
- pyglet/input/emscripten/gamepad_js.py +397 -0
- pyglet/input/linux/__init__.py +11 -5
- pyglet/input/linux/evdev.py +10 -11
- pyglet/input/linux/x11_xinput.py +2 -2
- pyglet/input/linux/x11_xinput_tablet.py +1 -1
- pyglet/input/macos/__init__.py +7 -2
- pyglet/input/macos/darwin_gc.py +559 -0
- pyglet/input/win32/__init__.py +1 -1
- pyglet/input/win32/directinput.py +34 -29
- pyglet/input/win32/xinput.py +11 -61
- pyglet/lib.py +3 -3
- pyglet/libs/__init__.py +1 -1
- pyglet/{gl → libs/darwin}/agl.py +1 -1
- pyglet/libs/darwin/cocoapy/__init__.py +2 -2
- pyglet/libs/darwin/cocoapy/cocoahelpers.py +181 -0
- pyglet/libs/darwin/cocoapy/cocoalibs.py +31 -0
- pyglet/libs/darwin/cocoapy/cocoatypes.py +27 -0
- pyglet/libs/darwin/cocoapy/runtime.py +81 -45
- pyglet/libs/darwin/coreaudio.py +4 -4
- pyglet/{gl → libs/darwin}/lib_agl.py +9 -8
- pyglet/libs/darwin/quartzkey.py +1 -3
- pyglet/libs/egl/__init__.py +2 -0
- pyglet/libs/egl/egl_lib.py +576 -0
- pyglet/libs/egl/eglext.py +51 -5
- pyglet/libs/linux/__init__.py +0 -0
- pyglet/libs/linux/egl/__init__.py +0 -0
- pyglet/libs/linux/egl/eglext.py +22 -0
- pyglet/libs/linux/glx/__init__.py +0 -0
- pyglet/{gl → libs/linux/glx}/glx.py +13 -14
- pyglet/{gl → libs/linux/glx}/glxext_arb.py +408 -192
- pyglet/{gl → libs/linux/glx}/glxext_mesa.py +1 -1
- pyglet/{gl → libs/linux/glx}/glxext_nv.py +345 -164
- pyglet/{gl → libs/linux/glx}/lib_glx.py +3 -2
- pyglet/libs/linux/wayland/__init__.py +0 -0
- pyglet/libs/linux/wayland/client.py +1068 -0
- pyglet/libs/linux/wayland/lib_wayland.py +207 -0
- pyglet/libs/linux/wayland/wayland_egl.py +38 -0
- pyglet/libs/{wayland → linux/wayland}/xkbcommon.py +26 -0
- pyglet/libs/{x11 → linux/x11}/xf86vmode.py +4 -4
- pyglet/libs/{x11 → linux/x11}/xinerama.py +2 -2
- pyglet/libs/{x11 → linux/x11}/xinput.py +10 -10
- pyglet/libs/linux/x11/xrandr.py +0 -0
- pyglet/libs/{x11 → linux/x11}/xrender.py +1 -1
- pyglet/libs/shared/__init__.py +0 -0
- pyglet/libs/shared/spirv/__init__.py +0 -0
- pyglet/libs/shared/spirv/lib_shaderc.py +85 -0
- pyglet/libs/shared/spirv/lib_spirv_cross.py +126 -0
- pyglet/libs/win32/__init__.py +28 -8
- pyglet/libs/win32/constants.py +59 -48
- pyglet/libs/win32/context_managers.py +20 -3
- pyglet/libs/win32/dinput.py +105 -88
- pyglet/{gl → libs/win32}/lib_wgl.py +52 -26
- pyglet/libs/win32/types.py +58 -23
- pyglet/{gl → libs/win32}/wgl.py +32 -25
- pyglet/{gl → libs/win32}/wglext_arb.py +364 -2
- pyglet/media/__init__.py +9 -10
- pyglet/media/codecs/__init__.py +12 -1
- pyglet/media/codecs/base.py +99 -96
- pyglet/media/codecs/ffmpeg.py +2 -2
- pyglet/media/codecs/ffmpeg_lib/libavformat.py +3 -8
- pyglet/media/codecs/webaudio_pyodide.py +111 -0
- pyglet/media/drivers/__init__.py +9 -4
- pyglet/media/drivers/base.py +4 -4
- pyglet/media/drivers/openal/__init__.py +1 -1
- pyglet/media/drivers/openal/adaptation.py +3 -3
- pyglet/media/drivers/pulse/__init__.py +1 -1
- pyglet/media/drivers/pulse/adaptation.py +3 -3
- pyglet/media/drivers/pyodide_js/__init__.py +8 -0
- pyglet/media/drivers/pyodide_js/adaptation.py +288 -0
- pyglet/media/drivers/xaudio2/adaptation.py +3 -3
- pyglet/media/player.py +276 -193
- pyglet/media/player_worker_thread.py +1 -1
- pyglet/model/__init__.py +39 -29
- pyglet/model/codecs/base.py +4 -4
- pyglet/model/codecs/gltf.py +3 -3
- pyglet/model/codecs/obj.py +71 -43
- pyglet/resource.py +129 -78
- pyglet/shapes.py +154 -194
- pyglet/sprite.py +47 -164
- pyglet/text/__init__.py +44 -54
- pyglet/text/caret.py +12 -7
- pyglet/text/document.py +19 -17
- pyglet/text/formats/html.py +2 -2
- pyglet/text/formats/structured.py +10 -40
- pyglet/text/layout/__init__.py +20 -13
- pyglet/text/layout/base.py +176 -287
- pyglet/text/layout/incremental.py +9 -10
- pyglet/text/layout/scrolling.py +7 -95
- pyglet/window/__init__.py +183 -172
- pyglet/window/cocoa/__init__.py +62 -51
- pyglet/window/cocoa/pyglet_delegate.py +2 -25
- pyglet/window/cocoa/pyglet_view.py +9 -8
- pyglet/window/dialog/__init__.py +184 -0
- pyglet/window/dialog/base.py +99 -0
- pyglet/window/dialog/darwin.py +121 -0
- pyglet/window/dialog/linux.py +72 -0
- pyglet/window/dialog/windows.py +194 -0
- pyglet/window/emscripten/__init__.py +779 -0
- pyglet/window/headless/__init__.py +44 -28
- pyglet/window/key.py +2 -0
- pyglet/window/mouse.py +2 -2
- pyglet/window/wayland/__init__.py +377 -0
- pyglet/window/win32/__init__.py +101 -46
- pyglet/window/xlib/__init__.py +104 -66
- {pyglet-2.1.13.dist-info → pyglet-3.0.dev1.dist-info}/METADATA +2 -3
- pyglet-3.0.dev1.dist-info/RECORD +322 -0
- {pyglet-2.1.13.dist-info → pyglet-3.0.dev1.dist-info}/WHEEL +1 -1
- pyglet/gl/__init__.py +0 -208
- pyglet/gl/base.py +0 -499
- pyglet/gl/cocoa.py +0 -309
- pyglet/gl/gl.py +0 -4625
- pyglet/gl/gl.pyi +0 -2320
- pyglet/gl/gl_compat.pyi +0 -3097
- pyglet/gl/gl_info.py +0 -190
- pyglet/gl/headless.py +0 -166
- pyglet/gl/wgl_info.py +0 -36
- pyglet/gl/wglext_nv.py +0 -1096
- pyglet/gl/win32.py +0 -268
- pyglet/gl/xlib.py +0 -295
- pyglet/image/buffer.py +0 -274
- pyglet/image/codecs/s3tc.py +0 -354
- pyglet/libs/x11/xrandr.py +0 -166
- pyglet-2.1.13.dist-info/RECORD +0 -234
- /pyglet/{libs/wayland → graphics/api/gl/cocoa}/__init__.py +0 -0
- /pyglet/libs/{egl → linux/egl}/egl.py +0 -0
- /pyglet/libs/{egl → linux/egl}/lib.py +0 -0
- /pyglet/libs/{ioctl.py → linux/ioctl.py} +0 -0
- /pyglet/libs/{wayland → linux/wayland}/gbm.py +0 -0
- /pyglet/libs/{x11 → linux/x11}/__init__.py +0 -0
- /pyglet/libs/{x11 → linux/x11}/cursorfont.py +0 -0
- /pyglet/libs/{x11 → linux/x11}/xlib.py +0 -0
- /pyglet/libs/{x11 → linux/x11}/xsync.py +0 -0
- {pyglet-2.1.13.dist-info/licenses → pyglet-3.0.dev1.dist-info}/LICENSE +0 -0
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
"""Byte abstractions of OpenGL Buffer Objects.
|
|
2
|
+
|
|
3
|
+
Use `create_buffer` to create a Buffer Object.
|
|
4
|
+
|
|
5
|
+
Buffers can optionally be created "mappable" (incorporating the
|
|
6
|
+
`AbstractMappable` mix-in). In this case the buffer provides a ``get_region``
|
|
7
|
+
method which provides the most efficient path for updating partial data within
|
|
8
|
+
the buffer.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
import abc
|
|
14
|
+
import ctypes
|
|
15
|
+
from abc import abstractmethod
|
|
16
|
+
from functools import lru_cache
|
|
17
|
+
from typing import Sequence, TYPE_CHECKING
|
|
18
|
+
from pyglet.graphics.shader import _data_type_to_ctype, GraphicsAttribute
|
|
19
|
+
|
|
20
|
+
if TYPE_CHECKING:
|
|
21
|
+
from pyglet.customtypes import DataTypes, CType, CTypesPointer
|
|
22
|
+
from pyglet.graphics.shader import Attribute
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class AbstractBuffer(abc.ABC):
|
|
26
|
+
c_type_size: int
|
|
27
|
+
data_type: DataTypes
|
|
28
|
+
c_type: CType
|
|
29
|
+
size: int
|
|
30
|
+
|
|
31
|
+
def __init__(self, data_type: DataTypes, size: int) -> None:
|
|
32
|
+
"""Create a buffer with the intended data type.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
data_type:
|
|
36
|
+
Data types.
|
|
37
|
+
size:
|
|
38
|
+
Array size of the buffer, based on the data_type.
|
|
39
|
+
"""
|
|
40
|
+
self.data_type = data_type
|
|
41
|
+
self.size = size
|
|
42
|
+
|
|
43
|
+
self.c_type = _data_type_to_ctype[data_type]
|
|
44
|
+
self.c_type_size = ctypes.sizeof(self.c_type)
|
|
45
|
+
|
|
46
|
+
@classmethod
|
|
47
|
+
def from_byte_size(cls, data_type: DataTypes, size: int) -> AbstractBuffer:
|
|
48
|
+
c_type = _data_type_to_ctype[data_type]
|
|
49
|
+
return cls(data_type, size // ctypes.sizeof(c_type))
|
|
50
|
+
|
|
51
|
+
@abstractmethod
|
|
52
|
+
def set_data_ptr(self, offset: int, length: int, ptr: CTypesPointer) -> None:
|
|
53
|
+
"""Copy data from ptr into the data_ptr at offset."""
|
|
54
|
+
|
|
55
|
+
@abstractmethod
|
|
56
|
+
def get_data(self) -> ctypes.Array[CType]:
|
|
57
|
+
"""Get the entire buffer contents."""
|
|
58
|
+
|
|
59
|
+
@abstractmethod
|
|
60
|
+
def get_data_region(self, start: int, length: int) -> ctypes.Array[CType]:
|
|
61
|
+
"""Get a range in the current buffer."""
|
|
62
|
+
|
|
63
|
+
@abstractmethod
|
|
64
|
+
def set_data(self, data: Sequence) -> None:
|
|
65
|
+
"""Set the entire buffer contents."""
|
|
66
|
+
|
|
67
|
+
@abstractmethod
|
|
68
|
+
def set_data_region(self, start: int, data: Sequence[float | int]) -> None:
|
|
69
|
+
"""Set part of the buffer contents."""
|
|
70
|
+
|
|
71
|
+
@abstractmethod
|
|
72
|
+
def get_bytes(self) -> bytes:
|
|
73
|
+
"""Return the entire buffer contents in bytes."""
|
|
74
|
+
|
|
75
|
+
@abstractmethod
|
|
76
|
+
def get_bytes_region(self, offset: int, length: int) -> bytes:
|
|
77
|
+
"""Return a region of the buffer contents based on bytes."""
|
|
78
|
+
|
|
79
|
+
@abstractmethod
|
|
80
|
+
def set_bytes(self, data: bytes) -> None:
|
|
81
|
+
"""Set the entire buffer data using bytes."""
|
|
82
|
+
|
|
83
|
+
@abstractmethod
|
|
84
|
+
def set_bytes_region(self, offset: int, data: bytes) -> None:
|
|
85
|
+
"""Set bytes at an offset in the buffer."""
|
|
86
|
+
|
|
87
|
+
@abstractmethod
|
|
88
|
+
def resize(self, size: int) -> None:
|
|
89
|
+
"""Resize the buffer to a new size."""
|
|
90
|
+
|
|
91
|
+
@abstractmethod
|
|
92
|
+
def delete(self) -> None:
|
|
93
|
+
"""Free memory or resources with the underlying buffer.
|
|
94
|
+
|
|
95
|
+
The buffer should be unusable after this.
|
|
96
|
+
"""
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
class MappedBufferObjectBase(AbstractBuffer):
|
|
100
|
+
"""A buffer that requires being mapped before writing or reading data."""
|
|
101
|
+
|
|
102
|
+
def get_region(self, start: int, count: int) -> ctypes.Array[CType]:
|
|
103
|
+
...
|
|
104
|
+
|
|
105
|
+
@abc.abstractmethod
|
|
106
|
+
def map(self) -> CTypesPointer[ctypes.c_ubyte]:
|
|
107
|
+
"""Map the entire buffer into system memory.
|
|
108
|
+
|
|
109
|
+
The mapped region must be subsequently unmapped with `unmap` before
|
|
110
|
+
performing any other operations on the buffer.
|
|
111
|
+
|
|
112
|
+
Returns:
|
|
113
|
+
Pointer to the mapped block in memory
|
|
114
|
+
"""
|
|
115
|
+
|
|
116
|
+
@abc.abstractmethod
|
|
117
|
+
def unmap(self) -> None:
|
|
118
|
+
"""Unmap a previously mapped memory block."""
|
|
119
|
+
|
|
120
|
+
# @abc.abstractmethod
|
|
121
|
+
# def map_region(self, start: int, size: int) -> CTypesPointer[ctypes.c_byte]:
|
|
122
|
+
# """Map the entire buffer into system memory.
|
|
123
|
+
#
|
|
124
|
+
# The mapped region must be subsequently unmapped with `unmap` before
|
|
125
|
+
# performing any other operations on the buffer.
|
|
126
|
+
#
|
|
127
|
+
# Returns:
|
|
128
|
+
# Pointer to the mapped block in memory
|
|
129
|
+
# """
|
|
130
|
+
#
|
|
131
|
+
# @abc.abstractmethod
|
|
132
|
+
# def map_byte_region(self, offset: int, size: int) -> CTypesPointer[ctypes.c_byte]:
|
|
133
|
+
# """Map the entire buffer into system memory.
|
|
134
|
+
#
|
|
135
|
+
# The mapped region must be subsequently unmapped with `unmap` before
|
|
136
|
+
# performing any other operations on the buffer.
|
|
137
|
+
#
|
|
138
|
+
# Returns:
|
|
139
|
+
# Pointer to the mapped block in memory
|
|
140
|
+
# """
|
|
141
|
+
|
|
142
|
+
class BackedBufferObjectBase(AbstractBuffer):
|
|
143
|
+
"""A buffer with system-memory backed store.
|
|
144
|
+
|
|
145
|
+
Updates to the data via `set_data` and `set_data_region` will be held
|
|
146
|
+
in local memory until `buffer_data` is called. The advantage is that
|
|
147
|
+
fewer OpenGL calls are needed, which can increasing performance at the
|
|
148
|
+
expense of system memory.
|
|
149
|
+
"""
|
|
150
|
+
# A ctypes array of the specified data_type
|
|
151
|
+
data: ctypes.Array[CType]
|
|
152
|
+
|
|
153
|
+
# Memory address pointing to the CTypes data.
|
|
154
|
+
data_ptr: int
|
|
155
|
+
|
|
156
|
+
def __init__(self, data_type: DataTypes, size: int) -> None:
|
|
157
|
+
super().__init__(data_type, size)
|
|
158
|
+
self.data = (self.c_type * size)()
|
|
159
|
+
self.data_ptr = ctypes.addressof(self.data)
|
|
160
|
+
|
|
161
|
+
@abstractmethod
|
|
162
|
+
def commit(self) -> None:
|
|
163
|
+
"""Commits all saved changes to the underlying buffer before drawing.
|
|
164
|
+
|
|
165
|
+
Allows submitting multiple changes at once, rather than having to call glBufferSubData for every change.
|
|
166
|
+
"""
|
|
167
|
+
|
|
168
|
+
def invalidate(self) -> None:
|
|
169
|
+
...
|
|
170
|
+
|
|
171
|
+
def invalidate_region(self, start: int, count: int) -> None:
|
|
172
|
+
...
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
class AttributeBufferObject(BackedBufferObjectBase):
|
|
176
|
+
"""A backed buffer used for Shader Program attributes."""
|
|
177
|
+
|
|
178
|
+
def __init__(self, size: int, shader_attr: GraphicsAttribute) -> None: # noqa: D107
|
|
179
|
+
# size is the allocator size * attribute.stride (buffer size)
|
|
180
|
+
super().__init__(size, shader_attr.attribute.c_type, shader_attr.view.stride, shader_attr.attribute.fmt.components)
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
class IndexedBufferObject(BackedBufferObjectBase):
|
|
184
|
+
"""A backed buffer used for indices."""
|
|
185
|
+
|
|
186
|
+
def __init__(self, size: int, c_type: CType, stride: int, count: int) -> None:
|
|
187
|
+
super().__init__(size, c_type, stride, count)
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
class PersistentBufferObject(BackedBufferObjectBase):
|
|
191
|
+
"""A persistently mapped buffer.
|
|
192
|
+
|
|
193
|
+
Available in OpenGL 4.3+ contexts. Persistently mapped buffers
|
|
194
|
+
are mapped one time on creation, and can be updated at any time
|
|
195
|
+
without the need to map or unmap.
|
|
196
|
+
"""
|
|
197
|
+
|
|
198
|
+
def __init__(self, size, attribute, vao):
|
|
199
|
+
...
|
|
200
|
+
|
|
201
|
+
def set_data(self, data: Sequence[int] | CTypesPointer) -> None:
|
|
202
|
+
raise NotImplementedError("Not yet implemented")
|
|
203
|
+
|
|
204
|
+
def set_data_region(self, data: Sequence[int] | CTypesPointer, start: int, length: int) -> None:
|
|
205
|
+
raise NotImplementedError("Not yet implemented")
|
|
206
|
+
|
|
207
|
+
def bind(self, target=None):
|
|
208
|
+
...
|
|
209
|
+
|
|
210
|
+
def unbind(self):
|
|
211
|
+
...
|
|
212
|
+
|
|
213
|
+
def map(self) -> CTypesPointer[ctypes.c_ubyte]:
|
|
214
|
+
raise NotImplementedError("PersistentBufferObjects are always mapped.")
|
|
215
|
+
|
|
216
|
+
def map_range(self, start, size, ptr_type, flags):
|
|
217
|
+
raise NotImplementedError("PersistentBufferObjects are always mapped.")
|
|
218
|
+
|
|
219
|
+
def unmap(self) -> None:
|
|
220
|
+
raise NotImplementedError("PersistentBufferObjects cannot be unmapped.")
|
|
221
|
+
|
|
222
|
+
def delete(self) -> None:
|
|
223
|
+
...
|
|
224
|
+
|
|
225
|
+
@lru_cache(maxsize=None)
|
|
226
|
+
def get_region(self, start, count):
|
|
227
|
+
...
|
|
228
|
+
|
|
229
|
+
def set_region(self, start, count, data):
|
|
230
|
+
...
|
|
231
|
+
|
|
232
|
+
def resize(self, size):
|
|
233
|
+
...
|
|
234
|
+
|
|
235
|
+
def sub_data(self):
|
|
236
|
+
# Not necessary with persistent mapping
|
|
237
|
+
pass
|
|
238
|
+
|
|
239
|
+
def invalidate(self):
|
|
240
|
+
# Not necessary with persistent mapping
|
|
241
|
+
pass
|
|
242
|
+
|
|
243
|
+
def invalidate_region(self, start, count):
|
|
244
|
+
# Not necessary with persistent mapping
|
|
245
|
+
pass
|