added draw() in array mode
This commit is contained in:
@@ -60,8 +60,13 @@ void Floors::onUpdate()
|
|||||||
player->update(engine->pad, camera, *floorManager, *enemy);
|
player->update(engine->pad, camera, *floorManager, *enemy);
|
||||||
engine->renderer->draw(player->mesh);
|
engine->renderer->draw(player->mesh);
|
||||||
engine->renderer->draw(enemy->getMeshes(), enemy->getMeshesCount());
|
engine->renderer->draw(enemy->getMeshes(), enemy->getMeshesCount());
|
||||||
for (u16 i = 0; i < FLOORS_COUNT; i++)
|
|
||||||
engine->renderer->draw(floorManager->floors[i].mesh, lightManager.bulbs, lightManager.bulbsCount);
|
// You can draw array of meshes in draw() function also. It can be A LOT faster than for looping!
|
||||||
|
// Why? When given mesh is small, is not animated and is not backface culled, vertex data are send once!
|
||||||
|
engine->renderer->draw(floorManager->getMeshes(), FLOORS_COUNT, lightManager.bulbs, lightManager.bulbsCount);
|
||||||
|
// draw() in array mode, sometimes will force you to do synchronization between EE <-> VU1 <-> GS via:
|
||||||
|
// renderer->clearAndWaitForRender(); or renderer->waitForRender();
|
||||||
|
|
||||||
ui->render(engine->renderer); // 2D rendering ist LAST step, because layers gonna play there.
|
ui->render(engine->renderer); // 2D rendering ist LAST step, because layers gonna play there.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
*/
|
*/
|
||||||
FloorManager::FloorManager(int t_floorAmount, TextureRepository *t_texRepo)
|
FloorManager::FloorManager(int t_floorAmount, TextureRepository *t_texRepo)
|
||||||
{
|
{
|
||||||
|
meshes = new Mesh *[t_floorAmount];
|
||||||
texRepo = t_texRepo;
|
texRepo = t_texRepo;
|
||||||
floorAmount = t_floorAmount;
|
floorAmount = t_floorAmount;
|
||||||
spirals = new Point[t_floorAmount];
|
spirals = new Point[t_floorAmount];
|
||||||
@@ -85,12 +86,15 @@ void FloorManager::initFloors()
|
|||||||
floors[0].mesh.loadObj("meshes/floor/", "floor", 3.0F, false);
|
floors[0].mesh.loadObj("meshes/floor/", "floor", 3.0F, false);
|
||||||
floors[0].mesh.shouldBeFrustumCulled = true;
|
floors[0].mesh.shouldBeFrustumCulled = true;
|
||||||
floors[0].mesh.shouldBeLighted = true;
|
floors[0].mesh.shouldBeLighted = true;
|
||||||
|
meshes[0] = &floors[0].mesh;
|
||||||
texRepo->addByMesh("meshes/floor/", floors[0].mesh, BMP);
|
texRepo->addByMesh("meshes/floor/", floors[0].mesh, BMP);
|
||||||
for (u16 i = 1; i < floorAmount; i++)
|
for (u16 i = 1; i < floorAmount; i++)
|
||||||
{
|
{
|
||||||
|
floors[i].mesh.shouldBeFrustumCulled = true;
|
||||||
floors[i].init(floors[0].mesh, spirals[i], i);
|
floors[i].init(floors[0].mesh, spirals[i], i);
|
||||||
texRepo->getByMesh(floors[0].mesh.getId(), floors[0].mesh.getMaterial(0).getId())
|
texRepo->getByMesh(floors[0].mesh.getId(), floors[0].mesh.getMaterial(0).getId())
|
||||||
->addLink(floors[i].mesh.getId(), floors[i].mesh.getMaterial(0).getId());
|
->addLink(floors[i].mesh.getId(), floors[i].mesh.getMaterial(0).getId());
|
||||||
|
meshes[i] = &floors[i].mesh;
|
||||||
}
|
}
|
||||||
PRINT_LOG("Floors initialized!");
|
PRINT_LOG("Floors initialized!");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,8 +31,10 @@ public:
|
|||||||
u16 floorAmount;
|
u16 floorAmount;
|
||||||
void update(Player &t_player);
|
void update(Player &t_player);
|
||||||
void onAudioTick();
|
void onAudioTick();
|
||||||
|
Mesh **getMeshes() { return meshes; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Mesh **meshes;
|
||||||
TextureRepository *texRepo;
|
TextureRepository *texRepo;
|
||||||
u8 audioOffset, audioMode;
|
u8 audioOffset, audioMode;
|
||||||
u32 audioTick;
|
u32 audioTick;
|
||||||
|
|||||||
Reference in New Issue
Block a user