Commit: 6d04e48539ce50f0de9cc73a36e7733aee608773
Author: mano-wii
Date:   Wed Sep 5 21:10:42 2018 -0300
Branches: blender2.8
https://developer.blender.org/rB6d04e48539ce50f0de9cc73a36e7733aee608773

Join the python modules `gpu` and `_gpu` into one.

Maybe it's still early to set the new drawing api for python.
But joining these two modules is an initial step.

```
>>> gpu.
        matrix
        select
        types
```
```
>>> gpu.types.GPU
                 Batch(
                 OffScreen(
                 VertBuf(
                 VertFormat(
```
The creation of a new offscreen object is now done by the 
`GPUOffscreen.__new__` method.

Reviewers: campbellbarton, dfelinto

Reviewed By: campbellbarton, dfelinto

Tags: #bf_blender_2.8

Differential Revision: https://developer.blender.org/D3667

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

R097    doc/python_api/examples/gpu.offscreen.1.py      
doc/python_api/examples/gpu.types.GPUOffScreen.py
D       doc/python_api/rst/gpu.rst
M       doc/python_api/sphinx_doc_gen.py
M       source/blender/python/gpu/CMakeLists.txt
M       source/blender/python/gpu/gpu_py_api.c
M       source/blender/python/gpu/gpu_py_api.h
A       source/blender/python/gpu/gpu_py_batch.c
A       source/blender/python/gpu/gpu_py_batch.h
R060    source/blender/python/intern/gpu_py_matrix.c    
source/blender/python/gpu/gpu_py_matrix.c
A       source/blender/python/gpu/gpu_py_matrix.h
A       source/blender/python/gpu/gpu_py_offscreen.c
A       source/blender/python/gpu/gpu_py_offscreen.h
R073    source/blender/python/intern/gpu_py_select.c    
source/blender/python/gpu/gpu_py_select.c
R065    source/blender/python/intern/gpu.h      
source/blender/python/gpu/gpu_py_select.h
M       source/blender/python/gpu/gpu_py_types.c
M       source/blender/python/gpu/gpu_py_types.h
A       source/blender/python/gpu/gpu_py_vertex_buffer.c
A       source/blender/python/gpu/gpu_py_vertex_buffer.h
A       source/blender/python/gpu/gpu_py_vertex_format.c
A       source/blender/python/gpu/gpu_py_vertex_format.h
M       source/blender/python/intern/CMakeLists.txt
M       source/blender/python/intern/bpy_interface.c

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

diff --git a/doc/python_api/examples/gpu.offscreen.1.py 
b/doc/python_api/examples/gpu.types.GPUOffScreen.py
similarity index 97%
rename from doc/python_api/examples/gpu.offscreen.1.py
rename to doc/python_api/examples/gpu.types.GPUOffScreen.py
index bb34603bd23..a1b38837278 100644
--- a/doc/python_api/examples/gpu.offscreen.1.py
+++ b/doc/python_api/examples/gpu.types.GPUOffScreen.py
@@ -42,7 +42,7 @@ class OffScreenDraw(bpy.types.Operator):
         aspect_ratio = scene.render.resolution_x / scene.render.resolution_y
 
         try:
-            offscreen = gpu.offscreen.new(512, int(512 / aspect_ratio))
+            offscreen = gpu.types.GPUOffScreen(512, int(512 / aspect_ratio))
         except Exception as e:
             print(e)
             offscreen = None
@@ -52,7 +52,7 @@ class OffScreenDraw(bpy.types.Operator):
     @staticmethod
     def _update_offscreen(context, offscreen):
         scene = context.scene
-        render_layer = context.render_layer
+        view_layer = context.view_layer
         render = scene.render
         camera = scene.camera
 
diff --git a/doc/python_api/rst/gpu.rst b/doc/python_api/rst/gpu.rst
deleted file mode 100644
index d4860da4770..00000000000
--- a/doc/python_api/rst/gpu.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-*******************
-GPU functions (gpu)
-*******************
-
-.. module:: gpu
-
-Functions for GPU offscreen rendering, matrix stacks and selection.
-
-Submodules:
-
-.. toctree::
-   :maxdepth: 1
-
-   gpu.offscreen.rst
-
-
-Intro
-=====
-
-Module to provide functions concerning the GPU implementation in Blender.
diff --git a/doc/python_api/sphinx_doc_gen.py b/doc/python_api/sphinx_doc_gen.py
index 9b58f7b3888..edfa2c4a95b 100644
--- a/doc/python_api/sphinx_doc_gen.py
+++ b/doc/python_api/sphinx_doc_gen.py
@@ -235,7 +235,9 @@ else:
         "bpy.utils.previews",
         "bpy_extras",
         "gpu",
-        "gpu.offscreen",
+        "gpu.types",
+        "gpu.matrix",
+        "gpu.select",
         "idprop.types",
         "mathutils",
         "mathutils.bvhtree",
@@ -1822,7 +1824,10 @@ def write_rst_importable_modules(basepath):
         # C_modules
         "aud": "Audio System",
         "blf": "Font Drawing",
