|
|
@@ -79,105 +79,12 @@ void init()
|
|
|
spot->setShadowEnabled(true);
|
|
|
|
|
|
// horse
|
|
|
- ModelNode* horse = new ModelNode(scene, SceneNode::SNF_NONE, NULL);
|
|
|
- horse->init("meshes/horse/horse.mdl");
|
|
|
- horse->setLocalTransform(Transform(Vec3(-2, 0, 0), Mat3::getIdentity(), 1.0));
|
|
|
-
|
|
|
- // Pentagram
|
|
|
- /*pentagram = new ModelNode(false, NULL);
|
|
|
- pentagram->init("models/pentagram/pentagram.mdl");
|
|
|
- pentagram->setLocalTransform(Transform(Vec3(2, 0, 0), Mat3::getIdentity(), 1.0));*/
|
|
|
-
|
|
|
- // Sponza
|
|
|
- /*ModelNode* sponza = new ModelNode(scene, SceneNode::SNF_NONE, NULL);
|
|
|
- //sponza->init("maps/sponza/sponza.mdl");
|
|
|
- sponza->init("maps/sponza-crytek/sponza_crytek.mdl");
|
|
|
- sponza->setLocalTransform(Transform(Vec3(0.0), Mat3::getIdentity(), 0.05));*/
|
|
|
-
|
|
|
-
|
|
|
- // Imp
|
|
|
- /*imp = new SkinNode(false, NULL);
|
|
|
- imp->setLocalTransform(Transform(Vec3(0.0, 2.0, 0.0), Mat3::getIdentity(), 0.7));
|
|
|
- imp->init("models/imp/imp.skin");
|
|
|
- imp->skelAnimModelNodeCtrl = new SkelAnimModelNodeCtrl(*imp);
|
|
|
- imp->skelAnimModelNodeCtrl->set(imp->getSkin().getSkelAnims()[0].get());
|
|
|
- imp->skelAnimModelNodeCtrl->setStep(0.8);
|
|
|
-
|
|
|
- imp->addChild(*cam);*/
|
|
|
-
|
|
|
-
|
|
|
- // sarge
|
|
|
- /*sarge = new MeshNode();
|
|
|
- sarge->init("meshes/sphere/sphere16.mesh");
|
|
|
- //sarge->setLocalTransform(Vec3(0, -2.8, 1.0), Mat3(Euler(-m::PI/2, 0.0, 0.0)), 1.1);
|
|
|
- sarge->setLocalTransform(Transform(Vec3(0, 2.0, 2.0), Mat3::getIdentity(), 0.4));
|
|
|
-
|
|
|
- // floor
|
|
|
- floor__ = new MeshNode();
|
|
|
- floor__->init("maps/temple/Cube.019.mesh");
|
|
|
- floor__->setLocalTransform(Transform(Vec3(0.0, -0.19, 0.0), Mat3(Euler(-m::PI/2, 0.0, 0.0)), 0.8));*/
|
|
|
-
|
|
|
- // imp
|
|
|
- /*imp = new SkelModelNode();
|
|
|
- imp->init("models/imp/imp.smdl");
|
|
|
- //imp->setLocalTransform(Transform(Vec3(0.0, 2.11, 0.0), Mat3(Euler(-m::PI/2, 0.0, 0.0)), 0.7));
|
|
|
- SkelAnimCtrl* ctrl = new SkelAnimCtrl(*imp->meshNodes[0]->meshSkelCtrl->skelNode);
|
|
|
- ctrl->skelAnim.load("models/imp/walk.imp.anim");
|
|
|
- ctrl->step = 0.8;*/
|
|
|
-
|
|
|
- // cave map
|
|
|
- /*for(int i=1; i<21; i++)
|
|
|
- {
|
|
|
- MeshNode* node = new MeshNode();
|
|
|
- node->init(("maps/cave/rock." + lexical_cast<string>(i) + ".mesh").c_str());
|
|
|
- node->setLocalTransform(Transform(Vec3(0.0, -0.0, 0.0), Mat3::getIdentity(), 0.01));
|
|
|
- }*/
|
|
|
-
|
|
|
- // sponza map
|
|
|
- /*MeshNode* node = new MeshNode();
|
|
|
- node->init("maps/sponza/floor.mesh");
|
|
|
- node = new MeshNode();
|
|
|
- node->init("maps/sponza/walls.mesh");
|
|
|
- node = new MeshNode();
|
|
|
- node->init("maps/sponza/light-marbles.mesh");
|
|
|
- node = new MeshNode();
|
|
|
- node->init("maps/sponza/dark-marbles.mesh");*/
|
|
|
- //node->setLocalTransform(Transform(Vec3(0.0, -0.0, 0.0), Mat3::getIdentity(), 0.01));
|
|
|
-
|
|
|
- // particle emitter
|
|
|
- /*
|
|
|
- XXX
|
|
|
- partEmitter = new ParticleEmitterNode(false, NULL);
|
|
|
- partEmitter->init("asdf");
|
|
|
- partEmitter->getLocalTransform().setOrigin(Vec3(3.0, 0.0, 0.0));*/
|
|
|
-
|
|
|
- return;
|
|
|
-
|
|
|
- // character
|
|
|
- /*PhyCharacter::Initializer init;
|
|
|
- init.sceneNode = imp;
|
|
|
- init.startTrf = Transform(Vec3(0, 40, 0), Mat3::getIdentity(), 1.0);
|
|
|
- character = new PhyCharacter(SceneSingleton::get().getPhysics(), init);*/
|
|
|
-
|
|
|
- // crate
|
|
|
- /*crate = new MeshNode;
|
|
|
- crate->init("models/crate0/crate0.mesh");
|
|
|
- crate->scaleLspace = 1.0;*/
|
|
|
-
|
|
|
-
|
|
|
- //
|
|
|
- //floor_ = new floor_t;
|
|
|
- //floor_->material = RsrcMngr::materials.load("materials/default.mtl");
|
|
|
-
|
|
|
-
|
|
|
- initPhysics();
|
|
|
-
|
|
|
- //ANKI_LOGI("Engine initialization ends (" << (App::getTicks() - ticks) << ")");
|
|
|
+ ModelNode* horse = new ModelNode("meshes/horse/horse.mdl", "horse", &scene,
|
|
|
+ Movable::MF_NONE, nullptr);
|
|
|
+ horse->setLocalTransform(Transform(Vec3(-2, 0, 0), Mat3::getIdentity(),
|
|
|
+ 1.0));
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-//==============================================================================
|
|
|
-// =
|
|
|
//==============================================================================
|
|
|
void mainLoopExtra()
|
|
|
{
|
|
|
@@ -188,87 +95,27 @@ void mainLoopExtra()
|
|
|
float scale = 0.01;
|
|
|
|
|
|
// move the camera
|
|
|
- static SceneNode* mover = AppSingleton::get().getActiveCam();
|
|
|
-
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_1)) mover = AppSingleton::get().getActiveCam();
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_2)) mover = point_lights[0];
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_3)) mover = spot_lights[0];
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_4)) mover = point_lights[1];
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_5)) mover = spot_lights[1];
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_6)) mover = imp;
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_7)) mover =
|
|
|
- SceneSingleton::get().getParticleEmitterNodes()[0];
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_8)) mover = horse;
|
|
|
-
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_A)) mover->moveLocalX(-dist);
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_D)) mover->moveLocalX(dist);
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_LSHIFT)) mover->moveLocalY(dist);
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_SPACE)) mover->moveLocalY(-dist);
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_W)) mover->moveLocalZ(-dist);
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_S)) mover->moveLocalZ(dist);
|
|
|
- if(!InputSingleton::get().getWarpMouse())
|
|
|
- {
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_UP)) mover->rotateLocalX(ang);
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_DOWN)) mover->rotateLocalX(-ang);
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_LEFT)) mover->rotateLocalY(ang);
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_RIGHT)) mover->rotateLocalY(-ang);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- float accel = 44.0;
|
|
|
- mover->rotateLocalX(ang * InputSingleton::get().mouseVelocity.y() * accel);
|
|
|
- mover->rotateLocalY(-ang * InputSingleton::get().mouseVelocity.x() * accel);
|
|
|
- }
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_Q)) mover->rotateLocalZ(ang);
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_E)) mover->rotateLocalZ(-ang);
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_PAGEUP)) mover->getLocalTransform().getScale() += scale ;
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_PAGEDOWN)) mover->getLocalTransform().getScale() -= scale ;
|
|
|
+ static Movable* mover = SceneSingleton::get().getActiveCamera().getMovable();
|
|
|
+ Input& in = InputSingleton::get();
|
|
|
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_K))
|
|
|
- AppSingleton::get().getActiveCam()->lookAtPoint(point_lights[0]->getWorldTransform().getOrigin());
|
|
|
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_I))
|
|
|
- character->moveForward(0.1);
|
|
|
-
|
|
|
- /*if(InputSingleton::get().getKey(SDL_SCANCODE_F) == 1)
|
|
|
- {
|
|
|
- Event::ManagerSingleton::get().createEvent(Event::MainRendererPpsHdr(HighRezTimer::getCrntTime() + 5,
|
|
|
- 5, r::MainRendererSingleton::get().getPps().getHdr().getExposure() + 20.0, 3, 1.4));
|
|
|
- }*/
|
|
|
-
|
|
|
-
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_O) == 1)
|
|
|
+ if(in.getKey(SDL_SCANCODE_1))
|
|
|
{
|
|
|
- btRigidBody* body = static_cast<btRigidBody*>(boxes[0]);
|
|
|
- //body->getMotionState()->setWorldTransform(toBt(Mat4(Vec3(0.0, 10.0, 0.0), Mat3::getIdentity(), 1.0)));
|
|
|
- body->setWorldTransform(toBt(Mat4(Vec3(0.0, 10.0, 0.0), Mat3::getIdentity(), 1.0)));
|
|
|
- //body->clearForces();
|
|
|
- body->forceActivationState(ACTIVE_TAG);
|
|
|
+ mover = &SceneSingleton::get().getActiveCamera();
|
|
|
}
|
|
|
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_Y) == 1)
|
|
|
- {
|
|
|
- ANKI_LOGI("Exec script");
|
|
|
- ScriptManagerSingleton::get().execScript(readFile("test.py").c_str());
|
|
|
- }
|
|
|
-
|
|
|
- mover->getLocalTransform().getRotation().reorthogonalize();
|
|
|
-
|
|
|
- //ANKI_LOGI(mover->getSceneNodeName())
|
|
|
-
|
|
|
- /*if(spot_lights[0]->getCamera().insideFrustum(spot_lights[1]->getCamera()))
|
|
|
- {
|
|
|
- ANKI_LOGI("in");
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- ANKI_LOGI("out");
|
|
|
- }*/
|
|
|
+ if(in.getKey(SDL_SCANCODE_A)) mover->moveLocalX(-dist);
|
|
|
+ if(in.getKey(SDL_SCANCODE_D)) mover->moveLocalX(dist);
|
|
|
+ if(in.getKey(SDL_SCANCODE_LSHIFT)) mover->moveLocalY(dist);
|
|
|
+ if(in.getKey(SDL_SCANCODE_SPACE)) mover->moveLocalY(-dist);
|
|
|
+ if(in.getKey(SDL_SCANCODE_W)) mover->moveLocalZ(-dist);
|
|
|
+ if(in.getKey(SDL_SCANCODE_S)) mover->moveLocalZ(dist);
|
|
|
+ if(in.getKey(SDL_SCANCODE_Q)) mover->rotateLocalZ(ang);
|
|
|
+ if(in.getKey(SDL_SCANCODE_E)) mover->rotateLocalZ(-ang);
|
|
|
+ if(in.getKey(SDL_SCANCODE_PAGEUP)) mover->getLocalTransform().getScale() += scale ;
|
|
|
+ if(in.getKey(SDL_SCANCODE_PAGEDOWN)) mover->getLocalTransform().getScale() -= scale ;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-//==============================================================================
|
|
|
-// mainLoop =
|
|
|
//==============================================================================
|
|
|
void mainLoop()
|
|
|
{
|
|
|
@@ -276,7 +123,7 @@ void mainLoop()
|
|
|
|
|
|
HighRezTimer mainLoopTimer;
|
|
|
mainLoopTimer.start();
|
|
|
- HighRezTimer::Scalar prevUpdateTime = HighRezTimer::getCrntTime();
|
|
|
+ HighRezTimer::Scalar prevUpdateTime = HighRezTimer::getCurrentTime();
|
|
|
HighRezTimer::Scalar crntTime = prevUpdateTime;
|
|
|
|
|
|
while(1)
|
|
|
@@ -285,85 +132,22 @@ void mainLoop()
|
|
|
timer.start();
|
|
|
|
|
|
prevUpdateTime = crntTime;
|
|
|
- crntTime = HighRezTimer::getCrntTime();
|
|
|
+ crntTime = HighRezTimer::getCurrentTime();
|
|
|
|
|
|
- //
|
|
|
// Update
|
|
|
//
|
|
|
mainLoopExtra();
|
|
|
- void execStdinScpripts();
|
|
|
- execStdinScpripts();
|
|
|
- SceneSingleton::get().getPhysWorld().update(prevUpdateTime, crntTime);
|
|
|
- SceneSingleton::get().updateAllWorldStuff(prevUpdateTime, crntTime);
|
|
|
- SceneSingleton::get().doVisibilityTests(*AppSingleton::get().getActiveCam());
|
|
|
- SceneSingleton::get().updateAllControllers();
|
|
|
+ SceneSingleton::get().update(prevUpdateTime, crntTime,
|
|
|
+ MainRendererSingleton::get().getFramesCount());
|
|
|
EventManagerSingleton::get().updateAllEvents(prevUpdateTime, crntTime);
|
|
|
- MainRendererSingleton::get().render(*AppSingleton::get().getActiveCam());
|
|
|
-
|
|
|
- painter->setPosition(Vec2(0.0, 0.1));
|
|
|
- painter->setColor(Vec4(1.0));
|
|
|
- //painter->drawText("A");
|
|
|
- const MainRenderer& r = MainRendererSingleton::get();
|
|
|
- std::stringstream ss;
|
|
|
- ss << "MS: " << r.getMsTime() * 1000000 << " IS: " <<
|
|
|
- r.getIsTime() * 1000000 << " BS: " << r.getBsTime() * 1000000 <<
|
|
|
- " PPS: " << r.getPpsTime() * 1000000 << " DBG: " <<
|
|
|
- r.getDbgTime() * 1000000;
|
|
|
-
|
|
|
- ss << "\n" << AppSingleton::get().getActiveCam()->
|
|
|
- getVisibleMsRenderableNodes().size();
|
|
|
- painter->drawText(ss.str());
|
|
|
+ MainRendererSingleton::get().render(SceneSingleton::get());
|
|
|
|
|
|
if(InputSingleton::get().getKey(SDL_SCANCODE_ESCAPE))
|
|
|
{
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_F11))
|
|
|
- {
|
|
|
- AppSingleton::get().togleFullScreen();
|
|
|
- }
|
|
|
-
|
|
|
- if(InputSingleton::get().getKey(SDL_SCANCODE_F12) == 1)
|
|
|
- {
|
|
|
- MainRendererSingleton::get().takeScreenshot("gfx/screenshot.jpg");
|
|
|
- }
|
|
|
-
|
|
|
AppSingleton::get().swapBuffers();
|
|
|
-
|
|
|
-
|
|
|
- //
|
|
|
- // Async resource loading
|
|
|
- //
|
|
|
- /*if(ResourceManagerSingleton::get().getAsyncLoadingRequestsNum() > 0)
|
|
|
- {
|
|
|
- HighRezTimer::Scalar a = timer.getElapsedTime();
|
|
|
- HighRezTimer::Scalar b = AppSingleton::get().getTimerTick();
|
|
|
- HighRezTimer::Scalar timeToSpendForRsrcPostProcess;
|
|
|
- if(a < b)
|
|
|
- {
|
|
|
- timeToSpendForRsrcPostProcess = b - a;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- timeToSpendForRsrcPostProcess = 0.001;
|
|
|
- }
|
|
|
- ResourceManagerSingleton::get().postProcessFinishedLoadingRequests(timeToSpendForRsrcPostProcess);
|
|
|
- }*/
|
|
|
-
|
|
|
- //
|
|
|
- // Sleep
|
|
|
- //
|
|
|
- timer.stop();
|
|
|
- if(timer.getElapsedTime() < AppSingleton::get().getTimerTick())
|
|
|
- {
|
|
|
- SDL_Delay((AppSingleton::get().getTimerTick() - timer.getElapsedTime()) * 1000.0);
|
|
|
- }
|
|
|
-
|
|
|
- /*if(r::MainRendererSingleton::get().getFramesNum() == 100)
|
|
|
- {
|
|
|
- break;
|
|
|
- }*/
|
|
|
}
|
|
|
|
|
|
ANKI_LOGI("Exiting main loop (" << mainLoopTimer.getElapsedTime() << " sec)");
|
|
|
@@ -402,75 +186,13 @@ void initSubsystems(int argc, char* argv[])
|
|
|
|
|
|
MainRendererSingleton::get().init(initializer);
|
|
|
|
|
|
- // Scripting engine
|
|
|
- const char* commonPythonCode =
|
|
|
- "import sys\n"
|
|
|
- "from anki import *\n"
|
|
|
- "\n"
|
|
|
- "class StdoutCatcher:\n"
|
|
|
- " def write(self, str_):\n"
|
|
|
- " if str_ == \"\\n\": return\n"
|
|
|
- " line = sys._getframe(1).f_lineno\n"
|
|
|
- " file = sys._getframe(1).f_code.co_filename\n"
|
|
|
- " func = sys._getframe(1).f_code.co_name\n"
|
|
|
- " LoggerSingleton.get().write(file, line, "
|
|
|
- "func, Logger.MessageType.MT_NORMAL, str_ + \"\\n\")\n"
|
|
|
- "\n"
|
|
|
- "class StderrCatcher:\n"
|
|
|
- " def write(self, str_):\n"
|
|
|
- " line = sys._getframe(1).f_lineno\n"
|
|
|
- " file = sys._getframe(1).f_code.co_filename\n"
|
|
|
- " func = sys._getframe(1).f_code.co_name\n"
|
|
|
- " LoggerSingleton.get().write(file, line, "
|
|
|
- "func, Logger.MessageType.MT_ERROR, str_)\n"
|
|
|
- "\n"
|
|
|
- "sys.stdout = StdoutCatcher()\n"
|
|
|
- "sys.stderr = StderrCatcher()\n";
|
|
|
-
|
|
|
- ScriptManagerSingleton::get().execScript(commonPythonCode);
|
|
|
-
|
|
|
// Stdin listener
|
|
|
StdinListenerSingleton::get().start();
|
|
|
|
|
|
// Parallel jobs
|
|
|
ParallelManagerSingleton::get().init(4);
|
|
|
-
|
|
|
- // Add drawer to physics
|
|
|
- SceneSingleton::get().getPhysWorld().setDebugDrawer(
|
|
|
- new PhysDbgDrawer(MainRendererSingleton::get().getDbg()));
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-//==============================================================================
|
|
|
-// execStdinScpripts =
|
|
|
-//==============================================================================
|
|
|
-/// The func pools the stdinListener for string in the console, if
|
|
|
-/// there are any it executes them with scriptingEngine
|
|
|
-void execStdinScpripts()
|
|
|
-{
|
|
|
- while(1)
|
|
|
- {
|
|
|
- std::string cmd = StdinListenerSingleton::get().getLine();
|
|
|
-
|
|
|
- if(cmd.length() < 1)
|
|
|
- {
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- try
|
|
|
- {
|
|
|
- ScriptManagerSingleton::get().execScript(cmd.c_str(),
|
|
|
- "command line input");
|
|
|
- }
|
|
|
- catch(Exception& e)
|
|
|
- {
|
|
|
- ANKI_LOGE(e.what());
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-//==============================================================================
|
|
|
-// main =
|
|
|
//==============================================================================
|
|
|
int main(int argc, char* argv[])
|
|
|
{
|
|
|
@@ -478,13 +200,6 @@ int main(int argc, char* argv[])
|
|
|
|
|
|
try
|
|
|
{
|
|
|
- /*ShaderProgramPrePreprocessor p("lala.glsl");
|
|
|
- std::cout << "VERT\n" << p.getShaderSource(ST_VERTEX) << std::endl;
|
|
|
- std::cout << "TC\n" << p.getShaderSource(ST_TC) << std::endl;
|
|
|
- std::cout << "TE\n" << p.getShaderSource(ST_TE) << std::endl;
|
|
|
- std::cout << "GEOM\n" << p.getShaderSource(ST_GEOMETRY) << std::endl;
|
|
|
- std::cout << "FRAG\n" << p.getShaderSource(ST_FRAGMENT) << std::endl;
|
|
|
- return 0;*/
|
|
|
initSubsystems(argc, argv);
|
|
|
init();
|
|
|
|
|
|
@@ -496,9 +211,6 @@ int main(int argc, char* argv[])
|
|
|
}
|
|
|
catch(std::exception& e)
|
|
|
{
|
|
|
- /*std::cerr << "Aborting: " <<
|
|
|
- boost::replace_all_copy(std::string(e.what()), "AnKi exception: ",
|
|
|
- "\n") << std::endl;*/
|
|
|
std::cerr << "Aborting: " << e.what() << std::endl;
|
|
|
//abort();
|
|
|
exitCode = 1;
|