MCPcopy Create free account
hub / github.com/ZDoom/Raze / Load

Method Load

source/common/models/models_md2.cpp:107–169  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

105//===========================================================================
106
107bool FDMDModel::Load(const char * path, int lumpnum, const char * buffer, int length)
108{
109 dmd_chunk_t * chunk = (dmd_chunk_t*)(buffer + 12);
110 char *temp;
111 ModelFrame *frame;
112 int i;
113
114 int fileoffset = 12 + sizeof(dmd_chunk_t);
115
116 chunk->type = LittleLong(chunk->type);
117 while (chunk->type != DMC_END)
118 {
119 switch (chunk->type)
120 {
121 case DMC_INFO: // Standard DMD information chunk.
122 memcpy(&info, buffer + fileoffset, LittleLong(chunk->length));
123 info.skinWidth = LittleLong(info.skinWidth);
124 info.skinHeight = LittleLong(info.skinHeight);
125 info.frameSize = LittleLong(info.frameSize);
126 info.numSkins = LittleLong(info.numSkins);
127 info.numVertices = LittleLong(info.numVertices);
128 info.numTexCoords = LittleLong(info.numTexCoords);
129 info.numFrames = LittleLong(info.numFrames);
130 info.numLODs = LittleLong(info.numLODs);
131 info.offsetSkins = LittleLong(info.offsetSkins);
132 info.offsetTexCoords = LittleLong(info.offsetTexCoords);
133 info.offsetFrames = LittleLong(info.offsetFrames);
134 info.offsetLODs = LittleLong(info.offsetLODs);
135 info.offsetEnd = LittleLong(info.offsetEnd);
136 fileoffset += chunk->length;
137 break;
138
139 default:
140 // Just skip all unknown chunks.
141 fileoffset += chunk->length;
142 break;
143 }
144 // Read the next chunk header.
145 chunk = (dmd_chunk_t*)(buffer + fileoffset);
146 chunk->type = LittleLong(chunk->type);
147 fileoffset += sizeof(dmd_chunk_t);
148 }
149
150 // Allocate and load in the data.
151 skins = new FTextureID[info.numSkins];
152
153 for (i = 0; i < info.numSkins; i++)
154 {
155 skins[i] = LoadSkin(path, buffer + info.offsetSkins + i * 64);
156 }
157 temp = (char*)buffer + info.offsetFrames;
158 frames = new ModelFrame[info.numFrames];
159
160 for (i = 0, frame = frames; i < info.numFrames; i++, frame++)
161 {
162 dmd_packedFrame_t *pfr = (dmd_packedFrame_t *)(temp + info.frameSize * i);
163
164 memcpy(frame->name, pfr->name, sizeof(pfr->name));

Callers 1

FindModelFunction · 0.45

Calls 3

LoadSkinFunction · 0.85
PrintfFunction · 0.85
LittleLongFunction · 0.50

Tested by

no test coverage detected