/// <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); }
/// <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; }
/// <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(); }
/// <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; }
/// <summary> /// Revives instance. /// </summary> /// <param name="unmanagedModel">Handle to unmanaged model.</param> internal void Revive(CubismUnmanagedModel unmanagedModel) { UnmanagedDrawables = unmanagedModel.Drawables; }
/// <summary> /// Initializes instance. /// </summary> /// <param name="unmanagedModel">Handle to unmanaged model.</param> public CubismCanvasInformation(CubismUnmanagedModel unmanagedModel) { Reset(unmanagedModel); }
/// <summary> /// Restores instance to initial state. /// </summary> /// <param name="unmanagedModel">Handle to unmanaged model.</param> private void Reset(CubismUnmanagedModel unmanagedModel) { Revive(unmanagedModel); }
/// <summary> /// Revives the instance. /// </summary> /// <param name="unmanagedModel">Handle to unmanaged model.</param> internal void Revive(CubismUnmanagedModel unmanagedModel) { UnmanagedCanvasInformation = unmanagedModel.CanvasInformation; }