============
Major release adding several new features and removing some long deprecated methods and attributes.
There are also many small bugfixes, and documentation corrections. Thanks to everyone who submitted
a pull request or contributed towards this release!
Of special note, is that the 1.4 release will be the last to support Python 2. It will also be the
last release to support Legacy OpenGL (2.x). Future pyglet releases will be Python 3 only, and will
require at least OpenGL 3 support. If you are using pyglet on legacy systems, don't worry. The 1.4
branch will remain available for download. Bugfixes will be backported as long as someone is willing
to do so, but new fetures on the 1.4 branch are unlikely.
New features
------------
- Added preliminary support for loading 3D models from obj files.
- Switched from avbin to ffmpeg for decoding media files.
Improvements
------------
- Many long deprecated methods and attributes have now been removed. These are all small
changes, so updating an old codebase is straightforward. The following items were removed:
* `sprite.set_position`. Set the X, Y coordinates via `sprite.position` instead.
* `next` on the Player class. This has been replaced by `next_source`.
* `clock.ClockDisplay`. Use `window.FPSDisplay` instead.
* `clock.test_clock`. This relied on deprecated behavior, and is superseded by unit tests.
* `font.text`. Use the `text` module instead for displaying text.
* `window.Platform` API. Use `canvas.get_display` or `canvas.Display` instead.
* `font.Win32Font` class. This has been replaced by `font.GDIPlusFont`, which was already default.
The class still remains, as it's subclassed by `font.GDIPlusFont`. The two should be merged.
* `window.event.WindowExitHandler`. This functionality is now handled by the Window itself.
* `image.ImageData.data` properties. Use the `get_data` and `set_data` methods instead.
* `image.ImageData.image_data` property. Use the `get_image_data` method instead.
* `image.ImageData.texture` property. Use the `get_texture` method instead.
* `image.ImageData.mipmapped_texture` property. Use the `get_mipmapped_texture` method instead.
* `image.ImageData.texture_sequence` property. Use the `get_texture_sequence` method instead.
* `image.Texture.delete` method. Textures are automatically released through GC.
* `image.Texture.image_data` property. Use the `get_image_data` method instead.
- Playback of 24bit audio is now supported in the PulseAudio, and DirectAudio drivers. The
bundled Python Wave codec can also support loading of 24bit wave files. Please note that the
OpenAL driver does NOT support 24bit audio playback.
- Wave decoding is now based on the Python standard library `wave` module. This is slightly more
forgiving when loading slightly non-complient files.
- Default texture min and mag filtering can be set on the Texture class. For example:
`pyglet.image.Texture.default_min_filter = GL_LINEAR`
`pyglet.image.Texture.default_mag_filter = GL_LINEAR`
- Audio Player and Event classes now take advantage of weak references to ensure proper cleanup of
resources.
- The `pyglet.resource` module now supports loading of multi-volume Zip files.
Bugfixes
--------
- #253 Add missing self argument to Window event dispatcher methods. Fixes linter warnings.
- #226 Loading Animations failed when a decoder was manually specified.
- #218 Add None-check to xlib `Window.activate` to prevent crash if window is not yet created.
- #190 Remove all usage of `past.basestring`.
- #189 Setting the volume on audio Listeners should work on Python3 in all cases now.
- #170 Fix for UINT point on Windows when using 32-bit Python.
- #167 IndexedVertexDomains with non-1 primcount will now draw correctly on 64bit OSs.
- #168 Fix StopIteration errors due to changes in behavior in Python 3.7. See PEP 479.
- #169 Fix slow Window.flip() on Windows.