threedtest.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. #pragma once
  2. #include <gl2d/gl2d.h>
  3. #include <gl3d.h>
  4. #include <imgui.h>
  5. #include <baseContainer.h>
  6. #include <shortcutApi/shortcutApi.h>
  7. #include <pikaSizes.h>
  8. #include <imgui_spinner.h>
  9. #include <engineLibraresSupport/engineGL3DSupport.h>
  10. struct ThreeDTest: public Container
  11. {
  12. //todo user can request imgui ids; shortcut manager context; allocators
  13. static ContainerStaticInfo containerInfo()
  14. {
  15. ContainerStaticInfo info = {};
  16. info.defaultHeapMemorySize = pika::MB(100);
  17. info.requestImguiFbo = true;
  18. info.requestImguiIds = 1;
  19. return info;
  20. }
  21. gl3d::Renderer3D renderer;
  22. gl3d::Model helmetModel;
  23. gl3d::Entity helmetEntity;
  24. bool create(RequestedContainerInfo &requestedInfo, pika::StaticString<256> commandLineArgument)
  25. {
  26. //glEnable(GL_DEBUG_OUTPUT);
  27. //glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
  28. //glDebugMessageCallback(gl3d::glDebugOutput, &renderer.errorReporter);
  29. //glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, nullptr, GL_TRUE);
  30. renderer.setErrorCallback(&errorCallbackCustom, &requestedInfo);
  31. renderer.fileOpener.userData = &requestedInfo;
  32. renderer.fileOpener.readEntireFileBinaryCallback = readEntireFileBinaryCustom;
  33. renderer.fileOpener.readEntireFileCallback = readEntireFileCustom;
  34. renderer.fileOpener.fileExistsCallback = defaultFileExistsCustom;
  35. renderer.init(1, 1, PIKA_RESOURCES_PATH "BRDFintegrationMap.png", requestedInfo.requestedFBO.fbo);
  36. renderer.adaptiveResolution.useAdaptiveResolution = false;
  37. //renderer.skyBox = renderer.atmosfericScattering({0.2,1,0.3}, {0.9,0.1,0.1}, {0.4, 0.4, 0.8}, 0.8f); //todo a documentation
  38. //todo api for skybox stuff
  39. //renderer.skyBox.color = {0.2,0.3,0.9};
  40. //const char *names[6] =
  41. //{ PIKA_RESOURCES_PATH "/skyBoxes/ocean/right.jpg",
  42. // PIKA_RESOURCES_PATH "/skyBoxes/ocean/left.jpg",
  43. // PIKA_RESOURCES_PATH "/skyBoxes/ocean/top.jpg",
  44. // PIKA_RESOURCES_PATH "/skyBoxes/ocean/bottom.jpg",
  45. // PIKA_RESOURCES_PATH "/skyBoxes/ocean/front.jpg",
  46. // PIKA_RESOURCES_PATH "/skyBoxes/ocean/back.jpg"};
  47. //
  48. //renderer.skyBox = renderer.loadSkyBox(names);
  49. //renderer.skyBox.color = {0.2,0.3,0.8};
  50. renderer.skyBox = renderer.loadHDRSkyBox(PIKA_RESOURCES_PATH "/skyBoxes/canary_wharf_2k.hdr");
  51. renderer.skyBox.color = {0.4,0.4,0.4};
  52. helmetModel = renderer.loadModel(PIKA_RESOURCES_PATH "helmet/helmet.obj", gl3d::TextureLoadQuality::maxQuality, 1.f);
  53. //helmetModel = renderer.loadModel(PIKA_RESOURCES_PATH "/knight/uploads_files_1950170_Solus_the_knight.gltf", 1.f);
  54. renderer.createDirectionalLight({-1,-0.5,-0.2});
  55. gl3d::Transform t;
  56. //t.position = {400'000, 0, -4};
  57. t.rotation = {1.5, 0 , 0};
  58. helmetEntity = renderer.createEntity(helmetModel, t);
  59. return true;
  60. }
  61. bool update(pika::Input input, pika::WindowState windowState,
  62. RequestedContainerInfo &requestedInfo)
  63. {
  64. renderer.setErrorCallback(&errorCallbackCustom, &requestedInfo);
  65. renderer.fileOpener.userData = &requestedInfo;
  66. renderer.fileOpener.readEntireFileBinaryCallback = readEntireFileBinaryCustom;
  67. renderer.fileOpener.readEntireFileCallback = readEntireFileCustom;
  68. renderer.fileOpener.fileExistsCallback = defaultFileExistsCustom;
  69. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  70. glEnable(GL_DEPTH_TEST);
  71. renderer.updateWindowMetrics(windowState.windowW, windowState.windowH);
  72. renderer.camera.aspectRatio = (float)windowState.windowW / windowState.windowH; //todo do this in update
  73. static glm::dvec2 lastMousePos = {};
  74. pika::gl3d::fpsInput(renderer, input, 5, lastMousePos, requestedInfo, {windowState.windowW, windowState.windowH});
  75. if(0)
  76. {
  77. if (input.rMouse.held())
  78. {
  79. glm::dvec2 currentMousePos = {input.mouseX, input.mouseY};
  80. float speed = 0.8f;
  81. glm::vec2 delta = lastMousePos - currentMousePos;
  82. delta *= speed * input.deltaTime;
  83. renderer.camera.rotateCamera(delta);
  84. lastMousePos = currentMousePos;
  85. }
  86. else
  87. {
  88. lastMousePos = {input.mouseX, input.mouseY};
  89. }
  90. }
  91. renderer.render(input.deltaTime);
  92. glDisable(GL_DEPTH_TEST);
  93. //if (!ImGui::Begin("Test window"))
  94. //{
  95. // ImGui::End();
  96. // return;
  97. //}
  98. //
  99. //auto t = renderer.getEntityMeshMaterialTextures(helmetEntity, 0);
  100. //
  101. //ImGui::Image((void*)renderer.getTextureOpenglId(t.albedoTexture), {200, 200});
  102. //
  103. //ImGui::End();
  104. return true;
  105. }
  106. };
  107. //todo flag to clear screen from engine
  108. //todo error popup
  109. //todo error popup disable in release