diff options
author | Kévin Dietrich <kevin.dietrich@mailoo.org> | 2016-01-23 10:39:29 +0300 |
---|---|---|
committer | Kévin Dietrich <kevin.dietrich@mailoo.org> | 2016-01-23 10:39:40 +0300 |
commit | e9452f909cdba368f54637cd0b15ff14d1c60cf3 (patch) | |
tree | 7d276fa9063f351e8b9f128f4436b87c2338c764 /source/blender/python/intern | |
parent | 275abd14a0963a42aeb6e7fcd9b61ac8bc00da42 (diff) |
Implementation of OpenVDB as a possible cache format for smoke
simulations.
This commits implements OpenVDB as an extra cache format in the Point
Cache system for smoke simulations. Compilation with the library is
turned off by default for now, and shall be enabled when the library is
present.
A documentation of its doings is available here: http://
wiki.blender.org/index.php/User:Kevindietrich/OpenVDBSmokeExport.
A guide to compile OpenVDB can be found here (Linux): http://
wiki.blender.org/index.php?title=Dev:Doc/Building_Blender/Linux/
Dependencies_From_Source#OpenVDB
Reviewers: sergey, lukastoenne, brecht, campbellbarton
Reviewed By: brecht, campbellbarton
Subscribers: galenb, Blendify, robocyte, Lapineige, bliblubli,
jtheninja, lukasstockner97, dingto, brecht
Differential Revision: https://developer.blender.org/D1721
Diffstat (limited to 'source/blender/python/intern')
-rw-r--r-- | source/blender/python/intern/CMakeLists.txt | 9 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_app.c | 3 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_app_build_options.c | 7 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_app_openvdb.c | 117 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_app_openvdb.h | 38 |
5 files changed, 174 insertions, 0 deletions
diff --git a/source/blender/python/intern/CMakeLists.txt b/source/blender/python/intern/CMakeLists.txt index cbfbe0a8768..5b39dbb062b 100644 --- a/source/blender/python/intern/CMakeLists.txt +++ b/source/blender/python/intern/CMakeLists.txt @@ -54,6 +54,7 @@ set(SRC bpy_app_handlers.c bpy_app_ocio.c bpy_app_oiio.c + bpy_app_openvdb.c bpy_app_sdl.c bpy_app_translations.c bpy_driver.c @@ -84,6 +85,7 @@ set(SRC bpy_app_handlers.h bpy_app_ocio.h bpy_app_oiio.h + bpy_app_openvdb.h bpy_app_sdl.h bpy_app_translations.h bpy_driver.h @@ -267,6 +269,13 @@ if(WITH_OPENCOLORIO) add_definitions(-DWITH_OCIO) endif() +if(WITH_OPENVDB) + add_definitions(-DWITH_OPENVDB) + list(APPEND INC + ../../../../intern/openvdb + ) +endif() + if(WITH_OPENIMAGEIO) add_definitions(-DWITH_OPENIMAGEIO) list(APPEND INC diff --git a/source/blender/python/intern/bpy_app.c b/source/blender/python/intern/bpy_app.c index a0ea991fd05..595bb7b0f22 100644 --- a/source/blender/python/intern/bpy_app.c +++ b/source/blender/python/intern/bpy_app.c @@ -36,6 +36,7 @@ #include "bpy_app_ffmpeg.h" #include "bpy_app_ocio.h" #include "bpy_app_oiio.h" +#include "bpy_app_openvdb.h" #include "bpy_app_sdl.h" #include "bpy_app_build_options.h" @@ -106,6 +107,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 *)"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"}, {(char *)"handlers", (char *)"Application handler callbacks"}, @@ -183,6 +185,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_openvdb_struct()); SetObjItem(BPY_app_sdl_struct()); SetObjItem(BPY_app_build_options_struct()); SetObjItem(BPY_app_handlers_struct()); diff --git a/source/blender/python/intern/bpy_app_build_options.c b/source/blender/python/intern/bpy_app_build_options.c index 975d76ca42d..692ebf552c7 100644 --- a/source/blender/python/intern/bpy_app_build_options.c +++ b/source/blender/python/intern/bpy_app_build_options.c @@ -69,6 +69,7 @@ static PyStructSequence_Field app_builtopts_info_fields[] = { {(char *)"opencolorio", NULL}, {(char *)"player", NULL}, {(char *)"openmp", NULL}, + {(char *)"openvdb", NULL}, {NULL} }; @@ -303,6 +304,12 @@ static PyObject *make_builtopts_info(void) SetObjIncref(Py_False); #endif +#ifdef WITH_OPENVDB + SetObjIncref(Py_True); +#else + SetObjIncref(Py_False); +#endif + #undef SetObjIncref return builtopts_info; diff --git a/source/blender/python/intern/bpy_app_openvdb.c b/source/blender/python/intern/bpy_app_openvdb.c new file mode 100644 index 00000000000..8a24aaf0555 --- /dev/null +++ b/source/blender/python/intern/bpy_app_openvdb.c @@ -0,0 +1,117 @@ +/* + * ***** 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. + * + * The Original Code is Copyright (C) 2015 Blender Foundation. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): Kevin Dietrich + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/python/intern/bpy_app_openvdb.c + * \ingroup pythonintern + */ + +#include <Python.h> +#include "BLI_utildefines.h" + +#include "bpy_app_openvdb.h" + +#ifdef WITH_OPENVDB +# include "openvdb_capi.h" +#endif + +static PyTypeObject BlenderAppOVDBType; + +static PyStructSequence_Field app_openvdb_info_fields[] = { + {(char *)"supported", (char *)("Boolean, True when Blender is built with OpenVDB support")}, + {(char *)("version"), (char *)("The OpenVDB version as a tuple of 3 numbers")}, + {(char *)("version_string"), (char *)("The OpenVDB version formatted as a string")}, + {NULL} +}; + +static PyStructSequence_Desc app_openvdb_info_desc = { + (char *)"bpy.app.openvdb", /* name */ + (char *)"This module contains information about OpenVDB blender is linked against", /* doc */ + app_openvdb_info_fields, /* fields */ + ARRAY_SIZE(app_openvdb_info_fields) - 1 +}; + +static PyObject *make_openvdb_info(void) +{ + PyObject *openvdb_info; + int pos = 0; + +#ifdef WITH_OPENVDB + int curversion; +#endif + + openvdb_info = PyStructSequence_New(&BlenderAppOVDBType); + if (openvdb_info == NULL) { + return NULL; + } + +#ifndef WITH_OPENVDB +#define SetStrItem(str) \ + PyStructSequence_SET_ITEM(openvdb_info, pos++, PyUnicode_FromString(str)) +#endif + +#define SetObjItem(obj) \ + PyStructSequence_SET_ITEM(openvdb_info, pos++, obj) + +#ifdef WITH_OPENVDB + curversion = OpenVDB_getVersionHex(); + SetObjItem(PyBool_FromLong(1)); + SetObjItem(Py_BuildValue("(iii)", + curversion >> 24, (curversion >> 16) % 256, (curversion >> 8) % 256)); + SetObjItem(PyUnicode_FromFormat("%2d, %2d, %2d", + curversion >> 24, (curversion >> 16) % 256, (curversion >> 8) % 256)); +#else + SetObjItem(PyBool_FromLong(0)); + SetObjItem(Py_BuildValue("(iii)", 0, 0, 0)); + SetStrItem("Unknown"); +#endif + + if (PyErr_Occurred()) { + Py_CLEAR(openvdb_info); + return NULL; + } + +#undef SetStrItem +#undef SetObjItem + + return openvdb_info; +} + +PyObject *BPY_app_openvdb_struct(void) +{ + PyObject *ret; + + PyStructSequence_InitType(&BlenderAppOVDBType, &app_openvdb_info_desc); + + ret = make_openvdb_info(); + + /* prevent user from creating new instances */ + BlenderAppOVDBType.tp_init = NULL; + BlenderAppOVDBType.tp_new = NULL; + BlenderAppOVDBType.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_openvdb.h b/source/blender/python/intern/bpy_app_openvdb.h new file mode 100644 index 00000000000..12fa54ea7a3 --- /dev/null +++ b/source/blender/python/intern/bpy_app_openvdb.h @@ -0,0 +1,38 @@ +/* + * ***** 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. + * + * The Original Code is Copyright (C) 2015 Blender Foundation. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): Kevin Dietrich + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/python/intern/bpy_app_openvdb.h + * \ingroup pythonintern + */ + +#ifndef __BPY_APP_OPENVDB_H__ +#define __BPY_APP_OPENVDB_H__ + +PyObject *BPY_app_openvdb_struct(void); + +#endif /* __BPY_APP_OPENVDB_H__ */ + |