## Shader.CreateTextureLayer

### Introduced

v4.0

### Description

Creates a new TextureLayer belonging to the container (Shader).
A texture layer is an object which simplifies layering of texture effects on top of shaders and materials. Each layer has a set of properties which describe its characteristics (such as color, mixing mode, weight) to specify how it will affect the shader ports it drives. The order that layers appear under a container indicates the order the layering is applied, similar to the way a "mix N colors" shader node works. Texture layer port objects (see TextureLayer.AddTextureLayerPort) are owned by layers, and are used to specify which shader ports the layer should affect.
Tip: A Material can also be a texture layer container, and has the same set of related methods.

### C# Syntax

    TextureLayer Shader.CreateTextureLayer( String in_name, Boolean in_bAfter, Object in_varRefLayer );

### Scripting Syntax

    Shader.CreateTextureLayer( [Name], [After], [Reference] );

### Parameters

Parameter | Type | Description
--- | --- | ---
Name | String | Name of new TextureLayer Default Value: "Layer"
After | Boolean | True to insert the new texture layer after the reference layer. False to insert it before. If no reference layer, then True will add at the end of the container's list, False will add it at the start. Default Value: True
Reference | TextureLayer or String | Reference texture layer, to indicate where the newly-added layer should be located in the stack. The layer will be inserted adjacent to (before or after) the reference layer. If not specified, then the new layer will be added at the beginning or the end, depending on the value of the following argument.

### Examples

#### 1. JScript Example

    /*

    	This JScript example shows creating texture layers on

    	a shader, plus enumerating and removing them.

    */

    oRoot = ActiveProject.ActiveScene.Root;

    oSph = oRoot.AddGeometry( "Sphere", "MeshSurface" );

    oMat = oSph.AddMaterial( "Phong" );

    oPhong = oMat.Shaders(0);

    // Add a layer at the end (since there are no others the "After"

    // flag is irrelevant).

    oLayers = new Array(3);

    oLayers[0] = oPhong.CreateTextureLayer( "B", true );

    // Add another layer before the other one.

    oLayers[1] = oPhong.CreateTextureLayer( "A", false, oLayers[0] );

    // Create a third layer at the very start.

    oLayers[2] = oPhong.CreateTextureLayer( "base", false );

    Application.LogMessage( "Created " + oPhong.TextureLayers.count + " layers." );

    for ( i = 0; i < oPhong.TextureLayers.Count; i++ )

    {

    	oLayer = oPhong.TextureLayers(i);

    	Application.LogMessage( (i+1) + ": " + oLayer );

    }

    oPhong.RemoveTextureLayer( oLayers[1] );

    oPhong.RemoveTextureLayer( oPhong.FullName + "." + oLayers[2].Name );

    count = oPhong.TextureLayers.Count;

    Application.LogMessage( "Only " + count + " remains after removal." );

    for ( i = 0; i < count; i++ )

    {

    	Application.LogMessage( (i+1) + ": " + oPhong.TextureLayers.Item(i) );

    }

    // This example should log something like:

    //INFO : "Created 3 layers."

    //INFO : "1: sphere.Material.Phong.base"

    //INFO : "2: sphere.Material.Phong.A"

    //INFO : "3: sphere.Material.Phong.B"

    //INFO : "Only 1 remains after removal."

    //INFO : "1: sphere.Material.Phong.B"

#### 2. VBScript Example

    '

    ' This VBScript example shows creating texture layers on

    ' a shader, plus enumerating and removing them.

    '

    set oRoot = ActiveProject.ActiveScene.Root

    set oSph = oRoot.AddGeometry( "Sphere", "MeshSurface" )

    set oMat = oSph.AddMaterial( "Phong" )

    set oPhong = oMat.Shaders(0)

    ' Add a layer at the end (since there are no others the "After"

    ' flag is irrelevant).

    dim oLayers(2)

    set oLayers(0) = oPhong.CreateTextureLayer( "B", True )

    ' Add another layer before the other one.

    set oLayers(1) = oPhong.CreateTextureLayer( "A", False, oLayers(0) )

    ' Create a third layer at the very start.

    set oLayers(2) = oPhong.CreateTextureLayer( "base", False )

    LogMessage "Created " & oPhong.TextureLayers.Count & " layers."

    i = 1

    for each oLayer in oPhong.TextureLayers

    	LogMessage i & ": " & oLayer

    	i = i + 1

    next

    oPhong.RemoveTextureLayer oLayers(1)

    oPhong.RemoveTextureLayer oPhong.FullName & "." & oLayers(2).Name

    count = oPhong.TextureLayers.Count

    LogMessage "Only " & count & " remains after removal."

    for i = 0 to count - 1

    	LogMessage i + 1 & ": " & oPhong.TextureLayers.Item(i)

    next

    ' This example should log something like:

    'INFO : "Created 3 layers."

    'INFO : "1: sphere.Material.Phong.base"

    'INFO : "2: sphere.Material.Phong.A"

    'INFO : "3: sphere.Material.Phong.B"

    'INFO : "Only 1 remains after removal."

    'INFO : "1: sphere.Material.Phong.B"

### See Also

AddTextureLayer Shader.AddSharedTextureLayer Material.CreateTextureLayer Material.AddSharedTextureLayer