Script access to formatted arrays and blend_arrays in meshes.
This commit is contained in:
parent
d1cb73b47a
commit
92bbd2d713
|
@ -761,7 +761,7 @@ Array ArrayMesh::surface_get_arrays(int p_surface) const {
|
||||||
Array ArrayMesh::surface_get_blend_shape_arrays(int p_surface) const {
|
Array ArrayMesh::surface_get_blend_shape_arrays(int p_surface) const {
|
||||||
|
|
||||||
ERR_FAIL_INDEX_V(p_surface, surfaces.size(), Array());
|
ERR_FAIL_INDEX_V(p_surface, surfaces.size(), Array());
|
||||||
return Array();
|
return VisualServer::get_singleton()->mesh_surface_get_blend_shape_arrays(mesh, p_surface);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ArrayMesh::get_surface_count() const {
|
int ArrayMesh::get_surface_count() const {
|
||||||
|
@ -1010,6 +1010,8 @@ void ArrayMesh::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("surface_get_material", "surf_idx"), &ArrayMesh::surface_get_material);
|
ClassDB::bind_method(D_METHOD("surface_get_material", "surf_idx"), &ArrayMesh::surface_get_material);
|
||||||
ClassDB::bind_method(D_METHOD("surface_set_name", "surf_idx", "name"), &ArrayMesh::surface_set_name);
|
ClassDB::bind_method(D_METHOD("surface_set_name", "surf_idx", "name"), &ArrayMesh::surface_set_name);
|
||||||
ClassDB::bind_method(D_METHOD("surface_get_name", "surf_idx"), &ArrayMesh::surface_get_name);
|
ClassDB::bind_method(D_METHOD("surface_get_name", "surf_idx"), &ArrayMesh::surface_get_name);
|
||||||
|
ClassDB::bind_method(D_METHOD("surface_get_arrays", "surf_idx"), &ArrayMesh::surface_get_arrays);
|
||||||
|
ClassDB::bind_method(D_METHOD("surface_get_blend_shape_arrays", "surf_idx"), &ArrayMesh::surface_get_blend_shape_arrays);
|
||||||
ClassDB::bind_method(D_METHOD("create_trimesh_shape"), &ArrayMesh::create_trimesh_shape);
|
ClassDB::bind_method(D_METHOD("create_trimesh_shape"), &ArrayMesh::create_trimesh_shape);
|
||||||
ClassDB::bind_method(D_METHOD("create_convex_shape"), &ArrayMesh::create_convex_shape);
|
ClassDB::bind_method(D_METHOD("create_convex_shape"), &ArrayMesh::create_convex_shape);
|
||||||
ClassDB::bind_method(D_METHOD("create_outline", "margin"), &ArrayMesh::create_outline);
|
ClassDB::bind_method(D_METHOD("create_outline", "margin"), &ArrayMesh::create_outline);
|
||||||
|
|
|
@ -120,6 +120,7 @@ public:
|
||||||
virtual int surface_get_array_len(int p_idx) const = 0;
|
virtual int surface_get_array_len(int p_idx) const = 0;
|
||||||
virtual int surface_get_array_index_len(int p_idx) const = 0;
|
virtual int surface_get_array_index_len(int p_idx) const = 0;
|
||||||
virtual Array surface_get_arrays(int p_surface) const = 0;
|
virtual Array surface_get_arrays(int p_surface) const = 0;
|
||||||
|
virtual Array surface_get_blend_shape_arrays(int p_surface) const = 0;
|
||||||
virtual uint32_t surface_get_format(int p_idx) const = 0;
|
virtual uint32_t surface_get_format(int p_idx) const = 0;
|
||||||
virtual PrimitiveType surface_get_primitive_type(int p_idx) const = 0;
|
virtual PrimitiveType surface_get_primitive_type(int p_idx) const = 0;
|
||||||
virtual Ref<Material> surface_get_material(int p_idx) const = 0;
|
virtual Ref<Material> surface_get_material(int p_idx) const = 0;
|
||||||
|
@ -174,7 +175,7 @@ public:
|
||||||
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_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>());
|
||||||
|
|
||||||
Array surface_get_arrays(int p_surface) const;
|
Array surface_get_arrays(int p_surface) const;
|
||||||
virtual Array surface_get_blend_shape_arrays(int p_surface) const;
|
Array surface_get_blend_shape_arrays(int p_surface) const;
|
||||||
|
|
||||||
void add_blend_shape(const StringName &p_name);
|
void add_blend_shape(const StringName &p_name);
|
||||||
int get_blend_shape_count() const;
|
int get_blend_shape_count() const;
|
||||||
|
|
|
@ -105,6 +105,15 @@ Array PrimitiveMesh::surface_get_arrays(int p_surface) const {
|
||||||
return VisualServer::get_singleton()->mesh_surface_get_arrays(mesh, 0);
|
return VisualServer::get_singleton()->mesh_surface_get_arrays(mesh, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Array PrimitiveMesh::surface_get_blend_shape_arrays(int p_surface) const {
|
||||||
|
ERR_FAIL_INDEX_V(p_surface, 1, Array());
|
||||||
|
if (pending_request) {
|
||||||
|
_update();
|
||||||
|
}
|
||||||
|
|
||||||
|
return Array();
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t PrimitiveMesh::surface_get_format(int p_idx) const {
|
uint32_t PrimitiveMesh::surface_get_format(int p_idx) const {
|
||||||
ERR_FAIL_INDEX_V(p_idx, 1, 0);
|
ERR_FAIL_INDEX_V(p_idx, 1, 0);
|
||||||
if (pending_request) {
|
if (pending_request) {
|
||||||
|
@ -119,6 +128,8 @@ Mesh::PrimitiveType PrimitiveMesh::surface_get_primitive_type(int p_idx) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
Ref<Material> PrimitiveMesh::surface_get_material(int p_idx) const {
|
Ref<Material> PrimitiveMesh::surface_get_material(int p_idx) const {
|
||||||
|
ERR_FAIL_INDEX_V(p_idx, 1, NULL);
|
||||||
|
|
||||||
return material;
|
return material;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,6 +162,8 @@ void PrimitiveMesh::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("set_material", "material"), &PrimitiveMesh::set_material);
|
ClassDB::bind_method(D_METHOD("set_material", "material"), &PrimitiveMesh::set_material);
|
||||||
ClassDB::bind_method(D_METHOD("get_material"), &PrimitiveMesh::get_material);
|
ClassDB::bind_method(D_METHOD("get_material"), &PrimitiveMesh::get_material);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("get_mesh_arrays"), &PrimitiveMesh::get_mesh_arrays);
|
||||||
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "material", PROPERTY_HINT_RESOURCE_TYPE, "Material"), "set_material", "get_material");
|
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "material", PROPERTY_HINT_RESOURCE_TYPE, "Material"), "set_material", "get_material");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,6 +181,10 @@ Ref<Material> PrimitiveMesh::get_material() const {
|
||||||
return material;
|
return material;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Array PrimitiveMesh::get_mesh_arrays() const {
|
||||||
|
return surface_get_arrays(0);
|
||||||
|
}
|
||||||
|
|
||||||
PrimitiveMesh::PrimitiveMesh() {
|
PrimitiveMesh::PrimitiveMesh() {
|
||||||
// defaults
|
// defaults
|
||||||
mesh = VisualServer::get_singleton()->mesh_create();
|
mesh = VisualServer::get_singleton()->mesh_create();
|
||||||
|
|
|
@ -67,6 +67,7 @@ public:
|
||||||
virtual int surface_get_array_len(int p_idx) const;
|
virtual int surface_get_array_len(int p_idx) const;
|
||||||
virtual int surface_get_array_index_len(int p_idx) const;
|
virtual int surface_get_array_index_len(int p_idx) const;
|
||||||
virtual Array surface_get_arrays(int p_surface) const;
|
virtual Array surface_get_arrays(int p_surface) const;
|
||||||
|
virtual Array surface_get_blend_shape_arrays(int p_surface) const;
|
||||||
virtual uint32_t surface_get_format(int p_idx) const;
|
virtual uint32_t surface_get_format(int p_idx) const;
|
||||||
virtual Mesh::PrimitiveType surface_get_primitive_type(int p_idx) const;
|
virtual Mesh::PrimitiveType surface_get_primitive_type(int p_idx) const;
|
||||||
virtual Ref<Material> surface_get_material(int p_idx) const;
|
virtual Ref<Material> surface_get_material(int p_idx) const;
|
||||||
|
@ -78,6 +79,8 @@ public:
|
||||||
void set_material(const Ref<Material> &p_material);
|
void set_material(const Ref<Material> &p_material);
|
||||||
Ref<Material> get_material() const;
|
Ref<Material> get_material() const;
|
||||||
|
|
||||||
|
Array get_mesh_arrays() const;
|
||||||
|
|
||||||
PrimitiveMesh();
|
PrimitiveMesh();
|
||||||
~PrimitiveMesh();
|
~PrimitiveMesh();
|
||||||
};
|
};
|
||||||
|
|
|
@ -1420,6 +1420,29 @@ Array VisualServer::mesh_surface_get_arrays(RID p_mesh, int p_surface) const {
|
||||||
return _get_array_from_surface(format, vertex_data, vertex_len, index_data, index_len);
|
return _get_array_from_surface(format, vertex_data, vertex_len, index_data, index_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Array VisualServer::mesh_surface_get_blend_shape_arrays(RID p_mesh, int p_surface) const {
|
||||||
|
|
||||||
|
Vector<PoolVector<uint8_t> > blend_shape_data = mesh_surface_get_blend_shapes(p_mesh, p_surface);
|
||||||
|
if (blend_shape_data.size() > 0) {
|
||||||
|
int vertex_len = mesh_surface_get_array_len(p_mesh, p_surface);
|
||||||
|
|
||||||
|
PoolVector<uint8_t> index_data = mesh_surface_get_index_array(p_mesh, p_surface);
|
||||||
|
int index_len = mesh_surface_get_array_index_len(p_mesh, p_surface);
|
||||||
|
|
||||||
|
uint32_t format = mesh_surface_get_format(p_mesh, p_surface);
|
||||||
|
|
||||||
|
Array blend_shape_array;
|
||||||
|
blend_shape_array.resize(blend_shape_data.size());
|
||||||
|
for (int i = 0; i < blend_shape_data.size(); i++) {
|
||||||
|
blend_shape_array.set(i, _get_array_from_surface(format, blend_shape_data[i], vertex_len, index_data, index_len));
|
||||||
|
}
|
||||||
|
|
||||||
|
return blend_shape_array;
|
||||||
|
} else {
|
||||||
|
return Array();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void VisualServer::_bind_methods() {
|
void VisualServer::_bind_methods() {
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("force_draw"), &VisualServer::draw);
|
ClassDB::bind_method(D_METHOD("force_draw"), &VisualServer::draw);
|
||||||
|
|
|
@ -267,6 +267,7 @@ public:
|
||||||
virtual PoolVector<uint8_t> mesh_surface_get_index_array(RID p_mesh, int p_surface) const = 0;
|
virtual PoolVector<uint8_t> mesh_surface_get_index_array(RID p_mesh, int p_surface) const = 0;
|
||||||
|
|
||||||
virtual Array mesh_surface_get_arrays(RID p_mesh, int p_surface) const;
|
virtual Array mesh_surface_get_arrays(RID p_mesh, int p_surface) const;
|
||||||
|
virtual Array mesh_surface_get_blend_shape_arrays(RID p_mesh, int p_surface) const;
|
||||||
|
|
||||||
virtual uint32_t mesh_surface_get_format(RID p_mesh, int p_surface) const = 0;
|
virtual uint32_t mesh_surface_get_format(RID p_mesh, int p_surface) const = 0;
|
||||||
virtual PrimitiveType mesh_surface_get_primitive_type(RID p_mesh, int p_surface) const = 0;
|
virtual PrimitiveType mesh_surface_get_primitive_type(RID p_mesh, int p_surface) const = 0;
|
||||||
|
|
Loading…
Reference in New Issue