| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- // Copyright (C) 2009-present, Panagiotis Christopoulos Charitos and contributors.
- // All rights reserved.
- // Code licensed under the BSD License.
- // http://www.anki3d.org/LICENSE
- #pragma once
- #include <AnKi/Shaders/Include/GpuSceneTypes.h>
- ANKI_BEGIN_NAMESPACE
- inline GpuSceneMeshletInstance unpackGpuSceneMeshletInstance(UVec4 x)
- {
- GpuSceneMeshletInstance o;
- o.m_worldTransformsIndex_25bit_meshletPrimitiveCount_7bit = x[0];
- o.m_constantsOffset = x[1];
- o.m_meshletGeometryDescriptorIndex = x[2];
- o.m_boneTransformsOffsetOrParticleEmitterIndex = x[3];
- return o;
- }
- inline GpuSceneRenderableBoundingVolume initGpuSceneRenderableBoundingVolume(Vec3 aabbMin, Vec3 aabbMax, U32 renderableIndex, U32 renderStateBucket)
- {
- GpuSceneRenderableBoundingVolume gpuVolume;
- gpuVolume.m_aabbMin = aabbMin;
- gpuVolume.m_aabbMax = aabbMax;
- const Vec3 sphereCenter = (aabbMin + aabbMax) * 0.5f;
- const Vec3 aabbExtend = aabbMax - sphereCenter;
- #if defined(__cplusplus)
- gpuVolume.m_sphereRadius = aabbExtend.length();
- #else
- gpuVolume.m_sphereRadius = length(aabbExtend);
- #endif
- ANKI_ASSERT(renderableIndex <= (1u << 20u) - 1u);
- gpuVolume.m_renderableIndex = renderableIndex;
- ANKI_ASSERT(renderStateBucket <= (1u << 12u) - 1u);
- gpuVolume.m_renderStateBucket = renderStateBucket;
- return gpuVolume;
- }
- inline GpuSceneNonRenderableObjectTypeWithFeedback toGpuSceneNonRenderableObjectTypeWithFeedback(GpuSceneNonRenderableObjectType type)
- {
- GpuSceneNonRenderableObjectTypeWithFeedback ret;
- switch(type)
- {
- case GpuSceneNonRenderableObjectType::kLight:
- ret = GpuSceneNonRenderableObjectTypeWithFeedback::kLight;
- break;
- case GpuSceneNonRenderableObjectType::kGlobalIlluminationProbe:
- ret = GpuSceneNonRenderableObjectTypeWithFeedback::kGlobalIlluminationProbe;
- break;
- case GpuSceneNonRenderableObjectType::kReflectionProbe:
- ret = GpuSceneNonRenderableObjectTypeWithFeedback::kReflectionProbe;
- break;
- default:
- ret = GpuSceneNonRenderableObjectTypeWithFeedback::kCount;
- }
- return ret;
- }
- ANKI_END_NAMESPACE
|