diff options
author | Campbell Barton <ideasman42@gmail.com> | 2009-04-07 22:55:35 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2009-04-07 22:55:35 +0400 |
commit | ca1c3be3029a7a7aada686372ca1dd6ab39f0547 (patch) | |
tree | f19fc632907e34ff2e39560aad0faefd54c993d1 | |
parent | bdfa61fbbe582bd37690ee79cfface325654b61c (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.c | 23 | ||||
-rw-r--r-- | source/blender/python/api2_2x/BGL.h | 1 | ||||
-rw-r--r-- | source/blender/python/api2_2x/Blender.c | 2 | ||||
-rw-r--r-- | source/blender/python/api2_2x/modules.h | 2 | ||||
-rw-r--r-- | source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp | 2 | ||||
-rw-r--r-- | source/gameengine/GamePlayer/ghost/GPG_Application.cpp | 1 | ||||
-rw-r--r-- | source/gameengine/Ketsji/CMakeLists.txt | 1 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_PythonInit.cpp | 10 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_PythonInit.h | 1 | ||||
-rw-r--r-- | source/gameengine/Ketsji/SConscript | 5 |
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' |