summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/dummy/rasterizer_dummy.h156
1 files changed, 132 insertions, 24 deletions
diff --git a/drivers/dummy/rasterizer_dummy.h b/drivers/dummy/rasterizer_dummy.h
index 54d803f13c..312d5aa378 100644
--- a/drivers/dummy/rasterizer_dummy.h
+++ b/drivers/dummy/rasterizer_dummy.h
@@ -127,7 +127,26 @@ public:
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<DummyMesh> mesh_owner;
RID texture_create() {
@@ -256,46 +275,128 @@ public:
/* MESH API */
- RID mesh_create() { return RID(); }
-
- 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>()) {}
+ 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_mesh_data(RID p_mesh, const Geometry::MeshData &p_mesh_data) {}
- void mesh_add_surface_from_planes(RID p_mesh, const PoolVector<Plane> &p_planes) {}
+ 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);
+
+ m->surfaces.push_back(DummySurface());
+ 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) {}
- int mesh_get_blend_shape_count(RID p_mesh) const { return 0; }
+ void mesh_set_blend_shape_count(RID p_mesh, int p_amount) {
+ 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) {}
- VS::BlendShapeMode mesh_get_blend_shape_mode(RID p_mesh) const { return VS::BLEND_SHAPE_MODE_NORMALIZED; }
+ void mesh_set_blend_shape_mode(RID p_mesh, VS::BlendShapeMode p_mode) {
+ 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_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(); }
- int mesh_surface_get_array_len(RID p_mesh, int p_surface) const { return 0; }
- int mesh_surface_get_array_index_len(RID p_mesh, int p_surface) const { return 0; }
+ int mesh_surface_get_array_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].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> p;
- return p;
+ DummyMesh *m = mesh_owner.getornull(p_mesh);
+ 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> p;
- return p;
+ DummyMesh *m = mesh_owner.getornull(p_mesh);
+ 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 {
+ DummyMesh *m = mesh_owner.getornull(p_mesh);
+ ERR_FAIL_COND_V(!m, 0);
+
+ return m->surfaces[p_surface].format;
+ }
+ 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);
+
+ return m->surfaces[p_surface].primitive;
+ }
+
+ 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> >());
- uint32_t mesh_surface_get_format(RID p_mesh, int p_surface) const { return 0; }
- VS::PrimitiveType mesh_surface_get_primitive_type(RID p_mesh, int p_surface) const { return VS::PRIMITIVE_POINTS; }
+ 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;
+ }
- AABB mesh_surface_get_aabb(RID p_mesh, int p_surface) const { return AABB(); }
- 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>(); }
+ 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());
- void mesh_remove_surface(RID p_mesh, int p_index) {}
- int mesh_get_surface_count(RID p_mesh) const { return 0; }
+ 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) {}
AABB mesh_get_custom_aabb(RID p_mesh) const { return AABB(); }
@@ -598,7 +699,14 @@ public:
RID canvas_light_occluder_create() { return RID(); }
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) {
if (texture_owner.owns(p_rid)) {