pyglet 2.1.12__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 +4 -17
  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 +27 -5
  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 +147 -177
  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.12.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.12.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.12.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.12.dist-info/licenses → pyglet-3.0.dev1.dist-info}/LICENSE +0 -0
pyglet/gl/cocoa.py DELETED
@@ -1,309 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import platform
4
- from ctypes import byref, c_int, c_uint32
5
-
6
- from pyglet.display.cocoa import CocoaCanvas
7
- from pyglet.gl import ContextException
8
- from pyglet.gl.base import DisplayConfig, Config, Context
9
- from pyglet.libs.darwin import cocoapy, quartz
10
-
11
- NSOpenGLPixelFormat = cocoapy.ObjCClass('NSOpenGLPixelFormat')
12
- NSOpenGLContext = cocoapy.ObjCClass('NSOpenGLContext')
13
-
14
- # Version info, needed as OpenGL different Lion and onward
15
- """Version is based on Darwin kernel, not OS-X version.
16
- OS-X / Darwin version history
17
- http://en.wikipedia.org/wiki/Darwin_(operating_system)#Release_history
18
- pre-release: 0.1, 0.2, 1.0, 1.1,
19
- kodiak: 1.2.1,
20
- cheetah: 1.3.1,
21
- puma: 1.4.1, 5.1 -> 5.5
22
- jaguar: 6.0.1 -> 6.8
23
- panther: 7.0 -> 7.9
24
- tiger: 8.0 -> 8.11
25
- leopard: 9.0 -> 9.8
26
- snow_leopard: 10.0 -> 10.8
27
- lion: 11.0 -> 11.4
28
- mountain_lion: 12.0 -> 12.5
29
- mavericks: 13.0 -> 13.4
30
- yosemite: 14.0 -> 14.5
31
- el_capitan: 15.0 -> 15.6
32
- sierra: 16.0 -> 16.6
33
- high_sierra: 17.0 -> 17.7
34
- mojave: 18.0 -> 18.2
35
- catalina: 19.0 -> 19.6
36
- big_sur: 20.0 ->
37
- """
38
- os_x_release: dict[str, tuple[float] | tuple[float, float] | tuple[float, float, float]] = {
39
- 'pre-release': (0, 1),
40
- 'kodiak': (1, 2, 1),
41
- 'cheetah': (1, 3, 1),
42
- 'puma': (1, 4.1),
43
- 'jaguar': (6, 0, 1),
44
- 'panther': (7,),
45
- 'tiger': (8,),
46
- 'leopard': (9,),
47
- 'snow_leopard': (10,),
48
- 'lion': (11,),
49
- 'mountain_lion': (12,),
50
- 'mavericks': (13,),
51
- 'yosemite': (14,),
52
- 'el_capitan': (15,),
53
- 'sierra': (16,),
54
- 'high_sierra': (17,),
55
- 'mojave': (18,),
56
- 'catalina': (19,),
57
- 'big_sur': (20,),
58
- }
59
-
60
-
61
- def os_x_version() -> tuple[int, ...]: # noqa: D103
62
- version = tuple([int(v) for v in platform.release().split('.')])
63
-
64
- # ensure we return a tuple
65
- if len(version) > 0:
66
- return version
67
- return (version,)
68
-
69
-
70
- _os_x_version = os_x_version()
71
-
72
- # Valid names for GL attributes and their corresponding NSOpenGL constant.
73
- _gl_attributes = {
74
- 'double_buffer': cocoapy.NSOpenGLPFADoubleBuffer,
75
- 'stereo': cocoapy.NSOpenGLPFAStereo,
76
- 'buffer_size': cocoapy.NSOpenGLPFAColorSize,
77
- 'sample_buffers': cocoapy.NSOpenGLPFASampleBuffers,
78
- 'samples': cocoapy.NSOpenGLPFASamples,
79
- 'aux_buffers': cocoapy.NSOpenGLPFAAuxBuffers,
80
- 'alpha_size': cocoapy.NSOpenGLPFAAlphaSize,
81
- 'depth_size': cocoapy.NSOpenGLPFADepthSize,
82
- 'stencil_size': cocoapy.NSOpenGLPFAStencilSize,
83
-
84
- # Not exposed by pyglet API (set internally)
85
- 'all_renderers': cocoapy.NSOpenGLPFAAllRenderers,
86
- 'fullscreen': cocoapy.NSOpenGLPFAFullScreen,
87
- 'minimum_policy': cocoapy.NSOpenGLPFAMinimumPolicy,
88
- 'maximum_policy': cocoapy.NSOpenGLPFAMaximumPolicy,
89
- 'screen_mask': cocoapy.NSOpenGLPFAScreenMask,
90
-
91
- # Not supported in current pyglet API
92
- 'color_float': cocoapy.NSOpenGLPFAColorFloat,
93
- 'offscreen': cocoapy.NSOpenGLPFAOffScreen,
94
- 'sample_alpha': cocoapy.NSOpenGLPFASampleAlpha,
95
- 'multisample': cocoapy.NSOpenGLPFAMultisample,
96
- 'supersample': cocoapy.NSOpenGLPFASupersample,
97
- }
98
-
99
- # NSOpenGL constants which do not require a value.
100
- _boolean_gl_attributes = frozenset([
101
- cocoapy.NSOpenGLPFAAllRenderers,
102
- cocoapy.NSOpenGLPFADoubleBuffer,
103
- cocoapy.NSOpenGLPFAStereo,
104
- cocoapy.NSOpenGLPFAMinimumPolicy,
105
- cocoapy.NSOpenGLPFAMaximumPolicy,
106
- cocoapy.NSOpenGLPFAOffScreen,
107
- cocoapy.NSOpenGLPFAFullScreen,
108
- cocoapy.NSOpenGLPFAColorFloat,
109
- cocoapy.NSOpenGLPFAMultisample,
110
- cocoapy.NSOpenGLPFASupersample,
111
- cocoapy.NSOpenGLPFASampleAlpha,
112
- ])
113
-
114
- # Attributes for which no NSOpenGLPixelFormatAttribute name exists.
115
- # We could probably compute actual values for these using
116
- # NSOpenGLPFAColorSize / 4 and NSOpenGLFAAccumSize / 4, but I'm not that
117
- # confident I know what I'm doing.
118
- _fake_gl_attributes = {
119
- 'red_size': 0,
120
- 'green_size': 0,
121
- 'blue_size': 0,
122
- 'accum_red_size': 0,
123
- 'accum_green_size': 0,
124
- 'accum_blue_size': 0,
125
- 'accum_alpha_size': 0,
126
- }
127
-
128
-
129
- class CocoaConfig(Config): # noqa: D101
130
-
131
- def match(self, canvas: CocoaCanvas) -> list[CocoaDisplayConfig]:
132
- # Construct array of attributes for NSOpenGLPixelFormat
133
- attrs = []
134
- for name, value in self.get_gl_attributes():
135
- attr = _gl_attributes.get(name)
136
- if not attr or not value:
137
- continue
138
- attrs.append(attr)
139
- if attr not in _boolean_gl_attributes:
140
- attrs.append(int(value))
141
-
142
- # Support for RAGE-II, which is not compliant.
143
- attrs.append(cocoapy.NSOpenGLPFAAllRenderers)
144
-
145
- # Force selection policy.
146
- attrs.append(cocoapy.NSOpenGLPFAMaximumPolicy)
147
-
148
- # NSOpenGLPFAFullScreen is always supplied so we can switch to and
149
- # from fullscreen without losing the context. Also must supply the
150
- # NSOpenGLPFAScreenMask attribute with appropriate display ID.
151
- # Note that these attributes aren't necessary to render in fullscreen
152
- # on Mac OS X 10.6, because there we are simply rendering into a
153
- # screen sized window. See:
154
- # http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Conceptual/OpenGL-MacProgGuide/opengl_fullscreen/opengl_cgl.html%23//apple_ref/doc/uid/TP40001987-CH210-SW6
155
- # Otherwise, make sure we refer to the correct Profile for OpenGL (Core or
156
- # Legacy) on Lion and afterwards
157
- if _os_x_version < os_x_release['snow_leopard']:
158
- attrs.append(cocoapy.NSOpenGLPFAFullScreen)
159
- attrs.append(cocoapy.NSOpenGLPFAScreenMask)
160
- attrs.append(quartz.CGDisplayIDToOpenGLDisplayMask(quartz.CGMainDisplayID()))
161
- elif _os_x_version >= os_x_release['lion']:
162
- # check for opengl profile
163
- # This requires OS-X Lion (Darwin 11) or higher
164
- version = (getattr(self, 'major_version', None) or 3,
165
- getattr(self, 'minor_version', None) or 3)
166
-
167
- # tell os-x we want to request a profile
168
- attrs.append(cocoapy.NSOpenGLPFAOpenGLProfile)
169
-
170
- # check if we're wanting core or legacy
171
- # Mavericks (Darwin 13) and up are capable of the Core 4.1 profile,
172
- # while Lion and up are only capable of Core 3.2
173
- if version[0] >= 4 and _os_x_version >= os_x_release['mavericks']:
174
- attrs.append(int(cocoapy.NSOpenGLProfileVersion4_1Core))
175
- elif version[0] >= 3:
176
- attrs.append(int(cocoapy.NSOpenGLProfileVersion3_2Core))
177
- else:
178
- attrs.append(int(cocoapy.NSOpenGLProfileVersionLegacy))
179
- # Terminate the list.
180
- attrs.append(0)
181
-
182
- # Create the pixel format.
183
- attrsArrayType = c_uint32 * len(attrs)
184
- attrsArray = attrsArrayType(*attrs)
185
- pixel_format = NSOpenGLPixelFormat.alloc().initWithAttributes_(attrsArray)
186
-
187
- # Return the match list.
188
- if pixel_format is None:
189
- return []
190
-
191
- return [CocoaDisplayConfig(canvas, self, pixel_format)]
192
-
193
-
194
- class CocoaDisplayConfig(DisplayConfig): # noqa: D101
195
-
196
- def __init__(self, canvas: CocoaCanvas, config: CocoaConfig, pixel_format: NSOpenGLPixelFormat) -> None: # noqa: D107
197
- super().__init__(canvas, config)
198
- self._pixel_format = pixel_format
199
-
200
- # Query values for the attributes of the pixel format, and then set the
201
- # corresponding attributes of the canvas config.
202
- for name, attr in _gl_attributes.items():
203
- vals = c_int()
204
- self._pixel_format.getValues_forAttribute_forVirtualScreen_(byref(vals), attr, 0)
205
- setattr(self, name, vals.value)
206
-
207
- # Set these attributes so that we can run pyglet.info.
208
- for name, value in _fake_gl_attributes.items():
209
- setattr(self, name, value)
210
-
211
- # Update the minor/major version from profile if (Mountain)Lion
212
- if _os_x_version >= os_x_release['lion']:
213
- vals = c_int()
214
- profile = self._pixel_format.getValues_forAttribute_forVirtualScreen_(
215
- byref(vals),
216
- cocoapy.NSOpenGLPFAOpenGLProfile,
217
- 0,
218
- )
219
-
220
- if vals.value == cocoapy.NSOpenGLProfileVersion4_1Core:
221
- self.major_version = 4
222
- self.minor_version = 1
223
- elif vals.value == cocoapy.NSOpenGLProfileVersion3_2Core:
224
- self.major_version = 3
225
- self.minor_version = 2
226
- else:
227
- self.major_version = 2
228
- self.minor_version = 1
229
-
230
- def create_context(self, share: CocoaContext | None) -> CocoaContext:
231
- # Determine the shared NSOpenGLContext.
232
- if share:
233
- share_context = share._nscontext # noqa: SLF001
234
- else:
235
- share_context = None
236
-
237
- # Create a new NSOpenGLContext.
238
- nscontext = NSOpenGLContext.alloc().initWithFormat_shareContext_(
239
- self._pixel_format,
240
- share_context)
241
-
242
- if self.transparent_framebuffer:
243
- opaque = c_int(0)
244
- nscontext.setValues_forParameter_(byref(opaque), cocoapy.NSOpenGLCPSurfaceOpacity)
245
-
246
- # No longer needed after context creation.
247
- if self._pixel_format:
248
- self._pixel_format.release()
249
- self._pixel_format = None
250
-
251
- return CocoaContext(self, nscontext, share)
252
-
253
- def compatible(self, canvas: CocoaCanvas) -> bool:
254
- return isinstance(canvas, CocoaCanvas)
255
-
256
-
257
- class CocoaContext(Context): # noqa: D101
258
-
259
- def __init__(self, config: CocoaDisplayConfig, nscontext: NSOpenGLContext, share: CocoaContext | None) -> None: # noqa: D107
260
- super().__init__(config, share)
261
- self.config = config
262
- self._nscontext = nscontext
263
-
264
- def attach(self, canvas: CocoaCanvas) -> None:
265
- # See if we want OpenGL 3 in a non-Lion OS
266
- if _os_x_version < os_x_release['lion']:
267
- msg = 'OpenGL 3 not supported'
268
- raise ContextException(msg)
269
-
270
- super().attach(canvas)
271
- # The NSView instance should be attached to a nondeferred window before calling
272
- # setView, otherwise you get an "invalid drawable" message.
273
- self._nscontext.setView_(canvas.nsview)
274
-
275
- self.set_current()
276
-
277
- def detach(self) -> None:
278
- super().detach()
279
- self._nscontext.clearDrawable()
280
-
281
- def set_current(self) -> None:
282
- self._nscontext.makeCurrentContext()
283
- super().set_current()
284
-
285
- def update_geometry(self) -> None:
286
- # Need to call this method whenever the context drawable (an NSView)
287
- # changes size or location.
288
- self._nscontext.update()
289
-
290
- def set_full_screen(self) -> None:
291
- self._nscontext.makeCurrentContext()
292
- self._nscontext.setFullScreen()
293
-
294
- def destroy(self) -> None:
295
- super().destroy()
296
- self._nscontext.release()
297
- self._nscontext = None
298
-
299
- def set_vsync(self, vsync: bool=True) -> None:
300
- vals = c_int(vsync)
301
- self._nscontext.setValues_forParameter_(byref(vals), cocoapy.NSOpenGLCPSwapInterval)
302
-
303
- def get_vsync(self) -> bool:
304
- vals = c_int()
305
- self._nscontext.getValues_forParameter_(byref(vals), cocoapy.NSOpenGLCPSwapInterval)
306
- return bool(vals.value)
307
-
308
- def flip(self) -> None:
309
- self._nscontext.flushBuffer()