From 5489b40a5ad4294115b6e54460fbdd1826720d7d Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Wed, 7 Jun 2017 12:16:48 +0200 Subject: Report OpenSubdiv version Blender is compiled against --- source/blender/python/intern/CMakeLists.txt | 9 ++ source/blender/python/intern/bpy_app.c | 3 + source/blender/python/intern/bpy_app_opensubdiv.c | 109 ++++++++++++++++++++++ source/blender/python/intern/bpy_app_opensubdiv.h | 32 +++++++ 4 files changed, 153 insertions(+) create mode 100644 source/blender/python/intern/bpy_app_opensubdiv.c create mode 100644 source/blender/python/intern/bpy_app_opensubdiv.h (limited to 'source/blender/python') diff --git a/source/blender/python/intern/CMakeLists.txt b/source/blender/python/intern/CMakeLists.txt index 038c1e7eb10..be4db6477fe 100644 --- a/source/blender/python/intern/CMakeLists.txt +++ b/source/blender/python/intern/CMakeLists.txt @@ -55,6 +55,7 @@ set(SRC bpy_app_handlers.c bpy_app_ocio.c bpy_app_oiio.c + bpy_app_opensubdiv.c bpy_app_openvdb.c bpy_app_sdl.c bpy_app_translations.c @@ -89,6 +90,7 @@ set(SRC bpy_app_handlers.h bpy_app_ocio.h bpy_app_oiio.h + bpy_app_opensubdiv.h bpy_app_openvdb.h bpy_app_sdl.h bpy_app_translations.h @@ -295,6 +297,13 @@ if(WITH_OPENIMAGEIO) ) endif() +if(WITH_OPENSUBDIV) + add_definitions(-DWITH_OPENSUBDIV) + list(APPEND INC + ../../../../intern/opensubdiv + ) +endif() + if(WITH_PLAYER) add_definitions(-DWITH_PLAYER) endif() diff --git a/source/blender/python/intern/bpy_app.c b/source/blender/python/intern/bpy_app.c index ed7cec2f2d5..47b4e840805 100644 --- a/source/blender/python/intern/bpy_app.c +++ b/source/blender/python/intern/bpy_app.c @@ -37,6 +37,7 @@ #include "bpy_app_ffmpeg.h" #include "bpy_app_ocio.h" #include "bpy_app_oiio.h" +#include "bpy_app_opensubdiv.h" #include "bpy_app_openvdb.h" #include "bpy_app_sdl.h" #include "bpy_app_build_options.h" @@ -109,6 +110,7 @@ static PyStructSequence_Field app_info_fields[] = { {(char *)"ffmpeg", (char *)"FFmpeg library information backend"}, {(char *)"ocio", (char *)"OpenColorIO library information backend"}, {(char *)"oiio", (char *)"OpenImageIO library information backend"}, + {(char *)"opensubdiv", (char *)"OpenSubdiv library information backend"}, {(char *)"openvdb", (char *)"OpenVDB library information backend"}, {(char *)"sdl", (char *)"SDL library information backend"}, {(char *)"build_options", (char *)"A set containing most important enabled optional build features"}, @@ -188,6 +190,7 @@ static PyObject *make_app_info(void) SetObjItem(BPY_app_ffmpeg_struct()); SetObjItem(BPY_app_ocio_struct()); SetObjItem(BPY_app_oiio_struct()); + SetObjItem(BPY_app_opensubdiv_struct()); SetObjItem(BPY_app_openvdb_struct()); SetObjItem(BPY_app_sdl_struct()); SetObjItem(BPY_app_build_options_struct()); diff --git a/source/blender/python/intern/bpy_app_opensubdiv.c b/source/blender/python/intern/bpy_app_opensubdiv.c new file mode 100644 index 00000000000..7f269baf2b0 --- /dev/null +++ b/source/blender/python/intern/bpy_app_opensubdiv.c @@ -0,0 +1,109 @@ +/* + * ***** 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. + * + * Contributor(s): Sergey Sharybin + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/python/intern/bpy_app_opensubdiv.c + * \ingroup pythonintern + */ + +#include +#include "BLI_utildefines.h" + +#include "bpy_app_opensubdiv.h" + +#ifdef WITH_OPENSUBDIV +# include "opensubdiv_capi.h" +#endif + +static PyTypeObject BlenderAppOpenSubdivType; + +static PyStructSequence_Field app_opensubdiv_info_fields[] = { + {(char *)"supported", (char *)("Boolean, True when Blender is built with OpenSubdiv support")}, + {(char *)("version"), (char *)("The OpenSubdiv version as a tuple of 3 numbers")}, + {(char *)("version_string"), (char *)("The OpenSubdiv version formatted as a string")}, + {NULL} +}; + +static PyStructSequence_Desc app_opensubdiv_info_desc = { + (char *)"bpy.app.opensubdiv", /* name */ + (char *)"This module contains information about OpenSubdiv blender is linked against", /* doc */ + app_opensubdiv_info_fields, /* fields */ + ARRAY_SIZE(app_opensubdiv_info_fields) - 1 +}; + +static PyObject *make_opensubdiv_info(void) +{ + PyObject *opensubdiv_info; + int pos = 0; + + opensubdiv_info = PyStructSequence_New(&BlenderAppOpenSubdivType); + if (opensubdiv_info == NULL) { + return NULL; + } + +#ifndef WITH_OPENSUBDIV +#define SetStrItem(str) \ + PyStructSequence_SET_ITEM(opensubdiv_info, pos++, PyUnicode_FromString(str)) +#endif + +#define SetObjItem(obj) \ + PyStructSequence_SET_ITEM(opensubdiv_info, pos++, obj) + +#ifdef WITH_OPENSUBDIV + int curversion = openSubdiv_getVersionHex(); + SetObjItem(PyBool_FromLong(1)); + SetObjItem(Py_BuildValue("(iii)", + curversion / 10000, (curversion / 100) % 100, curversion % 100)); + SetObjItem(PyUnicode_FromFormat("%2d, %2d, %2d", + curversion / 10000, (curversion / 100) % 100, curversion % 100)); +#else + SetObjItem(PyBool_FromLong(0)); + SetObjItem(Py_BuildValue("(iii)", 0, 0, 0)); + SetStrItem("Unknown"); +#endif + + if (PyErr_Occurred()) { + Py_CLEAR(opensubdiv_info); + return NULL; + } + +#undef SetStrItem +#undef SetObjItem + + return opensubdiv_info; +} + +PyObject *BPY_app_opensubdiv_struct(void) +{ + PyObject *ret; + + PyStructSequence_InitType(&BlenderAppOpenSubdivType, &app_opensubdiv_info_desc); + + ret = make_opensubdiv_info(); + + /* prevent user from creating new instances */ + BlenderAppOpenSubdivType.tp_init = NULL; + BlenderAppOpenSubdivType.tp_new = NULL; + /* without this we can't do set(sys.modules) [#29635] */ + BlenderAppOpenSubdivType.tp_hash = (hashfunc)_Py_HashPointer; + + return ret; +} diff --git a/source/blender/python/intern/bpy_app_opensubdiv.h b/source/blender/python/intern/bpy_app_opensubdiv.h new file mode 100644 index 00000000000..b1da218b168 --- /dev/null +++ b/source/blender/python/intern/bpy_app_opensubdiv.h @@ -0,0 +1,32 @@ +/* + * ***** 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. + * + * Contributor(s): Sergey Sharybin + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/python/intern/bpy_app_opensubdiv.h + * \ingroup pythonintern + */ + +#ifndef __BPY_APP_OPENSUBDIV_H__ +#define __BPY_APP_OPENSUBDIV_H__ + +PyObject *BPY_app_opensubdiv_struct(void); + +#endif /* __BPY_APP_OPENSUBDIV_H__ */ -- cgit v1.2.3