forked from bartvdbraak/blender
svn merge -r39878:39890 https://svn.blender.org/svnroot/bf-blender/trunk/blender
This commit is contained in:
commit
58227c1016
@ -88,7 +88,7 @@ typedef unsigned long uintptr_t;
|
||||
#define _UINTPTR_T_DEFINED
|
||||
#endif
|
||||
|
||||
#elif defined(__linux__) || defined(__NetBSD__)
|
||||
#elif defined(__linux__) || defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
|
||||
/* Linux-i386, Linux-Alpha, Linux-ppc */
|
||||
#include <stdint.h>
|
||||
|
@ -89,7 +89,7 @@ typedef unsigned long uintptr_t;
|
||||
#define _UINTPTR_T_DEFINED
|
||||
#endif
|
||||
|
||||
#elif defined(__linux__) || defined(__NetBSD__)
|
||||
#elif defined(__linux__) || defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
|
||||
/* Linux-i386, Linux-Alpha, Linux-ppc */
|
||||
#include <stdint.h>
|
||||
|
@ -1023,46 +1023,70 @@ static void layerInterp_shapekey(void **sources, float *weights,
|
||||
}
|
||||
}
|
||||
|
||||
/* note, these numbered comments below are copied from trunk,
|
||||
* while _most_ match, some at the end need adding and are out of sync */
|
||||
|
||||
static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = {
|
||||
/* 0: CD_MVERT */
|
||||
{sizeof(MVert), "MVert", 1, NULL, NULL, NULL, NULL, NULL, NULL},
|
||||
/* 1: CD_MSTICKY */
|
||||
{sizeof(MSticky), "MSticky", 1, NULL, NULL, NULL, layerInterp_msticky, NULL,
|
||||
NULL},
|
||||
/* 2: CD_MDEFORMVERT */
|
||||
{sizeof(MDeformVert), "MDeformVert", 1, NULL, layerCopy_mdeformvert,
|
||||
layerFree_mdeformvert, layerInterp_mdeformvert, NULL, NULL},
|
||||
/* 3: CD_MEDGE */
|
||||
{sizeof(MEdge), "MEdge", 1, NULL, NULL, NULL, NULL, NULL, NULL},
|
||||
/* 4: CD_MFACE */
|
||||
{sizeof(MFace), "MFace", 1, NULL, NULL, NULL, NULL, NULL, NULL},
|
||||
/* 5: CD_MTFACE */
|
||||
{sizeof(MTFace), "MTFace", 1, "UVTex", layerCopy_tface, NULL,
|
||||
layerInterp_tface, layerSwap_tface, layerDefault_tface},
|
||||
/* 6: CD_MCOL */
|
||||
/* 4 MCol structs per face */
|
||||
{sizeof(MCol)*4, "MCol", 4, "Col", NULL, NULL, layerInterp_mcol,
|
||||
layerSwap_mcol, layerDefault_mcol},
|
||||
/* 7: CD_ORIGINDEX */
|
||||
{sizeof(int), "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
|
||||
/* 8: CD_NORMAL */
|
||||
/* 3 floats per normal vector */
|
||||
{sizeof(float)*3, "vec3f", 1, NULL, NULL, NULL, NULL, NULL, NULL},
|
||||
/* 9: CD_FLAGS */
|
||||
{sizeof(int), "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
|
||||
/* 10: CD_PROP_FLT */
|
||||
{sizeof(MFloatProperty), "MFloatProperty",1,"Float", layerCopy_propFloat,NULL,NULL,NULL},
|
||||
/* 11: CD_PROP_INT */
|
||||
{sizeof(MIntProperty), "MIntProperty",1,"Int",layerCopy_propInt,NULL,NULL,NULL},
|
||||
/* 12: CD_PROP_STR */
|
||||
{sizeof(MStringProperty), "MStringProperty",1,"String",layerCopy_propString,NULL,NULL,NULL},
|
||||
/* 13: CD_ORIGSPACE */
|
||||
{sizeof(OrigSpaceFace), "OrigSpaceFace", 1, "UVTex", layerCopy_origspace_face, NULL,
|
||||
layerInterp_origspace_face, layerSwap_origspace_face, layerDefault_origspace_face},
|
||||
/* 14: CD_ORCO */
|
||||
{sizeof(float)*3, "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
|
||||
/* 15: CD_MTEXPOLY */
|
||||
{sizeof(MTexPoly), "MTexPoly", 1, "Face Texture", NULL, NULL, NULL, NULL, NULL},
|
||||
/* 16: CD_MLOOPUV */
|
||||
{sizeof(MLoopUV), "MLoopUV", 1, "UV coord", NULL, NULL, layerInterp_mloopuv, NULL, NULL,
|
||||
layerEqual_mloopuv, layerMultiply_mloopuv, layerInitMinMax_mloopuv,
|
||||
layerAdd_mloopuv, layerDoMinMax_mloopuv, layerCopyValue_mloopuv},
|
||||
/* 17: CD_MLOOPCOL */
|
||||
{sizeof(MLoopCol), "MLoopCol", 1, "Col", NULL, NULL, layerInterp_mloopcol, NULL,
|
||||
layerDefault_mloopcol, layerEqual_mloopcol, layerMultiply_mloopcol, layerInitMinMax_mloopcol,
|
||||
layerAdd_mloopcol, layerDoMinMax_mloopcol, layerCopyValue_mloopcol},
|
||||
{sizeof(float)*4*4, "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
|
||||
/* 19: CD_MDISPS */
|
||||
{sizeof(MDisps), "MDisps", 1, NULL, layerCopy_mdisps,
|
||||
layerFree_mdisps, layerInterp_mdisps, layerSwap_mdisps, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
layerRead_mdisps, layerWrite_mdisps, layerFilesize_mdisps, layerValidate_mdisps},
|
||||
/* 20: CD_WEIGHT_MCOL */
|
||||
{sizeof(MCol)*4, "MCol", 4, "WeightCol", NULL, NULL, layerInterp_mcol,
|
||||
layerSwap_mcol, layerDefault_mcol},
|
||||
{sizeof(MPoly), "MPoly", 1, "NGon Face", NULL, NULL, NULL, NULL, NULL},
|
||||
{sizeof(MLoop), "MLoop", 1, "NGon Face-Vertex", NULL, NULL, NULL, NULL, NULL},
|
||||
{sizeof(float)*3, "", 0, "ClothOrco", NULL, NULL, layerInterp_shapekey},
|
||||
/* 21: CD_ID_MCOL */
|
||||
{sizeof(MCol)*4, "MCol", 4, "IDCol", NULL, NULL, layerInterp_mcol,
|
||||
layerSwap_mcol, layerDefault_mcol},
|
||||
{sizeof(MCol)*4, "MCol", 4, "TextureCol", NULL, NULL, layerInterp_mcol,
|
||||
|
@ -83,7 +83,7 @@ typedef unsigned long uintptr_t;
|
||||
#define _UINTPTR_T_DEFINED
|
||||
#endif
|
||||
|
||||
#elif defined(__linux__) || defined(__NetBSD__)
|
||||
#elif defined(__linux__) || defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
|
||||
/* Linux-i386, Linux-Alpha, Linux-ppc */
|
||||
#include <stdint.h>
|
||||
|
@ -771,6 +771,10 @@ void ui_draw_but_HISTOGRAM(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol)
|
||||
uiSetRoundBox(15);
|
||||
uiDrawBox(GL_POLYGON, rect.xmin-1, rect.ymin-1, rect.xmax+1, rect.ymax+1, 3.0f);
|
||||
|
||||
/* need scissor test, histogram can draw outside of boundary */
|
||||
glGetIntegerv(GL_VIEWPORT, scissor);
|
||||
glScissor(ar->winrct.xmin + (rect.xmin-1), ar->winrct.ymin+(rect.ymin-1), (rect.xmax+1)-(rect.xmin-1), (rect.ymax+1)-(rect.ymin-1));
|
||||
|
||||
glColor4f(1.f, 1.f, 1.f, 0.08f);
|
||||
/* draw grid lines here */
|
||||
for (i=1; i<4; i++) {
|
||||
@ -778,10 +782,6 @@ void ui_draw_but_HISTOGRAM(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol)
|
||||
fdrawline(rect.xmin+(i/4.f)*w, rect.ymin, rect.xmin+(i/4.f)*w, rect.ymax);
|
||||
}
|
||||
|
||||
/* need scissor test, histogram can draw outside of boundary */
|
||||
glGetIntegerv(GL_VIEWPORT, scissor);
|
||||
glScissor(ar->winrct.xmin + (rect.xmin-1), ar->winrct.ymin+(rect.ymin-1), (rect.xmax+1)-(rect.xmin-1), (rect.ymax+1)-(rect.ymin-1));
|
||||
|
||||
if (hist->mode == HISTO_MODE_LUMA)
|
||||
histogram_draw_one(1.0, 1.0, 1.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_luma, res);
|
||||
else {
|
||||
|
@ -1414,6 +1414,8 @@ static int forcefield_toggle_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
else
|
||||
ob->pd->forcefield = 0;
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, NULL);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
|
@ -184,7 +184,11 @@ static void rna_DomainFluidSettings_memory_estimate_get(PointerRNA *ptr, char *v
|
||||
|
||||
static int rna_DomainFluidSettings_memory_estimate_length(PointerRNA *ptr)
|
||||
{
|
||||
return 32;
|
||||
#ifdef DISABLE_ELBEEM
|
||||
return 0;
|
||||
#else
|
||||
return 31;
|
||||
#endif
|
||||
}
|
||||
|
||||
static char *rna_FluidSettings_path(PointerRNA *ptr)
|
||||
|
@ -208,78 +208,35 @@ PyObject *PyC_Object_GetAttrStringArgs(PyObject *o, Py_ssize_t n, ...)
|
||||
return item;
|
||||
}
|
||||
|
||||
/* returns the exception string as a new PyUnicode object, depends on external StringIO module */
|
||||
/* returns the exception string as a new PyUnicode object, depends on external traceback module */
|
||||
PyObject *PyC_ExceptionBuffer(void)
|
||||
{
|
||||
PyObject *stdout_backup = PySys_GetObject("stdout"); /* borrowed */
|
||||
PyObject *stderr_backup = PySys_GetObject("stderr"); /* borrowed */
|
||||
PyObject *string_io = NULL;
|
||||
PyObject *string_io_buf = NULL;
|
||||
PyObject *string_io_mod= NULL;
|
||||
PyObject *string_io_getvalue= NULL;
|
||||
PyObject *traceback_mod= NULL;
|
||||
PyObject *format_tb_func= NULL;
|
||||
PyObject *ret= NULL;
|
||||
|
||||
PyObject *error_type, *error_value, *error_traceback;
|
||||
|
||||
if (!PyErr_Occurred())
|
||||
return NULL;
|
||||
|
||||
PyErr_Fetch(&error_type, &error_value, &error_traceback);
|
||||
|
||||
PyErr_Clear();
|
||||
|
||||
/* import io
|
||||
* string_io = io.StringIO()
|
||||
*/
|
||||
|
||||
if(! (string_io_mod= PyImport_ImportModule("io")) ) {
|
||||
if(! (traceback_mod= PyImport_ImportModule("traceback")) ) {
|
||||
goto error_cleanup;
|
||||
}
|
||||
else if (! (string_io = PyObject_CallMethod(string_io_mod, (char *)"StringIO", NULL))) {
|
||||
goto error_cleanup;
|
||||
}
|
||||
else if (! (string_io_getvalue= PyObject_GetAttrString(string_io, "getvalue"))) {
|
||||
else if (! (format_tb_func= PyObject_GetAttrString(traceback_mod, "format_exc"))) {
|
||||
goto error_cleanup;
|
||||
}
|
||||
|
||||
Py_INCREF(stdout_backup); // since these were borrowed we dont want them freed when replaced.
|
||||
Py_INCREF(stderr_backup);
|
||||
|
||||
PySys_SetObject("stdout", string_io); // both of these are free'd when restoring
|
||||
PySys_SetObject("stderr", string_io);
|
||||
|
||||
PyErr_Restore(error_type, error_value, error_traceback);
|
||||
PyErr_Print(); /* print the error */
|
||||
PyErr_Clear();
|
||||
|
||||
string_io_buf = PyObject_CallObject(string_io_getvalue, NULL);
|
||||
|
||||
PySys_SetObject("stdout", stdout_backup);
|
||||
PySys_SetObject("stderr", stderr_backup);
|
||||
|
||||
Py_DECREF(stdout_backup); /* now sys owns the ref again */
|
||||
Py_DECREF(stderr_backup);
|
||||
|
||||
Py_DECREF(string_io_mod);
|
||||
Py_DECREF(string_io_getvalue);
|
||||
Py_DECREF(string_io); /* free the original reference */
|
||||
|
||||
PyErr_Clear();
|
||||
return string_io_buf;
|
||||
ret= PyObject_CallObject(format_tb_func, NULL);
|
||||
|
||||
if(ret == Py_None) {
|
||||
Py_DECREF(ret);
|
||||
ret= NULL;
|
||||
}
|
||||
|
||||
error_cleanup:
|
||||
/* could not import the module so print the error and close */
|
||||
Py_XDECREF(string_io_mod);
|
||||
Py_XDECREF(string_io);
|
||||
Py_XDECREF(traceback_mod);
|
||||
Py_XDECREF(format_tb_func);
|
||||
|
||||
PyErr_Restore(error_type, error_value, error_traceback);
|
||||
PyErr_Print(); /* print the error */
|
||||
PyErr_Clear();
|
||||
|
||||
return NULL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/* string conversion, escape non-unicode chars, coerce must be set to NULL */
|
||||
const char *PyC_UnicodeAsByte(PyObject *py_str, PyObject **coerce)
|
||||
{
|
||||
|
@ -4631,28 +4631,28 @@ static PyObject *pyrna_func_call(BPy_FunctionRNA *self, PyObject *args, PyObject
|
||||
/* note: tp_base member is set to &PyType_Type on init */
|
||||
PyTypeObject pyrna_struct_meta_idprop_Type= {
|
||||
PyVarObject_HEAD_INIT(NULL, 0)
|
||||
"bpy_struct_meta_idprop", /* tp_name */
|
||||
sizeof(PyHeapTypeObject), /* tp_basicsize */ // XXX, would be PyTypeObject, but subtypes of Type must be PyHeapTypeObject's
|
||||
0, /* tp_itemsize */
|
||||
"bpy_struct_meta_idprop", /* tp_name */
|
||||
sizeof(PyHeapTypeObject), /* tp_basicsize */ // XXX, would be PyTypeObject, but subtypes of Type must be PyHeapTypeObject's
|
||||
0, /* tp_itemsize */
|
||||
/* methods */
|
||||
NULL, /* tp_dealloc */
|
||||
NULL, /* tp_dealloc */
|
||||
NULL, /* printfunc tp_print; */
|
||||
NULL, /* getattrfunc tp_getattr; */
|
||||
NULL, /* setattrfunc tp_setattr; */
|
||||
NULL, /* tp_compare */ /* deprecated in python 3.0! */
|
||||
NULL, /* tp_repr */
|
||||
NULL, /* getattrfunc tp_getattr; */
|
||||
NULL, /* setattrfunc tp_setattr; */
|
||||
NULL, /* tp_compare */ /* deprecated in python 3.0! */
|
||||
NULL, /* tp_repr */
|
||||
|
||||
/* Method suites for standard classes */
|
||||
NULL, /* PyNumberMethods *tp_as_number; */
|
||||
NULL, /* PySequenceMethods *tp_as_sequence; */
|
||||
NULL, /* PyMappingMethods *tp_as_mapping; */
|
||||
NULL, /* PySequenceMethods *tp_as_sequence; */
|
||||
NULL, /* PyMappingMethods *tp_as_mapping; */
|
||||
|
||||
/* More standard operations (here for binary compatibility) */
|
||||
NULL, /* hashfunc tp_hash; */
|
||||
NULL, /* ternaryfunc tp_call; */
|
||||
NULL, /* reprfunc tp_str; */
|
||||
NULL /*(getattrofunc) pyrna_struct_meta_idprop_getattro*/, /* getattrofunc tp_getattro; */
|
||||
(setattrofunc) pyrna_struct_meta_idprop_setattro, /* setattrofunc tp_setattro; */
|
||||
NULL, /* hashfunc tp_hash; */
|
||||
NULL, /* ternaryfunc tp_call; */
|
||||
NULL, /* reprfunc tp_str; */
|
||||
NULL /*(getattrofunc) pyrna_struct_meta_idprop_getattro*/, /* getattrofunc tp_getattro; */
|
||||
(setattrofunc) pyrna_struct_meta_idprop_setattro, /* setattrofunc tp_setattro; */
|
||||
|
||||
/* Functions to access object as input/output buffer */
|
||||
NULL, /* PyBufferProcs *tp_as_buffer; */
|
||||
@ -4660,7 +4660,7 @@ PyTypeObject pyrna_struct_meta_idprop_Type= {
|
||||
/*** Flags to define presence of optional/expanded features ***/
|
||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* long tp_flags; */
|
||||
|
||||
NULL, /* char *tp_doc; Documentation string */
|
||||
NULL, /* char *tp_doc; Documentation string */
|
||||
/*** Assigned meaning in release 2.0 ***/
|
||||
/* call function for all accessible objects */
|
||||
NULL, /* traverseproc tp_traverse; */
|
||||
@ -4670,7 +4670,7 @@ PyTypeObject pyrna_struct_meta_idprop_Type= {
|
||||
|
||||
/*** Assigned meaning in release 2.1 ***/
|
||||
/*** rich comparisons ***/
|
||||
NULL, /* richcmpfunc tp_richcompare; */
|
||||
NULL, /* richcmpfunc tp_richcompare; */
|
||||
|
||||
/*** weak reference enabler ***/
|
||||
0, /* long tp_weaklistoffset; */
|
||||
@ -4681,9 +4681,9 @@ PyTypeObject pyrna_struct_meta_idprop_Type= {
|
||||
NULL, /* iternextfunc tp_iternext; */
|
||||
|
||||
/*** Attribute descriptor and subclassing stuff ***/
|
||||
NULL, /* struct PyMethodDef *tp_methods; */
|
||||
NULL, /* struct PyMethodDef *tp_methods; */
|
||||
NULL, /* struct PyMemberDef *tp_members; */
|
||||
NULL, /* struct PyGetSetDef *tp_getset; */
|
||||
NULL, /* struct PyGetSetDef *tp_getset; */
|
||||
NULL, /* struct _typeobject *tp_base; */
|
||||
NULL, /* PyObject *tp_dict; */
|
||||
NULL, /* descrgetfunc tp_descr_get; */
|
||||
@ -4691,7 +4691,7 @@ PyTypeObject pyrna_struct_meta_idprop_Type= {
|
||||
0, /* long tp_dictoffset; */
|
||||
NULL, /* initproc tp_init; */
|
||||
NULL, /* allocfunc tp_alloc; */
|
||||
NULL, /* newfunc tp_new; */
|
||||
NULL, /* newfunc tp_new; */
|
||||
/* Low-level free-memory routine */
|
||||
NULL, /* freefunc tp_free; */
|
||||
/* For PyObject_IS_GC */
|
||||
@ -4709,45 +4709,45 @@ PyTypeObject pyrna_struct_meta_idprop_Type= {
|
||||
/*-----------------------BPy_StructRNA method def------------------------------*/
|
||||
PyTypeObject pyrna_struct_Type= {
|
||||
PyVarObject_HEAD_INIT(NULL, 0)
|
||||
"bpy_struct", /* tp_name */
|
||||
sizeof(BPy_StructRNA), /* tp_basicsize */
|
||||
0, /* tp_itemsize */
|
||||
"bpy_struct", /* tp_name */
|
||||
sizeof(BPy_StructRNA), /* tp_basicsize */
|
||||
0, /* tp_itemsize */
|
||||
/* methods */
|
||||
(destructor) pyrna_struct_dealloc,/* tp_dealloc */
|
||||
NULL, /* printfunc tp_print; */
|
||||
NULL, /* getattrfunc tp_getattr; */
|
||||
NULL, /* setattrfunc tp_setattr; */
|
||||
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
||||
(reprfunc) pyrna_struct_repr, /* tp_repr */
|
||||
NULL, /* getattrfunc tp_getattr; */
|
||||
NULL, /* setattrfunc tp_setattr; */
|
||||
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
||||
(reprfunc) pyrna_struct_repr, /* tp_repr */
|
||||
|
||||
/* Method suites for standard classes */
|
||||
|
||||
NULL, /* PyNumberMethods *tp_as_number; */
|
||||
&pyrna_struct_as_sequence, /* PySequenceMethods *tp_as_sequence; */
|
||||
&pyrna_struct_as_mapping, /* PyMappingMethods *tp_as_mapping; */
|
||||
&pyrna_struct_as_sequence, /* PySequenceMethods *tp_as_sequence; */
|
||||
&pyrna_struct_as_mapping, /* PyMappingMethods *tp_as_mapping; */
|
||||
|
||||
/* More standard operations (here for binary compatibility) */
|
||||
|
||||
(hashfunc) pyrna_struct_hash, /* hashfunc tp_hash; */
|
||||
NULL, /* ternaryfunc tp_call; */
|
||||
(hashfunc) pyrna_struct_hash, /* hashfunc tp_hash; */
|
||||
NULL, /* ternaryfunc tp_call; */
|
||||
(reprfunc) pyrna_struct_str, /* reprfunc tp_str; */
|
||||
(getattrofunc) pyrna_struct_getattro, /* getattrofunc tp_getattro; */
|
||||
(setattrofunc) pyrna_struct_setattro, /* setattrofunc tp_setattro; */
|
||||
(getattrofunc) pyrna_struct_getattro, /* getattrofunc tp_getattro; */
|
||||
(setattrofunc) pyrna_struct_setattro, /* setattrofunc tp_setattro; */
|
||||
|
||||
/* Functions to access object as input/output buffer */
|
||||
NULL, /* PyBufferProcs *tp_as_buffer; */
|
||||
|
||||
/*** Flags to define presence of optional/expanded features ***/
|
||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, /* long tp_flags; */
|
||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, /* long tp_flags; */
|
||||
|
||||
NULL, /* char *tp_doc; Documentation string */
|
||||
NULL, /* char *tp_doc; Documentation string */
|
||||
/*** Assigned meaning in release 2.0 ***/
|
||||
/* call function for all accessible objects */
|
||||
#ifdef USE_PYRNA_STRUCT_REFERENCE
|
||||
(traverseproc) pyrna_struct_traverse, /* traverseproc tp_traverse; */
|
||||
(traverseproc) pyrna_struct_traverse, /* traverseproc tp_traverse; */
|
||||
|
||||
/* delete references to contained objects */
|
||||
(inquiry)pyrna_struct_clear, /* inquiry tp_clear; */
|
||||
(inquiry)pyrna_struct_clear, /* inquiry tp_clear; */
|
||||
#else
|
||||
NULL, /* traverseproc tp_traverse; */
|
||||
|
||||
@ -4757,11 +4757,11 @@ PyTypeObject pyrna_struct_Type= {
|
||||
|
||||
/*** Assigned meaning in release 2.1 ***/
|
||||
/*** rich comparisons ***/
|
||||
(richcmpfunc)pyrna_struct_richcmp, /* richcmpfunc tp_richcompare; */
|
||||
(richcmpfunc)pyrna_struct_richcmp, /* richcmpfunc tp_richcompare; */
|
||||
|
||||
/*** weak reference enabler ***/
|
||||
#ifdef USE_WEAKREFS
|
||||
offsetof(BPy_StructRNA, in_weakreflist), /* long tp_weaklistoffset; */
|
||||
offsetof(BPy_StructRNA, in_weakreflist), /* long tp_weaklistoffset; */
|
||||
#else
|
||||
0,
|
||||
#endif
|
||||
@ -4771,9 +4771,9 @@ PyTypeObject pyrna_struct_Type= {
|
||||
NULL, /* iternextfunc tp_iternext; */
|
||||
|
||||
/*** Attribute descriptor and subclassing stuff ***/
|
||||
pyrna_struct_methods, /* struct PyMethodDef *tp_methods; */
|
||||
pyrna_struct_methods, /* struct PyMethodDef *tp_methods; */
|
||||
NULL, /* struct PyMemberDef *tp_members; */
|
||||
pyrna_struct_getseters, /* struct PyGetSetDef *tp_getset; */
|
||||
pyrna_struct_getseters, /* struct PyGetSetDef *tp_getset; */
|
||||
NULL, /* struct _typeobject *tp_base; */
|
||||
NULL, /* PyObject *tp_dict; */
|
||||
NULL, /* descrgetfunc tp_descr_get; */
|
||||
@ -4781,7 +4781,7 @@ PyTypeObject pyrna_struct_Type= {
|
||||
0, /* long tp_dictoffset; */
|
||||
NULL, /* initproc tp_init; */
|
||||
NULL, /* allocfunc tp_alloc; */
|
||||
pyrna_struct_new, /* newfunc tp_new; */
|
||||
pyrna_struct_new, /* newfunc tp_new; */
|
||||
/* Low-level free-memory routine */
|
||||
NULL, /* freefunc tp_free; */
|
||||
/* For PyObject_IS_GC */
|
||||
@ -4798,32 +4798,32 @@ PyTypeObject pyrna_struct_Type= {
|
||||
/*-----------------------BPy_PropertyRNA method def------------------------------*/
|
||||
PyTypeObject pyrna_prop_Type= {
|
||||
PyVarObject_HEAD_INIT(NULL, 0)
|
||||
"bpy_prop", /* tp_name */
|
||||
sizeof(BPy_PropertyRNA), /* tp_basicsize */
|
||||
0, /* tp_itemsize */
|
||||
"bpy_prop", /* tp_name */
|
||||
sizeof(BPy_PropertyRNA), /* tp_basicsize */
|
||||
0, /* tp_itemsize */
|
||||
/* methods */
|
||||
(destructor) pyrna_prop_dealloc, /* tp_dealloc */
|
||||
NULL, /* printfunc tp_print; */
|
||||
NULL, /* getattrfunc tp_getattr; */
|
||||
NULL, /* printfunc tp_print; */
|
||||
NULL, /* getattrfunc tp_getattr; */
|
||||
NULL, /* setattrfunc tp_setattr; */
|
||||
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
||||
(reprfunc) pyrna_prop_repr, /* tp_repr */
|
||||
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
||||
(reprfunc) pyrna_prop_repr, /* tp_repr */
|
||||
|
||||
/* Method suites for standard classes */
|
||||
|
||||
NULL, /* PyNumberMethods *tp_as_number; */
|
||||
NULL, /* PySequenceMethods *tp_as_sequence; */
|
||||
NULL, /* PyMappingMethods *tp_as_mapping; */
|
||||
NULL, /* PySequenceMethods *tp_as_sequence; */
|
||||
NULL, /* PyMappingMethods *tp_as_mapping; */
|
||||
|
||||
/* More standard operations (here for binary compatibility) */
|
||||
|
||||
(hashfunc) pyrna_prop_hash, /* hashfunc tp_hash; */
|
||||
(hashfunc) pyrna_prop_hash, /* hashfunc tp_hash; */
|
||||
NULL, /* ternaryfunc tp_call; */
|
||||
(reprfunc) pyrna_prop_str, /* reprfunc tp_str; */
|
||||
|
||||
/* will only use these if this is a subtype of a py class */
|
||||
NULL, /* getattrofunc tp_getattro; */
|
||||
NULL, /* setattrofunc tp_setattro; */
|
||||
NULL, /* getattrofunc tp_getattro; */
|
||||
NULL, /* setattrofunc tp_setattro; */
|
||||
|
||||
/* Functions to access object as input/output buffer */
|
||||
NULL, /* PyBufferProcs *tp_as_buffer; */
|
||||
@ -4831,7 +4831,7 @@ PyTypeObject pyrna_prop_Type= {
|
||||
/*** Flags to define presence of optional/expanded features ***/
|
||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* long tp_flags; */
|
||||
|
||||
NULL, /* char *tp_doc; Documentation string */
|
||||
NULL, /* char *tp_doc; Documentation string */
|
||||
/*** Assigned meaning in release 2.0 ***/
|
||||
/* call function for all accessible objects */
|
||||
NULL, /* traverseproc tp_traverse; */
|
||||
@ -4852,11 +4852,11 @@ PyTypeObject pyrna_prop_Type= {
|
||||
|
||||
/*** Added in release 2.2 ***/
|
||||
/* Iterators */
|
||||
NULL, /* getiterfunc tp_iter; */
|
||||
NULL, /* getiterfunc tp_iter; */
|
||||
NULL, /* iternextfunc tp_iternext; */
|
||||
|
||||
/*** Attribute descriptor and subclassing stuff ***/
|
||||
pyrna_prop_methods, /* struct PyMethodDef *tp_methods; */
|
||||
pyrna_prop_methods, /* struct PyMethodDef *tp_methods; */
|
||||
NULL, /* struct PyMemberDef *tp_members; */
|
||||
pyrna_prop_getseters, /* struct PyGetSetDef *tp_getset; */
|
||||
NULL, /* struct _typeobject *tp_base; */
|
||||
@ -4866,7 +4866,7 @@ PyTypeObject pyrna_prop_Type= {
|
||||
0, /* long tp_dictoffset; */
|
||||
NULL, /* initproc tp_init; */
|
||||
NULL, /* allocfunc tp_alloc; */
|
||||
pyrna_prop_new, /* newfunc tp_new; */
|
||||
pyrna_prop_new, /* newfunc tp_new; */
|
||||
/* Low-level free-memory routine */
|
||||
NULL, /* freefunc tp_free; */
|
||||
/* For PyObject_IS_GC */
|
||||
@ -4888,34 +4888,34 @@ PyTypeObject pyrna_prop_array_Type= {
|
||||
/* methods */
|
||||
(destructor)pyrna_prop_array_dealloc, /* tp_dealloc */
|
||||
NULL, /* printfunc tp_print; */
|
||||
NULL, /* getattrfunc tp_getattr; */
|
||||
NULL, /* getattrfunc tp_getattr; */
|
||||
NULL, /* setattrfunc tp_setattr; */
|
||||
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
||||
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
||||
NULL,/* subclassed */ /* tp_repr */
|
||||
|
||||
/* Method suites for standard classes */
|
||||
|
||||
&pyrna_prop_array_as_number, /* PyNumberMethods *tp_as_number; */
|
||||
&pyrna_prop_array_as_sequence, /* PySequenceMethods *tp_as_sequence; */
|
||||
&pyrna_prop_array_as_mapping, /* PyMappingMethods *tp_as_mapping; */
|
||||
&pyrna_prop_array_as_number, /* PyNumberMethods *tp_as_number; */
|
||||
&pyrna_prop_array_as_sequence, /* PySequenceMethods *tp_as_sequence; */
|
||||
&pyrna_prop_array_as_mapping, /* PyMappingMethods *tp_as_mapping; */
|
||||
|
||||
/* More standard operations (here for binary compatibility) */
|
||||
|
||||
NULL, /* hashfunc tp_hash; */
|
||||
NULL, /* hashfunc tp_hash; */
|
||||
NULL, /* ternaryfunc tp_call; */
|
||||
NULL, /* reprfunc tp_str; */
|
||||
|
||||
/* will only use these if this is a subtype of a py class */
|
||||
(getattrofunc) pyrna_prop_array_getattro, /* getattrofunc tp_getattro; */
|
||||
NULL, /* setattrofunc tp_setattro; */
|
||||
(getattrofunc) pyrna_prop_array_getattro, /* getattrofunc tp_getattro; */
|
||||
NULL, /* setattrofunc tp_setattro; */
|
||||
|
||||
/* Functions to access object as input/output buffer */
|
||||
NULL, /* PyBufferProcs *tp_as_buffer; */
|
||||
|
||||
/*** Flags to define presence of optional/expanded features ***/
|
||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* long tp_flags; */
|
||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* long tp_flags; */
|
||||
|
||||
NULL, /* char *tp_doc; Documentation string */
|
||||
NULL, /* char *tp_doc; Documentation string */
|
||||
/*** Assigned meaning in release 2.0 ***/
|
||||
/* call function for all accessible objects */
|
||||
NULL, /* traverseproc tp_traverse; */
|
||||
@ -4925,7 +4925,7 @@ PyTypeObject pyrna_prop_array_Type= {
|
||||
|
||||
/*** Assigned meaning in release 2.1 ***/
|
||||
/*** rich comparisons ***/
|
||||
NULL, /* subclassed */ /* richcmpfunc tp_richcompare; */
|
||||
NULL, /* subclassed */ /* richcmpfunc tp_richcompare; */
|
||||
|
||||
/*** weak reference enabler ***/
|
||||
#ifdef USE_WEAKREFS
|
||||
@ -4939,22 +4939,22 @@ PyTypeObject pyrna_prop_array_Type= {
|
||||
NULL, /* iternextfunc tp_iternext; */
|
||||
|
||||
/*** Attribute descriptor and subclassing stuff ***/
|
||||
pyrna_prop_array_methods, /* struct PyMethodDef *tp_methods; */
|
||||
pyrna_prop_array_methods, /* struct PyMethodDef *tp_methods; */
|
||||
NULL, /* struct PyMemberDef *tp_members; */
|
||||
NULL /*pyrna_prop_getseters*/, /* struct PyGetSetDef *tp_getset; */
|
||||
&pyrna_prop_Type, /* struct _typeobject *tp_base; */
|
||||
NULL /*pyrna_prop_getseters*/, /* struct PyGetSetDef *tp_getset; */
|
||||
&pyrna_prop_Type, /* struct _typeobject *tp_base; */
|
||||
NULL, /* PyObject *tp_dict; */
|
||||
NULL, /* descrgetfunc tp_descr_get; */
|
||||
NULL, /* descrsetfunc tp_descr_set; */
|
||||
0, /* long tp_dictoffset; */
|
||||
NULL, /* initproc tp_init; */
|
||||
NULL, /* allocfunc tp_alloc; */
|
||||
NULL, /* newfunc tp_new; */
|
||||
NULL, /* newfunc tp_new; */
|
||||
/* Low-level free-memory routine */
|
||||
NULL, /* freefunc tp_free; */
|
||||
/* For PyObject_IS_GC */
|
||||
NULL, /* inquiry tp_is_gc; */
|
||||
NULL, /* PyObject *tp_bases; */
|
||||
NULL, /* PyObject *tp_bases; */
|
||||
/* method resolution order */
|
||||
NULL, /* PyObject *tp_mro; */
|
||||
NULL, /* PyObject *tp_cache; */
|
||||
@ -4965,32 +4965,32 @@ PyTypeObject pyrna_prop_array_Type= {
|
||||
|
||||
PyTypeObject pyrna_prop_collection_Type= {
|
||||
PyVarObject_HEAD_INIT(NULL, 0)
|
||||
"bpy_prop_collection", /* tp_name */
|
||||
sizeof(BPy_PropertyRNA), /* tp_basicsize */
|
||||
0, /* tp_itemsize */
|
||||
"bpy_prop_collection", /* tp_name */
|
||||
sizeof(BPy_PropertyRNA), /* tp_basicsize */
|
||||
0, /* tp_itemsize */
|
||||
/* methods */
|
||||
(destructor)pyrna_prop_dealloc, /* tp_dealloc */
|
||||
NULL, /* printfunc tp_print; */
|
||||
NULL, /* getattrfunc tp_getattr; */
|
||||
NULL, /* getattrfunc tp_getattr; */
|
||||
NULL, /* setattrfunc tp_setattr; */
|
||||
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
||||
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
||||
NULL, /* subclassed */ /* tp_repr */
|
||||
|
||||
/* Method suites for standard classes */
|
||||
|
||||
&pyrna_prop_collection_as_number, /* PyNumberMethods *tp_as_number; */
|
||||
&pyrna_prop_collection_as_sequence, /* PySequenceMethods *tp_as_sequence; */
|
||||
&pyrna_prop_collection_as_mapping, /* PyMappingMethods *tp_as_mapping; */
|
||||
&pyrna_prop_collection_as_sequence, /* PySequenceMethods *tp_as_sequence; */
|
||||
&pyrna_prop_collection_as_mapping, /* PyMappingMethods *tp_as_mapping; */
|
||||
|
||||
/* More standard operations (here for binary compatibility) */
|
||||
|
||||
NULL, /* hashfunc tp_hash; */
|
||||
NULL, /* hashfunc tp_hash; */
|
||||
NULL, /* ternaryfunc tp_call; */
|
||||
NULL, /* reprfunc tp_str; */
|
||||
|
||||
/* will only use these if this is a subtype of a py class */
|
||||
(getattrofunc) pyrna_prop_collection_getattro, /* getattrofunc tp_getattro; */
|
||||
(setattrofunc) pyrna_prop_collection_setattro, /* setattrofunc tp_setattro; */
|
||||
(getattrofunc) pyrna_prop_collection_getattro, /* getattrofunc tp_getattro; */
|
||||
(setattrofunc) pyrna_prop_collection_setattro, /* setattrofunc tp_setattro; */
|
||||
|
||||
/* Functions to access object as input/output buffer */
|
||||
NULL, /* PyBufferProcs *tp_as_buffer; */
|
||||
@ -4998,7 +4998,7 @@ PyTypeObject pyrna_prop_collection_Type= {
|
||||
/*** Flags to define presence of optional/expanded features ***/
|
||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* long tp_flags; */
|
||||
|
||||
NULL, /* char *tp_doc; Documentation string */
|
||||
NULL, /* char *tp_doc; Documentation string */
|
||||
/*** Assigned meaning in release 2.0 ***/
|
||||
/* call function for all accessible objects */
|
||||
NULL, /* traverseproc tp_traverse; */
|
||||
@ -5012,33 +5012,33 @@ PyTypeObject pyrna_prop_collection_Type= {
|
||||
|
||||
/*** weak reference enabler ***/
|
||||
#ifdef USE_WEAKREFS
|
||||
offsetof(BPy_PropertyRNA, in_weakreflist), /* long tp_weaklistoffset; */
|
||||
offsetof(BPy_PropertyRNA, in_weakreflist), /* long tp_weaklistoffset; */
|
||||
#else
|
||||
0,
|
||||
#endif
|
||||
|
||||
/*** Added in release 2.2 ***/
|
||||
/* Iterators */
|
||||
(getiterfunc)pyrna_prop_collection_iter, /* getiterfunc tp_iter; */
|
||||
(getiterfunc)pyrna_prop_collection_iter, /* getiterfunc tp_iter; */
|
||||
NULL, /* iternextfunc tp_iternext; */
|
||||
|
||||
/*** Attribute descriptor and subclassing stuff ***/
|
||||
pyrna_prop_collection_methods, /* struct PyMethodDef *tp_methods; */
|
||||
pyrna_prop_collection_methods, /* struct PyMethodDef *tp_methods; */
|
||||
NULL, /* struct PyMemberDef *tp_members; */
|
||||
NULL /*pyrna_prop_getseters*/, /* struct PyGetSetDef *tp_getset; */
|
||||
&pyrna_prop_Type, /* struct _typeobject *tp_base; */
|
||||
NULL /*pyrna_prop_getseters*/, /* struct PyGetSetDef *tp_getset; */
|
||||
&pyrna_prop_Type, /* struct _typeobject *tp_base; */
|
||||
NULL, /* PyObject *tp_dict; */
|
||||
NULL, /* descrgetfunc tp_descr_get; */
|
||||
NULL, /* descrsetfunc tp_descr_set; */
|
||||
0, /* long tp_dictoffset; */
|
||||
NULL, /* initproc tp_init; */
|
||||
NULL, /* allocfunc tp_alloc; */
|
||||
NULL, /* newfunc tp_new; */
|
||||
NULL, /* newfunc tp_new; */
|
||||
/* Low-level free-memory routine */
|
||||
NULL, /* freefunc tp_free; */
|
||||
/* For PyObject_IS_GC */
|
||||
NULL, /* inquiry tp_is_gc; */
|
||||
NULL, /* PyObject *tp_bases; */
|
||||
NULL, /* PyObject *tp_bases; */
|
||||
/* method resolution order */
|
||||
NULL, /* PyObject *tp_mro; */
|
||||
NULL, /* PyObject *tp_cache; */
|
||||
@ -5050,32 +5050,32 @@ PyTypeObject pyrna_prop_collection_Type= {
|
||||
/* only for add/remove/move methods */
|
||||
static PyTypeObject pyrna_prop_collection_idprop_Type= {
|
||||
PyVarObject_HEAD_INIT(NULL, 0)
|
||||
"bpy_prop_collection_idprop", /* tp_name */
|
||||
sizeof(BPy_PropertyRNA), /* tp_basicsize */
|
||||
0, /* tp_itemsize */
|
||||
"bpy_prop_collection_idprop", /* tp_name */
|
||||
sizeof(BPy_PropertyRNA), /* tp_basicsize */
|
||||
0, /* tp_itemsize */
|
||||
/* methods */
|
||||
(destructor)pyrna_prop_dealloc, /* tp_dealloc */
|
||||
NULL, /* printfunc tp_print; */
|
||||
NULL, /* getattrfunc tp_getattr; */
|
||||
NULL, /* getattrfunc tp_getattr; */
|
||||
NULL, /* setattrfunc tp_setattr; */
|
||||
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
||||
NULL, /* subclassed */ /* tp_repr */
|
||||
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
||||
NULL, /* subclassed */ /* tp_repr */
|
||||
|
||||
/* Method suites for standard classes */
|
||||
|
||||
NULL, /* PyNumberMethods *tp_as_number; */
|
||||
NULL, /* PySequenceMethods *tp_as_sequence; */
|
||||
NULL, /* PyMappingMethods *tp_as_mapping; */
|
||||
NULL, /* PyNumberMethods *tp_as_number; */
|
||||
NULL, /* PySequenceMethods *tp_as_sequence; */
|
||||
NULL, /* PyMappingMethods *tp_as_mapping; */
|
||||
|
||||
/* More standard operations (here for binary compatibility) */
|
||||
|
||||
NULL, /* hashfunc tp_hash; */
|
||||
NULL, /* hashfunc tp_hash; */
|
||||
NULL, /* ternaryfunc tp_call; */
|
||||
NULL, /* reprfunc tp_str; */
|
||||
|
||||
/* will only use these if this is a subtype of a py class */
|
||||
NULL, /* getattrofunc tp_getattro; */
|
||||
NULL, /* setattrofunc tp_setattro; */
|
||||
NULL, /* getattrofunc tp_getattro; */
|
||||
NULL, /* setattrofunc tp_setattro; */
|
||||
|
||||
/* Functions to access object as input/output buffer */
|
||||
NULL, /* PyBufferProcs *tp_as_buffer; */
|
||||
@ -5083,7 +5083,7 @@ static PyTypeObject pyrna_prop_collection_idprop_Type= {
|
||||
/*** Flags to define presence of optional/expanded features ***/
|
||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* long tp_flags; */
|
||||
|
||||
NULL, /* char *tp_doc; Documentation string */
|
||||
NULL, /* char *tp_doc; Documentation string */
|
||||
/*** Assigned meaning in release 2.0 ***/
|
||||
/* call function for all accessible objects */
|
||||
NULL, /* traverseproc tp_traverse; */
|
||||
@ -5097,33 +5097,33 @@ static PyTypeObject pyrna_prop_collection_idprop_Type= {
|
||||
|
||||
/*** weak reference enabler ***/
|
||||
#ifdef USE_WEAKREFS
|
||||
offsetof(BPy_PropertyRNA, in_weakreflist), /* long tp_weaklistoffset; */
|
||||
offsetof(BPy_PropertyRNA, in_weakreflist), /* long tp_weaklistoffset; */
|
||||
#else
|
||||
0,
|
||||
#endif
|
||||
|
||||
/*** Added in release 2.2 ***/
|
||||
/* Iterators */
|
||||
NULL, /* getiterfunc tp_iter; */
|
||||
NULL, /* getiterfunc tp_iter; */
|
||||
NULL, /* iternextfunc tp_iternext; */
|
||||
|
||||
/*** Attribute descriptor and subclassing stuff ***/
|
||||
pyrna_prop_collection_idprop_methods, /* struct PyMethodDef *tp_methods; */
|
||||
NULL, /* struct PyMemberDef *tp_members; */
|
||||
NULL /*pyrna_prop_getseters*/, /* struct PyGetSetDef *tp_getset; */
|
||||
&pyrna_prop_collection_Type, /* struct _typeobject *tp_base; */
|
||||
NULL /*pyrna_prop_getseters*/, /* struct PyGetSetDef *tp_getset; */
|
||||
&pyrna_prop_collection_Type,/* struct _typeobject *tp_base; */
|
||||
NULL, /* PyObject *tp_dict; */
|
||||
NULL, /* descrgetfunc tp_descr_get; */
|
||||
NULL, /* descrsetfunc tp_descr_set; */
|
||||
0, /* long tp_dictoffset; */
|
||||
NULL, /* initproc tp_init; */
|
||||
NULL, /* allocfunc tp_alloc; */
|
||||
NULL, /* newfunc tp_new; */
|
||||
NULL, /* newfunc tp_new; */
|
||||
/* Low-level free-memory routine */
|
||||
NULL, /* freefunc tp_free; */
|
||||
/* For PyObject_IS_GC */
|
||||
NULL, /* inquiry tp_is_gc; */
|
||||
NULL, /* PyObject *tp_bases; */
|
||||
NULL, /* PyObject *tp_bases; */
|
||||
/* method resolution order */
|
||||
NULL, /* PyObject *tp_mro; */
|
||||
NULL, /* PyObject *tp_cache; */
|
||||
@ -5135,32 +5135,32 @@ static PyTypeObject pyrna_prop_collection_idprop_Type= {
|
||||
/*-----------------------BPy_PropertyRNA method def------------------------------*/
|
||||
PyTypeObject pyrna_func_Type= {
|
||||
PyVarObject_HEAD_INIT(NULL, 0)
|
||||
"bpy_func", /* tp_name */
|
||||
sizeof(BPy_FunctionRNA), /* tp_basicsize */
|
||||
0, /* tp_itemsize */
|
||||
"bpy_func", /* tp_name */
|
||||
sizeof(BPy_FunctionRNA), /* tp_basicsize */
|
||||
0, /* tp_itemsize */
|
||||
/* methods */
|
||||
NULL, /* tp_dealloc */
|
||||
NULL, /* printfunc tp_print; */
|
||||
NULL, /* getattrfunc tp_getattr; */
|
||||
NULL, /* tp_dealloc */
|
||||
NULL, /* printfunc tp_print; */
|
||||
NULL, /* getattrfunc tp_getattr; */
|
||||
NULL, /* setattrfunc tp_setattr; */
|
||||
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
||||
(reprfunc) pyrna_func_repr, /* tp_repr */
|
||||
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
||||
(reprfunc) pyrna_func_repr, /* tp_repr */
|
||||
|
||||
/* Method suites for standard classes */
|
||||
|
||||
NULL, /* PyNumberMethods *tp_as_number; */
|
||||
NULL, /* PySequenceMethods *tp_as_sequence; */
|
||||
NULL, /* PyMappingMethods *tp_as_mapping; */
|
||||
NULL, /* PySequenceMethods *tp_as_sequence; */
|
||||
NULL, /* PyMappingMethods *tp_as_mapping; */
|
||||
|
||||
/* More standard operations (here for binary compatibility) */
|
||||
|
||||
NULL, /* hashfunc tp_hash; */
|
||||
(ternaryfunc)pyrna_func_call, /* ternaryfunc tp_call; */
|
||||
NULL, /* reprfunc tp_str; */
|
||||
NULL, /* hashfunc tp_hash; */
|
||||
(ternaryfunc)pyrna_func_call, /* ternaryfunc tp_call; */
|
||||
NULL, /* reprfunc tp_str; */
|
||||
|
||||
/* will only use these if this is a subtype of a py class */
|
||||
NULL, /* getattrofunc tp_getattro; */
|
||||
NULL, /* setattrofunc tp_setattro; */
|
||||
NULL, /* getattrofunc tp_getattro; */
|
||||
NULL, /* setattrofunc tp_setattro; */
|
||||
|
||||
/* Functions to access object as input/output buffer */
|
||||
NULL, /* PyBufferProcs *tp_as_buffer; */
|
||||
@ -5168,7 +5168,7 @@ PyTypeObject pyrna_func_Type= {
|
||||
/*** Flags to define presence of optional/expanded features ***/
|
||||
Py_TPFLAGS_DEFAULT, /* long tp_flags; */
|
||||
|
||||
NULL, /* char *tp_doc; Documentation string */
|
||||
NULL, /* char *tp_doc; Documentation string */
|
||||
/*** Assigned meaning in release 2.0 ***/
|
||||
/* call function for all accessible objects */
|
||||
NULL, /* traverseproc tp_traverse; */
|
||||
@ -5178,7 +5178,7 @@ PyTypeObject pyrna_func_Type= {
|
||||
|
||||
/*** Assigned meaning in release 2.1 ***/
|
||||
/*** rich comparisons ***/
|
||||
NULL, /* richcmpfunc tp_richcompare; */
|
||||
NULL, /* richcmpfunc tp_richcompare; */
|
||||
|
||||
/*** weak reference enabler ***/
|
||||
#ifdef USE_WEAKREFS
|
||||
@ -5189,13 +5189,13 @@ PyTypeObject pyrna_func_Type= {
|
||||
|
||||
/*** Added in release 2.2 ***/
|
||||
/* Iterators */
|
||||
NULL, /* getiterfunc tp_iter; */
|
||||
NULL, /* getiterfunc tp_iter; */
|
||||
NULL, /* iternextfunc tp_iternext; */
|
||||
|
||||
/*** Attribute descriptor and subclassing stuff ***/
|
||||
NULL, /* struct PyMethodDef *tp_methods; */
|
||||
NULL, /* struct PyMethodDef *tp_methods; */
|
||||
NULL, /* struct PyMemberDef *tp_members; */
|
||||
NULL, /* struct PyGetSetDef *tp_getset; */
|
||||
NULL, /* struct PyGetSetDef *tp_getset; */
|
||||
NULL, /* struct _typeobject *tp_base; */
|
||||
NULL, /* PyObject *tp_dict; */
|
||||
NULL, /* descrgetfunc tp_descr_get; */
|
||||
@ -5203,7 +5203,7 @@ PyTypeObject pyrna_func_Type= {
|
||||
0, /* long tp_dictoffset; */
|
||||
NULL, /* initproc tp_init; */
|
||||
NULL, /* allocfunc tp_alloc; */
|
||||
NULL, /* newfunc tp_new; */
|
||||
NULL, /* newfunc tp_new; */
|
||||
/* Low-level free-memory routine */
|
||||
NULL, /* freefunc tp_free; */
|
||||
/* For PyObject_IS_GC */
|
||||
@ -5231,32 +5231,32 @@ static PyObject *pyrna_prop_collection_iter_next(BPy_PropertyCollectionIterRNA *
|
||||
|
||||
PyTypeObject pyrna_prop_collection_iter_Type= {
|
||||
PyVarObject_HEAD_INIT(NULL, 0)
|
||||
"bpy_prop_collection_iter", /* tp_name */
|
||||
sizeof(BPy_PropertyCollectionIterRNA), /* tp_basicsize */
|
||||
0, /* tp_itemsize */
|
||||
"bpy_prop_collection_iter", /* tp_name */
|
||||
sizeof(BPy_PropertyCollectionIterRNA), /* tp_basicsize */
|
||||
0, /* tp_itemsize */
|
||||
/* methods */
|
||||
(destructor)pyrna_prop_collection_iter_dealloc, /* tp_dealloc */
|
||||
NULL, /* printfunc tp_print; */
|
||||
NULL, /* getattrfunc tp_getattr; */
|
||||
NULL, /* getattrfunc tp_getattr; */
|
||||
NULL, /* setattrfunc tp_setattr; */
|
||||
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
||||
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
||||
NULL,/* subclassed */ /* tp_repr */
|
||||
|
||||
/* Method suites for standard classes */
|
||||
|
||||
NULL, /* PyNumberMethods *tp_as_number; */
|
||||
NULL, /* PySequenceMethods *tp_as_sequence; */
|
||||
NULL, /* PyMappingMethods *tp_as_mapping; */
|
||||
NULL, /* PySequenceMethods *tp_as_sequence; */
|
||||
NULL, /* PyMappingMethods *tp_as_mapping; */
|
||||
|
||||
/* More standard operations (here for binary compatibility) */
|
||||
|
||||
NULL, /* hashfunc tp_hash; */
|
||||
NULL, /* hashfunc tp_hash; */
|
||||
NULL, /* ternaryfunc tp_call; */
|
||||
NULL, /* reprfunc tp_str; */
|
||||
|
||||
/* will only use these if this is a subtype of a py class */
|
||||
PyObject_GenericGetAttr, /* getattrofunc tp_getattro; */
|
||||
NULL, /* setattrofunc tp_setattro; */
|
||||
PyObject_GenericGetAttr, /* getattrofunc tp_getattro; */
|
||||
NULL, /* setattrofunc tp_setattro; */
|
||||
|
||||
/* Functions to access object as input/output buffer */
|
||||
NULL, /* PyBufferProcs *tp_as_buffer; */
|
||||
@ -5264,7 +5264,7 @@ PyTypeObject pyrna_prop_collection_iter_Type= {
|
||||
/*** Flags to define presence of optional/expanded features ***/
|
||||
Py_TPFLAGS_DEFAULT, /* long tp_flags; */
|
||||
|
||||
NULL, /* char *tp_doc; Documentation string */
|
||||
NULL, /* char *tp_doc; Documentation string */
|
||||
/*** Assigned meaning in release 2.0 ***/
|
||||
/* call function for all accessible objects */
|
||||
NULL, /* traverseproc tp_traverse; */
|
||||
@ -5278,19 +5278,19 @@ PyTypeObject pyrna_prop_collection_iter_Type= {
|
||||
|
||||
/*** weak reference enabler ***/
|
||||
#ifdef USE_WEAKREFS
|
||||
offsetof(BPy_PropertyCollectionIterRNA, in_weakreflist), /* long tp_weaklistoffset; */
|
||||
offsetof(BPy_PropertyCollectionIterRNA, in_weakreflist), /* long tp_weaklistoffset; */
|
||||
#else
|
||||
0,
|
||||
#endif
|
||||
/*** Added in release 2.2 ***/
|
||||
/* Iterators */
|
||||
PyObject_SelfIter, /* getiterfunc tp_iter; */
|
||||
(iternextfunc) pyrna_prop_collection_iter_next, /* iternextfunc tp_iternext; */
|
||||
PyObject_SelfIter, /* getiterfunc tp_iter; */
|
||||
(iternextfunc) pyrna_prop_collection_iter_next, /* iternextfunc tp_iternext; */
|
||||
|
||||
/*** Attribute descriptor and subclassing stuff ***/
|
||||
NULL, /* struct PyMethodDef *tp_methods; */
|
||||
NULL, /* struct PyMethodDef *tp_methods; */
|
||||
NULL, /* struct PyMemberDef *tp_members; */
|
||||
NULL, /* struct PyGetSetDef *tp_getset; */
|
||||
NULL, /* struct PyGetSetDef *tp_getset; */
|
||||
NULL, /* struct _typeobject *tp_base; */
|
||||
NULL, /* PyObject *tp_dict; */
|
||||
NULL, /* descrgetfunc tp_descr_get; */
|
||||
@ -5298,12 +5298,12 @@ PyTypeObject pyrna_prop_collection_iter_Type= {
|
||||
0, /* long tp_dictoffset; */
|
||||
NULL, /* initproc tp_init; */
|
||||
NULL, /* allocfunc tp_alloc; */
|
||||
NULL, /* newfunc tp_new; */
|
||||
NULL, /* newfunc tp_new; */
|
||||
/* Low-level free-memory routine */
|
||||
NULL, /* freefunc tp_free; */
|
||||
/* For PyObject_IS_GC */
|
||||
NULL, /* inquiry tp_is_gc; */
|
||||
NULL, /* PyObject *tp_bases; */
|
||||
NULL, /* PyObject *tp_bases; */
|
||||
/* method resolution order */
|
||||
NULL, /* PyObject *tp_mro; */
|
||||
NULL, /* PyObject *tp_cache; */
|
||||
|
@ -57,183 +57,181 @@ class BL_BlenderInputDevice : public SCA_IInputDevice
|
||||
std::map<int,KX_EnumInputs> m_reverseKeyTranslateTable;
|
||||
public:
|
||||
BL_BlenderInputDevice()
|
||||
{
|
||||
{
|
||||
|
||||
/* The reverse table. In order to not confuse ourselves, we */
|
||||
/* immediately convert all events that come in to KX codes. */
|
||||
m_reverseKeyTranslateTable[LEFTMOUSE ] = KX_LEFTMOUSE ;
|
||||
m_reverseKeyTranslateTable[MIDDLEMOUSE ] = KX_MIDDLEMOUSE ;
|
||||
m_reverseKeyTranslateTable[RIGHTMOUSE ] = KX_RIGHTMOUSE ;
|
||||
m_reverseKeyTranslateTable[WHEELUPMOUSE ] = KX_WHEELUPMOUSE ;
|
||||
m_reverseKeyTranslateTable[WHEELDOWNMOUSE ] = KX_WHEELDOWNMOUSE ;
|
||||
m_reverseKeyTranslateTable[MOUSEX ] = KX_MOUSEX ;
|
||||
m_reverseKeyTranslateTable[MOUSEY ] = KX_MOUSEY ;
|
||||
/* The reverse table. In order to not confuse ourselves, we */
|
||||
/* immediately convert all events that come in to KX codes. */
|
||||
m_reverseKeyTranslateTable[LEFTMOUSE ] = KX_LEFTMOUSE;
|
||||
m_reverseKeyTranslateTable[MIDDLEMOUSE ] = KX_MIDDLEMOUSE;
|
||||
m_reverseKeyTranslateTable[RIGHTMOUSE ] = KX_RIGHTMOUSE;
|
||||
m_reverseKeyTranslateTable[WHEELUPMOUSE ] = KX_WHEELUPMOUSE;
|
||||
m_reverseKeyTranslateTable[WHEELDOWNMOUSE ] = KX_WHEELDOWNMOUSE;
|
||||
m_reverseKeyTranslateTable[MOUSEX ] = KX_MOUSEX;
|
||||
m_reverseKeyTranslateTable[MOUSEY ] = KX_MOUSEY;
|
||||
|
||||
// TIMERS
|
||||
// TIMERS
|
||||
|
||||
m_reverseKeyTranslateTable[TIMER0 ] = KX_TIMER0 ;
|
||||
m_reverseKeyTranslateTable[TIMER1 ] = KX_TIMER1 ;
|
||||
m_reverseKeyTranslateTable[TIMER2 ] = KX_TIMER2 ;
|
||||
m_reverseKeyTranslateTable[TIMER0 ] = KX_TIMER0;
|
||||
m_reverseKeyTranslateTable[TIMER1 ] = KX_TIMER1;
|
||||
m_reverseKeyTranslateTable[TIMER2 ] = KX_TIMER2;
|
||||
|
||||
// SYSTEM
|
||||
// SYSTEM
|
||||
#if 0
|
||||
/* **** XXX **** */
|
||||
m_reverseKeyTranslateTable[KEYBD ] = KX_KEYBD ;
|
||||
m_reverseKeyTranslateTable[RAWKEYBD ] = KX_RAWKEYBD ;
|
||||
m_reverseKeyTranslateTable[REDRAW ] = KX_REDRAW ;
|
||||
m_reverseKeyTranslateTable[INPUTCHANGE ] = KX_INPUTCHANGE ;
|
||||
m_reverseKeyTranslateTable[QFULL ] = KX_QFULL ;
|
||||
m_reverseKeyTranslateTable[WINFREEZE ] = KX_WINFREEZE ;
|
||||
m_reverseKeyTranslateTable[WINTHAW ] = KX_WINTHAW ;
|
||||
m_reverseKeyTranslateTable[WINCLOSE ] = KX_WINCLOSE ;
|
||||
m_reverseKeyTranslateTable[WINQUIT ] = KX_WINQUIT ;
|
||||
m_reverseKeyTranslateTable[Q_FIRSTTIME ] = KX_Q_FIRSTTIME ;
|
||||
/* **** XXX **** */
|
||||
/* **** XXX **** */
|
||||
m_reverseKeyTranslateTable[KEYBD ] = KX_KEYBD;
|
||||
m_reverseKeyTranslateTable[RAWKEYBD ] = KX_RAWKEYBD;
|
||||
m_reverseKeyTranslateTable[REDRAW ] = KX_REDRAW;
|
||||
m_reverseKeyTranslateTable[INPUTCHANGE ] = KX_INPUTCHANGE;
|
||||
m_reverseKeyTranslateTable[QFULL ] = KX_QFULL;
|
||||
m_reverseKeyTranslateTable[WINFREEZE ] = KX_WINFREEZE;
|
||||
m_reverseKeyTranslateTable[WINTHAW ] = KX_WINTHAW;
|
||||
m_reverseKeyTranslateTable[WINCLOSE ] = KX_WINCLOSE;
|
||||
m_reverseKeyTranslateTable[WINQUIT ] = KX_WINQUIT;
|
||||
m_reverseKeyTranslateTable[Q_FIRSTTIME ] = KX_Q_FIRSTTIME;
|
||||
/* **** XXX **** */
|
||||
#endif
|
||||
// standard keyboard
|
||||
// standard keyboard
|
||||
|
||||
m_reverseKeyTranslateTable[AKEY ] = KX_AKEY ;
|
||||
m_reverseKeyTranslateTable[BKEY ] = KX_BKEY ;
|
||||
m_reverseKeyTranslateTable[CKEY ] = KX_CKEY ;
|
||||
m_reverseKeyTranslateTable[DKEY ] = KX_DKEY ;
|
||||
m_reverseKeyTranslateTable[EKEY ] = KX_EKEY ;
|
||||
m_reverseKeyTranslateTable[FKEY ] = KX_FKEY ;
|
||||
m_reverseKeyTranslateTable[GKEY ] = KX_GKEY ;
|
||||
//XXX clean up
|
||||
m_reverseKeyTranslateTable[AKEY ] = KX_AKEY;
|
||||
m_reverseKeyTranslateTable[BKEY ] = KX_BKEY;
|
||||
m_reverseKeyTranslateTable[CKEY ] = KX_CKEY;
|
||||
m_reverseKeyTranslateTable[DKEY ] = KX_DKEY;
|
||||
m_reverseKeyTranslateTable[EKEY ] = KX_EKEY;
|
||||
m_reverseKeyTranslateTable[FKEY ] = KX_FKEY;
|
||||
m_reverseKeyTranslateTable[GKEY ] = KX_GKEY;
|
||||
//XXX clean up
|
||||
#ifdef WIN32
|
||||
#define HKEY 'h'
|
||||
#endif
|
||||
m_reverseKeyTranslateTable[HKEY ] = KX_HKEY ;
|
||||
//XXX clean up
|
||||
m_reverseKeyTranslateTable[HKEY ] = KX_HKEY;
|
||||
//XXX clean up
|
||||
#ifdef WIN32
|
||||
#undef HKEY
|
||||
#endif
|
||||
m_reverseKeyTranslateTable[IKEY ] = KX_IKEY ;
|
||||
m_reverseKeyTranslateTable[JKEY ] = KX_JKEY ;
|
||||
m_reverseKeyTranslateTable[KKEY ] = KX_KKEY ;
|
||||
m_reverseKeyTranslateTable[LKEY ] = KX_LKEY ;
|
||||
m_reverseKeyTranslateTable[MKEY ] = KX_MKEY ;
|
||||
m_reverseKeyTranslateTable[NKEY ] = KX_NKEY ;
|
||||
m_reverseKeyTranslateTable[OKEY ] = KX_OKEY ;
|
||||
m_reverseKeyTranslateTable[PKEY ] = KX_PKEY ;
|
||||
m_reverseKeyTranslateTable[QKEY ] = KX_QKEY ;
|
||||
m_reverseKeyTranslateTable[RKEY ] = KX_RKEY ;
|
||||
m_reverseKeyTranslateTable[SKEY ] = KX_SKEY ;
|
||||
m_reverseKeyTranslateTable[TKEY ] = KX_TKEY ;
|
||||
m_reverseKeyTranslateTable[UKEY ] = KX_UKEY ;
|
||||
m_reverseKeyTranslateTable[VKEY ] = KX_VKEY ;
|
||||
m_reverseKeyTranslateTable[WKEY ] = KX_WKEY ;
|
||||
m_reverseKeyTranslateTable[XKEY ] = KX_XKEY ;
|
||||
m_reverseKeyTranslateTable[YKEY ] = KX_YKEY ;
|
||||
m_reverseKeyTranslateTable[ZKEY ] = KX_ZKEY ;
|
||||
m_reverseKeyTranslateTable[IKEY ] = KX_IKEY;
|
||||
m_reverseKeyTranslateTable[JKEY ] = KX_JKEY;
|
||||
m_reverseKeyTranslateTable[KKEY ] = KX_KKEY;
|
||||
m_reverseKeyTranslateTable[LKEY ] = KX_LKEY;
|
||||
m_reverseKeyTranslateTable[MKEY ] = KX_MKEY;
|
||||
m_reverseKeyTranslateTable[NKEY ] = KX_NKEY;
|
||||
m_reverseKeyTranslateTable[OKEY ] = KX_OKEY;
|
||||
m_reverseKeyTranslateTable[PKEY ] = KX_PKEY;
|
||||
m_reverseKeyTranslateTable[QKEY ] = KX_QKEY;
|
||||
m_reverseKeyTranslateTable[RKEY ] = KX_RKEY;
|
||||
m_reverseKeyTranslateTable[SKEY ] = KX_SKEY;
|
||||
m_reverseKeyTranslateTable[TKEY ] = KX_TKEY;
|
||||
m_reverseKeyTranslateTable[UKEY ] = KX_UKEY;
|
||||
m_reverseKeyTranslateTable[VKEY ] = KX_VKEY;
|
||||
m_reverseKeyTranslateTable[WKEY ] = KX_WKEY;
|
||||
m_reverseKeyTranslateTable[XKEY ] = KX_XKEY;
|
||||
m_reverseKeyTranslateTable[YKEY ] = KX_YKEY;
|
||||
m_reverseKeyTranslateTable[ZKEY ] = KX_ZKEY;
|
||||
|
||||
m_reverseKeyTranslateTable[ZEROKEY ] = KX_ZEROKEY ;
|
||||
m_reverseKeyTranslateTable[ONEKEY ] = KX_ONEKEY ;
|
||||
m_reverseKeyTranslateTable[TWOKEY ] = KX_TWOKEY ;
|
||||
m_reverseKeyTranslateTable[THREEKEY ] = KX_THREEKEY ;
|
||||
m_reverseKeyTranslateTable[FOURKEY ] = KX_FOURKEY ;
|
||||
m_reverseKeyTranslateTable[FIVEKEY ] = KX_FIVEKEY ;
|
||||
m_reverseKeyTranslateTable[SIXKEY ] = KX_SIXKEY ;
|
||||
m_reverseKeyTranslateTable[SEVENKEY ] = KX_SEVENKEY ;
|
||||
m_reverseKeyTranslateTable[EIGHTKEY ] = KX_EIGHTKEY ;
|
||||
m_reverseKeyTranslateTable[NINEKEY ] = KX_NINEKEY ;
|
||||
m_reverseKeyTranslateTable[ZEROKEY ] = KX_ZEROKEY;
|
||||
m_reverseKeyTranslateTable[ONEKEY ] = KX_ONEKEY;
|
||||
m_reverseKeyTranslateTable[TWOKEY ] = KX_TWOKEY;
|
||||
m_reverseKeyTranslateTable[THREEKEY ] = KX_THREEKEY;
|
||||
m_reverseKeyTranslateTable[FOURKEY ] = KX_FOURKEY;
|
||||
m_reverseKeyTranslateTable[FIVEKEY ] = KX_FIVEKEY;
|
||||
m_reverseKeyTranslateTable[SIXKEY ] = KX_SIXKEY;
|
||||
m_reverseKeyTranslateTable[SEVENKEY ] = KX_SEVENKEY;
|
||||
m_reverseKeyTranslateTable[EIGHTKEY ] = KX_EIGHTKEY;
|
||||
m_reverseKeyTranslateTable[NINEKEY ] = KX_NINEKEY;
|
||||
|
||||
m_reverseKeyTranslateTable[CAPSLOCKKEY ] = KX_CAPSLOCKKEY ;
|
||||
m_reverseKeyTranslateTable[CAPSLOCKKEY ] = KX_CAPSLOCKKEY;
|
||||
|
||||
m_reverseKeyTranslateTable[LEFTCTRLKEY ] = KX_LEFTCTRLKEY ;
|
||||
m_reverseKeyTranslateTable[LEFTALTKEY ] = KX_LEFTALTKEY ;
|
||||
m_reverseKeyTranslateTable[RIGHTALTKEY ] = KX_RIGHTALTKEY ;
|
||||
m_reverseKeyTranslateTable[RIGHTCTRLKEY ] = KX_RIGHTCTRLKEY ;
|
||||
m_reverseKeyTranslateTable[RIGHTSHIFTKEY ] = KX_RIGHTSHIFTKEY ;
|
||||
m_reverseKeyTranslateTable[LEFTSHIFTKEY ] = KX_LEFTSHIFTKEY ;
|
||||
m_reverseKeyTranslateTable[LEFTCTRLKEY ] = KX_LEFTCTRLKEY;
|
||||
m_reverseKeyTranslateTable[LEFTALTKEY ] = KX_LEFTALTKEY;
|
||||
m_reverseKeyTranslateTable[RIGHTALTKEY ] = KX_RIGHTALTKEY;
|
||||
m_reverseKeyTranslateTable[RIGHTCTRLKEY ] = KX_RIGHTCTRLKEY;
|
||||
m_reverseKeyTranslateTable[RIGHTSHIFTKEY ] = KX_RIGHTSHIFTKEY;
|
||||
m_reverseKeyTranslateTable[LEFTSHIFTKEY ] = KX_LEFTSHIFTKEY;
|
||||
|
||||
m_reverseKeyTranslateTable[ESCKEY ] = KX_ESCKEY ;
|
||||
m_reverseKeyTranslateTable[TABKEY ] = KX_TABKEY ;
|
||||
m_reverseKeyTranslateTable[RETKEY ] = KX_RETKEY ;
|
||||
m_reverseKeyTranslateTable[SPACEKEY ] = KX_SPACEKEY ;
|
||||
m_reverseKeyTranslateTable[LINEFEEDKEY ] = KX_LINEFEEDKEY ;
|
||||
m_reverseKeyTranslateTable[BACKSPACEKEY ] = KX_BACKSPACEKEY ;
|
||||
m_reverseKeyTranslateTable[DELKEY ] = KX_DELKEY ;
|
||||
m_reverseKeyTranslateTable[SEMICOLONKEY ] = KX_SEMICOLONKEY ;
|
||||
m_reverseKeyTranslateTable[PERIODKEY ] = KX_PERIODKEY ;
|
||||
m_reverseKeyTranslateTable[COMMAKEY ] = KX_COMMAKEY ;
|
||||
m_reverseKeyTranslateTable[QUOTEKEY ] = KX_QUOTEKEY ;
|
||||
m_reverseKeyTranslateTable[ACCENTGRAVEKEY ] = KX_ACCENTGRAVEKEY ;
|
||||
m_reverseKeyTranslateTable[MINUSKEY ] = KX_MINUSKEY ;
|
||||
m_reverseKeyTranslateTable[SLASHKEY ] = KX_SLASHKEY ;
|
||||
m_reverseKeyTranslateTable[BACKSLASHKEY ] = KX_BACKSLASHKEY ;
|
||||
m_reverseKeyTranslateTable[EQUALKEY ] = KX_EQUALKEY ;
|
||||
m_reverseKeyTranslateTable[LEFTBRACKETKEY ] = KX_LEFTBRACKETKEY ;
|
||||
m_reverseKeyTranslateTable[RIGHTBRACKETKEY ] = KX_RIGHTBRACKETKEY ;
|
||||
m_reverseKeyTranslateTable[ESCKEY ] = KX_ESCKEY;
|
||||
m_reverseKeyTranslateTable[TABKEY ] = KX_TABKEY;
|
||||
m_reverseKeyTranslateTable[RETKEY ] = KX_RETKEY;
|
||||
m_reverseKeyTranslateTable[SPACEKEY ] = KX_SPACEKEY;
|
||||
m_reverseKeyTranslateTable[LINEFEEDKEY ] = KX_LINEFEEDKEY;
|
||||
m_reverseKeyTranslateTable[BACKSPACEKEY ] = KX_BACKSPACEKEY;
|
||||
m_reverseKeyTranslateTable[DELKEY ] = KX_DELKEY;
|
||||
m_reverseKeyTranslateTable[SEMICOLONKEY ] = KX_SEMICOLONKEY;
|
||||
m_reverseKeyTranslateTable[PERIODKEY ] = KX_PERIODKEY;
|
||||
m_reverseKeyTranslateTable[COMMAKEY ] = KX_COMMAKEY;
|
||||
m_reverseKeyTranslateTable[QUOTEKEY ] = KX_QUOTEKEY;
|
||||
m_reverseKeyTranslateTable[ACCENTGRAVEKEY ] = KX_ACCENTGRAVEKEY;
|
||||
m_reverseKeyTranslateTable[MINUSKEY ] = KX_MINUSKEY;
|
||||
m_reverseKeyTranslateTable[SLASHKEY ] = KX_SLASHKEY;
|
||||
m_reverseKeyTranslateTable[BACKSLASHKEY ] = KX_BACKSLASHKEY;
|
||||
m_reverseKeyTranslateTable[EQUALKEY ] = KX_EQUALKEY;
|
||||
m_reverseKeyTranslateTable[LEFTBRACKETKEY ] = KX_LEFTBRACKETKEY;
|
||||
m_reverseKeyTranslateTable[RIGHTBRACKETKEY ] = KX_RIGHTBRACKETKEY;
|
||||
|
||||
m_reverseKeyTranslateTable[LEFTARROWKEY ] = KX_LEFTARROWKEY ;
|
||||
m_reverseKeyTranslateTable[DOWNARROWKEY ] = KX_DOWNARROWKEY ;
|
||||
m_reverseKeyTranslateTable[RIGHTARROWKEY ] = KX_RIGHTARROWKEY ;
|
||||
m_reverseKeyTranslateTable[UPARROWKEY ] = KX_UPARROWKEY ;
|
||||
m_reverseKeyTranslateTable[LEFTARROWKEY ] = KX_LEFTARROWKEY;
|
||||
m_reverseKeyTranslateTable[DOWNARROWKEY ] = KX_DOWNARROWKEY;
|
||||
m_reverseKeyTranslateTable[RIGHTARROWKEY ] = KX_RIGHTARROWKEY;
|
||||
m_reverseKeyTranslateTable[UPARROWKEY ] = KX_UPARROWKEY;
|
||||
|
||||
m_reverseKeyTranslateTable[PAD2 ] = KX_PAD2 ;
|
||||
m_reverseKeyTranslateTable[PAD4 ] = KX_PAD4 ;
|
||||
m_reverseKeyTranslateTable[PAD6 ] = KX_PAD6 ;
|
||||
m_reverseKeyTranslateTable[PAD8 ] = KX_PAD8 ;
|
||||
m_reverseKeyTranslateTable[PAD2 ] = KX_PAD2;
|
||||
m_reverseKeyTranslateTable[PAD4 ] = KX_PAD4;
|
||||
m_reverseKeyTranslateTable[PAD6 ] = KX_PAD6;
|
||||
m_reverseKeyTranslateTable[PAD8 ] = KX_PAD8;
|
||||
|
||||
m_reverseKeyTranslateTable[PAD1 ] = KX_PAD1 ;
|
||||
m_reverseKeyTranslateTable[PAD3 ] = KX_PAD3 ;
|
||||
m_reverseKeyTranslateTable[PAD5 ] = KX_PAD5 ;
|
||||
m_reverseKeyTranslateTable[PAD7 ] = KX_PAD7 ;
|
||||
m_reverseKeyTranslateTable[PAD9 ] = KX_PAD9 ;
|
||||
m_reverseKeyTranslateTable[PAD1 ] = KX_PAD1;
|
||||
m_reverseKeyTranslateTable[PAD3 ] = KX_PAD3;
|
||||
m_reverseKeyTranslateTable[PAD5 ] = KX_PAD5;
|
||||
m_reverseKeyTranslateTable[PAD7 ] = KX_PAD7;
|
||||
m_reverseKeyTranslateTable[PAD9 ] = KX_PAD9;
|
||||
|
||||
m_reverseKeyTranslateTable[PADPERIOD ] = KX_PADPERIOD ;
|
||||
m_reverseKeyTranslateTable[PADSLASHKEY ] = KX_PADSLASHKEY ;
|
||||
m_reverseKeyTranslateTable[PADASTERKEY ] = KX_PADASTERKEY ;
|
||||
m_reverseKeyTranslateTable[PADPERIOD ] = KX_PADPERIOD;
|
||||
m_reverseKeyTranslateTable[PADSLASHKEY ] = KX_PADSLASHKEY;
|
||||
m_reverseKeyTranslateTable[PADASTERKEY ] = KX_PADASTERKEY;
|
||||
|
||||
|
||||
m_reverseKeyTranslateTable[PAD0 ] = KX_PAD0 ;
|
||||
m_reverseKeyTranslateTable[PADMINUS ] = KX_PADMINUS ;
|
||||
m_reverseKeyTranslateTable[PADENTER ] = KX_PADENTER ;
|
||||
m_reverseKeyTranslateTable[PADPLUSKEY ] = KX_PADPLUSKEY ;
|
||||
m_reverseKeyTranslateTable[PAD0 ] = KX_PAD0;
|
||||
m_reverseKeyTranslateTable[PADMINUS ] = KX_PADMINUS;
|
||||
m_reverseKeyTranslateTable[PADENTER ] = KX_PADENTER;
|
||||
m_reverseKeyTranslateTable[PADPLUSKEY ] = KX_PADPLUSKEY;
|
||||
|
||||
|
||||
m_reverseKeyTranslateTable[F1KEY ] = KX_F1KEY ;
|
||||
m_reverseKeyTranslateTable[F2KEY ] = KX_F2KEY ;
|
||||
m_reverseKeyTranslateTable[F3KEY ] = KX_F3KEY ;
|
||||
m_reverseKeyTranslateTable[F4KEY ] = KX_F4KEY ;
|
||||
m_reverseKeyTranslateTable[F5KEY ] = KX_F5KEY ;
|
||||
m_reverseKeyTranslateTable[F6KEY ] = KX_F6KEY ;
|
||||
m_reverseKeyTranslateTable[F7KEY ] = KX_F7KEY ;
|
||||
m_reverseKeyTranslateTable[F8KEY ] = KX_F8KEY ;
|
||||
m_reverseKeyTranslateTable[F9KEY ] = KX_F9KEY ;
|
||||
m_reverseKeyTranslateTable[F10KEY ] = KX_F10KEY ;
|
||||
m_reverseKeyTranslateTable[F11KEY ] = KX_F11KEY ;
|
||||
m_reverseKeyTranslateTable[F12KEY ] = KX_F12KEY ;
|
||||
m_reverseKeyTranslateTable[F13KEY ] = KX_F13KEY ;
|
||||
m_reverseKeyTranslateTable[F14KEY ] = KX_F14KEY ;
|
||||
m_reverseKeyTranslateTable[F15KEY ] = KX_F15KEY ;
|
||||
m_reverseKeyTranslateTable[F16KEY ] = KX_F16KEY ;
|
||||
m_reverseKeyTranslateTable[F17KEY ] = KX_F17KEY ;
|
||||
m_reverseKeyTranslateTable[F18KEY ] = KX_F18KEY ;
|
||||
m_reverseKeyTranslateTable[F19KEY ] = KX_F19KEY ;
|
||||
m_reverseKeyTranslateTable[F1KEY ] = KX_F1KEY;
|
||||
m_reverseKeyTranslateTable[F2KEY ] = KX_F2KEY;
|
||||
m_reverseKeyTranslateTable[F3KEY ] = KX_F3KEY;
|
||||
m_reverseKeyTranslateTable[F4KEY ] = KX_F4KEY;
|
||||
m_reverseKeyTranslateTable[F5KEY ] = KX_F5KEY;
|
||||
m_reverseKeyTranslateTable[F6KEY ] = KX_F6KEY;
|
||||
m_reverseKeyTranslateTable[F7KEY ] = KX_F7KEY;
|
||||
m_reverseKeyTranslateTable[F8KEY ] = KX_F8KEY;
|
||||
m_reverseKeyTranslateTable[F9KEY ] = KX_F9KEY;
|
||||
m_reverseKeyTranslateTable[F10KEY ] = KX_F10KEY;
|
||||
m_reverseKeyTranslateTable[F11KEY ] = KX_F11KEY;
|
||||
m_reverseKeyTranslateTable[F12KEY ] = KX_F12KEY;
|
||||
m_reverseKeyTranslateTable[F13KEY ] = KX_F13KEY;
|
||||
m_reverseKeyTranslateTable[F14KEY ] = KX_F14KEY;
|
||||
m_reverseKeyTranslateTable[F15KEY ] = KX_F15KEY;
|
||||
m_reverseKeyTranslateTable[F16KEY ] = KX_F16KEY;
|
||||
m_reverseKeyTranslateTable[F17KEY ] = KX_F17KEY;
|
||||
m_reverseKeyTranslateTable[F18KEY ] = KX_F18KEY;
|
||||
m_reverseKeyTranslateTable[F19KEY ] = KX_F19KEY;
|
||||
|
||||
m_reverseKeyTranslateTable[PAUSEKEY ] = KX_PAUSEKEY ;
|
||||
m_reverseKeyTranslateTable[INSERTKEY ] = KX_INSERTKEY ;
|
||||
m_reverseKeyTranslateTable[HOMEKEY ] = KX_HOMEKEY ;
|
||||
m_reverseKeyTranslateTable[PAGEUPKEY ] = KX_PAGEUPKEY ;
|
||||
m_reverseKeyTranslateTable[PAGEDOWNKEY ] = KX_PAGEDOWNKEY ;
|
||||
m_reverseKeyTranslateTable[ENDKEY ] = KX_ENDKEY ;
|
||||
|
||||
|
||||
}
|
||||
m_reverseKeyTranslateTable[PAUSEKEY ] = KX_PAUSEKEY;
|
||||
m_reverseKeyTranslateTable[INSERTKEY ] = KX_INSERTKEY;
|
||||
m_reverseKeyTranslateTable[HOMEKEY ] = KX_HOMEKEY;
|
||||
m_reverseKeyTranslateTable[PAGEUPKEY ] = KX_PAGEUPKEY;
|
||||
m_reverseKeyTranslateTable[PAGEDOWNKEY ] = KX_PAGEDOWNKEY;
|
||||
m_reverseKeyTranslateTable[ENDKEY ] = KX_ENDKEY;
|
||||
}
|
||||
|
||||
virtual ~BL_BlenderInputDevice()
|
||||
{
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
KX_EnumInputs ToNative(unsigned short incode) {
|
||||
KX_EnumInputs ToNative(unsigned short incode) {
|
||||
return m_reverseKeyTranslateTable[incode];
|
||||
}
|
||||
|
||||
virtual bool IsPressed(SCA_IInputDevice::KX_EnumInputs inputcode)=0;
|
||||
// virtual const SCA_InputEvent& GetEventValue(SCA_IInputDevice::KX_EnumInputs inputcode)=0;
|
||||
// virtual const SCA_InputEvent& GetEventValue(SCA_IInputDevice::KX_EnumInputs inputcode)=0;
|
||||
virtual bool ConvertBlenderEvent(unsigned short incode,short val)=0;
|
||||
|
||||
|
||||
|
@ -88,7 +88,7 @@ protected:
|
||||
// --
|
||||
int m_tvtot;
|
||||
BL_DeformableGameObject* m_gameobj;
|
||||
double m_lastDeformUpdate;
|
||||
double m_lastDeformUpdate;
|
||||
|
||||
|
||||
#ifdef WITH_CXX_GUARDEDALLOC
|
||||
|
@ -46,8 +46,8 @@ class BL_ShapeDeformer : public BL_SkinDeformer
|
||||
{
|
||||
public:
|
||||
BL_ShapeDeformer(BL_DeformableGameObject *gameobj,
|
||||
Object *bmeshobj,
|
||||
RAS_MeshObject *mesh);
|
||||
Object *bmeshobj,
|
||||
RAS_MeshObject *mesh);
|
||||
|
||||
/* this second constructor is needed for making a mesh deformable on the fly. */
|
||||
BL_ShapeDeformer(BL_DeformableGameObject *gameobj,
|
||||
|
@ -679,7 +679,7 @@ void KX_BlenderSceneConverter::ResetPhysicsObjectsAnimationIpo(bool clearIpo)
|
||||
MEM_freeN( tmpicu );
|
||||
localDel_ipoCurve( tmpicu );
|
||||
}
|
||||
}
|
||||
}
|
||||
} else
|
||||
{ ipo = NULL; // XXX add_ipo(blenderObject->id.name+2, ID_OB);
|
||||
blenderObject->ipo = ipo;
|
||||
|
@ -942,7 +942,7 @@ void BL_ConvertActuators(char* maggiename,
|
||||
case ACT_2DFILTER:
|
||||
{
|
||||
bTwoDFilterActuator *_2dfilter = (bTwoDFilterActuator*) bact->data;
|
||||
SCA_2DFilterActuator *tmp = NULL;
|
||||
SCA_2DFilterActuator *tmp = NULL;
|
||||
|
||||
RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode;
|
||||
switch(_2dfilter->type)
|
||||
|
@ -52,19 +52,19 @@ private:
|
||||
|
||||
public:
|
||||
|
||||
SCA_2DFilterActuator(
|
||||
class SCA_IObject* gameobj,
|
||||
RAS_2DFilterManager::RAS_2DFILTER_MODE type,
|
||||
short flag,
|
||||
float float_arg,
|
||||
int int_arg,
|
||||
RAS_IRasterizer* rasterizer,
|
||||
SCA_IScene* scene);
|
||||
SCA_2DFilterActuator(
|
||||
class SCA_IObject* gameobj,
|
||||
RAS_2DFilterManager::RAS_2DFILTER_MODE type,
|
||||
short flag,
|
||||
float float_arg,
|
||||
int int_arg,
|
||||
RAS_IRasterizer* rasterizer,
|
||||
SCA_IScene* scene);
|
||||
|
||||
void SetShaderText(const char *text);
|
||||
virtual ~SCA_2DFilterActuator();
|
||||
virtual bool Update();
|
||||
virtual ~SCA_2DFilterActuator();
|
||||
virtual bool Update();
|
||||
|
||||
virtual CValue* GetReplica();
|
||||
virtual CValue* GetReplica();
|
||||
};
|
||||
#endif
|
||||
|
@ -207,10 +207,10 @@ bool SCA_RandomActuator::Update()
|
||||
sensible values. The termination condition states two
|
||||
things:
|
||||
1. s >= 0 is not allowed: to prevent the distro from
|
||||
getting a bias towards high values. This is a small
|
||||
getting a bias towards high values. This is a small
|
||||
correction, really, and might also be left out.
|
||||
2. s == 0 is not allowed: to prevent a division by zero
|
||||
when renormalising the drawn value to the desired
|
||||
when renormalising the drawn value to the desired
|
||||
distribution shape. As a side effect, the distro will
|
||||
never yield the exact mean.
|
||||
I am not sure whether this is consistent, since the error
|
||||
|
@ -192,7 +192,7 @@ static LRESULT CALLBACK screenSaverWindowProc(HWND hwnd, UINT uMsg, WPARAM wPara
|
||||
LONG dx = scr_save_mouse_pos.x - pt.x;
|
||||
LONG dy = scr_save_mouse_pos.y - pt.y;
|
||||
if (abs(dx) > SCR_SAVE_MOUSE_MOVE_THRESHOLD
|
||||
|| abs(dy) > SCR_SAVE_MOUSE_MOVE_THRESHOLD)
|
||||
|| abs(dy) > SCR_SAVE_MOUSE_MOVE_THRESHOLD)
|
||||
{
|
||||
close = TRUE;
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ class KX_NetworkEventManager : public SCA_EventManager
|
||||
|
||||
public:
|
||||
KX_NetworkEventManager(class SCA_LogicManager* logicmgr,
|
||||
class NG_NetworkDeviceInterface *ndi);
|
||||
class NG_NetworkDeviceInterface *ndi);
|
||||
virtual ~KX_NetworkEventManager ();
|
||||
|
||||
virtual void NextFrame();
|
||||
@ -51,7 +51,7 @@ public:
|
||||
|
||||
SCA_LogicManager* GetLogicManager() { return m_logicmgr; }
|
||||
class NG_NetworkDeviceInterface* GetNetworkDevice() {
|
||||
return m_ndi; }
|
||||
return m_ndi; }
|
||||
};
|
||||
|
||||
#endif //KX_NETWORK_EVENTMANAGER_H
|
||||
|
@ -111,7 +111,7 @@ KX_GameObject::KX_GameObject(
|
||||
m_pHitObject(NULL),
|
||||
m_actionManager(NULL),
|
||||
m_isDeformable(false)
|
||||
#ifdef WITH_PYTHON
|
||||
#ifdef WITH_PYTHON
|
||||
, m_attr_dict(NULL)
|
||||
#endif
|
||||
{
|
||||
|
@ -237,9 +237,9 @@ bool KX_ObjectActuator::Update()
|
||||
if (m_current_linear_factor > 1.0)
|
||||
m_current_linear_factor = 1.0;
|
||||
linV = m_current_linear_factor * m_linear_velocity;
|
||||
parent->setLinearVelocity(linV,(m_bitLocalFlag.LinearVelocity) != 0);
|
||||
parent->setLinearVelocity(linV,(m_bitLocalFlag.LinearVelocity) != 0);
|
||||
} else {
|
||||
parent->setLinearVelocity(m_linear_velocity,(m_bitLocalFlag.LinearVelocity) != 0);
|
||||
parent->setLinearVelocity(m_linear_velocity,(m_bitLocalFlag.LinearVelocity) != 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -260,7 +260,7 @@ bool KX_ObjectActuator::Update()
|
||||
if (m_current_angular_factor > 1.0)
|
||||
m_current_angular_factor = 1.0;
|
||||
angV = m_current_angular_factor * m_angular_velocity;
|
||||
parent->setAngularVelocity(angV,(m_bitLocalFlag.AngularVelocity) != 0);
|
||||
parent->setAngularVelocity(angV,(m_bitLocalFlag.AngularVelocity) != 0);
|
||||
} else {
|
||||
parent->setAngularVelocity(m_angular_velocity,(m_bitLocalFlag.AngularVelocity) != 0);
|
||||
}
|
||||
|
@ -51,6 +51,6 @@ void KX_OrientationInterpolator::Execute(float currentTime) const {
|
||||
MT_Scalar ss = si*sh;
|
||||
|
||||
m_target.setValue(cj*ch, sj*sc-cs, sj*cc+ss,
|
||||
cj*sh, sj*ss+cc, sj*cs-sc,
|
||||
-sj, cj*si, cj*ci);
|
||||
cj*sh, sj*ss+cc, sj*cs-sc,
|
||||
-sj, cj*si, cj*ci);
|
||||
}
|
||||
|
@ -187,7 +187,7 @@ void KX_PolygonMaterial::DefaultActivate(RAS_IRasterizer* rasty, TCachingInfo& c
|
||||
rasty->SetCullFace(true);
|
||||
|
||||
if ((m_drawingmode & RAS_IRasterizer::KX_LINES) ||
|
||||
(rasty->GetDrawingMode() <= RAS_IRasterizer::KX_WIREFRAME))
|
||||
(rasty->GetDrawingMode() <= RAS_IRasterizer::KX_WIREFRAME))
|
||||
rasty->SetLines(true);
|
||||
else
|
||||
rasty->SetLines(false);
|
||||
|
@ -57,7 +57,7 @@ class KX_TrackToActuator : public SCA_IActuator
|
||||
|
||||
public:
|
||||
KX_TrackToActuator(SCA_IObject* gameobj, SCA_IObject *ob, int time,
|
||||
bool threedee,int trackflag,int upflag);
|
||||
bool threedee,int trackflag,int upflag);
|
||||
virtual ~KX_TrackToActuator();
|
||||
virtual CValue* GetReplica() {
|
||||
KX_TrackToActuator* replica = new KX_TrackToActuator(*this);
|
||||
|
@ -52,8 +52,8 @@ public:
|
||||
virtual void NextFrame();
|
||||
|
||||
bool Connect(char *address, unsigned int port, char *password,
|
||||
unsigned int localport, unsigned int timeout) {
|
||||
return true;}
|
||||
unsigned int localport, unsigned int timeout) {
|
||||
return true;}
|
||||
bool Disconnect(void) {return true;}
|
||||
|
||||
virtual void SendNetworkMessage(class NG_NetworkMessage* msg);
|
||||
|
@ -64,7 +64,7 @@ public:
|
||||
bool IsOnline(void) { return m_online; }
|
||||
|
||||
virtual bool Connect(char *address, unsigned int port, char *password,
|
||||
unsigned int localport, unsigned int timeout)=0;
|
||||
unsigned int localport, unsigned int timeout)=0;
|
||||
virtual bool Disconnect(void)=0;
|
||||
|
||||
virtual void SendNetworkMessage(NG_NetworkMessage* msg)=0;
|
||||
|
@ -216,12 +216,12 @@ struct CcdConstructionInfo
|
||||
///more advanced collision filtering should be done in btCollisionDispatcher::NeedsCollision
|
||||
enum CollisionFilterGroups
|
||||
{
|
||||
DefaultFilter = 1,
|
||||
StaticFilter = 2,
|
||||
KinematicFilter = 4,
|
||||
DebrisFilter = 8,
|
||||
SensorFilter = 16,
|
||||
AllFilter = DefaultFilter | StaticFilter | KinematicFilter | DebrisFilter | SensorFilter,
|
||||
DefaultFilter = 1,
|
||||
StaticFilter = 2,
|
||||
KinematicFilter = 4,
|
||||
DebrisFilter = 8,
|
||||
SensorFilter = 16,
|
||||
AllFilter = DefaultFilter | StaticFilter | KinematicFilter | DebrisFilter | SensorFilter,
|
||||
};
|
||||
|
||||
|
||||
|
@ -2564,8 +2564,8 @@ int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl
|
||||
btPlaneSpace1( axisInA, axis1, axis2 );
|
||||
|
||||
frameInA.getBasis().setValue( axisInA.x(), axis1.x(), axis2.x(),
|
||||
axisInA.y(), axis1.y(), axis2.y(),
|
||||
axisInA.z(), axis1.z(), axis2.z() );
|
||||
axisInA.y(), axis1.y(), axis2.y(),
|
||||
axisInA.z(), axis1.z(), axis2.z() );
|
||||
|
||||
frameInA.setOrigin( pivotInA );
|
||||
|
||||
|
@ -164,7 +164,7 @@ protected:
|
||||
|
||||
virtual float getConstraintParam(int constraintId,int param);
|
||||
|
||||
virtual void removeConstraint(int constraintid);
|
||||
virtual void removeConstraint(int constraintid);
|
||||
|
||||
virtual float getAppliedImpulse(int constraintid);
|
||||
|
||||
|
@ -307,7 +307,7 @@ void RAS_2DFilterManager::SetupTextures(bool depth, bool luminance)
|
||||
glGenTextures(1, (GLuint*)&texname[1]);
|
||||
glBindTexture(GL_TEXTURE_2D, texname[1]);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, texturewidth,textureheight,
|
||||
0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE,NULL);
|
||||
0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE,NULL);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE,
|
||||
GL_NONE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
@ -433,6 +433,9 @@ void RAS_2DFilterManager::RenderFilters(RAS_ICanvas* canvas)
|
||||
glCopyTexImage2D(GL_TEXTURE_2D,0,GL_LUMINANCE16, 0, 0, texturewidth,textureheight, 0);
|
||||
}
|
||||
|
||||
// reverting to texunit 0, without this we get bug [#28462]
|
||||
glActiveTextureARB(GL_TEXTURE0);
|
||||
|
||||
glViewport(0,0, texturewidth, textureheight);
|
||||
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
|
@ -49,19 +49,19 @@ struct RAS_CameraData
|
||||
float m_focallength;
|
||||
|
||||
RAS_CameraData(float lens = 35.0, float scale = 6.0, float clipstart = 0.1, float clipend = 5000.0, bool perspective = true,
|
||||
float focallength = 3.0, bool viewport = false, int viewportleft = 0, int viewportbottom = 0,
|
||||
int viewportright = 0, int viewporttop = 0) :
|
||||
m_lens(lens),
|
||||
m_scale(scale),
|
||||
m_clipstart(clipstart),
|
||||
m_clipend(clipend),
|
||||
m_perspective(perspective),
|
||||
m_viewport(viewport),
|
||||
m_viewportleft(viewportleft),
|
||||
m_viewportbottom(viewportbottom),
|
||||
m_viewportright(viewportright),
|
||||
m_viewporttop(viewporttop),
|
||||
m_focallength(focallength)
|
||||
float focallength = 3.0, bool viewport = false, int viewportleft = 0, int viewportbottom = 0,
|
||||
int viewportright = 0, int viewporttop = 0) :
|
||||
m_lens(lens),
|
||||
m_scale(scale),
|
||||
m_clipstart(clipstart),
|
||||
m_clipend(clipend),
|
||||
m_perspective(perspective),
|
||||
m_viewport(viewport),
|
||||
m_viewportleft(viewportleft),
|
||||
m_viewportbottom(viewportbottom),
|
||||
m_viewportright(viewportright),
|
||||
m_viewporttop(viewporttop),
|
||||
m_focallength(focallength)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
@ -38,17 +38,17 @@ uniform vec2 bgl_TextureCoordinateOffset[9];
|
||||
|
||||
void main(void)
|
||||
{
|
||||
vec4 sample[9];
|
||||
vec4 sample[9];
|
||||
|
||||
for (int i = 0; i < 9; i++)
|
||||
{
|
||||
sample[i] = texture2D(bgl_RenderedTexture,
|
||||
gl_TexCoord[0].st + bgl_TextureCoordinateOffset[i]);
|
||||
}
|
||||
for (int i = 0; i < 9; i++)
|
||||
{
|
||||
sample[i] = texture2D(bgl_RenderedTexture,
|
||||
gl_TexCoord[0].st + bgl_TextureCoordinateOffset[i]);
|
||||
}
|
||||
|
||||
gl_FragColor = (sample[0] + (2.0*sample[1]) + sample[2] +
|
||||
(2.0*sample[3]) + sample[4] + (2.0*sample[5]) +
|
||||
sample[6] + (2.0*sample[7]) + sample[8]) / 13.0;
|
||||
gl_FragColor = (sample[0] + (2.0*sample[1]) + sample[2] +
|
||||
(2.0*sample[3]) + sample[4] + (2.0*sample[5]) +
|
||||
sample[6] + (2.0*sample[7]) + sample[8]) / 13.0;
|
||||
}
|
||||
);
|
||||
#endif
|
||||
|
@ -38,17 +38,17 @@ uniform vec2 bgl_TextureCoordinateOffset[9];
|
||||
|
||||
void main(void)
|
||||
{
|
||||
vec4 sample[9];
|
||||
vec4 maxValue = vec4(0.0);
|
||||
vec4 sample[9];
|
||||
vec4 maxValue = vec4(0.0);
|
||||
|
||||
for (int i = 0; i < 9; i++)
|
||||
{
|
||||
sample[i] = texture2D(bgl_RenderedTexture,
|
||||
gl_TexCoord[0].st + bgl_TextureCoordinateOffset[i]);
|
||||
maxValue = max(sample[i], maxValue);
|
||||
}
|
||||
for (int i = 0; i < 9; i++)
|
||||
{
|
||||
sample[i] = texture2D(bgl_RenderedTexture,
|
||||
gl_TexCoord[0].st + bgl_TextureCoordinateOffset[i]);
|
||||
maxValue = max(sample[i], maxValue);
|
||||
}
|
||||
|
||||
gl_FragColor = maxValue;
|
||||
gl_FragColor = maxValue;
|
||||
}
|
||||
);
|
||||
#endif
|
||||
|
@ -33,22 +33,22 @@
|
||||
#define __RAS_EROSION2DFILTER
|
||||
|
||||
const char * ErosionFragmentShader=STRINGIFY(
|
||||
uniform sampler2D bgl_RenderedTexture;
|
||||
uniform vec2 bgl_TextureCoordinateOffset[9];
|
||||
uniform sampler2D bgl_RenderedTexture;
|
||||
uniform vec2 bgl_TextureCoordinateOffset[9];
|
||||
|
||||
void main(void)
|
||||
{
|
||||
vec4 sample[9];
|
||||
vec4 minValue = vec4(1.0);
|
||||
vec4 sample[9];
|
||||
vec4 minValue = vec4(1.0);
|
||||
|
||||
for (int i = 0; i < 9; i++)
|
||||
{
|
||||
sample[i] = texture2D(bgl_RenderedTexture,
|
||||
gl_TexCoord[0].st + bgl_TextureCoordinateOffset[i]);
|
||||
minValue = min(sample[i], minValue);
|
||||
}
|
||||
for (int i = 0; i < 9; i++)
|
||||
{
|
||||
sample[i] = texture2D(bgl_RenderedTexture,
|
||||
gl_TexCoord[0].st + bgl_TextureCoordinateOffset[i]);
|
||||
minValue = min(sample[i], minValue);
|
||||
}
|
||||
|
||||
gl_FragColor = minValue;
|
||||
gl_FragColor = minValue;
|
||||
}
|
||||
);
|
||||
#endif
|
||||
|
@ -38,18 +38,18 @@ uniform vec2 bgl_TextureCoordinateOffset[9];
|
||||
|
||||
void main(void)
|
||||
{
|
||||
vec4 sample[9];
|
||||
vec4 sample[9];
|
||||
|
||||
for (int i = 0; i < 9; i++)
|
||||
{
|
||||
sample[i] = texture2D(bgl_RenderedTexture,
|
||||
gl_TexCoord[0].st + bgl_TextureCoordinateOffset[i]);
|
||||
}
|
||||
for (int i = 0; i < 9; i++)
|
||||
{
|
||||
sample[i] = texture2D(bgl_RenderedTexture,
|
||||
gl_TexCoord[0].st + bgl_TextureCoordinateOffset[i]);
|
||||
}
|
||||
|
||||
gl_FragColor = (sample[4] * 8.0) -
|
||||
(sample[0] + sample[1] + sample[2] +
|
||||
sample[3] + sample[5] +
|
||||
sample[6] + sample[7] + sample[8]);
|
||||
gl_FragColor = (sample[4] * 8.0) -
|
||||
(sample[0] + sample[1] + sample[2] +
|
||||
sample[3] + sample[5] +
|
||||
sample[6] + sample[7] + sample[8]);
|
||||
gl_FragColor = vec4(gl_FragColor.rgb, 1.0);
|
||||
}
|
||||
);
|
||||
|
@ -38,23 +38,23 @@ uniform vec2 bgl_TextureCoordinateOffset[9];
|
||||
|
||||
void main(void)
|
||||
{
|
||||
vec4 sample[9];
|
||||
vec4 sample[9];
|
||||
|
||||
for (int i = 0; i < 9; i++)
|
||||
{
|
||||
sample[i] = texture2D(bgl_RenderedTexture,
|
||||
gl_TexCoord[0].st + bgl_TextureCoordinateOffset[i]);
|
||||
}
|
||||
for (int i = 0; i < 9; i++)
|
||||
{
|
||||
sample[i] = texture2D(bgl_RenderedTexture,
|
||||
gl_TexCoord[0].st + bgl_TextureCoordinateOffset[i]);
|
||||
}
|
||||
|
||||
vec4 horizEdge = sample[2] + sample[5] + sample[8] -
|
||||
(sample[0] + sample[3] + sample[6]);
|
||||
vec4 horizEdge = sample[2] + sample[5] + sample[8] -
|
||||
(sample[0] + sample[3] + sample[6]);
|
||||
|
||||
vec4 vertEdge = sample[0] + sample[1] + sample[2] -
|
||||
(sample[6] + sample[7] + sample[8]);
|
||||
vec4 vertEdge = sample[0] + sample[1] + sample[2] -
|
||||
(sample[6] + sample[7] + sample[8]);
|
||||
|
||||
gl_FragColor.rgb = sqrt((horizEdge.rgb * horizEdge.rgb) +
|
||||
(vertEdge.rgb * vertEdge.rgb));
|
||||
gl_FragColor.a = 1.0;
|
||||
gl_FragColor.rgb = sqrt((horizEdge.rgb * horizEdge.rgb) +
|
||||
(vertEdge.rgb * vertEdge.rgb));
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
|
||||
);
|
||||
|
@ -38,18 +38,18 @@ uniform vec2 bgl_TextureCoordinateOffset[9];
|
||||
|
||||
void main(void)
|
||||
{
|
||||
vec4 sample[9];
|
||||
vec4 sample[9];
|
||||
|
||||
for (int i = 0; i < 9; i++)
|
||||
{
|
||||
sample[i] = texture2D(bgl_RenderedTexture,
|
||||
gl_TexCoord[0].st + bgl_TextureCoordinateOffset[i]);
|
||||
}
|
||||
for (int i = 0; i < 9; i++)
|
||||
{
|
||||
sample[i] = texture2D(bgl_RenderedTexture,
|
||||
gl_TexCoord[0].st + bgl_TextureCoordinateOffset[i]);
|
||||
}
|
||||
|
||||
gl_FragColor = (sample[4] * 9.0) -
|
||||
(sample[0] + sample[1] + sample[2] +
|
||||
sample[3] + sample[5] +
|
||||
sample[6] + sample[7] + sample[8]);
|
||||
gl_FragColor = (sample[4] * 9.0) -
|
||||
(sample[0] + sample[1] + sample[2] +
|
||||
sample[3] + sample[5] +
|
||||
sample[6] + sample[7] + sample[8]);
|
||||
}
|
||||
);
|
||||
#endif
|
||||
|
@ -38,23 +38,23 @@ uniform vec2 bgl_TextureCoordinateOffset[9];
|
||||
|
||||
void main(void)
|
||||
{
|
||||
vec4 sample[9];
|
||||
vec4 sample[9];
|
||||
|
||||
for (int i = 0; i < 9; i++)
|
||||
{
|
||||
sample[i] = texture2D(bgl_RenderedTexture,
|
||||
gl_TexCoord[0].st + bgl_TextureCoordinateOffset[i]);
|
||||
}
|
||||
for (int i = 0; i < 9; i++)
|
||||
{
|
||||
sample[i] = texture2D(bgl_RenderedTexture,
|
||||
gl_TexCoord[0].st + bgl_TextureCoordinateOffset[i]);
|
||||
}
|
||||
|
||||
vec4 horizEdge = sample[2] + (2.0*sample[5]) + sample[8] -
|
||||
(sample[0] + (2.0*sample[3]) + sample[6]);
|
||||
vec4 horizEdge = sample[2] + (2.0*sample[5]) + sample[8] -
|
||||
(sample[0] + (2.0*sample[3]) + sample[6]);
|
||||
|
||||
vec4 vertEdge = sample[0] + (2.0*sample[1]) + sample[2] -
|
||||
(sample[6] + (2.0*sample[7]) + sample[8]);
|
||||
vec4 vertEdge = sample[0] + (2.0*sample[1]) + sample[2] -
|
||||
(sample[6] + (2.0*sample[7]) + sample[8]);
|
||||
|
||||
gl_FragColor.rgb = sqrt((horizEdge.rgb * horizEdge.rgb) +
|
||||
(vertEdge.rgb * vertEdge.rgb));
|
||||
gl_FragColor.a = 1.0;
|
||||
gl_FragColor.rgb = sqrt((horizEdge.rgb * horizEdge.rgb) +
|
||||
(vertEdge.rgb * vertEdge.rgb));
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
);
|
||||
#endif
|
||||
|
@ -134,88 +134,88 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
SG_DList()
|
||||
{
|
||||
m_flink = m_blink = this;
|
||||
}
|
||||
SG_DList()
|
||||
{
|
||||
m_flink = m_blink = this;
|
||||
}
|
||||
SG_DList(const SG_DList& other)
|
||||
{
|
||||
m_flink = m_blink = this;
|
||||
m_flink = m_blink = this;
|
||||
}
|
||||
virtual ~SG_DList()
|
||||
{
|
||||
virtual ~SG_DList()
|
||||
{
|
||||
Delink();
|
||||
}
|
||||
}
|
||||
|
||||
inline bool Empty() // Check for empty queue
|
||||
{
|
||||
return ( m_flink == this );
|
||||
}
|
||||
bool AddBack( SG_DList *item ) // Add to the back
|
||||
{
|
||||
inline bool Empty() // Check for empty queue
|
||||
{
|
||||
return ( m_flink == this );
|
||||
}
|
||||
bool AddBack( SG_DList *item ) // Add to the back
|
||||
{
|
||||
if (!item->Empty())
|
||||
return false;
|
||||
item->m_blink = m_blink;
|
||||
item->m_flink = this;
|
||||
m_blink->m_flink = item;
|
||||
m_blink = item;
|
||||
item->m_blink = m_blink;
|
||||
item->m_flink = this;
|
||||
m_blink->m_flink = item;
|
||||
m_blink = item;
|
||||
return true;
|
||||
}
|
||||
bool AddFront( SG_DList *item ) // Add to the back
|
||||
{
|
||||
}
|
||||
bool AddFront( SG_DList *item ) // Add to the back
|
||||
{
|
||||
if (!item->Empty())
|
||||
return false;
|
||||
item->m_flink = m_flink;
|
||||
item->m_blink = this;
|
||||
m_flink->m_blink = item;
|
||||
m_flink = item;
|
||||
item->m_flink = m_flink;
|
||||
item->m_blink = this;
|
||||
m_flink->m_blink = item;
|
||||
m_flink = item;
|
||||
return true;
|
||||
}
|
||||
SG_DList *Remove() // Remove from the front
|
||||
{
|
||||
if (Empty())
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
SG_DList* item = m_flink;
|
||||
m_flink = item->m_flink;
|
||||
m_flink->m_blink = this;
|
||||
item->m_flink = item->m_blink = item;
|
||||
return item;
|
||||
}
|
||||
bool Delink() // Remove from the middle
|
||||
{
|
||||
}
|
||||
SG_DList *Remove() // Remove from the front
|
||||
{
|
||||
if (Empty())
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
SG_DList* item = m_flink;
|
||||
m_flink = item->m_flink;
|
||||
m_flink->m_blink = this;
|
||||
item->m_flink = item->m_blink = item;
|
||||
return item;
|
||||
}
|
||||
bool Delink() // Remove from the middle
|
||||
{
|
||||
if (Empty())
|
||||
return false;
|
||||
m_blink->m_flink = m_flink;
|
||||
m_flink->m_blink = m_blink;
|
||||
m_flink = m_blink = this;
|
||||
return true;
|
||||
}
|
||||
inline SG_DList *Peek() // Look at front without removing
|
||||
{
|
||||
return m_flink;
|
||||
}
|
||||
inline SG_DList *Back() // Look at front without removing
|
||||
{
|
||||
return m_blink;
|
||||
}
|
||||
inline SG_DList *Self()
|
||||
{
|
||||
return this;
|
||||
}
|
||||
inline const SG_DList *Peek() const // Look at front without removing
|
||||
{
|
||||
return (const SG_DList*)m_flink;
|
||||
}
|
||||
inline const SG_DList *Back() const // Look at front without removing
|
||||
{
|
||||
return (const SG_DList*)m_blink;
|
||||
}
|
||||
inline const SG_DList *Self() const
|
||||
{
|
||||
return this;
|
||||
}
|
||||
}
|
||||
inline SG_DList *Peek() // Look at front without removing
|
||||
{
|
||||
return m_flink;
|
||||
}
|
||||
inline SG_DList *Back() // Look at front without removing
|
||||
{
|
||||
return m_blink;
|
||||
}
|
||||
inline SG_DList *Self()
|
||||
{
|
||||
return this;
|
||||
}
|
||||
inline const SG_DList *Peek() const // Look at front without removing
|
||||
{
|
||||
return (const SG_DList*)m_flink;
|
||||
}
|
||||
inline const SG_DList *Back() const // Look at front without removing
|
||||
{
|
||||
return (const SG_DList*)m_blink;
|
||||
}
|
||||
inline const SG_DList *Self() const
|
||||
{
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
#ifdef WITH_CXX_GUARDEDALLOC
|
||||
|
@ -194,7 +194,7 @@ public:
|
||||
/**
|
||||
* Clear the array of pointers to controllers associated with
|
||||
* this node. This does not delete the controllers themselves!
|
||||
* This should be used very carefully to avoid memory
|
||||
* This should be used very carefully to avoid memory
|
||||
* leaks.
|
||||
*/
|
||||
|
||||
|
@ -91,71 +91,71 @@ public:
|
||||
};
|
||||
|
||||
SG_QList() : SG_DList()
|
||||
{
|
||||
m_fqlink = m_bqlink = this;
|
||||
}
|
||||
{
|
||||
m_fqlink = m_bqlink = this;
|
||||
}
|
||||
SG_QList(const SG_QList& other) : SG_DList()
|
||||
{
|
||||
m_fqlink = m_bqlink = this;
|
||||
m_fqlink = m_bqlink = this;
|
||||
}
|
||||
virtual ~SG_QList()
|
||||
{
|
||||
virtual ~SG_QList()
|
||||
{
|
||||
QDelink();
|
||||
}
|
||||
}
|
||||
|
||||
inline bool QEmpty() // Check for empty queue
|
||||
{
|
||||
return ( m_fqlink == this );
|
||||
}
|
||||
bool QAddBack( SG_QList *item ) // Add to the back
|
||||
{
|
||||
inline bool QEmpty() // Check for empty queue
|
||||
{
|
||||
return ( m_fqlink == this );
|
||||
}
|
||||
bool QAddBack( SG_QList *item ) // Add to the back
|
||||
{
|
||||
if (!item->QEmpty())
|
||||
return false;
|
||||
item->m_bqlink = m_bqlink;
|
||||
item->m_fqlink = this;
|
||||
m_bqlink->m_fqlink = item;
|
||||
m_bqlink = item;
|
||||
item->m_bqlink = m_bqlink;
|
||||
item->m_fqlink = this;
|
||||
m_bqlink->m_fqlink = item;
|
||||
m_bqlink = item;
|
||||
return true;
|
||||
}
|
||||
bool QAddFront( SG_QList *item ) // Add to the back
|
||||
{
|
||||
}
|
||||
bool QAddFront( SG_QList *item ) // Add to the back
|
||||
{
|
||||
if (!item->Empty())
|
||||
return false;
|
||||
item->m_fqlink = m_fqlink;
|
||||
item->m_bqlink = this;
|
||||
m_fqlink->m_bqlink = item;
|
||||
m_fqlink = item;
|
||||
item->m_fqlink = m_fqlink;
|
||||
item->m_bqlink = this;
|
||||
m_fqlink->m_bqlink = item;
|
||||
m_fqlink = item;
|
||||
return true;
|
||||
}
|
||||
SG_QList *QRemove() // Remove from the front
|
||||
{
|
||||
if (QEmpty())
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
SG_QList* item = m_fqlink;
|
||||
m_fqlink = item->m_fqlink;
|
||||
m_fqlink->m_bqlink = this;
|
||||
item->m_fqlink = item->m_bqlink = item;
|
||||
return item;
|
||||
}
|
||||
bool QDelink() // Remove from the middle
|
||||
{
|
||||
}
|
||||
SG_QList *QRemove() // Remove from the front
|
||||
{
|
||||
if (QEmpty())
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
SG_QList* item = m_fqlink;
|
||||
m_fqlink = item->m_fqlink;
|
||||
m_fqlink->m_bqlink = this;
|
||||
item->m_fqlink = item->m_bqlink = item;
|
||||
return item;
|
||||
}
|
||||
bool QDelink() // Remove from the middle
|
||||
{
|
||||
if (QEmpty())
|
||||
return false;
|
||||
m_bqlink->m_fqlink = m_fqlink;
|
||||
m_fqlink->m_bqlink = m_bqlink;
|
||||
m_fqlink = m_bqlink = this;
|
||||
return true;
|
||||
}
|
||||
inline SG_QList *QPeek() // Look at front without removing
|
||||
{
|
||||
return m_fqlink;
|
||||
}
|
||||
inline SG_QList *QBack() // Look at front without removing
|
||||
{
|
||||
return m_bqlink;
|
||||
}
|
||||
}
|
||||
inline SG_QList *QPeek() // Look at front without removing
|
||||
{
|
||||
return m_fqlink;
|
||||
}
|
||||
inline SG_QList *QBack() // Look at front without removing
|
||||
{
|
||||
return m_bqlink;
|
||||
}
|
||||
|
||||
|
||||
#ifdef WITH_CXX_GUARDEDALLOC
|
||||
|
@ -115,7 +115,7 @@ UpdateSpatialData(
|
||||
const SG_Spatial *parent,
|
||||
double time,
|
||||
bool& parentUpdated
|
||||
){
|
||||
){
|
||||
bool bComputesWorldTransform = false;
|
||||
|
||||
// update spatial controllers
|
||||
|
@ -122,11 +122,11 @@ public:
|
||||
desc = m_description;
|
||||
}
|
||||
|
||||
void registerDesc(void)
|
||||
{
|
||||
if (std::find(m_expDescs.begin(), m_expDescs.end(), this) == m_expDescs.end())
|
||||
m_expDescs.push_back(this);
|
||||
}
|
||||
void registerDesc(void)
|
||||
{
|
||||
if (std::find(m_expDescs.begin(), m_expDescs.end(), this) == m_expDescs.end())
|
||||
m_expDescs.push_back(this);
|
||||
}
|
||||
// list of exception descriptions
|
||||
static std::vector<ExpDesc*> m_expDescs;
|
||||
|
||||
|
@ -375,7 +375,7 @@ void Image_dealloc (PyImage * self)
|
||||
if (self->m_image->m_exports > 0)
|
||||
{
|
||||
PyErr_SetString(PyExc_SystemError,
|
||||
"deallocated Image object has exported buffers");
|
||||
"deallocated Image object has exported buffers");
|
||||
PyErr_Print();
|
||||
}
|
||||
// if release requires deleting of object, do it
|
||||
|
@ -329,10 +329,10 @@ static int ImageRender_init (PyObject * pySelf, PyObject * args, PyObject * kwds
|
||||
PyObject * getBackground (PyImage * self, void * closure)
|
||||
{
|
||||
return Py_BuildValue("[BBBB]",
|
||||
getImageRender(self)->getBackground(0),
|
||||
getImageRender(self)->getBackground(1),
|
||||
getImageRender(self)->getBackground(2),
|
||||
getImageRender(self)->getBackground(3));
|
||||
getImageRender(self)->getBackground(0),
|
||||
getImageRender(self)->getBackground(1),
|
||||
getImageRender(self)->getBackground(2),
|
||||
getImageRender(self)->getBackground(3));
|
||||
}
|
||||
|
||||
// set color
|
||||
|
Loading…
Reference in New Issue
Block a user