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:
authormano-wii <germano.costa@ig.com.br>2018-09-20 21:21:59 +0300
committermano-wii <germano.costa@ig.com.br>2018-09-20 21:21:59 +0300
commit9fb9604c1929a224254ba08975e4d250880e0edf (patch)
tree6c2c6bbcfc44523d63087bb7a762ea7faaca5599 /source/blender
parentd0eed5e50a80ef4df9ecb14772c87d4ede11e621 (diff)
gpu.shader module: Do not free builtin shaders.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/python/gpu/gpu_py_shader.c11
-rw-r--r--source/blender/python/gpu/gpu_py_shader.h3
2 files changed, 9 insertions, 5 deletions
diff --git a/source/blender/python/gpu/gpu_py_shader.c b/source/blender/python/gpu/gpu_py_shader.c
index 2638be31268..ba0a0843393 100644
--- a/source/blender/python/gpu/gpu_py_shader.c
+++ b/source/blender/python/gpu/gpu_py_shader.c
@@ -119,7 +119,7 @@ static PyObject *bpygpu_shader_new(PyTypeObject *UNUSED(type), PyObject *args, P
return NULL;
}
- return BPyGPUShader_CreatePyObject(shader);
+ return BPyGPUShader_CreatePyObject(shader, false);
}
PyDoc_STRVAR(bpygpu_shader_bind_doc,
@@ -427,7 +427,9 @@ static PyGetSetDef bpygpu_shader_getseters[] = {
static void bpygpu_shader_dealloc(BPyGPUShader *self)
{
- GPU_shader_free(self->shader);
+ if (self->is_builtin == false) {
+ GPU_shader_free(self->shader);
+ }
Py_TYPE(self)->tp_free((PyObject *)self);
}
@@ -513,7 +515,7 @@ static PyObject *bpygpu_shader_from_builtin(PyObject *UNUSED(self), PyObject *ar
GPUShader *shader = GPU_shader_get_builtin_shader(shader_id);
- return BPyGPUShader_CreatePyObject(shader);
+ return BPyGPUShader_CreatePyObject(shader, true);
}
PyDoc_STRVAR(bpygpu_shader_code_from_builtin_doc,
@@ -608,12 +610,13 @@ static PyModuleDef BPyGPU_shader_builtin_module_def = {
/** \name Public API
* \{ */
-PyObject *BPyGPUShader_CreatePyObject(GPUShader *shader)
+PyObject *BPyGPUShader_CreatePyObject(GPUShader *shader, bool is_builtin)
{
BPyGPUShader *self;
self = PyObject_New(BPyGPUShader, &BPyGPUShader_Type);
self->shader = shader;
+ self->is_builtin = is_builtin;
return (PyObject *)self;
}
diff --git a/source/blender/python/gpu/gpu_py_shader.h b/source/blender/python/gpu/gpu_py_shader.h
index d9457cd9b72..4460fb1ccc7 100644
--- a/source/blender/python/gpu/gpu_py_shader.h
+++ b/source/blender/python/gpu/gpu_py_shader.h
@@ -32,9 +32,10 @@ extern PyTypeObject BPyGPUShader_Type;
typedef struct BPyGPUShader {
PyObject_VAR_HEAD
struct GPUShader *shader;
+ bool is_builtin;
} BPyGPUShader;
-PyObject *BPyGPUShader_CreatePyObject(struct GPUShader *shader);
+PyObject *BPyGPUShader_CreatePyObject(struct GPUShader *shader, bool is_builtin);
PyObject *BPyInit_gpu_shader(void);
PyObject *BPyInit_gpu_shader_builtin(void);