Shader.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. /// Creates a new shader parameter.
  21. /// </summary>
  22. /// <param name="name">Name of the parameter.</param>
  23. /// <param name="type">Type of the parameter.</param>
  24. internal ShaderParameter(string name, ShaderParameterType type)
  25. {
  26. this.name = name;
  27. this.type = type;
  28. }
  29. public string name;
  30. public ShaderParameterType type;
  31. }
  32. /// <summary>
  33. /// Contains definitions of GPU programs used for rendering, as well as a set of global parameters to control those
  34. /// programs.
  35. /// </summary>
  36. public class Shader : Resource
  37. {
  38. /// <summary>
  39. /// Constuctor for internal runtime use only.
  40. /// </summary>
  41. private Shader()
  42. { }
  43. /// <summary>
  44. /// Returns data about all parameters available in the shader.
  45. /// </summary>
  46. public ShaderParameter[] Parameters
  47. {
  48. get
  49. {
  50. string[] names;
  51. ShaderParameterType[] types;
  52. Internal_GetShaderParameters(mCachedPtr, out names, out types);
  53. ShaderParameter[] parameters = new ShaderParameter[names.Length];
  54. for (int i = 0; i < names.Length; i++)
  55. {
  56. parameters[i] = new ShaderParameter(names[i], types[i]);
  57. }
  58. return parameters;
  59. }
  60. }
  61. [MethodImpl(MethodImplOptions.InternalCall)]
  62. private static extern void Internal_GetShaderParameters(IntPtr nativeInstance, out string[] names, out ShaderParameterType[] types);
  63. }
  64. }