@@ -33,6 +33,7 @@ var is_2d_mesh := false
3333 size = value
3434 _queue_update_pipeline ()
3535
36+
3637@export var clear_color := Color .TRANSPARENT :
3738 get : return clear_color
3839 set (value ):
@@ -42,18 +43,22 @@ var is_2d_mesh := false
4243@export var mesh : Mesh :
4344 get : return mesh
4445 set (value ):
45- if mesh != null : mesh .changed .disconnect (_queue_update_mesh )
46+ if mesh != null :
47+ mesh .changed .disconnect (_queue_update_mesh )
4648 mesh = value
4749 _queue_update_mesh ()
48- if mesh != null : mesh .changed .connect (_queue_update_mesh )
50+ if mesh != null :
51+ mesh .changed .connect (_queue_update_mesh )
4952
5053@export var base_texture : Texture2D :
5154 get : return base_texture
5255 set (value ):
53- if (base_texture != null ): base_texture .changed .disconnect (_queue_update_uniform_set )
56+ if base_texture != null :
57+ base_texture .changed .disconnect (_queue_update_uniform_set )
5458 base_texture = value
5559 _queue_update_uniform_set ()
56- if (base_texture != null ): base_texture .changed .connect (_queue_update_uniform_set )
60+ if base_texture != null :
61+ base_texture .changed .connect (_queue_update_uniform_set )
5762
5863
5964@export var projection : Projection = Projection .IDENTITY :
@@ -65,10 +70,12 @@ var is_2d_mesh := false
6570@export var glsl_file : RDShaderFile = preload ("res://base_texture.glsl" ):
6671 get : return glsl_file
6772 set (value ):
68- if (glsl_file != null ): glsl_file .changed .disconnect (_queue_update_shader )
73+ if glsl_file != null :
74+ glsl_file .changed .disconnect (_queue_update_shader )
6975 glsl_file = value
7076 _queue_update_shader ()
71- if (glsl_file != null ): glsl_file .changed .connect (_queue_update_shader )
77+ if glsl_file != null :
78+ glsl_file .changed .connect (_queue_update_shader )
7279
7380var _update_queued := false
7481
@@ -93,14 +100,21 @@ func _init() -> void:
93100 glsl_file .changed .connect (_queue_update_shader )
94101 _queue_update_shader ()
95102
103+
96104func _notification (what : int ) -> void :
97105 if what == NOTIFICATION_PREDELETE :
98- if framebuffer_texture_rid .is_valid (): rd .free_rid (framebuffer_texture_rid )
99- if shader_rid .is_valid (): rd .free_rid (shader_rid )
100- if sampler_rid .is_valid (): rd .free_rid (sampler_rid )
101- if index_buffer_rid .is_valid (): rd .free_rid (index_buffer_rid )
102- if vertex_buffer_pos_rid .is_valid (): rd .free_rid (vertex_buffer_pos_rid )
103- if vertex_buffer_uv_rid .is_valid (): rd .free_rid (vertex_buffer_uv_rid )
106+ if framebuffer_texture_rid .is_valid ():
107+ rd .free_rid (framebuffer_texture_rid )
108+ if shader_rid .is_valid ():
109+ rd .free_rid (shader_rid )
110+ if sampler_rid .is_valid ():
111+ rd .free_rid (sampler_rid )
112+ if index_buffer_rid .is_valid ():
113+ rd .free_rid (index_buffer_rid )
114+ if vertex_buffer_pos_rid .is_valid ():
115+ rd .free_rid (vertex_buffer_pos_rid )
116+ if vertex_buffer_uv_rid .is_valid ():
117+ rd .free_rid (vertex_buffer_uv_rid )
104118 RenderingServer .free_rid (texture_rd )
105119
106120func update (force : bool = false ) -> void :
@@ -157,6 +171,7 @@ func _queue_update_mesh() -> void:
157171func _reset_vertex () -> void :
158172 if mesh == null or mesh .get_surface_count () == 0 :
159173 return
174+
160175 var surface_array := mesh .surface_get_arrays (0 )
161176 var vertex_array : Variant = surface_array [Mesh .ARRAY_VERTEX ]
162177 var indices : PackedInt32Array = surface_array [Mesh .ARRAY_INDEX ]
@@ -170,14 +185,16 @@ func _reset_vertex() -> void:
170185 var v : Vector2 = vertex_array [i ]
171186 # 2D Mesh needs to be downscaled to be visible in normal projection.
172187 vertex_array_vec3 [i ] = Vector3 (v .x , v .y , 0 ) / 100
188+
173189 vertex_array = vertex_array_vec3
174190
175191 var points_bytes : PackedByteArray = vertex_array .to_byte_array ()
176192
177193 if indices .size () > 0 :
178194 var indices_bytes := indices .to_byte_array ()
179195
180- if index_buffer_rid .is_valid (): rd .free_rid (index_buffer_rid )
196+ if index_buffer_rid .is_valid ():
197+ rd .free_rid (index_buffer_rid )
181198 index_buffer_rid = rd .index_buffer_create (indices .size (), RenderingDevice .INDEX_BUFFER_FORMAT_UINT32 , indices_bytes )
182199
183200 index_array_rid = rd .index_array_create (index_buffer_rid , 0 , indices .size ())
@@ -199,11 +216,13 @@ func _reset_shader() -> void:
199216 rd .free_rid (shader_rid )
200217 pipeline_rid = RID ()
201218 uniform_set_rid = RID ()
219+
202220 shader_rid = rd .shader_create_from_spirv (shader_spirv )
203221
204222func _reset_pipeline () -> void :
205223 if glsl_file == null :
206224 return
225+
207226 var tex_format := RDTextureFormat .new ()
208227 var tex_view := RDTextureView .new ()
209228 tex_format .texture_type = RenderingDevice .TEXTURE_TYPE_2D
@@ -219,6 +238,7 @@ func _reset_pipeline() -> void:
219238 RenderingServer .texture_replace (texture_rd , RenderingServer .texture_rd_create (tex_rid ) if tex_rid .is_valid () else RenderingServer .texture_2d_placeholder_create ())
220239 if framebuffer_texture_rid .is_valid ():
221240 rd .free_rid (framebuffer_texture_rid )
241+
222242 framebuffer_texture_rid = tex_rid
223243
224244 var blend := RDPipelineColorBlendState .new ()
@@ -231,15 +251,15 @@ func _reset_pipeline() -> void:
231251 rs .cull_mode = RenderingDevice .POLYGON_CULL_DISABLED
232252
233253 pipeline_rid = rd .render_pipeline_create (
234- shader_rid ,
235- rd .framebuffer_get_format (framebuffer_rid ),
236- vertex_format ,
237- RenderingDevice .RENDER_PRIMITIVE_TRIANGLES ,
238- rs ,
239- RDPipelineMultisampleState .new (),
240- RDPipelineDepthStencilState .new (),
241- blend
242- )
254+ shader_rid ,
255+ rd .framebuffer_get_format (framebuffer_rid ),
256+ vertex_format ,
257+ RenderingDevice .RENDER_PRIMITIVE_TRIANGLES ,
258+ rs ,
259+ RDPipelineMultisampleState .new (),
260+ RDPipelineDepthStencilState .new (),
261+ blend
262+ )
243263
244264func _reset_uniform () -> void :
245265 if not sampler_rid .is_valid () or base_texture == null or not base_texture .get_rid ().is_valid () or not shader_rid .is_valid ():
0 commit comments