GpuSceneFunctions.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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/LICENSE
  5. #pragma once
  6. #include <AnKi/Shaders/Include/GpuSceneTypes.h>
  7. ANKI_BEGIN_NAMESPACE
  8. inline GpuSceneRenderableVertex unpackGpuSceneRenderableVertex(UVec4 x)
  9. {
  10. GpuSceneRenderableVertex o;
  11. o.m_worldTransformsOffset = x[0];
  12. o.m_constantsOffset = x[1];
  13. o.m_meshLodIndex = x[2];
  14. o.m_boneTransformsOrParticleEmitterOffset = x[3];
  15. return o;
  16. }
  17. inline GpuSceneRenderableBoundingVolume initGpuSceneRenderableBoundingVolume(Vec3 aabbMin, Vec3 aabbMax, U32 renderableIndex, U32 renderStateBucket)
  18. {
  19. GpuSceneRenderableBoundingVolume gpuVolume;
  20. gpuVolume.m_aabbMin = aabbMin;
  21. gpuVolume.m_aabbMax = aabbMax;
  22. const Vec3 sphereCenter = (aabbMin + aabbMax) * 0.5f;
  23. const Vec3 aabbExtend = aabbMax - sphereCenter;
  24. #if defined(__cplusplus)
  25. gpuVolume.m_sphereRadius = aabbExtend.getLength();
  26. #else
  27. gpuVolume.m_sphereRadius = length(aabbExtend);
  28. #endif
  29. ANKI_ASSERT(renderableIndex <= (1u << 20u) - 1u);
  30. gpuVolume.m_renderableIndex_20bit_renderStateBucket_12bit = renderableIndex << 12u;
  31. ANKI_ASSERT(renderStateBucket <= (1u << 12u) - 1u);
  32. gpuVolume.m_renderableIndex_20bit_renderStateBucket_12bit |= renderStateBucket;
  33. return gpuVolume;
  34. }
  35. inline GpuSceneNonRenderableObjectTypeWithFeedback toGpuSceneNonRenderableObjectTypeWithFeedback(GpuSceneNonRenderableObjectType type)
  36. {
  37. GpuSceneNonRenderableObjectTypeWithFeedback ret;
  38. switch(type)
  39. {
  40. case GpuSceneNonRenderableObjectType::kLight:
  41. ret = GpuSceneNonRenderableObjectTypeWithFeedback::kLight;
  42. break;
  43. case GpuSceneNonRenderableObjectType::kGlobalIlluminationProbe:
  44. ret = GpuSceneNonRenderableObjectTypeWithFeedback::kGlobalIlluminationProbe;
  45. break;
  46. case GpuSceneNonRenderableObjectType::kReflectionProbe:
  47. ret = GpuSceneNonRenderableObjectTypeWithFeedback::kReflectionProbe;
  48. break;
  49. default:
  50. ret = GpuSceneNonRenderableObjectTypeWithFeedback::kCount;
  51. }
  52. return ret;
  53. }
  54. ANKI_END_NAMESPACE