GpuSceneFunctions.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. // Copyright (C) 2009-present, 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 GpuSceneRenderableInstance unpackGpuSceneRenderableVertex(UVec4 x)
  9. {
  10. GpuSceneRenderableInstance o;
  11. o.m_worldTransformsIndex = x[0];
  12. o.m_constantsOffset = x[1];
  13. o.m_meshLodIndex = x[2];
  14. o.m_boneTransformsOffsetOrParticleEmitterIndex = x[3];
  15. return o;
  16. }
  17. inline GpuSceneMeshletInstance unpackGpuSceneMeshletInstance(UVec4 x)
  18. {
  19. GpuSceneMeshletInstance o;
  20. o.m_worldTransformsIndex_25bit_meshletPrimitiveCount_7bit = x[0];
  21. o.m_constantsOffset = x[1];
  22. o.m_meshletGeometryDescriptorIndex = x[2];
  23. o.m_boneTransformsOffsetOrParticleEmitterIndex = x[3];
  24. return o;
  25. }
  26. inline GpuSceneRenderableBoundingVolume initGpuSceneRenderableBoundingVolume(Vec3 aabbMin, Vec3 aabbMax, U32 renderableIndex, U32 renderStateBucket)
  27. {
  28. GpuSceneRenderableBoundingVolume gpuVolume;
  29. gpuVolume.m_aabbMin = aabbMin;
  30. gpuVolume.m_aabbMax = aabbMax;
  31. const Vec3 sphereCenter = (aabbMin + aabbMax) * 0.5f;
  32. const Vec3 aabbExtend = aabbMax - sphereCenter;
  33. #if defined(__cplusplus)
  34. gpuVolume.m_sphereRadius = aabbExtend.getLength();
  35. #else
  36. gpuVolume.m_sphereRadius = length(aabbExtend);
  37. #endif
  38. ANKI_ASSERT(renderableIndex <= (1u << 20u) - 1u);
  39. gpuVolume.m_renderableIndex_20bit_renderStateBucket_12bit = renderableIndex << 12u;
  40. ANKI_ASSERT(renderStateBucket <= (1u << 12u) - 1u);
  41. gpuVolume.m_renderableIndex_20bit_renderStateBucket_12bit |= renderStateBucket;
  42. return gpuVolume;
  43. }
  44. inline GpuSceneNonRenderableObjectTypeWithFeedback toGpuSceneNonRenderableObjectTypeWithFeedback(GpuSceneNonRenderableObjectType type)
  45. {
  46. GpuSceneNonRenderableObjectTypeWithFeedback ret;
  47. switch(type)
  48. {
  49. case GpuSceneNonRenderableObjectType::kLight:
  50. ret = GpuSceneNonRenderableObjectTypeWithFeedback::kLight;
  51. break;
  52. case GpuSceneNonRenderableObjectType::kGlobalIlluminationProbe:
  53. ret = GpuSceneNonRenderableObjectTypeWithFeedback::kGlobalIlluminationProbe;
  54. break;
  55. case GpuSceneNonRenderableObjectType::kReflectionProbe:
  56. ret = GpuSceneNonRenderableObjectTypeWithFeedback::kReflectionProbe;
  57. break;
  58. default:
  59. ret = GpuSceneNonRenderableObjectTypeWithFeedback::kCount;
  60. }
  61. return ret;
  62. }
  63. ANKI_END_NAMESPACE