using System; using UnityEngine; namespace Obi { public class ComputeVolumeConstraints : ComputeConstraintsImpl { public ComputeShader constraintsShader; public int gradientsKernel; public int volumeKernel; public int denominatorsKernel; public int constraintKernel; public int deltasKernel; public int applyKernel; public ComputeVolumeConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Volume) { constraintsShader = GameObject.Instantiate(Resources.Load("Compute/VolumeConstraints")); gradientsKernel = constraintsShader.FindKernel("Gradients"); volumeKernel = constraintsShader.FindKernel("CalculateVolume"); denominatorsKernel = constraintsShader.FindKernel("Denominators"); constraintKernel = constraintsShader.FindKernel("Constraint"); deltasKernel = constraintsShader.FindKernel("AccumulateDeltas"); applyKernel = constraintsShader.FindKernel("Apply"); } public override IConstraintsBatchImpl CreateConstraintsBatch() { var dataBatch = new ComputeVolumeConstraintsBatch(this); batches.Add(dataBatch); return dataBatch; } public override void RemoveBatch(IConstraintsBatchImpl batch) { batches.Remove(batch as ComputeVolumeConstraintsBatch); batch.Destroy(); } } }