PassLevelKey.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #ifndef ANKI_RESOURCE_PASS_LEVEL_KEY_H
  2. #define ANKI_RESOURCE_PASS_LEVEL_KEY_H
  3. #include "anki/util/StdTypes.h"
  4. #include <unordered_map>
  5. #include <cstdlib>
  6. namespace anki {
  7. /// A key that consistst of the rendering pass and the level of detail
  8. struct PassLevelKey
  9. {
  10. U8 pass = 0;
  11. U8 level = 0;
  12. PassLevelKey()
  13. {}
  14. PassLevelKey(const PassLevelKey& b)
  15. : pass(b.pass), level(b.level)
  16. {}
  17. explicit PassLevelKey(const U8 pass_, const U8 level_)
  18. : pass(pass_), level(level_)
  19. {}
  20. };
  21. /// Create hash functor
  22. struct PassLevelKeyCreateHash
  23. {
  24. size_t operator()(const PassLevelKey& b) const
  25. {
  26. return ((U32)b.pass << 16) | (U32)b.level;
  27. }
  28. };
  29. /// Values comparisons functor
  30. struct PassLevelKeyComparision
  31. {
  32. Bool operator()(const PassLevelKey& a,
  33. const PassLevelKey& b) const
  34. {
  35. return a.pass == b.pass && a.level == b.level;
  36. }
  37. };
  38. /// Define an unorderer map with key the PassLevelKey and type given by a
  39. /// template parameter
  40. template<typename T>
  41. using PassLevelHashMap = std::unordered_map<
  42. PassLevelKey, T, PassLevelKeyCreateHash, PassLevelKeyComparision>;
  43. } // end namespace anki
  44. #endif