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/bpy_app_usd.c | |
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/bpy_app_usd.c')
-rw-r--r-- | source/blender/python/intern/bpy_app_usd.c | 107 |
1 files changed, 107 insertions, 0 deletions
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; +} |