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.
Files changed (267) hide show
  1. pyglet/__init__.py +67 -61
  2. pyglet/__init__.pyi +15 -8
  3. pyglet/app/__init__.py +22 -13
  4. pyglet/app/async_app.py +212 -0
  5. pyglet/app/base.py +2 -1
  6. pyglet/app/{xlib.py → linux.py} +3 -3
  7. pyglet/config/__init__.py +101 -0
  8. pyglet/config/gl/__init__.py +30 -0
  9. pyglet/config/gl/egl.py +120 -0
  10. pyglet/config/gl/macos.py +262 -0
  11. pyglet/config/gl/windows.py +267 -0
  12. pyglet/config/gl/x11.py +142 -0
  13. pyglet/customtypes.py +43 -2
  14. pyglet/display/__init__.py +8 -6
  15. pyglet/display/base.py +3 -63
  16. pyglet/display/cocoa.py +12 -17
  17. pyglet/display/emscripten.py +39 -0
  18. pyglet/display/headless.py +23 -30
  19. pyglet/display/wayland.py +157 -0
  20. pyglet/display/win32.py +5 -21
  21. pyglet/display/xlib.py +19 -27
  22. pyglet/display/xlib_vidmoderestore.py +2 -2
  23. pyglet/enums.py +183 -0
  24. pyglet/event.py +0 -1
  25. pyglet/experimental/geoshader_sprite.py +15 -13
  26. pyglet/experimental/hidraw.py +6 -15
  27. pyglet/experimental/multitexture_sprite.py +31 -19
  28. pyglet/experimental/particles.py +13 -35
  29. pyglet/font/__init__.py +251 -85
  30. pyglet/font/base.py +116 -61
  31. pyglet/font/dwrite/__init__.py +349 -204
  32. pyglet/font/dwrite/dwrite_lib.py +27 -5
  33. pyglet/font/fontconfig.py +14 -6
  34. pyglet/font/freetype.py +138 -87
  35. pyglet/font/freetype_lib.py +19 -0
  36. pyglet/font/group.py +179 -0
  37. pyglet/font/harfbuzz/__init__.py +3 -3
  38. pyglet/font/pyodide_js.py +310 -0
  39. pyglet/font/quartz.py +319 -126
  40. pyglet/font/ttf.py +45 -3
  41. pyglet/font/user.py +14 -19
  42. pyglet/font/win32.py +45 -21
  43. pyglet/graphics/__init__.py +8 -787
  44. pyglet/graphics/allocation.py +115 -1
  45. pyglet/graphics/api/__init__.py +77 -0
  46. pyglet/graphics/api/base.py +299 -0
  47. pyglet/graphics/api/gl/__init__.py +58 -0
  48. pyglet/graphics/api/gl/base.py +24 -0
  49. pyglet/graphics/{vertexbuffer.py → api/gl/buffer.py} +104 -159
  50. pyglet/graphics/api/gl/cocoa/context.py +76 -0
  51. pyglet/graphics/api/gl/context.py +391 -0
  52. pyglet/graphics/api/gl/default_shaders.py +0 -0
  53. pyglet/graphics/api/gl/draw.py +627 -0
  54. pyglet/graphics/api/gl/egl/__init__.py +0 -0
  55. pyglet/graphics/api/gl/egl/context.py +92 -0
  56. pyglet/graphics/api/gl/enums.py +76 -0
  57. pyglet/graphics/api/gl/framebuffer.py +315 -0
  58. pyglet/graphics/api/gl/gl.py +5463 -0
  59. pyglet/graphics/api/gl/gl_info.py +188 -0
  60. pyglet/graphics/api/gl/global_opengl.py +226 -0
  61. pyglet/{gl → graphics/api/gl}/lib.py +34 -18
  62. pyglet/graphics/api/gl/shader.py +1476 -0
  63. pyglet/graphics/api/gl/shapes.py +55 -0
  64. pyglet/graphics/api/gl/sprite.py +102 -0
  65. pyglet/graphics/api/gl/state.py +219 -0
  66. pyglet/graphics/api/gl/text.py +190 -0
  67. pyglet/graphics/api/gl/texture.py +1526 -0
  68. pyglet/graphics/{vertexarray.py → api/gl/vertexarray.py} +11 -13
  69. pyglet/graphics/api/gl/vertexdomain.py +751 -0
  70. pyglet/graphics/api/gl/win32/__init__.py +0 -0
  71. pyglet/graphics/api/gl/win32/context.py +108 -0
  72. pyglet/graphics/api/gl/win32/wgl_info.py +24 -0
  73. pyglet/graphics/api/gl/xlib/__init__.py +0 -0
  74. pyglet/graphics/api/gl/xlib/context.py +174 -0
  75. pyglet/{gl → graphics/api/gl/xlib}/glx_info.py +26 -31
  76. pyglet/graphics/api/gl1/__init__.py +0 -0
  77. pyglet/{gl → graphics/api/gl1}/gl_compat.py +3 -2
  78. pyglet/graphics/api/gl2/__init__.py +0 -0
  79. pyglet/graphics/api/gl2/buffer.py +320 -0
  80. pyglet/graphics/api/gl2/draw.py +600 -0
  81. pyglet/graphics/api/gl2/global_opengl.py +122 -0
  82. pyglet/graphics/api/gl2/shader.py +200 -0
  83. pyglet/graphics/api/gl2/shapes.py +51 -0
  84. pyglet/graphics/api/gl2/sprite.py +79 -0
  85. pyglet/graphics/api/gl2/text.py +175 -0
  86. pyglet/graphics/api/gl2/vertexdomain.py +364 -0
  87. pyglet/graphics/api/webgl/__init__.py +233 -0
  88. pyglet/graphics/api/webgl/buffer.py +302 -0
  89. pyglet/graphics/api/webgl/context.py +234 -0
  90. pyglet/graphics/api/webgl/draw.py +590 -0
  91. pyglet/graphics/api/webgl/enums.py +76 -0
  92. pyglet/graphics/api/webgl/framebuffer.py +360 -0
  93. pyglet/graphics/api/webgl/gl.py +1537 -0
  94. pyglet/graphics/api/webgl/gl_info.py +130 -0
  95. pyglet/graphics/api/webgl/shader.py +1346 -0
  96. pyglet/graphics/api/webgl/shapes.py +92 -0
  97. pyglet/graphics/api/webgl/sprite.py +102 -0
  98. pyglet/graphics/api/webgl/state.py +227 -0
  99. pyglet/graphics/api/webgl/text.py +187 -0
  100. pyglet/graphics/api/webgl/texture.py +1227 -0
  101. pyglet/graphics/api/webgl/vertexarray.py +54 -0
  102. pyglet/graphics/api/webgl/vertexdomain.py +616 -0
  103. pyglet/graphics/api/webgl/webgl_js.pyi +307 -0
  104. pyglet/{image → graphics}/atlas.py +33 -32
  105. pyglet/graphics/base.py +10 -0
  106. pyglet/graphics/buffer.py +245 -0
  107. pyglet/graphics/draw.py +578 -0
  108. pyglet/graphics/framebuffer.py +26 -0
  109. pyglet/graphics/instance.py +178 -69
  110. pyglet/graphics/shader.py +267 -1553
  111. pyglet/graphics/state.py +83 -0
  112. pyglet/graphics/texture.py +703 -0
  113. pyglet/graphics/vertexdomain.py +695 -538
  114. pyglet/gui/ninepatch.py +10 -10
  115. pyglet/gui/widgets.py +120 -10
  116. pyglet/image/__init__.py +20 -1973
  117. pyglet/image/animation.py +12 -12
  118. pyglet/image/base.py +730 -0
  119. pyglet/image/codecs/__init__.py +9 -0
  120. pyglet/image/codecs/bmp.py +53 -30
  121. pyglet/image/codecs/dds.py +53 -31
  122. pyglet/image/codecs/gdiplus.py +38 -14
  123. pyglet/image/codecs/gdkpixbuf2.py +0 -2
  124. pyglet/image/codecs/js_image.py +99 -0
  125. pyglet/image/codecs/ktx2.py +161 -0
  126. pyglet/image/codecs/pil.py +1 -1
  127. pyglet/image/codecs/png.py +1 -1
  128. pyglet/image/codecs/wic.py +11 -2
  129. pyglet/info.py +26 -24
  130. pyglet/input/__init__.py +8 -0
  131. pyglet/input/base.py +163 -105
  132. pyglet/input/controller.py +13 -19
  133. pyglet/input/controller_db.py +39 -24
  134. pyglet/input/emscripten/__init__.py +18 -0
  135. pyglet/input/emscripten/gamepad_js.py +397 -0
  136. pyglet/input/linux/__init__.py +11 -5
  137. pyglet/input/linux/evdev.py +10 -11
  138. pyglet/input/linux/x11_xinput.py +2 -2
  139. pyglet/input/linux/x11_xinput_tablet.py +1 -1
  140. pyglet/input/macos/__init__.py +7 -2
  141. pyglet/input/macos/darwin_gc.py +559 -0
  142. pyglet/input/win32/__init__.py +1 -1
  143. pyglet/input/win32/directinput.py +34 -29
  144. pyglet/input/win32/xinput.py +11 -61
  145. pyglet/lib.py +3 -3
  146. pyglet/libs/__init__.py +1 -1
  147. pyglet/{gl → libs/darwin}/agl.py +1 -1
  148. pyglet/libs/darwin/cocoapy/__init__.py +2 -2
  149. pyglet/libs/darwin/cocoapy/cocoahelpers.py +181 -0
  150. pyglet/libs/darwin/cocoapy/cocoalibs.py +31 -0
  151. pyglet/libs/darwin/cocoapy/cocoatypes.py +27 -0
  152. pyglet/libs/darwin/cocoapy/runtime.py +81 -45
  153. pyglet/libs/darwin/coreaudio.py +4 -4
  154. pyglet/{gl → libs/darwin}/lib_agl.py +9 -8
  155. pyglet/libs/darwin/quartzkey.py +1 -3
  156. pyglet/libs/egl/__init__.py +2 -0
  157. pyglet/libs/egl/egl_lib.py +576 -0
  158. pyglet/libs/egl/eglext.py +51 -5
  159. pyglet/libs/linux/__init__.py +0 -0
  160. pyglet/libs/linux/egl/__init__.py +0 -0
  161. pyglet/libs/linux/egl/eglext.py +22 -0
  162. pyglet/libs/linux/glx/__init__.py +0 -0
  163. pyglet/{gl → libs/linux/glx}/glx.py +13 -14
  164. pyglet/{gl → libs/linux/glx}/glxext_arb.py +408 -192
  165. pyglet/{gl → libs/linux/glx}/glxext_mesa.py +1 -1
  166. pyglet/{gl → libs/linux/glx}/glxext_nv.py +345 -164
  167. pyglet/{gl → libs/linux/glx}/lib_glx.py +3 -2
  168. pyglet/libs/linux/wayland/__init__.py +0 -0
  169. pyglet/libs/linux/wayland/client.py +1068 -0
  170. pyglet/libs/linux/wayland/lib_wayland.py +207 -0
  171. pyglet/libs/linux/wayland/wayland_egl.py +38 -0
  172. pyglet/libs/{wayland → linux/wayland}/xkbcommon.py +26 -0
  173. pyglet/libs/{x11 → linux/x11}/xf86vmode.py +4 -4
  174. pyglet/libs/{x11 → linux/x11}/xinerama.py +2 -2
  175. pyglet/libs/{x11 → linux/x11}/xinput.py +10 -10
  176. pyglet/libs/linux/x11/xrandr.py +0 -0
  177. pyglet/libs/{x11 → linux/x11}/xrender.py +1 -1
  178. pyglet/libs/shared/__init__.py +0 -0
  179. pyglet/libs/shared/spirv/__init__.py +0 -0
  180. pyglet/libs/shared/spirv/lib_shaderc.py +85 -0
  181. pyglet/libs/shared/spirv/lib_spirv_cross.py +126 -0
  182. pyglet/libs/win32/__init__.py +28 -8
  183. pyglet/libs/win32/constants.py +59 -48
  184. pyglet/libs/win32/context_managers.py +20 -3
  185. pyglet/libs/win32/dinput.py +105 -88
  186. pyglet/{gl → libs/win32}/lib_wgl.py +52 -26
  187. pyglet/libs/win32/types.py +58 -23
  188. pyglet/{gl → libs/win32}/wgl.py +32 -25
  189. pyglet/{gl → libs/win32}/wglext_arb.py +364 -2
  190. pyglet/media/__init__.py +9 -10
  191. pyglet/media/codecs/__init__.py +12 -1
  192. pyglet/media/codecs/base.py +99 -96
  193. pyglet/media/codecs/ffmpeg.py +2 -2
  194. pyglet/media/codecs/ffmpeg_lib/libavformat.py +3 -8
  195. pyglet/media/codecs/webaudio_pyodide.py +111 -0
  196. pyglet/media/drivers/__init__.py +9 -4
  197. pyglet/media/drivers/base.py +4 -4
  198. pyglet/media/drivers/openal/__init__.py +1 -1
  199. pyglet/media/drivers/openal/adaptation.py +3 -3
  200. pyglet/media/drivers/pulse/__init__.py +1 -1
  201. pyglet/media/drivers/pulse/adaptation.py +3 -3
  202. pyglet/media/drivers/pyodide_js/__init__.py +8 -0
  203. pyglet/media/drivers/pyodide_js/adaptation.py +288 -0
  204. pyglet/media/drivers/xaudio2/adaptation.py +3 -3
  205. pyglet/media/player.py +276 -193
  206. pyglet/media/player_worker_thread.py +1 -1
  207. pyglet/model/__init__.py +39 -29
  208. pyglet/model/codecs/base.py +4 -4
  209. pyglet/model/codecs/gltf.py +3 -3
  210. pyglet/model/codecs/obj.py +71 -43
  211. pyglet/resource.py +129 -78
  212. pyglet/shapes.py +154 -194
  213. pyglet/sprite.py +47 -164
  214. pyglet/text/__init__.py +44 -54
  215. pyglet/text/caret.py +12 -7
  216. pyglet/text/document.py +19 -17
  217. pyglet/text/formats/html.py +2 -2
  218. pyglet/text/formats/structured.py +10 -40
  219. pyglet/text/layout/__init__.py +20 -13
  220. pyglet/text/layout/base.py +176 -287
  221. pyglet/text/layout/incremental.py +9 -10
  222. pyglet/text/layout/scrolling.py +7 -95
  223. pyglet/window/__init__.py +183 -172
  224. pyglet/window/cocoa/__init__.py +62 -51
  225. pyglet/window/cocoa/pyglet_delegate.py +2 -25
  226. pyglet/window/cocoa/pyglet_view.py +9 -8
  227. pyglet/window/dialog/__init__.py +184 -0
  228. pyglet/window/dialog/base.py +99 -0
  229. pyglet/window/dialog/darwin.py +121 -0
  230. pyglet/window/dialog/linux.py +72 -0
  231. pyglet/window/dialog/windows.py +194 -0
  232. pyglet/window/emscripten/__init__.py +779 -0
  233. pyglet/window/headless/__init__.py +44 -28
  234. pyglet/window/key.py +2 -0
  235. pyglet/window/mouse.py +2 -2
  236. pyglet/window/wayland/__init__.py +377 -0
  237. pyglet/window/win32/__init__.py +101 -46
  238. pyglet/window/xlib/__init__.py +104 -66
  239. {pyglet-2.1.13.dist-info → pyglet-3.0.dev1.dist-info}/METADATA +2 -3
  240. pyglet-3.0.dev1.dist-info/RECORD +322 -0
  241. {pyglet-2.1.13.dist-info → pyglet-3.0.dev1.dist-info}/WHEEL +1 -1
  242. pyglet/gl/__init__.py +0 -208
  243. pyglet/gl/base.py +0 -499
  244. pyglet/gl/cocoa.py +0 -309
  245. pyglet/gl/gl.py +0 -4625
  246. pyglet/gl/gl.pyi +0 -2320
  247. pyglet/gl/gl_compat.pyi +0 -3097
  248. pyglet/gl/gl_info.py +0 -190
  249. pyglet/gl/headless.py +0 -166
  250. pyglet/gl/wgl_info.py +0 -36
  251. pyglet/gl/wglext_nv.py +0 -1096
  252. pyglet/gl/win32.py +0 -268
  253. pyglet/gl/xlib.py +0 -295
  254. pyglet/image/buffer.py +0 -274
  255. pyglet/image/codecs/s3tc.py +0 -354
  256. pyglet/libs/x11/xrandr.py +0 -166
  257. pyglet-2.1.13.dist-info/RECORD +0 -234
  258. /pyglet/{libs/wayland → graphics/api/gl/cocoa}/__init__.py +0 -0
  259. /pyglet/libs/{egl → linux/egl}/egl.py +0 -0
  260. /pyglet/libs/{egl → linux/egl}/lib.py +0 -0
  261. /pyglet/libs/{ioctl.py → linux/ioctl.py} +0 -0
  262. /pyglet/libs/{wayland → linux/wayland}/gbm.py +0 -0
  263. /pyglet/libs/{x11 → linux/x11}/__init__.py +0 -0
  264. /pyglet/libs/{x11 → linux/x11}/cursorfont.py +0 -0
  265. /pyglet/libs/{x11 → linux/x11}/xlib.py +0 -0
  266. /pyglet/libs/{x11 → linux/x11}/xsync.py +0 -0
  267. {pyglet-2.1.13.dist-info/licenses → pyglet-3.0.dev1.dist-info}/LICENSE +0 -0
