diff options
-rw-r--r-- | doc/python_api/rst/bge.app.rst | 47 | ||||
-rw-r--r-- | doc/python_api/sphinx_doc_gen.py | 3 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_PythonInit.cpp | 77 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_PythonInit.h | 1 |
4 files changed, 128 insertions, 0 deletions
diff --git a/doc/python_api/rst/bge.app.rst b/doc/python_api/rst/bge.app.rst new file mode 100644 index 00000000000..a0c2cf36314 --- /dev/null +++ b/doc/python_api/rst/bge.app.rst @@ -0,0 +1,47 @@ + +Application Data (bge.app) +========================== + +Module to access application values that remain unchanged during runtime. + +.. module:: bge.app + +.. data:: version + + The Blender/BGE version as a tuple of 3 ints, eg. (2, 75, 1). + + .. note:: Version tuples can be compared simply with (in)equality symbols; + for example, ``(2, 74, 5) <= (2, 75, 0)`` returns True (lexical order). + + :type: tuple of three ints + +.. data:: version_string + + The Blender/BGE version formatted as a string, eg. "2.75 (sub 1)". + + :type: str + +.. data:: version_char + + The Blender/BGE version character (for minor releases). + + :type: str + +.. data:: has_texture_ffmpeg + + True if the BGE has been built with FFmpeg support, enabling use of :class:`~bge.texture.ImageFFmpeg` and :class:`~bge.texture.VideoFFmpeg`. + + :type: bool + +.. data:: has_joystick + + True if the BGE has been built with joystick support. + + :type: bool + +.. data:: has_physics + + True if the BGE has been built with physics support. + + :type: bool + diff --git a/doc/python_api/sphinx_doc_gen.py b/doc/python_api/sphinx_doc_gen.py index e5ce4c76142..32776ef29f3 100644 --- a/doc/python_api/sphinx_doc_gen.py +++ b/doc/python_api/sphinx_doc_gen.py @@ -234,6 +234,7 @@ else: EXCLUDE_MODULES = [ "aud", "bge", + "bge.app" "bge.constraints", "bge.events", "bge.logic", @@ -1669,6 +1670,7 @@ def write_rst_contents(basepath): fw(" bge.texture.rst\n\n") fw(" bge.events.rst\n\n") fw(" bge.constraints.rst\n\n") + fw(" bge.app.rst\n\n") # rna generated change log fw(title_string("API Info", "=", double=True)) @@ -1825,6 +1827,7 @@ def copy_handwritten_rsts(basepath): "bge.texture", "bge.events", "bge.constraints", + "bge.app", "bgl", # "Blender OpenGl wrapper" "gpu", # "GPU Shader Module" diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp index 80e56a450dd..a5fb2dede72 100644 --- a/source/gameengine/Ketsji/KX_PythonInit.cpp +++ b/source/gameengine/Ketsji/KX_PythonInit.cpp @@ -138,6 +138,7 @@ extern "C" { #include "BKE_global.h" #include "BKE_library.h" #include "BKE_appdir.h" +#include "BKE_blender.h" #include "BLI_blenlib.h" #include "GPU_material.h" #include "MEM_guardedalloc.h" @@ -2027,6 +2028,11 @@ PyMODINIT_FUNC initBGE(void) /* skip "bge." */ #define SUBMOD (mod_full + 4) + mod_full = "bge.app"; + PyModule_AddObject(mod, SUBMOD, (submodule = initApplicationPythonBinding())); + PyDict_SetItemString(sys_modules, mod_full, submodule); + Py_INCREF(submodule); + mod_full = "bge.constraints"; PyModule_AddObject(mod, SUBMOD, (submodule = initConstraintPythonBinding())); PyDict_SetItemString(sys_modules, mod_full, submodule); @@ -2550,6 +2556,77 @@ PyMODINIT_FUNC initGameKeysPythonBinding() return m; } + + +/* ------------------------------------------------------------------------- */ +/* Application: application values that remain unchanged during runtime */ +/* ------------------------------------------------------------------------- */ + +PyDoc_STRVAR(Application_module_documentation, + "This module contains application values that remain unchanged during runtime." + ); + +static struct PyModuleDef Application_module_def = { + PyModuleDef_HEAD_INIT, + "bge.app", /* m_name */ + Application_module_documentation, /* m_doc */ + 0, /* m_size */ + NULL, /* m_methods */ + 0, /* m_reload */ + 0, /* m_traverse */ + 0, /* m_clear */ + 0, /* m_free */ +}; + +PyMODINIT_FUNC initApplicationPythonBinding() +{ + PyObject *m; + PyObject *d; + + m = PyModule_Create(&Application_module_def); + + // Add some symbolic constants to the module + d = PyModule_GetDict(m); + + PyDict_SetItemString(d, "version", Py_BuildValue("(iii)", + BLENDER_VERSION / 100, BLENDER_VERSION % 100, BLENDER_SUBVERSION)); + PyDict_SetItemString(d, "version_string", PyUnicode_FromFormat("%d.%02d (sub %d)", + BLENDER_VERSION / 100, BLENDER_VERSION % 100, BLENDER_SUBVERSION)); + PyDict_SetItemString(d, "version_char", PyUnicode_FromString( + STRINGIFY(BLENDER_VERSION_CHAR))); + + PyDict_SetItemString(d, "has_texture_ffmpeg", +#ifdef WITH_FFMPEG + Py_True +#else + Py_False +#endif + ); + PyDict_SetItemString(d, "has_joystick", +#ifdef WITH_SDL + Py_True +#else + Py_False +#endif + ); + PyDict_SetItemString(d, "has_physics", +#ifdef WITH_BULLET + Py_True +#else + Py_False +#endif + ); + + // Check for errors + if (PyErr_Occurred()) { + PyErr_Print(); + PyErr_Clear(); + } + + return m; +} + + // utility function for loading and saving the globalDict int saveGamePythonConfig( char **marshal_buffer) { diff --git a/source/gameengine/Ketsji/KX_PythonInit.h b/source/gameengine/Ketsji/KX_PythonInit.h index f74a4b3865f..06aeb5a4fca 100644 --- a/source/gameengine/Ketsji/KX_PythonInit.h +++ b/source/gameengine/Ketsji/KX_PythonInit.h @@ -48,6 +48,7 @@ extern bool gUseVisibilityTemp; #ifdef WITH_PYTHON PyMODINIT_FUNC initBGE(void); +PyMODINIT_FUNC initApplicationPythonBinding(void); PyMODINIT_FUNC initGameLogicPythonBinding(void); PyMODINIT_FUNC initGameKeysPythonBinding(void); PyMODINIT_FUNC initRasterizerPythonBinding(void); |