// Path: src/main/java/uk/kihira/gltf/Node.java
// public final class Node implements IDisposable
// {
//     private Matrix4f matrix;
//     private boolean isStatic; // This is set to true if there is no animation (ie a matrix is present in the gltf file)
//     private Mesh mesh;
//     private final ArrayList<Node> children;
// 
//     // These must be defined if we have an animation
//     public Vector3f translation;
//     public Quaternion rotation;
//     public Vector3f scale;
// 
//     private Node(@Nullable ArrayList<Node> children)
//     {
//         this.matrix = new Matrix4f();
//         this.children = children;
//     }
// 
//     Node(@Nullable ArrayList<Node> children, float[] matrix)
//     {
//         this(children);
//         this.isStatic = true;
//         this.matrix = new Matrix4f(matrix);
//     }
// 
//     Node(@Nullable ArrayList<Node> children, float[] translation, float[] rotation, float[] scale)
//     {
//         this(children);
//         this.translation = new Vector3f(translation[0], translation[1], translation[2]);
//         this.rotation = new Quaternion(rotation[0], rotation[1], rotation[2], rotation[3]);
//         this.scale = new Vector3f(scale[0], scale[1], scale[2]);
//     }
// 
//     public void render(MatrixStack matrixStack)
//     {
//         // Generate matrix if this is not static
//         if (!this.isStatic)
//         {
//             this.matrix.setIdentity();
//             this.matrix.translate(this.translation);
//             this.matrix.mul(this.rotation);
//             // todo this.matrix.scale(this.scale);
//         }
// 
//         matrixStack.push();
//         matrixStack.getLast().getMatrix().mul(matrix);
// 
//         if (mesh != null)
//         {
//             mesh.render();
//         }
// 
//         if (children != null)
//         {
//             for (Node child: children)
//             {
//                 child.render(matrixStack);
//             }
//         }
// 
//         matrixStack.pop();
//     }
// 
//     public void setMesh(Mesh mesh)
//     {
//         this.mesh = mesh;
//     }
// 
//     @Override
//     public void dispose()
//     {
//         mesh.dispose();
//     }
// }
// 
// Path: src/main/java/uk/kihira/gltf/spec/Accessor.java
// public enum Type {
//     SCALAR(1), 
//     VEC2(2), 
//     VEC3(3), 
//     VEC4(4), 
//     MAT2(4), 
//     MAT3(9), 
//     MAT4(16);
// 
//     public final int size;
// 
//     Type(final int size) {
//         this.size = size;
//     }
// }


import java.nio.FloatBuffer;
import uk.kihira.gltf.Node;
import uk.kihira.gltf.spec.Accessor.Type;
package uk.kihira.gltf.animation;



public class Channel {
    public final Sampler sampler;
    public final Type outputType;
    public final FloatBuffer inputData;
    public final FloatBuffer outputData;
// Path: src/main/java/uk/kihira/gltf/Node.java
// public final class Node implements IDisposable
// {
//     private Matrix4f matrix;
//     private boolean isStatic; // This is set to true if there is no animation (ie a matrix is present in the gltf file)
//     private Mesh mesh;
//     private final ArrayList<Node> children;
// 
//     // These must be defined if we have an animation
//     public Vector3f translation;
//     public Quaternion rotation;
//     public Vector3f scale;
// 
//     private Node(@Nullable ArrayList<Node> children)
//     {
//         this.matrix = new Matrix4f();
//         this.children = children;
//     }
// 
//     Node(@Nullable ArrayList<Node> children, float[] matrix)
//     {
//         this(children);
//         this.isStatic = true;
//         this.matrix = new Matrix4f(matrix);
//     }
// 
//     Node(@Nullable ArrayList<Node> children, float[] translation, float[] rotation, float[] scale)
//     {
//         this(children);
//         this.translation = new Vector3f(translation[0], translation[1], translation[2]);
//         this.rotation = new Quaternion(rotation[0], rotation[1], rotation[2], rotation[3]);
//         this.scale = new Vector3f(scale[0], scale[1], scale[2]);
//     }
// 
//     public void render(MatrixStack matrixStack)
//     {
//         // Generate matrix if this is not static
//         if (!this.isStatic)
//         {
//             this.matrix.setIdentity();
//             this.matrix.translate(this.translation);
//             this.matrix.mul(this.rotation);
//             // todo this.matrix.scale(this.scale);
//         }
// 
//         matrixStack.push();
//         matrixStack.getLast().getMatrix().mul(matrix);
// 
//         if (mesh != null)
//         {
//             mesh.render();
//         }
// 
//         if (children != null)
//         {
//             for (Node child: children)
//             {
//                 child.render(matrixStack);
//             }
//         }
// 
//         matrixStack.pop();
//     }
// 
//     public void setMesh(Mesh mesh)
//     {
//         this.mesh = mesh;
//     }
// 
//     @Override
//     public void dispose()
//     {
//         mesh.dispose();
//     }
// }
// 
// Path: src/main/java/uk/kihira/gltf/spec/Accessor.java
// public enum Type {
//     SCALAR(1), 
//     VEC2(2), 
//     VEC3(3), 
//     VEC4(4), 
//     MAT2(4), 
//     MAT3(9), 
//     MAT4(16);
// 
//     public final int size;
// 
//     Type(final int size) {
//         this.size = size;
//     }
// }


// Path: src/main/java/uk/kihira/gltf/animation/Channel.java
import java.nio.FloatBuffer;
import uk.kihira.gltf.Node;
import uk.kihira.gltf.spec.Accessor.Type;

package uk.kihira.gltf.animation;



public class Channel {
    public final Sampler sampler;
    public final Type outputType;
    public final FloatBuffer inputData;
    public final FloatBuffer outputData;
    public final Node node;