diff options
Diffstat (limited to 'servers/rendering/renderer_rd/uniform_set_cache_rd.cpp')
-rw-r--r-- | servers/rendering/renderer_rd/uniform_set_cache_rd.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/servers/rendering/renderer_rd/uniform_set_cache_rd.cpp b/servers/rendering/renderer_rd/uniform_set_cache_rd.cpp index 1f67d5e258..bcd8e78a71 100644 --- a/servers/rendering/renderer_rd/uniform_set_cache_rd.cpp +++ b/servers/rendering/renderer_rd/uniform_set_cache_rd.cpp @@ -32,6 +32,23 @@ UniformSetCacheRD *UniformSetCacheRD::singleton = nullptr; +void UniformSetCacheRD::_bind_methods() { + ClassDB::bind_static_method("UniformSetCacheRD", D_METHOD("get_cache", "shader", "set", "uniforms"), &UniformSetCacheRD::get_cache_array); +} + +RID UniformSetCacheRD::get_cache_array(RID p_shader, uint32_t p_set, const TypedArray<RDUniform> &p_uniforms) { + Vector<RD::Uniform> uniforms; + + for (int i = 0; i < p_uniforms.size(); i++) { + Ref<RDUniform> uniform = p_uniforms[i]; + if (uniform.is_valid()) { + uniforms.push_back(uniform->base); + } + } + + return UniformSetCacheRD::get_singleton()->get_cache_vec(p_shader, p_set, uniforms); +} + void UniformSetCacheRD::_invalidate(Cache *p_cache) { if (p_cache->prev) { p_cache->prev->next = p_cache->next; |