Code: Select all
void UnSwizzle(void *ReadArray, void *WriteArray,unsigned long int &ReadOffset,unsigned long int WriteOffset, unsigned long int SegWidth, unsigned long int SegHeight, unsigned long int DataWidth)
{
if(SegWidth == 2 && SegHeight == 2)
{
((byte *)WriteArray)[WriteOffset ] = ((byte *)ReadArray)[ReadOffset + 0];
((byte *)WriteArray)[WriteOffset + 1 ] = ((byte *)ReadArray)[ReadOffset + 1];
((byte *)WriteArray)[WriteOffset + DataWidth ] = ((byte *)ReadArray)[ReadOffset + 2];
((byte *)WriteArray)[WriteOffset + DataWidth + 1] = ((byte *)ReadArray)[ReadOffset + 3];
ReadOffset += 4;
}
else
{
UnSwizzle(ReadArray, WriteArray, ReadOffset, WriteOffset, SegWidth/2, SegHeight/2, DataWidth);
UnSwizzle(ReadArray, WriteArray, ReadOffset, WriteOffset + SegWidth/2, SegWidth/2, SegHeight/2, DataWidth);
UnSwizzle(ReadArray, WriteArray, ReadOffset, WriteOffset + DataWidth*(SegHeight/2), SegWidth/2, SegHeight/2, DataWidth);
UnSwizzle(ReadArray, WriteArray, ReadOffset, WriteOffset + DataWidth*(SegHeight/2) + SegWidth/2, SegWidth/2, SegHeight/2, DataWidth);
}
}
void Swizzle(void *WriteArray, void *ReadArray, unsigned long int &WriteOffset, unsigned long int ReadOffset, unsigned long int SegWidth, unsigned long int SegHeight, unsigned long int DataWidth)
{
if(SegWidth == 2 && SegHeight == 2)
{
((byte *)WriteArray)[WriteOffset ] = ((byte *)ReadArray)[ReadOffset + 0];
((byte *)WriteArray)[WriteOffset + 1 ] = ((byte *)ReadArray)[ReadOffset + 1];
((byte *)WriteArray)[WriteOffset + 2 ] = ((byte *)ReadArray)[ReadOffset + DataWidth];
((byte *)WriteArray)[WriteOffset + 3 ] = ((byte *)ReadArray)[ReadOffset + DataWidth + 1];
WriteOffset += 4;
}
else
{
Swizzle(WriteArray, ReadArray, WriteOffset, ReadOffset, SegWidth/2, SegHeight/2, DataWidth);
Swizzle(WriteArray, ReadArray, WriteOffset, ReadOffset + SegWidth/2, SegWidth/2, SegHeight/2, DataWidth);
Swizzle(WriteArray, ReadArray, WriteOffset, ReadOffset + DataWidth*(SegHeight/2), SegWidth/2, SegHeight/2, DataWidth);
Swizzle(WriteArray, ReadArray, WriteOffset, ReadOffset + DataWidth*(SegHeight/2) + SegWidth/2, SegWidth/2, SegHeight/2, DataWidth);
}
}