public void Init(GridService grid) { int x = _lifes.SimSizeX, y = _lifes.SimSizeY, z = _lifes.SimSizeZ; grid.SetParams(_compute); _compute.SetBuffer(_kernelInitHashes, ShaderConst.BUF_LIFE, _lifes.Lifes); _compute.SetBuffer(_kernelInitHashes, ShaderConst.BUF_POSITION, _positions.P0); SetBuffer(_compute, _kernelInitHashes); _compute.Dispatch(_kernelInitHashes, x, y, z); }
public void Detect(float distance) { int x = _lifes.SimSizeX, y = _lifes.SimSizeY, z = _lifes.SimSizeZ; _hashes.Init(_grid); _sort.Init(_keys); _sort.SortInt(_keys, _hashes.Hashes); _grid.Construct(_keys); _grid.SetParams(_compute); _compute.SetFloat(ShaderConst.PROP_BROADPHASE_SQR_DISTANCE, distance * distance); _compute.SetBuffer(_kernelSolve, ShaderConst.BUF_BROADPHASE_KEYS, _keys); _positions.SetBuffer(_compute, _kernelSolve); _lifes.SetBuffer(_compute, _kernelSolve); _grid.SetBuffer(_compute, _kernelSolve); SetBuffer(_compute, _kernelSolve); _compute.Dispatch(_kernelSolve, x, y, z); }