Skip to main content

Python wrapper of Blenders Draco bridging library

Project description

Python wrapper of Blenders Draco bridging library

This repository contains a Cython-based wrapper for Python (>= 3.7) of the Blender bridging library for Draco encoding/decoding (See extern/draco in the Blender Github mirror repository).

It was initially forked from ux3d/blender_extern_draco (commit 35e1595) which is a repo containing a copy of the extern/draco folder and a git submodule with the Draco library (v1.5.2).

The original bridging library is used by the Blender glTF 2.0 Importer and Exporter (see KhronosGroup/glTF-Blender-IO) via the CTypes library (rather than Cython).

Purpose

The main reason this repository was created was to implement the KHR_draco_mesh_compression extension to the glTF 2.0 specification (see KhronosGroup/glTF) in order to be able to add support for the extension to the glTF loaders we use.

Since we only require the parts of the Draco library used by the glTF extension, the Blender bridging library served as an excellent starting point that serves our need.

Beside trying to fix any eventual issues with the current implementation, we may or may not add new functionality or improvements, either to the existing bridge code or by wrapping other parts of the Draco library to suit our needs. Use the Python package and the code at your own risk!

Changes

  • CTypes-related functionality (macros etc.) has been removed from headers and source files
  • Cython sources for the bridging library has been added (.pyd, .pyx)
  • Added a Python-based build system that uses CMake (scikit-build-core, see pyproject.toml) and setup the project for packaging and distribution to PyPi
  • Added a Decoder and Encoder class that wrap the C-style free-standing functions
  • Added a basic Github action workflow for managing building, packaging and releasing.

TODO

  • Add proper unit tests
  • Add an enum for the glTF helper functions (see common.pxi)
  • Improve build process: avoid building Draco every time the project is built (cache the build for each platform)
  • Improve build process: find a way to build and use Dracos tests when Draco is built (the build breaks unless the full library is built)

Installation

From source

pip install .

From PyPi

pip install smtk_draco

For development

Create a virtual environment (e.g. python -m venv .venv) and make sure to activate it.

Install the prerequisites for an editable install:

pip install scikit-build-core scikit-build-core[pyproject] "cython>=3.0.8" 

Then, from the repository root execute the following command to create an editable install:

pip install --no-build-isolation -C build-dir=build --editable  .

NOTE: When changing the package source files you need to rebuild (i.e. rerun the install command above). This is because Cython needs to generate a new C++ source file for the extension, which then needs to be rebuilt and linked with Draco. However, the Draco library will not have to be rebuilt, so the process is relatively quick. If the build-dir setting is omitted, the build system uses a temporary directory for each build which will build Draco as well.

Build and release

The repository uses a Github Action workflow to build, package and (conditionally) release the Python package by uploading it to the Python Package Index.

cibuildwheel is used to build wheels for Python 3.7-3.12 for several versions of Linux, Windows and macOS.

Source distributions are built using pipx.

The final release steps are only executed when a release is published. As a final test, the wheels and the source distribution are first uploaded to Test PyPI and then, if all goes well, the release is uploaded to PyPI.

Usage

For now, refer to the basic test script tests/test.py.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

smtk_draco-0.0.1.tar.gz (739.0 kB view hashes)

Uploaded Source

Built Distributions

smtk_draco-0.0.1-pp310-pypy310_pp73-win_amd64.whl (210.3 kB view hashes)

Uploaded PyPy Windows x86-64

smtk_draco-0.0.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (398.3 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

smtk_draco-0.0.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (433.1 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

smtk_draco-0.0.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl (264.2 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

smtk_draco-0.0.1-pp39-pypy39_pp73-win_amd64.whl (210.3 kB view hashes)

Uploaded PyPy Windows x86-64

smtk_draco-0.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (398.3 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

smtk_draco-0.0.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (433.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

smtk_draco-0.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (264.1 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

smtk_draco-0.0.1-pp38-pypy38_pp73-win_amd64.whl (210.1 kB view hashes)

Uploaded PyPy Windows x86-64

smtk_draco-0.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (397.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

smtk_draco-0.0.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (432.4 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

smtk_draco-0.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (263.4 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

smtk_draco-0.0.1-pp37-pypy37_pp73-win_amd64.whl (210.1 kB view hashes)

Uploaded PyPy Windows x86-64

smtk_draco-0.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (397.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

smtk_draco-0.0.1-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (432.4 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

smtk_draco-0.0.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (263.4 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

smtk_draco-0.0.1-cp312-cp312-win_amd64.whl (211.9 kB view hashes)

Uploaded CPython 3.12 Windows x86-64

smtk_draco-0.0.1-cp312-cp312-win32.whl (183.9 kB view hashes)

Uploaded CPython 3.12 Windows x86

smtk_draco-0.0.1-cp312-cp312-musllinux_1_1_x86_64.whl (919.0 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ x86-64

smtk_draco-0.0.1-cp312-cp312-musllinux_1_1_i686.whl (986.3 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ i686

smtk_draco-0.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (399.0 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

smtk_draco-0.0.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (432.9 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686

smtk_draco-0.0.1-cp312-cp312-macosx_10_9_x86_64.whl (265.5 kB view hashes)

Uploaded CPython 3.12 macOS 10.9+ x86-64

smtk_draco-0.0.1-cp311-cp311-win_amd64.whl (211.7 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

smtk_draco-0.0.1-cp311-cp311-win32.whl (183.4 kB view hashes)

Uploaded CPython 3.11 Windows x86

smtk_draco-0.0.1-cp311-cp311-musllinux_1_1_x86_64.whl (919.5 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

smtk_draco-0.0.1-cp311-cp311-musllinux_1_1_i686.whl (986.7 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

smtk_draco-0.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (399.4 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

smtk_draco-0.0.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (433.6 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

smtk_draco-0.0.1-cp311-cp311-macosx_10_9_x86_64.whl (264.7 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

smtk_draco-0.0.1-cp310-cp310-win_amd64.whl (211.7 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

smtk_draco-0.0.1-cp310-cp310-win32.whl (183.3 kB view hashes)

Uploaded CPython 3.10 Windows x86

smtk_draco-0.0.1-cp310-cp310-musllinux_1_1_x86_64.whl (919.4 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

smtk_draco-0.0.1-cp310-cp310-musllinux_1_1_i686.whl (986.7 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

smtk_draco-0.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (399.5 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

smtk_draco-0.0.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (433.6 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

smtk_draco-0.0.1-cp310-cp310-macosx_10_9_x86_64.whl (264.1 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

smtk_draco-0.0.1-cp39-cp39-win_amd64.whl (212.9 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

smtk_draco-0.0.1-cp39-cp39-win32.whl (184.4 kB view hashes)

Uploaded CPython 3.9 Windows x86

smtk_draco-0.0.1-cp39-cp39-musllinux_1_1_x86_64.whl (920.9 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

smtk_draco-0.0.1-cp39-cp39-musllinux_1_1_i686.whl (987.8 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

smtk_draco-0.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (400.8 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

smtk_draco-0.0.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (434.9 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

smtk_draco-0.0.1-cp39-cp39-macosx_10_9_x86_64.whl (265.3 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

smtk_draco-0.0.1-cp38-cp38-win_amd64.whl (213.0 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

smtk_draco-0.0.1-cp38-cp38-win32.whl (184.4 kB view hashes)

Uploaded CPython 3.8 Windows x86

smtk_draco-0.0.1-cp38-cp38-musllinux_1_1_x86_64.whl (920.9 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

smtk_draco-0.0.1-cp38-cp38-musllinux_1_1_i686.whl (987.7 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

smtk_draco-0.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (400.8 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

smtk_draco-0.0.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (435.0 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686

smtk_draco-0.0.1-cp38-cp38-macosx_10_9_x86_64.whl (265.4 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

smtk_draco-0.0.1-cp37-cp37m-win_amd64.whl (213.6 kB view hashes)

Uploaded CPython 3.7m Windows x86-64

smtk_draco-0.0.1-cp37-cp37m-win32.whl (185.0 kB view hashes)

Uploaded CPython 3.7m Windows x86

smtk_draco-0.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl (921.3 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

smtk_draco-0.0.1-cp37-cp37m-musllinux_1_1_i686.whl (988.6 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

smtk_draco-0.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (401.0 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

smtk_draco-0.0.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl (435.4 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686

smtk_draco-0.0.1-cp37-cp37m-macosx_10_9_x86_64.whl (265.7 kB view hashes)

Uploaded CPython 3.7m macOS 10.9+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page