forked from bartvdbraak/blender
BGE Py API
- Added OpenGL access to the game engine as a module so you can import BGL directly.
This commit is contained in:
parent
bdfa61fbbe
commit
ca1c3be302
@ -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);
|
||||
|
@ -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. */
|
||||
|
@ -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());
|
||||
|
@ -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 );
|
||||
|
@ -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
|
||||
|
@ -689,6 +689,7 @@ bool GPG_Application::startEngine(void)
|
||||
initGameKeys();
|
||||
initPythonConstraintBinding();
|
||||
initMathutils();
|
||||
initBGL();
|
||||
#ifdef WITH_FFMPEG
|
||||
initVideoTexture();
|
||||
#endif
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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'
|
||||
|
Loading…
Reference in New Issue
Block a user