summaryrefslogtreecommitdiffstats
path: root/servers/visual/rendering_device.cpp
blob: 55707acc8cf70544855a035772b701f2c91ce4a3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "rendering_device.h"

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() {

	ShaderCompileFunction compile_function;
	ShaderCacheFunction cache_function;

	singleton = this;
}