[Bf-blender-cvs] [8e168730866] master: DRW: Shader: Add DRW_shader_create(_fullscreen)_with_shaderlib

Clément Foucault noreply at git.blender.org
Wed Jul 15 19:08:12 CEST 2020


Commit: 8e168730866a93c24f27c8147e5b3b5daad0867f
Author: Clément Foucault
Date:   Wed Jul 15 14:39:29 2020 +0200
Branches: master
https://developer.blender.org/rB8e168730866a93c24f27c8147e5b3b5daad0867f

DRW: Shader: Add DRW_shader_create(_fullscreen)_with_shaderlib

Some convenience function for using DRWShaderLibrary.

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

M	source/blender/draw/intern/DRW_render.h
M	source/blender/draw/intern/draw_manager_shader.c

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

diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 1ab5ec18f65..c992be333e5 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -204,6 +204,11 @@ struct GPUShader *DRW_shader_create(const char *vert,
                                     const char *defines);
 struct GPUShader *DRW_shader_create_with_lib(
     const char *vert, const char *geom, const char *frag, const char *lib, const char *defines);
+struct GPUShader *DRW_shader_create_with_shaderlib(const char *vert,
+                                                   const char *geom,
+                                                   const char *frag,
+                                                   const DRWShaderLibrary *lib,
+                                                   const char *defines);
 struct GPUShader *DRW_shader_create_with_transform_feedback(const char *vert,
                                                             const char *geom,
                                                             const char *defines,
@@ -211,6 +216,9 @@ struct GPUShader *DRW_shader_create_with_transform_feedback(const char *vert,
                                                             const char **varying_names,
                                                             const int varying_count);
 struct GPUShader *DRW_shader_create_fullscreen(const char *frag, const char *defines);
+struct GPUShader *DRW_shader_create_fullscreen_with_shaderlib(const char *frag,
+                                                              const DRWShaderLibrary *lib,
+                                                              const char *defines);
 struct GPUMaterial *DRW_shader_find_from_world(struct World *wo,
                                                const void *engine_type,
                                                const int options,
diff --git a/source/blender/draw/intern/draw_manager_shader.c b/source/blender/draw/intern/draw_manager_shader.c
index 592b030c45e..0c12b4fce86 100644
--- a/source/blender/draw/intern/draw_manager_shader.c
+++ b/source/blender/draw/intern/draw_manager_shader.c
@@ -328,6 +328,26 @@ GPUShader *DRW_shader_create_with_lib(
   return sh;
 }
 
+GPUShader *DRW_shader_create_with_shaderlib(const char *vert,
+                                            const char *geom,
+                                            const char *frag,
+                                            const DRWShaderLibrary *lib,
+                                            const char *defines)
+{
+  GPUShader *sh;
+  char *vert_with_lib = DRW_shader_library_create_shader_string(lib, vert);
+  char *frag_with_lib = DRW_shader_library_create_shader_string(lib, frag);
+  char *geom_with_lib = (geom) ? DRW_shader_library_create_shader_string(lib, geom) : NULL;
+
+  sh = GPU_shader_create(vert_with_lib, frag_with_lib, geom_with_lib, NULL, defines, __func__);
+
+  MEM_SAFE_FREE(vert_with_lib);
+  MEM_SAFE_FREE(frag_with_lib);
+  MEM_SAFE_FREE(geom_with_lib);
+
+  return sh;
+}
+
 GPUShader *DRW_shader_create_with_transform_feedback(const char *vert,
                                                      const char *geom,
                                                      const char *defines,
@@ -352,6 +372,22 @@ GPUShader *DRW_shader_create_fullscreen(const char *frag, const char *defines)
       datatoc_common_fullscreen_vert_glsl, frag, NULL, NULL, defines, __func__);
 }
 
+GPUShader *DRW_shader_create_fullscreen_with_shaderlib(const char *frag,
+                                                       const DRWShaderLibrary *lib,
+                                                       const char *defines)
+{
+
+  GPUShader *sh;
+  char *vert = datatoc_common_fullscreen_vert_glsl;
+  char *frag_with_lib = DRW_shader_library_create_shader_string(lib, frag);
+
+  sh = GPU_shader_create(vert, frag_with_lib, NULL, NULL, defines, __func__);
+
+  MEM_SAFE_FREE(frag_with_lib);
+
+  return sh;
+}
+
 GPUMaterial *DRW_shader_find_from_world(World *wo,
                                         const void *engine_type,
                                         const int options,



More information about the Bf-blender-cvs mailing list