/
redgpu
/
ezEngine
Обзор
Документация
Войти
/
redgpu
/
ezEngine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
Code/ThirdParty/Jolt/Shaders/HairCommon.h
56 строк
2 KB
Jan Krassnigg
Updated Jolt to version 5.5.0 (#1778)
20 янв 2026, 10:54
Не верифицирован
20 янв 2026, 10:54
c41ee15
Код
Авторство
О чём код?
// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics) // SPDX-FileCopyrightText: 2026 Jorrit Rouwe // SPDX-License-Identifier: MIT #include "ShaderMath.h" #include "ShaderMat44.h" #include "ShaderQuat.h" #include "ShaderPlane.h" #include "ShaderVec3.h" // The density and velocity fields are stored in fixed point while accumulating, this constant converts from float to fixed point. JPH_SHADER_CONSTANT(int, cFloatToFixed, 1 << 10) JPH_SHADER_CONSTANT(float, cFixedToFloat, 1.0f / float(cFloatToFixed)) bool IsVertexFixed(JPH_SHADER_BUFFER(JPH_uint) inVertexFixed, uint inVertexIndex) { return (inVertexFixed[inVertexIndex >> 5] & (1u << (inVertexIndex & 31))) != 0; } float GetVertexInvMass(JPH_SHADER_BUFFER(JPH_uint) inVertexFixed, uint inVertexIndex) { return IsVertexFixed(inVertexFixed, inVertexIndex)? 0.0f : 1.0f; } float GetVertexStrandFraction(JPH_SHADER_BUFFER(JPH_uint) inStrandFractions, uint inVertexIndex) { return ((inStrandFractions[inVertexIndex >> 2] >> ((inVertexIndex & 3) << 3)) & 0xff) * (1.0f / 255.0f); } uint GetStrandVertexCount(JPH_SHADER_BUFFER(JPH_uint) inStrandVertexCounts, uint inStrandIndex) { return (inStrandVertexCounts[inStrandIndex >> 2] >> ((inStrandIndex & 3) << 3)) & 0xff; } uint GetStrandMaterialIndex(JPH_SHADER_BUFFER(JPH_uint) inStrandMaterialIndex, uint inStrandIndex) { return (inStrandMaterialIndex[inStrandIndex >> 2] >> ((inStrandIndex & 3) << 3)) & 0xff; } float GradientSamplerSample(float4 inSampler, float inStrandFraction) { return min(inSampler.w, max(inSampler.z, inSampler.y + inStrandFraction * inSampler.x)); } void GridPositionToIndexAndFraction(float3 inPosition, JPH_OUT(uint3) outIndex, JPH_OUT(float3) outFraction) { // Get position in grid space float3 grid_pos = min(max(inPosition - cGridOffset, float3(0, 0, 0)) * cGridScale, cGridSizeMin1); outIndex = min(uint3(grid_pos), cGridSizeMin2); outFraction = grid_pos - float3(outIndex); } uint GridIndexToBufferIndex(uint3 inIndex) { return inIndex.x + inIndex.y * cGridStride.y + inIndex.z * cGridStride.z; }