[Bf-blender-cvs] [be0f12f] framebuffer: From review: use BPY_GPU_OFFSCREEN_CHECK_INT/OBJ and use PyC_ParseBool
Dalai Felinto
noreply at git.blender.org
Fri Oct 9 16:42:20 CEST 2015
Commit: be0f12f2fb4e6c13fff947e022f73c3474653ef0
Author: Dalai Felinto
Date: Fri Oct 9 10:47:13 2015 -0300
Branches: framebuffer
https://developer.blender.org/rBbe0f12f2fb4e6c13fff947e022f73c3474653ef0
>From review: use BPY_GPU_OFFSCREEN_CHECK_INT/OBJ and use PyC_ParseBool
===================================================================
M source/blender/python/intern/gpu_offscreen.c
===================================================================
diff --git a/source/blender/python/intern/gpu_offscreen.c b/source/blender/python/intern/gpu_offscreen.c
index d28b65b..f4f90df 100644
--- a/source/blender/python/intern/gpu_offscreen.c
+++ b/source/blender/python/intern/gpu_offscreen.c
@@ -56,11 +56,18 @@
#include "bpy_util.h"
+#include "../generic/py_capi_utils.h"
+
#include "gpu.h"
/* -------------------------------------------------------------------- */
/* GPU Offscreen PyObject */
+#define BPY_GPU_OFFSCREEN_CHECK_OBJ(self) \
+ if (UNLIKELY(self->ofs == NULL)) { return NULL; } (void)0
+#define BPY_GPU_OFFSCREEN_CHECK_INT(self) \
+ if (UNLIKELY(self->ofs == NULL)) { return PyLong_FromLong(-1); } (void)0
+
/* annoying since arg parsing won't check overflow */
#define UINT_IS_NEG(n) ((n) > INT_MAX)
@@ -72,29 +79,33 @@ typedef struct {
PyDoc_STRVAR(pygpu_offscreen_width_doc, "Texture width.\n\n:type: GLsizei");
static PyObject *pygpu_offscreen_width_get(PyGPUOffScreen *self, void *UNUSED(type))
{
+ BPY_GPU_OFFSCREEN_CHECK_INT(self);
return PyLong_FromLong(GPU_offscreen_width(self->ofs));
}
PyDoc_STRVAR(pygpu_offscreen_height_doc, "Texture height.\n\n:type: GLsizei");
static PyObject *pygpu_offscreen_height_get(PyGPUOffScreen *self, void *UNUSED(type))
{
+ BPY_GPU_OFFSCREEN_CHECK_INT(self);
return PyLong_FromLong(GPU_offscreen_height(self->ofs));
}
PyDoc_STRVAR(pygpu_offscreen_framebuffer_object_doc, "Framebuffer object.\n\n:type: GLuint");
static PyObject *pygpu_offscreen_framebuffer_object_get(PyGPUOffScreen *self, void *UNUSED(type))
{
+ BPY_GPU_OFFSCREEN_CHECK_INT(self);
return PyLong_FromLong(GPU_offscreen_fb_object(self->ofs));
}
PyDoc_STRVAR(pygpu_offscreen_color_object_doc, "Color object.\n\n:type: GLuint");
static PyObject *pygpu_offscreen_color_object_get(PyGPUOffScreen *self, void *UNUSED(type))
{
+ BPY_GPU_OFFSCREEN_CHECK_INT(self);
return PyLong_FromLong(GPU_offscreen_color_object(self->ofs));
}
PyDoc_STRVAR(pygpu_offscreen_bind_doc,
-"bind(save)\n"
+"bind(save=True)\n"
"\n"
" Bind the offscreen object.\n"
"\n"
@@ -103,18 +114,24 @@ PyDoc_STRVAR(pygpu_offscreen_bind_doc,
);
static PyObject *pygpu_offscreen_bind(PyGPUOffScreen *self, PyObject *args, PyObject *kwds)
{
- int save;
+ bool save = true;
static const char *kwlist[] = {"save", NULL};
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "i:bind", (char **)(kwlist), &save))
+ BPY_GPU_OFFSCREEN_CHECK_OBJ(self);
+
+ if (!PyArg_ParseTupleAndKeywords(
+ args, kwds, "|O&:bind", (char **)(kwlist),
+ PyC_ParseBool, &save))
+ {
return NULL;
+ }
GPU_offscreen_bind(self->ofs, save);
Py_RETURN_NONE;
}
PyDoc_STRVAR(pygpu_offscreen_unbind_doc,
-"unbind(restore)\n"
+"unbind(restore=True)\n"
"\n"
" Unbind the offscreen object.\n"
"\n"
@@ -123,11 +140,17 @@ PyDoc_STRVAR(pygpu_offscreen_unbind_doc,
);
static PyObject *pygpu_offscreen_unbind(PyGPUOffScreen *self, PyObject *args, PyObject *kwds)
{
- int restore;
+ bool restore = true;
static const char *kwlist[] = {"restore", NULL};
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "i:unbind", (char **)(kwlist), &restore))
+ BPY_GPU_OFFSCREEN_CHECK_OBJ(self);
+
+ if (!PyArg_ParseTupleAndKeywords(
+ args, kwds, "|O&:unbind", (char **)(kwlist),
+ PyC_ParseBool, &restore))
+ {
return NULL;
+ }
GPU_offscreen_unbind(self->ofs, restore);
Py_RETURN_NONE;
@@ -173,6 +196,8 @@ static PyObject *pygpu_offscreen_draw(PyGPUOffScreen *self, PyObject *args, PyOb
static const char *kwlist[] = {"projection_matrix", "modelview_matrix", NULL};
+ BPY_GPU_OFFSCREEN_CHECK_OBJ(self);
+
if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO:draw", (char **)(kwlist),
&PyProjectionMatrix, &PyModelViewMatrix))
return NULL;
@@ -197,6 +222,8 @@ PyDoc_STRVAR(pygpu_offscreen_free_doc,
);
static PyObject *pygpu_offscreen_free(PyGPUOffScreen *self)
{
+ BPY_GPU_OFFSCREEN_CHECK_OBJ(self);
+
GPU_offscreen_free(self->ofs);
self->ofs = NULL;
Py_RETURN_NONE;
More information about the Bf-blender-cvs
mailing list