texturethumbnail.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. /*
  2. ** Command & Conquer Renegade(tm)
  3. ** Copyright 2025 Electronic Arts Inc.
  4. **
  5. ** This program is free software: you can redistribute it and/or modify
  6. ** it under the terms of the GNU General Public License as published by
  7. ** the Free Software Foundation, either version 3 of the License, or
  8. ** (at your option) any later version.
  9. **
  10. ** This program is distributed in the hope that it will be useful,
  11. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. ** GNU General Public License for more details.
  14. **
  15. ** You should have received a copy of the GNU General Public License
  16. ** along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. #ifndef TEXTURETHUMBNAIL_H
  19. #define TEXTURETHUMBNAIL_H
  20. #if defined(_MSC_VER)
  21. #pragma once
  22. #endif
  23. #include "always.h"
  24. #include "wwstring.h"
  25. #include "hashtemplate.h"
  26. #include "dllist.h"
  27. #include "ww3dformat.h"
  28. class ThumbnailManagerClass;
  29. // ----------------------------------------------------------------------------
  30. class ThumbnailClass
  31. {
  32. friend ThumbnailManagerClass;
  33. StringClass Name;
  34. unsigned char* Bitmap;
  35. unsigned Width;
  36. unsigned Height;
  37. unsigned OriginalTextureWidth;
  38. unsigned OriginalTextureHeight;
  39. unsigned OriginalTextureMipLevelCount;
  40. WW3DFormat OriginalTextureFormat;
  41. unsigned long DateTime;
  42. bool Allocated; // if true, destructor will free the memory
  43. ThumbnailManagerClass* Manager;
  44. ThumbnailClass(
  45. ThumbnailManagerClass* manager,
  46. const char* name,
  47. unsigned char* bitmap,
  48. unsigned w,
  49. unsigned h,
  50. unsigned original_w,
  51. unsigned original_h,
  52. unsigned original_mip_level_count,
  53. WW3DFormat original_format,
  54. bool allocated,
  55. unsigned long date_time);
  56. ThumbnailClass(
  57. ThumbnailManagerClass* manager,
  58. const StringClass& filename);
  59. ~ThumbnailClass();
  60. public:
  61. unsigned char* Peek_Bitmap() { return Bitmap; }
  62. WW3DFormat Get_Format() { return WW3D_FORMAT_A4R4G4B4; }
  63. unsigned Get_Width() const { return Width; }
  64. unsigned Get_Height() const { return Height; }
  65. unsigned Get_Original_Texture_Width() const { return OriginalTextureWidth; }
  66. unsigned Get_Original_Texture_Height() const { return OriginalTextureHeight; }
  67. unsigned Get_Original_Texture_Mip_Level_Count() const { return OriginalTextureMipLevelCount; }
  68. WW3DFormat Get_Original_Texture_Format() const { return OriginalTextureFormat; }
  69. unsigned long Get_Date_Time() const { return DateTime; }
  70. const StringClass& Get_Name() const { return Name; }
  71. };
  72. // ----------------------------------------------------------------------------
  73. class ThumbnailManagerClass : public DLNodeClass<ThumbnailManagerClass>
  74. {
  75. friend ThumbnailClass;
  76. bool CreateThumbnailIfNotFound;
  77. bool PerTextureTimeStampUsed;
  78. StringClass ThumbnailFileName;
  79. StringClass MixFileName;
  80. HashTemplateClass<StringClass,ThumbnailClass*> ThumbnailHash;
  81. unsigned char* ThumbnailMemory;
  82. bool Changed;
  83. unsigned long DateTime;
  84. static DLListClass<ThumbnailManagerClass> ThumbnailManagerList;
  85. ThumbnailManagerClass(const char* thumbnail_filename, const char* mix_file_name);
  86. ~ThumbnailManagerClass();
  87. void ThumbnailManagerClass::Remove_From_Hash(ThumbnailClass* thumb);
  88. void ThumbnailManagerClass::Insert_To_Hash(ThumbnailClass* thumb);
  89. ThumbnailClass* ThumbnailManagerClass::Get_From_Hash(const StringClass& name);
  90. void Create_Thumbnails();
  91. static void Update_Thumbnail_File(const char* mix_file_name, bool display_message_box);
  92. void Load();
  93. void Save(bool force=false);
  94. public:
  95. static void Add_Thumbnail_Manager(const char* thumbnail_filename, const char* mix_file_name);
  96. static void Remove_Thumbnail_Manager(const char* thumbnail_filename);
  97. ThumbnailClass* Peek_Thumbnail_Instance(const StringClass& name);
  98. bool Is_Thumbnail_Created_If_Not_Found() const { return CreateThumbnailIfNotFound; }
  99. void Create_Thumbnail_If_Not_Found(bool create) { CreateThumbnailIfNotFound=create; }
  100. bool Is_Per_Texture_Time_Stamp_Used() const { return PerTextureTimeStampUsed; }
  101. void Enable_Per_Texture_Time_Stamp(bool enable) { PerTextureTimeStampUsed=enable; }
  102. static void Pre_Init(bool display_message_box);
  103. static void Init();
  104. static void Deinit();
  105. static DLListClass<ThumbnailManagerClass>& Peek_List() { return ThumbnailManagerList; }
  106. };
  107. // ----------------------------------------------------------------------------
  108. #endif