37 void subVec4(
const char * a,
const char *b,
char *c) {
55 return *(
const Vec4*)point;
59 return *(
const Vec4*)point;
62 void subVec8(
const char * a,
const char *b,
char *c) {
80 pc->
col.x =
pa->col.x;
81 pc->
col.y =
pa->col.y;
82 pc->
col.z =
pa->col.z;
87 "#define MATRIX_SIZE 16\n" 89 "__kernel void getClosestPoints(const __global char* pointsA, const __global char* pointsB, __global DistanceID* distanceAcc, __local float* distances, int typeSize, int sizeA, int sizeB, int maxX) {\n" 90 " int globalX = get_global_id(0);\n" 91 " int globalY = get_global_id(1);\n" 92 " int localX = get_local_id(0);\n" 93 " int localY = get_local_id(1);\n" 94 " int localSizeX = get_local_size(0);\n" 95 " int localGroupX = get_group_id(0);\n" 96 " //calculate distance for current pair\n" 97 " distances[localY*localSizeX+localX] = FLT_MAX;\n" 98 " if(globalX < sizeB && globalY < sizeA)\n" 99 " distances[localY*localSizeX+localX] = distanceFunc(pointsB+typeSize*globalX,pointsA+typeSize*globalY);\n" 101 " //_________local_barrier______\n" 102 " barrier(CLK_LOCAL_MEM_FENCE);\n" 104 " //find closest distances in local group by letting only the last vertical line of threads in a local group calculate\n" 105 " if(localX == 0 && globalY < sizeA) {\n" 106 " int localStartX = localGroupX*localSizeX;\n" 108 " min.distance = distances[localY*localSizeX];\n" 110 " for(int k = 1; k < localSizeX; k++) {\n" 111 " float distance = distances[localY*localSizeX+k];\n" 112 " if(distance < min.distance) {\n" 113 " min.distance = distance;\n" 117 " //convert id from local to global space\n" 118 " min.id += localStartX;\n" 119 " distanceAcc[globalY*maxX+localGroupX] = min;\n" 123 "__kernel void reduceClosestPoints(__global int* closestPoints, __global DistanceID* distanceAcc, int sizeA, int widthDistanceAcc) {\n" 124 " int globalX = get_global_id(0);\n" 126 " //find closest point across all groups by letting only the last vertical line of threads calculate\n" 127 " if(globalX < sizeA) {\n" 128 " int startX = globalX*widthDistanceAcc;\n" 129 " int endX = startX+widthDistanceAcc;\n" 130 " DistanceID min = distanceAcc[startX];\n" 131 " for(int k = startX+1; k < endX; k++) {\n" 132 " DistanceID point = distanceAcc[k];\n" 133 " if(point.distance < min.distance) {\n" 137 " closestPoints[globalX] = min.id;\n" 141 "__kernel void getClosestPointsInDB(const __global char* pointsA, const __global int* closestReps, const __global char* pointsB, const __global int* pointsDB, const __global int* counters, __global int* closestPoints, __global DistanceID* distanceAcc, __local float* distances, int typeSize, int sizeA, int widthDB, int maxX) {\n" 142 " int globalX = get_global_id(0);\n" 143 " int globalY = get_global_id(1);\n" 144 " int localX = get_local_id(0);\n" 145 " int localY = get_local_id(1);\n" 146 " int localSizeX = get_local_size(0);\n" 147 " int localGroupX = get_group_id(0);\n" 149 " //calculate distance for current pair\n" 150 " distances[localY*localSizeX+localX] = FLT_MAX;\n" 152 " if(globalY < sizeA)maxWidth = min(widthDB,counters[closestReps[globalY]]);\n" 153 " if(globalY < sizeA && globalX < maxWidth)\n" 154 " distances[localY*localSizeX+localX] = distanceFunc(pointsB+typeSize*pointsDB[closestReps[globalY]*widthDB+globalX],pointsA+typeSize*globalY);\n" 157 " //_________local_barrier______\n" 158 " barrier(CLK_LOCAL_MEM_FENCE);\n" 161 " //find closest distances in local group by letting only the first vertical line of threads in a local group calculate\n" 162 " if(localX == 0 && globalY < sizeA) {\n" 163 " int localStartX = localGroupX*localSizeX;\n" 165 " min.distance = distances[localY*localSizeX];\n" 167 " for(int k = 1; k < localSizeX; k++) {\n" 168 " float distance = distances[localY*localSizeX+k];\n" 169 " if(distance < min.distance) {\n" 170 " min.distance = distance;\n" 174 " //convert id from local to global space\n" 175 " min.id = pointsDB[closestReps[globalY]*widthDB+(min.id+localStartX)];\n" 176 " distanceAcc[globalY*maxX+localGroupX] = min;\n" 181 "__kernel void initMemory(__global char* mem, int size) {\n" 182 " if(get_global_id(0) == 0) {\n" 183 " for(int i = 0; i < size; i++)mem[i] = 0;\n" 187 "__kernel void buildRepDB(const __global char* points, const __global int* closestReps, __global int* counters, __global int* repDataBase, int repWidth, int typeSize, int sizePoints, int sizeReps) {\n" 188 " int globalX = get_global_id(0);\n" 189 " int localX = get_local_id(0);\n" 190 " int localSizeX = get_local_size(0);\n" 191 " int localGroupX = get_group_id(0);\n" 193 " if(globalX < sizePoints) {\n" 194 " int rep = closestReps[globalX];\n" 195 " int pos = atomic_inc(counters+rep);\n" 196 " //check if the there are to many neighbours\n" 197 " if(pos < repWidth) {\n" 198 " repDataBase[repWidth*rep+pos] = globalX;\n" 203 "__kernel void rotatePoints(const __global char* points, __global char* pointsRotated, const __global float* rotationMatrix, int typeSize, int sizePoints) {\n" 204 " int globalX = get_global_id(0);\n" 205 " if(globalX < sizePoints) {\n" 206 " int offset = typeSize*globalX;\n" 207 " matrixMultiply(points+offset, pointsRotated+offset, rotationMatrix);\n" 211 "__kernel void getError(const __global char* pointsA, const __global char* pointsB, const __global int* closestPoints, __global float* errors, int typeSize, int sizeA) {\n" 212 " int globalX = get_global_id(0);\n" 213 " if(globalX < sizeA)errors[globalX] = distanceFunc(pointsA+globalX*typeSize,pointsB+closestPoints[globalX]*typeSize);\n" 216 "__kernel void collectError(const __global float* in, __global float* out, __local float* scratch, int length) {\n" 217 " int global_index = get_global_id(0);\n" 218 " int local_index = get_local_id(0);\n" 219 " if (global_index < length) {\n" 220 " scratch[local_index] = in[global_index];\n" 222 " scratch[local_index] = 0;\n" 224 " barrier(CLK_LOCAL_MEM_FENCE);\n" 225 " for(int offset = get_local_size(0) / 2;\n" 228 " if (local_index < offset) {\n" 229 " float other = scratch[local_index + offset];\n" 230 " float mine = scratch[local_index];\n" 231 " scratch[local_index] = mine+other;\n" 233 " barrier(CLK_LOCAL_MEM_FENCE);\n" 235 " if (local_index == 0) {\n" 236 " out[get_group_id(0)] = scratch[0];\n" 241 "__kernel void getCovarianceSum(const __global char* pointsA, const __global char* pointsB, const __global int* closestPoints, __global float* covariances, int typeSize, int sizeA) {\n" 242 " int globalX = get_global_id(0);\n" 243 " if(globalX < sizeA) getCovariance(pointsA+globalX*typeSize,pointsB+closestPoints[globalX]*typeSize,covariances+globalX*MATRIX_SIZE);\n" 246 "__kernel void collectCovarianceSum(const __global float* in, __global float* out, __local float* scratch, int length) {\n" 247 " int global_index = get_global_id(0);\n" 248 " int local_index = get_local_id(0);\n" 249 " if (global_index < length) {\n" 250 " for(int i = 0; i < MATRIX_SIZE; i++)\n" 251 " scratch[local_index*MATRIX_SIZE+i] = in[global_index*MATRIX_SIZE+i];\n" 253 " for(int i = 0; i < MATRIX_SIZE; i++)\n" 254 " scratch[local_index*MATRIX_SIZE+i] = 0;\n" 256 " barrier(CLK_LOCAL_MEM_FENCE);\n" 257 " for(int offset = get_local_size(0) / 2;\n" 260 " if (local_index < offset) {\n" 261 " for(int i = 0; i < MATRIX_SIZE; i++) {\n" 262 " float other = scratch[(local_index + offset)*MATRIX_SIZE+i];\n" 263 " float mine = scratch[local_index*MATRIX_SIZE+i];\n" 264 " scratch[local_index*MATRIX_SIZE+i] = mine+other;\n" 267 " barrier(CLK_LOCAL_MEM_FENCE);\n" 269 " if (local_index == 0) {\n" 270 " for(int i = 0; i < MATRIX_SIZE; i++)\n" 271 " out[get_group_id(0)*MATRIX_SIZE+i] = scratch[i];\n" 275 "__kernel void sumPoints(const __global char* in, __global char* out, __local char* scratch, int typeSize, int length) {\n" 276 " int global_index = get_global_id(0);\n" 277 " int local_index = get_local_id(0);\n" 278 " int local_size = get_local_size(0);\n" 280 " if (global_index < length) {\n" 281 " for(int i = 0; i < typeSize; i++)\n" 282 " scratch[local_index*typeSize+i] = in[global_index*typeSize+i];\n" 284 " neutralElement_local(scratch+local_index*typeSize);\n" 286 " barrier(CLK_LOCAL_MEM_FENCE);\n" 287 " for(int offset = get_local_size(0) / 2;\n" 290 " if (local_index < offset) {\n" 291 " add_local(scratch+(local_index + offset)*typeSize,scratch+local_index*typeSize,scratch+local_index*typeSize);\n" 293 " barrier(CLK_LOCAL_MEM_FENCE);\n" 295 " if (local_index == 0) {\n" 296 " for(int i = 0; i < typeSize; i++)\n" 297 " out[get_group_id(0)*typeSize+i] = scratch[i];\n" 301 "__kernel void mulPoints(const __global char* in, __global char* out, float v, int typeSize, int length) {\n" 302 " int globalX = get_global_id(0);\n" 303 " if(globalX<length)mul_global(in+globalX*typeSize,v,out+globalX*typeSize);\n" 306 "__kernel void subPoints(const __global char* in, const __global char* v, __global char* out, int typeSize, int length) {\n" 307 " int globalX = get_global_id(0);\n" 308 " if(globalX< length)sub_global(in+globalX*typeSize,v,out+globalX*typeSize);\n" 312 "typedef struct Vec4_t{\n" 319 "typedef struct DistanceID_t {\n" 324 "void add(const char * a, const char *b, char * c) {\n" 325 " const Vec4* pa = (const Vec4*)a;\n" 326 " const Vec4* pb = (const Vec4*)b;\n" 327 " Vec4* pc = (Vec4*)c;\n" 328 " pc->x = pa->x+pb->x;\n" 329 " pc->y = pa->y+pb->y;\n" 330 " pc->z = pa->z+pb->z;\n" 333 "void add_global(const __global char * a, const __global char *b, __global char * c) {\n" 334 " const __global Vec4* pa = (const __global Vec4*)a;\n" 335 " const __global Vec4* pb = (const __global Vec4*)b;\n" 336 " __global Vec4* pc = (__global Vec4*)c;\n" 337 " pc->x = pa->x+pb->x;\n" 338 " pc->y = pa->y+pb->y;\n" 339 " pc->z = pa->z+pb->z;\n" 343 "void add_local(const __local char * a, const __local char *b, __local char * c) {\n" 344 "// const __local Vec4* pa = (const __local Vec4*)a;\n" 345 "// const __local Vec4* pb = (const __local Vec4*)b;\n" 346 "// __local Vec4* pc = (__local Vec4*)c;\n" 347 "// pc->x = pa->x+pb->x;\n" 348 "// pc->y = pa->y+pb->y;\n" 349 "// pc->z = pa->z+pb->z;\n" 354 " for(int i = 0; i < 16; i++) {\n" 359 " for(int i = 0; i < 16; i++) {\n" 364 "void sub_global(const __global char * a, const __global char *b, __global char * c) {\n" 365 " const __global Vec4* pa = (const __global Vec4*)a;\n" 366 " const __global Vec4* pb = (const __global Vec4*)b;\n" 367 " __global Vec4* pc = (__global Vec4*)c;\n" 368 " pc->x = pa->x-pb->x;\n" 369 " pc->y = pa->y-pb->y;\n" 370 " pc->z = pa->z-pb->z;\n" 374 "void sub_local(const __local char * a, const __local char *b, __local char * c) {\n" 375 " const __local Vec4* pa = (const __local Vec4*)a;\n" 376 " const __local Vec4* pb = (const __local Vec4*)b;\n" 377 " __local Vec4* pc = (__local Vec4*)c;\n" 378 " pc->x = pa->x-pb->x;\n" 379 " pc->y = pa->y-pb->y;\n" 380 " pc->z = pa->z-pb->z;\n" 384 "void mul_global(const __global char * a, float b, __global char * c) {\n" 385 " const __global Vec4* pa = (const __global Vec4*)a;\n" 386 " __global Vec4* pc = (__global Vec4*)c;\n" 387 " pc->x = pa->x*b;\n" 388 " pc->y = pa->y*b;\n" 389 " pc->z = pa->z*b;\n" 393 "void mul_local(const __local char * a, float b, __local char * c) {\n" 394 " const __local Vec4* pa = (const __local Vec4*)a;\n" 395 " __local Vec4* pc = (__local Vec4*)c;\n" 396 " pc->x = pa->x*b;\n" 397 " pc->y = pa->y*b;\n" 398 " pc->z = pa->z*b;\n" 403 "void neutralElement(char* e) {\n" 404 " Vec4* pe = (Vec4*)e;\n" 411 "void neutralElement_global(__global char* e) {\n" 412 " __global Vec4* pe = (__global Vec4*)e;\n" 419 "void neutralElement_local(__local char* e) {\n" 420 "// __local Vec4* pe = (__local Vec4*)e;\n" 426 " neutralElement(elem);\n" 427 " for(int i = 0; i < 16; i++) {\n" 433 "float distanceFunc(const __global char * a, const __global char *b) {\n" 434 " const __global Vec4* pa = (const __global Vec4*)a;\n" 435 " const __global Vec4* pb = (const __global Vec4*)b;\n" 437 " dist.x = pa->x-pb->x;\n" 438 " dist.y = pa->y-pb->y;\n" 439 " dist.z = pa->z-pb->z;\n" 440 " return sqrt(dist.x*dist.x+dist.y*dist.y+dist.z*dist.z);\n" 443 "void getCovariance(const __global char * a, const __global char *b, __global float* h) {\n" 444 " const __global Vec4* pa = (const __global Vec4*)a;\n" 445 " const __global Vec4* pb = (const __global Vec4*)b;\n" 446 " h[0] = pa->x*pb->x;\n" 447 " h[1] = pa->x*pb->y;\n" 448 " h[2] = pa->x*pb->z;\n" 451 " h[4] = pa->y*pb->x;\n" 452 " h[5] = pa->y*pb->y;\n" 453 " h[6] = pa->y*pb->z;\n" 456 " h[8] = pa->z*pb->x;\n" 457 " h[9] = pa->z*pb->y;\n" 458 " h[10] = pa->z*pb->z;\n" 468 "void matrixMultiply(const __global char * a, char __global *b, const __global float* m) {\n" 469 " const __global Vec4* pa = (const __global Vec4*)a;\n" 470 " __global Vec4* pb = (__global Vec4*)b;\n" 471 " pb->x = m[0]*pa->x+m[1]*pa->y+m[2]*pa->z+m[3]*pa->w;\n" 472 " pb->y = m[4]*pa->x+m[5]*pa->y+m[6]*pa->z+m[7]*pa->w;\n" 473 " pb->z = m[8]*pa->x+m[9]*pa->y+m[10]*pa->z+m[11]*pa->w;\n" 474 " pb->w = m[12]*pa->x+m[13]*pa->y+m[14]*pa->z+m[15]*pa->w;\n" 478 "typedef struct Vec4_t{\n" 485 "typedef struct Vec8_t{\n" 490 "typedef struct DistanceID_t {\n" 495 "void add(const char * a, const char *b, char * c) {\n" 496 " const Vec8* pa = (const Vec8*)a;\n" 497 " const Vec8* pb = (const Vec8*)b;\n" 498 " Vec8* pc = (Vec8*)c;\n" 499 " pc->pos.x = pa->pos.x+pb->pos.x;\n" 500 " pc->pos.y = pa->pos.y+pb->pos.y;\n" 501 " pc->pos.z = pa->pos.z+pb->pos.z;\n" 503 " pc->col.x = pa->col.x;\n" 504 " pc->col.y = pa->col.y;\n" 505 " pc->col.z = pa->col.z;\n" 509 "void add_global(const __global char * a, const __global char *b, __global char * c) {\n" 510 " const __global Vec8* pa = (const __global Vec8*)a;\n" 511 " const __global Vec8* pb = (const __global Vec8*)b;\n" 512 " __global Vec8* pc = (__global Vec8*)c;\n" 513 " pc->pos.x = pa->pos.x+pb->pos.x;\n" 514 " pc->pos.y = pa->pos.y+pb->pos.y;\n" 515 " pc->pos.z = pa->pos.z+pb->pos.z;\n" 517 " pc->col.x = pa->col.x;\n" 518 " pc->col.y = pa->col.y;\n" 519 " pc->col.z = pa->col.z;\n" 523 "void add_local(const __local char * a, const __local char *b, __local char * c) {\n" 524 "// const __local Vec8* pa = (const __local Vec8*)a;\n" 525 "// const __local Vec8* pb = (const __local Vec8*)b;\n" 526 "// __local Vec8* pc = (__local Vec8*)c;\n" 527 "// pc->pos.x = pa->pos.x+pb->pos.x;\n" 528 "// pc->pos.y = pa->pos.y+pb->pos.y;\n" 529 "// pc->pos.z = pa->pos.z+pb->pos.z;\n" 530 "// pc->pos.w = 1;\n" 531 "// pc->col.x = pa->col.x;\n" 532 "// pc->col.y = pa->col.y;\n" 533 "// pc->col.z = pa->col.z;\n" 534 "// pc->col.w = 1;\n" 539 " for(int i = 0; i < 32; i++) {\n" 544 " for(int i = 0; i < 32; i++) {\n" 549 "void sub_global(const __global char * a, const __global char *b, __global char * c) {\n" 550 " const __global Vec8* pa = (const __global Vec8*)a;\n" 551 " const __global Vec8* pb = (const __global Vec8*)b;\n" 552 " __global Vec8* pc = (__global Vec8*)c;\n" 553 " pc->pos.x = pa->pos.x-pb->pos.x;\n" 554 " pc->pos.y = pa->pos.y-pb->pos.y;\n" 555 " pc->pos.z = pa->pos.z-pb->pos.z;\n" 557 " pc->col.x = pa->col.x;\n" 558 " pc->col.y = pa->col.y;\n" 559 " pc->col.z = pa->col.z;\n" 563 "void sub_local(const __local char * a, const __local char *b, __local char * c) {\n" 564 " const __local Vec8* pa = (const __local Vec8*)a;\n" 565 " const __local Vec8* pb = (const __local Vec8*)b;\n" 566 " __local Vec8* pc = (__local Vec8*)c;\n" 567 " pc->pos.x = pa->pos.x-pb->pos.x;\n" 568 " pc->pos.y = pa->pos.y-pb->pos.y;\n" 569 " pc->pos.z = pa->pos.z-pb->pos.z;\n" 571 " pc->col.x = pa->col.x;\n" 572 " pc->col.y = pa->col.y;\n" 573 " pc->col.z = pa->col.z;\n" 577 "void mul_global(const __global char * a, float b, __global char * c) {\n" 578 " const __global Vec8* pa = (const __global Vec8*)a;\n" 579 " __global Vec8* pc = (__global Vec8*)c;\n" 580 " pc->pos.x = pa->pos.x*b;\n" 581 " pc->pos.y = pa->pos.y*b;\n" 582 " pc->pos.z = pa->pos.z*b;\n" 583 " pc->pos.w = pa->pos.w;\n" 584 " pc->col.x = pa->col.x;\n" 585 " pc->col.y = pa->col.y;\n" 586 " pc->col.z = pa->col.z;\n" 590 "void mul_local(const __local char * a, float b, __local char * c) {\n" 591 " const __local Vec8* pa = (const __local Vec8*)a;\n" 592 " __local Vec8* pc = (__local Vec8*)c;\n" 593 " pc->pos.x = pa->pos.x*b;\n" 594 " pc->pos.y = pa->pos.y*b;\n" 595 " pc->pos.z = pa->pos.z*b;\n" 596 " pc->pos.w = pa->pos.w;\n" 597 " pc->col.x = pa->col.x;\n" 598 " pc->col.y = pa->col.y;\n" 599 " pc->col.z = pa->col.z;\n" 604 "void neutralElement(char* e) {\n" 605 " Vec8* pe = (Vec8*)e;\n" 616 "void neutralElement_global(__global char* e) {\n" 617 " __global Vec8* pe = (__global Vec8*)e;\n" 628 "void neutralElement_local(__local char* e) {\n" 629 "// __local Vec8* pe = (__local Vec8*)e;\n" 630 "// pe->pos.x = 0;\n" 631 "// pe->pos.y = 0;\n" 632 "// pe->pos.z = 0;\n" 633 "// pe->pos.w = 1;\n" 634 "// pe->col.x = 0;\n" 635 "// pe->col.y = 0;\n" 636 "// pe->col.z = 0;\n" 637 "// pe->col.w = 1;\n" 639 " neutralElement(elem);\n" 640 " for(int i = 0; i < 32; i++) {\n" 646 "float distanceFunc(const __global char * a, const __global char *b) {\n" 647 " const __global Vec8* pa = (const __global Vec8*)a;\n" 648 " const __global Vec8* pb = (const __global Vec8*)b;\n" 650 " dist.pos.x = pa->pos.x-pb->pos.x;\n" 651 " dist.pos.y = pa->pos.y-pb->pos.y;\n" 652 " dist.pos.z = pa->pos.z-pb->pos.z;\n" 653 " dist.col.x = pa->pos.x-pb->col.x;\n" 654 " dist.col.y = pa->pos.y-pb->col.y;\n" 655 " dist.col.z = pa->pos.z-pb->col.z;\n" 656 " return sqrt(dist.pos.x*dist.pos.x+dist.pos.y*dist.pos.y+dist.pos.z*dist.pos.z+dist.col.x*dist.col.x+dist.col.y*dist.col.y+dist.col.z*dist.col.z);\n" 659 "void getCovariance(const __global char * a, const __global char *b, __global float* h) {\n" 660 " const __global Vec8* pa = (const __global Vec8*)a;\n" 661 " const __global Vec8* pb = (const __global Vec8*)b;\n" 662 " h[0] = pa->pos.x*pb->pos.x;\n" 663 " h[1] = pa->pos.x*pb->pos.y;\n" 664 " h[2] = pa->pos.x*pb->pos.z;\n" 667 " h[4] = pa->pos.y*pb->pos.x;\n" 668 " h[5] = pa->pos.y*pb->pos.y;\n" 669 " h[6] = pa->pos.y*pb->pos.z;\n" 672 " h[8] = pa->pos.z*pb->pos.x;\n" 673 " h[9] = pa->pos.z*pb->pos.y;\n" 674 " h[10] = pa->pos.z*pb->pos.z;\n" 684 "void matrixMultiply(const __global char * a, char __global *b, const __global float* m) {\n" 685 " const __global Vec8* pa = (const __global Vec8*)a;\n" 686 " __global Vec8* pb = (__global Vec8*)b;\n" 687 " pb->pos.x = m[0]*pa->pos.x+m[1]*pa->pos.y+m[2]*pa->pos.z+m[3]*pa->pos.w;\n" 688 " pb->pos.y = m[4]*pa->pos.x+m[5]*pa->pos.y+m[6]*pa->pos.z+m[7]*pa->pos.w;\n" 689 " pb->pos.z = m[8]*pa->pos.x+m[9]*pa->pos.y+m[10]*pa->pos.z+m[11]*pa->pos.w;\n" 690 " pb->pos.w = m[12]*pa->pos.x+m[13]*pa->pos.y+m[14]*pa->pos.z+m[15]*pa->pos.w;\n" const std::string IterativeClosestPointTypeCodeVec8
Definition: IterativeClosestPointCLCode.h:477
undocument this line if you encounter any issues!
Definition: Any.h:37
const std::string IterativeClosestPointTypeCodeVec4
Definition: IterativeClosestPointCLCode.h:311
void subVec4(const char *a, const char *b, char *c)
Definition: IterativeClosestPointCLCode.h:37
Vec4 toVectorVec4(const char *point)
Definition: IterativeClosestPointCLCode.h:54
Definition: IterativeClosestPoint.h:36
const ProgArg pa(const std::string &id, unsigned int subargidx=0)
returns given program argument
Definition: ProgArg.h:304
const std::string IterativeClosestPointKernelCode
Definition: IterativeClosestPointCLCode.h:86
void subVec8(const char *a, const char *b, char *c)
Definition: IterativeClosestPointCLCode.h:62
Vec4 toVectorVec8(const char *point)
Definition: IterativeClosestPointCLCode.h:58
math::Vec4 pos
Definition: IterativeClosestPoint.h:37
math::Vec4 col
Definition: IterativeClosestPoint.h:38