[Bf-blender-cvs] [9fb9604c192] blender2.8: gpu.shader module: Do not free builtin shaders.

mano-wii noreply at git.blender.org
Thu Sep 20 20:22:10 CEST 2018


Commit: 9fb9604c1929a224254ba08975e4d250880e0edf
Author: mano-wii
Date:   Thu Sep 20 15:21:59 2018 -0300
Branches: blender2.8
https://developer.blender.org/rB9fb9604c1929a224254ba08975e4d250880e0edf

gpu.shader module: Do not free builtin shaders.

===================================================================

M	source/blender/python/gpu/gpu_py_shader.c
M	source/blender/python/gpu/gpu_py_shader.h

===================================================================

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);



More information about the Bf-blender-cvs mailing list