Compare commits

..

10 Commits

Author SHA1 Message Date
96a62d094f Wrap glObjectLabel and shorten object label 2020-09-09 22:28:39 +02:00
59467d8c94 Remove glObjectLabel wrapper and add a new workaround to differentiate...
... our own debug layer.
2020-09-09 22:28:04 +02:00
6c1c437bf4 Add texture3D to debug layer 2020-09-09 15:50:06 +02:00
20a9ab700d Remove GL_CHECK_ERROR as we now have debug wrappers 2020-09-09 15:28:09 +02:00
a9c05278b6 Add more debug functions to the GL debug layer 2020-09-09 15:09:57 +02:00
1be1c5f55f Force bind the default framebuffer when creating the context 2020-09-09 15:07:25 +02:00
01d152419f Add more debug capabilities for non pointers function
We wrap them inside a function of the same name but not in
the same namespace.
2020-09-09 02:56:38 +02:00
05e84b1694 One macro to rule them all 2020-09-09 01:50:10 +02:00
2b3c6f6eb1 Fix compilation on MSVC 2020-09-09 01:37:20 +02:00
09d1c6d8b1 GL: Add fallback debug layer
This is to improve debugging on older hardware that may not support
4.3 debug capabilities (like Macs).

This avoids sprinkling glGetErrors manually. This might still be needed
to find the root cause since not all functions are covered.

This overrides the functions pointers that GLEW have already init time.

This is only enabled if using --debug-gpu option and the debug extension
are not available.
2020-09-09 00:47:59 +02:00
2089 changed files with 40979 additions and 56142 deletions

View File

@@ -18,8 +18,6 @@ Checks: >
-readability-redundant-member-init, -readability-redundant-member-init,
-readability-use-anyofallof, -readability-use-anyofallof,
-readability-function-cognitive-complexity,
bugprone-*, bugprone-*,
-bugprone-narrowing-conversions, -bugprone-narrowing-conversions,
-bugprone-unhandled-self-assignment, -bugprone-unhandled-self-assignment,
@@ -30,7 +28,4 @@ Checks: >
-bugprone-sizeof-expression, -bugprone-sizeof-expression,
-bugprone-integer-division, -bugprone-integer-division,
-bugprone-exception-escape,
-bugprone-redundant-branch-condition,
WarningsAsErrors: '*' WarningsAsErrors: '*'

View File

@@ -43,8 +43,8 @@ endif()
cmake_minimum_required(VERSION 3.10) cmake_minimum_required(VERSION 3.10)
# Prefer LEGACY OpenGL to be compatible with all the existing releases and # Prever LEGACY OpenGL to eb compatible with all the existing releases and
# platforms which don't have GLVND yet. Only do it if preference was not set # platforms which don't hare GLVND yet. Only do it if preference was not set
# externally. # externally.
if(NOT DEFINED OpenGL_GL_PREFERENCE) if(NOT DEFINED OpenGL_GL_PREFERENCE)
set(OpenGL_GL_PREFERENCE "LEGACY") set(OpenGL_GL_PREFERENCE "LEGACY")
@@ -198,12 +198,10 @@ option(WITH_OPENIMAGEDENOISE "Enable the OpenImageDenoise compositing node" ON
option(WITH_OPENSUBDIV "Enable OpenSubdiv for surface subdivision" ON) option(WITH_OPENSUBDIV "Enable OpenSubdiv for surface subdivision" ON)
option(WITH_POTRACE "Enable features relying on potrace" ON)
option(WITH_OPENVDB "Enable features relying on OpenVDB" ON) option(WITH_OPENVDB "Enable features relying on OpenVDB" ON)
option(WITH_OPENVDB_BLOSC "Enable blosc compression for OpenVDB, only enable if OpenVDB was built with blosc support" ON) option(WITH_OPENVDB_BLOSC "Enable blosc compression for OpenVDB, only enable if OpenVDB was built with blosc support" ON)
option(WITH_OPENVDB_3_ABI_COMPATIBLE "Assume OpenVDB library has been compiled with version 3 ABI compatibility" OFF) option(WITH_OPENVDB_3_ABI_COMPATIBLE "Assume OpenVDB library has been compiled with version 3 ABI compatibility" OFF)
mark_as_advanced(WITH_OPENVDB_3_ABI_COMPATIBLE) mark_as_advanced(WITH_OPENVDB_3_ABI_COMPATIBLE)
option(WITH_NANOVDB "Enable usage of NanoVDB data structure for accelerated rendering on the GPU" OFF)
# GHOST Windowing Library Options # GHOST Windowing Library Options
option(WITH_GHOST_DEBUG "Enable debugging output for the GHOST library" OFF) option(WITH_GHOST_DEBUG "Enable debugging output for the GHOST library" OFF)
@@ -224,6 +222,8 @@ if(WITH_GHOST_X11)
option(WITH_GHOST_XDND "Enable drag'n'drop support on X11 using XDND protocol" ON) option(WITH_GHOST_XDND "Enable drag'n'drop support on X11 using XDND protocol" ON)
endif() endif()
option(WITH_GMP "Use the gmp library for more accurate booleans" OFF)
# Misc... # Misc...
option(WITH_HEADLESS "Build without graphical support (renderfarm, server mode only)" OFF) option(WITH_HEADLESS "Build without graphical support (renderfarm, server mode only)" OFF)
mark_as_advanced(WITH_HEADLESS) mark_as_advanced(WITH_HEADLESS)
@@ -377,7 +377,7 @@ option(WITH_CYCLES_CUDA_BINARIES "Build Cycles CUDA binaries" OFF)
option(WITH_CYCLES_CUBIN_COMPILER "Build cubins with nvrtc based compiler instead of nvcc" OFF) option(WITH_CYCLES_CUBIN_COMPILER "Build cubins with nvrtc based compiler instead of nvcc" OFF)
option(WITH_CYCLES_CUDA_BUILD_SERIAL "Build cubins one after another (useful on machines with limited RAM)" OFF) option(WITH_CYCLES_CUDA_BUILD_SERIAL "Build cubins one after another (useful on machines with limited RAM)" OFF)
mark_as_advanced(WITH_CYCLES_CUDA_BUILD_SERIAL) mark_as_advanced(WITH_CYCLES_CUDA_BUILD_SERIAL)
set(CYCLES_CUDA_BINARIES_ARCH sm_30 sm_35 sm_37 sm_50 sm_52 sm_60 sm_61 sm_70 sm_75 sm_86 compute_75 CACHE STRING "CUDA architectures to build binaries for") set(CYCLES_CUDA_BINARIES_ARCH sm_30 sm_35 sm_37 sm_50 sm_52 sm_60 sm_61 sm_70 sm_75 compute_75 CACHE STRING "CUDA architectures to build binaries for")
mark_as_advanced(CYCLES_CUDA_BINARIES_ARCH) mark_as_advanced(CYCLES_CUDA_BINARIES_ARCH)
unset(PLATFORM_DEFAULT) unset(PLATFORM_DEFAULT)
option(WITH_CYCLES_LOGGING "Build Cycles with logging support" ON) option(WITH_CYCLES_LOGGING "Build Cycles with logging support" ON)
@@ -439,12 +439,8 @@ if(WIN32)
endif() endif()
# This should be turned off when Blender enter beta/rc/release # This should be turned off when Blender enter beta/rc/release
if("${BLENDER_VERSION_CYCLE}" STREQUAL "release" OR option(WITH_EXPERIMENTAL_FEATURES "Enable experimental features (still need to enable them in the user preferences)" ON)
"${BLENDER_VERSION_CYCLE}" STREQUAL "rc") mark_as_advanced(WITH_EXPERIMENTAL_FEATURES)
set(WITH_EXPERIMENTAL_FEATURES OFF)
else()
set(WITH_EXPERIMENTAL_FEATURES ON)
endif()
# Unit testsing # Unit testsing
option(WITH_GTESTS "Enable GTest unit testing" OFF) option(WITH_GTESTS "Enable GTest unit testing" OFF)
@@ -521,8 +517,7 @@ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
set(_asan_defaults "${_asan_defaults}") set(_asan_defaults "${_asan_defaults}")
elseif(APPLE) elseif(APPLE)
# AppleClang doesn't support all sanitizers, but leak gives error. # AppleClang doesn't support all sanitizers, but leak gives error.
# Build type is not known for multi-config generator, so don't add object-size sanitizer. if(CMAKE_BUILD_TYPE MATCHES "Debug")
if(CMAKE_BUILD_TYPE MATCHES "Debug" OR GENERATOR_IS_MULTI_CONFIG)
# Silence the warning that object-size is not effective in -O0. # Silence the warning that object-size is not effective in -O0.
set(_asan_defaults "${_asan_defaults}") set(_asan_defaults "${_asan_defaults}")
else() else()
@@ -553,9 +548,7 @@ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
) )
string(STRIP "${CLANG_LIB_DIR}" CLANG_LIB_DIR) string(STRIP "${CLANG_LIB_DIR}" CLANG_LIB_DIR)
find_library( find_library(
COMPILER_ASAN_LIBRARY COMPILER_ASAN_LIBRARY NAMES libclang_rt.asan_osx_dynamic.dylib
NAMES
libclang_rt.asan_osx_dynamic.dylib
PATHS PATHS
"${CLANG_LIB_DIR}/darwin/" "${CLANG_LIB_DIR}/darwin/"
) )
@@ -705,9 +698,6 @@ set_and_warn_dependency(WITH_TBB WITH_OPENIMAGEDENOISE OFF)
set_and_warn_dependency(WITH_TBB WITH_OPENVDB OFF) set_and_warn_dependency(WITH_TBB WITH_OPENVDB OFF)
set_and_warn_dependency(WITH_TBB WITH_MOD_FLUID OFF) set_and_warn_dependency(WITH_TBB WITH_MOD_FLUID OFF)
# NanoVDB requires OpenVDB to convert the data structure
set_and_warn_dependency(WITH_OPENVDB WITH_NANOVDB OFF)
# OpenVDB uses 'half' type from OpenEXR & fails to link without OpenEXR enabled. # OpenVDB uses 'half' type from OpenEXR & fails to link without OpenEXR enabled.
set_and_warn_dependency(WITH_IMAGE_OPENEXR WITH_OPENVDB OFF) set_and_warn_dependency(WITH_IMAGE_OPENEXR WITH_OPENVDB OFF)
@@ -842,10 +832,11 @@ set(CXX_WARNINGS)
set(C_REMOVE_STRICT_FLAGS) set(C_REMOVE_STRICT_FLAGS)
set(CXX_REMOVE_STRICT_FLAGS) set(CXX_REMOVE_STRICT_FLAGS)
# Libraries to link to targets in setup_platform_linker_libs # libraries to link the binary with passed to target_link_libraries()
# known as LLIBS to scons
set(PLATFORM_LINKLIBS "") set(PLATFORM_LINKLIBS "")
# Added to target linker flags in setup_platform_linker_flags # Added to linker flags in setup_liblinks
# - CMAKE_EXE_LINKER_FLAGS # - CMAKE_EXE_LINKER_FLAGS
# - CMAKE_EXE_LINKER_FLAGS_DEBUG # - CMAKE_EXE_LINKER_FLAGS_DEBUG
set(PLATFORM_LINKFLAGS "") set(PLATFORM_LINKFLAGS "")
@@ -853,27 +844,18 @@ set(PLATFORM_LINKFLAGS_DEBUG "")
if(NOT CMAKE_BUILD_TYPE MATCHES "Release") if(NOT CMAKE_BUILD_TYPE MATCHES "Release")
if(WITH_COMPILER_ASAN) if(WITH_COMPILER_ASAN)
if(NOT APPLE)
# Avoid passing address sanitizer compiler flags to `try_compile`.
# Since linker flags are not set, all compiler checks and `find_package`
# calls that rely on `try_compile` will fail.
# See CMP0066 also.
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${COMPILER_ASAN_CFLAGS}") set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${COMPILER_ASAN_CFLAGS}")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} ${COMPILER_ASAN_CFLAGS}") set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} ${COMPILER_ASAN_CFLAGS}")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${COMPILER_ASAN_CXXFLAGS}") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${COMPILER_ASAN_CXXFLAGS}")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${COMPILER_ASAN_CXXFLAGS}") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${COMPILER_ASAN_CXXFLAGS}")
endif()
if(MSVC) if(MSVC)
set(COMPILER_ASAN_LINKER_FLAGS "/FUNCTIONPADMIN:6") set(COMPILER_ASAN_LINKER_FLAGS "/FUNCTIONPADMIN:6")
endif() endif()
if(APPLE)
if(APPLE AND COMPILER_ASAN_LIBRARY) set(COMPILER_ASAN_LINKER_FLAGS "-fno-omit-frame-pointer -fsanitize=address")
string(REPLACE " " ";" _list_COMPILER_ASAN_CFLAGS ${COMPILER_ASAN_CFLAGS}) endif(APPLE)
add_compile_options("$<$<NOT:$<CONFIG:Release>>:${_list_COMPILER_ASAN_CFLAGS}>") if(COMPILER_ASAN_LIBRARY)
add_link_options("$<$<NOT:$<CONFIG:Release>>:-fno-omit-frame-pointer;-fsanitize=address>")
unset(_list_COMPILER_ASAN_CFLAGS)
elseif(COMPILER_ASAN_LIBRARY)
set(PLATFORM_LINKLIBS "${PLATFORM_LINKLIBS};${COMPILER_ASAN_LIBRARY}") set(PLATFORM_LINKLIBS "${PLATFORM_LINKLIBS};${COMPILER_ASAN_LIBRARY}")
set(PLATFORM_LINKFLAGS "${COMPILER_ASAN_LIBRARY} ${COMPILER_ASAN_LINKER_FLAGS}") set(PLATFORM_LINKFLAGS "${COMPILER_ASAN_LIBRARY} ${COMPILER_ASAN_LINKER_FLAGS}")
set(PLATFORM_LINKFLAGS_DEBUG "${COMPILER_ASAN_LIBRARY} ${COMPILER_ASAN_LINKER_FLAGS}") set(PLATFORM_LINKFLAGS_DEBUG "${COMPILER_ASAN_LIBRARY} ${COMPILER_ASAN_LINKER_FLAGS}")

View File

@@ -89,7 +89,7 @@ Spell Checkers
* check_spelling_osl: Check for spelling errors (OSL only). * check_spelling_osl: Check for spelling errors (OSL only).
* check_spelling_py: Check for spelling errors (Python only). * check_spelling_py: Check for spelling errors (Python only).
Note that spell checkers can take a 'CHECK_SPELLING_CACHE' filepath argument, Note that spell checkers can tak a 'CHECK_SPELLING_CACHE' filepath argument,
so re-running does not need to re-check unchanged files. so re-running does not need to re-check unchanged files.
Example: Example:
@@ -517,7 +517,7 @@ doc_py: .FORCE
ASAN_OPTIONS=halt_on_error=0 \ ASAN_OPTIONS=halt_on_error=0 \
$(BLENDER_BIN) --background -noaudio --factory-startup \ $(BLENDER_BIN) --background -noaudio --factory-startup \
--python doc/python_api/sphinx_doc_gen.py --python doc/python_api/sphinx_doc_gen.py
sphinx-build -b html -j $(NPROCS) doc/python_api/sphinx-in doc/python_api/sphinx-out cd doc/python_api ; sphinx-build -b html sphinx-in sphinx-out
@echo "docs written into: '$(BLENDER_DIR)/doc/python_api/sphinx-out/index.html'" @echo "docs written into: '$(BLENDER_DIR)/doc/python_api/sphinx-out/index.html'"
doc_doxy: .FORCE doc_doxy: .FORCE

View File

@@ -30,11 +30,11 @@
# build_deps 2015 x64 / build_deps 2015 x86 # build_deps 2015 x64 / build_deps 2015 x86
# #
# MAC OS X USAGE: # MAC OS X USAGE:
# Install with homebrew: brew install autoconf automake bison cmake libtool pkg-config yasm # Install with homebrew: brew install cmake autoconf automake libtool yasm nasm bison
# Run "make deps" from main Blender directory # Run "make deps" from main Blender directory
# #
# LINUX USAGE: # LINUX USAGE:
# Install compiler cmake autoconf automake libtool yasm tcl # Install compiler cmake autoconf automake libtool yasm nasm tcl
# Run "make deps" from main Blender directory # Run "make deps" from main Blender directory
# #
#################################################################################################### ####################################################################################################
@@ -75,8 +75,6 @@ include(cmake/llvm.cmake)
include(cmake/clang.cmake) include(cmake/clang.cmake)
if(APPLE) if(APPLE)
include(cmake/openmp.cmake) include(cmake/openmp.cmake)
endif()
if(UNIX)
include(cmake/nasm.cmake) include(cmake/nasm.cmake)
endif() endif()
include(cmake/openimageio.cmake) include(cmake/openimageio.cmake)
@@ -90,7 +88,6 @@ include(cmake/python_site_packages.cmake)
include(cmake/package_python.cmake) include(cmake/package_python.cmake)
include(cmake/numpy.cmake) include(cmake/numpy.cmake)
include(cmake/usd.cmake) include(cmake/usd.cmake)
include(cmake/potrace.cmake)
# Boost needs to be included after python.cmake due to the PYTHON_BINARY variable being needed. # Boost needs to be included after python.cmake due to the PYTHON_BINARY variable being needed.
include(cmake/boost.cmake) include(cmake/boost.cmake)
if(UNIX) if(UNIX)
@@ -117,6 +114,7 @@ if(WIN32)
include(cmake/yamlcpp.cmake) include(cmake/yamlcpp.cmake)
# LCMS is an OCIO dep, but only if you build the apps, leaving it here for convenience # LCMS is an OCIO dep, but only if you build the apps, leaving it here for convenience
# include(cmake/lcms.cmake) # include(cmake/lcms.cmake)
endif() endif()
if(NOT WIN32 OR ENABLE_MINGW64) if(NOT WIN32 OR ENABLE_MINGW64)

View File

@@ -26,11 +26,11 @@ if(UNIX)
set(_required_software set(_required_software
autoconf autoconf
automake automake
bison
${_libtoolize_name} ${_libtoolize_name}
pkg-config nasm
tclsh
yasm yasm
tclsh
bison
) )
foreach(_software ${_required_software}) foreach(_software ${_required_software})
@@ -54,10 +54,10 @@ if(UNIX)
" ${_software_missing}\n" " ${_software_missing}\n"
"\n" "\n"
"On Debian and Ubuntu:\n" "On Debian and Ubuntu:\n"
" apt install autoconf automake libtool yasm tcl\n" " apt install autoconf automake libtool yasm nasm tcl\n"
"\n" "\n"
"On macOS (with homebrew):\n" "On macOS (with homebrew):\n"
" brew install autoconf automake bison libtool pkg-config yasm\n" " brew install cmake autoconf automake libtool yasm nasm bison\n"
"\n" "\n"
"Other platforms:\n" "Other platforms:\n"
" Install equivalent packages.\n") " Install equivalent packages.\n")

View File

@@ -64,11 +64,3 @@ add_dependencies(
external_clang external_clang
ll ll
) )
# We currently do not build libxml2 on Windows.
if(NOT WIN32)
add_dependencies(
external_clang
external_xml2
)
endif()

View File

@@ -52,11 +52,6 @@ if(APPLE)
--target-os=darwin --target-os=darwin
--x86asmexe=${LIBDIR}/nasm/bin/nasm --x86asmexe=${LIBDIR}/nasm/bin/nasm
) )
elseif(UNIX)
set(FFMPEG_EXTRA_FLAGS
${FFMPEG_EXTRA_FLAGS}
--x86asmexe=${LIBDIR}/nasm/bin/nasm
)
endif() endif()
ExternalProject_Add(external_ffmpeg ExternalProject_Add(external_ffmpeg
@@ -147,7 +142,7 @@ if(WIN32)
external_zlib_mingw external_zlib_mingw
) )
endif() endif()
if(UNIX) if(APPLE)
add_dependencies( add_dependencies(
external_ffmpeg external_ffmpeg
external_nasm external_nasm

View File

@@ -20,29 +20,16 @@ set(GMP_EXTRA_ARGS -enable-cxx)
if(WIN32) if(WIN32)
# Shared for windows because static libs will drag in a libgcc dependency. # Shared for windows because static libs will drag in a libgcc dependency.
set(GMP_OPTIONS --disable-static --enable-shared --enable-fat --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32) set(GMP_OPTIONS --disable-static --enable-shared --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32)
else() else()
set(GMP_OPTIONS --enable-static --disable-shared ) set(GMP_OPTIONS --enable-static --disable-shared )
endif() endif()
if(APPLE) if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64"))
if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")
set(GMP_OPTIONS set(GMP_OPTIONS
${GMP_OPTIONS} ${GMP_OPTIONS}
--disable-assembly --disable-assembly
) )
else()
set(GMP_OPTIONS
${GMP_OPTIONS}
--with-pic
)
endif()
elseif(UNIX)
set(GMP_OPTIONS
${GMP_OPTIONS}
--with-pic
--enable-fat
)
endif() endif()
ExternalProject_Add(external_gmp ExternalProject_Add(external_gmp

View File

@@ -26,7 +26,6 @@ endif()
message("HARVEST_TARGET = ${HARVEST_TARGET}") message("HARVEST_TARGET = ${HARVEST_TARGET}")
if(WIN32) if(WIN32)
if(BUILD_MODE STREQUAL Release) if(BUILD_MODE STREQUAL Release)
add_custom_target(Harvest_Release_Results add_custom_target(Harvest_Release_Results
COMMAND # jpeg rename libfile + copy include COMMAND # jpeg rename libfile + copy include
@@ -146,9 +145,6 @@ harvest(openjpeg/lib openjpeg/lib "*.a")
harvest(opensubdiv/include opensubdiv/include "*.h") harvest(opensubdiv/include opensubdiv/include "*.h")
harvest(opensubdiv/lib opensubdiv/lib "*.a") harvest(opensubdiv/lib opensubdiv/lib "*.a")
harvest(openvdb/include/openvdb openvdb/include/openvdb "*.h") harvest(openvdb/include/openvdb openvdb/include/openvdb "*.h")
if(WITH_NANOVDB)
harvest(openvdb/nanovdb nanovdb/include/nanovdb "*.h")
endif()
harvest(openvdb/lib openvdb/lib "*.a") harvest(openvdb/lib openvdb/lib "*.a")
harvest(xr_openxr_sdk/include/openxr xr_openxr_sdk/include/openxr "*.h") harvest(xr_openxr_sdk/include/openxr xr_openxr_sdk/include/openxr "*.h")
harvest(xr_openxr_sdk/lib xr_openxr_sdk/lib "*.a") harvest(xr_openxr_sdk/lib xr_openxr_sdk/lib "*.a")
@@ -181,8 +177,6 @@ harvest(xvidcore/lib ffmpeg/lib "*.a")
harvest(usd/include usd/include "*.h") harvest(usd/include usd/include "*.h")
harvest(usd/lib/usd usd/lib/usd "*") harvest(usd/lib/usd usd/lib/usd "*")
harvest(usd/plugin usd/plugin "*") harvest(usd/plugin usd/plugin "*")
harvest(potrace/include potrace/include "*.h")
harvest(potrace/lib potrace/lib "*.a")
if(UNIX AND NOT APPLE) if(UNIX AND NOT APPLE)
harvest(libglu/lib mesa/lib "*.so*") harvest(libglu/lib mesa/lib "*.so*")

View File

@@ -43,7 +43,6 @@ set(ISPC_EXTRA_ARGS
-DLLVM_ROOT=${LIBDIR}/llvm/lib/cmake/llvm -DLLVM_ROOT=${LIBDIR}/llvm/lib/cmake/llvm
-DLLVM_LIBRARY_DIR=${LIBDIR}/llvm/lib -DLLVM_LIBRARY_DIR=${LIBDIR}/llvm/lib
-DCLANG_EXECUTABLE=${LIBDIR}/clang/bin/clang -DCLANG_EXECUTABLE=${LIBDIR}/clang/bin/clang
-DCLANGPP_EXECUTABLE=${LIBDIR}/clang/bin/clang++
-DISPC_INCLUDE_TESTS=Off -DISPC_INCLUDE_TESTS=Off
-DCLANG_LIBRARY_DIR=${LIBDIR}/clang/lib -DCLANG_LIBRARY_DIR=${LIBDIR}/clang/lib
-DCLANG_INCLUDE_DIRS=${LIBDIR}/clang/include -DCLANG_INCLUDE_DIRS=${LIBDIR}/clang/include

View File

@@ -59,4 +59,4 @@ else(WIN32)
) )
set(JPEG_LIBRARY libjpeg${LIBEXT}) set(JPEG_LIBRARY libjpeg${LIBEXT})
endif() endif(WIN32)

View File

@@ -54,20 +54,6 @@ set(OPENVDB_EXTRA_ARGS
-DOPENVDB_CORE_STATIC=${OPENVDB_STATIC} -DOPENVDB_CORE_STATIC=${OPENVDB_STATIC}
-DOPENVDB_BUILD_BINARIES=Off -DOPENVDB_BUILD_BINARIES=Off
-DCMAKE_DEBUG_POSTFIX=_d -DCMAKE_DEBUG_POSTFIX=_d
# NanoVDB is header-only, so only need the install target
-DNANOVDB_BUILD_UNITTESTS=OFF
-DNANOVDB_BUILD_EXAMPLES=OFF
-DNANOVDB_BUILD_BENCHMARK=OFF
-DNANOVDB_BUILD_DOCS=OFF
-DNANOVDB_BUILD_TOOLS=OFF
-DNANOVDB_CUDA_KEEP_PTX=OFF
-DNANOVDB_USE_OPENGL=OFF
-DNANOVDB_USE_OPENGL=OFF
-DNANOVDB_USE_CUDA=OFF
-DNANOVDB_USE_TBB=OFF
-DNANOVDB_USE_OPTIX=OFF
-DNANOVDB_USE_OPENVDB=OFF
-DNANOVDB_ALLOW_FETCHCONTENT=OFF
) )
if(WIN32) if(WIN32)
@@ -88,18 +74,12 @@ else()
) )
endif() endif()
if(WITH_NANOVDB)
set(OPENVDB_PATCH_FILE openvdb_nanovdb.diff)
else()
set(OPENVDB_PATCH_FILE openvdb.diff)
endif()
ExternalProject_Add(openvdb ExternalProject_Add(openvdb
URL ${OPENVDB_URI} URL ${OPENVDB_URI}
DOWNLOAD_DIR ${DOWNLOAD_DIR} DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH MD5=${OPENVDB_HASH} URL_HASH MD5=${OPENVDB_HASH}
PREFIX ${BUILD_DIR}/openvdb PREFIX ${BUILD_DIR}/openvdb
PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/openvdb/src/openvdb < ${PATCH_DIR}/${OPENVDB_PATCH_FILE} PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/openvdb/src/openvdb < ${PATCH_DIR}/openvdb.diff
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/openvdb ${DEFAULT_CMAKE_FLAGS} ${OPENVDB_EXTRA_ARGS} CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/openvdb ${DEFAULT_CMAKE_FLAGS} ${OPENVDB_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/openvdb INSTALL_DIR ${LIBDIR}/openvdb
) )
@@ -116,17 +96,11 @@ add_dependencies(
if(WIN32) if(WIN32)
if(BUILD_MODE STREQUAL Release) if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(openvdb after_install ExternalProject_Add_Step(openvdb after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/openvdb/include/openvdb ${HARVEST_TARGET}/openvdb/include/openvdb COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/openvdb/include ${HARVEST_TARGET}/openvdb/include
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openvdb/lib/openvdb.lib ${HARVEST_TARGET}/openvdb/lib/openvdb.lib COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openvdb/lib/openvdb.lib ${HARVEST_TARGET}/openvdb/lib/openvdb.lib
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openvdb/bin/openvdb.dll ${HARVEST_TARGET}/openvdb/bin/openvdb.dll COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openvdb/bin/openvdb.dll ${HARVEST_TARGET}/openvdb/bin/openvdb.dll
DEPENDEES install DEPENDEES install
) )
if(WITH_NANOVDB)
ExternalProject_Add_Step(openvdb nanovdb_install
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/openvdb/nanovdb ${HARVEST_TARGET}/nanovdb/include/nanovdb
DEPENDEES after_install
)
endif()
endif() endif()
if(BUILD_MODE STREQUAL Debug) if(BUILD_MODE STREQUAL Debug)
ExternalProject_Add_Step(openvdb after_install ExternalProject_Add_Step(openvdb after_install

View File

@@ -21,7 +21,6 @@ if(WIN32)
endif() endif()
option(WITH_WEBP "Enable building of oiio with webp support" OFF) option(WITH_WEBP "Enable building of oiio with webp support" OFF)
option(WITH_BOOST_PYTHON "Enable building of boost with python support" OFF) option(WITH_BOOST_PYTHON "Enable building of boost with python support" OFF)
option(WITH_NANOVDB "Enable building of OpenVDB with NanoVDB included" OFF)
set(MAKE_THREADS 1 CACHE STRING "Number of threads to run make with") set(MAKE_THREADS 1 CACHE STRING "Number of threads to run make with")
if(NOT BUILD_MODE) if(NOT BUILD_MODE)

View File

@@ -1,38 +0,0 @@
# ***** BEGIN GPL LICENSE BLOCK *****
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ***** END GPL LICENSE BLOCK *****
set(POTRACE_EXTRA_ARGS
)
if((WIN32 AND BUILD_MODE STREQUAL Release) OR UNIX)
ExternalProject_Add(external_potrace
URL ${POTRACE_URI}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH MD5=${POTRACE_HASH}
PREFIX ${BUILD_DIR}/potrace
PATCH_COMMAND ${CMAKE_COMMAND} -E copy ${PATCH_DIR}/cmakelists_potrace.txt ${BUILD_DIR}/potrace/src/external_potrace/CMakeLists.txt
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/potrace ${DEFAULT_CMAKE_FLAGS} ${POTRACE_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/potrace
)
if(WIN32)
ExternalProject_Add_Step(external_potrace after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/potrace ${HARVEST_TARGET}/potrace
DEPENDEES install
)
endif()
endif()

View File

@@ -145,15 +145,9 @@ set(TBB_VERSION 2019_U9)
set(TBB_URI https://github.com/oneapi-src/oneTBB/archive/${TBB_VERSION}.tar.gz) set(TBB_URI https://github.com/oneapi-src/oneTBB/archive/${TBB_VERSION}.tar.gz)
set(TBB_HASH 26263622e9187212ec240dcf01b66207) set(TBB_HASH 26263622e9187212ec240dcf01b66207)
if(WITH_NANOVDB) set(OPENVDB_VERSION 7.0.0)
set(OPENVDB_GIT_UID e62f7a0bf1e27397223c61ddeaaf57edf111b77f) set(OPENVDB_URI https://github.com/dreamworksanimation/openvdb/archive/v${OPENVDB_VERSION}.tar.gz)
set(OPENVDB_URI https://github.com/AcademySoftwareFoundation/openvdb/archive/${OPENVDB_GIT_UID}.tar.gz) set(OPENVDB_HASH fd6c4f168282f7e0e494d290cd531fa8)
set(OPENVDB_HASH 90919510bc6ccd630fedc56f748cb199)
else()
set(OPENVDB_VERSION 7.0.0)
set(OPENVDB_URI https://github.com/AcademySoftwareFoundation/openvdb/archive/v${OPENVDB_VERSION}.tar.gz)
set(OPENVDB_HASH fd6c4f168282f7e0e494d290cd531fa8)
endif()
set(IDNA_VERSION 2.9) set(IDNA_VERSION 2.9)
set(CHARDET_VERSION 3.0.4) set(CHARDET_VERSION 3.0.4)
@@ -299,9 +293,9 @@ set(USD_VERSION 20.05)
set(USD_URI https://github.com/PixarAnimationStudios/USD/archive/v${USD_VERSION}.tar.gz) set(USD_URI https://github.com/PixarAnimationStudios/USD/archive/v${USD_VERSION}.tar.gz)
set(USD_HASH 6d679e739e7f65725d9c029e37dda9fc) set(USD_HASH 6d679e739e7f65725d9c029e37dda9fc)
set(OIDN_VERSION 1.2.3) set(OIDN_VERSION 1.2.1)
set(OIDN_URI https://github.com/OpenImageDenoise/oidn/releases/download/v${OIDN_VERSION}/oidn-${OIDN_VERSION}.src.tar.gz) set(OIDN_URI https://github.com/OpenImageDenoise/oidn/releases/download/v${OIDN_VERSION}/oidn-${OIDN_VERSION}.src.tar.gz)
set(OIDN_HASH 1f11466c2c3efc27faba5ec7078d12b2) set(OIDN_HASH cbebc1a25eb6de62af3a59e943063608)
set(LIBGLU_VERSION 9.0.1) set(LIBGLU_VERSION 9.0.1)
set(LIBGLU_URI ftp://ftp.freedesktop.org/pub/mesa/glu/glu-${LIBGLU_VERSION}.tar.xz) set(LIBGLU_URI ftp://ftp.freedesktop.org/pub/mesa/glu/glu-${LIBGLU_VERSION}.tar.xz)
@@ -319,14 +313,10 @@ set(XR_OPENXR_SDK_VERSION 1.0.8)
set(XR_OPENXR_SDK_URI https://github.com/KhronosGroup/OpenXR-SDK/archive/release-${XR_OPENXR_SDK_VERSION}.tar.gz) set(XR_OPENXR_SDK_URI https://github.com/KhronosGroup/OpenXR-SDK/archive/release-${XR_OPENXR_SDK_VERSION}.tar.gz)
set(XR_OPENXR_SDK_HASH c6de63d2e0f9029aa58dfa97cad8ce07) set(XR_OPENXR_SDK_HASH c6de63d2e0f9029aa58dfa97cad8ce07)
set(ISPC_VERSION v1.14.1) set(ISPC_VERSION v1.13.0)
set(ISPC_URI https://github.com/ispc/ispc/archive/${ISPC_VERSION}.tar.gz) set(ISPC_URI https://github.com/ispc/ispc/archive/${ISPC_VERSION}.tar.gz)
set(ISPC_HASH 968fbc8dfd16a60ba4e32d2e0e03ea7a) set(ISPC_HASH 4bf5e8d0020c4b9980faa702c1a6f25f)
set(GMP_VERSION 6.2.0) set(GMP_VERSION 6.2.0)
set(GMP_URI https://gmplib.org/download/gmp/gmp-${GMP_VERSION}.tar.xz) set(GMP_URI https://gmplib.org/download/gmp/gmp-${GMP_VERSION}.tar.xz)
set(GMP_HASH a325e3f09e6d91e62101e59f9bda3ec1) set(GMP_HASH a325e3f09e6d91e62101e59f9bda3ec1)
set(POTRACE_VERSION 1.16)
set(POTRACE_URI http://potrace.sourceforge.net/download/${POTRACE_VERSION}/potrace-${POTRACE_VERSION}.tar.gz)
set(POTRACE_HASH 5f0bd87ddd9a620b0c4e65652ef93d69)

View File

@@ -34,12 +34,6 @@ else()
set(X264_CONFIGURE_ENV echo .) set(X264_CONFIGURE_ENV echo .)
endif() endif()
if(UNIX AND NOT APPLE)
set(X264_CONFIGURE_ENV
export AS=${LIBDIR}/nasm/bin/nasm
)
endif()
ExternalProject_Add(external_x264 ExternalProject_Add(external_x264
URL ${X264_URI} URL ${X264_URI}
DOWNLOAD_DIR ${DOWNLOAD_DIR} DOWNLOAD_DIR ${DOWNLOAD_DIR}
@@ -60,7 +54,7 @@ if(MSVC)
set_target_properties(external_x264 PROPERTIES FOLDER Mingw) set_target_properties(external_x264 PROPERTIES FOLDER Mingw)
endif() endif()
if(UNIX) if(APPLE)
add_dependencies( add_dependencies(
external_x264 external_x264
external_nasm external_nasm

View File

@@ -474,7 +474,7 @@ OPENVDB_BLOSC_VERSION="1.5.0"
OPENVDB_VERSION="7.0.0" OPENVDB_VERSION="7.0.0"
OPENVDB_VERSION_SHORT="7.0" OPENVDB_VERSION_SHORT="7.0"
OPENVDB_VERSION_MIN="7.0" OPENVDB_VERSION_MIN="7.0"
OPENVDB_VERSION_MAX="7.1" OPENVDB_VERSION_MAX="8.0"
OPENVDB_FORCE_BUILD=false OPENVDB_FORCE_BUILD=false
OPENVDB_FORCE_REBUILD=false OPENVDB_FORCE_REBUILD=false
OPENVDB_SKIP=false OPENVDB_SKIP=false
@@ -512,7 +512,7 @@ EMBREE_FORCE_BUILD=false
EMBREE_FORCE_REBUILD=false EMBREE_FORCE_REBUILD=false
EMBREE_SKIP=false EMBREE_SKIP=false
OIDN_VERSION="1.2.3" OIDN_VERSION="1.2.1"
OIDN_VERSION_SHORT="1.2" OIDN_VERSION_SHORT="1.2"
OIDN_VERSION_MIN="1.2.0" OIDN_VERSION_MIN="1.2.0"
OIDN_VERSION_MAX="1.3" OIDN_VERSION_MAX="1.3"
@@ -520,7 +520,7 @@ OIDN_FORCE_BUILD=false
OIDN_FORCE_REBUILD=false OIDN_FORCE_REBUILD=false
OIDN_SKIP=false OIDN_SKIP=false
ISPC_VERSION="1.14.1" ISPC_VERSION="1.14.0"
FFMPEG_VERSION="4.2.3" FFMPEG_VERSION="4.2.3"
FFMPEG_VERSION_SHORT="4.2" FFMPEG_VERSION_SHORT="4.2"
@@ -1087,7 +1087,7 @@ Those libraries should be available as packages in all recent distributions (opt
* libjpeg, libpng, libtiff, [openjpeg2], [libopenal]. * libjpeg, libpng, libtiff, [openjpeg2], [libopenal].
* libx11, libxcursor, libxi, libxrandr, libxinerama (and other libx... as needed). * libx11, libxcursor, libxi, libxrandr, libxinerama (and other libx... as needed).
* libsqlite3, libbz2, libssl, libfftw3, libxml2, libtinyxml, yasm, libyaml-cpp. * libsqlite3, libbz2, libssl, libfftw3, libxml2, libtinyxml, yasm, libyaml-cpp.
* libsdl2, libglew, libpugixml, libpotrace, [libgmp], [libglewmx], fontconfig.\"" * libsdl2, libglew, [libgmp], [libglewmx], fontconfig.\""
DEPS_SPECIFIC_INFO="\"BUILDABLE DEPENDENCIES: DEPS_SPECIFIC_INFO="\"BUILDABLE DEPENDENCIES:
@@ -1259,16 +1259,13 @@ version_match() {
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
# Generic compile helpers # Generic compile helpers
prepare_inst() { prepare_opt() {
INFO "Ensuring $INST exists and is writable by us" INFO "Ensuring $INST exists and is writable by us"
if [ ! $SUDO ]; then if [ ! $SUDO ]; then
WARNING "--no-sudo enabled, might be impossible to create install dir..." WARNING "--no-sudo enabled, might be impossible to create install dir..."
fi fi
if [ ! -d $INST ]; then if [ ! -d $INST ]; then
# Try to create normal user directory first to possibly avoid excessive $SUDO mkdir -p $INST
# system operations
mkdir -p $INST || $SUDO mkdir -p $INST
fi fi
if [ ! -w $INST ]; then if [ ! -w $INST ]; then
@@ -1369,7 +1366,7 @@ compile_Python() {
# Rebuild dependencies as well! # Rebuild dependencies as well!
_update_deps_python _update_deps_python
prepare_inst prepare_opt
if [ ! -d $_src ]; then if [ ! -d $_src ]; then
mkdir -p $SRC mkdir -p $SRC
@@ -1455,7 +1452,7 @@ compile_Numpy() {
# Rebuild dependencies as well! # Rebuild dependencies as well!
_update_deps_numpy _update_deps_numpy
prepare_inst prepare_opt
if [ ! -d $_src ]; then if [ ! -d $_src ]; then
mkdir -p $SRC mkdir -p $SRC
@@ -1544,7 +1541,7 @@ compile_Boost() {
# Rebuild dependencies as well! # Rebuild dependencies as well!
_update_deps_boost _update_deps_boost
prepare_inst prepare_opt
if [ ! -d $_src ]; then if [ ! -d $_src ]; then
INFO "Downloading Boost-$BOOST_VERSION" INFO "Downloading Boost-$BOOST_VERSION"
@@ -1638,7 +1635,7 @@ compile_TBB() {
# Rebuild dependencies as well! # Rebuild dependencies as well!
_update_deps_tbb _update_deps_tbb
prepare_inst prepare_opt
if [ ! -d $_src ]; then if [ ! -d $_src ]; then
INFO "Downloading TBB-$TBB_VERSION$TBB_VERSION_UPDATE" INFO "Downloading TBB-$TBB_VERSION$TBB_VERSION_UPDATE"
@@ -1755,7 +1752,7 @@ compile_OCIO() {
# Rebuild dependencies as well! # Rebuild dependencies as well!
_update_deps_ocio _update_deps_ocio
prepare_inst prepare_opt
if [ ! -d $_src ]; then if [ ! -d $_src ]; then
INFO "Downloading OpenColorIO-$OCIO_VERSION" INFO "Downloading OpenColorIO-$OCIO_VERSION"
@@ -1887,7 +1884,7 @@ compile_OPENEXR() {
# Rebuild dependencies as well! # Rebuild dependencies as well!
_update_deps_openexr _update_deps_openexr
prepare_inst prepare_opt
if [ ! -d $_src ]; then if [ ! -d $_src ]; then
INFO "Downloading OpenEXR-$OPENEXR_VERSION" INFO "Downloading OpenEXR-$OPENEXR_VERSION"
@@ -2013,7 +2010,7 @@ compile_OIIO() {
# Rebuild dependencies as well! # Rebuild dependencies as well!
_update_deps_oiio _update_deps_oiio
prepare_inst prepare_opt
if [ ! -d $_src ]; then if [ ! -d $_src ]; then
mkdir -p $SRC mkdir -p $SRC
@@ -2168,7 +2165,7 @@ compile_LLVM() {
# Rebuild dependencies as well! # Rebuild dependencies as well!
_update_deps_llvm _update_deps_llvm
prepare_inst prepare_opt
if [ ! -d $_src -o true ]; then if [ ! -d $_src -o true ]; then
mkdir -p $SRC mkdir -p $SRC
@@ -2278,7 +2275,7 @@ compile_OSL() {
# Rebuild dependencies as well! # Rebuild dependencies as well!
_update_deps_osl _update_deps_osl
prepare_inst prepare_opt
if [ ! -d $_src ]; then if [ ! -d $_src ]; then
mkdir -p $SRC mkdir -p $SRC
@@ -2422,7 +2419,7 @@ compile_OSD() {
# Rebuild dependencies as well! # Rebuild dependencies as well!
_update_deps_osd _update_deps_osd
prepare_inst prepare_opt
if [ ! -d $_src ]; then if [ ! -d $_src ]; then
mkdir -p $SRC mkdir -p $SRC
@@ -2540,7 +2537,7 @@ compile_BLOSC() {
# Rebuild dependencies as well! # Rebuild dependencies as well!
_update_deps_blosc _update_deps_blosc
prepare_inst prepare_opt
if [ ! -d $_src ]; then if [ ! -d $_src ]; then
INFO "Downloading Blosc-$OPENVDB_BLOSC_VERSION" INFO "Downloading Blosc-$OPENVDB_BLOSC_VERSION"
@@ -2639,7 +2636,7 @@ compile_OPENVDB() {
# Rebuild dependencies as well! # Rebuild dependencies as well!
_update_deps_openvdb _update_deps_openvdb
prepare_inst prepare_opt
if [ ! -d $_src -o true ]; then if [ ! -d $_src -o true ]; then
mkdir -p $SRC mkdir -p $SRC
@@ -2754,7 +2751,7 @@ compile_ALEMBIC() {
# Rebuild dependencies as well! # Rebuild dependencies as well!
_update_deps_alembic _update_deps_alembic
prepare_inst prepare_opt
if [ ! -d $_src ]; then if [ ! -d $_src ]; then
mkdir -p $SRC mkdir -p $SRC
@@ -2859,7 +2856,7 @@ compile_USD() {
# Rebuild dependencies as well! # Rebuild dependencies as well!
_update_deps_usd _update_deps_usd
prepare_inst prepare_opt
if [ ! -d $_src ]; then if [ ! -d $_src ]; then
mkdir -p $SRC mkdir -p $SRC
@@ -2958,7 +2955,7 @@ compile_OpenCOLLADA() {
# Rebuild dependencies as well! # Rebuild dependencies as well!
_update_deps_collada _update_deps_collada
prepare_inst prepare_opt
if [ ! -d $_src ]; then if [ ! -d $_src ]; then
mkdir -p $SRC mkdir -p $SRC
@@ -3064,7 +3061,7 @@ compile_Embree() {
# Rebuild dependencies as well! # Rebuild dependencies as well!
_update_deps_embree _update_deps_embree
prepare_inst prepare_opt
if [ ! -d $_src ]; then if [ ! -d $_src ]; then
mkdir -p $SRC mkdir -p $SRC
@@ -3174,7 +3171,7 @@ install_ISPC() {
# Rebuild dependencies as well! # Rebuild dependencies as well!
_update_deps_ispc _update_deps_ispc
prepare_inst prepare_opt
if [ ! -d $_src ]; then if [ ! -d $_src ]; then
mkdir -p $SRC mkdir -p $SRC
@@ -3253,7 +3250,7 @@ compile_OIDN() {
# Rebuild dependencies as well! # Rebuild dependencies as well!
_update_deps_oidn _update_deps_oidn
prepare_inst prepare_opt
if [ ! -d $_src ]; then if [ ! -d $_src ]; then
mkdir -p $SRC mkdir -p $SRC
@@ -3363,7 +3360,7 @@ compile_FFmpeg() {
# Rebuild dependencies as well! # Rebuild dependencies as well!
_update_deps_ffmpeg _update_deps_ffmpeg
prepare_inst prepare_opt
if [ ! -d $_src ]; then if [ ! -d $_src ]; then
INFO "Downloading ffmpeg-$FFMPEG_VERSION" INFO "Downloading ffmpeg-$FFMPEG_VERSION"
@@ -3492,7 +3489,7 @@ compile_XR_OpenXR_SDK() {
# Rebuild dependencies as well! # Rebuild dependencies as well!
_update_deps_xr_openxr_sdk _update_deps_xr_openxr_sdk
prepare_inst prepare_opt
if [ ! -d $_src ]; then if [ ! -d $_src ]; then
mkdir -p $SRC mkdir -p $SRC
@@ -3662,7 +3659,7 @@ install_DEB() {
libbz2-dev libncurses5-dev libssl-dev liblzma-dev libreadline-dev \ libbz2-dev libncurses5-dev libssl-dev liblzma-dev libreadline-dev \
libopenal-dev libglew-dev yasm $THEORA_DEV $VORBIS_DEV $OGG_DEV \ libopenal-dev libglew-dev yasm $THEORA_DEV $VORBIS_DEV $OGG_DEV \
libsdl2-dev libfftw3-dev patch bzip2 libxml2-dev libtinyxml-dev libjemalloc-dev \ libsdl2-dev libfftw3-dev patch bzip2 libxml2-dev libtinyxml-dev libjemalloc-dev \
libgmp-dev libpugixml-dev libpotrace-dev" libgmp-dev"
# libglewmx-dev (broken in deb testing currently...) # libglewmx-dev (broken in deb testing currently...)
VORBIS_USE=true VORBIS_USE=true
@@ -3958,7 +3955,7 @@ install_DEB() {
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
install_packages_DEB llvm-dev clang install_packages_DEB llvm-dev clang
have_llvm=true have_llvm=true
LLVM_VERSION=`llvm-config --version` LLVM_VERSION=`get_package_version_DEB llvm-dev`
LLVM_VERSION_FOUND=$LLVM_VERSION LLVM_VERSION_FOUND=$LLVM_VERSION
clean_LLVM clean_LLVM
else else
@@ -4328,8 +4325,7 @@ install_RPM() {
libX11-devel libXi-devel libXcursor-devel libXrandr-devel libXinerama-devel \ libX11-devel libXi-devel libXcursor-devel libXrandr-devel libXinerama-devel \
wget ncurses-devel readline-devel $OPENJPEG_DEV openal-soft-devel \ wget ncurses-devel readline-devel $OPENJPEG_DEV openal-soft-devel \
glew-devel yasm $THEORA_DEV $VORBIS_DEV $OGG_DEV patch \ glew-devel yasm $THEORA_DEV $VORBIS_DEV $OGG_DEV patch \
libxml2-devel yaml-cpp-devel tinyxml-devel jemalloc-devel \ libxml2-devel yaml-cpp-devel tinyxml-devel jemalloc-devel gmp-devel"
gmp-devel pugixml-devel potrace-devel"
OPENJPEG_USE=true OPENJPEG_USE=true
VORBIS_USE=true VORBIS_USE=true
@@ -4607,7 +4603,7 @@ install_RPM() {
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
install_packages_RPM llvm-devel $CLANG_DEV install_packages_RPM llvm-devel $CLANG_DEV
have_llvm=true have_llvm=true
LLVM_VERSION=`llvm-config --version` LLVM_VERSION=`get_package_version_RPM llvm-devel`
LLVM_VERSION_FOUND=$LLVM_VERSION LLVM_VERSION_FOUND=$LLVM_VERSION
clean_LLVM clean_LLVM
else else
@@ -4905,7 +4901,7 @@ install_ARCH() {
_packages="$BASE_DEVEL git cmake fontconfig \ _packages="$BASE_DEVEL git cmake fontconfig \
libxi libxcursor libxrandr libxinerama glew libpng libtiff wget openal \ libxi libxcursor libxrandr libxinerama glew libpng libtiff wget openal \
$OPENJPEG_DEV $VORBIS_DEV $OGG_DEV $THEORA_DEV yasm sdl2 fftw \ $OPENJPEG_DEV $VORBIS_DEV $OGG_DEV $THEORA_DEV yasm sdl2 fftw \
libxml2 yaml-cpp tinyxml python-requests jemalloc gmp potrace pugixml" libxml2 yaml-cpp tinyxml python-requests jemalloc gmp"
OPENJPEG_USE=true OPENJPEG_USE=true
VORBIS_USE=true VORBIS_USE=true
@@ -5129,7 +5125,7 @@ install_ARCH() {
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
install_packages_ARCH llvm clang install_packages_ARCH llvm clang
have_llvm=true have_llvm=true
LLVM_VERSION=`llvm-config --version` LLVM_VERSION=`get_package_version_ARCH llvm`
LLVM_VERSION_FOUND=$LLVM_VERSION LLVM_VERSION_FOUND=$LLVM_VERSION
clean_LLVM clean_LLVM
else else

View File

@@ -1,54 +0,0 @@
project(potrace)
cmake_minimum_required(VERSION 2.8)
include_directories(src/include)
set(SOURCES
src/backend_dxf.c
src/backend_eps.c
src/backend_geojson.c
src/backend_pdf.c
src/backend_pgm.c
src/backend_svg.c
src/backend_xfig.c
src/bbox.c
src/bitmap_io.c
src/curve.c
src/decompose.c
src/flate.c
src/greymap.c
src/lzw.c
src/potracelib.c
src/progress_bar.c
src/render.c
src/trace.c
src/trans.c
)
set(HEADERS
src/potracelib.h
)
if(WIN32)
add_definitions(/D_USE_MATH_DEFINES)
endif()
add_definitions(/DPOTRACE="POTrace")
add_definitions(/DVERSION="Blender")
add_definitions(/DHAVE_INTTYPES_H)
add_library(${PROJECT_NAME} STATIC ${HEADERS} ${SOURCES})
set_target_properties(${PROJECT_NAME} PROPERTIES
LIBRARY_OUTPUT_NAME "${PROJECT_NAME}"
PUBLIC_HEADER "${HEADERS}"
)
install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
PUBLIC_HEADER DESTINATION include
)

View File

@@ -19,16 +19,16 @@ diff -Naur orig/CMakeLists.txt external_ispc/CMakeLists.txt
target_include_directories(${PROJECT_NAME} PRIVATE target_include_directories(${PROJECT_NAME} PRIVATE
- ${LLVM_INCLUDE_DIRS} - ${LLVM_INCLUDE_DIRS}
+ ${LLVM_INCLUDE_DIRS} ${CLANG_INCLUDE_DIRS} + ${LLVM_INCLUDE_DIRS} ${CLANG_INCLUDE_DIRS}
${GENX_DEPS_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR}/src
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}) ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR})
# Compile options
diff -Naur orig/cmake/GenerateBuiltins.cmake.txt external_ispc/cmake/GenerateBuiltins.cmake.txt diff -Naur orig/cmake/GenerateBuiltins.cmake.txt external_ispc/cmake/GenerateBuiltins.cmake.txt
+++ orig/cmake/GenerateBuiltins.cmake 2020-05-25 13:32:40.830803821 +0200 +++ orig/cmake/GenerateBuiltins.cmake 2020-05-25 13:32:40.830803821 +0200
+++ external_ispc/cmake/GenerateBuiltins.cmake 2020-05-25 13:32:40.830803821 +0200 +++ external_ispc/cmake/GenerateBuiltins.cmake 2020-05-25 13:32:40.830803821 +0200
@@ -97,6 +97,8 @@ @@ -97,6 +97,8 @@
if ("${bit}" STREQUAL "32" AND ${arch} STREQUAL "x86") if ("${bit}" STREQUAL "32" AND ${arch} STREQUAL "x86")
set(target_arch "i686") set(target_arch "i386")
+ # Blender: disable 32bit due to build issues on Linux and being unnecessary. + # Blender: disable 32bit due to build issues on Linux and being unnecessary.
+ set(SKIP ON) + set(SKIP ON)
elseif ("${bit}" STREQUAL "64" AND ${arch} STREQUAL "x86") elseif ("${bit}" STREQUAL "64" AND ${arch} STREQUAL "x86")

View File

@@ -1,135 +0,0 @@
diff -Naur orig/cmake/FindIlmBase.cmake openvdb/cmake/FindIlmBase.cmake
--- orig/cmake/FindIlmBase.cmake 2019-12-06 12:11:33 -0700
+++ openvdb/cmake/FindIlmBase.cmake 2020-08-12 12:48:44 -0600
@@ -217,6 +217,8 @@
set(CMAKE_FIND_LIBRARY_SUFFIXES ".lib")
endif()
list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES "${_IlmBase_Version_Suffix}.lib")
+ list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES "_s.lib")
+ list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES "_s_d.lib")
else()
if(ILMBASE_USE_STATIC_LIBS)
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
diff -Naur orig/cmake/FindOpenEXR.cmake openvdb/cmake/FindOpenEXR.cmake
--- orig/cmake/FindOpenEXR.cmake 2019-12-06 12:11:33 -0700
+++ openvdb/cmake/FindOpenEXR.cmake 2020-08-12 12:48:44 -0600
@@ -210,6 +210,8 @@
set(CMAKE_FIND_LIBRARY_SUFFIXES ".lib")
endif()
list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES "${_OpenEXR_Version_Suffix}.lib")
+ list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES "_s.lib")
+ list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES "_s_d.lib")
else()
if(OPENEXR_USE_STATIC_LIBS)
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
diff -Naur orig/openvdb/openvdb/CMakeLists.txt openvdb/openvdb/openvdb/CMakeLists.txt
--- orig/openvdb/openvdb/CMakeLists.txt 2019-12-06 12:11:33 -0700
+++ openvdb/openvdb/openvdb/CMakeLists.txt 2020-08-12 14:12:26 -0600
@@ -105,7 +105,9 @@
# http://boost.2283326.n4.nabble.com/CMake-config-scripts-broken-in-1-70-td4708957.html
# https://github.com/boostorg/boost_install/commit/160c7cb2b2c720e74463865ef0454d4c4cd9ae7c
set(BUILD_SHARED_LIBS ON)
- set(Boost_USE_STATIC_LIBS OFF)
+ if(NOT WIN32) # blender links boost statically on windows
+ set(Boost_USE_STATIC_LIBS OFF)
+ endif()
endif()
find_package(Boost ${MINIMUM_BOOST_VERSION} REQUIRED COMPONENTS iostreams system)
@@ -193,6 +195,7 @@
if(OPENVDB_DISABLE_BOOST_IMPLICIT_LINKING)
add_definitions(-DBOOST_ALL_NO_LIB)
endif()
+ add_definitions(-D__TBB_NO_IMPLICIT_LINKAGE -DOPENVDB_OPENEXR_STATICLIB)
endif()
# @todo Should be target definitions
@@ -383,7 +386,12 @@
# imported targets.
if(OPENVDB_CORE_SHARED)
- add_library(openvdb_shared SHARED ${OPENVDB_LIBRARY_SOURCE_FILES})
+ if(WIN32)
+ configure_file(version.rc.in ${CMAKE_CURRENT_BINARY_DIR}/version.rc @ONLY)
+ add_library(openvdb_shared SHARED ${OPENVDB_LIBRARY_SOURCE_FILES} ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
+ else()
+ add_library(openvdb_shared SHARED ${OPENVDB_LIBRARY_SOURCE_FILES})
+ endif()
endif()
if(OPENVDB_CORE_STATIC)
diff -Naur orig/openvdb/openvdb/version.rc.in openvdb/openvdb/openvdb/version.rc.in
--- orig/openvdb/openvdb/version.rc.in 1969-12-31 17:00:00 -0700
+++ openvdb/openvdb/openvdb/version.rc.in 2020-08-12 14:15:01 -0600
@@ -0,0 +1,48 @@
+#include <winver.h>
+
+#define VER_FILEVERSION @OpenVDB_MAJOR_VERSION@,@OpenVDB_MINOR_VERSION@,@OpenVDB_PATCH_VERSION@,0
+#define VER_FILEVERSION_STR "@OpenVDB_MAJOR_VERSION@.@OpenVDB_MINOR_VERSION@.@OpenVDB_PATCH_VERSION@.0\0"
+
+#define VER_PRODUCTVERSION @OpenVDB_MAJOR_VERSION@,@OpenVDB_MINOR_VERSION@,@OpenVDB_PATCH_VERSION@,0
+#define VER_PRODUCTVERSION_STR "@OpenVDB_MAJOR_VERSION@.@OpenVDB_MINOR_VERSION@\0"
+
+#ifndef DEBUG
+#define VER_DEBUG 0
+#else
+#define VER_DEBUG VS_FF_DEBUG
+#endif
+
+VS_VERSION_INFO VERSIONINFO
+FILEVERSION VER_FILEVERSION
+PRODUCTVERSION VER_PRODUCTVERSION
+FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
+FILEFLAGS (VER_DEBUG)
+FILEOS VOS__WINDOWS32
+FILETYPE VFT_DLL
+FILESUBTYPE VFT2_UNKNOWN
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904E4"
+ BEGIN
+ VALUE "FileDescription", "OpenVDB"
+ VALUE "FileVersion", VER_FILEVERSION_STR
+ VALUE "InternalName", "OpenVDB"
+ VALUE "ProductName", "OpenVDB"
+ VALUE "ProductVersion", VER_PRODUCTVERSION_STR
+ END
+ END
+
+ BLOCK "VarFileInfo"
+ BEGIN
+ /* The following line should only be modified for localized versions. */
+ /* It consists of any number of WORD,WORD pairs, with each pair */
+ /* describing a language,codepage combination supported by the file. */
+ /* */
+ /* For example, a file might have values "0x409,1252" indicating that it */
+ /* supports English language (0x409) in the Windows ANSI codepage (1252). */
+
+ VALUE "Translation", 0x409, 1252
+
+ END
+END
diff -Naur openvdb-original/CMakeLists.txt openvdb/CMakeLists.txt
--- openvdb-original/CMakeLists.txt 2020-08-27 03:34:02.000000000 +0200
+++ openvdb/CMakeLists.txt 2020-09-02 10:56:21.665735244 +0200
@@ -68,6 +68,7 @@
option(OPENVDB_INSTALL_HOUDINI_PYTHONRC [=[Install a Houdini startup script that sets
the visibilty of OpenVDB nodes and their native equivalents.]=] OFF)
option(OPENVDB_BUILD_MAYA_PLUGIN "Build the Maya plugin" OFF)
+option(OPENVDB_BUILD_NANOVDB "Build nanovdb" ON)
option(OPENVDB_ENABLE_RPATH "Build with RPATH information" ON)
option(OPENVDB_CXX_STRICT "Enable or disable pre-defined compiler warnings" OFF)
option(OPENVDB_CODE_COVERAGE "Enable code coverage. This also overrides CMAKE_BUILD_TYPE to Debug" OFF)
@@ -740,6 +741,10 @@
add_subdirectory(openvdb_maya)
endif()
+if(OPENVDB_BUILD_NANOVDB)
+ add_subdirectory(nanovdb)
+endif()
+
##########################################################################
add_custom_target(uninstall

View File

@@ -24,7 +24,6 @@ import re
import subprocess import subprocess
import sys import sys
def is_tool(name): def is_tool(name):
"""Check whether `name` is on PATH and marked as executable.""" """Check whether `name` is on PATH and marked as executable."""
@@ -33,7 +32,6 @@ def is_tool(name):
return which(name) is not None return which(name) is not None
class Builder: class Builder:
def __init__(self, name, branch, codesign): def __init__(self, name, branch, codesign):
self.name = name self.name = name
@@ -66,7 +64,6 @@ class Builder:
# Always 64 bit now # Always 64 bit now
self.bits = 64 self.bits = 64
def create_builder_from_arguments(): def create_builder_from_arguments():
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument('builder_name') parser.add_argument('builder_name')
@@ -107,7 +104,7 @@ class VersionInfo:
def _parse_header_file(self, filename, define): def _parse_header_file(self, filename, define):
import re import re
regex = re.compile(r"^#\s*define\s+%s\s+(.*)" % define) regex = re.compile("^#\s*define\s+%s\s+(.*)" % define)
with open(filename, "r") as file: with open(filename, "r") as file:
for l in file: for l in file:
match = regex.match(l) match = regex.match(l)

View File

@@ -23,7 +23,6 @@ import shutil
import buildbot_utils import buildbot_utils
def get_cmake_options(builder): def get_cmake_options(builder):
codesign_script = os.path.join( codesign_script = os.path.join(
builder.blender_dir, 'build_files', 'buildbot', 'worker_codesign.cmake') builder.blender_dir, 'build_files', 'buildbot', 'worker_codesign.cmake')
@@ -45,24 +44,11 @@ def get_cmake_options(builder):
optix_sdk_dir = os.path.join(builder.blender_dir, '..', '..', 'NVIDIA-Optix-SDK') optix_sdk_dir = os.path.join(builder.blender_dir, '..', '..', 'NVIDIA-Optix-SDK')
options.append('-DOPTIX_ROOT_DIR:PATH=' + optix_sdk_dir) options.append('-DOPTIX_ROOT_DIR:PATH=' + optix_sdk_dir)
# Workaround to build sm_30 kernels with CUDA 10, since CUDA 11 no longer supports that architecture
if builder.platform == 'win':
options.append('-DCUDA10_TOOLKIT_ROOT_DIR:PATH=C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1')
options.append('-DCUDA10_NVCC_EXECUTABLE:FILEPATH=C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1/bin/nvcc.exe')
options.append('-DCUDA11_TOOLKIT_ROOT_DIR:PATH=C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.1')
options.append('-DCUDA11_NVCC_EXECUTABLE:FILEPATH=C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.1/bin/nvcc.exe')
elif builder.platform == 'linux':
options.append('-DCUDA10_TOOLKIT_ROOT_DIR:PATH=/usr/local/cuda-10.1')
options.append('-DCUDA10_NVCC_EXECUTABLE:FILEPATH=/usr/local/cuda-10.1/bin/nvcc')
options.append('-DCUDA11_TOOLKIT_ROOT_DIR:PATH=/usr/local/cuda-11.1')
options.append('-DCUDA11_NVCC_EXECUTABLE:FILEPATH=/usr/local/cuda-11.1/bin/nvcc')
options.append("-C" + os.path.join(builder.blender_dir, config_file)) options.append("-C" + os.path.join(builder.blender_dir, config_file))
options.append("-DCMAKE_INSTALL_PREFIX=%s" % (builder.install_dir)) options.append("-DCMAKE_INSTALL_PREFIX=%s" % (builder.install_dir))
return options return options
def update_git(builder): def update_git(builder):
# Do extra git fetch because not all platform/git/buildbot combinations # Do extra git fetch because not all platform/git/buildbot combinations
# update the origin remote, causing buildinfo to detect local changes. # update the origin remote, causing buildinfo to detect local changes.
@@ -72,7 +58,6 @@ def update_git(builder):
command = ['git', 'fetch', '--all'] command = ['git', 'fetch', '--all']
buildbot_utils.call(builder.command_prefix + command) buildbot_utils.call(builder.command_prefix + command)
def clean_directories(builder): def clean_directories(builder):
# Make sure no garbage remained from the previous run # Make sure no garbage remained from the previous run
if os.path.isdir(builder.install_dir): if os.path.isdir(builder.install_dir):
@@ -88,7 +73,6 @@ def clean_directories(builder):
print("Removing {}" . format(buildinfo)) print("Removing {}" . format(buildinfo))
os.remove(full_path) os.remove(full_path)
def cmake_configure(builder): def cmake_configure(builder):
# CMake configuration # CMake configuration
os.chdir(builder.build_dir) os.chdir(builder.build_dir)
@@ -103,7 +87,6 @@ def cmake_configure(builder):
command = ['cmake', builder.blender_dir] + cmake_options command = ['cmake', builder.blender_dir] + cmake_options
buildbot_utils.call(builder.command_prefix + command) buildbot_utils.call(builder.command_prefix + command)
def cmake_build(builder): def cmake_build(builder):
# CMake build # CMake build
os.chdir(builder.build_dir) os.chdir(builder.build_dir)
@@ -126,7 +109,6 @@ def cmake_build(builder):
print("CMake build:") print("CMake build:")
buildbot_utils.call(builder.command_prefix + command) buildbot_utils.call(builder.command_prefix + command)
if __name__ == "__main__": if __name__ == "__main__":
builder = buildbot_utils.create_builder_from_arguments() builder = buildbot_utils.create_builder_from_arguments()
update_git(builder) update_git(builder)

View File

@@ -29,7 +29,6 @@ from pathlib import Path
import buildbot_utils import buildbot_utils
def get_package_name(builder, platform=None): def get_package_name(builder, platform=None):
info = buildbot_utils.VersionInfo(builder) info = buildbot_utils.VersionInfo(builder)
@@ -42,7 +41,6 @@ def get_package_name(builder, platform=None):
return package_name return package_name
def sign_file_or_directory(path): def sign_file_or_directory(path):
from codesign.simple_code_signer import SimpleCodeSigner from codesign.simple_code_signer import SimpleCodeSigner
code_signer = SimpleCodeSigner() code_signer = SimpleCodeSigner()
@@ -66,7 +64,6 @@ def create_buildbot_upload_zip(builder, package_files):
sys.stderr.write('Create buildbot_upload.zip failed: ' + str(ex) + '\n') sys.stderr.write('Create buildbot_upload.zip failed: ' + str(ex) + '\n')
sys.exit(1) sys.exit(1)
def create_tar_xz(src, dest, package_name): def create_tar_xz(src, dest, package_name):
# One extra to remove leading os.sep when cleaning root for package_root # One extra to remove leading os.sep when cleaning root for package_root
ln = len(src) + 1 ln = len(src) + 1
@@ -94,7 +91,6 @@ def create_tar_xz(src, dest, package_name):
package.add(entry[0], entry[1], recursive=False, filter=_fakeroot) package.add(entry[0], entry[1], recursive=False, filter=_fakeroot)
package.close() package.close()
def cleanup_files(dirpath, extension): def cleanup_files(dirpath, extension):
for f in os.listdir(dirpath): for f in os.listdir(dirpath):
filepath = os.path.join(dirpath, f) filepath = os.path.join(dirpath, f)
@@ -175,11 +171,7 @@ def pack_linux(builder):
print("Stripping python...") print("Stripping python...")
py_target = os.path.join(builder.install_dir, info.short_version) py_target = os.path.join(builder.install_dir, info.short_version)
buildbot_utils.call( buildbot_utils.call(builder.command_prefix + ['find', py_target, '-iname', '*.so', '-exec', 'strip', '-s', '{}', ';'])
builder.command_prefix + [
'find', py_target, '-iname', '*.so', '-exec', 'strip', '-s', '{}', ';',
],
)
# Construct package name # Construct package name
platform_name = 'linux64' platform_name = 'linux64'

View File

@@ -22,21 +22,18 @@ import buildbot_utils
import os import os
import sys import sys
def get_ctest_arguments(builder): def get_ctest_arguments(builder):
args = ['--output-on-failure'] args = ['--output-on-failure']
if builder.platform == 'win': if builder.platform == 'win':
args += ['-C', 'Release'] args += ['-C', 'Release']
return args return args
def test(builder): def test(builder):
os.chdir(builder.build_dir) os.chdir(builder.build_dir)
command = builder.command_prefix + ['ctest'] + get_ctest_arguments(builder) command = builder.command_prefix + ['ctest'] + get_ctest_arguments(builder)
buildbot_utils.call(command) buildbot_utils.call(command)
if __name__ == "__main__": if __name__ == "__main__":
builder = buildbot_utils.create_builder_from_arguments() builder = buildbot_utils.create_builder_from_arguments()
test(builder) test(builder)

View File

@@ -52,7 +52,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(Alembic DEFAULT_MSG ALEMBIC_LIBRARY ALEMBIC_IN
IF(ALEMBIC_FOUND) IF(ALEMBIC_FOUND)
SET(ALEMBIC_LIBRARIES ${ALEMBIC_LIBRARY}) SET(ALEMBIC_LIBRARIES ${ALEMBIC_LIBRARY})
SET(ALEMBIC_INCLUDE_DIRS ${ALEMBIC_INCLUDE_DIR}) SET(ALEMBIC_INCLUDE_DIRS ${ALEMBIC_INCLUDE_DIR})
ENDIF() ENDIF(ALEMBIC_FOUND)
MARK_AS_ADVANCED( MARK_AS_ADVANCED(
ALEMBIC_INCLUDE_DIR ALEMBIC_INCLUDE_DIR

View File

@@ -30,7 +30,7 @@ SET(_audaspace_SEARCH_DIRS
FIND_PACKAGE(PkgConfig) FIND_PACKAGE(PkgConfig)
IF(PKG_CONFIG_FOUND) IF(PKG_CONFIG_FOUND)
PKG_CHECK_MODULES(AUDASPACE_PKGCONF audaspace) PKG_CHECK_MODULES(AUDASPACE_PKGCONF audaspace)
ENDIF() ENDIF(PKG_CONFIG_FOUND)
# Include dir # Include dir
FIND_PATH(AUDASPACE_INCLUDE_DIR FIND_PATH(AUDASPACE_INCLUDE_DIR
@@ -88,17 +88,17 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(Audaspace_Py DEFAULT_MSG AUDASPACE_PY_LIBRAR
IF(AUDASPACE_FOUND) IF(AUDASPACE_FOUND)
SET(AUDASPACE_LIBRARIES ${AUDASPACE_LIBRARY}) SET(AUDASPACE_LIBRARIES ${AUDASPACE_LIBRARY})
SET(AUDASPACE_INCLUDE_DIRS ${AUDASPACE_INCLUDE_DIR}) SET(AUDASPACE_INCLUDE_DIRS ${AUDASPACE_INCLUDE_DIR})
ENDIF() ENDIF(AUDASPACE_FOUND)
IF(AUDASPACE_C_FOUND) IF(AUDASPACE_C_FOUND)
SET(AUDASPACE_C_LIBRARIES ${AUDASPACE_C_LIBRARY}) SET(AUDASPACE_C_LIBRARIES ${AUDASPACE_C_LIBRARY})
SET(AUDASPACE_C_INCLUDE_DIRS ${AUDASPACE_C_INCLUDE_DIR}) SET(AUDASPACE_C_INCLUDE_DIRS ${AUDASPACE_C_INCLUDE_DIR})
ENDIF() ENDIF(AUDASPACE_C_FOUND)
IF(AUDASPACE_PY_FOUND) IF(AUDASPACE_PY_FOUND)
SET(AUDASPACE_PY_LIBRARIES ${AUDASPACE_PY_LIBRARY}) SET(AUDASPACE_PY_LIBRARIES ${AUDASPACE_PY_LIBRARY})
SET(AUDASPACE_PY_INCLUDE_DIRS ${AUDASPACE_PY_INCLUDE_DIR}) SET(AUDASPACE_PY_INCLUDE_DIRS ${AUDASPACE_PY_INCLUDE_DIR})
ENDIF() ENDIF(AUDASPACE_PY_FOUND)
MARK_AS_ADVANCED( MARK_AS_ADVANCED(
AUDASPACE_LIBRARY AUDASPACE_LIBRARY

View File

@@ -41,7 +41,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(Eigen3 DEFAULT_MSG
IF(EIGEN3_FOUND) IF(EIGEN3_FOUND)
SET(EIGEN3_INCLUDE_DIRS ${EIGEN3_INCLUDE_DIR}) SET(EIGEN3_INCLUDE_DIRS ${EIGEN3_INCLUDE_DIR})
ENDIF() ENDIF(EIGEN3_FOUND)
MARK_AS_ADVANCED( MARK_AS_ADVANCED(
EIGEN3_INCLUDE_DIR EIGEN3_INCLUDE_DIR

View File

@@ -37,9 +37,9 @@ FIND_PATH(EMBREE_INCLUDE_DIR
SET(_embree_FIND_COMPONENTS SET(_embree_FIND_COMPONENTS
embree3 embree3
embree_sse42
embree_avx embree_avx
embree_avx2 embree_avx2
embree_sse42
lexers lexers
math math
simd simd
@@ -80,7 +80,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(Embree DEFAULT_MSG
IF(EMBREE_FOUND) IF(EMBREE_FOUND)
SET(EMBREE_LIBRARIES ${_embree_LIBRARIES}) SET(EMBREE_LIBRARIES ${_embree_LIBRARIES})
SET(EMBREE_INCLUDE_DIRS ${EMBREE_INCLUDE_DIR}) SET(EMBREE_INCLUDE_DIRS ${EMBREE_INCLUDE_DIR})
ENDIF() ENDIF(EMBREE_FOUND)
MARK_AS_ADVANCED( MARK_AS_ADVANCED(
EMBREE_INCLUDE_DIR EMBREE_INCLUDE_DIR

View File

@@ -1,83 +0,0 @@
# - Find FFmpeg library and includes.
# Set FFMPEG_FIND_COMPONENTS to the canonical names of the libraries
# before using the module.
# This module defines
# FFMPEG_INCLUDE_DIRS, where to find libavcodec/ac3_parser.h.
# FFMPEG_LIBRARIES, libraries to link against to use FFmpeg.
# FFMPEG_ROOT_DIR, The base directory to search for FFmpeg.
# This can also be an environment variable.
# FFMPEG_FOUND, If false, do not try to use FFmpeg.
# FFMPEG_<COMPONENT>_LIBRARY, the given individual component libraries.
#=============================================================================
# Copyright 2020 Blender Foundation.
#
# Distributed under the OSI-approved BSD 3-Clause License,
# see accompanying file BSD-3-Clause-license.txt for details.
#=============================================================================
# If FFMPEG_ROOT_DIR was defined in the environment, use it.
if(NOT FFMPEG_ROOT_DIR AND NOT $ENV{FFMPEG_ROOT_DIR} STREQUAL "")
set(FFMPEG_ROOT_DIR $ENV{FFMPEG_ROOT_DIR})
endif()
set(_ffmpeg_SEARCH_DIRS
${FFMPEG_ROOT_DIR}
/opt/lib/ffmpeg
)
if(NOT FFMPEG_FIND_COMPONENTS)
set(FFMPEG_FIND_COMPONENTS
# List taken from http://ffmpeg.org/download.html#build-mac
avcodec
avdevice
avfilter
avformat
avutil
)
endif()
find_path(_ffmpeg_INCLUDE_DIR
NAMES
libavcodec/ac3_parser.h
HINTS
${_ffmpeg_SEARCH_DIRS}
PATH_SUFFIXES
include
)
set(_ffmpeg_LIBRARIES)
foreach(_component ${FFMPEG_FIND_COMPONENTS})
string(TOUPPER ${_component} _upper_COMPONENT)
find_library(FFMPEG_${_upper_COMPONENT}_LIBRARY
NAMES
${_upper_COMPONENT}
HINTS
${LIBDIR}/ffmpeg
PATH_SUFFIXES
lib64 lib
)
if(NOT FFMPEG_${_upper_COMPONENT}_LIBRARY)
message(WARNING "Could NOT find FFmpeg ${_upper_COMPONENT}.")
endif()
list(APPEND _ffmpeg_LIBRARIES ${FFMPEG_${_upper_COMPONENT}_LIBRARY})
mark_as_advanced(FFMPEG_${_upper_COMPONENT}_LIBRARY)
endforeach()
# handle the QUIETLY and REQUIRED arguments and set FFMPEG_FOUND to TRUE if
# all listed variables are TRUE
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(FFmpeg DEFAULT_MSG
_ffmpeg_LIBRARIES _ffmpeg_INCLUDE_DIR)
IF(FFMPEG_FOUND)
set(FFMPEG_LIBRARIES ${_ffmpeg_LIBRARIES})
set(FFMPEG_INCLUDE_DIRS ${_ffmpeg_INCLUDE_DIR})
ENDIF()
mark_as_advanced(
FFMPEG_INCLUDE_DIR
)
unset(_ffmpeg_SEARCH_DIRS)
unset(_ffmpeg_LIBRARIES)
unset(_ffmpeg_INCLUDE_DIR)

View File

@@ -54,7 +54,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(Fftw3 DEFAULT_MSG
IF(FFTW3_FOUND) IF(FFTW3_FOUND)
SET(FFTW3_LIBRARIES ${FFTW3_LIBRARY}) SET(FFTW3_LIBRARIES ${FFTW3_LIBRARY})
SET(FFTW3_INCLUDE_DIRS ${FFTW3_INCLUDE_DIR}) SET(FFTW3_INCLUDE_DIRS ${FFTW3_INCLUDE_DIR})
ENDIF() ENDIF(FFTW3_FOUND)
MARK_AS_ADVANCED( MARK_AS_ADVANCED(
FFTW3_INCLUDE_DIR FFTW3_INCLUDE_DIR

View File

@@ -52,7 +52,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLEW DEFAULT_MSG
IF(GLEW_FOUND) IF(GLEW_FOUND)
SET(GLEW_INCLUDE_DIRS ${GLEW_INCLUDE_DIR}) SET(GLEW_INCLUDE_DIRS ${GLEW_INCLUDE_DIR})
ENDIF() ENDIF(GLEW_FOUND)
MARK_AS_ADVANCED( MARK_AS_ADVANCED(
GLEW_INCLUDE_DIR GLEW_INCLUDE_DIR

View File

@@ -82,7 +82,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(GMP DEFAULT_MSG
IF(GMP_FOUND) IF(GMP_FOUND)
SET(GMP_LIBRARIES ${GMPXX_LIBRARY} ${GMP_LIBRARY}) SET(GMP_LIBRARIES ${GMPXX_LIBRARY} ${GMP_LIBRARY})
SET(GMP_INCLUDE_DIRS ${GMP_INCLUDE_DIR} ${GMPXX_INCLUDE_DIR}) SET(GMP_INCLUDE_DIRS ${GMP_INCLUDE_DIR} ${GMPXX_INCLUDE_DIR})
ENDIF() ENDIF(GMP_FOUND)
MARK_AS_ADVANCED( MARK_AS_ADVANCED(
GMP_INCLUDE_DIR GMP_INCLUDE_DIR

View File

@@ -124,7 +124,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(Icu DEFAULT_MSG
IF(ICU_FOUND) IF(ICU_FOUND)
SET(ICU_LIBRARIES ${ICU_LIBRARY_DATA} ${ICU_LIBRARY_I18N} ${ICU_LIBRARY_IO} ${ICU_LIBRARY_LE} ${ICU_LIBRARY_LX} ${ICU_LIBRARY_TU} ${ICU_LIBRARY_UC}) SET(ICU_LIBRARIES ${ICU_LIBRARY_DATA} ${ICU_LIBRARY_I18N} ${ICU_LIBRARY_IO} ${ICU_LIBRARY_LE} ${ICU_LIBRARY_LX} ${ICU_LIBRARY_TU} ${ICU_LIBRARY_UC})
SET(ICU_INCLUDE_DIRS ${ICU_INCLUDE_DIR}) SET(ICU_INCLUDE_DIRS ${ICU_INCLUDE_DIR})
ENDIF() ENDIF(ICU_FOUND)
MARK_AS_ADVANCED( MARK_AS_ADVANCED(
ICU_INCLUDE_DIR ICU_INCLUDE_DIR

View File

@@ -54,7 +54,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(Jack DEFAULT_MSG
IF(JACK_FOUND) IF(JACK_FOUND)
SET(JACK_LIBRARIES ${JACK_LIBRARY}) SET(JACK_LIBRARIES ${JACK_LIBRARY})
SET(JACK_INCLUDE_DIRS ${JACK_INCLUDE_DIR}) SET(JACK_INCLUDE_DIRS ${JACK_INCLUDE_DIR})
ENDIF() ENDIF(JACK_FOUND)
MARK_AS_ADVANCED( MARK_AS_ADVANCED(
JACK_INCLUDE_DIR JACK_INCLUDE_DIR

View File

@@ -64,7 +64,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(JeMalloc DEFAULT_MSG
IF(JEMALLOC_FOUND) IF(JEMALLOC_FOUND)
SET(JEMALLOC_LIBRARIES ${JEMALLOC_LIBRARY}) SET(JEMALLOC_LIBRARIES ${JEMALLOC_LIBRARY})
SET(JEMALLOC_INCLUDE_DIRS ${JEMALLOC_INCLUDE_DIR}) SET(JEMALLOC_INCLUDE_DIRS ${JEMALLOC_INCLUDE_DIR})
ENDIF() ENDIF(JEMALLOC_FOUND)
MARK_AS_ADVANCED( MARK_AS_ADVANCED(
JEMALLOC_INCLUDE_DIR JEMALLOC_INCLUDE_DIR

View File

@@ -34,10 +34,6 @@ else()
endif() endif()
endif() endif()
execute_process(COMMAND ${LLVM_CONFIG} --includedir
OUTPUT_VARIABLE LLVM_INCLUDE_DIRS
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT DEFINED LLVM_VERSION) if(NOT DEFINED LLVM_VERSION)
execute_process(COMMAND ${LLVM_CONFIG} --version execute_process(COMMAND ${LLVM_CONFIG} --version
OUTPUT_VARIABLE LLVM_VERSION OUTPUT_VARIABLE LLVM_VERSION
@@ -84,7 +80,7 @@ if(LLVM_LIBRARY AND LLVM_ROOT_DIR AND LLVM_LIBPATH)
endif() endif()
# handle the QUIETLY and REQUIRED arguments and set LLVM_FOUND to TRUE if # handle the QUIETLY and REQUIRED arguments and set SDL2_FOUND to TRUE if
# all listed variables are TRUE # all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs) INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(LLVM DEFAULT_MSG FIND_PACKAGE_HANDLE_STANDARD_ARGS(LLVM DEFAULT_MSG

View File

@@ -52,7 +52,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(LZO DEFAULT_MSG
IF(LZO_FOUND) IF(LZO_FOUND)
SET(LZO_LIBRARIES ${LZO_LIBRARY}) SET(LZO_LIBRARIES ${LZO_LIBRARY})
SET(LZO_INCLUDE_DIRS ${LZO_INCLUDE_DIR}) SET(LZO_INCLUDE_DIRS ${LZO_INCLUDE_DIR})
ENDIF() ENDIF(LZO_FOUND)
MARK_AS_ADVANCED( MARK_AS_ADVANCED(
LZO_INCLUDE_DIR LZO_INCLUDE_DIR

View File

@@ -1,49 +0,0 @@
# - Find NanoVDB library
# Find the native NanoVDB includes and library
# This module defines
# NANOVDB_INCLUDE_DIRS, where to find nanovdb.h, Set when
# NANOVDB_INCLUDE_DIR is found.
# NANOVDB_ROOT_DIR, The base directory to search for NanoVDB.
# This can also be an environment variable.
# NANOVDB_FOUND, If false, do not try to use NanoVDB.
#=============================================================================
# Copyright 2020 Blender Foundation.
#
# Distributed under the OSI-approved BSD 3-Clause License,
# see accompanying file BSD-3-Clause-license.txt for details.
#=============================================================================
# If NANOVDB_ROOT_DIR was defined in the environment, use it.
IF(NOT NANOVDB_ROOT_DIR AND NOT $ENV{NANOVDB_ROOT_DIR} STREQUAL "")
SET(NANOVDB_ROOT_DIR $ENV{NANOVDB_ROOT_DIR})
ENDIF()
SET(_nanovdb_SEARCH_DIRS
${NANOVDB_ROOT_DIR}
)
FIND_PATH(NANOVDB_INCLUDE_DIR
NAMES
nanovdb/NanoVDB.h
HINTS
${_nanovdb_SEARCH_DIRS}
PATH_SUFFIXES
include
)
# handle the QUIETLY and REQUIRED arguments and set NANOVDB_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(NanoVDB DEFAULT_MSG
NANOVDB_INCLUDE_DIR)
IF(NANOVDB_FOUND)
SET(NANOVDB_INCLUDE_DIRS ${NANOVDB_INCLUDE_DIR})
ENDIF(NANOVDB_FOUND)
MARK_AS_ADVANCED(
NANOVDB_INCLUDE_DIR
)
UNSET(_nanovdb_SEARCH_DIRS)

View File

@@ -95,7 +95,7 @@ IF(OSL_FOUND)
"\\1" OSL_LIBRARY_VERSION_MAJOR ${OSL_LIBRARY_VERSION_MAJOR}) "\\1" OSL_LIBRARY_VERSION_MAJOR ${OSL_LIBRARY_VERSION_MAJOR})
STRING(REGEX REPLACE ".*#define[ \t]+OSL_LIBRARY_VERSION_MINOR[ \t]+([.0-9]+).*" STRING(REGEX REPLACE ".*#define[ \t]+OSL_LIBRARY_VERSION_MINOR[ \t]+([.0-9]+).*"
"\\1" OSL_LIBRARY_VERSION_MINOR ${OSL_LIBRARY_VERSION_MINOR}) "\\1" OSL_LIBRARY_VERSION_MINOR ${OSL_LIBRARY_VERSION_MINOR})
ENDIF() ENDIF(OSL_FOUND)
MARK_AS_ADVANCED( MARK_AS_ADVANCED(
OSL_INCLUDE_DIR OSL_INCLUDE_DIR

View File

@@ -129,7 +129,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenCOLLADA DEFAULT_MSG
IF(OPENCOLLADA_FOUND) IF(OPENCOLLADA_FOUND)
SET(OPENCOLLADA_LIBRARIES ${_opencollada_LIBRARIES}) SET(OPENCOLLADA_LIBRARIES ${_opencollada_LIBRARIES})
SET(OPENCOLLADA_INCLUDE_DIRS ${_opencollada_INCLUDES}) SET(OPENCOLLADA_INCLUDE_DIRS ${_opencollada_INCLUDES})
ENDIF() ENDIF(OPENCOLLADA_FOUND)
UNSET(COMPONENT) UNSET(COMPONENT)
UNSET(UPPERCOMPONENT) UNSET(UPPERCOMPONENT)

View File

@@ -70,7 +70,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenColorIO DEFAULT_MSG
IF(OPENCOLORIO_FOUND) IF(OPENCOLORIO_FOUND)
SET(OPENCOLORIO_LIBRARIES ${_opencolorio_LIBRARIES}) SET(OPENCOLORIO_LIBRARIES ${_opencolorio_LIBRARIES})
SET(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO_INCLUDE_DIR}) SET(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO_INCLUDE_DIR})
ENDIF() ENDIF(OPENCOLORIO_FOUND)
MARK_AS_ADVANCED( MARK_AS_ADVANCED(
OPENCOLORIO_INCLUDE_DIR OPENCOLORIO_INCLUDE_DIR

View File

@@ -65,7 +65,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenJPEG DEFAULT_MSG
IF(OPENJPEG_FOUND) IF(OPENJPEG_FOUND)
SET(OPENJPEG_LIBRARIES ${OPENJPEG_LIBRARY}) SET(OPENJPEG_LIBRARIES ${OPENJPEG_LIBRARY})
SET(OPENJPEG_INCLUDE_DIRS ${OPENJPEG_INCLUDE_DIR}) SET(OPENJPEG_INCLUDE_DIRS ${OPENJPEG_INCLUDE_DIR})
ENDIF() ENDIF(OPENJPEG_FOUND)
MARK_AS_ADVANCED( MARK_AS_ADVANCED(
OPENJPEG_INCLUDE_DIR OPENJPEG_INCLUDE_DIR

View File

@@ -90,7 +90,7 @@ IF(OPENSUBDIV_FOUND)
OPENSUBDIV_CHECK_CONTROLLER("cudaEvaluator.h" OPENSUBDIV_HAS_CUDA) OPENSUBDIV_CHECK_CONTROLLER("cudaEvaluator.h" OPENSUBDIV_HAS_CUDA)
OPENSUBDIV_CHECK_CONTROLLER("glXFBEvaluator.h" OPENSUBDIV_HAS_GLSL_TRANSFORM_FEEDBACK) OPENSUBDIV_CHECK_CONTROLLER("glXFBEvaluator.h" OPENSUBDIV_HAS_GLSL_TRANSFORM_FEEDBACK)
OPENSUBDIV_CHECK_CONTROLLER("glComputeEvaluator.h" OPENSUBDIV_HAS_GLSL_COMPUTE) OPENSUBDIV_CHECK_CONTROLLER("glComputeEvaluator.h" OPENSUBDIV_HAS_GLSL_COMPUTE)
ENDIF() ENDIF(OPENSUBDIV_FOUND)
MARK_AS_ADVANCED( MARK_AS_ADVANCED(
OPENSUBDIV_INCLUDE_DIR OPENSUBDIV_INCLUDE_DIR

View File

@@ -55,7 +55,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenVDB DEFAULT_MSG
IF(OPENVDB_FOUND) IF(OPENVDB_FOUND)
SET(OPENVDB_LIBRARIES ${OPENVDB_LIBRARY}) SET(OPENVDB_LIBRARIES ${OPENVDB_LIBRARY})
SET(OPENVDB_INCLUDE_DIRS ${OPENVDB_INCLUDE_DIR}) SET(OPENVDB_INCLUDE_DIRS ${OPENVDB_INCLUDE_DIR})
ENDIF() ENDIF(OPENVDB_FOUND)
MARK_AS_ADVANCED( MARK_AS_ADVANCED(
OPENVDB_INCLUDE_DIR OPENVDB_INCLUDE_DIR

View File

@@ -41,7 +41,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(OptiX DEFAULT_MSG
IF(OPTIX_FOUND) IF(OPTIX_FOUND)
SET(OPTIX_INCLUDE_DIRS ${OPTIX_INCLUDE_DIR}) SET(OPTIX_INCLUDE_DIRS ${OPTIX_INCLUDE_DIR})
ENDIF() ENDIF(OPTIX_FOUND)
MARK_AS_ADVANCED( MARK_AS_ADVANCED(
OPTIX_INCLUDE_DIR OPTIX_INCLUDE_DIR

View File

@@ -57,7 +57,7 @@ SET(PCRE_LIBRARIES ${PCRE_LIBRARY})
IF(PCRE_FOUND) IF(PCRE_FOUND)
SET(PCRE_INCLUDE_DIRS ${PCRE_INCLUDE_DIR}) SET(PCRE_INCLUDE_DIRS ${PCRE_INCLUDE_DIR})
ENDIF() ENDIF(PCRE_FOUND)
MARK_AS_ADVANCED( MARK_AS_ADVANCED(
PCRE_INCLUDE_DIR PCRE_INCLUDE_DIR

View File

@@ -1,65 +0,0 @@
# - Find potrace library
# Find the potrace include and library
# This module defines
# POTRACE_INCLUDE_DIRS, where to find potracelib.h, Set when
# POTRACE is found.
# POTRACE_LIBRARIES, libraries to link against to use POTRACE.
# POTRACE_ROOT_DIR, The base directory to search for POTRACE.
# This can also be an environment variable.
# POTRACE_FOUND, If false, do not try to use POTRACE.
#
# also defined, but not for general use are
# POTRACE_LIBRARY, where to find the POTRACE library.
#=============================================================================
# Copyright 2020 Blender Foundation.
#
# Distributed under the OSI-approved BSD 3-Clause License,
# see accompanying file BSD-3-Clause-license.txt for details.
#=============================================================================
# If POTRACE_ROOT_DIR was defined in the environment, use it.
IF(NOT POTRACE_ROOT_DIR AND NOT $ENV{POTRACE_ROOT_DIR} STREQUAL "")
SET(POTRACE_ROOT_DIR $ENV{POTRACE_ROOT_DIR})
ENDIF()
SET(_potrace_SEARCH_DIRS
${POTRACE_ROOT_DIR}
/opt/lib/potrace
/usr/include
/usr/local/include
)
FIND_PATH(POTRACE_INCLUDE_DIR
NAMES
potracelib.h
HINTS
${_potrace_SEARCH_DIRS}
PATH_SUFFIXES
include
)
FIND_LIBRARY(POTRACE_LIBRARY
NAMES
potrace
HINTS
${_potrace_SEARCH_DIRS}
PATH_SUFFIXES
lib64 lib
)
# handle the QUIETLY and REQUIRED arguments and set POTRACE_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Potrace DEFAULT_MSG
POTRACE_LIBRARY POTRACE_INCLUDE_DIR)
IF(POTRACE_FOUND)
SET(POTRACE_LIBRARIES ${POTRACE_LIBRARY})
SET(POTRACE_INCLUDE_DIRS ${POTRACE_INCLUDE_DIR})
ENDIF()
MARK_AS_ADVANCED(
POTRACE_INCLUDE_DIR
POTRACE_LIBRARY
)

View File

@@ -53,7 +53,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 DEFAULT_MSG
IF(SDL2_FOUND) IF(SDL2_FOUND)
SET(SDL2_LIBRARIES ${SDL2_LIBRARY}) SET(SDL2_LIBRARIES ${SDL2_LIBRARY})
SET(SDL2_INCLUDE_DIRS ${SDL2_INCLUDE_DIR}) SET(SDL2_INCLUDE_DIRS ${SDL2_INCLUDE_DIR})
ENDIF() ENDIF(SDL2_FOUND)
MARK_AS_ADVANCED( MARK_AS_ADVANCED(
SDL2_INCLUDE_DIR SDL2_INCLUDE_DIR

View File

@@ -52,7 +52,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(SndFile DEFAULT_MSG
IF(SNDFILE_FOUND) IF(SNDFILE_FOUND)
SET(LIBSNDFILE_LIBRARIES ${LIBSNDFILE_LIBRARY}) SET(LIBSNDFILE_LIBRARIES ${LIBSNDFILE_LIBRARY})
SET(LIBSNDFILE_INCLUDE_DIRS ${LIBSNDFILE_INCLUDE_DIR}) SET(LIBSNDFILE_INCLUDE_DIRS ${LIBSNDFILE_INCLUDE_DIR})
ENDIF() ENDIF(SNDFILE_FOUND)
MARK_AS_ADVANCED( MARK_AS_ADVANCED(
LIBSNDFILE_INCLUDE_DIR LIBSNDFILE_INCLUDE_DIR

View File

@@ -54,7 +54,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(Spacenav DEFAULT_MSG
IF(SPACENAV_FOUND) IF(SPACENAV_FOUND)
SET(SPACENAV_LIBRARIES ${SPACENAV_LIBRARY}) SET(SPACENAV_LIBRARIES ${SPACENAV_LIBRARY})
SET(SPACENAV_INCLUDE_DIRS ${SPACENAV_INCLUDE_DIR}) SET(SPACENAV_INCLUDE_DIRS ${SPACENAV_INCLUDE_DIR})
ENDIF() ENDIF(SPACENAV_FOUND)
MARK_AS_ADVANCED( MARK_AS_ADVANCED(
SPACENAV_INCLUDE_DIR SPACENAV_INCLUDE_DIR

View File

@@ -59,7 +59,7 @@ ELSE()
get_filename_component(USD_LIBRARY_DIR ${USD_LIBRARY} DIRECTORY) get_filename_component(USD_LIBRARY_DIR ${USD_LIBRARY} DIRECTORY)
SET(USD_INCLUDE_DIRS ${USD_INCLUDE_DIR}) SET(USD_INCLUDE_DIRS ${USD_INCLUDE_DIR})
set(USD_LIBRARIES ${USD_LIBRARY}) set(USD_LIBRARIES ${USD_LIBRARY})
ENDIF() ENDIF(USD_FOUND)
ENDIF() ENDIF()
MARK_AS_ADVANCED( MARK_AS_ADVANCED(

View File

@@ -52,7 +52,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(XML2 DEFAULT_MSG
IF(XML2_FOUND) IF(XML2_FOUND)
SET(XML2_LIBRARIES ${XML2_LIBRARY}) SET(XML2_LIBRARIES ${XML2_LIBRARY})
SET(XML2_INCLUDE_DIRS ${XML2_INCLUDE_DIR}) SET(XML2_INCLUDE_DIRS ${XML2_INCLUDE_DIR})
ENDIF() ENDIF(XML2_FOUND)
MARK_AS_ADVANCED( MARK_AS_ADVANCED(
XML2_INCLUDE_DIR XML2_INCLUDE_DIR

View File

@@ -61,7 +61,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(XR_OpenXR_SDK DEFAULT_MSG
IF(XR_OPENXR_SDK_FOUND) IF(XR_OPENXR_SDK_FOUND)
SET(XR_OPENXR_SDK_LIBRARIES ${XR_OPENXR_SDK_LOADER_LIBRARY}) SET(XR_OPENXR_SDK_LIBRARIES ${XR_OPENXR_SDK_LOADER_LIBRARY})
SET(XR_OPENXR_SDK_INCLUDE_DIRS ${XR_OPENXR_SDK_INCLUDE_DIR}) SET(XR_OPENXR_SDK_INCLUDE_DIRS ${XR_OPENXR_SDK_INCLUDE_DIR})
ENDIF() ENDIF(XR_OPENXR_SDK_FOUND)
MARK_AS_ADVANCED( MARK_AS_ADVANCED(
XR_OPENXR_SDK_INCLUDE_DIR XR_OPENXR_SDK_INCLUDE_DIR

View File

@@ -39,7 +39,6 @@ macro(BLENDER_SRC_GTEST_EX)
add_definitions(${GLOG_DEFINES}) add_definitions(${GLOG_DEFINES})
add_executable(${TARGET_NAME} ${ARG_SRC} ${MANIFEST}) add_executable(${TARGET_NAME} ${ARG_SRC} ${MANIFEST})
setup_platform_linker_flags(${TARGET_NAME})
target_include_directories(${TARGET_NAME} PUBLIC "${TEST_INC}") target_include_directories(${TARGET_NAME} PUBLIC "${TEST_INC}")
target_include_directories(${TARGET_NAME} SYSTEM PUBLIC "${TEST_INC_SYS}") target_include_directories(${TARGET_NAME} SYSTEM PUBLIC "${TEST_INC_SYS}")
target_link_libraries(${TARGET_NAME} ${ARG_EXTRA_LIBS} ${PLATFORM_LINKLIBS}) target_link_libraries(${TARGET_NAME} ${ARG_EXTRA_LIBS} ${PLATFORM_LINKLIBS})

View File

@@ -355,8 +355,6 @@ def recursive_arg_sizes(node, ):
# print("adding", node.spelling) # print("adding", node.spelling)
for c in node.get_children(): for c in node.get_children():
recursive_arg_sizes(c) recursive_arg_sizes(c)
# cache function sizes # cache function sizes
recursive_arg_sizes(tu.cursor) recursive_arg_sizes(tu.cursor)
_defs.update(defs_precalc) _defs.update(defs_precalc)

View File

@@ -182,7 +182,7 @@ def create_nb_project_main():
f.write(' </logicalFolder>\n') f.write(' </logicalFolder>\n')
# default, but this dir is infact not in blender dir so we can ignore it # default, but this dir is infact not in blender dir so we can ignore it
# f.write(' <sourceFolderFilter>^(nbproject)$</sourceFolderFilter>\n') # f.write(' <sourceFolderFilter>^(nbproject)$</sourceFolderFilter>\n')
f.write(r' <sourceFolderFilter>^(nbproject|__pycache__|.*\.py|.*\.html|.*\.blend)$</sourceFolderFilter>\n') f.write(' <sourceFolderFilter>^(nbproject|__pycache__|.*\.py|.*\.html|.*\.blend)$</sourceFolderFilter>\n')
f.write(' <sourceRootList>\n') f.write(' <sourceRootList>\n')
f.write(' <Elem>%s</Elem>\n' % SOURCE_DIR) # base_root_rel f.write(' <Elem>%s</Elem>\n' % SOURCE_DIR) # base_root_rel

View File

@@ -8,7 +8,6 @@ import sys
cmakelists_file = sys.argv[-1] cmakelists_file = sys.argv[-1]
def main(): def main():
options = [] options = []
for l in open(cmakelists_file, 'r').readlines(): for l in open(cmakelists_file, 'r').readlines():

View File

@@ -49,8 +49,8 @@ def main():
check_commands = [] check_commands = []
for c, inc_dirs, defs in source_info: for c, inc_dirs, defs in source_info:
# ~if "source/blender" not in c: #~if "source/blender" not in c:
# ~ continue #~ continue
cmd = ([CHECKER_BIN] + cmd = ([CHECKER_BIN] +
CHECKER_ARGS + CHECKER_ARGS +

View File

@@ -5,22 +5,24 @@
# #
set(WITH_ALEMBIC ON CACHE BOOL "" FORCE) set(WITH_ALEMBIC ON CACHE BOOL "" FORCE)
set(WITH_AUDASPACE ON CACHE BOOL "" FORCE)
set(WITH_BUILDINFO ON CACHE BOOL "" FORCE) set(WITH_BUILDINFO ON CACHE BOOL "" FORCE)
set(WITH_BULLET ON CACHE BOOL "" FORCE) set(WITH_BULLET ON CACHE BOOL "" FORCE)
set(WITH_CODEC_AVI ON CACHE BOOL "" FORCE) set(WITH_CODEC_AVI ON CACHE BOOL "" FORCE)
set(WITH_CODEC_FFMPEG ON CACHE BOOL "" FORCE) set(WITH_CODEC_FFMPEG ON CACHE BOOL "" FORCE)
set(WITH_CODEC_SNDFILE ON CACHE BOOL "" FORCE) set(WITH_CODEC_SNDFILE ON CACHE BOOL "" FORCE)
set(WITH_COMPOSITOR ON CACHE BOOL "" FORCE)
set(WITH_CYCLES ON CACHE BOOL "" FORCE) set(WITH_CYCLES ON CACHE BOOL "" FORCE)
set(WITH_CYCLES_EMBREE ON CACHE BOOL "" FORCE) set(WITH_CYCLES_EMBREE ON CACHE BOOL "" FORCE)
set(WITH_CYCLES_OSL ON CACHE BOOL "" FORCE) set(WITH_CYCLES_OSL ON CACHE BOOL "" FORCE)
set(WITH_DRACO ON CACHE BOOL "" FORCE) set(WITH_DRACO ON CACHE BOOL "" FORCE)
set(WITH_FFTW3 ON CACHE BOOL "" FORCE) set(WITH_FFTW3 ON CACHE BOOL "" FORCE)
set(WITH_GMP ON CACHE BOOL "" FORCE)
set(WITH_LIBMV ON CACHE BOOL "" FORCE)
set(WITH_LIBMV_SCHUR_SPECIALIZATIONS ON CACHE BOOL "" FORCE)
set(WITH_COMPOSITOR ON CACHE BOOL "" FORCE)
set(WITH_FREESTYLE ON CACHE BOOL "" FORCE) set(WITH_FREESTYLE ON CACHE BOOL "" FORCE)
set(WITH_GMP ON CACHE BOOL "" FORCE) set(WITH_GMP ON CACHE BOOL "" FORCE)
set(WITH_IK_ITASC ON CACHE BOOL "" FORCE)
set(WITH_IK_SOLVER ON CACHE BOOL "" FORCE) set(WITH_IK_SOLVER ON CACHE BOOL "" FORCE)
set(WITH_IK_ITASC ON CACHE BOOL "" FORCE)
set(WITH_IMAGE_CINEON ON CACHE BOOL "" FORCE) set(WITH_IMAGE_CINEON ON CACHE BOOL "" FORCE)
set(WITH_IMAGE_DDS ON CACHE BOOL "" FORCE) set(WITH_IMAGE_DDS ON CACHE BOOL "" FORCE)
set(WITH_IMAGE_HDR ON CACHE BOOL "" FORCE) set(WITH_IMAGE_HDR ON CACHE BOOL "" FORCE)
@@ -29,13 +31,12 @@ set(WITH_IMAGE_OPENJPEG ON CACHE BOOL "" FORCE)
set(WITH_IMAGE_TIFF ON CACHE BOOL "" FORCE) set(WITH_IMAGE_TIFF ON CACHE BOOL "" FORCE)
set(WITH_INPUT_NDOF ON CACHE BOOL "" FORCE) set(WITH_INPUT_NDOF ON CACHE BOOL "" FORCE)
set(WITH_INTERNATIONAL ON CACHE BOOL "" FORCE) set(WITH_INTERNATIONAL ON CACHE BOOL "" FORCE)
set(WITH_LIBMV ON CACHE BOOL "" FORCE)
set(WITH_LIBMV_SCHUR_SPECIALIZATIONS ON CACHE BOOL "" FORCE)
set(WITH_LZMA ON CACHE BOOL "" FORCE) set(WITH_LZMA ON CACHE BOOL "" FORCE)
set(WITH_LZO ON CACHE BOOL "" FORCE) set(WITH_LZO ON CACHE BOOL "" FORCE)
set(WITH_MOD_REMESH ON CACHE BOOL "" FORCE)
set(WITH_MOD_FLUID ON CACHE BOOL "" FORCE) set(WITH_MOD_FLUID ON CACHE BOOL "" FORCE)
set(WITH_MOD_OCEANSIM ON CACHE BOOL "" FORCE) set(WITH_MOD_OCEANSIM ON CACHE BOOL "" FORCE)
set(WITH_MOD_REMESH ON CACHE BOOL "" FORCE) set(WITH_AUDASPACE ON CACHE BOOL "" FORCE)
set(WITH_OPENAL ON CACHE BOOL "" FORCE) set(WITH_OPENAL ON CACHE BOOL "" FORCE)
set(WITH_OPENCOLLADA ON CACHE BOOL "" FORCE) set(WITH_OPENCOLLADA ON CACHE BOOL "" FORCE)
set(WITH_OPENCOLORIO ON CACHE BOOL "" FORCE) set(WITH_OPENCOLORIO ON CACHE BOOL "" FORCE)
@@ -44,7 +45,6 @@ set(WITH_OPENMP ON CACHE BOOL "" FORCE)
set(WITH_OPENSUBDIV ON CACHE BOOL "" FORCE) set(WITH_OPENSUBDIV ON CACHE BOOL "" FORCE)
set(WITH_OPENVDB ON CACHE BOOL "" FORCE) set(WITH_OPENVDB ON CACHE BOOL "" FORCE)
set(WITH_OPENVDB_BLOSC ON CACHE BOOL "" FORCE) set(WITH_OPENVDB_BLOSC ON CACHE BOOL "" FORCE)
set(WITH_POTRACE ON CACHE BOOL "" FORCE)
set(WITH_PYTHON_INSTALL ON CACHE BOOL "" FORCE) set(WITH_PYTHON_INSTALL ON CACHE BOOL "" FORCE)
set(WITH_QUADRIFLOW ON CACHE BOOL "" FORCE) set(WITH_QUADRIFLOW ON CACHE BOOL "" FORCE)
set(WITH_SDL ON CACHE BOOL "" FORCE) set(WITH_SDL ON CACHE BOOL "" FORCE)

View File

@@ -7,7 +7,6 @@
set(WITH_INSTALL_PORTABLE ON CACHE BOOL "" FORCE) set(WITH_INSTALL_PORTABLE ON CACHE BOOL "" FORCE)
set(WITH_AUDASPACE OFF CACHE BOOL "" FORCE)
set(WITH_ALEMBIC OFF CACHE BOOL "" FORCE) set(WITH_ALEMBIC OFF CACHE BOOL "" FORCE)
set(WITH_BOOST OFF CACHE BOOL "" FORCE) set(WITH_BOOST OFF CACHE BOOL "" FORCE)
set(WITH_BUILDINFO OFF CACHE BOOL "" FORCE) set(WITH_BUILDINFO OFF CACHE BOOL "" FORCE)
@@ -15,17 +14,20 @@ set(WITH_BULLET OFF CACHE BOOL "" FORCE)
set(WITH_CODEC_AVI OFF CACHE BOOL "" FORCE) set(WITH_CODEC_AVI OFF CACHE BOOL "" FORCE)
set(WITH_CODEC_FFMPEG OFF CACHE BOOL "" FORCE) set(WITH_CODEC_FFMPEG OFF CACHE BOOL "" FORCE)
set(WITH_CODEC_SNDFILE OFF CACHE BOOL "" FORCE) set(WITH_CODEC_SNDFILE OFF CACHE BOOL "" FORCE)
set(WITH_COMPOSITOR OFF CACHE BOOL "" FORCE)
set(WITH_CYCLES OFF CACHE BOOL "" FORCE) set(WITH_CYCLES OFF CACHE BOOL "" FORCE)
set(WITH_CYCLES_EMBREE OFF CACHE BOOL "" FORCE) set(WITH_CYCLES_EMBREE OFF CACHE BOOL "" FORCE)
set(WITH_CYCLES_OSL OFF CACHE BOOL "" FORCE) set(WITH_CYCLES_OSL OFF CACHE BOOL "" FORCE)
set(WITH_CYCLES_DEVICE_OPTIX OFF CACHE BOOL "" FORCE) set(WITH_CYCLES_DEVICE_OPTIX OFF CACHE BOOL "" FORCE)
set(WITH_DRACO OFF CACHE BOOL "" FORCE) set(WITH_DRACO OFF CACHE BOOL "" FORCE)
set(WITH_FFTW3 OFF CACHE BOOL "" FORCE) set(WITH_FFTW3 OFF CACHE BOOL "" FORCE)
set(WITH_GMP OFF CACHE BOOL "" FORCE)
set(WITH_LIBMV OFF CACHE BOOL "" FORCE)
set(WITH_LLVM OFF CACHE BOOL "" FORCE)
set(WITH_COMPOSITOR OFF CACHE BOOL "" FORCE)
set(WITH_FREESTYLE OFF CACHE BOOL "" FORCE) set(WITH_FREESTYLE OFF CACHE BOOL "" FORCE)
set(WITH_GMP OFF CACHE BOOL "" FORCE) set(WITH_GMP OFF CACHE BOOL "" FORCE)
set(WITH_IK_ITASC OFF CACHE BOOL "" FORCE)
set(WITH_IK_SOLVER OFF CACHE BOOL "" FORCE) set(WITH_IK_SOLVER OFF CACHE BOOL "" FORCE)
set(WITH_IK_ITASC OFF CACHE BOOL "" FORCE)
set(WITH_IMAGE_CINEON OFF CACHE BOOL "" FORCE) set(WITH_IMAGE_CINEON OFF CACHE BOOL "" FORCE)
set(WITH_IMAGE_DDS OFF CACHE BOOL "" FORCE) set(WITH_IMAGE_DDS OFF CACHE BOOL "" FORCE)
set(WITH_IMAGE_HDR OFF CACHE BOOL "" FORCE) set(WITH_IMAGE_HDR OFF CACHE BOOL "" FORCE)
@@ -35,13 +37,12 @@ set(WITH_IMAGE_TIFF OFF CACHE BOOL "" FORCE)
set(WITH_INPUT_NDOF OFF CACHE BOOL "" FORCE) set(WITH_INPUT_NDOF OFF CACHE BOOL "" FORCE)
set(WITH_INTERNATIONAL OFF CACHE BOOL "" FORCE) set(WITH_INTERNATIONAL OFF CACHE BOOL "" FORCE)
set(WITH_JACK OFF CACHE BOOL "" FORCE) set(WITH_JACK OFF CACHE BOOL "" FORCE)
set(WITH_LIBMV OFF CACHE BOOL "" FORCE)
set(WITH_LLVM OFF CACHE BOOL "" FORCE)
set(WITH_LZMA OFF CACHE BOOL "" FORCE) set(WITH_LZMA OFF CACHE BOOL "" FORCE)
set(WITH_LZO OFF CACHE BOOL "" FORCE) set(WITH_LZO OFF CACHE BOOL "" FORCE)
set(WITH_MOD_REMESH OFF CACHE BOOL "" FORCE)
set(WITH_MOD_FLUID OFF CACHE BOOL "" FORCE) set(WITH_MOD_FLUID OFF CACHE BOOL "" FORCE)
set(WITH_MOD_OCEANSIM OFF CACHE BOOL "" FORCE) set(WITH_MOD_OCEANSIM OFF CACHE BOOL "" FORCE)
set(WITH_MOD_REMESH OFF CACHE BOOL "" FORCE) set(WITH_AUDASPACE OFF CACHE BOOL "" FORCE)
set(WITH_OPENAL OFF CACHE BOOL "" FORCE) set(WITH_OPENAL OFF CACHE BOOL "" FORCE)
set(WITH_OPENCOLLADA OFF CACHE BOOL "" FORCE) set(WITH_OPENCOLLADA OFF CACHE BOOL "" FORCE)
set(WITH_OPENCOLORIO OFF CACHE BOOL "" FORCE) set(WITH_OPENCOLORIO OFF CACHE BOOL "" FORCE)

View File

@@ -4,7 +4,6 @@
# cmake -C../blender/build_files/cmake/config/blender_release.cmake ../blender # cmake -C../blender/build_files/cmake/config/blender_release.cmake ../blender
# #
set(WITH_AUDASPACE ON CACHE BOOL "" FORCE)
set(WITH_ALEMBIC ON CACHE BOOL "" FORCE) set(WITH_ALEMBIC ON CACHE BOOL "" FORCE)
set(WITH_ASSERT_ABORT OFF CACHE BOOL "" FORCE) set(WITH_ASSERT_ABORT OFF CACHE BOOL "" FORCE)
set(WITH_BUILDINFO ON CACHE BOOL "" FORCE) set(WITH_BUILDINFO ON CACHE BOOL "" FORCE)
@@ -12,12 +11,15 @@ set(WITH_BULLET ON CACHE BOOL "" FORCE)
set(WITH_CODEC_AVI ON CACHE BOOL "" FORCE) set(WITH_CODEC_AVI ON CACHE BOOL "" FORCE)
set(WITH_CODEC_FFMPEG ON CACHE BOOL "" FORCE) set(WITH_CODEC_FFMPEG ON CACHE BOOL "" FORCE)
set(WITH_CODEC_SNDFILE ON CACHE BOOL "" FORCE) set(WITH_CODEC_SNDFILE ON CACHE BOOL "" FORCE)
set(WITH_COMPOSITOR ON CACHE BOOL "" FORCE)
set(WITH_CYCLES ON CACHE BOOL "" FORCE) set(WITH_CYCLES ON CACHE BOOL "" FORCE)
set(WITH_CYCLES_EMBREE ON CACHE BOOL "" FORCE) set(WITH_CYCLES_EMBREE ON CACHE BOOL "" FORCE)
set(WITH_CYCLES_OSL ON CACHE BOOL "" FORCE) set(WITH_CYCLES_OSL ON CACHE BOOL "" FORCE)
set(WITH_DRACO ON CACHE BOOL "" FORCE) set(WITH_DRACO ON CACHE BOOL "" FORCE)
set(WITH_FFTW3 ON CACHE BOOL "" FORCE) set(WITH_FFTW3 ON CACHE BOOL "" FORCE)
set(WITH_GMP ON CACHE BOOL "" FORCE)
set(WITH_LIBMV ON CACHE BOOL "" FORCE)
set(WITH_LIBMV_SCHUR_SPECIALIZATIONS ON CACHE BOOL "" FORCE)
set(WITH_COMPOSITOR ON CACHE BOOL "" FORCE)
set(WITH_FREESTYLE ON CACHE BOOL "" FORCE) set(WITH_FREESTYLE ON CACHE BOOL "" FORCE)
set(WITH_GMP ON CACHE BOOL "" FORCE) set(WITH_GMP ON CACHE BOOL "" FORCE)
set(WITH_IK_SOLVER ON CACHE BOOL "" FORCE) set(WITH_IK_SOLVER ON CACHE BOOL "" FORCE)
@@ -30,13 +32,12 @@ set(WITH_IMAGE_OPENJPEG ON CACHE BOOL "" FORCE)
set(WITH_IMAGE_TIFF ON CACHE BOOL "" FORCE) set(WITH_IMAGE_TIFF ON CACHE BOOL "" FORCE)
set(WITH_INPUT_NDOF ON CACHE BOOL "" FORCE) set(WITH_INPUT_NDOF ON CACHE BOOL "" FORCE)
set(WITH_INTERNATIONAL ON CACHE BOOL "" FORCE) set(WITH_INTERNATIONAL ON CACHE BOOL "" FORCE)
set(WITH_LIBMV ON CACHE BOOL "" FORCE)
set(WITH_LIBMV_SCHUR_SPECIALIZATIONS ON CACHE BOOL "" FORCE)
set(WITH_LZMA ON CACHE BOOL "" FORCE) set(WITH_LZMA ON CACHE BOOL "" FORCE)
set(WITH_LZO ON CACHE BOOL "" FORCE) set(WITH_LZO ON CACHE BOOL "" FORCE)
set(WITH_MOD_REMESH ON CACHE BOOL "" FORCE)
set(WITH_MOD_FLUID ON CACHE BOOL "" FORCE) set(WITH_MOD_FLUID ON CACHE BOOL "" FORCE)
set(WITH_MOD_OCEANSIM ON CACHE BOOL "" FORCE) set(WITH_MOD_OCEANSIM ON CACHE BOOL "" FORCE)
set(WITH_MOD_REMESH ON CACHE BOOL "" FORCE) set(WITH_AUDASPACE ON CACHE BOOL "" FORCE)
set(WITH_OPENAL ON CACHE BOOL "" FORCE) set(WITH_OPENAL ON CACHE BOOL "" FORCE)
set(WITH_OPENCOLLADA ON CACHE BOOL "" FORCE) set(WITH_OPENCOLLADA ON CACHE BOOL "" FORCE)
set(WITH_OPENCOLORIO ON CACHE BOOL "" FORCE) set(WITH_OPENCOLORIO ON CACHE BOOL "" FORCE)
@@ -45,7 +46,6 @@ set(WITH_OPENMP ON CACHE BOOL "" FORCE)
set(WITH_OPENSUBDIV ON CACHE BOOL "" FORCE) set(WITH_OPENSUBDIV ON CACHE BOOL "" FORCE)
set(WITH_OPENVDB ON CACHE BOOL "" FORCE) set(WITH_OPENVDB ON CACHE BOOL "" FORCE)
set(WITH_OPENVDB_BLOSC ON CACHE BOOL "" FORCE) set(WITH_OPENVDB_BLOSC ON CACHE BOOL "" FORCE)
set(WITH_POTRACE ON CACHE BOOL "" FORCE)
set(WITH_PYTHON_INSTALL ON CACHE BOOL "" FORCE) set(WITH_PYTHON_INSTALL ON CACHE BOOL "" FORCE)
set(WITH_QUADRIFLOW ON CACHE BOOL "" FORCE) set(WITH_QUADRIFLOW ON CACHE BOOL "" FORCE)
set(WITH_SDL ON CACHE BOOL "" FORCE) set(WITH_SDL ON CACHE BOOL "" FORCE)
@@ -55,7 +55,7 @@ set(WITH_USD ON CACHE BOOL "" FORCE)
set(WITH_MEM_JEMALLOC ON CACHE BOOL "" FORCE) set(WITH_MEM_JEMALLOC ON CACHE BOOL "" FORCE)
set(WITH_CYCLES_CUDA_BINARIES ON CACHE BOOL "" FORCE) set(WITH_CYCLES_CUDA_BINARIES ON CACHE BOOL "" FORCE)
set(WITH_CYCLES_CUBIN_COMPILER OFF CACHE BOOL "" FORCE) set(WITH_CYCLES_CUBIN_COMPILER OFF CACHE BOOL "" FORCE)
set(CYCLES_CUDA_BINARIES_ARCH sm_30;sm_35;sm_37;sm_50;sm_52;sm_60;sm_61;sm_70;sm_75;sm_86;compute_75 CACHE STRING "" FORCE) set(CYCLES_CUDA_BINARIES_ARCH sm_30;sm_35;sm_37;sm_50;sm_52;sm_60;sm_61;sm_70;sm_75;compute_75 CACHE STRING "" FORCE)
set(WITH_CYCLES_DEVICE_OPTIX ON CACHE BOOL "" FORCE) set(WITH_CYCLES_DEVICE_OPTIX ON CACHE BOOL "" FORCE)
# platform dependent options # platform dependent options

View File

@@ -33,9 +33,18 @@ set(WITH_ALEMBIC OFF CACHE BOOL "" FORCE)
# Depends on Python install, do this to quiet warning. # Depends on Python install, do this to quiet warning.
set(WITH_DRACO OFF CACHE BOOL "" FORCE) set(WITH_DRACO OFF CACHE BOOL "" FORCE)
# Jemalloc does not work with dlopen() of Python modules: # Note, if linking errors can be resolved, lines below can be removed.
# https://github.com/jemalloc/jemalloc/issues/1237 # Until then, disable configurations known to fail.
set(WITH_MEM_JEMALLOC OFF CACHE BOOL "" FORCE)
if(UNIX AND NOT APPLE)
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
# jemalloc causes linking error on import, disable.
set(WITH_MEM_JEMALLOC OFF CACHE BOOL "" FORCE)
endif()
elseif(APPLE)
# OpenMP causes linking error on build, disable.
set(WITH_MEM_JEMALLOC OFF CACHE BOOL "" FORCE)
endif()
if(WIN32) if(WIN32)
set(WITH_WINDOWS_BUNDLE_CRT OFF CACHE BOOL "" FORCE) set(WITH_WINDOWS_BUNDLE_CRT OFF CACHE BOOL "" FORCE)

View File

@@ -114,6 +114,5 @@ def main():
import subprocess import subprocess
subprocess.call(cmd) subprocess.call(cmd)
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View File

@@ -302,14 +302,14 @@ function(blender_add_lib__impl
# #
# What this code does it traverses library_deps and extracts information about whether # What this code does it traverses library_deps and extracts information about whether
# library is to provided as general, debug or optimized. This is a little state machine which # library is to provided as general, debug or optimized. This is a little state machine which
# keeps track of which build type library is to provided for: # keeps track of whiuch build type library is to provided for:
# #
# - If "debug" or "optimized" word is found, the next element in the list is expected to be # - If "debug" or "optimized" word is found, the next element in the list is expected to be
# a library which will be passed to target_link_libraries() under corresponding build type. # a library which will be passed to target_link_libraries() under corresponding build type.
# #
# - If there is no "debug" or "optimized" used library is specified for all build types. # - If there is no "debug" or "optimized" used library is specified for all build types.
# #
# NOTE: If separated libraries for debug and release are needed every library is the list are # NOTE: If separated libraries for debug and release ar eneeded every library is the list are
# to be prefixed explicitly. # to be prefixed explicitly.
# #
# Use: "optimized libfoo optimized libbar debug libfoo_d debug libbar_d" # Use: "optimized libfoo optimized libbar debug libfoo_d debug libbar_d"
@@ -375,8 +375,9 @@ function(blender_add_lib
set_property(GLOBAL APPEND PROPERTY BLENDER_LINK_LIBS ${name}) set_property(GLOBAL APPEND PROPERTY BLENDER_LINK_LIBS ${name})
endfunction() endfunction()
# Add tests for a Blender library, to be called in tandem with blender_add_lib(). # blender_add_test_lib() is used to define a test library. It is intended to be
# The tests will be part of the blender_test executable (see tests/gtests/runner). # called in tandem with blender_add_lib(). The test library will be linked into
# the bf_gtest_runner_test executable (see tests/gtests/CMakeLists.txt).
function(blender_add_test_lib function(blender_add_test_lib
name name
sources sources
@@ -410,48 +411,6 @@ function(blender_add_test_lib
set_property(GLOBAL APPEND PROPERTY BLENDER_TEST_LIBS ${name}) set_property(GLOBAL APPEND PROPERTY BLENDER_TEST_LIBS ${name})
endfunction() endfunction()
# Add tests for a Blender library, to be called in tandem with blender_add_lib().
# Test will be compiled into a ${name}_test executable.
#
# To be used for smaller isolated libraries, that do not have many dependencies.
# For libraries that do drag in many other Blender libraries and would create a
# very large executable, blender_add_test_lib() should be used instead.
function(blender_add_test_executable
name
sources
includes
includes_sys
library_deps
)
add_cc_flags_custom_test(${name} PARENT_SCOPE)
## Otherwise external projects will produce warnings that we cannot fix.
remove_strict_flags()
include_directories(${includes})
include_directories(${includes_sys})
setup_libdirs()
BLENDER_SRC_GTEST_EX(
NAME ${name}
SRC "${sources}"
EXTRA_LIBS "${library_deps}"
SKIP_ADD_TEST
)
include(GTest)
set(_GOOGLETEST_DISCOVER_TESTS_SCRIPT
${CMAKE_SOURCE_DIR}/build_files/cmake/Modules/GTestAddTests.cmake
)
gtest_discover_tests(${name}_test
DISCOVERY_MODE PRE_TEST
WORKING_DIRECTORY "${TEST_INSTALL_DIR}"
)
endfunction()
# Ninja only: assign 'heavy pool' to some targets that are especially RAM-consuming to build. # Ninja only: assign 'heavy pool' to some targets that are especially RAM-consuming to build.
function(setup_heavy_lib_pool) function(setup_heavy_lib_pool)
if(WITH_NINJA_POOL_JOBS AND NINJA_MAX_NUM_PARALLEL_COMPILE_HEAVY_JOBS) if(WITH_NINJA_POOL_JOBS AND NINJA_MAX_NUM_PARALLEL_COMPILE_HEAVY_JOBS)
@@ -477,8 +436,8 @@ function(SETUP_LIBDIRS)
# NOTE: For all new libraries, use absolute library paths. # NOTE: For all new libraries, use absolute library paths.
# This should eventually be phased out. # This should eventually be phased out.
# APPLE plaform uses full paths for linking libraries, and avoids link_directories.
if(NOT MSVC AND NOT APPLE) if(NOT MSVC)
link_directories(${JPEG_LIBPATH} ${PNG_LIBPATH} ${ZLIB_LIBPATH} ${FREETYPE_LIBPATH}) link_directories(${JPEG_LIBPATH} ${PNG_LIBPATH} ${ZLIB_LIBPATH} ${FREETYPE_LIBPATH})
if(WITH_PYTHON) # AND NOT WITH_PYTHON_MODULE # WIN32 needs if(WITH_PYTHON) # AND NOT WITH_PYTHON_MODULE # WIN32 needs
@@ -555,18 +514,33 @@ function(SETUP_LIBDIRS)
endif() endif()
endfunction() endfunction()
# Platform specific linker flags for targets. macro(setup_platform_linker_flags)
function(setup_platform_linker_flags set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${PLATFORM_LINKFLAGS}")
target) set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${PLATFORM_LINKFLAGS_RELEASE}")
set_property(TARGET ${target} APPEND_STRING PROPERTY LINK_FLAGS " ${PLATFORM_LINKFLAGS}") set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${PLATFORM_LINKFLAGS_DEBUG}")
set_property(TARGET ${target} APPEND_STRING PROPERTY LINK_FLAGS_RELEASE " ${PLATFORM_LINKFLAGS_RELEASE}") endmacro()
set_property(TARGET ${target} APPEND_STRING PROPERTY LINK_FLAGS_DEBUG " ${PLATFORM_LINKFLAGS_DEBUG}")
endfunction()
# Platform specific libraries for targets. function(setup_liblinks
function(setup_platform_linker_libs
target target
) )
# NOTE: This might look like it affects global scope, accumulating linker flags on every call
# to setup_liblinks, but this isn't how CMake works. These flags will only affect current
# directory from where the function is called.
# This means that setup_liblinks() called for ffmpeg_test will not affect blender, and each
# of thsoe targets will have single set of linker flags.
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${PLATFORM_LINKFLAGS}" PARENT_SCOPE)
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${PLATFORM_LINKFLAGS_DEBUG}" PARENT_SCOPE)
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${PLATFORM_LINKFLAGS_RELEASE}" PARENT_SCOPE)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${PLATFORM_LINKFLAGS}" PARENT_SCOPE)
set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} ${PLATFORM_LINKFLAGS_DEBUG}" PARENT_SCOPE)
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} ${PLATFORM_LINKFLAGS_RELEASE}" PARENT_SCOPE)
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${PLATFORM_LINKFLAGS}" PARENT_SCOPE)
set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG} ${PLATFORM_LINKFLAGS_DEBUG}" PARENT_SCOPE)
set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} ${PLATFORM_LINKFLAGS_RELEASE}" PARENT_SCOPE)
# jemalloc must be early in the list, to be before pthread (see T57998) # jemalloc must be early in the list, to be before pthread (see T57998)
if(WITH_MEM_JEMALLOC) if(WITH_MEM_JEMALLOC)
target_link_libraries(${target} ${JEMALLOC_LIBRARIES}) target_link_libraries(${target} ${JEMALLOC_LIBRARIES})
@@ -1241,16 +1215,8 @@ endmacro()
macro(without_system_libs_begin) macro(without_system_libs_begin)
set(CMAKE_IGNORE_PATH "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES};${CMAKE_SYSTEM_INCLUDE_PATH};${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES};${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}") set(CMAKE_IGNORE_PATH "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES};${CMAKE_SYSTEM_INCLUDE_PATH};${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES};${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}")
if(APPLE)
# Avoid searching for headers in frameworks (like Mono), and libraries in LIBDIR.
set(CMAKE_FIND_FRAMEWORK NEVER)
endif()
endmacro() endmacro()
macro(without_system_libs_end) macro(without_system_libs_end)
unset(CMAKE_IGNORE_PATH) unset(CMAKE_IGNORE_PATH)
if(APPLE)
# FIRST is the default.
set(CMAKE_FIND_FRAMEWORK FIRST)
endif()
endmacro() endmacro()

View File

@@ -86,7 +86,7 @@ if(WIN32)
set(CPACK_NSIS_MUI_ICON ${CMAKE_SOURCE_DIR}/release/windows/icons/winblender.ico) set(CPACK_NSIS_MUI_ICON ${CMAKE_SOURCE_DIR}/release/windows/icons/winblender.ico)
set(CPACK_NSIS_COMPRESSOR "/SOLID lzma") set(CPACK_NSIS_COMPRESSOR "/SOLID lzma")
set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/release/license/GPL-3.0.txt) set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/release/text/GPL3-license.txt)
set(CPACK_WIX_PRODUCT_ICON ${CMAKE_SOURCE_DIR}/release/windows/icons/winblender.ico) set(CPACK_WIX_PRODUCT_ICON ${CMAKE_SOURCE_DIR}/release/windows/icons/winblender.ico)
set(BLENDER_NAMESPACE_GUID "507F933F-5898-404A-9A05-18282FD491A6") set(BLENDER_NAMESPACE_GUID "507F933F-5898-404A-9A05-18282FD491A6")

View File

@@ -30,36 +30,6 @@ macro(find_package_wrapper)
# do nothing, just satisfy the macro # do nothing, just satisfy the macro
endmacro() endmacro()
function(print_found_status
lib_name
lib_path
)
if(FIRST_RUN)
if(lib_path)
message(STATUS "Found ${lib_name}: ${lib_path}")
else()
message(WARNING "Could NOT find ${lib_name}")
endif()
endif()
endfunction()
# ------------------------------------------------------------------------
# Find system provided libraries.
# Find system ZLIB, not the pre-compiled one supplied with OpenCollada.
set(ZLIB_ROOT /usr)
find_package(ZLIB REQUIRED)
find_package(BZip2 REQUIRED)
list(APPEND ZLIB_LIBRARIES ${BZIP2_LIBRARIES})
if(WITH_OPENAL)
find_package(OpenAL)
if(NOT OPENAL_FOUND)
set(WITH_OPENAL OFF)
endif()
endif()
if(NOT DEFINED LIBDIR) if(NOT DEFINED LIBDIR)
set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/darwin) set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/darwin)
# Prefer lib directory paths # Prefer lib directory paths
@@ -72,15 +42,22 @@ if(NOT EXISTS "${LIBDIR}/")
message(FATAL_ERROR "Mac OSX requires pre-compiled libs at: '${LIBDIR}'") message(FATAL_ERROR "Mac OSX requires pre-compiled libs at: '${LIBDIR}'")
endif() endif()
# ------------------------------------------------------------------------- if(WITH_OPENAL)
# Find precompiled libraries, and avoid system or user-installed ones. find_package(OpenAL)
if(OPENAL_FOUND)
if(EXISTS ${LIBDIR}) set(WITH_OPENAL ON)
without_system_libs_begin() else()
set(WITH_OPENAL OFF)
endif()
endif() endif()
if(WITH_ALEMBIC) if(WITH_ALEMBIC)
find_package(Alembic) set(ALEMBIC ${LIBDIR}/alembic)
set(ALEMBIC_INCLUDE_DIR ${ALEMBIC}/include)
set(ALEMBIC_INCLUDE_DIRS ${ALEMBIC_INCLUDE_DIR})
set(ALEMBIC_LIBPATH ${ALEMBIC}/lib)
set(ALEMBIC_LIBRARIES Alembic)
set(ALEMBIC_FOUND ON)
endif() endif()
if(WITH_USD) if(WITH_USD)
@@ -91,38 +68,30 @@ if(WITH_USD)
endif() endif()
if(WITH_OPENSUBDIV) if(WITH_OPENSUBDIV)
find_package(OpenSubdiv) set(OPENSUBDIV ${LIBDIR}/opensubdiv)
set(OPENSUBDIV_LIBPATH ${OPENSUBDIV}/lib)
find_library(OSD_LIB_CPU NAMES osdCPU PATHS ${OPENSUBDIV_LIBPATH})
find_library(OSD_LIB_GPU NAMES osdGPU PATHS ${OPENSUBDIV_LIBPATH})
set(OPENSUBDIV_INCLUDE_DIR ${OPENSUBDIV}/include)
set(OPENSUBDIV_INCLUDE_DIRS ${OPENSUBDIV_INCLUDE_DIR})
list(APPEND OPENSUBDIV_LIBRARIES ${OSD_LIB_CPU} ${OSD_LIB_GPU})
endif() endif()
if(WITH_JACK) if(WITH_JACK)
find_library(JACK_FRAMEWORK find_library(JACK_FRAMEWORK
NAMES jackmp NAMES jackmp
) )
set(JACK_INCLUDE_DIRS ${JACK_FRAMEWORK}/headers)
if(NOT JACK_FRAMEWORK) if(NOT JACK_FRAMEWORK)
set(WITH_JACK OFF) set(WITH_JACK OFF)
else()
set(JACK_INCLUDE_DIRS ${JACK_FRAMEWORK}/headers)
endif() endif()
endif() endif()
if(WITH_CODEC_SNDFILE) if(WITH_CODEC_SNDFILE)
find_package(SndFile) set(LIBSNDFILE ${LIBDIR}/sndfile)
find_library(_sndfile_FLAC_LIBRARY NAMES flac HINTS ${LIBDIR}/sndfile/lib) set(LIBSNDFILE_INCLUDE_DIRS ${LIBSNDFILE}/include)
find_library(_sndfile_OGG_LIBRARY NAMES ogg HINTS ${LIBDIR}/ffmpeg/lib) set(LIBSNDFILE_LIBRARIES sndfile FLAC ogg vorbis vorbisenc)
find_library(_sndfile_VORBIS_LIBRARY NAMES vorbis HINTS ${LIBDIR}/ffmpeg/lib) set(LIBSNDFILE_LIBPATH ${LIBSNDFILE}/lib ${LIBDIR}/ffmpeg/lib) # TODO, deprecate
find_library(_sndfile_VORBISENC_LIBRARY NAMES vorbisenc HINTS ${LIBDIR}/ffmpeg/lib)
list(APPEND LIBSNDFILE_LIBRARIES
${_sndfile_FLAC_LIBRARY}
${_sndfile_OGG_LIBRARY}
${_sndfile_VORBIS_LIBRARY}
${_sndfile_VORBISENC_LIBRARY}
)
print_found_status("SndFile libraries" "${LIBSNDFILE_LIBRARIES}")
unset(_sndfile_FLAC_LIBRARY)
unset(_sndfile_OGG_LIBRARY)
unset(_sndfile_VORBIS_LIBRARY)
unset(_sndfile_VORBISENC_LIBRARY)
endif() endif()
if(WITH_PYTHON) if(WITH_PYTHON)
@@ -161,27 +130,54 @@ if(WITH_PYTHON)
endif() endif()
if(WITH_FFTW3) if(WITH_FFTW3)
find_package(Fftw3) set(FFTW3 ${LIBDIR}/fftw3)
set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
set(FFTW3_LIBRARIES fftw3)
set(FFTW3_LIBPATH ${FFTW3}/lib)
endif() endif()
find_package(Freetype REQUIRED) set(ZLIB /usr)
set(ZLIB_INCLUDE_DIRS "${ZLIB}/include")
set(ZLIB_LIBRARIES z bz2)
set(PNG_LIBRARIES png ${ZLIB_LIBRARIES})
set(JPEG_LIBRARIES jpeg)
set(FREETYPE ${LIBDIR}/freetype)
set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2)
set(FREETYPE_LIBPATH ${FREETYPE}/lib)
set(FREETYPE_LIBRARY freetype)
if(WITH_IMAGE_OPENEXR) if(WITH_IMAGE_OPENEXR)
find_package(OpenEXR) set(OPENEXR ${LIBDIR}/openexr)
set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
set(OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDE_DIR} ${OPENEXR}/include/OpenEXR)
set(OPENEXR_LIBRARIES
Iex
Half
IlmImf
Imath
IlmThread)
set(OPENEXR_LIBPATH ${OPENEXR}/lib)
endif() endif()
if(WITH_CODEC_FFMPEG) if(WITH_CODEC_FFMPEG)
set(FFMPEG_FIND_COMPONENTS set(FFMPEG ${LIBDIR}/ffmpeg)
set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
set(FFMPEG_LIBRARIES
avcodec avdevice avformat avutil avcodec avdevice avformat avutil
mp3lame ogg opus swresample swscale mp3lame swscale x264 xvidcore
theora theoradec theoraenc vorbis vorbisenc theora theoradec theoraenc
vorbisfile vpx x264 xvidcore) vorbis vorbisenc vorbisfile ogg opus
find_package(FFmpeg) vpx swresample)
set(FFMPEG_LIBPATH ${FFMPEG}/lib)
endif() endif()
if(WITH_IMAGE_OPENJPEG OR WITH_CODEC_FFMPEG) if(WITH_IMAGE_OPENJPEG OR WITH_CODEC_FFMPEG)
# use openjpeg from libdir that is linked into ffmpeg # use openjpeg from libdir that is linked into ffmpeg
find_package(OpenJPEG) set(OPENJPEG ${LIBDIR}/openjpeg)
set(OPENJPEG_INCLUDE_DIRS ${OPENJPEG}/include)
set(OPENJPEG_LIBRARIES ${OPENJPEG}/lib/libopenjp2.a)
endif() endif()
find_library(SYSTEMSTUBS_LIBRARY find_library(SYSTEMSTUBS_LIBRARY
@@ -194,7 +190,7 @@ if(SYSTEMSTUBS_LIBRARY)
list(APPEND PLATFORM_LINKLIBS SystemStubs) list(APPEND PLATFORM_LINKLIBS SystemStubs)
endif() endif()
set(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} -pipe -funsigned-char") set(PLATFORM_CFLAGS "-pipe -funsigned-char")
set(PLATFORM_LINKFLAGS set(PLATFORM_LINKFLAGS
"-fexceptions -framework CoreServices -framework Foundation -framework IOKit -framework AppKit -framework Cocoa -framework Carbon -framework AudioUnit -framework AudioToolbox -framework CoreAudio -framework Metal -framework QuartzCore" "-fexceptions -framework CoreServices -framework Foundation -framework IOKit -framework AppKit -framework Cocoa -framework Carbon -framework AudioUnit -framework AudioToolbox -framework CoreAudio -framework Metal -framework QuartzCore"
) )
@@ -211,58 +207,77 @@ if(WITH_PYTHON_MODULE OR WITH_PYTHON_FRAMEWORK)
endif() endif()
if(WITH_OPENCOLLADA) if(WITH_OPENCOLLADA)
find_package(OpenCOLLADA) set(OPENCOLLADA ${LIBDIR}/opencollada)
find_library(PCRE_LIBRARIES NAMES pcre HINTS ${LIBDIR}/opencollada/lib)
find_library(XML2_LIBRARIES NAMES xml2 HINTS ${LIBDIR}/opencollada/lib) set(OPENCOLLADA_INCLUDE_DIRS
print_found_status("PCRE" "${PCRE_LIBRARIES}") ${LIBDIR}/opencollada/include/COLLADAStreamWriter
print_found_status("XML2" "${XML2_LIBRARIES}") ${LIBDIR}/opencollada/include/COLLADABaseUtils
${LIBDIR}/opencollada/include/COLLADAFramework
${LIBDIR}/opencollada/include/COLLADASaxFrameworkLoader
${LIBDIR}/opencollada/include/GeneratedSaxParser
)
set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib)
set(OPENCOLLADA_LIBRARIES
OpenCOLLADASaxFrameworkLoader
-lOpenCOLLADAFramework
-lOpenCOLLADABaseUtils
-lOpenCOLLADAStreamWriter
-lMathMLSolver
-lGeneratedSaxParser
-lbuffer -lftoa -lUTF
)
# PCRE and XML2 are bundled with OpenCollada.
set(PCRE_LIBRARIES pcre)
set(XML2_LIBRARIES xml2)
endif() endif()
if(WITH_SDL) if(WITH_SDL)
find_package(SDL2) set(SDL ${LIBDIR}/sdl)
set(SDL_INCLUDE_DIR ${SDL2_INCLUDE_DIRS}) set(SDL_INCLUDE_DIR ${SDL}/include)
set(SDL_LIBRARY ${SDL2_LIBRARIES}) set(SDL_LIBRARY SDL2)
set(SDL_LIBPATH ${SDL}/lib)
set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -framework ForceFeedback") set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -framework ForceFeedback")
endif() endif()
set(PNG_ROOT ${LIBDIR}/png) set(PNG "${LIBDIR}/png")
find_package(PNG REQUIRED) set(PNG_INCLUDE_DIRS "${PNG}/include")
set(PNG_LIBPATH ${PNG}/lib)
set(JPEG_ROOT ${LIBDIR}/jpeg) set(JPEG "${LIBDIR}/jpeg")
find_package(JPEG REQUIRED) set(JPEG_INCLUDE_DIR "${JPEG}/include")
set(JPEG_LIBPATH ${JPEG}/lib)
if(WITH_IMAGE_TIFF) if(WITH_IMAGE_TIFF)
set(TIFF_ROOT ${LIBDIR}/tiff) set(TIFF ${LIBDIR}/tiff)
find_package(TIFF) set(TIFF_INCLUDE_DIR ${TIFF}/include)
if(NOT TIFF_FOUND) set(TIFF_LIBRARY tiff)
message(WARNING "TIFF not found, disabling WITH_IMAGE_TIFF") set(TIFF_LIBPATH ${TIFF}/lib)
set(WITH_IMAGE_TIFF OFF)
endif()
endif() endif()
if(WITH_BOOST) if(WITH_BOOST)
set(Boost_NO_BOOST_CMAKE ON) set(BOOST ${LIBDIR}/boost)
set(BOOST_ROOT ${LIBDIR}/boost) set(BOOST_INCLUDE_DIR ${BOOST}/include)
set(Boost_NO_SYSTEM_PATHS ON) set(BOOST_POSTFIX)
set(_boost_FIND_COMPONENTS date_time filesystem regex system thread wave) set(BOOST_LIBRARIES
boost_date_time${BOOST_POSTFIX}
boost_filesystem${BOOST_POSTFIX}
boost_regex${BOOST_POSTFIX}
boost_system${BOOST_POSTFIX}
boost_thread${BOOST_POSTFIX}
boost_wave${BOOST_POSTFIX}
)
if(WITH_INTERNATIONAL) if(WITH_INTERNATIONAL)
list(APPEND _boost_FIND_COMPONENTS locale) list(APPEND BOOST_LIBRARIES boost_locale${BOOST_POSTFIX})
endif() endif()
if(WITH_CYCLES_NETWORK) if(WITH_CYCLES_NETWORK)
list(APPEND _boost_FIND_COMPONENTS serialization) list(APPEND BOOST_LIBRARIES boost_serialization${BOOST_POSTFIX})
endif() endif()
if(WITH_OPENVDB) if(WITH_OPENVDB)
list(APPEND _boost_FIND_COMPONENTS iostreams) list(APPEND BOOST_LIBRARIES boost_iostreams${BOOST_POSTFIX})
endif() endif()
find_package(Boost COMPONENTS ${_boost_FIND_COMPONENTS}) set(BOOST_LIBPATH ${BOOST}/lib)
set(BOOST_LIBRARIES ${Boost_LIBRARIES})
set(BOOST_INCLUDE_DIR ${Boost_INCLUDE_DIRS})
set(BOOST_DEFINITIONS) set(BOOST_DEFINITIONS)
mark_as_advanced(Boost_LIBRARIES)
mark_as_advanced(Boost_INCLUDE_DIRS)
unset(_boost_FIND_COMPONENTS)
endif() endif()
if(WITH_INTERNATIONAL OR WITH_CODEC_FFMPEG) if(WITH_INTERNATIONAL OR WITH_CODEC_FFMPEG)
@@ -270,8 +285,10 @@ if(WITH_INTERNATIONAL OR WITH_CODEC_FFMPEG)
endif() endif()
if(WITH_OPENIMAGEIO) if(WITH_OPENIMAGEIO)
find_package(OpenImageIO) set(OPENIMAGEIO ${LIBDIR}/openimageio)
list(APPEND OPENIMAGEIO_LIBRARIES set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include)
set(OPENIMAGEIO_LIBRARIES
${OPENIMAGEIO}/lib/libOpenImageIO.a
${PNG_LIBRARIES} ${PNG_LIBRARIES}
${JPEG_LIBRARIES} ${JPEG_LIBRARIES}
${TIFF_LIBRARY} ${TIFF_LIBRARY}
@@ -279,30 +296,69 @@ if(WITH_OPENIMAGEIO)
${OPENJPEG_LIBRARIES} ${OPENJPEG_LIBRARIES}
${ZLIB_LIBRARIES} ${ZLIB_LIBRARIES}
) )
set(OPENIMAGEIO_LIBPATH
${OPENIMAGEIO}/lib
${JPEG_LIBPATH}
${PNG_LIBPATH}
${TIFF_LIBPATH}
${OPENEXR_LIBPATH}
${ZLIB_LIBPATH}
)
set(OPENIMAGEIO_DEFINITIONS "-DOIIO_STATIC_BUILD") set(OPENIMAGEIO_DEFINITIONS "-DOIIO_STATIC_BUILD")
set(OPENIMAGEIO_IDIFF "${LIBDIR}/openimageio/bin/idiff") set(OPENIMAGEIO_IDIFF "${LIBDIR}/openimageio/bin/idiff")
endif() endif()
if(WITH_OPENCOLORIO) if(WITH_OPENCOLORIO)
find_package(OpenColorIO) set(OPENCOLORIO ${LIBDIR}/opencolorio)
set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
set(OPENCOLORIO_LIBRARIES OpenColorIO tinyxml yaml-cpp)
set(OPENCOLORIO_LIBPATH ${OPENCOLORIO}/lib)
endif() endif()
if(WITH_OPENVDB) if(WITH_OPENVDB)
find_package(OpenVDB) set(OPENVDB ${LIBDIR}/openvdb)
find_library(BLOSC_LIBRARIES NAMES blosc HINTS ${LIBDIR}/openvdb/lib) set(OPENVDB_INCLUDE_DIRS ${OPENVDB}/include)
print_found_status("Blosc" "${BLOSC_LIBRARIES}") set(OPENVDB_LIBRARIES openvdb blosc)
list(APPEND OPENVDB_LIBRARIES ${BLOSC_LIBRARIES}) set(OPENVDB_LIBPATH ${LIBDIR}/openvdb/lib)
set(OPENVDB_DEFINITIONS) set(OPENVDB_DEFINITIONS)
endif() endif()
if(WITH_NANOVDB)
set(NANOVDB ${LIBDIR}/nanovdb)
set(NANOVDB_INCLUDE_DIR ${NANOVDB}/include)
endif()
if(WITH_LLVM) if(WITH_LLVM)
find_package(LLVM) set(LLVM_ROOT_DIR ${LIBDIR}/llvm)
if(NOT LLVM_FOUND) if(EXISTS "${LLVM_ROOT_DIR}/bin/llvm-config")
set(LLVM_CONFIG "${LLVM_ROOT_DIR}/bin/llvm-config")
else()
set(LLVM_CONFIG llvm-config)
endif()
execute_process(COMMAND ${LLVM_CONFIG} --version
OUTPUT_VARIABLE LLVM_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND ${LLVM_CONFIG} --prefix
OUTPUT_VARIABLE LLVM_ROOT_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND ${LLVM_CONFIG} --includedir
OUTPUT_VARIABLE LLVM_INCLUDE_DIRS
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND ${LLVM_CONFIG} --libdir
OUTPUT_VARIABLE LLVM_LIBPATH
OUTPUT_STRIP_TRAILING_WHITESPACE)
find_library(LLVM_LIBRARY
NAMES LLVMAnalysis # first of a whole bunch of libs to get
PATHS ${LLVM_LIBPATH})
if(LLVM_LIBRARY AND LLVM_ROOT_DIR AND LLVM_LIBPATH)
if(LLVM_STATIC)
# if static LLVM libraries were requested, use llvm-config to generate
# the list of what libraries we need, and substitute that in the right
# way for LLVM_LIBRARY.
execute_process(COMMAND ${LLVM_CONFIG} --libfiles
OUTPUT_VARIABLE LLVM_LIBRARY
OUTPUT_STRIP_TRAILING_WHITESPACE)
string(REPLACE ".a /" ".a;/" LLVM_LIBRARY ${LLVM_LIBRARY})
else()
set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -lLLVM-3.4")
endif()
else()
message(FATAL_ERROR "LLVM not found.") message(FATAL_ERROR "LLVM not found.")
endif() endif()
endif() endif()
@@ -335,20 +391,7 @@ endif()
if(WITH_CYCLES_EMBREE) if(WITH_CYCLES_EMBREE)
find_package(Embree 3.8.0 REQUIRED) find_package(Embree 3.8.0 REQUIRED)
# Increase stack size for Embree, only works for executables.
if(NOT WITH_PYTHON_MODULE)
set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -Xlinker -stack_size -Xlinker 0x100000") set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -Xlinker -stack_size -Xlinker 0x100000")
endif()
# Embree static library linking can mix up SSE and AVX symbols, causing
# crashes on macOS systems with older CPUs that don't have AVX. Using
# force load avoids that. The Embree shared library does not suffer from
# this problem, precisely because linking a shared library uses force load.
set(_embree_libraries_force_load)
foreach(_embree_library ${EMBREE_LIBRARIES})
list(APPEND _embree_libraries_force_load "-Wl,-force_load,${_embree_library}")
endforeach()
set(EMBREE_LIBRARIES ${_embree_libraries_force_load})
endif() endif()
if(WITH_OPENIMAGEDENOISE) if(WITH_OPENIMAGEDENOISE)
@@ -364,17 +407,18 @@ if(WITH_TBB)
find_package(TBB) find_package(TBB)
endif() endif()
if(WITH_POTRACE) if(WITH_GMP)
find_package(Potrace) find_package(GMP)
if(NOT POTRACE_FOUND)
message(WARNING "potrace not found, disabling WITH_POTRACE") if(NOT GMP_FOUND)
set(WITH_POTRACE OFF) set(WITH_GMP OFF)
message(STATUS "GMP not found")
endif() endif()
endif() endif()
# CMake FindOpenMP doesn't know about AppleClang before 3.12, so provide custom flags. # CMake FindOpenMP doesn't know about AppleClang before 3.12, so provide custom flags.
if(WITH_OPENMP) if(WITH_OPENMP)
if(CMAKE_C_COMPILER_ID MATCHES "Clang" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "7.0") if(CMAKE_C_COMPILER_ID MATCHES "AppleClang" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "7.0")
# Use OpenMP from our precompiled libraries. # Use OpenMP from our precompiled libraries.
message(STATUS "Using ${LIBDIR}/openmp for OpenMP") message(STATUS "Using ${LIBDIR}/openmp for OpenMP")
set(OPENMP_CUSTOM ON) set(OPENMP_CUSTOM ON)
@@ -384,22 +428,14 @@ if(WITH_OPENMP)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L'${LIBDIR}/openmp/lib' -lomp") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L'${LIBDIR}/openmp/lib' -lomp")
# Copy libomp.dylib to allow executables like datatoc and tests to work. # Copy libomp.dylib to allow executables like datatoc and tests to work.
# `@executable_path/../Resources/lib/` is a default dylib search path.
# For single config generator datatoc, tests etc.
execute_process( execute_process(
COMMAND mkdir -p ${CMAKE_BINARY_DIR}/Resources/lib COMMAND mkdir -p ${CMAKE_BINARY_DIR}/Resources/lib
COMMAND cp -p ${LIBDIR}/openmp/lib/libomp.dylib ${CMAKE_BINARY_DIR}/Resources/lib/libomp.dylib COMMAND cp -p ${LIBDIR}/openmp/lib/libomp.dylib ${CMAKE_BINARY_DIR}/Resources/lib/libomp.dylib
) )
# For multi-config generator datatoc, etc.
execute_process( execute_process(
COMMAND mkdir -p ${CMAKE_BINARY_DIR}/bin/Resources/lib COMMAND mkdir -p ${CMAKE_BINARY_DIR}/bin/Resources/lib
COMMAND cp -p ${LIBDIR}/openmp/lib/libomp.dylib ${CMAKE_BINARY_DIR}/bin/Resources/lib/libomp.dylib COMMAND cp -p ${LIBDIR}/openmp/lib/libomp.dylib ${CMAKE_BINARY_DIR}/bin/Resources/lib/libomp.dylib
) )
# For multi-config generator tests.
execute_process(
COMMAND mkdir -p ${CMAKE_BINARY_DIR}/bin/tests/Resources/lib
COMMAND cp -p ${LIBDIR}/openmp/lib/libomp.dylib ${CMAKE_BINARY_DIR}/bin/tests/Resources/lib/libomp.dylib
)
endif() endif()
endif() endif()
@@ -419,13 +455,6 @@ if(WITH_GMP)
endif() endif()
endif() endif()
if(EXISTS ${LIBDIR})
without_system_libs_end()
endif()
# ---------------------------------------------------------------------
# Set compiler and linker flags.
set(EXETYPE MACOSX_BUNDLE) set(EXETYPE MACOSX_BUNDLE)
set(CMAKE_C_FLAGS_DEBUG "-fno-strict-aliasing -g") set(CMAKE_C_FLAGS_DEBUG "-fno-strict-aliasing -g")

View File

@@ -154,3 +154,11 @@ if(NOT ${CMAKE_GENERATOR} MATCHES "Xcode")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
add_definitions("-DMACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}") add_definitions("-DMACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}")
endif() endif()
if(${CMAKE_GENERATOR} MATCHES "Xcode")
# Generate schemes in Blender.xcodeproj/xcshareddata/xcschemes/ early, at
# configuration time, not when Xcode is opened.
# This gets rid of "Manage schemes automatically" confirmation dialog that
# appears whenever CMake is run.
set(CMAKE_XCODE_GENERATE_SCHEME ON)
endif()

View File

@@ -52,19 +52,12 @@ if(EXISTS ${LIBDIR})
message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}") message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}")
file(GLOB LIB_SUBDIRS ${LIBDIR}/*) file(GLOB LIB_SUBDIRS ${LIBDIR}/*)
# Ignore Mesa software OpenGL libraries, they are not intended to be
# linked against but to optionally override at runtime.
list(REMOVE_ITEM LIB_SUBDIRS ${LIBDIR}/mesa)
# NOTE: Make sure "proper" compiled zlib comes first before the one # NOTE: Make sure "proper" compiled zlib comes first before the one
# which is a part of OpenCollada. They have different ABI, and we # which is a part of OpenCollada. They have different ABI, and we
# do need to use the official one. # do need to use the official one.
set(CMAKE_PREFIX_PATH ${LIBDIR}/zlib ${LIB_SUBDIRS}) set(CMAKE_PREFIX_PATH ${LIBDIR}/zlib ${LIB_SUBDIRS})
set(WITH_STATIC_LIBS ON) set(WITH_STATIC_LIBS ON)
# OpenMP usually can't be statically linked into shared libraries,
# due to not being compiled with position independent code.
if(NOT WITH_PYTHON_MODULE)
set(WITH_OPENMP_STATIC ON) set(WITH_OPENMP_STATIC ON)
endif()
set(Boost_NO_BOOST_CMAKE ON) set(Boost_NO_BOOST_CMAKE ON)
set(BOOST_ROOT ${LIBDIR}/boost) set(BOOST_ROOT ${LIBDIR}/boost)
set(BOOST_LIBRARYDIR ${LIBDIR}/boost/lib) set(BOOST_LIBRARYDIR ${LIBDIR}/boost/lib)
@@ -264,7 +257,6 @@ endif()
if(WITH_OPENVDB) if(WITH_OPENVDB)
find_package_wrapper(OpenVDB) find_package_wrapper(OpenVDB)
find_package_wrapper(Blosc) find_package_wrapper(Blosc)
if(NOT OPENVDB_FOUND) if(NOT OPENVDB_FOUND)
set(WITH_OPENVDB OFF) set(WITH_OPENVDB OFF)
set(WITH_OPENVDB_BLOSC OFF) set(WITH_OPENVDB_BLOSC OFF)
@@ -275,15 +267,6 @@ if(WITH_OPENVDB)
endif() endif()
endif() endif()
if(WITH_NANOVDB)
find_package_wrapper(NanoVDB)
if(NOT NANOVDB_FOUND)
set(WITH_NANOVDB OFF)
message(STATUS "NanoVDB not found, disabling it")
endif()
endif()
if(WITH_ALEMBIC) if(WITH_ALEMBIC)
find_package_wrapper(Alembic) find_package_wrapper(Alembic)
@@ -444,6 +427,15 @@ if(WITH_TBB)
find_package_wrapper(TBB) find_package_wrapper(TBB)
endif() endif()
if(WITH_GMP)
find_package(GMP)
if(NOT GMP_FOUND)
set(WITH_GMP OFF)
message(STATUS "GMP not found")
endif()
endif()
if(WITH_XR_OPENXR) if(WITH_XR_OPENXR)
find_package(XR_OpenXR_SDK) find_package(XR_OpenXR_SDK)
if(NOT XR_OPENXR_SDK_FOUND) if(NOT XR_OPENXR_SDK_FOUND)
@@ -460,14 +452,6 @@ if(WITH_GMP)
endif() endif()
endif() endif()
if(WITH_POTRACE)
find_package_wrapper(Potrace)
if(NOT POTRACE_FOUND)
message(WARNING "potrace not found, disabling WITH_POTRACE")
set(WITH_POTRACE OFF)
endif()
endif()
if(EXISTS ${LIBDIR}) if(EXISTS ${LIBDIR})
without_system_libs_end() without_system_libs_end()
endif() endif()

View File

@@ -535,11 +535,6 @@ if(WITH_OPENVDB)
set(OPENVDB_DEFINITIONS -DNOMINMAX -D_USE_MATH_DEFINES) set(OPENVDB_DEFINITIONS -DNOMINMAX -D_USE_MATH_DEFINES)
endif() endif()
if(WITH_NANOVDB)
set(NANOVDB ${LIBDIR}/nanoVDB)
set(NANOVDB_INCLUDE_DIR ${NANOVDB}/include)
endif()
if(WITH_OPENIMAGEDENOISE) if(WITH_OPENIMAGEDENOISE)
set(OPENIMAGEDENOISE ${LIBDIR}/OpenImageDenoise) set(OPENIMAGEDENOISE ${LIBDIR}/OpenImageDenoise)
set(OPENIMAGEDENOISE_LIBPATH ${LIBDIR}/OpenImageDenoise/lib) set(OPENIMAGEDENOISE_LIBPATH ${LIBDIR}/OpenImageDenoise/lib)
@@ -570,7 +565,7 @@ if(WITH_IMAGE_OPENJPEG)
endif() endif()
if(WITH_OPENSUBDIV) if(WITH_OPENSUBDIV)
set(OPENSUBDIV_INCLUDE_DIRS ${LIBDIR}/opensubdiv/include) set(OPENSUBDIV_INCLUDE_DIR ${LIBDIR}/opensubdiv/include)
set(OPENSUBDIV_LIBPATH ${LIBDIR}/opensubdiv/lib) set(OPENSUBDIV_LIBPATH ${LIBDIR}/opensubdiv/lib)
set(OPENSUBDIV_LIBRARIES set(OPENSUBDIV_LIBRARIES
optimized ${OPENSUBDIV_LIBPATH}/osdCPU.lib optimized ${OPENSUBDIV_LIBPATH}/osdCPU.lib
@@ -720,24 +715,14 @@ if(WINDOWS_PYTHON_DEBUG)
string(REPLACE "/" "\\" _group_path "${_source_path}") string(REPLACE "/" "\\" _group_path "${_source_path}")
source_group("${_group_path}" FILES "${_source}") source_group("${_group_path}" FILES "${_source}")
endforeach() endforeach()
# If the user scripts env var is set, include scripts from there otherwise
# include user scripts in the profile folder.
if(DEFINED ENV{BLENDER_USER_SCRIPTS})
message(STATUS "Including user scripts from environment BLENDER_USER_SCRIPTS=$ENV{BLENDER_USER_SCRIPTS}")
set(USER_SCRIPTS_ROOT "$ENV{BLENDER_USER_SCRIPTS}")
else()
message(STATUS "Including user scripts from the profile folder")
# Include the user scripts from the profile folder in the blender_python_user_scripts project. # Include the user scripts from the profile folder in the blender_python_user_scripts project.
set(USER_SCRIPTS_ROOT "$ENV{appdata}/blender foundation/blender/${BLENDER_VERSION}/scripts") set(USER_SCRIPTS_ROOT "$ENV{appdata}/blender foundation/blender/${BLENDER_VERSION}")
endif()
file(TO_CMAKE_PATH ${USER_SCRIPTS_ROOT} USER_SCRIPTS_ROOT) file(TO_CMAKE_PATH ${USER_SCRIPTS_ROOT} USER_SCRIPTS_ROOT)
FILE(GLOB_RECURSE inFiles "${USER_SCRIPTS_ROOT}/*.*" ) FILE(GLOB_RECURSE inFiles "${USER_SCRIPTS_ROOT}/scripts/*.*" )
ADD_CUSTOM_TARGET(blender_python_user_scripts SOURCES ${inFiles}) ADD_CUSTOM_TARGET(blender_python_user_scripts SOURCES ${inFiles})
foreach(_source IN ITEMS ${inFiles}) foreach(_source IN ITEMS ${inFiles})
get_filename_component(_source_path "${_source}" PATH) get_filename_component(_source_path "${_source}" PATH)
string(REPLACE "${USER_SCRIPTS_ROOT}" "" _source_path "${_source_path}") string(REPLACE "${USER_SCRIPTS_ROOT}/scripts" "" _source_path "${_source_path}")
string(REPLACE "/" "\\" _group_path "${_source_path}") string(REPLACE "/" "\\" _group_path "${_source_path}")
source_group("${_group_path}" FILES "${_source}") source_group("${_group_path}" FILES "${_source}")
endforeach() endforeach()
@@ -775,9 +760,3 @@ if(WITH_GMP)
set(GMP_ROOT_DIR ${LIBDIR}/gmp) set(GMP_ROOT_DIR ${LIBDIR}/gmp)
set(GMP_FOUND On) set(GMP_FOUND On)
endif() endif()
if(WITH_POTRACE)
set(POTRACE_INCLUDE_DIRS ${LIBDIR}/potrace/include)
set(POTRACE_LIBRARIES ${LIBDIR}/potrace/lib/potrace.lib)
set(POTRACE_FOUND On)
endif()

View File

@@ -25,7 +25,7 @@ __all__ = (
import sys import sys
if sys.version_info.major < 3: if not sys.version_info.major < 3:
print("\nPython3.x or newer needed, found %s.\nAborting!\n" % print("\nPython3.x or newer needed, found %s.\nAborting!\n" %
sys.version.partition(" ")[0]) sys.version.partition(" ")[0])
sys.exit(1) sys.exit(1)
@@ -242,6 +242,5 @@ def main():
for s in build_info(): for s in build_info():
print(s) print(s)
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View File

@@ -12,7 +12,6 @@ from make_utils import call
# Parse arguments # Parse arguments
def parse_arguments(): def parse_arguments():
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument("--ctest-command", default="ctest") parser.add_argument("--ctest-command", default="ctest")
@@ -23,7 +22,6 @@ def parse_arguments():
parser.add_argument("build_directory") parser.add_argument("build_directory")
return parser.parse_args() return parser.parse_args()
args = parse_arguments() args = parse_arguments()
git_command = args.git_command git_command = args.git_command
svn_command = args.svn_command svn_command = args.svn_command

View File

@@ -14,15 +14,12 @@ import sys
import make_utils import make_utils
from make_utils import call, check_output from make_utils import call, check_output
def print_stage(text): def print_stage(text):
print("") print("")
print(text) print(text)
print("") print("")
# Parse arguments # Parse arguments
def parse_arguments(): def parse_arguments():
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument("--no-libraries", action="store_true") parser.add_argument("--no-libraries", action="store_true")
@@ -34,13 +31,10 @@ def parse_arguments():
parser.add_argument("--use-centos-libraries", action="store_true") parser.add_argument("--use-centos-libraries", action="store_true")
return parser.parse_args() return parser.parse_args()
def get_blender_git_root(): def get_blender_git_root():
return check_output([args.git_command, "rev-parse", "--show-toplevel"]) return check_output([args.git_command, "rev-parse", "--show-toplevel"])
# Setup for precompiled libraries and tests from svn. # Setup for precompiled libraries and tests from svn.
def svn_update(args, release_version): def svn_update(args, release_version):
svn_non_interactive = [args.svn_command, '--non-interactive'] svn_non_interactive = [args.svn_command, '--non-interactive']
@@ -104,10 +98,8 @@ def svn_update(args, release_version):
svn_dirpath = os.path.join(dirpath, ".svn") svn_dirpath = os.path.join(dirpath, ".svn")
svn_root_dirpath = os.path.join(lib_dirpath, ".svn") svn_root_dirpath = os.path.join(lib_dirpath, ".svn")
if ( if os.path.isdir(dirpath) and \
os.path.isdir(dirpath) and (os.path.exists(svn_dirpath) or os.path.exists(svn_root_dirpath)):
(os.path.exists(svn_dirpath) or os.path.exists(svn_root_dirpath))
):
if make_utils.command_missing(args.svn_command): if make_utils.command_missing(args.svn_command):
sys.stderr.write("svn not found, can't update libraries\n") sys.stderr.write("svn not found, can't update libraries\n")
sys.exit(1) sys.exit(1)
@@ -129,11 +121,9 @@ def git_update_skip(args, check_remote_exists=True):
rebase_merge = check_output([args.git_command, 'rev-parse', '--git-path', 'rebase-merge'], exit_on_error=False) rebase_merge = check_output([args.git_command, 'rev-parse', '--git-path', 'rebase-merge'], exit_on_error=False)
rebase_apply = check_output([args.git_command, 'rev-parse', '--git-path', 'rebase-apply'], exit_on_error=False) rebase_apply = check_output([args.git_command, 'rev-parse', '--git-path', 'rebase-apply'], exit_on_error=False)
merge_head = check_output([args.git_command, 'rev-parse', '--git-path', 'MERGE_HEAD'], exit_on_error=False) merge_head = check_output([args.git_command, 'rev-parse', '--git-path', 'MERGE_HEAD'], exit_on_error=False)
if ( if os.path.exists(rebase_merge) or \
os.path.exists(rebase_merge) or os.path.exists(rebase_apply) or \
os.path.exists(rebase_apply) or os.path.exists(merge_head):
os.path.exists(merge_head)
):
return "rebase or merge in progress, complete it first" return "rebase or merge in progress, complete it first"
# Abort if uncommitted changes. # Abort if uncommitted changes.
@@ -150,7 +140,6 @@ def git_update_skip(args, check_remote_exists=True):
return "" return ""
# Update blender repository. # Update blender repository.
def blender_update(args): def blender_update(args):
print_stage("Updating Blender Git Repository") print_stage("Updating Blender Git Repository")

View File

@@ -7,7 +7,6 @@ import shutil
import subprocess import subprocess
import sys import sys
def call(cmd, exit_on_error=True): def call(cmd, exit_on_error=True):
print(" ".join(cmd)) print(" ".join(cmd))
@@ -20,7 +19,6 @@ def call(cmd, exit_on_error=True):
sys.exit(retcode) sys.exit(retcode)
return retcode return retcode
def check_output(cmd, exit_on_error=True): def check_output(cmd, exit_on_error=True):
# Flush to ensure correct order output on Windows. # Flush to ensure correct order output on Windows.
sys.stdout.flush() sys.stdout.flush()
@@ -37,7 +35,6 @@ def check_output(cmd, exit_on_error=True):
return output.strip() return output.strip()
def git_branch(git_command): def git_branch(git_command):
# Get current branch name. # Get current branch name.
try: try:
@@ -48,7 +45,6 @@ def git_branch(git_command):
return branch.strip().decode('utf8') return branch.strip().decode('utf8')
def git_tag(git_command): def git_tag(git_command):
# Get current tag name. # Get current tag name.
try: try:
@@ -58,18 +54,16 @@ def git_tag(git_command):
return tag.strip().decode('utf8') return tag.strip().decode('utf8')
def git_branch_release_version(branch, tag): def git_branch_release_version(branch, tag):
release_version = re.search("^blender-v(.*)-release$", branch) release_version = re.search("^blender-v(.*)-release$", branch)
if release_version: if release_version:
release_version = release_version.group(1) release_version = release_version.group(1)
elif tag: elif tag:
release_version = re.search(r"^v([0-9]*\.[0-9]*).*", tag) release_version = re.search("^v([0-9]*\.[0-9]*).*", tag)
if release_version: if release_version:
release_version = release_version.group(1) release_version = release_version.group(1)
return release_version return release_version
def svn_libraries_base_url(release_version): def svn_libraries_base_url(release_version):
if release_version: if release_version:
svn_branch = "tags/blender-" + release_version + "-release" svn_branch = "tags/blender-" + release_version + "-release"
@@ -77,7 +71,6 @@ def svn_libraries_base_url(release_version):
svn_branch = "trunk" svn_branch = "trunk"
return "https://svn.blender.org/svnroot/bf-blender/" + svn_branch + "/lib/" return "https://svn.blender.org/svnroot/bf-blender/" + svn_branch + "/lib/"
def command_missing(command): def command_missing(command):
# Support running with Python 2 for macOS # Support running with Python 2 for macOS
if sys.version_info >= (3, 0): if sys.version_info >= (3, 0):

View File

@@ -38,7 +38,7 @@ PROJECT_NAME = Blender
# could be handy for archiving the generated documentation or if some version # could be handy for archiving the generated documentation or if some version
# control system is used. # control system is used.
PROJECT_NUMBER = "V2.92" PROJECT_NUMBER = "V2.91"
# Using the PROJECT_BRIEF tag one can provide an optional one line description # Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a # for a project that appears at the top of each page and should give viewer a

View File

@@ -1,6 +1,6 @@
""" """
Introduction Intro
------------ -----
.. warning:: .. warning::
@@ -9,8 +9,9 @@ Introduction
and the :func:`register`/:func:`unregister` functions! The :func:`pgettext` family of functions and the :func:`register`/:func:`unregister` functions! The :func:`pgettext` family of functions
should only be used in rare, specific cases (like e.g. complex "composited" UI strings...). should only be used in rare, specific cases (like e.g. complex "composited" UI strings...).
To add translations to your python script, you must define a dictionary formatted like that: | To add translations to your python script, you must define a dictionary formatted like that:
``{locale: {msg_key: msg_translation, ...}, ...}`` where: | ``{locale: {msg_key: msg_translation, ...}, ...}``
| where:
- locale is either a lang iso code (e.g. ``fr``), a lang+country code (e.g. ``pt_BR``), - locale is either a lang iso code (e.g. ``fr``), a lang+country code (e.g. ``pt_BR``),
a lang+variant code (e.g. ``sr@latin``), or a full code (e.g. ``uz_UZ@cyrilic``). a lang+variant code (e.g. ``sr@latin``), or a full code (e.g. ``uz_UZ@cyrilic``).

View File

@@ -9,24 +9,15 @@ When calling an operator you may want to pass the execution context.
This determines the context that is given for the operator to run in, and whether This determines the context that is given for the operator to run in, and whether
invoke() is called or only execute(). invoke() is called or only execute().
``EXEC_DEFAULT`` is used by default, running only the ``execute()`` method, but you may 'EXEC_DEFAULT' is used by default, running only the execute() method, but you may
want the operator to take user interaction with ``INVOKE_DEFAULT`` which will also want the operator to take user interaction with 'INVOKE_DEFAULT' which will also
call invoke() if existing. call invoke() if existing.
The execution context is one of: The execution context is one of:
('INVOKE_DEFAULT', 'INVOKE_REGION_WIN', 'INVOKE_REGION_CHANNELS',
- ``INVOKE_DEFAULT`` 'INVOKE_REGION_PREVIEW', 'INVOKE_AREA', 'INVOKE_SCREEN', 'EXEC_DEFAULT',
- ``INVOKE_REGION_WIN`` 'EXEC_REGION_WIN', 'EXEC_REGION_CHANNELS', 'EXEC_REGION_PREVIEW', 'EXEC_AREA',
- ``INVOKE_REGION_CHANNELS`` 'EXEC_SCREEN')
- ``INVOKE_REGION_PREVIEW``
- ``INVOKE_AREA``
- ``INVOKE_SCREEN``
- ``EXEC_DEFAULT``
- ``EXEC_REGION_WIN``
- ``EXEC_REGION_CHANNELS``
- ``EXEC_REGION_PREVIEW``
- ``EXEC_AREA``
- ``EXEC_SCREEN``
""" """
# collection add popup # collection add popup

View File

@@ -33,12 +33,11 @@ fragment_shader = '''
uniform float u_Scale; uniform float u_Scale;
in float v_ArcLength; in float v_ArcLength;
out vec4 FragColor;
void main() void main()
{ {
if (step(sin(v_ArcLength * u_Scale), 0.5) == 1) discard; if (step(sin(v_ArcLength * u_Scale), 0.5) == 1) discard;
FragColor = vec4(1.0); gl_FragColor = vec4(1.0);
} }
''' '''

View File

@@ -23,11 +23,10 @@ fragment_shader = '''
uniform float brightness; uniform float brightness;
in vec3 pos; in vec3 pos;
out vec4 FragColor;
void main() void main()
{ {
FragColor = vec4(pos * brightness, 1.0); gl_FragColor = vec4(pos * brightness, 1.0);
} }
''' '''

View File

@@ -56,11 +56,10 @@ fragment_shader = '''
uniform sampler2D image; uniform sampler2D image;
in vec2 uvInterp; in vec2 uvInterp;
out vec4 FragColor;
void main() void main()
{ {
FragColor = texture(image, uvInterp); gl_FragColor = texture(image, uvInterp);
} }
''' '''

View File

@@ -0,0 +1,36 @@
"""
Built-in shaders
++++++++++++++++
All built-in shaders have the ``mat4 ModelViewProjectionMatrix`` uniform.
The value of it can only be modified using the :class:`gpu.matrix` module.
2D_UNIFORM_COLOR:
attributes: vec3 pos
uniforms: vec4 color
2D_FLAT_COLOR:
attributes: vec3 pos, vec4 color
uniforms: -
2D_SMOOTH_COLOR:
attributes: vec3 pos, vec4 color
uniforms: -
2D_IMAGE:
attributes: vec3 pos, vec2 texCoord
uniforms: sampler2D image
3D_UNIFORM_COLOR:
attributes: vec3 pos
uniforms: vec4 color
3D_FLAT_COLOR:
attributes: vec3 pos, vec4 color
uniforms: -
3D_SMOOTH_COLOR:
attributes: vec3 pos, vec4 color
uniforms: -
"""

View File

@@ -13,15 +13,16 @@ than enough material to teach OpenGL programming, from books to many
collections of tutorials. collections of tutorials.
Here is a comprehensive `list of books <https://www.khronos.org/developers/books/>`__ (non free). Here is a comprehensive `list of books <https://www.khronos.org/developers/books/>`__ (non free).
`Learn OpenGL <https://learnopengl.com/>`__ is one of the best resources to learn modern OpenGL and The `arcsynthesis tutorials <https://web.archive.org/web/20150225192611/http://www.arcsynthesis.org/gltut/index.html>`__
`opengl-tutorial.org <http://www.opengl-tutorial.org/>`__ offers a set of extensive examples, is one of the best resources to learn modern OpenGL and
including advanced features. `g-truc <http://www.g-truc.net/post-opengl-samples.html#menu>`__
offers a set of extensive examples, including advanced features.
.. note:: .. note::
You can use the :class:`bpy.types.Image` type to load and set textures. You can use the :class:`Image` type to load and set textures.
See :class:`bpy.types.Image.gl_load` and :class:`bpy.types.Image.gl_free`, See :class:`Image.gl_load` and :class:`Image.gl_free`,
for example. for example.
@@ -29,7 +30,7 @@ including advanced features.
Bind a named texture to a texturing target Bind a named texture to a texturing target
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glBindTexture.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glBindTexture.xml>`__
:type target: Enumerated constant :type target: Enumerated constant
:arg target: Specifies the target to which the texture is bound. :arg target: Specifies the target to which the texture is bound.
@@ -41,7 +42,7 @@ including advanced features.
Specify pixel arithmetic Specify pixel arithmetic
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glBlendFunc.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glBlendFunc.xml>`__
:type sfactor: Enumerated constant :type sfactor: Enumerated constant
:arg sfactor: Specifies how the red, green, blue, and alpha source blending factors are :arg sfactor: Specifies how the red, green, blue, and alpha source blending factors are
@@ -55,7 +56,7 @@ including advanced features.
Clear buffers to preset values Clear buffers to preset values
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glClear.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glClear.xml>`__
:type mask: Enumerated constant(s) :type mask: Enumerated constant(s)
:arg mask: Bitwise OR of masks that indicate the buffers to be cleared. :arg mask: Bitwise OR of masks that indicate the buffers to be cleared.
@@ -65,7 +66,7 @@ including advanced features.
Specify clear values for the color buffers Specify clear values for the color buffers
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glClearColor.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glClearColor.xml>`__
:type red, green, blue, alpha: float :type red, green, blue, alpha: float
:arg red, green, blue, alpha: Specify the red, green, blue, and alpha values used when the :arg red, green, blue, alpha: Specify the red, green, blue, and alpha values used when the
@@ -76,7 +77,7 @@ including advanced features.
Specify the clear value for the depth buffer Specify the clear value for the depth buffer
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glClearDepth.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glClearDepth.xml>`__
:type depth: int :type depth: int
:arg depth: Specifies the depth value used when the depth buffer is cleared. :arg depth: Specifies the depth value used when the depth buffer is cleared.
@@ -87,7 +88,7 @@ including advanced features.
Specify the clear value for the stencil buffer Specify the clear value for the stencil buffer
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glClearStencil.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glClearStencil.xml>`__
:type s: int :type s: int
:arg s: Specifies the index used when the stencil buffer is cleared. The initial value is 0. :arg s: Specifies the index used when the stencil buffer is cleared. The initial value is 0.
@@ -97,7 +98,7 @@ including advanced features.
Specify a plane against which all geometry is clipped Specify a plane against which all geometry is clipped
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glClipPlane.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glClipPlane.xml>`__
:type plane: Enumerated constant :type plane: Enumerated constant
:arg plane: Specifies which clipping plane is being positioned. :arg plane: Specifies which clipping plane is being positioned.
@@ -116,7 +117,7 @@ including advanced features.
Set a new color. Set a new color.
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glColor.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glColor.xml>`__
:type red, green, blue, alpha: Depends on function prototype. :type red, green, blue, alpha: Depends on function prototype.
:arg red, green, blue: Specify new red, green, and blue values for the current color. :arg red, green, blue: Specify new red, green, and blue values for the current color.
@@ -128,7 +129,7 @@ including advanced features.
Enable and disable writing of frame buffer color components Enable and disable writing of frame buffer color components
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glColorMask.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glColorMask.xml>`__
:type red, green, blue, alpha: int (boolean) :type red, green, blue, alpha: int (boolean)
:arg red, green, blue, alpha: Specify whether red, green, blue, and alpha can or cannot be :arg red, green, blue, alpha: Specify whether red, green, blue, and alpha can or cannot be
@@ -140,7 +141,7 @@ including advanced features.
Copy pixels into a 2D texture image Copy pixels into a 2D texture image
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glCopyTexImage2D.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexImage2D.xml>`__
:type target: Enumerated constant :type target: Enumerated constant
:arg target: Specifies the target texture. :arg target: Specifies the target texture.
@@ -169,7 +170,7 @@ including advanced features.
Specify whether front- or back-facing facets can be culled Specify whether front- or back-facing facets can be culled
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glCullFace.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glCullFace.xml>`__
:type mode: Enumerated constant :type mode: Enumerated constant
:arg mode: Specifies whether front- or back-facing facets are candidates for culling. :arg mode: Specifies whether front- or back-facing facets are candidates for culling.
@@ -179,7 +180,7 @@ including advanced features.
Delete named textures Delete named textures
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glDeleteTextures.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glDeleteTextures.xml>`__
:type n: int :type n: int
:arg n: Specifies the number of textures to be deleted :arg n: Specifies the number of textures to be deleted
@@ -191,7 +192,7 @@ including advanced features.
Specify the value used for depth buffer comparisons Specify the value used for depth buffer comparisons
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glDepthFunc.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glDepthFunc.xml>`__
:type func: Enumerated constant :type func: Enumerated constant
:arg func: Specifies the depth comparison function. :arg func: Specifies the depth comparison function.
@@ -201,7 +202,7 @@ including advanced features.
Enable or disable writing into the depth buffer Enable or disable writing into the depth buffer
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glDepthMask.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glDepthMask.xml>`__
:type flag: int (boolean) :type flag: int (boolean)
:arg flag: Specifies whether the depth buffer is enabled for writing. If flag is GL_FALSE, :arg flag: Specifies whether the depth buffer is enabled for writing. If flag is GL_FALSE,
@@ -213,7 +214,7 @@ including advanced features.
Specify mapping of depth values from normalized device coordinates to window coordinates Specify mapping of depth values from normalized device coordinates to window coordinates
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glDepthRange.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glDepthRange.xml>`__
:type zNear: int :type zNear: int
:arg zNear: Specifies the mapping of the near clipping plane to window coordinates. :arg zNear: Specifies the mapping of the near clipping plane to window coordinates.
@@ -227,7 +228,7 @@ including advanced features.
Disable server-side GL capabilities Disable server-side GL capabilities
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glEnable.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glEnable.xml>`__
:type cap: Enumerated constant :type cap: Enumerated constant
:arg cap: Specifies a symbolic constant indicating a GL capability. :arg cap: Specifies a symbolic constant indicating a GL capability.
@@ -237,7 +238,7 @@ including advanced features.
Specify which color buffers are to be drawn into Specify which color buffers are to be drawn into
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glDrawBuffer.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glDrawBuffer.xml>`__
:type mode: Enumerated constant :type mode: Enumerated constant
:arg mode: Specifies up to four color buffers to be drawn into. :arg mode: Specifies up to four color buffers to be drawn into.
@@ -249,7 +250,7 @@ including advanced features.
Flag edges as either boundary or non-boundary Flag edges as either boundary or non-boundary
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glEdgeFlag.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlag.xml>`__
:type flag: Depends of function prototype :type flag: Depends of function prototype
:arg flag: Specifies the current edge flag value.The initial value is GL_TRUE. :arg flag: Specifies the current edge flag value.The initial value is GL_TRUE.
@@ -259,7 +260,7 @@ including advanced features.
Enable server-side GL capabilities Enable server-side GL capabilities
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glEnable.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glEnable.xml>`__
:type cap: Enumerated constant :type cap: Enumerated constant
:arg cap: Specifies a symbolic constant indicating a GL capability. :arg cap: Specifies a symbolic constant indicating a GL capability.
@@ -272,7 +273,7 @@ including advanced features.
Evaluate enabled one- and two-dimensional maps Evaluate enabled one- and two-dimensional maps
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glEvalCoord.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord.xml>`__
:type u: Depends on function prototype. :type u: Depends on function prototype.
:arg u: Specifies a value that is the domain coordinate u to the basis function defined :arg u: Specifies a value that is the domain coordinate u to the basis function defined
@@ -290,7 +291,7 @@ including advanced features.
Compute a one- or two-dimensional grid of points or lines Compute a one- or two-dimensional grid of points or lines
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glEvalMesh.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glEvalMesh.xml>`__
:type mode: Enumerated constant :type mode: Enumerated constant
:arg mode: In glEvalMesh1, specifies whether to compute a one-dimensional :arg mode: In glEvalMesh1, specifies whether to compute a one-dimensional
@@ -305,7 +306,7 @@ including advanced features.
Generate and evaluate a single point in a mesh Generate and evaluate a single point in a mesh
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glEvalPoint.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glEvalPoint.xml>`__
:type i: int :type i: int
:arg i: Specifies the integer value for grid domain variable i. :arg i: Specifies the integer value for grid domain variable i.
@@ -317,7 +318,7 @@ including advanced features.
Controls feedback mode Controls feedback mode
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glFeedbackBuffer.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glFeedbackBuffer.xml>`__
:type size: int :type size: int
:arg size: Specifies the maximum number of values that can be written into buffer. :arg size: Specifies the maximum number of values that can be written into buffer.
@@ -332,14 +333,14 @@ including advanced features.
Block until all GL execution is complete Block until all GL execution is complete
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glFinish.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glFinish.xml>`__
.. function:: glFlush(): .. function:: glFlush():
Force Execution of GL commands in finite time Force Execution of GL commands in finite time
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glFlush.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glFlush.xml>`__
.. function:: glFog (pname, param): .. function:: glFog (pname, param):
@@ -348,7 +349,7 @@ including advanced features.
Specify fog parameters Specify fog parameters
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glFog.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glFog.xml>`__
:type pname: Enumerated constant :type pname: Enumerated constant
:arg pname: Specifies a single-valued fog parameter. If the function prototype :arg pname: Specifies a single-valued fog parameter. If the function prototype
@@ -363,7 +364,7 @@ including advanced features.
Define front- and back-facing polygons Define front- and back-facing polygons
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glFrontFace.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glFrontFace.xml>`__
:type mode: Enumerated constant :type mode: Enumerated constant
:arg mode: Specifies the orientation of front-facing polygons. :arg mode: Specifies the orientation of front-facing polygons.
@@ -373,7 +374,7 @@ including advanced features.
Generate texture names Generate texture names
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glGenTextures.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGenTextures.xml>`__
:type n: int :type n: int
:arg n: Specifies the number of textures name to be generated. :arg n: Specifies the number of textures name to be generated.
@@ -387,7 +388,7 @@ including advanced features.
Return the value or values of a selected parameter Return the value or values of a selected parameter
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glGet.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGet.xml>`__
:type pname: Enumerated constant :type pname: Enumerated constant
:arg pname: Specifies the parameter value to be returned. :arg pname: Specifies the parameter value to be returned.
@@ -399,7 +400,7 @@ including advanced features.
Return error information Return error information
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glGetError.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetError.xml>`__
.. function:: glGetLight (light, pname, params): .. function:: glGetLight (light, pname, params):
@@ -408,7 +409,7 @@ including advanced features.
Return light source parameter values Return light source parameter values
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glGetLight.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetLight.xml>`__
:type light: Enumerated constant :type light: Enumerated constant
:arg light: Specifies a light source. The number of possible lights depends on the :arg light: Specifies a light source. The number of possible lights depends on the
@@ -426,7 +427,7 @@ including advanced features.
Return evaluator parameters Return evaluator parameters
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glGetMap.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetMap.xml>`__
:type target: Enumerated constant :type target: Enumerated constant
:arg target: Specifies the symbolic name of a map. :arg target: Specifies the symbolic name of a map.
@@ -442,7 +443,7 @@ including advanced features.
Return material parameters Return material parameters
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glGetMaterial.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetMaterial.xml>`__
:type face: Enumerated constant :type face: Enumerated constant
:arg face: Specifies which of the two materials is being queried. :arg face: Specifies which of the two materials is being queried.
@@ -459,7 +460,7 @@ including advanced features.
Return the specified pixel map Return the specified pixel map
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glGetPixelMap.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMap.xml>`__
:type map: Enumerated constant :type map: Enumerated constant
:arg map: Specifies the name of the pixel map to return. :arg map: Specifies the name of the pixel map to return.
@@ -471,7 +472,7 @@ including advanced features.
Return a string describing the current GL connection Return a string describing the current GL connection
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glGetString.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetString.xml>`__
:type name: Enumerated constant :type name: Enumerated constant
:arg name: Specifies a symbolic constant. :arg name: Specifies a symbolic constant.
@@ -484,7 +485,7 @@ including advanced features.
Return texture environment parameters Return texture environment parameters
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glGetTexEnv.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexEnv.xml>`__
:type target: Enumerated constant :type target: Enumerated constant
:arg target: Specifies a texture environment. Must be GL_TEXTURE_ENV. :arg target: Specifies a texture environment. Must be GL_TEXTURE_ENV.
@@ -500,7 +501,7 @@ including advanced features.
Return texture coordinate generation parameters Return texture coordinate generation parameters
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glGetTexGen.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGen.xml>`__
:type coord: Enumerated constant :type coord: Enumerated constant
:arg coord: Specifies a texture coordinate. :arg coord: Specifies a texture coordinate.
@@ -514,7 +515,7 @@ including advanced features.
Return a texture image Return a texture image
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glGetTexImage.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexImage.xml>`__
:type target: Enumerated constant :type target: Enumerated constant
:arg target: Specifies which texture is to be obtained. :arg target: Specifies which texture is to be obtained.
@@ -536,7 +537,7 @@ including advanced features.
return texture parameter values for a specific level of detail return texture parameter values for a specific level of detail
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glGetTexLevelParameter.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexLevelParameter.xml>`__
:type target: Enumerated constant :type target: Enumerated constant
:arg target: Specifies the symbolic name of the target texture. :arg target: Specifies the symbolic name of the target texture.
@@ -555,7 +556,7 @@ including advanced features.
Return texture parameter values Return texture parameter values
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glGetTexParameter.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexParameter.xml>`__
:type target: Enumerated constant :type target: Enumerated constant
:arg target: Specifies the symbolic name of the target texture. :arg target: Specifies the symbolic name of the target texture.
@@ -569,7 +570,7 @@ including advanced features.
Specify implementation-specific hints Specify implementation-specific hints
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glHint.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glHint.xml>`__
:type target: Enumerated constant :type target: Enumerated constant
:arg target: Specifies a symbolic constant indicating the behavior to be :arg target: Specifies a symbolic constant indicating the behavior to be
@@ -582,7 +583,7 @@ including advanced features.
Test whether a capability is enabled Test whether a capability is enabled
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glIsEnabled.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glIsEnabled.xml>`__
:type cap: Enumerated constant :type cap: Enumerated constant
:arg cap: Specifies a constant representing a GL capability. :arg cap: Specifies a constant representing a GL capability.
@@ -592,7 +593,7 @@ including advanced features.
Determine if a name corresponds to a texture Determine if a name corresponds to a texture
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glIsTexture.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glIsTexture.xml>`__
:type texture: unsigned int :type texture: unsigned int
:arg texture: Specifies a value that may be the name of a texture. :arg texture: Specifies a value that may be the name of a texture.
@@ -604,7 +605,7 @@ including advanced features.
Set the light source parameters Set the light source parameters
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glLight.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glLight.xml>`__
:type light: Enumerated constant :type light: Enumerated constant
:arg light: Specifies a light. The number of lights depends on the implementation, :arg light: Specifies a light. The number of lights depends on the implementation,
@@ -624,7 +625,7 @@ including advanced features.
Set the lighting model parameters Set the lighting model parameters
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glLightModel.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glLightModel.xml>`__
:type pname: Enumerated constant :type pname: Enumerated constant
:arg pname: Specifies a single-value light model parameter. :arg pname: Specifies a single-value light model parameter.
@@ -637,7 +638,7 @@ including advanced features.
Specify the width of rasterized lines. Specify the width of rasterized lines.
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glLineWidth.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glLineWidth.xml>`__
:type width: float :type width: float
:arg width: Specifies the width of rasterized lines. The initial value is 1. :arg width: Specifies the width of rasterized lines. The initial value is 1.
@@ -649,7 +650,7 @@ including advanced features.
Replace the current matrix with the specified matrix Replace the current matrix with the specified matrix
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glLoadMatrix.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glLoadMatrix.xml>`__
:type m: :class:`bgl.Buffer` object. Depends on function prototype. :type m: :class:`bgl.Buffer` object. Depends on function prototype.
:arg m: Specifies a pointer to 16 consecutive values, which are used as the elements :arg m: Specifies a pointer to 16 consecutive values, which are used as the elements
@@ -660,7 +661,7 @@ including advanced features.
Specify a logical pixel operation for color index rendering Specify a logical pixel operation for color index rendering
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glLogicOp.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glLogicOp.xml>`__
:type opcode: Enumerated constant :type opcode: Enumerated constant
:arg opcode: Specifies a symbolic constant that selects a logical operation. :arg opcode: Specifies a symbolic constant that selects a logical operation.
@@ -672,7 +673,7 @@ including advanced features.
Define a one-dimensional evaluator Define a one-dimensional evaluator
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glMap1.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glMap1.xml>`__
:type target: Enumerated constant :type target: Enumerated constant
:arg target: Specifies the kind of values that are generated by the evaluator. :arg target: Specifies the kind of values that are generated by the evaluator.
@@ -697,7 +698,7 @@ including advanced features.
Define a two-dimensional evaluator Define a two-dimensional evaluator
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glMap2.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glMap2.xml>`__
:type target: Enumerated constant :type target: Enumerated constant
:arg target: Specifies the kind of values that are generated by the evaluator. :arg target: Specifies the kind of values that are generated by the evaluator.
@@ -738,7 +739,7 @@ including advanced features.
Define a one- or two-dimensional mesh Define a one- or two-dimensional mesh
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glMapGrid.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid.xml>`__
:type un: int :type un: int
:arg un: Specifies the number of partitions in the grid range interval :arg un: Specifies the number of partitions in the grid range interval
@@ -757,7 +758,7 @@ including advanced features.
Specify material parameters for the lighting model. Specify material parameters for the lighting model.
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glMaterial.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glMaterial.xml>`__
:type face: Enumerated constant :type face: Enumerated constant
:arg face: Specifies which face or faces are being updated. Must be one of: :arg face: Specifies which face or faces are being updated. Must be one of:
@@ -776,7 +777,7 @@ including advanced features.
Multiply the current matrix with the specified matrix Multiply the current matrix with the specified matrix
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glMultMatrix.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glMultMatrix.xml>`__
:type m: :class:`bgl.Buffer` object. Depends on function prototype. :type m: :class:`bgl.Buffer` object. Depends on function prototype.
:arg m: Points to 16 consecutive values that are used as the elements of a 4x4 column :arg m: Points to 16 consecutive values that are used as the elements of a 4x4 column
@@ -790,7 +791,7 @@ including advanced features.
Set the current normal vector Set the current normal vector
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glNormal.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glNormal.xml>`__
:type nx, ny, nz: Depends on function prototype. (non - 'v' prototypes only) :type nx, ny, nz: Depends on function prototype. (non - 'v' prototypes only)
:arg nx, ny, nz: Specify the x, y, and z coordinates of the new current normal. :arg nx, ny, nz: Specify the x, y, and z coordinates of the new current normal.
@@ -806,7 +807,7 @@ including advanced features.
Set up pixel transfer maps Set up pixel transfer maps
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glPixelMap.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMap.xml>`__
:type map: Enumerated constant :type map: Enumerated constant
:arg map: Specifies a symbolic map name. :arg map: Specifies a symbolic map name.
@@ -822,7 +823,7 @@ including advanced features.
Set pixel storage modes Set pixel storage modes
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glPixelStore.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glPixelStore.xml>`__
:type pname: Enumerated constant :type pname: Enumerated constant
:arg pname: Specifies the symbolic name of the parameter to be set. :arg pname: Specifies the symbolic name of the parameter to be set.
@@ -838,7 +839,7 @@ including advanced features.
Set pixel transfer modes Set pixel transfer modes
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glPixelTransfer.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glPixelTransfer.xml>`__
:type pname: Enumerated constant :type pname: Enumerated constant
:arg pname: Specifies the symbolic name of the pixel transfer parameter to be set. :arg pname: Specifies the symbolic name of the pixel transfer parameter to be set.
@@ -850,7 +851,7 @@ including advanced features.
Specify the diameter of rasterized points Specify the diameter of rasterized points
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glPointSize.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glPointSize.xml>`__
:type size: float :type size: float
:arg size: Specifies the diameter of rasterized points. The initial value is 1. :arg size: Specifies the diameter of rasterized points. The initial value is 1.
@@ -860,7 +861,7 @@ including advanced features.
Select a polygon rasterization mode Select a polygon rasterization mode
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glPolygonMode.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonMode.xml>`__
:type face: Enumerated constant :type face: Enumerated constant
:arg face: Specifies the polygons that mode applies to. :arg face: Specifies the polygons that mode applies to.
@@ -875,7 +876,7 @@ including advanced features.
Set the scale and units used to calculate depth values Set the scale and units used to calculate depth values
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glPolygonOffset.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonOffset.xml>`__
:type factor: float :type factor: float
:arg factor: Specifies a scale factor that is used to create a variable depth :arg factor: Specifies a scale factor that is used to create a variable depth
@@ -895,7 +896,7 @@ including advanced features.
Specify the raster position for pixel operations Specify the raster position for pixel operations
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glRasterPos.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos.xml>`__
:type x, y, z, w: Depends on function prototype. (z and w for '3' and '4' prototypes only) :type x, y, z, w: Depends on function prototype. (z and w for '3' and '4' prototypes only)
:arg x, y, z, w: Specify the x,y,z, and w object coordinates (if present) for the :arg x, y, z, w: Specify the x,y,z, and w object coordinates (if present) for the
@@ -927,7 +928,7 @@ including advanced features.
Select a color buffer source for pixels. Select a color buffer source for pixels.
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glReadBuffer.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glReadBuffer.xml>`__
:type mode: Enumerated constant :type mode: Enumerated constant
:arg mode: Specifies a color buffer. :arg mode: Specifies a color buffer.
@@ -937,7 +938,7 @@ including advanced features.
Read a block of pixels from the frame buffer Read a block of pixels from the frame buffer
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glReadPixels.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glReadPixels.xml>`__
:type x, y: int :type x, y: int
:arg x, y: Specify the window coordinates of the first pixel that is read :arg x, y: Specify the window coordinates of the first pixel that is read
@@ -960,7 +961,7 @@ including advanced features.
Draw a rectangle Draw a rectangle
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glRect.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glRect.xml>`__
:type x1, y1: Depends on function prototype. (for non 'v' prototypes only) :type x1, y1: Depends on function prototype. (for non 'v' prototypes only)
:arg x1, y1: Specify one vertex of a rectangle :arg x1, y1: Specify one vertex of a rectangle
@@ -977,7 +978,7 @@ including advanced features.
Multiply the current matrix by a rotation matrix Multiply the current matrix by a rotation matrix
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glRotate.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glRotate.xml>`__
:type angle: Depends on function prototype. :type angle: Depends on function prototype.
:arg angle: Specifies the angle of rotation in degrees. :arg angle: Specifies the angle of rotation in degrees.
@@ -991,7 +992,7 @@ including advanced features.
Multiply the current matrix by a general scaling matrix Multiply the current matrix by a general scaling matrix
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glScale.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glScale.xml>`__
:type x, y, z: Depends on function prototype. :type x, y, z: Depends on function prototype.
:arg x, y, z: Specify scale factors along the x, y, and z axes, respectively. :arg x, y, z: Specify scale factors along the x, y, and z axes, respectively.
@@ -1001,7 +1002,7 @@ including advanced features.
Define the scissor box Define the scissor box
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glScissor.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glScissor.xml>`__
:type x, y: int :type x, y: int
:arg x, y: Specify the lower left corner of the scissor box. Initially (0, 0). :arg x, y: Specify the lower left corner of the scissor box. Initially (0, 0).
@@ -1015,7 +1016,7 @@ including advanced features.
Set function and reference value for stencil testing Set function and reference value for stencil testing
.. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man/docbook4/xhtml/glStencilFunc.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man/docbook4/xhtml/glStencilFunc.xml>`__
:type func: Enumerated constant :type func: Enumerated constant
:arg func: Specifies the test function. :arg func: Specifies the test function.
@@ -1032,7 +1033,7 @@ including advanced features.
Control the writing of individual bits in the stencil planes Control the writing of individual bits in the stencil planes
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glStencilMask.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glStencilMask.xml>`__
:type mask: unsigned int :type mask: unsigned int
:arg mask: Specifies a bit mask to enable and disable writing of individual bits :arg mask: Specifies a bit mask to enable and disable writing of individual bits
@@ -1043,7 +1044,7 @@ including advanced features.
Set stencil test actions Set stencil test actions
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glStencilOp.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glStencilOp.xml>`__
:type fail: Enumerated constant :type fail: Enumerated constant
:arg fail: Specifies the action to take when the stencil test fails. :arg fail: Specifies the action to take when the stencil test fails.
@@ -1071,7 +1072,7 @@ including advanced features.
Set the current texture coordinates Set the current texture coordinates
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glTexCoord.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord.xml>`__
:type s, t, r, q: Depends on function prototype. (r and q for '3' and '4' prototypes only) :type s, t, r, q: Depends on function prototype. (r and q for '3' and '4' prototypes only)
:arg s, t, r, q: Specify s, t, r, and q texture coordinates. Not all parameters are :arg s, t, r, q: Specify s, t, r, and q texture coordinates. Not all parameters are
@@ -1087,7 +1088,7 @@ including advanced features.
Set texture environment parameters Set texture environment parameters
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glTexEnv.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnv.xml>`__
:type target: Enumerated constant :type target: Enumerated constant
:arg target: Specifies a texture environment. Must be GL_TEXTURE_ENV. :arg target: Specifies a texture environment. Must be GL_TEXTURE_ENV.
@@ -1106,7 +1107,7 @@ including advanced features.
Control the generation of texture coordinates Control the generation of texture coordinates
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glTexGen.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glTexGen.xml>`__
:type coord: Enumerated constant :type coord: Enumerated constant
:arg coord: Specifies a texture coordinate. :arg coord: Specifies a texture coordinate.
@@ -1124,7 +1125,7 @@ including advanced features.
Specify a one-dimensional texture image Specify a one-dimensional texture image
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glTexImage1D.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage1D.xml>`__
:type target: Enumerated constant :type target: Enumerated constant
:arg target: Specifies the target texture. :arg target: Specifies the target texture.
@@ -1151,7 +1152,7 @@ including advanced features.
Specify a two-dimensional texture image Specify a two-dimensional texture image
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glTexImage2D.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage2D.xml>`__
:type target: Enumerated constant :type target: Enumerated constant
:arg target: Specifies the target texture. :arg target: Specifies the target texture.
@@ -1184,7 +1185,7 @@ including advanced features.
Set texture parameters Set texture parameters
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glTexParameter.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameter.xml>`__
:type target: Enumerated constant :type target: Enumerated constant
:arg target: Specifies the target texture. :arg target: Specifies the target texture.
@@ -1201,7 +1202,7 @@ including advanced features.
Multiply the current matrix by a translation matrix Multiply the current matrix by a translation matrix
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glTranslate.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glTranslate.xml>`__
:type x, y, z: Depends on function prototype. :type x, y, z: Depends on function prototype.
:arg x, y, z: Specify the x, y, and z coordinates of a translation vector. :arg x, y, z: Specify the x, y, and z coordinates of a translation vector.
@@ -1211,7 +1212,7 @@ including advanced features.
Set the viewport Set the viewport
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glViewport.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glViewport.xml>`__
:type x, y: int :type x, y: int
:arg x, y: Specify the lower left corner of the viewport rectangle, :arg x, y: Specify the lower left corner of the viewport rectangle,
@@ -1226,7 +1227,7 @@ including advanced features.
Installs a program object as part of current rendering state Installs a program object as part of current rendering state
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glUseProgram.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glUseProgram.xml>`__
:type program: int :type program: int
:arg program: Specifies the handle of the program object whose executables are to be used as part of current rendering state. :arg program: Specifies the handle of the program object whose executables are to be used as part of current rendering state.
@@ -1236,7 +1237,7 @@ including advanced features.
Validates a program object Validates a program object
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glValidateProgram.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glValidateProgram.xml>`__
:type program: int :type program: int
:arg program: Specifies the handle of the program object to be validated. :arg program: Specifies the handle of the program object to be validated.
@@ -1246,7 +1247,7 @@ including advanced features.
Links a program object. Links a program object.
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glLinkProgram.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glLinkProgram.xml>`__
:type program: int :type program: int
:arg program: Specifies the handle of the program object to be linked. :arg program: Specifies the handle of the program object to be linked.
@@ -1256,7 +1257,7 @@ including advanced features.
Select active texture unit. Select active texture unit.
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glActiveTexture.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glActiveTexture.xml>`__
:type texture: int :type texture: int
:arg texture: Constant in ``GL_TEXTURE0`` 0 - 8 :arg texture: Constant in ``GL_TEXTURE0`` 0 - 8
@@ -1266,7 +1267,7 @@ including advanced features.
Attaches a shader object to a program object. Attaches a shader object to a program object.
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glAttachShader.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glAttachShader.xml>`__
:type program: int :type program: int
:arg program: Specifies the program object to which a shader object will be attached. :arg program: Specifies the program object to which a shader object will be attached.
@@ -1278,7 +1279,7 @@ including advanced features.
Compiles a shader object. Compiles a shader object.
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glCompileShader.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glCompileShader.xml>`__
:type shader: int :type shader: int
:arg shader: Specifies the shader object to be compiled. :arg shader: Specifies the shader object to be compiled.
@@ -1288,7 +1289,7 @@ including advanced features.
Creates a program object Creates a program object
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glCreateProgram.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glCreateProgram.xml>`__
:rtype: int :rtype: int
:return: The new program or zero if an error occurs. :return: The new program or zero if an error occurs.
@@ -1298,7 +1299,7 @@ including advanced features.
Creates a shader object. Creates a shader object.
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glCreateShader.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glCreateShader.xml>`__
:type shaderType: Specifies the type of shader to be created. :type shaderType: Specifies the type of shader to be created.
Must be one of ``GL_VERTEX_SHADER``, Must be one of ``GL_VERTEX_SHADER``,
@@ -1315,7 +1316,7 @@ including advanced features.
Deletes a program object. Deletes a program object.
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glDeleteProgram.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glDeleteProgram.xml>`__
:type program: int :type program: int
:arg program: Specifies the program object to be deleted. :arg program: Specifies the program object to be deleted.
@@ -1325,7 +1326,7 @@ including advanced features.
Deletes a shader object. Deletes a shader object.
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glDeleteShader.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glDeleteShader.xml>`__
:type shader: int :type shader: int
:arg shader: Specifies the shader object to be deleted. :arg shader: Specifies the shader object to be deleted.
@@ -1335,7 +1336,7 @@ including advanced features.
Detaches a shader object from a program object to which it is attached. Detaches a shader object from a program object to which it is attached.
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glDetachShader.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glDetachShader.xml>`__
:type program: int :type program: int
:arg program: Specifies the program object from which to detach the shader object. :arg program: Specifies the program object from which to detach the shader object.
@@ -1347,7 +1348,7 @@ including advanced features.
Returns the handles of the shader objects attached to a program object. Returns the handles of the shader objects attached to a program object.
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glGetAttachedShaders.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetAttachedShaders.xml>`__
:type program: int :type program: int
:arg program: Specifies the program object to be queried. :arg program: Specifies the program object to be queried.
@@ -1363,7 +1364,7 @@ including advanced features.
Returns the information log for a program object. Returns the information log for a program object.
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glGetProgramInfoLog.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetProgramInfoLog.xml>`__
:type program: int :type program: int
:arg program: Specifies the program object whose information log is to be queried. :arg program: Specifies the program object whose information log is to be queried.
@@ -1379,7 +1380,7 @@ including advanced features.
Returns the information log for a shader object. Returns the information log for a shader object.
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glGetShaderInfoLog.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetShaderInfoLog.xml>`__
:type shader: int :type shader: int
:arg shader: Specifies the shader object whose information log is to be queried. :arg shader: Specifies the shader object whose information log is to be queried.
@@ -1395,7 +1396,7 @@ including advanced features.
Returns a parameter from a program object. Returns a parameter from a program object.
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glGetProgram.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetProgram.xml>`__
:type program: int :type program: int
:arg program: Specifies the program object to be queried. :arg program: Specifies the program object to be queried.
@@ -1409,7 +1410,7 @@ including advanced features.
Determines if a name corresponds to a shader object. Determines if a name corresponds to a shader object.
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glIsShader.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glIsShader.xml>`__
:type shader: int :type shader: int
:arg shader: Specifies a potential shader object. :arg shader: Specifies a potential shader object.
@@ -1419,7 +1420,7 @@ including advanced features.
Determines if a name corresponds to a program object Determines if a name corresponds to a program object
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glIsProgram.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glIsProgram.xml>`__
:type program: int :type program: int
:arg program: Specifies a potential program object. :arg program: Specifies a potential program object.
@@ -1429,7 +1430,7 @@ including advanced features.
Returns the source code string from a shader object Returns the source code string from a shader object
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glGetShaderSource.xhtml>`__ .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetShaderSource.xml>`__
:type shader: int :type shader: int
:arg shader: Specifies the shader object to be queried. :arg shader: Specifies the shader object to be queried.

View File

@@ -5,6 +5,17 @@
--partial bmesh* ; cd doc/python_api ; sphinx-build sphinx-in sphinx-out ; cd ../../ --partial bmesh* ; cd doc/python_api ; sphinx-build sphinx-in sphinx-out ; cd ../../
Submodules:
.. toctree::
:maxdepth: 1
bmesh.ops.rst
bmesh.types.rst
bmesh.utils.rst
bmesh.geometry.rst
Introduction Introduction
------------ ------------

View File

@@ -677,8 +677,7 @@ Here are some general hints to avoid running into these problems:
Undo/Redo Undo/Redo
--------- ---------
For safety, you should assume that undo and redo always invalidates all :class:`bpy.types.ID` Undo invalidates all :class:`bpy.types.ID` instances (Object, Scene, Mesh, Light, etc.).
instances (Object, Scene, Mesh, Light, etc.), as weel obviously as all of their sub-data.
This example shows how you can tell undo changes the memory locations: This example shows how you can tell undo changes the memory locations:
@@ -687,7 +686,7 @@ This example shows how you can tell undo changes the memory locations:
>>> hash(bpy.context.object) >>> hash(bpy.context.object)
-9223372036849950810 -9223372036849950810
Delete the active object, then undo: Move the active object, then undo:
>>> hash(bpy.context.object) >>> hash(bpy.context.object)
-9223372036849951740 -9223372036849951740
@@ -696,16 +695,6 @@ As suggested above, simply not holding references to data when Blender is used
interactively by the user is the only way to make sure that the script doesn't become unstable. interactively by the user is the only way to make sure that the script doesn't become unstable.
.. note::
Modern undo/redo system does not systematically invalidate all pointers anymore.
Some data (in fact, most data, in typical cases), which were detected as unchanged for a
particular history step, may remain unchanged and hence their pointers may remain valid.
Be aware that if you want to take advantage of this behavior for some reason, there is no
guarantee of any kind that it will be safe and consistent. Use it at your own risk.
Undo & Library Data Undo & Library Data
^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^
@@ -723,17 +712,6 @@ So it's best to consider modifying library data an advanced usage of the API
and only to use it when you know what you're doing. and only to use it when you know what you're doing.
Abusing RNA property callbacks
------------------------------
Python-defined RNA properties can have custom callbacks. Trying to perform complex operations
from there, like calling an operator, may work, but is not officialy recommended nor supported.
Main reason is that those callback should be very fast, but additionally, it may for example
create issues with undo/redo system (most operators store an history step, and editing an RNA
property does so as well), trigger infinite update loops, and so on.
Edit-Mode / Memory Access Edit-Mode / Memory Access
------------------------- -------------------------

View File

@@ -49,6 +49,10 @@ This module gives access to low level bmesh operations.
Most operators take input and return output, they can be chained together Most operators take input and return output, they can be chained together
to perform useful operations. to perform useful operations.
.. note::
This API us new in 2.65 and not yet well tested.
Operator Example Operator Example
++++++++++++++++ ++++++++++++++++

View File

@@ -41,7 +41,8 @@ Sphinx: HTML generation
After you have built doc/python_api/sphinx-in (see above), After you have built doc/python_api/sphinx-in (see above),
generate html docs by running: generate html docs by running:
sphinx-build doc/python_api/sphinx-in doc/python_api/sphinx-out cd doc/python_api
sphinx-build sphinx-in sphinx-out
Sphinx: PDF generation Sphinx: PDF generation
@@ -92,13 +93,12 @@ SCRIPT_DIR = os.path.abspath(os.path.dirname(__file__))
# For now, ignore add-ons and internal subclasses of 'bpy.types.PropertyGroup'. # For now, ignore add-ons and internal subclasses of 'bpy.types.PropertyGroup'.
# #
# Besides disabling this line, the main change will be to add a # Besides disabling this line, the main change will be to add a
# 'toctree' to 'write_rst_index' which contains the generated rst files. # 'toctree' to 'write_rst_contents' which contains the generated rst files.
# This 'toctree' can be generated automatically. # This 'toctree' can be generated automatically.
# #
# See: D6261 for reference. # See: D6261 for reference.
USE_ONLY_BUILTIN_RNA_TYPES = True USE_ONLY_BUILTIN_RNA_TYPES = True
def handle_args(): def handle_args():
''' '''
Parse the args passed to Blender after "--", ignored by Blender Parse the args passed to Blender after "--", ignored by Blender
@@ -173,7 +173,7 @@ def handle_args():
dest="log", dest="log",
default=False, default=False,
action='store_true', action='store_true',
help="Log the output of the API dump and sphinx|latex " help="Log the output of the api dump and sphinx|latex "
"warnings and errors (default=False).\n" "warnings and errors (default=False).\n"
"If given, save logs in:\n" "If given, save logs in:\n"
"* OUTPUT_DIR/.bpy.log\n" "* OUTPUT_DIR/.bpy.log\n"
@@ -244,7 +244,6 @@ else:
"bpy.types", # supports filtering "bpy.types", # supports filtering
"bpy.utils", "bpy.utils",
"bpy.utils.previews", "bpy.utils.previews",
"bpy.utils.units",
"bpy_extras", "bpy_extras",
"gpu", "gpu",
"gpu.types", "gpu.types",
@@ -351,9 +350,9 @@ RST_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, "rst"))
# stored in ./rst/info_* # stored in ./rst/info_*
INFO_DOCS = ( INFO_DOCS = (
("info_quickstart.rst", ("info_quickstart.rst",
"Quickstart: New to Blender or scripting and want to get your feet wet?"), "Quickstart: new to Blender or scripting and want to get your feet wet?"),
("info_overview.rst", ("info_overview.rst",
"API Overview: A more complete explanation of Python integration"), "API Overview: a more complete explanation of Python integration"),
("info_api_reference.rst", ("info_api_reference.rst",
"API Reference Usage: examples of how to use the API reference docs"), "API Reference Usage: examples of how to use the API reference docs"),
("info_best_practice.rst", ("info_best_practice.rst",
@@ -361,8 +360,8 @@ INFO_DOCS = (
("info_tips_and_tricks.rst", ("info_tips_and_tricks.rst",
"Tips and Tricks: Hints to help you while writing scripts for Blender"), "Tips and Tricks: Hints to help you while writing scripts for Blender"),
("info_gotcha.rst", ("info_gotcha.rst",
"Gotcha's: Some of the problems you may encounter when writing scripts"), "Gotcha's: some of the problems you may encounter when writing scripts"),
("change_log.rst", "Change Log: List of changes since last Blender release"), ("change_log.rst", "List of changes since last Blender release"),
) )
# only support for properties atm. # only support for properties atm.
@@ -496,13 +495,6 @@ else:
bpy_struct = None bpy_struct = None
def import_value_from_module(module_name, import_name):
ns = {}
exec_str = "from %s import %s as value" % (module_name, import_name)
exec(exec_str, ns, ns)
return ns["value"]
def escape_rst(text): def escape_rst(text):
""" Escape plain text which may contain characters used by RST. """ Escape plain text which may contain characters used by RST.
""" """
@@ -752,12 +744,13 @@ def pyprop2sphinx(ident, fw, identifier, py_prop):
else: else:
fw(ident + ".. attribute:: %s\n\n" % identifier) fw(ident + ".. attribute:: %s\n\n" % identifier)
write_indented_lines(ident + " ", fw, py_prop.__doc__) write_indented_lines(ident + " ", fw, py_prop.__doc__)
fw("\n")
if py_prop.fset is None: if py_prop.fset is None:
fw(ident + " (readonly)\n\n") fw(ident + " (readonly)\n\n")
else:
fw("\n")
def pymodule2sphinx(basepath, module_name, module, title, module_all_extra): def pymodule2sphinx(basepath, module_name, module, title):
import types import types
attribute_set = set() attribute_set = set()
filepath = os.path.join(basepath, module_name + ".rst") filepath = os.path.join(basepath, module_name + ".rst")
@@ -804,51 +797,42 @@ def pymodule2sphinx(basepath, module_name, module, title, module_all_extra):
fw(module.__doc__.strip()) fw(module.__doc__.strip())
fw("\n\n") fw("\n\n")
write_example_ref("", fw, module_name)
# write submodules # write submodules
# we could also scan files but this ensures __all__ is used correctly # we could also scan files but this ensures __all__ is used correctly
if module_all or module_all_extra: if module_all is not None:
submod_name = None submod_name = None
submod = None submod = None
submod_ls = [] submod_ls = []
for submod_name in (module_all or ()): for submod_name in module_all:
submod = import_value_from_module(module_name, submod_name) ns = {}
exec_str = "from %s import %s as submod" % (module.__name__, submod_name)
exec(exec_str, ns, ns)
submod = ns["submod"]
if type(submod) == types.ModuleType: if type(submod) == types.ModuleType:
submod_ls.append((submod_name, submod)) submod_ls.append((submod_name, submod))
for submod_name in module_all_extra:
if submod_name in attribute_set:
continue
submod = import_value_from_module(module_name, submod_name)
# No type checks, since there are non-module types we treat as modules
# such as `bpy.app.translations` & `bpy.app.handlers`.
submod_ls.append((submod_name, submod))
del submod_name del submod_name
del submod del submod
if submod_ls: if submod_ls:
fw(".. toctree::\n") fw(".. toctree::\n")
fw(" :maxdepth: 1\n") fw(" :maxdepth: 1\n\n")
fw(" :caption: Submodules\n\n")
for submod_name, submod in submod_ls: for submod_name, submod in submod_ls:
submod_name_full = "%s.%s" % (module_name, submod_name) submod_name_full = "%s.%s" % (module_name, submod_name)
fw(" %s.rst\n" % submod_name_full) fw(" %s.rst\n\n" % submod_name_full)
pymodule2sphinx(basepath, submod_name_full, submod, "%s submodule" % module_name, ()) pymodule2sphinx(basepath, submod_name_full, submod, "%s submodule" % module_name)
fw("\n")
del submod_ls del submod_ls
# done writing submodules! # done writing submodules!
write_example_ref("", fw, module_name)
# write members of the module # write members of the module
# only tested with PyStructs which are not exactly modules # only tested with PyStructs which are not exactly modules
for key, descr in sorted(type(module).__dict__.items()): for key, descr in sorted(type(module).__dict__.items()):
if key.startswith("__"): if key.startswith("__"):
continue continue
if key in module_all_extra:
continue
# naughty, we also add getset's into PyStructs, this is not typical py but also not incorrect. # naughty, we also add getset's into PyStructs, this is not typical py but also not incorrect.
# type_name is only used for examples and messages # type_name is only used for examples and messages
@@ -871,8 +855,6 @@ def pymodule2sphinx(basepath, module_name, module, title, module_all_extra):
# sort by the valye type # sort by the valye type
descr_sorted.sort(key=lambda descr_data: str(descr_data[3])) descr_sorted.sort(key=lambda descr_data: str(descr_data[3]))
for key, descr, value, value_type in descr_sorted: for key, descr, value, value_type in descr_sorted:
if key in module_all_extra:
continue
# must be documented as a submodule # must be documented as a submodule
if is_struct_seq(value): if is_struct_seq(value):
@@ -914,9 +896,6 @@ def pymodule2sphinx(basepath, module_name, module, title, module_all_extra):
module_dir_value_type.sort(key=lambda triple: str(triple[2])) module_dir_value_type.sort(key=lambda triple: str(triple[2]))
for attribute, value, value_type in module_dir_value_type: for attribute, value, value_type in module_dir_value_type:
if attribute in module_all_extra:
continue
if value_type == FunctionType: if value_type == FunctionType:
pyfunc2sphinx("", fw, module_name, None, attribute, value, is_class=False) pyfunc2sphinx("", fw, module_name, None, attribute, value, is_class=False)
# both the same at the moment but to be future proof # both the same at the moment but to be future proof
@@ -1075,7 +1054,6 @@ context_type_map = {
"selected_bones": ("EditBone", True), "selected_bones": ("EditBone", True),
"selected_editable_bones": ("EditBone", True), "selected_editable_bones": ("EditBone", True),
"selected_editable_fcurves": ("FCurve", True), "selected_editable_fcurves": ("FCurve", True),
"selected_editable_keyframes": ("Keyframe", True),
"selected_editable_objects": ("Object", True), "selected_editable_objects": ("Object", True),
"selected_editable_sequences": ("Sequence", True), "selected_editable_sequences": ("Sequence", True),
"selected_nla_strips": ("NlaStrip", True), "selected_nla_strips": ("NlaStrip", True),
@@ -1117,7 +1095,7 @@ def pycontext2sphinx(basepath):
fw("The context members available depend on the area of Blender which is currently being accessed.\n") fw("The context members available depend on the area of Blender which is currently being accessed.\n")
fw("\n") fw("\n")
fw("Note that all context values are readonly,\n") fw("Note that all context values are readonly,\n")
fw("but may be modified through the data API or by running operators\n\n") fw("but may be modified through the data api or by running operators\n\n")
def write_contex_cls(): def write_contex_cls():
@@ -1334,7 +1312,7 @@ def pyrna2sphinx(basepath):
fw(title_string(title, "=")) fw(title_string(title, "="))
fw(".. currentmodule:: %s\n\n" % struct_module_name) fw(".. module:: %s.%s\n\n" % (struct_module_name, struct_id))
# docs first?, ok # docs first?, ok
write_example_ref("", fw, "%s.%s" % (struct_module_name, struct_id)) write_example_ref("", fw, "%s.%s" % (struct_module_name, struct_id))
@@ -1565,7 +1543,8 @@ def pyrna2sphinx(basepath):
fw(title_string(class_name, "=")) fw(title_string(class_name, "="))
fw(".. currentmodule:: %s\n\n" % class_module_name) fw(".. module:: %s.%s\n" % (class_module_name, class_name))
fw("\n")
if use_subclasses: if use_subclasses:
subclass_ids = [ subclass_ids = [
@@ -1579,7 +1558,7 @@ def pyrna2sphinx(basepath):
fw(".. class:: %s\n\n" % class_name) fw(".. class:: %s\n\n" % class_name)
fw(" %s\n\n" % descr_str) fw(" %s\n\n" % descr_str)
fw(" .. note::\n\n") fw(" .. note::\n\n")
fw(" Note that :class:`%s.%s` is not actually available from within Blender,\n" fw(" Note that %s.%s is not actually available from within Blender,\n"
" it only exists for the purpose of documentation.\n\n" % (class_module_name, class_name)) " it only exists for the purpose of documentation.\n\n" % (class_module_name, class_name))
descr_items = [ descr_items = [
@@ -1694,19 +1673,8 @@ def write_sphinx_conf_py(basepath):
fw("]\n\n") fw("]\n\n")
fw("html_title = 'Blender Python API'\n") fw("html_title = 'Blender Python API'\n")
fw("html_theme = 'sphinx_rtd_theme'\n")
fw("html_theme = 'default'\n") fw("html_theme_options = {\n")
# The theme 'sphinx_rtd_theme' is no longer distributed with sphinx by default, only use when available.
fw(r"""
try:
__import__('sphinx_rtd_theme')
html_theme = 'sphinx_rtd_theme'
except ModuleNotFoundError:
pass
""")
fw("if html_theme == 'sphinx_rtd_theme':\n")
fw(" html_theme_options = {\n")
fw(" 'canonical_url': 'https://docs.blender.org/api/current/',\n") fw(" 'canonical_url': 'https://docs.blender.org/api/current/',\n")
# fw(" 'analytics_id': '',\n") # fw(" 'analytics_id': '',\n")
# fw(" 'collapse_navigation': True,\n") # fw(" 'collapse_navigation': True,\n")
@@ -1762,7 +1730,7 @@ def execfile(filepath):
file_handle.close() file_handle.close()
def write_rst_index(basepath): def write_rst_contents(basepath):
''' '''
Write the rst file of the main page, needed for sphinx (index.html) Write the rst file of the main page, needed for sphinx (index.html)
''' '''
@@ -1802,6 +1770,7 @@ def write_rst_index(basepath):
# py modules # py modules
"bpy.utils", "bpy.utils",
"bpy.utils.previews",
"bpy.path", "bpy.path",
"bpy.app", "bpy.app",
@@ -1839,10 +1808,6 @@ def write_rst_index(basepath):
fw(" %s\n" % mod) fw(" %s\n" % mod)
fw("\n") fw("\n")
fw(title_string("Indices", "="))
fw("* :ref:`genindex`\n")
fw("* :ref:`modindex`\n\n")
# special case, this 'bmesh.ops.rst' is extracted from C source # special case, this 'bmesh.ops.rst' is extracted from C source
if "bmesh.ops" not in EXCLUDE_MODULES: if "bmesh.ops" not in EXCLUDE_MODULES:
execfile(os.path.join(SCRIPT_DIR, "rst_from_bmesh_opdefines.py")) execfile(os.path.join(SCRIPT_DIR, "rst_from_bmesh_opdefines.py"))
@@ -1878,7 +1843,6 @@ def write_rst_types_index(basepath):
file = open(filepath, "w", encoding="utf-8") file = open(filepath, "w", encoding="utf-8")
fw = file.write fw = file.write
fw(title_string("Types (bpy.types)", "=")) fw(title_string("Types (bpy.types)", "="))
fw(".. module:: bpy.types\n\n")
fw(".. toctree::\n") fw(".. toctree::\n")
fw(" :glob:\n\n") fw(" :glob:\n\n")
fw(" bpy.types.*\n\n") fw(" bpy.types.*\n\n")
@@ -1894,10 +1858,8 @@ def write_rst_ops_index(basepath):
file = open(filepath, "w", encoding="utf-8") file = open(filepath, "w", encoding="utf-8")
fw = file.write fw = file.write
fw(title_string("Operators (bpy.ops)", "=")) fw(title_string("Operators (bpy.ops)", "="))
fw(".. module:: bpy.ops\n\n")
write_example_ref("", fw, "bpy.ops") write_example_ref("", fw, "bpy.ops")
fw(".. toctree::\n") fw(".. toctree::\n")
fw(" :caption: Submodules\n")
fw(" :glob:\n\n") fw(" :glob:\n\n")
fw(" bpy.ops.*\n\n") fw(" bpy.ops.*\n\n")
file.close() file.close()
@@ -1922,7 +1884,7 @@ def write_rst_msgbus(basepath):
file.close() file.close()
# Write the contents. # Write the contents.
pymodule2sphinx(basepath, 'bpy.msgbus', bpy.msgbus, 'Message Bus', ()) pymodule2sphinx(basepath, 'bpy.msgbus', bpy.msgbus, 'Message Bus')
EXAMPLE_SET_USED.add("bpy.msgbus") EXAMPLE_SET_USED.add("bpy.msgbus")
@@ -1937,7 +1899,7 @@ def write_rst_data(basepath):
file = open(filepath, "w", encoding="utf-8") file = open(filepath, "w", encoding="utf-8")
fw = file.write fw = file.write
fw(title_string("Data Access (bpy.data)", "=")) fw(title_string("Data Access (bpy.data)", "="))
fw(".. module:: bpy.data\n") fw(".. module:: bpy\n")
fw("\n") fw("\n")
fw("This module is used for all Blender/Python access.\n") fw("This module is used for all Blender/Python access.\n")
fw("\n") fw("\n")
@@ -1974,7 +1936,6 @@ def write_rst_importable_modules(basepath):
"gpu.select": "GPU Select", "gpu.select": "GPU Select",
"gpu.shader": "GPU Shader", "gpu.shader": "GPU Shader",
"bmesh": "BMesh Module", "bmesh": "BMesh Module",
"bmesh.ops": "BMesh Operators",
"bmesh.types": "BMesh Types", "bmesh.types": "BMesh Types",
"bmesh.utils": "BMesh Utilities", "bmesh.utils": "BMesh Utilities",
"bmesh.geometry": "BMesh Geometry Utilities", "bmesh.geometry": "BMesh Geometry Utilities",
@@ -2000,32 +1961,11 @@ def write_rst_importable_modules(basepath):
"freestyle.shaders": "Freestyle Shaders", "freestyle.shaders": "Freestyle Shaders",
"freestyle.utils": "Freestyle Utilities", "freestyle.utils": "Freestyle Utilities",
} }
# This is needed since some of the sub-modules listed above are not actual modules.
# Examples include `bpy.app.translations` & `bpy.app.handlers`.
#
# Most of these are `PyStructSequence` internally,
# however we don't want to document all of these as modules since some only contain
# a few values (version number for e.g).
#
# If we remove this logic and document all `PyStructSequence` as sub-modules it means
# `bpy.app.timers` for example would be presented on the same level as library information
# access such as `bpy.app.sdl` which doesn't seem useful since it hides more useful
# module-like objects among library data access.
importable_modules_parent_map = {}
for mod_name in importable_modules.keys():
if mod_name in EXCLUDE_MODULES:
continue
if "." in mod_name:
mod_name, submod_name = mod_name.rsplit(".", 1)
importable_modules_parent_map.setdefault(mod_name, []).append(submod_name)
for mod_name, mod_descr in importable_modules.items(): for mod_name, mod_descr in importable_modules.items():
if mod_name in EXCLUDE_MODULES: if mod_name not in EXCLUDE_MODULES:
continue module = __import__(mod_name,
module_all_extra = importable_modules_parent_map.get(mod_name, ()) fromlist=[mod_name.rsplit(".", 1)[-1]])
module = __import__(mod_name, fromlist=[mod_name.rsplit(".", 1)[-1]]) pymodule2sphinx(basepath, mod_name, module, mod_descr)
pymodule2sphinx(basepath, mod_name, module, mod_descr, module_all_extra)
def copy_handwritten_rsts(basepath): def copy_handwritten_rsts(basepath):
@@ -2090,7 +2030,7 @@ def rna2sphinx(basepath):
write_sphinx_conf_py(basepath) write_sphinx_conf_py(basepath)
# main page # main page
write_rst_index(basepath) write_rst_contents(basepath)
# context # context
if "bpy.context" not in EXCLUDE_MODULES: if "bpy.context" not in EXCLUDE_MODULES:
@@ -2287,7 +2227,7 @@ def main():
shutil.rmtree(REFERENCE_PATH, True) shutil.rmtree(REFERENCE_PATH, True)
# copy SPHINX_OUT to the REFERENCE_PATH # copy SPHINX_OUT to the REFERENCE_PATH
ignores = ('.doctrees', '.buildinfo') ignores = ('.doctrees', 'objects.inv', '.buildinfo')
shutil.copytree(SPHINX_OUT, shutil.copytree(SPHINX_OUT,
REFERENCE_PATH, REFERENCE_PATH,
ignore=shutil.ignore_patterns(*ignores)) ignore=shutil.ignore_patterns(*ignores))

View File

@@ -76,7 +76,11 @@ fi
# Generate HTML (sphinx) # Generate HTML (sphinx)
if $DO_OUT_HTML ; then if $DO_OUT_HTML ; then
sphinx-build -b html -j auto $SPHINX_WORKDIR/sphinx-in $SPHINX_WORKDIR/sphinx-out # sphinx-build -n -b html $SPHINX_WORKDIR/sphinx-in $SPHINX_WORKDIR/sphinx-out
# annoying bug in sphinx makes it very slow unless we do this. should report.
cd $SPHINX_WORKDIR
sphinx-build -b html sphinx-in sphinx-out
# XXX, saves space on upload and zip, should move HTML outside # XXX, saves space on upload and zip, should move HTML outside
# and zip up there, for now this is OK # and zip up there, for now this is OK
@@ -103,7 +107,8 @@ fi
# Generate PDF (sphinx/laytex) # Generate PDF (sphinx/laytex)
if $DO_OUT_PDF ; then if $DO_OUT_PDF ; then
sphinx-build -n -b latex -j auto $SPHINX_WORKDIR/sphinx-in $SPHINX_WORKDIR/sphinx-out cd $SPHINX_WORKDIR
sphinx-build -n -b latex $SPHINX_WORKDIR/sphinx-in $SPHINX_WORKDIR/sphinx-out
make -C $SPHINX_WORKDIR/sphinx-out make -C $SPHINX_WORKDIR/sphinx-out
mv $SPHINX_WORKDIR/sphinx-out/contents.pdf \ mv $SPHINX_WORKDIR/sphinx-out/contents.pdf \
$SPHINX_WORKDIR/sphinx-out/blender_python_reference_$BLENDER_VERSION.pdf $SPHINX_WORKDIR/sphinx-out/blender_python_reference_$BLENDER_VERSION.pdf

View File

@@ -9,7 +9,3 @@
/* Hide home icon in search area */ /* Hide home icon in search area */
.wy-side-nav-search > a:hover {background: none; opacity: 0.9} .wy-side-nav-search > a:hover {background: none; opacity: 0.9}
.wy-side-nav-search > a.icon::before {content: none} .wy-side-nav-search > a.icon::before {content: none}
.wy-nav-content {
max-width: 1000px !important;
}

View File

@@ -60,7 +60,7 @@ PlaybackManager_dealloc(PlaybackManagerP* self)
} }
PyDoc_STRVAR(M_aud_PlaybackManager_play_doc, PyDoc_STRVAR(M_aud_PlaybackManager_play_doc,
".. classmethod:: play(sound, catKey)\n\n" ".. classmethod:: setVolume(sound, catKey)\n\n"
" Plays a sound through the playback manager and assigns it to a category.\n\n" " Plays a sound through the playback manager and assigns it to a category.\n\n"
" :arg sound: The sound to play.\n" " :arg sound: The sound to play.\n"
" :type sound: :class:`Sound`\n" " :type sound: :class:`Sound`\n"

View File

@@ -31,17 +31,6 @@ if(MSVC_CLANG AND WITH_OPENMP AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0.1
remove_cc_flag("-fopenmp") remove_cc_flag("-fopenmp")
endif() endif()
# Exporting functions from the blender binary gives linker warnings on Apple arm64 systems.
# For now and until Apple arm64 is officially supported, these will just be silenced here.
# TODO (sebbas): Check if official arm64 devices give linker warnings without this block.
if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64"))
if(CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
endif()
endif()
set(MANTAVERSION "0.13") set(MANTAVERSION "0.13")
add_definitions(-DWITH_FLUID=1) add_definitions(-DWITH_FLUID=1)

View File

@@ -377,6 +377,19 @@ class RandomStream {
} }
/*! get a random number from the stream */ /*! get a random number from the stream */
inline double getDouble(void)
{
return mtr.rand();
};
inline float getFloat(void)
{
return (float)mtr.rand();
};
inline float getFloat(float min, float max)
{
return mtr.rand(max - min) + min;
};
inline float getRandNorm(float mean, float var) inline float getRandNorm(float mean, float var)
{ {
return mtr.randNorm(mean, var); return mtr.randNorm(mean, var);
@@ -387,20 +400,12 @@ class RandomStream {
{ {
return getFloat(); return getFloat();
} }
inline Real getReal(float min, float max)
{
return getFloat(min, max);
}
#else #else
inline Real getReal() inline Real getReal()
{ {
return getDouble(); return getDouble();
} }
inline Real getReal(double min, double max)
{
return getDouble(min, max);
}
#endif #endif
inline Vec3 getVec3() inline Vec3 getVec3()
@@ -417,24 +422,6 @@ class RandomStream {
private: private:
MTRand mtr; MTRand mtr;
inline double getDouble(void)
{
return mtr.rand();
};
inline float getFloat(void)
{
return (float)mtr.rand();
};
inline double getDouble(double min, double max)
{
return mtr.rand(max - min) + min;
};
inline float getFloat(float min, float max)
{
return (float)(mtr.rand(max - min) + min);
};
}; };
} // namespace Manta } // namespace Manta

View File

@@ -60,7 +60,7 @@ template<class GridType, class T> void importVDB(typename GridType::Ptr from, Gr
template<class VDBType, class T> template<class VDBType, class T>
void importVDB(VDBType vdbValue, ParticleDataImpl<T> *to, int index, float voxelSize) void importVDB(VDBType vdbValue, ParticleDataImpl<T> *to, int index, float voxelSize)
{ {
unusedParameter(voxelSize); // Unused for now (void)voxelSize; // Unused
T toMantaValue; T toMantaValue;
convertFrom(vdbValue, &toMantaValue); convertFrom(vdbValue, &toMantaValue);
to->set(index, toMantaValue); to->set(index, toMantaValue);
@@ -165,12 +165,12 @@ static void setGridOptions(typename GridType::Ptr grid,
string name, string name,
openvdb::GridClass cls, openvdb::GridClass cls,
float voxelSize, float voxelSize,
int precision) bool precisionHalf)
{ {
grid->setTransform(openvdb::math::Transform::createLinearTransform(voxelSize)); grid->setTransform(openvdb::math::Transform::createLinearTransform(voxelSize));
grid->setGridClass(cls); grid->setGridClass(cls);
grid->setName(name); grid->setName(name);
grid->setSaveFloatAsHalf(precision == PRECISION_MINI || precision == PRECISION_HALF); grid->setSaveFloatAsHalf(precisionHalf);
} }
template<class T, class GridType> typename GridType::Ptr exportVDB(Grid<T> *from) template<class T, class GridType> typename GridType::Ptr exportVDB(Grid<T> *from)
@@ -194,8 +194,7 @@ template<class MantaType, class VDBType>
void exportVDB(ParticleDataImpl<MantaType> *from, void exportVDB(ParticleDataImpl<MantaType> *from,
openvdb::points::PointDataGrid::Ptr to, openvdb::points::PointDataGrid::Ptr to,
openvdb::tools::PointIndexGrid::Ptr pIndex, openvdb::tools::PointIndexGrid::Ptr pIndex,
bool skipDeletedParts, bool skipDeletedParts)
int precision)
{ {
std::vector<VDBType> vdbValues; std::vector<VDBType> vdbValues;
std::string name = from->getName(); std::string name = from->getName();
@@ -213,21 +212,8 @@ void exportVDB(ParticleDataImpl<MantaType> *from,
vdbValues.push_back(vdbValue); vdbValues.push_back(vdbValue);
} }
// Use custom codec for precision of the attribute openvdb::NamePair attribute =
openvdb::NamePair attribute;
if (precision == PRECISION_FULL) {
attribute =
openvdb::points::TypedAttributeArray<VDBType, openvdb::points::NullCodec>::attributeType(); openvdb::points::TypedAttributeArray<VDBType, openvdb::points::NullCodec>::attributeType();
}
else if (precision == PRECISION_HALF ||
precision == PRECISION_MINI) { // Mini uses same precision as half for now
attribute =
openvdb::points::TypedAttributeArray<VDBType,
openvdb::points::TruncateCodec>::attributeType();
}
else {
errMsg("exportVDB: invalid precision level");
}
openvdb::points::appendAttribute(to->tree(), name, attribute); openvdb::points::appendAttribute(to->tree(), name, attribute);
// Create a wrapper around the vdb values vector. // Create a wrapper around the vdb values vector.
@@ -243,8 +229,7 @@ void exportVDB(ParticleDataImpl<MantaType> *from,
openvdb::points::PointDataGrid::Ptr exportVDB(BasicParticleSystem *from, openvdb::points::PointDataGrid::Ptr exportVDB(BasicParticleSystem *from,
std::vector<ParticleDataBase *> &fromPData, std::vector<ParticleDataBase *> &fromPData,
bool skipDeletedParts, bool skipDeletedParts,
float voxelSize, float voxelSize)
int precision)
{ {
std::vector<openvdb::Vec3s> positions; std::vector<openvdb::Vec3s> positions;
std::vector<int> flags; std::vector<int> flags;
@@ -272,34 +257,16 @@ openvdb::points::PointDataGrid::Ptr exportVDB(BasicParticleSystem *from,
openvdb::tools::createPointIndexGrid<openvdb::tools::PointIndexGrid>(positionsWrapper, openvdb::tools::createPointIndexGrid<openvdb::tools::PointIndexGrid>(positionsWrapper,
*transform); *transform);
openvdb::points::PointDataGrid::Ptr to; // TODO (sebbas): Use custom codec for attributes?
openvdb::NamePair flagAttribute; // using Codec = openvdb::points::FixedPointCodec</*1-byte=*/false, openvdb::points::UnitRange>;
openvdb::points::PointDataGrid::Ptr to =
using CodecNull = openvdb::points::NullCodec; openvdb::points::createPointDataGrid<openvdb::points::NullCodec /*Codec*/,
using CodecTrunc = openvdb::points::TruncateCodec; openvdb::points::PointDataGrid>(
using CodecFixPoint = openvdb::points::FixedPointCodec<true, openvdb::points::PositionRange>;
// Use custom codec for precision of the particle position and the flag attribute
if (precision == PRECISION_FULL) {
to = openvdb::points::createPointDataGrid<CodecNull, openvdb::points::PointDataGrid>(
*pointIndexGrid, positionsWrapper, *transform); *pointIndexGrid, positionsWrapper, *transform);
flagAttribute = openvdb::points::TypedAttributeArray<int, CodecNull>::attributeType();
}
else if (precision == PRECISION_HALF) {
to = openvdb::points::createPointDataGrid<CodecTrunc, openvdb::points::PointDataGrid>(
*pointIndexGrid, positionsWrapper, *transform);
flagAttribute = openvdb::points::TypedAttributeArray<int, CodecTrunc>::attributeType();
}
else if (precision == PRECISION_MINI) {
to = openvdb::points::createPointDataGrid<CodecFixPoint, openvdb::points::PointDataGrid>(
*pointIndexGrid, positionsWrapper, *transform);
flagAttribute = openvdb::points::TypedAttributeArray<int, CodecTrunc>::
attributeType(); // Use 16 bit trunc for flag for now
}
else {
errMsg("exportVDB: invalid precision level");
}
openvdb::NamePair flagAttribute =
openvdb::points::TypedAttributeArray<int,
openvdb::points::NullCodec /*Codec*/>::attributeType();
openvdb::points::appendAttribute(to->tree(), FLAG_NAME, flagAttribute); openvdb::points::appendAttribute(to->tree(), FLAG_NAME, flagAttribute);
// Create a wrapper around the flag vector. // Create a wrapper around the flag vector.
openvdb::points::PointAttributeVector<int> flagWrapper(flags); openvdb::points::PointAttributeVector<int> flagWrapper(flags);
@@ -314,17 +281,17 @@ openvdb::points::PointDataGrid::Ptr exportVDB(BasicParticleSystem *from,
if (pdb->getType() == ParticleDataBase::TypeInt) { if (pdb->getType() == ParticleDataBase::TypeInt) {
debMsg("Writing int particle data '" << pdb->getName() << "'", 1); debMsg("Writing int particle data '" << pdb->getName() << "'", 1);
ParticleDataImpl<int> *pdi = dynamic_cast<ParticleDataImpl<int> *>(pdb); ParticleDataImpl<int> *pdi = dynamic_cast<ParticleDataImpl<int> *>(pdb);
exportVDB<int, int>(pdi, to, pointIndexGrid, skipDeletedParts, precision); exportVDB<int, int>(pdi, to, pointIndexGrid, skipDeletedParts);
} }
else if (pdb->getType() == ParticleDataBase::TypeReal) { else if (pdb->getType() == ParticleDataBase::TypeReal) {
debMsg("Writing real particle data '" << pdb->getName() << "'", 1); debMsg("Writing real particle data '" << pdb->getName() << "'", 1);
ParticleDataImpl<Real> *pdi = dynamic_cast<ParticleDataImpl<Real> *>(pdb); ParticleDataImpl<Real> *pdi = dynamic_cast<ParticleDataImpl<Real> *>(pdb);
exportVDB<Real, float>(pdi, to, pointIndexGrid, skipDeletedParts, precision); exportVDB<Real, float>(pdi, to, pointIndexGrid, skipDeletedParts);
} }
else if (pdb->getType() == ParticleDataBase::TypeVec3) { else if (pdb->getType() == ParticleDataBase::TypeVec3) {
debMsg("Writing Vec3 particle data '" << pdb->getName() << "'", 1); debMsg("Writing Vec3 particle data '" << pdb->getName() << "'", 1);
ParticleDataImpl<Vec3> *pdi = dynamic_cast<ParticleDataImpl<Vec3> *>(pdb); ParticleDataImpl<Vec3> *pdi = dynamic_cast<ParticleDataImpl<Vec3> *>(pdb);
exportVDB<Vec3, openvdb::Vec3s>(pdi, to, pointIndexGrid, skipDeletedParts, precision); exportVDB<Vec3, openvdb::Vec3s>(pdi, to, pointIndexGrid, skipDeletedParts);
} }
else { else {
errMsg("exportVDB: unknown ParticleDataBase type"); errMsg("exportVDB: unknown ParticleDataBase type");
@@ -335,10 +302,8 @@ openvdb::points::PointDataGrid::Ptr exportVDB(BasicParticleSystem *from,
static void registerCustomCodecs() static void registerCustomCodecs()
{ {
openvdb::points::TypedAttributeArray<int, openvdb::points::TruncateCodec>::registerType(); using Codec = openvdb::points::FixedPointCodec</*1-byte=*/false, openvdb::points::UnitRange>;
openvdb::points::TypedAttributeArray<float, openvdb::points::TruncateCodec>::registerType(); openvdb::points::TypedAttributeArray<int, Codec>::registerType();
openvdb::points::TypedAttributeArray<openvdb::Vec3s,
openvdb::points::TruncateCodec>::registerType();
} }
int writeObjectsVDB(const string &filename, int writeObjectsVDB(const string &filename,
@@ -346,14 +311,15 @@ int writeObjectsVDB(const string &filename,
float worldSize, float worldSize,
bool skipDeletedParts, bool skipDeletedParts,
int compression, int compression,
int precision) bool precisionHalf)
{ {
openvdb::initialize(); openvdb::initialize();
openvdb::io::File file(filename); openvdb::io::File file(filename);
openvdb::GridPtrVec gridsVDB; openvdb::GridPtrVec gridsVDB;
// Register custom codecs, this makes sure custom attributes can be read // TODO (sebbas): Use custom codec for flag attribute?
registerCustomCodecs(); // Register codecs one, this makes sure custom attributes can be read
// registerCustomCodecs();
std::vector<ParticleDataBase *> pdbBuffer; std::vector<ParticleDataBase *> pdbBuffer;
@@ -399,7 +365,7 @@ int writeObjectsVDB(const string &filename,
debMsg("Writing particle system '" << mantaPP->getName() debMsg("Writing particle system '" << mantaPP->getName()
<< "' (and buffered pData) to vdb file " << filename, << "' (and buffered pData) to vdb file " << filename,
1); 1);
vdbGrid = exportVDB(mantaPP, pdbBuffer, skipDeletedParts, voxelSize, precision); vdbGrid = exportVDB(mantaPP, pdbBuffer, skipDeletedParts, voxelSize);
gridsVDB.push_back(vdbGrid); gridsVDB.push_back(vdbGrid);
pdbBuffer.clear(); pdbBuffer.clear();
} }
@@ -416,7 +382,7 @@ int writeObjectsVDB(const string &filename,
// Set additional grid attributes, e.g. name, grid class, compression level, etc. // Set additional grid attributes, e.g. name, grid class, compression level, etc.
if (vdbGrid) { if (vdbGrid) {
setGridOptions<openvdb::GridBase>(vdbGrid, objectName, gClass, voxelSize, precision); setGridOptions<openvdb::GridBase>(vdbGrid, objectName, gClass, voxelSize, precisionHalf);
} }
} }
@@ -439,7 +405,6 @@ int writeObjectsVDB(const string &filename,
vdb_flags = openvdb::io::COMPRESS_NONE; vdb_flags = openvdb::io::COMPRESS_NONE;
break; break;
} }
default:
case COMPRESSION_ZIP: { case COMPRESSION_ZIP: {
vdb_flags |= openvdb::io::COMPRESS_ZIP; vdb_flags |= openvdb::io::COMPRESS_ZIP;
break; break;
@@ -468,18 +433,18 @@ int readObjectsVDB(const string &filename, std::vector<PbClass *> *objects, floa
openvdb::io::File file(filename); openvdb::io::File file(filename);
openvdb::GridPtrVec gridsVDB; openvdb::GridPtrVec gridsVDB;
// Register custom codecs, this makes sure custom attributes can be read // TODO (sebbas): Use custom codec for flag attribute?
registerCustomCodecs(); // Register codecs one, this makes sure custom attributes can be read
// registerCustomCodecs();
try { try {
file.setCopyMaxBytes(0); file.setCopyMaxBytes(0);
file.open(); file.open();
gridsVDB = *(file.getGrids()); gridsVDB = *(file.getGrids());
openvdb::MetaMap::Ptr metadata = file.getMetadata(); openvdb::MetaMap::Ptr metadata = file.getMetadata();
unusedParameter(metadata); // Unused for now (void)metadata; // Unused for now
} }
catch (const openvdb::IoError &e) { catch (const openvdb::IoError &e) {
unusedParameter(e); // Unused for now
debMsg("readObjectsVDB: Could not open vdb file " << filename, 1); debMsg("readObjectsVDB: Could not open vdb file " << filename, 1);
file.close(); file.close();
return 0; return 0;
@@ -527,36 +492,27 @@ int readObjectsVDB(const string &filename, std::vector<PbClass *> *objects, floa
if (GridBase *mantaGrid = dynamic_cast<GridBase *>(*iter)) { if (GridBase *mantaGrid = dynamic_cast<GridBase *>(*iter)) {
if (mantaGrid->getType() & GridBase::TypeInt) { if (mantaGrid->getType() & GridBase::TypeInt) {
openvdb::Int32Grid::Ptr vdbIntGrid = openvdb::gridPtrCast<openvdb::Int32Grid>(vdbGrid);
if (!vdbIntGrid)
continue; // Sanity check: Cast can fail if onlyGrid is true but object count > 1
Grid<int> *mantaIntGrid = (Grid<int> *)mantaGrid;
debMsg("Reading into grid '" << mantaGrid->getName() << "' from int grid '" debMsg("Reading into grid '" << mantaGrid->getName() << "' from int grid '"
<< vdbGrid->getName() << "' in vdb file " << filename, << vdbGrid->getName() << "' in vdb file " << filename,
1); 1);
openvdb::Int32Grid::Ptr vdbIntGrid = openvdb::gridPtrCast<openvdb::Int32Grid>(vdbGrid);
Grid<int> *mantaIntGrid = (Grid<int> *)mantaGrid;
importVDB<openvdb::Int32Grid, int>(vdbIntGrid, mantaIntGrid); importVDB<openvdb::Int32Grid, int>(vdbIntGrid, mantaIntGrid);
} }
else if (mantaGrid->getType() & GridBase::TypeReal) { else if (mantaGrid->getType() & GridBase::TypeReal) {
openvdb::FloatGrid::Ptr vdbFloatGrid = openvdb::gridPtrCast<openvdb::FloatGrid>(vdbGrid);
if (!vdbFloatGrid)
continue; // Sanity check: Cast can fail if onlyGrid is true but object count > 1
Grid<Real> *mantaRealGrid = (Grid<Real> *)mantaGrid;
debMsg("Reading into grid '" << mantaGrid->getName() << "' from real grid '" debMsg("Reading into grid '" << mantaGrid->getName() << "' from real grid '"
<< vdbGrid->getName() << "' in vdb file " << filename, << vdbGrid->getName() << "' in vdb file " << filename,
1); 1);
openvdb::FloatGrid::Ptr vdbFloatGrid = openvdb::gridPtrCast<openvdb::FloatGrid>(vdbGrid);
Grid<Real> *mantaRealGrid = (Grid<Real> *)mantaGrid;
importVDB<openvdb::FloatGrid, Real>(vdbFloatGrid, mantaRealGrid); importVDB<openvdb::FloatGrid, Real>(vdbFloatGrid, mantaRealGrid);
} }
else if (mantaGrid->getType() & GridBase::TypeVec3) { else if (mantaGrid->getType() & GridBase::TypeVec3) {
openvdb::Vec3SGrid::Ptr vdbVec3Grid = openvdb::gridPtrCast<openvdb::Vec3SGrid>(vdbGrid);
if (!vdbVec3Grid)
continue; // Sanity check: Cast can fail if onlyGrid is true but object count > 1
Grid<Vec3> *mantaVec3Grid = (Grid<Vec3> *)mantaGrid;
debMsg("Reading into grid '" << mantaGrid->getName() << "' from vec3 grid '" debMsg("Reading into grid '" << mantaGrid->getName() << "' from vec3 grid '"
<< vdbGrid->getName() << "' in vdb file " << filename, << vdbGrid->getName() << "' in vdb file " << filename,
1); 1);
openvdb::Vec3SGrid::Ptr vdbVec3Grid = openvdb::gridPtrCast<openvdb::Vec3SGrid>(vdbGrid);
Grid<Vec3> *mantaVec3Grid = (Grid<Vec3> *)mantaGrid;
importVDB<openvdb::Vec3SGrid, Vec3>(vdbVec3Grid, mantaVec3Grid); importVDB<openvdb::Vec3SGrid, Vec3>(vdbVec3Grid, mantaVec3Grid);
} }
else { else {
@@ -565,15 +521,12 @@ int readObjectsVDB(const string &filename, std::vector<PbClass *> *objects, floa
} }
} }
else if (BasicParticleSystem *mantaPP = dynamic_cast<BasicParticleSystem *>(*iter)) { else if (BasicParticleSystem *mantaPP = dynamic_cast<BasicParticleSystem *>(*iter)) {
openvdb::points::PointDataGrid::Ptr vdbPointGrid =
openvdb::gridPtrCast<openvdb::points::PointDataGrid>(vdbGrid);
if (!vdbPointGrid)
continue; // Sanity check: Cast can fail if onlyGrid is true but objects > 1
debMsg("Reading into particle system '" << mantaPP->getName() << "' from particle system '" debMsg("Reading into particle system '" << mantaPP->getName() << "' from particle system '"
<< vdbGrid->getName() << "' in vdb file " << vdbGrid->getName() << "' in vdb file "
<< filename, << filename,
1); 1);
openvdb::points::PointDataGrid::Ptr vdbPointGrid =
openvdb::gridPtrCast<openvdb::points::PointDataGrid>(vdbGrid);
importVDB(vdbPointGrid, mantaPP, pdbBuffer, voxelSize); importVDB(vdbPointGrid, mantaPP, pdbBuffer, voxelSize);
pdbBuffer.clear(); pdbBuffer.clear();
} }
@@ -627,23 +580,19 @@ template openvdb::Vec3SGrid::Ptr exportVDB<Vec3, openvdb::Vec3SGrid>(Grid<Vec3>
openvdb::points::PointDataGrid::Ptr exportVDB(BasicParticleSystem *from, openvdb::points::PointDataGrid::Ptr exportVDB(BasicParticleSystem *from,
std::vector<ParticleDataBase *> &fromPData, std::vector<ParticleDataBase *> &fromPData,
bool skipDeletedParts = false, bool skipDeletedParts = false,
float voxelSize = 1.0, float voxelSize = 1.0);
int precision = PRECISION_HALF);
template void exportVDB<int, int>(ParticleDataImpl<int> *from, template void exportVDB<int, int>(ParticleDataImpl<int> *from,
openvdb::points::PointDataGrid::Ptr to, openvdb::points::PointDataGrid::Ptr to,
openvdb::tools::PointIndexGrid::Ptr pIndex, openvdb::tools::PointIndexGrid::Ptr pIndex,
bool skipDeletedParts = false, bool skipDeletedParts = false);
int precision = PRECISION_HALF);
template void exportVDB<Real, float>(ParticleDataImpl<Real> *from, template void exportVDB<Real, float>(ParticleDataImpl<Real> *from,
openvdb::points::PointDataGrid::Ptr to, openvdb::points::PointDataGrid::Ptr to,
openvdb::tools::PointIndexGrid::Ptr pIndex, openvdb::tools::PointIndexGrid::Ptr pIndex,
bool skipDeletedParts = false, bool skipDeletedParts = false);
int precision = PRECISION_HALF);
template void exportVDB<Vec3, openvdb::Vec3s>(ParticleDataImpl<Vec3> *from, template void exportVDB<Vec3, openvdb::Vec3s>(ParticleDataImpl<Vec3> *from,
openvdb::points::PointDataGrid::Ptr to, openvdb::points::PointDataGrid::Ptr to,
openvdb::tools::PointIndexGrid::Ptr pIndex, openvdb::tools::PointIndexGrid::Ptr pIndex,
bool skipDeletedParts = false, bool skipDeletedParts = false);
int precision = PRECISION_HALF);
#else #else
@@ -652,7 +601,7 @@ int writeObjectsVDB(const string &filename,
float worldSize, float worldSize,
bool skipDeletedParts, bool skipDeletedParts,
int compression, int compression,
int precision) bool precisionHalf)
{ {
errMsg("Cannot save to .vdb file. Mantaflow has not been built with OpenVDB support."); errMsg("Cannot save to .vdb file. Mantaflow has not been built with OpenVDB support.");
return 0; return 0;

View File

@@ -82,15 +82,8 @@ int save(const string &name,
float worldSize = 1.0, float worldSize = 1.0,
bool skipDeletedParts = false, bool skipDeletedParts = false,
int compression = COMPRESSION_ZIP, int compression = COMPRESSION_ZIP,
bool precisionHalf = true, bool precisionHalf = true)
int precision = PRECISION_HALF)
{ {
if (!precisionHalf) {
debMsg("Warning: precisionHalf argument is deprecated. Please use precision level instead", 0);
precision = PRECISION_HALF; // for backwards compatibility
}
if (name.find_last_of('.') == string::npos) if (name.find_last_of('.') == string::npos)
errMsg("file '" + name + "' does not have an extension"); errMsg("file '" + name + "' does not have an extension");
string ext = name.substr(name.find_last_of('.')); string ext = name.substr(name.find_last_of('.'));
@@ -102,7 +95,8 @@ int save(const string &name,
else if (ext == ".vol") else if (ext == ".vol")
return writeGridsVol(name, &objects); return writeGridsVol(name, &objects);
if (ext == ".vdb") if (ext == ".vdb")
return writeObjectsVDB(name, &objects, worldSize, skipDeletedParts, compression, precision); return writeObjectsVDB(
name, &objects, worldSize, skipDeletedParts, compression, precisionHalf);
else if (ext == ".npz") else if (ext == ".npz")
return writeGridsNumpy(name, &objects); return writeGridsNumpy(name, &objects);
else if (ext == ".txt") else if (ext == ".txt")
@@ -128,9 +122,7 @@ static PyObject *_W_1(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
bool skipDeletedParts = _args.getOpt<bool>("skipDeletedParts", 3, false, &_lock); bool skipDeletedParts = _args.getOpt<bool>("skipDeletedParts", 3, false, &_lock);
int compression = _args.getOpt<int>("compression", 4, COMPRESSION_ZIP, &_lock); int compression = _args.getOpt<int>("compression", 4, COMPRESSION_ZIP, &_lock);
bool precisionHalf = _args.getOpt<bool>("precisionHalf", 5, true, &_lock); bool precisionHalf = _args.getOpt<bool>("precisionHalf", 5, true, &_lock);
int precision = _args.getOpt<int>("precision", 6, PRECISION_HALF, &_lock); _retval = toPy(save(name, objects, worldSize, skipDeletedParts, compression, precisionHalf));
_retval = toPy(
save(name, objects, worldSize, skipDeletedParts, compression, precisionHalf, precision));
_args.check(); _args.check();
} }
pbFinalizePlugin(parent, "save", !noTiming); pbFinalizePlugin(parent, "save", !noTiming);

View File

@@ -28,11 +28,6 @@
#define COMPRESSION_ZIP 1 #define COMPRESSION_ZIP 1
#define COMPRESSION_BLOSC 2 #define COMPRESSION_BLOSC 2
// OpenVDB precision flags
#define PRECISION_FULL 0
#define PRECISION_HALF 1
#define PRECISION_MINI 2
namespace Manta { namespace Manta {
// Forward declations // Forward declations
@@ -75,7 +70,7 @@ int writeObjectsVDB(const std::string &filename,
float scale = 1.0, float scale = 1.0,
bool skipDeletedParts = false, bool skipDeletedParts = false,
int compression = COMPRESSION_ZIP, int compression = COMPRESSION_ZIP,
int precision = PRECISION_HALF); bool precisionHalf = true);
int readObjectsVDB(const std::string &filename, int readObjectsVDB(const std::string &filename,
std::vector<PbClass *> *objects, std::vector<PbClass *> *objects,
float scale = 1.0); float scale = 1.0);

View File

@@ -1,3 +1,3 @@
#define MANTA_GIT_VERSION "commit dffc3481b835dfa048effcbb8a9e613294ecae14" #define MANTA_GIT_VERSION "commit e2f6e59e3679f88e5100ae2145410cca4971b9df"

View File

@@ -355,6 +355,7 @@ class GridBase : public PbClass {
return isInBounds(Vec3i(i, j, k), bnd); return isInBounds(Vec3i(i, j, k), bnd);
} }
#ifdef BLENDER
//! expose name field to Python for Blender //! expose name field to Python for Blender
void setName(const std::string &name) void setName(const std::string &name)
{ {
@@ -385,6 +386,7 @@ class GridBase : public PbClass {
} }
} }
#endif
protected: protected:
GridType mType; GridType mType;
Vec3i mSize; Vec3i mSize;

View File

@@ -639,207 +639,8 @@ void LevelsetGrid::initFromFlags(const FlagGrid &flags, bool ignoreWalls)
} }
} }
/* Helper variables that are used in flood-fill functions. */
static const int ID_UNKNOWN = 0;
static const int ID_VISITED = 1;
/* Fills all cells in the target grid that have not been marked during a flood-fill. */
struct KnFillApply : public KernelBase {
KnFillApply(Grid<Real> &target,
Grid<int> &visited,
const Real value,
const int boundaryWidth,
const bool outside)
: KernelBase(&target, boundaryWidth),
target(target),
visited(visited),
value(value),
boundaryWidth(boundaryWidth),
outside(outside)
{
runMessage();
run();
}
inline void op(int i,
int j,
int k,
Grid<Real> &target,
Grid<int> &visited,
const Real value,
const int boundaryWidth,
const bool outside) const
{
if (visited(i, j, k) == ID_VISITED)
return;
if (outside && target(i, j, k) < 0)
return;
if (!outside && target(i, j, k) >= 0)
return;
/* Actual flood-fill override. */
target(i, j, k) = value;
}
inline Grid<Real> &getArg0()
{
return target;
}
typedef Grid<Real> type0;
inline Grid<int> &getArg1()
{
return visited;
}
typedef Grid<int> type1;
inline const Real &getArg2()
{
return value;
}
typedef Real type2;
inline const int &getArg3()
{
return boundaryWidth;
}
typedef int type3;
inline const bool &getArg4()
{
return outside;
}
typedef bool type4;
void runMessage()
{
debMsg("Executing kernel KnFillApply ", 3);
debMsg("Kernel range"
<< " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ",
4);
};
void operator()(const tbb::blocked_range<IndexInt> &__r) const
{
const int _maxX = maxX;
const int _maxY = maxY;
if (maxZ > 1) {
for (int k = __r.begin(); k != (int)__r.end(); k++)
for (int j = boundaryWidth; j < _maxY; j++)
for (int i = boundaryWidth; i < _maxX; i++)
op(i, j, k, target, visited, value, boundaryWidth, outside);
}
else {
const int k = 0;
for (int j = __r.begin(); j != (int)__r.end(); j++)
for (int i = boundaryWidth; i < _maxX; i++)
op(i, j, k, target, visited, value, boundaryWidth, outside);
}
}
void run()
{
if (maxZ > 1)
tbb::parallel_for(tbb::blocked_range<IndexInt>(minZ, maxZ), *this);
else
tbb::parallel_for(tbb::blocked_range<IndexInt>(boundaryWidth, maxY), *this);
}
Grid<Real> &target;
Grid<int> &visited;
const Real value;
const int boundaryWidth;
const bool outside;
};
/* Basic flood fill implementation used to fill inside / outside areas of levelset.
* Calling this function will ensure that there are no fluid cells inside obstacles.
* I.e. starting from walls, cells will be tagged in flood-fill fashion, stopping at 0 borders.
* All remaining cells will be filled with the fill value. Outside mode inverts search behavior. */
void LevelsetGrid::floodFill(const Real value, const bool outside, const int boundaryWidth)
{
/* Sanity check: Filling mode and filling value need to "match". */
if (outside) {
assertMsg(value < 0, "Cannot fill outside with (positive) value " << value);
}
else {
assertMsg(value >= 0, "Cannot fill inside with (negative) value " << value);
}
Grid<Real> levelsetCopy(this->getParent());
Grid<int> visited(this->getParent());
std::stack<Vec3i> todoPos;
const int maxNeighbors = this->is3D() ? 6 : 4;
const Vec3i maxSize(this->getSize() - 1);
Vec3i bnd(2 * boundaryWidth);
if (!this->is3D())
bnd.z = 0;
const int cellCntNoBnd = (this->getSizeX() - bnd.x) * (this->getSizeY() - bnd.y) *
(this->getSizeZ() - bnd.z);
/* Initialize temporary helper grids. */
levelsetCopy.copyFrom(*this);
visited.setConst(ID_UNKNOWN);
FOR_IJK_BND(visited, boundaryWidth)
{
/* Skip inside / outside cells depending on search mode. */
if (outside && levelsetCopy(i, j, k) < 0)
continue;
if (!outside && levelsetCopy(i, j, k) >= 0)
continue;
/* Skip cell if it already has been visited. */
if (visited(i, j, k) == ID_VISITED)
continue;
Vec3i c(i, j, k);
bool isWallCell = (c.x - boundaryWidth == 0 || c.x == maxSize.x - boundaryWidth);
isWallCell |= (c.y - boundaryWidth == 0 || c.y == maxSize.y - boundaryWidth);
if (this->is3D())
isWallCell |= (c.z - boundaryWidth == 0 || c.z == maxSize.z - boundaryWidth);
/* Only start searching from borders. */
if (!isWallCell)
continue;
/* Start flood-fill loop by initializing todo stack with current cell. */
todoPos.push(c);
visited(c) = ID_VISITED;
while (!todoPos.empty()) {
c = todoPos.top();
todoPos.pop();
/* Add all neighbor cells to search stack. */
for (int nb = 0; nb < maxNeighbors; nb++) {
const Vec3i neigh(c + neighbors[nb]);
if (!visited.isInBounds(neigh, boundaryWidth))
continue;
/* Skip inside / outside area depening on what we search for. */
if (outside && levelsetCopy(neigh) < 0)
continue;
if (!outside && levelsetCopy(neigh) >= 0)
continue;
/* Skip neighbor if it already has been visited. */
if (visited(neigh) == ID_VISITED)
continue;
assertMsg(visited(neigh) == ID_UNKNOWN,
"Cell must be of type 'unknown' at this point in the loop");
todoPos.push(neigh);
visited(neigh) = ID_VISITED;
}
assertMsg(todoPos.size() <= cellCntNoBnd,
"Flood-fill todo stack cannot be greater than domain cell count - "
<< todoPos.size() << " vs " << cellCntNoBnd);
}
}
KnFillApply(*this, visited, value, boundaryWidth, outside);
}
/* Deprecated: Use floodFill() function instead. */
void LevelsetGrid::fillHoles(int maxDepth, int boundaryWidth) void LevelsetGrid::fillHoles(int maxDepth, int boundaryWidth)
{ {
debMsg("Deprecated - do not use fillHoles() ... use floodFill() instead", 1);
Real curVal, i1, i2, j1, j2, k1, k2; Real curVal, i1, i2, j1, j2, k1, k2;
Vec3i c, cTmp; Vec3i c, cTmp;
std::stack<Vec3i> undoPos; std::stack<Vec3i> undoPos;

View File

@@ -234,35 +234,6 @@ class LevelsetGrid : public Grid<Real> {
} }
} }
//! flood-fill the levelset to ensure that closed obstacles are filled inside
void floodFill(const Real value = -0.5, const bool outside = true, const int boundaryWidth = 1);
static PyObject *_W_7(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
{
try {
PbArgs _args(_linargs, _kwds);
LevelsetGrid *pbo = dynamic_cast<LevelsetGrid *>(Pb::objFromPy(_self));
bool noTiming = _args.getOpt<bool>("notiming", -1, 0);
pbPreparePlugin(pbo->getParent(), "LevelsetGrid::floodFill", !noTiming);
PyObject *_retval = 0;
{
ArgLocker _lock;
const Real value = _args.getOpt<Real>("value", 0, -0.5, &_lock);
const bool outside = _args.getOpt<bool>("outside", 1, true, &_lock);
const int boundaryWidth = _args.getOpt<int>("boundaryWidth", 2, 1, &_lock);
pbo->_args.copy(_args);
_retval = getPyNone();
pbo->floodFill(value, outside, boundaryWidth);
pbo->_args.check();
}
pbFinalizePlugin(pbo->getParent(), "LevelsetGrid::floodFill", !noTiming);
return _retval;
}
catch (std::exception &e) {
pbSetError("LevelsetGrid::floodFill", e.what());
return 0;
}
}
static Real invalidTimeValue(); static Real invalidTimeValue();
public: public:
PbArgs _args; PbArgs _args;

View File

@@ -15,7 +15,6 @@ static const Pb::Register _R_15("LevelsetGrid", "join", LevelsetGrid::_W_3);
static const Pb::Register _R_16("LevelsetGrid", "subtract", LevelsetGrid::_W_4); static const Pb::Register _R_16("LevelsetGrid", "subtract", LevelsetGrid::_W_4);
static const Pb::Register _R_17("LevelsetGrid", "initFromFlags", LevelsetGrid::_W_5); static const Pb::Register _R_17("LevelsetGrid", "initFromFlags", LevelsetGrid::_W_5);
static const Pb::Register _R_18("LevelsetGrid", "fillHoles", LevelsetGrid::_W_6); static const Pb::Register _R_18("LevelsetGrid", "fillHoles", LevelsetGrid::_W_6);
static const Pb::Register _R_19("LevelsetGrid", "floodFill", LevelsetGrid::_W_7);
#endif #endif
extern "C" { extern "C" {
void PbRegister_file_11() void PbRegister_file_11()
@@ -28,7 +27,6 @@ void PbRegister_file_11()
KEEP_UNUSED(_R_16); KEEP_UNUSED(_R_16);
KEEP_UNUSED(_R_17); KEEP_UNUSED(_R_17);
KEEP_UNUSED(_R_18); KEEP_UNUSED(_R_18);
KEEP_UNUSED(_R_19);
} }
} }
} // namespace Manta } // namespace Manta

View File

@@ -16,8 +16,7 @@ static const Pb::Register _reg(
"integration mode\nIntEuler = 0\nIntRK2 = 1\nIntRK4 = 2\n\n# CG preconditioner\nPcNone " "integration mode\nIntEuler = 0\nIntRK2 = 1\nIntRK4 = 2\n\n# CG preconditioner\nPcNone "
" = 0\nPcMIC = 1\nPcMGDynamic = 2\nPcMGStatic = 3\n\n# particles\nPtypeSpray = " " = 0\nPcMIC = 1\nPcMGDynamic = 2\nPcMGStatic = 3\n\n# particles\nPtypeSpray = "
"2\nPtypeBubble = 4\nPtypeFoam = 8\nPtypeTracer = 16\n\n# OpenVDB export " "2\nPtypeBubble = 4\nPtypeFoam = 8\nPtypeTracer = 16\n\n# OpenVDB export "
"flags\nCompression_None = 0\nCompression_Zip = 1\nCompression_Blosc = 2\n\n# OpenVDB " "flags\nCompression_None = 0\nCompression_Zip = 1\nCompression_Blosc = 2\n\n\n\n\n");
"precision flags\nPrecision_Full = 0\nPrecision_Half = 1\nPrecision_Mini = 2\n\n\n\n");
extern "C" { extern "C" {
void PbRegister_file_0() void PbRegister_file_0()
{ {

View File

@@ -57,7 +57,7 @@
#if defined(__arm__) #if defined(__arm__)
/* Attempt to fix compilation error on Debian armel kernel. /* Attempt to fix compilation error on Debian armel kernel.
* arm7 architecture does have both 32 and 64bit atomics, however * arm7 architecture does have both 32 and 64bit atomics, however
* its gcc doesn't have __GCC_HAVE_SYNC_COMPARE_AND_SWAP_n defined. * it's gcc doesn't have __GCC_HAVE_SYNC_COMPARE_AND_SWAP_n defined.
*/ */
# define JE_FORCE_SYNC_COMPARE_AND_SWAP_1 # define JE_FORCE_SYNC_COMPARE_AND_SWAP_1
# define JE_FORCE_SYNC_COMPARE_AND_SWAP_4 # define JE_FORCE_SYNC_COMPARE_AND_SWAP_4

Some files were not shown because too many files have changed in this diff Show More