diff --git a/libs/pyglet/__init__.py b/libs/pyglet/__init__.py index 1b73d56..6c59989 100644 --- a/libs/pyglet/__init__.py +++ b/libs/pyglet/__init__.py @@ -44,7 +44,7 @@ import sys from typing import TYPE_CHECKING #: The release version -version = '2.0.dev23' +version = '2.0.b1' __version__ = version MIN_PYTHON_VERSION = 3, 7 diff --git a/libs/pyglet/gl/base.py b/libs/pyglet/gl/base.py index 35927c0..729fabf 100644 --- a/libs/pyglet/gl/base.py +++ b/libs/pyglet/gl/base.py @@ -120,7 +120,7 @@ class Config: major_version = None minor_version = None forward_compatible = None - opengl_api = None + opengl_api = "gl" debug = None def __init__(self, **kwargs): @@ -220,7 +220,7 @@ class CanvasConfig(Config): self.major_version = base_config.major_version self.minor_version = base_config.minor_version self.forward_compatible = base_config.forward_compatible - self.opengl_api = base_config.opengl_api + self.opengl_api = base_config.opengl_api or self.opengl_api self.debug = base_config.debug def compatible(self, canvas): diff --git a/libs/pyglet/gl/headless.py b/libs/pyglet/gl/headless.py index 2bfc2a3..05ddc50 100644 --- a/libs/pyglet/gl/headless.py +++ b/libs/pyglet/gl/headless.py @@ -73,6 +73,8 @@ class HeadlessConfig(Config): attrs.extend([EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT]) elif self.opengl_api == "gles": attrs.extend([EGL_RENDERABLE_TYPE, EGL_OPENGL_ES3_BIT]) + else: + raise ValueError(f"Unknown OpenGL API: {self.opengl_api}") attrs.extend([EGL_NONE]) attrs_list = (egl.EGLint * len(attrs))(*attrs) diff --git a/libs/pyglet/gl/xlib.py b/libs/pyglet/gl/xlib.py index 87a27d4..7d02532 100644 --- a/libs/pyglet/gl/xlib.py +++ b/libs/pyglet/gl/xlib.py @@ -395,6 +395,8 @@ class XlibContextARB(XlibContext13): attribs.extend([glxext_arb.GLX_CONTEXT_PROFILE_MASK_ARB, glxext_arb.GLX_CONTEXT_CORE_PROFILE_BIT_ARB]) elif self.config.opengl_api == "gles": attribs.extend([glxext_arb.GLX_CONTEXT_PROFILE_MASK_ARB, glxext_arb.GLX_CONTEXT_ES2_PROFILE_BIT_EXT]) + else: + raise ValueError(f"Unknown OpenGL API: {self.opengl_api}") flags = 0 if self.config.forward_compatible: diff --git a/libs/pyglet/image/codecs/__init__.py b/libs/pyglet/image/codecs/__init__.py index 3aadf7c..2d34b89 100644 --- a/libs/pyglet/image/codecs/__init__.py +++ b/libs/pyglet/image/codecs/__init__.py @@ -92,13 +92,15 @@ class _ImageCodecRegistry(CodecRegistry): except DecodeException as e: if not first_exception: first_exception = e - file.seek(0) + if file: + file.seek(0) for decoder in self.get_animation_decoders(): # Try ALL codecs try: return decoder.decode_animation(filename, file, **kwargs) except DecodeException: - file.seek(0) + if file: + file.seek(0) if not first_exception: raise DecodeException(f"No decoders available for this file type: {filename}") diff --git a/libs/pyglet/image/codecs/qoi.py b/libs/pyglet/image/codecs/qoi.py deleted file mode 100644 index 7bb86ea..0000000 --- a/libs/pyglet/image/codecs/qoi.py +++ /dev/null @@ -1,106 +0,0 @@ -# ---------------------------------------------------------------------------- -# pyglet -# Copyright (c) 2006-2008 Alex Holkner -# Copyright (c) 2008-2022 pyglet contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# * Neither the name of pyglet nor the names of its -# contributors may be used to endorse or promote products -# derived from this software without specific prior written -# permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. -# ---------------------------------------------------------------------------- - -"""Encoder and decoder for the QOI image format. -""" - -from ctypes import Structure, BigEndianStructure -from ctypes import c_uint8, c_uint32, c_char - -from pyglet.image import ImageData, ImageDecodeException -from pyglet.image.codecs import ImageDecoder, ImageEncoder - - -class Header(BigEndianStructure): - _pack_ = 1 - _fields_ = ( - ('magic', c_char * 4), # char magic[4]; // magic bytes "qoif" - ('width', c_uint32), # uint32_t width; // image width in pixels (BE) - ('height', c_uint32), # uint32_t height; // image height in pixels (BE) - ('channels', c_uint8), # uint8_t channels; // 3 = RGB, 4 = RGBA - ('colorspace', c_uint8) # uint8_t colorspace; // 0 = sRGB with linear alpha, 1 = all channels linear - ) - - -class QOImageDecoder(ImageDecoder): - def get_file_extensions(self): - return ['.qoi'] - - def decode(self, filename, file): - if not file: - file = open(filename, 'rb') - - header = Header() - file.readinto(header) - - if header.magic != b'qoif': - raise ImageDecodeException('Invalid QOI header.') - - # TODO: finish - - # pixels = array.array('BH'[metadata['bitdepth'] > 8], itertools.chain(*pixels)) - # return ImageData(width, height, fmt, pixels.tobytes(), -pitch) - - -class QOImageEncoder(ImageEncoder): - def get_file_extensions(self): - return ['.qoi'] - - def encode(self, image, filename, file): - image = image.get_image_data() - - has_alpha = 'A' in image.format - greyscale = len(image.format) < 3 - if has_alpha: - if greyscale: - image.format = 'LA' - else: - image.format = 'RGBA' - else: - if greyscale: - image.format = 'L' - else: - image.format = 'RGB' - - image.pitch = -(image.width * len(image.format)) - # TODO: finish - - -def get_decoders(): - return [QOImageDecoder()] - - -def get_encoders(): - return [QOImageEncoder()]