Merge pull request #18798 from jfaust/bugfix/scene-import-on-server-platform

Fix two issues preventing model import from working properly when platform=server
This commit is contained in:
Rémi Verschelde 2018-05-15 10:28:17 +02:00 committed by GitHub
commit 0738ba6bc1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 134 additions and 23 deletions

View file

@ -127,7 +127,26 @@ public:
String path; String path;
}; };
struct DummySurface {
uint32_t format;
VS::PrimitiveType primitive;
PoolVector<uint8_t> array;
int vertex_count;
PoolVector<uint8_t> index_array;
int index_count;
AABB aabb;
Vector<PoolVector<uint8_t> > blend_shapes;
Vector<AABB> bone_aabbs;
};
struct DummyMesh : public RID_Data {
Vector<DummySurface> surfaces;
int blend_shape_count;
VS::BlendShapeMode blend_shape_mode;
};
mutable RID_Owner<DummyTexture> texture_owner; mutable RID_Owner<DummyTexture> texture_owner;
mutable RID_Owner<DummyMesh> mesh_owner;
RID texture_create() { RID texture_create() {
@ -256,46 +275,128 @@ public:
/* MESH API */ /* MESH API */
RID mesh_create() { return RID(); } RID mesh_create() {
DummyMesh *mesh = memnew(DummyMesh);
ERR_FAIL_COND_V(!mesh, RID());
mesh->blend_shape_count = 0;
mesh->blend_shape_mode = VS::BLEND_SHAPE_MODE_NORMALIZED;
return mesh_owner.make_rid(mesh);
}
void mesh_add_surface_from_arrays(RID p_mesh, VS::PrimitiveType p_primitive, const Array &p_arrays, const Array &p_blend_shapes = Array(), uint32_t p_compress_format = Mesh::ARRAY_COMPRESS_DEFAULT) {} void mesh_add_surface(RID p_mesh, uint32_t p_format, VS::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 AABB &p_aabb, const Vector<PoolVector<uint8_t> > &p_blend_shapes = Vector<PoolVector<uint8_t> >(), const Vector<AABB> &p_bone_aabbs = Vector<AABB>()) {
void mesh_add_surface(RID p_mesh, uint32_t p_format, VS::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 AABB &p_aabb, const Vector<PoolVector<uint8_t> > &p_blend_shapes = Vector<PoolVector<uint8_t> >(), const Vector<AABB> &p_bone_aabbs = Vector<AABB>()) {} DummyMesh *m = mesh_owner.getornull(p_mesh);
ERR_FAIL_COND(!m);
void mesh_add_surface_from_mesh_data(RID p_mesh, const Geometry::MeshData &p_mesh_data) {} m->surfaces.push_back(DummySurface());
void mesh_add_surface_from_planes(RID p_mesh, const PoolVector<Plane> &p_planes) {} DummySurface *s = &m->surfaces[m->surfaces.size() - 1];
s->format = p_format;
s->primitive = p_primitive;
s->array = p_array;
s->vertex_count = p_vertex_count;
s->index_array = p_index_array;
s->index_count = p_index_count;
s->aabb = p_aabb;
s->blend_shapes = p_blend_shapes;
s->bone_aabbs = p_bone_aabbs;
}
void mesh_set_blend_shape_count(RID p_mesh, int p_amount) {} void mesh_set_blend_shape_count(RID p_mesh, int p_amount) {
int mesh_get_blend_shape_count(RID p_mesh) const { return 0; } DummyMesh *m = mesh_owner.getornull(p_mesh);
ERR_FAIL_COND(!m);
m->blend_shape_count = p_amount;
}
int mesh_get_blend_shape_count(RID p_mesh) const {
DummyMesh *m = mesh_owner.getornull(p_mesh);
ERR_FAIL_COND_V(!m, 0);
return m->blend_shape_count;
}
void mesh_set_blend_shape_mode(RID p_mesh, VS::BlendShapeMode p_mode) {} void mesh_set_blend_shape_mode(RID p_mesh, VS::BlendShapeMode p_mode) {
VS::BlendShapeMode mesh_get_blend_shape_mode(RID p_mesh) const { return VS::BLEND_SHAPE_MODE_NORMALIZED; } DummyMesh *m = mesh_owner.getornull(p_mesh);
ERR_FAIL_COND(!m);
m->blend_shape_mode = p_mode;
}
VS::BlendShapeMode mesh_get_blend_shape_mode(RID p_mesh) const {
DummyMesh *m = mesh_owner.getornull(p_mesh);
ERR_FAIL_COND_V(!m, VS::BLEND_SHAPE_MODE_NORMALIZED);
return m->blend_shape_mode;
}
void mesh_surface_update_region(RID p_mesh, int p_surface, int p_offset, const PoolVector<uint8_t> &p_data) {} void mesh_surface_update_region(RID p_mesh, int p_surface, int p_offset, const PoolVector<uint8_t> &p_data) {}
void mesh_surface_set_material(RID p_mesh, int p_surface, RID p_material) {} void mesh_surface_set_material(RID p_mesh, int p_surface, RID p_material) {}
RID mesh_surface_get_material(RID p_mesh, int p_surface) const { return RID(); } RID mesh_surface_get_material(RID p_mesh, int p_surface) const { return RID(); }
int mesh_surface_get_array_len(RID p_mesh, int p_surface) const { return 0; } int mesh_surface_get_array_len(RID p_mesh, int p_surface) const {
int mesh_surface_get_array_index_len(RID p_mesh, int p_surface) const { return 0; } DummyMesh *m = mesh_owner.getornull(p_mesh);
ERR_FAIL_COND_V(!m, 0);
return m->surfaces[p_surface].vertex_count;
}
int mesh_surface_get_array_index_len(RID p_mesh, int p_surface) const {
DummyMesh *m = mesh_owner.getornull(p_mesh);
ERR_FAIL_COND_V(!m, 0);
return m->surfaces[p_surface].index_count;
}
PoolVector<uint8_t> mesh_surface_get_array(RID p_mesh, int p_surface) const { PoolVector<uint8_t> mesh_surface_get_array(RID p_mesh, int p_surface) const {
PoolVector<uint8_t> p; DummyMesh *m = mesh_owner.getornull(p_mesh);
return p; ERR_FAIL_COND_V(!m, PoolVector<uint8_t>());
return m->surfaces[p_surface].array;
} }
PoolVector<uint8_t> mesh_surface_get_index_array(RID p_mesh, int p_surface) const { PoolVector<uint8_t> mesh_surface_get_index_array(RID p_mesh, int p_surface) const {
PoolVector<uint8_t> p; DummyMesh *m = mesh_owner.getornull(p_mesh);
return p; ERR_FAIL_COND_V(!m, PoolVector<uint8_t>());
return m->surfaces[p_surface].index_array;
} }
uint32_t mesh_surface_get_format(RID p_mesh, int p_surface) const { return 0; } uint32_t mesh_surface_get_format(RID p_mesh, int p_surface) const {
VS::PrimitiveType mesh_surface_get_primitive_type(RID p_mesh, int p_surface) const { return VS::PRIMITIVE_POINTS; } DummyMesh *m = mesh_owner.getornull(p_mesh);
ERR_FAIL_COND_V(!m, 0);
AABB mesh_surface_get_aabb(RID p_mesh, int p_surface) const { return AABB(); } return m->surfaces[p_surface].format;
Vector<PoolVector<uint8_t> > mesh_surface_get_blend_shapes(RID p_mesh, int p_surface) const { return Vector<PoolVector<uint8_t> >(); } }
Vector<AABB> mesh_surface_get_skeleton_aabb(RID p_mesh, int p_surface) const { return Vector<AABB>(); } VS::PrimitiveType mesh_surface_get_primitive_type(RID p_mesh, int p_surface) const {
DummyMesh *m = mesh_owner.getornull(p_mesh);
ERR_FAIL_COND_V(!m, VS::PRIMITIVE_POINTS);
void mesh_remove_surface(RID p_mesh, int p_index) {} return m->surfaces[p_surface].primitive;
int mesh_get_surface_count(RID p_mesh) const { return 0; } }
AABB mesh_surface_get_aabb(RID p_mesh, int p_surface) const {
DummyMesh *m = mesh_owner.getornull(p_mesh);
ERR_FAIL_COND_V(!m, AABB());
return m->surfaces[p_surface].aabb;
}
Vector<PoolVector<uint8_t> > mesh_surface_get_blend_shapes(RID p_mesh, int p_surface) const {
DummyMesh *m = mesh_owner.getornull(p_mesh);
ERR_FAIL_COND_V(!m, Vector<PoolVector<uint8_t> >());
return m->surfaces[p_surface].blend_shapes;
}
Vector<AABB> mesh_surface_get_skeleton_aabb(RID p_mesh, int p_surface) const {
DummyMesh *m = mesh_owner.getornull(p_mesh);
ERR_FAIL_COND_V(!m, Vector<AABB>());
return m->surfaces[p_surface].bone_aabbs;
}
void mesh_remove_surface(RID p_mesh, int p_index) {
DummyMesh *m = mesh_owner.getornull(p_mesh);
ERR_FAIL_COND(!m);
ERR_FAIL_COND(p_index >= m->surfaces.size());
m->surfaces.remove(p_index);
}
int mesh_get_surface_count(RID p_mesh) const {
DummyMesh *m = mesh_owner.getornull(p_mesh);
ERR_FAIL_COND_V(!m, 0);
return m->surfaces.size();
}
void mesh_set_custom_aabb(RID p_mesh, const AABB &p_aabb) {} void mesh_set_custom_aabb(RID p_mesh, const AABB &p_aabb) {}
AABB mesh_get_custom_aabb(RID p_mesh) const { return AABB(); } AABB mesh_get_custom_aabb(RID p_mesh) const { return AABB(); }
@ -598,7 +699,14 @@ public:
RID canvas_light_occluder_create() { return RID(); } RID canvas_light_occluder_create() { return RID(); }
void canvas_light_occluder_set_polylines(RID p_occluder, const PoolVector<Vector2> &p_lines) {} void canvas_light_occluder_set_polylines(RID p_occluder, const PoolVector<Vector2> &p_lines) {}
VS::InstanceType get_base_type(RID p_rid) const { return VS::INSTANCE_NONE; } VS::InstanceType get_base_type(RID p_rid) const {
if (mesh_owner.owns(p_rid)) {
return VS::INSTANCE_MESH;
}
return VS::INSTANCE_NONE;
}
bool free(RID p_rid) { bool free(RID p_rid) {
if (texture_owner.owns(p_rid)) { if (texture_owner.owns(p_rid)) {

View file

@ -567,6 +567,9 @@ void DocData::generate(bool p_basic_types) {
PropertyDoc pd; PropertyDoc pd;
Engine::Singleton &s = E->get(); Engine::Singleton &s = E->get();
if (!s.ptr) {
continue;
}
pd.name = s.name; pd.name = s.name;
pd.type = s.ptr->get_class(); pd.type = s.ptr->get_class();
while (String(ClassDB::get_parent_class(pd.type)) != "Object") while (String(ClassDB::get_parent_class(pd.type)) != "Object")