From 2190e6de0e971b5267925e609b73f0ce4931b02b Mon Sep 17 00:00:00 2001 From: Tamito Kajiyama Date: Sun, 3 Nov 2013 14:24:02 +0000 Subject: Fix for missing calls of BaseMath_ReadCallback() when accessing vector/color elements. This bug was causing wrong color blending results in Freestyle color modifiers. Problem report from Light BWK through personal communications, thanks! --- .../blender/freestyle/intern/python/BPy_Convert.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'source/blender/freestyle') diff --git a/source/blender/freestyle/intern/python/BPy_Convert.cpp b/source/blender/freestyle/intern/python/BPy_Convert.cpp index 3b1232c51af..bb907ec572c 100644 --- a/source/blender/freestyle/intern/python/BPy_Convert.cpp +++ b/source/blender/freestyle/intern/python/BPy_Convert.cpp @@ -556,6 +556,8 @@ Vec2f *Vec2f_ptr_from_Vector(PyObject *obj) { if (!VectorObject_Check(obj) || ((VectorObject *)obj)->size != 2) return NULL; + if (BaseMath_ReadCallback((BaseMathObject *)obj) == -1) + return NULL; float x = ((VectorObject *)obj)->vec[0]; float y = ((VectorObject *)obj)->vec[1]; return new Vec2f(x, y); @@ -565,6 +567,8 @@ Vec3f *Vec3f_ptr_from_Vector(PyObject *obj) { if (!VectorObject_Check(obj) || ((VectorObject *)obj)->size != 3) return NULL; + if (BaseMath_ReadCallback((BaseMathObject *)obj) == -1) + return NULL; float x = ((VectorObject *)obj)->vec[0]; float y = ((VectorObject *)obj)->vec[1]; float z = ((VectorObject *)obj)->vec[2]; @@ -575,6 +579,8 @@ Vec3r *Vec3r_ptr_from_Vector(PyObject *obj) { if (!VectorObject_Check(obj) || ((VectorObject *)obj)->size != 3) return NULL; + if (BaseMath_ReadCallback((BaseMathObject *)obj) == -1) + return NULL; real x = ((VectorObject *)obj)->vec[0]; real y = ((VectorObject *)obj)->vec[1]; real z = ((VectorObject *)obj)->vec[2]; @@ -585,6 +591,8 @@ Vec3f *Vec3f_ptr_from_Color(PyObject *obj) { if (!ColorObject_Check(obj)) return NULL; + if (BaseMath_ReadCallback((BaseMathObject *)obj) == -1) + return NULL; float r = ((ColorObject *)obj)->col[0]; float g = ((ColorObject *)obj)->col[1]; float b = ((ColorObject *)obj)->col[2]; @@ -595,6 +603,8 @@ Vec3r *Vec3r_ptr_from_Color(PyObject *obj) { if (!ColorObject_Check(obj)) return NULL; + if (BaseMath_ReadCallback((BaseMathObject *)obj) == -1) + return NULL; real r = ((ColorObject *)obj)->col[0]; real g = ((ColorObject *)obj)->col[1]; real b = ((ColorObject *)obj)->col[2]; @@ -696,10 +706,19 @@ Vec3r *Vec3r_ptr_from_PyTuple(PyObject *obj) int float_array_from_PyObject(PyObject *obj, float *v, int n) { if (VectorObject_Check(obj) && ((VectorObject *)obj)->size == n) { + if (BaseMath_ReadCallback((BaseMathObject *)obj) == -1) + return 0; for (int i = 0; i < n; i++) v[i] = ((VectorObject *)obj)->vec[i]; return 1; } + else if (ColorObject_Check(obj) && n == 3) { + if (BaseMath_ReadCallback((BaseMathObject *)obj) == -1) + return 0; + for (int i = 0; i < n; i++) + v[i] = ((ColorObject *)obj)->col[i]; + return 1; + } else if (PyList_Check(obj) && PyList_Size(obj) == n) { return float_array_from_PyList(obj, v, n); } -- cgit v1.2.3