summaryrefslogtreecommitdiffstats
path: root/drivers/gles3/storage/texture_storage.cpp
diff options
context:
space:
mode:
authorBastiaan Olij <mux213@gmail.com>2023-10-26 12:10:38 +1100
committerBastiaan Olij <mux213@gmail.com>2023-12-05 10:01:00 +1100
commitcaddce14dd7b3139c8f1616038a91a1f9eccaa50 (patch)
tree748b12f1a419123fa6fd21bcc949e97e8e1005ed /drivers/gles3/storage/texture_storage.cpp
parentd76c1d0e516fedc535a2e394ab780cac79203477 (diff)
downloadredot-engine-caddce14dd7b3139c8f1616038a91a1f9eccaa50.tar.gz
Add 3D MSAA and scaling support to GLES3
Diffstat (limited to 'drivers/gles3/storage/texture_storage.cpp')
-rw-r--r--drivers/gles3/storage/texture_storage.cpp44
1 files changed, 40 insertions, 4 deletions
diff --git a/drivers/gles3/storage/texture_storage.cpp b/drivers/gles3/storage/texture_storage.cpp
index dec0a3f811..77dd15fa28 100644
--- a/drivers/gles3/storage/texture_storage.cpp
+++ b/drivers/gles3/storage/texture_storage.cpp
@@ -1732,7 +1732,7 @@ void TextureStorage::_update_render_target(RenderTarget *rt) {
#else
{
#endif
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, rt->color, 0);
+ glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, texture_target, rt->color, 0);
}
// depth
@@ -1765,7 +1765,7 @@ void TextureStorage::_update_render_target(RenderTarget *rt) {
#else
{
#endif
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, rt->depth, 0);
+ glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, texture_target, rt->depth, 0);
}
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
@@ -1874,7 +1874,7 @@ void TextureStorage::_create_render_target_backbuffer(RenderTarget *rt) {
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
}
}
-void GLES3::TextureStorage::copy_scene_to_backbuffer(RenderTarget *rt, const bool uses_screen_texture, const bool uses_depth_texture) {
+void GLES3::TextureStorage::check_backbuffer(RenderTarget *rt, const bool uses_screen_texture, const bool uses_depth_texture) {
if (rt->backbuffer != 0 && rt->backbuffer_depth != 0) {
return;
}
@@ -1935,7 +1935,7 @@ void GLES3::TextureStorage::copy_scene_to_backbuffer(RenderTarget *rt, const boo
}
}
void TextureStorage::_clear_render_target(RenderTarget *rt) {
- // there is nothing to clear when DIRECT_TO_SCREEN is used
+ // there is nothing else to clear when DIRECT_TO_SCREEN is used
if (rt->direct_to_screen) {
return;
}
@@ -2229,6 +2229,7 @@ void TextureStorage::render_target_clear_used(RID p_render_target) {
void TextureStorage::render_target_set_msaa(RID p_render_target, RS::ViewportMSAA p_msaa) {
RenderTarget *rt = render_target_owner.get_or_null(p_render_target);
ERR_FAIL_NULL(rt);
+ ERR_FAIL_COND(rt->direct_to_screen);
if (p_msaa == rt->msaa) {
return;
}
@@ -2284,6 +2285,41 @@ void TextureStorage::render_target_do_clear_request(RID p_render_target) {
glBindFramebuffer(GL_FRAMEBUFFER, system_fbo);
}
+GLuint TextureStorage::render_target_get_fbo(RID p_render_target) const {
+ RenderTarget *rt = render_target_owner.get_or_null(p_render_target);
+ ERR_FAIL_NULL_V(rt, 0);
+
+ return rt->fbo;
+}
+
+GLuint TextureStorage::render_target_get_color(RID p_render_target) const {
+ RenderTarget *rt = render_target_owner.get_or_null(p_render_target);
+ ERR_FAIL_NULL_V(rt, 0);
+
+ if (rt->overridden.color.is_valid()) {
+ Texture *texture = get_texture(rt->overridden.color);
+ ERR_FAIL_NULL_V(texture, 0);
+
+ return texture->tex_id;
+ } else {
+ return rt->color;
+ }
+}
+
+GLuint TextureStorage::render_target_get_depth(RID p_render_target) const {
+ RenderTarget *rt = render_target_owner.get_or_null(p_render_target);
+ ERR_FAIL_NULL_V(rt, 0);
+
+ if (rt->overridden.depth.is_valid()) {
+ Texture *texture = get_texture(rt->overridden.depth);
+ ERR_FAIL_NULL_V(texture, 0);
+
+ return texture->tex_id;
+ } else {
+ return rt->depth;
+ }
+}
+
void TextureStorage::render_target_set_sdf_size_and_scale(RID p_render_target, RS::ViewportSDFOversize p_size, RS::ViewportSDFScale p_scale) {
RenderTarget *rt = render_target_owner.get_or_null(p_render_target);
ERR_FAIL_NULL(rt);