diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-02-20 23:59:27 +0100 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-02-20 23:59:27 +0100 |
commit | 292f4c7f9795dc9296710996ffa8510a02e92b2d (patch) | |
tree | 5b6a2279b994649bc4201bda75f20835d9a918fc /servers/rendering/renderer_rd/framebuffer_cache_rd.cpp | |
parent | dc2d1e3f479fb64e6da23c00d38ed030a085fb6c (diff) | |
parent | 5a98845655900a7884bf5a73c5406318f1106d77 (diff) | |
download | redot-engine-292f4c7f9795dc9296710996ffa8510a02e92b2d.tar.gz |
Merge pull request #80214 from BastiaanOlij/rendering_effect
Implement hooks into renderer
Diffstat (limited to 'servers/rendering/renderer_rd/framebuffer_cache_rd.cpp')
-rw-r--r-- | servers/rendering/renderer_rd/framebuffer_cache_rd.cpp | 23 |
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; |