[Bf-blender-cvs] [29602498de1] pygpu_extensions: Transform the 'viewport' getsetter of the 'GPUFrameBuffer' into 'viewport_get' and 'viewport_set' methods

Germano Cavalcante noreply at git.blender.org
Fri Feb 12 16:17:21 CET 2021


Commit: 29602498de17554f28bbe4687731e7d90ef6d240
Author: Germano Cavalcante
Date:   Thu Feb 11 16:55:07 2021 -0300
Branches: pygpu_extensions
https://developer.blender.org/rB29602498de17554f28bbe4687731e7d90ef6d240

Transform the 'viewport' getsetter of the 'GPUFrameBuffer' into 'viewport_get' and 'viewport_set' methods

===================================================================

M	source/blender/python/gpu/gpu_py_framebuffer.c

===================================================================

diff --git a/source/blender/python/gpu/gpu_py_framebuffer.c b/source/blender/python/gpu/gpu_py_framebuffer.c
index 62b2a011c92..5551462e5be 100644
--- a/source/blender/python/gpu/gpu_py_framebuffer.c
+++ b/source/blender/python/gpu/gpu_py_framebuffer.c
@@ -292,49 +292,6 @@ static PyObject *py_framebuffer_new(PyTypeObject *UNUSED(self), PyObject *args,
   return BPyGPUFrameBuffer_CreatePyObject(fb_python);
 }
 
-static PyObject *py_framebuffer_viewport_get(BPyGPUFrameBuffer *self, void *UNUSED(type))
-{
-  PY_FRAMEBUFFER_CHECK_OBJ(self);
-  int viewport[4];
-  GPU_framebuffer_viewport_get(self->fb, viewport);
-
-  PyObject *ret = PyTuple_New(4);
-  PyTuple_SET_ITEMS(ret,
-                    PyLong_FromLong(viewport[0]),
-                    PyLong_FromLong(viewport[1]),
-                    PyLong_FromLong(viewport[2]),
-                    PyLong_FromLong(viewport[3]));
-  return ret;
-}
-
-static int py_framebuffer_viewport_set(BPyGPUFrameBuffer *self,
-                                       PyObject *py_values,
-                                       void *UNUSED(type))
-{
-  int viewport[4];
-
-  if (!PySequence_Check(py_values)) {
-    return -1;
-  }
-
-  if (PySequence_Size(py_values) != 4) {
-    PyErr_SetString(PyExc_AttributeError, "An array of length 4 is required");
-    return -1;
-  }
-
-  for (int i = 0; i < 4; i++) {
-    PyObject *ob = PySequence_GetItem(py_values, i);
-    viewport[i] = PyLong_AsLong(ob);
-    Py_DECREF(ob);
-    if (PyErr_Occurred()) {
-      return -1;
-    }
-  }
-
-  GPU_framebuffer_viewport_set(self->fb, UNPACK4(viewport));
-  return 0;
-}
-
 PyDoc_STRVAR(py_framebuffer_is_bound_doc,
              ".. method:: is_bound()\n"
              "\n"
@@ -420,6 +377,45 @@ static PyObject *py_framebuffer_clear(BPyGPUFrameBuffer *self, PyObject *args, P
   Py_RETURN_NONE;
 }
 
+PyDoc_STRVAR(py_framebuffer_viewport_set_doc,
+             ".. function:: viewport_set(x, y, xsize, ysize)\n"
+             "\n"
+             "   Set the viewport for this framebuffer object.\n"
+             "   Note: The viewport state is not saved upon framebuffer rebind.\n"
+             "\n"
+             "   :param x, y: lower left corner of the viewport_set rectangle, in pixels.\n"
+             "   :param xsize, ysize: width and height of the viewport_set.\n"
+             "   :type x, y, xsize, ysize: `int`\n");
+static int py_framebuffer_viewport_set(BPyGPUFrameBuffer *self, PyObject *args, void *UNUSED(type))
+{
+  int x, y, xsize, ysize;
+  if (!PyArg_ParseTuple(args, "iiii:viewport_set", &x, &y, &xsize, &ysize)) {
+    return NULL;
+  }
+
+  GPU_framebuffer_viewport_set(self->fb, x, y, xsize, ysize);
+  Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(py_framebuffer_viewport_get_doc,
+             ".. function:: viewport_get()\n"
+             "\n"
+             "   Returns position and dimension to current viewport.\n");
+static PyObject *py_framebuffer_viewport_get(BPyGPUFrameBuffer *self, void *UNUSED(type))
+{
+  PY_FRAMEBUFFER_CHECK_OBJ(self);
+  int viewport[4];
+  GPU_framebuffer_viewport_get(self->fb, viewport);
+
+  PyObject *ret = PyTuple_New(4);
+  PyTuple_SET_ITEMS(ret,
+                    PyLong_FromLong(viewport[0]),
+                    PyLong_FromLong(viewport[1]),
+                    PyLong_FromLong(viewport[2]),
+                    PyLong_FromLong(viewport[3]));
+  return ret;
+}
+
 static void BPyGPUFrameBuffer__tp_dealloc(BPyGPUFrameBuffer *self)
 {
   py_framebuffer_free_if_possible(self->fb);
@@ -427,11 +423,6 @@ static void BPyGPUFrameBuffer__tp_dealloc(BPyGPUFrameBuffer *self)
 }
 
 static PyGetSetDef py_framebuffer_getseters[] = {
-    {"viewport",
-     (getter)py_framebuffer_viewport_get,
-     (setter)py_framebuffer_viewport_set,
-     NULL,
-     NULL},
     {"is_bound", (getter)py_framebuffer_is_bound, (setter)NULL, py_framebuffer_is_bound_doc, NULL},
     {NULL, NULL, NULL, NULL, NULL} /* Sentinel */
 };
@@ -443,6 +434,14 @@ static struct PyMethodDef py_framebuffer_methods[] = {
      (PyCFunction)py_framebuffer_clear,
      METH_VARARGS | METH_KEYWORDS,
      py_framebuffer_clear_doc},
+    {"viewport_set",
+     (PyCFunction)py_framebuffer_viewport_set,
+     METH_NOARGS,
+     py_framebuffer_viewport_set_doc},
+    {"viewport_get",
+     (PyCFunction)py_framebuffer_viewport_get,
+     METH_VARARGS,
+     py_framebuffer_viewport_get_doc},
     {NULL, NULL, 0, NULL},
 };



More information about the Bf-blender-cvs mailing list