diff options
author | Sybren A. Stüvel <sybren@blender.org> | 2020-01-31 12:24:28 +0300 |
---|---|---|
committer | Sybren A. Stüvel <sybren@blender.org> | 2020-01-31 13:29:29 +0300 |
commit | 14ccda75f6313849c5b4376f7e74def24084782e (patch) | |
tree | f2bc3367d202548927623781e9b8e56e68d0b307 /source/blender/python/intern | |
parent | bcacf47cbcf72d13773577543835aaada7c8a522 (diff) |
USD: Include USD library version in System Info
Pixar recently released USD 20.02 [1]. I think it's important for people
to be able to figure out which version of the USD library is used in
Blender.
[1] https://github.com/PixarAnimationStudios/USD/releases/tag/v20.02
This commit exposes the USD library information via `bpy.app.usd`, and
includes that info in the `system-info.txt` saved via Help → Save System
Info.
Reviewed by: brecht
Differential Revision: https://developer.blender.org/D6724
Diffstat (limited to 'source/blender/python/intern')
-rw-r--r-- | source/blender/python/intern/CMakeLists.txt | 5 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_app.c | 3 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_app_usd.c | 107 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_app_usd.h | 29 |
4 files changed, 144 insertions, 0 deletions
diff --git a/source/blender/python/intern/CMakeLists.txt b/source/blender/python/intern/CMakeLists.txt index adcda710622..7106dace084 100644 --- a/source/blender/python/intern/CMakeLists.txt +++ b/source/blender/python/intern/CMakeLists.txt @@ -56,6 +56,7 @@ set(SRC bpy_app_sdl.c bpy_app_timers.c bpy_app_translations.c + bpy_app_usd.c bpy_capi_utils.c bpy_driver.c bpy_gizmo_wrap.c @@ -95,6 +96,7 @@ set(SRC bpy_app_sdl.h bpy_app_timers.h bpy_app_translations.h + bpy_app_usd.h bpy_capi_utils.h bpy_driver.h bpy_gizmo_wrap.h @@ -309,6 +311,9 @@ endif() if(WITH_USD) add_definitions(-DWITH_USD) + list(APPEND INC + ../../usd + ) endif() if(WITH_OPENIMAGEIO) diff --git a/source/blender/python/intern/bpy_app.c b/source/blender/python/intern/bpy_app.c index 043b31007f1..678df0d8993 100644 --- a/source/blender/python/intern/bpy_app.c +++ b/source/blender/python/intern/bpy_app.c @@ -33,6 +33,7 @@ #include "bpy_app_opensubdiv.h" #include "bpy_app_openvdb.h" #include "bpy_app_sdl.h" +#include "bpy_app_usd.h" #include "bpy_app_build_options.h" #include "bpy_app_translations.h" @@ -108,6 +109,7 @@ static PyStructSequence_Field app_info_fields[] = { /* submodules */ {"alembic", "Alembic library information backend"}, + {"usd", "USD library information backend"}, {"ffmpeg", "FFmpeg library information backend"}, {"ocio", "OpenColorIO library information backend"}, {"oiio", "OpenImageIO library information backend"}, @@ -201,6 +203,7 @@ static PyObject *make_app_info(void) #endif SetObjItem(BPY_app_alembic_struct()); + SetObjItem(BPY_app_usd_struct()); SetObjItem(BPY_app_ffmpeg_struct()); SetObjItem(BPY_app_ocio_struct()); SetObjItem(BPY_app_oiio_struct()); diff --git a/source/blender/python/intern/bpy_app_usd.c b/source/blender/python/intern/bpy_app_usd.c new file mode 100644 index 00000000000..d87d218a5e5 --- /dev/null +++ b/source/blender/python/intern/bpy_app_usd.c @@ -0,0 +1,107 @@ +/* + * 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. + * + * The Original Code is Copyright (C) 2020 Blender Foundation. + * All rights reserved. + */ + +/** \file + * \ingroup pythonintern + */ + +#include <Python.h> +#include "BLI_utildefines.h" + +#include "bpy_app_usd.h" + +#include "../generic/py_capi_utils.h" + +#ifdef WITH_USD +# include "usd.h" +#endif + +static PyTypeObject BlenderAppUSDType; + +static PyStructSequence_Field app_usd_info_fields[] = { + {"supported", "Boolean, True when Blender is built with USD support"}, + {"version", "The USD version as a tuple of 3 numbers"}, + {"version_string", "The USD version formatted as a string"}, + {NULL}, +}; + +static PyStructSequence_Desc app_usd_info_desc = { + "bpy.app.usd", /* name */ + "This module contains information about the Universal Scene Description library Bender is " + "linked against", /* doc */ + app_usd_info_fields, /* fields */ + ARRAY_SIZE(app_usd_info_fields) - 1, +}; + +static PyObject *make_usd_info(void) +{ + PyObject *usd_info = PyStructSequence_New(&BlenderAppUSDType); + + if (usd_info == NULL) { + return NULL; + } + + int pos = 0; + +#ifndef WITH_USD +# define SetStrItem(str) PyStructSequence_SET_ITEM(usd_info, pos++, PyUnicode_FromString(str)) +#endif + +#define SetObjItem(obj) PyStructSequence_SET_ITEM(usd_info, pos++, obj) + +#ifdef WITH_USD + const int curversion = USD_get_version(); + const int major = curversion / 10000; + const int minor = (curversion / 100) % 100; + const int patch = curversion % 100; + + SetObjItem(PyBool_FromLong(1)); + SetObjItem(PyC_Tuple_Pack_I32(major, minor, patch)); + SetObjItem(PyUnicode_FromFormat("%2d, %2d, %2d", major, minor, patch)); +#else + SetObjItem(PyBool_FromLong(0)); + SetObjItem(PyC_Tuple_Pack_I32(0, 0, 0)); + SetStrItem("Unknown"); +#endif + + if (PyErr_Occurred()) { + Py_CLEAR(usd_info); + return NULL; + } + +#undef SetStrItem +#undef SetObjItem + + return usd_info; +} + +PyObject *BPY_app_usd_struct(void) +{ + PyStructSequence_InitType(&BlenderAppUSDType, &app_usd_info_desc); + + PyObject *ret = make_usd_info(); + + /* prevent user from creating new instances */ + BlenderAppUSDType.tp_init = NULL; + BlenderAppUSDType.tp_new = NULL; + BlenderAppUSDType.tp_hash = (hashfunc) + _Py_HashPointer; /* without this we can't do set(sys.modules) [#29635] */ + + return ret; +} diff --git a/source/blender/python/intern/bpy_app_usd.h b/source/blender/python/intern/bpy_app_usd.h new file mode 100644 index 00000000000..e3e1d72b366 --- /dev/null +++ b/source/blender/python/intern/bpy_app_usd.h @@ -0,0 +1,29 @@ +/* + * 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. + * + * The Original Code is Copyright (C) 2020 Blender Foundation. + * All rights reserved. + */ + +/** \file + * \ingroup pythonintern + */ + +#ifndef __BPY_APP_USD_H__ +#define __BPY_APP_USD_H__ + +PyObject *BPY_app_usd_struct(void); + +#endif /* __BPY_APP_USD_H__ */ |