-        "gpu.offscreen": "GPU Off-Screen Buffer",
+        "gpu": "GPU Shader Module",
+        "gpu.types": "GPU Types",
+        "gpu.matrix": "GPU Matrix",
+        "gpu.select": "GPU Select",
         "bmesh": "BMesh Module",
         "bmesh.types": "BMesh Types",
         "bmesh.utils": "BMesh Utilities",
@@ -1865,7 +1870,6 @@ def copy_handwritten_rsts(basepath):
     # TODO put this docs in Blender's code and use import as per modules above
     handwritten_modules = [
         "bgl",  # "Blender OpenGl wrapper"
-        "gpu",  # "GPU Shader Module"
         "bmesh.ops",  # generated by rst_from_bmesh_opdefines.py
 
         # includes...
diff --git a/source/blender/python/gpu/CMakeLists.txt 
b/source/blender/python/gpu/CMakeLists.txt
index 141a36bbcc2..bf317a4ebc5 100644
--- a/source/blender/python/gpu/CMakeLists.txt
+++ b/source/blender/python/gpu/CMakeLists.txt
@@ -35,10 +35,22 @@ set(INC_SYS
 
 set(SRC
        gpu_py_api.c
+       gpu_py_batch.c
+       gpu_py_matrix.c
+       gpu_py_offscreen.c
+       gpu_py_select.c
        gpu_py_types.c
+       gpu_py_vertex_buffer.c
+       gpu_py_vertex_format.c
 
        gpu_py_api.h
+       gpu_py_batch.h
+       gpu_py_matrix.h
+       gpu_py_offscreen.h
+       gpu_py_select.h
        gpu_py_types.h
+       gpu_py_vertex_buffer.h
+       gpu_py_vertex_format.h
 )
 
 add_definitions(${GL_DEFINITIONS})
diff --git a/source/blender/python/gpu/gpu_py_api.c 
b/source/blender/python/gpu/gpu_py_api.c
index 53285b372d8..fc1e7390ffe 100644
--- a/source/blender/python/gpu/gpu_py_api.c
+++ b/source/blender/python/gpu/gpu_py_api.c
@@ -19,31 +19,44 @@
  */
 
 /** \file blender/python/gpu/gpu_py_api.c
- *  \ingroup pygpu
+ *  \ingroup bpygpu
  *
  * Experimental Python API, not considered public yet (called '_gpu'),
  * we may re-expose as public later.
+ *
+ * - Use ``bpygpu_`` for local API.
+ * - Use ``BPyGPU`` for public API.
  */
 
 #include <Python.h>
 
-#include "GPU_batch.h"
-#include "GPU_vertex_format.h"
-
-#include "gpu_py_api.h"
-#include "gpu_py_types.h"
-
 #include "BLI_utildefines.h"
 
 #include "../generic/python_utildefines.h"
 
+#include "gpu_py_matrix.h"
+#include "gpu_py_select.h"
+#include "gpu_py_types.h"
+
+#include "gpu_py_api.h" /* own include */
+
 PyDoc_STRVAR(GPU_doc,
-"This module provides access to gpu drawing functions."
+"This module to provide functions concerning the GPU implementation in 
Blender."
+"\n\n"
+"Submodules:\n"
+"\n"
+".. toctree::\n"
+"   :maxdepth: 1\n"
+"\n"
+"   gpu.types.rst\n"
+"   gpu.matrix.rst\n"
+"   gpu.select.rst\n"
+"\n"
 );
 static struct PyModuleDef GPU_module_def = {
        PyModuleDef_HEAD_INIT,
-       .m_name = "_gpu",  /* m_name */
-       .m_doc = GPU_doc,  /* m_doc */
+       .m_name = "gpu",
+       .m_doc = GPU_doc,
 };
 
 PyObject *BPyInit_gpu(void)
@@ -54,10 +67,17 @@ PyObject *BPyInit_gpu(void)
 
        mod = PyModule_Create(&GPU_module_def);
 
-       /* _gpu.types */
        PyModule_AddObject(mod, "types", (submodule = BPyInit_gpu_types()));
        PyDict_SetItem(sys_modules, PyModule_GetNameObject(submodule), 
submodule);
        Py_INCREF(submodule);
 
+       PyModule_AddObject(mod, "matrix", (submodule = BPyInit_gpu_matrix()));
+       PyDict_SetItem(sys_modules, PyModule_GetNameObject(submodule), 
submodule);
+       Py_INCREF(submodule);
+
+       PyModule_AddObject(mod, "select", (submodule = BPyInit_gpu_select()));
+       PyDict_SetItem(sys_modules, PyModule_GetNameObject(submodule), 
submodule);
+       Py_INCREF(submodule);
+
        return mod;
 }
diff --git a/source/blender/python/gpu/gpu_py_api.h 
b/source/blender/python/gpu/gpu_py_api.h
index 387bfcab950..20eafb3d140 100644
--- a/source/blender/python/gpu/gpu_py_api.h
+++ b/source/blender/python/gpu/gpu_py_api.h
@@ -18,13 +18,13 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 
-#ifndef __GPU_PY_API_H__
-#define __GPU_PY_API_H__
-
 /** \file blender/python/gpu/gpu_py_api.h
- *  \ingroup pygpu
+ *  \ingroup bpygpu
  */
 
+#ifndef __GPU_PY_API_H__
+#define __GPU_PY_API_H__
+
 PyObject *BPyInit_gpu(void);
 
 #endif  /* __GPU_PY_API_H__ */
diff --git a/source/blender/python/gpu/gpu_py_batch.c 
b/source/blender/python/gpu/gpu_py_batch.c
new file mode 100644
index 00000000000..dfc95e2a996
--- /dev/null
+++ b/source/blender/python/gpu/gpu_py_batch.c
@@ -0,0 +1,414 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Copyright 2015, Blender Foundation.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/python/gpu/gpu_py_batch.c
+ *  \ingroup bpygpu
+ *
+ * This file defines the offscreen functionalities of the 'gpu' module
+ * used for off-screen OpenGL rendering.
+ *
+ * - Use ``bpygpu_`` for local API.
+ * - Use ``BPyGPU`` for public API.
+ */
+
+#include <Python.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_utildefines.h"
+
+#include "BKE_global.h"
+#include "BKE_library.h"
+
+#include "GPU_batch.h"
+
+#include "../mathutils/mathutils.h"
+
+#include "../generic/py_capi_utils.h"
+
+#include "gpu_py_vertex_buffer.h"
+#include "gpu_py_batch.h" /* own include */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name VertBatch Type
+ * \{ */
+
+static int bpygpu_ParsePrimType(PyObject *o, void *p)
+{
+       Py_ssize_t mode_id_len;
+       const char *mode_id = _PyUnicode_AsStringAndSize(o, &mode_id_len);
+       if (mode_id == NULL) {
+               PyErr_Format(PyExc_ValueError,
+                            "expected a string, got %s",
+                            Py_TYPE(o)->tp_name);
+               return 0;
+       }
+#define MATCH_ID(id) \
+       if (mode_id_len == strlen(STRINGIFY(id))) { \
+               if (STREQ(mode_id, STRINGIFY(id))) { \
+                       mode = GPU_PRIM_##id; \
+                       goto success; \
+               } \
+       } ((void)0)
+
+       GPUPrimType mode;
+       MATCH_ID(POINTS);
+       MATCH_ID(LINES);
+       MATCH_ID(TRIS);
+       MATCH_ID(LINE_STRIP);
+       MATCH_ID(LINE_LOOP);
+       MATCH_ID(TRI_STRIP);
+       MATCH_ID(TRI_FAN);
+       MATCH_ID(LINE_STRIP_ADJ);
+
+#undef MATCH_ID
+       PyErr_Format(PyExc_ValueError,
+                    "unknown type literal: '%s'",
+                    mode_id);
+       return 0;
+
+success:
+       (*(GPUPrimType *)p) = mode;
+       return 1;
+}
+
+static PyObject *bpygpu_Batch_new(PyTypeObject *UNUSED(type), PyObject *args, 
PyObject *kwds)
+{
+       const char * const keywords[] = {"type", "buf", NULL};
+
+       struct {
+               GPUPrimType type_id;
+               BPyGPUVertBuf *py_buf;
+       } params;
+
+       if (!PyArg_ParseTupleAndKeywords(
+               args, kwds,
+               "$O&O!:GPUBatch.__new__", (char **)keywords,
+               bpygpu_ParsePrimType, &params.type_id,
+               &BPyGPUVertBuf_Type, &params.py_buf))
+       {
+               return NULL;
+       }
+
+       GPUBatch *batch = GPU_batch_create(params.type_id, params.py_buf->buf, 
NULL);
+       BPyGPUBatch *ret = (BPyGPUBatch *)BPyGPUBatch_CreatePyObject(batch);
+
+#ifdef USE_GPU_PY_REFERENCES
+       ret->references = PyList_New(1);
+       PyList_SET_ITEM(ret->references, 0, (PyObject *)params.py_buf);
+       Py_INCREF(params.py_buf);
+       PyObject_GC_Track(ret);
+#endif
+
+       return (PyObject *)ret;
+}
+
+PyDoc_STRVAR(bpygpu_VertBatch_vertbuf_add_doc,
+"TODO"
+);
+static PyObject *bpygpu_VertBatch_vertbuf_add(BPyGPUBatch *self, BPyGPUVertBuf 
*py_buf)
+{
+       if (!BPyGPUVertBuf_Check(py_buf)) {
+               PyErr_Format(PyExc_TypeError,
+                            "Expected a GPUVertBuf, got %s",
+                            Py_TYPE(py_buf)->tp_name);
+               return NULL;
+       }
+
+       if (self->batch->verts[0]->vertex_len != py_buf->buf->vertex_len) {
+               PyErr_Format(PyExc_TypeError,
+                            "Expected %d length, got %d",
+                            self->batch->verts[0]->vertex_len, 
py_buf->buf->vertex_len);
+               return NULL;
+       }
+
+#ifdef US

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to