summaryrefslogtreecommitdiff
path: root/scene/resources/mesh.h
diff options
context:
space:
mode:
Diffstat (limited to 'scene/resources/mesh.h')
-rw-r--r--scene/resources/mesh.h69
1 files changed, 42 insertions, 27 deletions
diff --git a/scene/resources/mesh.h b/scene/resources/mesh.h
index dc1d97a49e..1af33ad836 100644
--- a/scene/resources/mesh.h
+++ b/scene/resources/mesh.h
@@ -5,7 +5,7 @@
/* GODOT ENGINE */
/* http://www.godotengine.org */
/*************************************************************************/
-/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
@@ -39,7 +39,7 @@
*/
class Mesh : public Resource {
- OBJ_TYPE( Mesh, Resource );
+ GDCLASS( Mesh, Resource );
RES_BASE_EXTENSION("msh");
public:
@@ -77,6 +77,22 @@ public:
ARRAY_FORMAT_WEIGHTS=1<<ARRAY_WEIGHTS,
ARRAY_FORMAT_INDEX=1<<ARRAY_INDEX,
+ ARRAY_COMPRESS_BASE=(ARRAY_INDEX+1),
+ ARRAY_COMPRESS_VERTEX=1<<(ARRAY_VERTEX+ARRAY_COMPRESS_BASE), // mandatory
+ ARRAY_COMPRESS_NORMAL=1<<(ARRAY_NORMAL+ARRAY_COMPRESS_BASE),
+ ARRAY_COMPRESS_TANGENT=1<<(ARRAY_TANGENT+ARRAY_COMPRESS_BASE),
+ ARRAY_COMPRESS_COLOR=1<<(ARRAY_COLOR+ARRAY_COMPRESS_BASE),
+ ARRAY_COMPRESS_TEX_UV=1<<(ARRAY_TEX_UV+ARRAY_COMPRESS_BASE),
+ ARRAY_COMPRESS_TEX_UV2=1<<(ARRAY_TEX_UV2+ARRAY_COMPRESS_BASE),
+ ARRAY_COMPRESS_BONES=1<<(ARRAY_BONES+ARRAY_COMPRESS_BASE),
+ ARRAY_COMPRESS_WEIGHTS=1<<(ARRAY_WEIGHTS+ARRAY_COMPRESS_BASE),
+ ARRAY_COMPRESS_INDEX=1<<(ARRAY_INDEX+ARRAY_COMPRESS_BASE),
+
+ ARRAY_FLAG_USE_2D_VERTICES=ARRAY_COMPRESS_INDEX<<1,
+ ARRAY_FLAG_USE_16_BIT_BONES=ARRAY_COMPRESS_INDEX<<2,
+
+ ARRAY_COMPRESS_DEFAULT=ARRAY_COMPRESS_VERTEX|ARRAY_COMPRESS_NORMAL|ARRAY_COMPRESS_TANGENT|ARRAY_COMPRESS_COLOR|ARRAY_COMPRESS_TEX_UV|ARRAY_COMPRESS_TEX_UV2|ARRAY_COMPRESS_WEIGHTS
+
};
enum PrimitiveType {
@@ -89,25 +105,24 @@ public:
PRIMITIVE_TRIANGLE_FAN=VisualServer::PRIMITIVE_TRIANGLE_FAN,
};
- enum MorphTargetMode {
+ enum BlendShapeMode {
- MORPH_MODE_NORMALIZED=VS::MORPH_MODE_NORMALIZED,
- MORPH_MODE_RELATIVE=VS::MORPH_MODE_RELATIVE,
+ BLEND_SHAPE_MODE_NORMALIZED=VS::BLEND_SHAPE_MODE_NORMALIZED,
+ BLEND_SHAPE_MODE_RELATIVE=VS::BLEND_SHAPE_MODE_RELATIVE,
};
private:
struct Surface {
String name;
- AABB aabb;
- bool alphasort;
+ Rect3 aabb;
Ref<Material> material;
};
Vector<Surface> surfaces;
RID mesh;
- AABB aabb;
- MorphTargetMode morph_target_mode;
- Vector<StringName> morph_targets;
- AABB custom_aabb;
+ Rect3 aabb;
+ BlendShapeMode blend_shape_mode;
+ Vector<StringName> blend_shapes;
+ Rect3 custom_aabb;
mutable Ref<TriangleMesh> triangle_mesh;
@@ -123,24 +138,24 @@ protected:
public:
- void add_surface(PrimitiveType p_primitive,const Array& p_arrays,const Array& p_blend_shapes=Array(),bool p_alphasort=false);
- Array surface_get_arrays(int p_surface) const;
- virtual Array surface_get_morph_arrays(int p_surface) const;
+ void add_surface_from_arrays(PrimitiveType p_primitive, const Array& p_arrays, const Array& p_blend_shapes=Array(), uint32_t p_flags=ARRAY_COMPRESS_DEFAULT);
+ void add_surface(uint32_t p_format,PrimitiveType p_primitive,const PoolVector<uint8_t>& p_array,int p_vertex_count,const PoolVector<uint8_t>& p_index_array,int p_index_count,const Rect3& p_aabb,const Vector<PoolVector<uint8_t> >& p_blend_shapes=Vector<PoolVector<uint8_t> >(),const Vector<Rect3>& p_bone_aabbs=Vector<Rect3>());
- void add_custom_surface(const Variant& p_data); //only recognized by driver
+ Array surface_get_arrays(int p_surface) const;
+ virtual Array surface_get_blend_shape_arrays(int p_surface) const;
- void add_morph_target(const StringName& p_name);
- int get_morph_target_count() const;
- StringName get_morph_target_name(int p_index) const;
- void clear_morph_targets();
+ void add_blend_shape(const StringName& p_name);
+ int get_blend_shape_count() const;
+ StringName get_blend_shape_name(int p_index) const;
+ void clear_blend_shapes();
- void set_morph_target_mode(MorphTargetMode p_mode);
- MorphTargetMode get_morph_target_mode() const;
+ void set_blend_shape_mode(BlendShapeMode p_mode);
+ BlendShapeMode get_blend_shape_mode() const;
int get_surface_count() const;
void surface_remove(int p_idx);
- void surface_set_custom_aabb(int p_surface,const AABB& p_aabb); //only recognized by driver
+ void surface_set_custom_aabb(int p_surface,const Rect3& p_aabb); //only recognized by driver
int surface_get_array_len(int p_idx) const;
@@ -157,10 +172,10 @@ public:
void add_surface_from_mesh_data(const Geometry::MeshData& p_mesh_data);
- void set_custom_aabb(const AABB& p_custom);
- AABB get_custom_aabb() const;
+ void set_custom_aabb(const Rect3& p_custom);
+ Rect3 get_custom_aabb() const;
- AABB get_aabb() const;
+ Rect3 get_aabb() const;
virtual RID get_rid() const;
Ref<Shape> create_trimesh_shape() const;
@@ -171,7 +186,7 @@ public:
void center_geometry();
void regen_normalmaps();
- DVector<Face3> get_faces() const;
+ PoolVector<Face3> get_faces() const;
Ref<TriangleMesh> generate_triangle_mesh() const;
Mesh();
@@ -181,6 +196,6 @@ public:
VARIANT_ENUM_CAST( Mesh::ArrayType );
VARIANT_ENUM_CAST( Mesh::PrimitiveType );
-VARIANT_ENUM_CAST( Mesh::MorphTargetMode );
+VARIANT_ENUM_CAST( Mesh::BlendShapeMode );
#endif