made (most of) streaming work on big endian

This commit is contained in:
aap
2020-05-01 08:42:56 +02:00
parent 3010dad0cc
commit e4b4bf9d16
25 changed files with 377 additions and 219 deletions

View File

@@ -79,6 +79,7 @@ destroyNativeData(void *object, int32, int32)
Stream*
readNativeData(Stream *stream, int32, void *object, int32, int32)
{
ASSERTLITTLE;
Geometry *geometry = (Geometry*)object;
uint32 platform;
if(!findChunk(stream, ID_STRUCT, nil, nil)){
@@ -100,7 +101,7 @@ readNativeData(Stream *stream, int32, void *object, int32, int32)
for(uint32 i = 0; i < header->numMeshes; i++){
InstanceData *instance = &header->instanceMeshes[i];
uint32 buf[2];
stream->read(buf, 8);
stream->read32(buf, 8);
instance->dataSize = buf[0];
instance->dataRaw = rwNewT(uint8, instance->dataSize+0x7F, MEMDUR_EVENT | ID_GEOMETRY);
instance->data = ALIGNPTR(instance->dataRaw, 0x80);
@@ -108,7 +109,7 @@ readNativeData(Stream *stream, int32, void *object, int32, int32)
uint32 a = (uint32)instance->data;
assert(a % 0x10 == 0);
#endif
stream->read(instance->data, instance->dataSize);
stream->read8(instance->data, instance->dataSize);
#ifdef RW_PS2
if(!buf[1])
fixDmaOffsets(instance);
@@ -123,6 +124,7 @@ readNativeData(Stream *stream, int32, void *object, int32, int32)
Stream*
writeNativeData(Stream *stream, int32 len, void *object, int32, int32)
{
ASSERTLITTLE;
Geometry *geometry = (Geometry*)object;
writeChunkHeader(stream, ID_STRUCT, len-12);
if(geometry->instData == nil ||
@@ -135,8 +137,8 @@ writeNativeData(Stream *stream, int32 len, void *object, int32, int32)
uint32 buf[2];
buf[0] = instance->dataSize;
buf[1] = unfixDmaOffsets(instance);
stream->write(buf, 8);
stream->write(instance->data, instance->dataSize);
stream->write32(buf, 8);
stream->write8(instance->data, instance->dataSize);
#ifdef RW_PS2
if(!buf[1])
fixDmaOffsets(instance);
@@ -1243,7 +1245,7 @@ readADC(Stream *stream, int32, void *object, int32 offset, int32)
}
int32 size = adc->numBits+3 & ~3;
adc->adcBits = rwNewT(int8, size, MEMDUR_EVENT | ID_ADC);
stream->read(adc->adcBits, size);
stream->read8(adc->adcBits, size);
return stream;
}
@@ -1259,7 +1261,7 @@ writeADC(Stream *stream, int32 len, void *object, int32 offset, int32)
}
stream->writeI32(adc->numBits);
int32 size = adc->numBits+3 & ~3;
stream->write(adc->adcBits, size);
stream->write8(adc->adcBits, size);
return stream;
}

View File

@@ -2056,12 +2056,12 @@ readNativeTexture(Stream *stream)
RWERROR((ERR_CHUNK, "STRING"));
goto fail;
}
stream->read(tex->name, length);
stream->read8(tex->name, length);
if(!findChunk(stream, ID_STRING, &length, nil)){
RWERROR((ERR_CHUNK, "STRING"));
goto fail;
}
stream->read(tex->mask, length);
stream->read8(tex->mask, length);
// Raster
StreamRasterExt streamExt;
@@ -2074,7 +2074,8 @@ readNativeTexture(Stream *stream)
RWERROR((ERR_CHUNK, "STRUCT"));
goto fail;
}
stream->read(&streamExt, 0x40);
ASSERTLITTLE;
stream->read8(&streamExt, 0x40);
/*
printf("%X %X %X %X %X %016llX %X %X %016llX %016llX %X %X %X %X\n",
streamExt.width,
@@ -2154,10 +2155,10 @@ streamExt.mipmapVal);
goto fail;
}
if(streamExt.type < 2){
stream->read(raster->pixels, length);
stream->read8(raster->pixels, length);
}else{
stream->read(((Ps2Raster::PixelPtr*)raster->originalPixels)->pixels, natras->pixelSize);
stream->read(raster->palette-0x50, natras->paletteSize);
stream->read8(((Ps2Raster::PixelPtr*)raster->originalPixels)->pixels, natras->pixelSize);
stream->read8(raster->palette-0x50, natras->paletteSize);
}
//printf("\n");
return tex;
@@ -2177,10 +2178,10 @@ writeNativeTexture(Texture *tex, Stream *stream)
stream->writeU32(tex->filterAddressing);
int32 len = strlen(tex->name)+4 & ~3;
writeChunkHeader(stream, ID_STRING, len);
stream->write(tex->name, len);
stream->write8(tex->name, len);
len = strlen(tex->mask)+4 & ~3;
writeChunkHeader(stream, ID_STRING, len);
stream->write(tex->mask, len);
stream->write8(tex->mask, len);
int32 sz = ras->pixelSize + ras->paletteSize;
writeChunkHeader(stream, ID_STRUCT, 12 + 64 + 12 + sz);
@@ -2204,14 +2205,15 @@ writeNativeTexture(Texture *tex, Stream *stream)
streamExt.paletteSize = ras->paletteSize;
streamExt.totalSize = ras->totalSize;
streamExt.mipmapVal = ras->kl;
stream->write(&streamExt, 64);
ASSERTLITTLE;
stream->write8(&streamExt, 64);
writeChunkHeader(stream, ID_STRUCT, sz);
if(streamExt.type < 2){
stream->write(raster->pixels, sz);
stream->write8(raster->pixels, sz);
}else{
stream->write(((Ps2Raster::PixelPtr*)raster->originalPixels)->pixels, ras->pixelSize);
stream->write(raster->palette-0x50, ras->paletteSize);
stream->write8(((Ps2Raster::PixelPtr*)raster->originalPixels)->pixels, ras->pixelSize);
stream->write8(raster->palette-0x50, ras->paletteSize);
}
}

View File

@@ -82,7 +82,7 @@ readNativeSkin(Stream *stream, int32, void *object, int32 offset)
RWERROR((ERR_PLATFORM, platform));
return nil;
}
stream->read(header, 4);
stream->read8(header, 4);
Skin *skin = rwNewT(Skin, 1, MEMDUR_EVENT | ID_SKIN);
*PLUGINOFFSET(Skin*, geometry, offset) = skin;
@@ -98,9 +98,9 @@ readNativeSkin(Stream *stream, int32, void *object, int32 offset)
skin->numWeights = header[2];
if(!oldFormat)
stream->read(skin->usedBones, skin->numUsedBones);
stream->read8(skin->usedBones, skin->numUsedBones);
if(skin->numBones)
stream->read(skin->inverseMatrices, skin->numBones*64);
stream->read32(skin->inverseMatrices, skin->numBones*64);
// dummy data in case we need to write data in the new format
if(oldFormat){
@@ -137,14 +137,14 @@ writeNativeSkin(Stream *stream, int32 len, void *object, int32 offset)
header[2] = skin->numWeights;
}
header[3] = 0;
stream->write(header, 4);
stream->write8(header, 4);
if(!oldFormat)
stream->write(skin->usedBones, skin->numUsedBones);
stream->write(skin->inverseMatrices, skin->numBones*64);
stream->write8(skin->usedBones, skin->numUsedBones);
stream->write32(skin->inverseMatrices, skin->numBones*64);
if(!oldFormat){
uint32 buffer[4] = { 0, 0, 0, 0, };
stream->write(buffer, 4*4);
stream->write32(buffer, 4*4);
writeSkinSplitData(stream, skin);
}