Testing compression.
This commit is contained in:
parent
37c4190f02
commit
60e18f9b17
|
@ -18,6 +18,54 @@ void pad(unsigned int &size) {
|
||||||
while(size&0x3) size++;
|
while(size&0x3) size++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void shuffle(float *buffer, unsigned int size, unsigned int stride) {
|
||||||
|
float *tmp = new float[size];
|
||||||
|
unsigned int count = 0;
|
||||||
|
|
||||||
|
unsigned int nelem = size/stride;
|
||||||
|
for(unsigned int s = 0; s < stride; s++) {
|
||||||
|
float *ptr = buffer + s;
|
||||||
|
for(unsigned int i = 0; i < nelem; i++) {
|
||||||
|
tmp[count++] = *ptr;
|
||||||
|
ptr += stride;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
memcpy(buffer, tmp, size * sizeof(float));
|
||||||
|
delete []tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
void unshuffle(float *buffer, unsigned int size, unsigned int stride) {
|
||||||
|
float *tmp = new float[size];
|
||||||
|
|
||||||
|
unsigned int count = 0;
|
||||||
|
unsigned int nelem = size/stride;
|
||||||
|
for(unsigned int s = 0; s < stride; s++) {
|
||||||
|
float *ptr = tmp + s;
|
||||||
|
for(unsigned int i = 0; i < nelem; i++) {
|
||||||
|
*ptr = buffer[count++];
|
||||||
|
ptr += stride;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
memcpy(buffer, tmp, size * sizeof(float));
|
||||||
|
delete []tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
void subtract(float *buffer, unsigned int size) {
|
||||||
|
float p = buffer[0];
|
||||||
|
float q;
|
||||||
|
for(unsigned int i = 1; i < size; i++) {
|
||||||
|
q = buffer[i];
|
||||||
|
buffer[i] -= p;
|
||||||
|
p = q;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void unsubtract(float *buffer, unsigned int size) {
|
||||||
|
for(unsigned int i = 1; i < size; i++)
|
||||||
|
buffer[i] += buffer[i-1];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Patch::Patch(Signature signature, char *s,
|
Patch::Patch(Signature signature, char *s,
|
||||||
unsigned short nvert, unsigned short nface):
|
unsigned short nvert, unsigned short nface):
|
||||||
start(s) {
|
start(s) {
|
||||||
|
@ -121,6 +169,9 @@ unsigned int Patch::ByteSize(Signature signature,
|
||||||
|
|
||||||
char *Patch::Compress(unsigned int ram_size, unsigned int &size) {
|
char *Patch::Compress(unsigned int ram_size, unsigned int &size) {
|
||||||
|
|
||||||
|
//lets use differences
|
||||||
|
// shuffle((float *)VertBegin(), nv * 3, 3);
|
||||||
|
// subtract((float *)VertBegin(), nv * 3);
|
||||||
|
|
||||||
//TODO use OVERLAP and test speed
|
//TODO use OVERLAP and test speed
|
||||||
//TODO fill chunk padding with zeroes?
|
//TODO fill chunk padding with zeroes?
|
||||||
|
@ -164,5 +215,8 @@ void Patch::Decompress(unsigned int ram_size, void *src, unsigned int src_sz) {
|
||||||
}
|
}
|
||||||
assert(dst_size == ram_size);
|
assert(dst_size == ram_size);
|
||||||
//TODO add 3 to start... so we can use asm_fast decompressor
|
//TODO add 3 to start... so we can use asm_fast decompressor
|
||||||
|
|
||||||
|
// unsubtract((float *)VertBegin(), nv * 3);
|
||||||
|
// unshuffle((float *)VertBegin(), nv * 3, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue