## Shader.GetShaderInputType

### Introduced

v5.0

### Description

Returns the shader input type for a parameter. If the parameter cannot be connected to a shader, GetShaderInputType returns siUnknownParameterType.

### C# Syntax

    siShaderParameterType Shader.GetShaderInputType( String in_Param );

### Scripting Syntax

    oReturn = Shader.GetShaderInputType( ParameterScriptName );

### Return Value

siShaderParameterType

### Parameters

Parameter | Type | Description
--- | --- | ---
ParameterScriptName | String | Script name of parameter.

### Examples

#### JScript Example

    /*

    	This example shows how to traverse a shader tree and list the

    	available shader inputs and their input types.

    */

    NewScene(null,false);

    // Create an object with a texture shader

    var root = Application.ActiveProject.ActiveScene.Root;

    var model = root.AddModel();

    model.name = "MyModel";

    var object = model.AddGeometry( "Sphere", "MeshSurface" );

    BlendInPresets( "Image", object, 1, false );

    CreateProjection( object, siTxtSpherical, siTxtDefaultSpherical, "TxtSupport", "TxtProjection" );

    var filename = Application.InstallationPath( siFactoryPath ) +

    	"\\Data\\XSI_SAMPLES\\Pictures\\xsilogo.jpg";

    var imageclip = CreateImageClip( filename, "XSILogo" );

    // Set up the texture space on texture shader

    var mat = object.Material;

    var textureshader = object.Material.CurrentTexture;

    // Set the texturespace parameter

    SetInstanceDataValue(null, textureshader+".tspace_id", "TxtProjection");

    textureshader.parameters("tex").Connect(imageclip);

    // Select the texture shader

    SelectObj("MyModel.sphere.Material.Image");

    // Get an object from the selection list

    var obj = selection(0);

    // Object is a shader

    if ( obj.isclassof( siShaderID ) )

    {

    	// Get the material from shader

    	var mat = obj.Root;

    	traverse_shadernode(mat);

    }

    // Expected results:

    // INFO : Sources.Materials.DefaultLib.Material.ambient_blend.base_color is free to be connected to a shader that will match input type siColorParameterType

    // INFO : Sources.Materials.DefaultLib.Material.Image.repeats is free to be connected to a shader that will match input type siVectorParameterType

    // INFO : Sources.Materials.DefaultLib.Material.Image.alt_x is free to be connected to a shader that will match input type siBooleanParameterType

    // INFO : Sources.Materials.DefaultLib.Material.Image.alt_y is free to be connected to a shader that will match input type siBooleanParameterType

    // INFO : Sources.Materials.DefaultLib.Material.Image.alt_z is free to be connected to a shader that will match input type siBooleanParameterType

    // INFO : Sources.Materials.DefaultLib.Material.Image.min is free to be connected to a shader that will match input type siVectorParameterType

    // INFO : Sources.Materials.DefaultLib.Material.Image.max is free to be connected to a shader that will match input type siVectorParameterType

    // etc.

    // Helper functions

    function traverse_shadernode( shadernode )

    {

    	if ( ! shadernode ) { return; }

    	if (! ( shadernode.isclassof( siShaderID ) ||

    		 shadernode.isclassof( siMaterialID ) ||

    		 shadernode.isclassof( siLightID ) ||

    		 shadernode.isclassof( siCameraID )) )

    		{ return; }

    	// Traverse the occupied shader inputs

    	var eParam = new Enumerator(shadernode.parameters);

    	for ( ;!eParam.atEnd(); eParam.moveNext() )

    	{

    		var param = eParam.item();

    		if (param.capabilities & siTexturable)

    		{

    			var nextnode = param.source;

    			// parameter connected to shader node

    			if ( nextnode != null )

    				traverse_shadernode( nextnode );

    			else // parameter free

    			{

    				var inputtype = shadernode.GetShaderInputType(param.scriptname);

    				LogMessage( param.fullname + " is free to be connected to a shader that will match input type "

    					+ ShaderParameterTypeAsText(inputtype));

    			}

    		}

    	}

    }

    function ShaderParameterTypeAsText(type)

    {

    	switch (type)

    	{

    		case siUnknownParameterType : return "siUnknownParameterType";

    		case siBooleanParameterType : return "siBooleanParameterType";

    		case siColorParameterType : return "siColorParameterType";

    		case siDataParameterType : return "siDataParameterType";

    		case siIntegerParameterType : return "siIntegerParameterType";

    		case siLensParameterType : return "siLensParameterType";

    		case siLightParameterType : return "siLightParameterType";

    		case siMaterialParameterType : return "siMaterialParameterType";

    		case siMatrixParameterType : return "siMatrixParameterType";

    		case siModelParameterType : return "siModelParameterType";

    		case siRealTimeParameterType : return "siRealTimeParameterType";

    		case siReferenceParameterType : return "siReferenceParameterType";

    		case siScalarParameterType : return "siScalarParameterType";

    		case siShaderParameterType : return "siShaderParameterType";

    		case siStringParameterType : return "siStringParameterType";

    		case siStructParameterType : return "siStructParameterType";

    		case siTextureParameterType : return "siTextureParameterType";

    		case siTextureSpaceParameterType : return "siTextureSpaceParameterType";

    		case siVectorParameterType : return "siVectorParameterType";

    		default: return type;

    	}

    }

### See Also

Shader.GetShaderParameterTargets Shader.GetShaderParameterType Shader.OutputType Parameter.HasInstanceValue Parameter.SetInstanceValue Parameter.GetInstanceValue Parameter.ScriptName