예제 #1
0
        /// <summary>
        /// Creates drawables for a <see cref="CubismModel"/>.
        /// </summary>
        /// <param name="unmanagedModel">Handle to unmanaged model.</param>
        /// <returns>Drawables root.</returns>
        internal static GameObject CreateDrawables(CubismUnmanagedModel unmanagedModel)
        {
            var root = new GameObject("Drawables");


            // Create drawables.
            var unmanagedDrawables = unmanagedModel.Drawables;
            var buffer             = new CubismDrawable[unmanagedDrawables.Count];


            for (var i = 0; i < buffer.Length; ++i)
            {
                var proxy = new GameObject();


                buffer[i] = proxy.AddComponent <CubismDrawable>();


                buffer[i].transform.SetParent(root.transform);
                buffer[i].Reset(unmanagedModel, i);
            }


            return(root);
        }
        /// <summary>
        /// Creates drawables for a <see cref="CubismModel"/>.
        /// </summary>
        /// <param name="unmanagedModel">Handle to unmanaged model.</param>
        /// <returns>Drawables root.</returns>
        internal static GameObject CreateParameters(CubismUnmanagedModel unmanagedModel)
        {
            var root = new GameObject("Parameters");


            // Create parameters.
            var unmanagedParameters = unmanagedModel.Parameters;
            var buffer = new CubismParameter[unmanagedParameters.Count];


            for (var i = 0; i < buffer.Length; ++i)
            {
                var proxy = new GameObject();


                buffer[i] = proxy.AddComponent <CubismParameter>();


                buffer[i].transform.SetParent(root.transform);
                buffer[i].Reset(unmanagedModel, i);
            }


            return(root);
        }
예제 #3
0
        /// <summary>
        /// Restores instance to initial state.
        /// </summary>
        /// <param name="unmanagedModel">Handle to unmanaged model.</param>
        /// <param name="unmanagedIndex">Position in unmanaged arrays.</param>
        private void Reset(CubismUnmanagedModel unmanagedModel, int unmanagedIndex)
        {
            Revive(unmanagedModel);

            UnmanagedIndex = unmanagedIndex;
            name           = Id;
        }
예제 #4
0
        /// <summary>
        /// Restores instance to initial state.
        /// </summary>
        /// <param name="unmanagedModel">TaskableModel to unmanaged unmanagedModel.</param>
        /// <param name="unmanagedIndex">Position in unmanaged arrays.</param>
        private void Reset(CubismUnmanagedModel unmanagedModel, int unmanagedIndex)
        {
            Revive(unmanagedModel);


            UnmanagedIndex = unmanagedIndex;
            name           = Id;
            Opacity        = UnmanagedParts.Opacities[unmanagedIndex];
        }
        /// <summary>
        /// Revives (and sorts) <see cref="CubismParameter"/>s.
        /// </summary>
        /// <param name="self">Container.</param>
        /// <param name="model">TaskableModel to unmanaged model.</param>
        internal static void Revive(this CubismParameter[] self, CubismUnmanagedModel model)
        {
            Array.Sort(self, (a, b) => a.UnmanagedIndex - b.UnmanagedIndex);


            for (var i = 0; i < self.Length; ++i)
            {
                self[i].Revive(model);
            }
        }
        /// <summary>
        /// Writes opacities to unmanaged model.
        /// </summary>
        /// <param name="self">Source buffer.</param>
        /// <param name="unmanagedModel"></param>
        internal static void ReadFrom(this CubismParameter[] self, CubismUnmanagedModel unmanagedModel)
        {
            // Get address.
            var unmanagedParameters = unmanagedModel.Parameters;
            var values = unmanagedParameters.Values;


            // Pull.
            for (var i = 0; i < self.Length; ++i)
            {
                self[i].Value = values[self[i].UnmanagedIndex];
            }
        }
        /// <summary>
        /// Writes opacities to unmanaged model.
        /// </summary>
        /// <param name="self">Source buffer.</param>
        /// <param name="unmanagedModel"></param>
        internal static void WriteTo(this CubismParameter[] self, CubismUnmanagedModel unmanagedModel)
        {
            // Get address.
            var unmanagedParameters = unmanagedModel.Parameters;
            var values = unmanagedParameters.Values;


            // Push.
            for (var i = 0; i < self.Length; ++i)
            {
                values[self[i].UnmanagedIndex] = self[i].Value;
            }
        }
        /// <summary>
        /// Writes opacities to unmanaged model.
        /// </summary>
        /// <param name="self">Source buffer.</param>
        /// <param name="unmanagedModel"></param>
        internal static void WriteTo(this CubismPart[] self, CubismUnmanagedModel unmanagedModel)
        {
            // Get address.
            var unmanagedParts = unmanagedModel.Parts;
            var opacities      = unmanagedParts.Opacities;


            // Push.
            for (var i = 0; i < self.Length; ++i)
            {
                opacities[self[i].UnmanagedIndex] = self[i].Opacity;
            }
        }
        /// <summary>
        /// Initializes instance.
        /// </summary>
        /// <param name="moc">Moc unmanaged model was instantiated from.</param>
        public CubismTaskableModel(CubismMoc moc)
        {
            Moc = moc;


            // Instantiate unmanaged model.
            var unmanagedMoc = moc.AcquireUnmanagedMoc();


            UnmanagedModel = CubismUnmanagedModel.FromMoc(unmanagedMoc);


            Lock  = new object();
            State = TaskState.Idle;
            DynamicDrawableData    = CubismDynamicDrawableData.CreateData(UnmanagedModel);
            ShouldReleaseUnmanaged = false;
        }
        /// <summary>
        /// Reads new data from a model.
        /// </summary>
        /// <param name="self">Buffer to write to.</param>
        /// <param name="unmanagedModel">Unmanaged model to read from.</param>
        internal static unsafe void ReadFrom(this CubismDynamicDrawableData[] self, CubismUnmanagedModel unmanagedModel)
        {
            // Get addresses.
            var drawables       = unmanagedModel.Drawables;
            var flags           = drawables.DynamicFlags;
            var opacities       = drawables.Opacities;
            var drawOrders      = drawables.DrawOrders;
            var renderOrders    = drawables.RenderOrders;
            var vertexPositions = drawables.VertexPositions;


            // Pull data.
            for (var i = 0; i < self.Length; ++i)
            {
                var data = self[i];


                data.Flags       = flags[i];
                data.Opacity     = opacities[i];
                data.DrawOrder   = drawOrders[i];
                data.RenderOrder = renderOrders[i];


                // Read vertex positions only if necessary.
                if (!data.AreVertexPositionsDirty)
                {
                    continue;
                }

                // Copy vertex positions.
                fixed(Vector3 *dataVertexPositions = data.VertexPositions)
                {
                    for (var v = 0; v < data.VertexPositions.Length; ++v)
                    {
                        dataVertexPositions[v].x = vertexPositions[i][(v * 2) + 0];
                        dataVertexPositions[v].y = vertexPositions[i][(v * 2) + 1];
                    }
                }
            }


            // Clear dynamic flags.
            drawables.ResetDynamicFlags();
        }
