# Class GraphicsDevice

java.lang.Object
com.codename1.gpu.GraphicsDevice

public abstract class GraphicsDevice extends Object

The low level command surface of the 3D API, bound to a single `RenderView` and its GPU context. A concrete subclass is provided by each platform backend (OpenGL ES on Android, WebGL on the browser, Metal on iOS, desktop GL on the simulator). Applications obtain the device from the `Renderer` callbacks and never construct it directly.

The device owns shader generation and caching: when `draw` is called it looks at the `Material` and the mesh `VertexFormat`, generates (once) the matching platform shader, uploads any dirty buffers and issues the draw call.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `GraphicsDevice()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `abstract void`
  `clear(int argbColor, boolean color, boolean depth)`
  Clears the framebuffer.
  `IndexBuffer`
  `createIndexBuffer(int indexCount)`
  Allocates an index buffer.
  `abstract Texture`
  `createTexture(int width, int height, int[] argb)`
  Creates a GPU texture from raw ARGB pixel data.
  `abstract Texture`
  `createTexture(Image image)`
  Creates a GPU texture from a Codename One image.
  `VertexBuffer`
  `createVertexBuffer(VertexFormat format, int vertexCount)`
  Allocates a vertex buffer.
  `abstract void`
  `dispose(IndexBuffer buffer)`
  Releases the GPU resources backing an index buffer.
  `abstract void`
  `dispose(Texture texture)`
  Releases the GPU resources backing a texture.
  `abstract void`
  `dispose(VertexBuffer buffer)`
  Releases the GPU resources backing a vertex buffer.
  `abstract void`
  `draw(Mesh mesh, Material material, float[] modelMatrix)`
  Draws a mesh with the supplied material and model matrix.
  `Camera`
  `getCamera()`
  Returns the active camera, or null if none was set.
  `abstract GpuCapabilities`
  `getCapabilities()`
  Returns the capabilities and limits of the underlying GPU.
  `Light`
  `getLight()`
  Returns the active light.
  `void`
  `setCamera(Camera camera)`
  Sets the active camera supplying the view and projection matrices used by subsequent draws.
  `void`
  `setLight(Light light)`
  Sets the active directional light used by lit materials.
  `abstract void`
  `setViewport(int x, int y, int width, int height)`
  Sets the viewport rectangle in pixels.

  ### Methods inherited from class Object

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

- ## Constructor Details

  - ### GraphicsDevice

    public GraphicsDevice()

- ## Method Details

  - ### getCapabilities

    public abstract GpuCapabilities getCapabilities()
    Returns the capabilities and limits of the underlying GPU.

  - ### createVertexBuffer

    public VertexBuffer createVertexBuffer(VertexFormat format, int vertexCount)

    Allocates a vertex buffer. The backing array is SIMD aligned so it can be uploaded to the GPU without an intermediate copy on ParparVM.

    ###### Parameters

    - `format`: the interleaved vertex layout

    - `vertexCount`: the number of vertices

    ###### Returns

    a new vertex buffer tracked by this device

  - ### createIndexBuffer

    public IndexBuffer createIndexBuffer(int indexCount)

    Allocates an index buffer.

    ###### Parameters

    - `indexCount`: the number of indices

    ###### Returns

    a new index buffer tracked by this device

  - ### createTexture

    public abstract Texture createTexture(Image image)

    Creates a GPU texture from a Codename One image.

    ###### Parameters

    - `image`: the source image

    ###### Returns

    a new texture

  - ### createTexture

    public abstract Texture createTexture(int width, int height, int[] argb)

    Creates a GPU texture from raw ARGB pixel data.

    ###### Parameters

    - `width`: the texture width in pixels

    - `height`: the texture height in pixels

    - `argb`: `width * height` packed ARGB pixels in row major order

    ###### Returns

    a new texture

  - ### clear

    public abstract void clear(int argbColor, boolean color, boolean depth)

    Clears the framebuffer.

    ###### Parameters

    - `argbColor`: the packed ARGB clear color

    - `color`: true to clear the color buffer

    - `depth`: true to clear the depth buffer

  - ### setViewport

    public abstract void setViewport(int x, int y, int width, int height)
    Sets the viewport rectangle in pixels.

  - ### setCamera

    public void setCamera(Camera camera)

    Sets the active camera supplying the view and projection matrices used by subsequent draws.

    ###### Parameters

    - `camera`: the camera

  - ### getCamera

    public Camera getCamera()
    Returns the active camera, or null if none was set.

  - ### setLight

    public void setLight(Light light)

    Sets the active directional light used by lit materials.

    ###### Parameters

    - `light`: the light

  - ### getLight

    public Light getLight()
    Returns the active light.

  - ### draw

    public abstract void draw(Mesh mesh, Material material, float[] modelMatrix)

    Draws a mesh with the supplied material and model matrix. The device composes `camera.getViewProjection() * modelMatrix`, binds the generated shader for the material, applies the material render state and issues the draw call.

    ###### Parameters

    - `mesh`: the geometry to draw

    - `material`: how to shade the geometry

    - `modelMatrix`: the 16 element column-major model transform, or null for the identity

  - ### dispose

    public abstract void dispose(VertexBuffer buffer)
    Releases the GPU resources backing a vertex buffer.

  - ### dispose

    public abstract void dispose(IndexBuffer buffer)
    Releases the GPU resources backing an index buffer.

  - ### dispose

    public abstract void dispose(Texture texture)
    Releases the GPU resources backing a texture.