[Bf-blender-cvs] [3de5e71501] blender2.8: GLSL viewport: Fix shader compilation error.

Clément Foucault noreply at git.blender.org
Thu Mar 23 15:10:30 CET 2017


Commit: 3de5e7150194717f5977e437aaf966f1db7a900a
Author: Clément Foucault
Date:   Thu Mar 23 15:07:33 2017 +0100
Branches: blender2.8
https://developer.blender.org/rB3de5e7150194717f5977e437aaf966f1db7a900a

GLSL viewport: Fix shader compilation error.

Moved the global lib insertion to the draw manager instead

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

M	source/blender/draw/intern/draw_manager.c
M	source/blender/gpu/intern/gpu_shader.c

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

diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 2146e53df6..ee51ec4276 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -25,6 +25,7 @@
 
 #include <stdio.h>
 
+#include "BLI_dynstr.h"
 #include "BLI_listbase.h"
 #include "BLI_rect.h"
 #include "BLI_string.h"
@@ -318,7 +319,40 @@ GPUShader *DRW_shader_create(const char *vert, const char *geom, const char *fra
 
 GPUShader *DRW_shader_create_with_lib(const char *vert, const char *geom, const char *frag, const char *lib, const char *defines)
 {
-	return GPU_shader_create(vert, frag, geom, lib, defines, 0, 0, 0);
+	GPUShader *sh;
+	char *vert_with_lib = NULL;
+	char *frag_with_lib = NULL;
+	char *geom_with_lib = NULL;
+
+	DynStr *ds_vert = BLI_dynstr_new();
+	BLI_dynstr_append(ds_vert, lib);
+	BLI_dynstr_append(ds_vert, vert);
+	vert_with_lib = BLI_dynstr_get_cstring(ds_vert);
+	BLI_dynstr_free(ds_vert);
+
+	DynStr *ds_frag = BLI_dynstr_new();
+	BLI_dynstr_append(ds_frag, lib);
+	BLI_dynstr_append(ds_frag, frag);
+	frag_with_lib = BLI_dynstr_get_cstring(ds_frag);
+	BLI_dynstr_free(ds_frag);
+
+	if (geom) {
+		DynStr *ds_geom = BLI_dynstr_new();
+		BLI_dynstr_append(ds_geom, lib);
+		BLI_dynstr_append(ds_geom, geom);
+		geom_with_lib = BLI_dynstr_get_cstring(ds_geom);
+		BLI_dynstr_free(ds_geom);
+	}
+
+	sh = GPU_shader_create(vert_with_lib, frag_with_lib, geom_with_lib, NULL, defines, 0, 0, 0);
+
+	MEM_freeN(vert_with_lib);
+	MEM_freeN(frag_with_lib);
+	if (geom) {
+		MEM_freeN(geom_with_lib);
+	}
+
+	return sh;
 }
 
 GPUShader *DRW_shader_create_2D(const char *frag, const char *defines)
diff --git a/source/blender/gpu/intern/gpu_shader.c b/source/blender/gpu/intern/gpu_shader.c
index 0546e18866..d2d8011829 100644
--- a/source/blender/gpu/intern/gpu_shader.c
+++ b/source/blender/gpu/intern/gpu_shader.c
@@ -371,7 +371,6 @@ GPUShader *GPU_shader_create_ex(const char *vertexcode,
 		source[num_source++] = standard_defines;
 
 		if (defines) source[num_source++] = defines;
-		if (libcode) source[num_source++] = libcode;
 		source[num_source++] = vertexcode;
 
 		glAttachShader(shader->program, shader->vertex);
@@ -437,7 +436,6 @@ GPUShader *GPU_shader_create_ex(const char *vertexcode,
 		source[num_source++] = standard_defines;
 
 		if (defines) source[num_source++] = defines;
-		if (libcode) source[num_source++] = libcode;
 		source[num_source++] = geocode;
 
 		glAttachShader(shader->program, shader->geometry);




More information about the Bf-blender-cvs mailing list