diff options
Diffstat (limited to 'servers/rendering/renderer_rd/environment/sky.h')
| -rw-r--r-- | servers/rendering/renderer_rd/environment/sky.h | 54 | 
1 files changed, 29 insertions, 25 deletions
| diff --git a/servers/rendering/renderer_rd/environment/sky.h b/servers/rendering/renderer_rd/environment/sky.h index 080165c112..45c4f9bda7 100644 --- a/servers/rendering/renderer_rd/environment/sky.h +++ b/servers/rendering/renderer_rd/environment/sky.h @@ -42,6 +42,7 @@  // Forward declare RendererSceneRenderRD so we can pass it into some of our methods, these classes are pretty tightly bound  class RendererSceneRenderRD; +class RenderSceneBuffersRD;  namespace RendererRD { @@ -100,10 +101,9 @@ private:  		float orientation[12]; // 48 - 48  		float projections[RendererSceneRender::MAX_RENDER_VIEWS][4]; // 2 x 16 - 80  		float position[3]; // 12 - 92 -		float multiplier; // 4 - 96 -		float time; // 4 - 100 -		float luminance_multiplier; // 4 - 104 -		float pad[2]; // 8 - 112 // Using pad to align on 16 bytes +		float time; // 4 - 96 +		float pad[3]; // 12 - 108 +		float luminance_multiplier; // 4 - 112  		// 128 is the max size of a push constant. We can replace "pad" but we can't add any more.  	}; @@ -130,10 +130,10 @@ private:  		virtual void set_code(const String &p_Code);  		virtual void set_path_hint(const String &p_hint); -		virtual void set_default_texture_param(const StringName &p_name, RID p_texture, int p_index); +		virtual void set_default_texture_parameter(const StringName &p_name, RID p_texture, int p_index);  		virtual void get_shader_uniform_list(List<PropertyInfo> *p_param_list) const;  		virtual void get_instance_param_list(List<RendererMaterialStorage::InstanceShaderParam> *p_param_list) const; -		virtual bool is_param_texture(const StringName &p_param) const; +		virtual bool is_parameter_texture(const StringName &p_param) const;  		virtual bool is_animated() const;  		virtual bool casts_shadows() const;  		virtual Variant get_default_parameter(const StringName &p_parameter) const; @@ -143,25 +143,28 @@ private:  		virtual ~SkyShaderData();  	}; -	void _render_sky(RD::DrawListID p_list, float p_time, RID p_fb, PipelineCacheRD *p_pipeline, RID p_uniform_set, RID p_texture_set, uint32_t p_view_count, const Projection *p_projections, const Basis &p_orientation, float p_multiplier, const Vector3 &p_position, float p_luminance_multiplier); +	void _render_sky(RD::DrawListID p_list, float p_time, RID p_fb, PipelineCacheRD *p_pipeline, RID p_uniform_set, RID p_texture_set, uint32_t p_view_count, const Projection *p_projections, const Basis &p_orientation, const Vector3 &p_position, float p_luminance_multiplier);  public:  	struct SkySceneState {  		struct UBO { -			uint32_t volumetric_fog_enabled; -			float volumetric_fog_inv_length; -			float volumetric_fog_detail_spread; - -			float fog_aerial_perspective; - -			float fog_light_color[3]; -			float fog_sun_scatter; - -			uint32_t fog_enabled; -			float fog_density; - -			float z_far; -			uint32_t directional_light_count; +			uint32_t volumetric_fog_enabled; // 4 - 4 +			float volumetric_fog_inv_length; // 4 - 8 +			float volumetric_fog_detail_spread; // 4 - 12 +			float volumetric_fog_sky_affect; // 4 - 16 + +			uint32_t fog_enabled; // 4 - 20 +			float fog_sky_affect; // 4 - 24 +			float fog_density; // 4 - 28 +			float fog_sun_scatter; // 4 - 32 + +			float fog_light_color[3]; // 12 - 44 +			float fog_aerial_perspective; // 4 - 48 + +			float z_far; // 4 - 52 +			uint32_t directional_light_count; // 4 - 56 +			uint32_t pad1; // 4 - 60 +			uint32_t pad2; // 4 - 64  		};  		UBO ubo; @@ -264,6 +267,7 @@ public:  		bool dirty = false;  		int processing_layer = 0;  		Sky *dirty_list = nullptr; +		float baked_exposure = 1.0;  		//State to track when radiance cubemap needs updating  		SkyMaterialData *prev_material = nullptr; @@ -296,9 +300,9 @@ public:  	void set_texture_format(RD::DataFormat p_texture_format);  	~SkyRD(); -	void setup(RID p_env, RID p_render_buffers, const PagedArray<RID> &p_lights, const Projection &p_projection, const Transform3D &p_transform, const Size2i p_screen_size, RendererSceneRenderRD *p_scene_render); +	void setup(RID p_env, Ref<RenderSceneBuffersRD> p_render_buffers, const PagedArray<RID> &p_lights, RID p_camera_attributes, const Projection &p_projection, const Transform3D &p_transform, const Size2i p_screen_size, RendererSceneRenderRD *p_scene_render);  	void update(RID p_env, const Projection &p_projection, const Transform3D &p_transform, double p_time, float p_luminance_multiplier = 1.0); -	void draw(RID p_env, bool p_can_continue_color, bool p_can_continue_depth, RID p_fb, uint32_t p_view_count, const Projection *p_projections, const Transform3D &p_transform, double p_time); // only called by clustered renderer +	void draw(RID p_env, bool p_can_continue_color, bool p_can_continue_depth, RID p_fb, uint32_t p_view_count, const Projection *p_projections, const Transform3D &p_transform, double p_time, float p_luminance_multiplier = 1.0); // only called by clustered renderer  	void update_res_buffers(RID p_env, uint32_t p_view_count, const Projection *p_projections, const Transform3D &p_transform, double p_time, float p_luminance_multiplier = 1.0);  	void draw(RD::DrawListID p_draw_list, RID p_env, RID p_fb, uint32_t p_view_count, const Projection *p_projections, const Transform3D &p_transform, double p_time, float p_luminance_multiplier = 1.0); @@ -306,6 +310,8 @@ public:  	void update_dirty_skys();  	RID sky_get_material(RID p_sky) const; +	RID sky_get_radiance_texture_rd(RID p_sky) const; +	float sky_get_baked_exposure(RID p_sky) const;  	RID allocate_sky_rid();  	void initialize_sky_rid(RID p_rid); @@ -315,8 +321,6 @@ public:  	void sky_set_mode(RID p_sky, RS::SkyMode p_mode);  	void sky_set_material(RID p_sky, RID p_material);  	Ref<Image> sky_bake_panorama(RID p_sky, float p_energy, bool p_bake_irradiance, const Size2i &p_size); - -	RID sky_get_radiance_texture_rd(RID p_sky) const;  };  } // namespace RendererRD |