@@ -1,30 +1,21 @@
1
1
  """Work in progress HIDRAW device abstraction for Linux"""
2
2
 
3
3
  import os
4
- import fcntl
5
4
  import ctypes
6
- import warnings
7
5
 
8
- from ctypes import c_int as _int
9
6
  from ctypes import c_uint as _uint
10
7
  from ctypes import c_uint8 as _u8
11
- from ctypes import c_uint16 as _u16
12
8
  from ctypes import c_int16 as _s16
13
9
  from ctypes import c_uint32 as _u32
14
- from ctypes import c_int32 as _s32
15
- from ctypes import c_int64 as _s64
16
10
  from ctypes import create_string_buffer
17
11
 
18
- from concurrent.futures import ThreadPoolExecutor
19
-
20
12
  import pyglet
21
13
 
22
- from pyglet.app.xlib import XlibSelectDevice
23
- from pyglet.libs.ioctl import _IOR, _IOR_str, _IOWR_len
24
- from pyglet.input.base import Device, RelativeAxis, AbsoluteAxis, Button, Joystick, Controller
25
- from pyglet.input.base import DeviceOpenException, ControllerManager
14
+ from pyglet.app.linux import LinuxSelectDevice
15
+ from pyglet.libs.linux.ioctl import _IOR, _IOR_str, _IOWR_len
16
+ from pyglet.input.base import Device
17
+ from pyglet.input.base import DeviceOpenException
26
18
  from pyglet.input.linux.evdev_constants import *
27
- from pyglet.input.controller import get_mapping, Relation, create_guid
28
19
 
29
20
 
30
21
  # From /linux/blob/master/include/uapi/linux/hidraw.h
@@ -83,7 +74,7 @@ def get_set_bits(bytestring):
83
74
  return bits
84
75
 
85
76
 
86
- class HIDRawDevice(XlibSelectDevice, Device):
77
+ class HIDRawDevice(LinuxSelectDevice, Device):
87
78
  _fileno = None
88
79
 
89
80
  def __init__(self, display, filename):
@@ -150,7 +141,7 @@ class HIDRawDevice(XlibSelectDevice, Device):
150
141
  # def ff_upload_effect(self, structure):
151
142
  # os.write(self._fileno, structure)
152
143
 
153
- # XlibSelectDevice interface
144
+ # LinuxSelectDevice interface
154
145
 
155
146
  def fileno(self):
156
147
  return self._fileno
@@ -7,12 +7,25 @@ from __future__ import annotations
7
7
  from typing import TYPE_CHECKING
8
8
 
9
9
  import pyglet
10
- from pyglet.gl import glActiveTexture, glBindTexture, glEnable, GL_BLEND, glBlendFunc, glDisable, glGetIntegerv, GLint
11
- from pyglet.gl import GL_SRC_ALPHA, GL_TEXTURE0, GL_ONE_MINUS_SRC_ALPHA, GL_TRIANGLES, GL_MAX_TEXTURE_IMAGE_UNITS
10
+ from pyglet.graphics.api.gl import (
11
+ GL_BLEND,
12
+ GL_MAX_TEXTURE_IMAGE_UNITS,
13
+ GL_ONE_MINUS_SRC_ALPHA,
14
+ GL_SRC_ALPHA,
15
+ GL_TEXTURE0,
16
+ GL_TRIANGLES,
17
+ GLint,
18
+ glActiveTexture,
19
+ glBindTexture,
20
+ glBlendFunc,
21
+ glDisable,
22
+ glEnable,
23
+ glGetIntegerv,
24
+ )
12
25
 
