Share the mesh in bigscene-cpp

No point loading the same data 1k times. Shaves 35% off the time from
application start to first frame being complete.

Change-Id: I8cd7c8a5aa377c0663c03e35d7a4c03f50b052f6
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
This commit is contained in:
Sean Harmer 2017-09-10 11:49:46 +01:00
parent 733afa3b25
commit 4f2ff90254
3 changed files with 12 additions and 8 deletions

View File

@ -58,15 +58,8 @@
Entity::Entity(Qt3DCore::QNode *parent)
: QEntity(parent)
, m_transform(new Qt3DCore::QTransform())
, m_mesh(new Qt3DExtras::QCylinderMesh())
, m_material(new Qt3DExtras::QPhongMaterial())
{
m_mesh->setRings(50.0f);
m_mesh->setSlices(30.0f);
m_mesh->setRadius(2.5f);
m_mesh->setLength(5.0f);
addComponent(m_mesh);
addComponent(m_transform);
addComponent(m_material);
}

View File

@ -61,6 +61,10 @@ namespace Qt3DCore {
class QTransform;
}
namespace Qt3DRender {
class QGeometryRenderer;
}
namespace Qt3DExtras {
class QCylinderMesh;
class QPhongMaterial;
@ -101,7 +105,6 @@ private:
private:
Qt3DCore::QTransform *m_transform;
Qt3DExtras::QCylinderMesh *m_mesh;
Qt3DExtras::QPhongMaterial *m_material;
float m_theta;
float m_phi;

View File

@ -81,6 +81,13 @@ int main(int ac, char **av)
QEntity *root = new QEntity();
// Mesh
auto *mesh = new Qt3DExtras::QCylinderMesh(root);
mesh->setRings(50.0f);
mesh->setSlices(30.0f);
mesh->setRadius(2.5f);
mesh->setLength(5.0f);
// Camera
QCamera *cameraEntity = view.camera();
cameraEntity->lens()->setPerspectiveProjection(45.0f, 16.0f/9.0f, 0.1f, 1000.0f);
@ -99,6 +106,7 @@ int main(int ac, char **av)
// Scene
for (int i = 0; i < max; i++) {
Entity *e = new Entity();
e->addComponent(mesh);
const float angle = M_PI * 2.0f * i * det * 10.;
e->setDiffuseColor(QColor(qFabs(qCos(angle)) * 255, 204, 75));