From a088b9488d1be7388ddff34c0708616643900940 Mon Sep 17 00:00:00 2001 From: Ines Almeida Date: Mon, 9 Feb 2015 20:56:38 +0000 Subject: Recreating bge python modules instead of using existing All of the initXPythonBinding functions are changed to always creating the module instead of importing if previously existing. I can instead only remove the module return when the import is ok, so that it always inits. But then, I don't see the point in importing. I make sure that these functions are called only once per run, inside initBGE. This was not the case with GameTypes. I moved initPyTypes inside of initGameTypesPythonBinding due to that. I reorganized initGamePlayerPythonScripting and initGamePythonScripting so that they run things in the same order. initGamePlayerPythonScripting imports mathutils and aud, the other only aud. Shouldn't it be the same for both? Reviewers: campbellbarton Subscribers: sybren Projects: #game_engine, #game_python Differential Revision: https://developer.blender.org/D1070 --- source/gameengine/Ketsji/KX_PythonInit.cpp | 65 +++++++----------------------- 1 file changed, 14 insertions(+), 51 deletions(-) (limited to 'source/gameengine/Ketsji/KX_PythonInit.cpp') diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp index 652dad581b0..70d1aed88a0 100644 --- a/source/gameengine/Ketsji/KX_PythonInit.cpp +++ b/source/gameengine/Ketsji/KX_PythonInit.cpp @@ -1577,21 +1577,11 @@ PyMODINIT_FUNC initGameLogicPythonBinding() gUseVisibilityTemp=false; PyObjectPlus::ClearDeprecationWarning(); /* Not that nice to call here but makes sure warnings are reset between loading scenes */ - - /* Use existing module where possible - * be careful not to init any runtime vars after this */ - m = PyImport_ImportModule( "GameLogic" ); - if (m) { - Py_DECREF(m); - return m; - } - else { - PyErr_Clear(); - // Create the module and add the functions - m = PyModule_Create(&GameLogic_module_def); - PyDict_SetItemString(PySys_GetObject("modules"), GameLogic_module_def.m_name, m); - } - + + m = PyModule_Create(&GameLogic_module_def); + PyDict_SetItemString(PySys_GetObject("modules"), GameLogic_module_def.m_name, m); + + // Add some symbolic constants to the module d = PyModule_GetDict(m); @@ -2116,7 +2106,6 @@ PyMODINIT_FUNC initBGE(void) PyDict_SetItemString(sys_modules, PyModule_GetName(submodule), submodule); Py_INCREF(submodule); - /* GameTypes is initted *after* in initPyTypes() */ PyModule_AddObject(mod, "types", (submodule = initGameTypesPythonBinding())); PyDict_SetItemString(sys_modules, PyModule_GetName(submodule), submodule); Py_INCREF(submodule); @@ -2196,8 +2185,6 @@ PyObject *initGamePlayerPythonScripting(Main *maggie, int argc, char** argv) initPySysObjects(maggie); - PyDict_SetItemString(PyImport_GetModuleDict(), "bge", initBGE()); - /* mathutils types are used by the BGE even if we don't import them */ { PyObject *mod = PyImport_ImportModuleLevel("mathutils", NULL, NULL, NULL, 0); @@ -2212,7 +2199,7 @@ PyObject *initGamePlayerPythonScripting(Main *maggie, int argc, char** argv) } #endif - initPyTypes(); + PyDict_SetItemString(PyImport_GetModuleDict(), "bge", initBGE()); first_time = false; @@ -2254,7 +2241,9 @@ PyObject *initGamePythonScripting(Main *maggie) { /* no need to Py_SetProgramName, it was already taken care of in BPY_python_start */ - PyDict_SetItemString(PyImport_GetModuleDict(), "bge", initBGE()); + bpy_import_main_set(maggie); + + initPySysObjects(maggie); #ifdef WITH_AUDASPACE /* accessing a SoundActuator's sound results in a crash if aud is not initialized... */ @@ -2264,11 +2253,7 @@ PyObject *initGamePythonScripting(Main *maggie) } #endif - initPyTypes(); - - bpy_import_main_set(maggie); - - initPySysObjects(maggie); + PyDict_SetItemString(PyImport_GetModuleDict(), "bge", initBGE()); PyObjectPlus::NullDeprecationWarning(); @@ -2342,20 +2327,9 @@ PyMODINIT_FUNC initRasterizerPythonBinding() PyObject *m; PyObject *d; - /* Use existing module where possible - * be careful not to init any runtime vars after this */ - m = PyImport_ImportModule( "Rasterizer" ); - if (m) { - Py_DECREF(m); - return m; - } - else { - PyErr_Clear(); + m = PyModule_Create(&Rasterizer_module_def); + PyDict_SetItemString(PySys_GetObject("modules"), Rasterizer_module_def.m_name, m); - // Create the module and add the functions - m = PyModule_Create(&Rasterizer_module_def); - PyDict_SetItemString(PySys_GetObject("modules"), Rasterizer_module_def.m_name, m); - } // Add some symbolic constants to the module d = PyModule_GetDict(m); @@ -2478,19 +2452,8 @@ PyMODINIT_FUNC initGameKeysPythonBinding() PyObject *m; PyObject *d; - /* Use existing module where possible */ - m = PyImport_ImportModule( "GameKeys" ); - if (m) { - Py_DECREF(m); - return m; - } - else { - PyErr_Clear(); - - // Create the module and add the functions - m = PyModule_Create(&GameKeys_module_def); - PyDict_SetItemString(PySys_GetObject("modules"), GameKeys_module_def.m_name, m); - } + m = PyModule_Create(&GameKeys_module_def); + PyDict_SetItemString(PySys_GetObject("modules"), GameKeys_module_def.m_name, m); // Add some symbolic constants to the module d = PyModule_GetDict(m); -- cgit v1.2.3