# ---------------------------------------------------------------------------- # 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. # ---------------------------------------------------------------------------- from pyglet.util import CodecRegistry, Decoder, Encoder, DecodeException, EncodeException registry = CodecRegistry() add_decoders = registry.add_decoders add_encoders = registry.add_encoders get_decoders = registry.get_decoders get_encoders = registry.get_encoders class ModelDecodeException(DecodeException): pass class ModelEncodeException(EncodeException): pass class ModelDecoder(Decoder): def decode(self, filename, file, batch, group): """Decode the given file object and return an instance of `Model`. Throws ModelDecodeException if there is an error. filename can be a file type hint. """ raise NotImplementedError() class ModelEncoder(Encoder): def encode(self, model, filename, file): """Encode the given model to the given file. filename provides a hint to the file format desired. options are encoder-specific, and unknown options should be ignored or issue warnings. """ raise NotImplementedError() def add_default_codecs(): # Add all bundled codecs. These should be listed in order of # preference. This is called automatically by pyglet.model. try: from pyglet.model.codecs import obj registry.add_decoders(obj) except ImportError: pass # TODO: complete this decoder, and enable it by default # try: # from pyglet.model.codecs import gltf # add_decoders(gltf) # except ImportError: # pass