#ifndef DIRECT_LOD_MULTIMESH_H #define DIRECT_LOD_MULTIMESH_H #include #include #include class World; class LodMultiMesh3D { public: enum ColorFormat { COLOR_NONE = VS::MULTIMESH_COLOR_NONE, COLOR_8BIT = VS::MULTIMESH_COLOR_8BIT, COLOR_FLOAT = VS::MULTIMESH_COLOR_FLOAT, }; enum CustomDataFormat { CUSTOM_DATA_NONE, CUSTOM_DATA_8BIT, CUSTOM_DATA_FLOAT, }; protected: List > meshes; ColorFormat color_format; CustomDataFormat custom_data_format; struct multimesh_data { RID id, instance; int instance_count; int visible_instance_count; int lod_decimator; Ref density_noise; }; List multimeshes; Transform xf; bool visible; public: void add_mesh(Ref mesh); int get_mesh_count() const; void set_mesh(int id, Ref mesh); Ref get_mesh(int id) const; void set_color_format(ColorFormat p_color_format); ColorFormat get_color_format() const; void set_custom_data_format(CustomDataFormat p_custom_data_format); CustomDataFormat get_custom_data_format() const; void set_density_noise(int id, Ref noise); Ref get_density_noise(int id) const; void set_instance_count(int id, int count); int get_instance_count(int id) const; void set_instance_transform(int id, int instance, const Transform &xform); void set_visible_instance_count(int id, int count); int get_visible_instance_count(int id) const; void set_instance_color(int id, int instance, const Color &color); void hide(); void show(); void set_global_transform(const Transform &xform); Transform get_global_transform() const; Color get_instance_color(int id, int instance) const; void set_world(const World *world); bool is_visible() const; AABB get_aabb(int id) const; Vector3 get_center() const; LodMultiMesh3D(); ~LodMultiMesh3D(); }; #endif