BsMaterialParam.cpp 5.5 KB

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