Main.cpp 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <fstream>
  4. #ifdef ANKI_BUILD
  5. #undef ANKI_BUILD
  6. #endif
  7. #include "anki/AnKi.h"
  8. using namespace anki;
  9. #define PLAYER 0
  10. #define MOUSE 1
  11. class MyApp : public App
  12. {
  13. public:
  14. Bool m_profile = false;
  15. Error init();
  16. Error userMainLoop(Bool& quit) override;
  17. };
  18. MyApp* app = nullptr;
  19. //==============================================================================
  20. Error MyApp::init()
  21. {
  22. Error err = ErrorCode::NONE;
  23. ANKI_LOGI("Other init...");
  24. SceneGraph& scene = app->getSceneGraph();
  25. MainRenderer& renderer = app->getMainRenderer();
  26. ResourceManager& resources = app->getResourceManager();
  27. renderer.getOffscreenRenderer().getVolumetric().setFog(
  28. Vec3(1.0, 0.9, 0.9), 0.7);
  29. if(getenv("PROFILE"))
  30. {
  31. m_profile = true;
  32. app->setTimerTick(0.0);
  33. }
  34. {
  35. ScriptResourcePtr script;
  36. // ANKI_CHECK(resources.loadResource("maps/hell/scene.lua", script));
  37. ANKI_CHECK(resources.loadResource("data/map/scene.lua", script));
  38. if(err)
  39. return err;
  40. err = app->getScriptManager().evalString(script->getSource());
  41. if(err)
  42. return err;
  43. app->getMainRenderer()
  44. .getOffscreenRenderer()
  45. .getPps();
  46. // .loadColorGradingTexture("textures/adis/dungeon.ankitex");
  47. }
  48. return ErrorCode::NONE;
  49. }
  50. //==============================================================================
  51. Error MyApp::userMainLoop(Bool& quit)
  52. {
  53. Error err = ErrorCode::NONE;
  54. F32 dist = 0.1;
  55. F32 ang = toRad(2.5);
  56. F32 scale = 0.01;
  57. F32 mouseSensivity = 9.0;
  58. quit = false;
  59. SceneGraph& scene = getSceneGraph();
  60. Input& in = getInput();
  61. MainRenderer& renderer = getMainRenderer();
  62. if(in.getKey(KeyCode::ESCAPE))
  63. {
  64. quit = true;
  65. return err;
  66. }
  67. // move the camera
  68. static MoveComponent* mover =
  69. &scene.getActiveCamera().getComponent<MoveComponent>();
  70. if(in.getKey(KeyCode::_1))
  71. {
  72. mover = scene.getActiveCamera().tryGetComponent<MoveComponent>();
  73. }
  74. if(in.getKey(KeyCode::_2))
  75. {
  76. mover = &scene.findSceneNode("proxy").getComponent<MoveComponent>();
  77. }
  78. if(in.getKey(KeyCode::_3))
  79. {
  80. mover = &scene.findSceneNode("spot0").getComponent<MoveComponent>();
  81. }
  82. if(in.getKey(KeyCode::_4))
  83. {
  84. mover = &scene.findSceneNode("spot1").getComponent<MoveComponent>();
  85. }
  86. if(in.getKey(KeyCode::_5))
  87. {
  88. mover = &scene.findSceneNode("pe").getComponent<MoveComponent>();
  89. }
  90. if(in.getKey(KeyCode::_6))
  91. {
  92. mover = &scene.findSceneNode("shape0").getComponent<MoveComponent>();
  93. }
  94. if(in.getKey(KeyCode::_7))
  95. {
  96. mover = &scene.findSceneNode("shape1").getComponent<MoveComponent>();
  97. }
  98. if(in.getKey(KeyCode::L) == 1)
  99. {
  100. Vec3 origin = mover->getWorldTransform().getOrigin().xyz();
  101. printf("%f %f %f\n", origin.x(), origin.y(), origin.z());
  102. }
  103. if(in.getKey(KeyCode::F1) == 1)
  104. {
  105. renderer.getDbg().setEnabled(!renderer.getDbg().getEnabled());
  106. }
  107. if(in.getKey(KeyCode::F2) == 1)
  108. {
  109. renderer.getDbg().flipFlags(DbgFlag::SPATIAL_COMPONENT);
  110. }
  111. if(in.getKey(KeyCode::F3) == 1)
  112. {
  113. renderer.getDbg().flipFlags(DbgFlag::PHYSICS);
  114. }
  115. if(in.getKey(KeyCode::F4) == 1)
  116. {
  117. renderer.getDbg().flipFlags(DbgFlag::SECTOR_COMPONENT);
  118. }
  119. if(in.getKey(KeyCode::F6) == 1)
  120. {
  121. renderer.getDbg().switchDepthTestEnabled();
  122. }
  123. if(in.getKey(KeyCode::F12) == 1)
  124. {
  125. printf("F12\n");
  126. scene.getActiveCamera()
  127. .getComponent<FrustumComponent>()
  128. .markShapeForUpdate();
  129. scene.getActiveCamera()
  130. .getComponent<FrustumComponent>()
  131. .markTransformForUpdate();
  132. }
  133. #if !PLAYER
  134. if(in.getKey(KeyCode::UP))
  135. mover->rotateLocalX(ang);
  136. if(in.getKey(KeyCode::DOWN))
  137. mover->rotateLocalX(-ang);
  138. if(in.getKey(KeyCode::LEFT))
  139. mover->rotateLocalY(ang);
  140. if(in.getKey(KeyCode::RIGHT))
  141. mover->rotateLocalY(-ang);
  142. if(in.getKey(KeyCode::A))
  143. {
  144. mover->moveLocalX(-dist);
  145. }
  146. if(in.getKey(KeyCode::D))
  147. mover->moveLocalX(dist);
  148. if(in.getKey(KeyCode::Z))
  149. mover->moveLocalY(dist);
  150. if(in.getKey(KeyCode::SPACE))
  151. mover->moveLocalY(-dist);
  152. if(in.getKey(KeyCode::W))
  153. mover->moveLocalZ(-dist);
  154. if(in.getKey(KeyCode::S))
  155. mover->moveLocalZ(dist);
  156. if(in.getKey(KeyCode::Q))
  157. mover->rotateLocalZ(ang);
  158. if(in.getKey(KeyCode::E))
  159. mover->rotateLocalZ(-ang);
  160. if(in.getKey(KeyCode::PAGEUP))
  161. {
  162. mover->scale(scale);
  163. }
  164. if(in.getKey(KeyCode::PAGEDOWN))
  165. {
  166. mover->scale(-scale);
  167. }
  168. #endif
  169. #if !PLAYER && MOUSE
  170. if(in.getMousePosition() != Vec2(0.0) && !m_profile)
  171. {
  172. // printf("%f %f\n", in.getMousePosition().x(),
  173. // in.getMousePosition().y());
  174. F32 angY = -ang * in.getMousePosition().x() * mouseSensivity
  175. * renderer.getAspectRatio();
  176. mover->rotateLocalY(angY);
  177. mover->rotateLocalX(ang * in.getMousePosition().y() * mouseSensivity);
  178. }
  179. #endif
  180. if(m_profile && getGlobalTimestamp() == 500)
  181. {
  182. quit = true;
  183. return err;
  184. }
  185. return err;
  186. }
  187. //==============================================================================
  188. Error init(int argc, char* argv[])
  189. {
  190. Error err = ErrorCode::NONE;
  191. // Config
  192. Config config;
  193. config.set("dbg.enabled", false);
  194. config.set("sm.bilinearEnabled", true);
  195. config.set("is.groundLightEnabled", false);
  196. config.set("sm.enabled", true);
  197. config.set("sm.maxLights", 16);
  198. config.set("sm.poissonEnabled", false);
  199. config.set("sm.resolution", 512);
  200. config.set("lf.maxFlares", 32);
  201. config.set("pps.enabled", true);
  202. config.set("bloom.enabled", true);
  203. config.set("bloom.renderingQuality", 0.5);
  204. config.set("bloom.blurringDist", 1.0);
  205. config.set("bloom.blurringIterationsCount", 1);
  206. config.set("bloom.threshold", 2.0);
  207. config.set("bloom.scale", 2.0);
  208. config.set("bloom.samples", 17);
  209. config.set("ssao.blurringIterationsCount", 1);
  210. config.set("ssao.enabled", true);
  211. config.set("ssao.renderingQuality", 0.25);
  212. config.set("sslf.enabled", true);
  213. config.set("pps.sharpen", false);
  214. config.set("renderingQuality", 1.0);
  215. config.set("width", 1920);
  216. config.set("height", 1088);
  217. config.set("lodDistance", 20.0);
  218. config.set("samples", 1);
  219. config.set("tessellation", true);
  220. // config.set("maxTextureSize", 256);
  221. config.set("ir.enabled", true);
  222. // config.set("ir.clusterSizeZ", 32);
  223. config.set("sslr.enabled", false);
  224. config.set("ir.rendererSize", 64);
  225. config.set("fullscreenDesktopResolution", true);
  226. // config.set("clusterSizeZ", 16);
  227. config.set("debugContext", false);
  228. if(getenv("ANKI_DATA_PATH"))
  229. {
  230. config.set("dataPaths", getenv("ANKI_DATA_PATH"));
  231. }
  232. else
  233. {
  234. config.set("dataPaths", "assets");
  235. }
  236. // config.set("maxTextureSize", 256);
  237. // config.set("lodDistance", 3.0);
  238. // config.saveToFile("./config.xml");
  239. // config.loadFromFile("./config.xml");
  240. app = new MyApp;
  241. ANKI_CHECK(app->create(config, allocAligned, nullptr));
  242. ANKI_CHECK(app->init());
  243. // Input
  244. #if MOUSE
  245. app->getInput().lockCursor(true);
  246. app->getInput().hideCursor(true);
  247. app->getInput().moveCursor(Vec2(0.0));
  248. #endif
  249. return err;
  250. }
  251. //==============================================================================
  252. int main(int argc, char* argv[])
  253. {
  254. Error err = ErrorCode::NONE;
  255. err = init(argc, argv);
  256. if(!err)
  257. {
  258. err = app->mainLoop();
  259. }
  260. if(err)
  261. {
  262. ANKI_LOGE("Error reported. See previous messages");
  263. }
  264. else
  265. {
  266. delete app;
  267. ANKI_LOGI("Bye!!");
  268. }
  269. return 0;
  270. }