BsMaterialParam.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. #pragma once
  2. #include "BsCorePrerequisites.h"
  3. #include "BsGpuParam.h"
  4. namespace BansheeEngine
  5. {
  6. /**
  7. * @brief A wrapper class that allows you to manage multiple GPU parameters
  8. * at once.
  9. *
  10. * @see TGpuDataParam
  11. */
  12. template<class T>
  13. class BS_CORE_EXPORT TMaterialDataParam
  14. {
  15. public:
  16. TMaterialDataParam() { }
  17. /**
  18. * @copydoc TGpuDataParam::set
  19. */
  20. void set(const T& value, UINT32 arrayIdx = 0)
  21. {
  22. for (auto& param : mParams)
  23. param.set(value, arrayIdx);
  24. }
  25. /**
  26. * @copydoc TGpuDataParam::set
  27. */
  28. T get(UINT32 arrayIdx = 0)
  29. {
  30. if (mParams.size() == 0)
  31. return T();
  32. return mParams[0].get(arrayIdx); // They should all have the same value
  33. }
  34. private:
  35. friend class Material;
  36. TMaterialDataParam(const Vector<TGpuDataParam<T>>& params)
  37. :mParams(params)
  38. { }
  39. protected:
  40. Vector<TGpuDataParam<T>> mParams;
  41. };
  42. typedef TMaterialDataParam<float> MaterialParamFloat;
  43. typedef TMaterialDataParam<Color> MaterialParamColor;
  44. typedef TMaterialDataParam<Vector2> MaterialParamVec2;
  45. typedef TMaterialDataParam<Vector3> MaterialParamVec3;
  46. typedef TMaterialDataParam<Vector4> MaterialParamVec4;
  47. typedef TMaterialDataParam<Matrix3> MaterialParamMat3;
  48. typedef TMaterialDataParam<Matrix4> MaterialParamMat4;
  49. /**
  50. * @copydoc TMaterialDataParam
  51. */
  52. class BS_CORE_EXPORT MaterialParamStruct
  53. {
  54. public:
  55. MaterialParamStruct() { }
  56. /**
  57. * @copydoc GpuParamStruct::set
  58. */
  59. void set(const void* value, UINT32 sizeBytes, UINT32 arrayIdx = 0);
  60. /**
  61. * @copydoc GpuParamStruct::get
  62. */
  63. void get(void* value, UINT32 sizeBytes, UINT32 arrayIdx = 0);
  64. /**
  65. * @copydoc GpuParamStruct::getElementSize
  66. */
  67. UINT32 getElementSize() const;
  68. private:
  69. friend class Material;
  70. MaterialParamStruct(const Vector<GpuParamStruct>& params);
  71. protected:
  72. Vector<GpuParamStruct> mParams;
  73. };
  74. /**
  75. * @copydoc TMaterialDataParam
  76. */
  77. class BS_CORE_EXPORT MaterialParamTexture
  78. {
  79. public:
  80. MaterialParamTexture() { }
  81. /**
  82. * @copydoc GpuParamTexture::set
  83. */
  84. void set(const HTexture& texture);
  85. /**
  86. * @copydoc GpuParamTexture::get
  87. */
  88. HTexture get();
  89. private:
  90. friend class Material;
  91. MaterialParamTexture(const Vector<GpuParamTexture>& params);
  92. protected:
  93. Vector<GpuParamTexture> mParams;
  94. };
  95. /**
  96. * @copydoc TMaterialDataParam
  97. */
  98. class BS_CORE_EXPORT MaterialParamLoadStoreTexture
  99. {
  100. public:
  101. MaterialParamLoadStoreTexture() { }
  102. /**
  103. * @copydoc GpuParamLoadStoreTexture::set
  104. */
  105. void set(const HTexture& texture, const TextureSurface& surface);
  106. /**
  107. * @copydoc GpuParamLoadStoreTexture::get
  108. */
  109. HTexture get();
  110. private:
  111. friend class Material;
  112. MaterialParamLoadStoreTexture(const Vector<GpuParamLoadStoreTexture>& params);
  113. protected:
  114. Vector<GpuParamLoadStoreTexture> mParams;
  115. };
  116. /**
  117. * @copydoc TMaterialDataParam
  118. */
  119. class BS_CORE_EXPORT MaterialParamSampState
  120. {
  121. public:
  122. MaterialParamSampState() { }
  123. /**
  124. * @copydoc GpuParamSampState::set
  125. */
  126. void set(const HSamplerState& sampState);
  127. /**
  128. * @copydoc GpuParamSampState::get
  129. */
  130. HSamplerState get();
  131. private:
  132. friend class Material;
  133. MaterialParamSampState(const Vector<GpuParamSampState>& params);
  134. protected:
  135. Vector<GpuParamSampState> mParams;
  136. };
  137. }