mirror of
https://github.com/aap/librw.git
synced 2025-12-29 14:00:02 +00:00
made (most of) streaming work on big endian
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user