Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGermano Cavalcante <germano.costa@ig.com.br>2021-02-17 16:48:08 +0300
committerGermano Cavalcante <germano.costa@ig.com.br>2021-02-17 18:27:19 +0300
commit4430e8a00810ca8df2fa20029c4cb8078e8cdbe6 (patch)
treeacea8dc3d311f94c7cd5eabd36371bc76ec06b3f /source/blender/python/gpu/gpu_py_shader.c
parentec8c09f2aafdc7c13bb27c0f74e9def83c0400c7 (diff)
Python: gpu module: add new submodules and types
This commit extends the gpu python API with: ``` gpu.types.Buffer #"__init__", "to_list" gpu.types.GPUTexture #"__init__", "clear", "read", "format" gpu.types.GPUFrameBuffer #"__init__", "bind", "clear", "is_bound", "viewport", ("__enter__", "__exit__" with "GPUFrameBufferStackContext") gpu.types.GPUUniformBuf #"__init__", "update" gpu.state #"blend_set", "blend_get", "depth_test_set", "depth_test_get", "depth_mask_set", "depth_mask_get", "viewport_set", "viewport_get", "line_width_set", "line_width_get", "point_size_set", "color_mask_set", "face_culling_set", "front_facing_set", "program_point_size_set" ``` Add these methods to existing objects: ``` gpu.types.GPUShader #"uniform_sample", "uniform_buffer" ``` Maniphest Tasks: T80481 Differential Revision: https://developer.blender.org/D8826
Diffstat (limited to 'source/blender/python/gpu/gpu_py_shader.c')
-rw-r--r--source/blender/python/gpu/gpu_py_shader.c70
1 files changed, 70 insertions, 0 deletions
diff --git a/source/blender/python/gpu/gpu_py_shader.c b/source/blender/python/gpu/gpu_py_shader.c
index ddc3ccd9827..538bed7df6d 100644
--- a/source/blender/python/gpu/gpu_py_shader.c
+++ b/source/blender/python/gpu/gpu_py_shader.c
@@ -26,12 +26,16 @@
#include "BLI_utildefines.h"
#include "GPU_shader.h"
+#include "GPU_texture.h"
+#include "GPU_uniform_buffer.h"
#include "../generic/py_capi_utils.h"
#include "../generic/python_utildefines.h"
#include "../mathutils/mathutils.h"
#include "gpu_py_api.h"
+#include "gpu_py_texture.h"
+#include "gpu_py_uniformbuffer.h"
#include "gpu_py_vertex_format.h"
#include "gpu_py_shader.h" /* own include */
@@ -464,6 +468,64 @@ static PyObject *pygpu_shader_uniform_int(BPyGPUShader *self, PyObject *args)
Py_RETURN_NONE;
}
+PyDoc_STRVAR(pygpu_shader_uniform_sampler_doc,
+ ".. method:: uniform_sampler(name, texture)\n"
+ "\n"
+ " Specify the value of a texture uniform variable for the current GPUShader.\n"
+ "\n"
+ " :param name: name of the uniform variable whose texture is to be specified.\n"
+ " :type name: str\n"
+ " :param texture: Texture to attach.\n"
+ " :type texture: :class:`gpu.types.GPUTexture`\n");
+static PyObject *pygpu_shader_uniform_sampler(BPyGPUShader *self, PyObject *args)
+{
+ const char *name;
+ BPyGPUTexture *py_texture;
+ if (!PyArg_ParseTuple(
+ args, "sO!:GPUShader.uniform_sampler", &name, &BPyGPUTexture_Type, &py_texture)) {
+ return NULL;
+ }
+
+ int slot = GPU_shader_get_texture_binding(self->shader, name);
+ GPU_texture_bind(py_texture->tex, slot);
+ GPU_shader_uniform_1i(self->shader, name, slot);
+
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(
+ pygpu_shader_uniform_buffer_doc,
+ ".. method:: uniform_buffer(name, ubo)\n"
+ "\n"
+ " Specify the value of an uniform buffer object variable for the current GPUShader.\n"
+ "\n"
+ " :param name: name of the uniform variable whose UBO is to be specified.\n"
+ " :type name: str\n"
+ " :param ubo: Uniform Buffer to attach.\n"
+ " :type texture: :class:`gpu.types.GPUUniformBuf`\n");
+static PyObject *pygpu_shader_uniform_buffer(BPyGPUShader *self, PyObject *args)
+{
+ const char *name;
+ BPyGPUUniformBuf *py_ubo;
+ if (!PyArg_ParseTuple(
+ args, "sO!:GPUShader.uniform_buffer", &name, &BPyGPUUniformBuf_Type, &py_ubo)) {
+ return NULL;
+ }
+
+ int slot = GPU_shader_get_uniform_block(self->shader, name);
+ if (slot == -1) {
+ PyErr_SetString(
+ PyExc_BufferError,
+ "GPUShader.uniform_buffer: uniform block not found, make sure the name is correct");
+ return NULL;
+ }
+
+ GPU_uniformbuf_bind(py_ubo->ubo, slot);
+ GPU_shader_uniform_1i(self->shader, name, slot);
+
+ Py_RETURN_NONE;
+}
+
PyDoc_STRVAR(
pygpu_shader_attr_from_name_doc,
".. method:: attr_from_name(name)\n"
@@ -535,6 +597,14 @@ static struct PyMethodDef pygpu_shader__tp_methods[] = {
(PyCFunction)pygpu_shader_uniform_int,
METH_VARARGS,
pygpu_shader_uniform_int_doc},
+ {"uniform_sampler",
+ (PyCFunction)pygpu_shader_uniform_sampler,
+ METH_VARARGS,
+ pygpu_shader_uniform_sampler_doc},
+ {"uniform_buffer",
+ (PyCFunction)pygpu_shader_uniform_buffer,
+ METH_VARARGS,
+ pygpu_shader_uniform_buffer_doc},
{"attr_from_name",
(PyCFunction)pygpu_shader_attr_from_name,
METH_O,