|
@@ -3364,6 +3364,31 @@ RS::ViewportMSAA TextureStorage::render_target_get_msaa(RID p_render_target) con
|
|
|
return rt->msaa;
|
|
|
}
|
|
|
|
|
|
+void TextureStorage::render_target_set_msaa_needs_resolve(RID p_render_target, bool p_needs_resolve) {
|
|
|
+ RenderTarget *rt = render_target_owner.get_or_null(p_render_target);
|
|
|
+ ERR_FAIL_NULL(rt);
|
|
|
+
|
|
|
+ rt->msaa_needs_resolve = p_needs_resolve;
|
|
|
+}
|
|
|
+
|
|
|
+bool TextureStorage::render_target_get_msaa_needs_resolve(RID p_render_target) const {
|
|
|
+ RenderTarget *rt = render_target_owner.get_or_null(p_render_target);
|
|
|
+ ERR_FAIL_NULL_V(rt, false);
|
|
|
+
|
|
|
+ return rt->msaa_needs_resolve;
|
|
|
+}
|
|
|
+
|
|
|
+void TextureStorage::render_target_do_msaa_resolve(RID p_render_target) {
|
|
|
+ RenderTarget *rt = render_target_owner.get_or_null(p_render_target);
|
|
|
+ ERR_FAIL_NULL(rt);
|
|
|
+ if (!rt->msaa_needs_resolve) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ RD::get_singleton()->draw_list_begin(rt->get_framebuffer(), RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_READ, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_DISCARD);
|
|
|
+ RD::get_singleton()->draw_list_end();
|
|
|
+ rt->msaa_needs_resolve = false;
|
|
|
+}
|
|
|
+
|
|
|
void TextureStorage::render_target_set_use_hdr(RID p_render_target, bool p_use_hdr) {
|
|
|
RenderTarget *rt = render_target_owner.get_or_null(p_render_target);
|
|
|
ERR_FAIL_NULL(rt);
|
|
@@ -3479,6 +3504,7 @@ void TextureStorage::render_target_do_clear_request(RID p_render_target) {
|
|
|
RD::get_singleton()->draw_list_begin(rt->get_framebuffer(), RD::INITIAL_ACTION_CLEAR, RD::FINAL_ACTION_READ, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_DISCARD, clear_colors);
|
|
|
RD::get_singleton()->draw_list_end();
|
|
|
rt->clear_requested = false;
|
|
|
+ rt->msaa_needs_resolve = false;
|
|
|
}
|
|
|
|
|
|
void TextureStorage::render_target_set_sdf_size_and_scale(RID p_render_target, RS::ViewportSDFOversize p_size, RS::ViewportSDFScale p_scale) {
|