Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2020-07-15 15:39:29 +0300
committerClément Foucault <foucault.clem@gmail.com>2020-07-15 20:51:55 +0300
commit8e168730866a93c24f27c8147e5b3b5daad0867f (patch)
tree40fd6cccb4f04c002b82be022ce8b8ca5a2cdd09 /source/blender/draw
parent5dcf60e053b9b9e3cb6dbf5c7b9fc783d6af6f3d (diff)
DRW: Shader: Add DRW_shader_create(_fullscreen)_with_shaderlib
Some convenience function for using DRWShaderLibrary.
Diffstat (limited to 'source/blender/draw')
-rw-r--r--source/blender/draw/intern/DRW_render.h8
-rw-r--r--source/blender/draw/intern/draw_manager_shader.c36
2 files changed, 44 insertions, 0 deletions
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,