diff options
author | Juan Linietsky <juan@godotengine.org> | 2019-07-28 19:58:32 -0300 |
---|---|---|
committer | Juan Linietsky <reduzio@gmail.com> | 2020-02-11 11:53:29 +0100 |
commit | 4fe3ee1730167b90ec8ae70c871c1dad032981d5 (patch) | |
tree | 98b9f82d3a4defc1560245e40c0ba7b3a674fa81 /servers/visual/rendering_device.cpp | |
parent | 60c7498cee169b2cd652045ec19bb526d76f9d61 (diff) |
Moved the shader source compilation code outside RenderingDevice and Vulkan
Diffstat (limited to 'servers/visual/rendering_device.cpp')
-rw-r--r-- | servers/visual/rendering_device.cpp | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/servers/visual/rendering_device.cpp b/servers/visual/rendering_device.cpp index eaecc76b55..55707acc8c 100644 --- a/servers/visual/rendering_device.cpp +++ b/servers/visual/rendering_device.cpp @@ -1,13 +1,38 @@ #include "rendering_device.h" - -RenderingDevice *RenderingDevice::singleton=NULL; +RenderingDevice *RenderingDevice::singleton = NULL; RenderingDevice *RenderingDevice::get_singleton() { return singleton; } +RenderingDevice::ShaderCompileFunction RenderingDevice::compile_function = NULL; +RenderingDevice::ShaderCacheFunction RenderingDevice::cache_function = NULL; + +void RenderingDevice::shader_set_compile_function(ShaderCompileFunction p_function) { + compile_function = p_function; +} +void RenderingDevice::shader_set_cache_function(ShaderCacheFunction p_function) { + cache_function = p_function; +} + +PoolVector<uint8_t> RenderingDevice::shader_compile_from_source(ShaderStage p_stage, const String &p_source_code, ShaderLanguage p_language, String *r_error, bool p_allow_cache) { + if (p_allow_cache && cache_function) { + PoolVector<uint8_t> cache = cache_function(p_stage, p_source_code, p_language); + if (cache.size()) { + return cache; + } + } + + ERR_FAIL_COND_V(!compile_function, PoolVector<uint8_t>()); + + return compile_function(p_stage, p_source_code, p_language, r_error); +} + RenderingDevice::RenderingDevice() { - singleton=this; + ShaderCompileFunction compile_function; + ShaderCacheFunction cache_function; + + singleton = this; } |