diff options
author | Germano Cavalcante <germano.costa@ig.com.br> | 2021-02-17 16:48:08 +0300 |
---|---|---|
committer | Germano Cavalcante <germano.costa@ig.com.br> | 2021-02-17 18:27:19 +0300 |
commit | 4430e8a00810ca8df2fa20029c4cb8078e8cdbe6 (patch) | |
tree | acea8dc3d311f94c7cd5eabd36371bc76ec06b3f /source/blender/python/gpu/gpu_py_shader.c | |
parent | ec8c09f2aafdc7c13bb27c0f74e9def83c0400c7 (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.c | 70 |
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, |