summaryrefslogtreecommitdiff
path: root/servers/visual/rendering_device.cpp
diff options
context:
space:
mode:
authorJuan Linietsky <juan@godotengine.org>2019-07-28 19:58:32 -0300
committerJuan Linietsky <reduzio@gmail.com>2020-02-11 11:53:29 +0100
commit4fe3ee1730167b90ec8ae70c871c1dad032981d5 (patch)
tree98b9f82d3a4defc1560245e40c0ba7b3a674fa81 /servers/visual/rendering_device.cpp
parent60c7498cee169b2cd652045ec19bb526d76f9d61 (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.cpp31
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;
}