tracing Ogre frame, making sure all furniture use the same material
This commit is contained in:
32
Game.cpp
32
Game.cpp
@@ -21,6 +21,7 @@
|
||||
#include "physics.h"
|
||||
#include "sound.h"
|
||||
#include <tracy/Tracy.hpp>
|
||||
#include <tracy/TracyC.h>
|
||||
class App;
|
||||
class SkyRenderer : public Ogre::SceneManager::Listener {
|
||||
protected:
|
||||
@@ -171,6 +172,32 @@ public:
|
||||
mSkyBoxGenParameters.skyBoxDistance = distance;
|
||||
}
|
||||
};
|
||||
class FrameListenerTrace : public Ogre::FrameListener {
|
||||
public:
|
||||
TracyCZoneCtx mzone;
|
||||
FrameListenerTrace()
|
||||
: initialized(false)
|
||||
{
|
||||
}
|
||||
bool frameStarted(const Ogre::FrameEvent &evt) override
|
||||
{
|
||||
TracyCZoneN(ctx, "OgreFrame", true);
|
||||
mzone = ctx;
|
||||
return true;
|
||||
}
|
||||
bool frameRenderingQueued(const Ogre::FrameEvent &evt) override
|
||||
{
|
||||
TracyCZoneEnd(mzone);
|
||||
return true;
|
||||
}
|
||||
bool frameEnded(const Ogre::FrameEvent &evt) override
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
bool initialized;
|
||||
};
|
||||
class App;
|
||||
class KeyboardListener : public OgreBites::InputListener {
|
||||
App *mApp;
|
||||
@@ -333,6 +360,8 @@ public:
|
||||
mScnMgr->addRenderQueueListener(pOverlaySystem);
|
||||
mScnMgrInterior->addRenderQueueListener(pOverlaySystem);
|
||||
mScnMgrInventory->addRenderQueueListener(pOverlaySystem);
|
||||
FrameListenerTrace *trace = OGRE_NEW FrameListenerTrace;
|
||||
root->addFrameListener(trace);
|
||||
// mTrayMgr = new OgreBites::TrayManager("AppTrays",
|
||||
// getRenderWindow());
|
||||
}
|
||||
@@ -432,6 +461,7 @@ public:
|
||||
Ogre::RTShader::ShaderGenerator *shadergen =
|
||||
Ogre::RTShader::ShaderGenerator::getSingletonPtr();
|
||||
shadergen->addSceneManager(scnMgr);
|
||||
scnMgr->setShadowTechnique(Ogre::SHADOWTYPE_NONE);
|
||||
setWindowGrab(true);
|
||||
std::cout << "Init camera"
|
||||
<< "\n";
|
||||
@@ -633,7 +663,7 @@ end:
|
||||
void createContent()
|
||||
{
|
||||
int i;
|
||||
mJolt = new JoltPhysicsWrapper(mScnMgr, mCameraNode);
|
||||
mJolt = new JoltPhysicsWrapper(mScnMgr, mCameraNode);
|
||||
|
||||
sky = new SkyBoxRenderer(getSceneManager());
|
||||
bool drawFirst = true;
|
||||
|
||||
@@ -5524,6 +5524,7 @@ struct TownDecorateDoors : TownTask {
|
||||
};
|
||||
struct TownDecorateFurniture : TownTask {
|
||||
std::shared_future<bool> townDecorateFurnitureComplete;
|
||||
/* here we place all the furniture as scene objects */
|
||||
void createDecorateFurniture(flecs::entity e,
|
||||
const nlohmann::json &jdistrict, int index,
|
||||
Ogre::SceneNode *sceneNode,
|
||||
@@ -5601,11 +5602,11 @@ struct TownDecorateFurniture : TownTask {
|
||||
Ogre::Vector3::UNIT_Z *
|
||||
(float)z * 2.0f;
|
||||
Ogre::Vector3 offsetY(0, y * 4.0f, 0);
|
||||
if (furniture.find("mesh") !=
|
||||
furniture.end()) {
|
||||
Ogre::String meshName =
|
||||
furniture["mesh"]
|
||||
.get<Ogre::String>();
|
||||
static Ogre::String materialName1 = "";
|
||||
static Ogre::String materialName2 = "";
|
||||
auto getFurnitureMesh =
|
||||
[](const Ogre::String &meshName)
|
||||
-> Ogre::MeshPtr {
|
||||
Ogre::MeshPtr mesh =
|
||||
Ogre::MeshManager::getSingleton()
|
||||
.getByName(
|
||||
@@ -5624,6 +5625,70 @@ struct TownDecorateFurniture : TownTask {
|
||||
meshconf);
|
||||
}
|
||||
}
|
||||
return mesh;
|
||||
};
|
||||
auto placeFurnitureMesh = [](flecs::entity
|
||||
e,
|
||||
Ogre::MeshPtr
|
||||
mesh,
|
||||
const Ogre::Vector3
|
||||
&position,
|
||||
const Ogre::Quaternion
|
||||
&rotation) {
|
||||
Ogre::Entity *ent =
|
||||
ECS::get<EngineData>()
|
||||
.mScnMgr
|
||||
->createEntity(
|
||||
mesh->getName());
|
||||
Ogre::String tmpMatName =
|
||||
mesh->getSubMesh(0)
|
||||
->getMaterialName();
|
||||
if (tmpMatName.substr(0, 14) ==
|
||||
"furniture-sofa") {
|
||||
if (materialName2 == "")
|
||||
materialName2 =
|
||||
tmpMatName;
|
||||
else
|
||||
ent->setMaterialName(
|
||||
|
||||
materialName2);
|
||||
} else {
|
||||
if (materialName1 == "")
|
||||
materialName1 =
|
||||
tmpMatName;
|
||||
else
|
||||
ent->setMaterialName(
|
||||
materialName1);
|
||||
}
|
||||
Ogre::SceneNode *node =
|
||||
ECS::get<EngineData>()
|
||||
.mScnMgr
|
||||
->getRootSceneNode()
|
||||
->createChildSceneNode();
|
||||
node->_setDerivedPosition(
|
||||
position);
|
||||
node->_setDerivedOrientation(
|
||||
rotation);
|
||||
node->attachObject(ent);
|
||||
ent->setRenderingDistance(
|
||||
60.0f);
|
||||
addStaticBodyMesh(e, mesh,
|
||||
position,
|
||||
rotation);
|
||||
ECS::get()
|
||||
.entity()
|
||||
.child_of(e)
|
||||
.set<FurnitureInstance>(
|
||||
{ node });
|
||||
};
|
||||
if (furniture.find("mesh") !=
|
||||
furniture.end()) {
|
||||
Ogre::String meshName =
|
||||
furniture["mesh"]
|
||||
.get<Ogre::String>();
|
||||
Ogre::MeshPtr mesh =
|
||||
getFurnitureMesh(
|
||||
meshName);
|
||||
if (mesh) {
|
||||
int rotation = 2;
|
||||
if (jfcell.find(
|
||||
@@ -5638,6 +5703,25 @@ struct TownDecorateFurniture : TownTask {
|
||||
Ogre::Vector3::
|
||||
UNIT_Z *
|
||||
0.0f;
|
||||
Ogre::Vector3 furniturePosition =
|
||||
worldCenterPosition +
|
||||
offsetX +
|
||||
offsetZ +
|
||||
offsetY +
|
||||
offset;
|
||||
Ogre::Quaternion furnitureOrientation =
|
||||
worldCenterOrientation *
|
||||
Ogre::Quaternion(
|
||||
Ogre::Degree(
|
||||
90.0f *
|
||||
(float)rotation),
|
||||
Ogre::Vector3::
|
||||
UNIT_Y);
|
||||
placeFurnitureMesh(
|
||||
e, mesh,
|
||||
furniturePosition,
|
||||
furnitureOrientation);
|
||||
#if 0
|
||||
Ogre::Entity *ent =
|
||||
ECS::get<
|
||||
EngineData>()
|
||||
@@ -5686,6 +5770,7 @@ struct TownDecorateFurniture : TownTask {
|
||||
.child_of(e)
|
||||
.set<FurnitureInstance>(
|
||||
{ node });
|
||||
#endif
|
||||
#if 0
|
||||
if (furniture.find(
|
||||
"sensors") !=
|
||||
|
||||
Reference in New Issue
Block a user