Merge pull request #88745 from clayjohn/GLES3-system-fbo
Consistently use `system_fbo` instead of binding 0 as it is needed for iOS devices
This commit is contained in:
commit
415a334f5f
12 changed files with 37 additions and 34 deletions
|
@ -207,8 +207,8 @@ void CopyEffects::bilinear_blur(GLuint p_source_texture, int p_mipmap_count, con
|
||||||
glBindFramebuffer(GL_READ_FRAMEBUFFER, framebuffers[i % 2]);
|
glBindFramebuffer(GL_READ_FRAMEBUFFER, framebuffers[i % 2]);
|
||||||
source_region = dest_region;
|
source_region = dest_region;
|
||||||
}
|
}
|
||||||
glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_READ_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
glDeleteFramebuffers(2, framebuffers);
|
glDeleteFramebuffers(2, framebuffers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -274,7 +274,7 @@ void CopyEffects::gaussian_blur(GLuint p_source_texture, int p_mipmap_count, con
|
||||||
source_region = dest_region;
|
source_region = dest_region;
|
||||||
normalized_source_region = normalized_dest_region;
|
normalized_source_region = normalized_dest_region;
|
||||||
}
|
}
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
glDeleteFramebuffers(1, &framebuffer);
|
glDeleteFramebuffers(1, &framebuffer);
|
||||||
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#ifdef GLES3_ENABLED
|
#ifdef GLES3_ENABLED
|
||||||
|
|
||||||
#include "glow.h"
|
#include "glow.h"
|
||||||
|
#include "../storage/texture_storage.h"
|
||||||
|
|
||||||
using namespace GLES3;
|
using namespace GLES3;
|
||||||
|
|
||||||
|
@ -166,7 +167,7 @@ void Glow::process_glow(GLuint p_source_color, Size2i p_size, const Glow::GLOWLE
|
||||||
glDepthMask(GL_TRUE);
|
glDepthMask(GL_TRUE);
|
||||||
glUseProgram(0);
|
glUseProgram(0);
|
||||||
glBindTexture(GL_TEXTURE_2D, 0);
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // GLES3_ENABLED
|
#endif // GLES3_ENABLED
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#ifdef GLES3_ENABLED
|
#ifdef GLES3_ENABLED
|
||||||
|
|
||||||
#include "post_effects.h"
|
#include "post_effects.h"
|
||||||
|
#include "../storage/texture_storage.h"
|
||||||
|
|
||||||
using namespace GLES3;
|
using namespace GLES3;
|
||||||
|
|
||||||
|
@ -146,7 +147,7 @@ void PostEffects::post_copy(GLuint p_dest_framebuffer, Size2i p_dest_size, GLuin
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
glDepthMask(GL_TRUE);
|
glDepthMask(GL_TRUE);
|
||||||
glUseProgram(0);
|
glUseProgram(0);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // GLES3_ENABLED
|
#endif // GLES3_ENABLED
|
||||||
|
|
|
@ -1689,7 +1689,7 @@ void RasterizerCanvasGLES3::light_update_shadow(RID p_rid, int p_shadow_index, c
|
||||||
}
|
}
|
||||||
|
|
||||||
glBindVertexArray(0);
|
glBindVertexArray(0);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
glDepthMask(GL_FALSE);
|
glDepthMask(GL_FALSE);
|
||||||
glDisable(GL_DEPTH_TEST);
|
glDisable(GL_DEPTH_TEST);
|
||||||
glDisable(GL_SCISSOR_TEST);
|
glDisable(GL_SCISSOR_TEST);
|
||||||
|
@ -1797,7 +1797,7 @@ void RasterizerCanvasGLES3::light_update_directional_shadow(RID p_rid, int p_sha
|
||||||
cl->shadow.directional_xform = to_shadow * to_light_xform;
|
cl->shadow.directional_xform = to_shadow * to_light_xform;
|
||||||
|
|
||||||
glBindVertexArray(0);
|
glBindVertexArray(0);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
glDepthMask(GL_FALSE);
|
glDepthMask(GL_FALSE);
|
||||||
glDisable(GL_DEPTH_TEST);
|
glDisable(GL_DEPTH_TEST);
|
||||||
glDisable(GL_SCISSOR_TEST);
|
glDisable(GL_SCISSOR_TEST);
|
||||||
|
@ -1911,7 +1911,7 @@ void RasterizerCanvasGLES3::render_sdf(RID p_render_target, LightOccluderInstanc
|
||||||
|
|
||||||
texture_storage->render_target_sdf_process(p_render_target); //done rendering, process it
|
texture_storage->render_target_sdf_process(p_render_target); //done rendering, process it
|
||||||
glBindVertexArray(0);
|
glBindVertexArray(0);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
}
|
}
|
||||||
|
|
||||||
RID RasterizerCanvasGLES3::occluder_polygon_create() {
|
RID RasterizerCanvasGLES3::occluder_polygon_create() {
|
||||||
|
|
|
@ -418,7 +418,7 @@ void RasterizerGLES3::_blit_render_target_to_screen(RID p_render_target, Display
|
||||||
GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
||||||
|
|
||||||
if (read_fbo != 0) {
|
if (read_fbo != 0) {
|
||||||
glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_READ_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
glDeleteFramebuffers(1, &read_fbo);
|
glDeleteFramebuffers(1, &read_fbo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -442,7 +442,7 @@ void RasterizerGLES3::set_boot_image(const Ref<Image> &p_image, const Color &p_c
|
||||||
|
|
||||||
Size2i win_size = DisplayServer::get_singleton()->window_get_size();
|
Size2i win_size = DisplayServer::get_singleton()->window_get_size();
|
||||||
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
glViewport(0, 0, win_size.width, win_size.height);
|
glViewport(0, 0, win_size.width, win_size.height);
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ZERO, GL_ONE);
|
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ZERO, GL_ONE);
|
||||||
|
|
|
@ -1107,7 +1107,7 @@ void RasterizerSceneGLES3::_filter_sky_radiance(Sky *p_sky, int p_base_layer) {
|
||||||
}
|
}
|
||||||
glBindVertexArray(0);
|
glBindVertexArray(0);
|
||||||
glViewport(0, 0, p_sky->screen_size.x, p_sky->screen_size.y);
|
glViewport(0, 0, p_sky->screen_size.x, p_sky->screen_size.y);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ref<Image> RasterizerSceneGLES3::sky_bake_panorama(RID p_sky, float p_energy, bool p_bake_irradiance, const Size2i &p_size) {
|
Ref<Image> RasterizerSceneGLES3::sky_bake_panorama(RID p_sky, float p_energy, bool p_bake_irradiance, const Size2i &p_size) {
|
||||||
|
@ -1148,7 +1148,7 @@ Ref<Image> RasterizerSceneGLES3::sky_bake_panorama(RID p_sky, float p_energy, bo
|
||||||
|
|
||||||
copy_effects->copy_cube_to_panorama(p_bake_irradiance ? float(sky->mipmap_count) : 0.0);
|
copy_effects->copy_cube_to_panorama(p_bake_irradiance ? float(sky->mipmap_count) : 0.0);
|
||||||
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
glDeleteFramebuffers(1, &rad_fbo);
|
glDeleteFramebuffers(1, &rad_fbo);
|
||||||
// Create a dummy texture so we can use texture_2d_get.
|
// Create a dummy texture so we can use texture_2d_get.
|
||||||
RID tex_rid = GLES3::TextureStorage::get_singleton()->texture_allocate();
|
RID tex_rid = GLES3::TextureStorage::get_singleton()->texture_allocate();
|
||||||
|
@ -2303,7 +2303,7 @@ void RasterizerSceneGLES3::_render_shadow_pass(RID p_light, RID p_shadow_atlas,
|
||||||
scene_state.enable_gl_depth_draw(true);
|
scene_state.enable_gl_depth_draw(true);
|
||||||
glDisable(GL_CULL_FACE);
|
glDisable(GL_CULL_FACE);
|
||||||
scene_state.cull_mode = GLES3::SceneShaderData::CULL_DISABLED;
|
scene_state.cull_mode = GLES3::SceneShaderData::CULL_DISABLED;
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_buffers, const CameraData *p_camera_data, const CameraData *p_prev_camera_data, const PagedArray<RenderGeometryInstance *> &p_instances, const PagedArray<RID> &p_lights, const PagedArray<RID> &p_reflection_probes, const PagedArray<RID> &p_voxel_gi_instances, const PagedArray<RID> &p_decals, const PagedArray<RID> &p_lightmaps, const PagedArray<RID> &p_fog_volumes, RID p_environment, RID p_camera_attributes, RID p_compositor, RID p_shadow_atlas, RID p_occluder_debug_tex, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass, float p_screen_mesh_lod_threshold, const RenderShadowData *p_render_shadows, int p_render_shadow_count, const RenderSDFGIData *p_render_sdfgi_regions, int p_render_sdfgi_region_count, const RenderSDFGIUpdateData *p_sdfgi_update_data, RenderingMethod::RenderInfo *r_render_info) {
|
void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_buffers, const CameraData *p_camera_data, const CameraData *p_prev_camera_data, const PagedArray<RenderGeometryInstance *> &p_instances, const PagedArray<RID> &p_lights, const PagedArray<RID> &p_reflection_probes, const PagedArray<RID> &p_voxel_gi_instances, const PagedArray<RID> &p_decals, const PagedArray<RID> &p_lightmaps, const PagedArray<RID> &p_fog_volumes, RID p_environment, RID p_camera_attributes, RID p_compositor, RID p_shadow_atlas, RID p_occluder_debug_tex, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass, float p_screen_mesh_lod_threshold, const RenderShadowData *p_render_shadows, int p_render_shadow_count, const RenderSDFGIData *p_render_sdfgi_regions, int p_render_sdfgi_region_count, const RenderSDFGIUpdateData *p_sdfgi_update_data, RenderingMethod::RenderInfo *r_render_info) {
|
||||||
|
@ -3573,7 +3573,7 @@ void RasterizerSceneGLES3::render_particle_collider_heightfield(RID p_collider,
|
||||||
_render_list_template<PASS_MODE_SHADOW>(&render_list_params, &render_data, 0, render_list[RENDER_LIST_SECONDARY].elements.size());
|
_render_list_template<PASS_MODE_SHADOW>(&render_list_params, &render_data, 0, render_list[RENDER_LIST_SECONDARY].elements.size());
|
||||||
|
|
||||||
glColorMask(1, 1, 1, 1);
|
glColorMask(1, 1, 1, 1);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneGLES3::_render_uv2(const PagedArray<RenderGeometryInstance *> &p_instances, GLuint p_framebuffer, const Rect2i &p_region) {
|
void RasterizerSceneGLES3::_render_uv2(const PagedArray<RenderGeometryInstance *> &p_instances, GLuint p_framebuffer, const Rect2i &p_region) {
|
||||||
|
@ -3655,7 +3655,7 @@ void RasterizerSceneGLES3::_render_uv2(const PagedArray<RenderGeometryInstance *
|
||||||
|
|
||||||
GLuint db = GL_COLOR_ATTACHMENT0;
|
GLuint db = GL_COLOR_ATTACHMENT0;
|
||||||
glDrawBuffers(1, &db);
|
glDrawBuffers(1, &db);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3759,7 +3759,7 @@ void RasterizerSceneGLES3::_render_buffers_debug_draw(Ref<RenderSceneBuffersGLES
|
||||||
|
|
||||||
copy_effects->copy_to_rect(Rect2(Vector2(), Vector2(0.5, 0.5)));
|
copy_effects->copy_to_rect(Rect2(Vector2(), Vector2(0.5, 0.5)));
|
||||||
glBindTexture(GL_TEXTURE_2D, 0);
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (debug_draw == RS::VIEWPORT_DEBUG_DRAW_DIRECTIONAL_SHADOW_ATLAS) {
|
if (debug_draw == RS::VIEWPORT_DEBUG_DRAW_DIRECTIONAL_SHADOW_ATLAS) {
|
||||||
|
|
|
@ -1044,7 +1044,7 @@ bool LightStorage::_shadow_atlas_find_shadow(ShadowAtlas *shadow_atlas, int *p_i
|
||||||
|
|
||||||
glBindTexture(GL_TEXTURE_2D, 0);
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
}
|
}
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
|
|
||||||
r_quadrant = qidx;
|
r_quadrant = qidx;
|
||||||
r_shadow = shadow_atlas->quadrants[qidx].textures.size();
|
r_shadow = shadow_atlas->quadrants[qidx].textures.size();
|
||||||
|
@ -1135,7 +1135,7 @@ void LightStorage::update_directional_shadow_atlas() {
|
||||||
glClear(GL_DEPTH_BUFFER_BIT);
|
glClear(GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
glBindTexture(GL_TEXTURE_2D, 0);
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LightStorage::directional_shadow_atlas_set_size(int p_size, bool p_16_bits) {
|
void LightStorage::directional_shadow_atlas_set_size(int p_size, bool p_16_bits) {
|
||||||
|
|
|
@ -686,7 +686,7 @@ public:
|
||||||
|
|
||||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, atlas->debug_texture, 0);
|
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, atlas->debug_texture, 0);
|
||||||
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
|
|
||||||
return atlas->debug_fbo;
|
return atlas->debug_fbo;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include "mesh_storage.h"
|
#include "mesh_storage.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "material_storage.h"
|
#include "material_storage.h"
|
||||||
|
#include "texture_storage.h"
|
||||||
#include "utilities.h"
|
#include "utilities.h"
|
||||||
|
|
||||||
using namespace GLES3;
|
using namespace GLES3;
|
||||||
|
@ -1248,7 +1249,7 @@ void MeshStorage::update_mesh_instances() {
|
||||||
}
|
}
|
||||||
|
|
||||||
glEnable(GL_RASTERIZER_DISCARD);
|
glEnable(GL_RASTERIZER_DISCARD);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
// Process skeletons and blend shapes using transform feedback
|
// Process skeletons and blend shapes using transform feedback
|
||||||
while (dirty_mesh_instance_arrays.first()) {
|
while (dirty_mesh_instance_arrays.first()) {
|
||||||
MeshInstance *mi = dirty_mesh_instance_arrays.first()->self();
|
MeshInstance *mi = dirty_mesh_instance_arrays.first()->self();
|
||||||
|
|
|
@ -818,7 +818,7 @@ void ParticlesStorage::particles_set_view_axis(RID p_particles, const Vector3 &p
|
||||||
}
|
}
|
||||||
|
|
||||||
glEnable(GL_RASTERIZER_DISCARD);
|
glEnable(GL_RASTERIZER_DISCARD);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
_particles_update_instance_buffer(particles, axis, p_up_axis);
|
_particles_update_instance_buffer(particles, axis, p_up_axis);
|
||||||
glDisable(GL_RASTERIZER_DISCARD);
|
glDisable(GL_RASTERIZER_DISCARD);
|
||||||
}
|
}
|
||||||
|
@ -1002,7 +1002,7 @@ void ParticlesStorage::_particles_update_instance_buffer(Particles *particles, c
|
||||||
|
|
||||||
void ParticlesStorage::update_particles() {
|
void ParticlesStorage::update_particles() {
|
||||||
glEnable(GL_RASTERIZER_DISCARD);
|
glEnable(GL_RASTERIZER_DISCARD);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
|
|
||||||
GLuint global_buffer = GLES3::MaterialStorage::get_singleton()->global_shader_parameters_get_uniform_buffer();
|
GLuint global_buffer = GLES3::MaterialStorage::get_singleton()->global_shader_parameters_get_uniform_buffer();
|
||||||
|
|
||||||
|
@ -1262,7 +1262,7 @@ GLuint ParticlesStorage::particles_collision_get_heightfield_framebuffer(RID p_p
|
||||||
particles_collision->heightfield_fb_size = size;
|
particles_collision->heightfield_fb_size = size;
|
||||||
|
|
||||||
glBindTexture(GL_TEXTURE_2D, 0);
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
}
|
}
|
||||||
|
|
||||||
return particles_collision->heightfield_fb;
|
return particles_collision->heightfield_fb;
|
||||||
|
|
|
@ -121,7 +121,7 @@ GLuint RenderSceneBuffersGLES3::_rt_get_cached_fbo(GLuint p_color, GLuint p_dept
|
||||||
msaa3d.cached_fbos.push_back(new_fbo);
|
msaa3d.cached_fbos.push_back(new_fbo);
|
||||||
}
|
}
|
||||||
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return new_fbo.fbo;
|
return new_fbo.fbo;
|
||||||
|
@ -265,7 +265,7 @@ void RenderSceneBuffersGLES3::_check_render_buffers() {
|
||||||
}
|
}
|
||||||
|
|
||||||
glBindTexture(texture_target, 0);
|
glBindTexture(texture_target, 0);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (msaa3d.mode != RS::VIEWPORT_MSAA_DISABLED) {
|
if (msaa3d.mode != RS::VIEWPORT_MSAA_DISABLED) {
|
||||||
|
@ -316,7 +316,7 @@ void RenderSceneBuffersGLES3::_check_render_buffers() {
|
||||||
}
|
}
|
||||||
|
|
||||||
glBindRenderbuffer(GL_RENDERBUFFER, 0);
|
glBindRenderbuffer(GL_RENDERBUFFER, 0);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
#if !defined(IOS_ENABLED) && !defined(WEB_ENABLED)
|
#if !defined(IOS_ENABLED) && !defined(WEB_ENABLED)
|
||||||
} else if (use_multiview && !config->rt_msaa_multiview_supported) {
|
} else if (use_multiview && !config->rt_msaa_multiview_supported) {
|
||||||
// Render to texture extensions not supported? fall back to MSAA textures through GL_EXT_multiview_texture_multisample.
|
// Render to texture extensions not supported? fall back to MSAA textures through GL_EXT_multiview_texture_multisample.
|
||||||
|
@ -362,7 +362,7 @@ void RenderSceneBuffersGLES3::_check_render_buffers() {
|
||||||
}
|
}
|
||||||
|
|
||||||
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, 0);
|
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, 0);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
#endif
|
#endif
|
||||||
#if defined(ANDROID_ENABLED) || defined(WEB_ENABLED) // Only supported on OpenGLES!
|
#if defined(ANDROID_ENABLED) || defined(WEB_ENABLED) // Only supported on OpenGLES!
|
||||||
} else if (!use_internal_buffer) {
|
} else if (!use_internal_buffer) {
|
||||||
|
@ -390,7 +390,7 @@ void RenderSceneBuffersGLES3::_check_render_buffers() {
|
||||||
WARN_PRINT("Could not create 3D MSAA framebuffer, status: " + texture_storage->get_framebuffer_error(status));
|
WARN_PRINT("Could not create 3D MSAA framebuffer, status: " + texture_storage->get_framebuffer_error(status));
|
||||||
}
|
}
|
||||||
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
// HUH? how did we get here?
|
// HUH? how did we get here?
|
||||||
|
@ -531,7 +531,7 @@ void RenderSceneBuffersGLES3::check_backbuffer(bool p_need_color, bool p_need_de
|
||||||
}
|
}
|
||||||
|
|
||||||
glBindTexture(texture_target, 0);
|
glBindTexture(texture_target, 0);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderSceneBuffersGLES3::_clear_back_buffers() {
|
void RenderSceneBuffersGLES3::_clear_back_buffers() {
|
||||||
|
@ -607,7 +607,7 @@ void RenderSceneBuffersGLES3::check_glow_buffers() {
|
||||||
}
|
}
|
||||||
|
|
||||||
glBindTexture(GL_TEXTURE_2D, 0);
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderSceneBuffersGLES3::_clear_glow_buffers() {
|
void RenderSceneBuffersGLES3::_clear_glow_buffers() {
|
||||||
|
|
|
@ -1090,7 +1090,7 @@ Ref<Image> TextureStorage::texture_2d_get(RID p_texture) const {
|
||||||
|
|
||||||
glReadPixels(0, 0, texture->alloc_width, texture->alloc_height, GL_RGBA, GL_UNSIGNED_BYTE, &w[0]);
|
glReadPixels(0, 0, texture->alloc_width, texture->alloc_height, GL_RGBA, GL_UNSIGNED_BYTE, &w[0]);
|
||||||
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
glDeleteTextures(1, &temp_color_texture);
|
glDeleteTextures(1, &temp_color_texture);
|
||||||
glDeleteFramebuffers(1, &temp_framebuffer);
|
glDeleteFramebuffers(1, &temp_framebuffer);
|
||||||
|
|
||||||
|
@ -1162,7 +1162,7 @@ Ref<Image> TextureStorage::texture_2d_layer_get(RID p_texture, int p_layer) cons
|
||||||
|
|
||||||
glReadPixels(0, 0, texture->alloc_width, texture->alloc_height, GL_RGBA, GL_UNSIGNED_BYTE, &w[0]);
|
glReadPixels(0, 0, texture->alloc_width, texture->alloc_height, GL_RGBA, GL_UNSIGNED_BYTE, &w[0]);
|
||||||
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
glDeleteTextures(1, &temp_color_texture);
|
glDeleteTextures(1, &temp_color_texture);
|
||||||
glDeleteFramebuffers(1, &temp_framebuffer);
|
glDeleteFramebuffers(1, &temp_framebuffer);
|
||||||
|
|
||||||
|
@ -1265,7 +1265,7 @@ Vector<Ref<Image>> TextureStorage::texture_3d_get(RID p_texture) const {
|
||||||
|
|
||||||
Vector<Ref<Image>> ret = _texture_3d_read_framebuffer(texture);
|
Vector<Ref<Image>> ret = _texture_3d_read_framebuffer(texture);
|
||||||
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
glDeleteTextures(1, &temp_color_texture);
|
glDeleteTextures(1, &temp_color_texture);
|
||||||
glDeleteFramebuffers(1, &temp_framebuffer);
|
glDeleteFramebuffers(1, &temp_framebuffer);
|
||||||
|
|
||||||
|
@ -1920,7 +1920,7 @@ void TextureStorage::update_texture_atlas() {
|
||||||
copy_effects->copy_to_rect(t->uv_rect);
|
copy_effects->copy_to_rect(t->uv_rect);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* DECAL API */
|
/* DECAL API */
|
||||||
|
|
Loading…
Reference in a new issue