예제 #11
0
        /// <summary>
        /// Creates buffer for dynamic <see cref="CubismDrawable"/> data.
        /// </summary>
        /// <param name="unmanagedModel">Unmanaged model to create buffer for.</param>
        /// <returns>Buffer.</returns>
        internal static CubismDynamicDrawableData[] CreateData(CubismUnmanagedModel unmanagedModel)
        {
            var unmanagedDrawables = unmanagedModel.Drawables;
            var buffer             = new CubismDynamicDrawableData[unmanagedDrawables.Count];


            // Initialize buffers.
            var vertexCounts = unmanagedDrawables.VertexCounts;


            for (var i = 0; i < buffer.Length; ++i)
            {
                buffer[i] = new CubismDynamicDrawableData
                {
                    VertexPositions = new Vector3[vertexCounts[i]]
                };
            }


            return(buffer);
        }
 /// <summary>
 /// Revives the instance.
 /// </summary>
 /// <param name="unmanagedModel">Handle to unmanaged model.</param>
 internal void Revive(CubismUnmanagedModel unmanagedModel)
 {
     UnmanagedParameters = unmanagedModel.Parameters;
 }
예제 #13
0
 /// <summary>
 /// Revives instance.
 /// </summary>
 /// <param name="unmanagedModel">Handle to unmanaged model.</param>
 internal void Revive(CubismUnmanagedModel unmanagedModel)
 {
     UnmanagedDrawables = unmanagedModel.Drawables;
 }
예제 #14
0
 /// <summary>
 /// Initializes instance.
 /// </summary>
 /// <param name="unmanagedModel">Handle to unmanaged model.</param>
 public CubismCanvasInformation(CubismUnmanagedModel unmanagedModel)
 {
     Reset(unmanagedModel);
 }
예제 #15
0
 /// <summary>
 /// Restores instance to initial state.
 /// </summary>
 /// <param name="unmanagedModel">Handle to unmanaged model.</param>
 private void Reset(CubismUnmanagedModel unmanagedModel)
 {
     Revive(unmanagedModel);
 }
예제 #16
0
 /// <summary>
 /// Revives the instance.
 /// </summary>
 /// <param name="unmanagedModel">Handle to unmanaged model.</param>
 internal void Revive(CubismUnmanagedModel unmanagedModel)
 {
     UnmanagedCanvasInformation = unmanagedModel.CanvasInformation;
 }