diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2020-07-15 15:39:29 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2020-07-15 20:51:55 +0300 |
commit | 8e168730866a93c24f27c8147e5b3b5daad0867f (patch) | |
tree | 40fd6cccb4f04c002b82be022ce8b8ca5a2cdd09 /source/blender/draw | |
parent | 5dcf60e053b9b9e3cb6dbf5c7b9fc783d6af6f3d (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.h | 8 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager_shader.c | 36 |
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, |