---
title: "Program | JavaScript maps SDK"
description: "Documentation for MapTiler SDK"
---

> For AI agents: a documentation index is available at [/llms.txt](https://docs.maptiler.com/llms.txt). Markdown versions of all pages are available by appending .md to any URL.

# Class Program<Us>

#### Type Parameters

-   Us extends [UniformBindings](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.UniformBindings/)

##### Index

### Constructors[](#constructors)

[constructor](#constructor)

### Properties[](#properties)

[attributes](#attributes) [binderUniforms](#binderuniforms) [failedToCreate](#failedtocreate) [fixedUniforms](#fixeduniforms) [numAttributes](#numattributes) [program](#program) [projectionUniforms](#projectionuniforms) [terrainUniforms](#terrainuniforms)

### Methods[](#methods)

[draw](#draw)

## Constructors[](#constructors-1)

### constructor[](#constructor)

-   new Program<[Us](#constructorprogramus) extends [UniformBindings](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.UniformBindings/)\>(  
        context: [Context](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.Context/),  
        source: [PreparedShader](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.PreparedShader/),  
        configuration: [ProgramConfiguration](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.ProgramConfiguration/),  
        fixedUniforms: (b: [Context](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.Context/), a: [UniformLocations](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.UniformLocations/)) \=> [Us](#us),  
        showOverdrawInspector: boolean,  
        hasTerrain: boolean,  
        projectionPrelude: [PreparedShader](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.PreparedShader/),  
        projectionDefine: string,  
        extraDefines?: string\[\],  
    ): Program<[Us](#us)\>[](#constructorprogram)
    
    #### Type Parameters
    
    -   Us extends [UniformBindings](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.UniformBindings/)
    
    #### Parameters
    
    -   context: [Context](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.Context/)
    -   source: [PreparedShader](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.PreparedShader/)
    -   configuration: [ProgramConfiguration](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.ProgramConfiguration/)
    -   fixedUniforms: (b: [Context](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.Context/), a: [UniformLocations](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.UniformLocations/)) \=> [Us](#us)
    -   showOverdrawInspector: boolean
    -   hasTerrain: boolean
    -   projectionPrelude: [PreparedShader](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.PreparedShader/)
    -   projectionDefine: string
    -   `Optional`extraDefines: string\[\]
    
    #### Returns Program<[Us](#us)\>
    

## Properties[](#properties-1)

### attributes[](#attributes)

attributes: { \[\_: string\]: number }

### binderUniforms[](#binderuniforms)

binderUniforms: [BinderUniform](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.BinderUniform/)\[\]

### failedToCreate[](#failedtocreate)

failedToCreate: boolean

### fixedUniforms[](#fixeduniforms)

fixedUniforms: [Us](#us)

### numAttributes[](#numattributes)

numAttributes: number

### program[](#program)

program: [WebGLProgram](https://docs.maptiler.com/sdk-js/api-reference/interfaces/Externals.WebGLProgram/)

### projectionUniforms[](#projectionuniforms)

projectionUniforms: [ProjectionPreludeUniformsType](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.ProjectionPreludeUniformsType/)

### terrainUniforms[](#terrainuniforms)

terrainUniforms: [TerrainPreludeUniformsType](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.TerrainPreludeUniformsType/)

## Methods[](#methods-1)

### draw[](#draw)

-   draw(  
        context: [Context](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.Context/),  
        drawMode: [DrawMode](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.DrawMode/),  
        depthMode: [Readonly](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.Readonly/)<[DepthMode](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.DepthMode/)\>,  
        stencilMode: [Readonly](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.Readonly/)<[StencilMode](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.StencilMode/)\>,  
        colorMode: [Readonly](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.Readonly/)<[ColorMode](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.ColorMode/)\>,  
        cullFaceMode: [Readonly](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.Readonly/)<[CullFaceMode](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.CullFaceMode/)\>,  
        uniformValues: [UniformValues](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.UniformValues/)<[Us](#us)\>,  
        terrain: [TerrainData](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.TerrainData/),  
        projectionData: [ProjectionData](https://docs.maptiler.com/sdk-js/api-reference/types/ProjectionData/),  
        layerID: string,  
        layoutVertexBuffer: [VertexBuffer](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.VertexBuffer/),  
        indexBuffer: [IndexBuffer](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.IndexBuffer/),  
        segments: [SegmentVector](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.SegmentVector/),  
        currentProperties?: any,  
        zoom?: number | null,  
        configuration?: [ProgramConfiguration](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.ProgramConfiguration/) | null,  
        dynamicLayoutBuffer?: [VertexBuffer](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.VertexBuffer/) | null,  
        dynamicLayoutBuffer2?: [VertexBuffer](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.VertexBuffer/) | null,  
        dynamicLayoutBuffer3?: [VertexBuffer](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.VertexBuffer/) | null,  
    ): void[](#draw-1)
    
    #### Parameters
    
    -   context: [Context](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.Context/)
    -   drawMode: [DrawMode](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.DrawMode/)
    -   depthMode: [Readonly](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.Readonly/)<[DepthMode](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.DepthMode/)\>
    -   stencilMode: [Readonly](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.Readonly/)<[StencilMode](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.StencilMode/)\>
    -   colorMode: [Readonly](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.Readonly/)<[ColorMode](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.ColorMode/)\>
    -   cullFaceMode: [Readonly](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.Readonly/)<[CullFaceMode](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.CullFaceMode/)\>
    -   uniformValues: [UniformValues](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.UniformValues/)<[Us](#us)\>
    -   terrain: [TerrainData](https://docs.maptiler.com/sdk-js/api-reference/types/Externals.TerrainData/)
    -   projectionData: [ProjectionData](https://docs.maptiler.com/sdk-js/api-reference/types/ProjectionData/)
    -   layerID: string
    -   layoutVertexBuffer: [VertexBuffer](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.VertexBuffer/)
    -   indexBuffer: [IndexBuffer](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.IndexBuffer/)
    -   segments: [SegmentVector](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.SegmentVector/)
    -   `Optional`currentProperties: any
    -   `Optional`zoom: number | null
    -   `Optional`configuration: [ProgramConfiguration](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.ProgramConfiguration/) | null
    -   `Optional`dynamicLayoutBuffer: [VertexBuffer](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.VertexBuffer/) | null
    -   `Optional`dynamicLayoutBuffer2: [VertexBuffer](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.VertexBuffer/) | null
    -   `Optional`dynamicLayoutBuffer3: [VertexBuffer](https://docs.maptiler.com/sdk-js/api-reference/classes/Externals.VertexBuffer/) | null
    
    #### Returns void
