[Bf-blender-cvs] [a94b4c2ff0] clay-engine: Fix Crash and Unfreed Memory

Clément Foucault noreply at git.blender.org
Wed Jan 11 17:06:11 CET 2017


Commit: a94b4c2ff07d095eb5e13752d973b95623c6037b
Author: Clément Foucault
Date:   Wed Jan 11 16:58:08 2017 +0100
Branches: clay-engine
https://developer.blender.org/rBa94b4c2ff07d095eb5e13752d973b95623c6037b

Fix Crash and Unfreed Memory

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

M	source/blender/draw/engines/clay/clay.c
M	source/blender/gpu/intern/gpu_viewport.c

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

diff --git a/source/blender/draw/engines/clay/clay.c b/source/blender/draw/engines/clay/clay.c
index cb8bd24445..dfae250621 100644
--- a/source/blender/draw/engines/clay/clay.c
+++ b/source/blender/draw/engines/clay/clay.c
@@ -299,9 +299,9 @@ static void clay_engine_init(void)
 static DRWBatch *clay_batch_create(DRWPass *pass, CLAY_BatchStorage *storage)
 {
 	const int depthloc = 0, matcaploc = 1, jitterloc = 2, sampleloc = 3;
-	const bool use_rot = (storage->matcap_rot[1] == 0);
-	const bool use_ao = (storage->ssao_params_var[1] == 0 && storage->ssao_params_var[2] == 0);
-	const bool use_hsv = (storage->matcap_hsv[0] == 0);
+	const bool use_rot = (storage->matcap_rot[1] != 0.0f);
+	const bool use_ao = (storage->ssao_params_var[1] != 0.0f || storage->ssao_params_var[2] != 0.0f);
+	const bool use_hsv = (storage->matcap_hsv[0] != 0.0f);
 	struct GPUShader *sh;
 
 	if (use_rot && use_ao && use_hsv) {
@@ -334,18 +334,26 @@ static DRWBatch *clay_batch_create(DRWPass *pass, CLAY_BatchStorage *storage)
 	DRW_batch_uniform_ivec2(batch, "screenres", DRW_viewport_size_get(), 1);
 	DRW_batch_uniform_buffer(batch, "depthtex", SCENE_DEPTH, depthloc);
 	DRW_batch_uniform_texture(batch, "matcaps", data.matcap_array, matcaploc);
-	DRW_batch_uniform_vec3(batch, "matcaps_color", (float *)data.matcap_colors, 24);
-	DRW_batch_uniform_vec2(batch, "matcap_rotation", (float *)storage->matcap_rot, 1);
 	DRW_batch_uniform_int(batch, "matcap_index", &storage->matcap_id, 1);
-	DRW_batch_uniform_vec3(batch, "matcap_hsv", (float *)storage->matcap_hsv, 1);
-
-	/* SSAO */
 	DRW_batch_uniform_mat4(batch, "WinMatrix", (float *)data.winmat);
 	DRW_batch_uniform_vec4(batch, "viewvecs", (float *)data.viewvecs, 3);
-	DRW_batch_uniform_vec4(batch, "ssao_params_var", storage->ssao_params_var, 1);
 	DRW_batch_uniform_vec4(batch, "ssao_params", data.ssao_params, 1);
-	DRW_batch_uniform_texture(batch, "ssao_jitter", data.jitter_tx, jitterloc);
-	DRW_batch_uniform_texture(batch, "ssao_samples", data.sampling_tx, sampleloc);
+
+	if (use_rot) {
+		DRW_batch_uniform_vec2(batch, "matcap_rotation", (float *)storage->matcap_rot, 1);
+	}
+
+	if (use_hsv) {
+		DRW_batch_uniform_vec3(batch, "matcap_hsv", (float *)storage->matcap_hsv, 1);
+	}
+
+	if (use_ao) {
+		DRW_batch_uniform_vec3(batch, "matcaps_color", (float *)data.matcap_colors, 24);
+		DRW_batch_uniform_vec4(batch, "ssao_params_var", storage->ssao_params_var, 1);
+		DRW_batch_uniform_texture(batch, "ssao_jitter", data.jitter_tx, jitterloc);
+		DRW_batch_uniform_texture(batch, "ssao_samples", data.sampling_tx, sampleloc);
+	}
+
 
 	return batch;
 }
@@ -510,11 +518,20 @@ void clay_engine_free(void)
 		DRW_shader_free(data.clay_sh[WITH_AO]);
 		DRW_shader_free(data.clay_sh[WITH_ROT]);
 		DRW_shader_free(data.clay_sh[WITH_HSV]);
+		DRW_shader_free(data.clay_sh[WITH_NONE]);
 	}
 
 	if (data.matcap_array) {
 		DRW_texture_free(data.matcap_array);
 	}
+
+	if (data.jitter_tx) {
+		DRW_texture_free(data.jitter_tx);
+	}
+
+	if (data.sampling_tx) {
+		DRW_texture_free(data.sampling_tx);
+	}
 }
 
 RenderEngineType viewport_clay_type = {
diff --git a/source/blender/gpu/intern/gpu_viewport.c b/source/blender/gpu/intern/gpu_viewport.c
index 630813032c..909e6704c3 100644
--- a/source/blender/gpu/intern/gpu_viewport.c
+++ b/source/blender/gpu/intern/gpu_viewport.c
@@ -233,6 +233,7 @@ static void GPU_viewport_passes_free(GPUViewport *viewport)
 		if (pass) {
 			DRW_pass_free(pass);
 			MEM_freeN(pass);
+			psl->passes[i] = NULL;
 		}
 	}
 }




More information about the Bf-blender-cvs mailing list