BsMaterialParam.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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, bool Core>
  13. class BS_CORE_EXPORT TMaterialDataParam
  14. {
  15. public:
  16. TMaterialDataParam(const SPtr<Vector<TGpuDataParam<T, Core>>>& params);
  17. TMaterialDataParam() { }
  18. /**
  19. * @copydoc TGpuDataParam::set
  20. */
  21. void set(const T& value, UINT32 arrayIdx = 0);
  22. /**
  23. * @copydoc TGpuDataParam::set
  24. */
  25. T get(UINT32 arrayIdx = 0);
  26. protected:
  27. SPtr<Vector<TGpuDataParam<T, Core>>> mParams;
  28. };
  29. /**
  30. * @copydoc TMaterialDataParam
  31. */
  32. template<bool Core>
  33. class BS_CORE_EXPORT TMaterialParamStruct
  34. {
  35. public:
  36. TMaterialParamStruct(const SPtr<Vector<TGpuParamStruct<Core>>>& params);
  37. TMaterialParamStruct() { }
  38. /**
  39. * @copydoc TGpuParamStruct::set
  40. */
  41. void set(const void* value, UINT32 sizeBytes, UINT32 arrayIdx = 0);
  42. /**
  43. * @copydoc TGpuParamStruct::get
  44. */
  45. void get(void* value, UINT32 sizeBytes, UINT32 arrayIdx = 0);
  46. /**
  47. * @copydoc TGpuParamStruct::getElementSize
  48. */
  49. UINT32 getElementSize() const;
  50. protected:
  51. SPtr<Vector<TGpuParamStruct<Core>>> mParams;
  52. };
  53. /**
  54. * @copydoc TMaterialDataParam
  55. */
  56. template<bool Core>
  57. class BS_CORE_EXPORT TMaterialParamTexture
  58. {
  59. public:
  60. typedef typename TGpuParamTextureType<Core>::Type TextureType;
  61. TMaterialParamTexture(const SPtr<Vector<TGpuParamTexture<Core>>>& params);
  62. TMaterialParamTexture() { }
  63. /**
  64. * @copydoc GpuParamTexture::set
  65. */
  66. void set(const TextureType& texture);
  67. /**
  68. * @copydoc GpuParamTexture::get
  69. */
  70. TextureType get();
  71. protected:
  72. SPtr<Vector<TGpuParamTexture<Core>>> mParams;
  73. };
  74. /**
  75. * @copydoc TMaterialDataParam
  76. */
  77. template<bool Core>
  78. class BS_CORE_EXPORT TMaterialParamLoadStoreTexture
  79. {
  80. public:
  81. typedef typename TGpuParamTextureType<Core>::Type TextureType;
  82. TMaterialParamLoadStoreTexture(const SPtr<Vector<TGpuParamLoadStoreTexture<Core>>>& params);
  83. TMaterialParamLoadStoreTexture() { }
  84. /**
  85. * @copydoc GpuParamLoadStoreTexture::set
  86. */
  87. void set(const TextureType& texture, const TextureSurface& surface);
  88. /**
  89. * @copydoc GpuParamLoadStoreTexture::get
  90. */
  91. TextureType get();
  92. protected:
  93. SPtr<Vector<TGpuParamLoadStoreTexture<Core>>> mParams;
  94. };
  95. /**
  96. * @copydoc TMaterialDataParam
  97. */
  98. template<bool Core>
  99. class BS_CORE_EXPORT TMaterialParamSampState
  100. {
  101. public:
  102. typedef typename TGpuParamSamplerStateType<Core>::Type SamplerType;
  103. TMaterialParamSampState(const SPtr<Vector<TGpuParamSampState<Core>>>& params);
  104. TMaterialParamSampState() { }
  105. /**
  106. * @copydoc GpuParamSampState::set
  107. */
  108. void set(const SamplerType& sampState);
  109. /**
  110. * @copydoc GpuParamSampState::get
  111. */
  112. SamplerType get();
  113. protected:
  114. SPtr<Vector<TGpuParamSampState<Core>>> mParams;
  115. };
  116. typedef TMaterialDataParam<float, false> MaterialParamFloat;
  117. typedef TMaterialDataParam<Color, false> MaterialParamColor;
  118. typedef TMaterialDataParam<Vector2, false> MaterialParamVec2;
  119. typedef TMaterialDataParam<Vector3, false> MaterialParamVec3;
  120. typedef TMaterialDataParam<Vector4, false> MaterialParamVec4;
  121. typedef TMaterialDataParam<Matrix3, false> MaterialParamMat3;
  122. typedef TMaterialDataParam<Matrix4, false> MaterialParamMat4;
  123. typedef TMaterialDataParam<float, true> MaterialParamFloatCore;
  124. typedef TMaterialDataParam<Color, true> MaterialParamColorCore;
  125. typedef TMaterialDataParam<Vector2, true> MaterialParamVec2Core;
  126. typedef TMaterialDataParam<Vector3, true> MaterialParamVec3Core;
  127. typedef TMaterialDataParam<Vector4, true> MaterialParamVec4Core;
  128. typedef TMaterialDataParam<Matrix3, true> MaterialParamMat3Core;
  129. typedef TMaterialDataParam<Matrix4, true> MaterialParamMat4Core;
  130. typedef TMaterialParamStruct<false> MaterialParamStruct;
  131. typedef TMaterialParamStruct<true> MaterialParamStructCore;
  132. typedef TMaterialParamTexture<false> MaterialParamTexture;
  133. typedef TMaterialParamTexture<true> MaterialParamTextureCore;
  134. typedef TMaterialParamLoadStoreTexture<false> MaterialParamLoadStoreTexture;
  135. typedef TMaterialParamLoadStoreTexture<true> MaterialParamLoadStoreTextureCore;
  136. typedef TMaterialParamSampState<false> MaterialParamSampState;
  137. typedef TMaterialParamSampState<true> MaterialParamSampStateCore;
  138. }