13
26
  if TYPE_CHECKING:
14
- from pyglet.image import Texture, AbstractImage, Animation
15
27
  from pyglet.graphics import Batch, Group, ShaderProgram
28
+ from pyglet.image import _AbstractImage, Animation, Texture
16
29
 
17
30
 
18
31
  class MultiTextureSpriteGroup(pyglet.graphics.Group):
@@ -113,14 +126,14 @@ class MultiTextureSpriteGroup(pyglet.graphics.Group):
113
126
 
114
127
  # Allows the default shader to pick the appropriate sampler for the fragment shader
115
128
  _SAMPLER_TYPES = {
116
- pyglet.gl.GL_TEXTURE_2D: "sampler2D",
117
- pyglet.gl.GL_TEXTURE_2D_ARRAY: "sampler2DArray"
129
+ pyglet.graphics.api.gl.GL_TEXTURE_2D: "sampler2D",
130
+ pyglet.graphics.api.gl.GL_TEXTURE_2D_ARRAY: "sampler2DArray",
118
131
  }
119
132
 
120
133
  # Allows the default shader to grab the correct coords based on texture type
121
134
  _SAMPLER_COORDS = {
122
- pyglet.gl.GL_TEXTURE_2D: ".xy",
123
- pyglet.gl.GL_TEXTURE_2D_ARRAY: ""
135
+ pyglet.graphics.api.gl.GL_TEXTURE_2D: ".xy",
136
+ pyglet.graphics.api.gl.GL_TEXTURE_2D_ARRAY: "",
124
137
  }
