Commit: 76df3c1b07cc2e078d6dc92ea7f6106b74b20c3b
Author: Dalai Felinto
Date: Tue Sep 29 14:38:32 2015 -0300
Branches: framebuffer
https://developer.blender.org/rB76df3c1b07cc2e078d6dc92ea7f6106b74b20c3b
gpu.offscreen_object_draw()
I could not get the bContext from a PyObject, so I am instead using
BPy_GetContext()
===================================================================
M source/blender/python/intern/gpu.c
M source/blender/python/intern/gpu.h
M source/blender/python/intern/gpu_offscreen.c
===================================================================
diff --git a/source/blender/python/intern/gpu.c
b/source/blender/python/intern/gpu.c
index d7da160..c073785 100644
--- a/source/blender/python/intern/gpu.c
+++ b/source/blender/python/intern/gpu.c
@@ -333,6 +333,7 @@ PyObject *GPU_initPython(void)
PyModule_AddObject(module, "offscreen_object_bind", (PyObject
*)PyCFunction_New(meth_offscreen_object_bind, NULL));
PyModule_AddObject(module, "offscreen_object_create", (PyObject
*)PyCFunction_New(meth_offscreen_object_create, NULL));
+ PyModule_AddObject(module, "offscreen_object_draw", (PyObject
*)PyCFunction_New(meth_offscreen_object_draw, NULL));
PyModule_AddObject(module, "offscreen_object_free", (PyObject
*)PyCFunction_New(meth_offscreen_object_free, NULL));
PyModule_AddObject(module, "offscreen_object_unbind", (PyObject
*)PyCFunction_New(meth_offscreen_object_unbind, NULL));
diff --git a/source/blender/python/intern/gpu.h
b/source/blender/python/intern/gpu.h
index d354eb7..fb33b48 100644
--- a/source/blender/python/intern/gpu.h
+++ b/source/blender/python/intern/gpu.h
@@ -40,6 +40,7 @@ extern PyTypeObject PyGPUOffScreen_Type;
extern PyMethodDef meth_offscreen_object_bind[];
extern PyMethodDef meth_offscreen_object_create[];
+extern PyMethodDef meth_offscreen_object_draw[];
extern PyMethodDef meth_offscreen_object_free[];
extern PyMethodDef meth_offscreen_object_unbind[];
diff --git a/source/blender/python/intern/gpu_offscreen.c
b/source/blender/python/intern/gpu_offscreen.c
index df8cd18..5532532 100644
--- a/source/blender/python/intern/gpu_offscreen.c
+++ b/source/blender/python/intern/gpu_offscreen.c
@@ -54,6 +54,8 @@
#include "../mathutils/mathutils.h"
+#include "bpy_util.h"
+
#include "gpu.h"
/* -------------------------------------------------------------------- */
@@ -295,3 +297,66 @@ static PyObject *GPU_offscreen_object_unbind(PyObject
*UNUSED(self), PyObject *a
PyMethodDef meth_offscreen_object_unbind[] = {
{"offscreen_object_unbind", (PyCFunction)GPU_offscreen_object_unbind,
METH_VARARGS | METH_KEYWORDS, GPU_offscreen_object_unbind_doc}
};
+
+static bool gpu_offscreen_check_matrix(MatrixObject *PyMat, const char
*UNUSED(name))
+{
+ if (!MatrixObject_Check(PyMat)) {
+ PyErr_SetString(PyExc_TypeError, "matrix could not be converted
to a matrix (sequence of sequences)");
+ return false;
+ }
+
+ if (BaseMath_ReadCallback(PyMat) == -1) {
+ PyErr_SetString(PyExc_TypeError, "matrix data could not be
accessed");
+ return false;
+ }
+
+ if ((PyMat->num_col != 4) ||
+ (PyMat->num_row != 4))
+ {
+ PyErr_SetString(PyExc_TypeError, "matrix need to have 4 rows
and 4 columns");
+ return false;
+ }
+
+ return true;
+}
+
+PyDoc_STRVAR(GPU_offscreen_object_draw_doc,
+"offscreen_object_unbind(offscreen_object, modelview_matrix,
projection_matrix)\n"
+"\n"
+" Unbind an offscreen object.\n"
+"\n"
+" :param offscreen_object: offscreen object\n"
+" :type offscreen_object: :class:`gpu.OffScreenObject`\n"
+" :param modelview_matrix: ModelView Matrix\n"
+" :type modelview_matrix: :class:`bgl.Matrix`\n"
+" :param projection_matrix: Projection Matrix\n"
+" :type projection_matrix: :class:`bgl.Matrix`"
+);
+static PyObject *GPU_offscreen_object_draw(PyObject *UNUSED(self), PyObject
*args, PyObject *kwds)
+{
+ PyGPUOffScreen *PyOfs;
+ MatrixObject *PyModelViewMatrix;
+ MatrixObject *PyProjectionMatrix;
+ bContext *C;
+
+ static const char *kwlist[] = {"offscreen_object", "projection_matrix",
"modelview_matrix", NULL};
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds,
"OOO:offscreen_object_draw", (char **)(kwlist),
+ &PyOfs, &PyProjectionMatrix,
&PyModelViewMatrix))
+ return NULL;
+
+ if ((!gpu_offscreen_check_matrix(PyProjectionMatrix,
"projection_matrix")) ||
+ (!gpu_offscreen_check_matrix(PyModelViewMatrix,
"modelview_matrix")))
+ {
+ return NULL;
+ }
+
+ C = BPy_GetContext();
+ GPU_offscreen_draw(PyOfs->ofs, C,
(float(*)[4])PyProjectionMatrix->matrix,
(float(*)[4])PyModelViewMatrix->matrix);
+
+ Py_RETURN_NONE;
+}
+
+PyMethodDef meth_offscreen_object_draw[] = {
+ {"offscreen_object_draw", (PyCFunction)GPU_offscreen_object_draw,
METH_VARARGS | METH_KEYWORDS, GPU_offscreen_object_draw_doc}
+};
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs