示例#1
0
        /// <summary>
        /// Called by Unity. Blockingly updates <see langword="this"/> on first frame enabled; otherwise tries async update.
        /// </summary>
        private void OnRenderObject()
        {
            // Return unless revived.
            if (!IsRevived)
            {
                return;
            }


            // Return if already ticked this frame.
            if (LastTick == Time.frameCount && Application.isPlaying)
            {
                return;
            }


            LastTick = Time.frameCount;


            // Try to sync parameters and parts (without caring whether task is executing or not).
            TaskableModel.TryWriteParametersAndParts(Parameters, Parts);


            // Return if task is executing.
            if (TaskableModel.IsExecuting)
            {
                return;
            }


            // Force blocking update on first frame enabled.
            if (WasJustEnabled)
            {
                // Force sync update.
                TaskableModel.UpdateNow();


                // Unset condition.
                WasJustEnabled = false;


                // Fetch results by calling own 'Update()'.
                Update();


                return;
            }


            // Enqueue update task.
            TaskableModel.Update();
        }
示例#2
0
        /// <summary>
        /// Called by Unity. Triggers <see langword="this"/> to update.
        /// </summary>
        private void Update()
        {
#if UNITY_2018_1_OR_NEWER
            if (!WasAttachedModelUpdateFunction)
            {
                _modelUpdateFunctions += OnModelUpdate;


                WasAttachedModelUpdateFunction = true;
            }
#endif


            // Return on first frame enabled.
            if (WasJustEnabled)
            {
                return;
            }


            // Return unless revived.
            if (!IsRevived)
            {
                return;
            }


            // Return if backend is ticking.
            if (!TaskableModel.DidExecute)
            {
                return;
            }


            // Sync parameters back.
            TaskableModel.TryReadParameters(Parameters);

            // restore last frame parameters value and parts opacity.
            if (_parameterStore != null)
            {
                _parameterStore.RestoreParameters();
            }

            // Trigger event.
            if (OnDynamicDrawableData == null)
            {
                return;
            }


            OnDynamicDrawableData(this, TaskableModel.DynamicDrawableData);
        }
示例#3
0
        /// <summary>
        /// Called by Unity. Releases unmanaged memory.
        /// </summary>
        private void OnDestroy()
        {
            if (!IsRevived)
            {
                return;
            }


            TaskableModel.ReleaseUnmanaged();


            TaskableModel = null;
        }
示例#4
0
        /// <summary>
        /// Called by Unity. Triggers <see langword="this"/> to update.
        /// </summary>
        private void Update()
        {
            // Return on first frame enabled.
            if (WasJustEnabled)
            {
                return;
            }


            // Return unless revived.
            if (!IsRevived)
            {
                return;
            }


            // Return if backend is ticking.
            if (!TaskableModel.DidExecute)
            {
                return;
            }


            // Sync parameters back.
            TaskableModel.TryReadParameters(Parameters);

            // restore last frame parameters value and parts opacity.
            if (_parameterStore != null)
            {
                _parameterStore.RestoreParameters();
            }

            // Trigger event.
            if (OnDynamicDrawableData == null)
            {
                return;
            }

            Profiler.BeginSample("OnDynamicDrawableData");
            OnDynamicDrawableData(this, TaskableModel.DynamicDrawableData);
            Profiler.EndSample();
        }
示例#5
0
        /// <summary>
        /// Called by Unity. Triggers <see langword="this"/> to update.
        /// </summary>
        private void Update()
        {
            // Return on first frame enabled.
            if (WasJustEnabled)
            {
                return;
            }


            // Return unless revived.
            if (!IsRevived)
            {
                return;
            }


            // Return if backend is ticking.
            if (!TaskableModel.DidExecute)
            {
                return;
            }


            // Sync parameters back.
            TaskableModel.TryReadParameters(Parameters);


            // Trigger event.
            if (OnDynamicDrawableData == null)
            {
                return;
            }


            OnDynamicDrawableData(this, TaskableModel.DynamicDrawableData);
        }