summaryrefslogtreecommitdiffstats
path: root/servers/rendering/renderer_rd/framebuffer_cache_rd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'servers/rendering/renderer_rd/framebuffer_cache_rd.cpp')
-rw-r--r--servers/rendering/renderer_rd/framebuffer_cache_rd.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/servers/rendering/renderer_rd/framebuffer_cache_rd.cpp b/servers/rendering/renderer_rd/framebuffer_cache_rd.cpp
index 71b8136245..ec037b71fa 100644
--- a/servers/rendering/renderer_rd/framebuffer_cache_rd.cpp
+++ b/servers/rendering/renderer_rd/framebuffer_cache_rd.cpp
@@ -32,6 +32,10 @@
FramebufferCacheRD *FramebufferCacheRD::singleton = nullptr;
+void FramebufferCacheRD::_bind_methods() {
+ ClassDB::bind_static_method("FramebufferCacheRD", D_METHOD("get_cache_multipass", "textures", "passes", "views"), &FramebufferCacheRD::get_cache_multipass_array);
+}
+
void FramebufferCacheRD::_invalidate(Cache *p_cache) {
if (p_cache->prev) {
p_cache->prev->next = p_cache->next;
@@ -52,6 +56,25 @@ void FramebufferCacheRD::_framebuffer_invalidation_callback(void *p_userdata) {
singleton->_invalidate(reinterpret_cast<Cache *>(p_userdata));
}
+RID FramebufferCacheRD::get_cache_multipass_array(const TypedArray<RID> &p_textures, const TypedArray<RDFramebufferPass> &p_passes, uint32_t p_views) {
+ Vector<RID> textures;
+ Vector<RD::FramebufferPass> passes;
+
+ for (int i = 0; i < p_textures.size(); i++) {
+ RID texture = p_textures[i];
+ textures.push_back(texture); // store even if NULL
+ }
+
+ for (int i = 0; i < p_passes.size(); i++) {
+ Ref<RDFramebufferPass> pass = p_passes[i];
+ if (pass.is_valid()) {
+ passes.push_back(pass->base);
+ }
+ }
+
+ return FramebufferCacheRD::get_singleton()->get_cache_multipass(textures, passes, p_views);
+}
+
FramebufferCacheRD::FramebufferCacheRD() {
ERR_FAIL_COND(singleton != nullptr);
singleton = this;