Unverified Commit f1468a99 authored by Andrew Marshall's avatar Andrew Marshall Committed by GitHub
Browse files

blender: Build with Draco support (#245535)

See https://github.com/NixOS/nixpkgs/issues/217921

Blender sets WITH_DRACO=OFF if WITH_PYTHON_INSTALL=OFF, however that’s
not totally necessary. Removing that forced-set then builds with
WITH_DRACO=ON, however Blender fails to launch because this creates
e.g. `share/blender/3.6/python`, and Blender then sets this as Python’s
home dir, so Python fails to init since it expects Python core to be
there (and it’s not). I couldn’t figure out how Blender sets Python’s
home dir, and explicitly setting PYTHONHOME in the env didn’t have any
effect. So instead just rename that dir to python-ext to avoid this
behavior. All that is left then is to adjust where Blender is looking
for the Draco lib.

This functionality may be verified by:

1. Visiting File → Export → glTF 2.0
2. In the right side panel (press the gear icon in top-right if not
   visible), expanding “Data”
3. Enabling “Compression”
4. Press “Export glTF 2.0”
5. Verify:
   - Blender stdout+stderr shows “Draco mesh compression is available”
   - no error or warning message
   - exported file exists
parent f2488b0f
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -35,7 +35,9 @@ stdenv.mkDerivation rec {
    hash = "sha256-SzdWyzdGhsaesv1VX5ZUfUnLHvRvW8buJTlOVxz6yOk=";
  };

  patches = lib.optional stdenv.isDarwin ./darwin.patch;
  patches = [
    ./draco.patch
  ] ++ lib.optional stdenv.isDarwin ./darwin.patch;

  nativeBuildInputs =
    [ cmake makeWrapper python310Packages.wrapPython llvmPackages.llvm.dev
@@ -165,6 +167,7 @@ stdenv.mkDerivation rec {
    mkdir $out/Applications
    mv $out/Blender.app $out/Applications
  '' + ''
    mv $out/share/blender/${lib.versions.majorMinor version}/python{,-ext}
    buildPythonPath "$pythonPath"
    wrapProgram $blenderExecutable \
      --prefix PATH : $program_PATH \
+26 −0
Original line number Diff line number Diff line
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -898,11 +898,6 @@ set_and_warn_dependency(WITH_PYTHON WITH_CYCLES        OFF)
 set_and_warn_dependency(WITH_PYTHON WITH_DRACO         OFF)
 set_and_warn_dependency(WITH_PYTHON WITH_MOD_FLUID     OFF)
 
-if(WITH_DRACO AND NOT WITH_PYTHON_INSTALL)
-  message(STATUS "WITH_DRACO requires WITH_PYTHON_INSTALL to be ON, disabling WITH_DRACO for now")
-  set(WITH_DRACO OFF)
-endif()
-
 # enable boost for cycles, audaspace or i18n
 # otherwise if the user disabled
 
--- a/scripts/addons/io_scene_gltf2/io/com/gltf2_io_draco_compression_extension.py
+++ b/scripts/addons/io_scene_gltf2/io/com/gltf2_io_draco_compression_extension.py
@@ -17,7 +17,7 @@ def dll_path() -> Path:
     """
     lib_name = 'extern_draco'
-    blender_root = Path(bpy.app.binary_path).parent
+    blender_root = Path(bpy.app.binary_path).parent.parent
-    python_lib = Path('{v[0]}.{v[1]}/python/lib'.format(v=bpy.app.version))
+    python_lib = Path('share/blender/{v[0]}.{v[1]}/python-ext/lib'.format(v=bpy.app.version))
     python_version = 'python{v[0]}.{v[1]}'.format(v=sys.version_info)
 
     path = os.environ.get('BLENDER_EXTERN_DRACO_LIBRARY_PATH')