BsGUIMaterialManager.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #include "BsGUIMaterialManager.h"
  2. #include "CmMaterial.h"
  3. #include "CmDebug.h"
  4. #include "BsBuiltinMaterialManager.h"
  5. using namespace CamelotFramework;
  6. namespace BansheeEngine
  7. {
  8. const HMaterial& GUIMaterialManager::requestTextMaterial(const HTexture& texture) const
  9. {
  10. for(auto& matHandle : mTextMaterials)
  11. {
  12. const HMaterial& material = matHandle.handle;
  13. if(material->getTexture("mainTexture") == texture)
  14. {
  15. matHandle.refCount++;
  16. return material;
  17. }
  18. }
  19. mTextMaterials.push_back(GUIMaterial());
  20. GUIMaterial& material = mTextMaterials[mTextMaterials.size() - 1];
  21. material.handle = BuiltinMaterialManager::instance().createSpriteTextMaterial();
  22. material.handle->setTexture("mainTexture", texture);
  23. material.refCount = 1;
  24. return material.handle;
  25. }
  26. const HMaterial& GUIMaterialManager::requestImageMaterial(const HTexture& texture) const
  27. {
  28. for(auto& matHandle : mImageMaterials)
  29. {
  30. const HMaterial& material = matHandle.handle;
  31. if(material->getTexture("mainTexture") == texture)
  32. {
  33. matHandle.refCount++;
  34. return material;
  35. }
  36. }
  37. mImageMaterials.push_back(GUIMaterial());
  38. GUIMaterial& material = mImageMaterials[mImageMaterials.size() - 1];
  39. material.handle = BuiltinMaterialManager::instance().createSpriteImageMaterial();
  40. material.handle->setTexture("mainTexture", texture);
  41. material.refCount = 1;
  42. return material.handle;
  43. }
  44. void GUIMaterialManager::releaseMaterial(const HMaterial& material) const
  45. {
  46. bool released = false;
  47. UINT32 i = 0;
  48. for(auto& matHandle : mTextMaterials)
  49. {
  50. if(matHandle.handle == material)
  51. {
  52. if(--matHandle.refCount == 0)
  53. {
  54. mTextMaterials.erase(mTextMaterials.begin() + i);
  55. released = true;
  56. break;
  57. }
  58. }
  59. i++;
  60. }
  61. i = 0;
  62. for(auto& matHandle : mImageMaterials)
  63. {
  64. if(matHandle.handle == material)
  65. {
  66. if(--matHandle.refCount == 0)
  67. {
  68. mImageMaterials.erase(mImageMaterials.begin() + i);
  69. released = true;
  70. break;
  71. }
  72. }
  73. i++;
  74. }
  75. }
  76. void GUIMaterialManager::forceReleaseAllMaterials()
  77. {
  78. mTextMaterials.clear();
  79. mImageMaterials.clear();
  80. }
  81. }