7
7
// https://opensource.org/licenses/Zlib
8
8
//
9
9
10
- #include < resources/GenericFileData .h>
10
+ #include < resources/PackFileData .h>
11
11
#include < resources/PackFile.h>
12
12
#include < resources/ResourceSystem.h>
13
13
#include < resources/SceneData.h>
14
14
#include < resources/StaticMeshData.h>
15
- #include < resources/Texture2DData.h>
16
15
#include < utils/Logging.h>
17
16
18
17
#include < fstream>
@@ -55,28 +54,24 @@ int main(int argc, char* argv[])
55
54
CC_LOG_INFO (" Reading asset at path {}" , file.c_str ())
56
55
57
56
void * data = nullptr ;
58
- uint32_t bodyDataSize = 0 ;
57
+ uint32_t dataSize = 0 ;
59
58
Siege::String fullPath = assetsDir + " /" + Siege::String (file.c_str ());
60
59
std::filesystem::path extension = file.extension ();
61
60
if (extension == " .sm" )
62
61
{
63
- data = PackStaticMeshFile (fullPath, assetsDir);
64
- bodyDataSize = Siege::StaticMeshData::GetDataSize (data);
62
+ data = PackStaticMeshFile (fullPath, assetsDir, dataSize);
65
63
}
66
64
else if (extension == " .jpg" || extension == " .jpeg" || extension == " .png" )
67
65
{
68
- data = PackTexture2DFile (fullPath);
69
- bodyDataSize = Siege::Texture2DData::GetDataSize (data);
66
+ data = PackTexture2DFile (fullPath, dataSize);
70
67
}
71
68
else if (extension == " .spv" || extension == " .ttf" )
72
69
{
73
- data = PackGenericFile (fullPath);
74
- bodyDataSize = Siege::GenericFileData::GetDataSize (data);
70
+ data = PackGenericFile (fullPath, dataSize);
75
71
}
76
72
else if (extension == " .scene" )
77
73
{
78
- data = PackSceneFile (fullPath);
79
- bodyDataSize = Siege::SceneData::GetDataSize (data);
74
+ data = PackSceneFile (fullPath, dataSize);
80
75
}
81
76
82
77
if (!data)
@@ -86,12 +81,11 @@ int main(int argc, char* argv[])
86
81
continue ;
87
82
}
88
83
89
- PackFile::TocEntry* tocEntry =
90
- PackFile::TocEntry::Create (file.c_str (), entriesDataSize, bodyDataSize);
84
+ PackFile::TocEntry* tocEntry = PackFile::TocEntry::Create (file.c_str (), entriesDataSize, dataSize);
91
85
92
86
entries.emplace_back (tocEntry, data);
93
87
94
- entriesDataSize += bodyDataSize ;
88
+ entriesDataSize += dataSize ;
95
89
entriesTocSize += tocEntry->GetDataSize ();
96
90
97
91
dynamicAllocations.push_back (data);
@@ -109,7 +103,6 @@ int main(int argc, char* argv[])
109
103
header.bodySize ,
110
104
header.tocOffset )
111
105
uint64_t writeTotal = 0 ;
112
- uint64_t dataOffset = 0 ;
113
106
114
107
std::ofstream outputFileStream;
115
108
outputFileStream.open (outputFile, std::ios::out | std::ios::binary);
@@ -121,12 +114,15 @@ int main(int argc, char* argv[])
121
114
writeTotal)
122
115
123
116
entriesDataSize = 0 ;
117
+ Bytef* bodyDataBufferCompressed = nullptr ;
124
118
for (const std::pair<PackFile::TocEntry*, void *>& entry : entries)
125
119
{
126
120
uLongf bodyDataSizeUncompressed = entry.first ->dataSize ;
127
121
uLongf bodyDataSizeCompressed = compressBound (bodyDataSizeUncompressed);
128
122
129
- Bytef bodyDataBufferCompressed[bodyDataSizeCompressed];
123
+ Bytef* tempBuffer = static_cast <Bytef*>(realloc (bodyDataBufferCompressed, bodyDataSizeCompressed));
124
+ bodyDataBufferCompressed = tempBuffer;
125
+
130
126
int result = compress2 (bodyDataBufferCompressed, &bodyDataSizeCompressed,
131
127
static_cast <Bytef*>(entry.second ), bodyDataSizeUncompressed, Z_BEST_COMPRESSION);
132
128
CC_ASSERT (result == Z_OK, " Compression failed for entry: " + Siege::String (entry.first ->name ));
@@ -136,13 +132,14 @@ int main(int argc, char* argv[])
136
132
entry.first ->dataSizeCompressed = bodyDataSizeCompressed;
137
133
writeTotal += bodyDataSizeCompressed;
138
134
entriesDataSize += bodyDataSizeCompressed;
139
- CC_LOG_INFO (" Adding DATA \" {}\" to pack file with size: {}, compressed to {}% (write total: {})" ,
135
+ CC_LOG_INFO (" Adding DATA \" {}\" to pack file with size: {} from {} , compressed to ~ {}% (write total: {})" ,
140
136
entry.first ->name ,
141
137
bodyDataSizeCompressed,
142
- static_cast <uint8_t >(static_cast <float >(bodyDataSizeCompressed) / static_cast <float >(bodyDataSizeUncompressed) * 100 .f ),
138
+ bodyDataSizeUncompressed,
139
+ static_cast <uint8_t >(ceilf (static_cast <float >(bodyDataSizeCompressed) / static_cast <float >(bodyDataSizeUncompressed) * 100 .f )),
143
140
writeTotal)
144
- dataOffset += bodyDataSizeCompressed;
145
141
}
142
+ free (bodyDataBufferCompressed);
146
143
147
144
outputFileStream.write (PACKER_MAGIC_NUMBER_TOC, PACKER_MAGIC_NUMBER_SIZE);
148
145
writeTotal += PACKER_MAGIC_NUMBER_SIZE;
0 commit comments