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
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user