2
0

BsMaterialParam.cpp 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  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 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 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 Vector<TGpuParamTexture<Core>>& params)
  52. :mParams(params)
  53. { }
  54. template<bool Core>
  55. void TMaterialParamTexture<Core>::set(const TextureType& texture)
  56. {
  57. for (auto& param : mParams)
  58. param.set(texture);
  59. }
  60. template<bool Core>
  61. typename TMaterialParamTexture<Core>::TextureType TMaterialParamTexture<Core>::get()
  62. {
  63. if (mParams.size() == 0)
  64. return TextureType();
  65. return mParams[0].get(); // They should all have the same value
  66. }
  67. template<bool Core>
  68. TMaterialParamLoadStoreTexture<Core>::TMaterialParamLoadStoreTexture(const Vector<TGpuParamLoadStoreTexture<Core>>& params)
  69. :mParams(params)
  70. { }
  71. template<bool Core>
  72. void TMaterialParamLoadStoreTexture<Core>::set(const TextureType& texture, const TextureSurface& surface)
  73. {
  74. for (auto& param : mParams)
  75. param.set(texture, surface);
  76. }
  77. template<bool Core>
  78. typename TMaterialParamLoadStoreTexture<Core>::TextureType TMaterialParamLoadStoreTexture<Core>::get()
  79. {
  80. if (mParams.size() == 0)
  81. return TextureType();
  82. return mParams[0].get(); // They should all have the same value
  83. }
  84. template<bool Core>
  85. TMaterialParamSampState<Core>::TMaterialParamSampState(const Vector<TGpuParamSampState<Core>>& params)
  86. :mParams(params)
  87. { }
  88. template<bool Core>
  89. void TMaterialParamSampState<Core>::set(const SamplerType& sampState)
  90. {
  91. for (auto& param : mParams)
  92. param.set(sampState);
  93. }
  94. template<bool Core>
  95. typename TMaterialParamSampState<Core>::SamplerType TMaterialParamSampState<Core>::get()
  96. {
  97. if (mParams.size() == 0)
  98. return SamplerType();
  99. return mParams[0].get(); // They should all have the same value
  100. }
  101. template class TMaterialDataParam<float, false>;
  102. template class TMaterialDataParam<int, false>;
  103. template class TMaterialDataParam<Color, false>;
  104. template class TMaterialDataParam<Vector2, false>;
  105. template class TMaterialDataParam<Vector3, false>;
  106. template class TMaterialDataParam<Vector4, false>;
  107. template class TMaterialDataParam<Vector2I, false>;
  108. template class TMaterialDataParam<Vector3I, false>;
  109. template class TMaterialDataParam<Vector4I, false>;
  110. template class TMaterialDataParam<Matrix2, false>;
  111. template class TMaterialDataParam<Matrix2x3, false>;
  112. template class TMaterialDataParam<Matrix2x4, false>;
  113. template class TMaterialDataParam<Matrix3, false>;
  114. template class TMaterialDataParam<Matrix3x2, false>;
  115. template class TMaterialDataParam<Matrix3x4, false>;
  116. template class TMaterialDataParam<Matrix4, false>;
  117. template class TMaterialDataParam<Matrix4x2, false>;
  118. template class TMaterialDataParam<Matrix4x3, false>;
  119. template class TMaterialDataParam<float, true>;
  120. template class TMaterialDataParam<int, true>;
  121. template class TMaterialDataParam<Color, true>;
  122. template class TMaterialDataParam<Vector2, true>;
  123. template class TMaterialDataParam<Vector3, true>;
  124. template class TMaterialDataParam<Vector4, true>;
  125. template class TMaterialDataParam<Vector2I, true>;
  126. template class TMaterialDataParam<Vector3I, true>;
  127. template class TMaterialDataParam<Vector4I, true>;
  128. template class TMaterialDataParam<Matrix2, true>;
  129. template class TMaterialDataParam<Matrix2x3, true>;
  130. template class TMaterialDataParam<Matrix2x4, true>;
  131. template class TMaterialDataParam<Matrix3, true>;
  132. template class TMaterialDataParam<Matrix3x2, true>;
  133. template class TMaterialDataParam<Matrix3x4, true>;
  134. template class TMaterialDataParam<Matrix4, true>;
  135. template class TMaterialDataParam<Matrix4x2, true>;
  136. template class TMaterialDataParam<Matrix4x3, true>;
  137. template class TMaterialParamStruct<false>;
  138. template class TMaterialParamStruct<true>;
  139. template class TMaterialParamTexture<false>;
  140. template class TMaterialParamTexture<true>;
  141. template class TMaterialParamLoadStoreTexture<false>;
  142. template class TMaterialParamLoadStoreTexture<true>;
  143. template class TMaterialParamSampState<false>;
  144. template class TMaterialParamSampState<true>;
  145. }