/// <summary> /// Provides ocean shape to CPU. /// </summary> public ICollProvider CreateCollisionProvider() { ICollProvider result = null; switch (_collisionSource) { case CollisionSources.None: result = new CollProviderNull(); break; case CollisionSources.OceanDisplacementTexturesGPU: result = GPUReadbackDisps.Instance; break; case CollisionSources.GerstnerWavesCPU: result = FindObjectOfType <ShapeGerstnerBatched>(); break; } if (result == null) { return(null); } if (_cachedHeightQueries) { result = new CollProviderCache(result); } return(result); }
void Start() { _instance = this; _oceanBuilder = FindObjectOfType <OceanBuilder>(); _oceanBuilder.GenerateMesh(_baseVertDensity, _lodCount); _collProvider = new CollProviderDispTexs(); if (_cachedCpuOceanQueries) { _collProvider = new CollProviderCache(_collProvider); } if (_viewpoint == null) { if (Camera.main != null) { _viewpoint = Camera.main.transform; } else { Debug.LogError("Please provide the viewpoint transform, or tag the primary camera as MainCamera.", this); } } }
void Start() { _instance = this; _oceanBuilder = FindObjectOfType <OceanBuilder>(); _oceanBuilder.GenerateMesh(_baseVertDensity, _lodCount); _collProvider = new CollProviderDispTexs(); if (_cachedCpuOceanQueries) { _collProvider = new CollProviderCache(_collProvider); } if (_viewpoint == null) { _viewpoint = Camera.main.transform; } }
/// <summary> /// Provides ocean shape to CPU. /// </summary> public ICollProvider CreateCollisionProvider() { ICollProvider result = null; switch (_collisionSource) { case CollisionSources.None: result = new CollProviderNull(); break; case CollisionSources.OceanDisplacementTexturesGPU: result = GPUReadbackDisps.Instance; Debug.Assert(result != null, "Sampling collision too early, collision system has not been initialised."); break; case CollisionSources.GerstnerWavesCPU: result = FindObjectOfType <ShapeGerstnerBatched>(); break; case CollisionSources.ComputeShaderQueries: result = QueryDisplacements.Instance; break; } if (result == null && _collisionSource == CollisionSources.OceanDisplacementTexturesGPU) { // can happen if async readback not supported on device result = new CollProviderNull(); } if (result == null) { // this should not be hit - return null to create null ref exceptions Debug.Assert(false, "Could not create collision provider. Collision source = " + _collisionSource.ToString()); return(null); } if (_cachedHeightQueries) { result = new CollProviderCache(result); } return(result); }