# llSetLinkTexture

*LSL function*

```lsl
void llSetLinkTexture(integer link, string texture, integer face);
```

- `integer link`: Link number (1 for root, >1 for children) or a LINK_* flag.
- `string texture`: Name of a texture in the prim's inventory, or a UUID.
- `integer face`: Face number or ALL_SIDES.

- Delay: 0.2 s
- Energy: 10

If a prim exists in the link set at **link**, set [Blinn-Phong](https://wiki.secondlife.com/wiki/PBR_Materials#nomenclature-changes) diffuse **texture** on **face** of that prim.

```lsl title="How to use" frame="terminal"
llSetLinkTexture(0, "", 0);
```

## Examples

<details open>
<summary>Cover a link set in the texture "bark" (from the library)</summary>

```lsl
default
{
    touch_start(integer detected)
    {
        llSetLinkTexture(LINK_SET, "66bf4030-04f9-a808-43ab-b48b6aeb6456", ALL_SIDES);
    }
}
```

</details>

## Helper functions

### SetLinkTextureFast

This function doesn't have the 0.2 second delay. It's not very fast anyway though, but faster than **`llSetLinkTexture`**.

```lsl
SetLinkTextureFast(integer link, string texture, integer face)
{
    // Obtain the current texture parameters and replace the texture only.
    // If we are going to apply the texture to ALL_SIDES, we need
    // to adjust the returned parameters in a loop, so that each face
    // keeps its current repeats, offsets and rotation.
    list Params = llGetLinkPrimitiveParams(link, [PRIM_TEXTURE, face]);
    integer idx;
    face *= face > 0; // Make it zero if it was ALL_SIDES
    // This part is tricky. The list returned by llGLPP has a 4 element stride
    // (texture, repeats, offsets, angle). But as we modify it, we add two
    // elements to each, so the completed part of the list has 6 elements per
    // stride.
    integer NumSides = llGetListLength(Params) / 4; // At this point, 4 elements per stride
    for (idx = 0; idx < NumSides; ++idx)
    {
        // The part we've completed has 6 elements per stride, thus the *6.
        Params = llListReplaceList(Params, [PRIM_TEXTURE, face++, texture], idx*6, idx*6);
    }
    llSetLinkPrimitiveParamsFast(link, Params);
}
```

## History

- Date of release [21-02-2007](https://wiki.secondlife.com/wiki/Release_Notes/Second_Life_Release/1.13#release-notes-for-second-life-1-13-4-281-29-february-21-2c-2007)

## Known issues

From the issue templates included by the wiki article:

- SVC-1500 (bug): llSetLinkTexture fails and reports an error on textures created by someone else without full permissions
- SVC-3199 (bug): &lt;code>llSetLinkTexture(LINK_THIS, foo, bar)&lt;/code> does not work for non-full-perm textures.
- SVC-914 (bug): CHANGED_TEXTURE is not triggered when texture is changed via script

## See also

### Functions

- [llSetLinkAlpha](/functions/llSetLinkAlpha/)
- [llSetLinkColor](/functions/llSetLinkColor/)

### Articles

- [Internal Textures](https://wiki.secondlife.com/wiki/Internal_Textures)

---

*Source: [LlSetLinkTexture](https://wiki.secondlife.com/wiki/LlSetLinkTexture) on the Second Life Wiki. Content from the Second Life Wiki articles LlSetLinkTexture (revision 1215658, 2023-11-30), Template:Issues/SVC-1500 (revision 725812, 2010-02-10), Template:Issues/SVC-3199 (revision 725762, 2010-02-10), Template:Issues/SVC-914 (revision 1180639, 2013-08-09), Template:LSL Function/inventory (revision 1191151, 2014-06-07) and Template:LSL Function/link-face (revision 1186827, 2014-01-12), CC BY-SA 3.0.*

---

From lsl.dev: https://lsl.dev/functions/llSetLinkTexture/
