diff options
| -rw-r--r-- | drivers/gles2/rasterizer_storage_gles2.cpp | 26 | 
1 files changed, 19 insertions, 7 deletions
| diff --git a/drivers/gles2/rasterizer_storage_gles2.cpp b/drivers/gles2/rasterizer_storage_gles2.cpp index 9d9bceb243..b101a091fe 100644 --- a/drivers/gles2/rasterizer_storage_gles2.cpp +++ b/drivers/gles2/rasterizer_storage_gles2.cpp @@ -5156,14 +5156,26 @@ void RasterizerStorageGLES2::render_target_set_external_texture(RID p_render_tar  		// is there a point to setting the internal formats? we don't know them.. -		// set our texture as the destination for our framebuffer -		glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, p_texture_id, 0); - -		// seeing we're rendering into this directly, better also use our depth buffer, just use our existing one :) -		if (config.support_depth_texture) { -			glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, rt->depth, 0); +		// check if MSAA is active to set the correct depth buffer and target texture for android +		if (rt->multisample_active) { +#if defined(GLES_OVER_GL) || defined(IPHONE_ENABLED) +			glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, p_texture_id); +#elif ANDROID_ENABLED +			static const int msaa_value[] = { 0, 2, 4, 8, 16 }; +			int msaa = msaa_value[rt->msaa]; +			glFramebufferTexture2DMultisample(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, p_texture_id, 0, msaa); +#endif +			glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rt->multisample_depth);  		} else { -			glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rt->depth); +			// set our texture as the destination for our framebuffer +			glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, p_texture_id, 0); + +			// seeing we're rendering into this directly, better also use our depth buffer, just use our existing one :) +			if (config.support_depth_texture) { +				glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, rt->depth, 0); +			} else { +				glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rt->depth); +			}  		}  		// check status and unbind |