diff options
Diffstat (limited to 'dgedit/canvas.cc')
-rw-r--r-- | dgedit/canvas.cc | 53 |
1 files changed, 48 insertions, 5 deletions
diff --git a/dgedit/canvas.cc b/dgedit/canvas.cc index 36900a3..08005c7 100644 --- a/dgedit/canvas.cc +++ b/dgedit/canvas.cc @@ -79,11 +79,31 @@ Canvas::~Canvas() if(data) delete[] data; } - -#define VALL(x) (x*2) -#define VALU(x) (x*2+1) -#define POWL(x) (x*2+2) -#define POWU(x) (x*2+3) +#define VALL(x) (x*4) +#define VALU(x) (x*4+1) +#define POWL(x) (x*4+2) +#define POWU(x) (x*4+3) +/* +static void genmipmap(float *in, size_t insz, float **out, size_t *outsz) +{ + *outsz = (insz / 2) * 4; + *out = new float[*outsz]; + float *lookup = *out; + + for(size_t i = 0; i < *outsz / 4; i++) { + lookup[VALL(i)] = 0.0; + lookup[VALU(i)] = 0.0; + lookup[POWL(i)] = 0.0; + lookup[POWU(i)] = 0.0; + for(size_t j = i * 2; j < i*2+2 && j < insz / 4; j++) { + if(in[VALU(j)] > lookup[VALU(i)]) lookup[VALU(i)] = in[VALU(j)]; + if(in[VALL(j)] < lookup[VALL(i)]) lookup[VALL(i)] = in[VALL(j)]; + if(in[POWU(j)] > 0) lookup[POWU(i)] += in[POWU(j)]; + if(in[POWL(j)] < 0) lookup[POWL(i)] += in[POWL(j)]; + } + } +} +*/ void Canvas::load(QString file) { if(data) { @@ -132,7 +152,30 @@ void Canvas::load(QString file) mipmaps[dev] = lookup; } + /* + + size_t sz = (size / 2) * 4; + mipmaps[2] = new float[sz]; + float *lookup = mipmaps[2]; + for(size_t i = 0; i < sz; i++) { + lookup[VALL(i)] = 0.0; + lookup[VALU(i)] = 0.0; + lookup[POWL(i)] = 0.0; + lookup[POWU(i)] = 0.0; + for(size_t j = i * 2; j < (i + 1) * 2; j++) { + if(data[j] > lookup[VALU(i)]) lookup[VALU(i)] = data[j]; + if(data[j] < lookup[VALL(i)]) lookup[VALL(i)] = data[j]; + if(data[j] > 0) lookup[POWU(i)] += data[j]; + if(data[j] < 0) lookup[POWL(i)] += data[j]; + } + } + size_t dev = 3; + do { + genmipmap(mipmaps[dev], sz, &mipmaps[dev], &sz); + dev++; + } while(sz > 2); + */ updateWav(); update(); } |