diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2018-09-20 22:51:02 +0300 |
---|---|---|
committer | Dalai Felinto <dfelinto@gmail.com> | 2018-09-20 22:51:06 +0300 |
commit | 425cfdd5be12a0c167bd55eeb1ac84d37b7f2ead (patch) | |
tree | 8b69c4b0e7f71cb841ff94176827ca57a8d6e660 | |
parent | e316e41f847004f80838d0c7becaa7be80cc8711 (diff) |
GPU Python API: shader.uniform_float
The existing alternative is to use a buffer and call
uniform_vector_float which is overkill for such a simple operation.
-rw-r--r-- | source/blender/gpu/GPU_shader.h | 1 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_shader.c | 8 | ||||
-rw-r--r-- | source/blender/python/gpu/gpu_py_shader.c | 31 |
3 files changed, 40 insertions, 0 deletions
diff --git a/source/blender/gpu/GPU_shader.h b/source/blender/gpu/GPU_shader.h index f4fc568c6ff..21d5b5871fa 100644 --- a/source/blender/gpu/GPU_shader.h +++ b/source/blender/gpu/GPU_shader.h @@ -93,6 +93,7 @@ void GPU_shader_uniform_vector_int( void GPU_shader_uniform_buffer(GPUShader *shader, int location, struct GPUUniformBuffer *ubo); void GPU_shader_uniform_texture(GPUShader *shader, int location, struct GPUTexture *tex); +void GPU_shader_uniform_float(GPUShader *shader, int location, float value); void GPU_shader_uniform_int(GPUShader *shader, int location, int value); void GPU_shader_geometry_stage_primitive_io(GPUShader *shader, int input, int output, int number); diff --git a/source/blender/gpu/intern/gpu_shader.c b/source/blender/gpu/intern/gpu_shader.c index 97be9c79811..0f9e0b2008e 100644 --- a/source/blender/gpu/intern/gpu_shader.c +++ b/source/blender/gpu/intern/gpu_shader.c @@ -582,6 +582,14 @@ int GPU_shader_get_program(GPUShader *shader) return (int)shader->program; } +void GPU_shader_uniform_float(GPUShader *UNUSED(shader), int location, float value) +{ + if (location == -1) + return; + + glUniform1f(location, value); +} + void GPU_shader_uniform_vector(GPUShader *UNUSED(shader), int location, int length, int arraysize, const float *value) { if (location == -1 || value == NULL) diff --git a/source/blender/python/gpu/gpu_py_shader.c b/source/blender/python/gpu/gpu_py_shader.c index 76fe38c57e9..3a9122297cd 100644 --- a/source/blender/python/gpu/gpu_py_shader.c +++ b/source/blender/python/gpu/gpu_py_shader.c @@ -323,6 +323,34 @@ static PyObject *bpygpu_shader_uniform_vector_int( Py_RETURN_NONE; } +PyDoc_STRVAR(bpygpu_shader_uniform_float_doc, + ".. method:: uniform_float(location, value)\n" + "\n" + " Set uniform value.\n" + "\n" + " :param location: builtin identifier.\n" + " :type location: `int`\n" + " :param value: uniform value.\n" + " :type value: `float`\n" +); +static PyObject *bpygpu_shader_uniform_float( + BPyGPUShader *self, PyObject *args) +{ + int location; + float value; + + if (!PyArg_ParseTuple( + args, "if:GPUShader.uniform_float", + &location, &value)) + { + return NULL; + } + + GPU_shader_uniform_float(self->shader, location, value); + + Py_RETURN_NONE; +} + PyDoc_STRVAR(bpygpu_shader_uniform_int_doc, ".. method:: uniform_int(location, value)\n" "\n" @@ -408,6 +436,9 @@ static struct PyMethodDef bpygpu_shader_methods[] = { {"uniform_vector_int", (PyCFunction)bpygpu_shader_uniform_vector_int, METH_VARARGS, bpygpu_shader_uniform_vector_int_doc}, + {"uniform_float", + (PyCFunction)bpygpu_shader_uniform_float, + METH_VARARGS, bpygpu_shader_uniform_float_doc}, {"uniform_int", (PyCFunction)bpygpu_shader_uniform_int, METH_VARARGS, bpygpu_shader_uniform_int_doc}, |