125
138
 
126
139
 
@@ -137,9 +150,9 @@ def _get_default_mt_shader(images: dict[str, Texture]) -> ShaderProgram:
137
150
  assert len(images) <= max_tex.value, f"Only {max_tex.value} Texture Units are available."
138
151
 
139
152
  # Generate the default vertex shader
140
- in_tex_coords = '\n'.join([f"in vec3 {name}_coords;" for name in images.keys()])
141
- out_tex_coords = '\n'.join([f"out vec3 {name}_coords_frag;" for name in images.keys()])
142
- tex_coords_assignments = '\n'.join([f"{name}_coords_frag = {name}_coords;" for name in images.keys()])
153
+ in_tex_coords = '\n'.join([f"in vec3 {name}_coords;" for name in images])
154
+ out_tex_coords = '\n'.join([f"out vec3 {name}_coords_frag;" for name in images])
155
+ tex_coords_assignments = '\n'.join([f"{name}_coords_frag = {name}_coords;" for name in images])
143
156
 
144
157
  vertex_source = f"""
145
158
  #version 150 core
@@ -182,7 +195,7 @@ def _get_default_mt_shader(images: dict[str, Texture]) -> ShaderProgram:
182
195
  }}
183
196
  """
184
197
 
185
- in_tex_coords = '\n'.join([f"in vec3 {name}_coords_frag;" for name in images.keys()])
198
+ in_tex_coords = '\n'.join([f"in vec3 {name}_coords_frag;" for name in images])
186
199
  uniform_samplers = '\n'.join([f"uniform {_SAMPLER_TYPES[tex.target]} {name};" for name,tex in images.items()])
