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); } }