forked from bartvdbraak/blender
Fix T44919: BGE marhutils attrs leak memory
This commit is contained in:
parent
b53836d2c9
commit
33a7b72678
@ -111,6 +111,8 @@ typedef struct PyObjectPlus_Proxy {
|
||||
|
||||
/* Opposite of BGE_PROXY_REF */
|
||||
#define BGE_PROXY_FROM_REF(_self) (((PyObjectPlus *)_self)->GetProxy())
|
||||
/* Same as 'BGE_PROXY_REF' but doesn't incref. */
|
||||
#define BGE_PROXY_FROM_REF_BORROW(_self) _bge_proxy_from_ref_borrow((void *)_self)
|
||||
|
||||
|
||||
// This must be the first line of each
|
||||
@ -631,6 +633,17 @@ public:
|
||||
|
||||
#ifdef WITH_PYTHON
|
||||
PyObject *PyUnicode_From_STR_String(const STR_String& str);
|
||||
|
||||
inline PyObject *_bge_proxy_from_ref_borrow(void *self_v)
|
||||
{
|
||||
PyObject *self_proxy = BGE_PROXY_FROM_REF(self_v);
|
||||
/* this is typically _very_ bad practice,
|
||||
* however we know the proxy is owned by 'self_v' */
|
||||
self_proxy->ob_refcnt--;
|
||||
return self_proxy;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* __PYOBJECTPLUS_H__ */
|
||||
|
@ -2530,7 +2530,9 @@ int KX_GameObject::pyattr_set_record_animation(void *self_v, const KX_PYATTRIBUT
|
||||
PyObject *KX_GameObject::pyattr_get_worldPosition(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
|
||||
{
|
||||
#ifdef USE_MATHUTILS
|
||||
return Vector_CreatePyObject_cb(BGE_PROXY_FROM_REF(self_v), 3, mathutils_kxgameob_vector_cb_index, MATHUTILS_VEC_CB_POS_GLOBAL);
|
||||
return Vector_CreatePyObject_cb(
|
||||
BGE_PROXY_FROM_REF_BORROW(self_v), 3,
|
||||
mathutils_kxgameob_vector_cb_index, MATHUTILS_VEC_CB_POS_GLOBAL);
|
||||
#else
|
||||
KX_GameObject* self = static_cast<KX_GameObject*>(self_v);
|
||||
return PyObjectFrom(self->NodeGetWorldPosition());
|
||||
@ -2552,7 +2554,9 @@ int KX_GameObject::pyattr_set_worldPosition(void *self_v, const KX_PYATTRIBUTE_D
|
||||
PyObject *KX_GameObject::pyattr_get_localPosition(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
|
||||
{
|
||||
#ifdef USE_MATHUTILS
|
||||
return Vector_CreatePyObject_cb(BGE_PROXY_FROM_REF(self_v), 3, mathutils_kxgameob_vector_cb_index, MATHUTILS_VEC_CB_POS_LOCAL);
|
||||
return Vector_CreatePyObject_cb(
|
||||
BGE_PROXY_FROM_REF_BORROW(self_v), 3,
|
||||
mathutils_kxgameob_vector_cb_index, MATHUTILS_VEC_CB_POS_LOCAL);
|
||||
#else
|
||||
KX_GameObject* self = static_cast<KX_GameObject*>(self_v);
|
||||
return PyObjectFrom(self->NodeGetLocalPosition());
|
||||
@ -2574,7 +2578,9 @@ int KX_GameObject::pyattr_set_localPosition(void *self_v, const KX_PYATTRIBUTE_D
|
||||
PyObject *KX_GameObject::pyattr_get_localInertia(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
|
||||
{
|
||||
#ifdef USE_MATHUTILS
|
||||
return Vector_CreatePyObject_cb(BGE_PROXY_FROM_REF(self_v), 3, mathutils_kxgameob_vector_cb_index, MATHUTILS_VEC_CB_INERTIA_LOCAL);
|
||||
return Vector_CreatePyObject_cb(
|
||||
BGE_PROXY_FROM_REF_BORROW(self_v), 3,
|
||||
mathutils_kxgameob_vector_cb_index, MATHUTILS_VEC_CB_INERTIA_LOCAL);
|
||||
#else
|
||||
KX_GameObject* self = static_cast<KX_GameObject*>(self_v);
|
||||
if (self->GetPhysicsController1())
|
||||
@ -2586,7 +2592,9 @@ PyObject *KX_GameObject::pyattr_get_localInertia(void *self_v, const KX_PYATTRIB
|
||||
PyObject *KX_GameObject::pyattr_get_worldOrientation(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
|
||||
{
|
||||
#ifdef USE_MATHUTILS
|
||||
return Matrix_CreatePyObject_cb(BGE_PROXY_FROM_REF(self_v), 3, 3, mathutils_kxgameob_matrix_cb_index, MATHUTILS_MAT_CB_ORI_GLOBAL);
|
||||
return Matrix_CreatePyObject_cb(
|
||||
BGE_PROXY_FROM_REF_BORROW(self_v), 3, 3,
|
||||
mathutils_kxgameob_matrix_cb_index, MATHUTILS_MAT_CB_ORI_GLOBAL);
|
||||
#else
|
||||
KX_GameObject* self = static_cast<KX_GameObject*>(self_v);
|
||||
return PyObjectFrom(self->NodeGetWorldOrientation());
|
||||
@ -2611,7 +2619,9 @@ int KX_GameObject::pyattr_set_worldOrientation(void *self_v, const KX_PYATTRIBUT
|
||||
PyObject *KX_GameObject::pyattr_get_localOrientation(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
|
||||
{
|
||||
#ifdef USE_MATHUTILS
|
||||
return Matrix_CreatePyObject_cb(BGE_PROXY_FROM_REF(self_v), 3, 3, mathutils_kxgameob_matrix_cb_index, MATHUTILS_MAT_CB_ORI_LOCAL);
|
||||
return Matrix_CreatePyObject_cb(
|
||||
BGE_PROXY_FROM_REF_BORROW(self_v), 3, 3,
|
||||
mathutils_kxgameob_matrix_cb_index, MATHUTILS_MAT_CB_ORI_LOCAL);
|
||||
#else
|
||||
KX_GameObject* self = static_cast<KX_GameObject*>(self_v);
|
||||
return PyObjectFrom(self->NodeGetLocalOrientation());
|
||||
@ -2635,7 +2645,9 @@ int KX_GameObject::pyattr_set_localOrientation(void *self_v, const KX_PYATTRIBUT
|
||||
PyObject *KX_GameObject::pyattr_get_worldScaling(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
|
||||
{
|
||||
#ifdef USE_MATHUTILS
|
||||
return Vector_CreatePyObject_cb(BGE_PROXY_FROM_REF(self_v), 3, mathutils_kxgameob_vector_cb_index, MATHUTILS_VEC_CB_SCALE_GLOBAL);
|
||||
return Vector_CreatePyObject_cb(
|
||||
BGE_PROXY_FROM_REF_BORROW(self_v), 3,
|
||||
mathutils_kxgameob_vector_cb_index, MATHUTILS_VEC_CB_SCALE_GLOBAL);
|
||||
#else
|
||||
KX_GameObject* self = static_cast<KX_GameObject*>(self_v);
|
||||
return PyObjectFrom(self->NodeGetWorldScaling());
|
||||
@ -2657,7 +2669,9 @@ int KX_GameObject::pyattr_set_worldScaling(void *self_v, const KX_PYATTRIBUTE_DE
|
||||
PyObject *KX_GameObject::pyattr_get_localScaling(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
|
||||
{
|
||||
#ifdef USE_MATHUTILS
|
||||
return Vector_CreatePyObject_cb(BGE_PROXY_FROM_REF(self_v), 3, mathutils_kxgameob_vector_cb_index, MATHUTILS_VEC_CB_SCALE_LOCAL);
|
||||
return Vector_CreatePyObject_cb(
|
||||
BGE_PROXY_FROM_REF_BORROW(self_v), 3,
|
||||
mathutils_kxgameob_vector_cb_index, MATHUTILS_VEC_CB_SCALE_LOCAL);
|
||||
#else
|
||||
KX_GameObject* self = static_cast<KX_GameObject*>(self_v);
|
||||
return PyObjectFrom(self->NodeGetLocalScaling());
|
||||
@ -2759,7 +2773,9 @@ int KX_GameObject::pyattr_set_worldTransform(void *self_v, const KX_PYATTRIBUTE_
|
||||
PyObject *KX_GameObject::pyattr_get_worldLinearVelocity(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
|
||||
{
|
||||
#ifdef USE_MATHUTILS
|
||||
return Vector_CreatePyObject_cb(BGE_PROXY_FROM_REF(self_v), 3, mathutils_kxgameob_vector_cb_index, MATHUTILS_VEC_CB_LINVEL_GLOBAL);
|
||||
return Vector_CreatePyObject_cb(
|
||||
BGE_PROXY_FROM_REF_BORROW(self_v), 3,
|
||||
mathutils_kxgameob_vector_cb_index, MATHUTILS_VEC_CB_LINVEL_GLOBAL);
|
||||
#else
|
||||
KX_GameObject* self = static_cast<KX_GameObject*>(self_v);
|
||||
return PyObjectFrom(GetLinearVelocity(false));
|
||||
@ -2781,7 +2797,9 @@ int KX_GameObject::pyattr_set_worldLinearVelocity(void *self_v, const KX_PYATTRI
|
||||
PyObject *KX_GameObject::pyattr_get_localLinearVelocity(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
|
||||
{
|
||||
#ifdef USE_MATHUTILS
|
||||
return Vector_CreatePyObject_cb(BGE_PROXY_FROM_REF(self_v), 3, mathutils_kxgameob_vector_cb_index, MATHUTILS_VEC_CB_LINVEL_LOCAL);
|
||||
return Vector_CreatePyObject_cb(
|
||||
BGE_PROXY_FROM_REF_BORROW(self_v), 3,
|
||||
mathutils_kxgameob_vector_cb_index, MATHUTILS_VEC_CB_LINVEL_LOCAL);
|
||||
#else
|
||||
KX_GameObject* self = static_cast<KX_GameObject*>(self_v);
|
||||
return PyObjectFrom(GetLinearVelocity(true));
|
||||
@ -2803,7 +2821,9 @@ int KX_GameObject::pyattr_set_localLinearVelocity(void *self_v, const KX_PYATTRI
|
||||
PyObject *KX_GameObject::pyattr_get_worldAngularVelocity(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
|
||||
{
|
||||
#ifdef USE_MATHUTILS
|
||||
return Vector_CreatePyObject_cb(BGE_PROXY_FROM_REF(self_v), 3, mathutils_kxgameob_vector_cb_index, MATHUTILS_VEC_CB_ANGVEL_GLOBAL);
|
||||
return Vector_CreatePyObject_cb(
|
||||
BGE_PROXY_FROM_REF_BORROW(self_v), 3,
|
||||
mathutils_kxgameob_vector_cb_index, MATHUTILS_VEC_CB_ANGVEL_GLOBAL);
|
||||
#else
|
||||
KX_GameObject* self = static_cast<KX_GameObject*>(self_v);
|
||||
return PyObjectFrom(GetAngularVelocity(false));
|
||||
@ -2825,7 +2845,9 @@ int KX_GameObject::pyattr_set_worldAngularVelocity(void *self_v, const KX_PYATTR
|
||||
PyObject *KX_GameObject::pyattr_get_localAngularVelocity(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
|
||||
{
|
||||
#ifdef USE_MATHUTILS
|
||||
return Vector_CreatePyObject_cb(BGE_PROXY_FROM_REF(self_v), 3, mathutils_kxgameob_vector_cb_index, MATHUTILS_VEC_CB_ANGVEL_LOCAL);
|
||||
return Vector_CreatePyObject_cb(
|
||||
BGE_PROXY_FROM_REF_BORROW(self_v), 3,
|
||||
mathutils_kxgameob_vector_cb_index, MATHUTILS_VEC_CB_ANGVEL_LOCAL);
|
||||
#else
|
||||
KX_GameObject* self = static_cast<KX_GameObject*>(self_v);
|
||||
return PyObjectFrom(GetAngularVelocity(true));
|
||||
@ -2946,7 +2968,9 @@ PyObject *KX_GameObject::pyattr_get_meshes(void *self_v, const KX_PYATTRIBUTE_DE
|
||||
PyObject *KX_GameObject::pyattr_get_obcolor(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
|
||||
{
|
||||
#ifdef USE_MATHUTILS
|
||||
return Vector_CreatePyObject_cb(BGE_PROXY_FROM_REF(self_v), 4, mathutils_kxgameob_vector_cb_index, MATHUTILS_VEC_CB_OBJECT_COLOR);
|
||||
return Vector_CreatePyObject_cb(
|
||||
BGE_PROXY_FROM_REF_BORROW(self_v), 4,
|
||||
mathutils_kxgameob_vector_cb_index, MATHUTILS_VEC_CB_OBJECT_COLOR);
|
||||
#else
|
||||
KX_GameObject* self = static_cast<KX_GameObject*>(self_v);
|
||||
return PyObjectFrom(self->GetObjectColor());
|
||||
|
@ -522,7 +522,9 @@ static Mathutils_Callback mathutils_obactu_vector_cb = {
|
||||
|
||||
PyObject *KX_ObjectActuator::pyattr_get_linV(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
|
||||
{
|
||||
return Vector_CreatePyObject_cb(BGE_PROXY_FROM_REF(self_v), 3, mathutils_kxobactu_vector_cb_index, MATHUTILS_VEC_CB_LINV);
|
||||
return Vector_CreatePyObject_cb(
|
||||
BGE_PROXY_FROM_REF_BORROW(self_v), 3,
|
||||
mathutils_kxobactu_vector_cb_index, MATHUTILS_VEC_CB_LINV);
|
||||
}
|
||||
|
||||
int KX_ObjectActuator::pyattr_set_linV(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
|
||||
@ -538,7 +540,9 @@ int KX_ObjectActuator::pyattr_set_linV(void *self_v, const KX_PYATTRIBUTE_DEF *a
|
||||
|
||||
PyObject *KX_ObjectActuator::pyattr_get_angV(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
|
||||
{
|
||||
return Vector_CreatePyObject_cb(BGE_PROXY_FROM_REF(self_v), 3, mathutils_kxobactu_vector_cb_index, MATHUTILS_VEC_CB_ANGV);
|
||||
return Vector_CreatePyObject_cb(
|
||||
BGE_PROXY_FROM_REF_BORROW(self_v), 3,
|
||||
mathutils_kxobactu_vector_cb_index, MATHUTILS_VEC_CB_ANGV);
|
||||
}
|
||||
|
||||
int KX_ObjectActuator::pyattr_set_angV(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
|
||||
|
@ -418,7 +418,9 @@ PyObject *KX_WorldInfo::pyattr_get_mist_typeconst(void *self_v, const KX_PYATTRI
|
||||
PyObject *KX_WorldInfo::pyattr_get_mist_color(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
|
||||
{
|
||||
#ifdef USE_MATHUTILS
|
||||
return Vector_CreatePyObject_cb(BGE_PROXY_FROM_REF(self_v), 3, mathutils_world_vector_cb_index, MATHUTILS_VEC_CB_MIST_COLOR);
|
||||
return Vector_CreatePyObject_cb(
|
||||
BGE_PROXY_FROM_REF_BORROW(self_v), 3,
|
||||
mathutils_world_vector_cb_index, MATHUTILS_VEC_CB_MIST_COLOR);
|
||||
#else
|
||||
KX_WorldInfo *self = static_cast<KX_WorldInfo*>(self_v);
|
||||
return PyObjectFrom(MT_Vector3(self->m_mistcolor));
|
||||
@ -442,7 +444,9 @@ PyObject *KX_WorldInfo::pyattr_get_back_color(void *self_v, const KX_PYATTRIBUTE
|
||||
{
|
||||
|
||||
#ifdef USE_MATHUTILS
|
||||
return Vector_CreatePyObject_cb(BGE_PROXY_FROM_REF(self_v), 3, mathutils_world_vector_cb_index, MATHUTILS_VEC_CB_BACK_COLOR);
|
||||
return Vector_CreatePyObject_cb(
|
||||
BGE_PROXY_FROM_REF_BORROW(self_v), 3,
|
||||
mathutils_world_vector_cb_index, MATHUTILS_VEC_CB_BACK_COLOR);
|
||||
#else
|
||||
KX_WorldInfo *self = static_cast<KX_WorldInfo*>(self_v);
|
||||
return PyObjectFrom(MT_Vector3(self->m_backgroundcolor));
|
||||
@ -465,7 +469,9 @@ int KX_WorldInfo::pyattr_set_back_color(void *self_v, const KX_PYATTRIBUTE_DEF *
|
||||
PyObject *KX_WorldInfo::pyattr_get_ambient_color(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
|
||||
{
|
||||
#ifdef USE_MATHUTILS
|
||||
return Vector_CreatePyObject_cb(BGE_PROXY_FROM_REF(self_v), 3, mathutils_world_vector_cb_index, MATHUTILS_VEC_CB_AMBIENT_COLOR);
|
||||
return Vector_CreatePyObject_cb(
|
||||
BGE_PROXY_FROM_REF_BORROW(self_v), 3,
|
||||
mathutils_world_vector_cb_index, MATHUTILS_VEC_CB_AMBIENT_COLOR);
|
||||
#else
|
||||
KX_WorldInfo *self = static_cast<KX_WorldInfo*>(self_v);
|
||||
return PyObjectFrom(MT_Vector3(self->m_ambientcolor));
|
||||
|
Loading…
Reference in New Issue
Block a user