[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25883] trunk/blender/source/gameengine: get rid of annoying duplicate python initialization code, added setupGamePython() which initializes modules
Campbell Barton
ideasman42 at gmail.com
Sun Jan 10 23:03:26 CET 2010
Revision: 25883
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25883
Author: campbellbarton
Date: 2010-01-10 23:03:26 +0100 (Sun, 10 Jan 2010)
Log Message:
-----------
get rid of annoying duplicate python initialization code, added setupGamePython() which initializes modules
Modified Paths:
--------------
trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
trunk/blender/source/gameengine/Ketsji/KX_PythonInit.h
Modified: trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
===================================================================
--- trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp 2010-01-10 21:58:40 UTC (rev 25882)
+++ trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp 2010-01-10 22:03:26 UTC (rev 25883)
@@ -391,22 +391,8 @@
#ifndef DISABLE_PYTHON
// some python things
- PyObject* dictionaryobject = initGamePythonScripting("Ketsji", psl_Lowest, blenderdata);
- ketsjiengine->SetPyNamespace(dictionaryobject);
- initRasterizer(rasterizer, canvas);
- PyObject *gameLogic = initGameLogic(ketsjiengine, startscene);
- PyDict_SetItemString(PyModule_GetDict(gameLogic), "globalDict", pyGlobalDict); // Same as importing the module.
- PyObject *gameLogic_keys = PyDict_Keys(PyModule_GetDict(gameLogic));
- PyDict_SetItemString(dictionaryobject, "GameLogic", gameLogic); // Same as importing the module.
-
- initGameKeys();
- initPythonConstraintBinding();
- initMathutils();
- initGeometry();
- initBGL();
-#ifdef WITH_FFMPEG
- initVideoTexture();
-#endif
+ PyObject *gameLogic, *gameLogic_keys;
+ setupGamePython(ketsjiengine, startscene, blenderdata, pyGlobalDict, &gameLogic, &gameLogic_keys, 0, NULL);
#endif // DISABLE_PYTHON
//initialize Dome Settings
@@ -622,6 +608,7 @@
// Acquire Python's GIL (global interpreter lock)
// so we can safely run Python code and API calls
PyGILState_STATE gilstate = PyGILState_Ensure();
+ PyObject *pyGlobalDict = PyDict_New(); /* python utility storage, spans blend file loading */
#endif
bgl::InitExtensions(true);
@@ -722,19 +709,8 @@
#ifndef DISABLE_PYTHON
// some python things
- PyObject* dictionaryobject = initGamePythonScripting("Ketsji", psl_Lowest, blenderdata);
- ketsjiengine->SetPyNamespace(dictionaryobject);
- initRasterizer(rasterizer, canvas);
- PyObject *gameLogic = initGameLogic(ketsjiengine, startscene);
- PyDict_SetItemString(dictionaryobject, "GameLogic", gameLogic); // Same as importing the module
- initGameKeys();
- initPythonConstraintBinding();
- initMathutils();
- initGeometry();
- initBGL();
-#ifdef WITH_FFMPEG
- initVideoTexture();
-#endif
+ PyObject *gameLogic, *gameLogic_keys;
+ setupGamePython(ketsjiengine, startscene, blenderdata, pyGlobalDict, &gameLogic, &gameLogic_keys, 0, NULL);
#endif // DISABLE_PYTHON
if (sceneconverter)
@@ -820,6 +796,8 @@
} while (exitrequested == KX_EXIT_REQUEST_RESTART_GAME || exitrequested == KX_EXIT_REQUEST_START_OTHER_GAME);
#ifndef DISABLE_PYTHON
+ Py_DECREF(pyGlobalDict);
+
// Release Python's GIL
PyGILState_Release(gilstate);
#endif
Modified: trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
===================================================================
--- trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp 2010-01-10 21:58:40 UTC (rev 25882)
+++ trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp 2010-01-10 22:03:26 UTC (rev 25883)
@@ -679,21 +679,11 @@
startscenename,
m_startScene);
-
- // some python things
- PyObject* dictionaryobject = initGamePlayerPythonScripting("Ketsji", psl_Lowest, m_maggie, m_argc, m_argv);
- m_ketsjiengine->SetPyNamespace(dictionaryobject);
- initRasterizer(m_rasterizer, m_canvas);
- PyObject *gameLogic = initGameLogic(m_ketsjiengine, startscene);
- PyDict_SetItemString(dictionaryobject, "GameLogic", gameLogic); // Same as importing the module
- initGameKeys();
- initPythonConstraintBinding();
- initMathutils();
- initGeometry();
- initBGL();
-#ifdef WITH_FFMPEG
- initVideoTexture();
-#endif
+#ifndef DISABLE_PYTHON
+ // some python things
+ PyObject *gameLogic, *gameLogic_keys;
+ setupGamePython(m_ketsjiengine, startscene, m_maggie, NULL, &gameLogic, &gameLogic_keys, m_argc, m_argv);
+#endif // DISABLE_PYTHON
//initialize Dome Settings
if(m_startScene->gm.stereoflag == STEREO_DOME)
Modified: trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp 2010-01-10 21:58:40 UTC (rev 25882)
+++ trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp 2010-01-10 22:03:26 UTC (rev 25883)
@@ -1926,7 +1926,39 @@
PyObjectPlus::ClearDeprecationWarning();
}
+/* similar to the above functions except it sets up the namespace
+ * and other more general things */
+void setupGamePython(KX_KetsjiEngine* ketsjiengine, KX_Scene* startscene, Main *blenderdata, PyObject * pyGlobalDict, PyObject **gameLogic, PyObject **gameLogic_keys, int argc, char** argv)
+{
+ PyObject* dictionaryobject;
+ if(argv) /* player only */
+ dictionaryobject= initGamePlayerPythonScripting("Ketsji", psl_Lowest, blenderdata, argc, argv);
+ else
+ dictionaryobject= initGamePythonScripting("Ketsji", psl_Lowest, blenderdata);
+
+ ketsjiengine->SetPyNamespace(dictionaryobject);
+ initRasterizer(ketsjiengine->GetRasterizer(), ketsjiengine->GetCanvas());
+ *gameLogic = initGameLogic(ketsjiengine, startscene);
+
+ /* is set in initGameLogic so only set here if we want it to persist between scenes */
+ if(pyGlobalDict)
+ PyDict_SetItemString(PyModule_GetDict(*gameLogic), "globalDict", pyGlobalDict); // Same as importing the module.
+
+ *gameLogic_keys = PyDict_Keys(PyModule_GetDict(*gameLogic));
+ PyDict_SetItemString(dictionaryobject, "GameLogic", *gameLogic); // Same as importing the module.
+
+ initGameKeys();
+ initPythonConstraintBinding();
+ initMathutils();
+ initGeometry();
+ initBGL();
+
+#ifdef WITH_FFMPEG
+ initVideoTexture();
+#endif
+}
+
static struct PyModuleDef Rasterizer_module_def = {
{}, /* m_base */
"Rasterizer", /* m_name */
Modified: trunk/blender/source/gameengine/Ketsji/KX_PythonInit.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_PythonInit.h 2010-01-10 21:58:40 UTC (rev 25882)
+++ trunk/blender/source/gameengine/Ketsji/KX_PythonInit.h 2010-01-10 22:03:26 UTC (rev 25883)
@@ -52,6 +52,8 @@
PyObject* initGamePythonScripting(const STR_String& progname, TPythonSecurityLevel level, struct Main *maggie);
void exitGamePythonScripting();
+void setupGamePython(KX_KetsjiEngine* ketsjiengine, KX_Scene* startscene, Main *blenderdata, PyObject *pyGlobalDict, PyObject **gameLogic, PyObject **gameLogic_keys, int argc, char** argv);
+
void setGamePythonPath(char *path);
void resetGamePythonPath();
void pathGamePythonConfig( char *path );
More information about the Bf-blender-cvs
mailing list