|
From: <kin...@us...> - 2004-02-27 16:51:55
|
Update of /cvsroot/teem/teem/src/limn In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20918/limn Modified Files: env.c limn.h qn.c Log Message: starting to expand number of quantized normal schemes Index: env.c =================================================================== RCS file: /cvsroot/teem/teem/src/limn/env.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** env.c 9 Feb 2004 07:06:18 -0000 1.5 --- env.c 27 Feb 2004 16:42:53 -0000 1.6 *************** *** 44,48 **** mapData = map->data; for (qn=0; qn<=sx*sy-1; qn++) { ! limnQNtoV_f[limnQN16checker](vec, qn); cb(mapData + 3*qn, vec, data); } --- 44,96 ---- mapData = map->data; for (qn=0; qn<=sx*sy-1; qn++) { ! limnQNtoV_f[qnMethod](vec, qn); ! cb(mapData + 3*qn, vec, data); ! } ! break; ! case limnQN14checker: ! sx = sy = 128; ! if (nrrdMaybeAlloc(map, nrrdTypeFloat, 3, 3, sx, sy)) { ! sprintf(err, "%s: couldn't alloc output", me); ! biffMove(LIMN, err, NRRD); return 1; ! } ! mapData = map->data; ! for (qn=0; qn<=sx*sy-1; qn++) { ! limnQNtoV_f[qnMethod](vec, qn); ! cb(mapData + 3*qn, vec, data); ! } ! break; ! case limnQN12checker: ! sx = sy = 64; ! if (nrrdMaybeAlloc(map, nrrdTypeFloat, 3, 3, sx, sy)) { ! sprintf(err, "%s: couldn't alloc output", me); ! biffMove(LIMN, err, NRRD); return 1; ! } ! mapData = map->data; ! for (qn=0; qn<=sx*sy-1; qn++) { ! limnQNtoV_f[qnMethod](vec, qn); ! cb(mapData + 3*qn, vec, data); ! } ! break; ! case limnQN10checker: ! sx = sy = 32; ! if (nrrdMaybeAlloc(map, nrrdTypeFloat, 3, 3, sx, sy)) { ! sprintf(err, "%s: couldn't alloc output", me); ! biffMove(LIMN, err, NRRD); return 1; ! } ! mapData = map->data; ! for (qn=0; qn<=sx*sy-1; qn++) { ! limnQNtoV_f[qnMethod](vec, qn); ! cb(mapData + 3*qn, vec, data); ! } ! break; ! case limnQN8checker: ! sx = sy = 16; ! if (nrrdMaybeAlloc(map, nrrdTypeFloat, 3, 3, sx, sy)) { ! sprintf(err, "%s: couldn't alloc output", me); ! biffMove(LIMN, err, NRRD); return 1; ! } ! mapData = map->data; ! for (qn=0; qn<=sx*sy-1; qn++) { ! limnQNtoV_f[qnMethod](vec, qn); cb(mapData + 3*qn, vec, data); } Index: limn.h =================================================================== RCS file: /cvsroot/teem/teem/src/limn/limn.h,v retrieving revision 1.49 retrieving revision 1.50 diff -C2 -d -r1.49 -r1.50 *** limn.h 19 Feb 2004 03:44:07 -0000 1.49 --- limn.h 27 Feb 2004 16:42:53 -0000 1.50 *************** *** 270,283 **** */ enum { ! limnQNUnknown, /* 0 */ ! limnQN16checker, /* 1 */ ! limnQN16simple, /* 2 */ ! limnQN16border1, /* 3 */ ! limnQN15checker, /* 4 */ ! limnQN14checker, /* 5 */ ! limnQN12checker, /* 6 */ limnQNLast }; ! #define LIMN_QN_MAX 6 enum { --- 270,288 ---- */ enum { ! limnQNUnknown, /* 0 */ ! limnQN16simple, /* 1 */ ! limnQN16border1, /* 2 */ ! limnQN16checker, /* 3 */ ! limnQN15checker, /* 4 */ ! limnQN14checker, /* 5 */ ! limnQN13checker, /* 6 */ ! limnQN12checker, /* 7 */ ! limnQN11checker, /* 8 */ ! limnQN10checker, /* 9 */ ! limnQN9checker, /* 10 */ ! limnQN8checker, /* 11 */ limnQNLast }; ! #define LIMN_QN_MAX 11 enum { *************** *** 371,375 **** typedef void (*limnEnvMapCB)(float rgb[3], float vec[3], void *data); TEEM_API int limnEnvMapFill(Nrrd *envMap, limnEnvMapCB cb, ! int qnMethod, void *data); TEEM_API void limnLightDiffuseCB(float rgb[3], float vec[3], void *_lit); TEEM_API int limnEnvMapCheck(Nrrd *envMap); --- 376,380 ---- typedef void (*limnEnvMapCB)(float rgb[3], float vec[3], void *data); TEEM_API int limnEnvMapFill(Nrrd *envMap, limnEnvMapCB cb, ! int qnMethod, void *data); TEEM_API void limnLightDiffuseCB(float rgb[3], float vec[3], void *_lit); TEEM_API int limnEnvMapCheck(Nrrd *envMap); *************** *** 408,414 **** float x, float y, float z); TEEM_API int limnObjectEdgeAdd(limnObject *obj, int partIdx, int lookIdx, ! int faceIdxIdx, int vertIdxIdx0, int vertIdxIdx1); ! TEEM_API int limnObjectFaceAdd(limnObject *obj, int partIdx, ! int lookIdx, int sideNum, int *vertIdxIdx); /* io.c */ --- 413,420 ---- float x, float y, float z); TEEM_API int limnObjectEdgeAdd(limnObject *obj, int partIdx, int lookIdx, ! int faceIdxIdx, int vertIdxIdx0, ! int vertIdxIdx1); ! TEEM_API int limnObjectFaceAdd(limnObject *obj, int partIdx, int lookIdx, ! int sideNum, int *vertIdxIdx); /* io.c */ *************** *** 425,431 **** TEEM_API int limnObjectPolarSphereAdd(limnObject *obj, int lookIdx, int axis, int thetaRes, int phiRes); ! TEEM_API int limnObjectConeAdd(limnObject *obj, int lookIdx, int axis, int res); ! TEEM_API int limnObjectPolarSuperquadAdd(limnObject *obj, int lookIdx, int axis, ! float A, float B, int thetaRes, int phiRes); --- 431,438 ---- TEEM_API int limnObjectPolarSphereAdd(limnObject *obj, int lookIdx, int axis, int thetaRes, int phiRes); ! TEEM_API int limnObjectConeAdd(limnObject *obj, int lookIdx, ! int axis, int res); ! TEEM_API int limnObjectPolarSuperquadAdd(limnObject *obj, int lookIdx, ! int axis, float A, float B, int thetaRes, int phiRes); *************** *** 435,439 **** TEEM_API int limnObjectSpaceTransform(limnObject *obj, limnCamera *cam, limnWindow *win, int space); ! TEEM_API int limnObjectPartTransform(limnObject *obj, int partIdx, float tx[16]); TEEM_API int limnObjectDepthSortParts(limnObject *obj); TEEM_API int limnObjectDepthSortFaces(limnObject *obj); --- 442,447 ---- TEEM_API int limnObjectSpaceTransform(limnObject *obj, limnCamera *cam, limnWindow *win, int space); ! TEEM_API int limnObjectPartTransform(limnObject *obj, int partIdx, ! float tx[16]); TEEM_API int limnObjectDepthSortParts(limnObject *obj); TEEM_API int limnObjectDepthSortFaces(limnObject *obj); *************** *** 441,445 **** /* renderLimn.c */ ! TEEM_API int limnObjectRender(limnObject *obj, limnCamera *cam, limnWindow *win); TEEM_API int limnObjectPSDraw(limnObject *obj, limnCamera *cam, Nrrd *envMap, limnWindow *win); --- 449,454 ---- /* renderLimn.c */ ! TEEM_API int limnObjectRender(limnObject *obj, limnCamera *cam, ! limnWindow *win); TEEM_API int limnObjectPSDraw(limnObject *obj, limnCamera *cam, Nrrd *envMap, limnWindow *win); *************** *** 453,457 **** limnSplineTypeSpec *spec); TEEM_API limnSpline *limnSplineNix(limnSpline *spline); ! TEEM_API int limnSplineNrrdCleverFix(Nrrd *nout, Nrrd *nin, int info, int type); TEEM_API limnSpline *limnSplineCleverNew(Nrrd *ncpt, int info, limnSplineTypeSpec *spec); --- 462,467 ---- limnSplineTypeSpec *spec); TEEM_API limnSpline *limnSplineNix(limnSpline *spline); ! TEEM_API int limnSplineNrrdCleverFix(Nrrd *nout, Nrrd *nin, ! int info, int type); TEEM_API limnSpline *limnSplineCleverNew(Nrrd *ncpt, int info, limnSplineTypeSpec *spec); Index: qn.c =================================================================== RCS file: /cvsroot/teem/teem/src/limn/qn.c,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** qn.c 9 Feb 2004 07:06:18 -0000 1.17 --- qn.c 27 Feb 2004 16:43:04 -0000 1.18 *************** *** 91,94 **** --- 91,151 ---- /* ---------------------------------------------------------------- */ + void + _limnQN16border1_QNtoV_f(float *vec, int qn) { + int ui, vi; + float u, v, x, y, z, n; + + ui = qn & 0xFF; + vi = qn >> 8; + u = AIR_AFFINE(0.5, ui, 254.5, -0.5, 0.5); + v = AIR_AFFINE(0.5, vi, 254.5, -0.5, 0.5); + x = u + v; + y = u - v; + z = 1 - AIR_ABS(x) - AIR_ABS(y); + z *= (((ui ^ vi) & 0x01) << 1) - 1; + n = 1.0/sqrt(x*x + y*y + z*z); + vec[0] = x*n; + vec[1] = y*n; + vec[2] = z*n; + } + + int + _limnQN16border1_VtoQN_f(float *vec) { + float L, u, v, x, y, z; + int ui, vi, zi; + char me[]="limnQNVto16PB1"; + + x = vec[0]; + y = vec[1]; + z = vec[2]; + L = AIR_ABS(x) + AIR_ABS(y) + AIR_ABS(z); + if (!L) { + return 0; + } + x /= L; + y /= L; + u = x + y; + v = x - y; + AIR_INDEX(-1, u, 1, 254, ui); ui++; + AIR_INDEX(-1, v, 1, 254, vi); vi++; + zi = (ui ^ vi) & 0x01; + if (!zi && z > 1.0/128.0) { + ui -= (((ui >> 7) & 0x01) << 1) - 1; + } + else if (zi && z < -1.0/128.0) { + vi -= (((vi >> 7) & 0x01) << 1) - 1; + } + zi = (ui ^ vi) & 0x01; + if (!zi && z > 1.0/127.0) { + printf("%s: panic01\n", me); + } + else if (zi && z < -1.0/127.0) { + printf("%s: panic02\n", me); + } + return (vi << 8) | ui; + } + + /* ---------------------------------------------------------------- */ + /* x = [ 1.0 1.0 ] u *************** *** 103,109 **** /* xor of low bits == 0 --> z<0 ; xor == 1 --> z>0 */ ! /* May 11 2003 GK verified that except at equator seam, the error due to quantization is unbiased */ #define _16_QtoV(vec, qn) \ ui = (qn) & 0xFF; \ --- 160,207 ---- /* xor of low bits == 0 --> z<0 ; xor == 1 --> z>0 */ ! /* May 11 2003 GK (visually) verified that except at equator seam, the error due to quantization is unbiased */ + #define _EVEN_QtoV(HNB, vec, qn) \ + ui = (qn) & ((1<<HNB)-1); \ + vi = ((qn) >> HNB) & ((1<<HNB)-1); \ + u = AIR_AFFINE(0, ui, ((1<<HNB)-1), -0.5, 0.5); \ + v = AIR_AFFINE(0, vi, ((1<<HNB)-1), -0.5, 0.5); \ + x = u + v; \ + y = u - v; \ + z = 1 - AIR_ABS(x) - AIR_ABS(y); \ + /* would this be better served by a branch? */ \ + z *= (((ui ^ vi) & 0x01) << 1) - 1; \ + n = 1.0/sqrt(x*x + y*y + z*z); \ + (vec)[0] = x*n; \ + (vec)[1] = y*n; \ + (vec)[2] = z*n + + #define _EVEN_VtoQ(HNB, vec) \ + x = (vec)[0]; \ + y = (vec)[1]; \ + z = (vec)[2]; \ + L = AIR_ABS(x) + AIR_ABS(y) + AIR_ABS(z); \ + if (!L) { \ + return 0; \ + } \ + x /= L; \ + y /= L; \ + if (z > 0) { \ + AIR_INDEX(-1.0, x, 1.0, ((1<<HNB)-1), xi); \ + AIR_INDEX(-1.0 - 1.0/((1<<HNB)-1), y, 1.0 + 1.0/((1<<HNB)-1), \ + (1<<HNB), yi); \ + ui = xi + yi - ((1<<(HNB-1))-1); \ + vi = xi - yi + (1<<(HNB-1)); \ + } \ + else { \ + AIR_INDEX(-1.0 - 1.0/((1<<HNB)-1), x, 1.0 + 1.0/((1<<HNB)-1), \ + (1<<HNB), xi); \ + AIR_INDEX(-1, y, 1, ((1<<HNB)-1), yi); \ + ui = xi + yi - ((1<<(HNB-1))-1); \ + vi = xi - yi + ((1<<(HNB-1))-1); \ + } \ + return (vi << HNB) | ui + #define _16_QtoV(vec, qn) \ ui = (qn) & 0xFF; \ *************** *** 126,130 **** double u, v, x, y, z, n; ! _16_QtoV(vec, qn); } --- 224,229 ---- double u, v, x, y, z, n; ! /* _16_QtoV(vec, qn); */ ! _EVEN_QtoV(8, vec, qn); } *************** *** 134,138 **** double u, v, x, y, z, n; ! _16_QtoV(vec, qn); } --- 233,238 ---- double u, v, x, y, z, n; ! /* _16_QtoV(vec, qn); */ ! _EVEN_QtoV(8, vec, qn); } *************** *** 164,170 **** double L, x, y, z; int xi, yi, ui, vi; ! _16_VtoQ(vec); return (vi << 8) | ui; } --- 264,273 ---- double L, x, y, z; int xi, yi, ui, vi; ! ! /* _16_VtoQ(vec); return (vi << 8) | ui; + */ + _EVEN_VtoQ(8, vec); } *************** *** 174,236 **** int xi, yi, ui, vi; _16_VtoQ(vec); return (vi << 8) | ui; ! } ! ! /* ---------------------------------------------------------------- */ ! ! void ! _limnQN16border1_QNtoV_f(float *vec, int qn) { ! int ui, vi; ! float u, v, x, y, z, n; ! ! ui = qn & 0xFF; ! vi = qn >> 8; ! u = AIR_AFFINE(0.5, ui, 254.5, -0.5, 0.5); ! v = AIR_AFFINE(0.5, vi, 254.5, -0.5, 0.5); ! x = u + v; ! y = u - v; ! z = 1 - AIR_ABS(x) - AIR_ABS(y); ! z *= (((ui ^ vi) & 0x01) << 1) - 1; ! n = 1.0/sqrt(x*x + y*y + z*z); ! vec[0] = x*n; ! vec[1] = y*n; ! vec[2] = z*n; ! } ! ! int ! _limnQN16border1_VtoQN_f(float *vec) { ! float L, u, v, x, y, z; ! int ui, vi, zi; ! char me[]="limnQNVto16PB1"; ! ! x = vec[0]; ! y = vec[1]; ! z = vec[2]; ! L = AIR_ABS(x) + AIR_ABS(y) + AIR_ABS(z); ! if (!L) { ! return 0; ! } ! x /= L; ! y /= L; ! u = x + y; ! v = x - y; ! AIR_INDEX(-1, u, 1, 254, ui); ui++; ! AIR_INDEX(-1, v, 1, 254, vi); vi++; ! zi = (ui ^ vi) & 0x01; ! if (!zi && z > 1.0/128.0) { ! ui -= (((ui >> 7) & 0x01) << 1) - 1; ! } ! else if (zi && z < -1.0/128.0) { ! vi -= (((vi >> 7) & 0x01) << 1) - 1; ! } ! zi = (ui ^ vi) & 0x01; ! if (!zi && z > 1.0/127.0) { ! printf("%s: panic01\n", me); ! } ! else if (zi && z < -1.0/127.0) { ! printf("%s: panic02\n", me); ! } ! return (vi << 8) | ui; } --- 277,285 ---- int xi, yi, ui, vi; + /* _16_VtoQ(vec); return (vi << 8) | ui; ! */ ! _EVEN_VtoQ(8, vec); } *************** *** 281,299 **** /* ----------------------------------------------------------- */ - #define _14_QNtoV(vec, qn) \ - ui = (qn) & 0x7F; \ - vi = ((qn) >> 7) & 0x7F; \ - u = AIR_AFFINE(0, ui, 127, -0.5, 0.5); \ - v = AIR_AFFINE(0, vi, 127, -0.5, 0.5); \ - x = u + v; \ - y = u - v; \ - z = 1 - AIR_ABS(x) - AIR_ABS(y); \ - /* would this be better served by a branch? */ \ - z *= (((ui ^ vi) & 0x01) << 1) - 1; \ - n = 1.0/sqrt(x*x + y*y + z*z); \ - (vec)[0] = x*n; \ - (vec)[1] = y*n; \ - (vec)[2] = z*n - void _limnQN14checker_QNtoV_f(float *vec, int qn) { --- 330,333 ---- *************** *** 301,305 **** double u, v, x, y, z, n; ! _14_QNtoV(vec, qn); } --- 335,339 ---- double u, v, x, y, z, n; ! _EVEN_QtoV(7, vec, qn); } *************** *** 309,338 **** double u, v, x, y, z, n; ! _14_QNtoV(vec, qn); } - #define _14_VtoQN(vec) \ - x = (vec)[0]; \ - y = (vec)[1]; \ - z = (vec)[2]; \ - L = AIR_ABS(x) + AIR_ABS(y) + AIR_ABS(z); \ - if (!L) { \ - return 0; \ - } \ - x /= L; \ - y /= L; \ - if (z > 0) { \ - AIR_INDEX(-1.0, x, 1.0, 127, xi); \ - AIR_INDEX(-1.0 - 1.0/127, y, 1.0 + 1.0/127, 128, yi); \ - ui = xi + yi - 63; \ - vi = xi - yi + 64; \ - } \ - else { \ - AIR_INDEX(-1.0 - 1.0/127, x, 1.0 + 1.0/127, 128, xi); \ - AIR_INDEX(-1, y, 1, 127, yi); \ - ui = xi + yi - 63; \ - vi = xi - yi + 63; \ - } - int _limnQN14checker_VtoQN_f(float *vec) { --- 343,349 ---- double u, v, x, y, z, n; ! _EVEN_QtoV(7, vec, qn); } int _limnQN14checker_VtoQN_f(float *vec) { *************** *** 340,345 **** int xi, yi, ui, vi; ! _14_VtoQN(vec); ! return (vi << 7) | ui; } --- 351,355 ---- int xi, yi, ui, vi; ! _EVEN_VtoQ(7, vec); } *************** *** 349,373 **** int xi, yi, ui, vi; ! _14_VtoQN(vec); ! return (vi << 7) | ui; } /* ----------------------------------------------------------- */ - #define _12_QNtoV(vec, qn) \ - ui = (qn) & 0x3F; \ - vi = ((qn) >> 6) & 0x3F; \ - u = AIR_AFFINE(0, ui, 63, -0.5, 0.5); \ - v = AIR_AFFINE(0, vi, 63, -0.5, 0.5); \ - x = u + v; \ - y = u - v; \ - z = 1 - AIR_ABS(x) - AIR_ABS(y); \ - /* would this be better served by a branch? */ \ - z *= (((ui ^ vi) & 0x01) << 1) - 1; \ - n = 1.0/sqrt(x*x + y*y + z*z); \ - (vec)[0] = x*n; \ - (vec)[1] = y*n; \ - (vec)[2] = z*n - void _limnQN12checker_QNtoV_f(float *vec, int qn) { --- 359,367 ---- int xi, yi, ui, vi; ! _EVEN_VtoQ(7, vec); } /* ----------------------------------------------------------- */ void _limnQN12checker_QNtoV_f(float *vec, int qn) { *************** *** 375,379 **** double u, v, x, y, z, n; ! _12_QNtoV(vec, qn); } --- 369,373 ---- double u, v, x, y, z, n; ! _EVEN_QtoV(6, vec, qn); } *************** *** 383,412 **** double u, v, x, y, z, n; ! _12_QNtoV(vec, qn); } - #define _12_VtoQN(vec) \ - x = vec[0]; \ - y = vec[1]; \ - z = vec[2]; \ - L = AIR_ABS(x) + AIR_ABS(y) + AIR_ABS(z); \ - if (!L) { \ - return 0; \ - } \ - x /= L; \ - y /= L; \ - if (z > 0) { \ - AIR_INDEX(-1.0, x, 1.0, 63, xi); \ - AIR_INDEX(-1.0 - 1.0/63, y, 1.0 + 1.0/63, 64, yi); \ - ui = xi + yi - 31; \ - vi = xi - yi + 32; \ - } \ - else { \ - AIR_INDEX(-1.0 - 1.0/63, x, 1.0 + 1.0/63, 64, xi); \ - AIR_INDEX(-1, y, 1, 63, yi); \ - ui = xi + yi - 31; \ - vi = xi - yi + 31; \ - } - int _limnQN12checker_VtoQN_f(float *vec) { --- 377,383 ---- double u, v, x, y, z, n; ! _EVEN_QtoV(6, vec, qn); } int _limnQN12checker_VtoQN_f(float *vec) { *************** *** 414,419 **** int xi, yi, ui, vi; ! _12_VtoQN(vec); ! return (vi << 6) | ui; } --- 385,389 ---- int xi, yi, ui, vi; ! _EVEN_VtoQ(6, vec); } *************** *** 423,428 **** int xi, yi, ui, vi; ! _12_VtoQN(vec); ! return (vi << 6) | ui; } --- 393,397 ---- int xi, yi, ui, vi; ! _EVEN_VtoQ(6, vec); } *************** *** 432,441 **** limnQNtoV_f[LIMN_QN_MAX+1])(float *, int) = { NULL, - _limnQN16checker_QNtoV_f, _limnQN16simple_QNtoV_f, _limnQN16border1_QNtoV_f, _limnQN15checker_QNtoV_f, _limnQN14checker_QNtoV_f, ! _limnQN12checker_QNtoV_f }; --- 401,414 ---- limnQNtoV_f[LIMN_QN_MAX+1])(float *, int) = { NULL, _limnQN16simple_QNtoV_f, _limnQN16border1_QNtoV_f, + _limnQN16checker_QNtoV_f, _limnQN15checker_QNtoV_f, _limnQN14checker_QNtoV_f, ! _limnQN12checker_QNtoV_f, ! NULL, ! NULL, ! NULL, ! NULL, }; *************** *** 443,452 **** limnQNtoV_d[LIMN_QN_MAX+1])(double *, int) = { NULL, - _limnQN16checker_QNtoV_d, NULL, NULL, NULL, _limnQN14checker_QNtoV_d, ! _limnQN12checker_QNtoV_d }; --- 416,429 ---- limnQNtoV_d[LIMN_QN_MAX+1])(double *, int) = { NULL, NULL, NULL, + _limnQN16checker_QNtoV_d, NULL, _limnQN14checker_QNtoV_d, ! _limnQN12checker_QNtoV_d, ! NULL, ! NULL, ! NULL, ! NULL, }; *************** *** 454,463 **** limnVtoQN_f[LIMN_QN_MAX+1])(float *vec) = { NULL, - _limnQN16checker_VtoQN_f, _limnQN16simple_VtoQN_f, _limnQN16border1_VtoQN_f, _limnQN15checker_VtoQN_f, _limnQN14checker_VtoQN_f, ! _limnQN12checker_VtoQN_f }; --- 431,445 ---- limnVtoQN_f[LIMN_QN_MAX+1])(float *vec) = { NULL, _limnQN16simple_VtoQN_f, _limnQN16border1_VtoQN_f, + _limnQN16checker_VtoQN_f, _limnQN15checker_VtoQN_f, _limnQN14checker_VtoQN_f, ! NULL, ! _limnQN12checker_VtoQN_f, ! NULL, ! NULL, ! NULL, ! NULL }; *************** *** 465,474 **** limnVtoQN_d[LIMN_QN_MAX+1])(double *vec) = { NULL, - _limnQN16checker_VtoQN_d, NULL, NULL, NULL, _limnQN14checker_VtoQN_d, ! _limnQN12checker_VtoQN_d }; --- 447,461 ---- limnVtoQN_d[LIMN_QN_MAX+1])(double *vec) = { NULL, NULL, NULL, + _limnQN16checker_VtoQN_d, NULL, _limnQN14checker_VtoQN_d, ! NULL, ! _limnQN12checker_VtoQN_d, ! NULL, ! NULL, ! NULL, ! NULL }; *************** *** 478,484 **** (1 << 16), (1 << 16), (1 << 15), (1 << 14), ! (1 << 12) }; --- 465,476 ---- (1 << 16), (1 << 16), + (1 << 16), (1 << 15), (1 << 14), ! (1 << 12), ! (1 << 11), ! (1 << 10), ! (1 << 9), ! (1 << 8) }; |