godot_voxel/voxel_mesher.h

53 lines
1.3 KiB
C
Raw Normal View History

#ifndef VOXEL_MESHER
#define VOXEL_MESHER
#include <reference.h>
#include <scene/resources/mesh.h>
#include <scene/resources/surface_tool.h>
#include "voxel.h"
#include "voxel_buffer.h"
#include "voxel_library.h"
#include "zprofiling.h"
class VoxelMesher : public Reference {
2017-03-24 17:23:36 -07:00
GDCLASS(VoxelMesher, Reference)
public:
2016-12-31 19:40:16 -08:00
static const unsigned int MAX_MATERIALS = 8; // Arbitrary. Tweak if needed.
2016-12-31 19:40:16 -08:00
VoxelMesher();
2016-12-31 19:40:16 -08:00
void set_material(Ref<Material> material, unsigned int id);
2016-12-31 20:23:22 -08:00
Ref<Material> get_material(unsigned int id) const;
2016-12-31 19:40:16 -08:00
void set_library(Ref<VoxelLibrary> library);
2016-12-31 20:23:22 -08:00
Ref<VoxelLibrary> get_library() const { return _library; }
2016-12-31 19:40:16 -08:00
void set_occlusion_darkness(float darkness);
2016-12-31 20:23:22 -08:00
float get_occlusion_darkness() const { return _baked_occlusion_darkness; }
2016-12-31 19:40:16 -08:00
void set_occlusion_enabled(bool enable);
2016-12-31 20:23:22 -08:00
bool get_occlusion_enabled() const { return _bake_occlusion; }
2016-12-31 19:40:16 -08:00
Ref<Mesh> build(const VoxelBuffer & buffer_ref);
Ref<Mesh> build_ref(Ref<VoxelBuffer> buffer_ref);
protected:
2016-12-31 19:40:16 -08:00
static void _bind_methods();
2016-12-31 20:23:22 -08:00
private:
Ref<VoxelLibrary> _library;
Ref<Material> _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