# Class GltfLoader

java.lang.Object
com.codename1.gpu.GltfLoader

public final class GltfLoader extends Object

Loads a `Mesh` from a glTF 2.0 model so applications can render real authored geometry rather than only the built in `Primitives`. Both the binary container (`.glb`) and the JSON form (`.gltf`) are supported; for the JSON form, buffers must be embedded as `data:` URIs (external `.bin` side files are not fetched). The first triangle primitive of the first mesh is read.

The loader produces the engine's standard `VertexFormat.POSITION_NORMAL_TEXCOORD` layout so the result drops straight into any built in `Material`:

- `POSITION` (required) is read as the vertex position.
- `NORMAL` is read when present; otherwise flat per-triangle normals are computed so lit materials still shade correctly.
- `TEXCOORD_0` is read when present; otherwise zero texture coordinates are written.

Materials, textures, skinning and animation in the glTF are ignored -- this is a geometry loader. Apply a `Material` (and a `Texture` loaded via the device) to the returned mesh as usual.

Example:

    byte[] glb = ...; // bytes of a .glb model
    Mesh mesh = GltfLoader.load(device, glb);
    Material material = new Material(Material.Type.PHONG).setTexture(texture);
    device.draw(mesh, material, modelMatrix);

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static final class`
  `GltfLoader.GltfImageModel`
  A loaded glTF model in device-free form: its geometry plus the decoded base-color image extracted from the model's first material, if any.
  `static final class`
  `GltfLoader.GltfModel`
  A loaded glTF model: its geometry plus the base-color texture extracted from the model's first material, if any.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static Mesh`
  `load(byte[] data)`
  Loads a model from in-memory `.glb` or `.gltf` bytes without a `GraphicsDevice`, allocating the buffers directly.
  `static Mesh`
  `load(GraphicsDevice device, byte[] data)`
  Loads a model from in-memory `.glb` or `.gltf` bytes.
  `static Mesh`
  `load(GraphicsDevice device, InputStream in)`
  Reads all bytes from the stream and loads the model.
  `static Mesh`
  `load(InputStream in)`
  Reads all bytes from the stream and loads the model without a `GraphicsDevice`.
  `static GltfLoader.GltfImageModel`
  `loadImageModel(byte[] data)`
  Loads a model together with its base-color image from in-memory `.glb` or `.gltf` bytes without a `GraphicsDevice`.
  `static GltfLoader.GltfImageModel`
  `loadImageModel(InputStream in)`
  Reads all bytes from the stream and loads the model with its base-color image without a `GraphicsDevice`.
  `static GltfLoader.GltfModel`
  `loadModel(GraphicsDevice device, byte[] data)`
  Loads a model together with its base-color texture from in-memory `.glb` or `.gltf` bytes.
  `static GltfLoader.GltfModel`
  `loadModel(GraphicsDevice device, InputStream in)`
  Reads all bytes from the stream and loads the model with its base-color texture.

  ### Methods inherited from class Object

  `clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Method Details

  - ### load

    public static Mesh load(GraphicsDevice device, InputStream in) throws IOException

    Reads all bytes from the stream and loads the model. The stream is closed.

    ###### Parameters

    - `device`: the device that allocates the mesh buffers

    - `in`: a stream over `.glb` or `.gltf` bytes

    ###### Returns

    the loaded mesh

    Throws:
      `IOException`

  - ### load

    public static Mesh load(GraphicsDevice device, byte[] data)

    Loads a model from in-memory `.glb` or `.gltf` bytes.

    ###### Parameters

    - `device`: the device that allocates the mesh buffers

    - `data`: the raw model bytes (binary `.glb` or JSON `.gltf`)

    ###### Returns

    the loaded mesh

  - ### load

    public static Mesh load(byte[] data)

    Loads a model from in-memory `.glb` or `.gltf` bytes without a `GraphicsDevice`, allocating the buffers directly. Behaves exactly like `load(GraphicsDevice, byte[])`; useful for parsing geometry off the render thread or handing meshes to non GPU consumers such as the AR content pipeline.

    ###### Parameters

    - `data`: the raw model bytes (binary `.glb` or JSON `.gltf`)

    ###### Returns

    the loaded mesh

  - ### load

    public static Mesh load(InputStream in) throws IOException

    Reads all bytes from the stream and loads the model without a `GraphicsDevice`. The stream is closed.

    ###### Parameters

    - `in`: a stream over `.glb` or `.gltf` bytes

    ###### Returns

    the loaded mesh

    Throws:
      `IOException`

  - ### loadModel

    public static GltfLoader.GltfModel loadModel(GraphicsDevice device, byte[] data)

    Loads a model together with its base-color texture from in-memory `.glb` or `.gltf` bytes. Use this (rather than `load`) when the model carries its own texture and you want it applied automatically.

    ###### Parameters

    - `device`: the device that allocates the mesh buffers and texture

    - `data`: the raw model bytes

    ###### Returns

    the loaded mesh plus its base-color texture (null texture if the model has none)

  - ### loadModel

    public static GltfLoader.GltfModel loadModel(GraphicsDevice device, InputStream in) throws IOException
    Reads all bytes from the stream and loads the model with its base-color texture. The stream is closed.
    Throws:
      `IOException`

  - ### loadImageModel

    public static GltfLoader.GltfImageModel loadImageModel(byte[] data)

    Loads a model together with its base-color image from in-memory `.glb` or `.gltf` bytes without a `GraphicsDevice`. The image is decoded but not uploaded to the GPU, so this works off the render thread and on non GPU consumers such as the AR content pipeline.

    ###### Parameters

    - `data`: the raw model bytes

    ###### Returns

    the loaded mesh plus its decoded base-color image (null image if the model has none)

  - ### loadImageModel

    public static GltfLoader.GltfImageModel loadImageModel(InputStream in) throws IOException
    Reads all bytes from the stream and loads the model with its base-color image without a `GraphicsDevice`. The stream is closed.
    Throws:
      `IOException`