diff options
Diffstat (limited to 'source/gameengine/Ketsji/KX_PolygonMaterial.cpp')
-rw-r--r-- | source/gameengine/Ketsji/KX_PolygonMaterial.cpp | 55 |
1 files changed, 35 insertions, 20 deletions
diff --git a/source/gameengine/Ketsji/KX_PolygonMaterial.cpp b/source/gameengine/Ketsji/KX_PolygonMaterial.cpp index 63204b16e8b..dfaf079f36f 100644 --- a/source/gameengine/Ketsji/KX_PolygonMaterial.cpp +++ b/source/gameengine/Ketsji/KX_PolygonMaterial.cpp @@ -1,4 +1,4 @@ -/** +/* * $Id$ * ***** BEGIN GPL LICENSE BLOCK ***** * @@ -25,6 +25,14 @@ * * ***** END GPL LICENSE BLOCK ***** */ + +/** \file gameengine/Ketsji/KX_PolygonMaterial.cpp + * \ingroup ketsji + */ + + +#include <stddef.h> + #include "KX_PolygonMaterial.h" #include "BKE_mesh.h" @@ -47,6 +55,8 @@ #include "KX_PyMath.h" +#define KX_POLYGONMATERIAL_CAPSULE_ID "KX_POLYGONMATERIAL_PTR" + KX_PolygonMaterial::KX_PolygonMaterial() : PyObjectPlus(), RAS_IPolyMaterial(), @@ -54,7 +64,7 @@ KX_PolygonMaterial::KX_PolygonMaterial() m_tface(NULL), m_mcol(NULL), m_material(NULL), -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON m_pymaterial(NULL), #endif m_pass(0) @@ -90,7 +100,7 @@ void KX_PolygonMaterial::Initialize( m_tface = tface; m_mcol = mcol; m_material = ma; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON m_pymaterial = 0; #endif m_pass = 0; @@ -98,23 +108,28 @@ void KX_PolygonMaterial::Initialize( KX_PolygonMaterial::~KX_PolygonMaterial() { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if (m_pymaterial) { Py_DECREF(m_pymaterial); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON +} + +Image *KX_PolygonMaterial::GetBlenderImage() const +{ + return (m_tface) ? m_tface->tpage : NULL; } bool KX_PolygonMaterial::Activate(RAS_IRasterizer* rasty, TCachingInfo& cachingInfo) const { bool dopass = false; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if (m_pymaterial) { - PyObject *pyRasty = PyCObject_FromVoidPtr((void*)rasty, NULL); /* new reference */ - PyObject *pyCachingInfo = PyCObject_FromVoidPtr((void*) &cachingInfo, NULL); /* new reference */ + PyObject *pyRasty = PyCapsule_New((void*)rasty, KX_POLYGONMATERIAL_CAPSULE_ID, NULL); /* new reference */ + PyObject *pyCachingInfo = PyCapsule_New((void*) &cachingInfo, KX_POLYGONMATERIAL_CAPSULE_ID, NULL); /* new reference */ PyObject *ret = PyObject_CallMethod(m_pymaterial, (char *)"activate", (char *)"(NNO)", pyRasty, pyCachingInfo, (PyObject*) this->m_proxy); if (ret) { @@ -130,7 +145,7 @@ bool KX_PolygonMaterial::Activate(RAS_IRasterizer* rasty, TCachingInfo& cachingI } } else -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON { switch (m_pass++) { @@ -201,7 +216,7 @@ void KX_PolygonMaterial::GetMaterialRGBAColor(unsigned char *rgba) const RAS_IPolyMaterial::GetMaterialRGBAColor(rgba); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON //---------------------------------------------------------------------------- //Python @@ -284,10 +299,10 @@ KX_PYMETHODDEF_DOC(KX_PolygonMaterial, setCustomMaterial, "setCustomMaterial(mat KX_PYMETHODDEF_DOC(KX_PolygonMaterial, updateTexture, "updateTexture(tface, rasty)") { PyObject *pyrasty, *pytface; - if (PyArg_ParseTuple(args, "O!O!:updateTexture", &PyCObject_Type, &pytface, &PyCObject_Type, &pyrasty)) + if (PyArg_ParseTuple(args, "O!O!:updateTexture", &PyCapsule_Type, &pytface, &PyCapsule_Type, &pyrasty)) { - MTFace *tface = (MTFace*) PyCObject_AsVoidPtr(pytface); - RAS_IRasterizer *rasty = (RAS_IRasterizer*) PyCObject_AsVoidPtr(pyrasty); + MTFace *tface = (MTFace*) PyCapsule_GetPointer(pytface, KX_POLYGONMATERIAL_CAPSULE_ID); + RAS_IRasterizer *rasty = (RAS_IRasterizer*) PyCapsule_GetPointer(pyrasty, KX_POLYGONMATERIAL_CAPSULE_ID); Image *ima = (Image*)tface->tpage; GPU_update_image_time(ima, rasty->GetTime()); @@ -300,9 +315,9 @@ KX_PYMETHODDEF_DOC(KX_PolygonMaterial, updateTexture, "updateTexture(tface, rast KX_PYMETHODDEF_DOC(KX_PolygonMaterial, setTexture, "setTexture(tface)") { PyObject *pytface; - if (PyArg_ParseTuple(args, "O!:setTexture", &PyCObject_Type, &pytface)) + if (PyArg_ParseTuple(args, "O!:setTexture", &PyCapsule_Type, &pytface)) { - MTFace *tface = (MTFace*) PyCObject_AsVoidPtr(pytface); + MTFace *tface = (MTFace*) PyCapsule_GetPointer(pytface, KX_POLYGONMATERIAL_CAPSULE_ID); GPU_set_tpage(tface, 1); Py_RETURN_NONE; } @@ -313,10 +328,10 @@ KX_PYMETHODDEF_DOC(KX_PolygonMaterial, setTexture, "setTexture(tface)") KX_PYMETHODDEF_DOC(KX_PolygonMaterial, activate, "activate(rasty, cachingInfo)") { PyObject *pyrasty, *pyCachingInfo; - if (PyArg_ParseTuple(args, "O!O!:activate", &PyCObject_Type, &pyrasty, &PyCObject_Type, &pyCachingInfo)) + if (PyArg_ParseTuple(args, "O!O!:activate", &PyCapsule_Type, &pyrasty, &PyCapsule_Type, &pyCachingInfo)) { - RAS_IRasterizer *rasty = static_cast<RAS_IRasterizer*>(PyCObject_AsVoidPtr(pyrasty)); - TCachingInfo *cachingInfo = static_cast<TCachingInfo*>(PyCObject_AsVoidPtr(pyCachingInfo)); + RAS_IRasterizer *rasty = static_cast<RAS_IRasterizer*>(PyCapsule_GetPointer(pyrasty, KX_POLYGONMATERIAL_CAPSULE_ID)); + TCachingInfo *cachingInfo = static_cast<TCachingInfo*>(PyCapsule_GetPointer(pyCachingInfo, KX_POLYGONMATERIAL_CAPSULE_ID)); if (rasty && cachingInfo) { DefaultActivate(rasty, *cachingInfo); @@ -343,7 +358,7 @@ PyObject* KX_PolygonMaterial::pyattr_get_material(void *self_v, const KX_PYATTRI PyObject* KX_PolygonMaterial::pyattr_get_tface(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) { KX_PolygonMaterial* self= static_cast<KX_PolygonMaterial*>(self_v); - return PyCObject_FromVoidPtr(self->m_tface, NULL); + return PyCapsule_New(self->m_tface, KX_POLYGONMATERIAL_CAPSULE_ID, NULL); } PyObject* KX_PolygonMaterial::pyattr_get_gl_texture(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) @@ -393,4 +408,4 @@ int KX_PolygonMaterial::pyattr_set_specular(void *self_v, const KX_PYATTRIBUTE_D return PY_SET_ATTR_SUCCESS; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON |