BsMaterialParam.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #pragma once
  2. #include "BsCorePrerequisites.h"
  3. #include "BsGpuParam.h"
  4. namespace BansheeEngine
  5. {
  6. /** @addtogroup Material
  7. * @{
  8. */
  9. /**
  10. * A wrapper class that allows you to manage multiple GPU parameters at once.
  11. *
  12. * @see TGpuDataParam
  13. */
  14. template<class T, bool Core>
  15. class BS_CORE_EXPORT TMaterialDataParam
  16. {
  17. public:
  18. TMaterialDataParam(const SPtr<Vector<TGpuDataParam<T, Core>>>& params);
  19. TMaterialDataParam() { }
  20. /** @copydoc TGpuDataParam::set */
  21. void set(const T& value, UINT32 arrayIdx = 0);
  22. /** @copydoc TGpuDataParam::set */
  23. T get(UINT32 arrayIdx = 0);
  24. protected:
  25. SPtr<Vector<TGpuDataParam<T, Core>>> mParams;
  26. };
  27. /** @copydoc TMaterialDataParam */
  28. template<bool Core>
  29. class BS_CORE_EXPORT TMaterialParamStruct
  30. {
  31. public:
  32. TMaterialParamStruct(const SPtr<Vector<TGpuParamStruct<Core>>>& params);
  33. TMaterialParamStruct() { }
  34. /** @copydoc TGpuParamStruct::set */
  35. void set(const void* value, UINT32 sizeBytes, UINT32 arrayIdx = 0);
  36. /** @copydoc TGpuParamStruct::get */
  37. void get(void* value, UINT32 sizeBytes, UINT32 arrayIdx = 0);
  38. /** @copydoc TGpuParamStruct::getElementSize */
  39. UINT32 getElementSize() const;
  40. protected:
  41. SPtr<Vector<TGpuParamStruct<Core>>> mParams;
  42. };
  43. /** @copydoc TMaterialDataParam */
  44. template<bool Core>
  45. class BS_CORE_EXPORT TMaterialParamTexture
  46. {
  47. public:
  48. typedef typename TGpuParamTextureType<Core>::Type TextureType;
  49. TMaterialParamTexture(const SPtr<Vector<TGpuParamTexture<Core>>>& params);
  50. TMaterialParamTexture() { }
  51. /** @copydoc GpuParamTexture::set */
  52. void set(const TextureType& texture);
  53. /** @copydoc GpuParamTexture::get */
  54. TextureType get();
  55. protected:
  56. SPtr<Vector<TGpuParamTexture<Core>>> mParams;
  57. };
  58. /** @copydoc TMaterialDataParam */
  59. template<bool Core>
  60. class BS_CORE_EXPORT TMaterialParamLoadStoreTexture
  61. {
  62. public:
  63. typedef typename TGpuParamTextureType<Core>::Type TextureType;
  64. TMaterialParamLoadStoreTexture(const SPtr<Vector<TGpuParamLoadStoreTexture<Core>>>& params);
  65. TMaterialParamLoadStoreTexture() { }
  66. /** @copydoc GpuParamLoadStoreTexture::set */
  67. void set(const TextureType& texture, const TextureSurface& surface);
  68. /** @copydoc GpuParamLoadStoreTexture::get */
  69. TextureType get();
  70. protected:
  71. SPtr<Vector<TGpuParamLoadStoreTexture<Core>>> mParams;
  72. };
  73. /** @copydoc TMaterialDataParam */
  74. template<bool Core>
  75. class BS_CORE_EXPORT TMaterialParamSampState
  76. {
  77. public:
  78. typedef typename TGpuParamSamplerStateType<Core>::Type SamplerType;
  79. TMaterialParamSampState(const SPtr<Vector<TGpuParamSampState<Core>>>& params);
  80. TMaterialParamSampState() { }
  81. /** @copydoc GpuParamSampState::set */
  82. void set(const SamplerType& sampState);
  83. /** @copydoc GpuParamSampState::get */
  84. SamplerType get();
  85. protected:
  86. SPtr<Vector<TGpuParamSampState<Core>>> mParams;
  87. };
  88. typedef TMaterialDataParam<float, false> MaterialParamFloat;
  89. typedef TMaterialDataParam<Color, false> MaterialParamColor;
  90. typedef TMaterialDataParam<Vector2, false> MaterialParamVec2;
  91. typedef TMaterialDataParam<Vector3, false> MaterialParamVec3;
  92. typedef TMaterialDataParam<Vector4, false> MaterialParamVec4;
  93. typedef TMaterialDataParam<Matrix3, false> MaterialParamMat3;
  94. typedef TMaterialDataParam<Matrix4, false> MaterialParamMat4;
  95. typedef TMaterialDataParam<float, true> MaterialParamFloatCore;
  96. typedef TMaterialDataParam<Color, true> MaterialParamColorCore;
  97. typedef TMaterialDataParam<Vector2, true> MaterialParamVec2Core;
  98. typedef TMaterialDataParam<Vector3, true> MaterialParamVec3Core;
  99. typedef TMaterialDataParam<Vector4, true> MaterialParamVec4Core;
  100. typedef TMaterialDataParam<Matrix3, true> MaterialParamMat3Core;
  101. typedef TMaterialDataParam<Matrix4, true> MaterialParamMat4Core;
  102. typedef TMaterialParamStruct<false> MaterialParamStruct;
  103. typedef TMaterialParamStruct<true> MaterialParamStructCore;
  104. typedef TMaterialParamTexture<false> MaterialParamTexture;
  105. typedef TMaterialParamTexture<true> MaterialParamTextureCore;
  106. typedef TMaterialParamLoadStoreTexture<false> MaterialParamLoadStoreTexture;
  107. typedef TMaterialParamLoadStoreTexture<true> MaterialParamLoadStoreTextureCore;
  108. typedef TMaterialParamSampState<false> MaterialParamSampState;
  109. typedef TMaterialParamSampState<true> MaterialParamSampStateCore;
  110. /** @} */
  111. }