summaryrefslogtreecommitdiffstats
path: root/drivers/gles3/effects/copy_effects.cpp
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-01-08 11:50:12 +0100
committerRémi Verschelde <rverschelde@gmail.com>2024-01-08 11:50:12 +0100
commit774c4631fd316cb51eb45c6972bfd54633ed86f9 (patch)
tree746e967a391d4c2ee0a3101876082c4a2e83f2b3 /drivers/gles3/effects/copy_effects.cpp
parentdf29fc91edabf712d5e597d0ddd4cf015d99722e (diff)
parente69968b79432d1a3f9544e70b634f8fe08cb1aa8 (diff)
downloadredot-engine-774c4631fd316cb51eb45c6972bfd54633ed86f9.tar.gz
Merge pull request #84733 from clayjohn/GL-CanvasGroup-performance
Only copy the relevant portion of the screen when copying to backbuffer in Compatibility backend
Diffstat (limited to 'drivers/gles3/effects/copy_effects.cpp')
-rw-r--r--drivers/gles3/effects/copy_effects.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/gles3/effects/copy_effects.cpp b/drivers/gles3/effects/copy_effects.cpp
index 996e7eee7f..c6fb6ca70b 100644
--- a/drivers/gles3/effects/copy_effects.cpp
+++ b/drivers/gles3/effects/copy_effects.cpp
@@ -125,6 +125,18 @@ void CopyEffects::copy_to_rect(const Rect2 &p_rect) {
draw_screen_quad();
}
+void CopyEffects::copy_to_and_from_rect(const Rect2 &p_rect) {
+ bool success = copy.shader.version_bind_shader(copy.shader_version, CopyShaderGLES3::MODE_COPY_SECTION_SOURCE);
+ if (!success) {
+ return;
+ }
+
+ copy.shader.version_set_uniform(CopyShaderGLES3::COPY_SECTION, p_rect.position.x, p_rect.position.y, p_rect.size.x, p_rect.size.y, copy.shader_version, CopyShaderGLES3::MODE_COPY_SECTION_SOURCE);
+ copy.shader.version_set_uniform(CopyShaderGLES3::SOURCE_SECTION, p_rect.position.x, p_rect.position.y, p_rect.size.x, p_rect.size.y, copy.shader_version, CopyShaderGLES3::MODE_COPY_SECTION_SOURCE);
+
+ draw_screen_quad();
+}
+
void CopyEffects::copy_screen() {
bool success = copy.shader.version_bind_shader(copy.shader_version, CopyShaderGLES3::MODE_DEFAULT);
if (!success) {