remove unused UV buffer

This commit is contained in:
= 2026-02-14 13:06:50 +01:00
parent f4438c7ad0
commit e1cc3737fd
10 changed files with 33 additions and 43 deletions

View File

@ -2,8 +2,6 @@ extends RigidBody3D
var rot_x = 0
var rot_y = 0
@onready var world = preload("res://world.tscn")
@export var PLAYER_SPEED = 1.0
@export var PLAYER_REACH = 1000
@export var NOCLIP = false
@ -20,7 +18,7 @@ var delta_speed = 0
# Called when the node enters the scene tree for the first time.
func _ready():
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
#Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
camera = find_child("PlayerCamera")
pass # Replace with function body.

View File

@ -41,7 +41,7 @@ func _process(_delta: float) -> void:
if regenerate_mesh:
regenerate_mesh = false
clear()
var array_mesh = gpu_sdf.compute_mesh(chunk_size, threshold, self.position)
var array_mesh = await gpu_sdf.compute_mesh(chunk_size, threshold, self.position)
var trimesh_collision = array_mesh.create_trimesh_shape()
collisionShape3D.set_shape(trimesh_collision)
staticBody = StaticBody3D.new()

View File

@ -16,7 +16,6 @@ var pipeline2
var buffer
var surface_buffer
var normal_buffer
var uv_buffer
var idx_buffer
var counter_buffer
var chunk_position_buffer
@ -46,14 +45,15 @@ func create_device(world_size: int):
buffer = rd.storage_buffer_create(total * 4)
surface_buffer = rd.storage_buffer_create(total * 3 * 4)
normal_buffer = rd.storage_buffer_create(total * 3 * 4)
uv_buffer = rd.storage_buffer_create(total * 2 * 4)
idx_buffer = rd.storage_buffer_create(total * 6 * 4)
counter_buffer = rd.storage_buffer_create(4)
chunk_position_buffer = rd.storage_buffer_create(16) # vec4
params_buffer = rd.uniform_buffer_create(16) # world_size, threshold, time, etc
player_edits_buffer = rd.storage_buffer_create(256)
print("device created")
func compute_mesh(world_size: int, threshold: float, chunk_pos: Vector3) -> ArrayMesh:
await Engine.get_main_loop().process_frame
world_size += 2
# 1. Update existing buffers with NEW data for THIS chunk
@ -104,30 +104,25 @@ func compute_mesh(world_size: int, threshold: float, chunk_pos: Vector3) -> Arra
normal_uniform.uniform_type = RenderingDevice.UNIFORM_TYPE_STORAGE_BUFFER
normal_uniform.binding = 3
normal_uniform.add_id(normal_buffer)
var uv_uniform = RDUniform.new()
uv_uniform.uniform_type = RenderingDevice.UNIFORM_TYPE_STORAGE_BUFFER
uv_uniform.binding = 4
uv_uniform.add_id(uv_buffer)
var idx_uniform := RDUniform.new()
idx_uniform.uniform_type = RenderingDevice.UNIFORM_TYPE_STORAGE_BUFFER
idx_uniform.binding = 5
idx_uniform.binding = 4
idx_uniform.add_id(idx_buffer)
var counter_uniform := RDUniform.new()
counter_uniform.uniform_type = RenderingDevice.UNIFORM_TYPE_STORAGE_BUFFER
counter_uniform.binding = 6
counter_uniform.binding = 5
counter_uniform.add_id(counter_buffer)
var chunk_position_uniform := RDUniform.new()
chunk_position_uniform.uniform_type = RenderingDevice.UNIFORM_TYPE_STORAGE_BUFFER
chunk_position_uniform.binding = 7
chunk_position_uniform.binding = 6
chunk_position_uniform.add_id(chunk_position_buffer)
var player_edits_uniform := RDUniform.new()
player_edits_uniform.uniform_type = RenderingDevice.UNIFORM_TYPE_STORAGE_BUFFER
player_edits_uniform.binding = 8
player_edits_uniform.binding = 7
player_edits_uniform.add_id(player_edits_buffer)
var uniform_params := RDUniform.new()
@ -135,8 +130,8 @@ func compute_mesh(world_size: int, threshold: float, chunk_pos: Vector3) -> Arra
uniform_params.binding = 1
uniform_params.add_id(params_buffer)
var uniform_set1 := rd.uniform_set_create([uniform_buf, uniform_params, surface_uniform_buf, normal_uniform, uv_uniform, idx_uniform, counter_uniform, chunk_position_uniform, player_edits_uniform], shader_pass1, 0) # the last parameter (the 0) needs to match the "set" in our shader file
var uniform_set2 := rd.uniform_set_create([uniform_buf, uniform_params, surface_uniform_buf, normal_uniform, uv_uniform, idx_uniform, counter_uniform], shader_pass2, 0)
var uniform_set1 := rd.uniform_set_create([uniform_buf, uniform_params, surface_uniform_buf, normal_uniform, idx_uniform, counter_uniform, chunk_position_uniform, player_edits_uniform], shader_pass1, 0) # the last parameter (the 0) needs to match the "set" in our shader file
var uniform_set2 := rd.uniform_set_create([uniform_buf, uniform_params, surface_uniform_buf, normal_uniform, idx_uniform, counter_uniform], shader_pass2, 0)
var dispatch_count = int(ceil(world_size / 4.0))
@ -272,7 +267,6 @@ func _exit_tree():
buffer,
surface_buffer,
normal_buffer,
uv_buffer,
idx_buffer,
counter_buffer,
chunk_position_buffer,

View File

@ -19,27 +19,23 @@ layout(set = 0, binding = 2, std430) buffer SurfaceBuffer {
float surface_points[];
} surface;
layout(set = 0, binding = 3, std430) buffer NormalsBuffer {
float normals[];
} normal;
layout(set = 0, binding = 4, std430) buffer UVBuffer {
vec2 UVs[];
} UV;
layout(set = 0, binding = 5, std430) buffer IndexBuffer {
layout(set = 0, binding = 3, std430) buffer IndexBuffer {
uint indices[];
} mesh_indices;
layout(set = 0, binding = 6, std430) buffer Counter {
layout(set = 0, binding = 4, std430) buffer Counter {
uint count;
} index_count;
layout(set = 0, binding = 7, std430) buffer ChunkPos {
layout(set = 0, binding = 5, std430) buffer NormalsBuffer {
float normals[];
} normal;
layout(set = 0, binding = 6, std430) buffer ChunkPos {
float position_array[];
} chunk;
layout(set = 0, binding = 8, std430) buffer PlayerEdits {
layout(set = 0, binding = 7, std430) buffer PlayerEdits {
float position_size_array[];
} edits;

View File

@ -6,8 +6,8 @@ layout(local_size_x = 4, local_size_y = 4, local_size_z = 4) in;
layout(set = 0, binding = 0, std430) buffer DataBuffer { float sample_points[]; } voxels;
layout(set = 0, binding = 1) uniform Params { int world_size; float threshold; float u_time; } params;
layout(set = 0, binding = 2, std430) buffer SurfaceBuffer { float surface_points[]; } surface;
layout(set = 0, binding = 5, std430) buffer IndexBuffer { uint indices[]; } mesh_indices;
layout(set = 0, binding = 6, std430) buffer Counter { uint count; } index_count;
layout(set = 0, binding = 4, std430) buffer IndexBuffer { uint indices[]; } mesh_indices;
layout(set = 0, binding = 5, std430) buffer Counter { uint count; } index_count;
uint index3(uint x, uint y, uint z) {
return x + y * params.world_size + z * params.world_size * params.world_size;

View File

@ -12,7 +12,9 @@ var gpu_sdf
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
gpu_sdf = ComputeSdf.new()
print("creating device")
gpu_sdf.create_device(chunk_size)
await Engine.get_main_loop().process_frame
for x in range(world_size):
for y in range(world_size):
for z in range(world_size):

View File

@ -4,5 +4,6 @@
[node name="SmoothWorld" type="Node3D" unique_id=113243680]
script = ExtResource("1_4h467")
world_size = 8
chunk_size = 4
world_size = 2
threshold = 0.46

View File

@ -4,22 +4,21 @@ enum EnumWorld {CUBIC_WORLD, SMOOTH_WORLD}
@export var wanted_world: EnumWorld
var enabled_world: EnumWorld = EnumWorld.CUBIC_WORLD
var enabled_world: EnumWorld = EnumWorld.SMOOTH_WORLD
var smooth_world = preload("res://SurfaceNetsWorld/smooth_world.tscn")
var cubic_world = preload("res://cubic_world.tscn")
signal change_world
func _init() -> void:
add_child(smooth_world.instantiate())
func _process(_delta: float) -> void:
if enabled_world != wanted_world:
print("changing world")
emit_signal("change_world")
func _on_change_world():
func change_world():
match wanted_world:
EnumWorld.CUBIC_WORLD:
remove_child(smooth_world)
add_child(cubic_world.instantiate())
EnumWorld.SMOOTH_WORLD:
remove_child(cubic_world)
add_child(smooth_world.instantiate())
enabled_world = wanted_world

View File

@ -33,6 +33,7 @@ settings/addon_root_folder="res://addons/debug_draw_3d"
[display]
display_server/driver.linuxbsd="wayland"
window/vsync/vsync_mode=0
[editor]

View File

@ -28,8 +28,7 @@ transform = Transform3D(-0.866023, -0.433016, 0.250001, 0, 0.499998, 0.866027, -
shadow_enabled = true
[node name="Player" parent="." unique_id=1950519856 instance=ExtResource("3_036b0")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.182447, 0.6673207, 0.0726881)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.0396366, 2.252273, 7.2927423)
gravity_scale = 2.0
PLAYER_SPEED = 0.035
[connection signal="change_world" from="." to="." method="_on_change_world"]
NOCLIP = true