| 1188 | return ret; |
| 1189 | } |
| 1190 | int PacLevelMem::LoadPaa(QIStream& in, void* mem, const PacPalette* pal) const |
| 1191 | { |
| 1192 | int ret = -1; |
| 1193 | switch (ENUM_CAST(PacFormat, _sFormat)) |
| 1194 | { |
| 1195 | case PacARGB1555: |
| 1196 | case PacARGB4444: |
| 1197 | case PacAI88: |
| 1198 | ret = LoadPaaBin16(in, mem, pal); |
| 1199 | break; |
| 1200 | case PacARGB8888: |
| 1201 | { |
| 1202 | long w = fgetiw(in); |
| 1203 | long h = fgetiw(in); |
| 1204 | if (w == 0 && h == 0) |
| 1205 | { |
| 1206 | ret = 1; // mipmap terminator |
| 1207 | break; |
| 1208 | } |
| 1209 | long dSize = fgeti24(in); |
| 1210 | PoseidonAssert(_w == w); |
| 1211 | PoseidonAssert(_h == h); |
| 1212 | if (_dFormat == PacARGB8888) |
| 1213 | { |
| 1214 | in.read(static_cast<char*>(mem), dSize); |
| 1215 | ret = in.fail() ? -1 : 0; |
| 1216 | } |
| 1217 | else |
| 1218 | { |
| 1219 | std::vector<char> tmp(dSize); |
| 1220 | in.read(tmp.data(), dSize); |
| 1221 | if (in.fail()) |
| 1222 | { |
| 1223 | ret = -1; |
| 1224 | break; |
| 1225 | } |
| 1226 | int srcPitch = _w * 4; |
| 1227 | char* dst = static_cast<char*>(mem); |
| 1228 | for (int y = 0; y < _h; y++) |
| 1229 | memcpy(dst + y * _pitch, tmp.data() + y * srcPitch, srcPitch); |
| 1230 | ret = 0; |
| 1231 | } |
| 1232 | break; |
| 1233 | } |
| 1234 | case PacDXT1: |
| 1235 | case PacDXT2: |
| 1236 | case PacDXT3: |
| 1237 | case PacDXT4: |
| 1238 | case PacDXT5: |
| 1239 | ret = LoadPaaDXT(in, mem, pal); |
| 1240 | break; |
| 1241 | default: |
| 1242 | Fail("Bad texture format."); |
| 1243 | ret = -1; |
| 1244 | break; |
| 1245 | } |
| 1246 | return ret; |
| 1247 | } |
no test coverage detected