Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2009-04-07 22:55:35 +0400
committerCampbell Barton <ideasman42@gmail.com>2009-04-07 22:55:35 +0400
commitca1c3be3029a7a7aada686372ca1dd6ab39f0547 (patch)
treef19fc632907e34ff2e39560aad0faefd54c993d1
parentbdfa61fbbe582bd37690ee79cfface325654b61c (diff)
BGE Py API
- Added OpenGL access to the game engine as a module so you can import BGL directly.
-rw-r--r--source/blender/python/api2_2x/BGL.c23
-rw-r--r--source/blender/python/api2_2x/BGL.h1
-rw-r--r--source/blender/python/api2_2x/Blender.c2
-rw-r--r--source/blender/python/api2_2x/modules.h2
-rw-r--r--source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp2
-rw-r--r--source/gameengine/GamePlayer/ghost/GPG_Application.cpp1
-rw-r--r--source/gameengine/Ketsji/CMakeLists.txt1
-rw-r--r--source/gameengine/Ketsji/KX_PythonInit.cpp10
-rw-r--r--source/gameengine/Ketsji/KX_PythonInit.h1
-rw-r--r--source/gameengine/Ketsji/SConscript5
10 files changed, 32 insertions, 16 deletions
diff --git a/source/blender/python/api2_2x/BGL.c b/source/blender/python/api2_2x/BGL.c
index 2503a66250b..e5868a82c2c 100644
--- a/source/blender/python/api2_2x/BGL.c
+++ b/source/blender/python/api2_2x/BGL.c
@@ -35,7 +35,6 @@
#include "BGL.h" /*This must come first */
#include "MEM_guardedalloc.h"
-#include "gen_utils.h"
static int type_size( int type );
static Buffer *make_buffer( int type, int ndimensions, int *dimensions );
@@ -121,8 +120,6 @@ static PyObject *Method_##funcname (PyObject *self, PyObject *args) {\
/* #endif */
-PyObject *BGL_Init( void );
-
/********/
static int type_size(int type)
{
@@ -185,12 +182,12 @@ static PyObject *Method_Buffer (PyObject *self, PyObject *args)
int i, type;
int *dimensions = 0, ndimensions = 0;
- if (!PyArg_ParseTuple(args, "iO|O", &type, &length_ob, &template))
- return EXPP_ReturnPyObjError(PyExc_AttributeError,
- "expected an int and one or two PyObjects");
-
+ if (!PyArg_ParseTuple(args, "iO|O", &type, &length_ob, &template)) {
+ PyErr_SetString(PyExc_AttributeError, "expected an int and one or two PyObjects");
+ return NULL;
+ }
if (type!=GL_BYTE && type!=GL_SHORT && type!=GL_INT && type!=GL_FLOAT && type!=GL_DOUBLE) {
- PyErr_SetString(PyExc_AttributeError, "type");
+ PyErr_SetString(PyExc_AttributeError, "invalid first argument type, should be one of GL_BYTE, GL_SHORT, GL_INT, GL_FLOAT or GL_DOUBLE");
return NULL;
}
@@ -1088,19 +1085,19 @@ static struct PyMethodDef BGL_methods[] = {
{NULL, NULL, 0, NULL}
};
-PyObject *BGL_Init(void)
+PyObject *BGL_Init(const char *from)
{
- PyObject *mod= Py_InitModule("Blender.BGL", BGL_methods);
+ PyObject *mod= Py_InitModule(from, BGL_methods);
PyObject *dict= PyModule_GetDict(mod);
-
+ PyObject *item;
if( PyType_Ready( &buffer_Type) < 0)
Py_RETURN_NONE;
-#define EXPP_ADDCONST(x) EXPP_dict_set_item_str(dict, #x, PyInt_FromLong((int)x))
+#define EXPP_ADDCONST(x) PyDict_SetItemString(dict, #x, item=PyInt_FromLong((int)x)); Py_DECREF(item)
/* So, for example:
* EXPP_ADDCONST(GL_CURRENT_BIT) becomes
- * EXPP_dict_set_item_str(dict, "GL_CURRENT_BIT", PyInt_FromLong(GL_CURRENT_BIT)) */
+ * PyDict_SetItemString(dict, "GL_CURRENT_BIT", item=PyInt_FromLong(GL_CURRENT_BIT)); Py_DECREF(item) */
EXPP_ADDCONST(GL_CURRENT_BIT);
EXPP_ADDCONST(GL_POINT_BIT);
diff --git a/source/blender/python/api2_2x/BGL.h b/source/blender/python/api2_2x/BGL.h
index 461f5bc9372..89e56811b29 100644
--- a/source/blender/python/api2_2x/BGL.h
+++ b/source/blender/python/api2_2x/BGL.h
@@ -43,6 +43,7 @@
#include <Python.h>
#include "BIF_gl.h"
+PyObject *BGL_Init( const char *from );
/*@ Buffer Object */
/*@ For Python access to OpenGL functions requiring a pointer. */
diff --git a/source/blender/python/api2_2x/Blender.c b/source/blender/python/api2_2x/Blender.c
index d09506f731b..2e44f0635e5 100644
--- a/source/blender/python/api2_2x/Blender.c
+++ b/source/blender/python/api2_2x/Blender.c
@@ -1074,7 +1074,7 @@ void M_Blender_Init(void)
PyDict_SetItemString(dict, "Armature", Armature_Init());
PyDict_SetItemString(dict, "BezTriple", BezTriple_Init());
- PyDict_SetItemString(dict, "BGL", BGL_Init());
+ PyDict_SetItemString(dict, "BGL", BGL_Init("Blender.BGL"));
PyDict_SetItemString(dict, "CurNurb", CurNurb_Init());
PyDict_SetItemString(dict, "Constraint", Constraint_Init());
PyDict_SetItemString(dict, "Curve", Curve_Init());
diff --git a/source/blender/python/api2_2x/modules.h b/source/blender/python/api2_2x/modules.h
index 8700188b2e9..0273e357d98 100644
--- a/source/blender/python/api2_2x/modules.h
+++ b/source/blender/python/api2_2x/modules.h
@@ -52,7 +52,7 @@ BGL is a special case. It still has data declarations in the .h file
and cannot be #included until it is cleaned up.
****************************************************************************/
-PyObject *BGL_Init( void );
+PyObject *BGL_Init( const char *from );
PyObject *Library_Init( void );
PyObject *Noise_Init( void );
diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
index 9228798890a..1c91ad784ac 100644
--- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
+++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
@@ -368,6 +368,7 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
initGameKeys();
initPythonConstraintBinding();
initMathutils();
+ initBGL();
#ifdef WITH_FFMPEG
initVideoTexture();
#endif
@@ -666,6 +667,7 @@ extern "C" void StartKetsjiShellSimulation(struct ScrArea *area,
initGameKeys();
initPythonConstraintBinding();
initMathutils();
+ initBGL();
#ifdef WITH_FFMPEG
initVideoTexture();
#endif
diff --git a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
index 6d846610109..3432d498981 100644
--- a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
+++ b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
@@ -689,6 +689,7 @@ bool GPG_Application::startEngine(void)
initGameKeys();
initPythonConstraintBinding();
initMathutils();
+ initBGL();
#ifdef WITH_FFMPEG
initVideoTexture();
#endif
diff --git a/source/gameengine/Ketsji/CMakeLists.txt b/source/gameengine/Ketsji/CMakeLists.txt
index 3bd05ca5137..d45d5345678 100644
--- a/source/gameengine/Ketsji/CMakeLists.txt
+++ b/source/gameengine/Ketsji/CMakeLists.txt
@@ -36,6 +36,7 @@ SET(SRC
../../../source/blender/python/api2_2x/quat.c
../../../source/blender/python/api2_2x/vector.c
../../../source/blender/python/api2_2x/bpy_internal_import.c
+ ../../../source/blender/python/api2_2x/BGL.c
)
SET(INC
diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp
index 9a6565d7627..15397085b4a 100644
--- a/source/gameengine/Ketsji/KX_PythonInit.cpp
+++ b/source/gameengine/Ketsji/KX_PythonInit.cpp
@@ -78,6 +78,7 @@
extern "C" {
#include "Mathutils.h" // Blender.Mathutils module copied here so the blenderlayer can use.
#include "bpy_internal_import.h" /* from the blender python api, but we want to import text too! */
+ #include "BGL.h"
}
#include "marshal.h" /* python header for loading/saving dicts */
@@ -1168,7 +1169,7 @@ PyObject *KXpy_import(PyObject *self, PyObject *args)
/* quick hack for GamePython modules
TODO: register builtin modules properly by ExtendInittab */
if (!strcmp(name, "GameLogic") || !strcmp(name, "GameKeys") || !strcmp(name, "PhysicsConstraints") ||
- !strcmp(name, "Rasterizer") || !strcmp(name, "Mathutils")) {
+ !strcmp(name, "Rasterizer") || !strcmp(name, "Mathutils") || !strcmp(name, "BGL")) {
return PyImport_ImportModuleEx(name, globals, locals, fromlist);
}
@@ -1357,6 +1358,8 @@ static void clearGameModules()
clearModule(modules, "Rasterizer");
clearModule(modules, "GameKeys");
clearModule(modules, "VideoTexture");
+ clearModule(modules, "Mathutils");
+ clearModule(modules, "BGL");
PyErr_Clear(); // incase some of these were alredy removed.
}
@@ -1596,6 +1599,11 @@ PyObject* initMathutils()
return Mathutils_Init("Mathutils"); // Use as a top level module in BGE
}
+PyObject* initBGL()
+{
+ return BGL_Init("BGL"); // Use as a top level module in BGE
+}
+
void KX_SetActiveScene(class KX_Scene* scene)
{
gp_KetsjiScene = scene;
diff --git a/source/gameengine/Ketsji/KX_PythonInit.h b/source/gameengine/Ketsji/KX_PythonInit.h
index b709cee2f37..97d23fe391c 100644
--- a/source/gameengine/Ketsji/KX_PythonInit.h
+++ b/source/gameengine/Ketsji/KX_PythonInit.h
@@ -45,6 +45,7 @@ PyObject* initGameKeys();
PyObject* initRasterizer(class RAS_IRasterizer* rasty,class RAS_ICanvas* canvas);
PyObject* initGamePlayerPythonScripting(const STR_String& progname, TPythonSecurityLevel level, struct Main *maggie);
PyObject* initMathutils();
+PyObject* initBGL();
PyObject* initVideoTexture(void);
void exitGamePlayerPythonScripting();
PyObject* initGamePythonScripting(const STR_String& progname, TPythonSecurityLevel level, struct Main *maggie);
diff --git a/source/gameengine/Ketsji/SConscript b/source/gameengine/Ketsji/SConscript
index 68e5c62ab6c..61e722fb957 100644
--- a/source/gameengine/Ketsji/SConscript
+++ b/source/gameengine/Ketsji/SConscript
@@ -22,6 +22,11 @@ sources.extend([\
'#source/blender/python/api2_2x/bpy_internal_import.c'
])
+
+sources.extend([\
+ '#source/blender/python/api2_2x/BGL.c'
+])
+
incs = '. #source/blender/python/api2_2x' # Only for Mathutils! and bpy_internal_import.h, be very careful
incs += ' #source/kernel/gen_system #intern/string #intern/guardedalloc'