#ifndef VOXEL_MESHER #define VOXEL_MESHER #include #include #include #include "voxel.h" #include "voxel_buffer.h" #include "voxel_library.h" #include "zprofiling.h" // TODO Should be renamed VoxelMesherCubic or something like that class VoxelMesher : public Reference { GDCLASS(VoxelMesher, Reference) public: static const unsigned int MAX_MATERIALS = 8; // Arbitrary. Tweak if needed. VoxelMesher(); void set_material(Ref material, unsigned int id); Ref get_material(unsigned int id) const; void set_library(Ref library); Ref get_library() const { return _library; } void set_occlusion_darkness(float darkness); float get_occlusion_darkness() const { return _baked_occlusion_darkness; } void set_occlusion_enabled(bool enable); bool get_occlusion_enabled() const { return _bake_occlusion; } Ref build(const VoxelBuffer & buffer_ref, unsigned int channel, Vector3i min, Vector3i max, Ref mesh=Ref()); Ref build_ref(Ref buffer_ref, unsigned int channel, Ref mesh=Ref()); protected: static void _bind_methods(); private: Ref _library; Ref _materials[MAX_MATERIALS]; SurfaceTool _surface_tool[MAX_MATERIALS]; float _baked_occlusion_darkness; bool _bake_occlusion; #ifdef VOXEL_PROFILING ZProfiler _zprofiler; Dictionary get_profiling_info() const { return _zprofiler.get_all_serialized_info(); } #endif }; #endif // VOXEL_MESHER