+scene::SMesh *createSpecialNodeMesh(Client *client, content_t id, std::vector<ItemPartColor> *colors)
+{
+ MeshMakeData mesh_make_data(client, false, false);
+ MeshCollector collector(false);
+ mesh_make_data.setSmoothLighting(false);
+ MapblockMeshGenerator gen(&mesh_make_data, &collector);
+ gen.renderSingle(id);
+ colors->clear();
+ scene::SMesh *mesh = new scene::SMesh();
+ for (auto &prebuffers : collector.prebuffers)
+ for (PreMeshBuffer &p : prebuffers) {
+ if (p.layer.material_flags & MATERIAL_FLAG_ANIMATION) {
+ const FrameSpec &frame = (*p.layer.frames)[0];
+ p.layer.texture = frame.texture;
+ p.layer.normal_texture = frame.normal_texture;
+ }
+ for (video::S3DVertex &v : p.vertices)
+ v.Color.setAlpha(255);
+ scene::SMeshBuffer *buf = new scene::SMeshBuffer();
+ buf->Material.setTexture(0, p.layer.texture);
+ p.layer.applyMaterialOptions(buf->Material);
+ mesh->addMeshBuffer(buf);
+ buf->append(&p.vertices[0], p.vertices.size(),
+ &p.indices[0], p.indices.size());
+ buf->drop();
+ colors->push_back(
+ ItemPartColor(p.layer.has_color, p.layer.color));
+ }
+ return mesh;
+}
+