pyglet 2.0.8__zip → 2.0.10__zip
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-2.0.8 → pyglet-2.0.10}/.github/workflows/unittests.yml +1 -5
- {pyglet-2.0.8 → pyglet-2.0.10}/.gitignore +3 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/.readthedocs.yml +5 -1
- {pyglet-2.0.8 → pyglet-2.0.10}/PKG-INFO +3 -2
- {pyglet-2.0.8 → pyglet-2.0.10}/README.md +2 -1
- {pyglet-2.0.8 → pyglet-2.0.10}/RELEASE_NOTES +55 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/contrib/qt_sprite_preview.py +774 -586
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/conf.py +6 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/shapes.rst +8 -8
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/window_key.rst +9 -1
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/eventloop.rst +57 -53
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/keyboard.rst +194 -67
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/media.rst +297 -67
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/quickstart.rst +1 -0
- pyglet-2.0.10/examples/clipboard.py +18 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/input/controller.py +4 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/media/media_info.py +1 -9
- pyglet-2.0.10/examples/media/soundspace/README +38 -0
- pyglet-2.0.10/examples/media/soundspace/reader.py +117 -0
- pyglet-2.0.10/examples/media/soundspace/res/bass.wav +0 -0
- pyglet-2.0.10/examples/media/soundspace/res/drums.wav +0 -0
- pyglet-2.0.10/examples/media/soundspace/res/guitar.wav +0 -0
- pyglet-2.0.10/examples/media/soundspace/res/piano.wav +0 -0
- pyglet-2.0.10/examples/media/soundspace/res/space.txt +24 -0
- pyglet-2.0.10/examples/media/soundspace/soundspace.py +660 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/model/fpscamera.py +50 -38
- pyglet-2.0.10/examples/net/client.py +18 -0
- pyglet-2.0.10/examples/net/server.py +25 -0
- pyglet-2.0.10/examples/opengl/compute_shader.py +39 -0
- {pyglet-2.0.8/examples/graphics → pyglet-2.0.10/examples}/shapes.py +3 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/window/fixed_resolution.py +37 -34
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/__init__.py +21 -10
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/app/base.py +13 -1
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/canvas/cocoa.py +6 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/clock.py +47 -116
- pyglet-2.0.10/pyglet/customtypes.py +12 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/event.py +16 -16
- pyglet-2.0.10/pyglet/experimental/README.md +6 -0
- pyglet-2.0.10/pyglet/experimental/geoshader_sprite.py +792 -0
- pyglet-2.0.10/pyglet/experimental/net.py +247 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/font/directwrite.py +33 -59
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/font/win32.py +85 -25
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/base.py +195 -46
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/gl_info.py +4 -2
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/lib.py +1 -2
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/win32.py +30 -30
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/graphics/__init__.py +9 -21
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/graphics/shader.py +53 -50
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/graphics/vertexarray.py +8 -9
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/graphics/vertexbuffer.py +50 -74
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/graphics/vertexdomain.py +54 -97
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gui/frame.py +2 -2
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gui/widgets.py +31 -3
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/__init__.py +35 -14
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/atlas.py +9 -9
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/buffer.py +19 -16
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/codecs/wic.py +8 -10
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/controller_db.py +19 -23
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/linux/evdev.py +3 -2
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/win32/xinput.py +2 -2
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/darwin/cocoapy/cocoalibs.py +1 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/win32/__init__.py +12 -1
- pyglet-2.0.10/pyglet/libs/win32/com.py +397 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/win32/types.py +9 -1
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/math.py +18 -43
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/wmf.py +16 -22
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/devices/base.py +28 -24
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/devices/win32.py +93 -47
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/base.py +6 -4
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/directsound/adaptation.py +13 -8
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/directsound/lib_dsound.py +0 -1
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/listener.py +1 -3
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/openal/adaptation.py +17 -7
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/xaudio2/adaptation.py +2 -1
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/xaudio2/interface.py +12 -9
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/xaudio2/lib_xaudio2.py +16 -34
- pyglet-2.0.10/pyglet/media/mediathreads.py +129 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/player.py +8 -3
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/model/__init__.py +4 -17
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/model/codecs/obj.py +1 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/shapes.py +194 -143
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/sprite.py +4 -17
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/text/__init__.py +2 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/text/caret.py +2 -1
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/text/layout.py +171 -189
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/util.py +6 -35
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/__init__.py +75 -35
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/cocoa/__init__.py +28 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/cocoa/pyglet_textview.py +11 -4
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/key.py +10 -1
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/win32/__init__.py +37 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/xlib/__init__.py +142 -5
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet.egg-info/PKG-INFO +3 -2
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet.egg-info/SOURCES.txt +68 -2
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/app/test_eventloop.py +1 -2
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/image/test_imagegrid.py +3 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/image/test_texture3d.py +3 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/media/test_driver.py +15 -12
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_bmp_loading[rgb_16bpp.bmp].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_bmp_loading[rgb_1bpp.bmp].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_bmp_loading[rgb_24bpp.bmp].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_bmp_loading[rgb_32bpp.bmp].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_bmp_loading[rgb_4bpp.bmp].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_bmp_loading[rgb_8bpp.bmp].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_bmp_loading[rgba_32bpp.bmp].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_buffer_copy.001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_buffer_saving.001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_checkerboard.001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_dds_loading[rgb_dxt1.dds].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_dds_loading[rgba_dxt1.dds].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_dds_loading[rgba_dxt3.dds].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_dds_loading[rgba_dxt5.dds].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_depth_buffer_saving.001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_gdkpixbuf2_loading[8bpp.gif].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_gdkpixbuf2_loading[l.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_gdkpixbuf2_loading[la.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_gdkpixbuf2_loading[rgb.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_gdkpixbuf2_loading[rgba.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pil_loading[la.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pil_loading[rgb.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pil_loading[rgba.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pil_saving[l.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pil_saving[la.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_loading[la.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_loading[rgb.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_loading[rgb_8bpp.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_loading[rgb_8bpp_trans.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_loading[rgba.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_saving[l.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_saving[la.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_saving[rgb.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_saving[rgba.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_16bpp.bmp].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_1bpp.bmp].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_24bpp.bmp].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_32bpp.bmp].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_4bpp.bmp].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_8bpp.bmp].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgba_32bpp.bmp].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_buffer_copy.001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_buffer_saving.001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_checkerboard.001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_dds_loading[rgb_dxt1.dds].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_dds_loading[rgba_dxt1.dds].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_dds_loading[rgba_dxt3.dds].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_dds_loading[rgba_dxt5.dds].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_depth_buffer_saving.001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[8bpp.gif].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[l.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[la.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[rgb.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[rgba.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_loading[la.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_loading[rgb.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_loading[rgba.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_saving[l.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_saving[la.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_saving[rgb.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_saving[rgba.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_loading[la.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_loading[rgb.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_loading[rgb_8bpp.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_loading[rgb_8bpp_trans.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_loading[rgba.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_saving[l.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_saving[la.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_saving[rgb.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_saving[rgba.png].001.png +0 -0
- pyglet-2.0.10/tests/interactive/shapes/test_shapes.py +179 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/text/test_inline_elements.py +20 -17
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/text/test_inline_elements_style_change.py +15 -14
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/text/test_multiline_wrap.py +18 -18
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/text/test_plain.py +5 -5
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/text/test_style.py +5 -5
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/conftest.py +5 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/shapes/test_shapes.py +24 -2
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/test_events.py +31 -21
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/gencontrollerdb.py +3 -3
- pyglet-2.0.8/experimental/geoshader_sprite.py +0 -367
- pyglet-2.0.8/pyglet/libs/win32/com.py +0 -340
- pyglet-2.0.8/pyglet/media/mediathreads.py +0 -152
- pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_24bpp.bmp].001.png +0 -0
- pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_32bpp.bmp].001.png +0 -0
- pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_4bpp.bmp].001.png +0 -0
- pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_8bpp.bmp].001.png +0 -0
- pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgba_32bpp.bmp].001.png +0 -0
- pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_checkerboard.001.png +0 -0
- pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_dds_loading[rgb_dxt1.dds].001.png +0 -0
- pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_dds_loading[rgba_dxt1.dds].001.png +0 -0
- pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_dds_loading[rgba_dxt3.dds].001.png +0 -0
- pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_dds_loading[rgba_dxt5.dds].001.png +0 -0
- pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[8bpp.gif].001.png +0 -0
- pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[l.png].001.png +0 -0
- pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[la.png].001.png +0 -0
- pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[rgb.png].001.png +0 -0
- pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[rgba.png].001.png +0 -0
- pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_loading[la.png].001.png +0 -0
- pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_loading[rgb.png].001.png +0 -0
- pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_loading[rgba.png].001.png +0 -0
- pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_loading[la.png].001.png +0 -0
- pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_loading[rgba.png].001.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/.coveragerc +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/.github/ISSUE_TEMPLATE/questions--or-other.md +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/.github/workflows/codeql.yml +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/LICENSE +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/MANIFEST.in +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/contrib/aseprite_codec/README +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/contrib/aseprite_codec/asedemo.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/contrib/aseprite_codec/aseprite.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/contrib/aseprite_codec/running.ase +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/contrib/logo3d/logo3d.jpg +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/contrib/logo3d/logo3d.obj.zip +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/contrib/logo3d/logo3d.wings +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/contrib/scenemanager.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/contrib/toys/follow_mouse.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/Makefile +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/README.md +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/_static/favicon.ico +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/_static/logo.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/_static/logo5.svg +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/_static/relatedlogo.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/external_resources.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/index.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/internal/contributing.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/internal/dist.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/internal/doc.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/internal/generated.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/internal/gl.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/internal/media_logging_manual.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/internal/media_manual.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/internal/testing.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/internal/virtualenv.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/internal/wraptypes-class.svg +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/internal/wraptypes.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/make.bat +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/app.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/canvas.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/clock.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/event.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/font.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/gl.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/graphics/allocation.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/graphics/index.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/graphics/shader.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/graphics/vertexbuffer.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/graphics/vertexdomain.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/gui.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/image/animation.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/image/atlas.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/image/index.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/info.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/input.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/math.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/media.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/media_synthesis.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/pyglet.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/resource.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/sprite.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/text/caret.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/text/document.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/text/index.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/text/layout.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/window.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/window_mouse.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/context.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/debug.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/events.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/examplegame.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/gl.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/graphics.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/image.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/abstract_image.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/abstract_image.svg +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/buffer_image.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/buffer_image.svg +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/context_flow.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/context_flow.svg +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_crosshair.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_default.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_hand.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_no.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_size_down.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_size_left.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_size_left_right.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_size_right.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_size_up.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_size_up_down.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_text.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_wait.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_crosshair.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_default.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_hand.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_help.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_no.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_size.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_size_left_right.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_size_nesw.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_size_nwse.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_size_up_down.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_text.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_wait.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_wait_arrow.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/explosion.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/font_metrics.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/font_metrics.svg +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/image_classes.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/image_classes.svg +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/image_grid.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/image_grid.svg +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/image_sequence.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/image_sequence.svg +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/mouse_coordinates.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/mouse_coordinates.svg +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/screens.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/screens.svg +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/text_classes.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/text_classes.svg +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/window_location.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/window_location.svg +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/window_osx_borderless.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/window_osx_default.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/window_osx_dialog.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/window_osx_tool.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/window_xp_default.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/window_xp_dialog.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/window_xp_overlay.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/window_xp_tool.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/window_xp_transparent.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/input.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/installation.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/math.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/migration.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/mouse.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/options.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/resources.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/shapes.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/text.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/time.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/windowing.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/doc/requirements.txt +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/events/events_key_state_handler.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/events/register_event_type.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/events/window_events.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/events/window_platform_event.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/file_dialog.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/resources/asteroid.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/resources/bullet.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/resources/bullet.wav +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/resources/engine_flame.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/resources/player.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version1/asteroid.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version1/game/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version1/game/load.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version1/game/resources.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version2/asteroid.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version2/game/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version2/game/load.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version2/game/physicalobject.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version2/game/player.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version2/game/resources.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version3/asteroid.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version3/game/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version3/game/load.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version3/game/physicalobject.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version3/game/player.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version3/game/resources.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version3/game/util.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version4/asteroid.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version4/game/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version4/game/asteroid.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version4/game/bullet.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version4/game/load.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version4/game/physicalobject.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version4/game/player.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version4/game/resources.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version4/game/util.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version5/asteroid.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version5/game/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version5/game/asteroid.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version5/game/bullet.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version5/game/load.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version5/game/physicalobject.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version5/game/player.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version5/game/resources.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version5/game/util.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/graphics/image_convert.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/graphics/image_display.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/gui/bar.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/gui/button_down.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/gui/button_hover.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/gui/button_up.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/gui/knob.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/gui/widgets.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/hello_world.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/input/apple_remote.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/input/input.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/input/joystick.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/input/tablet.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/media/media_player.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/media/noisy/README +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/media/noisy/ball.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/media/noisy/ball.wav +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/media/noisy/noisy.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/media/synthesizer.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/media/video.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/model/box.mtl +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/model/box.obj +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/model/logo3d.mtl +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/model/logo3d.obj +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/model/model.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/model/pyglet.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/opengl/egl_context.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/opengl/opengl.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/opengl/opengl_context.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/opengl/opengl_core.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/opengl/opengl_scissor.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/opengl/opengl_shader.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/opengl/pyglet.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/programming_guide/animation.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/programming_guide/dinosaur.gif +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/programming_guide/events.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/programming_guide/hello_world.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/programming_guide/image_viewer.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/programming_guide/kitten.jpg +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/programming_guide/window_subclass.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/resources/kitten.jpg +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/resources/pyglet.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/sprite/depth_sprite.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/sprite/display_sprite.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/sprite/multi_texture_sprite.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/sprite/sprite_batching.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/text/advanced_font.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/text/font_comparison.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/text/html_label.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/text/pyglet.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/text/text_input.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/timer.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/window/camera.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/window/camera_group.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/window/multiple_windows.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/window/overlay_window.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/examples/window/transparent_window.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/experimental/dist_field/README +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/experimental/dist_field/genfield.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/experimental/dist_field/py.df.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/experimental/dist_field/py.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/experimental/dist_field/renderfield.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/experimental/flaccodec.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/experimental/hello_world.svg +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/experimental/spritebenchmark.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/experimental/svg_test.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/experimental/wayland/gbm_egl_context.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/experimental/win32priority.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/make.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/app/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/app/cocoa.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/app/win32.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/app/xlib.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/canvas/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/canvas/base.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/canvas/headless.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/canvas/win32.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/canvas/xlib.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/canvas/xlib_vidmoderestore.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/extlibs/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/extlibs/png.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/font/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/font/base.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/font/fontconfig.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/font/freetype.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/font/freetype_lib.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/font/quartz.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/font/ttf.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/font/user.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/font/win32query.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/agl.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/cocoa.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/gl.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/gl_compat.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/glx.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/glx_info.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/glxext_arb.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/glxext_mesa.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/glxext_nv.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/headless.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/lib_agl.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/lib_glx.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/lib_wgl.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/wgl.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/wgl_info.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/wglext_arb.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/wglext_nv.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/xlib.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/graphics/allocation.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gui/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/animation.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/codecs/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/codecs/bmp.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/codecs/dds.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/codecs/gdiplus.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/codecs/gdkpixbuf2.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/codecs/gif.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/codecs/pil.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/codecs/png.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/codecs/quartz.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/codecs/s3tc.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/info.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/base.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/controller.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/linux/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/linux/evdev_constants.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/linux/x11_xinput.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/linux/x11_xinput_tablet.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/macos/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/macos/darwin_hid.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/win32/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/win32/directinput.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/win32/wintab.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/lib.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/darwin/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/darwin/cocoapy/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/darwin/cocoapy/cocoatypes.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/darwin/cocoapy/runtime.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/darwin/coreaudio.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/darwin/quartzkey.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/egl/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/egl/egl.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/egl/eglext.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/egl/lib.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/wayland/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/wayland/gbm.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/wayland/xkbcommon.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/win32/constants.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/win32/context_managers.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/win32/dinput.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/win32/libwintab.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/win32/winkey.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/x11/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/x11/cursorfont.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/x11/xf86vmode.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/x11/xinerama.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/x11/xinput.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/x11/xlib.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/x11/xsync.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/buffered_logger.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/base.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/coreaudio.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/ffmpeg.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/ffmpeg_lib/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/ffmpeg_lib/compat.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/ffmpeg_lib/libavcodec.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/ffmpeg_lib/libavformat.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/ffmpeg_lib/libavutil.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/ffmpeg_lib/libswresample.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/ffmpeg_lib/libswscale.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/gstreamer.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/pyogg.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/wave.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/devices/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/directsound/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/directsound/exceptions.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/directsound/interface.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/openal/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/openal/interface.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/openal/lib_alc.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/openal/lib_openal.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/pulse/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/pulse/adaptation.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/pulse/interface.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/pulse/lib_pulseaudio.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/silent/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/silent/adaptation.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/xaudio2/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/exceptions.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/instrumentation.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/synthesis.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/model/codecs/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/model/codecs/gltf.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/resource.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/text/document.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/text/formats/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/text/formats/attributed.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/text/formats/html.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/text/formats/plaintext.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/text/formats/structured.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/text/runlist.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/cocoa/pyglet_delegate.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/cocoa/pyglet_view.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/cocoa/pyglet_window.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/cocoa/systemcursor.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/event.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/headless/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/mouse.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet.egg-info/dependency_links.txt +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet.egg-info/top_level.txt +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyglet.egg-info/zip-safe +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pyproject.toml +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/pytest.ini +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/setup.cfg +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/setup.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/annotations.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/base/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/base/data.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/base/event_loop.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/base/interactive.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/base/performance.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/base/test_interactive_test_base.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/conftest.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/fonts/README +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/fonts/action_man.ttf +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/fonts/action_man_bold.ttf +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/fonts/action_man_bold_italic.ttf +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/fonts/action_man_italic.ttf +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/fonts/courR12-ISO8859-1.pcf +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/8bpp.gif +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/cursor.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/dinosaur.gif +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/gdk_close.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/grey_background.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/icon1.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/icon_size1.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/icon_size2.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/icon_size3.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/icon_size4.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/icon_size5.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/l.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/la.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/multitexture.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgb.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgb_16bpp.bmp +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgb_1bpp.bmp +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgb_24bpp.bmp +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgb_32bpp.bmp +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgb_4bpp.bmp +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgb_8bpp.bmp +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgb_8bpp.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgb_8bpp_trans.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgb_dxt1.dds +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgba.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgba_32bpp.bmp +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgba_dxt1.dds +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgba_dxt3.dds +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgba_dxt5.dds +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/tests.interactive.test_interactive_test_base._Test.test_1.001.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/README +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/alert.wav +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/login.wav +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/logout.wav +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/receive.wav +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/send.wav +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/synthesis_sawtooth_16_11025_1ch.wav +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/synthesis_sawtooth_16_44800_1ch.wav +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/synthesis_silence_16_11025_1ch.wav +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/synthesis_silence_16_44800_1ch.wav +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/synthesis_simplefm_16_11025_1ch.wav +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/synthesis_simplefm_16_44800_1ch.wav +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/synthesis_sine_16_11025_1ch.wav +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/synthesis_sine_16_44800_1ch.wav +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/synthesis_square_16_11025_1ch.wav +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/synthesis_square_16_44800_1ch.wav +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/synthesis_triangle_16_11025_1ch.wav +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/synthesis_triangle_16_44800_1ch.wav +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/models/logo3d.mtl +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/models/logo3d.obj +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/app/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/font/test_fontconfig.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/font/test_freetype_face.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/graphics/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/graphics/test_allocation.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/image/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/image/test_gdkpixbuf2.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/media/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/media/mock_player.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/media/test_directsound.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/media/test_openal.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/media/test_player.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/media/test_pulse.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/model/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/model/test_loading.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/platform/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/platform/test_linux_fontconfig.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/platform/test_win_context_managers.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/platform/test_win_multicore_clock.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/resource/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/resource/dir1/dir1/f3.txt +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/resource/dir1/f2.txt +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/resource/dir1/res.zip +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/resource/dir2/f6.txt +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/resource/f1.txt +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/resource/rgbm.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/resource/test_resource_image_loading.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/resource/test_resource_loading.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/text/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/text/test_empty_document.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/window/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/window/test_context_share.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/window/test_event_sequence.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/window/test_window_caption.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/conftest.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/graphics/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/graphics/test_multitexture.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/image/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/image/test_image.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/media/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/media/test_player.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/screenshots/committed/README +0 -0
- /pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.graphics.test_multitexture.test_multitexture.001.png → /pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pil_saving[rgb.png].001.png +0 -0
- /pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_16bpp.bmp].001.png → /pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pil_saving[rgba.png].001.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/screenshots/session/README +0 -0
- /pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_1bpp.bmp].001.png → /pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.graphics.test_multitexture.test_multitexture.001.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_loading[l.png].001.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_loading[l.png].001.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/text/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/text/test_caret_color.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/text/test_content_valign.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/text/test_html.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/window/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/window/test_window_events.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/window/test_window_fullscreen.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/window/test_window_modes.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/window/test_window_multisample.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/window/test_window_open.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/window/test_window_settings.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/window/test_window_styles.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/window/window_util.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/windowed_test_base.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/requirements.txt +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/media/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/media/test_listener.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/media/test_player.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/media/test_sources.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/media/test_synthesis.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/shapes/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/shapes/conftest.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/shapes/test_bordered_rectangle.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/test_atlas.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/test_clock.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/test_clock_freq.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/test_font.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/test_input.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/test_math.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/test_resource_path.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/test_sprite.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/test_text.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/text/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/text/test_caret.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/text/test_layout.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/al_info.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/bokeh_timeline.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/compare.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/configure.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/extractors.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/fs.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/mp.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/mpexceptions.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/playmany.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/readme_ffmpeg_debbuging_branch.txt +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/readme_run_tests.txt +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/report.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/reports.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/retry_crashed.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/run_test_suite.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/summarize.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/test_instrumentation.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/timeline.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/gendist.sh +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/gengl.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/gengl_old.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/genwrappers.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/gl.template +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/gl.xml +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/gl_info.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/inspect_font.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/requirements.txt +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/wgl.h +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/wraptypes/__init__.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/wraptypes/cparser.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/wraptypes/ctypesparser.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/wraptypes/lex.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/wraptypes/preprocessor.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/wraptypes/wrap.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/tools/wraptypes/yacc.py +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/LICENSE.txt +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/README.rst +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/assets/favicon.ico +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/assets/static/css/example-custom-styles.css +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/assets/static/images/pyglet.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/content/404.html/contents.lr +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/content/404.html/ngc-5793.jpg +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/content/authors/benjamin/contents.lr +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/content/authors/benjamin/pyglet.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/content/authors/contents.lr +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/content/blog/contents.lr +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/content/blog/welcome-blog/contents.lr +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/content/contents.lr +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/content/eclipse.jpg +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/pyglet.lektorproject +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/AUTHORS.txt +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/CHANGELOG.md +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/CONTRIBUTING.md +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/LICENSE.txt +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/NOTICE.txt +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/README.md +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/css/bootstrap.css +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/css/icomoon.css +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/css/magnific-popup.css +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/css/style.css +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/fonts/bootstrap/glyphicons-halflings-regular.ttf +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/fonts/bootstrap/glyphicons-halflings-regular.woff +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/fonts/bootstrap/glyphicons-halflings-regular.woff2 +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/fonts/icomoon/icomoon.ttf +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/fonts/icomoon/icomoon.woff +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/images/Preloader_2.gif +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/images/placeholder_person.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/jquery-3.3.1.min.js +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/jquery.easing.min.js +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/jquery.magnific-popup.min.js +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/jquery.stellar.js +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/jquery.stellar.min.js +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/jquery.waypoints.min.js +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/magnific-popup-options.js +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/main-singlelayout.js +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/main.js +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/content.ini +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/gallery.ini +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/gallery_item.ini +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/member.ini +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/mission.ini +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/mission_tab.ini +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/service.ini +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/services.ini +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/team.ini +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/images/blog-index.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/images/full-blog.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/images/full-page.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/images/gallery-404.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/images/gallery-singlepage.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/images/mainpage-screenshots.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/images/responsive-layout.png +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/models/404.ini +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/models/author.ini +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/models/authors.ini +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/models/blog-post.ini +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/models/blog.ini +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/models/page.ini +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/models/single-layout.ini +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/404.html +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/author.html +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/authors.html +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/blocks/content.html +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/blocks/gallery.html +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/blocks/mission.html +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/blocks/services.html +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/blocks/team.html +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/blog-layout.html +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/blog-post.html +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/blog.html +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/layout.html +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/macros/blog.html +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/macros/pagination.html +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/none.html +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/page.html +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/single-layout.html +0 -0
- {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/theme.ini +0 -0
|
@@ -4,6 +4,8 @@ import math
|
|
|
4
4
|
import warnings
|
|
5
5
|
|
|
6
6
|
from sys import byteorder
|
|
7
|
+
from typing import Optional
|
|
8
|
+
|
|
7
9
|
import pyglet
|
|
8
10
|
from pyglet.font import base
|
|
9
11
|
from pyglet.font import win32query
|
|
@@ -25,7 +27,10 @@ def str_ucs2(text):
|
|
|
25
27
|
text = text.encode('utf_16_le') # explicit endian avoids BOM
|
|
26
28
|
return create_string_buffer(text + '\0')
|
|
27
29
|
|
|
30
|
+
|
|
28
31
|
_debug_dir = 'debug_font'
|
|
32
|
+
|
|
33
|
+
|
|
29
34
|
def _debug_filename(base, extension):
|
|
30
35
|
import os
|
|
31
36
|
if not os.path.exists(_debug_dir):
|
|
@@ -36,20 +41,24 @@ def _debug_filename(base, extension):
|
|
|
36
41
|
num += 1
|
|
37
42
|
return name.format(num, extension)
|
|
38
43
|
|
|
44
|
+
|
|
39
45
|
def _debug_image(image, name):
|
|
40
46
|
filename = _debug_filename(name, 'png')
|
|
41
47
|
image.save(filename)
|
|
42
48
|
_debug(f'Saved image {image} to {filename}')
|
|
43
49
|
|
|
50
|
+
|
|
44
51
|
_debug_logfile = None
|
|
52
|
+
|
|
53
|
+
|
|
45
54
|
def _debug(msg):
|
|
46
55
|
global _debug_logfile
|
|
47
56
|
if not _debug_logfile:
|
|
48
57
|
_debug_logfile = open(_debug_filename('log', 'txt'), 'wt')
|
|
49
58
|
_debug_logfile.write(msg + '\n')
|
|
50
59
|
|
|
51
|
-
class Win32GlyphRenderer(base.GlyphRenderer):
|
|
52
60
|
|
|
61
|
+
class Win32GlyphRenderer(base.GlyphRenderer):
|
|
53
62
|
|
|
54
63
|
def __init__(self, font):
|
|
55
64
|
self._bitmap = None
|
|
@@ -67,13 +76,15 @@ class Win32GlyphRenderer(base.GlyphRenderer):
|
|
|
67
76
|
|
|
68
77
|
gdi32.SelectObject(self._dc, self.font.hfont)
|
|
69
78
|
|
|
70
|
-
def _create_bitmap(self, width, height):
|
|
79
|
+
def _create_bitmap(self, width, height) -> None:
|
|
71
80
|
pass
|
|
72
81
|
|
|
73
|
-
def render(self, text):
|
|
82
|
+
def render(self, text: str) -> pyglet.font.base.Glyph:
|
|
74
83
|
raise NotImplementedError('abstract')
|
|
75
84
|
|
|
85
|
+
|
|
76
86
|
class GDIGlyphRenderer(Win32GlyphRenderer):
|
|
87
|
+
|
|
77
88
|
def __del__(self):
|
|
78
89
|
try:
|
|
79
90
|
if self._dc:
|
|
@@ -83,18 +94,22 @@ class GDIGlyphRenderer(Win32GlyphRenderer):
|
|
|
83
94
|
except:
|
|
84
95
|
pass
|
|
85
96
|
|
|
86
|
-
def render(self, text):
|
|
97
|
+
def render(self, text: str) -> pyglet.font.base.Glyph:
|
|
87
98
|
# Attempt to get ABC widths (only for TrueType)
|
|
88
99
|
abc = ABC()
|
|
89
|
-
if gdi32.GetCharABCWidthsW(
|
|
90
|
-
|
|
100
|
+
if gdi32.GetCharABCWidthsW(
|
|
101
|
+
self._dc,
|
|
102
|
+
ord(text), ord(text), byref(abc)
|
|
103
|
+
):
|
|
91
104
|
width = abc.abcB
|
|
92
105
|
lsb = abc.abcA
|
|
93
106
|
advance = abc.abcA + abc.abcB + abc.abcC
|
|
107
|
+
|
|
94
108
|
else:
|
|
95
109
|
width_buf = c_int()
|
|
96
|
-
gdi32.GetCharWidth32W(
|
|
97
|
-
ord(text), ord(text), byref(width_buf))
|
|
110
|
+
gdi32.GetCharWidth32W(
|
|
111
|
+
self._dc, ord(text), ord(text), byref(width_buf))
|
|
112
|
+
|
|
98
113
|
width = width_buf.value
|
|
99
114
|
lsb = 0
|
|
100
115
|
advance = width
|
|
@@ -120,7 +135,7 @@ class GDIGlyphRenderer(Win32GlyphRenderer):
|
|
|
120
135
|
|
|
121
136
|
return glyph
|
|
122
137
|
|
|
123
|
-
def _get_image(self, text, width, height, lsb):
|
|
138
|
+
def _get_image(self, text: str, width: int, height: int, lsb: int) -> pyglet.image.ImageData:
|
|
124
139
|
# There's no such thing as a greyscale bitmap format in GDI. We can
|
|
125
140
|
# create an 8-bit palette bitmap with 256 shades of grey, but
|
|
126
141
|
# unfortunately antialiasing will not work on such a bitmap. So, we
|
|
@@ -134,16 +149,20 @@ class GDIGlyphRenderer(Win32GlyphRenderer):
|
|
|
134
149
|
|
|
135
150
|
# Draw to DC
|
|
136
151
|
user32.FillRect(self._dc, byref(self._bitmap_rect), self._black)
|
|
137
|
-
gdi32.ExtTextOutA(
|
|
152
|
+
gdi32.ExtTextOutA(
|
|
153
|
+
self._dc, -lsb, 0, 0, None, text,
|
|
138
154
|
len(text), None)
|
|
155
|
+
|
|
139
156
|
gdi32.GdiFlush()
|
|
140
157
|
|
|
141
158
|
# Create glyph object and copy bitmap data to texture
|
|
142
|
-
image = pyglet.image.ImageData(
|
|
159
|
+
image = pyglet.image.ImageData(
|
|
160
|
+
width, height,
|
|
143
161
|
'AXXX', self._bitmap_data, self._bitmap_rect.right * 4)
|
|
162
|
+
|
|
144
163
|
return image
|
|
145
164
|
|
|
146
|
-
def _create_bitmap(self, width, height):
|
|
165
|
+
def _create_bitmap(self, width: int, height: int) -> None:
|
|
147
166
|
self._black = gdi32.GetStockObject(BLACK_BRUSH)
|
|
148
167
|
self._white = gdi32.GetStockObject(WHITE_BRUSH)
|
|
149
168
|
|
|
@@ -163,7 +182,8 @@ class GDIGlyphRenderer(Win32GlyphRenderer):
|
|
|
163
182
|
info.bmiHeader.biCompression = BI_RGB
|
|
164
183
|
|
|
165
184
|
self._dc = gdi32.CreateCompatibleDC(None)
|
|
166
|
-
self._bitmap = gdi32.CreateDIBSection(
|
|
185
|
+
self._bitmap = gdi32.CreateDIBSection(
|
|
186
|
+
None,
|
|
167
187
|
byref(info), DIB_RGB_COLORS, byref(data), None,
|
|
168
188
|
0)
|
|
169
189
|
# Spookiness: the above line causes a "not enough storage" error,
|
|
@@ -186,10 +206,17 @@ class GDIGlyphRenderer(Win32GlyphRenderer):
|
|
|
186
206
|
_debug(f'pitch = {pitch}')
|
|
187
207
|
_debug(f'info.bmiHeader.biSize = {info.bmiHeader.biSize}')
|
|
188
208
|
|
|
209
|
+
|
|
189
210
|
class Win32Font(base.Font):
|
|
211
|
+
|
|
190
212
|
glyph_renderer_class = GDIGlyphRenderer
|
|
191
213
|
|
|
192
|
-
def __init__(
|
|
214
|
+
def __init__(
|
|
215
|
+
self,
|
|
216
|
+
name: str, size: int,
|
|
217
|
+
bold: bool = False, italic: bool = False, stretch: bool = False,
|
|
218
|
+
dpi: Optional[float] = None
|
|
219
|
+
):
|
|
193
220
|
super(Win32Font, self).__init__()
|
|
194
221
|
|
|
195
222
|
self.logfont = self.get_logfont(name, size, bold, italic, dpi)
|
|
@@ -208,16 +235,35 @@ class Win32Font(base.Font):
|
|
|
208
235
|
gdi32.DeleteObject(self.hfont)
|
|
209
236
|
|
|
210
237
|
@staticmethod
|
|
211
|
-
def get_logfont(name, size, bold, italic, dpi):
|
|
238
|
+
def get_logfont(name: str, size: float, bold: bool, italic: bool, dpi: Optional[float] = None) -> LOGFONTW:
|
|
239
|
+
"""Get a raw Win32 :py:class:`.LOGFONTW` struct for the given arguments.
|
|
240
|
+
|
|
241
|
+
Args:
|
|
242
|
+
name: The name of the font
|
|
243
|
+
size: The font size in points
|
|
244
|
+
bold: Whether to request the font as bold
|
|
245
|
+
italic: Whether to request the font as italic
|
|
246
|
+
dpi: The screen dpi
|
|
247
|
+
|
|
248
|
+
Returns:
|
|
249
|
+
LOGFONTW: a ctypes binding of a Win32 LOGFONTW struct
|
|
250
|
+
"""
|
|
251
|
+
|
|
212
252
|
# Create a dummy DC for coordinate mapping
|
|
213
253
|
with device_context(None) as dc:
|
|
254
|
+
|
|
255
|
+
# Default to 96 DPI unless otherwise specified
|
|
214
256
|
if dpi is None:
|
|
215
257
|
dpi = 96
|
|
216
|
-
|
|
258
|
+
log_pixels_y = dpi
|
|
217
259
|
|
|
260
|
+
# Create LOGFONTW font description struct
|
|
218
261
|
logfont = LOGFONTW()
|
|
219
|
-
|
|
220
|
-
|
|
262
|
+
|
|
263
|
+
# Convert point size to actual device pixels
|
|
264
|
+
logfont.lfHeight = int(-size * log_pixels_y // 72)
|
|
265
|
+
|
|
266
|
+
# Configure the LOGFONTW's font properties
|
|
221
267
|
if bold:
|
|
222
268
|
logfont.lfWeight = FW_BOLD
|
|
223
269
|
else:
|
|
@@ -229,7 +275,7 @@ class Win32Font(base.Font):
|
|
|
229
275
|
return logfont
|
|
230
276
|
|
|
231
277
|
@classmethod
|
|
232
|
-
def have_font(cls, name):
|
|
278
|
+
def have_font(cls, name) -> bool:
|
|
233
279
|
# [ ] add support for loading raster fonts
|
|
234
280
|
return win32query.have_font(name)
|
|
235
281
|
|
|
@@ -243,8 +289,8 @@ class Win32Font(base.Font):
|
|
|
243
289
|
raise ctypes.WinError()
|
|
244
290
|
|
|
245
291
|
|
|
246
|
-
# --- GDI+ font rendering ---
|
|
247
292
|
|
|
293
|
+
# --- GDI+ font rendering ---
|
|
248
294
|
from pyglet.image.codecs.gdiplus import PixelFormat32bppARGB, gdiplus, Rect
|
|
249
295
|
from pyglet.image.codecs.gdiplus import ImageLockModeRead, BitmapData
|
|
250
296
|
|
|
@@ -263,6 +309,7 @@ StringFormatFlagsNoWrap = 0x00001000
|
|
|
263
309
|
StringFormatFlagsLineLimit = 0x00002000
|
|
264
310
|
StringFormatFlagsNoClip = 0x00004000
|
|
265
311
|
|
|
312
|
+
|
|
266
313
|
class Rectf(ctypes.Structure):
|
|
267
314
|
_fields_ = [
|
|
268
315
|
('x', ctypes.c_float),
|
|
@@ -271,6 +318,7 @@ class Rectf(ctypes.Structure):
|
|
|
271
318
|
('height', ctypes.c_float),
|
|
272
319
|
]
|
|
273
320
|
|
|
321
|
+
|
|
274
322
|
class GDIPlusGlyphRenderer(Win32GlyphRenderer):
|
|
275
323
|
def __del__(self):
|
|
276
324
|
try:
|
|
@@ -288,7 +336,7 @@ class GDIPlusGlyphRenderer(Win32GlyphRenderer):
|
|
|
288
336
|
pass
|
|
289
337
|
|
|
290
338
|
def _create_bitmap(self, width, height):
|
|
291
|
-
self._data = (
|
|
339
|
+
self._data = (BYTE * (4 * width * height))()
|
|
292
340
|
self._bitmap = ctypes.c_void_p()
|
|
293
341
|
self._format = PixelFormat32bppARGB
|
|
294
342
|
gdiplus.GdipCreateBitmapFromScan0(width, height, width * 4,
|
|
@@ -305,11 +353,9 @@ class GDIPlusGlyphRenderer(Win32GlyphRenderer):
|
|
|
305
353
|
gdiplus.GdipSetTextRenderingHint(self._graphics,
|
|
306
354
|
TextRenderingHintAntiAliasGridFit)
|
|
307
355
|
|
|
308
|
-
|
|
309
356
|
self._brush = ctypes.c_void_p()
|
|
310
357
|
gdiplus.GdipCreateSolidFill(0xffffffff, ctypes.byref(self._brush))
|
|
311
358
|
|
|
312
|
-
|
|
313
359
|
self._matrix = ctypes.c_void_p()
|
|
314
360
|
gdiplus.GdipCreateMatrix(ctypes.byref(self._matrix))
|
|
315
361
|
|
|
@@ -429,11 +475,13 @@ class GDIPlusGlyphRenderer(Win32GlyphRenderer):
|
|
|
429
475
|
ctypes.byref(rect),
|
|
430
476
|
fmt,
|
|
431
477
|
self._brush)
|
|
478
|
+
|
|
432
479
|
gdiplus.GdipFlush(self._graphics, 1)
|
|
433
480
|
gdiplus.GdipDeleteStringFormat(fmt)
|
|
434
481
|
|
|
435
482
|
bitmap_data = BitmapData()
|
|
436
|
-
gdiplus.GdipBitmapLockBits(
|
|
483
|
+
gdiplus.GdipBitmapLockBits(
|
|
484
|
+
self._bitmap,
|
|
437
485
|
byref(self._rect), ImageLockModeRead, self._format,
|
|
438
486
|
byref(bitmap_data))
|
|
439
487
|
|
|
@@ -445,7 +493,8 @@ class GDIPlusGlyphRenderer(Win32GlyphRenderer):
|
|
|
445
493
|
# Unlock data
|
|
446
494
|
gdiplus.GdipBitmapUnlockBits(self._bitmap, byref(bitmap_data))
|
|
447
495
|
|
|
448
|
-
image = pyglet.image.ImageData(
|
|
496
|
+
image = pyglet.image.ImageData(
|
|
497
|
+
width, height,
|
|
449
498
|
'BGRA', buffer, -bitmap_data.Stride)
|
|
450
499
|
|
|
451
500
|
glyph = self.font.create_glyph(image)
|
|
@@ -454,11 +503,13 @@ class GDIPlusGlyphRenderer(Win32GlyphRenderer):
|
|
|
454
503
|
glyph.set_bearings(-self.font.descent, lsb, advance)
|
|
455
504
|
return glyph
|
|
456
505
|
|
|
506
|
+
|
|
457
507
|
FontStyleBold = 1
|
|
458
508
|
FontStyleItalic = 2
|
|
459
509
|
UnitPixel = 2
|
|
460
510
|
UnitPoint = 3
|
|
461
511
|
|
|
512
|
+
|
|
462
513
|
class GDIPlusFont(Win32Font):
|
|
463
514
|
glyph_renderer_class = GDIPlusGlyphRenderer
|
|
464
515
|
|
|
@@ -481,6 +532,12 @@ class GDIPlusFont(Win32Font):
|
|
|
481
532
|
self._name = name
|
|
482
533
|
|
|
483
534
|
family = ctypes.c_void_p()
|
|
535
|
+
|
|
536
|
+
# GDI will add @ in front of a localized font for some Asian languages. However, GDI will also not find it
|
|
537
|
+
# based on that name (???). Here we remove it before checking font collections.
|
|
538
|
+
if name[0] == "@":
|
|
539
|
+
name = name[1:]
|
|
540
|
+
|
|
484
541
|
name = ctypes.c_wchar_p(name)
|
|
485
542
|
|
|
486
543
|
# Look in private collection first:
|
|
@@ -489,6 +546,9 @@ class GDIPlusFont(Win32Font):
|
|
|
489
546
|
|
|
490
547
|
# Then in system collection:
|
|
491
548
|
if not family:
|
|
549
|
+
if _debug_font:
|
|
550
|
+
print(f"Warning: Font '{name}' was not found. Defaulting to: {self._default_name}")
|
|
551
|
+
|
|
492
552
|
gdiplus.GdipCreateFontFamilyFromName(name, None, ctypes.byref(family))
|
|
493
553
|
|
|
494
554
|
# Nothing found, use default font.
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
+
import weakref
|
|
2
|
+
|
|
1
3
|
from enum import Enum
|
|
4
|
+
import threading
|
|
5
|
+
from typing import Tuple
|
|
6
|
+
|
|
7
|
+
import pyglet
|
|
2
8
|
|
|
3
9
|
from pyglet import gl
|
|
4
10
|
from pyglet.gl import gl_info
|
|
@@ -162,7 +168,7 @@ class Config:
|
|
|
162
168
|
|
|
163
169
|
|
|
164
170
|
class CanvasConfig(Config):
|
|
165
|
-
"""OpenGL configuration for a particular canvas.
|
|
171
|
+
"""An OpenGL configuration for a particular canvas.
|
|
166
172
|
|
|
167
173
|
Use `Config.match` to obtain an instance of this class.
|
|
168
174
|
|
|
@@ -204,16 +210,16 @@ class CanvasConfig(Config):
|
|
|
204
210
|
|
|
205
211
|
class ObjectSpace:
|
|
206
212
|
def __init__(self):
|
|
207
|
-
#
|
|
208
|
-
# the next time this object space is active.
|
|
213
|
+
# Objects scheduled for deletion the next time this object space is active.
|
|
209
214
|
self.doomed_textures = []
|
|
210
215
|
self.doomed_buffers = []
|
|
211
|
-
self.doomed_vaos = []
|
|
212
216
|
self.doomed_shader_programs = []
|
|
217
|
+
self.doomed_shaders = []
|
|
218
|
+
self.doomed_renderbuffers = []
|
|
213
219
|
|
|
214
220
|
|
|
215
221
|
class Context:
|
|
216
|
-
"""OpenGL context for drawing.
|
|
222
|
+
"""An OpenGL context for drawing.
|
|
217
223
|
|
|
218
224
|
Use `CanvasConfig.create_context` to create a context.
|
|
219
225
|
|
|
@@ -231,14 +237,25 @@ class Context:
|
|
|
231
237
|
self.context_share = context_share
|
|
232
238
|
self.canvas = None
|
|
233
239
|
|
|
240
|
+
self.doomed_vaos = []
|
|
241
|
+
self.doomed_framebuffers = []
|
|
242
|
+
|
|
234
243
|
if context_share:
|
|
235
244
|
self.object_space = context_share.object_space
|
|
236
245
|
else:
|
|
237
246
|
self.object_space = ObjectSpace()
|
|
238
247
|
|
|
248
|
+
self._cached_programs = weakref.WeakValueDictionary()
|
|
249
|
+
|
|
239
250
|
def __repr__(self):
|
|
240
251
|
return f"{self.__class__.__name__}(id={id(self)}, share={self.context_share})"
|
|
241
252
|
|
|
253
|
+
def __enter__(self):
|
|
254
|
+
self.set_current()
|
|
255
|
+
|
|
256
|
+
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
257
|
+
return
|
|
258
|
+
|
|
242
259
|
def attach(self, canvas):
|
|
243
260
|
if self.canvas is not None:
|
|
244
261
|
self.detach()
|
|
@@ -263,28 +280,49 @@ class Context:
|
|
|
263
280
|
self._info = gl_info.GLInfo()
|
|
264
281
|
self._info.set_active_context()
|
|
265
282
|
|
|
266
|
-
# Release Textures, Buffers, and VAOs on this context scheduled for
|
|
267
|
-
# deletion. Note that the garbage collector may introduce a race
|
|
268
|
-
# condition, so operate on a copy, and clear the list afterwards.
|
|
269
283
|
if self.object_space.doomed_textures:
|
|
270
|
-
|
|
271
|
-
textures = (gl.GLuint * len(textures))(*textures)
|
|
272
|
-
gl.glDeleteTextures(len(textures), textures)
|
|
273
|
-
self.object_space.doomed_textures.clear()
|
|
284
|
+
self._delete_objects(self.object_space.doomed_textures, gl.glDeleteTextures)
|
|
274
285
|
if self.object_space.doomed_buffers:
|
|
275
|
-
|
|
276
|
-
buffers = (gl.GLuint * len(buffers))(*buffers)
|
|
277
|
-
gl.glDeleteBuffers(len(buffers), buffers)
|
|
278
|
-
self.object_space.doomed_buffers.clear()
|
|
279
|
-
if self.object_space.doomed_vaos:
|
|
280
|
-
vaos = self.object_space.doomed_vaos[:]
|
|
281
|
-
vaos = (gl.GLuint * len(vaos))(*vaos)
|
|
282
|
-
gl.glDeleteVertexArrays(len(vaos), vaos)
|
|
283
|
-
self.object_space.doomed_vaos.clear()
|
|
286
|
+
self._delete_objects(self.object_space.doomed_buffers, gl.glDeleteBuffers)
|
|
284
287
|
if self.object_space.doomed_shader_programs:
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
+
self._delete_objects_one_by_one(self.object_space.doomed_shader_programs,
|
|
289
|
+
gl.glDeleteProgram)
|
|
290
|
+
if self.object_space.doomed_shaders:
|
|
291
|
+
self._delete_objects_one_by_one(self.object_space.doomed_shaders, gl.glDeleteShader)
|
|
292
|
+
if self.object_space.doomed_renderbuffers:
|
|
293
|
+
self._delete_objects(self.object_space.doomed_renderbuffers, gl.glDeleteRenderbuffers)
|
|
294
|
+
|
|
295
|
+
if self.doomed_vaos:
|
|
296
|
+
self._delete_objects(self.doomed_vaos, gl.glDeleteVertexArrays)
|
|
297
|
+
if self.doomed_framebuffers:
|
|
298
|
+
self._delete_objects(self.doomed_framebuffers, gl.glDeleteFramebuffers)
|
|
299
|
+
|
|
300
|
+
# For the functions below:
|
|
301
|
+
# The garbage collector introduces a race condition.
|
|
302
|
+
# The provided list might be appended to (and only appended to) while this
|
|
303
|
+
# method runs, as it's a `doomed_*` list either on the context or its
|
|
304
|
+
# object space. If `count` wasn't stored in a local, this method might
|
|
305
|
+
# leak objects.
|
|
306
|
+
def _delete_objects(self, list_, deletion_func):
|
|
307
|
+
"""Release all OpenGL objects in the given list using the supplied
|
|
308
|
+
deletion function with the signature ``(GLuint count, GLuint *names)``.
|
|
309
|
+
"""
|
|
310
|
+
count = len(list_)
|
|
311
|
+
to_delete = list_[:count]
|
|
312
|
+
del list_[:count]
|
|
313
|
+
|
|
314
|
+
deletion_func(count, (gl.GLuint * count)(*to_delete))
|
|
315
|
+
|
|
316
|
+
def _delete_objects_one_by_one(self, list_, deletion_func):
|
|
317
|
+
"""Similar to ``_delete_objects``, but assumes the deletion functions's
|
|
318
|
+
signature to be ``(GLuint name)``, calling it once for each object.
|
|
319
|
+
"""
|
|
320
|
+
count = len(list_)
|
|
321
|
+
to_delete = list_[:count]
|
|
322
|
+
del list_[:count]
|
|
323
|
+
|
|
324
|
+
for name in to_delete:
|
|
325
|
+
deletion_func(gl.GLuint(name))
|
|
288
326
|
|
|
289
327
|
def destroy(self):
|
|
290
328
|
"""Release the context.
|
|
@@ -304,26 +342,80 @@ class Context:
|
|
|
304
342
|
if gl._shadow_window is not None:
|
|
305
343
|
gl._shadow_window.switch_to()
|
|
306
344
|
|
|
345
|
+
def _safe_to_operate_on_object_space(self):
|
|
346
|
+
"""Return whether it is safe to interact with this context's object
|
|
347
|
+
space.
|
|
348
|
+
|
|
349
|
+
This is considered to be the case if the currently active context's
|
|
350
|
+
object space is the same as this context's object space and this
|
|
351
|
+
method is called from the main thread.
|
|
352
|
+
"""
|
|
353
|
+
return (
|
|
354
|
+
self.object_space is gl.current_context.object_space and
|
|
355
|
+
threading.current_thread() is threading.main_thread()
|
|
356
|
+
)
|
|
357
|
+
|
|
358
|
+
def _safe_to_operate_on(self):
|
|
359
|
+
"""Return whether it is safe to interact with this context.
|
|
360
|
+
|
|
361
|
+
This is considered to be the case if it's the current context and this
|
|
362
|
+
method is called from the main thread.
|
|
363
|
+
"""
|
|
364
|
+
return gl.current_context is self and threading.current_thread() is threading.main_thread()
|
|
365
|
+
|
|
366
|
+
def create_program(self, *sources: Tuple[str, str], program_class=None):
|
|
367
|
+
"""Create a ShaderProgram from OpenGL GLSL source.
|
|
368
|
+
|
|
369
|
+
This is a convenience method that takes one or more tuples of
|
|
370
|
+
(source_string, shader_type), and returns a
|
|
371
|
+
:py:class:`~pyglet.graphics.shader.ShaderProgram` instance.
|
|
372
|
+
|
|
373
|
+
`source_string` is OpenGL GLSL source code as a str, and `shader_type`
|
|
374
|
+
is the OpenGL shader type, such as "vertex" or "fragment". See
|
|
375
|
+
:py:class:`~pyglet.graphics.shader.Shader` for more information.
|
|
376
|
+
|
|
377
|
+
.. note:: This method is cached. Given the same shader sources, the
|
|
378
|
+
same ShaderProgram instance will be returned. For more
|
|
379
|
+
control over the ShaderProgram lifecycle, it is recommended
|
|
380
|
+
to manually create Shaders and link ShaderPrograms.
|
|
381
|
+
|
|
382
|
+
.. versionadded:: 2.0.10
|
|
383
|
+
"""
|
|
384
|
+
if program := self._cached_programs.get(str(sources)):
|
|
385
|
+
return program
|
|
386
|
+
|
|
387
|
+
program_class = program_class or pyglet.graphics.shader.ShaderProgram
|
|
388
|
+
shaders = (pyglet.graphics.shader.Shader(src, srctype) for (src, srctype) in sources)
|
|
389
|
+
program = program_class(*shaders)
|
|
390
|
+
self._cached_programs[str(sources)] = program
|
|
391
|
+
|
|
392
|
+
return program
|
|
393
|
+
|
|
307
394
|
def delete_texture(self, texture_id):
|
|
308
|
-
"""Safely delete a Texture belonging to this context.
|
|
395
|
+
"""Safely delete a Texture belonging to this context's object space.
|
|
309
396
|
|
|
310
|
-
|
|
311
|
-
``glDeleteTextures
|
|
312
|
-
this context's object space is
|
|
313
|
-
|
|
397
|
+
This method will delete the texture immediately via
|
|
398
|
+
``glDeleteTextures`` if the current context's object space is the same
|
|
399
|
+
as this context's object space and it is called from the main thread.
|
|
400
|
+
|
|
401
|
+
Otherwise, the texture will only be marked for deletion, postponing
|
|
402
|
+
it until any context with the same object space becomes active again.
|
|
403
|
+
|
|
404
|
+
This makes it safe to call from anywhere, including other threads.
|
|
314
405
|
|
|
315
406
|
:Parameters:
|
|
316
407
|
`texture_id` : int
|
|
317
408
|
The OpenGL name of the Texture to delete.
|
|
318
409
|
|
|
319
410
|
"""
|
|
320
|
-
if self.
|
|
411
|
+
if self._safe_to_operate_on_object_space():
|
|
321
412
|
gl.glDeleteTextures(1, gl.GLuint(texture_id))
|
|
322
413
|
else:
|
|
323
414
|
self.object_space.doomed_textures.append(texture_id)
|
|
324
415
|
|
|
325
416
|
def delete_buffer(self, buffer_id):
|
|
326
|
-
"""Safely delete a Buffer object belonging to this context
|
|
417
|
+
"""Safely delete a Buffer object belonging to this context's object
|
|
418
|
+
space.
|
|
327
419
|
|
|
328
420
|
This method behaves similarly to `delete_texture`, though for
|
|
329
421
|
``glDeleteBuffers`` instead of ``glDeleteTextures``.
|
|
@@ -334,16 +426,73 @@ class Context:
|
|
|
334
426
|
|
|
335
427
|
.. versionadded:: 1.1
|
|
336
428
|
"""
|
|
337
|
-
if self.
|
|
429
|
+
if self._safe_to_operate_on_object_space():
|
|
338
430
|
gl.glDeleteBuffers(1, gl.GLuint(buffer_id))
|
|
339
431
|
else:
|
|
340
432
|
self.object_space.doomed_buffers.append(buffer_id)
|
|
341
433
|
|
|
434
|
+
def delete_shader_program(self, program_id):
|
|
435
|
+
"""Safely delete a Shader Program belonging to this context's
|
|
436
|
+
object space.
|
|
437
|
+
|
|
438
|
+
This method behaves similarly to `delete_texture`, though for
|
|
439
|
+
``glDeleteProgram`` instead of ``glDeleteTextures``.
|
|
440
|
+
|
|
441
|
+
:Parameters:
|
|
442
|
+
`program_id` : int
|
|
443
|
+
The OpenGL name of the Shader Program to delete.
|
|
444
|
+
|
|
445
|
+
.. versionadded:: 2.0
|
|
446
|
+
"""
|
|
447
|
+
if self._safe_to_operate_on_object_space():
|
|
448
|
+
gl.glDeleteProgram(gl.GLuint(program_id))
|
|
449
|
+
else:
|
|
450
|
+
self.object_space.doomed_shader_programs.append(program_id)
|
|
451
|
+
|
|
452
|
+
def delete_shader(self, shader_id):
|
|
453
|
+
"""Safely delete a Shader belonging to this context's object space.
|
|
454
|
+
|
|
455
|
+
This method behaves similarly to `delete_texture`, though for
|
|
456
|
+
``glDeleteShader`` instead of ``glDeleteTextures``.
|
|
457
|
+
|
|
458
|
+
:Parameters:
|
|
459
|
+
`shader_id` : int
|
|
460
|
+
The OpenGL name of the Shader to delete.
|
|
461
|
+
|
|
462
|
+
.. versionadded:: 2.0.10
|
|
463
|
+
"""
|
|
464
|
+
if self._safe_to_operate_on_object_space():
|
|
465
|
+
gl.glDeleteShader(gl.GLuint(shader_id))
|
|
466
|
+
else:
|
|
467
|
+
self.object_space.doomed_shaders.append(shader_id)
|
|
468
|
+
|
|
469
|
+
def delete_renderbuffer(self, rbo_id):
|
|
470
|
+
"""Safely delete a Renderbuffer Object belonging to this context's
|
|
471
|
+
object space.
|
|
472
|
+
|
|
473
|
+
This method behaves similarly to `delete_texture`, though for
|
|
474
|
+
``glDeleteRenderbuffers`` instead of ``glDeleteTextures``.
|
|
475
|
+
|
|
476
|
+
:Parameters:
|
|
477
|
+
`rbo_id` : int
|
|
478
|
+
The OpenGL name of the Shader Program to delete.
|
|
479
|
+
|
|
480
|
+
.. versionadded:: 2.0.10
|
|
481
|
+
"""
|
|
482
|
+
if self._safe_to_operate_on_object_space():
|
|
483
|
+
gl.glDeleteRenderbuffers(1, gl.GLuint(rbo_id))
|
|
484
|
+
else:
|
|
485
|
+
self.object_space.doomed_renderbuffers.append(rbo_id)
|
|
486
|
+
|
|
342
487
|
def delete_vao(self, vao_id):
|
|
343
488
|
"""Safely delete a Vertex Array Object belonging to this context.
|
|
344
489
|
|
|
345
|
-
|
|
346
|
-
|
|
490
|
+
If this context is not the current context or this method is not
|
|
491
|
+
called from the main thread, its deletion will be postponed until
|
|
492
|
+
this context is next made active again.
|
|
493
|
+
|
|
494
|
+
Otherwise, this method will immediately delete the VAO via
|
|
495
|
+
``glDeleteVertexArrays``.
|
|
347
496
|
|
|
348
497
|
:Parameters:
|
|
349
498
|
`vao_id` : int
|
|
@@ -351,27 +500,27 @@ class Context:
|
|
|
351
500
|
|
|
352
501
|
.. versionadded:: 2.0
|
|
353
502
|
"""
|
|
354
|
-
if
|
|
503
|
+
if self._safe_to_operate_on():
|
|
355
504
|
gl.glDeleteVertexArrays(1, gl.GLuint(vao_id))
|
|
356
505
|
else:
|
|
357
|
-
self.
|
|
506
|
+
self.doomed_vaos.append(vao_id)
|
|
358
507
|
|
|
359
|
-
def
|
|
360
|
-
"""Safely delete a
|
|
508
|
+
def delete_framebuffer(self, fbo_id):
|
|
509
|
+
"""Safely delete a Framebuffer Object belonging to this context.
|
|
361
510
|
|
|
362
|
-
This method behaves similarly to `
|
|
363
|
-
``
|
|
511
|
+
This method behaves similarly to `delete_vao`, though for
|
|
512
|
+
``glDeleteFramebuffers`` instead of ``glDeleteVertexArrays``.
|
|
364
513
|
|
|
365
514
|
:Parameters:
|
|
366
|
-
`
|
|
367
|
-
The OpenGL name of the
|
|
515
|
+
`fbo_id` : int
|
|
516
|
+
The OpenGL name of the Framebuffer Object to delete.
|
|
368
517
|
|
|
369
|
-
.. versionadded:: 2.0
|
|
518
|
+
.. versionadded:: 2.0.10
|
|
370
519
|
"""
|
|
371
|
-
if
|
|
372
|
-
gl.
|
|
520
|
+
if self._safe_to_operate_on():
|
|
521
|
+
gl.glDeleteFramebuffers(1, gl.GLuint(fbo_id))
|
|
373
522
|
else:
|
|
374
|
-
self.
|
|
523
|
+
self.doomed_framebuffers.append(fbo_id)
|
|
375
524
|
|
|
376
525
|
def get_info(self):
|
|
377
526
|
"""Get the OpenGL information for this context.
|
|
@@ -63,10 +63,12 @@ class GLInfo:
|
|
|
63
63
|
|
|
64
64
|
This method is called automatically for the default context.
|
|
65
65
|
"""
|
|
66
|
-
from pyglet.gl.gl import glGetString, glGetStringi, GL_NUM_EXTENSIONS
|
|
67
|
-
|
|
68
66
|
self._have_context = True
|
|
67
|
+
|
|
69
68
|
if not self._have_info:
|
|
69
|
+
|
|
70
|
+
from pyglet.gl.gl import glGetString, glGetStringi, GL_NUM_EXTENSIONS
|
|
71
|
+
|
|
70
72
|
self.vendor = asstr(cast(glGetString(GL_VENDOR), c_char_p).value)
|
|
71
73
|
self.renderer = asstr(cast(glGetString(GL_RENDERER), c_char_p).value)
|
|
72
74
|
self.version = asstr(cast(glGetString(GL_VERSION), c_char_p).value)
|
|
@@ -62,8 +62,7 @@ def errcheck(result, func, arguments):
|
|
|
62
62
|
print(name)
|
|
63
63
|
|
|
64
64
|
from pyglet import gl
|
|
65
|
-
|
|
66
|
-
if not context:
|
|
65
|
+
if not gl.current_context:
|
|
67
66
|
raise GLException('No GL context; create a Window first')
|
|
68
67
|
error = gl.glGetError()
|
|
69
68
|
if error:
|