BsMaterialParam.cpp 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. #include "BsMaterialParam.h"
  2. #include "BsVector2I.h"
  3. #include "BsVectorNI.h"
  4. namespace BansheeEngine
  5. {
  6. template<class T, bool Core>
  7. TMaterialDataParam<T, Core>::TMaterialDataParam(const SPtr<Vector<TGpuDataParam<T, Core>>>& params)
  8. :mParams(params)
  9. { }
  10. template<class T, bool Core>
  11. void TMaterialDataParam<T, Core>::set(const T& value, UINT32 arrayIdx)
  12. {
  13. if (mParams == nullptr)
  14. return;
  15. for (auto& param : *mParams)
  16. param.set(value, arrayIdx);
  17. }
  18. template<class T, bool Core>
  19. T TMaterialDataParam<T, Core>::get(UINT32 arrayIdx)
  20. {
  21. if (mParams == nullptr || mParams->size() == 0)
  22. return T();
  23. return (*mParams)[0].get(arrayIdx); // They should all have the same value
  24. }
  25. template<bool Core>
  26. TMaterialParamStruct<Core>::TMaterialParamStruct(const SPtr<Vector<TGpuParamStruct<Core>>>& params)
  27. :mParams(params)
  28. { }
  29. template<bool Core>
  30. void TMaterialParamStruct<Core>::set(const void* value, UINT32 sizeBytes, UINT32 arrayIdx)
  31. {
  32. if (mParams == nullptr)
  33. return;
  34. for (auto& param : *mParams)
  35. param.set(value, sizeBytes, arrayIdx);
  36. }
  37. template<bool Core>
  38. void TMaterialParamStruct<Core>::get(void* value, UINT32 sizeBytes, UINT32 arrayIdx)
  39. {
  40. if (mParams == nullptr || mParams->size() == 0)
  41. {
  42. value = nullptr;
  43. return;
  44. }
  45. return (*mParams)[0].get(value, sizeBytes, arrayIdx); // They should all have the same value
  46. }
  47. template<bool Core>
  48. UINT32 TMaterialParamStruct<Core>::getElementSize() const
  49. {
  50. if (mParams == nullptr || mParams->size() == 0)
  51. return 0;
  52. return (*mParams)[0].getElementSize();
  53. }
  54. template<bool Core>
  55. TMaterialParamTexture<Core>::TMaterialParamTexture(const SPtr<Vector<TGpuParamTexture<Core>>>& params)
  56. :mParams(params)
  57. { }
  58. template<bool Core>
  59. void TMaterialParamTexture<Core>::set(const TextureType& texture)
  60. {
  61. if (mParams == nullptr)
  62. return;
  63. for (auto& param : *mParams)
  64. param.set(texture);
  65. }
  66. template<bool Core>
  67. typename TMaterialParamTexture<Core>::TextureType TMaterialParamTexture<Core>::get()
  68. {
  69. if (mParams == nullptr || mParams->size() == 0)
  70. return TextureType();
  71. return (*mParams)[0].get(); // They should all have the same value
  72. }
  73. template<bool Core>
  74. TMaterialParamLoadStoreTexture<Core>::TMaterialParamLoadStoreTexture(const SPtr<Vector<TGpuParamLoadStoreTexture<Core>>>& params)
  75. :mParams(params)
  76. { }
  77. template<bool Core>
  78. void TMaterialParamLoadStoreTexture<Core>::set(const TextureType& texture, const TextureSurface& surface)
  79. {
  80. if (mParams == nullptr)
  81. return;
  82. for (auto& param : *mParams)
  83. param.set(texture, surface);
  84. }
  85. template<bool Core>
  86. typename TMaterialParamLoadStoreTexture<Core>::TextureType TMaterialParamLoadStoreTexture<Core>::get()
  87. {
  88. if (mParams == nullptr || mParams->size() == 0)
  89. return TextureType();
  90. return (*mParams)[0].get(); // They should all have the same value
  91. }
  92. template<bool Core>
  93. TMaterialParamSampState<Core>::TMaterialParamSampState(const SPtr<Vector<TGpuParamSampState<Core>>>& params)
  94. :mParams(params)
  95. { }
  96. template<bool Core>
  97. void TMaterialParamSampState<Core>::set(const SamplerType& sampState)
  98. {
  99. if (mParams == nullptr)
  100. return;
  101. for (auto& param : *mParams)
  102. param.set(sampState);
  103. }
  104. template<bool Core>
  105. typename TMaterialParamSampState<Core>::SamplerType TMaterialParamSampState<Core>::get()
  106. {
  107. if (mParams == nullptr || mParams->size() == 0)
  108. return SamplerType();
  109. return (*mParams)[0].get(); // They should all have the same value
  110. }
  111. template class TMaterialDataParam<float, false>;
  112. template class TMaterialDataParam<int, false>;
  113. template class TMaterialDataParam<Color, false>;
  114. template class TMaterialDataParam<Vector2, false>;
  115. template class TMaterialDataParam<Vector3, false>;
  116. template class TMaterialDataParam<Vector4, false>;
  117. template class TMaterialDataParam<Vector2I, false>;
  118. template class TMaterialDataParam<Vector3I, false>;
  119. template class TMaterialDataParam<Vector4I, false>;
  120. template class TMaterialDataParam<Matrix2, false>;
  121. template class TMaterialDataParam<Matrix2x3, false>;
  122. template class TMaterialDataParam<Matrix2x4, false>;
  123. template class TMaterialDataParam<Matrix3, false>;
  124. template class TMaterialDataParam<Matrix3x2, false>;
  125. template class TMaterialDataParam<Matrix3x4, false>;
  126. template class TMaterialDataParam<Matrix4, false>;
  127. template class TMaterialDataParam<Matrix4x2, false>;
  128. template class TMaterialDataParam<Matrix4x3, false>;
  129. template class TMaterialDataParam<float, true>;
  130. template class TMaterialDataParam<int, true>;
  131. template class TMaterialDataParam<Color, true>;
  132. template class TMaterialDataParam<Vector2, true>;
  133. template class TMaterialDataParam<Vector3, true>;
  134. template class TMaterialDataParam<Vector4, true>;
  135. template class TMaterialDataParam<Vector2I, true>;
  136. template class TMaterialDataParam<Vector3I, true>;
  137. template class TMaterialDataParam<Vector4I, true>;
  138. template class TMaterialDataParam<Matrix2, true>;
  139. template class TMaterialDataParam<Matrix2x3, true>;
  140. template class TMaterialDataParam<Matrix2x4, true>;
  141. template class TMaterialDataParam<Matrix3, true>;
  142. template class TMaterialDataParam<Matrix3x2, true>;
  143. template class TMaterialDataParam<Matrix3x4, true>;
  144. template class TMaterialDataParam<Matrix4, true>;
  145. template class TMaterialDataParam<Matrix4x2, true>;
  146. template class TMaterialDataParam<Matrix4x3, true>;
  147. template class TMaterialParamStruct<false>;
  148. template class TMaterialParamStruct<true>;
  149. template class TMaterialParamTexture<false>;
  150. template class TMaterialParamTexture<true>;
  151. template class TMaterialParamLoadStoreTexture<false>;
  152. template class TMaterialParamLoadStoreTexture<true>;
  153. template class TMaterialParamSampState<false>;
  154. template class TMaterialParamSampState<true>;
  155. }