using System;
using System.Runtime.CompilerServices;
namespace BansheeEngine
{
///
/// Type of parameters that can be defined in a shader.
///
public enum ShaderParameterType // Note: Must match C++ ShaderParameterType enum
{
Float, Vector2, Vector3, Vector4, Color,
Matrix3, Matrix4, Texture2D,
Texture3D, TextureCube, Sampler
}
///
/// Contains information about a shader parameter.
///
public struct ShaderParameter
{
///
/// Creates a new shader parameter.
///
/// Name of the parameter.
/// Type of the parameter.
internal ShaderParameter(string name, ShaderParameterType type)
{
this.name = name;
this.type = type;
}
public string name;
public ShaderParameterType type;
}
///
/// Contains definitions of GPU programs used for rendering, as well as a set of global parameters to control those
/// programs.
///
public class Shader : Resource
{
///
/// Constuctor for internal runtime use only.
///
private Shader()
{ }
///
/// Returns data about all parameters available in the shader.
///
public ShaderParameter[] Parameters
{
get
{
string[] names;
ShaderParameterType[] types;
Internal_GetShaderParameters(mCachedPtr, out names, out types);
ShaderParameter[] parameters = new ShaderParameter[names.Length];
for (int i = 0; i < names.Length; i++)
{
parameters[i] = new ShaderParameter(names[i], types[i]);
}
return parameters;
}
}
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_GetShaderParameters(IntPtr nativeInstance, out string[] names, out ShaderParameterType[] types);
}
}