chunk meshes

This commit is contained in:
maxwes08
2025-09-03 15:08:21 +02:00
parent 94ebc4ace4
commit 3678eaa5f8
8 changed files with 69 additions and 41 deletions

View File

@@ -6,7 +6,7 @@ namespace Voxel
{
private static int _ssbo;
private static int _vao;
private static List<FaceData> _faces = new List<FaceData>();
private static List<ChunkMesh> _chunkMeshes = new List<ChunkMesh>();
private static Shader _shader;
private static Texture _texture;
private static bool _needsUpdate = false;
@@ -35,31 +35,32 @@ namespace Voxel
GL.BindVertexArray(_vao);
GL.BindBuffer(BufferTarget.ShaderStorageBuffer, _ssbo);
if (_needsUpdate)
{
_needsUpdate = false;
byte[] data = _faces.SelectMany(f => f.Pack()).ToArray();
GL.BufferData(BufferTarget.ShaderStorageBuffer, data.Length, data, BufferUsageHint.StaticRead);
}
//if (_needsUpdate)
//{
// _needsUpdate = false;
// byte[] data = _faces.SelectMany(f => f.Pack()).ToArray();
// GL.BufferData(BufferTarget.ShaderStorageBuffer, data.Length, data, BufferUsageHint.StaticRead);
//}
_shader.Use();
_shader.SetMatrix4("view", Camera.view);
_shader.SetMatrix4("projection", Camera.projection);
GL.DrawArrays(PrimitiveType.Triangles, 0, _faces.Count * 6);
for (int i = 0; i < _chunkMeshes.Count; i++)
{
ChunkMesh chunkMesh = _chunkMeshes[i];
_shader.SetInt("chunkX", chunkMesh.X);
_shader.SetInt("chunkY", chunkMesh.Y);
GL.BufferData(BufferTarget.ShaderStorageBuffer, chunkMesh.PackedData.Length, chunkMesh.PackedData, BufferUsageHint.StaticRead);
GL.DrawArrays(PrimitiveType.Triangles, 0, chunkMesh.Length * 6);
}
//Console.WriteLine("Rendered " + _faces.Count.ToString() + " faces");
}
public static void AddFaces(List<FaceData> faces)
public static void AddChunkMesh(ChunkMesh chunkMesh)
{
_faces.AddRange(faces);
_needsUpdate = true;
}
public static void ClearFaces()
{
_faces.Clear();
_chunkMeshes.Add(chunkMesh);
}
}
}