Richard Boegli's CnC_Generals_Zero_Hour Fork WIP
This is documentation of Richard Boegil's Zero Hour Fork
 
Loading...
Searching...
No Matches
texturethumbnail.h
Go to the documentation of this file.
1/*
2** Command & Conquer Generals Zero Hour(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
19// 08/07/02 KM Texture class redesign (revisited)
20#ifndef TEXTURETHUMBNAIL_H
21#define TEXTURETHUMBNAIL_H
22
23#if defined(_MSC_VER)
24#pragma once
25#endif
26
27#include "always.h"
28#include "wwstring.h"
29#include "hashtemplate.h"
30#include "dllist.h"
31#include "ww3dformat.h"
32
33#define GLOBAL_THUMBNAIL_MANAGER_FILENAME "global.th6"
34
36
37// ----------------------------------------------------------------------------
38
39class ThumbnailClass
40{
41 friend ThumbnailManagerClass;
42
43 StringClass Name;
44 unsigned char* Bitmap;
45 unsigned Width;
46 unsigned Height;
47 unsigned OriginalTextureWidth;
48 unsigned OriginalTextureHeight;
49 unsigned OriginalTextureMipLevelCount;
50 WW3DFormat OriginalTextureFormat;
51 unsigned long DateTime;
52 bool Allocated; // if true, destructor will free the memory
53 ThumbnailManagerClass* Manager;
54
55 ThumbnailClass(
56 ThumbnailManagerClass* manager,
57 const char* name,
58 unsigned char* bitmap,
59 unsigned w,
60 unsigned h,
61 unsigned original_w,
62 unsigned original_h,
63 unsigned original_mip_level_count,
64 WW3DFormat original_format,
65 bool allocated,
66 unsigned long date_time);
67 ThumbnailClass(
68 ThumbnailManagerClass* manager,
69 const StringClass& filename);
70 ~ThumbnailClass();
71public:
72
73 unsigned char* Peek_Bitmap() { return Bitmap; }
75 unsigned Get_Width() const { return Width; }
76 unsigned Get_Height() const { return Height; }
77 unsigned Get_Original_Texture_Width() const { return OriginalTextureWidth; }
78 unsigned Get_Original_Texture_Height() const { return OriginalTextureHeight; }
79 unsigned Get_Original_Texture_Mip_Level_Count() const { return OriginalTextureMipLevelCount; }
80 WW3DFormat Get_Original_Texture_Format() const { return OriginalTextureFormat; }
81 unsigned long Get_Date_Time() const { return DateTime; }
82 const StringClass& Get_Name() const { return Name; }
83
84};
85
86// ----------------------------------------------------------------------------
87
88class ThumbnailManagerClass : public DLNodeClass<ThumbnailManagerClass>
89{
90 W3DMPO_GLUE(ThumbnailManagerClass);
91
92 friend ThumbnailClass;
93
94 static bool CreateThumbnailIfNotFound;
95 bool PerTextureTimeStampUsed;
96 StringClass ThumbnailFileName;
97 StringClass MixFileName;
99 unsigned char* ThumbnailMemory;
100 bool Changed;
101 unsigned long DateTime;
102
103 ThumbnailManagerClass(const char* thumbnail_filename, const char* mix_file_name);
104 ~ThumbnailManagerClass();
105
106 void ThumbnailManagerClass::Remove_From_Hash(ThumbnailClass* thumb);
107 void ThumbnailManagerClass::Insert_To_Hash(ThumbnailClass* thumb);
108 ThumbnailClass* ThumbnailManagerClass::Get_From_Hash(const StringClass& name);
109
110 void Create_Thumbnails();
111 static void Update_Thumbnail_File(const char* mix_file_name, bool display_message_box);
112
113 void Load();
114 void Save(bool force=false);
115public:
116 ThumbnailClass* Peek_Thumbnail_Instance(const StringClass& name);
117
118 static void Add_Thumbnail_Manager(const char* thumbnail_filename, const char* mix_file_name);
119 static void Remove_Thumbnail_Manager(const char* thumbnail_filename);
120 static ThumbnailManagerClass* Peek_Thumbnail_Manager(const char* thumbnail_filename);
121
122 static ThumbnailClass* Peek_Thumbnail_Instance_From_Any_Manager(const StringClass& name);
123
124 static bool Is_Thumbnail_Created_If_Not_Found() { return CreateThumbnailIfNotFound; }
125 static void Create_Thumbnail_If_Not_Found(bool create) { CreateThumbnailIfNotFound=create; }
126
127 bool Is_Per_Texture_Time_Stamp_Used() const { return PerTextureTimeStampUsed; }
128 void Enable_Per_Texture_Time_Stamp(bool enable) { PerTextureTimeStampUsed=enable; }
129
130 static void Pre_Init(bool display_message_box);
131 static void Init();
132 static void Deinit();
133};
134
135// ----------------------------------------------------------------------------
136
137#endif
#define W3DMPO_GLUE(ARGCLASS)
Definition always.h:120
WW3DFormat Get_Original_Texture_Format() const
WW3DFormat Get_Format()
unsigned long Get_Date_Time() const
unsigned Get_Width() const
unsigned Get_Height() const
unsigned Get_Original_Texture_Mip_Level_Count() const
unsigned Get_Original_Texture_Height() const
unsigned char * Peek_Bitmap()
unsigned Get_Original_Texture_Width() const
const StringClass & Get_Name() const
static bool Is_Thumbnail_Created_If_Not_Found()
ThumbnailClass * Peek_Thumbnail_Instance(const StringClass &name)
bool Is_Per_Texture_Time_Stamp_Used() const
static void Create_Thumbnail_If_Not_Found(bool create)
static void Pre_Init(bool display_message_box)
static ThumbnailClass * Peek_Thumbnail_Instance_From_Any_Manager(const StringClass &name)
void Enable_Per_Texture_Time_Stamp(bool enable)
static void Add_Thumbnail_Manager(const char *thumbnail_filename, const char *mix_file_name)
static ThumbnailManagerClass * Peek_Thumbnail_Manager(const char *thumbnail_filename)
static void Remove_Thumbnail_Manager(const char *thumbnail_filename)
WW3DFormat
Definition ww3dformat.h:75
@ WW3D_FORMAT_A4R4G4B4
Definition ww3dformat.h:83