SkyboxComponent.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // Copyright (C) 2009-2023, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSEJ
  5. #include <AnKi/Scene/Components/SkyboxComponent.h>
  6. #include <AnKi/Scene/SceneNode.h>
  7. #include <AnKi/Scene/SceneGraph.h>
  8. #include <AnKi/Resource/ImageResource.h>
  9. #include <AnKi/Resource/ResourceManager.h>
  10. #include <AnKi/Renderer/RenderQueue.h>
  11. namespace anki {
  12. SkyboxComponent::SkyboxComponent(SceneNode* node)
  13. : SceneComponent(node, getStaticClassId())
  14. , m_spatial(this)
  15. {
  16. m_spatial.setAlwaysVisible(true);
  17. m_spatial.setUpdatesOctreeBounds(false);
  18. }
  19. SkyboxComponent::~SkyboxComponent()
  20. {
  21. m_spatial.removeFromOctree(SceneGraph::getSingleton().getOctree());
  22. }
  23. void SkyboxComponent::loadImageResource(CString filename)
  24. {
  25. ImageResourcePtr img;
  26. const Error err = ResourceManager::getSingleton().loadResource(filename, img);
  27. if(err)
  28. {
  29. ANKI_SCENE_LOGE("Setting skybox image failed. Ignoring error");
  30. return;
  31. }
  32. m_image = std::move(img);
  33. m_type = SkyboxType::kImage2D;
  34. }
  35. Error SkyboxComponent::update([[maybe_unused]] SceneComponentUpdateInfo& info, Bool& updated)
  36. {
  37. updated = m_spatial.update(SceneGraph::getSingleton().getOctree());
  38. return Error::kNone;
  39. }
  40. void SkyboxComponent::setupSkyboxQueueElement(SkyboxQueueElement& queueElement) const
  41. {
  42. if(m_type == SkyboxType::kImage2D)
  43. {
  44. queueElement.m_skyboxTexture = &m_image->getTextureView();
  45. }
  46. else
  47. {
  48. queueElement.m_skyboxTexture = nullptr;
  49. queueElement.m_solidColor = m_color;
  50. }
  51. queueElement.m_fog.m_minDensity = m_fog.m_minDensity;
  52. queueElement.m_fog.m_maxDensity = m_fog.m_maxDensity;
  53. queueElement.m_fog.m_heightOfMinDensity = m_fog.m_heightOfMinDensity;
  54. queueElement.m_fog.m_heightOfMaxDensity = m_fog.m_heightOfMaxDensity;
  55. queueElement.m_fog.m_scatteringCoeff = m_fog.m_scatteringCoeff;
  56. queueElement.m_fog.m_absorptionCoeff = m_fog.m_absorptionCoeff;
  57. queueElement.m_fog.m_diffuseColor = m_fog.m_diffuseColor;
  58. }
  59. } // end namespace anki