[Bf-blender-cvs] [85915ae1aad] master: Python API: allow passing None to some BGL functions instead of bgl.Buffer

Brecht Van Lommel noreply at git.blender.org
Tue Mar 26 19:58:25 CET 2019


Commit: 85915ae1aad761fc79eccf005e68a2334ad6b81c
Author: Brecht Van Lommel
Date:   Tue Mar 26 19:48:44 2019 +0100
Branches: master
https://developer.blender.org/rB85915ae1aad761fc79eccf005e68a2334ad6b81c

Python API: allow passing None to some BGL functions instead of bgl.Buffer

Many OpenGL functions take NULL pointers, passing those was quite complicated
with some addons even using ctypes to manipulate internal bgl.Buffer pointers.

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

M	source/blender/python/generic/bgl.c

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

diff --git a/source/blender/python/generic/bgl.c b/source/blender/python/generic/bgl.c
index 08280248649..13342b7dac8 100644
--- a/source/blender/python/generic/bgl.c
+++ b/source/blender/python/generic/bgl.c
@@ -132,9 +132,9 @@
 #define GLclampfP_def(number) Buffer *bgl_buffer##number
 #endif
 
-#define GLvoidP_str     "O!"
-#define GLvoidP_var(number) (bgl_buffer##number)->buf.asvoid
-#define GLvoidP_ref(number) &BGL_bufferType, &bgl_buffer##number
+#define GLvoidP_str     "O&"
+#define GLvoidP_var(number) ((bgl_buffer##number) ? (bgl_buffer##number)->buf.asvoid : NULL)
+#define GLvoidP_ref(number) BGL_BufferOrNoneConverter, &bgl_buffer##number
 #define GLvoidP_def(number) Buffer *bgl_buffer##number
 
 #define GLsizeiP_str     "O!"
@@ -703,6 +703,22 @@ Buffer *BGL_MakeBuffer(int type, int ndimensions, int *dimensions, void *initbuf
 	return buffer;
 }
 
+/* Custom converter function so we can support a buffer or NULL. */
+static int BGL_BufferOrNoneConverter(PyObject *object, Buffer **buffer)
+{
+	if (object == Py_None) {
+		*buffer = NULL;
+		return 1;
+	}
+	else if (PyObject_TypeCheck(object, &BGL_bufferType)) {
+		*buffer = (Buffer *)object;
+		return 1;
+	}
+	else {
+		PyErr_SetString(PyExc_TypeError, "expected a bgl.Buffer or None");
+		return 0;
+	}
+}
 
 #define MAX_DIMENSIONS  256
 static PyObject *Buffer_new(PyTypeObject *UNUSED(type), PyObject *args, PyObject *kwds)



More information about the Bf-blender-cvs mailing list