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.
- 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 +4 -17
- 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 +27 -5
- 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 +147 -177
- 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.12.dist-info → pyglet-3.0.dev1.dist-info}/METADATA +2 -3
- pyglet-3.0.dev1.dist-info/RECORD +322 -0
- {pyglet-2.1.12.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.12.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.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()
|