# engineCreateShader (Cliente)

> Crea un shader a partir de un archivo `.shader` o de su código fuente. El shader compila en segundo plano.

- **Plataforma**: MY Multiplayer (MYMP)
- **Tipo**: Función Lua
- **Lado**: Cliente
- **Categoría**: Materiales y shaders
- **URL**: https://wiki.mymp.gg/es/engineCreateShader

## Sintaxis

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

## Parámetros

| Nombre | Tipo | Descripción |
| --- | --- | --- |
| `source` | `string` | La ruta de un archivo `.shader` del recurso, un archivo de otro recurso como `@recurso/archivo.shader`, o el código del shader, que empieza con `#type`. |
| `name` | `string` | El nombre con el que los materiales lo encuentran. Sin él, es `recurso/archivo`; con código fuente o macros, el nombre termina en un hash. *(por defecto: `nil`)* |
| `macros` | `table` | Tabla de nombre → valor (texto, número o booleano) definida antes de compilar. Los nombres son identificadores y no pueden ser nombres que define el motor. *(por defecto: `nil`)* |

## Retorno

El elemento `shader`, o `false` si el texto no es un archivo `.shader` ni código de shader, o si no se pudo leer de otro recurso.

Cuando la compilación termina, se dispara `onClientAssetLoad` en el shader. Los errores de compilación los lista `engineGetShaderErrors`.

## Ejemplo

```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)
```

### Atención

Dar un nombre que otro shader del mismo recurso ya tiene es un error.

## Ver también

- [engineGetShaderErrors (Cliente)](https://wiki.mymp.gg/es/engineGetShaderErrors.md): Lista los errores de la última compilación de un shader creado con engineCreateShader.
- [engineCreateMaterial (Cliente)](https://wiki.mymp.gg/es/engineCreateMaterial.md): Crea un material: un shader con valores de parámetros, que luego reemplaza o se superpone a los materiales de los modelos.
- [engineGetShaders (Cliente)](https://wiki.mymp.gg/es/engineGetShaders.md): Lista todos los shaders y presets cargados, de los paquetes y de los scripts.
- [onClientAssetLoad (Cliente)](https://wiki.mymp.gg/es/onClientAssetLoad.md): Se dispara una vez cuando un asset que un script empezó a cargar en segundo plano está listo, o ha fallado.
