# Class Material

java.lang.Object
com.codename1.gpu.Material

public final class Material extends Object
A declarative description of how a surface should be shaded. The 3D engine is responsible for translating a material into a platform shader (GLSL on OpenGL ES and WebGL, Metal Shading Language on iOS); applications never write shader source. A material combines a lighting model (`Type`), a base color, an optional texture and pipeline `RenderState`.

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static enum`
  `Material.Type`
  The built in lighting model used to shade a surface.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `Material()`
  Creates an unlit white material.
  `Material(Material.Type type)`
  Creates a material of the supplied type.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `int`
  `getColor()`
  Returns the base color as a packed ARGB integer.
  `RenderState`
  `getRenderState()`
  Returns the pipeline render state.
  `String`
  `getShaderKey()`
  Returns a stable string identifying the shader variant required by this material.
  `float`
  `getShininess()`
  Returns the Phong specular exponent.
  `Texture`
  `getTexture()`
  Returns the diffuse texture, or null when the material is untextured.
  `Material.Type`
  `getType()`
  Returns the lighting model.
  `Material`
  `setColor(int argb)`
  Sets the base color as a packed ARGB integer (0xAARRGGBB).
  `Material`
  `setRenderState(RenderState renderState)`
  Sets the pipeline render state.
  `Material`
  `setShininess(float shininess)`
  Sets the Phong specular exponent (used only by `Type.PHONG`).
  `Material`
  `setTexture(Texture texture)`
  Sets the diffuse texture.
  `Material`
  `setType(Material.Type type)`
  Sets the lighting model.

  ### Methods inherited from class Object

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

- ## Constructor Details

  - ### Material

    public Material()
    Creates an unlit white material.

  - ### Material

    public Material(Material.Type type)

    Creates a material of the supplied type.

    ###### Parameters

    - `type`: the lighting model

- ## Method Details

  - ### getType

    public Material.Type getType()
    Returns the lighting model.

  - ### setType

    public Material setType(Material.Type type)

    Sets the lighting model.

    ###### Parameters

    - `type`: the lighting model

    ###### Returns

    this material for chaining

  - ### getColor

    public int getColor()
    Returns the base color as a packed ARGB integer.

  - ### setColor

    public Material setColor(int argb)

    Sets the base color as a packed ARGB integer (0xAARRGGBB).

    ###### Parameters

    - `argb`: the packed ARGB color

    ###### Returns

    this material for chaining

  - ### getTexture

    public Texture getTexture()
    Returns the diffuse texture, or null when the material is untextured.

  - ### setTexture

    public Material setTexture(Texture texture)

    Sets the diffuse texture. Pass null for an untextured material.

    ###### Parameters

    - `texture`: the diffuse texture or null

    ###### Returns

    this material for chaining

  - ### getShininess

    public float getShininess()
    Returns the Phong specular exponent.

  - ### setShininess

    public Material setShininess(float shininess)

    Sets the Phong specular exponent (used only by `Type.PHONG`).

    ###### Parameters

    - `shininess`: the specular exponent

    ###### Returns

    this material for chaining

  - ### getRenderState

    public RenderState getRenderState()
    Returns the pipeline render state.

  - ### setRenderState

    public Material setRenderState(RenderState renderState)

    Sets the pipeline render state.

    ###### Parameters

    - `renderState`: the render state

    ###### Returns

    this material for chaining

  - ### getShaderKey

    public String getShaderKey()

    Returns a stable string identifying the shader variant required by this material. Backends use it together with the mesh `VertexFormat` to cache generated and compiled shader programs. The key intentionally depends only on properties that change the generated source, not on values such as the color which are passed as uniforms.

    ###### Returns

    a shader variant cache key