/// <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);
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
        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;
            }
        }
Пример #4
0
        /// <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);
        }