public FoundWave(WaterWavesSpectrumData spectrum, WaterWave wave) { this.spectrum = spectrum; this.wave = wave; importance = wave.cpuPriority * spectrum.Weight; }
public bool SetResolveMode(bool resolveByFFT, int resolution) { if (this.resolveByFFT != resolveByFFT || (this.resolveByFFT && this.resolutionFFT != resolution)) { if (resolveByFFT) { lock (this) { this.resolutionFFT = resolution; this.mipIndexFFT = WaterWavesSpectrumData.GetMipIndex(resolution); int resolutionSquared = resolution * resolution; directionalSpectrum = new Vector2[resolutionSquared]; displacements = new Vector2[4][]; forceAndHeight = new vector4[4][]; resultsTiming = new float[4]; directionalSpectrumDirty = 2; cachedTime = float.NegativeInfinity; for (int i = 0; i < 4; ++i) { displacements[i] = new Vector2[resolutionSquared]; forceAndHeight[i] = new vector4[resolutionSquared]; } if (this.resolveByFFT == false) { WaterAsynchronousTasks.Instance.AddFFTComputations(this); this.resolveByFFT = true; } } } else { WaterAsynchronousTasks.Instance.RemoveFFTComputations(this); this.resolveByFFT = false; } return(true); } return(false); }
public WaterWavesSpectrumData GetSpectrumData(WaterWavesSpectrum spectrum) { WaterWavesSpectrumData spectrumData; if (!spectraDataCache.TryGetValue(spectrum, out spectrumData)) { lock (spectraDataCache) { spectraDataCache[spectrum] = spectrumData = new WaterWavesSpectrumData(water, spectrum); } spectrumData.ValidateSpectrumData(); cpuWavesDirty = true; lock (spectraDataList) { spectraDataList.Add(spectrumData); } } return(spectrumData); }