summaryrefslogtreecommitdiffstats
path: root/servers/visual/rendering_device.cpp
diff options
context:
space:
mode:
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;
}