Shader.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using System;
  2. using System.Runtime.CompilerServices;
  3. namespace BansheeEngine
  4. {
  5. /// <summary>
  6. /// Type of parameters that can be defined in a shader.
  7. /// </summary>
  8. public enum ShaderParameterType // Note: Must match C++ ShaderParameterType enum
  9. {
  10. Float, Vector2, Vector3, Vector4, Color,
  11. Matrix3, Matrix4, Texture2D,
  12. Texture3D, TextureCube, Sampler
  13. }
  14. /// <summary>
  15. /// Contains information about a shader parameter.
  16. /// </summary>
  17. public struct ShaderParameter
  18. {
  19. /// <summary>
  20. /// Returns the name of the parameter variable.
  21. /// </summary>
  22. public string Name { get { return name; } }
  23. /// <summary>
  24. /// Returns the data type of the parameter.
  25. /// </summary>
  26. public ShaderParameterType Type { get { return type; } }
  27. /// <summary>
  28. /// Determines is parameter managed internally be the renderer, or is it expected to be set by the user.
  29. /// </summary>
  30. public bool Internal { get { return isInternal; } }
  31. private string name;
  32. private ShaderParameterType type;
  33. private bool isInternal;
  34. /// <summary>
  35. /// Creates a new shader parameter.
  36. /// </summary>
  37. /// <param name="name">Name of the parameter variable.</param>
  38. /// <param name="type">Data type of the parameter.</param>
  39. /// <param name="isInternal">Determines is parameter managed internally be the renderer, or is expected to be set
  40. /// by the user.</param>
  41. internal ShaderParameter(string name, ShaderParameterType type, bool isInternal)
  42. {
  43. this.name = name;
  44. this.type = type;
  45. this.isInternal = isInternal;
  46. }
  47. }
  48. /// <summary>
  49. /// Contains definitions of GPU programs used for rendering, as well as a set of global parameters to control those
  50. /// programs.
  51. /// </summary>
  52. public class Shader : Resource
  53. {
  54. /// <summary>
  55. /// Constuctor for internal runtime use only.
  56. /// </summary>
  57. private Shader()
  58. { }
  59. /// <summary>
  60. /// Returns data about all parameters available in the shader.
  61. /// </summary>
  62. public ShaderParameter[] Parameters
  63. {
  64. get
  65. {
  66. string[] names;
  67. ShaderParameterType[] types;
  68. bool[] visibility;
  69. Internal_GetShaderParameters(mCachedPtr, out names, out types, out visibility);
  70. ShaderParameter[] parameters = new ShaderParameter[names.Length];
  71. for (int i = 0; i < names.Length; i++)
  72. {
  73. parameters[i] = new ShaderParameter(names[i], types[i], visibility[i]);
  74. }
  75. return parameters;
  76. }
  77. }
  78. [MethodImpl(MethodImplOptions.InternalCall)]
  79. private static extern void Internal_GetShaderParameters(IntPtr nativeInstance, out string[] names,
  80. out ShaderParameterType[] types, out bool[] visibility);
  81. }
  82. }