Repository: godotengine/godot
File: drivers/gles3/rasterizer_scene_gles3.cpp (C++)

Code before:
			spec_constant_base_flags |= SceneShaderGLES3::APPLY_TONEMAPPING;
		}
	}
	// Render Opaque Objects.
	RenderListParameters render_list_params(render_list[RENDER_LIST_OPAQUE].elements.ptr(), render_list[RENDER_LIST_OPAQUE].elements.size(), reverse_cull, spec_constant_base_flags, use_wireframe);

	_render_list_template<PASS_MODE_COLOR>(&render_list_params, &render_data, 0, render_list[RENDER_LIST_OPAQUE].elements.size());

	scene_state.enable_gl_depth_draw(false);

	if (draw_sky || draw_sky_fog_only) {
		RENDER_TIMESTAMP("Render Sky");

		scene_state.enable_gl_depth_test(true);
		scene_state.enable_gl_blend(false);
		scene_state.set_gl_cull_mode(GLES3::SceneShaderData::CULL_BACK);

		Projection projection = render_data.cam_projection;
		if (is_reflection_probe) {
			Projection correction;
			correction.columns[1][1] = -1.0;
			projection = correction * render_data.cam_projection;
		}

		_draw_sky(render_data.environment, projection, render_data.cam_transform, sky_energy_multiplier, render_data.luminance_multiplier, p_camera_data->view_count > 1, flip_y, apply_color_adjustments_in_post);
	}

	if (rt && (scene_state.used_screen_texture || scene_state.used_depth_texture)) {
		Size2i size;
		GLuint backbuffer_fbo = 0;
		GLuint backbuffer = 0;
		GLuint backbuffer_depth = 0;

		if (rb->get_scaling_3d_mode() == RS::VIEWPORT_SCALING_3D_MODE_OFF) {
			texture_storage->check_backbuffer(rt, scene_state.used_screen_texture, scene_state.used_depth_texture); // note, badly names, this just allocates!

			size = rt->size;
			backbuffer_fbo = rt->backbuffer_fbo;
			backbuffer = rt->backbuffer;
			backbuffer_depth = rt->backbuffer_depth;
		} else {
			rb->check_backbuffer(scene_state.used_screen_texture, scene_state.used_depth_texture);
			size = rb->get_internal_size();
			backbuffer_fbo = rb->get_backbuffer_fbo();
			backbuffer = rb->get_backbuffer();
			backbuffer_depth = rb->get_backbuffer_depth();
		}

		if (backbuffer_fbo != 0) {
			glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo);
			glReadBuffer(GL_COLOR_ATTACHMENT0);

Review comment (suggestion):
```suggestion
			// Sky is drawn upside down, the frustum offset doesn't know the image is upside down so needs a flip.
```
Per the [comment style](https://docs.godotengine.org/en/latest/contributing/development/code_style_guidelines.html#comment-style-guide). 

Code after:
		if (!apply_color_adjustments_in_post) {
			spec_constant_base_flags |= SceneShaderGLES3::APPLY_TONEMAPPING;
		}
	}
	// Render Opaque Objects.
	RenderListParameters render_list_params(render_list[RENDER_LIST_OPAQUE].elements.ptr(), render_list[RENDER_LIST_OPAQUE].elements.size(), reverse_cull, spec_constant_base_flags, use_wireframe);

	_render_list_template<PASS_MODE_COLOR>(&render_list_params, &render_data, 0, render_list[RENDER_LIST_OPAQUE].elements.size());

	scene_state.enable_gl_depth_draw(false);

	if (draw_sky || draw_sky_fog_only) {
		RENDER_TIMESTAMP("Render Sky");

		scene_state.enable_gl_depth_test(true);
		scene_state.enable_gl_blend(false);
		scene_state.set_gl_cull_mode(GLES3::SceneShaderData::CULL_BACK);

		Transform3D transform = render_data.cam_transform;
		Projection projection = render_data.cam_projection;
		if (is_reflection_probe) {
			Projection correction;
			correction.columns[1][1] = -1.0;
			projection = correction * render_data.cam_projection;
		} else if (render_data.cam_frustum) {
			// Sky is drawn upside down, the frustum offset doesn't know the image is upside down so needs a flip.
			projection[2].y = -projection[2].y;
		}

		_draw_sky(render_data.environment, projection, transform, sky_energy_multiplier, render_data.luminance_multiplier, p_camera_data->view_count > 1, flip_y, apply_color_adjustments_in_post);
	}

	if (rt && (scene_state.used_screen_texture || scene_state.used_depth_texture)) {
		Size2i size;
		GLuint backbuffer_fbo = 0;
		GLuint backbuffer = 0;
		GLuint backbuffer_depth = 0;

		if (rb->get_scaling_3d_mode() == RS::VIEWPORT_SCALING_3D_MODE_OFF) {
			texture_storage->check_backbuffer(rt, scene_state.used_screen_texture, scene_state.used_depth_texture); // note, badly names, this just allocates!

			size = rt->size;
			backbuffer_fbo = rt->backbuffer_fbo;
			backbuffer = rt->backbuffer;
			backbuffer_depth = rt->backbuffer_depth;
		} else {
			rb->check_backbuffer(scene_state.used_screen_texture, scene_state.used_depth_texture);
			size = rb->get_internal_size();
			backbuffer_fbo = rb->get_backbuffer_fbo();
			backbuffer = rb->get_backbuffer();
			backbuffer_depth = rb->get_backbuffer_depth();