Skip to content

WIP ‐ Live2D Cubism

Bryan Edds edited this page Oct 19, 2023 · 7 revisions

Current algebra for design -

type CubismModel =
    private { __ : unit }

type CubismParamData =
    { ValueMin : single
      ValueMax : single
      ValueDefault : single
      FriendlyName : string }

type CubismPose =
    Map<string, single>

type CubismModelInstance =
    { ModelContainerMemoryPtr : voidptr
      ModelMemoryPtr : voidptr
      ModelContainerPtr : nativeint
      ModelPtr : nativeint }

type CubismModelMetadata =
    { ParamData : Map<string, CubismParamData>
      PoseDefault : CubismPose
      Poses : Map<string, CubismPose> }

type CubismContext =
    { CubismModelInstances : Map<CubismModel AssetTag, CubismModelInstance>
      CubismModelMetadata : Map<CubismModel AssetTag, CubismModelMetadata> }

type CubismModelDescriptor =
    { CubismParams : Map<string, single> (* low-level algebra *)
      CubismPoseOpt : Choice<unit, string, single * string * string> (* high-level algebra *) }

type RenderOperation2d =
    | ExistingCases
    | RenderCubismModel of CubismModelDescriptor

module Metadata =
    let tryGetCubismModelMetadata (_ : CubismModel AssetTag) : CubismModelMetadata option = Unchecked.defaultof<_>
Clone this wiki locally