# ShaderMaterial

Class · extends [`Material`](https://api.playcanvas.com/engine/classes/Material.md) · category: Graphics

Source: https://github.com/playcanvas/engine/blob/b5b983982a9860d21e0c1dafb2f85f72e2c01afb/src/scene/materials/shader-material.js#L56

A ShaderMaterial is a type of material that utilizes a specified shader for rendering purposes.

A simple example which creates a material with custom vertex and fragment shaders specified in
GLSL format:

```javascript
const material = new ShaderMaterial({
    uniqueName: 'MyShader',
    attributes: { aPosition: SEMANTIC_POSITION },
    vertexGLSL: `
        attribute vec3 aPosition;
        uniform mat4 matrix_viewProjection;
        void main(void)
        {
            gl_Position = matrix_viewProjection * pos;
        }`,
    fragmentGLSL: `
        void main(void) {
            gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
        }`
});
```

## Constructors

### constructor

```ts
new ShaderMaterial(shaderDesc?: ShaderDesc)
```

Create a new ShaderMaterial instance.

**Parameters**

- `shaderDesc` ([`ShaderDesc`](https://api.playcanvas.com/engine/interfaces/ShaderDesc.md), optional): The description of the shader to be used by the material.

## Accessors

### shaderDesc

```ts
get shaderDesc(): ShaderDesc | undefined
set shaderDesc(value: ShaderDesc | undefined)
```

Gets the shader description.

## Methods

### copy

```ts
copy(source: ShaderMaterial): ShaderMaterial
```

Copy a `ShaderMaterial`.

**Parameters**

- `source` ([`ShaderMaterial`](https://api.playcanvas.com/engine/classes/ShaderMaterial.md)): The material to copy from.

**Returns** [`ShaderMaterial`](https://api.playcanvas.com/engine/classes/ShaderMaterial.md): The destination material.

## Inherited from [Material](https://api.playcanvas.com/engine/classes/Material.md)

- `alphaTest: number = 0`
- `alphaToCoverage: boolean = false`
- `cull: number = CULLFACE_BACK`
- `frontFace: number = FRONTFACE_CCW`
- `name: string = 'Untitled'`
- `stencilBack: StencilParameters | null = null`
- `stencilFront: StencilParameters | null = null`
- `userId: string = ''`
- `get alphaWrite(): boolean` · `set alphaWrite(value: boolean)`
- `get blendState(): Readonly<BlendState>` · `set blendState(value: Readonly<BlendState>)`
- `get blendType(): number` · `set blendType(type: number)`
- `get blueWrite(): boolean` · `set blueWrite(value: boolean)`
- `get depthBias(): number` · `set depthBias(value: number)`
- `get depthFunc(): number` · `set depthFunc(value: number)`
- `get depthState(): DepthState` · `set depthState(value: DepthState)`
- `get depthTest(): boolean` · `set depthTest(value: boolean)`
- `get depthWrite(): boolean` · `set depthWrite(value: boolean)`
- `get flatShading(): boolean` · `set flatShading(value: boolean)`
- `get greenWrite(): boolean` · `set greenWrite(value: boolean)`
- `get redWrite(): boolean` · `set redWrite(value: boolean)`
- `get shaderChunksVersion(): string` · `set shaderChunksVersion(value: string)`
- `get slopeDepthBias(): number` · `set slopeDepthBias(value: number)`
- `clone(): ShaderMaterial`
- `deleteParameter(name: string): void`
- `destroy(): void`
- `getDefine(name: string): boolean`
- `getParameter(name: string): any`
- `getShaderChunks(shaderLanguage?: string): ShaderChunkMap`
- `setDefine(name: string, value: string | boolean | undefined): void`
- `setParameter(name: string, data: number | number[] | ArrayBufferView<ArrayBufferLike> | StorageBuffer | Texture): void`
- `update(): void`
