[Bf-blender-cvs] [a088b94] master: Recreating bge python modules instead of using existing

Ines Almeida noreply at git.blender.org
Mon Feb 9 21:59:17 CET 2015


Commit: a088b9488d1be7388ddff34c0708616643900940
Author: Ines Almeida
Date:   Mon Feb 9 20:56:38 2015 +0000
Branches: master
https://developer.blender.org/rBa088b9488d1be7388ddff34c0708616643900940

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

===================================================================

M	source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
M	source/gameengine/Ketsji/KX_PythonInit.cpp
M	source/gameengine/Ketsji/KX_PythonInitTypes.cpp
M	source/gameengine/Ketsji/KX_PythonInitTypes.h
M	source/gameengine/VideoTexture/blendVideoTex.cpp

===================================================================

diff --git a/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp b/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
index ccb80fa..1b69eab 100644
--- a/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
+++ b/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
@@ -753,19 +753,8 @@ PyMODINIT_FUNC initConstraintPythonBinding()
 	PyObject *d;
 	PyObject *item;
 
-	/* Use existing module where possible
-	 * be careful not to init any runtime vars after this */
-	m = PyImport_ImportModule( "PhysicsConstraints" );
-	if (m) {
-		Py_DECREF(m);
-		return m;
-	}
-	else {
-		PyErr_Clear();
-		
-		m = PyModule_Create(&PhysicsConstraints_module_def);
-		PyDict_SetItemString(PySys_GetObject("modules"), PhysicsConstraints_module_def.m_name, m);
-	}
+	m = PyModule_Create(&PhysicsConstraints_module_def);
+	PyDict_SetItemString(PySys_GetObject("modules"), PhysicsConstraints_module_def.m_name, m);
 
 	// Add some symbolic constants to the module
 	d = PyModule_GetDict(m);
diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp
index 652dad5..70d1aed 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);
diff --git a/source/gameengine/Ketsji/KX_PythonInitTypes.cpp b/source/gameengine/Ketsji/KX_PythonInitTypes.cpp
index 5c1ad56..828fd62 100644
--- a/source/gameengine/Ketsji/KX_PythonInitTypes.cpp
+++ b/source/gameengine/Ketsji/KX_PythonInitTypes.cpp
@@ -163,23 +163,34 @@ static void PyType_Ready_ADD(PyObject *dict, PyTypeObject *tp, PyAttributeDef *a
 #define PyType_Ready_Attr(d, n, i)   PyType_Ready_ADD(d, &n::Type, n::Attributes, NULL, i)
 #define PyType_Ready_AttrPtr(d, n, i)   PyType_Ready_ADD(d, &n::Type, n::Attributes, n::AttributesPtr, i)
 
-void initPyTypes(void)
+
+
+PyDoc_STRVAR(GameTypes_module_documentation,
+"This module provides access to the game engine data types."
+);
+static struct PyModuleDef GameTypes_module_def = {
+	PyModuleDef_HEAD_INIT,
+	"GameTypes",  /* m_name */
+	GameTypes_module_documentation,  /* m_doc */
+	0,  /* m_size */
+	NULL,  /* m_methods */
+	NULL,  /* m_reload */
+	NULL,  /* m_traverse */
+	NULL,  /* m_clear */
+	NULL,  /* m_free */
+};
+
+
+PyMODINIT_FUNC initGameTypesPythonBinding(void)
 {
+	PyObject *m;
+	PyObject *dict;
 
-/*
- * initPyObjectPlusType(BL_ActionActuator::Parents);
- * .....
- */
+	m = PyModule_Create(&GameTypes_module_def);
+	PyDict_SetItemString(PySys_GetObject("modules"), GameTypes_module_def.m_name, m);
 
-	/* Use existing module where possible */
-	PyObject *mod  = initGameTypesPythonBinding();
+	dict = PyModule_GetDict(m);
 
-	/* For now just do PyType_Ready */
-	PyObject *dict = PyModule_GetDict(mod);
-	PyDict_SetItemString(PySys_GetObject("modules"), "GameTypes", mod);
-	Py_DECREF(mod);
-	
-	
 	for (int init_getset= 1; init_getset > -1; init_getset--) { /* run twice, once to init the getsets another to run PyType_Ready */
 		PyType_Ready_Attr(dict, BL_ActionActuator, init_getset);
 		PyType_Ready_Attr(dict, BL_Shader, init_getset);
@@ -269,42 +280,6 @@ void initPyTypes(void)
 	KX_GameObject_Mathutils_Callback_Init();
 	KX_ObjectActuator_Mathutils_Callback_Init();
 #endif
-}
-
-
-PyDoc_STRVAR(GameTypes_module_documentation,
-"This module provides access to the game engine data types."
-);
-static struct PyModuleDef GameTypes_module_def = {
-	PyModuleDef_HEAD_INIT,
-	"GameTypes",  /* m_name */
-	GameTypes_module_documentation,  /* m_doc */
-	0,  /* m_size */
-	NULL,  /* m_methods */
-	NULL,  /* m_reload */
-	NULL,  /* m_traverse */
-	NULL,  /* m_clear */
-	NULL,  /* m_free */
-};
-
-
-PyMODINIT_FUNC initGameTypesPythonBinding(void)
-{
-	PyObject *m;
-
-	/* Use existing module where possible */
-	m = PyImport_ImportModule( "GameTypes" );
-	if (m) {
-		Py_DECREF(m);
-		return m;
-	}
-	else {
-		PyErr_Clear();
-
-		// Create the module and add the functions
-		m = PyModule_Create(&GameTypes_module_def);
-		PyDict_SetItemString(PySys_GetObject("modules"), GameTypes_module_def.m_name, m);
-	}
 
 	return m;
 }
diff --git a/source/gameengine/Ketsji/KX_PythonInitTypes.h b/source/gameengine/Ketsji/KX_PythonInitTypes.h
index 4d7d26f..cfc49a1 100644
--- a/source/gameengine/Ketsji/KX_PythonInitTypes.h
+++ b/source/gameengine/Ketsji/KX_PythonInitTypes.h
@@ -34,7 +34,6 @@
 
 #ifdef WITH_PYTHON
 #include <Python.h>
-void initPyTypes(void);
 PyMODINIT_FUNC initGameTypesPythonBinding(void);
 #endif
 
diff --git a/source/gameengine/VideoTexture/blendVideoTex.cpp b/source/gameengine/VideoTexture/blendVideoTex.cpp
index 50b973d..6c92948 100644
--- a/source/gameengine/VideoTexture/blendVideoTex.cpp
+++ b/source/gameengine/VideoTexture/blendVideoTex.cpp
@@ -191,20 +191,9 @@ PyMODINIT_FUNC initVideoTexturePythonBinding(void)
 	if (PyType_Ready(&TextureType) < 0) 
 		return NULL;
 
-	/* Use existing module where possible
-	 * be careful not to init any runtime vars after this */
-	m = PyImport_ImportModule( "VideoTexture" );
-	if (m) {
-		Py_DECREF(m);
-		return m;
-	}
-	else {
-		PyErr_Clear();
-	
-		m = PyModule_Create(&VideoTexture_module_def);
-		PyDict_SetItemString(PySys_GetObject("modules"), VideoTexture_module_def.m_name, m);
-	}
-	
+	m = PyModule_Create(&VideoTexture_module_def);
+	PyDict_SetItemString(PySys_GetObject("modules"), VideoTexture_module_def.m_name, m);
+
 	if (m == NULL) 
 		return NULL;




More information about the Bf-blender-cvs mailing list