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 { /// /// Returns the name of the parameter variable. /// public string Name { get { return name; } } /// /// Returns the data type of the parameter. /// public ShaderParameterType Type { get { return type; } } /// /// Determines is parameter managed internally be the renderer, or is it expected to be set by the user. /// public bool Internal { get { return isInternal; } } private string name; private ShaderParameterType type; private bool isInternal; /// /// Creates a new shader parameter. /// /// Name of the parameter variable. /// Data type of the parameter. /// Determines is parameter managed internally be the renderer, or is expected to be set /// by the user. internal ShaderParameter(string name, ShaderParameterType type, bool isInternal) { this.name = name; this.type = type; this.isInternal = isInternal; } } /// /// 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; bool[] visibility; Internal_GetShaderParameters(mCachedPtr, out names, out types, out visibility); ShaderParameter[] parameters = new ShaderParameter[names.Length]; for (int i = 0; i < names.Length; i++) { parameters[i] = new ShaderParameter(names[i], types[i], visibility[i]); } return parameters; } } [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_GetShaderParameters(IntPtr nativeInstance, out string[] names, out ShaderParameterType[] types, out bool[] visibility); } }