# engineCreateShader (Cliente)

> Cria um shader a partir de um arquivo `.shader` ou do próprio código-fonte. O shader compila em segundo plano.

- **Plataforma**: MY Multiplayer (MYMP)
- **Tipo**: Função Lua
- **Lado**: Cliente
- **Categoria**: Materiais e shaders
- **URL**: https://wiki.mymp.gg/pt/engineCreateShader

## Sintaxe

```lua
shader|false engineCreateShader(string source [, string name = nil, table macros = nil])
```

## Parâmetros

| Nome | Tipo | Descrição |
| --- | --- | --- |
| `source` | `string` | O caminho de um arquivo `.shader` do recurso, um arquivo de outro recurso como `@recurso/arquivo.shader`, ou o código do shader, que começa com `#type`. |
| `name` | `string` | O nome pelo qual os materiais o encontram. Sem ele, é `recurso/arquivo`; com código-fonte ou macros, o nome termina num hash. *(padrão: `nil`)* |
| `macros` | `table` | Tabela de nome → valor (texto, número ou booleano) definida antes de compilar. Os nomes são identificadores e não podem ser nomes que o motor define. *(padrão: `nil`)* |

## Retorno

O elemento `shader`, ou `false` se o texto não é um arquivo `.shader` nem código de shader, ou se não pôde ser lido de outro recurso.

Quando a compilação termina, `onClientAssetLoad` é disparado no shader. Os erros de compilação ficam em `engineGetShaderErrors`.

## Exemplo

```lua
local shader = engineCreateShader("shaders/glow.shader", nil, { STRENGTH = 2 })

addEventHandler("onClientAssetLoad", shader, function(loaded)
    if not loaded then
        for _, message in ipairs(engineGetShaderErrors(shader)) do
            outputDebugString(message)
        end
    end
end)
```

### Atenção

Dar um nome que outro shader do mesmo recurso já tem é um erro.

## Veja também

- [engineGetShaderErrors (Cliente)](https://wiki.mymp.gg/pt/engineGetShaderErrors.md): Lista os erros da última compilação de um shader criado com engineCreateShader.
- [engineCreateMaterial (Cliente)](https://wiki.mymp.gg/pt/engineCreateMaterial.md): Cria um material: um shader com valores de parâmetros, que depois substitui ou se sobrepõe aos materiais dos modelos.
- [engineGetShaders (Cliente)](https://wiki.mymp.gg/pt/engineGetShaders.md): Lista todos os shaders e presets carregados, dos pacotes e dos scripts.
- [onClientAssetLoad (Cliente)](https://wiki.mymp.gg/pt/onClientAssetLoad.md): Disparado uma vez quando um asset que um script começou a carregar em segundo plano fica pronto, ou falha.
