GpuSceneFunctions.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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 GpuSceneRenderablePacked packGpuSceneRenderable(GpuSceneRenderable x)
  9. {
  10. GpuSceneRenderablePacked o;
  11. o[0] = x.m_worldTransformsOffset;
  12. o[1] = x.m_uniformsOffset;
  13. o[2] = x.m_geometryOffset;
  14. o[3] = x.m_boneTransformsOffset;
  15. return o;
  16. }
  17. inline GpuSceneRenderable unpackGpuSceneRenderable(GpuSceneRenderablePacked x)
  18. {
  19. GpuSceneRenderable o;
  20. o.m_worldTransformsOffset = x[0];
  21. o.m_uniformsOffset = x[1];
  22. o.m_geometryOffset = x[2];
  23. o.m_boneTransformsOffset = x[3];
  24. return o;
  25. }
  26. inline GpuSceneRenderableAabb initGpuSceneRenderableAabb(Vec3 aabbMin, Vec3 aabbMax, U32 renderableIndex,
  27. U32 renderStateBucket)
  28. {
  29. GpuSceneRenderableAabb gpuVolume;
  30. gpuVolume.m_sphereCenter = (aabbMin + aabbMax) * 0.5f;
  31. gpuVolume.m_aabbExtend = aabbMax - gpuVolume.m_sphereCenter;
  32. #if defined(__cplusplus)
  33. gpuVolume.m_negativeSphereRadius = -gpuVolume.m_aabbExtend.getLength();
  34. #else
  35. gpuVolume.m_negativeSphereRadius = -length(gpuVolume.m_aabbExtend);
  36. #endif
  37. ANKI_ASSERT(renderableIndex <= (1u << 20u) - 1u);
  38. gpuVolume.m_renderableIndexAndRenderStateBucket = renderableIndex << 12u;
  39. ANKI_ASSERT(renderStateBucket <= (1u << 12u) - 1u);
  40. gpuVolume.m_renderableIndexAndRenderStateBucket |= renderStateBucket;
  41. return gpuVolume;
  42. }
  43. ANKI_END_NAMESPACE