[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