187
200
  tex_operations = '\n'.join([f" color = layer(texture({name}, {name}_coords_frag{_SAMPLER_COORDS[tex.target]}), color);" for name, tex in images.items()])
188
201
  fragment_source = f"""
@@ -206,7 +219,7 @@ def _get_default_mt_shader(images: dict[str, Texture]) -> ShaderProgram:
206
219
  }}
207
220
  """
208
221
 
209
- return pyglet.gl.current_context.create_program((vertex_source, 'vertex'), (fragment_source, 'fragment'))
222
+ return pyglet.graphics.api.core.current_context.create_program((vertex_source, 'vertex'), (fragment_source, 'fragment'))
210
223
 
211
224
 
212
225
  class MultiTextureSprite(pyglet.sprite.Sprite):
@@ -252,7 +265,7 @@ class MultiTextureSprite(pyglet.sprite.Sprite):
252
265
  group_class = MultiTextureSpriteGroup
253
266
 
254
267
  def __init__(self,
255
- images: dict[str, AbstractImage | Animation],
268
+ images: dict[str, _AbstractImage | Animation],
256
269
  x: float = 0, y: float = 0, z: float = 0,
257
270
  blend_src: int = GL_SRC_ALPHA,
258
271
  blend_dest: int = GL_ONE_MINUS_SRC_ALPHA,
@@ -390,8 +403,7 @@ class MultiTextureSprite(pyglet.sprite.Sprite):
390
403
  getattr(self._vertex_list,f"{key}_coords")[:] = self._textures[key].tex_coords
391
404
 
392
405
  def _create_vertex_list(self) -> None:
393
- """
394
- Override so we can send over texture coords for each texture being used.
406
+ """Override so we can send over texture coords for each texture being used.
395
407
  """
396
408
  tex_coords = {}
397
409
  for name, tex in self._textures.items():
@@ -439,7 +451,7 @@ class MultiTextureSprite(pyglet.sprite.Sprite):
439
451
 
440
452
  return 0
441
453
 
442
- def get_layer(self, name: str) -> AbstractImage | Animation | None:
454
+ def get_layer(self, name: str) -> _AbstractImage | Animation | None:
443
455
  """Return the requested layer. If it is not found then None is returned
444
456
 
445
457
  Args:
@@ -448,12 +460,12 @@ class MultiTextureSprite(pyglet.sprite.Sprite):
448
460
  """
449
461
  if name in self._animations:
450
462
  return self._animations[name]
451
- elif name in self._textures:
463
+ if name in self._textures:
452
464
  return self._textures[name]
453
465
 
454
466
  return None
455
467
 
456
- def set_layer(self, name: str, img: AbstractImage | Animation) -> None:
468
+ def set_layer(self, name: str, img: _AbstractImage | Animation) -> None:
457
469
  """Sets the layer to the new image or animation.
458
470
 
459
471
  This method has no effect if name is not a valid layer. Note: if you
@@ -504,7 +516,7 @@ class MultiTextureSprite(pyglet.sprite.Sprite):
504
516
  raise NotImplementedError("MultiTextureSprite does not support the image property. Use get_layer instead.")
505
517
 
506
518
  @image.setter
507
- def image(self, img: AbstractImage | Animation) -> None:
519
+ def image(self, img: _AbstractImage | Animation) -> None:
508
520
  raise NotImplementedError("MultiTextureSprite does not support the image property. Use set_layer instead.")
509
521
 
510
522
  @property
@@ -7,7 +7,8 @@ import time
7
7
 
8
8
  import pyglet
9
9
  from pyglet import clock, event, graphics, image
10
- from pyglet.gl import *
10
+ from pyglet.graphics import GeometryMode
11
+ from pyglet.graphics.api.gl import *
11
12
 
12
13
  _is_pyglet_doc_run = hasattr(sys, "is_pyglet_doc_run") and sys.is_pyglet_doc_run
13
14
 
@@ -176,49 +177,26 @@ fragment_source = """#version 150
176
177
 
177
178
 
178
179
  def get_default_shader():
179
- return pyglet.gl.current_context.create_program((vertex_source, 'vertex'),
180
- (geometry_source, 'geometry'),
181
- (fragment_source, 'fragment'))
180
+ return pyglet.graphics.api.get_cached_shader(
181
+ "default_particles",
182
+ (vertex_source, 'vertex'),
183
+ (geometry_source, 'geometry'),
184
+ (fragment_source, 'fragment'),
185
+ )
182
186
 
183
187
 
184
188
  class EmitterGroup(graphics.Group):
185
189
  def __init__(self, texture, blend_src, blend_dest, program, parent=None):
186
190
  super().__init__(parent=parent)
187
191
  self.texture = texture
188
- self.blend_src = blend_src
189
- self.blend_dest = blend_dest
192
+ self.set_shader_program(program)
193
+ self.set_texture(texture)
194
+ self.set_blend(blend_src, blend_dest)
190
195
  self.program = program
191
196
 
192
- def set_state(self):
193
- self.program.use()
194
-
195
- glActiveTexture(GL_TEXTURE0)
196
- glBindTexture(self.texture.target, self.texture.id)
197
-
198
- glEnable(GL_BLEND)
199
- glBlendFunc(self.blend_src, self.blend_dest)
200
-
201
- def unset_state(self):
202
- glDisable(GL_BLEND)
203
- self.program.stop()
204
-
205
- def __repr__(self):
197
+ def __repr__(self) -> str:
206
198
  return f"{self.__class__.__name__}({self.texture})"
207
199
 
208
- def __eq__(self, other):
209
- return (other.__class__ is self.__class__ and
210
- self.program is other.program and
211
- self.parent == other.parent and
212
- self.texture.target == other.texture.target and
213
- self.texture.id == other.texture.id and
214
- self.blend_src == other.blend_src and
215
- self.blend_dest == other.blend_dest)
216
-
217
- def __hash__(self):
218
- return hash((self.program, self.parent,
219
- self.texture.id, self.texture.target,
220
- self.blend_src, self.blend_dest))
221
-
222
200
 
223
201
  class Emitter(event.EventDispatcher):
224
202
  _batch = None
@@ -267,7 +245,7 @@ class Emitter(event.EventDispatcher):
267
245
  texture = self._texture
268
246
  count = self._count
269
247
  self._vertex_list = self.program.vertex_list(
270
- count, GL_POINTS, self._batch, self._group,
248
+ count, GeometryMode.POINTS, self._batch, self._group,
271
249
  position=('f', (self._x, self._y, self._z) * count),
272
250
 
273
251
  size=('f', (texture.width, texture.height, texture.anchor_x, texture.anchor_y) * count),