{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.cbwa3CiQ/b1/opensubdiv_3.5.0-2.1_arm64.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.cbwa3CiQ/b2/opensubdiv_3.5.0-2.1_arm64.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,9 +1,9 @@\n \n 586e058538ecda783c7cff3fe99f3fc4 144000 libdevel optional libosd-dev_3.5.0-2.1_arm64.deb\n- 23319a6e892e449c235ec02f9c829103 31489156 doc optional libosd-doc_3.5.0-2.1_all.deb\n+ 06230c48823d0187d4929cf4c3e8f1d6 31489220 doc optional libosd-doc_3.5.0-2.1_all.deb\n 2f0620089b0a809f06f3910e0cb26945 3444244 debug optional libosdcpu3.5.0t64-dbgsym_3.5.0-2.1_arm64.deb\n 724f814a741500e9ae30a7b7930aceeb 291176 libs optional libosdcpu3.5.0t64_3.5.0-2.1_arm64.deb\n da88d6b7b5185e335b966e0da17ad4e7 534308 debug optional libosdgpu3.5.0t64-dbgsym_3.5.0-2.1_arm64.deb\n 7f8453c64fbe051edb7f23be6293fdd5 132540 libs optional libosdgpu3.5.0t64_3.5.0-2.1_arm64.deb\n 37ba3e3bfece1bfd08aa686e07dc51be 12005592 debug optional opensubdiv-tools-dbgsym_3.5.0-2.1_arm64.deb\n 2c842509300f2cb7379d7834c1f521d0 565520 graphics optional opensubdiv-tools_3.5.0-2.1_arm64.deb\n"}, {"source1": "libosd-doc_3.5.0-2.1_all.deb", "source2": "libosd-doc_3.5.0-2.1_all.deb", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -1,3 +1,3 @@\n -rw-r--r-- 0 0 0 4 2024-02-29 12:58:19.000000 debian-binary\n--rw-r--r-- 0 0 0 25440 2024-02-29 12:58:19.000000 control.tar.xz\n--rw-r--r-- 0 0 0 31463524 2024-02-29 12:58:19.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 25420 2024-02-29 12:58:19.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 31463608 2024-02-29 12:58:19.000000 data.tar.xz\n"}, {"source1": "control.tar.xz", "source2": "control.tar.xz", "unified_diff": null, "details": [{"source1": "control.tar", "source2": "control.tar", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "comments": ["Files differ"], "unified_diff": null}, {"source1": "line order", "source2": "line order", "unified_diff": "@@ -102,46 +102,46 @@\n usr/share/doc/opensubdiv/doxy_html/a00755.html\n usr/share/doc/opensubdiv/doxy_html/a00755_source.html\n usr/share/doc/opensubdiv/doxy_html/a00758.html\n usr/share/doc/opensubdiv/doxy_html/a00758_source.html\n usr/share/doc/opensubdiv/doxy_html/a00761.html\n usr/share/doc/opensubdiv/doxy_html/a00761_source.html\n usr/share/doc/opensubdiv/doxy_html/a00764.html\n+usr/share/doc/opensubdiv/doxy_html/a00764.js\n usr/share/doc/opensubdiv/doxy_html/a00764_source.html\n usr/share/doc/opensubdiv/doxy_html/a00767.html\n-usr/share/doc/opensubdiv/doxy_html/a00767.js\n usr/share/doc/opensubdiv/doxy_html/a00767_source.html\n usr/share/doc/opensubdiv/doxy_html/a00770.html\n usr/share/doc/opensubdiv/doxy_html/a00770.js\n usr/share/doc/opensubdiv/doxy_html/a00770_source.html\n usr/share/doc/opensubdiv/doxy_html/a00773.html\n usr/share/doc/opensubdiv/doxy_html/a00773.js\n usr/share/doc/opensubdiv/doxy_html/a00773_source.html\n usr/share/doc/opensubdiv/doxy_html/a00776.html\n usr/share/doc/opensubdiv/doxy_html/a00776_source.html\n usr/share/doc/opensubdiv/doxy_html/a00779.html\n-usr/share/doc/opensubdiv/doxy_html/a00779.js\n usr/share/doc/opensubdiv/doxy_html/a00779_source.html\n usr/share/doc/opensubdiv/doxy_html/a00782.html\n+usr/share/doc/opensubdiv/doxy_html/a00782.js\n usr/share/doc/opensubdiv/doxy_html/a00782_source.html\n usr/share/doc/opensubdiv/doxy_html/a00785.html\n usr/share/doc/opensubdiv/doxy_html/a00785_source.html\n usr/share/doc/opensubdiv/doxy_html/a00788.html\n usr/share/doc/opensubdiv/doxy_html/a00788.js\n usr/share/doc/opensubdiv/doxy_html/a00788_source.html\n usr/share/doc/opensubdiv/doxy_html/a00791.html\n usr/share/doc/opensubdiv/doxy_html/a00791.js\n usr/share/doc/opensubdiv/doxy_html/a00791_source.html\n usr/share/doc/opensubdiv/doxy_html/a00794.html\n usr/share/doc/opensubdiv/doxy_html/a00794.js\n usr/share/doc/opensubdiv/doxy_html/a00794_source.html\n usr/share/doc/opensubdiv/doxy_html/a00797.html\n+usr/share/doc/opensubdiv/doxy_html/a00797.js\n usr/share/doc/opensubdiv/doxy_html/a00797_source.html\n usr/share/doc/opensubdiv/doxy_html/a00800.html\n-usr/share/doc/opensubdiv/doxy_html/a00800.js\n usr/share/doc/opensubdiv/doxy_html/a00800_source.html\n usr/share/doc/opensubdiv/doxy_html/a00803.html\n usr/share/doc/opensubdiv/doxy_html/a00803.js\n usr/share/doc/opensubdiv/doxy_html/a00803_source.html\n usr/share/doc/opensubdiv/doxy_html/a00806.html\n usr/share/doc/opensubdiv/doxy_html/a00806.js\n usr/share/doc/opensubdiv/doxy_html/a00806_source.html\n"}]}]}, {"source1": "xz --list", "source2": "xz --list", "unified_diff": "@@ -1,13 +1,13 @@\n Streams: 1\n Blocks: 1\n- Compressed size: 24.8 KiB (25440 B)\n+ Compressed size: 24.8 KiB (25420 B)\n Uncompressed size: 100.0 KiB (102400 B)\n Ratio: 0.248\n Check: CRC64\n Stream Padding: 0 B\n Streams:\n Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding\n- 1 1 0 0 25440 102400 0.248 CRC64 0\n+ 1 1 0 0 25420 102400 0.248 CRC64 0\n Blocks:\n Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check\n- 1 1 12 0 25404 102400 0.248 CRC64\n+ 1 1 12 0 25384 102400 0.248 CRC64\n"}]}, {"source1": "data.tar.xz", "source2": "data.tar.xz", "unified_diff": null, "details": [{"source1": "data.tar", "source2": "data.tar", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -27,218 +27,218 @@\n -rw-r--r-- 0 root (0) root (0) 1660 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/css/doxy.css\n -rw-r--r-- 0 root (0) root (0) 27698 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/css/flavor.css\n -rw-r--r-- 0 root (0) root (0) 5321 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/css/pygments.css\n -rw-r--r-- 0 root (0) root (0) 3011 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/css/renderman-university.css\n -rw-r--r-- 0 root (0) root (0) 12971 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/css/rst.css\n -rw-r--r-- 0 root (0) root (0) 14490 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/downloads.html\n drwxr-xr-x 0 root (0) root (0) 0 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/\n--rw-r--r-- 0 root (0) root (0) 6576 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00674.html\n--rw-r--r-- 0 root (0) root (0) 69 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00674.js\n--rw-r--r-- 0 root (0) root (0) 76687 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00674_source.html\n--rw-r--r-- 0 root (0) root (0) 7385 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00677.html\n--rw-r--r-- 0 root (0) root (0) 109 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00677.js\n--rw-r--r-- 0 root (0) root (0) 65516 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00677_source.html\n--rw-r--r-- 0 root (0) root (0) 6558 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00680.html\n--rw-r--r-- 0 root (0) root (0) 78 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00680.js\n--rw-r--r-- 0 root (0) root (0) 35228 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00680_source.html\n--rw-r--r-- 0 root (0) root (0) 7311 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00683.html\n--rw-r--r-- 0 root (0) root (0) 195 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00683.js\n--rw-r--r-- 0 root (0) root (0) 27167 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00683_source.html\n+-rw-r--r-- 0 root (0) root (0) 7385 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00674.html\n+-rw-r--r-- 0 root (0) root (0) 109 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00674.js\n+-rw-r--r-- 0 root (0) root (0) 65516 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00674_source.html\n+-rw-r--r-- 0 root (0) root (0) 6576 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00677.html\n+-rw-r--r-- 0 root (0) root (0) 69 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00677.js\n+-rw-r--r-- 0 root (0) root (0) 76687 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00677_source.html\n+-rw-r--r-- 0 root (0) root (0) 7311 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00680.html\n+-rw-r--r-- 0 root (0) root (0) 195 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00680.js\n+-rw-r--r-- 0 root (0) root (0) 27167 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00680_source.html\n+-rw-r--r-- 0 root (0) root (0) 6558 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00683.html\n+-rw-r--r-- 0 root (0) root (0) 78 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00683.js\n+-rw-r--r-- 0 root (0) root (0) 35228 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00683_source.html\n -rw-r--r-- 0 root (0) root (0) 7504 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00686.html\n -rw-r--r-- 0 root (0) root (0) 111 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00686.js\n -rw-r--r-- 0 root (0) root (0) 88831 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00686_source.html\n -rw-r--r-- 0 root (0) root (0) 7075 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00689.html\n -rw-r--r-- 0 root (0) root (0) 120 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00689.js\n -rw-r--r-- 0 root (0) root (0) 75919 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00689_source.html\n -rw-r--r-- 0 root (0) root (0) 7765 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00692.html\n -rw-r--r-- 0 root (0) root (0) 150 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00692.js\n -rw-r--r-- 0 root (0) root (0) 40418 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00692_source.html\n--rw-r--r-- 0 root (0) root (0) 6436 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00695.html\n--rw-r--r-- 0 root (0) root (0) 69 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00695.js\n--rw-r--r-- 0 root (0) root (0) 45702 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00695_source.html\n--rw-r--r-- 0 root (0) root (0) 6387 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00698.html\n--rw-r--r-- 0 root (0) root (0) 55 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00698.js\n--rw-r--r-- 0 root (0) root (0) 14299 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00698_source.html\n+-rw-r--r-- 0 root (0) root (0) 6387 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00695.html\n+-rw-r--r-- 0 root (0) root (0) 55 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00695.js\n+-rw-r--r-- 0 root (0) root (0) 14299 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00695_source.html\n+-rw-r--r-- 0 root (0) root (0) 6436 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00698.html\n+-rw-r--r-- 0 root (0) root (0) 69 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00698.js\n+-rw-r--r-- 0 root (0) root (0) 45702 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00698_source.html\n -rw-r--r-- 0 root (0) root (0) 7837 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00704.html\n -rw-r--r-- 0 root (0) root (0) 190 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00704.js\n -rw-r--r-- 0 root (0) root (0) 147347 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00704_source.html\n -rw-r--r-- 0 root (0) root (0) 8007 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00707.html\n -rw-r--r-- 0 root (0) root (0) 171 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00707.js\n -rw-r--r-- 0 root (0) root (0) 74098 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00707_source.html\n--rw-r--r-- 0 root (0) root (0) 7136 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00710.html\n--rw-r--r-- 0 root (0) root (0) 119 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00710.js\n--rw-r--r-- 0 root (0) root (0) 38039 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00710_source.html\n--rw-r--r-- 0 root (0) root (0) 6698 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00713.html\n--rw-r--r-- 0 root (0) root (0) 66 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00713.js\n--rw-r--r-- 0 root (0) root (0) 66668 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00713_source.html\n+-rw-r--r-- 0 root (0) root (0) 6698 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00710.html\n+-rw-r--r-- 0 root (0) root (0) 66 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00710.js\n+-rw-r--r-- 0 root (0) root (0) 66668 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00710_source.html\n+-rw-r--r-- 0 root (0) root (0) 7136 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00713.html\n+-rw-r--r-- 0 root (0) root (0) 119 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00713.js\n+-rw-r--r-- 0 root (0) root (0) 38039 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00713_source.html\n -rw-r--r-- 0 root (0) root (0) 9468 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00716.html\n -rw-r--r-- 0 root (0) root (0) 404 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00716.js\n -rw-r--r-- 0 root (0) root (0) 84414 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00716_source.html\n -rw-r--r-- 0 root (0) root (0) 9923 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00719.html\n -rw-r--r-- 0 root (0) root (0) 456 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00719.js\n -rw-r--r-- 0 root (0) root (0) 177059 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00719_source.html\n -rw-r--r-- 0 root (0) root (0) 6563 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00722.html\n -rw-r--r-- 0 root (0) root (0) 64 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00722.js\n -rw-r--r-- 0 root (0) root (0) 19420 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00722_source.html\n -rw-r--r-- 0 root (0) root (0) 8223 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00725.html\n -rw-r--r-- 0 root (0) root (0) 130 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00725.js\n -rw-r--r-- 0 root (0) root (0) 212261 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00725_source.html\n--rw-r--r-- 0 root (0) root (0) 7336 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00728.html\n--rw-r--r-- 0 root (0) root (0) 111 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00728.js\n--rw-r--r-- 0 root (0) root (0) 159214 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00728_source.html\n--rw-r--r-- 0 root (0) root (0) 7813 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00731.html\n--rw-r--r-- 0 root (0) root (0) 163 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00731.js\n--rw-r--r-- 0 root (0) root (0) 67819 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00731_source.html\n+-rw-r--r-- 0 root (0) root (0) 7813 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00728.html\n+-rw-r--r-- 0 root (0) root (0) 163 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00728.js\n+-rw-r--r-- 0 root (0) root (0) 67819 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00728_source.html\n+-rw-r--r-- 0 root (0) root (0) 7336 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00731.html\n+-rw-r--r-- 0 root (0) root (0) 111 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00731.js\n+-rw-r--r-- 0 root (0) root (0) 159214 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00731_source.html\n -rw-r--r-- 0 root (0) root (0) 6745 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00734.html\n -rw-r--r-- 0 root (0) root (0) 103 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00734.js\n -rw-r--r-- 0 root (0) root (0) 42247 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00734_source.html\n -rw-r--r-- 0 root (0) root (0) 8124 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00737.html\n -rw-r--r-- 0 root (0) root (0) 314 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00737.js\n -rw-r--r-- 0 root (0) root (0) 50494 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00737_source.html\n--rw-r--r-- 0 root (0) root (0) 7304 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00740.html\n--rw-r--r-- 0 root (0) root (0) 160 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00740.js\n--rw-r--r-- 0 root (0) root (0) 53848 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00740_source.html\n--rw-r--r-- 0 root (0) root (0) 11427 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00743.html\n--rw-r--r-- 0 root (0) root (0) 1173 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00743.js\n--rw-r--r-- 0 root (0) root (0) 22911 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00743_source.html\n+-rw-r--r-- 0 root (0) root (0) 11427 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00740.html\n+-rw-r--r-- 0 root (0) root (0) 1173 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00740.js\n+-rw-r--r-- 0 root (0) root (0) 22911 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00740_source.html\n+-rw-r--r-- 0 root (0) root (0) 7304 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00743.html\n+-rw-r--r-- 0 root (0) root (0) 160 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00743.js\n+-rw-r--r-- 0 root (0) root (0) 53848 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00743_source.html\n -rw-r--r-- 0 root (0) root (0) 5644 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00746.html\n -rw-r--r-- 0 root (0) root (0) 38294 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00746_source.html\n -rw-r--r-- 0 root (0) root (0) 5899 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00749.html\n -rw-r--r-- 0 root (0) root (0) 22113 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00749_source.html\n -rw-r--r-- 0 root (0) root (0) 6082 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00752.html\n -rw-r--r-- 0 root (0) root (0) 85953 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00752_source.html\n -rw-r--r-- 0 root (0) root (0) 6202 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00755.html\n -rw-r--r-- 0 root (0) root (0) 163473 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00755_source.html\n--rw-r--r-- 0 root (0) root (0) 6267 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00758.html\n--rw-r--r-- 0 root (0) root (0) 81483 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00758_source.html\n--rw-r--r-- 0 root (0) root (0) 6289 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00761.html\n--rw-r--r-- 0 root (0) root (0) 24307 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00761_source.html\n--rw-r--r-- 0 root (0) root (0) 6114 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00764.html\n--rw-r--r-- 0 root (0) root (0) 29126 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00764_source.html\n--rw-r--r-- 0 root (0) root (0) 6437 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00767.html\n--rw-r--r-- 0 root (0) root (0) 121 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00767.js\n--rw-r--r-- 0 root (0) root (0) 46438 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00767_source.html\n--rw-r--r-- 0 root (0) root (0) 7580 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00770.html\n--rw-r--r-- 0 root (0) root (0) 130 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00770.js\n--rw-r--r-- 0 root (0) root (0) 135867 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00770_source.html\n--rw-r--r-- 0 root (0) root (0) 6298 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00773.html\n--rw-r--r-- 0 root (0) root (0) 60 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00773.js\n--rw-r--r-- 0 root (0) root (0) 38674 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00773_source.html\n+-rw-r--r-- 0 root (0) root (0) 6289 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00758.html\n+-rw-r--r-- 0 root (0) root (0) 24307 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00758_source.html\n+-rw-r--r-- 0 root (0) root (0) 6267 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00761.html\n+-rw-r--r-- 0 root (0) root (0) 81483 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00761_source.html\n+-rw-r--r-- 0 root (0) root (0) 6437 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00764.html\n+-rw-r--r-- 0 root (0) root (0) 121 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00764.js\n+-rw-r--r-- 0 root (0) root (0) 46438 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00764_source.html\n+-rw-r--r-- 0 root (0) root (0) 6114 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00767.html\n+-rw-r--r-- 0 root (0) root (0) 29126 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00767_source.html\n+-rw-r--r-- 0 root (0) root (0) 6298 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00770.html\n+-rw-r--r-- 0 root (0) root (0) 60 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00770.js\n+-rw-r--r-- 0 root (0) root (0) 38674 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00770_source.html\n+-rw-r--r-- 0 root (0) root (0) 7580 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00773.html\n+-rw-r--r-- 0 root (0) root (0) 130 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00773.js\n+-rw-r--r-- 0 root (0) root (0) 135867 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00773_source.html\n -rw-r--r-- 0 root (0) root (0) 5827 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00776.html\n -rw-r--r-- 0 root (0) root (0) 100442 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00776_source.html\n--rw-r--r-- 0 root (0) root (0) 6474 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00779.html\n--rw-r--r-- 0 root (0) root (0) 59 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00779.js\n--rw-r--r-- 0 root (0) root (0) 53913 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00779_source.html\n--rw-r--r-- 0 root (0) root (0) 5836 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00782.html\n--rw-r--r-- 0 root (0) root (0) 89790 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00782_source.html\n--rw-r--r-- 0 root (0) root (0) 5753 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00785.html\n--rw-r--r-- 0 root (0) root (0) 38297 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00785_source.html\n--rw-r--r-- 0 root (0) root (0) 6425 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00788.html\n+-rw-r--r-- 0 root (0) root (0) 5753 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00779.html\n+-rw-r--r-- 0 root (0) root (0) 38297 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00779_source.html\n+-rw-r--r-- 0 root (0) root (0) 6474 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00782.html\n+-rw-r--r-- 0 root (0) root (0) 59 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00782.js\n+-rw-r--r-- 0 root (0) root (0) 53913 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00782_source.html\n+-rw-r--r-- 0 root (0) root (0) 5836 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00785.html\n+-rw-r--r-- 0 root (0) root (0) 89790 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00785_source.html\n+-rw-r--r-- 0 root (0) root (0) 6807 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00788.html\n -rw-r--r-- 0 root (0) root (0) 67 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00788.js\n--rw-r--r-- 0 root (0) root (0) 23841 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00788_source.html\n--rw-r--r-- 0 root (0) root (0) 6807 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00791.html\n--rw-r--r-- 0 root (0) root (0) 67 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00791.js\n--rw-r--r-- 0 root (0) root (0) 33910 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00791_source.html\n+-rw-r--r-- 0 root (0) root (0) 33910 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00788_source.html\n+-rw-r--r-- 0 root (0) root (0) 6897 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00791.html\n+-rw-r--r-- 0 root (0) root (0) 65 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00791.js\n+-rw-r--r-- 0 root (0) root (0) 34223 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00791_source.html\n -rw-r--r-- 0 root (0) root (0) 7125 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00794.html\n -rw-r--r-- 0 root (0) root (0) 115 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00794.js\n -rw-r--r-- 0 root (0) root (0) 128979 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00794_source.html\n--rw-r--r-- 0 root (0) root (0) 4478 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00797.html\n--rw-r--r-- 0 root (0) root (0) 10583 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00797_source.html\n--rw-r--r-- 0 root (0) root (0) 6897 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00800.html\n--rw-r--r-- 0 root (0) root (0) 65 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00800.js\n--rw-r--r-- 0 root (0) root (0) 34223 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00800_source.html\n+-rw-r--r-- 0 root (0) root (0) 6425 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00797.html\n+-rw-r--r-- 0 root (0) root (0) 67 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00797.js\n+-rw-r--r-- 0 root (0) root (0) 23841 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00797_source.html\n+-rw-r--r-- 0 root (0) root (0) 4478 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00800.html\n+-rw-r--r-- 0 root (0) root (0) 10583 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00800_source.html\n -rw-r--r-- 0 root (0) root (0) 7174 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00803.html\n -rw-r--r-- 0 root (0) root (0) 115 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00803.js\n -rw-r--r-- 0 root (0) root (0) 252040 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00803_source.html\n--rw-r--r-- 0 root (0) root (0) 6580 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00806.html\n--rw-r--r-- 0 root (0) root (0) 99 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00806.js\n--rw-r--r-- 0 root (0) root (0) 12709 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00806_source.html\n--rw-r--r-- 0 root (0) root (0) 6161 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00809.html\n--rw-r--r-- 0 root (0) root (0) 63 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00809.js\n--rw-r--r-- 0 root (0) root (0) 14083 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00809_source.html\n--rw-r--r-- 0 root (0) root (0) 6306 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00812.html\n--rw-r--r-- 0 root (0) root (0) 69 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00812.js\n--rw-r--r-- 0 root (0) root (0) 20385 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00812_source.html\n--rw-r--r-- 0 root (0) root (0) 6452 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00815.html\n--rw-r--r-- 0 root (0) root (0) 79 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00815.js\n--rw-r--r-- 0 root (0) root (0) 25442 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00815_source.html\n--rw-r--r-- 0 root (0) root (0) 6818 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00818.html\n--rw-r--r-- 0 root (0) root (0) 66 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00818.js\n--rw-r--r-- 0 root (0) root (0) 35394 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00818_source.html\n+-rw-r--r-- 0 root (0) root (0) 6161 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00806.html\n+-rw-r--r-- 0 root (0) root (0) 63 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00806.js\n+-rw-r--r-- 0 root (0) root (0) 14083 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00806_source.html\n+-rw-r--r-- 0 root (0) root (0) 6306 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00809.html\n+-rw-r--r-- 0 root (0) root (0) 69 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00809.js\n+-rw-r--r-- 0 root (0) root (0) 20385 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00809_source.html\n+-rw-r--r-- 0 root (0) root (0) 6580 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00812.html\n+-rw-r--r-- 0 root (0) root (0) 99 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00812.js\n+-rw-r--r-- 0 root (0) root (0) 12709 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00812_source.html\n+-rw-r--r-- 0 root (0) root (0) 6818 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00815.html\n+-rw-r--r-- 0 root (0) root (0) 66 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00815.js\n+-rw-r--r-- 0 root (0) root (0) 35394 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00815_source.html\n+-rw-r--r-- 0 root (0) root (0) 6452 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00818.html\n+-rw-r--r-- 0 root (0) root (0) 79 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00818.js\n+-rw-r--r-- 0 root (0) root (0) 25442 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00818_source.html\n -rw-r--r-- 0 root (0) root (0) 7052 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00821.html\n -rw-r--r-- 0 root (0) root (0) 124 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00821.js\n -rw-r--r-- 0 root (0) root (0) 223874 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00821_source.html\n -rw-r--r-- 0 root (0) root (0) 6246 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00824.html\n -rw-r--r-- 0 root (0) root (0) 71 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00824.js\n -rw-r--r-- 0 root (0) root (0) 22526 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00824_source.html\n--rw-r--r-- 0 root (0) root (0) 6316 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00827.html\n--rw-r--r-- 0 root (0) root (0) 70 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00827.js\n--rw-r--r-- 0 root (0) root (0) 16843 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00827_source.html\n--rw-r--r-- 0 root (0) root (0) 6592 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00830.html\n--rw-r--r-- 0 root (0) root (0) 101 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00830.js\n--rw-r--r-- 0 root (0) root (0) 12826 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00830_source.html\n--rw-r--r-- 0 root (0) root (0) 6766 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00833.html\n--rw-r--r-- 0 root (0) root (0) 68 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00833.js\n--rw-r--r-- 0 root (0) root (0) 27921 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00833_source.html\n--rw-r--r-- 0 root (0) root (0) 6358 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00836.html\n--rw-r--r-- 0 root (0) root (0) 70 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00836.js\n--rw-r--r-- 0 root (0) root (0) 22933 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00836_source.html\n+-rw-r--r-- 0 root (0) root (0) 6592 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00827.html\n+-rw-r--r-- 0 root (0) root (0) 101 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00827.js\n+-rw-r--r-- 0 root (0) root (0) 12826 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00827_source.html\n+-rw-r--r-- 0 root (0) root (0) 6316 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00830.html\n+-rw-r--r-- 0 root (0) root (0) 70 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00830.js\n+-rw-r--r-- 0 root (0) root (0) 16843 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00830_source.html\n+-rw-r--r-- 0 root (0) root (0) 6358 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00833.html\n+-rw-r--r-- 0 root (0) root (0) 70 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00833.js\n+-rw-r--r-- 0 root (0) root (0) 22933 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00833_source.html\n+-rw-r--r-- 0 root (0) root (0) 6766 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00836.html\n+-rw-r--r-- 0 root (0) root (0) 68 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00836.js\n+-rw-r--r-- 0 root (0) root (0) 27921 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00836_source.html\n -rw-r--r-- 0 root (0) root (0) 6357 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00839.html\n -rw-r--r-- 0 root (0) root (0) 81 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00839.js\n -rw-r--r-- 0 root (0) root (0) 26984 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00839_source.html\n--rw-r--r-- 0 root (0) root (0) 6410 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00842.html\n--rw-r--r-- 0 root (0) root (0) 73 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00842.js\n--rw-r--r-- 0 root (0) root (0) 22723 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00842_source.html\n--rw-r--r-- 0 root (0) root (0) 7017 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00845.html\n--rw-r--r-- 0 root (0) root (0) 128 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00845.js\n--rw-r--r-- 0 root (0) root (0) 49761 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00845_source.html\n--rw-r--r-- 0 root (0) root (0) 7225 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00848.html\n--rw-r--r-- 0 root (0) root (0) 126 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00848.js\n--rw-r--r-- 0 root (0) root (0) 224157 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00848_source.html\n--rw-r--r-- 0 root (0) root (0) 7199 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00851.html\n--rw-r--r-- 0 root (0) root (0) 121 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00851.js\n--rw-r--r-- 0 root (0) root (0) 239108 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00851_source.html\n--rw-r--r-- 0 root (0) root (0) 6574 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00854.html\n--rw-r--r-- 0 root (0) root (0) 98 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00854.js\n--rw-r--r-- 0 root (0) root (0) 12790 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00854_source.html\n--rw-r--r-- 0 root (0) root (0) 6486 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00857.html\n--rw-r--r-- 0 root (0) root (0) 67 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00857.js\n--rw-r--r-- 0 root (0) root (0) 19962 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00857_source.html\n--rw-r--r-- 0 root (0) root (0) 6316 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00860.html\n--rw-r--r-- 0 root (0) root (0) 70 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00860.js\n--rw-r--r-- 0 root (0) root (0) 17165 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00860_source.html\n+-rw-r--r-- 0 root (0) root (0) 7017 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00842.html\n+-rw-r--r-- 0 root (0) root (0) 128 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00842.js\n+-rw-r--r-- 0 root (0) root (0) 49761 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00842_source.html\n+-rw-r--r-- 0 root (0) root (0) 6410 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00845.html\n+-rw-r--r-- 0 root (0) root (0) 73 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00845.js\n+-rw-r--r-- 0 root (0) root (0) 22723 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00845_source.html\n+-rw-r--r-- 0 root (0) root (0) 7199 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00848.html\n+-rw-r--r-- 0 root (0) root (0) 121 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00848.js\n+-rw-r--r-- 0 root (0) root (0) 239108 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00848_source.html\n+-rw-r--r-- 0 root (0) root (0) 7225 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00851.html\n+-rw-r--r-- 0 root (0) root (0) 126 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00851.js\n+-rw-r--r-- 0 root (0) root (0) 224157 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00851_source.html\n+-rw-r--r-- 0 root (0) root (0) 6316 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00854.html\n+-rw-r--r-- 0 root (0) root (0) 70 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00854.js\n+-rw-r--r-- 0 root (0) root (0) 17165 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00854_source.html\n+-rw-r--r-- 0 root (0) root (0) 6574 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00857.html\n+-rw-r--r-- 0 root (0) root (0) 98 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00857.js\n+-rw-r--r-- 0 root (0) root (0) 12790 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00857_source.html\n+-rw-r--r-- 0 root (0) root (0) 6486 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00860.html\n+-rw-r--r-- 0 root (0) root (0) 67 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00860.js\n+-rw-r--r-- 0 root (0) root (0) 19962 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00860_source.html\n -rw-r--r-- 0 root (0) root (0) 6745 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00863.html\n -rw-r--r-- 0 root (0) root (0) 65 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00863.js\n -rw-r--r-- 0 root (0) root (0) 47052 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00863_source.html\n--rw-r--r-- 0 root (0) root (0) 6497 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00866.html\n--rw-r--r-- 0 root (0) root (0) 70 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00866.js\n--rw-r--r-- 0 root (0) root (0) 21040 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00866_source.html\n--rw-r--r-- 0 root (0) root (0) 6445 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00869.html\n--rw-r--r-- 0 root (0) root (0) 78 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00869.js\n--rw-r--r-- 0 root (0) root (0) 23459 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00869_source.html\n+-rw-r--r-- 0 root (0) root (0) 6445 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00866.html\n+-rw-r--r-- 0 root (0) root (0) 78 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00866.js\n+-rw-r--r-- 0 root (0) root (0) 23459 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00866_source.html\n+-rw-r--r-- 0 root (0) root (0) 6497 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00869.html\n+-rw-r--r-- 0 root (0) root (0) 70 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00869.js\n+-rw-r--r-- 0 root (0) root (0) 21040 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00869_source.html\n -rw-r--r-- 0 root (0) root (0) 11270 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00872.html\n -rw-r--r-- 0 root (0) root (0) 424 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00872.js\n -rw-r--r-- 0 root (0) root (0) 29216 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00872_source.html\n -rw-r--r-- 0 root (0) root (0) 6381 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00875.html\n -rw-r--r-- 0 root (0) root (0) 61 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00875.js\n -rw-r--r-- 0 root (0) root (0) 111096 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00875_source.html\n--rw-r--r-- 0 root (0) root (0) 8721 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00878.html\n--rw-r--r-- 0 root (0) root (0) 262 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00878.js\n--rw-r--r-- 0 root (0) root (0) 21259 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00878_source.html\n--rw-r--r-- 0 root (0) root (0) 6381 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00881.html\n--rw-r--r-- 0 root (0) root (0) 61 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00881.js\n--rw-r--r-- 0 root (0) root (0) 110902 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00881_source.html\n+-rw-r--r-- 0 root (0) root (0) 6381 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00878.html\n+-rw-r--r-- 0 root (0) root (0) 61 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00878.js\n+-rw-r--r-- 0 root (0) root (0) 110902 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00878_source.html\n+-rw-r--r-- 0 root (0) root (0) 8721 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00881.html\n+-rw-r--r-- 0 root (0) root (0) 262 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00881.js\n+-rw-r--r-- 0 root (0) root (0) 21259 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00881_source.html\n -rw-r--r-- 0 root (0) root (0) 4474 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00884.html\n -rw-r--r-- 0 root (0) root (0) 12883 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00884_source.html\n--rw-r--r-- 0 root (0) root (0) 14201 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00887.html\n--rw-r--r-- 0 root (0) root (0) 2466 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00887.js\n--rw-r--r-- 0 root (0) root (0) 182425 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00887_source.html\n--rw-r--r-- 0 root (0) root (0) 6370 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00890.html\n--rw-r--r-- 0 root (0) root (0) 68 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00890.js\n--rw-r--r-- 0 root (0) root (0) 19254 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00890_source.html\n+-rw-r--r-- 0 root (0) root (0) 6370 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00887.html\n+-rw-r--r-- 0 root (0) root (0) 68 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00887.js\n+-rw-r--r-- 0 root (0) root (0) 19254 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00887_source.html\n+-rw-r--r-- 0 root (0) root (0) 14201 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00890.html\n+-rw-r--r-- 0 root (0) root (0) 2466 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00890.js\n+-rw-r--r-- 0 root (0) root (0) 182425 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00890_source.html\n -rw-r--r-- 0 root (0) root (0) 6911 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00893.html\n -rw-r--r-- 0 root (0) root (0) 66 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00893.js\n -rw-r--r-- 0 root (0) root (0) 44339 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00893_source.html\n -rw-r--r-- 0 root (0) root (0) 6381 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00896.html\n -rw-r--r-- 0 root (0) root (0) 61 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00896.js\n -rw-r--r-- 0 root (0) root (0) 110647 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00896_source.html\n -rw-r--r-- 0 root (0) root (0) 6687 2024-02-29 12:58:19.000000 ./usr/share/doc/opensubdiv/doxy_html/a00899.html\n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00674.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00674.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/bfr/vertexDescriptor.h File Reference\n+OpenSubdiv: opensubdiv/bfr/tessellation.h File Reference\n \n \n \n \n \n \n \n@@ -90,26 +90,29 @@\n \n \n \n
\n
\n Classes |\n Namespaces
\n-
vertexDescriptor.h File Reference
\n+
tessellation.h File Reference
\n
\n
\n
#include "../version.h"
\n-#include "../vtr/stackBuffer.h"
\n+#include "../bfr/parameterization.h"
\n
\n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n+\n+\n+\n \n

\n Classes

class  VertexDescriptor
 Simple class used by subclasses of SurfaceFactory to describe a vertex. More...
class  Tessellation
 Encapsulates a specific tessellation pattern of a Parameterization. More...
 
class  Tessellation::Options
 Options configure a Tessellation to specify the nature of both its results and the structure of the coordinate and facet index arrays that its methods will populate. More...
 
\n \n \n \n \n@@ -118,13 +121,13 @@\n \n

\n Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +1,30 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-vertexDescriptor.h File Reference\n+tessellation.h File Reference\n #include \"../version.h\"\n-#include \"_\b._\b._\b/_\bv_\bt_\br_\b/_\bs_\bt_\ba_\bc_\bk_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\"\n+#include \"_\b._\b._\b/_\bb_\bf_\br_\b/_\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-\u00a0 Simple class used by subclasses of _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by to describe a vertex.\n+class \u00a0 _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn\n+\u00a0 Encapsulates a specific tessellation pattern of a _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn.\n _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n+class \u00a0 _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n+ _\bO_\bp_\bt_\bi_\bo_\bn_\bs configure a _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn to specify the nature of both its\n+\u00a0 results and the structure of the coordinate and facet index arrays that\n+ its methods will populate. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bb_\bf_\br\n- * _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\n+ * _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00674.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00674.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a00674 = [\n- [\"VertexDescriptor\", \"a00969.html\", \"a00969\"]\n+ [\"Tessellation\", \"a00961.html\", \"a00961\"],\n+ [\"Options\", \"a00965.html\", \"a00965\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00674_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00674_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/bfr/vertexDescriptor.h Source File\n+OpenSubdiv: opensubdiv/bfr/tessellation.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
vertexDescriptor.h
\n+
tessellation.h
\n
\n
\n Go to the documentation of this file.
1//
\n
2// Copyright 2021 Pixar
\n
3//
\n
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
\n
5// with the following modification; you may not use this file except in
\n@@ -119,425 +119,281 @@\n
18// Unless required by applicable law or agreed to in writing, software
\n
19// distributed under the Apache License with the above modification is
\n
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
\n
21// KIND, either express or implied. See the Apache License for the specific
\n
22// language governing permissions and limitations under the Apache License.
\n
23//
\n
24
\n-
25#ifndef OPENSUBDIV3_BFR_VERTEX_DESCRIPTOR_H
\n-
26#define OPENSUBDIV3_BFR_VERTEX_DESCRIPTOR_H
\n+
25#ifndef OPENSUBDIV3_BFR_TESSELLATION_H
\n+
26#define OPENSUBDIV3_BFR_TESSELLATION_H
\n
27
\n
28#include "../version.h"
\n
29
\n-
30#include "../vtr/stackBuffer.h"
\n+
30#include "../bfr/parameterization.h"
\n
31
\n
32namespace OpenSubdiv {
\n
33namespace OPENSUBDIV_VERSION {
\n
34
\n
35namespace Bfr {
\n
36
\n-
50//
\n-
51// WIP - need to migrate some of these comments into Doxygen
\n-
52// - others will be moved to the external documentation
\n-
53//
\n-
54// It is used by subclasses of SurfaceFactory to provide a complete
\n-
55// topological description for each vertex of a face, i.e. invoked via
\n-
56// the virtual method:
\n-
57//
\n-
58// int populateFaceVertexDescriptor(Index baseFace,
\n-
59// int cornerVertex,
\n-
60// VertexDescriptor & v) const;
\n-
61//
\n-
62// Assignment of the full topology can be involved in the presence of
\n-
63// irregular faces, non-manifold topology or creasing around a vertex, but
\n-
64// many cases will be simple. For example, to specify a regular boundary
\n-
65// vertex of a Catmark mesh without any optional sharpness:
\n-
66//
\n-
67// int numIncidentFaces = 2;
\n-
68// bool vertexOnBoundary = true;
\n-
69//
\n-
70// vd.Initialize(numIncidentFaces);
\n-
71// vd.SetManifold(true);
\n-
72// vd.SetBoundary(vertexOnBoundary);
\n-
73// vd.ClearIncidentFaceSizes();
\n-
74// vd.Finalize();
\n-
75//
\n-
76// For a more general example, to assign a vertex of some valence whose
\n-
77// incident faces are of different sizes (e.g. required when triangles
\n-
78// appear around a vertex in an otherwise quad-dominant Catmark mesh):
\n-
79//
\n-
80// int numIncidentFaces = meshVertex.GetNumIncidentFaces();
\n-
81// bool vertexOnBoundary = meshVertex.IsBoundar();
\n-
82//
\n-
83// vd.Initialize(numIncidentFaces);
\n-
84// vd.SetManifold(true);
\n-
85// vd.SetBoundary(vertexOnBoundary);
\n-
86//
\n-
87// for (int i = 0; i < numIncidentFaces; ++i) {
\n-
88// vd.SetIncidentFaceSize(i, meshVertex.GetIncidentFaceSize(i));
\n-
89// }
\n-
90// vd.Finalize();
\n-
91//
\n-
92// These examples specify the incident faces as forming a manifold ring
\n-
93// (or half-ring) around the vertex, i.e. they can be specified as a
\n-
94// continuous, connected sequence in counter-clockwise order (and also
\n-
95// without degeneracies). In the case of a boundary vertex, the first
\n-
96// face must be on the leading edge of the boundary while the last is on
\n-
97// the trailing edge. For an interior vertex, which face is specified
\n-
98// first does not matter (since the set is periodic).
\n-
99//
\n-
100// In both cases, the location of the base face in this sequence -- the
\n-
101// face whose corner vertex is being described here -- must be specified
\n-
102// in the return value to populateFaceVertexDescriptor() (e.g. when a
\n-
103// boundary vertex has 3 incident faces, a return value of 0, 1 or 2
\n-
104// will indicate which is the base face).
\n-
105//
\n-
106// The corresponding methods to specify mesh control vertex indices (or
\n-
107// face-varying indices) complete the specification of the neighborhood:
\n-
108//
\n-
109// int getFaceCornerVertexIndices(Index baseFace, int cornerVertex,
\n-
110// Index vertexIndices[]) const;
\n-
111//
\n-
112// int getFaceCornerFVarValueIndices(Index baseFace, int cornerVertex,
\n-
113// Index fvarValueIndices[],
\n-
114// int fvarChannel) const;
\n-
115//
\n-
116// and are invoked by the Factory when needed.
\n-
117//
\n-
118// For each incident face, the indices for all vertices of that face are
\n-
119// to be specified (not the one-ring or some other subset). These indices
\n-
120// must also be specified in an orientation relative to the vertex, i.e.
\n-
121// for a vertex A and an incident face with face-vertices that may be
\n-
122// stored internally as {D, C, A, B}, they must be specified with A first
\n-
123// as {A, B, C, D}. This may seem a bit cumbersome, but it has clear
\n-
124// advantages when dealing with face-varying indices and unordered faces.
\n-
125//
\n-
126// More compact ways of specifying vertex indices for ordered, manifold
\n-
127// cases may be worth exploring in future, but face-varying indices and
\n-
128// non-manifold (unordered) vertices will always require such a full set,
\n-
129// so both methods will need to co-exist.
\n-
130//
\n-
\n-\n-
132public:
\n-
133 // The full declaration must be enclosed by calls to these methods:
\n-
134 //
\n-
135 // Note that vertex valences or face sizes in excess of those defined
\n-
136 // in Bfr::Limits (typically 16-bits) are not valid. When specifying
\n-
137 // values in excess of these limits, initialization will fail and/or
\n-
138 // the descriptor will be marked invalid and finalization will fail.
\n-
139 //
\n-
140
\n-
142
\n-
149
\n-
151 bool Initialize(int numIncidentFaces);
\n-
152
\n-
154 bool Finalize();
\n-
155
\n-
157 bool IsValid() const;
\n-
159
\n-
160 //
\n-
161 // WIP - need to migrate these comments into Doxygen
\n-
162 //
\n-
163 // Three groups of methods describe the topology around a vertex:
\n-
164 // - simple properties (vertex is a boundary, manifold, etc.)
\n-
165 // - sizes of incident faces (constant or size for each face)
\n-
166 // - sharpness of the vertex and its incident edges (optional)
\n-
167 //
\n-
168
\n-
169 // Manifold and boundary conditions:
\n-
170 //
\n-
171 // The manifold property is a strict condition but preferred for
\n-
172 // efficiency and is usually available from common connected mesh
\n-
173 // representations. When declaring the topology as "manifold",
\n-
174 // the Factory assumes the following:
\n-
175 //
\n-
176 // - all incident faces are "ordered" (counter-clockwise)
\n-
177 // - all incident faces are consistently oriented
\n-
178 // - all incident edges are non-degenerate
\n-
179 //
\n-
180 // If not certain that all of these conditions are met, it is best
\n-
181 // to not declare manifold -- leaving the Factory to make sense of
\n-
182 // the set of incident faces from the face-vertex indices that are
\n-
183 // provided elsewhere.
\n-
184 //
\n-
185
\n-
187
\n-
191
\n-
193 void SetManifold(bool isManifold);
\n-
194
\n-
196 void SetBoundary(bool isOnBoundary);
\n-
197
\n-
199 void SetIncidentFaceSize(int faceIndex, int faceSize);
\n-
200
\n-\n+
\n+\n+
52public:
\n+
\n+
65 class Options {
\n+
66 public:
\n+
\n+
67 Options() : _preserveQuads(false), _facetSize4(false),
\n+
68 _coordStride(0), _facetStride(0) { }
\n+
\n+
69
\n+
72 Options & PreserveQuads(bool on);
\n+
74 bool PreserveQuads() const { return _preserveQuads; }
\n+
75
\n+
78 Options & SetFacetSize(int numIndices);
\n+
79 // @brief Return the number of indices per facet
\n+
80 int GetFacetSize() const { return 3 + (int)_facetSize4; }
\n+
81
\n+
83 Options & SetFacetStride(int stride);
\n+
85 int GetFacetStride() const { return _facetStride; }
\n+
86
\n+
88 Options & SetCoordStride(int stride);
\n+
90 int GetCoordStride() const { return _coordStride; }
\n+
91
\n+
92 private:
\n+
93 unsigned int _preserveQuads : 1;
\n+
94 unsigned int _facetSize4 : 1;
\n+
95
\n+
96 short _coordStride;
\n+
97 short _facetStride;
\n+
98 };
\n+
\n+
99
\n+
100public:
\n+
102
\n+
111
\n+
118 Tessellation(Parameterization const & p, int uniformRate,
\n+
119 Options const & options = Options());
\n+
120
\n+
158 Tessellation(Parameterization const & p, int numRates, int const rates[],
\n+
159 Options const & options = Options());
\n+
160
\n+
162 bool IsValid() const { return _isValid; }
\n+
163
\n+
165 Tessellation() = delete;
\n+
166
\n+
167 Tessellation(Tessellation const &) = delete;
\n+\n+\n+
171
\n+
173
\n+
177
\n+
179 Parameterization GetParameterization() const { return _param; }
\n+
180
\n+
182 int GetFaceSize() const { return _param.GetFaceSize(); }
\n+
183
\n+
185 int GetRates(int rates[]) const;
\n+
186
\n+
188 bool IsUniform() const { return _isUniform; }
\n+
190
\n+
192
\n
203
\n-
205 void SetVertexSharpness(float sharpness);
\n+
205 int GetNumCoords() const { return _numInteriorPoints + _numBoundaryPoints; }
\n
206
\n-\n+
208 int GetCoordStride() const { return _coordStride; }
\n
209
\n-
221 void SetManifoldEdgeSharpness(int edgeIndex, float edgeSharpness);
\n-
222
\n-
238 void SetIncidentFaceEdgeSharpness(int faceIndex, float leadingEdgeSharp,
\n-
239 float trailingEdgeSharp);
\n-
240
\n-
242 void ClearEdgeSharpness();
\n-
244
\n-
246
\n-
251
\n-
253 bool IsManifold() const;
\n-
254
\n-
256 bool IsBoundary() const;
\n-
257
\n-
259 bool HasIncidentFaceSizes() const;
\n-
260
\n-
262 int GetIncidentFaceSize(int faceIndex) const;
\n-
263
\n-
265 bool HasVertexSharpness() const;
\n+
211 int GetNumBoundaryCoords() const { return _numBoundaryPoints; }
\n+
212
\n+
214 int GetNumInteriorCoords() const { return _numInteriorPoints; }
\n+
215
\n+
218 int GetNumEdgeCoords(int edge) const { return _outerRates[edge] - 1; }
\n+
219
\n+
221 template <typename REAL>
\n+
222 int GetCoords(REAL coordTuples[]) const;
\n+
223
\n+
225 template <typename REAL>
\n+
226 int GetBoundaryCoords(REAL coordTuples[]) const;
\n+
227
\n+
229 template <typename REAL>
\n+
230 int GetInteriorCoords(REAL coordTuples[]) const;
\n+
231
\n+
233 template <typename REAL>
\n+
234 int GetVertexCoord(int vertex, REAL coordTuples[]) const;
\n+
235
\n+
238 template <typename REAL>
\n+
239 int GetEdgeCoords(int edge, REAL coordTuples[]) const;
\n+
241
\n+
243
\n+
253
\n+
255 int GetNumFacets() const { return _numFacets; }
\n+
256
\n+
258 int GetFacetSize() const { return _facetSize; }
\n+
259
\n+
261 int GetFacetStride() const { return _facetStride; }
\n+
262
\n+
264 int GetFacets(int facetTuples[]) const;
\n
266
\n-
268 float GetVertexSharpness() const;
\n-
269
\n-
271 bool HasEdgeSharpness() const;
\n-
272
\n-
274 float GetManifoldEdgeSharpness(int edgeIndex) const;
\n-
275
\n-
277 void GetIncidentFaceEdgeSharpness(int faceIndex,
\n-
278 float * leadingEdgeSharp, float * trailingEdgeSharp) const;
\n-
280
\n-
281protected:
\n-
283 friend class FaceVertex;
\n-
284
\n-
285 VertexDescriptor() { }
\n-\n-
287
\n-
288 typedef Vtr::internal::StackBuffer<int,8,true> IntBuffer;
\n-
289 typedef Vtr::internal::StackBuffer<float,16,true> FloatBuffer;
\n-
290
\n-
291 void initFaceSizes();
\n-
292 void initEdgeSharpness();
\n-
294
\n-
295protected:
\n-
297 // Member variables assigned through the above interface:
\n-
298 unsigned short _isValid : 1;
\n-
299 unsigned short _isInitialized : 1;
\n-
300 unsigned short _isFinalized : 1;
\n-
301
\n-
302 unsigned short _isManifold : 1;
\n-
303 unsigned short _isBoundary : 1;
\n-
304
\n-
305 unsigned short _hasFaceSizes : 1;
\n-
306 unsigned short _hasEdgeSharpness : 1;
\n-
307
\n-
308 short _numFaces;
\n-
309 float _vertSharpness;
\n-
310
\n-
311 FloatBuffer _faceEdgeSharpness;
\n-
312 IntBuffer _faceSizeOffsets;
\n-
314};
\n-
\n-
315
\n-
316//
\n-
317// Public inline methods for simple assignment:
\n-
318//
\n-
319inline bool
\n-
\n-\n-
321 return _isValid;
\n-
322}
\n-
\n-
323
\n-
324inline void
\n-
\n-\n-
326 _isManifold = isManifold;
\n-
327}
\n-
\n-
328inline bool
\n-
\n-\n-
330 return _isManifold;
\n-
331}
\n-
\n-
332
\n-
333inline void
\n-
\n-\n-
335 _isBoundary = isBoundary;
\n-
336}
\n-
\n-
337inline bool
\n-
\n-\n-
339 return _isBoundary;
\n-
340}
\n-
\n-
341
\n-
342//
\n-
343// Public inline methods involving sizes of incident faces:
\n-
344//
\n-
345inline bool
\n-
\n-\n-
347 return _hasFaceSizes;
\n-
348}
\n-
\n-
349inline void
\n-
\n-\n-
351 _hasFaceSizes = false;
\n-
352}
\n-
\n-
353
\n-
354inline void
\n-
\n-
355VertexDescriptor::SetIncidentFaceSize(int incFaceIndex, int faceSize) {
\n-
356
\n-
357 if (!_hasFaceSizes) initFaceSizes();
\n-
358
\n-
359 _faceSizeOffsets[incFaceIndex] = faceSize;
\n-
360}
\n-
\n-
361inline int
\n-
\n-\n-
363
\n-
364 return _isFinalized ?
\n-
365 (_faceSizeOffsets[incFaceIndex+1] - _faceSizeOffsets[incFaceIndex]) :
\n-
366 _faceSizeOffsets[incFaceIndex];
\n-
367}
\n-
\n-
368
\n-
369//
\n-
370// Public inline methods involving vertex sharpness:
\n-
371//
\n-
372inline bool
\n-
\n-\n-
374 return _vertSharpness > 0.0f;
\n-
375}
\n-
\n-
376inline void
\n-
\n-\n-
378 _vertSharpness = 0.0f;
\n-
379}
\n-
\n-
380
\n-
381inline void
\n-
\n-\n-
383 _vertSharpness = vertSharpness;
\n-
384}
\n-
\n-
385inline float
\n-
\n-\n-
387 return _vertSharpness;
\n-
388}
\n-
\n-
389
\n-
390//
\n-
391// Public inline methods involving vertex sharpness:
\n-
392//
\n-
393inline bool
\n-
\n-\n-
395 return _hasEdgeSharpness;
\n-
396}
\n-
\n-
397inline void
\n-
\n-\n-
399 _hasEdgeSharpness = false;
\n-
400}
\n-
\n-
401
\n-
402inline void
\n-
\n-
403VertexDescriptor::SetManifoldEdgeSharpness(int edgeIndex, float sharpness) {
\n-
404
\n-
405 if (!_hasEdgeSharpness) initEdgeSharpness();
\n-
406
\n-
407 // Assign the leading edge of the face after the edge (even index):
\n-
408 if (edgeIndex < _numFaces) {
\n-
409 _faceEdgeSharpness[2*edgeIndex] = sharpness;
\n-
410 }
\n-
411
\n-
412 // Assign the trailing edge of the face before the edge (odd index):
\n-
413 if (edgeIndex > 0) {
\n-
414 _faceEdgeSharpness[2*edgeIndex-1] = sharpness;
\n-
415 } else if (!IsBoundary()) {
\n-
416 _faceEdgeSharpness[2*_numFaces-1] = sharpness;
\n-
417 }
\n-
418}
\n-
\n-
419inline float
\n-
\n-\n-
421
\n-
422 // All edges are first of the pair (even index) except last of boundary
\n-
423 return _faceEdgeSharpness[2*edgeIndex - (edgeIndex == _numFaces)];
\n-
424}
\n-
\n-
425
\n-
426inline void
\n-
\n-\n-
428 float leadingEdgeSharpness, float trailingEdgeSharpness) {
\n-
429
\n-
430 if (!_hasEdgeSharpness) initEdgeSharpness();
\n-
431
\n-
432 _faceEdgeSharpness[2*faceIndex ] = leadingEdgeSharpness;
\n-
433 _faceEdgeSharpness[2*faceIndex+1] = trailingEdgeSharpness;
\n-
434}
\n-
\n-
435inline void
\n-
\n-\n-
437 float * leadingEdgeSharpness, float * trailingEdgeSharpness) const {
\n-
438
\n-
439 *leadingEdgeSharpness = _faceEdgeSharpness[2*faceIndex];
\n-
440 *trailingEdgeSharpness = _faceEdgeSharpness[2*faceIndex+1];
\n-
441}
\n-
\n-
442
\n-
443} // end namespace Bfr
\n-
444
\n-
445} // end namespace OPENSUBDIV_VERSION
\n-
446using namespace OPENSUBDIV_VERSION;
\n-
447} // end namespace OpenSubdiv
\n-
448
\n-
449#endif /* OPENSUBDIV3_BFR_VERTEX_DESCRIPTOR_H */
\n-\n-
Simple class used by subclasses of SurfaceFactory to describe a vertex.
\n-
float GetVertexSharpness() const
Return the sharpness of the vertex.
\n-
bool Finalize()
Terminate the sequence of specifications.
\n-
void SetManifold(bool isManifold)
Declare the vertex neighborhood as manifold (ordered)
\n-
bool Initialize(int numIncidentFaces)
Initialize specification with the number of incident faces.
\n-
bool IsManifold() const
Return if vertex neighborhood is manifold.
\n-
bool HasEdgeSharpness() const
Return if sharpness was assigned to the incident edges.
\n-
int GetIncidentFaceSize(int faceIndex) const
Return the size of an incident face.
\n-
float GetManifoldEdgeSharpness(int edgeIndex) const
Return the sharpness assigned to a manifold edge.
\n-
void SetIncidentFaceEdgeSharpness(int faceIndex, float leadingEdgeSharp, float trailingEdgeSharp)
Assign sharpness to the edges of an incident face.
\n-
bool HasVertexSharpness() const
Return if sharpness was assigned to the vertex.
\n-
void ClearIncidentFaceSizes()
Remove any assigned sizes of incident faces.
\n-
void SetVertexSharpness(float sharpness)
Assign sharpness to the vertex.
\n-
void ClearVertexSharpness()
Remove any sharpness assigned to the vertex.
\n-
void ClearEdgeSharpness()
Remove any sharpness assigned to the incident edges.
\n-
void GetIncidentFaceEdgeSharpness(int faceIndex, float *leadingEdgeSharp, float *trailingEdgeSharp) const
Return the sharpness assigned to edges of an incident face.
\n-
bool IsBoundary() const
Return if vertex neighborhood is on a boundary.
\n-
bool IsValid() const
Return if instance is valid.
\n-
bool HasIncidentFaceSizes() const
Return if the sizes of incident faces are assigned.
\n-
void SetBoundary(bool isOnBoundary)
Declare the vertex neighborhood as being on a boundary.
\n-
void SetIncidentFaceSize(int faceIndex, int faceSize)
Assign the size of an incident face.
\n-
void SetManifoldEdgeSharpness(int edgeIndex, float edgeSharpness)
Assign sharpness to the edge of a manifold neighborhood.
\n+
268
\n+
283
\n+
285 void TransformFacetCoordIndices(int facetTuples[], int commonOffset);
\n+
286
\n+
289 void TransformFacetCoordIndices(int facetTuples[],
\n+
290 int const boundaryIndices[],
\n+
291 int interiorOffset);
\n+
292
\n+
294 void TransformFacetCoordIndices(int facetTuples[],
\n+
295 int const boundaryIndices[],
\n+
296 int const interiorIndices[]);
\n+
298
\n+
299private:
\n+
300 // Private initialization methods:
\n+
301 bool validateArguments(Parameterization const & p,
\n+
302 int nRates, int const rates[], Options const & options);
\n+
303
\n+
304 void initialize(Parameterization const & p,
\n+
305 int nRates, int const rates[], Options const & options);
\n+
306
\n+
307 void initializeDefaults();
\n+
308 int initializeRates(int nRates, int const rates[]);
\n+
309 void initializeInventoryForParamTri(int sumOfOuterRates);
\n+
310 void initializeInventoryForParamQuad(int sumOfOuterRates);
\n+
311 void initializeInventoryForParamQPoly(int sumOfOuterRates);
\n+
312
\n+
313private:
\n+
314 // Private members:
\n+
315 Parameterization _param;
\n+
316
\n+
317 unsigned short _isValid : 1;
\n+
318 unsigned short _isUniform : 1;
\n+
319 unsigned short _triangulate : 1;
\n+
320 unsigned short _singleFace : 1;
\n+
321 unsigned short _segmentedFace : 1;
\n+
322 unsigned short _triangleFan : 1;
\n+
323 unsigned short _splitQuad : 1;
\n+
324
\n+
325 short _facetSize;
\n+
326 int _facetStride;
\n+
327 int _coordStride;
\n+
328
\n+
329 int _numGivenRates;
\n+
330 int _numBoundaryPoints;
\n+
331 int _numInteriorPoints;
\n+
332 int _numFacets;
\n+
333
\n+
334 int _innerRates[2];
\n+
335 int* _outerRates;
\n+
336 int _outerRatesLocal[4];
\n+
337};
\n+
\n+
338
\n+
339//
\n+
340// Inline implementations:
\n+
341//
\n+\n+
\n+\n+
344 _preserveQuads = on;
\n+
345 return *this;
\n+
346}
\n+
\n+\n+
\n+\n+
349 _facetSize4 = (numIndices == 4);
\n+
350 return *this;
\n+
351}
\n+
\n+\n+
\n+\n+
354 _facetStride = (short) stride;
\n+
355 return *this;
\n+
356}
\n+
\n+\n+
\n+\n+
359 _coordStride = (short) stride;
\n+
360 return *this;
\n+
361}
\n+
\n+
362
\n+
363template <typename REAL>
\n+
364inline int
\n+
\n+
365Tessellation::GetVertexCoord(int vertex, REAL coord[]) const {
\n+
366 _param.GetVertexCoord(vertex, coord);
\n+
367 return 1;
\n+
368}
\n+
\n+
369
\n+
370template <typename REAL>
\n+
371inline int
\n+
\n+
372Tessellation::GetCoords(REAL coordTuples[]) const {
\n+
373 int nCoords = GetBoundaryCoords(coordTuples);
\n+
374 nCoords += GetInteriorCoords(coordTuples + nCoords * _coordStride);
\n+
375 return nCoords;
\n+
376}
\n+
\n+
377
\n+
378} // end namespace Bfr
\n+
379
\n+
380} // end namespace OPENSUBDIV_VERSION
\n+
381using namespace OPENSUBDIV_VERSION;
\n+
382
\n+
383} // end namespace OpenSubdiv
\n+
384
\n+
385#endif /* OPENSUBDIV3_BFR_TESSELLATION */
\n+\n+
Simple class defining the 2D parameterization of a face.
\n+
int GetFaceSize() const
Returns the size (number of vertices) of the corresponding face.
\n+
void GetVertexCoord(int vertexIndex, REAL uvCoord[2]) const
Returns the (u,v) coordinate of a given vertex.
\n+
Encapsulates a specific tessellation pattern of a Parameterization.
\n+
int GetFaceSize() const
Return the size of the face.
\n+
int GetNumBoundaryCoords() const
Return the number of boundary coordinates.
\n+\n+
void TransformFacetCoordIndices(int facetTuples[], int const boundaryIndices[], int const interiorIndices[])
Reassign all facet coordinate indices.
\n+
int GetCoordStride() const
Return the number of elements between each coordinate.
\n+
int GetNumEdgeCoords(int edge) const
Return the number of coordinates within a given edge (excluding those at its end vertices)
\n+
int GetInteriorCoords(REAL coordTuples[]) const
Retrieve the coordinates for the boundary.
\n+
int GetFacetStride() const
Return the number of elements between each facet.
\n+
bool IsUniform() const
Return if the pattern is uniform.
\n+
int GetNumCoords() const
Return the number of coordinates in the entire pattern.
\n+
int GetCoords(REAL coordTuples[]) const
Retrieve the coordinates for the entire pattern.
\n+
void TransformFacetCoordIndices(int facetTuples[], int commonOffset)
Apply a common offset to all facet coordinate indices.
\n+
Tessellation(Parameterization const &p, int numRates, int const rates[], Options const &options=Options())
General constructor providing multiple tessellation rates for a non-uniform tessellation.
\n+
Parameterization GetParameterization() const
Return the Parameterization.
\n+
void TransformFacetCoordIndices(int facetTuples[], int const boundaryIndices[], int interiorOffset)
Reassign indices of boundary coordinates while offseting those of interior coordinates.
\n+
int GetFacetSize() const
Return the number of indices assigned to each facet.
\n+
Tessellation()=delete
Default construction is unavailable.
\n+
Tessellation(Parameterization const &p, int uniformRate, Options const &options=Options())
Simple constructor providing a single uniform tessellation rate.
\n+
int GetFacets(int facetTuples[]) const
Retrieve the facet indices for the entire pattern.
\n+
int GetNumFacets() const
Return the number of facets in the entire pattern.
\n+
int GetNumInteriorCoords() const
Return the number of interior coordinates.
\n+
int GetVertexCoord(int vertex, REAL coordTuples[]) const
Retrieve the coordinate for a given vertex of the face.
\n+
int GetBoundaryCoords(REAL coordTuples[]) const
Retrieve the coordinates for the boundary.
\n+\n+
int GetRates(int rates[]) const
Retrieve the rates assigned.
\n+
bool IsValid() const
Return true if correctly initialized.
\n+
Tessellation & operator=(Tessellation const &)=delete
\n+
int GetEdgeCoords(int edge, REAL coordTuples[]) const
Retrieve the coordinates for a given edge of the face (excluding those at its end vertices)
\n+
Options configure a Tessellation to specify the nature of both its results and the structure of the c...
\n+\n+
int GetCoordStride() const
Return the stride between (u,v) pairs.
\n+
Options & SetFacetSize(int numIndices)
Assign the number of indices per facet (must be 3 or 4, default is 3)
\n+
int GetFacetStride() const
Return the stride between facets.
\n+\n+
Options & SetCoordStride(int stride)
Assign the stride between (u,v) pairs (default is 2)
\n+
Options & SetFacetStride(int stride)
Assign the stride between facets (default is facet size)
\n+
bool PreserveQuads() const
Return if preservation of quads is set.
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-vertexDescriptor.h\n+tessellation.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2021 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -24,446 +24,367 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_BFR_VERTEX_DESCRIPTOR_H\n-26#define OPENSUBDIV3_BFR_VERTEX_DESCRIPTOR_H\n+25#ifndef OPENSUBDIV3_BFR_TESSELLATION_H\n+26#define OPENSUBDIV3_BFR_TESSELLATION_H\n 27\n 28#include \"../version.h\"\n 29\n-30#include \"../vtr/stackBuffer.h\"\n+30#include \"../bfr/parameterization.h\"\n 31\n 32namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n 33namespace OPENSUBDIV_VERSION {\n 34\n 35namespace Bfr {\n 36\n-50//\n-51// WIP - need to migrate some of these comments into Doxygen\n-52// - others will be moved to the external documentation\n-53//\n-54// It is used by subclasses of SurfaceFactory to provide a complete\n-55// topological description for each vertex of a face, i.e. invoked via\n-56// the virtual method:\n-57//\n-58// int populateFaceVertexDescriptor(Index baseFace,\n-59// int cornerVertex,\n-60// VertexDescriptor & v) const;\n-61//\n-62// Assignment of the full topology can be involved in the presence of\n-63// irregular faces, non-manifold topology or creasing around a vertex, but\n-64// many cases will be simple. For example, to specify a regular boundary\n-65// vertex of a Catmark mesh without any optional sharpness:\n-66//\n-67// int numIncidentFaces = 2;\n-68// bool vertexOnBoundary = true;\n-69//\n-70// vd.Initialize(numIncidentFaces);\n-71// vd.SetManifold(true);\n-72// vd.SetBoundary(vertexOnBoundary);\n-73// vd.ClearIncidentFaceSizes();\n-74// vd.Finalize();\n-75//\n-76// For a more general example, to assign a vertex of some valence whose\n-77// incident faces are of different sizes (e.g. required when triangles\n-78// appear around a vertex in an otherwise quad-dominant Catmark mesh):\n-79//\n-80// int numIncidentFaces = meshVertex.GetNumIncidentFaces();\n-81// bool vertexOnBoundary = meshVertex.IsBoundar();\n-82//\n-83// vd.Initialize(numIncidentFaces);\n-84// vd.SetManifold(true);\n-85// vd.SetBoundary(vertexOnBoundary);\n-86//\n-87// for (int i = 0; i < numIncidentFaces; ++i) {\n-88// vd.SetIncidentFaceSize(i, meshVertex.GetIncidentFaceSize(i));\n-89// }\n-90// vd.Finalize();\n-91//\n-92// These examples specify the incident faces as forming a manifold ring\n-93// (or half-ring) around the vertex, i.e. they can be specified as a\n-94// continuous, connected sequence in counter-clockwise order (and also\n-95// without degeneracies). In the case of a boundary vertex, the first\n-96// face must be on the leading edge of the boundary while the last is on\n-97// the trailing edge. For an interior vertex, which face is specified\n-98// first does not matter (since the set is periodic).\n-99//\n-100// In both cases, the location of the base face in this sequence -- the\n-101// face whose corner vertex is being described here -- must be specified\n-102// in the return value to populateFaceVertexDescriptor() (e.g. when a\n-103// boundary vertex has 3 incident faces, a return value of 0, 1 or 2\n-104// will indicate which is the base face).\n-105//\n-106// The corresponding methods to specify mesh control vertex indices (or\n-107// face-varying indices) complete the specification of the neighborhood:\n-108//\n-109// int getFaceCornerVertexIndices(Index baseFace, int cornerVertex,\n-110// Index vertexIndices[]) const;\n-111//\n-112// int getFaceCornerFVarValueIndices(Index baseFace, int cornerVertex,\n-113// Index fvarValueIndices[],\n-114// int fvarChannel) const;\n-115//\n-116// and are invoked by the Factory when needed.\n-117//\n-118// For each incident face, the indices for all vertices of that face are\n-119// to be specified (not the one-ring or some other subset). These indices\n-120// must also be specified in an orientation relative to the vertex, i.e.\n-121// for a vertex A and an incident face with face-vertices that may be\n-122// stored internally as {D, C, A, B}, they must be specified with A first\n-123// as {A, B, C, D}. This may seem a bit cumbersome, but it has clear\n-124// advantages when dealing with face-varying indices and unordered faces.\n-125//\n-126// More compact ways of specifying vertex indices for ordered, manifold\n-127// cases may be worth exploring in future, but face-varying indices and\n-128// non-manifold (unordered) vertices will always require such a full set,\n-129// so both methods will need to co-exist.\n-130//\n-_\b1_\b3_\b1class _\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br {\n-132public:\n-133 // The full declaration must be enclosed by calls to these methods:\n-134 //\n-135 // Note that vertex valences or face sizes in excess of those defined\n-136 // in Bfr::Limits (typically 16-bits) are not valid. When specifying\n-137 // values in excess of these limits, initialization will fail and/or\n-138 // the descriptor will be marked invalid and finalization will fail.\n-139 //\n-140\n-142\n-149\n-_\b1_\b5_\b1 bool _\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be(int numIncidentFaces);\n-152\n-_\b1_\b5_\b4 bool _\bF_\bi_\bn_\ba_\bl_\bi_\bz_\be();\n-155\n-157 bool _\bI_\bs_\bV_\ba_\bl_\bi_\bd() const;\n-159\n-160 //\n-161 // WIP - need to migrate these comments into Doxygen\n-162 //\n-163 // Three groups of methods describe the topology around a vertex:\n-164 // - simple properties (vertex is a boundary, manifold, etc.)\n-165 // - sizes of incident faces (constant or size for each face)\n-166 // - sharpness of the vertex and its incident edges (optional)\n-167 //\n-168\n-169 // Manifold and boundary conditions:\n-170 //\n-171 // The manifold property is a strict condition but preferred for\n-172 // efficiency and is usually available from common connected mesh\n-173 // representations. When declaring the topology as \"manifold\",\n-174 // the Factory assumes the following:\n-175 //\n-176 // - all incident faces are \"ordered\" (counter-clockwise)\n-177 // - all incident faces are consistently oriented\n-178 // - all incident edges are non-degenerate\n-179 //\n-180 // If not certain that all of these conditions are met, it is best\n-181 // to not declare manifold -- leaving the Factory to make sense of\n-182 // the set of incident faces from the face-vertex indices that are\n-183 // provided elsewhere.\n-184 //\n-185\n-187\n-191\n-193 void _\bS_\be_\bt_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd(bool isManifold);\n-194\n-196 void _\bS_\be_\bt_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by(bool isOnBoundary);\n-197\n-199 void _\bS_\be_\bt_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be(int faceIndex, int faceSize);\n-200\n-202 void _\bC_\bl_\be_\ba_\br_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be_\bs();\n+_\b5_\b1class _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn {\n+52public:\n+_\b6_\b5 class _\bO_\bp_\bt_\bi_\bo_\bn_\bs {\n+66 public:\n+_\b6_\b7 _\bO_\bp_\bt_\bi_\bo_\bn_\bs() : _preserveQuads(false), _facetSize4(false),\n+68 _coordStride(0), _facetStride(0) { }\n+69\n+72 _\bO_\bp_\bt_\bi_\bo_\bn_\bs & _\bP_\br_\be_\bs_\be_\br_\bv_\be_\bQ_\bu_\ba_\bd_\bs(bool on);\n+_\b7_\b4 bool _\bP_\br_\be_\bs_\be_\br_\bv_\be_\bQ_\bu_\ba_\bd_\bs() const { return _preserveQuads; }\n+75\n+78 _\bO_\bp_\bt_\bi_\bo_\bn_\bs & _\bS_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bi_\bz_\be(int numIndices);\n+79 // @brief Return the number of indices per facet\n+_\b8_\b0 int _\bG_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bi_\bz_\be() const { return 3 + (int)_facetSize4; }\n+81\n+83 _\bO_\bp_\bt_\bi_\bo_\bn_\bs & _\bS_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bt_\br_\bi_\bd_\be(int stride);\n+_\b8_\b5 int _\bG_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bt_\br_\bi_\bd_\be() const { return _facetStride; }\n+86\n+88 _\bO_\bp_\bt_\bi_\bo_\bn_\bs & _\bS_\be_\bt_\bC_\bo_\bo_\br_\bd_\bS_\bt_\br_\bi_\bd_\be(int stride);\n+_\b9_\b0 int _\bG_\be_\bt_\bC_\bo_\bo_\br_\bd_\bS_\bt_\br_\bi_\bd_\be() const { return _coordStride; }\n+91\n+92 private:\n+93 unsigned int _preserveQuads : 1;\n+94 unsigned int _facetSize4 : 1;\n+95\n+96 short _coordStride;\n+97 short _facetStride;\n+98 };\n+99\n+100public:\n+102\n+111\n+_\b1_\b1_\b8 _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn(_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn const & p, int uniformRate,\n+119 _\bO_\bp_\bt_\bi_\bo_\bn_\bs const & options = _\bO_\bp_\bt_\bi_\bo_\bn_\bs());\n+120\n+_\b1_\b5_\b8 _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn(_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn const & p, int numRates, int const rates[],\n+159 _\bO_\bp_\bt_\bi_\bo_\bn_\bs const & options = _\bO_\bp_\bt_\bi_\bo_\bn_\bs());\n+160\n+_\b1_\b6_\b2 bool _\bI_\bs_\bV_\ba_\bl_\bi_\bd() const { return _isValid; }\n+163\n+_\b1_\b6_\b5 _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn() = delete;\n+166\n+_\b1_\b6_\b7 _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn(_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn const &) = delete;\n+_\b1_\b6_\b8 _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn & _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn const &) = delete;\n+_\b1_\b6_\b9 _\b~_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn();\n+171\n+173\n+177\n+_\b1_\b7_\b9 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn _\bG_\be_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn() const { return _param; }\n+180\n+_\b1_\b8_\b2 int _\bG_\be_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be() const { return _param._\bG_\be_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be(); }\n+183\n+_\b1_\b8_\b5 int _\bG_\be_\bt_\bR_\ba_\bt_\be_\bs(int rates[]) const;\n+186\n+_\b1_\b8_\b8 bool _\bI_\bs_\bU_\bn_\bi_\bf_\bo_\br_\bm() const { return _isUniform; }\n+190\n+192\n 203\n-205 void _\bS_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(float sharpness);\n+_\b2_\b0_\b5 int _\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bo_\br_\bd_\bs() const { return _numInteriorPoints + _numBoundaryPoints;\n+}\n 206\n-208 void _\bC_\bl_\be_\ba_\br_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs();\n+_\b2_\b0_\b8 int _\bG_\be_\bt_\bC_\bo_\bo_\br_\bd_\bS_\bt_\br_\bi_\bd_\be() const { return _coordStride; }\n 209\n-221 void _\bS_\be_\bt_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(int edgeIndex, float edgeSharpness);\n-222\n-238 void _\bS_\be_\bt_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(int faceIndex, float leadingEdgeSharp,\n-239 float trailingEdgeSharp);\n-240\n-242 void _\bC_\bl_\be_\ba_\br_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs();\n-244\n-246\n-251\n-253 bool _\bI_\bs_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd() const;\n-254\n-256 bool _\bI_\bs_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by() const;\n-257\n-259 bool _\bH_\ba_\bs_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be_\bs() const;\n-260\n-262 int _\bG_\be_\bt_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be(int faceIndex) const;\n-263\n-265 bool _\bH_\ba_\bs_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs() const;\n+_\b2_\b1_\b1 int _\bG_\be_\bt_\bN_\bu_\bm_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bC_\bo_\bo_\br_\bd_\bs() const { return _numBoundaryPoints; }\n+212\n+_\b2_\b1_\b4 int _\bG_\be_\bt_\bN_\bu_\bm_\bI_\bn_\bt_\be_\br_\bi_\bo_\br_\bC_\bo_\bo_\br_\bd_\bs() const { return _numInteriorPoints; }\n+215\n+_\b2_\b1_\b8 int _\bG_\be_\bt_\bN_\bu_\bm_\bE_\bd_\bg_\be_\bC_\bo_\bo_\br_\bd_\bs(int edge) const { return _outerRates[edge] - 1; }\n+219\n+221 template \n+222 int _\bG_\be_\bt_\bC_\bo_\bo_\br_\bd_\bs(REAL coordTuples[]) const;\n+223\n+225 template \n+_\b2_\b2_\b6 int _\bG_\be_\bt_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bC_\bo_\bo_\br_\bd_\bs(REAL coordTuples[]) const;\n+227\n+229 template \n+_\b2_\b3_\b0 int _\bG_\be_\bt_\bI_\bn_\bt_\be_\br_\bi_\bo_\br_\bC_\bo_\bo_\br_\bd_\bs(REAL coordTuples[]) const;\n+231\n+233 template \n+234 int _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\bo_\br_\bd(int vertex, REAL coordTuples[]) const;\n+235\n+238 template \n+_\b2_\b3_\b9 int _\bG_\be_\bt_\bE_\bd_\bg_\be_\bC_\bo_\bo_\br_\bd_\bs(int edge, REAL coordTuples[]) const;\n+241\n+243\n+253\n+_\b2_\b5_\b5 int _\bG_\be_\bt_\bN_\bu_\bm_\bF_\ba_\bc_\be_\bt_\bs() const { return _numFacets; }\n+256\n+_\b2_\b5_\b8 int _\bG_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bi_\bz_\be() const { return _facetSize; }\n+259\n+_\b2_\b6_\b1 int _\bG_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bt_\br_\bi_\bd_\be() const { return _facetStride; }\n+262\n+_\b2_\b6_\b4 int _\bG_\be_\bt_\bF_\ba_\bc_\be_\bt_\bs(int facetTuples[]) const;\n 266\n-268 float _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs() const;\n-269\n-271 bool _\bH_\ba_\bs_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs() const;\n-272\n-274 float _\bG_\be_\bt_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(int edgeIndex) const;\n-275\n-277 void _\bG_\be_\bt_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(int faceIndex,\n-278 float * leadingEdgeSharp, float * trailingEdgeSharp) const;\n-280\n-281protected:\n-283 friend class FaceVertex;\n-284\n-285 _\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br() { }\n-286 _\b~_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br() { }\n-287\n-288 typedef Vtr::internal::StackBuffer IntBuffer;\n-289 typedef Vtr::internal::StackBuffer FloatBuffer;\n-290\n-291 void initFaceSizes();\n-292 void initEdgeSharpness();\n-294\n-295protected:\n-297 // Member variables assigned through the above interface:\n-298 unsigned short _isValid : 1;\n-299 unsigned short _isInitialized : 1;\n-300 unsigned short _isFinalized : 1;\n-301\n-302 unsigned short _isManifold : 1;\n-303 unsigned short _isBoundary : 1;\n-304\n-305 unsigned short _hasFaceSizes : 1;\n-306 unsigned short _hasEdgeSharpness : 1;\n-307\n-308 short _numFaces;\n-309 float _vertSharpness;\n-310\n-311 FloatBuffer _faceEdgeSharpness;\n-312 IntBuffer _faceSizeOffsets;\n-314};\n-315\n-316//\n-317// Public inline methods for simple assignment:\n-318//\n-319inline bool\n-_\b3_\b2_\b0_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bI_\bs_\bV_\ba_\bl_\bi_\bd() const {\n-321 return _isValid;\n-322}\n-323\n-324inline void\n-_\b3_\b2_\b5_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bS_\be_\bt_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd(bool isManifold) {\n-326 _isManifold = isManifold;\n-327}\n-328inline bool\n-_\b3_\b2_\b9_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bI_\bs_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd() const {\n-330 return _isManifold;\n-331}\n-332\n-333inline void\n-_\b3_\b3_\b4_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bS_\be_\bt_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by(bool isBoundary) {\n-335 _isBoundary = isBoundary;\n-336}\n-337inline bool\n-_\b3_\b3_\b8_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bI_\bs_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by() const {\n-339 return _isBoundary;\n-340}\n-341\n-342//\n-343// Public inline methods involving sizes of incident faces:\n-344//\n-345inline bool\n-_\b3_\b4_\b6_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bH_\ba_\bs_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be_\bs() const {\n-347 return _hasFaceSizes;\n-348}\n-349inline void\n-_\b3_\b5_\b0_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bC_\bl_\be_\ba_\br_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be_\bs() {\n-351 _hasFaceSizes = false;\n-352}\n-353\n-354inline void\n-_\b3_\b5_\b5_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bS_\be_\bt_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be(int incFaceIndex, int faceSize) {\n-356\n-357 if (!_hasFaceSizes) initFaceSizes();\n-358\n-359 _faceSizeOffsets[incFaceIndex] = faceSize;\n-360}\n-361inline int\n-_\b3_\b6_\b2_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be(int incFaceIndex) const {\n-363\n-364 return _isFinalized ?\n-365 (_faceSizeOffsets[incFaceIndex+1] - _faceSizeOffsets[incFaceIndex]) :\n-366 _faceSizeOffsets[incFaceIndex];\n-367}\n-368\n-369//\n-370// Public inline methods involving vertex sharpness:\n-371//\n-372inline bool\n-_\b3_\b7_\b3_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bH_\ba_\bs_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs() const {\n-374 return _vertSharpness > 0.0f;\n-375}\n-376inline void\n-_\b3_\b7_\b7_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bC_\bl_\be_\ba_\br_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs() {\n-378 _vertSharpness = 0.0f;\n-379}\n-380\n-381inline void\n-_\b3_\b8_\b2_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bS_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(float vertSharpness) {\n-383 _vertSharpness = vertSharpness;\n-384}\n-385inline float\n-_\b3_\b8_\b6_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs() const {\n-387 return _vertSharpness;\n-388}\n-389\n-390//\n-391// Public inline methods involving vertex sharpness:\n-392//\n-393inline bool\n-_\b3_\b9_\b4_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bH_\ba_\bs_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs() const {\n-395 return _hasEdgeSharpness;\n-396}\n-397inline void\n-_\b3_\b9_\b8_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bC_\bl_\be_\ba_\br_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs() {\n-399 _hasEdgeSharpness = false;\n-400}\n-401\n-402inline void\n-_\b4_\b0_\b3_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bS_\be_\bt_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(int edgeIndex, float sharpness) {\n-404\n-405 if (!_hasEdgeSharpness) initEdgeSharpness();\n-406\n-407 // Assign the leading edge of the face after the edge (even index):\n-408 if (edgeIndex < _numFaces) {\n-409 _faceEdgeSharpness[2*edgeIndex] = sharpness;\n-410 }\n-411\n-412 // Assign the trailing edge of the face before the edge (odd index):\n-413 if (edgeIndex > 0) {\n-414 _faceEdgeSharpness[2*edgeIndex-1] = sharpness;\n-415 } else if (!_\bI_\bs_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by()) {\n-416 _faceEdgeSharpness[2*_numFaces-1] = sharpness;\n-417 }\n-418}\n-419inline float\n-_\b4_\b2_\b0_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(int edgeIndex) const {\n-421\n-422 // All edges are first of the pair (even index) except last of boundary\n-423 return _faceEdgeSharpness[2*edgeIndex - (edgeIndex == _numFaces)];\n-424}\n-425\n-426inline void\n-_\b4_\b2_\b7_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bS_\be_\bt_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(int faceIndex,\n-428 float leadingEdgeSharpness, float trailingEdgeSharpness) {\n-429\n-430 if (!_hasEdgeSharpness) initEdgeSharpness();\n-431\n-432 _faceEdgeSharpness[2*faceIndex ] = leadingEdgeSharpness;\n-433 _faceEdgeSharpness[2*faceIndex+1] = trailingEdgeSharpness;\n-434}\n-435inline void\n-_\b4_\b3_\b6_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(int faceIndex,\n-437 float * leadingEdgeSharpness, float * trailingEdgeSharpness) const {\n-438\n-439 *leadingEdgeSharpness = _faceEdgeSharpness[2*faceIndex];\n-440 *trailingEdgeSharpness = _faceEdgeSharpness[2*faceIndex+1];\n-441}\n-442\n-443} // end namespace Bfr\n-444\n-445} // end namespace OPENSUBDIV_VERSION\n-446using namespace OPENSUBDIV_VERSION;\n-447} // end namespace OpenSubdiv\n-448\n-449#endif /* OPENSUBDIV3_BFR_VERTEX_DESCRIPTOR_H */\n+268\n+283\n+_\b2_\b8_\b5 void _\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\ba_\bc_\be_\bt_\bC_\bo_\bo_\br_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(int facetTuples[], int commonOffset);\n+286\n+_\b2_\b8_\b9 void _\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\ba_\bc_\be_\bt_\bC_\bo_\bo_\br_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(int facetTuples[],\n+290 int const boundaryIndices[],\n+291 int interiorOffset);\n+292\n+_\b2_\b9_\b4 void _\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\ba_\bc_\be_\bt_\bC_\bo_\bo_\br_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(int facetTuples[],\n+295 int const boundaryIndices[],\n+296 int const interiorIndices[]);\n+298\n+299private:\n+300 // Private initialization methods:\n+301 bool validateArguments(_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn const & p,\n+302 int nRates, int const rates[], _\bO_\bp_\bt_\bi_\bo_\bn_\bs const & options);\n+303\n+304 void initialize(_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn const & p,\n+305 int nRates, int const rates[], _\bO_\bp_\bt_\bi_\bo_\bn_\bs const & options);\n+306\n+307 void initializeDefaults();\n+308 int initializeRates(int nRates, int const rates[]);\n+309 void initializeInventoryForParamTri(int sumOfOuterRates);\n+310 void initializeInventoryForParamQuad(int sumOfOuterRates);\n+311 void initializeInventoryForParamQPoly(int sumOfOuterRates);\n+312\n+313private:\n+314 // Private members:\n+315 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn _param;\n+316\n+317 unsigned short _isValid : 1;\n+318 unsigned short _isUniform : 1;\n+319 unsigned short _triangulate : 1;\n+320 unsigned short _singleFace : 1;\n+321 unsigned short _segmentedFace : 1;\n+322 unsigned short _triangleFan : 1;\n+323 unsigned short _splitQuad : 1;\n+324\n+325 short _facetSize;\n+326 int _facetStride;\n+327 int _coordStride;\n+328\n+329 int _numGivenRates;\n+330 int _numBoundaryPoints;\n+331 int _numInteriorPoints;\n+332 int _numFacets;\n+333\n+334 int _innerRates[2];\n+335 int* _outerRates;\n+336 int _outerRatesLocal[4];\n+337};\n+338\n+339//\n+340// Inline implementations:\n+341//\n+342inline _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs &\n+_\b3_\b4_\b3_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\br_\be_\bs_\be_\br_\bv_\be_\bQ_\bu_\ba_\bd_\bs(bool on) {\n+344 _preserveQuads = on;\n+345 return *this;\n+346}\n+347inline _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs &\n+_\b3_\b4_\b8_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bi_\bz_\be(int numIndices) {\n+349 _facetSize4 = (numIndices == 4);\n+350 return *this;\n+351}\n+352inline _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs &\n+_\b3_\b5_\b3_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bt_\br_\bi_\bd_\be(int stride) {\n+354 _facetStride = (short) stride;\n+355 return *this;\n+356}\n+357inline _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs &\n+_\b3_\b5_\b8_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\be_\bt_\bC_\bo_\bo_\br_\bd_\bS_\bt_\br_\bi_\bd_\be(int stride) {\n+359 _coordStride = (short) stride;\n+360 return *this;\n+361}\n+362\n+363template \n+364inline int\n+_\b3_\b6_\b5_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\bo_\br_\bd(int vertex, REAL coord[]) const {\n+366 _param._\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\bo_\br_\bd(vertex, coord);\n+367 return 1;\n+368}\n+369\n+370template \n+371inline int\n+_\b3_\b7_\b2_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bC_\bo_\bo_\br_\bd_\bs(REAL coordTuples[]) const {\n+373 int nCoords = _\bG_\be_\bt_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bC_\bo_\bo_\br_\bd_\bs(coordTuples);\n+374 nCoords += _\bG_\be_\bt_\bI_\bn_\bt_\be_\br_\bi_\bo_\br_\bC_\bo_\bo_\br_\bd_\bs(coordTuples + nCoords * _coordStride);\n+375 return nCoords;\n+376}\n+377\n+378} // end namespace Bfr\n+379\n+380} // end namespace OPENSUBDIV_VERSION\n+381using namespace OPENSUBDIV_VERSION;\n+382\n+383} // end namespace OpenSubdiv\n+384\n+385#endif /* OPENSUBDIV3_BFR_TESSELLATION */\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-Simple class used by subclasses of SurfaceFactory to describe a vertex.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b1_\b3_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n-float GetVertexSharpness() const\n-Return the sharpness of the vertex.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b8_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bF_\bi_\bn_\ba_\bl_\bi_\bz_\be\n-bool Finalize()\n-Terminate the sequence of specifications.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bS_\be_\bt_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n-void SetManifold(bool isManifold)\n-Declare the vertex neighborhood as manifold (ordered)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b2_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be\n-bool Initialize(int numIncidentFaces)\n-Initialize specification with the number of incident faces.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bI_\bs_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n-bool IsManifold() const\n-Return if vertex neighborhood is manifold.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b2_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bH_\ba_\bs_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n-bool HasEdgeSharpness() const\n-Return if sharpness was assigned to the incident edges.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b9_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be\n-int GetIncidentFaceSize(int faceIndex) const\n-Return the size of an incident face.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b6_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n-float GetManifoldEdgeSharpness(int edgeIndex) const\n-Return the sharpness assigned to a manifold edge.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b2_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:\n-_\bS_\be_\bt_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n-void SetIncidentFaceEdgeSharpness(int faceIndex, float leadingEdgeSharp, float\n-trailingEdgeSharp)\n-Assign sharpness to the edges of an incident face.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b2_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bH_\ba_\bs_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n-bool HasVertexSharpness() const\n-Return if sharpness was assigned to the vertex.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b7_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bC_\bl_\be_\ba_\br_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be_\bs\n-void ClearIncidentFaceSizes()\n-Remove any assigned sizes of incident faces.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b5_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bS_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n-void SetVertexSharpness(float sharpness)\n-Assign sharpness to the vertex.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b8_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bC_\bl_\be_\ba_\br_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n-void ClearVertexSharpness()\n-Remove any sharpness assigned to the vertex.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b7_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bC_\bl_\be_\ba_\br_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n-void ClearEdgeSharpness()\n-Remove any sharpness assigned to the incident edges.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b9_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:\n-_\bG_\be_\bt_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n-void GetIncidentFaceEdgeSharpness(int faceIndex, float *leadingEdgeSharp, float\n-*trailingEdgeSharp) const\n-Return the sharpness assigned to edges of an incident face.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b3_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bI_\bs_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by\n-bool IsBoundary() const\n-Return if vertex neighborhood is on a boundary.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b3_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bI_\bs_\bV_\ba_\bl_\bi_\bd\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn\n+Simple class defining the 2D parameterization of a face.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b5_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be\n+int GetFaceSize() const\n+Returns the size (number of vertices) of the corresponding face.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b1_\b0_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\bo_\br_\bd\n+void GetVertexCoord(int vertexIndex, REAL uvCoord[2]) const\n+Returns the (u,v) coordinate of a given vertex.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn\n+Encapsulates a specific tessellation pattern of a Parameterization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b5_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be\n+int GetFaceSize() const\n+Return the size of the face.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b1_\b8_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bC_\bo_\bo_\br_\bd_\bs\n+int GetNumBoundaryCoords() const\n+Return the number of boundary coordinates.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b1_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\b~_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn\n+~Tessellation()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\ba_\bc_\be_\bt_\bC_\bo_\bo_\br_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+void TransformFacetCoordIndices(int facetTuples[], int const boundaryIndices[],\n+int const interiorIndices[])\n+Reassign all facet coordinate indices.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bC_\bo_\bo_\br_\bd_\bS_\bt_\br_\bi_\bd_\be\n+int GetCoordStride() const\n+Return the number of elements between each coordinate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b0_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bE_\bd_\bg_\be_\bC_\bo_\bo_\br_\bd_\bs\n+int GetNumEdgeCoords(int edge) const\n+Return the number of coordinates within a given edge (excluding those at its\n+end vertices)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b1_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bI_\bn_\bt_\be_\br_\bi_\bo_\br_\bC_\bo_\bo_\br_\bd_\bs\n+int GetInteriorCoords(REAL coordTuples[]) const\n+Retrieve the coordinates for the boundary.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bt_\br_\bi_\bd_\be\n+int GetFacetStride() const\n+Return the number of elements between each facet.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b6_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bI_\bs_\bU_\bn_\bi_\bf_\bo_\br_\bm\n+bool IsUniform() const\n+Return if the pattern is uniform.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b1_\b8_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bo_\br_\bd_\bs\n+int GetNumCoords() const\n+Return the number of coordinates in the entire pattern.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b0_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bC_\bo_\bo_\br_\bd_\bs\n+int GetCoords(REAL coordTuples[]) const\n+Retrieve the coordinates for the entire pattern.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b3_\b7_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\ba_\bc_\be_\bt_\bC_\bo_\bo_\br_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+void TransformFacetCoordIndices(int facetTuples[], int commonOffset)\n+Apply a common offset to all facet coordinate indices.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn\n+Tessellation(Parameterization const &p, int numRates, int const rates[],\n+Options const &options=Options())\n+General constructor providing multiple tessellation rates for a non-uniform\n+tessellation.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn\n+Parameterization GetParameterization() const\n+Return the Parameterization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b1_\b7_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\ba_\bc_\be_\bt_\bC_\bo_\bo_\br_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+void TransformFacetCoordIndices(int facetTuples[], int const boundaryIndices[],\n+int interiorOffset)\n+Reassign indices of boundary coordinates while offseting those of interior\n+coordinates.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bi_\bz_\be\n+int GetFacetSize() const\n+Return the number of indices assigned to each facet.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b5_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn\n+Tessellation()=delete\n+Default construction is unavailable.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn\n+Tessellation(Parameterization const &p, int uniformRate, Options const\n+&options=Options())\n+Simple constructor providing a single uniform tessellation rate.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bt_\bs\n+int GetFacets(int facetTuples[]) const\n+Retrieve the facet indices for the entire pattern.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\ba_\bc_\be_\bt_\bs\n+int GetNumFacets() const\n+Return the number of facets in the entire pattern.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b5_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bI_\bn_\bt_\be_\br_\bi_\bo_\br_\bC_\bo_\bo_\br_\bd_\bs\n+int GetNumInteriorCoords() const\n+Return the number of interior coordinates.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b1_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\bo_\br_\bd\n+int GetVertexCoord(int vertex, REAL coordTuples[]) const\n+Retrieve the coordinate for a given vertex of the face.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b3_\b6_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bC_\bo_\bo_\br_\bd_\bs\n+int GetBoundaryCoords(REAL coordTuples[]) const\n+Retrieve the coordinates for the boundary.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn\n+Tessellation(Tessellation const &)=delete\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bR_\ba_\bt_\be_\bs\n+int GetRates(int rates[]) const\n+Retrieve the rates assigned.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bI_\bs_\bV_\ba_\bl_\bi_\bd\n bool IsValid() const\n-Return if instance is valid.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b2_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bH_\ba_\bs_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be_\bs\n-bool HasIncidentFaceSizes() const\n-Return if the sizes of incident faces are assigned.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b4_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bS_\be_\bt_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by\n-void SetBoundary(bool isOnBoundary)\n-Declare the vertex neighborhood as being on a boundary.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b3_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bS_\be_\bt_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be\n-void SetIncidentFaceSize(int faceIndex, int faceSize)\n-Assign the size of an incident face.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b5_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bS_\be_\bt_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n-void SetManifoldEdgeSharpness(int edgeIndex, float edgeSharpness)\n-Assign sharpness to the edge of a manifold neighborhood.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b0_\b3\n+Return true if correctly initialized.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b1_\b6_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+Tessellation & operator=(Tessellation const &)=delete\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bE_\bd_\bg_\be_\bC_\bo_\bo_\br_\bd_\bs\n+int GetEdgeCoords(int edge, REAL coordTuples[]) const\n+Retrieve the coordinates for a given edge of the face (excluding those at its\n+end vertices)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n+Options configure a Tessellation to specify the nature of both its results and\n+the structure of the c...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b6_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n+Options()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b6_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\be_\bt_\bC_\bo_\bo_\br_\bd_\bS_\bt_\br_\bi_\bd_\be\n+int GetCoordStride() const\n+Return the stride between (u,v) pairs.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b9_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bi_\bz_\be\n+Options & SetFacetSize(int numIndices)\n+Assign the number of indices per facet (must be 3 or 4, default is 3)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b3_\b4_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bt_\br_\bi_\bd_\be\n+int GetFacetStride() const\n+Return the stride between facets.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b8_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bi_\bz_\be\n+int GetFacetSize() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b8_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\be_\bt_\bC_\bo_\bo_\br_\bd_\bS_\bt_\br_\bi_\bd_\be\n+Options & SetCoordStride(int stride)\n+Assign the stride between (u,v) pairs (default is 2)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b3_\b5_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bt_\br_\bi_\bd_\be\n+Options & SetFacetStride(int stride)\n+Assign the stride between facets (default is facet size)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b3_\b5_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\br_\be_\bs_\be_\br_\bv_\be_\bQ_\bu_\ba_\bd_\bs\n+bool PreserveQuads() const\n+Return if preservation of quads is set.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b7_\b4\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bb_\bf_\br\n- * _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\n+ * _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00677.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00677.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/bfr/tessellation.h File Reference\n+OpenSubdiv: opensubdiv/bfr/vertexDescriptor.h File Reference\n \n \n \n \n \n \n \n@@ -90,29 +90,26 @@\n \n \n \n
\n \n-
tessellation.h File Reference
\n+
vertexDescriptor.h File Reference
\n
\n
\n
#include "../version.h"
\n-#include "../bfr/parameterization.h"
\n+#include "../vtr/stackBuffer.h"
\n
\n

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n-\n+\n+\n \n

\n Classes

class  Tessellation
 Encapsulates a specific tessellation pattern of a Parameterization. More...
 
class  Tessellation::Options
 Options configure a Tessellation to specify the nature of both its results and the structure of the coordinate and facet index arrays that its methods will populate. More...
class  VertexDescriptor
 Simple class used by subclasses of SurfaceFactory to describe a vertex. More...
 
\n \n \n \n \n@@ -121,13 +118,13 @@\n \n

\n Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,25 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-tessellation.h File Reference\n+vertexDescriptor.h File Reference\n #include \"../version.h\"\n-#include \"_\b._\b._\b/_\bb_\bf_\br_\b/_\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\"\n+#include \"_\b._\b._\b/_\bv_\bt_\br_\b/_\bs_\bt_\ba_\bc_\bk_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn\n-\u00a0 Encapsulates a specific tessellation pattern of a _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn.\n+class \u00a0 _\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+\u00a0 Simple class used by subclasses of _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by to describe a vertex.\n _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-class \u00a0 _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n- _\bO_\bp_\bt_\bi_\bo_\bn_\bs configure a _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn to specify the nature of both its\n-\u00a0 results and the structure of the coordinate and facet index arrays that\n- its methods will populate. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bb_\bf_\br\n- * _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+ * _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00677.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00677.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a00677 = [\n- [\"Tessellation\", \"a00961.html\", \"a00961\"],\n- [\"Options\", \"a00965.html\", \"a00965\"]\n+ [\"VertexDescriptor\", \"a00969.html\", \"a00969\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00677_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00677_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/bfr/tessellation.h Source File\n+OpenSubdiv: opensubdiv/bfr/vertexDescriptor.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
tessellation.h
\n+
vertexDescriptor.h
\n
\n
\n Go to the documentation of this file.
1//
\n
2// Copyright 2021 Pixar
\n
3//
\n
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
\n
5// with the following modification; you may not use this file except in
\n@@ -119,281 +119,425 @@\n
18// Unless required by applicable law or agreed to in writing, software
\n
19// distributed under the Apache License with the above modification is
\n
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
\n
21// KIND, either express or implied. See the Apache License for the specific
\n
22// language governing permissions and limitations under the Apache License.
\n
23//
\n
24
\n-
25#ifndef OPENSUBDIV3_BFR_TESSELLATION_H
\n-
26#define OPENSUBDIV3_BFR_TESSELLATION_H
\n+
25#ifndef OPENSUBDIV3_BFR_VERTEX_DESCRIPTOR_H
\n+
26#define OPENSUBDIV3_BFR_VERTEX_DESCRIPTOR_H
\n
27
\n
28#include "../version.h"
\n
29
\n-
30#include "../bfr/parameterization.h"
\n+
30#include "../vtr/stackBuffer.h"
\n
31
\n
32namespace OpenSubdiv {
\n
33namespace OPENSUBDIV_VERSION {
\n
34
\n
35namespace Bfr {
\n
36
\n-
\n-\n-
52public:
\n-
\n-
65 class Options {
\n-
66 public:
\n-
\n-
67 Options() : _preserveQuads(false), _facetSize4(false),
\n-
68 _coordStride(0), _facetStride(0) { }
\n-
\n-
69
\n-
72 Options & PreserveQuads(bool on);
\n-
74 bool PreserveQuads() const { return _preserveQuads; }
\n-
75
\n-
78 Options & SetFacetSize(int numIndices);
\n-
79 // @brief Return the number of indices per facet
\n-
80 int GetFacetSize() const { return 3 + (int)_facetSize4; }
\n-
81
\n-
83 Options & SetFacetStride(int stride);
\n-
85 int GetFacetStride() const { return _facetStride; }
\n-
86
\n-
88 Options & SetCoordStride(int stride);
\n-
90 int GetCoordStride() const { return _coordStride; }
\n-
91
\n-
92 private:
\n-
93 unsigned int _preserveQuads : 1;
\n-
94 unsigned int _facetSize4 : 1;
\n-
95
\n-
96 short _coordStride;
\n-
97 short _facetStride;
\n-
98 };
\n-
\n-
99
\n-
100public:
\n-
102
\n-
111
\n-
118 Tessellation(Parameterization const & p, int uniformRate,
\n-
119 Options const & options = Options());
\n-
120
\n-
158 Tessellation(Parameterization const & p, int numRates, int const rates[],
\n-
159 Options const & options = Options());
\n-
160
\n-
162 bool IsValid() const { return _isValid; }
\n-
163
\n-
165 Tessellation() = delete;
\n-
166
\n-
167 Tessellation(Tessellation const &) = delete;
\n-\n-\n-
171
\n-
173
\n-
177
\n-
179 Parameterization GetParameterization() const { return _param; }
\n-
180
\n-
182 int GetFaceSize() const { return _param.GetFaceSize(); }
\n-
183
\n-
185 int GetRates(int rates[]) const;
\n-
186
\n-
188 bool IsUniform() const { return _isUniform; }
\n-
190
\n-
192
\n+
50//
\n+
51// WIP - need to migrate some of these comments into Doxygen
\n+
52// - others will be moved to the external documentation
\n+
53//
\n+
54// It is used by subclasses of SurfaceFactory to provide a complete
\n+
55// topological description for each vertex of a face, i.e. invoked via
\n+
56// the virtual method:
\n+
57//
\n+
58// int populateFaceVertexDescriptor(Index baseFace,
\n+
59// int cornerVertex,
\n+
60// VertexDescriptor & v) const;
\n+
61//
\n+
62// Assignment of the full topology can be involved in the presence of
\n+
63// irregular faces, non-manifold topology or creasing around a vertex, but
\n+
64// many cases will be simple. For example, to specify a regular boundary
\n+
65// vertex of a Catmark mesh without any optional sharpness:
\n+
66//
\n+
67// int numIncidentFaces = 2;
\n+
68// bool vertexOnBoundary = true;
\n+
69//
\n+
70// vd.Initialize(numIncidentFaces);
\n+
71// vd.SetManifold(true);
\n+
72// vd.SetBoundary(vertexOnBoundary);
\n+
73// vd.ClearIncidentFaceSizes();
\n+
74// vd.Finalize();
\n+
75//
\n+
76// For a more general example, to assign a vertex of some valence whose
\n+
77// incident faces are of different sizes (e.g. required when triangles
\n+
78// appear around a vertex in an otherwise quad-dominant Catmark mesh):
\n+
79//
\n+
80// int numIncidentFaces = meshVertex.GetNumIncidentFaces();
\n+
81// bool vertexOnBoundary = meshVertex.IsBoundar();
\n+
82//
\n+
83// vd.Initialize(numIncidentFaces);
\n+
84// vd.SetManifold(true);
\n+
85// vd.SetBoundary(vertexOnBoundary);
\n+
86//
\n+
87// for (int i = 0; i < numIncidentFaces; ++i) {
\n+
88// vd.SetIncidentFaceSize(i, meshVertex.GetIncidentFaceSize(i));
\n+
89// }
\n+
90// vd.Finalize();
\n+
91//
\n+
92// These examples specify the incident faces as forming a manifold ring
\n+
93// (or half-ring) around the vertex, i.e. they can be specified as a
\n+
94// continuous, connected sequence in counter-clockwise order (and also
\n+
95// without degeneracies). In the case of a boundary vertex, the first
\n+
96// face must be on the leading edge of the boundary while the last is on
\n+
97// the trailing edge. For an interior vertex, which face is specified
\n+
98// first does not matter (since the set is periodic).
\n+
99//
\n+
100// In both cases, the location of the base face in this sequence -- the
\n+
101// face whose corner vertex is being described here -- must be specified
\n+
102// in the return value to populateFaceVertexDescriptor() (e.g. when a
\n+
103// boundary vertex has 3 incident faces, a return value of 0, 1 or 2
\n+
104// will indicate which is the base face).
\n+
105//
\n+
106// The corresponding methods to specify mesh control vertex indices (or
\n+
107// face-varying indices) complete the specification of the neighborhood:
\n+
108//
\n+
109// int getFaceCornerVertexIndices(Index baseFace, int cornerVertex,
\n+
110// Index vertexIndices[]) const;
\n+
111//
\n+
112// int getFaceCornerFVarValueIndices(Index baseFace, int cornerVertex,
\n+
113// Index fvarValueIndices[],
\n+
114// int fvarChannel) const;
\n+
115//
\n+
116// and are invoked by the Factory when needed.
\n+
117//
\n+
118// For each incident face, the indices for all vertices of that face are
\n+
119// to be specified (not the one-ring or some other subset). These indices
\n+
120// must also be specified in an orientation relative to the vertex, i.e.
\n+
121// for a vertex A and an incident face with face-vertices that may be
\n+
122// stored internally as {D, C, A, B}, they must be specified with A first
\n+
123// as {A, B, C, D}. This may seem a bit cumbersome, but it has clear
\n+
124// advantages when dealing with face-varying indices and unordered faces.
\n+
125//
\n+
126// More compact ways of specifying vertex indices for ordered, manifold
\n+
127// cases may be worth exploring in future, but face-varying indices and
\n+
128// non-manifold (unordered) vertices will always require such a full set,
\n+
129// so both methods will need to co-exist.
\n+
130//
\n+
\n+\n+
132public:
\n+
133 // The full declaration must be enclosed by calls to these methods:
\n+
134 //
\n+
135 // Note that vertex valences or face sizes in excess of those defined
\n+
136 // in Bfr::Limits (typically 16-bits) are not valid. When specifying
\n+
137 // values in excess of these limits, initialization will fail and/or
\n+
138 // the descriptor will be marked invalid and finalization will fail.
\n+
139 //
\n+
140
\n+
142
\n+
149
\n+
151 bool Initialize(int numIncidentFaces);
\n+
152
\n+
154 bool Finalize();
\n+
155
\n+
157 bool IsValid() const;
\n+
159
\n+
160 //
\n+
161 // WIP - need to migrate these comments into Doxygen
\n+
162 //
\n+
163 // Three groups of methods describe the topology around a vertex:
\n+
164 // - simple properties (vertex is a boundary, manifold, etc.)
\n+
165 // - sizes of incident faces (constant or size for each face)
\n+
166 // - sharpness of the vertex and its incident edges (optional)
\n+
167 //
\n+
168
\n+
169 // Manifold and boundary conditions:
\n+
170 //
\n+
171 // The manifold property is a strict condition but preferred for
\n+
172 // efficiency and is usually available from common connected mesh
\n+
173 // representations. When declaring the topology as "manifold",
\n+
174 // the Factory assumes the following:
\n+
175 //
\n+
176 // - all incident faces are "ordered" (counter-clockwise)
\n+
177 // - all incident faces are consistently oriented
\n+
178 // - all incident edges are non-degenerate
\n+
179 //
\n+
180 // If not certain that all of these conditions are met, it is best
\n+
181 // to not declare manifold -- leaving the Factory to make sense of
\n+
182 // the set of incident faces from the face-vertex indices that are
\n+
183 // provided elsewhere.
\n+
184 //
\n+
185
\n+
187
\n+
191
\n+
193 void SetManifold(bool isManifold);
\n+
194
\n+
196 void SetBoundary(bool isOnBoundary);
\n+
197
\n+
199 void SetIncidentFaceSize(int faceIndex, int faceSize);
\n+
200
\n+\n
203
\n-
205 int GetNumCoords() const { return _numInteriorPoints + _numBoundaryPoints; }
\n+
205 void SetVertexSharpness(float sharpness);
\n
206
\n-
208 int GetCoordStride() const { return _coordStride; }
\n+\n
209
\n-
211 int GetNumBoundaryCoords() const { return _numBoundaryPoints; }
\n-
212
\n-
214 int GetNumInteriorCoords() const { return _numInteriorPoints; }
\n-
215
\n-
218 int GetNumEdgeCoords(int edge) const { return _outerRates[edge] - 1; }
\n-
219
\n-
221 template <typename REAL>
\n-
222 int GetCoords(REAL coordTuples[]) const;
\n-
223
\n-
225 template <typename REAL>
\n-
226 int GetBoundaryCoords(REAL coordTuples[]) const;
\n-
227
\n-
229 template <typename REAL>
\n-
230 int GetInteriorCoords(REAL coordTuples[]) const;
\n-
231
\n-
233 template <typename REAL>
\n-
234 int GetVertexCoord(int vertex, REAL coordTuples[]) const;
\n-
235
\n-
238 template <typename REAL>
\n-
239 int GetEdgeCoords(int edge, REAL coordTuples[]) const;
\n-
241
\n-
243
\n-
253
\n-
255 int GetNumFacets() const { return _numFacets; }
\n-
256
\n-
258 int GetFacetSize() const { return _facetSize; }
\n-
259
\n-
261 int GetFacetStride() const { return _facetStride; }
\n-
262
\n-
264 int GetFacets(int facetTuples[]) const;
\n+
221 void SetManifoldEdgeSharpness(int edgeIndex, float edgeSharpness);
\n+
222
\n+
238 void SetIncidentFaceEdgeSharpness(int faceIndex, float leadingEdgeSharp,
\n+
239 float trailingEdgeSharp);
\n+
240
\n+
242 void ClearEdgeSharpness();
\n+
244
\n+
246
\n+
251
\n+
253 bool IsManifold() const;
\n+
254
\n+
256 bool IsBoundary() const;
\n+
257
\n+
259 bool HasIncidentFaceSizes() const;
\n+
260
\n+
262 int GetIncidentFaceSize(int faceIndex) const;
\n+
263
\n+
265 bool HasVertexSharpness() const;
\n
266
\n-
268
\n-
283
\n-
285 void TransformFacetCoordIndices(int facetTuples[], int commonOffset);
\n-
286
\n-
289 void TransformFacetCoordIndices(int facetTuples[],
\n-
290 int const boundaryIndices[],
\n-
291 int interiorOffset);
\n-
292
\n-
294 void TransformFacetCoordIndices(int facetTuples[],
\n-
295 int const boundaryIndices[],
\n-
296 int const interiorIndices[]);
\n-
298
\n-
299private:
\n-
300 // Private initialization methods:
\n-
301 bool validateArguments(Parameterization const & p,
\n-
302 int nRates, int const rates[], Options const & options);
\n-
303
\n-
304 void initialize(Parameterization const & p,
\n-
305 int nRates, int const rates[], Options const & options);
\n-
306
\n-
307 void initializeDefaults();
\n-
308 int initializeRates(int nRates, int const rates[]);
\n-
309 void initializeInventoryForParamTri(int sumOfOuterRates);
\n-
310 void initializeInventoryForParamQuad(int sumOfOuterRates);
\n-
311 void initializeInventoryForParamQPoly(int sumOfOuterRates);
\n-
312
\n-
313private:
\n-
314 // Private members:
\n-
315 Parameterization _param;
\n-
316
\n-
317 unsigned short _isValid : 1;
\n-
318 unsigned short _isUniform : 1;
\n-
319 unsigned short _triangulate : 1;
\n-
320 unsigned short _singleFace : 1;
\n-
321 unsigned short _segmentedFace : 1;
\n-
322 unsigned short _triangleFan : 1;
\n-
323 unsigned short _splitQuad : 1;
\n-
324
\n-
325 short _facetSize;
\n-
326 int _facetStride;
\n-
327 int _coordStride;
\n-
328
\n-
329 int _numGivenRates;
\n-
330 int _numBoundaryPoints;
\n-
331 int _numInteriorPoints;
\n-
332 int _numFacets;
\n-
333
\n-
334 int _innerRates[2];
\n-
335 int* _outerRates;
\n-
336 int _outerRatesLocal[4];
\n-
337};
\n-
\n-
338
\n-
339//
\n-
340// Inline implementations:
\n-
341//
\n-\n-
\n-\n-
344 _preserveQuads = on;
\n-
345 return *this;
\n-
346}
\n-
\n-\n-
\n-\n-
349 _facetSize4 = (numIndices == 4);
\n-
350 return *this;
\n-
351}
\n-
\n-\n-
\n-\n-
354 _facetStride = (short) stride;
\n-
355 return *this;
\n-
356}
\n-
\n-\n-
\n-\n-
359 _coordStride = (short) stride;
\n-
360 return *this;
\n-
361}
\n-
\n-
362
\n-
363template <typename REAL>
\n-
364inline int
\n-
\n-
365Tessellation::GetVertexCoord(int vertex, REAL coord[]) const {
\n-
366 _param.GetVertexCoord(vertex, coord);
\n-
367 return 1;
\n-
368}
\n-
\n-
369
\n-
370template <typename REAL>
\n-
371inline int
\n-
\n-
372Tessellation::GetCoords(REAL coordTuples[]) const {
\n-
373 int nCoords = GetBoundaryCoords(coordTuples);
\n-
374 nCoords += GetInteriorCoords(coordTuples + nCoords * _coordStride);
\n-
375 return nCoords;
\n-
376}
\n-
\n-
377
\n-
378} // end namespace Bfr
\n-
379
\n-
380} // end namespace OPENSUBDIV_VERSION
\n-
381using namespace OPENSUBDIV_VERSION;
\n-
382
\n-
383} // end namespace OpenSubdiv
\n-
384
\n-
385#endif /* OPENSUBDIV3_BFR_TESSELLATION */
\n-\n-
Simple class defining the 2D parameterization of a face.
\n-
int GetFaceSize() const
Returns the size (number of vertices) of the corresponding face.
\n-
void GetVertexCoord(int vertexIndex, REAL uvCoord[2]) const
Returns the (u,v) coordinate of a given vertex.
\n-
Encapsulates a specific tessellation pattern of a Parameterization.
\n-
int GetFaceSize() const
Return the size of the face.
\n-
int GetNumBoundaryCoords() const
Return the number of boundary coordinates.
\n-\n-
void TransformFacetCoordIndices(int facetTuples[], int const boundaryIndices[], int const interiorIndices[])
Reassign all facet coordinate indices.
\n-
int GetCoordStride() const
Return the number of elements between each coordinate.
\n-
int GetNumEdgeCoords(int edge) const
Return the number of coordinates within a given edge (excluding those at its end vertices)
\n-
int GetInteriorCoords(REAL coordTuples[]) const
Retrieve the coordinates for the boundary.
\n-
int GetFacetStride() const
Return the number of elements between each facet.
\n-
bool IsUniform() const
Return if the pattern is uniform.
\n-
int GetNumCoords() const
Return the number of coordinates in the entire pattern.
\n-
int GetCoords(REAL coordTuples[]) const
Retrieve the coordinates for the entire pattern.
\n-
void TransformFacetCoordIndices(int facetTuples[], int commonOffset)
Apply a common offset to all facet coordinate indices.
\n-
Tessellation(Parameterization const &p, int numRates, int const rates[], Options const &options=Options())
General constructor providing multiple tessellation rates for a non-uniform tessellation.
\n-
Parameterization GetParameterization() const
Return the Parameterization.
\n-
void TransformFacetCoordIndices(int facetTuples[], int const boundaryIndices[], int interiorOffset)
Reassign indices of boundary coordinates while offseting those of interior coordinates.
\n-
int GetFacetSize() const
Return the number of indices assigned to each facet.
\n-
Tessellation()=delete
Default construction is unavailable.
\n-
Tessellation(Parameterization const &p, int uniformRate, Options const &options=Options())
Simple constructor providing a single uniform tessellation rate.
\n-
int GetFacets(int facetTuples[]) const
Retrieve the facet indices for the entire pattern.
\n-
int GetNumFacets() const
Return the number of facets in the entire pattern.
\n-
int GetNumInteriorCoords() const
Return the number of interior coordinates.
\n-
int GetVertexCoord(int vertex, REAL coordTuples[]) const
Retrieve the coordinate for a given vertex of the face.
\n-
int GetBoundaryCoords(REAL coordTuples[]) const
Retrieve the coordinates for the boundary.
\n-\n-
int GetRates(int rates[]) const
Retrieve the rates assigned.
\n-
bool IsValid() const
Return true if correctly initialized.
\n-
Tessellation & operator=(Tessellation const &)=delete
\n-
int GetEdgeCoords(int edge, REAL coordTuples[]) const
Retrieve the coordinates for a given edge of the face (excluding those at its end vertices)
\n-
Options configure a Tessellation to specify the nature of both its results and the structure of the c...
\n-\n-
int GetCoordStride() const
Return the stride between (u,v) pairs.
\n-
Options & SetFacetSize(int numIndices)
Assign the number of indices per facet (must be 3 or 4, default is 3)
\n-
int GetFacetStride() const
Return the stride between facets.
\n-\n-
Options & SetCoordStride(int stride)
Assign the stride between (u,v) pairs (default is 2)
\n-
Options & SetFacetStride(int stride)
Assign the stride between facets (default is facet size)
\n-
bool PreserveQuads() const
Return if preservation of quads is set.
\n+
268 float GetVertexSharpness() const;
\n+
269
\n+
271 bool HasEdgeSharpness() const;
\n+
272
\n+
274 float GetManifoldEdgeSharpness(int edgeIndex) const;
\n+
275
\n+
277 void GetIncidentFaceEdgeSharpness(int faceIndex,
\n+
278 float * leadingEdgeSharp, float * trailingEdgeSharp) const;
\n+
280
\n+
281protected:
\n+
283 friend class FaceVertex;
\n+
284
\n+
285 VertexDescriptor() { }
\n+\n+
287
\n+
288 typedef Vtr::internal::StackBuffer<int,8,true> IntBuffer;
\n+
289 typedef Vtr::internal::StackBuffer<float,16,true> FloatBuffer;
\n+
290
\n+
291 void initFaceSizes();
\n+
292 void initEdgeSharpness();
\n+
294
\n+
295protected:
\n+
297 // Member variables assigned through the above interface:
\n+
298 unsigned short _isValid : 1;
\n+
299 unsigned short _isInitialized : 1;
\n+
300 unsigned short _isFinalized : 1;
\n+
301
\n+
302 unsigned short _isManifold : 1;
\n+
303 unsigned short _isBoundary : 1;
\n+
304
\n+
305 unsigned short _hasFaceSizes : 1;
\n+
306 unsigned short _hasEdgeSharpness : 1;
\n+
307
\n+
308 short _numFaces;
\n+
309 float _vertSharpness;
\n+
310
\n+
311 FloatBuffer _faceEdgeSharpness;
\n+
312 IntBuffer _faceSizeOffsets;
\n+
314};
\n+
\n+
315
\n+
316//
\n+
317// Public inline methods for simple assignment:
\n+
318//
\n+
319inline bool
\n+
\n+\n+
321 return _isValid;
\n+
322}
\n+
\n+
323
\n+
324inline void
\n+
\n+\n+
326 _isManifold = isManifold;
\n+
327}
\n+
\n+
328inline bool
\n+
\n+\n+
330 return _isManifold;
\n+
331}
\n+
\n+
332
\n+
333inline void
\n+
\n+\n+
335 _isBoundary = isBoundary;
\n+
336}
\n+
\n+
337inline bool
\n+
\n+\n+
339 return _isBoundary;
\n+
340}
\n+
\n+
341
\n+
342//
\n+
343// Public inline methods involving sizes of incident faces:
\n+
344//
\n+
345inline bool
\n+
\n+\n+
347 return _hasFaceSizes;
\n+
348}
\n+
\n+
349inline void
\n+
\n+\n+
351 _hasFaceSizes = false;
\n+
352}
\n+
\n+
353
\n+
354inline void
\n+
\n+
355VertexDescriptor::SetIncidentFaceSize(int incFaceIndex, int faceSize) {
\n+
356
\n+
357 if (!_hasFaceSizes) initFaceSizes();
\n+
358
\n+
359 _faceSizeOffsets[incFaceIndex] = faceSize;
\n+
360}
\n+
\n+
361inline int
\n+
\n+\n+
363
\n+
364 return _isFinalized ?
\n+
365 (_faceSizeOffsets[incFaceIndex+1] - _faceSizeOffsets[incFaceIndex]) :
\n+
366 _faceSizeOffsets[incFaceIndex];
\n+
367}
\n+
\n+
368
\n+
369//
\n+
370// Public inline methods involving vertex sharpness:
\n+
371//
\n+
372inline bool
\n+
\n+\n+
374 return _vertSharpness > 0.0f;
\n+
375}
\n+
\n+
376inline void
\n+
\n+\n+
378 _vertSharpness = 0.0f;
\n+
379}
\n+
\n+
380
\n+
381inline void
\n+
\n+\n+
383 _vertSharpness = vertSharpness;
\n+
384}
\n+
\n+
385inline float
\n+
\n+\n+
387 return _vertSharpness;
\n+
388}
\n+
\n+
389
\n+
390//
\n+
391// Public inline methods involving vertex sharpness:
\n+
392//
\n+
393inline bool
\n+
\n+\n+
395 return _hasEdgeSharpness;
\n+
396}
\n+
\n+
397inline void
\n+
\n+\n+
399 _hasEdgeSharpness = false;
\n+
400}
\n+
\n+
401
\n+
402inline void
\n+
\n+
403VertexDescriptor::SetManifoldEdgeSharpness(int edgeIndex, float sharpness) {
\n+
404
\n+
405 if (!_hasEdgeSharpness) initEdgeSharpness();
\n+
406
\n+
407 // Assign the leading edge of the face after the edge (even index):
\n+
408 if (edgeIndex < _numFaces) {
\n+
409 _faceEdgeSharpness[2*edgeIndex] = sharpness;
\n+
410 }
\n+
411
\n+
412 // Assign the trailing edge of the face before the edge (odd index):
\n+
413 if (edgeIndex > 0) {
\n+
414 _faceEdgeSharpness[2*edgeIndex-1] = sharpness;
\n+
415 } else if (!IsBoundary()) {
\n+
416 _faceEdgeSharpness[2*_numFaces-1] = sharpness;
\n+
417 }
\n+
418}
\n+
\n+
419inline float
\n+
\n+\n+
421
\n+
422 // All edges are first of the pair (even index) except last of boundary
\n+
423 return _faceEdgeSharpness[2*edgeIndex - (edgeIndex == _numFaces)];
\n+
424}
\n+
\n+
425
\n+
426inline void
\n+
\n+\n+
428 float leadingEdgeSharpness, float trailingEdgeSharpness) {
\n+
429
\n+
430 if (!_hasEdgeSharpness) initEdgeSharpness();
\n+
431
\n+
432 _faceEdgeSharpness[2*faceIndex ] = leadingEdgeSharpness;
\n+
433 _faceEdgeSharpness[2*faceIndex+1] = trailingEdgeSharpness;
\n+
434}
\n+
\n+
435inline void
\n+
\n+\n+
437 float * leadingEdgeSharpness, float * trailingEdgeSharpness) const {
\n+
438
\n+
439 *leadingEdgeSharpness = _faceEdgeSharpness[2*faceIndex];
\n+
440 *trailingEdgeSharpness = _faceEdgeSharpness[2*faceIndex+1];
\n+
441}
\n+
\n+
442
\n+
443} // end namespace Bfr
\n+
444
\n+
445} // end namespace OPENSUBDIV_VERSION
\n+
446using namespace OPENSUBDIV_VERSION;
\n+
447} // end namespace OpenSubdiv
\n+
448
\n+
449#endif /* OPENSUBDIV3_BFR_VERTEX_DESCRIPTOR_H */
\n+\n+
Simple class used by subclasses of SurfaceFactory to describe a vertex.
\n+
float GetVertexSharpness() const
Return the sharpness of the vertex.
\n+
bool Finalize()
Terminate the sequence of specifications.
\n+
void SetManifold(bool isManifold)
Declare the vertex neighborhood as manifold (ordered)
\n+
bool Initialize(int numIncidentFaces)
Initialize specification with the number of incident faces.
\n+
bool IsManifold() const
Return if vertex neighborhood is manifold.
\n+
bool HasEdgeSharpness() const
Return if sharpness was assigned to the incident edges.
\n+
int GetIncidentFaceSize(int faceIndex) const
Return the size of an incident face.
\n+
float GetManifoldEdgeSharpness(int edgeIndex) const
Return the sharpness assigned to a manifold edge.
\n+
void SetIncidentFaceEdgeSharpness(int faceIndex, float leadingEdgeSharp, float trailingEdgeSharp)
Assign sharpness to the edges of an incident face.
\n+
bool HasVertexSharpness() const
Return if sharpness was assigned to the vertex.
\n+
void ClearIncidentFaceSizes()
Remove any assigned sizes of incident faces.
\n+
void SetVertexSharpness(float sharpness)
Assign sharpness to the vertex.
\n+
void ClearVertexSharpness()
Remove any sharpness assigned to the vertex.
\n+
void ClearEdgeSharpness()
Remove any sharpness assigned to the incident edges.
\n+
void GetIncidentFaceEdgeSharpness(int faceIndex, float *leadingEdgeSharp, float *trailingEdgeSharp) const
Return the sharpness assigned to edges of an incident face.
\n+
bool IsBoundary() const
Return if vertex neighborhood is on a boundary.
\n+
bool IsValid() const
Return if instance is valid.
\n+
bool HasIncidentFaceSizes() const
Return if the sizes of incident faces are assigned.
\n+
void SetBoundary(bool isOnBoundary)
Declare the vertex neighborhood as being on a boundary.
\n+
void SetIncidentFaceSize(int faceIndex, int faceSize)
Assign the size of an incident face.
\n+
void SetManifoldEdgeSharpness(int edgeIndex, float edgeSharpness)
Assign sharpness to the edge of a manifold neighborhood.
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-tessellation.h\n+vertexDescriptor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2021 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -24,367 +24,446 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_BFR_TESSELLATION_H\n-26#define OPENSUBDIV3_BFR_TESSELLATION_H\n+25#ifndef OPENSUBDIV3_BFR_VERTEX_DESCRIPTOR_H\n+26#define OPENSUBDIV3_BFR_VERTEX_DESCRIPTOR_H\n 27\n 28#include \"../version.h\"\n 29\n-30#include \"../bfr/parameterization.h\"\n+30#include \"../vtr/stackBuffer.h\"\n 31\n 32namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n 33namespace OPENSUBDIV_VERSION {\n 34\n 35namespace Bfr {\n 36\n-_\b5_\b1class _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn {\n-52public:\n-_\b6_\b5 class _\bO_\bp_\bt_\bi_\bo_\bn_\bs {\n-66 public:\n-_\b6_\b7 _\bO_\bp_\bt_\bi_\bo_\bn_\bs() : _preserveQuads(false), _facetSize4(false),\n-68 _coordStride(0), _facetStride(0) { }\n-69\n-72 _\bO_\bp_\bt_\bi_\bo_\bn_\bs & _\bP_\br_\be_\bs_\be_\br_\bv_\be_\bQ_\bu_\ba_\bd_\bs(bool on);\n-_\b7_\b4 bool _\bP_\br_\be_\bs_\be_\br_\bv_\be_\bQ_\bu_\ba_\bd_\bs() const { return _preserveQuads; }\n-75\n-78 _\bO_\bp_\bt_\bi_\bo_\bn_\bs & _\bS_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bi_\bz_\be(int numIndices);\n-79 // @brief Return the number of indices per facet\n-_\b8_\b0 int _\bG_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bi_\bz_\be() const { return 3 + (int)_facetSize4; }\n-81\n-83 _\bO_\bp_\bt_\bi_\bo_\bn_\bs & _\bS_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bt_\br_\bi_\bd_\be(int stride);\n-_\b8_\b5 int _\bG_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bt_\br_\bi_\bd_\be() const { return _facetStride; }\n-86\n-88 _\bO_\bp_\bt_\bi_\bo_\bn_\bs & _\bS_\be_\bt_\bC_\bo_\bo_\br_\bd_\bS_\bt_\br_\bi_\bd_\be(int stride);\n-_\b9_\b0 int _\bG_\be_\bt_\bC_\bo_\bo_\br_\bd_\bS_\bt_\br_\bi_\bd_\be() const { return _coordStride; }\n-91\n-92 private:\n-93 unsigned int _preserveQuads : 1;\n-94 unsigned int _facetSize4 : 1;\n-95\n-96 short _coordStride;\n-97 short _facetStride;\n-98 };\n-99\n-100public:\n-102\n-111\n-_\b1_\b1_\b8 _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn(_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn const & p, int uniformRate,\n-119 _\bO_\bp_\bt_\bi_\bo_\bn_\bs const & options = _\bO_\bp_\bt_\bi_\bo_\bn_\bs());\n-120\n-_\b1_\b5_\b8 _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn(_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn const & p, int numRates, int const rates[],\n-159 _\bO_\bp_\bt_\bi_\bo_\bn_\bs const & options = _\bO_\bp_\bt_\bi_\bo_\bn_\bs());\n-160\n-_\b1_\b6_\b2 bool _\bI_\bs_\bV_\ba_\bl_\bi_\bd() const { return _isValid; }\n-163\n-_\b1_\b6_\b5 _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn() = delete;\n-166\n-_\b1_\b6_\b7 _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn(_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn const &) = delete;\n-_\b1_\b6_\b8 _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn & _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn const &) = delete;\n-_\b1_\b6_\b9 _\b~_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn();\n-171\n-173\n-177\n-_\b1_\b7_\b9 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn _\bG_\be_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn() const { return _param; }\n-180\n-_\b1_\b8_\b2 int _\bG_\be_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be() const { return _param._\bG_\be_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be(); }\n-183\n-_\b1_\b8_\b5 int _\bG_\be_\bt_\bR_\ba_\bt_\be_\bs(int rates[]) const;\n-186\n-_\b1_\b8_\b8 bool _\bI_\bs_\bU_\bn_\bi_\bf_\bo_\br_\bm() const { return _isUniform; }\n-190\n-192\n+50//\n+51// WIP - need to migrate some of these comments into Doxygen\n+52// - others will be moved to the external documentation\n+53//\n+54// It is used by subclasses of SurfaceFactory to provide a complete\n+55// topological description for each vertex of a face, i.e. invoked via\n+56// the virtual method:\n+57//\n+58// int populateFaceVertexDescriptor(Index baseFace,\n+59// int cornerVertex,\n+60// VertexDescriptor & v) const;\n+61//\n+62// Assignment of the full topology can be involved in the presence of\n+63// irregular faces, non-manifold topology or creasing around a vertex, but\n+64// many cases will be simple. For example, to specify a regular boundary\n+65// vertex of a Catmark mesh without any optional sharpness:\n+66//\n+67// int numIncidentFaces = 2;\n+68// bool vertexOnBoundary = true;\n+69//\n+70// vd.Initialize(numIncidentFaces);\n+71// vd.SetManifold(true);\n+72// vd.SetBoundary(vertexOnBoundary);\n+73// vd.ClearIncidentFaceSizes();\n+74// vd.Finalize();\n+75//\n+76// For a more general example, to assign a vertex of some valence whose\n+77// incident faces are of different sizes (e.g. required when triangles\n+78// appear around a vertex in an otherwise quad-dominant Catmark mesh):\n+79//\n+80// int numIncidentFaces = meshVertex.GetNumIncidentFaces();\n+81// bool vertexOnBoundary = meshVertex.IsBoundar();\n+82//\n+83// vd.Initialize(numIncidentFaces);\n+84// vd.SetManifold(true);\n+85// vd.SetBoundary(vertexOnBoundary);\n+86//\n+87// for (int i = 0; i < numIncidentFaces; ++i) {\n+88// vd.SetIncidentFaceSize(i, meshVertex.GetIncidentFaceSize(i));\n+89// }\n+90// vd.Finalize();\n+91//\n+92// These examples specify the incident faces as forming a manifold ring\n+93// (or half-ring) around the vertex, i.e. they can be specified as a\n+94// continuous, connected sequence in counter-clockwise order (and also\n+95// without degeneracies). In the case of a boundary vertex, the first\n+96// face must be on the leading edge of the boundary while the last is on\n+97// the trailing edge. For an interior vertex, which face is specified\n+98// first does not matter (since the set is periodic).\n+99//\n+100// In both cases, the location of the base face in this sequence -- the\n+101// face whose corner vertex is being described here -- must be specified\n+102// in the return value to populateFaceVertexDescriptor() (e.g. when a\n+103// boundary vertex has 3 incident faces, a return value of 0, 1 or 2\n+104// will indicate which is the base face).\n+105//\n+106// The corresponding methods to specify mesh control vertex indices (or\n+107// face-varying indices) complete the specification of the neighborhood:\n+108//\n+109// int getFaceCornerVertexIndices(Index baseFace, int cornerVertex,\n+110// Index vertexIndices[]) const;\n+111//\n+112// int getFaceCornerFVarValueIndices(Index baseFace, int cornerVertex,\n+113// Index fvarValueIndices[],\n+114// int fvarChannel) const;\n+115//\n+116// and are invoked by the Factory when needed.\n+117//\n+118// For each incident face, the indices for all vertices of that face are\n+119// to be specified (not the one-ring or some other subset). These indices\n+120// must also be specified in an orientation relative to the vertex, i.e.\n+121// for a vertex A and an incident face with face-vertices that may be\n+122// stored internally as {D, C, A, B}, they must be specified with A first\n+123// as {A, B, C, D}. This may seem a bit cumbersome, but it has clear\n+124// advantages when dealing with face-varying indices and unordered faces.\n+125//\n+126// More compact ways of specifying vertex indices for ordered, manifold\n+127// cases may be worth exploring in future, but face-varying indices and\n+128// non-manifold (unordered) vertices will always require such a full set,\n+129// so both methods will need to co-exist.\n+130//\n+_\b1_\b3_\b1class _\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br {\n+132public:\n+133 // The full declaration must be enclosed by calls to these methods:\n+134 //\n+135 // Note that vertex valences or face sizes in excess of those defined\n+136 // in Bfr::Limits (typically 16-bits) are not valid. When specifying\n+137 // values in excess of these limits, initialization will fail and/or\n+138 // the descriptor will be marked invalid and finalization will fail.\n+139 //\n+140\n+142\n+149\n+_\b1_\b5_\b1 bool _\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be(int numIncidentFaces);\n+152\n+_\b1_\b5_\b4 bool _\bF_\bi_\bn_\ba_\bl_\bi_\bz_\be();\n+155\n+157 bool _\bI_\bs_\bV_\ba_\bl_\bi_\bd() const;\n+159\n+160 //\n+161 // WIP - need to migrate these comments into Doxygen\n+162 //\n+163 // Three groups of methods describe the topology around a vertex:\n+164 // - simple properties (vertex is a boundary, manifold, etc.)\n+165 // - sizes of incident faces (constant or size for each face)\n+166 // - sharpness of the vertex and its incident edges (optional)\n+167 //\n+168\n+169 // Manifold and boundary conditions:\n+170 //\n+171 // The manifold property is a strict condition but preferred for\n+172 // efficiency and is usually available from common connected mesh\n+173 // representations. When declaring the topology as \"manifold\",\n+174 // the Factory assumes the following:\n+175 //\n+176 // - all incident faces are \"ordered\" (counter-clockwise)\n+177 // - all incident faces are consistently oriented\n+178 // - all incident edges are non-degenerate\n+179 //\n+180 // If not certain that all of these conditions are met, it is best\n+181 // to not declare manifold -- leaving the Factory to make sense of\n+182 // the set of incident faces from the face-vertex indices that are\n+183 // provided elsewhere.\n+184 //\n+185\n+187\n+191\n+193 void _\bS_\be_\bt_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd(bool isManifold);\n+194\n+196 void _\bS_\be_\bt_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by(bool isOnBoundary);\n+197\n+199 void _\bS_\be_\bt_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be(int faceIndex, int faceSize);\n+200\n+202 void _\bC_\bl_\be_\ba_\br_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be_\bs();\n 203\n-_\b2_\b0_\b5 int _\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bo_\br_\bd_\bs() const { return _numInteriorPoints + _numBoundaryPoints;\n-}\n+205 void _\bS_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(float sharpness);\n 206\n-_\b2_\b0_\b8 int _\bG_\be_\bt_\bC_\bo_\bo_\br_\bd_\bS_\bt_\br_\bi_\bd_\be() const { return _coordStride; }\n+208 void _\bC_\bl_\be_\ba_\br_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs();\n 209\n-_\b2_\b1_\b1 int _\bG_\be_\bt_\bN_\bu_\bm_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bC_\bo_\bo_\br_\bd_\bs() const { return _numBoundaryPoints; }\n-212\n-_\b2_\b1_\b4 int _\bG_\be_\bt_\bN_\bu_\bm_\bI_\bn_\bt_\be_\br_\bi_\bo_\br_\bC_\bo_\bo_\br_\bd_\bs() const { return _numInteriorPoints; }\n-215\n-_\b2_\b1_\b8 int _\bG_\be_\bt_\bN_\bu_\bm_\bE_\bd_\bg_\be_\bC_\bo_\bo_\br_\bd_\bs(int edge) const { return _outerRates[edge] - 1; }\n-219\n-221 template \n-222 int _\bG_\be_\bt_\bC_\bo_\bo_\br_\bd_\bs(REAL coordTuples[]) const;\n-223\n-225 template \n-_\b2_\b2_\b6 int _\bG_\be_\bt_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bC_\bo_\bo_\br_\bd_\bs(REAL coordTuples[]) const;\n-227\n-229 template \n-_\b2_\b3_\b0 int _\bG_\be_\bt_\bI_\bn_\bt_\be_\br_\bi_\bo_\br_\bC_\bo_\bo_\br_\bd_\bs(REAL coordTuples[]) const;\n-231\n-233 template \n-234 int _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\bo_\br_\bd(int vertex, REAL coordTuples[]) const;\n-235\n-238 template \n-_\b2_\b3_\b9 int _\bG_\be_\bt_\bE_\bd_\bg_\be_\bC_\bo_\bo_\br_\bd_\bs(int edge, REAL coordTuples[]) const;\n-241\n-243\n-253\n-_\b2_\b5_\b5 int _\bG_\be_\bt_\bN_\bu_\bm_\bF_\ba_\bc_\be_\bt_\bs() const { return _numFacets; }\n-256\n-_\b2_\b5_\b8 int _\bG_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bi_\bz_\be() const { return _facetSize; }\n-259\n-_\b2_\b6_\b1 int _\bG_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bt_\br_\bi_\bd_\be() const { return _facetStride; }\n-262\n-_\b2_\b6_\b4 int _\bG_\be_\bt_\bF_\ba_\bc_\be_\bt_\bs(int facetTuples[]) const;\n+221 void _\bS_\be_\bt_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(int edgeIndex, float edgeSharpness);\n+222\n+238 void _\bS_\be_\bt_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(int faceIndex, float leadingEdgeSharp,\n+239 float trailingEdgeSharp);\n+240\n+242 void _\bC_\bl_\be_\ba_\br_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs();\n+244\n+246\n+251\n+253 bool _\bI_\bs_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd() const;\n+254\n+256 bool _\bI_\bs_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by() const;\n+257\n+259 bool _\bH_\ba_\bs_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be_\bs() const;\n+260\n+262 int _\bG_\be_\bt_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be(int faceIndex) const;\n+263\n+265 bool _\bH_\ba_\bs_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs() const;\n 266\n-268\n-283\n-_\b2_\b8_\b5 void _\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\ba_\bc_\be_\bt_\bC_\bo_\bo_\br_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(int facetTuples[], int commonOffset);\n-286\n-_\b2_\b8_\b9 void _\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\ba_\bc_\be_\bt_\bC_\bo_\bo_\br_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(int facetTuples[],\n-290 int const boundaryIndices[],\n-291 int interiorOffset);\n-292\n-_\b2_\b9_\b4 void _\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\ba_\bc_\be_\bt_\bC_\bo_\bo_\br_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(int facetTuples[],\n-295 int const boundaryIndices[],\n-296 int const interiorIndices[]);\n-298\n-299private:\n-300 // Private initialization methods:\n-301 bool validateArguments(_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn const & p,\n-302 int nRates, int const rates[], _\bO_\bp_\bt_\bi_\bo_\bn_\bs const & options);\n-303\n-304 void initialize(_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn const & p,\n-305 int nRates, int const rates[], _\bO_\bp_\bt_\bi_\bo_\bn_\bs const & options);\n-306\n-307 void initializeDefaults();\n-308 int initializeRates(int nRates, int const rates[]);\n-309 void initializeInventoryForParamTri(int sumOfOuterRates);\n-310 void initializeInventoryForParamQuad(int sumOfOuterRates);\n-311 void initializeInventoryForParamQPoly(int sumOfOuterRates);\n-312\n-313private:\n-314 // Private members:\n-315 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn _param;\n-316\n-317 unsigned short _isValid : 1;\n-318 unsigned short _isUniform : 1;\n-319 unsigned short _triangulate : 1;\n-320 unsigned short _singleFace : 1;\n-321 unsigned short _segmentedFace : 1;\n-322 unsigned short _triangleFan : 1;\n-323 unsigned short _splitQuad : 1;\n-324\n-325 short _facetSize;\n-326 int _facetStride;\n-327 int _coordStride;\n-328\n-329 int _numGivenRates;\n-330 int _numBoundaryPoints;\n-331 int _numInteriorPoints;\n-332 int _numFacets;\n-333\n-334 int _innerRates[2];\n-335 int* _outerRates;\n-336 int _outerRatesLocal[4];\n-337};\n-338\n-339//\n-340// Inline implementations:\n-341//\n-342inline _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs &\n-_\b3_\b4_\b3_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\br_\be_\bs_\be_\br_\bv_\be_\bQ_\bu_\ba_\bd_\bs(bool on) {\n-344 _preserveQuads = on;\n-345 return *this;\n-346}\n-347inline _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs &\n-_\b3_\b4_\b8_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bi_\bz_\be(int numIndices) {\n-349 _facetSize4 = (numIndices == 4);\n-350 return *this;\n-351}\n-352inline _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs &\n-_\b3_\b5_\b3_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bt_\br_\bi_\bd_\be(int stride) {\n-354 _facetStride = (short) stride;\n-355 return *this;\n-356}\n-357inline _\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs &\n-_\b3_\b5_\b8_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\be_\bt_\bC_\bo_\bo_\br_\bd_\bS_\bt_\br_\bi_\bd_\be(int stride) {\n-359 _coordStride = (short) stride;\n-360 return *this;\n-361}\n-362\n-363template \n-364inline int\n-_\b3_\b6_\b5_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\bo_\br_\bd(int vertex, REAL coord[]) const {\n-366 _param._\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\bo_\br_\bd(vertex, coord);\n-367 return 1;\n-368}\n-369\n-370template \n-371inline int\n-_\b3_\b7_\b2_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bC_\bo_\bo_\br_\bd_\bs(REAL coordTuples[]) const {\n-373 int nCoords = _\bG_\be_\bt_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bC_\bo_\bo_\br_\bd_\bs(coordTuples);\n-374 nCoords += _\bG_\be_\bt_\bI_\bn_\bt_\be_\br_\bi_\bo_\br_\bC_\bo_\bo_\br_\bd_\bs(coordTuples + nCoords * _coordStride);\n-375 return nCoords;\n-376}\n-377\n-378} // end namespace Bfr\n-379\n-380} // end namespace OPENSUBDIV_VERSION\n-381using namespace OPENSUBDIV_VERSION;\n-382\n-383} // end namespace OpenSubdiv\n-384\n-385#endif /* OPENSUBDIV3_BFR_TESSELLATION */\n+268 float _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs() const;\n+269\n+271 bool _\bH_\ba_\bs_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs() const;\n+272\n+274 float _\bG_\be_\bt_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(int edgeIndex) const;\n+275\n+277 void _\bG_\be_\bt_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(int faceIndex,\n+278 float * leadingEdgeSharp, float * trailingEdgeSharp) const;\n+280\n+281protected:\n+283 friend class FaceVertex;\n+284\n+285 _\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br() { }\n+286 _\b~_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br() { }\n+287\n+288 typedef Vtr::internal::StackBuffer IntBuffer;\n+289 typedef Vtr::internal::StackBuffer FloatBuffer;\n+290\n+291 void initFaceSizes();\n+292 void initEdgeSharpness();\n+294\n+295protected:\n+297 // Member variables assigned through the above interface:\n+298 unsigned short _isValid : 1;\n+299 unsigned short _isInitialized : 1;\n+300 unsigned short _isFinalized : 1;\n+301\n+302 unsigned short _isManifold : 1;\n+303 unsigned short _isBoundary : 1;\n+304\n+305 unsigned short _hasFaceSizes : 1;\n+306 unsigned short _hasEdgeSharpness : 1;\n+307\n+308 short _numFaces;\n+309 float _vertSharpness;\n+310\n+311 FloatBuffer _faceEdgeSharpness;\n+312 IntBuffer _faceSizeOffsets;\n+314};\n+315\n+316//\n+317// Public inline methods for simple assignment:\n+318//\n+319inline bool\n+_\b3_\b2_\b0_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bI_\bs_\bV_\ba_\bl_\bi_\bd() const {\n+321 return _isValid;\n+322}\n+323\n+324inline void\n+_\b3_\b2_\b5_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bS_\be_\bt_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd(bool isManifold) {\n+326 _isManifold = isManifold;\n+327}\n+328inline bool\n+_\b3_\b2_\b9_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bI_\bs_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd() const {\n+330 return _isManifold;\n+331}\n+332\n+333inline void\n+_\b3_\b3_\b4_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bS_\be_\bt_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by(bool isBoundary) {\n+335 _isBoundary = isBoundary;\n+336}\n+337inline bool\n+_\b3_\b3_\b8_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bI_\bs_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by() const {\n+339 return _isBoundary;\n+340}\n+341\n+342//\n+343// Public inline methods involving sizes of incident faces:\n+344//\n+345inline bool\n+_\b3_\b4_\b6_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bH_\ba_\bs_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be_\bs() const {\n+347 return _hasFaceSizes;\n+348}\n+349inline void\n+_\b3_\b5_\b0_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bC_\bl_\be_\ba_\br_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be_\bs() {\n+351 _hasFaceSizes = false;\n+352}\n+353\n+354inline void\n+_\b3_\b5_\b5_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bS_\be_\bt_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be(int incFaceIndex, int faceSize) {\n+356\n+357 if (!_hasFaceSizes) initFaceSizes();\n+358\n+359 _faceSizeOffsets[incFaceIndex] = faceSize;\n+360}\n+361inline int\n+_\b3_\b6_\b2_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be(int incFaceIndex) const {\n+363\n+364 return _isFinalized ?\n+365 (_faceSizeOffsets[incFaceIndex+1] - _faceSizeOffsets[incFaceIndex]) :\n+366 _faceSizeOffsets[incFaceIndex];\n+367}\n+368\n+369//\n+370// Public inline methods involving vertex sharpness:\n+371//\n+372inline bool\n+_\b3_\b7_\b3_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bH_\ba_\bs_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs() const {\n+374 return _vertSharpness > 0.0f;\n+375}\n+376inline void\n+_\b3_\b7_\b7_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bC_\bl_\be_\ba_\br_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs() {\n+378 _vertSharpness = 0.0f;\n+379}\n+380\n+381inline void\n+_\b3_\b8_\b2_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bS_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(float vertSharpness) {\n+383 _vertSharpness = vertSharpness;\n+384}\n+385inline float\n+_\b3_\b8_\b6_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs() const {\n+387 return _vertSharpness;\n+388}\n+389\n+390//\n+391// Public inline methods involving vertex sharpness:\n+392//\n+393inline bool\n+_\b3_\b9_\b4_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bH_\ba_\bs_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs() const {\n+395 return _hasEdgeSharpness;\n+396}\n+397inline void\n+_\b3_\b9_\b8_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bC_\bl_\be_\ba_\br_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs() {\n+399 _hasEdgeSharpness = false;\n+400}\n+401\n+402inline void\n+_\b4_\b0_\b3_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bS_\be_\bt_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(int edgeIndex, float sharpness) {\n+404\n+405 if (!_hasEdgeSharpness) initEdgeSharpness();\n+406\n+407 // Assign the leading edge of the face after the edge (even index):\n+408 if (edgeIndex < _numFaces) {\n+409 _faceEdgeSharpness[2*edgeIndex] = sharpness;\n+410 }\n+411\n+412 // Assign the trailing edge of the face before the edge (odd index):\n+413 if (edgeIndex > 0) {\n+414 _faceEdgeSharpness[2*edgeIndex-1] = sharpness;\n+415 } else if (!_\bI_\bs_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by()) {\n+416 _faceEdgeSharpness[2*_numFaces-1] = sharpness;\n+417 }\n+418}\n+419inline float\n+_\b4_\b2_\b0_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(int edgeIndex) const {\n+421\n+422 // All edges are first of the pair (even index) except last of boundary\n+423 return _faceEdgeSharpness[2*edgeIndex - (edgeIndex == _numFaces)];\n+424}\n+425\n+426inline void\n+_\b4_\b2_\b7_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bS_\be_\bt_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(int faceIndex,\n+428 float leadingEdgeSharpness, float trailingEdgeSharpness) {\n+429\n+430 if (!_hasEdgeSharpness) initEdgeSharpness();\n+431\n+432 _faceEdgeSharpness[2*faceIndex ] = leadingEdgeSharpness;\n+433 _faceEdgeSharpness[2*faceIndex+1] = trailingEdgeSharpness;\n+434}\n+435inline void\n+_\b4_\b3_\b6_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(int faceIndex,\n+437 float * leadingEdgeSharpness, float * trailingEdgeSharpness) const {\n+438\n+439 *leadingEdgeSharpness = _faceEdgeSharpness[2*faceIndex];\n+440 *trailingEdgeSharpness = _faceEdgeSharpness[2*faceIndex+1];\n+441}\n+442\n+443} // end namespace Bfr\n+444\n+445} // end namespace OPENSUBDIV_VERSION\n+446using namespace OPENSUBDIV_VERSION;\n+447} // end namespace OpenSubdiv\n+448\n+449#endif /* OPENSUBDIV3_BFR_VERTEX_DESCRIPTOR_H */\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn\n-Simple class defining the 2D parameterization of a face.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b5_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be\n-int GetFaceSize() const\n-Returns the size (number of vertices) of the corresponding face.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b1_\b0_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\bo_\br_\bd\n-void GetVertexCoord(int vertexIndex, REAL uvCoord[2]) const\n-Returns the (u,v) coordinate of a given vertex.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn\n-Encapsulates a specific tessellation pattern of a Parameterization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b5_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be\n-int GetFaceSize() const\n-Return the size of the face.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b1_\b8_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bC_\bo_\bo_\br_\bd_\bs\n-int GetNumBoundaryCoords() const\n-Return the number of boundary coordinates.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b1_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\b~_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn\n-~Tessellation()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\ba_\bc_\be_\bt_\bC_\bo_\bo_\br_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-void TransformFacetCoordIndices(int facetTuples[], int const boundaryIndices[],\n-int const interiorIndices[])\n-Reassign all facet coordinate indices.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bC_\bo_\bo_\br_\bd_\bS_\bt_\br_\bi_\bd_\be\n-int GetCoordStride() const\n-Return the number of elements between each coordinate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b0_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bE_\bd_\bg_\be_\bC_\bo_\bo_\br_\bd_\bs\n-int GetNumEdgeCoords(int edge) const\n-Return the number of coordinates within a given edge (excluding those at its\n-end vertices)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b1_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bI_\bn_\bt_\be_\br_\bi_\bo_\br_\bC_\bo_\bo_\br_\bd_\bs\n-int GetInteriorCoords(REAL coordTuples[]) const\n-Retrieve the coordinates for the boundary.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bt_\br_\bi_\bd_\be\n-int GetFacetStride() const\n-Return the number of elements between each facet.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b6_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bI_\bs_\bU_\bn_\bi_\bf_\bo_\br_\bm\n-bool IsUniform() const\n-Return if the pattern is uniform.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b1_\b8_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bo_\br_\bd_\bs\n-int GetNumCoords() const\n-Return the number of coordinates in the entire pattern.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b0_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bC_\bo_\bo_\br_\bd_\bs\n-int GetCoords(REAL coordTuples[]) const\n-Retrieve the coordinates for the entire pattern.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b3_\b7_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\ba_\bc_\be_\bt_\bC_\bo_\bo_\br_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-void TransformFacetCoordIndices(int facetTuples[], int commonOffset)\n-Apply a common offset to all facet coordinate indices.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn\n-Tessellation(Parameterization const &p, int numRates, int const rates[],\n-Options const &options=Options())\n-General constructor providing multiple tessellation rates for a non-uniform\n-tessellation.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn\n-Parameterization GetParameterization() const\n-Return the Parameterization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b1_\b7_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\ba_\bc_\be_\bt_\bC_\bo_\bo_\br_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-void TransformFacetCoordIndices(int facetTuples[], int const boundaryIndices[],\n-int interiorOffset)\n-Reassign indices of boundary coordinates while offseting those of interior\n-coordinates.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bi_\bz_\be\n-int GetFacetSize() const\n-Return the number of indices assigned to each facet.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b5_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn\n-Tessellation()=delete\n-Default construction is unavailable.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn\n-Tessellation(Parameterization const &p, int uniformRate, Options const\n-&options=Options())\n-Simple constructor providing a single uniform tessellation rate.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bt_\bs\n-int GetFacets(int facetTuples[]) const\n-Retrieve the facet indices for the entire pattern.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\ba_\bc_\be_\bt_\bs\n-int GetNumFacets() const\n-Return the number of facets in the entire pattern.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b5_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bI_\bn_\bt_\be_\br_\bi_\bo_\br_\bC_\bo_\bo_\br_\bd_\bs\n-int GetNumInteriorCoords() const\n-Return the number of interior coordinates.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b1_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\bo_\br_\bd\n-int GetVertexCoord(int vertex, REAL coordTuples[]) const\n-Retrieve the coordinate for a given vertex of the face.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b3_\b6_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bC_\bo_\bo_\br_\bd_\bs\n-int GetBoundaryCoords(REAL coordTuples[]) const\n-Retrieve the coordinates for the boundary.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn\n-Tessellation(Tessellation const &)=delete\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bR_\ba_\bt_\be_\bs\n-int GetRates(int rates[]) const\n-Retrieve the rates assigned.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bI_\bs_\bV_\ba_\bl_\bi_\bd\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+Simple class used by subclasses of SurfaceFactory to describe a vertex.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b1_\b3_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n+float GetVertexSharpness() const\n+Return the sharpness of the vertex.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b8_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bF_\bi_\bn_\ba_\bl_\bi_\bz_\be\n+bool Finalize()\n+Terminate the sequence of specifications.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bS_\be_\bt_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n+void SetManifold(bool isManifold)\n+Declare the vertex neighborhood as manifold (ordered)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b2_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be\n+bool Initialize(int numIncidentFaces)\n+Initialize specification with the number of incident faces.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bI_\bs_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n+bool IsManifold() const\n+Return if vertex neighborhood is manifold.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b2_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bH_\ba_\bs_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n+bool HasEdgeSharpness() const\n+Return if sharpness was assigned to the incident edges.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b9_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be\n+int GetIncidentFaceSize(int faceIndex) const\n+Return the size of an incident face.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b6_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n+float GetManifoldEdgeSharpness(int edgeIndex) const\n+Return the sharpness assigned to a manifold edge.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b2_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:\n+_\bS_\be_\bt_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n+void SetIncidentFaceEdgeSharpness(int faceIndex, float leadingEdgeSharp, float\n+trailingEdgeSharp)\n+Assign sharpness to the edges of an incident face.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b2_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bH_\ba_\bs_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n+bool HasVertexSharpness() const\n+Return if sharpness was assigned to the vertex.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b7_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bC_\bl_\be_\ba_\br_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be_\bs\n+void ClearIncidentFaceSizes()\n+Remove any assigned sizes of incident faces.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b5_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bS_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n+void SetVertexSharpness(float sharpness)\n+Assign sharpness to the vertex.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b8_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bC_\bl_\be_\ba_\br_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n+void ClearVertexSharpness()\n+Remove any sharpness assigned to the vertex.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b7_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bC_\bl_\be_\ba_\br_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n+void ClearEdgeSharpness()\n+Remove any sharpness assigned to the incident edges.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b9_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:\n+_\bG_\be_\bt_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n+void GetIncidentFaceEdgeSharpness(int faceIndex, float *leadingEdgeSharp, float\n+*trailingEdgeSharp) const\n+Return the sharpness assigned to edges of an incident face.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b3_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bI_\bs_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by\n+bool IsBoundary() const\n+Return if vertex neighborhood is on a boundary.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b3_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bI_\bs_\bV_\ba_\bl_\bi_\bd\n bool IsValid() const\n-Return true if correctly initialized.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b1_\b6_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-Tessellation & operator=(Tessellation const &)=delete\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bE_\bd_\bg_\be_\bC_\bo_\bo_\br_\bd_\bs\n-int GetEdgeCoords(int edge, REAL coordTuples[]) const\n-Retrieve the coordinates for a given edge of the face (excluding those at its\n-end vertices)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n-Options configure a Tessellation to specify the nature of both its results and\n-the structure of the c...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b6_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n-Options()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b6_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\be_\bt_\bC_\bo_\bo_\br_\bd_\bS_\bt_\br_\bi_\bd_\be\n-int GetCoordStride() const\n-Return the stride between (u,v) pairs.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b9_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bi_\bz_\be\n-Options & SetFacetSize(int numIndices)\n-Assign the number of indices per facet (must be 3 or 4, default is 3)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b3_\b4_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bt_\br_\bi_\bd_\be\n-int GetFacetStride() const\n-Return the stride between facets.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b8_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bi_\bz_\be\n-int GetFacetSize() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b8_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\be_\bt_\bC_\bo_\bo_\br_\bd_\bS_\bt_\br_\bi_\bd_\be\n-Options & SetCoordStride(int stride)\n-Assign the stride between (u,v) pairs (default is 2)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b3_\b5_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\be_\bt_\bF_\ba_\bc_\be_\bt_\bS_\bt_\br_\bi_\bd_\be\n-Options & SetFacetStride(int stride)\n-Assign the stride between facets (default is facet size)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b3_\b5_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bT_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\br_\be_\bs_\be_\br_\bv_\be_\bQ_\bu_\ba_\bd_\bs\n-bool PreserveQuads() const\n-Return if preservation of quads is set.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b7_\b4\n+Return if instance is valid.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b2_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bH_\ba_\bs_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be_\bs\n+bool HasIncidentFaceSizes() const\n+Return if the sizes of incident faces are assigned.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b4_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bS_\be_\bt_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by\n+void SetBoundary(bool isOnBoundary)\n+Declare the vertex neighborhood as being on a boundary.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b3_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bS_\be_\bt_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be\n+void SetIncidentFaceSize(int faceIndex, int faceSize)\n+Assign the size of an incident face.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b3_\b5_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bS_\be_\bt_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n+void SetManifoldEdgeSharpness(int edgeIndex, float edgeSharpness)\n+Assign sharpness to the edge of a manifold neighborhood.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b0_\b3\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bb_\bf_\br\n- * _\bt_\be_\bs_\bs_\be_\bl_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+ * _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00680.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00680.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/bfr/surfaceFactoryMeshAdapter.h File Reference\n+OpenSubdiv: opensubdiv/bfr/surfaceFactoryCache.h File Reference\n \n \n \n \n \n \n \n@@ -90,26 +90,31 @@\n \n \n \n
\n \n-
surfaceFactoryMeshAdapter.h File Reference
\n+
surfaceFactoryCache.h File Reference
\n
\n
\n
#include "../version.h"
\n+#include "../bfr/irregularPatchType.h"
\n+#include <map>
\n #include <cstdint>
\n
\n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n+\n+\n+\n \n

\n Classes

class  SurfaceFactoryMeshAdapter
 Abstract interface adapting SurfaceFactory to a connected mesh representation. More...
class  SurfaceFactoryCache
 Container used internally by SurfaceFactory to store reusable information. More...
 
class  SurfaceFactoryCacheThreaded< MUTEX_TYPE, READ_LOCK_GUARD_TYPE, WRITE_LOCK_GUARD_TYPE >
 Template for declaring thread-safe subclasses of SurfaceFactoryCache. More...
 
\n \n \n \n \n@@ -118,13 +123,13 @@\n \n

\n Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +1,32 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-surfaceFactoryMeshAdapter.h File Reference\n+surfaceFactoryCache.h File Reference\n #include \"../version.h\"\n+#include \"../bfr/irregularPatchType.h\"\n+#include \n #include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br\n-\u00a0 Abstract interface adapting _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by to a connected mesh\n- representation. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be\n+\u00a0 Container used internally by _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by to store reusable\n+ information. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\bT_\bh_\br_\be_\ba_\bd_\be_\bd_\b<_\b _\bM_\bU_\bT_\bE_\bX_\b__\bT_\bY_\bP_\bE_\b,_\b _\bR_\bE_\bA_\bD_\b__\bL_\bO_\bC_\bK_\b__\bG_\bU_\bA_\bR_\bD_\b__\bT_\bY_\bP_\bE_\b,\n+ _\bW_\bR_\bI_\bT_\bE_\b__\bL_\bO_\bC_\bK_\b__\bG_\bU_\bA_\bR_\bD_\b__\bT_\bY_\bP_\bE_\b _\b>\n+\u00a0 Template for declaring thread-safe subclasses of _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bb_\bf_\br\n- * _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b._\bh\n+ * _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00680.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00680.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a00680 = [\n- [\"SurfaceFactoryMeshAdapter\", \"a00957.html\", \"a00957\"]\n+ [\"SurfaceFactoryCache\", \"a00949.html\", \"a00949\"],\n+ [\"SurfaceFactoryCacheThreaded< MUTEX_TYPE, READ_LOCK_GUARD_TYPE, WRITE_LOCK_GUARD_TYPE >\", \"a00953.html\", \"a00953\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00680_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00680_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/bfr/surfaceFactoryMeshAdapter.h Source File\n+OpenSubdiv: opensubdiv/bfr/surfaceFactoryCache.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
surfaceFactoryMeshAdapter.h
\n+
surfaceFactoryCache.h
\n
\n
\n Go to the documentation of this file.
1//
\n
2// Copyright 2021 Pixar
\n
3//
\n
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
\n
5// with the following modification; you may not use this file except in
\n@@ -119,149 +119,126 @@\n
18// Unless required by applicable law or agreed to in writing, software
\n
19// distributed under the Apache License with the above modification is
\n
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
\n
21// KIND, either express or implied. See the Apache License for the specific
\n
22// language governing permissions and limitations under the Apache License.
\n
23//
\n
24
\n-
25#ifndef OPENSUBDIV3_BFR_SURFACE_FACTORY_ADAPTER_H
\n-
26#define OPENSUBDIV3_BFR_SURFACE_FACTORY_ADAPTER_H
\n+
25#ifndef OPENSUBDIV3_BFR_SURFACE_FACTORY_CACHE_H
\n+
26#define OPENSUBDIV3_BFR_SURFACE_FACTORY_CACHE_H
\n
27
\n
28#include "../version.h"
\n
29
\n-
30#include <cstdint>
\n+
30#include "../bfr/irregularPatchType.h"
\n
31
\n-
32namespace OpenSubdiv {
\n-
33namespace OPENSUBDIV_VERSION {
\n+
32#include <map>
\n+
33#include <cstdint>
\n
34
\n-
35namespace Bfr {
\n-
36
\n-
37class VertexDescriptor;
\n-
38
\n-
43// SurfaceFactoryMeshAdapter is an abstract class that defines the interface
\n-
44// through which subclasses of SurfaceFactory adapt to a connected mesh
\n-
45// representation. The interface defines methods that describe the mesh
\n-
46// topology and control indices in the neighborhood of a mesh -- from
\n-
47// which the SurfaceFactory to identifies an appropriate limit surface.
\n-
48//
\n-
49// SurfaceFactoryMeshAdapter methods require a subclass to provide a complete
\n-
50// description of the topology around a base face, as well as indices
\n-
51// associated with it (both vertex and face-varying). The intent here is
\n-
52// to keep the number of methods required to a minimum, and also to minimize
\n-
53// the number of invocations required by the factory.
\n-
54//
\n-
55// With the need to support both linear and non-linear cases (for which
\n-
56// linear is trivial by comparison) and the limit surface for both vertex
\n-
57// and face-varying topologies, the result is a small set of methods
\n-
58// covering this matrix of functionality.
\n-
59//
\n-
60// Since face-varying data may differ in topology from the vertex data --
\n-
61// with each set of face-varying data potentially having its own unique
\n-
62// topology -- sets of face-varying data are uniquely distinguished by an
\n-
63// associated integer (a face-varying ID).
\n-
64//
\n-
\n-\n-
66public:
\n-
68 typedef int Index;
\n-
69
\n-
80 typedef std::intptr_t FVarID;
\n-
81
\n-
82protected:
\n-\n-
85 virtual ~SurfaceFactoryMeshAdapter() { }
\n-
87
\n-
88protected:
\n-
90
\n-
94
\n-
96 virtual bool isFaceHole(Index faceIndex) const = 0;
\n-
97
\n-
99 virtual int getFaceSize(Index faceIndex) const = 0;
\n-
101
\n-
103
\n-
111
\n-
113 virtual int getFaceVertexIndices(Index faceIndex,
\n-
114 Index vertexIndices[]) const = 0;
\n-
115
\n-
117 virtual int getFaceFVarValueIndices(Index faceIndex,
\n-
118 FVarID fvarID, Index fvarValueIndices[]) const = 0;
\n-
120
\n-
121protected:
\n-
123
\n-
159
\n-\n-
162 Index faceIndex, int faceVertex,
\n-
163 VertexDescriptor * vertexDescriptor) const = 0;
\n-
164
\n-\n-
167 Index faceIndex, int faceVertex,
\n-
168 Index vertexIndices[]) const = 0;
\n-
169
\n-\n-
173 Index faceIndex, int faceVertex,
\n-
174 FVarID fvarID, Index fvarValueIndices[]) const = 0;
\n-
176
\n-
177protected:
\n-
179
\n-\n-
204 Index faceIndex, Index vertexIndices[]) const;
\n-
205
\n-\n-
207 Index faceIndex, FVarID fvarID, Index fvarValueIndices[]) const;
\n-
209
\n-
210private:
\n-
211 // No private members
\n-
212};
\n-
\n-
213
\n-
214//
\n-
215// Inline defaults for optional methods:
\n-
216//
\n-
217inline bool
\n-
\n-\n-
219 Index, Index[]) const {
\n-
220 return false;
\n-
221}
\n-
\n-
222
\n-
223inline bool
\n-\n-
228
\n-
229} // end namespace Bfr
\n-
230
\n-
231} // end namespace OPENSUBDIV_VERSION
\n-
232using namespace OPENSUBDIV_VERSION;
\n-
233
\n-
234} // end namespace OpenSubdiv
\n-
235
\n-
236#endif /* OPENSUBDIV3_BFR_SURFACE_FACTORY_ADAPTER_H */
\n-\n-
Abstract interface adapting SurfaceFactory to a connected mesh representation.
\n-
virtual int getFaceVertexIncidentFaceFVarValueIndices(Index faceIndex, int faceVertex, FVarID fvarID, Index fvarValueIndices[]) const =0
Gather face-varying indices of incident faces around a face-vertex.
\n-
virtual int getFaceVertexIncidentFaceVertexIndices(Index faceIndex, int faceVertex, Index vertexIndices[]) const =0
Gather vertex indices of incident faces around a face-vertex.
\n-
virtual int getFaceSize(Index faceIndex) const =0
Returns the size of a face (number of vertices)
\n-\n-
virtual int populateFaceVertexDescriptor(Index faceIndex, int faceVertex, VertexDescriptor *vertexDescriptor) const =0
Describe the topology of incident faces around a face-vertex.
\n-
virtual bool getFaceNeighborhoodVertexIndicesIfRegular(Index faceIndex, Index vertexIndices[]) const
\n-
virtual bool getFaceNeighborhoodFVarValueIndicesIfRegular(Index faceIndex, FVarID fvarID, Index fvarValueIndices[]) const
\n-
virtual int getFaceFVarValueIndices(Index faceIndex, FVarID fvarID, Index fvarValueIndices[]) const =0
Gather the face-varying indices of the face's vertices.
\n-
virtual int getFaceVertexIndices(Index faceIndex, Index vertexIndices[]) const =0
Gather the indices of the face's vertices.
\n-
virtual bool isFaceHole(Index faceIndex) const =0
Returns if a face is a hole.
\n-
std::intptr_t FVarID
Type used to identify and specify face-varying primvars.
\n-
Simple class used by subclasses of SurfaceFactory to describe a vertex.
\n+
35namespace OpenSubdiv {
\n+
36namespace OPENSUBDIV_VERSION {
\n+
37
\n+
38namespace Bfr {
\n+
39
\n+
52//
\n+
53// Initial/expected use requires simple searches of and additions to the
\n+
54// cache by the SurfaceFactory or its Builders. Longer term, with the
\n+
55// possibility of instances of caches being shared between meshes and
\n+
56// factories, additional options and/or public methods may be warranted
\n+
57// to limit what is cached or to prune the cache if it gets too large.
\n+
58//
\n+
\n+\n+
60public:
\n+\n+\n+
63
\n+\n+\n+
66
\n+
67protected:
\n+
69 // Access restricted to the Factory, its Builders, etc.
\n+
70 friend class SurfaceFactory;
\n+
71
\n+
72 typedef std::uint64_t KeyType;
\n+
73 typedef internal::IrregularPatchSharedPtr DataType;
\n+
75
\n+
76protected:
\n+
78 size_t Size() const { return _map.size(); }
\n+
79
\n+
80 //
\n+
81 // Potential overrides by subclasses for thread-safety:
\n+
82 //
\n+
83 virtual DataType Find(KeyType const & key) const;
\n+
84 virtual DataType Add(KeyType const & key, DataType const & data);
\n+
85
\n+
86 //
\n+
87 // Common implementation used by all subclasses:
\n+
88 //
\n+
89 DataType find(KeyType const & key) const;
\n+
90 DataType add(KeyType const & key, DataType const & data);
\n+
92
\n+
93private:
\n+
94 typedef std::map<KeyType, DataType> MapType;
\n+
95
\n+
96 MapType _map;
\n+
97};
\n+
\n+
98
\n+
113// Separate read and write locks are provided to support mutex types
\n+
114// allowing shared (read) or exclusive (write) access.
\n+
115//
\n+
116template <class MUTEX_TYPE, class READ_LOCK_GUARD_TYPE,
\n+
117 class WRITE_LOCK_GUARD_TYPE>
\n+
\n+\n+
119public:
\n+\n+
121 ~SurfaceFactoryCacheThreaded() override = default;
\n+
122
\n+
123protected:
\n+
125 //
\n+
126 // Virtual overrides from base:
\n+
127 //
\n+
128 DataType Find(KeyType const & key) const override {
\n+
129 READ_LOCK_GUARD_TYPE lockGuard(_mutex);
\n+
130 return find(key);
\n+
131 }
\n+
132
\n+
133 DataType Add(KeyType const & key, DataType const & data) override {
\n+
134 WRITE_LOCK_GUARD_TYPE lockGuard(_mutex);
\n+
135 return add(key, data);
\n+
136 }
\n+
138
\n+
139private:
\n+
140 MUTEX_TYPE mutable _mutex;
\n+
141};
\n+
\n+
142
\n+
143} // end namespace Bfr
\n+
144
\n+
145} // end namespace OPENSUBDIV_VERSION
\n+
146using namespace OPENSUBDIV_VERSION;
\n+
147
\n+
148} // end namespace OpenSubdiv
\n+
149
\n+
150#endif /* OPENSUBDIV3_BFR_SURFACE_FACTORY_CACHE_H */
\n+\n+
Base class providing initialization of a Surface for each face of a mesh.
\n+
Container used internally by SurfaceFactory to store reusable information.
\n+\n+\n+
SurfaceFactoryCache(SurfaceFactoryCache const &)=delete
\n+
SurfaceFactoryCache & operator=(SurfaceFactoryCache const &)=delete
\n+
Template for declaring thread-safe subclasses of SurfaceFactoryCache.
\n+\n+\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-surfaceFactoryMeshAdapter.h\n+surfaceFactoryCache.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2021 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -24,179 +24,131 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_BFR_SURFACE_FACTORY_ADAPTER_H\n-26#define OPENSUBDIV3_BFR_SURFACE_FACTORY_ADAPTER_H\n+25#ifndef OPENSUBDIV3_BFR_SURFACE_FACTORY_CACHE_H\n+26#define OPENSUBDIV3_BFR_SURFACE_FACTORY_CACHE_H\n 27\n 28#include \"../version.h\"\n 29\n-30#include \n+30#include \"../bfr/irregularPatchType.h\"\n 31\n-32namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-33namespace OPENSUBDIV_VERSION {\n+32#include \n+33#include \n 34\n-35namespace Bfr {\n-36\n-37class VertexDescriptor;\n-38\n-43// SurfaceFactoryMeshAdapter is an abstract class that defines the interface\n-44// through which subclasses of SurfaceFactory adapt to a connected mesh\n-45// representation. The interface defines methods that describe the mesh\n-46// topology and control indices in the neighborhood of a mesh -- from\n-47// which the SurfaceFactory to identifies an appropriate limit surface.\n-48//\n-49// SurfaceFactoryMeshAdapter methods require a subclass to provide a complete\n-50// description of the topology around a base face, as well as indices\n-51// associated with it (both vertex and face-varying). The intent here is\n-52// to keep the number of methods required to a minimum, and also to minimize\n-53// the number of invocations required by the factory.\n-54//\n-55// With the need to support both linear and non-linear cases (for which\n-56// linear is trivial by comparison) and the limit surface for both vertex\n-57// and face-varying topologies, the result is a small set of methods\n-58// covering this matrix of functionality.\n-59//\n-60// Since face-varying data may differ in topology from the vertex data --\n-61// with each set of face-varying data potentially having its own unique\n-62// topology -- sets of face-varying data are uniquely distinguished by an\n-63// associated integer (a face-varying ID).\n-64//\n-_\b6_\b5class _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br {\n-66public:\n-_\b6_\b8 typedef int _\bI_\bn_\bd_\be_\bx;\n-69\n-_\b8_\b0 typedef std::intptr_t _\bF_\bV_\ba_\br_\bI_\bD;\n-81\n-82protected:\n-84 _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br() { }\n-85 virtual _\b~_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br() { }\n-87\n-88protected:\n-90\n-94\n-_\b9_\b6 virtual bool _\bi_\bs_\bF_\ba_\bc_\be_\bH_\bo_\bl_\be(_\bI_\bn_\bd_\be_\bx faceIndex) const = 0;\n-97\n-_\b9_\b9 virtual int _\bg_\be_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be(_\bI_\bn_\bd_\be_\bx faceIndex) const = 0;\n-101\n-103\n-111\n-_\b1_\b1_\b3 virtual int _\bg_\be_\bt_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs(_\bI_\bn_\bd_\be_\bx faceIndex,\n-114 _\bI_\bn_\bd_\be_\bx vertexIndices[]) const = 0;\n-115\n-_\b1_\b1_\b7 virtual int _\bg_\be_\bt_\bF_\ba_\bc_\be_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs(_\bI_\bn_\bd_\be_\bx faceIndex,\n-118 _\bF_\bV_\ba_\br_\bI_\bD fvarID, _\bI_\bn_\bd_\be_\bx fvarValueIndices[]) const = 0;\n-120\n-121protected:\n-123\n-159\n-_\b1_\b6_\b1 virtual int _\bp_\bo_\bp_\bu_\bl_\ba_\bt_\be_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(\n-162 _\bI_\bn_\bd_\be_\bx faceIndex, int faceVertex,\n-163 _\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br * vertexDescriptor) const = 0;\n-164\n-_\b1_\b6_\b6 virtual int _\bg_\be_\bt_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs(\n-167 _\bI_\bn_\bd_\be_\bx faceIndex, int faceVertex,\n-168 _\bI_\bn_\bd_\be_\bx vertexIndices[]) const = 0;\n-169\n-_\b1_\b7_\b2 virtual int _\bg_\be_\bt_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs(\n-173 _\bI_\bn_\bd_\be_\bx faceIndex, int faceVertex,\n-174 _\bF_\bV_\ba_\br_\bI_\bD fvarID, _\bI_\bn_\bd_\be_\bx fvarValueIndices[]) const = 0;\n-176\n-177protected:\n-179\n-203 virtual bool _\bg_\be_\bt_\bF_\ba_\bc_\be_\bN_\be_\bi_\bg_\bh_\bb_\bo_\br_\bh_\bo_\bo_\bd_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bf_\bR_\be_\bg_\bu_\bl_\ba_\br(\n-204 _\bI_\bn_\bd_\be_\bx faceIndex, _\bI_\bn_\bd_\be_\bx vertexIndices[]) const;\n-205\n-206 virtual bool _\bg_\be_\bt_\bF_\ba_\bc_\be_\bN_\be_\bi_\bg_\bh_\bb_\bo_\br_\bh_\bo_\bo_\bd_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bf_\bR_\be_\bg_\bu_\bl_\ba_\br(\n-207 _\bI_\bn_\bd_\be_\bx faceIndex, _\bF_\bV_\ba_\br_\bI_\bD fvarID, _\bI_\bn_\bd_\be_\bx fvarValueIndices[]) const;\n-209\n-210private:\n-211 // No private members\n-212};\n-213\n-214//\n-215// Inline defaults for optional methods:\n-216//\n-217inline bool\n-_\b2_\b1_\b8_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:_\bg_\be_\bt_\bF_\ba_\bc_\be_\bN_\be_\bi_\bg_\bh_\bb_\bo_\br_\bh_\bo_\bo_\bd_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bf_\bR_\be_\bg_\bu_\bl_\ba_\br(\n-219 _\bI_\bn_\bd_\be_\bx, _\bI_\bn_\bd_\be_\bx[]) const {\n-220 return false;\n-221}\n-222\n-223inline bool\n-_\b2_\b2_\b4_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:_\bg_\be_\bt_\bF_\ba_\bc_\be_\bN_\be_\bi_\bg_\bh_\bb_\bo_\br_\bh_\bo_\bo_\bd_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bf_\bR_\be_\bg_\bu_\bl_\ba_\br(\n-225 _\bI_\bn_\bd_\be_\bx, _\bF_\bV_\ba_\br_\bI_\bD, _\bI_\bn_\bd_\be_\bx[]) const {\n-226 return false;\n-227}\n-228\n-229} // end namespace Bfr\n-230\n-231} // end namespace OPENSUBDIV_VERSION\n-232using namespace OPENSUBDIV_VERSION;\n-233\n-234} // end namespace OpenSubdiv\n-235\n-236#endif /* OPENSUBDIV3_BFR_SURFACE_FACTORY_ADAPTER_H */\n+35namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+36namespace OPENSUBDIV_VERSION {\n+37\n+38namespace Bfr {\n+39\n+52//\n+53// Initial/expected use requires simple searches of and additions to the\n+54// cache by the SurfaceFactory or its Builders. Longer term, with the\n+55// possibility of instances of caches being shared between meshes and\n+56// factories, additional options and/or public methods may be warranted\n+57// to limit what is cached or to prune the cache if it gets too large.\n+58//\n+_\b5_\b9class _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be {\n+60public:\n+_\b6_\b1 _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be();\n+_\b6_\b2 virtual _\b~_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be();\n+63\n+_\b6_\b4 _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be(_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be const &) = delete;\n+_\b6_\b5 _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be & _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be const &) = delete;\n+66\n+67protected:\n+69 // Access restricted to the Factory, its Builders, etc.\n+70 friend class _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by;\n+71\n+72 typedef std::uint64_t KeyType;\n+73 typedef internal::IrregularPatchSharedPtr DataType;\n+75\n+76protected:\n+78 size_t Size() const { return _map.size(); }\n+79\n+80 //\n+81 // Potential overrides by subclasses for thread-safety:\n+82 //\n+83 virtual DataType Find(KeyType const & key) const;\n+84 virtual DataType Add(KeyType const & key, DataType const & data);\n+85\n+86 //\n+87 // Common implementation used by all subclasses:\n+88 //\n+89 DataType find(KeyType const & key) const;\n+90 DataType add(KeyType const & key, DataType const & data);\n+92\n+93private:\n+94 typedef std::map MapType;\n+95\n+96 MapType _map;\n+97};\n+98\n+113// Separate read and write locks are provided to support mutex types\n+114// allowing shared (read) or exclusive (write) access.\n+115//\n+116template \n+_\b1_\b1_\b8class _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\bT_\bh_\br_\be_\ba_\bd_\be_\bd : public _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be {\n+119public:\n+_\b1_\b2_\b0 _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\bT_\bh_\br_\be_\ba_\bd_\be_\bd() : _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be() { }\n+_\b1_\b2_\b1 _\b~_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\bT_\bh_\br_\be_\ba_\bd_\be_\bd() override = default;\n+122\n+123protected:\n+125 //\n+126 // Virtual overrides from base:\n+127 //\n+128 DataType Find(KeyType const & key) const override {\n+129 READ_LOCK_GUARD_TYPE lockGuard(_mutex);\n+130 return find(key);\n+131 }\n+132\n+133 DataType Add(KeyType const & key, DataType const & data) override {\n+134 WRITE_LOCK_GUARD_TYPE lockGuard(_mutex);\n+135 return add(key, data);\n+136 }\n+138\n+139private:\n+140 MUTEX_TYPE mutable _mutex;\n+141};\n+142\n+143} // end namespace Bfr\n+144\n+145} // end namespace OPENSUBDIV_VERSION\n+146using namespace OPENSUBDIV_VERSION;\n+147\n+148} // end namespace OpenSubdiv\n+149\n+150#endif /* OPENSUBDIV3_BFR_SURFACE_FACTORY_CACHE_H */\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br\n-Abstract interface adapting SurfaceFactory to a connected mesh representation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b._\bh_\b:_\b6_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:\n-_\bg_\be_\bt_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-virtual int getFaceVertexIncidentFaceFVarValueIndices(Index faceIndex, int\n-faceVertex, FVarID fvarID, Index fvarValueIndices[]) const =0\n-Gather face-varying indices of incident faces around a face-vertex.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:\n-_\bg_\be_\bt_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-virtual int getFaceVertexIncidentFaceVertexIndices(Index faceIndex, int\n-faceVertex, Index vertexIndices[]) const =0\n-Gather vertex indices of incident faces around a face-vertex.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:_\bg_\be_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be\n-virtual int getFaceSize(Index faceIndex) const =0\n-Returns the size of a face (number of vertices)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:_\bI_\bn_\bd_\be_\bx\n-int Index\n-Integer type representing a mesh index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b._\bh_\b:_\b6_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:\n-_\bp_\bo_\bp_\bu_\bl_\ba_\bt_\be_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-virtual int populateFaceVertexDescriptor(Index faceIndex, int faceVertex,\n-VertexDescriptor *vertexDescriptor) const =0\n-Describe the topology of incident faces around a face-vertex.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:\n-_\bg_\be_\bt_\bF_\ba_\bc_\be_\bN_\be_\bi_\bg_\bh_\bb_\bo_\br_\bh_\bo_\bo_\bd_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bf_\bR_\be_\bg_\bu_\bl_\ba_\br\n-virtual bool getFaceNeighborhoodVertexIndicesIfRegular(Index faceIndex, Index\n-vertexIndices[]) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b._\bh_\b:_\b2_\b1_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:\n-_\bg_\be_\bt_\bF_\ba_\bc_\be_\bN_\be_\bi_\bg_\bh_\bb_\bo_\br_\bh_\bo_\bo_\bd_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bf_\bR_\be_\bg_\bu_\bl_\ba_\br\n-virtual bool getFaceNeighborhoodFVarValueIndicesIfRegular(Index faceIndex,\n-FVarID fvarID, Index fvarValueIndices[]) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b._\bh_\b:_\b2_\b2_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:\n-_\bg_\be_\bt_\bF_\ba_\bc_\be_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-virtual int getFaceFVarValueIndices(Index faceIndex, FVarID fvarID, Index\n-fvarValueIndices[]) const =0\n-Gather the face-varying indices of the face's vertices.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:\n-_\bg_\be_\bt_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-virtual int getFaceVertexIndices(Index faceIndex, Index vertexIndices[]) const\n-=0\n-Gather the indices of the face's vertices.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:_\bi_\bs_\bF_\ba_\bc_\be_\bH_\bo_\bl_\be\n-virtual bool isFaceHole(Index faceIndex) const =0\n-Returns if a face is a hole.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:_\bF_\bV_\ba_\br_\bI_\bD\n-std::intptr_t FVarID\n-Type used to identify and specify face-varying primvars.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b._\bh_\b:_\b8_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-Simple class used by subclasses of SurfaceFactory to describe a vertex.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b1_\b3_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by\n+Base class providing initialization of a Surface for each face of a mesh.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b0_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be\n+Container used internally by SurfaceFactory to store reusable information.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\b._\bh_\b:_\b5_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be\n+SurfaceFactoryCache()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\b:_\b:_\b~_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be\n+virtual ~SurfaceFactoryCache()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be\n+SurfaceFactoryCache(SurfaceFactoryCache const &)=delete\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+SurfaceFactoryCache & operator=(SurfaceFactoryCache const &)=delete\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\bT_\bh_\br_\be_\ba_\bd_\be_\bd\n+Template for declaring thread-safe subclasses of SurfaceFactoryCache.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\b._\bh_\b:_\b1_\b1_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\bT_\bh_\br_\be_\ba_\bd_\be_\bd_\b:_\b:\n+_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\bT_\bh_\br_\be_\ba_\bd_\be_\bd\n+SurfaceFactoryCacheThreaded()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\b._\bh_\b:_\b1_\b2_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\bT_\bh_\br_\be_\ba_\bd_\be_\bd_\b:_\b:\n+_\b~_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\bT_\bh_\br_\be_\ba_\bd_\be_\bd\n+~SurfaceFactoryCacheThreaded() override=default\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bb_\bf_\br\n- * _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b._\bh\n+ * _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00683.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00683.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/bfr/surfaceFactoryCache.h File Reference\n+OpenSubdiv: opensubdiv/bfr/surfaceFactoryMeshAdapter.h File Reference\n \n \n \n \n \n \n \n@@ -90,31 +90,26 @@\n \n \n \n
\n \n-
surfaceFactoryCache.h File Reference
\n+
surfaceFactoryMeshAdapter.h File Reference
\n
\n
\n
#include "../version.h"
\n-#include "../bfr/irregularPatchType.h"
\n-#include <map>
\n #include <cstdint>
\n
\n

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n-\n+\n+\n \n

\n Classes

class  SurfaceFactoryCache
 Container used internally by SurfaceFactory to store reusable information. More...
 
class  SurfaceFactoryCacheThreaded< MUTEX_TYPE, READ_LOCK_GUARD_TYPE, WRITE_LOCK_GUARD_TYPE >
 Template for declaring thread-safe subclasses of SurfaceFactoryCache. More...
class  SurfaceFactoryMeshAdapter
 Abstract interface adapting SurfaceFactory to a connected mesh representation. More...
 
\n \n \n \n \n@@ -123,13 +118,13 @@\n \n

\n Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +1,25 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-surfaceFactoryCache.h File Reference\n+surfaceFactoryMeshAdapter.h File Reference\n #include \"../version.h\"\n-#include \"../bfr/irregularPatchType.h\"\n-#include \n #include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be\n-\u00a0 Container used internally by _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by to store reusable\n- information. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\bT_\bh_\br_\be_\ba_\bd_\be_\bd_\b<_\b _\bM_\bU_\bT_\bE_\bX_\b__\bT_\bY_\bP_\bE_\b,_\b _\bR_\bE_\bA_\bD_\b__\bL_\bO_\bC_\bK_\b__\bG_\bU_\bA_\bR_\bD_\b__\bT_\bY_\bP_\bE_\b,\n- _\bW_\bR_\bI_\bT_\bE_\b__\bL_\bO_\bC_\bK_\b__\bG_\bU_\bA_\bR_\bD_\b__\bT_\bY_\bP_\bE_\b _\b>\n-\u00a0 Template for declaring thread-safe subclasses of _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br\n+\u00a0 Abstract interface adapting _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by to a connected mesh\n+ representation. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bb_\bf_\br\n- * _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\b._\bh\n+ * _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00683.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00683.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a00683 = [\n- [\"SurfaceFactoryCache\", \"a00949.html\", \"a00949\"],\n- [\"SurfaceFactoryCacheThreaded< MUTEX_TYPE, READ_LOCK_GUARD_TYPE, WRITE_LOCK_GUARD_TYPE >\", \"a00953.html\", \"a00953\"]\n+ [\"SurfaceFactoryMeshAdapter\", \"a00957.html\", \"a00957\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00683_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00683_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/bfr/surfaceFactoryCache.h Source File\n+OpenSubdiv: opensubdiv/bfr/surfaceFactoryMeshAdapter.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
surfaceFactoryCache.h
\n+
surfaceFactoryMeshAdapter.h
\n
\n
\n Go to the documentation of this file.
1//
\n
2// Copyright 2021 Pixar
\n
3//
\n
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
\n
5// with the following modification; you may not use this file except in
\n@@ -119,126 +119,149 @@\n
18// Unless required by applicable law or agreed to in writing, software
\n
19// distributed under the Apache License with the above modification is
\n
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
\n
21// KIND, either express or implied. See the Apache License for the specific
\n
22// language governing permissions and limitations under the Apache License.
\n
23//
\n
24
\n-
25#ifndef OPENSUBDIV3_BFR_SURFACE_FACTORY_CACHE_H
\n-
26#define OPENSUBDIV3_BFR_SURFACE_FACTORY_CACHE_H
\n+
25#ifndef OPENSUBDIV3_BFR_SURFACE_FACTORY_ADAPTER_H
\n+
26#define OPENSUBDIV3_BFR_SURFACE_FACTORY_ADAPTER_H
\n
27
\n
28#include "../version.h"
\n
29
\n-
30#include "../bfr/irregularPatchType.h"
\n+
30#include <cstdint>
\n
31
\n-
32#include <map>
\n-
33#include <cstdint>
\n+
32namespace OpenSubdiv {
\n+
33namespace OPENSUBDIV_VERSION {
\n
34
\n-
35namespace OpenSubdiv {
\n-
36namespace OPENSUBDIV_VERSION {
\n-
37
\n-
38namespace Bfr {
\n-
39
\n-
52//
\n-
53// Initial/expected use requires simple searches of and additions to the
\n-
54// cache by the SurfaceFactory or its Builders. Longer term, with the
\n-
55// possibility of instances of caches being shared between meshes and
\n-
56// factories, additional options and/or public methods may be warranted
\n-
57// to limit what is cached or to prune the cache if it gets too large.
\n-
58//
\n-
\n-\n-
60public:
\n-\n-\n-
63
\n-\n-\n-
66
\n-
67protected:
\n-
69 // Access restricted to the Factory, its Builders, etc.
\n-
70 friend class SurfaceFactory;
\n-
71
\n-
72 typedef std::uint64_t KeyType;
\n-
73 typedef internal::IrregularPatchSharedPtr DataType;
\n-
75
\n-
76protected:
\n-
78 size_t Size() const { return _map.size(); }
\n-
79
\n-
80 //
\n-
81 // Potential overrides by subclasses for thread-safety:
\n-
82 //
\n-
83 virtual DataType Find(KeyType const & key) const;
\n-
84 virtual DataType Add(KeyType const & key, DataType const & data);
\n-
85
\n-
86 //
\n-
87 // Common implementation used by all subclasses:
\n-
88 //
\n-
89 DataType find(KeyType const & key) const;
\n-
90 DataType add(KeyType const & key, DataType const & data);
\n-
92
\n-
93private:
\n-
94 typedef std::map<KeyType, DataType> MapType;
\n-
95
\n-
96 MapType _map;
\n-
97};
\n-
\n-
98
\n-
113// Separate read and write locks are provided to support mutex types
\n-
114// allowing shared (read) or exclusive (write) access.
\n-
115//
\n-
116template <class MUTEX_TYPE, class READ_LOCK_GUARD_TYPE,
\n-
117 class WRITE_LOCK_GUARD_TYPE>
\n-
\n-\n-
119public:
\n-\n-
121 ~SurfaceFactoryCacheThreaded() override = default;
\n-
122
\n-
123protected:
\n-
125 //
\n-
126 // Virtual overrides from base:
\n-
127 //
\n-
128 DataType Find(KeyType const & key) const override {
\n-
129 READ_LOCK_GUARD_TYPE lockGuard(_mutex);
\n-
130 return find(key);
\n-
131 }
\n-
132
\n-
133 DataType Add(KeyType const & key, DataType const & data) override {
\n-
134 WRITE_LOCK_GUARD_TYPE lockGuard(_mutex);
\n-
135 return add(key, data);
\n-
136 }
\n-
138
\n-
139private:
\n-
140 MUTEX_TYPE mutable _mutex;
\n-
141};
\n-
\n-
142
\n-
143} // end namespace Bfr
\n-
144
\n-
145} // end namespace OPENSUBDIV_VERSION
\n-
146using namespace OPENSUBDIV_VERSION;
\n-
147
\n-
148} // end namespace OpenSubdiv
\n-
149
\n-
150#endif /* OPENSUBDIV3_BFR_SURFACE_FACTORY_CACHE_H */
\n-\n-
Base class providing initialization of a Surface for each face of a mesh.
\n-
Container used internally by SurfaceFactory to store reusable information.
\n-\n-\n-
SurfaceFactoryCache(SurfaceFactoryCache const &)=delete
\n-
SurfaceFactoryCache & operator=(SurfaceFactoryCache const &)=delete
\n-
Template for declaring thread-safe subclasses of SurfaceFactoryCache.
\n-\n-\n+
35namespace Bfr {
\n+
36
\n+
37class VertexDescriptor;
\n+
38
\n+
43// SurfaceFactoryMeshAdapter is an abstract class that defines the interface
\n+
44// through which subclasses of SurfaceFactory adapt to a connected mesh
\n+
45// representation. The interface defines methods that describe the mesh
\n+
46// topology and control indices in the neighborhood of a mesh -- from
\n+
47// which the SurfaceFactory to identifies an appropriate limit surface.
\n+
48//
\n+
49// SurfaceFactoryMeshAdapter methods require a subclass to provide a complete
\n+
50// description of the topology around a base face, as well as indices
\n+
51// associated with it (both vertex and face-varying). The intent here is
\n+
52// to keep the number of methods required to a minimum, and also to minimize
\n+
53// the number of invocations required by the factory.
\n+
54//
\n+
55// With the need to support both linear and non-linear cases (for which
\n+
56// linear is trivial by comparison) and the limit surface for both vertex
\n+
57// and face-varying topologies, the result is a small set of methods
\n+
58// covering this matrix of functionality.
\n+
59//
\n+
60// Since face-varying data may differ in topology from the vertex data --
\n+
61// with each set of face-varying data potentially having its own unique
\n+
62// topology -- sets of face-varying data are uniquely distinguished by an
\n+
63// associated integer (a face-varying ID).
\n+
64//
\n+
\n+\n+
66public:
\n+
68 typedef int Index;
\n+
69
\n+
80 typedef std::intptr_t FVarID;
\n+
81
\n+
82protected:
\n+\n+
85 virtual ~SurfaceFactoryMeshAdapter() { }
\n+
87
\n+
88protected:
\n+
90
\n+
94
\n+
96 virtual bool isFaceHole(Index faceIndex) const = 0;
\n+
97
\n+
99 virtual int getFaceSize(Index faceIndex) const = 0;
\n+
101
\n+
103
\n+
111
\n+
113 virtual int getFaceVertexIndices(Index faceIndex,
\n+
114 Index vertexIndices[]) const = 0;
\n+
115
\n+
117 virtual int getFaceFVarValueIndices(Index faceIndex,
\n+
118 FVarID fvarID, Index fvarValueIndices[]) const = 0;
\n+
120
\n+
121protected:
\n+
123
\n+
159
\n+\n+
162 Index faceIndex, int faceVertex,
\n+
163 VertexDescriptor * vertexDescriptor) const = 0;
\n+
164
\n+\n+
167 Index faceIndex, int faceVertex,
\n+
168 Index vertexIndices[]) const = 0;
\n+
169
\n+\n+
173 Index faceIndex, int faceVertex,
\n+
174 FVarID fvarID, Index fvarValueIndices[]) const = 0;
\n+
176
\n+
177protected:
\n+
179
\n+\n+
204 Index faceIndex, Index vertexIndices[]) const;
\n+
205
\n+\n+
207 Index faceIndex, FVarID fvarID, Index fvarValueIndices[]) const;
\n+
209
\n+
210private:
\n+
211 // No private members
\n+
212};
\n+
\n+
213
\n+
214//
\n+
215// Inline defaults for optional methods:
\n+
216//
\n+
217inline bool
\n+
\n+\n+
219 Index, Index[]) const {
\n+
220 return false;
\n+
221}
\n+
\n+
222
\n+
223inline bool
\n+\n+
228
\n+
229} // end namespace Bfr
\n+
230
\n+
231} // end namespace OPENSUBDIV_VERSION
\n+
232using namespace OPENSUBDIV_VERSION;
\n+
233
\n+
234} // end namespace OpenSubdiv
\n+
235
\n+
236#endif /* OPENSUBDIV3_BFR_SURFACE_FACTORY_ADAPTER_H */
\n+\n+
Abstract interface adapting SurfaceFactory to a connected mesh representation.
\n+
virtual int getFaceVertexIncidentFaceFVarValueIndices(Index faceIndex, int faceVertex, FVarID fvarID, Index fvarValueIndices[]) const =0
Gather face-varying indices of incident faces around a face-vertex.
\n+
virtual int getFaceVertexIncidentFaceVertexIndices(Index faceIndex, int faceVertex, Index vertexIndices[]) const =0
Gather vertex indices of incident faces around a face-vertex.
\n+
virtual int getFaceSize(Index faceIndex) const =0
Returns the size of a face (number of vertices)
\n+\n+
virtual int populateFaceVertexDescriptor(Index faceIndex, int faceVertex, VertexDescriptor *vertexDescriptor) const =0
Describe the topology of incident faces around a face-vertex.
\n+
virtual bool getFaceNeighborhoodVertexIndicesIfRegular(Index faceIndex, Index vertexIndices[]) const
\n+
virtual bool getFaceNeighborhoodFVarValueIndicesIfRegular(Index faceIndex, FVarID fvarID, Index fvarValueIndices[]) const
\n+
virtual int getFaceFVarValueIndices(Index faceIndex, FVarID fvarID, Index fvarValueIndices[]) const =0
Gather the face-varying indices of the face's vertices.
\n+
virtual int getFaceVertexIndices(Index faceIndex, Index vertexIndices[]) const =0
Gather the indices of the face's vertices.
\n+
virtual bool isFaceHole(Index faceIndex) const =0
Returns if a face is a hole.
\n+
std::intptr_t FVarID
Type used to identify and specify face-varying primvars.
\n+
Simple class used by subclasses of SurfaceFactory to describe a vertex.
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-surfaceFactoryCache.h\n+surfaceFactoryMeshAdapter.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2021 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -24,131 +24,179 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_BFR_SURFACE_FACTORY_CACHE_H\n-26#define OPENSUBDIV3_BFR_SURFACE_FACTORY_CACHE_H\n+25#ifndef OPENSUBDIV3_BFR_SURFACE_FACTORY_ADAPTER_H\n+26#define OPENSUBDIV3_BFR_SURFACE_FACTORY_ADAPTER_H\n 27\n 28#include \"../version.h\"\n 29\n-30#include \"../bfr/irregularPatchType.h\"\n+30#include \n 31\n-32#include \n-33#include \n+32namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+33namespace OPENSUBDIV_VERSION {\n 34\n-35namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-36namespace OPENSUBDIV_VERSION {\n-37\n-38namespace Bfr {\n-39\n-52//\n-53// Initial/expected use requires simple searches of and additions to the\n-54// cache by the SurfaceFactory or its Builders. Longer term, with the\n-55// possibility of instances of caches being shared between meshes and\n-56// factories, additional options and/or public methods may be warranted\n-57// to limit what is cached or to prune the cache if it gets too large.\n-58//\n-_\b5_\b9class _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be {\n-60public:\n-_\b6_\b1 _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be();\n-_\b6_\b2 virtual _\b~_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be();\n-63\n-_\b6_\b4 _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be(_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be const &) = delete;\n-_\b6_\b5 _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be & _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be const &) = delete;\n-66\n-67protected:\n-69 // Access restricted to the Factory, its Builders, etc.\n-70 friend class _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by;\n-71\n-72 typedef std::uint64_t KeyType;\n-73 typedef internal::IrregularPatchSharedPtr DataType;\n-75\n-76protected:\n-78 size_t Size() const { return _map.size(); }\n-79\n-80 //\n-81 // Potential overrides by subclasses for thread-safety:\n-82 //\n-83 virtual DataType Find(KeyType const & key) const;\n-84 virtual DataType Add(KeyType const & key, DataType const & data);\n-85\n-86 //\n-87 // Common implementation used by all subclasses:\n-88 //\n-89 DataType find(KeyType const & key) const;\n-90 DataType add(KeyType const & key, DataType const & data);\n-92\n-93private:\n-94 typedef std::map MapType;\n-95\n-96 MapType _map;\n-97};\n-98\n-113// Separate read and write locks are provided to support mutex types\n-114// allowing shared (read) or exclusive (write) access.\n-115//\n-116template \n-_\b1_\b1_\b8class _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\bT_\bh_\br_\be_\ba_\bd_\be_\bd : public _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be {\n-119public:\n-_\b1_\b2_\b0 _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\bT_\bh_\br_\be_\ba_\bd_\be_\bd() : _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be() { }\n-_\b1_\b2_\b1 _\b~_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\bT_\bh_\br_\be_\ba_\bd_\be_\bd() override = default;\n-122\n-123protected:\n-125 //\n-126 // Virtual overrides from base:\n-127 //\n-128 DataType Find(KeyType const & key) const override {\n-129 READ_LOCK_GUARD_TYPE lockGuard(_mutex);\n-130 return find(key);\n-131 }\n-132\n-133 DataType Add(KeyType const & key, DataType const & data) override {\n-134 WRITE_LOCK_GUARD_TYPE lockGuard(_mutex);\n-135 return add(key, data);\n-136 }\n-138\n-139private:\n-140 MUTEX_TYPE mutable _mutex;\n-141};\n-142\n-143} // end namespace Bfr\n-144\n-145} // end namespace OPENSUBDIV_VERSION\n-146using namespace OPENSUBDIV_VERSION;\n-147\n-148} // end namespace OpenSubdiv\n-149\n-150#endif /* OPENSUBDIV3_BFR_SURFACE_FACTORY_CACHE_H */\n+35namespace Bfr {\n+36\n+37class VertexDescriptor;\n+38\n+43// SurfaceFactoryMeshAdapter is an abstract class that defines the interface\n+44// through which subclasses of SurfaceFactory adapt to a connected mesh\n+45// representation. The interface defines methods that describe the mesh\n+46// topology and control indices in the neighborhood of a mesh -- from\n+47// which the SurfaceFactory to identifies an appropriate limit surface.\n+48//\n+49// SurfaceFactoryMeshAdapter methods require a subclass to provide a complete\n+50// description of the topology around a base face, as well as indices\n+51// associated with it (both vertex and face-varying). The intent here is\n+52// to keep the number of methods required to a minimum, and also to minimize\n+53// the number of invocations required by the factory.\n+54//\n+55// With the need to support both linear and non-linear cases (for which\n+56// linear is trivial by comparison) and the limit surface for both vertex\n+57// and face-varying topologies, the result is a small set of methods\n+58// covering this matrix of functionality.\n+59//\n+60// Since face-varying data may differ in topology from the vertex data --\n+61// with each set of face-varying data potentially having its own unique\n+62// topology -- sets of face-varying data are uniquely distinguished by an\n+63// associated integer (a face-varying ID).\n+64//\n+_\b6_\b5class _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br {\n+66public:\n+_\b6_\b8 typedef int _\bI_\bn_\bd_\be_\bx;\n+69\n+_\b8_\b0 typedef std::intptr_t _\bF_\bV_\ba_\br_\bI_\bD;\n+81\n+82protected:\n+84 _\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br() { }\n+85 virtual _\b~_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br() { }\n+87\n+88protected:\n+90\n+94\n+_\b9_\b6 virtual bool _\bi_\bs_\bF_\ba_\bc_\be_\bH_\bo_\bl_\be(_\bI_\bn_\bd_\be_\bx faceIndex) const = 0;\n+97\n+_\b9_\b9 virtual int _\bg_\be_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be(_\bI_\bn_\bd_\be_\bx faceIndex) const = 0;\n+101\n+103\n+111\n+_\b1_\b1_\b3 virtual int _\bg_\be_\bt_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs(_\bI_\bn_\bd_\be_\bx faceIndex,\n+114 _\bI_\bn_\bd_\be_\bx vertexIndices[]) const = 0;\n+115\n+_\b1_\b1_\b7 virtual int _\bg_\be_\bt_\bF_\ba_\bc_\be_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs(_\bI_\bn_\bd_\be_\bx faceIndex,\n+118 _\bF_\bV_\ba_\br_\bI_\bD fvarID, _\bI_\bn_\bd_\be_\bx fvarValueIndices[]) const = 0;\n+120\n+121protected:\n+123\n+159\n+_\b1_\b6_\b1 virtual int _\bp_\bo_\bp_\bu_\bl_\ba_\bt_\be_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(\n+162 _\bI_\bn_\bd_\be_\bx faceIndex, int faceVertex,\n+163 _\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br * vertexDescriptor) const = 0;\n+164\n+_\b1_\b6_\b6 virtual int _\bg_\be_\bt_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs(\n+167 _\bI_\bn_\bd_\be_\bx faceIndex, int faceVertex,\n+168 _\bI_\bn_\bd_\be_\bx vertexIndices[]) const = 0;\n+169\n+_\b1_\b7_\b2 virtual int _\bg_\be_\bt_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs(\n+173 _\bI_\bn_\bd_\be_\bx faceIndex, int faceVertex,\n+174 _\bF_\bV_\ba_\br_\bI_\bD fvarID, _\bI_\bn_\bd_\be_\bx fvarValueIndices[]) const = 0;\n+176\n+177protected:\n+179\n+203 virtual bool _\bg_\be_\bt_\bF_\ba_\bc_\be_\bN_\be_\bi_\bg_\bh_\bb_\bo_\br_\bh_\bo_\bo_\bd_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bf_\bR_\be_\bg_\bu_\bl_\ba_\br(\n+204 _\bI_\bn_\bd_\be_\bx faceIndex, _\bI_\bn_\bd_\be_\bx vertexIndices[]) const;\n+205\n+206 virtual bool _\bg_\be_\bt_\bF_\ba_\bc_\be_\bN_\be_\bi_\bg_\bh_\bb_\bo_\br_\bh_\bo_\bo_\bd_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bf_\bR_\be_\bg_\bu_\bl_\ba_\br(\n+207 _\bI_\bn_\bd_\be_\bx faceIndex, _\bF_\bV_\ba_\br_\bI_\bD fvarID, _\bI_\bn_\bd_\be_\bx fvarValueIndices[]) const;\n+209\n+210private:\n+211 // No private members\n+212};\n+213\n+214//\n+215// Inline defaults for optional methods:\n+216//\n+217inline bool\n+_\b2_\b1_\b8_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:_\bg_\be_\bt_\bF_\ba_\bc_\be_\bN_\be_\bi_\bg_\bh_\bb_\bo_\br_\bh_\bo_\bo_\bd_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bf_\bR_\be_\bg_\bu_\bl_\ba_\br(\n+219 _\bI_\bn_\bd_\be_\bx, _\bI_\bn_\bd_\be_\bx[]) const {\n+220 return false;\n+221}\n+222\n+223inline bool\n+_\b2_\b2_\b4_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:_\bg_\be_\bt_\bF_\ba_\bc_\be_\bN_\be_\bi_\bg_\bh_\bb_\bo_\br_\bh_\bo_\bo_\bd_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bf_\bR_\be_\bg_\bu_\bl_\ba_\br(\n+225 _\bI_\bn_\bd_\be_\bx, _\bF_\bV_\ba_\br_\bI_\bD, _\bI_\bn_\bd_\be_\bx[]) const {\n+226 return false;\n+227}\n+228\n+229} // end namespace Bfr\n+230\n+231} // end namespace OPENSUBDIV_VERSION\n+232using namespace OPENSUBDIV_VERSION;\n+233\n+234} // end namespace OpenSubdiv\n+235\n+236#endif /* OPENSUBDIV3_BFR_SURFACE_FACTORY_ADAPTER_H */\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by\n-Base class providing initialization of a Surface for each face of a mesh.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b0_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be\n-Container used internally by SurfaceFactory to store reusable information.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\b._\bh_\b:_\b5_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be\n-SurfaceFactoryCache()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\b:_\b:_\b~_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be\n-virtual ~SurfaceFactoryCache()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be\n-SurfaceFactoryCache(SurfaceFactoryCache const &)=delete\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-SurfaceFactoryCache & operator=(SurfaceFactoryCache const &)=delete\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\bT_\bh_\br_\be_\ba_\bd_\be_\bd\n-Template for declaring thread-safe subclasses of SurfaceFactoryCache.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\b._\bh_\b:_\b1_\b1_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\bT_\bh_\br_\be_\ba_\bd_\be_\bd_\b:_\b:\n-_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\bT_\bh_\br_\be_\ba_\bd_\be_\bd\n-SurfaceFactoryCacheThreaded()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\b._\bh_\b:_\b1_\b2_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\bT_\bh_\br_\be_\ba_\bd_\be_\bd_\b:_\b:\n-_\b~_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\bT_\bh_\br_\be_\ba_\bd_\be_\bd\n-~SurfaceFactoryCacheThreaded() override=default\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br\n+Abstract interface adapting SurfaceFactory to a connected mesh representation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b._\bh_\b:_\b6_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:\n+_\bg_\be_\bt_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+virtual int getFaceVertexIncidentFaceFVarValueIndices(Index faceIndex, int\n+faceVertex, FVarID fvarID, Index fvarValueIndices[]) const =0\n+Gather face-varying indices of incident faces around a face-vertex.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:\n+_\bg_\be_\bt_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bc_\bi_\bd_\be_\bn_\bt_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+virtual int getFaceVertexIncidentFaceVertexIndices(Index faceIndex, int\n+faceVertex, Index vertexIndices[]) const =0\n+Gather vertex indices of incident faces around a face-vertex.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:_\bg_\be_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be\n+virtual int getFaceSize(Index faceIndex) const =0\n+Returns the size of a face (number of vertices)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:_\bI_\bn_\bd_\be_\bx\n+int Index\n+Integer type representing a mesh index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b._\bh_\b:_\b6_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:\n+_\bp_\bo_\bp_\bu_\bl_\ba_\bt_\be_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+virtual int populateFaceVertexDescriptor(Index faceIndex, int faceVertex,\n+VertexDescriptor *vertexDescriptor) const =0\n+Describe the topology of incident faces around a face-vertex.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:\n+_\bg_\be_\bt_\bF_\ba_\bc_\be_\bN_\be_\bi_\bg_\bh_\bb_\bo_\br_\bh_\bo_\bo_\bd_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bf_\bR_\be_\bg_\bu_\bl_\ba_\br\n+virtual bool getFaceNeighborhoodVertexIndicesIfRegular(Index faceIndex, Index\n+vertexIndices[]) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b._\bh_\b:_\b2_\b1_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:\n+_\bg_\be_\bt_\bF_\ba_\bc_\be_\bN_\be_\bi_\bg_\bh_\bb_\bo_\br_\bh_\bo_\bo_\bd_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bf_\bR_\be_\bg_\bu_\bl_\ba_\br\n+virtual bool getFaceNeighborhoodFVarValueIndicesIfRegular(Index faceIndex,\n+FVarID fvarID, Index fvarValueIndices[]) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b._\bh_\b:_\b2_\b2_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:\n+_\bg_\be_\bt_\bF_\ba_\bc_\be_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+virtual int getFaceFVarValueIndices(Index faceIndex, FVarID fvarID, Index\n+fvarValueIndices[]) const =0\n+Gather the face-varying indices of the face's vertices.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:\n+_\bg_\be_\bt_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+virtual int getFaceVertexIndices(Index faceIndex, Index vertexIndices[]) const\n+=0\n+Gather the indices of the face's vertices.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:_\bi_\bs_\bF_\ba_\bc_\be_\bH_\bo_\bl_\be\n+virtual bool isFaceHole(Index faceIndex) const =0\n+Returns if a face is a hole.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bS_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b:_\b:_\bF_\bV_\ba_\br_\bI_\bD\n+std::intptr_t FVarID\n+Type used to identify and specify face-varying primvars.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b._\bh_\b:_\b8_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+Simple class used by subclasses of SurfaceFactory to describe a vertex.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bv_\be_\br_\bt_\be_\bx_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b1_\b3_\b1\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bb_\bf_\br\n- * _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bC_\ba_\bc_\bh_\be_\b._\bh\n+ * _\bs_\bu_\br_\bf_\ba_\bc_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\be_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00686.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00686.html", "unified_diff": "@@ -95,16 +95,16 @@\n Classes |\n Namespaces \n
surfaceFactory.h File Reference
\n \n
\n
#include "../version.h"
\n #include "../bfr/surface.h"
\n-#include "../bfr/surfaceFactoryMeshAdapter.h"
\n-#include "../sdc/options.h"
\n+#include "../bfr/surfaceFactoryMeshAdapter.h"
\n+#include "../sdc/options.h"
\n #include "../sdc/types.h"
\n #include <cstdint>
\n
\n

Go to the source code of this file.

\n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00686_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00686_source.html", "unified_diff": "@@ -475,17 +475,17 @@\n
557
\n
558} // end namespace OPENSUBDIV_VERSION
\n
559using namespace OPENSUBDIV_VERSION;
\n
560
\n
561} // end namespace OpenSubdiv
\n
562
\n
563#endif /* OPENSUBDIV3_BFR_SURFACE_FACTORY_H */
\n-\n+\n
SchemeType
Enumerated type for all subdivision schemes supported by OpenSubdiv.
Definition types.h:37
\n-
Simple class defining the 2D parameterization of a face.
\n+
Simple class defining the 2D parameterization of a face.
\n
Encapsulates the limit surface for a face of a mesh.
Definition surface.h:59
\n
Base class providing initialization of a Surface for each face of a mesh.
\n
void setInternalCache(SurfaceFactoryCache *cache)
Subclass to identify an internal cache for use by base class.
\n \n
bool InitFaceVaryingSurface(Index faceIndex, Surface< REAL > *surface) const
Initialize a Surface for the default face-varying data.
\n
Sdc::Options GetSchemeOptions() const
Return the set of subdivision options.
\n
Parameterization GetFaceParameterization(Index faceIndex) const
Return the Parameterization of a face with a limit surface.
\n@@ -508,19 +508,19 @@\n \n
bool IsCachingEnabled() const
Return if caching is enable.
\n
Options & SetDefaultFVarID(FVarID id)
Assign the default face-varying ID (none assigned by default)
\n
Options & SetApproxLevelSharp(int level)
Assign maximum refinement level for sharp features.
\n
FVarID GetDefaultFVarID() const
Return the default face-varying ID.
\n
int GetApproxLevelSharp() const
Return maximum refinement level for sharp features.
\n
SurfaceFactoryCache * GetExternalCache() const
Return any assigned external cache.
\n-
Container used internally by SurfaceFactory to store reusable information.
\n-
Abstract interface adapting SurfaceFactory to a connected mesh representation.
\n-\n-
std::intptr_t FVarID
Type used to identify and specify face-varying primvars.
\n-
All supported options applying to subdivision scheme.
Definition options.h:51
\n+
Container used internally by SurfaceFactory to store reusable information.
\n+
Abstract interface adapting SurfaceFactory to a connected mesh representation.
\n+\n+
std::intptr_t FVarID
Type used to identify and specify face-varying primvars.
\n+
All supported options applying to subdivision scheme.
Definition options.h:51
\n \n \n \n
\n
    \n
  • opensubdiv
  • bfr
  • surfaceFactory.h
  • \n
  • Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by \"doxygen\"/ 1.9.8
  • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00689.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00689.html", "unified_diff": "@@ -95,16 +95,16 @@\n Classes |\n Namespaces
\n
surface.h File Reference
\n \n
\n
#include "../version.h"
\n #include "../bfr/surfaceData.h"
\n-#include "../bfr/parameterization.h"
\n-#include "../vtr/array.h"
\n+#include "../bfr/parameterization.h"
\n+#include "../vtr/array.h"
\n
\n

Go to the source code of this file.

\n

\n Classes

\n \n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00689_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00689_source.html", "unified_diff": "@@ -424,17 +424,17 @@\n
440
\n
441} // end namespace OPENSUBDIV_VERSION
\n
442using namespace OPENSUBDIV_VERSION;
\n
443
\n
444} // end namespace OpenSubdiv
\n
445
\n
446#endif /* OPENSUBDIV3_BFR_SURFACE */
\n-\n-
Simple class defining the 2D parameterization of a face.
\n-
int GetFaceSize() const
Returns the size (number of vertices) of the corresponding face.
\n+\n+
Simple class defining the 2D parameterization of a face.
\n+
int GetFaceSize() const
Returns the size (number of vertices) of the corresponding face.
\n
Encapsulates the limit surface for a face of a mesh.
Definition surface.h:59
\n
int GetNumControlPoints() const
Return the number of control points affecting the Surface.
Definition surface.h:137
\n
void Evaluate(REAL const uv[2], REAL const patchPoints[], PointDescriptor const &pointDesc, REAL P[]) const
Evaluation of position.
Definition surface.h:372
\n
int GetFaceSize() const
Return the size of the face.
Definition surface.h:109
\n
bool IsRegular() const
Return if the Surface is a single regular patch.
Definition surface.h:112
\n
void BoundControlPoints(REAL const controlPoints[], PointDescriptor const &controlPointDesc, REAL minExtent[], REAL maxExtent[]) const
Compute bounds of control points from a local array.
\n
int GetControlPointIndices(Index meshPointIndices[]) const
Identify indices of control points in the mesh.
\n@@ -458,15 +458,15 @@\n
Simple struct defining the size and stride of points in arrays.
Definition surface.h:63
\n \n \n \n \n \n
Base class providing initialization of a Surface for each face of a mesh.
\n-\n+\n \n \n \n
\n
    \n
  • opensubdiv
  • bfr
  • surface.h
  • \n
  • Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by \"doxygen\"/ 1.9.8
  • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00692.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00692.html", "unified_diff": "@@ -95,15 +95,15 @@\n Classes |\n Namespaces
\n
refinerSurfaceFactory.h File Reference
\n \n
\n
#include "../version.h"
\n #include "../bfr/surfaceFactory.h"
\n-#include "../bfr/surfaceFactoryCache.h"
\n+#include "../bfr/surfaceFactoryCache.h"
\n
\n

Go to the source code of this file.

\n

\n Classes

class  Surface< REAL >
 Encapsulates the limit surface for a face of a mesh. More...
\n \n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00692_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00692_source.html", "unified_diff": "@@ -238,15 +238,15 @@\n
173
\n
174} // end namespace OPENSUBDIV_VERSION
\n
175using namespace OPENSUBDIV_VERSION;
\n
176
\n
177} // end namespace OpenSubdiv
\n
178
\n
179#endif /* OPENSUBDIV3_BFR_REFINER_SURFACE_FACTORY_H */
\n-\n+\n
Intermediate subclass of SurfaceFactory with Far::TopologyRefiner as the mesh.
\n \n
int GetNumFVarChannels() const
Return the number of face-varying channels.
\n
Far::TopologyRefiner const & GetMesh() const
Return the instance of the mesh.
\n \n
RefinerSurfaceFactoryBase(Far::TopologyRefiner const &mesh, Options const &options)
\n
Template for concrete subclasses of RefinerSurfaceFactoryBase.
\n@@ -254,23 +254,23 @@\n
RefinerSurfaceFactory(Far::TopologyRefiner const &mesh, Options const &options=Options())
\n
Base class providing initialization of a Surface for each face of a mesh.
\n
void setInternalCache(SurfaceFactoryCache *cache)
Subclass to identify an internal cache for use by base class.
\n
Simple set of options assigned to instances of SurfaceFactory.
\n
virtual int getFaceVertexIncidentFaceFVarValueIndices(Index faceIndex, int faceVertex, FVarID fvarID, Index fvarValueIndices[]) const =0
Gather face-varying indices of incident faces around a face-vertex.
\n
virtual int getFaceVertexIncidentFaceVertexIndices(Index faceIndex, int faceVertex, Index vertexIndices[]) const =0
Gather vertex indices of incident faces around a face-vertex.
\n
virtual int getFaceSize(Index faceIndex) const =0
Returns the size of a face (number of vertices)
\n-\n+\n
virtual int populateFaceVertexDescriptor(Index faceIndex, int faceVertex, VertexDescriptor *vertexDescriptor) const =0
Describe the topology of incident faces around a face-vertex.
\n-
virtual bool getFaceNeighborhoodVertexIndicesIfRegular(Index faceIndex, Index vertexIndices[]) const
\n-
virtual bool getFaceNeighborhoodFVarValueIndicesIfRegular(Index faceIndex, FVarID fvarID, Index fvarValueIndices[]) const
\n+
virtual bool getFaceNeighborhoodVertexIndicesIfRegular(Index faceIndex, Index vertexIndices[]) const
\n+
virtual bool getFaceNeighborhoodFVarValueIndicesIfRegular(Index faceIndex, FVarID fvarID, Index fvarValueIndices[]) const
\n
virtual int getFaceFVarValueIndices(Index faceIndex, FVarID fvarID, Index fvarValueIndices[]) const =0
Gather the face-varying indices of the face's vertices.
\n
virtual int getFaceVertexIndices(Index faceIndex, Index vertexIndices[]) const =0
Gather the indices of the face's vertices.
\n
virtual bool isFaceHole(Index faceIndex) const =0
Returns if a face is a hole.
\n-
std::intptr_t FVarID
Type used to identify and specify face-varying primvars.
\n-
Simple class used by subclasses of SurfaceFactory to describe a vertex.
\n+
std::intptr_t FVarID
Type used to identify and specify face-varying primvars.
\n+
Simple class used by subclasses of SurfaceFactory to describe a vertex.
\n
Stores topology data for a specified set of refinement options.
\n \n \n \n
\n
    \n
  • opensubdiv
  • bfr
  • refinerSurfaceFactory.h
  • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00695.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00695.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/bfr/parameterization.h File Reference\n+OpenSubdiv: opensubdiv/bfr/limits.h File Reference\n \n \n \n \n \n \n \n@@ -90,26 +90,26 @@\n
\n \n \n
\n \n-
parameterization.h File Reference
\n+
limits.h File Reference
\n
\n
\n
#include "../version.h"
\n-#include "../sdc/types.h"
\n+#include "../far/types.h"
\n
\n

Go to the source code of this file.

\n

\n Classes

class  RefinerSurfaceFactoryBase
 Intermediate subclass of SurfaceFactory with Far::TopologyRefiner as the mesh. More...
\n \n-\n-\n+\n+\n \n

\n Classes

class  Parameterization
 Simple class defining the 2D parameterization of a face. More...
struct  Limits
 Simple struct with limits related to topology. More...
 
\n \n \n \n \n@@ -118,13 +118,13 @@\n \n

\n Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,24 +1,24 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-parameterization.h File Reference\n+limits.h File Reference\n #include \"../version.h\"\n-#include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n+#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn\n-\u00a0 Simple class defining the 2D parameterization of a face. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bL_\bi_\bm_\bi_\bt_\bs\n+\u00a0 Simple struct with limits related to topology. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bb_\bf_\br\n- * _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+ * _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00695.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00695.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00695 = [\n- [\"Parameterization\", \"a00921.html\", \"a00921\"]\n+ [\"Limits\", \"a00917.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00695_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00695_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/bfr/parameterization.h Source File\n+OpenSubdiv: opensubdiv/bfr/limits.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
parameterization.h
\n+
limits.h
\n
\n
\n Go to the documentation of this file.
1//
\n
2// Copyright 2021 Pixar
\n
3//
\n
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
\n
5// with the following modification; you may not use this file except in
\n@@ -119,200 +119,55 @@\n
18// Unless required by applicable law or agreed to in writing, software
\n
19// distributed under the Apache License with the above modification is
\n
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
\n
21// KIND, either express or implied. See the Apache License for the specific
\n
22// language governing permissions and limitations under the Apache License.
\n
23//
\n
24
\n-
25#ifndef OPENSUBDIV3_BFR_PARAMETERIZATION_H
\n-
26#define OPENSUBDIV3_BFR_PARAMETERIZATION_H
\n+
25#ifndef OPENSUBDIV3_BFR_LIMITS_H
\n+
26#define OPENSUBDIV3_BFR_LIMITS_H
\n
27
\n
28#include "../version.h"
\n
29
\n-
30#include "../sdc/types.h"
\n+
30#include "../far/types.h"
\n
31
\n-
32namespace OpenSubdiv {
\n-
33namespace OPENSUBDIV_VERSION {
\n+
\n+
32namespace OpenSubdiv {
\n+
\n+
33namespace OPENSUBDIV_VERSION {
\n
34
\n-
35namespace Bfr {
\n+
\n+
35namespace Bfr {
\n
36
\n-
\n-\n-
53public:
\n-
62 enum Type { QUAD,
\n-\n-\n-
65 };
\n-
66
\n-
67public:
\n-
69
\n-
76
\n-
78 Parameterization(Sdc::SchemeType scheme, int faceSize);
\n-
79
\n-
81 bool IsValid() const { return (_faceSize > 0); }
\n-
82
\n-
84 Parameterization() : _type(0), _uDim(0), _faceSize(0) { }
\n-
85
\n-\n-\n-
88 ~Parameterization() = default;
\n-
90
\n-
92
\n-
96
\n-
98 Type GetType() const { return (Type) _type; }
\n-
99
\n-
101 int GetFaceSize() const { return _faceSize; }
\n-
103
\n-
104public:
\n-
106
\n-
116
\n-
118 template <typename REAL>
\n-
119 void GetVertexCoord(int vertexIndex, REAL uvCoord[2]) const;
\n-
120
\n-
122 template <typename REAL>
\n-
123 void GetEdgeCoord(int edgeIndex, REAL t, REAL uvCoord[2]) const;
\n-
124
\n-
126 template <typename REAL>
\n-
127 void GetCenterCoord(REAL uvCoord[2]) const;
\n-
129
\n-
130public:
\n-
132
\n-
147
\n-
149 bool HasSubFaces() const;
\n-
150
\n-
152 template <typename REAL>
\n-
153 int GetSubFace(REAL const uvCoord[2]) const;
\n-
154
\n-
157 template <typename REAL>
\n-\n-
159 REAL const uvCoord[2], REAL subFaceCoord[2]) const;
\n-
160
\n-
162 template <typename REAL>
\n-
163 void ConvertSubFaceToCoord(int subFace,
\n-
164 REAL const subFaceCoord[2], REAL uvCoord[2]) const;
\n-
165
\n-
168 template <typename REAL>
\n-\n-
170 REAL const uvCoord[2], REAL subFaceCoord[2]) const;
\n-
171
\n-
173 template <typename REAL>
\n-
174 void ConvertNormalizedSubFaceToCoord(int subFace,
\n-
175 REAL const subFaceCoord[2], REAL uvCoord[2]) const;
\n-
177
\n-
178private:
\n-
179 template <typename REAL>
\n-
180 int convertCoordToSubFace(bool normalized,
\n-
181 REAL const uvCoord[2], REAL subFaceCoord[2]) const;
\n-
182 template <typename REAL>
\n-
183 void convertSubFaceToCoord(bool normalized, int subFace,
\n-
184 REAL const subFaceCoord[2], REAL uvCoord[2]) const;
\n-
185
\n-
186private:
\n-
187 unsigned char _type;
\n-
188 unsigned char _uDim;
\n-
189 unsigned short _faceSize;
\n-
190};
\n-
\n-
191
\n-
192//
\n-
193// Inline sub-face coordinate conversion methods:
\n-
194//
\n-
195inline bool
\n-
\n-\n-
197 return (_type == QUAD_SUBFACES);
\n-
198}
\n-
\n-
199
\n-
200template <typename REAL>
\n-
201inline int
\n-
\n-
202Parameterization::GetSubFace(REAL const uvCoord[2]) const {
\n-
203
\n-
204 if (!HasSubFaces()) return 0;
\n-
205
\n-
206 int uTile = (int) uvCoord[0];
\n-
207 int vTile = (int) uvCoord[1];
\n-
208 return (vTile + ((uvCoord[1] - (REAL) vTile) > 0.75f)) * _uDim +
\n-
209 (uTile + ((uvCoord[0] - (REAL) uTile) > 0.75f));
\n-
210}
\n-
\n-
211
\n-
212// Conversions to unnormalized sub-face coordinates:
\n-
213template <typename REAL>
\n-
214inline int
\n-
\n-\n-
216 REAL const uvCoord[2], REAL subCoord[2]) const {
\n-
217 return convertCoordToSubFace<REAL>(false, uvCoord, subCoord);
\n-
218}
\n-
\n-
219template <typename REAL>
\n-
220inline void
\n-
\n-\n-
222 int subFace, REAL const subCoord[2], REAL uvCoord[2]) const {
\n-
223 convertSubFaceToCoord<REAL>(false, subFace, subCoord, uvCoord);
\n-
224}
\n-
\n-
225
\n-
226// Conversions to normalized sub-face coordinates:
\n-
227template <typename REAL>
\n-
228inline int
\n-
\n-\n-
230 REAL const uvCoord[2], REAL subCoord[2]) const {
\n-
231 return convertCoordToSubFace<REAL>(true, uvCoord, subCoord);
\n-
232}
\n-
\n-
233template <typename REAL>
\n-
234inline void
\n-
\n-\n-
236 int subFace, REAL const subCoord[2], REAL uvCoord[2]) const {
\n-
237 convertSubFaceToCoord<REAL>(true, subFace, subCoord, uvCoord);
\n-
238}
\n-
\n-
239
\n-
240} // end namespace Bfr
\n-
241
\n-
242} // end namespace OPENSUBDIV_VERSION
\n-
243using namespace OPENSUBDIV_VERSION;
\n-
244
\n-
245} // end namespace OpenSubdiv
\n-
246
\n-
247#endif /* OPENSUBDIV3_BFR_PARAMETERIZATION */
\n-\n-
SchemeType
Enumerated type for all subdivision schemes supported by OpenSubdiv.
Definition types.h:37
\n-
Simple class defining the 2D parameterization of a face.
\n-
int GetSubFace(REAL const uvCoord[2]) const
Returns the integer sub-face containing the given (u,v)
\n-
int GetFaceSize() const
Returns the size (number of vertices) of the corresponding face.
\n-
Type
Enumerated type for the different kinds of Parameterizations.
\n-
@ QUAD_SUBFACES
Partitioned into quadrilateral sub-faces.
\n-\n-\n-
Parameterization(Sdc::SchemeType scheme, int faceSize)
Primary constructor with subdivision scheme and face size.
\n-
int ConvertCoordToSubFace(REAL const uvCoord[2], REAL subFaceCoord[2]) const
Convert (u,v) to a sub-face (return value) and its local (u,v) coordinate.
\n-
void GetCenterCoord(REAL uvCoord[2]) const
Returns the (u,v) coordinate for the center of the face.
\n-
Type GetType() const
Returns the type of parameterization assigned.
\n-\n-
Parameterization(Parameterization const &)=default
\n-
void GetEdgeCoord(int edgeIndex, REAL t, REAL uvCoord[2]) const
Returns the (u,v) coordinate at any point on a given edge.
\n-
void ConvertNormalizedSubFaceToCoord(int subFace, REAL const subFaceCoord[2], REAL uvCoord[2]) const
Convert a sub-face and its normalized (u,v) coordinate to (u,v)
\n-
void GetVertexCoord(int vertexIndex, REAL uvCoord[2]) const
Returns the (u,v) coordinate of a given vertex.
\n-
Parameterization()
Default construction produces an invalid instance.
\n-
bool IsValid() const
Returns true if correctly initialized.
\n-
bool HasSubFaces() const
Returns if Parameterization has been partitioned into sub-faces.
\n-
int ConvertCoordToNormalizedSubFace(REAL const uvCoord[2], REAL subFaceCoord[2]) const
Convert (u,v) to a sub-face (return value) and its normalized (u,v) coordinate.
\n-
void ConvertSubFaceToCoord(int subFace, REAL const subFaceCoord[2], REAL uvCoord[2]) const
Convert a sub-face and its local (u,v) coordinate to (u,v)
\n-
Parameterization & operator=(Parameterization const &)=default
\n+
\n+
40struct Limits {
\n+
42 static int MaxValence() { return Far::VALENCE_LIMIT; }
\n+
43
\n+
46 static int MaxFaceSize() { return Far::VALENCE_LIMIT; }
\n+
47};
\n+
\n+
48
\n+
49} // end namespace Bfr
\n+
\n+
50
\n+
51} // end namespace OPENSUBDIV_VERSION
\n+
\n+
52using namespace OPENSUBDIV_VERSION;
\n+
53} // end namespace OpenSubdiv
\n+
\n+
54
\n+
55#endif /* OPENSUBDIV3_BFR_LIMITS_H */
\n+\n+
Simple struct with limits related to topology.
Definition limits.h:40
\n+
static int MaxFaceSize()
Returns the maximum allowable size for a face (number of vertices)
Definition limits.h:46
\n+
static int MaxValence()
Returns the maximum allowable valence for a vertex.
Definition limits.h:42
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-parameterization.h\n+limits.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2021 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -24,243 +24,49 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_BFR_PARAMETERIZATION_H\n-26#define OPENSUBDIV3_BFR_PARAMETERIZATION_H\n+25#ifndef OPENSUBDIV3_BFR_LIMITS_H\n+26#define OPENSUBDIV3_BFR_LIMITS_H\n 27\n 28#include \"../version.h\"\n 29\n-30#include \"../sdc/types.h\"\n+30#include \"../far/types.h\"\n 31\n-32namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-33namespace OPENSUBDIV_VERSION {\n+_\b3_\b2namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+_\b3_\b3namespace OPENSUBDIV_VERSION {\n 34\n-35namespace Bfr {\n+_\b3_\b5namespace Bfr {\n 36\n-_\b5_\b2class _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn {\n-53public:\n-_\b6_\b2 enum _\bT_\by_\bp_\be { _\bQ_\bU_\bA_\bD,\n-_\b6_\b3 _\bT_\bR_\bI,\n-64 _\bQ_\bU_\bA_\bD_\b__\bS_\bU_\bB_\bF_\bA_\bC_\bE_\bS\n-_\b6_\b5 };\n-66\n-67public:\n-69\n-76\n-_\b7_\b8 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn(_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\bT_\by_\bp_\be scheme, int faceSize);\n-79\n-_\b8_\b1 bool _\bI_\bs_\bV_\ba_\bl_\bi_\bd() const { return (_faceSize > 0); }\n-82\n-_\b8_\b4 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn() : _type(0), _uDim(0), _faceSize(0) { }\n-85\n-_\b8_\b6 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn(_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn const &) = default;\n-_\b8_\b7 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn & _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn const &) = default;\n-_\b8_\b8 _\b~_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn() = default;\n-90\n-92\n-96\n-_\b9_\b8 _\bT_\by_\bp_\be _\bG_\be_\bt_\bT_\by_\bp_\be() const { return (_\bT_\by_\bp_\be) _type; }\n-99\n-_\b1_\b0_\b1 int _\bG_\be_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be() const { return _faceSize; }\n-103\n-104public:\n-106\n-116\n-118 template \n-_\b1_\b1_\b9 void _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\bo_\br_\bd(int vertexIndex, REAL uvCoord[2]) const;\n-120\n-122 template \n-_\b1_\b2_\b3 void _\bG_\be_\bt_\bE_\bd_\bg_\be_\bC_\bo_\bo_\br_\bd(int edgeIndex, REAL t, REAL uvCoord[2]) const;\n-124\n-126 template \n-_\b1_\b2_\b7 void _\bG_\be_\bt_\bC_\be_\bn_\bt_\be_\br_\bC_\bo_\bo_\br_\bd(REAL uvCoord[2]) const;\n-129\n-130public:\n-132\n-147\n-149 bool _\bH_\ba_\bs_\bS_\bu_\bb_\bF_\ba_\bc_\be_\bs() const;\n-150\n-152 template \n-153 int _\bG_\be_\bt_\bS_\bu_\bb_\bF_\ba_\bc_\be(REAL const uvCoord[2]) const;\n-154\n-157 template \n-158 int _\bC_\bo_\bn_\bv_\be_\br_\bt_\bC_\bo_\bo_\br_\bd_\bT_\bo_\bS_\bu_\bb_\bF_\ba_\bc_\be(\n-159 REAL const uvCoord[2], REAL subFaceCoord[2]) const;\n-160\n-162 template \n-163 void _\bC_\bo_\bn_\bv_\be_\br_\bt_\bS_\bu_\bb_\bF_\ba_\bc_\be_\bT_\bo_\bC_\bo_\bo_\br_\bd(int subFace,\n-164 REAL const subFaceCoord[2], REAL uvCoord[2]) const;\n-165\n-168 template \n-169 int _\bC_\bo_\bn_\bv_\be_\br_\bt_\bC_\bo_\bo_\br_\bd_\bT_\bo_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be_\bd_\bS_\bu_\bb_\bF_\ba_\bc_\be(\n-170 REAL const uvCoord[2], REAL subFaceCoord[2]) const;\n-171\n-173 template \n-174 void _\bC_\bo_\bn_\bv_\be_\br_\bt_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be_\bd_\bS_\bu_\bb_\bF_\ba_\bc_\be_\bT_\bo_\bC_\bo_\bo_\br_\bd(int subFace,\n-175 REAL const subFaceCoord[2], REAL uvCoord[2]) const;\n-177\n-178private:\n-179 template \n-180 int convertCoordToSubFace(bool normalized,\n-181 REAL const uvCoord[2], REAL subFaceCoord[2]) const;\n-182 template \n-183 void convertSubFaceToCoord(bool normalized, int subFace,\n-184 REAL const subFaceCoord[2], REAL uvCoord[2]) const;\n-185\n-186private:\n-187 unsigned char _type;\n-188 unsigned char _uDim;\n-189 unsigned short _faceSize;\n-190};\n-191\n-192//\n-193// Inline sub-face coordinate conversion methods:\n-194//\n-195inline bool\n-_\b1_\b9_\b6_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bH_\ba_\bs_\bS_\bu_\bb_\bF_\ba_\bc_\be_\bs() const {\n-197 return (_type == _\bQ_\bU_\bA_\bD_\b__\bS_\bU_\bB_\bF_\bA_\bC_\bE_\bS);\n-198}\n-199\n-200template \n-201inline int\n-_\b2_\b0_\b2_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bS_\bu_\bb_\bF_\ba_\bc_\be(REAL const uvCoord[2]) const {\n-203\n-204 if (!_\bH_\ba_\bs_\bS_\bu_\bb_\bF_\ba_\bc_\be_\bs()) return 0;\n-205\n-206 int uTile = (int) uvCoord[0];\n-207 int vTile = (int) uvCoord[1];\n-208 return (vTile + ((uvCoord[1] - (REAL) vTile) > 0.75f)) * _uDim +\n-209 (uTile + ((uvCoord[0] - (REAL) uTile) > 0.75f));\n-210}\n-211\n-212// Conversions to unnormalized sub-face coordinates:\n-213template \n-214inline int\n-_\b2_\b1_\b5_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bC_\bo_\bn_\bv_\be_\br_\bt_\bC_\bo_\bo_\br_\bd_\bT_\bo_\bS_\bu_\bb_\bF_\ba_\bc_\be(\n-216 REAL const uvCoord[2], REAL subCoord[2]) const {\n-217 return convertCoordToSubFace(false, uvCoord, subCoord);\n-218}\n-219template \n-220inline void\n-_\b2_\b2_\b1_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bC_\bo_\bn_\bv_\be_\br_\bt_\bS_\bu_\bb_\bF_\ba_\bc_\be_\bT_\bo_\bC_\bo_\bo_\br_\bd(\n-222 int subFace, REAL const subCoord[2], REAL uvCoord[2]) const {\n-223 convertSubFaceToCoord(false, subFace, subCoord, uvCoord);\n-224}\n-225\n-226// Conversions to normalized sub-face coordinates:\n-227template \n-228inline int\n-_\b2_\b2_\b9_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bC_\bo_\bn_\bv_\be_\br_\bt_\bC_\bo_\bo_\br_\bd_\bT_\bo_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be_\bd_\bS_\bu_\bb_\bF_\ba_\bc_\be(\n-230 REAL const uvCoord[2], REAL subCoord[2]) const {\n-231 return convertCoordToSubFace(true, uvCoord, subCoord);\n-232}\n-233template \n-234inline void\n-_\b2_\b3_\b5_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bC_\bo_\bn_\bv_\be_\br_\bt_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be_\bd_\bS_\bu_\bb_\bF_\ba_\bc_\be_\bT_\bo_\bC_\bo_\bo_\br_\bd(\n-236 int subFace, REAL const subCoord[2], REAL uvCoord[2]) const {\n-237 convertSubFaceToCoord(true, subFace, subCoord, uvCoord);\n-238}\n-239\n-240} // end namespace Bfr\n-241\n-242} // end namespace OPENSUBDIV_VERSION\n-243using namespace OPENSUBDIV_VERSION;\n-244\n-245} // end namespace OpenSubdiv\n-246\n-247#endif /* OPENSUBDIV3_BFR_PARAMETERIZATION */\n+_\b4_\b0struct _\bL_\bi_\bm_\bi_\bt_\bs {\n+_\b4_\b2 static int _\bM_\ba_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be() { return Far::VALENCE_LIMIT; }\n+43\n+_\b4_\b6 static int _\bM_\ba_\bx_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be() { return Far::VALENCE_LIMIT; }\n+47};\n+48\n+49} // end namespace Bfr\n+50\n+51} // end namespace OPENSUBDIV_VERSION\n+52using namespace OPENSUBDIV_VERSION;\n+53} // end namespace OpenSubdiv\n+54\n+55#endif /* OPENSUBDIV3_BFR_LIMITS_H */\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\bT_\by_\bp_\be\n-SchemeType\n-Enumerated type for all subdivision schemes supported by OpenSubdiv.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b3_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn\n-Simple class defining the 2D parameterization of a face.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b5_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bS_\bu_\bb_\bF_\ba_\bc_\be\n-int GetSubFace(REAL const uvCoord[2]) const\n-Returns the integer sub-face containing the given (u,v)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b0_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be\n-int GetFaceSize() const\n-Returns the size (number of vertices) of the corresponding face.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b1_\b0_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bT_\by_\bp_\be\n-Type\n-Enumerated type for the different kinds of Parameterizations.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b6_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bQ_\bU_\bA_\bD_\b__\bS_\bU_\bB_\bF_\bA_\bC_\bE_\bS\n-@ QUAD_SUBFACES\n-Partitioned into quadrilateral sub-faces.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b6_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bT_\bR_\bI\n-@ TRI\n-Triangle.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b6_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bQ_\bU_\bA_\bD\n-@ QUAD\n-Quadrilateral.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b6_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn\n-Parameterization(Sdc::SchemeType scheme, int faceSize)\n-Primary constructor with subdivision scheme and face size.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bC_\bo_\bn_\bv_\be_\br_\bt_\bC_\bo_\bo_\br_\bd_\bT_\bo_\bS_\bu_\bb_\bF_\ba_\bc_\be\n-int ConvertCoordToSubFace(REAL const uvCoord[2], REAL subFaceCoord[2]) const\n-Convert (u,v) to a sub-face (return value) and its local (u,v) coordinate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b1_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bC_\be_\bn_\bt_\be_\br_\bC_\bo_\bo_\br_\bd\n-void GetCenterCoord(REAL uvCoord[2]) const\n-Returns the (u,v) coordinate for the center of the face.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bT_\by_\bp_\be\n-Type GetType() const\n-Returns the type of parameterization assigned.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b9_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\b~_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn\n-~Parameterization()=default\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn\n-Parameterization(Parameterization const &)=default\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bE_\bd_\bg_\be_\bC_\bo_\bo_\br_\bd\n-void GetEdgeCoord(int edgeIndex, REAL t, REAL uvCoord[2]) const\n-Returns the (u,v) coordinate at any point on a given edge.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:\n-_\bC_\bo_\bn_\bv_\be_\br_\bt_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be_\bd_\bS_\bu_\bb_\bF_\ba_\bc_\be_\bT_\bo_\bC_\bo_\bo_\br_\bd\n-void ConvertNormalizedSubFaceToCoord(int subFace, REAL const subFaceCoord[2],\n-REAL uvCoord[2]) const\n-Convert a sub-face and its normalized (u,v) coordinate to (u,v)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b3_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\bo_\br_\bd\n-void GetVertexCoord(int vertexIndex, REAL uvCoord[2]) const\n-Returns the (u,v) coordinate of a given vertex.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn\n-Parameterization()\n-Default construction produces an invalid instance.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b8_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bI_\bs_\bV_\ba_\bl_\bi_\bd\n-bool IsValid() const\n-Returns true if correctly initialized.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b8_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bH_\ba_\bs_\bS_\bu_\bb_\bF_\ba_\bc_\be_\bs\n-bool HasSubFaces() const\n-Returns if Parameterization has been partitioned into sub-faces.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b1_\b9_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:\n-_\bC_\bo_\bn_\bv_\be_\br_\bt_\bC_\bo_\bo_\br_\bd_\bT_\bo_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be_\bd_\bS_\bu_\bb_\bF_\ba_\bc_\be\n-int ConvertCoordToNormalizedSubFace(REAL const uvCoord[2], REAL subFaceCoord\n-[2]) const\n-Convert (u,v) to a sub-face (return value) and its normalized (u,v) coordinate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b2_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bC_\bo_\bn_\bv_\be_\br_\bt_\bS_\bu_\bb_\bF_\ba_\bc_\be_\bT_\bo_\bC_\bo_\bo_\br_\bd\n-void ConvertSubFaceToCoord(int subFace, REAL const subFaceCoord[2], REAL\n-uvCoord[2]) const\n-Convert a sub-face and its local (u,v) coordinate to (u,v)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b2_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-Parameterization & operator=(Parameterization const &)=default\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bs\n+Simple struct with limits related to topology.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b4_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bs_\b:_\b:_\bM_\ba_\bx_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be\n+static int MaxFaceSize()\n+Returns the maximum allowable size for a face (number of vertices)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b4_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bs_\b:_\b:_\bM_\ba_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be\n+static int MaxValence()\n+Returns the maximum allowable valence for a vertex.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b4_\b2\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bb_\bf_\br\n- * _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+ * _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00698.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00698.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/bfr/limits.h File Reference\n+OpenSubdiv: opensubdiv/bfr/parameterization.h File Reference\n \n \n \n \n \n \n \n@@ -90,26 +90,26 @@\n \n \n \n
\n \n-
limits.h File Reference
\n+
parameterization.h File Reference
\n
\n
\n
#include "../version.h"
\n-#include "../far/types.h"
\n+#include "../sdc/types.h"
\n
\n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n

\n Classes

struct  Limits
 Simple struct with limits related to topology. More...
class  Parameterization
 Simple class defining the 2D parameterization of a face. More...
 
\n \n \n \n \n@@ -118,13 +118,13 @@\n \n

\n Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,24 +1,24 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-limits.h File Reference\n+parameterization.h File Reference\n #include \"../version.h\"\n-#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n+#include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bL_\bi_\bm_\bi_\bt_\bs\n-\u00a0 Simple struct with limits related to topology. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn\n+\u00a0 Simple class defining the 2D parameterization of a face. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bb_\bf_\br\n- * _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh\n+ * _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00698.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00698.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00698 = [\n- [\"Limits\", \"a00917.html\", null]\n+ [\"Parameterization\", \"a00921.html\", \"a00921\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00698_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00698_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/bfr/limits.h Source File\n+OpenSubdiv: opensubdiv/bfr/parameterization.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
limits.h
\n+
parameterization.h
\n
\n
\n Go to the documentation of this file.
1//
\n
2// Copyright 2021 Pixar
\n
3//
\n
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
\n
5// with the following modification; you may not use this file except in
\n@@ -119,55 +119,200 @@\n
18// Unless required by applicable law or agreed to in writing, software
\n
19// distributed under the Apache License with the above modification is
\n
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
\n
21// KIND, either express or implied. See the Apache License for the specific
\n
22// language governing permissions and limitations under the Apache License.
\n
23//
\n
24
\n-
25#ifndef OPENSUBDIV3_BFR_LIMITS_H
\n-
26#define OPENSUBDIV3_BFR_LIMITS_H
\n+
25#ifndef OPENSUBDIV3_BFR_PARAMETERIZATION_H
\n+
26#define OPENSUBDIV3_BFR_PARAMETERIZATION_H
\n
27
\n
28#include "../version.h"
\n
29
\n-
30#include "../far/types.h"
\n+
30#include "../sdc/types.h"
\n
31
\n-
\n-
32namespace OpenSubdiv {
\n-
\n-
33namespace OPENSUBDIV_VERSION {
\n+
32namespace OpenSubdiv {
\n+
33namespace OPENSUBDIV_VERSION {
\n
34
\n-
\n-
35namespace Bfr {
\n+
35namespace Bfr {
\n
36
\n-
\n-
40struct Limits {
\n-
42 static int MaxValence() { return Far::VALENCE_LIMIT; }
\n-
43
\n-
46 static int MaxFaceSize() { return Far::VALENCE_LIMIT; }
\n-
47};
\n-
\n-
48
\n-
49} // end namespace Bfr
\n-
\n-
50
\n-
51} // end namespace OPENSUBDIV_VERSION
\n-
\n-
52using namespace OPENSUBDIV_VERSION;
\n-
53} // end namespace OpenSubdiv
\n-
\n-
54
\n-
55#endif /* OPENSUBDIV3_BFR_LIMITS_H */
\n-\n-
Simple struct with limits related to topology.
Definition limits.h:40
\n-
static int MaxFaceSize()
Returns the maximum allowable size for a face (number of vertices)
Definition limits.h:46
\n-
static int MaxValence()
Returns the maximum allowable valence for a vertex.
Definition limits.h:42
\n+
\n+\n+
53public:
\n+
62 enum Type { QUAD,
\n+\n+\n+
65 };
\n+
66
\n+
67public:
\n+
69
\n+
76
\n+
78 Parameterization(Sdc::SchemeType scheme, int faceSize);
\n+
79
\n+
81 bool IsValid() const { return (_faceSize > 0); }
\n+
82
\n+
84 Parameterization() : _type(0), _uDim(0), _faceSize(0) { }
\n+
85
\n+\n+\n+
88 ~Parameterization() = default;
\n+
90
\n+
92
\n+
96
\n+
98 Type GetType() const { return (Type) _type; }
\n+
99
\n+
101 int GetFaceSize() const { return _faceSize; }
\n+
103
\n+
104public:
\n+
106
\n+
116
\n+
118 template <typename REAL>
\n+
119 void GetVertexCoord(int vertexIndex, REAL uvCoord[2]) const;
\n+
120
\n+
122 template <typename REAL>
\n+
123 void GetEdgeCoord(int edgeIndex, REAL t, REAL uvCoord[2]) const;
\n+
124
\n+
126 template <typename REAL>
\n+
127 void GetCenterCoord(REAL uvCoord[2]) const;
\n+
129
\n+
130public:
\n+
132
\n+
147
\n+
149 bool HasSubFaces() const;
\n+
150
\n+
152 template <typename REAL>
\n+
153 int GetSubFace(REAL const uvCoord[2]) const;
\n+
154
\n+
157 template <typename REAL>
\n+\n+
159 REAL const uvCoord[2], REAL subFaceCoord[2]) const;
\n+
160
\n+
162 template <typename REAL>
\n+
163 void ConvertSubFaceToCoord(int subFace,
\n+
164 REAL const subFaceCoord[2], REAL uvCoord[2]) const;
\n+
165
\n+
168 template <typename REAL>
\n+\n+
170 REAL const uvCoord[2], REAL subFaceCoord[2]) const;
\n+
171
\n+
173 template <typename REAL>
\n+
174 void ConvertNormalizedSubFaceToCoord(int subFace,
\n+
175 REAL const subFaceCoord[2], REAL uvCoord[2]) const;
\n+
177
\n+
178private:
\n+
179 template <typename REAL>
\n+
180 int convertCoordToSubFace(bool normalized,
\n+
181 REAL const uvCoord[2], REAL subFaceCoord[2]) const;
\n+
182 template <typename REAL>
\n+
183 void convertSubFaceToCoord(bool normalized, int subFace,
\n+
184 REAL const subFaceCoord[2], REAL uvCoord[2]) const;
\n+
185
\n+
186private:
\n+
187 unsigned char _type;
\n+
188 unsigned char _uDim;
\n+
189 unsigned short _faceSize;
\n+
190};
\n+
\n+
191
\n+
192//
\n+
193// Inline sub-face coordinate conversion methods:
\n+
194//
\n+
195inline bool
\n+
\n+\n+
197 return (_type == QUAD_SUBFACES);
\n+
198}
\n+
\n+
199
\n+
200template <typename REAL>
\n+
201inline int
\n+
\n+
202Parameterization::GetSubFace(REAL const uvCoord[2]) const {
\n+
203
\n+
204 if (!HasSubFaces()) return 0;
\n+
205
\n+
206 int uTile = (int) uvCoord[0];
\n+
207 int vTile = (int) uvCoord[1];
\n+
208 return (vTile + ((uvCoord[1] - (REAL) vTile) > 0.75f)) * _uDim +
\n+
209 (uTile + ((uvCoord[0] - (REAL) uTile) > 0.75f));
\n+
210}
\n+
\n+
211
\n+
212// Conversions to unnormalized sub-face coordinates:
\n+
213template <typename REAL>
\n+
214inline int
\n+
\n+\n+
216 REAL const uvCoord[2], REAL subCoord[2]) const {
\n+
217 return convertCoordToSubFace<REAL>(false, uvCoord, subCoord);
\n+
218}
\n+
\n+
219template <typename REAL>
\n+
220inline void
\n+
\n+\n+
222 int subFace, REAL const subCoord[2], REAL uvCoord[2]) const {
\n+
223 convertSubFaceToCoord<REAL>(false, subFace, subCoord, uvCoord);
\n+
224}
\n+
\n+
225
\n+
226// Conversions to normalized sub-face coordinates:
\n+
227template <typename REAL>
\n+
228inline int
\n+
\n+\n+
230 REAL const uvCoord[2], REAL subCoord[2]) const {
\n+
231 return convertCoordToSubFace<REAL>(true, uvCoord, subCoord);
\n+
232}
\n+
\n+
233template <typename REAL>
\n+
234inline void
\n+
\n+\n+
236 int subFace, REAL const subCoord[2], REAL uvCoord[2]) const {
\n+
237 convertSubFaceToCoord<REAL>(true, subFace, subCoord, uvCoord);
\n+
238}
\n+
\n+
239
\n+
240} // end namespace Bfr
\n+
241
\n+
242} // end namespace OPENSUBDIV_VERSION
\n+
243using namespace OPENSUBDIV_VERSION;
\n+
244
\n+
245} // end namespace OpenSubdiv
\n+
246
\n+
247#endif /* OPENSUBDIV3_BFR_PARAMETERIZATION */
\n+\n+
SchemeType
Enumerated type for all subdivision schemes supported by OpenSubdiv.
Definition types.h:37
\n+
Simple class defining the 2D parameterization of a face.
\n+
int GetSubFace(REAL const uvCoord[2]) const
Returns the integer sub-face containing the given (u,v)
\n+
int GetFaceSize() const
Returns the size (number of vertices) of the corresponding face.
\n+
Type
Enumerated type for the different kinds of Parameterizations.
\n+
@ QUAD_SUBFACES
Partitioned into quadrilateral sub-faces.
\n+\n+\n+
Parameterization(Sdc::SchemeType scheme, int faceSize)
Primary constructor with subdivision scheme and face size.
\n+
int ConvertCoordToSubFace(REAL const uvCoord[2], REAL subFaceCoord[2]) const
Convert (u,v) to a sub-face (return value) and its local (u,v) coordinate.
\n+
void GetCenterCoord(REAL uvCoord[2]) const
Returns the (u,v) coordinate for the center of the face.
\n+
Type GetType() const
Returns the type of parameterization assigned.
\n+\n+
Parameterization(Parameterization const &)=default
\n+
void GetEdgeCoord(int edgeIndex, REAL t, REAL uvCoord[2]) const
Returns the (u,v) coordinate at any point on a given edge.
\n+
void ConvertNormalizedSubFaceToCoord(int subFace, REAL const subFaceCoord[2], REAL uvCoord[2]) const
Convert a sub-face and its normalized (u,v) coordinate to (u,v)
\n+
void GetVertexCoord(int vertexIndex, REAL uvCoord[2]) const
Returns the (u,v) coordinate of a given vertex.
\n+
Parameterization()
Default construction produces an invalid instance.
\n+
bool IsValid() const
Returns true if correctly initialized.
\n+
bool HasSubFaces() const
Returns if Parameterization has been partitioned into sub-faces.
\n+
int ConvertCoordToNormalizedSubFace(REAL const uvCoord[2], REAL subFaceCoord[2]) const
Convert (u,v) to a sub-face (return value) and its normalized (u,v) coordinate.
\n+
void ConvertSubFaceToCoord(int subFace, REAL const subFaceCoord[2], REAL uvCoord[2]) const
Convert a sub-face and its local (u,v) coordinate to (u,v)
\n+
Parameterization & operator=(Parameterization const &)=default
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-limits.h\n+parameterization.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2021 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -24,49 +24,243 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_BFR_LIMITS_H\n-26#define OPENSUBDIV3_BFR_LIMITS_H\n+25#ifndef OPENSUBDIV3_BFR_PARAMETERIZATION_H\n+26#define OPENSUBDIV3_BFR_PARAMETERIZATION_H\n 27\n 28#include \"../version.h\"\n 29\n-30#include \"../far/types.h\"\n+30#include \"../sdc/types.h\"\n 31\n-_\b3_\b2namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-_\b3_\b3namespace OPENSUBDIV_VERSION {\n+32namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+33namespace OPENSUBDIV_VERSION {\n 34\n-_\b3_\b5namespace Bfr {\n+35namespace Bfr {\n 36\n-_\b4_\b0struct _\bL_\bi_\bm_\bi_\bt_\bs {\n-_\b4_\b2 static int _\bM_\ba_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be() { return Far::VALENCE_LIMIT; }\n-43\n-_\b4_\b6 static int _\bM_\ba_\bx_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be() { return Far::VALENCE_LIMIT; }\n-47};\n-48\n-49} // end namespace Bfr\n-50\n-51} // end namespace OPENSUBDIV_VERSION\n-52using namespace OPENSUBDIV_VERSION;\n-53} // end namespace OpenSubdiv\n-54\n-55#endif /* OPENSUBDIV3_BFR_LIMITS_H */\n+_\b5_\b2class _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn {\n+53public:\n+_\b6_\b2 enum _\bT_\by_\bp_\be { _\bQ_\bU_\bA_\bD,\n+_\b6_\b3 _\bT_\bR_\bI,\n+64 _\bQ_\bU_\bA_\bD_\b__\bS_\bU_\bB_\bF_\bA_\bC_\bE_\bS\n+_\b6_\b5 };\n+66\n+67public:\n+69\n+76\n+_\b7_\b8 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn(_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\bT_\by_\bp_\be scheme, int faceSize);\n+79\n+_\b8_\b1 bool _\bI_\bs_\bV_\ba_\bl_\bi_\bd() const { return (_faceSize > 0); }\n+82\n+_\b8_\b4 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn() : _type(0), _uDim(0), _faceSize(0) { }\n+85\n+_\b8_\b6 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn(_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn const &) = default;\n+_\b8_\b7 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn & _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn const &) = default;\n+_\b8_\b8 _\b~_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn() = default;\n+90\n+92\n+96\n+_\b9_\b8 _\bT_\by_\bp_\be _\bG_\be_\bt_\bT_\by_\bp_\be() const { return (_\bT_\by_\bp_\be) _type; }\n+99\n+_\b1_\b0_\b1 int _\bG_\be_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be() const { return _faceSize; }\n+103\n+104public:\n+106\n+116\n+118 template \n+_\b1_\b1_\b9 void _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\bo_\br_\bd(int vertexIndex, REAL uvCoord[2]) const;\n+120\n+122 template \n+_\b1_\b2_\b3 void _\bG_\be_\bt_\bE_\bd_\bg_\be_\bC_\bo_\bo_\br_\bd(int edgeIndex, REAL t, REAL uvCoord[2]) const;\n+124\n+126 template \n+_\b1_\b2_\b7 void _\bG_\be_\bt_\bC_\be_\bn_\bt_\be_\br_\bC_\bo_\bo_\br_\bd(REAL uvCoord[2]) const;\n+129\n+130public:\n+132\n+147\n+149 bool _\bH_\ba_\bs_\bS_\bu_\bb_\bF_\ba_\bc_\be_\bs() const;\n+150\n+152 template \n+153 int _\bG_\be_\bt_\bS_\bu_\bb_\bF_\ba_\bc_\be(REAL const uvCoord[2]) const;\n+154\n+157 template \n+158 int _\bC_\bo_\bn_\bv_\be_\br_\bt_\bC_\bo_\bo_\br_\bd_\bT_\bo_\bS_\bu_\bb_\bF_\ba_\bc_\be(\n+159 REAL const uvCoord[2], REAL subFaceCoord[2]) const;\n+160\n+162 template \n+163 void _\bC_\bo_\bn_\bv_\be_\br_\bt_\bS_\bu_\bb_\bF_\ba_\bc_\be_\bT_\bo_\bC_\bo_\bo_\br_\bd(int subFace,\n+164 REAL const subFaceCoord[2], REAL uvCoord[2]) const;\n+165\n+168 template \n+169 int _\bC_\bo_\bn_\bv_\be_\br_\bt_\bC_\bo_\bo_\br_\bd_\bT_\bo_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be_\bd_\bS_\bu_\bb_\bF_\ba_\bc_\be(\n+170 REAL const uvCoord[2], REAL subFaceCoord[2]) const;\n+171\n+173 template \n+174 void _\bC_\bo_\bn_\bv_\be_\br_\bt_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be_\bd_\bS_\bu_\bb_\bF_\ba_\bc_\be_\bT_\bo_\bC_\bo_\bo_\br_\bd(int subFace,\n+175 REAL const subFaceCoord[2], REAL uvCoord[2]) const;\n+177\n+178private:\n+179 template \n+180 int convertCoordToSubFace(bool normalized,\n+181 REAL const uvCoord[2], REAL subFaceCoord[2]) const;\n+182 template \n+183 void convertSubFaceToCoord(bool normalized, int subFace,\n+184 REAL const subFaceCoord[2], REAL uvCoord[2]) const;\n+185\n+186private:\n+187 unsigned char _type;\n+188 unsigned char _uDim;\n+189 unsigned short _faceSize;\n+190};\n+191\n+192//\n+193// Inline sub-face coordinate conversion methods:\n+194//\n+195inline bool\n+_\b1_\b9_\b6_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bH_\ba_\bs_\bS_\bu_\bb_\bF_\ba_\bc_\be_\bs() const {\n+197 return (_type == _\bQ_\bU_\bA_\bD_\b__\bS_\bU_\bB_\bF_\bA_\bC_\bE_\bS);\n+198}\n+199\n+200template \n+201inline int\n+_\b2_\b0_\b2_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bS_\bu_\bb_\bF_\ba_\bc_\be(REAL const uvCoord[2]) const {\n+203\n+204 if (!_\bH_\ba_\bs_\bS_\bu_\bb_\bF_\ba_\bc_\be_\bs()) return 0;\n+205\n+206 int uTile = (int) uvCoord[0];\n+207 int vTile = (int) uvCoord[1];\n+208 return (vTile + ((uvCoord[1] - (REAL) vTile) > 0.75f)) * _uDim +\n+209 (uTile + ((uvCoord[0] - (REAL) uTile) > 0.75f));\n+210}\n+211\n+212// Conversions to unnormalized sub-face coordinates:\n+213template \n+214inline int\n+_\b2_\b1_\b5_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bC_\bo_\bn_\bv_\be_\br_\bt_\bC_\bo_\bo_\br_\bd_\bT_\bo_\bS_\bu_\bb_\bF_\ba_\bc_\be(\n+216 REAL const uvCoord[2], REAL subCoord[2]) const {\n+217 return convertCoordToSubFace(false, uvCoord, subCoord);\n+218}\n+219template \n+220inline void\n+_\b2_\b2_\b1_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bC_\bo_\bn_\bv_\be_\br_\bt_\bS_\bu_\bb_\bF_\ba_\bc_\be_\bT_\bo_\bC_\bo_\bo_\br_\bd(\n+222 int subFace, REAL const subCoord[2], REAL uvCoord[2]) const {\n+223 convertSubFaceToCoord(false, subFace, subCoord, uvCoord);\n+224}\n+225\n+226// Conversions to normalized sub-face coordinates:\n+227template \n+228inline int\n+_\b2_\b2_\b9_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bC_\bo_\bn_\bv_\be_\br_\bt_\bC_\bo_\bo_\br_\bd_\bT_\bo_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be_\bd_\bS_\bu_\bb_\bF_\ba_\bc_\be(\n+230 REAL const uvCoord[2], REAL subCoord[2]) const {\n+231 return convertCoordToSubFace(true, uvCoord, subCoord);\n+232}\n+233template \n+234inline void\n+_\b2_\b3_\b5_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bC_\bo_\bn_\bv_\be_\br_\bt_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be_\bd_\bS_\bu_\bb_\bF_\ba_\bc_\be_\bT_\bo_\bC_\bo_\bo_\br_\bd(\n+236 int subFace, REAL const subCoord[2], REAL uvCoord[2]) const {\n+237 convertSubFaceToCoord(true, subFace, subCoord, uvCoord);\n+238}\n+239\n+240} // end namespace Bfr\n+241\n+242} // end namespace OPENSUBDIV_VERSION\n+243using namespace OPENSUBDIV_VERSION;\n+244\n+245} // end namespace OpenSubdiv\n+246\n+247#endif /* OPENSUBDIV3_BFR_PARAMETERIZATION */\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bs\n-Simple struct with limits related to topology.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b4_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bs_\b:_\b:_\bM_\ba_\bx_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be\n-static int MaxFaceSize()\n-Returns the maximum allowable size for a face (number of vertices)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b4_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bs_\b:_\b:_\bM_\ba_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be\n-static int MaxValence()\n-Returns the maximum allowable valence for a vertex.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b4_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\bT_\by_\bp_\be\n+SchemeType\n+Enumerated type for all subdivision schemes supported by OpenSubdiv.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b3_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn\n+Simple class defining the 2D parameterization of a face.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b5_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bS_\bu_\bb_\bF_\ba_\bc_\be\n+int GetSubFace(REAL const uvCoord[2]) const\n+Returns the integer sub-face containing the given (u,v)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b0_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be\n+int GetFaceSize() const\n+Returns the size (number of vertices) of the corresponding face.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b1_\b0_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bT_\by_\bp_\be\n+Type\n+Enumerated type for the different kinds of Parameterizations.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b6_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bQ_\bU_\bA_\bD_\b__\bS_\bU_\bB_\bF_\bA_\bC_\bE_\bS\n+@ QUAD_SUBFACES\n+Partitioned into quadrilateral sub-faces.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b6_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bT_\bR_\bI\n+@ TRI\n+Triangle.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b6_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bQ_\bU_\bA_\bD\n+@ QUAD\n+Quadrilateral.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b6_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn\n+Parameterization(Sdc::SchemeType scheme, int faceSize)\n+Primary constructor with subdivision scheme and face size.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bC_\bo_\bn_\bv_\be_\br_\bt_\bC_\bo_\bo_\br_\bd_\bT_\bo_\bS_\bu_\bb_\bF_\ba_\bc_\be\n+int ConvertCoordToSubFace(REAL const uvCoord[2], REAL subFaceCoord[2]) const\n+Convert (u,v) to a sub-face (return value) and its local (u,v) coordinate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b1_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bC_\be_\bn_\bt_\be_\br_\bC_\bo_\bo_\br_\bd\n+void GetCenterCoord(REAL uvCoord[2]) const\n+Returns the (u,v) coordinate for the center of the face.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bT_\by_\bp_\be\n+Type GetType() const\n+Returns the type of parameterization assigned.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b9_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\b~_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn\n+~Parameterization()=default\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn\n+Parameterization(Parameterization const &)=default\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bE_\bd_\bg_\be_\bC_\bo_\bo_\br_\bd\n+void GetEdgeCoord(int edgeIndex, REAL t, REAL uvCoord[2]) const\n+Returns the (u,v) coordinate at any point on a given edge.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:\n+_\bC_\bo_\bn_\bv_\be_\br_\bt_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be_\bd_\bS_\bu_\bb_\bF_\ba_\bc_\be_\bT_\bo_\bC_\bo_\bo_\br_\bd\n+void ConvertNormalizedSubFaceToCoord(int subFace, REAL const subFaceCoord[2],\n+REAL uvCoord[2]) const\n+Convert a sub-face and its normalized (u,v) coordinate to (u,v)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b3_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\bo_\br_\bd\n+void GetVertexCoord(int vertexIndex, REAL uvCoord[2]) const\n+Returns the (u,v) coordinate of a given vertex.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn\n+Parameterization()\n+Default construction produces an invalid instance.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b8_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bI_\bs_\bV_\ba_\bl_\bi_\bd\n+bool IsValid() const\n+Returns true if correctly initialized.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b8_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bH_\ba_\bs_\bS_\bu_\bb_\bF_\ba_\bc_\be_\bs\n+bool HasSubFaces() const\n+Returns if Parameterization has been partitioned into sub-faces.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b1_\b9_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:\n+_\bC_\bo_\bn_\bv_\be_\br_\bt_\bC_\bo_\bo_\br_\bd_\bT_\bo_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be_\bd_\bS_\bu_\bb_\bF_\ba_\bc_\be\n+int ConvertCoordToNormalizedSubFace(REAL const uvCoord[2], REAL subFaceCoord\n+[2]) const\n+Convert (u,v) to a sub-face (return value) and its normalized (u,v) coordinate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b2_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bC_\bo_\bn_\bv_\be_\br_\bt_\bS_\bu_\bb_\bF_\ba_\bc_\be_\bT_\bo_\bC_\bo_\bo_\br_\bd\n+void ConvertSubFaceToCoord(int subFace, REAL const subFaceCoord[2], REAL\n+uvCoord[2]) const\n+Convert a sub-face and its local (u,v) coordinate to (u,v)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh_\b:_\b2_\b2_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bB_\bf_\br_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+Parameterization & operator=(Parameterization const &)=default\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bb_\bf_\br\n- * _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh\n+ * _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00704.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00704.html", "unified_diff": "@@ -95,15 +95,15 @@\n Classes |\n Namespaces \n
topologyRefinerFactory.h File Reference
\n \n
\n
#include "../version.h"
\n #include "../far/topologyRefiner.h"
\n-#include "../far/error.h"
\n+#include "../far/error.h"
\n #include <cassert>
\n
\n

Go to the source code of this file.

\n \n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00704_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00704_source.html", "unified_diff": "@@ -739,17 +739,17 @@\n
717} // end namespace Far
\n
718
\n
719} // end namespace OPENSUBDIV_VERSION
\n
720using namespace OPENSUBDIV_VERSION;
\n
721} // end namespace OpenSubdiv
\n
722
\n
723#endif /* OPENSUBDIV3_FAR_TOPOLOGY_REFINER_FACTORY_H */
\n-\n+\n
void Error(ErrorType err, const char *format,...)
Sends an OSD error with a message (internal use only)
\n-
@ FAR_RUNTIME_ERROR
Issue a generic runtime error, but continue execution.
Definition error.h:40
\n+
@ FAR_RUNTIME_ERROR
Issue a generic runtime error, but continue execution.
Definition error.h:40
\n \n
SchemeType
Enumerated type for all subdivision schemes supported by OpenSubdiv.
Definition types.h:37
\n \n
Factory for constructing TopologyRefiners from specific mesh classes.
\n
static int getNumBaseFaces(TopologyRefiner const &newRefiner)
\n
static bool assignComponentTopology(TopologyRefiner &newRefiner, MESH const &mesh)
Specify the relationships between vertices, faces, etc. ie the face-vertices, vertex-faces,...
\n
static void reportInvalidTopology(TopologyError errCode, char const *msg, MESH const &mesh)
(Optional) Control run-time topology validation and error reporting
\n@@ -794,18 +794,18 @@\n
static bool prepareComponentTopologySizing(TopologyRefiner &refiner)
\n
static bool prepareFaceVaryingChannels(TopologyRefiner &refiner)
\n
Options related to the construction of each TopologyRefiner.
\n
Options(Sdc::SchemeType sdcType=Sdc::SCHEME_CATMARK, Sdc::Options sdcOptions=Sdc::Options())
\n \n
Sdc::SchemeType schemeType
The subdivision scheme type identifier.
\n \n-
All supported options applying to subdivision scheme.
Definition options.h:51
\n-
void SetFVarLinearInterpolation(FVarLinearInterpolation b)
Set face-varying interpolation rule.
Definition options.h:98
\n-
FVarLinearInterpolation GetFVarLinearInterpolation() const
Get face-varying interpolation rule.
Definition options.h:95
\n-\n+
All supported options applying to subdivision scheme.
Definition options.h:51
\n+
void SetFVarLinearInterpolation(FVarLinearInterpolation b)
Set face-varying interpolation rule.
Definition options.h:98
\n+
FVarLinearInterpolation GetFVarLinearInterpolation() const
Get face-varying interpolation rule.
Definition options.h:95
\n+\n \n \n \n
\n
    \n
  • opensubdiv
  • far
  • topologyRefinerFactory.h
  • \n
  • Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by \"doxygen\"/ 1.9.8
  • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00707.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00707.html", "unified_diff": "@@ -95,17 +95,17 @@\n Classes |\n Namespaces
\n
topologyRefiner.h File Reference
\n \n
\n
#include "../version.h"
\n #include "../sdc/types.h"
\n-#include "../sdc/options.h"
\n+#include "../sdc/options.h"
\n #include "../far/types.h"
\n-#include "../far/topologyLevel.h"
\n+#include "../far/topologyLevel.h"
\n #include <vector>
\n
\n

Go to the source code of this file.

\n

\n Classes

class  TopologyRefinerFactoryBase
\n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00707_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00707_source.html", "unified_diff": "@@ -348,20 +348,20 @@\n
303} // end namespace Far
\n
304
\n
305} // end namespace OPENSUBDIV_VERSION
\n
306using namespace OPENSUBDIV_VERSION;
\n
307} // end namespace OpenSubdiv
\n
308
\n
309#endif /* OPENSUBDIV3_FAR_TOPOLOGY_REFINER_H */
\n-\n+\n
Vtr::ConstIndexArray ConstIndexArray
Definition types.h:47
\n
SchemeType
Enumerated type for all subdivision schemes supported by OpenSubdiv.
Definition types.h:37
\n
Applies refinement operations to generic primvar data.
\n
Object used to compute and query ptex face indices.
Definition ptexIndices.h:46
\n-
An interface for accessing data in a specific level of a refined topology hierarchy.
\n+
An interface for accessing data in a specific level of a refined topology hierarchy.
\n
Factory for constructing TopologyRefiners from specific mesh classes.
\n
Stores topology data for a specified set of refinement options.
\n
TopologyRefiner(TopologyRefiner const &source)
\n
int GetMaxValence() const
Returns the maximum vertex valence in all levels.
\n
Vtr::internal::Level const & getLevel(int l) const
\n
bool HasHoles() const
Returns true if faces have been tagged as holes.
\n
int GetNumLevels() const
Returns the number of refinement levels.
\n@@ -402,17 +402,17 @@\n \n \n \n \n \n
void SetSecondaryLevel(int level)
Set secondary isolation level.
\n
Private base class of Factories for constructing TopologyRefiners.
\n-
All supported options applying to subdivision scheme.
Definition options.h:51
\n-\n-\n+
All supported options applying to subdivision scheme.
Definition options.h:51
\n+\n+\n \n \n \n
\n
    \n
  • opensubdiv
  • far
  • topologyRefiner.h
  • \n
  • Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by \"doxygen\"/ 1.9.8
  • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00710.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00710.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/far/topologyDescriptor.h File Reference\n+OpenSubdiv: opensubdiv/far/topologyLevel.h File Reference\n \n \n \n \n \n \n \n@@ -90,31 +90,29 @@\n
\n \n \n
\n \n-
topologyDescriptor.h File Reference
\n+
topologyLevel.h File Reference
\n
\n
\n
#include "../version.h"
\n-#include "../far/topologyRefiner.h"
\n-#include "../far/topologyRefinerFactory.h"
\n-#include "../far/error.h"
\n-#include <cassert>
\n+#include "../vtr/level.h"
\n+#include "../vtr/refinement.h"
\n+#include "../far/types.h"
\n+#include <vector>
\n
\n

Go to the source code of this file.

\n

\n Classes

class  TopologyRefiner
\n \n-\n-\n-\n-\n+\n+\n \n

\n Classes

struct  TopologyDescriptor
 A simple reference to raw topology data for use with TopologyRefinerFactory. More...
 
struct  TopologyDescriptor::FVarChannel
class  TopologyLevel
 An interface for accessing data in a specific level of a refined topology hierarchy. More...
 
\n \n \n \n \n@@ -123,13 +121,13 @@\n \n

\n Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,28 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-topologyDescriptor.h File Reference\n+topologyLevel.h File Reference\n #include \"../version.h\"\n-#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh\"\n-#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh\"\n-#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\be_\br_\br_\bo_\br_\b._\bh\"\n-#include \n+#include \"_\b._\b._\b/_\bv_\bt_\br_\b/_\bl_\be_\bv_\be_\bl_\b._\bh\"\n+#include \"_\b._\b._\b/_\bv_\bt_\br_\b/_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bh\"\n+#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-\u00a0 A simple reference to raw topology data for use with\n- _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl\n+class \u00a0 _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl\n+\u00a0 An interface for accessing data in a specific level of a refined\n+ topology hierarchy. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bf_\ba_\br\n- * _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\n+ * _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00710.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00710.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a00710 = [\n- [\"TopologyDescriptor\", \"a01097.html\", \"a01097\"],\n- [\"FVarChannel\", \"a01101.html\", \"a01101\"]\n+ [\"TopologyLevel\", \"a01105.html\", \"a01105\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00710_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00710_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/far/topologyDescriptor.h Source File\n+OpenSubdiv: opensubdiv/far/topologyLevel.h Source File\n \n \n \n \n \n \n \n@@ -92,19 +92,19 @@\n
No Matches
\n \n \n \n \n \n
\n-
topologyDescriptor.h
\n+
topologyLevel.h
\n
\n
\n Go to the documentation of this file.
1//
\n-
2// Copyright 2014 DreamWorks Animation LLC.
\n+
2// Copyright 2015 DreamWorks Animation LLC.
\n
3//
\n
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
\n
5// with the following modification; you may not use this file except in
\n
6// compliance with the Apache License and the following modification to it:
\n
7// Section 6. Trademarks. is deleted and replaced with:
\n
8//
\n
9// 6. Trademarks. This License does not grant permission to use the trade
\n@@ -118,146 +118,228 @@\n
17//
\n
18// Unless required by applicable law or agreed to in writing, software
\n
19// distributed under the Apache License with the above modification is
\n
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
\n
21// KIND, either express or implied. See the Apache License for the specific
\n
22// language governing permissions and limitations under the Apache License.
\n
23//
\n-
24#ifndef OPENSUBDIV3_FAR_TOPOLOGY_DESCRIPTOR_H
\n-
25#define OPENSUBDIV3_FAR_TOPOLOGY_DESCRIPTOR_H
\n+
24#ifndef OPENSUBDIV3_FAR_TOPOLOGY_LEVEL_H
\n+
25#define OPENSUBDIV3_FAR_TOPOLOGY_LEVEL_H
\n
26
\n
27#include "../version.h"
\n
28
\n-
29#include "../far/topologyRefiner.h"
\n-
30#include "../far/topologyRefinerFactory.h"
\n-
31#include "../far/error.h"
\n+
29#include "../vtr/level.h"
\n+
30#include "../vtr/refinement.h"
\n+
31#include "../far/types.h"
\n
32
\n-
33#include <cassert>
\n+
33#include <vector>
\n
34
\n
35namespace OpenSubdiv {
\n
36namespace OPENSUBDIV_VERSION {
\n
37
\n
38namespace Far {
\n
39
\n
\n-\n+\n
50
\n-\n-\n+
51public:
\n
53
\n-
54 int const * numVertsPerFace;
\n-\n-
56
\n-\n-\n-
59 float const * creaseWeights;
\n
60
\n-\n-\n-
63 float const * cornerWeights;
\n-
64
\n-\n-\n-
67
\n-\n+
62 int GetNumVertices() const { return _level->getNumVertices(); }
\n+
63
\n+
65 int GetNumFaces() const { return _level->getNumFaces(); }
\n+
66
\n+
68 int GetNumEdges() const { return _level->getNumEdges(); }
\n
69
\n-
70 // Face-varying data channel -- value indices correspond to vertex indices,
\n-
71 // i.e. one for every vertex of every face:
\n-
72 //
\n-
\n-
73 struct FVarChannel {
\n-
74
\n-\n-\n-
77
\n-\n-
79 };
\n-
\n-
80
\n-\n-\n-
83
\n-\n-
85};
\n-
\n-
86
\n-
87
\n-
88//
\n-
89// Forward declarations of required TopologyRefinerFactory<TopologyDescriptor>
\n-
90// specializations (defined internally):
\n-
91//
\n-
92// @cond EXCLUDE_DOXYGEN
\n-
93
\n-
94template <>
\n-
95bool
\n-\n-
97 TopologyRefiner & refiner, TopologyDescriptor const & desc);
\n-
98
\n-
99template <>
\n-
100bool
\n-\n-
102 TopologyRefiner & refiner, TopologyDescriptor const & desc);
\n+
71 int GetNumFaceVertices() const { return _level->getNumFaceVerticesTotal(); }
\n+
73
\n+
75
\n+
90 //
\n+
91
\n+
93 ConstIndexArray GetFaceVertices(Index f) const { return _level->getFaceVertices(f); }
\n+
94
\n+
96 ConstIndexArray GetFaceEdges(Index f) const { return _level->getFaceEdges(f); }
\n+
97
\n+
99 ConstIndexArray GetEdgeVertices(Index e) const { return _level->getEdgeVertices(e); }
\n+
100
\n+
102 ConstIndexArray GetEdgeFaces(Index e) const { return _level->getEdgeFaces(e); }
\n
103
\n-
104template <>
\n-
105bool
\n-\n-
107 TopologyRefiner & refiner, TopologyDescriptor const & desc);
\n-
108
\n-
109template <>
\n-
110bool
\n-\n-
112 TopologyRefiner & refiner, TopologyDescriptor const & desc);
\n-
113
\n-
114template <>
\n-
115void
\n-\n-
117 TopologyError errCode, char const * msg, TopologyDescriptor const & desc);
\n+
105 ConstIndexArray GetVertexFaces(Index v) const { return _level->getVertexFaces(v); }
\n+
106
\n+
108 ConstIndexArray GetVertexEdges(Index v) const { return _level->getVertexEdges(v); }
\n+
109
\n+
111 ConstLocalIndexArray GetVertexFaceLocalIndices(Index v) const { return _level->getVertexFaceLocalIndices(v); }
\n+
112
\n+
114 ConstLocalIndexArray GetVertexEdgeLocalIndices(Index v) const { return _level->getVertexEdgeLocalIndices(v); }
\n+
115
\n+
117 ConstLocalIndexArray GetEdgeFaceLocalIndices(Index e) const { return _level->getEdgeFaceLocalIndices(e); }
\n
118
\n-
119// @endcond
\n-
120
\n-
121} // end namespace Far
\n+
120 Index FindEdge(Index v0, Index v1) const { return _level->findEdge(v0, v1); }
\n
122
\n-
123} // end namespace OPENSUBDIV_VERSION
\n-
124using namespace OPENSUBDIV_VERSION;
\n-
125} // end namespace OpenSubdiv
\n+
124
\n
126
\n-
127#endif /* OPENSUBDIV3_FAR_TOPOLOGY_DESCRIPTOR_H */
\n-\n+
128 bool IsEdgeNonManifold(Index e) const { return _level->isEdgeNonManifold(e); }
\n+
129
\n+
131 bool IsVertexNonManifold(Index v) const { return _level->isVertexNonManifold(v); }
\n+
132
\n+
134 bool IsEdgeBoundary(Index e) const { return _level->getEdgeTag(e)._boundary; }
\n+
135
\n+
137 bool IsVertexBoundary(Index v) const { return _level->getVertexTag(v)._boundary; }
\n+
138
\n+
140 bool IsVertexCorner(Index v) const { return (_level->getNumVertexFaces(v) == 1); }
\n+
141
\n+
162 bool IsVertexValenceRegular(Index v) const { return !_level->getVertexTag(v)._xordinary || IsVertexCorner(v); }
\n+
164
\n+
166
\n+
171
\n+
173 float GetEdgeSharpness(Index e) const { return _level->getEdgeSharpness(e); }
\n+
174
\n+
176 float GetVertexSharpness(Index v) const { return _level->getVertexSharpness(v); }
\n+
177
\n+
179 bool IsEdgeInfSharp(Index e) const { return _level->getEdgeTag(e)._infSharp; }
\n+
180
\n+
182 bool IsVertexInfSharp(Index v) const { return _level->getVertexTag(v)._infSharp; }
\n+
183
\n+
185 bool IsEdgeSemiSharp(Index e) const { return _level->getEdgeTag(e)._semiSharp; }
\n+
186
\n+
188 bool IsVertexSemiSharp(Index v) const { return _level->getVertexTag(v)._semiSharp; }
\n+
189
\n+
191 bool IsFaceHole(Index f) const { return _level->isFaceHole(f); }
\n+
192
\n+
194 Sdc::Crease::Rule GetVertexRule(Index v) const { return _level->getVertexRule(v); }
\n+
196
\n+
198
\n+
228
\n+
230 int GetNumFVarChannels() const { return _level->getNumFVarChannels(); }
\n+
231
\n+
234 int GetNumFVarValues(int channel = 0) const { return _level->getNumFVarValues(channel); }
\n+
235
\n+
\n+
237 ConstIndexArray GetFaceFVarValues(Index f, int channel = 0) const {
\n+
238 return _level->getFaceFVarValues(f, channel);
\n+
239 }
\n+
\n+
240
\n+
\n+
242 bool DoesVertexFVarTopologyMatch(Index v, int channel = 0) const {
\n+
243 return _level->doesVertexFVarTopologyMatch(v, channel);
\n+
244 }
\n+
\n+
245
\n+
\n+
247 bool DoesEdgeFVarTopologyMatch(Index e, int channel = 0) const {
\n+
248 return _level->doesEdgeFVarTopologyMatch(e, channel);
\n+
249 }
\n+
\n+
250
\n+
\n+
252 bool DoesFaceFVarTopologyMatch(Index f, int channel = 0) const {
\n+
253 return _level->doesFaceFVarTopologyMatch(f, channel);
\n+
254 }
\n+
\n+
255
\n+
257
\n+
259
\n+
260
\n+
262 ConstIndexArray GetFaceChildFaces(Index f) const { return _refToChild->getFaceChildFaces(f); }
\n+
263
\n+
265 ConstIndexArray GetFaceChildEdges(Index f) const { return _refToChild->getFaceChildEdges(f); }
\n+
266
\n+
268 ConstIndexArray GetEdgeChildEdges(Index e) const { return _refToChild->getEdgeChildEdges(e); }
\n+
269
\n+
271 Index GetFaceChildVertex( Index f) const { return _refToChild->getFaceChildVertex(f); }
\n+
272
\n+
274 Index GetEdgeChildVertex( Index e) const { return _refToChild->getEdgeChildVertex(e); }
\n+
275
\n+
277 Index GetVertexChildVertex(Index v) const { return _refToChild->getVertexChildVertex(v); }
\n+
278
\n+
280 Index GetFaceParentFace(Index f) const { return _refToParent->getChildFaceParentFace(f); }
\n+
282
\n+
284
\n+
285
\n+
286 bool ValidateTopology() const { return _level->validateTopology(); }
\n+
287 void PrintTopology(bool children = true) const { _level->print((children && _refToChild) ? _refToChild : 0); }
\n+
289
\n+
290
\n+
291private:
\n+
292 friend class TopologyRefiner;
\n+
293
\n+
294 Vtr::internal::Level const * _level;
\n+
295 Vtr::internal::Refinement const * _refToParent;
\n+
296 Vtr::internal::Refinement const * _refToChild;
\n+
297
\n+
298public:
\n+
299 // Not intended for public use, but required by std::vector, etc...
\n+\n+\n+
302};
\n+
\n+
303
\n+
304} // end namespace Far
\n+
305
\n+
306} // end namespace OPENSUBDIV_VERSION
\n+
307using namespace OPENSUBDIV_VERSION;
\n+
308} // end namespace OpenSubdiv
\n+
309
\n+
310#endif /* OPENSUBDIV3_FAR_TOPOLOGY_LEVEL_H */
\n+\n \n-
A simple reference to raw topology data for use with TopologyRefinerFactory.
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-
static bool assignComponentTopology(TopologyRefiner &newRefiner, MESH const &mesh)
Specify the relationships between vertices, faces, etc. ie the face-vertices, vertex-faces,...
\n-
static void reportInvalidTopology(TopologyError errCode, char const *msg, MESH const &mesh)
(Optional) Control run-time topology validation and error reporting
\n-
static bool assignComponentTags(TopologyRefiner &newRefiner, MESH const &mesh)
(Optional) Specify edge or vertex sharpness or face holes
\n-
static bool resizeComponentTopology(TopologyRefiner &newRefiner, MESH const &mesh)
Specify the number of vertices, faces, face-vertices, etc.
\n-
static bool assignFaceVaryingTopology(TopologyRefiner &newRefiner, MESH const &mesh)
(Optional) Specify face-varying data per face
\n+
An interface for accessing data in a specific level of a refined topology hierarchy.
\n+
Index GetFaceParentFace(Index f) const
Return the parent face (in the previous level) of a given face.
\n+\n+
bool IsVertexValenceRegular(Index v) const
Return if the valence of the vertex is regular (must be manifold)
\n+
float GetEdgeSharpness(Index e) const
Return the sharpness assigned a given edge.
\n+
bool DoesFaceFVarTopologyMatch(Index f, int channel=0) const
Return if face-varying topology around a face matches.
\n+
Sdc::Crease::Rule GetVertexRule(Index v) const
Return the subdivision rule assigned a given vertex specific to this level.
\n+
bool IsVertexCorner(Index v) const
Return if the vertex is a corner (only one incident face)
\n+
Index GetVertexChildVertex(Index v) const
Return the child vertex (in the next level) of a given vertex.
\n+
ConstLocalIndexArray GetEdgeFaceLocalIndices(Index e) const
Access the local indices of an edge with respect to its incident faces.
\n+
ConstIndexArray GetFaceChildEdges(Index f) const
Access the child edges (in the next level) of a given face.
\n+
bool DoesEdgeFVarTopologyMatch(Index e, int channel=0) const
Return if face-varying topology across the edge only matches.
\n+\n+
ConstIndexArray GetFaceVertices(Index f) const
Access the vertices incident a given face.
\n+
ConstIndexArray GetFaceChildFaces(Index f) const
Access the child faces (in the next level) of a given face.
\n+
int GetNumEdges() const
Return the number of edges in this level.
\n+\n+
bool IsEdgeNonManifold(Index e) const
Return if the edge is non-manifold.
\n+
bool IsFaceHole(Index f) const
Return if a given face has been tagged as a hole.
\n+
ConstIndexArray GetVertexEdges(Index v) const
Access the edges incident a given vertex.
\n+
Index GetFaceChildVertex(Index f) const
Return the child vertex (in the next level) of a given face.
\n+
bool DoesVertexFVarTopologyMatch(Index v, int channel=0) const
Return if face-varying topology around a vertex matches.
\n+
ConstIndexArray GetEdgeChildEdges(Index e) const
Access the child edges (in the next level) of a given edge.
\n+
bool IsEdgeInfSharp(Index e) const
Return if the edge is infinitely-sharp.
\n+
ConstIndexArray GetVertexFaces(Index v) const
Access the faces incident a given vertex.
\n+
Index FindEdge(Index v0, Index v1) const
Identify the edge matching the given vertex pair.
\n+
ConstLocalIndexArray GetVertexEdgeLocalIndices(Index v) const
Access the local indices of a vertex with respect to its incident edges.
\n+
ConstIndexArray GetFaceEdges(Index f) const
Access the edges incident a given face.
\n+
int GetNumFaces() const
Return the number of faces in this level.
\n+
bool IsVertexBoundary(Index v) const
Return if the vertex is on a boundary (at least one incident boundary edge)
\n+
int GetNumFVarChannels() const
Return the number of face-varying channels (should be same for all levels)
\n+
int GetNumVertices() const
Return the number of vertices in this level.
\n+
ConstIndexArray GetEdgeFaces(Index e) const
Access the faces incident a given edge.
\n+
ConstIndexArray GetFaceFVarValues(Index f, int channel=0) const
Access the face-varying values associated with a particular face.
\n+
ConstIndexArray GetEdgeVertices(Index e) const
Access the vertices incident a given edge.
\n+
bool IsEdgeSemiSharp(Index e) const
Return if the edge is semi-sharp.
\n+\n+
float GetVertexSharpness(Index v) const
Return the sharpness assigned a given vertex.
\n+
Index GetEdgeChildVertex(Index e) const
Return the child vertex (in the next level) of a given edge.
\n+
bool IsVertexSemiSharp(Index v) const
Return if the vertex is semi-sharp.
\n+
int GetNumFaceVertices() const
Return the total number of face-vertices, i.e. the sum of all vertices for all faces.
\n+
bool IsVertexNonManifold(Index v) const
Return if the vertex is non-manifold.
\n+
bool IsEdgeBoundary(Index e) const
Return if the edge is a boundary (only one incident face)
\n+
bool IsVertexInfSharp(Index v) const
Return if the vertex is infinitely-sharp.
\n+
int GetNumFVarValues(int channel=0) const
Return the total number of face-varying values in a particular channel (the upper bound of a face-var...
\n+
ConstLocalIndexArray GetVertexFaceLocalIndices(Index v) const
Access the local indices of a vertex with respect to its incident faces.
\n
Stores topology data for a specified set of refinement options.
\n+\n+\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,15 +1,15 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-topologyDescriptor.h\n+topologyLevel.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n-2// Copyright 2014 DreamWorks Animation LLC.\n+2// Copyright 2015 DreamWorks Animation LLC.\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n 7// Section 6. Trademarks. is deleted and replaced with:\n 8//\n 9// 6. Trademarks. This License does not grant permission to use the trade\n@@ -23,208 +23,387 @@\n 17//\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n-24#ifndef OPENSUBDIV3_FAR_TOPOLOGY_DESCRIPTOR_H\n-25#define OPENSUBDIV3_FAR_TOPOLOGY_DESCRIPTOR_H\n+24#ifndef OPENSUBDIV3_FAR_TOPOLOGY_LEVEL_H\n+25#define OPENSUBDIV3_FAR_TOPOLOGY_LEVEL_H\n 26\n 27#include \"../version.h\"\n 28\n-29#include \"../far/topologyRefiner.h\"\n-30#include \"../far/topologyRefinerFactory.h\"\n-31#include \"../far/error.h\"\n+29#include \"../vtr/level.h\"\n+30#include \"../vtr/refinement.h\"\n+31#include \"../far/types.h\"\n 32\n-33#include \n+33#include \n 34\n 35namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n 36namespace OPENSUBDIV_VERSION {\n 37\n 38namespace Far {\n 39\n-_\b4_\b9struct _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br {\n+_\b4_\b9class _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl {\n 50\n-_\b5_\b1 int _\bn_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs,\n-_\b5_\b2 _\bn_\bu_\bm_\bF_\ba_\bc_\be_\bs;\n+51public:\n 53\n-_\b5_\b4 int const * _\bn_\bu_\bm_\bV_\be_\br_\bt_\bs_\bP_\be_\br_\bF_\ba_\bc_\be;\n-_\b5_\b5 _\bI_\bn_\bd_\be_\bx const * _\bv_\be_\br_\bt_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bP_\be_\br_\bF_\ba_\bc_\be;\n-56\n-_\b5_\b7 int _\bn_\bu_\bm_\bC_\br_\be_\ba_\bs_\be_\bs;\n-_\b5_\b8 _\bI_\bn_\bd_\be_\bx const * _\bc_\br_\be_\ba_\bs_\be_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br_\bs;\n-_\b5_\b9 float const * _\bc_\br_\be_\ba_\bs_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs;\n 60\n-_\b6_\b1 int _\bn_\bu_\bm_\bC_\bo_\br_\bn_\be_\br_\bs;\n-_\b6_\b2 _\bI_\bn_\bd_\be_\bx const * _\bc_\bo_\br_\bn_\be_\br_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs;\n-_\b6_\b3 float const * _\bc_\bo_\br_\bn_\be_\br_\bW_\be_\bi_\bg_\bh_\bt_\bs;\n-64\n-_\b6_\b5 int _\bn_\bu_\bm_\bH_\bo_\bl_\be_\bs;\n-_\b6_\b6 _\bI_\bn_\bd_\be_\bx const * _\bh_\bo_\bl_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs;\n-67\n-_\b6_\b8 bool _\bi_\bs_\bL_\be_\bf_\bt_\bH_\ba_\bn_\bd_\be_\bd;\n+_\b6_\b2 int _\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const { return _level->getNumVertices(); }\n+63\n+_\b6_\b5 int _\bG_\be_\bt_\bN_\bu_\bm_\bF_\ba_\bc_\be_\bs() const { return _level->getNumFaces(); }\n+66\n+_\b6_\b8 int _\bG_\be_\bt_\bN_\bu_\bm_\bE_\bd_\bg_\be_\bs() const { return _level->getNumEdges(); }\n 69\n-70 // Face-varying data channel -- value indices correspond to vertex indices,\n-71 // i.e. one for every vertex of every face:\n-72 //\n-_\b7_\b3 struct _\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl {\n-74\n-_\b7_\b5 int _\bn_\bu_\bm_\bV_\ba_\bl_\bu_\be_\bs;\n-_\b7_\b6 _\bI_\bn_\bd_\be_\bx const * _\bv_\ba_\bl_\bu_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs;\n-77\n-_\b7_\b8 _\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl() : _\bn_\bu_\bm_\bV_\ba_\bl_\bu_\be_\bs(0), _\bv_\ba_\bl_\bu_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs(0) { }\n-79 };\n-80\n-_\b8_\b1 int _\bn_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs;\n-_\b8_\b2 _\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl const * _\bf_\bv_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs;\n-83\n-_\b8_\b4 _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br();\n-85};\n-86\n-87\n-88//\n-89// Forward declarations of required\n-TopologyRefinerFactory\n-90// specializations (defined internally):\n-91//\n-92// @cond EXCLUDE_DOXYGEN\n-93\n-94template <>\n-95bool\n-96_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b>_\b:_\b:_\br_\be_\bs_\bi_\bz_\be_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by(\n-97 _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br & refiner, _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const & desc);\n-98\n-99template <>\n-100bool\n-101_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by(\n-102 _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br & refiner, _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const & desc);\n+_\b7_\b1 int _\bG_\be_\bt_\bN_\bu_\bm_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const { return _level->getNumFaceVerticesTotal(); }\n+73\n+75\n+90 //\n+91\n+_\b9_\b3 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(_\bI_\bn_\bd_\be_\bx f) const { return _level-\n+>getFaceVertices(f); }\n+94\n+_\b9_\b6 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bF_\ba_\bc_\be_\bE_\bd_\bg_\be_\bs(_\bI_\bn_\bd_\be_\bx f) const { return _level->getFaceEdges\n+(f); }\n+97\n+_\b9_\b9 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bE_\bd_\bg_\be_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(_\bI_\bn_\bd_\be_\bx e) const { return _level-\n+>getEdgeVertices(e); }\n+100\n+_\b1_\b0_\b2 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bE_\bd_\bg_\be_\bF_\ba_\bc_\be_\bs(_\bI_\bn_\bd_\be_\bx e) const { return _level->getEdgeFaces\n+(e); }\n 103\n-104template <>\n-105bool\n-106_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bT_\ba_\bg_\bs(\n-107 _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br & refiner, _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const & desc);\n-108\n-109template <>\n-110bool\n-111_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by(\n-112 _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br & refiner, _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const & desc);\n-113\n-114template <>\n-115void\n-116_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b>_\b:_\b:_\br_\be_\bp_\bo_\br_\bt_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by(\n-117 TopologyError errCode, char const * msg, _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const & desc);\n+_\b1_\b0_\b5 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bF_\ba_\bc_\be_\bs(_\bI_\bn_\bd_\be_\bx v) const { return _level-\n+>getVertexFaces(v); }\n+106\n+_\b1_\b0_\b8 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bE_\bd_\bg_\be_\bs(_\bI_\bn_\bd_\be_\bx v) const { return _level-\n+>getVertexEdges(v); }\n+109\n+_\b1_\b1_\b1 _\bC_\bo_\bn_\bs_\bt_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bF_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs(_\bI_\bn_\bd_\be_\bx v) const { return\n+_level->getVertexFaceLocalIndices(v); }\n+112\n+_\b1_\b1_\b4 _\bC_\bo_\bn_\bs_\bt_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bE_\bd_\bg_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs(_\bI_\bn_\bd_\be_\bx v) const { return\n+_level->getVertexEdgeLocalIndices(v); }\n+115\n+_\b1_\b1_\b7 _\bC_\bo_\bn_\bs_\bt_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bE_\bd_\bg_\be_\bF_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs(_\bI_\bn_\bd_\be_\bx e) const { return\n+_level->getEdgeFaceLocalIndices(e); }\n 118\n-119// @endcond\n-120\n-121} // end namespace Far\n+_\b1_\b2_\b0 _\bI_\bn_\bd_\be_\bx _\bF_\bi_\bn_\bd_\bE_\bd_\bg_\be(_\bI_\bn_\bd_\be_\bx v0, _\bI_\bn_\bd_\be_\bx v1) const { return _level->findEdge(v0, v1);\n+}\n 122\n-123} // end namespace OPENSUBDIV_VERSION\n-124using namespace OPENSUBDIV_VERSION;\n-125} // end namespace OpenSubdiv\n+124\n 126\n-127#endif /* OPENSUBDIV3_FAR_TOPOLOGY_DESCRIPTOR_H */\n+_\b1_\b2_\b8 bool _\bI_\bs_\bE_\bd_\bg_\be_\bN_\bo_\bn_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd(_\bI_\bn_\bd_\be_\bx e) const { return _level->isEdgeNonManifold\n+(e); }\n+129\n+_\b1_\b3_\b1 bool _\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bN_\bo_\bn_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd(_\bI_\bn_\bd_\be_\bx v) const { return _level-\n+>isVertexNonManifold(v); }\n+132\n+_\b1_\b3_\b4 bool _\bI_\bs_\bE_\bd_\bg_\be_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by(_\bI_\bn_\bd_\be_\bx e) const { return _level->getEdgeTag\n+(e)._boundary; }\n+135\n+_\b1_\b3_\b7 bool _\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by(_\bI_\bn_\bd_\be_\bx v) const { return _level->getVertexTag\n+(v)._boundary; }\n+138\n+_\b1_\b4_\b0 bool _\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\br_\bn_\be_\br(_\bI_\bn_\bd_\be_\bx v) const { return (_level->getNumVertexFaces(v)\n+== 1); }\n+141\n+_\b1_\b6_\b2 bool _\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be_\bR_\be_\bg_\bu_\bl_\ba_\br(_\bI_\bn_\bd_\be_\bx v) const { return !_level->getVertexTag\n+(v)._xordinary || _\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\br_\bn_\be_\br(v); }\n+164\n+166\n+171\n+_\b1_\b7_\b3 float _\bG_\be_\bt_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(_\bI_\bn_\bd_\be_\bx e) const { return _level->getEdgeSharpness(e);\n+}\n+174\n+_\b1_\b7_\b6 float _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(_\bI_\bn_\bd_\be_\bx v) const { return _level->getVertexSharpness\n+(v); }\n+177\n+_\b1_\b7_\b9 bool _\bI_\bs_\bE_\bd_\bg_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp(_\bI_\bn_\bd_\be_\bx e) const { return _level->getEdgeTag\n+(e)._infSharp; }\n+180\n+_\b1_\b8_\b2 bool _\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp(_\bI_\bn_\bd_\be_\bx v) const { return _level->getVertexTag\n+(v)._infSharp; }\n+183\n+_\b1_\b8_\b5 bool _\bI_\bs_\bE_\bd_\bg_\be_\bS_\be_\bm_\bi_\bS_\bh_\ba_\br_\bp(_\bI_\bn_\bd_\be_\bx e) const { return _level->getEdgeTag\n+(e)._semiSharp; }\n+186\n+_\b1_\b8_\b8 bool _\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bS_\be_\bm_\bi_\bS_\bh_\ba_\br_\bp(_\bI_\bn_\bd_\be_\bx v) const { return _level->getVertexTag\n+(v)._semiSharp; }\n+189\n+_\b1_\b9_\b1 bool _\bI_\bs_\bF_\ba_\bc_\be_\bH_\bo_\bl_\be(_\bI_\bn_\bd_\be_\bx f) const { return _level->isFaceHole(f); }\n+192\n+_\b1_\b9_\b4 _\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bR_\bu_\bl_\be(_\bI_\bn_\bd_\be_\bx v) const { return _level-\n+>getVertexRule(v); }\n+196\n+198\n+228\n+_\b2_\b3_\b0 int _\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs() const { return _level->getNumFVarChannels(); }\n+231\n+_\b2_\b3_\b4 int _\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bs(int channel = 0) const { return _level-\n+>getNumFVarValues(channel); }\n+235\n+_\b2_\b3_\b7 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bF_\ba_\bc_\be_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bs(_\bI_\bn_\bd_\be_\bx f, int channel = 0) const {\n+238 return _level->getFaceFVarValues(f, channel);\n+239 }\n+240\n+_\b2_\b4_\b2 bool _\bD_\bo_\be_\bs_\bV_\be_\br_\bt_\be_\bx_\bF_\bV_\ba_\br_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bM_\ba_\bt_\bc_\bh(_\bI_\bn_\bd_\be_\bx v, int channel = 0) const {\n+243 return _level->doesVertexFVarTopologyMatch(v, channel);\n+244 }\n+245\n+_\b2_\b4_\b7 bool _\bD_\bo_\be_\bs_\bE_\bd_\bg_\be_\bF_\bV_\ba_\br_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bM_\ba_\bt_\bc_\bh(_\bI_\bn_\bd_\be_\bx e, int channel = 0) const {\n+248 return _level->doesEdgeFVarTopologyMatch(e, channel);\n+249 }\n+250\n+_\b2_\b5_\b2 bool _\bD_\bo_\be_\bs_\bF_\ba_\bc_\be_\bF_\bV_\ba_\br_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bM_\ba_\bt_\bc_\bh(_\bI_\bn_\bd_\be_\bx f, int channel = 0) const {\n+253 return _level->doesFaceFVarTopologyMatch(f, channel);\n+254 }\n+255\n+257\n+259\n+260\n+_\b2_\b6_\b2 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bF_\ba_\bc_\be_\bC_\bh_\bi_\bl_\bd_\bF_\ba_\bc_\be_\bs(_\bI_\bn_\bd_\be_\bx f) const { return _refToChild-\n+>getFaceChildFaces(f); }\n+263\n+_\b2_\b6_\b5 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bF_\ba_\bc_\be_\bC_\bh_\bi_\bl_\bd_\bE_\bd_\bg_\be_\bs(_\bI_\bn_\bd_\be_\bx f) const { return _refToChild-\n+>getFaceChildEdges(f); }\n+266\n+_\b2_\b6_\b8 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bE_\bd_\bg_\be_\bC_\bh_\bi_\bl_\bd_\bE_\bd_\bg_\be_\bs(_\bI_\bn_\bd_\be_\bx e) const { return _refToChild-\n+>getEdgeChildEdges(e); }\n+269\n+_\b2_\b7_\b1 _\bI_\bn_\bd_\be_\bx _\bG_\be_\bt_\bF_\ba_\bc_\be_\bC_\bh_\bi_\bl_\bd_\bV_\be_\br_\bt_\be_\bx( _\bI_\bn_\bd_\be_\bx f) const { return _refToChild-\n+>getFaceChildVertex(f); }\n+272\n+_\b2_\b7_\b4 _\bI_\bn_\bd_\be_\bx _\bG_\be_\bt_\bE_\bd_\bg_\be_\bC_\bh_\bi_\bl_\bd_\bV_\be_\br_\bt_\be_\bx( _\bI_\bn_\bd_\be_\bx e) const { return _refToChild-\n+>getEdgeChildVertex(e); }\n+275\n+_\b2_\b7_\b7 _\bI_\bn_\bd_\be_\bx _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bC_\bh_\bi_\bl_\bd_\bV_\be_\br_\bt_\be_\bx(_\bI_\bn_\bd_\be_\bx v) const { return _refToChild-\n+>getVertexChildVertex(v); }\n+278\n+_\b2_\b8_\b0 _\bI_\bn_\bd_\be_\bx _\bG_\be_\bt_\bF_\ba_\bc_\be_\bP_\ba_\br_\be_\bn_\bt_\bF_\ba_\bc_\be(_\bI_\bn_\bd_\be_\bx f) const { return _refToParent-\n+>getChildFaceParentFace(f); }\n+282\n+284\n+285\n+_\b2_\b8_\b6 bool _\bV_\ba_\bl_\bi_\bd_\ba_\bt_\be_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by() const { return _level->validateTopology(); }\n+_\b2_\b8_\b7 void _\bP_\br_\bi_\bn_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by(bool children = true) const { _level->print((children &&\n+_refToChild) ? _refToChild : 0); }\n+289\n+290\n+291private:\n+_\b2_\b9_\b2 friend class _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br;\n+293\n+294 Vtr::internal::Level const * _level;\n+295 Vtr::internal::Refinement const * _refToParent;\n+296 Vtr::internal::Refinement const * _refToChild;\n+297\n+298public:\n+299 // Not intended for public use, but required by std::vector, etc...\n+_\b3_\b0_\b0 _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl() { }\n+_\b3_\b0_\b1 _\b~_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl() { }\n+302};\n+303\n+304} // end namespace Far\n+305\n+306} // end namespace OPENSUBDIV_VERSION\n+307using namespace OPENSUBDIV_VERSION;\n+308} // end namespace OpenSubdiv\n+309\n+310#endif /* OPENSUBDIV3_FAR_TOPOLOGY_LEVEL_H */\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bI_\bn_\bd_\be_\bx\n Vtr::Index Index\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b4_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-A simple reference to raw topology data for use with TopologyRefinerFactory.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bf_\bv_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs\n-FVarChannel const * fvarChannels\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b8_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bn_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-int numVertices\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bc_\bo_\br_\bn_\be_\br_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-Index const * cornerVertexIndices\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bv_\be_\br_\bt_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bP_\be_\br_\bF_\ba_\bc_\be\n-Index const * vertIndicesPerFace\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bc_\br_\be_\ba_\bs_\be_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br_\bs\n-Index const * creaseVertexIndexPairs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bh_\bo_\bl_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-Index const * holeIndices\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bn_\bu_\bm_\bF_\ba_\bc_\be_\bs\n-int numFaces\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bn_\bu_\bm_\bC_\bo_\br_\bn_\be_\br_\bs\n-int numCorners\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bc_\bo_\br_\bn_\be_\br_\bW_\be_\bi_\bg_\bh_\bt_\bs\n-float const * cornerWeights\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bi_\bs_\bL_\be_\bf_\bt_\bH_\ba_\bn_\bd_\be_\bd\n-bool isLeftHanded\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bn_\bu_\bm_\bV_\be_\br_\bt_\bs_\bP_\be_\br_\bF_\ba_\bc_\be\n-int const * numVertsPerFace\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-TopologyDescriptor()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bc_\br_\be_\ba_\bs_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs\n-float const * creaseWeights\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bn_\bu_\bm_\bC_\br_\be_\ba_\bs_\be_\bs\n-int numCreases\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bn_\bu_\bm_\bH_\bo_\bl_\be_\bs\n-int numHoles\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bn_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs\n-int numFVarChannels\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b8_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b7_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\b:_\b:\n-_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl\n-FVarChannel()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b7_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\b:_\b:\n-_\bv_\ba_\bl_\bu_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-Index const * valueIndices\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b7_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\b:_\b:_\bn_\bu_\bm_\bV_\ba_\bl_\bu_\be_\bs\n-int numValues\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b7_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n-_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by\n-static bool assignComponentTopology(TopologyRefiner &newRefiner, MESH const\n-&mesh)\n-Specify the relationships between vertices, faces, etc. ie the face-vertices,\n-vertex-faces,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b6_\b2_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n-_\br_\be_\bp_\bo_\br_\bt_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by\n-static void reportInvalidTopology(TopologyError errCode, char const *msg, MESH\n-const &mesh)\n-(Optional) Control run-time topology validation and error reporting\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b7_\b0_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n-_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bT_\ba_\bg_\bs\n-static bool assignComponentTags(TopologyRefiner &newRefiner, MESH const &mesh)\n-(Optional) Specify edge or vertex sharpness or face holes\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b6_\b9_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n-_\br_\be_\bs_\bi_\bz_\be_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by\n-static bool resizeComponentTopology(TopologyRefiner &newRefiner, MESH const\n-&mesh)\n-Specify the number of vertices, faces, face-vertices, etc.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b5_\b8_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n-_\ba_\bs_\bs_\bi_\bg_\bn_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by\n-static bool assignFaceVaryingTopology(TopologyRefiner &newRefiner, MESH const\n-&mesh)\n-(Optional) Specify face-varying data per face\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b6_\b7_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl\n+An interface for accessing data in a specific level of a refined topology\n+hierarchy.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b4_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bP_\ba_\br_\be_\bn_\bt_\bF_\ba_\bc_\be\n+Index GetFaceParentFace(Index f) const\n+Return the parent face (in the previous level) of a given face.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b8_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl\n+TopologyLevel()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b3_\b0_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be_\bR_\be_\bg_\bu_\bl_\ba_\br\n+bool IsVertexValenceRegular(Index v) const\n+Return if the valence of the vertex is regular (must be manifold)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b6_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n+float GetEdgeSharpness(Index e) const\n+Return the sharpness assigned a given edge.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b7_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bD_\bo_\be_\bs_\bF_\ba_\bc_\be_\bF_\bV_\ba_\br_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bM_\ba_\bt_\bc_\bh\n+bool DoesFaceFVarTopologyMatch(Index f, int channel=0) const\n+Return if face-varying topology around a face matches.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b5_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bR_\bu_\bl_\be\n+Sdc::Crease::Rule GetVertexRule(Index v) const\n+Return the subdivision rule assigned a given vertex specific to this level.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b9_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\br_\bn_\be_\br\n+bool IsVertexCorner(Index v) const\n+Return if the vertex is a corner (only one incident face)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b4_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bC_\bh_\bi_\bl_\bd_\bV_\be_\br_\bt_\be_\bx\n+Index GetVertexChildVertex(Index v) const\n+Return the child vertex (in the next level) of a given vertex.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b7_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bE_\bd_\bg_\be_\bF_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+ConstLocalIndexArray GetEdgeFaceLocalIndices(Index e) const\n+Access the local indices of an edge with respect to its incident faces.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b1_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bC_\bh_\bi_\bl_\bd_\bE_\bd_\bg_\be_\bs\n+ConstIndexArray GetFaceChildEdges(Index f) const\n+Access the child edges (in the next level) of a given face.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b6_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bD_\bo_\be_\bs_\bE_\bd_\bg_\be_\bF_\bV_\ba_\br_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bM_\ba_\bt_\bc_\bh\n+bool DoesEdgeFVarTopologyMatch(Index e, int channel=0) const\n+Return if face-varying topology across the edge only matches.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b4_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by\n+void PrintTopology(bool children=true) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b8_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+ConstIndexArray GetFaceVertices(Index f) const\n+Access the vertices incident a given face.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b9_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bC_\bh_\bi_\bl_\bd_\bF_\ba_\bc_\be_\bs\n+ConstIndexArray GetFaceChildFaces(Index f) const\n+Access the child faces (in the next level) of a given face.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b6_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bE_\bd_\bg_\be_\bs\n+int GetNumEdges() const\n+Return the number of edges in this level.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b6_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bV_\ba_\bl_\bi_\bd_\ba_\bt_\be_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by\n+bool ValidateTopology() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b8_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bI_\bs_\bE_\bd_\bg_\be_\bN_\bo_\bn_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n+bool IsEdgeNonManifold(Index e) const\n+Return if the edge is non-manifold.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b2_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bI_\bs_\bF_\ba_\bc_\be_\bH_\bo_\bl_\be\n+bool IsFaceHole(Index f) const\n+Return if a given face has been tagged as a hole.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b9_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bE_\bd_\bg_\be_\bs\n+ConstIndexArray GetVertexEdges(Index v) const\n+Access the edges incident a given vertex.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b0_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bC_\bh_\bi_\bl_\bd_\bV_\be_\br_\bt_\be_\bx\n+Index GetFaceChildVertex(Index f) const\n+Return the child vertex (in the next level) of a given face.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b7_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bD_\bo_\be_\bs_\bV_\be_\br_\bt_\be_\bx_\bF_\bV_\ba_\br_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bM_\ba_\bt_\bc_\bh\n+bool DoesVertexFVarTopologyMatch(Index v, int channel=0) const\n+Return if face-varying topology around a vertex matches.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b4_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bE_\bd_\bg_\be_\bC_\bh_\bi_\bl_\bd_\bE_\bd_\bg_\be_\bs\n+ConstIndexArray GetEdgeChildEdges(Index e) const\n+Access the child edges (in the next level) of a given edge.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b6_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bI_\bs_\bE_\bd_\bg_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp\n+bool IsEdgeInfSharp(Index e) const\n+Return if the edge is infinitely-sharp.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b7_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bF_\ba_\bc_\be_\bs\n+ConstIndexArray GetVertexFaces(Index v) const\n+Access the faces incident a given vertex.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b0_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bF_\bi_\bn_\bd_\bE_\bd_\bg_\be\n+Index FindEdge(Index v0, Index v1) const\n+Identify the edge matching the given vertex pair.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b2_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bE_\bd_\bg_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+ConstLocalIndexArray GetVertexEdgeLocalIndices(Index v) const\n+Access the local indices of a vertex with respect to its incident edges.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b1_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bE_\bd_\bg_\be_\bs\n+ConstIndexArray GetFaceEdges(Index f) const\n+Access the edges incident a given face.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b9_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\ba_\bc_\be_\bs\n+int GetNumFaces() const\n+Return the number of faces in this level.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b6_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by\n+bool IsVertexBoundary(Index v) const\n+Return if the vertex is on a boundary (at least one incident boundary edge)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b3_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs\n+int GetNumFVarChannels() const\n+Return the number of face-varying channels (should be same for all levels)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b3_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+int GetNumVertices() const\n+Return the number of vertices in this level.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b6_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bE_\bd_\bg_\be_\bF_\ba_\bc_\be_\bs\n+ConstIndexArray GetEdgeFaces(Index e) const\n+Access the faces incident a given edge.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b0_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bs\n+ConstIndexArray GetFaceFVarValues(Index f, int channel=0) const\n+Access the face-varying values associated with a particular face.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b3_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bE_\bd_\bg_\be_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+ConstIndexArray GetEdgeVertices(Index e) const\n+Access the vertices incident a given edge.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b9_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bI_\bs_\bE_\bd_\bg_\be_\bS_\be_\bm_\bi_\bS_\bh_\ba_\br_\bp\n+bool IsEdgeSemiSharp(Index e) const\n+Return if the edge is semi-sharp.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b8_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\b~_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl\n+~TopologyLevel()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b3_\b0_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n+float GetVertexSharpness(Index v) const\n+Return the sharpness assigned a given vertex.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b7_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bE_\bd_\bg_\be_\bC_\bh_\bi_\bl_\bd_\bV_\be_\br_\bt_\be_\bx\n+Index GetEdgeChildVertex(Index e) const\n+Return the child vertex (in the next level) of a given edge.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b7_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bS_\be_\bm_\bi_\bS_\bh_\ba_\br_\bp\n+bool IsVertexSemiSharp(Index v) const\n+Return if the vertex is semi-sharp.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b8_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+int GetNumFaceVertices() const\n+Return the total number of face-vertices, i.e. the sum of all vertices for all\n+faces.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b7_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bN_\bo_\bn_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n+bool IsVertexNonManifold(Index v) const\n+Return if the vertex is non-manifold.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b3_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bI_\bs_\bE_\bd_\bg_\be_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by\n+bool IsEdgeBoundary(Index e) const\n+Return if the edge is a boundary (only one incident face)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b3_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp\n+bool IsVertexInfSharp(Index v) const\n+Return if the vertex is infinitely-sharp.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b8_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bs\n+int GetNumFVarValues(int channel=0) const\n+Return the total number of face-varying values in a particular channel (the\n+upper bound of a face-var...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b3_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bF_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+ConstLocalIndexArray GetVertexFaceLocalIndices(Index v) const\n+Access the local indices of a vertex with respect to its incident faces.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b1_\b1\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br\n Stores topology data for a specified set of refinement options.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b5_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be\n+Rule\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b5_\b3\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bf_\ba_\br\n- * _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\n+ * _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00713.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00713.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/far/topologyLevel.h File Reference\n+OpenSubdiv: opensubdiv/far/topologyDescriptor.h File Reference\n \n \n \n \n \n \n \n@@ -90,29 +90,31 @@\n \n \n \n
\n \n-
topologyLevel.h File Reference
\n+
topologyDescriptor.h File Reference
\n
\n
\n
#include "../version.h"
\n-#include "../vtr/level.h"
\n-#include "../vtr/refinement.h"
\n-#include "../far/types.h"
\n-#include <vector>
\n+#include "../far/topologyRefiner.h"
\n+#include "../far/topologyRefinerFactory.h"
\n+#include "../far/error.h"
\n+#include <cassert>
\n
\n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n+\n+\n \n

\n Classes

class  TopologyLevel
 An interface for accessing data in a specific level of a refined topology hierarchy. More...
struct  TopologyDescriptor
 A simple reference to raw topology data for use with TopologyRefinerFactory. More...
 
struct  TopologyDescriptor::FVarChannel
 
\n \n \n \n \n@@ -121,13 +123,13 @@\n \n

\n Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,30 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-topologyLevel.h File Reference\n+topologyDescriptor.h File Reference\n #include \"../version.h\"\n-#include \"_\b._\b._\b/_\bv_\bt_\br_\b/_\bl_\be_\bv_\be_\bl_\b._\bh\"\n-#include \"_\b._\b._\b/_\bv_\bt_\br_\b/_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bh\"\n-#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n-#include \n+#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh\"\n+#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh\"\n+#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\be_\br_\br_\bo_\br_\b._\bh\"\n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl\n-\u00a0 An interface for accessing data in a specific level of a refined\n- topology hierarchy. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+\u00a0 A simple reference to raw topology data for use with\n+ _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bf_\ba_\br\n- * _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh\n+ * _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00713.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00713.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a00713 = [\n- [\"TopologyLevel\", \"a01105.html\", \"a01105\"]\n+ [\"TopologyDescriptor\", \"a01097.html\", \"a01097\"],\n+ [\"FVarChannel\", \"a01101.html\", \"a01101\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00713_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00713_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/far/topologyLevel.h Source File\n+OpenSubdiv: opensubdiv/far/topologyDescriptor.h Source File\n \n \n \n \n \n \n \n@@ -92,19 +92,19 @@\n
No Matches
\n \n \n \n \n \n
\n-
topologyLevel.h
\n+
topologyDescriptor.h
\n
\n
\n Go to the documentation of this file.
1//
\n-
2// Copyright 2015 DreamWorks Animation LLC.
\n+
2// Copyright 2014 DreamWorks Animation LLC.
\n
3//
\n
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
\n
5// with the following modification; you may not use this file except in
\n
6// compliance with the Apache License and the following modification to it:
\n
7// Section 6. Trademarks. is deleted and replaced with:
\n
8//
\n
9// 6. Trademarks. This License does not grant permission to use the trade
\n@@ -118,228 +118,146 @@\n
17//
\n
18// Unless required by applicable law or agreed to in writing, software
\n
19// distributed under the Apache License with the above modification is
\n
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
\n
21// KIND, either express or implied. See the Apache License for the specific
\n
22// language governing permissions and limitations under the Apache License.
\n
23//
\n-
24#ifndef OPENSUBDIV3_FAR_TOPOLOGY_LEVEL_H
\n-
25#define OPENSUBDIV3_FAR_TOPOLOGY_LEVEL_H
\n+
24#ifndef OPENSUBDIV3_FAR_TOPOLOGY_DESCRIPTOR_H
\n+
25#define OPENSUBDIV3_FAR_TOPOLOGY_DESCRIPTOR_H
\n
26
\n
27#include "../version.h"
\n
28
\n-
29#include "../vtr/level.h"
\n-
30#include "../vtr/refinement.h"
\n-
31#include "../far/types.h"
\n+
29#include "../far/topologyRefiner.h"
\n+
30#include "../far/topologyRefinerFactory.h"
\n+
31#include "../far/error.h"
\n
32
\n-
33#include <vector>
\n+
33#include <cassert>
\n
34
\n
35namespace OpenSubdiv {
\n
36namespace OPENSUBDIV_VERSION {
\n
37
\n
38namespace Far {
\n
39
\n
\n-\n+\n
50
\n-
51public:
\n+\n+\n
53
\n+
54 int const * numVertsPerFace;
\n+\n+
56
\n+\n+\n+
59 float const * creaseWeights;
\n
60
\n-
62 int GetNumVertices() const { return _level->getNumVertices(); }
\n-
63
\n-
65 int GetNumFaces() const { return _level->getNumFaces(); }
\n-
66
\n-
68 int GetNumEdges() const { return _level->getNumEdges(); }
\n+\n+\n+
63 float const * cornerWeights;
\n+
64
\n+\n+\n+
67
\n+\n
69
\n-
71 int GetNumFaceVertices() const { return _level->getNumFaceVerticesTotal(); }
\n-
73
\n-
75
\n-
90 //
\n-
91
\n-
93 ConstIndexArray GetFaceVertices(Index f) const { return _level->getFaceVertices(f); }
\n-
94
\n-
96 ConstIndexArray GetFaceEdges(Index f) const { return _level->getFaceEdges(f); }
\n-
97
\n-
99 ConstIndexArray GetEdgeVertices(Index e) const { return _level->getEdgeVertices(e); }
\n-
100
\n-
102 ConstIndexArray GetEdgeFaces(Index e) const { return _level->getEdgeFaces(e); }
\n+
70 // Face-varying data channel -- value indices correspond to vertex indices,
\n+
71 // i.e. one for every vertex of every face:
\n+
72 //
\n+
\n+
73 struct FVarChannel {
\n+
74
\n+\n+\n+
77
\n+\n+
79 };
\n+
\n+
80
\n+\n+\n+
83
\n+\n+
85};
\n+
\n+
86
\n+
87
\n+
88//
\n+
89// Forward declarations of required TopologyRefinerFactory<TopologyDescriptor>
\n+
90// specializations (defined internally):
\n+
91//
\n+
92// @cond EXCLUDE_DOXYGEN
\n+
93
\n+
94template <>
\n+
95bool
\n+\n+
97 TopologyRefiner & refiner, TopologyDescriptor const & desc);
\n+
98
\n+
99template <>
\n+
100bool
\n+\n+
102 TopologyRefiner & refiner, TopologyDescriptor const & desc);
\n
103
\n-
105 ConstIndexArray GetVertexFaces(Index v) const { return _level->getVertexFaces(v); }
\n-
106
\n-
108 ConstIndexArray GetVertexEdges(Index v) const { return _level->getVertexEdges(v); }
\n-
109
\n-
111 ConstLocalIndexArray GetVertexFaceLocalIndices(Index v) const { return _level->getVertexFaceLocalIndices(v); }
\n-
112
\n-
114 ConstLocalIndexArray GetVertexEdgeLocalIndices(Index v) const { return _level->getVertexEdgeLocalIndices(v); }
\n-
115
\n-
117 ConstLocalIndexArray GetEdgeFaceLocalIndices(Index e) const { return _level->getEdgeFaceLocalIndices(e); }
\n+
104template <>
\n+
105bool
\n+\n+
107 TopologyRefiner & refiner, TopologyDescriptor const & desc);
\n+
108
\n+
109template <>
\n+
110bool
\n+\n+
112 TopologyRefiner & refiner, TopologyDescriptor const & desc);
\n+
113
\n+
114template <>
\n+
115void
\n+\n+
117 TopologyError errCode, char const * msg, TopologyDescriptor const & desc);
\n
118
\n-
120 Index FindEdge(Index v0, Index v1) const { return _level->findEdge(v0, v1); }
\n+
119// @endcond
\n+
120
\n+
121} // end namespace Far
\n
122
\n-
124
\n+
123} // end namespace OPENSUBDIV_VERSION
\n+
124using namespace OPENSUBDIV_VERSION;
\n+
125} // end namespace OpenSubdiv
\n
126
\n-
128 bool IsEdgeNonManifold(Index e) const { return _level->isEdgeNonManifold(e); }
\n-
129
\n-
131 bool IsVertexNonManifold(Index v) const { return _level->isVertexNonManifold(v); }
\n-
132
\n-
134 bool IsEdgeBoundary(Index e) const { return _level->getEdgeTag(e)._boundary; }
\n-
135
\n-
137 bool IsVertexBoundary(Index v) const { return _level->getVertexTag(v)._boundary; }
\n-
138
\n-
140 bool IsVertexCorner(Index v) const { return (_level->getNumVertexFaces(v) == 1); }
\n-
141
\n-
162 bool IsVertexValenceRegular(Index v) const { return !_level->getVertexTag(v)._xordinary || IsVertexCorner(v); }
\n-
164
\n-
166
\n-
171
\n-
173 float GetEdgeSharpness(Index e) const { return _level->getEdgeSharpness(e); }
\n-
174
\n-
176 float GetVertexSharpness(Index v) const { return _level->getVertexSharpness(v); }
\n-
177
\n-
179 bool IsEdgeInfSharp(Index e) const { return _level->getEdgeTag(e)._infSharp; }
\n-
180
\n-
182 bool IsVertexInfSharp(Index v) const { return _level->getVertexTag(v)._infSharp; }
\n-
183
\n-
185 bool IsEdgeSemiSharp(Index e) const { return _level->getEdgeTag(e)._semiSharp; }
\n-
186
\n-
188 bool IsVertexSemiSharp(Index v) const { return _level->getVertexTag(v)._semiSharp; }
\n-
189
\n-
191 bool IsFaceHole(Index f) const { return _level->isFaceHole(f); }
\n-
192
\n-
194 Sdc::Crease::Rule GetVertexRule(Index v) const { return _level->getVertexRule(v); }
\n-
196
\n-
198
\n-
228
\n-
230 int GetNumFVarChannels() const { return _level->getNumFVarChannels(); }
\n-
231
\n-
234 int GetNumFVarValues(int channel = 0) const { return _level->getNumFVarValues(channel); }
\n-
235
\n-
\n-
237 ConstIndexArray GetFaceFVarValues(Index f, int channel = 0) const {
\n-
238 return _level->getFaceFVarValues(f, channel);
\n-
239 }
\n-
\n-
240
\n-
\n-
242 bool DoesVertexFVarTopologyMatch(Index v, int channel = 0) const {
\n-
243 return _level->doesVertexFVarTopologyMatch(v, channel);
\n-
244 }
\n-
\n-
245
\n-
\n-
247 bool DoesEdgeFVarTopologyMatch(Index e, int channel = 0) const {
\n-
248 return _level->doesEdgeFVarTopologyMatch(e, channel);
\n-
249 }
\n-
\n-
250
\n-
\n-
252 bool DoesFaceFVarTopologyMatch(Index f, int channel = 0) const {
\n-
253 return _level->doesFaceFVarTopologyMatch(f, channel);
\n-
254 }
\n-
\n-
255
\n-
257
\n-
259
\n-
260
\n-
262 ConstIndexArray GetFaceChildFaces(Index f) const { return _refToChild->getFaceChildFaces(f); }
\n-
263
\n-
265 ConstIndexArray GetFaceChildEdges(Index f) const { return _refToChild->getFaceChildEdges(f); }
\n-
266
\n-
268 ConstIndexArray GetEdgeChildEdges(Index e) const { return _refToChild->getEdgeChildEdges(e); }
\n-
269
\n-
271 Index GetFaceChildVertex( Index f) const { return _refToChild->getFaceChildVertex(f); }
\n-
272
\n-
274 Index GetEdgeChildVertex( Index e) const { return _refToChild->getEdgeChildVertex(e); }
\n-
275
\n-
277 Index GetVertexChildVertex(Index v) const { return _refToChild->getVertexChildVertex(v); }
\n-
278
\n-
280 Index GetFaceParentFace(Index f) const { return _refToParent->getChildFaceParentFace(f); }
\n-
282
\n-
284
\n-
285
\n-
286 bool ValidateTopology() const { return _level->validateTopology(); }
\n-
287 void PrintTopology(bool children = true) const { _level->print((children && _refToChild) ? _refToChild : 0); }
\n-
289
\n-
290
\n-
291private:
\n-
292 friend class TopologyRefiner;
\n-
293
\n-
294 Vtr::internal::Level const * _level;
\n-
295 Vtr::internal::Refinement const * _refToParent;
\n-
296 Vtr::internal::Refinement const * _refToChild;
\n-
297
\n-
298public:
\n-
299 // Not intended for public use, but required by std::vector, etc...
\n-\n-\n-
302};
\n-
\n-
303
\n-
304} // end namespace Far
\n-
305
\n-
306} // end namespace OPENSUBDIV_VERSION
\n-
307using namespace OPENSUBDIV_VERSION;
\n-
308} // end namespace OpenSubdiv
\n-
309
\n-
310#endif /* OPENSUBDIV3_FAR_TOPOLOGY_LEVEL_H */
\n-\n+
127#endif /* OPENSUBDIV3_FAR_TOPOLOGY_DESCRIPTOR_H */
\n+\n \n-
An interface for accessing data in a specific level of a refined topology hierarchy.
\n-
Index GetFaceParentFace(Index f) const
Return the parent face (in the previous level) of a given face.
\n-\n-
bool IsVertexValenceRegular(Index v) const
Return if the valence of the vertex is regular (must be manifold)
\n-
float GetEdgeSharpness(Index e) const
Return the sharpness assigned a given edge.
\n-
bool DoesFaceFVarTopologyMatch(Index f, int channel=0) const
Return if face-varying topology around a face matches.
\n-
Sdc::Crease::Rule GetVertexRule(Index v) const
Return the subdivision rule assigned a given vertex specific to this level.
\n-
bool IsVertexCorner(Index v) const
Return if the vertex is a corner (only one incident face)
\n-
Index GetVertexChildVertex(Index v) const
Return the child vertex (in the next level) of a given vertex.
\n-
ConstLocalIndexArray GetEdgeFaceLocalIndices(Index e) const
Access the local indices of an edge with respect to its incident faces.
\n-
ConstIndexArray GetFaceChildEdges(Index f) const
Access the child edges (in the next level) of a given face.
\n-
bool DoesEdgeFVarTopologyMatch(Index e, int channel=0) const
Return if face-varying topology across the edge only matches.
\n-\n-
ConstIndexArray GetFaceVertices(Index f) const
Access the vertices incident a given face.
\n-
ConstIndexArray GetFaceChildFaces(Index f) const
Access the child faces (in the next level) of a given face.
\n-
int GetNumEdges() const
Return the number of edges in this level.
\n-\n-
bool IsEdgeNonManifold(Index e) const
Return if the edge is non-manifold.
\n-
bool IsFaceHole(Index f) const
Return if a given face has been tagged as a hole.
\n-
ConstIndexArray GetVertexEdges(Index v) const
Access the edges incident a given vertex.
\n-
Index GetFaceChildVertex(Index f) const
Return the child vertex (in the next level) of a given face.
\n-
bool DoesVertexFVarTopologyMatch(Index v, int channel=0) const
Return if face-varying topology around a vertex matches.
\n-
ConstIndexArray GetEdgeChildEdges(Index e) const
Access the child edges (in the next level) of a given edge.
\n-
bool IsEdgeInfSharp(Index e) const
Return if the edge is infinitely-sharp.
\n-
ConstIndexArray GetVertexFaces(Index v) const
Access the faces incident a given vertex.
\n-
Index FindEdge(Index v0, Index v1) const
Identify the edge matching the given vertex pair.
\n-
ConstLocalIndexArray GetVertexEdgeLocalIndices(Index v) const
Access the local indices of a vertex with respect to its incident edges.
\n-
ConstIndexArray GetFaceEdges(Index f) const
Access the edges incident a given face.
\n-
int GetNumFaces() const
Return the number of faces in this level.
\n-
bool IsVertexBoundary(Index v) const
Return if the vertex is on a boundary (at least one incident boundary edge)
\n-
int GetNumFVarChannels() const
Return the number of face-varying channels (should be same for all levels)
\n-
int GetNumVertices() const
Return the number of vertices in this level.
\n-
ConstIndexArray GetEdgeFaces(Index e) const
Access the faces incident a given edge.
\n-
ConstIndexArray GetFaceFVarValues(Index f, int channel=0) const
Access the face-varying values associated with a particular face.
\n-
ConstIndexArray GetEdgeVertices(Index e) const
Access the vertices incident a given edge.
\n-
bool IsEdgeSemiSharp(Index e) const
Return if the edge is semi-sharp.
\n-\n-
float GetVertexSharpness(Index v) const
Return the sharpness assigned a given vertex.
\n-
Index GetEdgeChildVertex(Index e) const
Return the child vertex (in the next level) of a given edge.
\n-
bool IsVertexSemiSharp(Index v) const
Return if the vertex is semi-sharp.
\n-
int GetNumFaceVertices() const
Return the total number of face-vertices, i.e. the sum of all vertices for all faces.
\n-
bool IsVertexNonManifold(Index v) const
Return if the vertex is non-manifold.
\n-
bool IsEdgeBoundary(Index e) const
Return if the edge is a boundary (only one incident face)
\n-
bool IsVertexInfSharp(Index v) const
Return if the vertex is infinitely-sharp.
\n-
int GetNumFVarValues(int channel=0) const
Return the total number of face-varying values in a particular channel (the upper bound of a face-var...
\n-
ConstLocalIndexArray GetVertexFaceLocalIndices(Index v) const
Access the local indices of a vertex with respect to its incident faces.
\n+
A simple reference to raw topology data for use with TopologyRefinerFactory.
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+
static bool assignComponentTopology(TopologyRefiner &newRefiner, MESH const &mesh)
Specify the relationships between vertices, faces, etc. ie the face-vertices, vertex-faces,...
\n+
static void reportInvalidTopology(TopologyError errCode, char const *msg, MESH const &mesh)
(Optional) Control run-time topology validation and error reporting
\n+
static bool assignComponentTags(TopologyRefiner &newRefiner, MESH const &mesh)
(Optional) Specify edge or vertex sharpness or face holes
\n+
static bool resizeComponentTopology(TopologyRefiner &newRefiner, MESH const &mesh)
Specify the number of vertices, faces, face-vertices, etc.
\n+
static bool assignFaceVaryingTopology(TopologyRefiner &newRefiner, MESH const &mesh)
(Optional) Specify face-varying data per face
\n
Stores topology data for a specified set of refinement options.
\n-\n-\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,15 +1,15 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-topologyLevel.h\n+topologyDescriptor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n-2// Copyright 2015 DreamWorks Animation LLC.\n+2// Copyright 2014 DreamWorks Animation LLC.\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n 7// Section 6. Trademarks. is deleted and replaced with:\n 8//\n 9// 6. Trademarks. This License does not grant permission to use the trade\n@@ -23,387 +23,208 @@\n 17//\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n-24#ifndef OPENSUBDIV3_FAR_TOPOLOGY_LEVEL_H\n-25#define OPENSUBDIV3_FAR_TOPOLOGY_LEVEL_H\n+24#ifndef OPENSUBDIV3_FAR_TOPOLOGY_DESCRIPTOR_H\n+25#define OPENSUBDIV3_FAR_TOPOLOGY_DESCRIPTOR_H\n 26\n 27#include \"../version.h\"\n 28\n-29#include \"../vtr/level.h\"\n-30#include \"../vtr/refinement.h\"\n-31#include \"../far/types.h\"\n+29#include \"../far/topologyRefiner.h\"\n+30#include \"../far/topologyRefinerFactory.h\"\n+31#include \"../far/error.h\"\n 32\n-33#include \n+33#include \n 34\n 35namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n 36namespace OPENSUBDIV_VERSION {\n 37\n 38namespace Far {\n 39\n-_\b4_\b9class _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl {\n+_\b4_\b9struct _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br {\n 50\n-51public:\n+_\b5_\b1 int _\bn_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs,\n+_\b5_\b2 _\bn_\bu_\bm_\bF_\ba_\bc_\be_\bs;\n 53\n+_\b5_\b4 int const * _\bn_\bu_\bm_\bV_\be_\br_\bt_\bs_\bP_\be_\br_\bF_\ba_\bc_\be;\n+_\b5_\b5 _\bI_\bn_\bd_\be_\bx const * _\bv_\be_\br_\bt_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bP_\be_\br_\bF_\ba_\bc_\be;\n+56\n+_\b5_\b7 int _\bn_\bu_\bm_\bC_\br_\be_\ba_\bs_\be_\bs;\n+_\b5_\b8 _\bI_\bn_\bd_\be_\bx const * _\bc_\br_\be_\ba_\bs_\be_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br_\bs;\n+_\b5_\b9 float const * _\bc_\br_\be_\ba_\bs_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs;\n 60\n-_\b6_\b2 int _\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const { return _level->getNumVertices(); }\n-63\n-_\b6_\b5 int _\bG_\be_\bt_\bN_\bu_\bm_\bF_\ba_\bc_\be_\bs() const { return _level->getNumFaces(); }\n-66\n-_\b6_\b8 int _\bG_\be_\bt_\bN_\bu_\bm_\bE_\bd_\bg_\be_\bs() const { return _level->getNumEdges(); }\n+_\b6_\b1 int _\bn_\bu_\bm_\bC_\bo_\br_\bn_\be_\br_\bs;\n+_\b6_\b2 _\bI_\bn_\bd_\be_\bx const * _\bc_\bo_\br_\bn_\be_\br_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs;\n+_\b6_\b3 float const * _\bc_\bo_\br_\bn_\be_\br_\bW_\be_\bi_\bg_\bh_\bt_\bs;\n+64\n+_\b6_\b5 int _\bn_\bu_\bm_\bH_\bo_\bl_\be_\bs;\n+_\b6_\b6 _\bI_\bn_\bd_\be_\bx const * _\bh_\bo_\bl_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs;\n+67\n+_\b6_\b8 bool _\bi_\bs_\bL_\be_\bf_\bt_\bH_\ba_\bn_\bd_\be_\bd;\n 69\n-_\b7_\b1 int _\bG_\be_\bt_\bN_\bu_\bm_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const { return _level->getNumFaceVerticesTotal(); }\n-73\n-75\n-90 //\n-91\n-_\b9_\b3 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(_\bI_\bn_\bd_\be_\bx f) const { return _level-\n->getFaceVertices(f); }\n-94\n-_\b9_\b6 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bF_\ba_\bc_\be_\bE_\bd_\bg_\be_\bs(_\bI_\bn_\bd_\be_\bx f) const { return _level->getFaceEdges\n-(f); }\n-97\n-_\b9_\b9 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bE_\bd_\bg_\be_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(_\bI_\bn_\bd_\be_\bx e) const { return _level-\n->getEdgeVertices(e); }\n-100\n-_\b1_\b0_\b2 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bE_\bd_\bg_\be_\bF_\ba_\bc_\be_\bs(_\bI_\bn_\bd_\be_\bx e) const { return _level->getEdgeFaces\n-(e); }\n+70 // Face-varying data channel -- value indices correspond to vertex indices,\n+71 // i.e. one for every vertex of every face:\n+72 //\n+_\b7_\b3 struct _\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl {\n+74\n+_\b7_\b5 int _\bn_\bu_\bm_\bV_\ba_\bl_\bu_\be_\bs;\n+_\b7_\b6 _\bI_\bn_\bd_\be_\bx const * _\bv_\ba_\bl_\bu_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs;\n+77\n+_\b7_\b8 _\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl() : _\bn_\bu_\bm_\bV_\ba_\bl_\bu_\be_\bs(0), _\bv_\ba_\bl_\bu_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs(0) { }\n+79 };\n+80\n+_\b8_\b1 int _\bn_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs;\n+_\b8_\b2 _\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl const * _\bf_\bv_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs;\n+83\n+_\b8_\b4 _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br();\n+85};\n+86\n+87\n+88//\n+89// Forward declarations of required\n+TopologyRefinerFactory\n+90// specializations (defined internally):\n+91//\n+92// @cond EXCLUDE_DOXYGEN\n+93\n+94template <>\n+95bool\n+96_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b>_\b:_\b:_\br_\be_\bs_\bi_\bz_\be_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by(\n+97 _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br & refiner, _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const & desc);\n+98\n+99template <>\n+100bool\n+101_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by(\n+102 _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br & refiner, _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const & desc);\n 103\n-_\b1_\b0_\b5 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bF_\ba_\bc_\be_\bs(_\bI_\bn_\bd_\be_\bx v) const { return _level-\n->getVertexFaces(v); }\n-106\n-_\b1_\b0_\b8 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bE_\bd_\bg_\be_\bs(_\bI_\bn_\bd_\be_\bx v) const { return _level-\n->getVertexEdges(v); }\n-109\n-_\b1_\b1_\b1 _\bC_\bo_\bn_\bs_\bt_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bF_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs(_\bI_\bn_\bd_\be_\bx v) const { return\n-_level->getVertexFaceLocalIndices(v); }\n-112\n-_\b1_\b1_\b4 _\bC_\bo_\bn_\bs_\bt_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bE_\bd_\bg_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs(_\bI_\bn_\bd_\be_\bx v) const { return\n-_level->getVertexEdgeLocalIndices(v); }\n-115\n-_\b1_\b1_\b7 _\bC_\bo_\bn_\bs_\bt_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bE_\bd_\bg_\be_\bF_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs(_\bI_\bn_\bd_\be_\bx e) const { return\n-_level->getEdgeFaceLocalIndices(e); }\n+104template <>\n+105bool\n+106_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bT_\ba_\bg_\bs(\n+107 _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br & refiner, _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const & desc);\n+108\n+109template <>\n+110bool\n+111_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by(\n+112 _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br & refiner, _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const & desc);\n+113\n+114template <>\n+115void\n+116_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b>_\b:_\b:_\br_\be_\bp_\bo_\br_\bt_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by(\n+117 TopologyError errCode, char const * msg, _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const & desc);\n 118\n-_\b1_\b2_\b0 _\bI_\bn_\bd_\be_\bx _\bF_\bi_\bn_\bd_\bE_\bd_\bg_\be(_\bI_\bn_\bd_\be_\bx v0, _\bI_\bn_\bd_\be_\bx v1) const { return _level->findEdge(v0, v1);\n-}\n+119// @endcond\n+120\n+121} // end namespace Far\n 122\n-124\n+123} // end namespace OPENSUBDIV_VERSION\n+124using namespace OPENSUBDIV_VERSION;\n+125} // end namespace OpenSubdiv\n 126\n-_\b1_\b2_\b8 bool _\bI_\bs_\bE_\bd_\bg_\be_\bN_\bo_\bn_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd(_\bI_\bn_\bd_\be_\bx e) const { return _level->isEdgeNonManifold\n-(e); }\n-129\n-_\b1_\b3_\b1 bool _\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bN_\bo_\bn_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd(_\bI_\bn_\bd_\be_\bx v) const { return _level-\n->isVertexNonManifold(v); }\n-132\n-_\b1_\b3_\b4 bool _\bI_\bs_\bE_\bd_\bg_\be_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by(_\bI_\bn_\bd_\be_\bx e) const { return _level->getEdgeTag\n-(e)._boundary; }\n-135\n-_\b1_\b3_\b7 bool _\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by(_\bI_\bn_\bd_\be_\bx v) const { return _level->getVertexTag\n-(v)._boundary; }\n-138\n-_\b1_\b4_\b0 bool _\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\br_\bn_\be_\br(_\bI_\bn_\bd_\be_\bx v) const { return (_level->getNumVertexFaces(v)\n-== 1); }\n-141\n-_\b1_\b6_\b2 bool _\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be_\bR_\be_\bg_\bu_\bl_\ba_\br(_\bI_\bn_\bd_\be_\bx v) const { return !_level->getVertexTag\n-(v)._xordinary || _\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\br_\bn_\be_\br(v); }\n-164\n-166\n-171\n-_\b1_\b7_\b3 float _\bG_\be_\bt_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(_\bI_\bn_\bd_\be_\bx e) const { return _level->getEdgeSharpness(e);\n-}\n-174\n-_\b1_\b7_\b6 float _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(_\bI_\bn_\bd_\be_\bx v) const { return _level->getVertexSharpness\n-(v); }\n-177\n-_\b1_\b7_\b9 bool _\bI_\bs_\bE_\bd_\bg_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp(_\bI_\bn_\bd_\be_\bx e) const { return _level->getEdgeTag\n-(e)._infSharp; }\n-180\n-_\b1_\b8_\b2 bool _\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp(_\bI_\bn_\bd_\be_\bx v) const { return _level->getVertexTag\n-(v)._infSharp; }\n-183\n-_\b1_\b8_\b5 bool _\bI_\bs_\bE_\bd_\bg_\be_\bS_\be_\bm_\bi_\bS_\bh_\ba_\br_\bp(_\bI_\bn_\bd_\be_\bx e) const { return _level->getEdgeTag\n-(e)._semiSharp; }\n-186\n-_\b1_\b8_\b8 bool _\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bS_\be_\bm_\bi_\bS_\bh_\ba_\br_\bp(_\bI_\bn_\bd_\be_\bx v) const { return _level->getVertexTag\n-(v)._semiSharp; }\n-189\n-_\b1_\b9_\b1 bool _\bI_\bs_\bF_\ba_\bc_\be_\bH_\bo_\bl_\be(_\bI_\bn_\bd_\be_\bx f) const { return _level->isFaceHole(f); }\n-192\n-_\b1_\b9_\b4 _\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bR_\bu_\bl_\be(_\bI_\bn_\bd_\be_\bx v) const { return _level-\n->getVertexRule(v); }\n-196\n-198\n-228\n-_\b2_\b3_\b0 int _\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs() const { return _level->getNumFVarChannels(); }\n-231\n-_\b2_\b3_\b4 int _\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bs(int channel = 0) const { return _level-\n->getNumFVarValues(channel); }\n-235\n-_\b2_\b3_\b7 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bF_\ba_\bc_\be_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bs(_\bI_\bn_\bd_\be_\bx f, int channel = 0) const {\n-238 return _level->getFaceFVarValues(f, channel);\n-239 }\n-240\n-_\b2_\b4_\b2 bool _\bD_\bo_\be_\bs_\bV_\be_\br_\bt_\be_\bx_\bF_\bV_\ba_\br_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bM_\ba_\bt_\bc_\bh(_\bI_\bn_\bd_\be_\bx v, int channel = 0) const {\n-243 return _level->doesVertexFVarTopologyMatch(v, channel);\n-244 }\n-245\n-_\b2_\b4_\b7 bool _\bD_\bo_\be_\bs_\bE_\bd_\bg_\be_\bF_\bV_\ba_\br_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bM_\ba_\bt_\bc_\bh(_\bI_\bn_\bd_\be_\bx e, int channel = 0) const {\n-248 return _level->doesEdgeFVarTopologyMatch(e, channel);\n-249 }\n-250\n-_\b2_\b5_\b2 bool _\bD_\bo_\be_\bs_\bF_\ba_\bc_\be_\bF_\bV_\ba_\br_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bM_\ba_\bt_\bc_\bh(_\bI_\bn_\bd_\be_\bx f, int channel = 0) const {\n-253 return _level->doesFaceFVarTopologyMatch(f, channel);\n-254 }\n-255\n-257\n-259\n-260\n-_\b2_\b6_\b2 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bF_\ba_\bc_\be_\bC_\bh_\bi_\bl_\bd_\bF_\ba_\bc_\be_\bs(_\bI_\bn_\bd_\be_\bx f) const { return _refToChild-\n->getFaceChildFaces(f); }\n-263\n-_\b2_\b6_\b5 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bF_\ba_\bc_\be_\bC_\bh_\bi_\bl_\bd_\bE_\bd_\bg_\be_\bs(_\bI_\bn_\bd_\be_\bx f) const { return _refToChild-\n->getFaceChildEdges(f); }\n-266\n-_\b2_\b6_\b8 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bE_\bd_\bg_\be_\bC_\bh_\bi_\bl_\bd_\bE_\bd_\bg_\be_\bs(_\bI_\bn_\bd_\be_\bx e) const { return _refToChild-\n->getEdgeChildEdges(e); }\n-269\n-_\b2_\b7_\b1 _\bI_\bn_\bd_\be_\bx _\bG_\be_\bt_\bF_\ba_\bc_\be_\bC_\bh_\bi_\bl_\bd_\bV_\be_\br_\bt_\be_\bx( _\bI_\bn_\bd_\be_\bx f) const { return _refToChild-\n->getFaceChildVertex(f); }\n-272\n-_\b2_\b7_\b4 _\bI_\bn_\bd_\be_\bx _\bG_\be_\bt_\bE_\bd_\bg_\be_\bC_\bh_\bi_\bl_\bd_\bV_\be_\br_\bt_\be_\bx( _\bI_\bn_\bd_\be_\bx e) const { return _refToChild-\n->getEdgeChildVertex(e); }\n-275\n-_\b2_\b7_\b7 _\bI_\bn_\bd_\be_\bx _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bC_\bh_\bi_\bl_\bd_\bV_\be_\br_\bt_\be_\bx(_\bI_\bn_\bd_\be_\bx v) const { return _refToChild-\n->getVertexChildVertex(v); }\n-278\n-_\b2_\b8_\b0 _\bI_\bn_\bd_\be_\bx _\bG_\be_\bt_\bF_\ba_\bc_\be_\bP_\ba_\br_\be_\bn_\bt_\bF_\ba_\bc_\be(_\bI_\bn_\bd_\be_\bx f) const { return _refToParent-\n->getChildFaceParentFace(f); }\n-282\n-284\n-285\n-_\b2_\b8_\b6 bool _\bV_\ba_\bl_\bi_\bd_\ba_\bt_\be_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by() const { return _level->validateTopology(); }\n-_\b2_\b8_\b7 void _\bP_\br_\bi_\bn_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by(bool children = true) const { _level->print((children &&\n-_refToChild) ? _refToChild : 0); }\n-289\n-290\n-291private:\n-_\b2_\b9_\b2 friend class _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br;\n-293\n-294 Vtr::internal::Level const * _level;\n-295 Vtr::internal::Refinement const * _refToParent;\n-296 Vtr::internal::Refinement const * _refToChild;\n-297\n-298public:\n-299 // Not intended for public use, but required by std::vector, etc...\n-_\b3_\b0_\b0 _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl() { }\n-_\b3_\b0_\b1 _\b~_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl() { }\n-302};\n-303\n-304} // end namespace Far\n-305\n-306} // end namespace OPENSUBDIV_VERSION\n-307using namespace OPENSUBDIV_VERSION;\n-308} // end namespace OpenSubdiv\n-309\n-310#endif /* OPENSUBDIV3_FAR_TOPOLOGY_LEVEL_H */\n+127#endif /* OPENSUBDIV3_FAR_TOPOLOGY_DESCRIPTOR_H */\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bI_\bn_\bd_\be_\bx\n Vtr::Index Index\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b4_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl\n-An interface for accessing data in a specific level of a refined topology\n-hierarchy.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b4_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bP_\ba_\br_\be_\bn_\bt_\bF_\ba_\bc_\be\n-Index GetFaceParentFace(Index f) const\n-Return the parent face (in the previous level) of a given face.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b8_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl\n-TopologyLevel()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b3_\b0_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be_\bR_\be_\bg_\bu_\bl_\ba_\br\n-bool IsVertexValenceRegular(Index v) const\n-Return if the valence of the vertex is regular (must be manifold)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b6_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n-float GetEdgeSharpness(Index e) const\n-Return the sharpness assigned a given edge.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b7_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bD_\bo_\be_\bs_\bF_\ba_\bc_\be_\bF_\bV_\ba_\br_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bM_\ba_\bt_\bc_\bh\n-bool DoesFaceFVarTopologyMatch(Index f, int channel=0) const\n-Return if face-varying topology around a face matches.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b5_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bR_\bu_\bl_\be\n-Sdc::Crease::Rule GetVertexRule(Index v) const\n-Return the subdivision rule assigned a given vertex specific to this level.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b9_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\br_\bn_\be_\br\n-bool IsVertexCorner(Index v) const\n-Return if the vertex is a corner (only one incident face)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b4_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bC_\bh_\bi_\bl_\bd_\bV_\be_\br_\bt_\be_\bx\n-Index GetVertexChildVertex(Index v) const\n-Return the child vertex (in the next level) of a given vertex.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b7_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bE_\bd_\bg_\be_\bF_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-ConstLocalIndexArray GetEdgeFaceLocalIndices(Index e) const\n-Access the local indices of an edge with respect to its incident faces.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b1_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bC_\bh_\bi_\bl_\bd_\bE_\bd_\bg_\be_\bs\n-ConstIndexArray GetFaceChildEdges(Index f) const\n-Access the child edges (in the next level) of a given face.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b6_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bD_\bo_\be_\bs_\bE_\bd_\bg_\be_\bF_\bV_\ba_\br_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bM_\ba_\bt_\bc_\bh\n-bool DoesEdgeFVarTopologyMatch(Index e, int channel=0) const\n-Return if face-varying topology across the edge only matches.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b4_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by\n-void PrintTopology(bool children=true) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b8_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-ConstIndexArray GetFaceVertices(Index f) const\n-Access the vertices incident a given face.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b9_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bC_\bh_\bi_\bl_\bd_\bF_\ba_\bc_\be_\bs\n-ConstIndexArray GetFaceChildFaces(Index f) const\n-Access the child faces (in the next level) of a given face.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b6_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bE_\bd_\bg_\be_\bs\n-int GetNumEdges() const\n-Return the number of edges in this level.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b6_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bV_\ba_\bl_\bi_\bd_\ba_\bt_\be_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by\n-bool ValidateTopology() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b8_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bI_\bs_\bE_\bd_\bg_\be_\bN_\bo_\bn_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n-bool IsEdgeNonManifold(Index e) const\n-Return if the edge is non-manifold.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b2_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bI_\bs_\bF_\ba_\bc_\be_\bH_\bo_\bl_\be\n-bool IsFaceHole(Index f) const\n-Return if a given face has been tagged as a hole.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b9_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bE_\bd_\bg_\be_\bs\n-ConstIndexArray GetVertexEdges(Index v) const\n-Access the edges incident a given vertex.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b0_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bC_\bh_\bi_\bl_\bd_\bV_\be_\br_\bt_\be_\bx\n-Index GetFaceChildVertex(Index f) const\n-Return the child vertex (in the next level) of a given face.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b7_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bD_\bo_\be_\bs_\bV_\be_\br_\bt_\be_\bx_\bF_\bV_\ba_\br_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bM_\ba_\bt_\bc_\bh\n-bool DoesVertexFVarTopologyMatch(Index v, int channel=0) const\n-Return if face-varying topology around a vertex matches.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b4_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bE_\bd_\bg_\be_\bC_\bh_\bi_\bl_\bd_\bE_\bd_\bg_\be_\bs\n-ConstIndexArray GetEdgeChildEdges(Index e) const\n-Access the child edges (in the next level) of a given edge.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b6_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bI_\bs_\bE_\bd_\bg_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp\n-bool IsEdgeInfSharp(Index e) const\n-Return if the edge is infinitely-sharp.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b7_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bF_\ba_\bc_\be_\bs\n-ConstIndexArray GetVertexFaces(Index v) const\n-Access the faces incident a given vertex.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b0_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bF_\bi_\bn_\bd_\bE_\bd_\bg_\be\n-Index FindEdge(Index v0, Index v1) const\n-Identify the edge matching the given vertex pair.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b2_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bE_\bd_\bg_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-ConstLocalIndexArray GetVertexEdgeLocalIndices(Index v) const\n-Access the local indices of a vertex with respect to its incident edges.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b1_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bE_\bd_\bg_\be_\bs\n-ConstIndexArray GetFaceEdges(Index f) const\n-Access the edges incident a given face.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b9_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\ba_\bc_\be_\bs\n-int GetNumFaces() const\n-Return the number of faces in this level.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b6_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by\n-bool IsVertexBoundary(Index v) const\n-Return if the vertex is on a boundary (at least one incident boundary edge)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b3_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs\n-int GetNumFVarChannels() const\n-Return the number of face-varying channels (should be same for all levels)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b3_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-int GetNumVertices() const\n-Return the number of vertices in this level.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b6_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bE_\bd_\bg_\be_\bF_\ba_\bc_\be_\bs\n-ConstIndexArray GetEdgeFaces(Index e) const\n-Access the faces incident a given edge.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b0_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bF_\ba_\bc_\be_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bs\n-ConstIndexArray GetFaceFVarValues(Index f, int channel=0) const\n-Access the face-varying values associated with a particular face.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b3_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bE_\bd_\bg_\be_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-ConstIndexArray GetEdgeVertices(Index e) const\n-Access the vertices incident a given edge.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b9_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bI_\bs_\bE_\bd_\bg_\be_\bS_\be_\bm_\bi_\bS_\bh_\ba_\br_\bp\n-bool IsEdgeSemiSharp(Index e) const\n-Return if the edge is semi-sharp.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b8_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\b~_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl\n-~TopologyLevel()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b3_\b0_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n-float GetVertexSharpness(Index v) const\n-Return the sharpness assigned a given vertex.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b7_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bE_\bd_\bg_\be_\bC_\bh_\bi_\bl_\bd_\bV_\be_\br_\bt_\be_\bx\n-Index GetEdgeChildVertex(Index e) const\n-Return the child vertex (in the next level) of a given edge.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b7_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bS_\be_\bm_\bi_\bS_\bh_\ba_\br_\bp\n-bool IsVertexSemiSharp(Index v) const\n-Return if the vertex is semi-sharp.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b8_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-int GetNumFaceVertices() const\n-Return the total number of face-vertices, i.e. the sum of all vertices for all\n-faces.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b7_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bN_\bo_\bn_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n-bool IsVertexNonManifold(Index v) const\n-Return if the vertex is non-manifold.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b3_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bI_\bs_\bE_\bd_\bg_\be_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by\n-bool IsEdgeBoundary(Index e) const\n-Return if the edge is a boundary (only one incident face)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b3_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bI_\bs_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp\n-bool IsVertexInfSharp(Index v) const\n-Return if the vertex is infinitely-sharp.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b8_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bs\n-int GetNumFVarValues(int channel=0) const\n-Return the total number of face-varying values in a particular channel (the\n-upper bound of a face-var...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b2_\b3_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bF_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-ConstLocalIndexArray GetVertexFaceLocalIndices(Index v) const\n-Access the local indices of a vertex with respect to its incident faces.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b1_\b1_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+A simple reference to raw topology data for use with TopologyRefinerFactory.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bf_\bv_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs\n+FVarChannel const * fvarChannels\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b8_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bn_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+int numVertices\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bc_\bo_\br_\bn_\be_\br_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+Index const * cornerVertexIndices\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bv_\be_\br_\bt_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bP_\be_\br_\bF_\ba_\bc_\be\n+Index const * vertIndicesPerFace\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bc_\br_\be_\ba_\bs_\be_\bV_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br_\bs\n+Index const * creaseVertexIndexPairs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bh_\bo_\bl_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+Index const * holeIndices\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bn_\bu_\bm_\bF_\ba_\bc_\be_\bs\n+int numFaces\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bn_\bu_\bm_\bC_\bo_\br_\bn_\be_\br_\bs\n+int numCorners\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bc_\bo_\br_\bn_\be_\br_\bW_\be_\bi_\bg_\bh_\bt_\bs\n+float const * cornerWeights\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bi_\bs_\bL_\be_\bf_\bt_\bH_\ba_\bn_\bd_\be_\bd\n+bool isLeftHanded\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bn_\bu_\bm_\bV_\be_\br_\bt_\bs_\bP_\be_\br_\bF_\ba_\bc_\be\n+int const * numVertsPerFace\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+TopologyDescriptor()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bc_\br_\be_\ba_\bs_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs\n+float const * creaseWeights\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bn_\bu_\bm_\bC_\br_\be_\ba_\bs_\be_\bs\n+int numCreases\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bn_\bu_\bm_\bH_\bo_\bl_\be_\bs\n+int numHoles\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bn_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs\n+int numFVarChannels\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b8_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b7_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\b:_\b:\n+_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl\n+FVarChannel()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b7_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\b:_\b:\n+_\bv_\ba_\bl_\bu_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+Index const * valueIndices\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b7_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\b:_\b:_\bn_\bu_\bm_\bV_\ba_\bl_\bu_\be_\bs\n+int numValues\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b7_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n+_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by\n+static bool assignComponentTopology(TopologyRefiner &newRefiner, MESH const\n+&mesh)\n+Specify the relationships between vertices, faces, etc. ie the face-vertices,\n+vertex-faces,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b6_\b2_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n+_\br_\be_\bp_\bo_\br_\bt_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by\n+static void reportInvalidTopology(TopologyError errCode, char const *msg, MESH\n+const &mesh)\n+(Optional) Control run-time topology validation and error reporting\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b7_\b0_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n+_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bT_\ba_\bg_\bs\n+static bool assignComponentTags(TopologyRefiner &newRefiner, MESH const &mesh)\n+(Optional) Specify edge or vertex sharpness or face holes\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b6_\b9_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n+_\br_\be_\bs_\bi_\bz_\be_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by\n+static bool resizeComponentTopology(TopologyRefiner &newRefiner, MESH const\n+&mesh)\n+Specify the number of vertices, faces, face-vertices, etc.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b5_\b8_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n+_\ba_\bs_\bs_\bi_\bg_\bn_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by\n+static bool assignFaceVaryingTopology(TopologyRefiner &newRefiner, MESH const\n+&mesh)\n+(Optional) Specify face-varying data per face\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b6_\b7_\b4\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br\n Stores topology data for a specified set of refinement options.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b5_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be\n-Rule\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b5_\b3\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bf_\ba_\br\n- * _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh\n+ * _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00716.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00716.html", "unified_diff": "@@ -94,15 +94,15 @@\n \n
stencilTableFactory.h File Reference
\n \n
\n
#include "../version.h"
\n-#include "../far/patchTable.h"
\n+#include "../far/patchTable.h"
\n #include <vector>
\n
\n

Go to the source code of this file.

\n \n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00716_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00716_source.html", "unified_diff": "@@ -403,16 +403,16 @@\n
378
\n
379} // end namespace OPENSUBDIV_VERSION
\n
380using namespace OPENSUBDIV_VERSION;
\n
381
\n
382} // end namespace OpenSubdiv
\n
383
\n
384#endif // OPENSUBDIV3_FAR_STENCILTABLE_FACTORY_H
\n-\n-
Container for arrays of parametric patches.
Definition patchTable.h:55
\n+\n+
Container for arrays of parametric patches.
Definition patchTable.h:55
\n \n
static StencilTableReal< REAL > const * Create(TopologyRefiner const &refiner, Options options=Options())
Instantiates StencilTable from TopologyRefiner that have been refined uniformly or adaptively.
\n
static StencilTableReal< REAL > const * AppendLocalPointStencilTableFaceVarying(TopologyRefiner const &refiner, StencilTableReal< REAL > const *baseStencilTable, StencilTableReal< REAL > const *localPointStencilTable, int channel=0, bool factorize=true)
Utility function for stencil splicing for local point face-varying stencils.
\n \n \n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00719_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00719_source.html", "unified_diff": "@@ -900,15 +900,15 @@\n \n \n \n \n \n \n \n-\n+\n \n \n \n \n \n \n
StencilReal(int *size, Index *indices, REAL *weights)
Constructor.
\n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00722_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00722_source.html", "unified_diff": "@@ -172,15 +172,15 @@\n
100} // end namespace Far
\n
101
\n
102} // end namespace OPENSUBDIV_VERSION
\n
103using namespace OPENSUBDIV_VERSION;
\n
104} // end namespace OpenSubdiv
\n
105
\n
106#endif /* OPENSUBDIV3_FAR_PTEX_INDICES_H */
\n-\n+\n \n
Object used to compute and query ptex face indices.
Definition ptexIndices.h:46
\n
int GetFaceId(Index f) const
Returns the ptex face index given a coarse face 'f' or -1.
\n
PtexIndices(TopologyRefiner const &refiner)
Constructor.
\n
void GetAdjacency(TopologyRefiner const &refiner, int face, int quadrant, int adjFaces[4], int adjEdges[4]) const
Returns ptex face adjacency information for a given coarse face.
\n
int GetNumFaces() const
Returns the number of ptex faces in the mesh.
\n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00725.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00725.html", "unified_diff": "@@ -95,27 +95,27 @@\n Classes |\n Namespaces\n
primvarRefiner.h File Reference
\n \n
\n
#include "../version.h"
\n #include "../sdc/types.h"
\n-#include "../sdc/options.h"
\n-#include "../sdc/bilinearScheme.h"
\n-#include "../sdc/catmarkScheme.h"
\n+#include "../sdc/options.h"
\n+#include "../sdc/bilinearScheme.h"
\n+#include "../sdc/catmarkScheme.h"
\n #include "../sdc/loopScheme.h"
\n #include "../vtr/level.h"
\n-#include "../vtr/fvarLevel.h"
\n+#include "../vtr/fvarLevel.h"
\n #include "../vtr/refinement.h"
\n-#include "../vtr/fvarRefinement.h"
\n+#include "../vtr/fvarRefinement.h"
\n #include "../vtr/stackBuffer.h"
\n-#include "../vtr/componentInterfaces.h"
\n+#include "../vtr/componentInterfaces.h"
\n #include "../far/types.h"
\n-#include "../far/error.h"
\n-#include "../far/topologyLevel.h"
\n+#include "../far/error.h"
\n+#include "../far/topologyLevel.h"
\n #include "../far/topologyRefiner.h"
\n #include <cassert>
\n
\n

Go to the source code of this file.

\n

\n Classes

class  StencilTableFactoryReal< REAL >
\n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00725_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00725_source.html", "unified_diff": "@@ -1302,20 +1302,20 @@\n \n \n \n \n \n \n \n-\n+\n \n
void Error(ErrorType err, const char *format,...)
Sends an OSD error with a message (internal use only)
\n
Vtr::ConstIndexArray ConstIndexArray
Definition types.h:47
\n
Vtr::ConstLocalIndexArray ConstLocalIndexArray
Definition types.h:48
\n-
@ FAR_RUNTIME_ERROR
Issue a generic runtime error, but continue execution.
Definition error.h:40
\n+
@ FAR_RUNTIME_ERROR
Issue a generic runtime error, but continue execution.
Definition error.h:40
\n \n \n
bool IndexIsValid(Index index)
Definition types.h:58
\n \n \n \n
Applies refinement operations to generic primvar data.
\n@@ -1328,19 +1328,19 @@\n
void Interpolate(int level, T const &src, U &dst) const
Apply vertex interpolation weights to a primvar buffer for a single level of refinement.
\n
void InterpolateFaceVarying(int level, T const &src, U &dst, int channel=0) const
Apply face-varying interpolation weights to a primvar buffer associated with a particular face-varyin...
\n \n
void LimitFaceVarying(T const &src, U &dst, int channel=0) const
\n \n \n
Stores topology data for a specified set of refinement options.
\n-\n-\n-
Scheme is a class template which provides all implementation for the subdivision schemes supported by...
Definition scheme.h:66
\n-\n-\n+\n+\n+
Scheme is a class template which provides all implementation for the subdivision schemes supported by...
Definition scheme.h:66
\n+\n+\n \n \n \n
\n
    \n
  • opensubdiv
  • far
  • primvarRefiner.h
  • \n
  • Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by \"doxygen\"/ 1.9.8
  • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00728.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00728.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/far/patchTable.h File Reference\n+OpenSubdiv: opensubdiv/far/patchTableFactory.h File Reference\n \n \n \n \n \n \n \n@@ -90,33 +90,33 @@\n
\n \n \n
\n \n-
patchTable.h File Reference
\n+
patchTableFactory.h File Reference
\n
\n
\n
#include "../version.h"
\n-#include "../far/patchDescriptor.h"
\n-#include "../far/patchParam.h"
\n-#include "../far/stencilTable.h"
\n-#include "../sdc/options.h"
\n-#include <vector>
\n+#include "../far/topologyRefiner.h"
\n+#include "../far/patchTable.h"
\n
\n

Go to the source code of this file.

\n

\n Classes

\n \n-\n-\n+\n+\n \n-\n-\n+\n+\n+\n+\n+\n \n

\n Classes

class  PatchTable
 Container for arrays of parametric patches. More...
class  PatchTableFactory
 Factory for constructing a PatchTable from a TopologyRefiner. More...
 
class  PatchTable::PatchHandle
 Handle that can be used as unique patch identifier within PatchTable. More...
struct  PatchTableFactory::Options
 Public options for the PatchTable factory. More...
 
struct  PatchTableFactory::PatchFaceTag
 Obsolete internal struct not intended for public use – due to be deprecated. More...
 
\n \n \n \n \n@@ -125,13 +125,13 @@\n \n

\n Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +1,32 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-patchTable.h File Reference\n+patchTableFactory.h File Reference\n #include \"../version.h\"\n-#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\"\n-#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\b._\bh\"\n-#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b._\bh\"\n-#include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\"\n-#include \n+#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh\"\n+#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-\u00a0 Container for arrays of parametric patches. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by\n+\u00a0 Factory for constructing a _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be from a _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-class \u00a0 _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be\n-\u00a0 Handle that can be used as unique patch identifier within _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n+\u00a0 Public options for the _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be factory. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg\n+\u00a0 Obsolete internal struct not intended for public use \u2013 due to be\n+ deprecated. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bf_\ba_\br\n- * _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n+ * _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00728.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00728.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,5 @@\n var a00728 = [\n- [\"PatchTable\", \"a00993.html\", \"a00993\"],\n- [\"PatchHandle\", \"a00997.html\", \"a00997\"]\n+ [\"PatchTableFactory\", \"a01009.html\", \"a01009\"],\n+ [\"Options\", \"a01013.html\", \"a01013\"],\n+ [\"PatchFaceTag\", \"a01017.html\", \"a01017\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00728_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00728_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/far/patchTable.h Source File\n+OpenSubdiv: opensubdiv/far/patchTableFactory.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
patchTable.h
\n+
patchTableFactory.h
\n
\n
\n Go to the documentation of this file.
1//
\n
2// Copyright 2013 Pixar
\n
3//
\n
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
\n
5// with the following modification; you may not use this file except in
\n@@ -119,747 +119,249 @@\n
18// Unless required by applicable law or agreed to in writing, software
\n
19// distributed under the Apache License with the above modification is
\n
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
\n
21// KIND, either express or implied. See the Apache License for the specific
\n
22// language governing permissions and limitations under the Apache License.
\n
23//
\n
24
\n-
25#ifndef OPENSUBDIV3_FAR_PATCH_TABLE_H
\n-
26#define OPENSUBDIV3_FAR_PATCH_TABLE_H
\n+
25#ifndef OPENSUBDIV3_FAR_PATCH_TABLE_FACTORY_H
\n+
26#define OPENSUBDIV3_FAR_PATCH_TABLE_FACTORY_H
\n
27
\n
28#include "../version.h"
\n
29
\n-
30#include "../far/patchDescriptor.h"
\n-
31#include "../far/patchParam.h"
\n-
32#include "../far/stencilTable.h"
\n-
33
\n-
34#include "../sdc/options.h"
\n+
30#include "../far/topologyRefiner.h"
\n+
31#include "../far/patchTable.h"
\n+
32
\n+
33namespace OpenSubdiv {
\n+
34namespace OPENSUBDIV_VERSION {
\n
35
\n-
36#include <vector>
\n+
36namespace Far {
\n
37
\n-
38namespace OpenSubdiv {
\n-
39namespace OPENSUBDIV_VERSION {
\n-
40
\n-
41namespace Far {
\n+
\n+\n+
41public:
\n
42
\n+
\n+
45 struct Options {
\n+
46
\n
\n-\n-
56
\n-
57public:
\n-
58
\n-
\n-\n-
61 // XXXX manuelk members will eventually be made private
\n-
62 public:
\n-
63
\n-
64 friend class PatchTable;
\n-
65 friend class PatchMap;
\n-
66
\n-
67 Index arrayIndex, // Array index of the patch
\n-
68 patchIndex, // Absolute Index of the patch
\n-
69 vertIndex; // Relative offset to the first CV of the patch in array
\n-
70 };
\n-
\n-
71
\n-
72public:
\n-
73
\n-
75 PatchTable(PatchTable const & src);
\n-
76
\n-\n-
79
\n-
81 bool IsFeatureAdaptive() const;
\n-
82
\n-
\n-\n-
85 return (int)_patchVerts.size();
\n-
86 }
\n-
\n-
87
\n-
89 int GetNumPatchesTotal() const;
\n-
90
\n-
92 int GetMaxValence() const { return _maxValence; }
\n-
93
\n-
95 int GetNumPtexFaces() const { return _numPtexFaces; }
\n-
96
\n-
97
\n-
99
\n-
105
\n-\n-
108
\n-\n-
111
\n-
113 PatchParam GetPatchParam(PatchHandle const & handle) const;
\n+\n+\n+\n+\n+\n+\n+
61 };
\n+
\n+
62
\n+
\n+
63 Options(unsigned int maxIsolation=10) :
\n+
64 generateAllLevels(false),
\n+\n+\n+
67 triangulateQuads(false),
\n+\n+
69 useInfSharpPatch(false),
\n+
70 maxIsolationLevel(maxIsolation & 0xf),
\n+\n+\n+\n+\n+
75 generateFVarTables(false),
\n+\n+\n+\n+\n+\n+\n+
82 { }
\n+
\n+
83
\n+\n+
86
\n+
88 void SetEndCapType(EndCapType e) { endCapType = e & 0x7; }
\n+
89
\n+
91 void SetMaxIsolationLevel(unsigned int level) { maxIsolationLevel = level & 0xf; }
\n+
92
\n+
94 template <typename REAL> void SetPatchPrecision();
\n+
95
\n+
97 template <typename REAL> void SetFVarPatchPrecision();
\n+
98
\n+
\n+\n+\n+
102
\n+
103 adaptiveOptions.useInfSharpPatch = useInfSharpPatch;
\n+\n+
105 adaptiveOptions.considerFVarChannels = generateFVarTables &&
\n+\n+
107 return adaptiveOptions;
\n+
108 }
\n+
\n+
109
\n+
110 unsigned int generateAllLevels : 1,
\n+\n+\n+\n
114
\n-
116 ConstIndexArray GetPatchVertices(int array, int patch) const;
\n-
117
\n-
119 PatchParam GetPatchParam(int array, int patch) const;
\n-
121
\n-
122
\n-
124
\n+\n+\n+\n+
118
\n+
119 // end-capping
\n+\n+\n+
123
\n+
124 // varying
\n+\n+\n+
127
\n+
128 // face-varying
\n+\n
130
\n-
132 int GetNumPatchArrays() const;
\n-
133
\n-
135 int GetNumPatches(int array) const;
\n-
136
\n-
138 int GetNumControlVertices(int array) const;
\n-
139
\n-\n+
131 // precision
\n+\n+\n+
134
\n+
135 // legacy behaviors (default to true)
\n+\n+\n+
138
\n+\n+
140 int const * fvarChannelIndices;
\n+
141 };
\n+
\n
142
\n-\n-
145
\n-
147 ConstPatchParamArray const GetPatchParams(int array) const;
\n-
149
\n-
150
\n-
152
\n-
159
\n-
161 int GetNumLocalPoints() const;
\n-
162
\n-\n-
165
\n-
167 template <typename REAL>
\n-\n-
169
\n-
172 template <typename REAL> bool LocalPointStencilPrecisionMatchesType() const;
\n-
173
\n-
186 template <class T> void
\n-
187 ComputeLocalPointValues(T const *src, T *dst) const;
\n-
188
\n-
189
\n-\n-
192
\n-\n-
195
\n-
197 template <typename REAL>
\n-\n-
199
\n-
202 template <typename REAL> bool LocalPointVaryingStencilPrecisionMatchesType() const;
\n-
203
\n-
216 template <class T> void
\n-
217 ComputeLocalPointValuesVarying(T const *src, T *dst) const;
\n+
175 static PatchTable * Create(TopologyRefiner const & refiner,
\n+
176 Options options = Options(),
\n+
177 ConstIndexArray selectedFaces = ConstIndexArray());
\n+
178
\n+
179public:
\n+
180 // PatchFaceTag
\n+
181 //
\n+
182 // This simple struct was previously used within the factory to take inventory of
\n+
183 // various kinds of patches to fully allocate buffers prior to populating them. It
\n+
184 // was not intended to be exposed as part of the public interface.
\n+
185 //
\n+
186 // It is no longer used internally and is being kept here to respect preservation
\n+
187 // of the public interface, but it will be deprecated at the earliest opportunity.
\n+
188 //
\n+
191 //
\n+
\n+\n+
193 public:
\n+
194 unsigned int _hasPatch : 1;
\n+
195 unsigned int _isRegular : 1;
\n+
196 unsigned int _transitionMask : 4;
\n+
197 unsigned int _boundaryMask : 4;
\n+
198 unsigned int _boundaryIndex : 2;
\n+
199 unsigned int _boundaryCount : 3;
\n+
200 unsigned int _hasBoundaryEdge : 3;
\n+
201 unsigned int _isSingleCrease : 1;
\n+
202
\n+
203 void clear();
\n+
204 void assignBoundaryPropertiesFromEdgeMask(int boundaryEdgeMask);
\n+
205 void assignBoundaryPropertiesFromVertexMask(int boundaryVertexMask);
\n+
206 void assignTransitionPropertiesFromEdgeMask(int boundaryVertexMask);
\n+
207 };
\n+
\n+
208 typedef std::vector<PatchFaceTag> PatchTagVector;
\n+
209};
\n+
\n+
210
\n+
211
\n+
\n+
212template <> inline void PatchTableFactory::Options::SetPatchPrecision<float>() {
\n+
213 patchPrecisionDouble = false;
\n+
214}
\n+
\n+
\n+
215template <> inline void PatchTableFactory::Options::SetFVarPatchPrecision<float>() {
\n+
216 fvarPatchPrecisionDouble = false;
\n+
217}
\n+
\n
218
\n-
219
\n-
221 int GetNumLocalPointsFaceVarying(int channel = 0) const;
\n-
222
\n-
224 StencilTable const *GetLocalPointFaceVaryingStencilTable(int channel = 0) const;
\n+
219template <> inline void PatchTableFactory::Options::SetPatchPrecision<double>() {
\n+
220 patchPrecisionDouble = true;
\n+
221}
\n+
222template <> inline void PatchTableFactory::Options::SetFVarPatchPrecision<double>() {
\n+
223 fvarPatchPrecisionDouble = true;
\n+
224}
\n
225
\n-
227 template <typename REAL>
\n-\n-
229
\n-
232 template <typename REAL> bool LocalPointFaceVaryingStencilPrecisionMatchesType() const;
\n+
226
\n+
227} // end namespace Far
\n+
228
\n+
229} // end namespace OPENSUBDIV_VERSION
\n+
230using namespace OPENSUBDIV_VERSION;
\n+
231
\n+
232} // end namespace OpenSubdiv
\n
233
\n-
248 template <class T> void
\n-
249 ComputeLocalPointValuesFaceVarying(T const *src, T *dst, int channel = 0) const;
\n-
251
\n-
252
\n-
254
\n-
255
\n-\n-
260
\n-\n-
263
\n-
264 typedef std::vector<Index> VertexValenceTable;
\n-
265
\n-
\n-\n-
268 return _vertexValenceTable;
\n-
269 }
\n-
\n-
271
\n-
272
\n-
274
\n-
280
\n-\n-
284
\n-
287 float GetSingleCreasePatchSharpnessValue(int array, int patch) const;
\n-
289
\n-
290
\n-
292
\n-
298
\n-\n-
301
\n-\n-
304
\n-
306 ConstIndexArray GetPatchVaryingVertices(int array, int patch) const;
\n-
307
\n-\n-
310
\n-\n-
314
\n-
315
\n-
317
\n-
323
\n-\n-
326
\n-\n-
329
\n-\n-
332
\n-\n-
335
\n-
337 ConstIndexArray GetPatchFVarValues(PatchHandle const & handle, int channel = 0) const;
\n-
338
\n-
340 ConstIndexArray GetPatchFVarValues(int array, int patch, int channel = 0) const;
\n-
341
\n-
343 ConstIndexArray GetPatchArrayFVarValues(int array, int channel = 0) const;
\n-
344
\n-
346 ConstIndexArray GetFVarValues(int channel = 0) const;
\n-
347
\n-
349 int GetFVarValueStride(int channel = 0) const;
\n-
350
\n-
352 PatchParam GetPatchFVarPatchParam(PatchHandle const & handle, int channel = 0) const;
\n-
353
\n-
355 PatchParam GetPatchFVarPatchParam(int array, int patch, int channel = 0) const;
\n-
356
\n-
358 ConstPatchParamArray GetPatchArrayFVarPatchParams(int array, int channel = 0) const;
\n-
359
\n-\n-
362
\n-\n-
366
\n-
367
\n-
369
\n-
374
\n-
375 typedef std::vector<Index> PatchVertsTable;
\n-
376
\n-
378 PatchVertsTable const & GetPatchControlVerticesTable() const { return _patchVerts; }
\n-
379
\n-
381 PatchParamTable const & GetPatchParamTable() const { return _paramTable; }
\n-
382
\n-
384 std::vector<Index> const &GetSharpnessIndexTable() const { return _sharpnessIndices; }
\n-
385
\n-
387 std::vector<float> const &GetSharpnessValues() const { return _sharpnessValues; }
\n-
388
\n-
389 typedef std::vector<unsigned int> QuadOffsetsTable;
\n-
390
\n-
\n-\n-
393 return _quadOffsetsTable;
\n-
394 }
\n-
\n-
396
\n-
398 void print() const;
\n-
399
\n-
400public:
\n-
401
\n-
403
\n-
405
\n-
428 template <typename REAL>
\n-
429 void EvaluateBasis(PatchHandle const & handle, REAL u, REAL v,
\n-
430 REAL wP[], REAL wDu[] = 0, REAL wDv[] = 0,
\n-
431 REAL wDuu[] = 0, REAL wDuv[] = 0, REAL wDvv[] = 0) const;
\n-
432
\n-
435 void EvaluateBasis(PatchHandle const & handle, float u, float v,
\n-
436 float wP[], float wDu[] = 0, float wDv[] = 0,
\n-
437 float wDuu[] = 0, float wDuv[] = 0, float wDvv[] = 0) const;
\n-
438
\n-
441 void EvaluateBasis(PatchHandle const & handle, double u, double v,
\n-
442 double wP[], double wDu[] = 0, double wDv[] = 0,
\n-
443 double wDuu[] = 0, double wDuv[] = 0, double wDvv[] = 0) const;
\n-
444
\n-
467 template <typename REAL>
\n-
468 void EvaluateBasisVarying(PatchHandle const & handle, REAL u, REAL v,
\n-
469 REAL wP[], REAL wDu[] = 0, REAL wDv[] = 0,
\n-
470 REAL wDuu[] = 0, REAL wDuv[] = 0, REAL wDvv[] = 0) const;
\n-
471
\n-
474 void EvaluateBasisVarying(PatchHandle const & handle, float u, float v,
\n-
475 float wP[], float wDu[] = 0, float wDv[] = 0,
\n-
476 float wDuu[] = 0, float wDuv[] = 0, float wDvv[] = 0) const;
\n-
477
\n-
480 void EvaluateBasisVarying(PatchHandle const & handle, double u, double v,
\n-
481 double wP[], double wDu[] = 0, double wDv[] = 0,
\n-
482 double wDuu[] = 0, double wDuv[] = 0, double wDvv[] = 0) const;
\n-
483
\n-
508 template <typename REAL>
\n-
509 void EvaluateBasisFaceVarying(PatchHandle const & handle, REAL u, REAL v,
\n-
510 REAL wP[], REAL wDu[] = 0, REAL wDv[] = 0,
\n-
511 REAL wDuu[] = 0, REAL wDuv[] = 0, REAL wDvv[] = 0,
\n-
512 int channel = 0) const;
\n-
513
\n-
516 void EvaluateBasisFaceVarying(PatchHandle const & handle, float u, float v,
\n-
517 float wP[], float wDu[] = 0, float wDv[] = 0,
\n-
518 float wDuu[] = 0, float wDuv[] = 0, float wDvv[] = 0,
\n-
519 int channel = 0) const;
\n-
520
\n-
523 void EvaluateBasisFaceVarying(PatchHandle const & handle, double u, double v,
\n-
524 double wP[], double wDu[] = 0, double wDv[] = 0,
\n-
525 double wDuu[] = 0, double wDuv[] = 0, double wDvv[] = 0,
\n-
526 int channel = 0) const;
\n-
528
\n-
529protected:
\n-
530
\n-
531 friend class PatchTableBuilder;
\n-
532
\n-
533 // Factory constructor
\n-
534 PatchTable(int maxvalence);
\n-
535
\n-
536 Index getPatchIndex(int array, int patch) const;
\n-
537
\n-\n-
539
\n-\n-
541 float * getSharpnessValues(Index arrayIndex);
\n-
542
\n-
543private:
\n-
544
\n-
545 //
\n-
546 // Patch arrays
\n-
547 //
\n-
548
\n-
549 struct PatchArray;
\n-
550 typedef std::vector<PatchArray> PatchArrayVector;
\n-
551
\n-
552 PatchArray & getPatchArray(Index arrayIndex);
\n-
553 PatchArray const & getPatchArray(Index arrayIndex) const;
\n-
554
\n-
555 void reservePatchArrays(int numPatchArrays);
\n-
556 void pushPatchArray(PatchDescriptor desc, int npatches,
\n-
557 Index * vidx, Index * pidx, Index * qoidx=0);
\n-
558
\n-
559 IndexArray getPatchArrayVertices(int arrayIndex);
\n-
560
\n-
561 Index findPatchArray(PatchDescriptor desc);
\n-
562
\n-
563
\n-
564 //
\n-
565 // Varying patch arrays
\n-
566 //
\n-
567 IndexArray getPatchArrayVaryingVertices(int arrayIndex);
\n-
568
\n-
569 void allocateVaryingVertices(
\n-
570 PatchDescriptor desc, int numPatches);
\n-
571 void populateVaryingVertices();
\n-
572
\n-
573 //
\n-
574 // Face-varying patch channels
\n-
575 //
\n-
576
\n-
577 struct FVarPatchChannel;
\n-
578 typedef std::vector<FVarPatchChannel> FVarPatchChannelVector;
\n-
579
\n-
580 FVarPatchChannel & getFVarPatchChannel(int channel);
\n-
581 FVarPatchChannel const & getFVarPatchChannel(int channel) const;
\n-
582
\n-
583 void allocateFVarPatchChannels(int numChannels);
\n-
584 void allocateFVarPatchChannelValues(
\n-
585 PatchDescriptor regDesc, PatchDescriptor irregDesc,
\n-
586 int numPatches, int channel);
\n-
587
\n-
588 // deprecated
\n-
589 void setFVarPatchChannelLinearInterpolation(
\n-
590 Sdc::Options::FVarLinearInterpolation interpolation, int channel);
\n-
591
\n-
592 IndexArray getFVarValues(int channel);
\n-
593 ConstIndexArray getPatchFVarValues(int patch, int channel) const;
\n-
594
\n-
595 PatchParamArray getFVarPatchParams(int channel);
\n-
596 PatchParam getPatchFVarPatchParam(int patch, int channel) const;
\n-
597
\n-
598private:
\n-
599 //
\n-
600 // Simple private class to hold stencil table pointers of varying precision,
\n-
601 // where the discriminant of the precision is external.
\n-
602 //
\n-
603 // NOTE that this is a simple pointer container and NOT a smart pointer that
\n-
604 // manages the ownership of the object referred to by it.
\n-
605 //
\n-
606 class StencilTablePtr {
\n-
607 private:
\n-
608 typedef StencilTableReal<float> float_type;
\n-
609 typedef StencilTableReal<double> double_type;
\n-
610
\n-
611 union {
\n-
612 float_type * _fPtr;
\n-
613 double_type * _dPtr;
\n-
614 };
\n-
615
\n-
616 public:
\n-
617 StencilTablePtr() { _fPtr = 0; }
\n-
618 StencilTablePtr(float_type * ptr) { _fPtr = ptr; }
\n-
619 StencilTablePtr(double_type * ptr) { _dPtr = ptr; }
\n-
620
\n-
621 operator bool() const { return _fPtr != 0; }
\n-
622
\n-
623 void Set() { _fPtr = 0; }
\n-
624 void Set(float_type * ptr) { _fPtr = ptr; }
\n-
625 void Set(double_type * ptr) { _dPtr = ptr; }
\n-
626
\n-
627 template <typename REAL> StencilTableReal<REAL> * Get() const;
\n-
628 };
\n-
629
\n-
630private:
\n-
631
\n-
632 //
\n-
633 // Topology
\n-
634 //
\n-
635
\n-
636 int _maxValence, // highest vertex valence found in the mesh
\n-
637 _numPtexFaces; // total number of ptex faces
\n-
638
\n-
639 PatchArrayVector _patchArrays; // Vector of descriptors for arrays of patches
\n-
640
\n-
641 std::vector<Index> _patchVerts; // Indices of the control vertices of the patches
\n-
642
\n-
643 PatchParamTable _paramTable; // PatchParam bitfields (one per patch)
\n-
644
\n-
645 //
\n-
646 // Extraordinary vertex closed-form evaluation / endcap basis conversion
\n-
647 //
\n-
648 // XXXtakahito: these data will probably be replaced with mask coefficient or something
\n-
649 // SchemeWorker populates.
\n-
650 //
\n-
651 QuadOffsetsTable _quadOffsetsTable; // Quad offsets (for Gregory patches)
\n-
652 VertexValenceTable _vertexValenceTable; // Vertex valence table (for Gregory patches)
\n-
653
\n-
654 StencilTablePtr _localPointStencils; // local point conversion stencils
\n-
655 StencilTablePtr _localPointVaryingStencils; // local point varying stencils
\n-
656
\n-
657 //
\n-
658 // Varying data
\n-
659 //
\n-
660 PatchDescriptor _varyingDesc;
\n-
661
\n-
662 std::vector<Index> _varyingVerts;
\n-
663
\n-
664 //
\n-
665 // Face-varying data
\n-
666 //
\n-
667 FVarPatchChannelVector _fvarChannels;
\n-
668
\n-
669 std::vector<StencilTablePtr> _localPointFaceVaryingStencils;
\n-
670
\n-
671 //
\n-
672 // 'single-crease' patch sharpness tables
\n-
673 //
\n-
674 std::vector<Index> _sharpnessIndices; // Indices of single-crease sharpness (one per patch)
\n-
675 std::vector<float> _sharpnessValues; // Sharpness values.
\n-
676
\n-
677 //
\n-
678 // Construction history -- relevant to at least one public query:
\n-
679 //
\n-
680 unsigned int _isUniformLinear : 1;
\n-
681
\n-
682 //
\n-
683 // Precision -- only applies to local-point stencil tables
\n-
684 //
\n-
685 unsigned int _vertexPrecisionIsDouble : 1;
\n-
686 unsigned int _varyingPrecisionIsDouble : 1;
\n-
687 unsigned int _faceVaryingPrecisionIsDouble : 1;
\n-
688};
\n-
\n-
689
\n-
690
\n-
691//
\n-
692// Template specializations for float/double -- to be defined before used:
\n-
693//
\n-
694template <> inline StencilTableReal<float> *
\n-
695PatchTable::StencilTablePtr::Get<float>() const { return _fPtr; }
\n-
696
\n-
697template <> inline StencilTableReal<double> *
\n-
698PatchTable::StencilTablePtr::Get<double>() const { return _dPtr; }
\n-
699
\n-
\n-
700template <> inline bool
\n-
701PatchTable::LocalPointStencilPrecisionMatchesType<float>() const {
\n-
702 return !_vertexPrecisionIsDouble;
\n-
703}
\n-
\n-
\n-
704template <> inline bool
\n-
705PatchTable::LocalPointVaryingStencilPrecisionMatchesType<float>() const {
\n-
706 return !_varyingPrecisionIsDouble;
\n-
707}
\n-
\n-
\n-
708template <> inline bool
\n-
709PatchTable::LocalPointFaceVaryingStencilPrecisionMatchesType<float>() const {
\n-
710 return !_faceVaryingPrecisionIsDouble;
\n-
711}
\n-
\n-
712
\n-
\n-
713template <> inline bool
\n-
714PatchTable::LocalPointStencilPrecisionMatchesType<double>() const {
\n-
715 return _vertexPrecisionIsDouble;
\n-
716}
\n-
\n-
\n-
717template <> inline bool
\n-
718PatchTable::LocalPointVaryingStencilPrecisionMatchesType<double>() const {
\n-
719 return _varyingPrecisionIsDouble;
\n-
720}
\n-
\n-
\n-
721template <> inline bool
\n-
722PatchTable::LocalPointFaceVaryingStencilPrecisionMatchesType<double>() const {
\n-
723 return _faceVaryingPrecisionIsDouble;
\n-
724}
\n-
\n-
725
\n-
726//
\n-
727// StencilTable access -- backward compatible and generic:
\n-
728//
\n-
729inline StencilTable const *
\n-
\n-\n-
731 assert(LocalPointStencilPrecisionMatchesType<float>());
\n-
732 return static_cast<StencilTable const *>(_localPointStencils.Get<float>());
\n-
733}
\n-
\n-
734inline StencilTable const *
\n-
\n-\n-
736 assert(LocalPointVaryingStencilPrecisionMatchesType<float>());
\n-
737 return static_cast<StencilTable const *>(
\n-
738 _localPointVaryingStencils.Get<float>());
\n-
739}
\n-
\n-
740inline StencilTable const *
\n-
\n-\n-
742 assert(LocalPointFaceVaryingStencilPrecisionMatchesType<float>());
\n-
743 if (channel >= 0 && channel < (int)_localPointFaceVaryingStencils.size()) {
\n-
744 return static_cast<StencilTable const *>(
\n-
745 _localPointFaceVaryingStencils[channel].Get<float>());
\n-
746 }
\n-
747 return NULL;
\n-
748}
\n-
\n-
749
\n-
750template <typename REAL>
\n-
751inline StencilTableReal<REAL> const *
\n-
\n-\n-
753 assert(LocalPointStencilPrecisionMatchesType<REAL>());
\n-
754 return _localPointStencils.Get<REAL>();
\n-
755}
\n-
\n-
756template <typename REAL>
\n-
757inline StencilTableReal<REAL> const *
\n-
\n-\n-
759 assert(LocalPointVaryingStencilPrecisionMatchesType<REAL>());
\n-
760 return _localPointVaryingStencils.Get<REAL>();
\n-
761}
\n-
\n-
762template <typename REAL>
\n-
763inline StencilTableReal<REAL> const *
\n-
\n-\n-
765 assert(LocalPointFaceVaryingStencilPrecisionMatchesType<REAL>());
\n-
766 if (channel >= 0 && channel < (int)_localPointFaceVaryingStencils.size()) {
\n-
767 return _localPointFaceVaryingStencils[channel].Get<REAL>();
\n-
768 }
\n-
769 return NULL;
\n-
770}
\n-
\n-
771
\n-
772
\n-
773//
\n-
774// Computation of local point values:
\n-
775//
\n-
776template <class T>
\n-
777inline void
\n-
\n-
778PatchTable::ComputeLocalPointValues(T const *src, T *dst) const {
\n-
779 assert(LocalPointStencilPrecisionMatchesType<float>());
\n-
780 if (_localPointStencils) {
\n-
781 _localPointStencils.Get<float>()->UpdateValues(src, dst);
\n-
782 }
\n-
783}
\n-
\n-
784
\n-
785template <class T>
\n-
786inline void
\n-
\n-\n-
788 assert(LocalPointVaryingStencilPrecisionMatchesType<float>());
\n-
789 if (_localPointVaryingStencils) {
\n-
790 _localPointVaryingStencils.Get<float>()->UpdateValues(src, dst);
\n-
791 }
\n-
792}
\n-
\n-
793
\n-
794template <class T>
\n-
795inline void
\n-
\n-
796PatchTable::ComputeLocalPointValuesFaceVarying(T const *src, T *dst, int channel) const {
\n-
797 assert(LocalPointFaceVaryingStencilPrecisionMatchesType<float>());
\n-
798 if (channel >= 0 && channel < (int)_localPointFaceVaryingStencils.size()) {
\n-
799 if (_localPointFaceVaryingStencils[channel]) {
\n-
800 _localPointFaceVaryingStencils[channel].Get<float>()->UpdateValues(src, dst);
\n-
801 }
\n-
802 }
\n-
803}
\n-
\n-
804
\n-
805
\n-
806//
\n-
807// Basis evaluation overloads
\n-
808//
\n-
809inline void
\n-
\n-
810PatchTable::EvaluateBasis(PatchHandle const & handle, float u, float v,
\n-
811 float wP[], float wDu[], float wDv[],
\n-
812 float wDuu[], float wDuv[], float wDvv[]) const {
\n-
813
\n-
814 EvaluateBasis<float>(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv);
\n-
815}
\n-
\n-
816inline void
\n-
\n-
817PatchTable::EvaluateBasis(PatchHandle const & handle, double u, double v,
\n-
818 double wP[], double wDu[], double wDv[],
\n-
819 double wDuu[], double wDuv[], double wDvv[]) const {
\n-
820
\n-
821 EvaluateBasis<double>(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv);
\n-
822}
\n-
\n-
823
\n-
824inline void
\n-
\n-
825PatchTable::EvaluateBasisVarying(PatchHandle const & handle, float u, float v,
\n-
826 float wP[], float wDu[], float wDv[],
\n-
827 float wDuu[], float wDuv[], float wDvv[]) const {
\n-
828
\n-
829 EvaluateBasisVarying<float>(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv);
\n-
830}
\n-
\n-
831inline void
\n-
\n-
832PatchTable::EvaluateBasisVarying(PatchHandle const & handle, double u, double v,
\n-
833 double wP[], double wDu[], double wDv[],
\n-
834 double wDuu[], double wDuv[], double wDvv[]) const {
\n-
835
\n-
836 EvaluateBasisVarying<double>(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv);
\n-
837}
\n-
\n-
838
\n-
839inline void
\n-
\n-
840PatchTable::EvaluateBasisFaceVarying(PatchHandle const & handle, float u, float v,
\n-
841 float wP[], float wDu[], float wDv[],
\n-
842 float wDuu[], float wDuv[], float wDvv[], int channel) const {
\n-
843
\n-
844 EvaluateBasisFaceVarying<float>(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv, channel);
\n-
845}
\n-
\n-
846inline void
\n-
\n-
847PatchTable::EvaluateBasisFaceVarying(PatchHandle const & handle, double u, double v,
\n-
848 double wP[], double wDu[], double wDv[],
\n-
849 double wDuu[], double wDuv[], double wDvv[], int channel) const {
\n-
850
\n-
851 EvaluateBasisFaceVarying<double>(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv, channel);
\n-
852}
\n-
\n-
853
\n-
854} // end namespace Far
\n-
855
\n-
856} // end namespace OPENSUBDIV_VERSION
\n-
857using namespace OPENSUBDIV_VERSION;
\n-
858
\n-
859} // end namespace OpenSubdiv
\n-
860
\n-
861#endif /* OPENSUBDIV3_FAR_PATCH_TABLE */
\n-\n-
std::vector< PatchParam > PatchParamTable
Definition patchParam.h:243
\n-\n-
std::vector< PatchArray > PatchArrayVector
Definition types.h:132
\n-\n-
An quadtree-based map connecting coarse faces to their sub-patches.
Definition patchMap.h:49
\n-\n-
Container for arrays of parametric patches.
Definition patchTable.h:55
\n-
ConstIndexArray GetPatchArrayVaryingVertices(int array) const
Returns the varying vertex indices for the patches in array.
\n-\n-
PatchVertsTable const & GetPatchControlVerticesTable() const
Get the table of patch control vertices.
Definition patchTable.h:378
\n-
void ComputeLocalPointValuesFaceVarying(T const *src, T *dst, int channel=0) const
Updates local point face-varying values.
Definition patchTable.h:796
\n-
ConstIndexArray GetVaryingVertices() const
Returns an array of varying vertex indices for the patches.
\n-
void ComputeLocalPointValuesVarying(T const *src, T *dst) const
Updates local point varying values.
Definition patchTable.h:787
\n-
ConstIndexArray GetPatchVaryingVertices(PatchHandle const &handle) const
Returns the varying vertex indices for a given patch.
\n-
bool IsFeatureAdaptive() const
True if the patches are of feature adaptive types.
\n-
int GetMaxValence() const
Returns max vertex valence.
Definition patchTable.h:92
\n-
StencilTableReal< REAL > const * GetLocalPointStencilTable() const
Returns the stencil table to compute local point vertex values.
\n-
StencilTable const * GetLocalPointStencilTable() const
Returns the stencil table to compute local point vertex values.
Definition patchTable.h:730
\n-
PatchParamArray getPatchParams(int arrayIndex)
\n-
ConstIndexArray GetPatchArrayFVarValues(int array, int channel=0) const
Returns the value indices for the patches in array in channel.
\n-
std::vector< float > const & GetSharpnessValues() const
Returns sharpness values table.
Definition patchTable.h:387
\n-\n-
PatchParam GetPatchFVarPatchParam(int array, int patch, int channel=0) const
Returns the face-varying params for a given patch channel.
\n-
ConstIndexArray GetPatchVaryingVertices(int array, int patch) const
Returns the varying vertex indices for a given patch.
\n-
PatchTable(PatchTable const &src)
Copy constructor.
\n-
int GetNumPatchArrays() const
Returns the number of patch arrays in the table.
\n-
ConstIndexArray GetPatchVertices(PatchHandle const &handle) const
Returns the control vertex indices for the patch identified by handle.
\n-\n-
bool LocalPointFaceVaryingStencilPrecisionMatchesType() const
Tests if the precision of the stencil table to compute local point face-varying values matches the gi...
\n-
PatchParamTable const & GetPatchParamTable() const
Returns the PatchParamTable (PatchParams order matches patch array sorting)
Definition patchTable.h:381
\n-
VertexValenceTable const & GetVertexValenceTable() const
Returns the 'VertexValences' table (vertex neighborhoods table)
Definition patchTable.h:267
\n-
StencilTable const * GetLocalPointFaceVaryingStencilTable(int channel=0) const
Returns the stencil table to compute local point face-varying values.
Definition patchTable.h:741
\n-
int GetNumControlVertices(int array) const
Returns the number of control vertices in array.
\n-\n-
void EvaluateBasisFaceVarying(PatchHandle const &handle, REAL u, REAL v, REAL wP[], REAL wDu[]=0, REAL wDv[]=0, REAL wDuu[]=0, REAL wDuv[]=0, REAL wDvv[]=0, int channel=0) const
Evaluate basis functions for a face-varying value and derivatives at a given (u,v) parametric locatio...
\n-
ConstQuadOffsetsArray GetPatchQuadOffsets(PatchHandle const &handle) const
Returns the 'QuadOffsets' for the Gregory patch identified by handle.
\n-
PatchDescriptor GetFVarPatchDescriptorIrregular(int channel=0) const
Returns the irregular patch descriptor for channel.
\n-
float GetSingleCreasePatchSharpnessValue(int array, int patch) const
Returns the crease sharpness for the patch in array if it is a single-crease patch,...
\n-\n-
void ComputeLocalPointValues(T const *src, T *dst) const
Updates local point vertex values.
Definition patchTable.h:778
\n-
float GetSingleCreasePatchSharpnessValue(PatchHandle const &handle) const
Returns the crease sharpness for the patch identified by handle if it is a single-crease patch,...
\n-
PatchParam GetPatchParam(int array, int patch) const
Returns the PatchParam for patch in array.
\n-
ConstIndexArray GetPatchFVarValues(int array, int patch, int channel=0) const
Returns the value indices for a given patch in channel.
\n-
PatchDescriptor GetFVarPatchDescriptorRegular(int channel=0) const
Returns the regular patch descriptor for channel.
\n-
PatchDescriptor GetPatchDescriptor(PatchHandle const &handle) const
Returns the PatchDescriptor for the patch identified by handle.
\n-\n-
QuadOffsetsTable const & GetQuadOffsetsTable() const
Returns the quad-offsets table.
Definition patchTable.h:392
\n-
int GetNumPatches(int array) const
Returns the number of patches in array.
\n-
PatchDescriptor GetVaryingPatchDescriptor() const
Returns the varying patch descriptor.
\n-
ConstIndexArray GetPatchFVarValues(PatchHandle const &handle, int channel=0) const
Returns the value indices for a given patch in channel.
\n-
ConstPatchParamArray const GetPatchParams(int array) const
Returns the PatchParams for the patches in array.
\n-
int GetNumControlVerticesTotal() const
Returns the total number of control vertex indices in the table.
Definition patchTable.h:84
\n-
int GetNumFVarChannels() const
Returns the number of face-varying channels.
\n-
ConstPatchParamArray GetPatchArrayFVarPatchParams(int array, int channel=0) const
Returns the face-varying for a given patch in array in channel.
\n-
Index getPatchIndex(int array, int patch) const
\n-
int GetNumLocalPoints() const
Returns the number of local vertex points.
\n-
bool LocalPointVaryingStencilPrecisionMatchesType() const
Tests if the precision of the stencil table to compute local point varying values matches the given f...
\n-
ConstIndexArray GetPatchArrayVertices(int array) const
Returns the control vertex indices for the patches in array.
\n-
int GetNumPtexFaces() const
Returns the total number of ptex faces in the mesh.
Definition patchTable.h:95
\n-
ConstIndexArray GetFVarValues(int channel=0) const
Returns an array of value indices for the patches in channel.
\n-
Vtr::ConstArray< unsigned int > ConstQuadOffsetsArray
Accessors for the gregory patch evaluation buffers. These methods will be deprecated.
Definition patchTable.h:259
\n-
void EvaluateBasis(PatchHandle const &handle, REAL u, REAL v, REAL wP[], REAL wDu[]=0, REAL wDv[]=0, REAL wDuu[]=0, REAL wDuv[]=0, REAL wDvv[]=0) const
Evaluate basis functions for position and derivatives at a given (u,v) parametric location of a patch...
\n-
StencilTableReal< REAL > const * GetLocalPointFaceVaryingStencilTable(int channel=0) const
Returns the stencil table to compute local point face-varying values.
\n-
int GetNumPatchesTotal() const
Returns the total number of patches stored in the table.
\n-
PatchParam GetPatchParam(PatchHandle const &handle) const
Returns a PatchParam for the patch identified by handle.
\n-\n-
Sdc::Options::FVarLinearInterpolation GetFVarChannelLinearInterpolation(int channel=0) const
Deprecated.
\n-
std::vector< Index > const & GetSharpnessIndexTable() const
Returns a sharpness index table for each patch (if exists)
Definition patchTable.h:384
\n-
PatchDescriptor GetPatchArrayDescriptor(int array) const
Returns the PatchDescriptor for the patches in array.
\n-\n-
void EvaluateBasisVarying(PatchHandle const &handle, REAL u, REAL v, REAL wP[], REAL wDu[]=0, REAL wDv[]=0, REAL wDuu[]=0, REAL wDuv[]=0, REAL wDvv[]=0) const
Evaluate basis functions for a varying value and derivatives at a given (u,v) parametric location of ...
\n-
StencilTable const * GetLocalPointVaryingStencilTable() const
Returns the stencil table to compute local point varying values.
Definition patchTable.h:735
\n-
std::vector< unsigned int > QuadOffsetsTable
Definition patchTable.h:389
\n-
ConstIndexArray GetPatchVertices(int array, int patch) const
Returns the control vertex indices for patch in array.
\n-
PatchParam GetPatchFVarPatchParam(PatchHandle const &handle, int channel=0) const
Returns the value indices for a given patch in channel.
\n-
int GetFVarValueStride(int channel=0) const
Returns the stride between patches in the value index array of channel.
\n-
ConstPatchParamArray GetFVarPatchParams(int channel=0) const
Returns an array of face-varying patch param for channel.
\n-
PatchDescriptor GetFVarPatchDescriptor(int channel=0) const
Returns the default/irregular patch descriptor for channel.
\n-
int GetNumLocalPointsVarying() const
Returns the number of local varying points.
\n-
bool LocalPointStencilPrecisionMatchesType() const
Tests if the precision of the stencil table to compute local point vertex values matches the given fl...
\n-
StencilTableReal< REAL > const * GetLocalPointVaryingStencilTable() const
Returns the stencil table to compute local point varying values.
\n-
int GetNumLocalPointsFaceVarying(int channel=0) const
Returns the number of local face-varying points for channel.
\n-
Handle that can be used as unique patch identifier within PatchTable.
Definition patchTable.h:60
\n-\n-\n-\n-\n-
Stencil table class wrapping the template for compatibility.
\n-\n-\n-\n+
234
\n+
235#endif /* OPENSUBDIV3_FAR_PATCH_TABLE_FACTORY_H */
\n+\n+
Vtr::ConstIndexArray ConstIndexArray
Definition types.h:47
\n+
Container for arrays of parametric patches.
Definition patchTable.h:55
\n+
Factory for constructing a PatchTable from a TopologyRefiner.
\n+\n+
static PatchTable * Create(TopologyRefiner const &refiner, Options options=Options(), ConstIndexArray selectedFaces=ConstIndexArray())
Instantiates a PatchTable from a client-provided TopologyRefiner.
\n+\n+
unsigned int generateVaryingTables
Generate varying patch tables.
\n+
unsigned int generateLegacySharpCornerPatches
Generate sharp regular patches at smooth corners (legacy)
\n+\n+
TopologyRefiner::AdaptiveOptions GetRefineAdaptiveOptions() const
Determine adaptive refinement options to match assigned patch options.
\n+
unsigned int maxIsolationLevel
Cap adaptive feature isolation to the given level (max. 10)
\n+\n+
unsigned int generateFVarLegacyLinearPatches
Generate all linear face-varying patches (legacy)
\n+
void SetPatchPrecision()
Set precision of vertex patches.
\n+
unsigned int fvarPatchPrecisionDouble
Generate double-precision stencils for face-varying patches.
\n+
void SetMaxIsolationLevel(unsigned int level)
Set maximum isolation level.
\n+\n+
int const * fvarChannelIndices
List containing the indices of the channels selected for the factory.
\n+\n+\n+\n+
unsigned int generateVaryingLocalPoints
Generate local points with varying patches.
\n+
unsigned int includeFVarBaseLevelIndices
Include base level in face-varying patch point indices (Uniform mode only)
\n+
unsigned int generateAllLevels
Generate levels from 'firstLevel' to 'maxLevel' (Uniform mode only)
\n+
unsigned int patchPrecisionDouble
Generate double-precision stencils for vertex patches.
\n+
unsigned int generateFVarTables
Generate face-varying patch tables.
\n+
unsigned int includeBaseLevelIndices
Include base level in patch point indices (Uniform mode only)
\n+
void SetFVarPatchPrecision()
Set precision of face-varying patches.
\n+
int numFVarChannels
Number of channel indices and interpolation modes passed.
\n+
unsigned int triangulateQuads
Triangulate 'QUADS' primitives (Uniform mode only)
\n+
EndCapType
Choice for approximating irregular patches (end-caps)
\n+
@ ENDCAP_LEGACY_GREGORY
legacy option for 2.x style Gregory patches (Catmark only)
\n+
@ ENDCAP_GREGORY_BASIS
use Gregory patches (highest quality, recommended default)
\n+\n+
@ ENDCAP_BILINEAR_BASIS
use linear patches (simple quads or tris)
\n+
@ ENDCAP_BSPLINE_BASIS
use BSpline-like patches (same patch type as regular)
\n+\n+
Obsolete internal struct not intended for public use \u2013 due to be deprecated.
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+
Stores topology data for a specified set of refinement options.
\n+\n+\n+\n+\n+\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-us-ascii\n+utf-8\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-patchTable.h\n+patchTableFactory.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2013 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -24,945 +24,409 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_FAR_PATCH_TABLE_H\n-26#define OPENSUBDIV3_FAR_PATCH_TABLE_H\n+25#ifndef OPENSUBDIV3_FAR_PATCH_TABLE_FACTORY_H\n+26#define OPENSUBDIV3_FAR_PATCH_TABLE_FACTORY_H\n 27\n 28#include \"../version.h\"\n 29\n-30#include \"../far/patchDescriptor.h\"\n-31#include \"../far/patchParam.h\"\n-32#include \"../far/stencilTable.h\"\n-33\n-34#include \"../sdc/options.h\"\n+30#include \"../far/topologyRefiner.h\"\n+31#include \"../far/patchTable.h\"\n+32\n+33namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+34namespace OPENSUBDIV_VERSION {\n 35\n-36#include \n+36namespace Far {\n 37\n-38namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-39namespace OPENSUBDIV_VERSION {\n-40\n-41namespace Far {\n+_\b4_\b0class _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by {\n+41public:\n 42\n-_\b5_\b5class _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be {\n-56\n-57public:\n-58\n-_\b6_\b0 class _\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be {\n-61 // XXXX manuelk members will eventually be made private\n-62 public:\n-63\n-_\b6_\b4 friend class _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be;\n-_\b6_\b5 friend class _\bP_\ba_\bt_\bc_\bh_\bM_\ba_\bp;\n-66\n-_\b6_\b7 _\bI_\bn_\bd_\be_\bx _\ba_\br_\br_\ba_\by_\bI_\bn_\bd_\be_\bx, // Array index of the patch\n-_\b6_\b8 _\bp_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx, // Absolute Index of the patch\n-_\b6_\b9 _\bv_\be_\br_\bt_\bI_\bn_\bd_\be_\bx; // Relative offset to the first CV of the patch in array\n-70 };\n-71\n-72public:\n-73\n-_\b7_\b5 _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be(_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const & src);\n-76\n-_\b7_\b8 _\b~_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be();\n-79\n-_\b8_\b1 bool _\bI_\bs_\bF_\be_\ba_\bt_\bu_\br_\be_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be() const;\n-82\n-_\b8_\b4 int _\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs_\bT_\bo_\bt_\ba_\bl() const {\n-85 return (int)_patchVerts.size();\n-86 }\n-87\n-_\b8_\b9 int _\bG_\be_\bt_\bN_\bu_\bm_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bT_\bo_\bt_\ba_\bl() const;\n-90\n-_\b9_\b2 int _\bG_\be_\bt_\bM_\ba_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be() const { return _maxValence; }\n-93\n-_\b9_\b5 int _\bG_\be_\bt_\bN_\bu_\bm_\bP_\bt_\be_\bx_\bF_\ba_\bc_\be_\bs() const { return _numPtexFaces; }\n-96\n-97\n-99\n-105\n-_\b1_\b0_\b7 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle) const;\n-108\n-_\b1_\b1_\b0 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle) const;\n-111\n-_\b1_\b1_\b3 _\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle) const;\n+_\b4_\b5 struct _\bO_\bp_\bt_\bi_\bo_\bn_\bs {\n+46\n+_\b5_\b5 enum _\bE_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be {\n+_\b5_\b6 _\bE_\bN_\bD_\bC_\bA_\bP_\b__\bN_\bO_\bN_\bE = 0,\n+_\b5_\b7 _\bE_\bN_\bD_\bC_\bA_\bP_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b__\bB_\bA_\bS_\bI_\bS,\n+_\b5_\b8 _\bE_\bN_\bD_\bC_\bA_\bP_\b__\bB_\bS_\bP_\bL_\bI_\bN_\bE_\b__\bB_\bA_\bS_\bI_\bS,\n+_\b5_\b9 _\bE_\bN_\bD_\bC_\bA_\bP_\b__\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bA_\bS_\bI_\bS,\n+60 _\bE_\bN_\bD_\bC_\bA_\bP_\b__\bL_\bE_\bG_\bA_\bC_\bY_\b__\bG_\bR_\bE_\bG_\bO_\bR_\bY\n+_\b6_\b1 };\n+62\n+_\b6_\b3 _\bO_\bp_\bt_\bi_\bo_\bn_\bs(unsigned int maxIsolation=10) :\n+64 _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bA_\bl_\bl_\bL_\be_\bv_\be_\bl_\bs(false),\n+65 _\bi_\bn_\bc_\bl_\bu_\bd_\be_\bB_\ba_\bs_\be_\bL_\be_\bv_\be_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs(true),\n+66 _\bi_\bn_\bc_\bl_\bu_\bd_\be_\bF_\bV_\ba_\br_\bB_\ba_\bs_\be_\bL_\be_\bv_\be_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs(false),\n+67 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bQ_\bu_\ba_\bd_\bs(false),\n+68 _\bu_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh(false),\n+69 _\bu_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh(false),\n+70 _\bm_\ba_\bx_\bI_\bs_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\bL_\be_\bv_\be_\bl(maxIsolation & 0xf),\n+71 _\be_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be(_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bA_\bS_\bI_\bS),\n+72 _\bs_\bh_\ba_\br_\be_\bE_\bn_\bd_\bC_\ba_\bp_\bP_\ba_\bt_\bc_\bh_\bP_\bo_\bi_\bn_\bt_\bs(true),\n+73 _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bT_\ba_\bb_\bl_\be_\bs(true),\n+74 _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bs(true),\n+75 _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bF_\bV_\ba_\br_\bT_\ba_\bb_\bl_\be_\bs(false),\n+76 _\bp_\ba_\bt_\bc_\bh_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bD_\bo_\bu_\bb_\bl_\be(false),\n+77 _\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bD_\bo_\bu_\bb_\bl_\be(false),\n+78 _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bF_\bV_\ba_\br_\bL_\be_\bg_\ba_\bc_\by_\bL_\bi_\bn_\be_\ba_\br_\bP_\ba_\bt_\bc_\bh_\be_\bs(true),\n+79 _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bL_\be_\bg_\ba_\bc_\by_\bS_\bh_\ba_\br_\bp_\bC_\bo_\br_\bn_\be_\br_\bP_\ba_\bt_\bc_\bh_\be_\bs(true),\n+80 _\bn_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs(-1),\n+81 _\bf_\bv_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs(0)\n+82 { }\n+83\n+_\b8_\b5 _\bE_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be _\bG_\be_\bt_\bE_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be() const { return (_\bE_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be)_\be_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be; }\n+86\n+_\b8_\b8 void _\bS_\be_\bt_\bE_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be(_\bE_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be e) { _\be_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be = e & 0x7; }\n+89\n+_\b9_\b1 void _\bS_\be_\bt_\bM_\ba_\bx_\bI_\bs_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\bL_\be_\bv_\be_\bl(unsigned int level) { _\bm_\ba_\bx_\bI_\bs_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\bL_\be_\bv_\be_\bl = level &\n+0xf; }\n+92\n+_\b9_\b4 template void _\bS_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn();\n+95\n+_\b9_\b7 template void _\bS_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn();\n+98\n+_\b1_\b0_\b0 _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs _\bG_\be_\bt_\bR_\be_\bf_\bi_\bn_\be_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs() const {\n+101 _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs adaptiveOptions(_\bm_\ba_\bx_\bI_\bs_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\bL_\be_\bv_\be_\bl);\n+102\n+103 adaptiveOptions._\bu_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh = _\bu_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh;\n+104 adaptiveOptions._\bu_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh = _\bu_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh;\n+105 adaptiveOptions._\bc_\bo_\bn_\bs_\bi_\bd_\be_\br_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs = _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bF_\bV_\ba_\br_\bT_\ba_\bb_\bl_\be_\bs &&\n+106 !_\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bF_\bV_\ba_\br_\bL_\be_\bg_\ba_\bc_\by_\bL_\bi_\bn_\be_\ba_\br_\bP_\ba_\bt_\bc_\bh_\be_\bs;\n+107 return adaptiveOptions;\n+108 }\n+109\n+_\b1_\b1_\b0 unsigned int _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bA_\bl_\bl_\bL_\be_\bv_\be_\bl_\bs : 1,\n+_\b1_\b1_\b1 _\bi_\bn_\bc_\bl_\bu_\bd_\be_\bB_\ba_\bs_\be_\bL_\be_\bv_\be_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs : 1,\n+_\b1_\b1_\b2 _\bi_\bn_\bc_\bl_\bu_\bd_\be_\bF_\bV_\ba_\br_\bB_\ba_\bs_\be_\bL_\be_\bv_\be_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs : 1,\n+_\b1_\b1_\b3 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bQ_\bu_\ba_\bd_\bs : 1,\n 114\n-_\b1_\b1_\b6 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int array, int patch) const;\n-117\n-_\b1_\b1_\b9 _\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm(int array, int patch) const;\n-121\n-122\n-124\n+_\b1_\b1_\b5 _\bu_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh : 1,\n+_\b1_\b1_\b6 _\bu_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh : 1,\n+_\b1_\b1_\b7 _\bm_\ba_\bx_\bI_\bs_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\bL_\be_\bv_\be_\bl : 4,\n+118\n+119 // end-capping\n+_\b1_\b2_\b0 _\be_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be : 3,\n+_\b1_\b2_\b1 _\bs_\bh_\ba_\br_\be_\bE_\bn_\bd_\bC_\ba_\bp_\bP_\ba_\bt_\bc_\bh_\bP_\bo_\bi_\bn_\bt_\bs : 1,\n+123\n+124 // varying\n+_\b1_\b2_\b5 _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bT_\ba_\bb_\bl_\be_\bs : 1,\n+_\b1_\b2_\b6 _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bs : 1,\n+127\n+128 // face-varying\n+_\b1_\b2_\b9 _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bF_\bV_\ba_\br_\bT_\ba_\bb_\bl_\be_\bs : 1,\n 130\n-_\b1_\b3_\b2 int _\bG_\be_\bt_\bN_\bu_\bm_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs() const;\n-133\n-_\b1_\b3_\b5 int _\bG_\be_\bt_\bN_\bu_\bm_\bP_\ba_\bt_\bc_\bh_\be_\bs(int array) const;\n-136\n-_\b1_\b3_\b8 int _\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int array) const;\n-139\n-_\b1_\b4_\b1 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(int array) const;\n+131 // precision\n+_\b1_\b3_\b2 _\bp_\ba_\bt_\bc_\bh_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bD_\bo_\bu_\bb_\bl_\be : 1,\n+_\b1_\b3_\b3 _\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bD_\bo_\bu_\bb_\bl_\be : 1,\n+134\n+135 // legacy behaviors (default to true)\n+_\b1_\b3_\b6 _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bF_\bV_\ba_\br_\bL_\be_\bg_\ba_\bc_\by_\bL_\bi_\bn_\be_\ba_\br_\bP_\ba_\bt_\bc_\bh_\be_\bs : 1,\n+_\b1_\b3_\b7 _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bL_\be_\bg_\ba_\bc_\by_\bS_\bh_\ba_\br_\bp_\bC_\bo_\br_\bn_\be_\br_\bP_\ba_\bt_\bc_\bh_\be_\bs : 1;\n+138\n+_\b1_\b3_\b9 int _\bn_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs;\n+_\b1_\b4_\b0 int const * _\bf_\bv_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs;\n+141 };\n 142\n-_\b1_\b4_\b4 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int array) const;\n-145\n-_\b1_\b4_\b7 _\bC_\bo_\bn_\bs_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bA_\br_\br_\ba_\by const _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bs(int array) const;\n-149\n-150\n-152\n-159\n-_\b1_\b6_\b1 int _\bG_\be_\bt_\bN_\bu_\bm_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bs() const;\n-162\n-164 _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be() const;\n-165\n-167 template \n-_\b1_\b6_\b8 _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bR_\be_\ba_\bl_\b<_\bR_\bE_\bA_\bL_\b> const *_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be() const;\n-169\n-_\b1_\b7_\b2 template bool _\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bM_\ba_\bt_\bc_\bh_\be_\bs_\bT_\by_\bp_\be()\n-const;\n-173\n-186 template void\n-187 _\bC_\bo_\bm_\bp_\bu_\bt_\be_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\bl_\bu_\be_\bs(T const *src, T *dst) const;\n-188\n-189\n-_\b1_\b9_\b1 int _\bG_\be_\bt_\bN_\bu_\bm_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg() const;\n-192\n-194 _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be() const;\n-195\n-197 template \n-_\b1_\b9_\b8 _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bR_\be_\ba_\bl_\b<_\bR_\bE_\bA_\bL_\b> const *_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be() const;\n-199\n-_\b2_\b0_\b2 template bool _\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bM_\ba_\bt_\bc_\bh_\be_\bs_\bT_\by_\bp_\be\n-() const;\n-203\n-216 template void\n-217 _\bC_\bo_\bm_\bp_\bu_\bt_\be_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\bl_\bu_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(T const *src, T *dst) const;\n+_\b1_\b7_\b5 static _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be * _\bC_\br_\be_\ba_\bt_\be(_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br const & refiner,\n+176 _\bO_\bp_\bt_\bi_\bo_\bn_\bs options = _\bO_\bp_\bt_\bi_\bo_\bn_\bs(),\n+177 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by selectedFaces = _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by());\n+178\n+179public:\n+180 // PatchFaceTag\n+181 //\n+182 // This simple struct was previously used within the factory to take\n+inventory of\n+183 // various kinds of patches to fully allocate buffers prior to populating\n+them. It\n+184 // was not intended to be exposed as part of the public interface.\n+185 //\n+186 // It is no longer used internally and is being kept here to respect\n+preservation\n+187 // of the public interface, but it will be deprecated at the earliest\n+opportunity.\n+188 //\n+191 //\n+_\b1_\b9_\b2 struct _\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg {\n+193 public:\n+_\b1_\b9_\b4 unsigned int _\b__\bh_\ba_\bs_\bP_\ba_\bt_\bc_\bh : 1;\n+_\b1_\b9_\b5 unsigned int _\b__\bi_\bs_\bR_\be_\bg_\bu_\bl_\ba_\br : 1;\n+_\b1_\b9_\b6 unsigned int _\b__\bt_\br_\ba_\bn_\bs_\bi_\bt_\bi_\bo_\bn_\bM_\ba_\bs_\bk : 4;\n+_\b1_\b9_\b7 unsigned int _\b__\bb_\bo_\bu_\bn_\bd_\ba_\br_\by_\bM_\ba_\bs_\bk : 4;\n+_\b1_\b9_\b8 unsigned int _\b__\bb_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bd_\be_\bx : 2;\n+_\b1_\b9_\b9 unsigned int _\b__\bb_\bo_\bu_\bn_\bd_\ba_\br_\by_\bC_\bo_\bu_\bn_\bt : 3;\n+_\b2_\b0_\b0 unsigned int _\b__\bh_\ba_\bs_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bE_\bd_\bg_\be : 3;\n+_\b2_\b0_\b1 unsigned int _\b__\bi_\bs_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be : 1;\n+202\n+_\b2_\b0_\b3 void _\bc_\bl_\be_\ba_\br();\n+_\b2_\b0_\b4 void _\ba_\bs_\bs_\bi_\bg_\bn_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bP_\br_\bo_\bp_\be_\br_\bt_\bi_\be_\bs_\bF_\br_\bo_\bm_\bE_\bd_\bg_\be_\bM_\ba_\bs_\bk(int boundaryEdgeMask);\n+_\b2_\b0_\b5 void _\ba_\bs_\bs_\bi_\bg_\bn_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bP_\br_\bo_\bp_\be_\br_\bt_\bi_\be_\bs_\bF_\br_\bo_\bm_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk(int boundaryVertexMask);\n+_\b2_\b0_\b6 void _\ba_\bs_\bs_\bi_\bg_\bn_\bT_\br_\ba_\bn_\bs_\bi_\bt_\bi_\bo_\bn_\bP_\br_\bo_\bp_\be_\br_\bt_\bi_\be_\bs_\bF_\br_\bo_\bm_\bE_\bd_\bg_\be_\bM_\ba_\bs_\bk(int boundaryVertexMask);\n+207 };\n+_\b2_\b0_\b8 typedef std::vector _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bg_\bV_\be_\bc_\bt_\bo_\br;\n+209};\n+210\n+211\n+_\b2_\b1_\b2template <> inline void PatchTableFactory::Options::SetPatchPrecision\n+() {\n+213 _\bp_\ba_\bt_\bc_\bh_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bD_\bo_\bu_\bb_\bl_\be = false;\n+214}\n+_\b2_\b1_\b5template <> inline void PatchTableFactory::Options::\n+SetFVarPatchPrecision() {\n+216 fvarPatchPrecisionDouble = false;\n+217}\n 218\n-219\n-_\b2_\b2_\b1 int _\bG_\be_\bt_\bN_\bu_\bm_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(int channel = 0) const;\n-222\n-224 _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(int channel = 0)\n-const;\n+219template <> inline void PatchTableFactory::Options::\n+SetPatchPrecision() {\n+220 patchPrecisionDouble = true;\n+221}\n+222template <> inline void PatchTableFactory::Options::\n+SetFVarPatchPrecision() {\n+223 fvarPatchPrecisionDouble = true;\n+224}\n 225\n-227 template \n-_\b2_\b2_\b8 _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bR_\be_\ba_\bl_\b<_\bR_\bE_\bA_\bL_\b> const * _\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(int\n-channel = 0) const;\n-229\n-_\b2_\b3_\b2 template bool\n-_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bM_\ba_\bt_\bc_\bh_\be_\bs_\bT_\by_\bp_\be() const;\n+226\n+227} // end namespace Far\n+228\n+229} // end namespace OPENSUBDIV_VERSION\n+230using namespace OPENSUBDIV_VERSION;\n+231\n+232} // end namespace OpenSubdiv\n 233\n-248 template void\n-249 _\bC_\bo_\bm_\bp_\bu_\bt_\be_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\bl_\bu_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(T const *src, T *dst, int channel = 0)\n-const;\n-251\n-252\n-254\n-255\n-_\b2_\b5_\b9 typedef _\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b<_\bu_\bn_\bs_\bi_\bg_\bn_\be_\bd_\b _\bi_\bn_\bt_\b> _\bC_\bo_\bn_\bs_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bA_\br_\br_\ba_\by;\n-260\n-_\b2_\b6_\b2 _\bC_\bo_\bn_\bs_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle)\n-const;\n-263\n-_\b2_\b6_\b4 typedef std::vector _\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be_\bT_\ba_\bb_\bl_\be;\n-265\n-_\b2_\b6_\b7 _\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be_\bT_\ba_\bb_\bl_\be const & _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be_\bT_\ba_\bb_\bl_\be() const {\n-268 return _vertexValenceTable;\n-269 }\n-271\n-272\n-274\n-280\n-_\b2_\b8_\b3 float _\bG_\be_\bt_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bV_\ba_\bl_\bu_\be(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle) const;\n-284\n-_\b2_\b8_\b7 float _\bG_\be_\bt_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bV_\ba_\bl_\bu_\be(int array, int patch) const;\n-289\n-290\n-292\n-298\n-_\b3_\b0_\b0 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br _\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br() const;\n-301\n-_\b3_\b0_\b3 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bV_\ba_\br_\by_\bi_\bn_\bg_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle) const;\n-304\n-_\b3_\b0_\b6 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bV_\ba_\br_\by_\bi_\bn_\bg_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int array, int patch) const;\n-307\n-_\b3_\b0_\b9 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\ba_\br_\by_\bi_\bn_\bg_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int array) const;\n-310\n-_\b3_\b1_\b2 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const;\n-314\n-315\n-317\n-323\n-_\b3_\b2_\b5 int _\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs() const;\n-326\n-_\b3_\b2_\b8 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br _\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bR_\be_\bg_\bu_\bl_\ba_\br(int channel = 0) const;\n-329\n-_\b3_\b3_\b1 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br _\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bI_\br_\br_\be_\bg_\bu_\bl_\ba_\br(int channel = 0) const;\n-332\n-_\b3_\b3_\b4 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br _\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(int channel = 0) const;\n-335\n-_\b3_\b3_\b7 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bs(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, int channel\n-= 0) const;\n-338\n-_\b3_\b4_\b0 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bs(int array, int patch, int channel = 0)\n-const;\n-341\n-_\b3_\b4_\b3 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bs(int array, int channel = 0) const;\n-344\n-_\b3_\b4_\b6 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bs(int channel = 0) const;\n-347\n-_\b3_\b4_\b9 int _\bG_\be_\bt_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bS_\bt_\br_\bi_\bd_\be(int channel = 0) const;\n-350\n-_\b3_\b5_\b2 _\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, int channel =\n-0) const;\n-353\n-_\b3_\b5_\b5 _\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm(int array, int patch, int channel = 0)\n-const;\n-356\n-_\b3_\b5_\b8 _\bC_\bo_\bn_\bs_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bs(int array, int channel =\n-0) const;\n-359\n-_\b3_\b6_\b1 _\bC_\bo_\bn_\bs_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bs(int channel = 0) const;\n-362\n-_\b3_\b6_\b4 _\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bV_\ba_\br_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn _\bG_\be_\bt_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn(int\n-channel = 0) const;\n-366\n-367\n-369\n-374\n-_\b3_\b7_\b5 typedef std::vector _\bP_\ba_\bt_\bc_\bh_\bV_\be_\br_\bt_\bs_\bT_\ba_\bb_\bl_\be;\n-376\n-_\b3_\b7_\b8 _\bP_\ba_\bt_\bc_\bh_\bV_\be_\br_\bt_\bs_\bT_\ba_\bb_\bl_\be const & _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs_\bT_\ba_\bb_\bl_\be() const { return\n-_patchVerts; }\n-379\n-_\b3_\b8_\b1 _\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bT_\ba_\bb_\bl_\be const & _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bT_\ba_\bb_\bl_\be() const { return _paramTable; }\n-382\n-_\b3_\b8_\b4 std::vector const &_\bG_\be_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bI_\bn_\bd_\be_\bx_\bT_\ba_\bb_\bl_\be() const { return\n-_sharpnessIndices; }\n-385\n-_\b3_\b8_\b7 std::vector const &_\bG_\be_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bV_\ba_\bl_\bu_\be_\bs() const { return\n-_sharpnessValues; }\n-388\n-_\b3_\b8_\b9 typedef std::vector _\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bT_\ba_\bb_\bl_\be;\n-390\n-_\b3_\b9_\b2 _\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bT_\ba_\bb_\bl_\be const & _\bG_\be_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bT_\ba_\bb_\bl_\be() const {\n-393 return _quadOffsetsTable;\n-394 }\n-396\n-_\b3_\b9_\b8 void _\bp_\br_\bi_\bn_\bt() const;\n-399\n-400public:\n-401\n-403\n-405\n-428 template \n-_\b4_\b2_\b9 void _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, REAL u, REAL v,\n-430 REAL wP[], REAL wDu[] = 0, REAL wDv[] = 0,\n-431 REAL wDuu[] = 0, REAL wDuv[] = 0, REAL wDvv[] = 0) const;\n-432\n-435 void _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, float u, float v,\n-436 float wP[], float wDu[] = 0, float wDv[] = 0,\n-437 float wDuu[] = 0, float wDuv[] = 0, float wDvv[] = 0) const;\n-438\n-441 void _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, double u, double v,\n-442 double wP[], double wDu[] = 0, double wDv[] = 0,\n-443 double wDuu[] = 0, double wDuv[] = 0, double wDvv[] = 0) const;\n-444\n-467 template \n-_\b4_\b6_\b8 void _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, REAL u, REAL v,\n-469 REAL wP[], REAL wDu[] = 0, REAL wDv[] = 0,\n-470 REAL wDuu[] = 0, REAL wDuv[] = 0, REAL wDvv[] = 0) const;\n-471\n-474 void _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, float u, float v,\n-475 float wP[], float wDu[] = 0, float wDv[] = 0,\n-476 float wDuu[] = 0, float wDuv[] = 0, float wDvv[] = 0) const;\n-477\n-480 void _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, double u, double v,\n-481 double wP[], double wDu[] = 0, double wDv[] = 0,\n-482 double wDuu[] = 0, double wDuv[] = 0, double wDvv[] = 0) const;\n-483\n-508 template \n-_\b5_\b0_\b9 void _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, REAL u, REAL v,\n-510 REAL wP[], REAL wDu[] = 0, REAL wDv[] = 0,\n-511 REAL wDuu[] = 0, REAL wDuv[] = 0, REAL wDvv[] = 0,\n-512 int channel = 0) const;\n-513\n-516 void _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, float u, float v,\n-517 float wP[], float wDu[] = 0, float wDv[] = 0,\n-518 float wDuu[] = 0, float wDuv[] = 0, float wDvv[] = 0,\n-519 int channel = 0) const;\n-520\n-523 void _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, double u, double\n-v,\n-524 double wP[], double wDu[] = 0, double wDv[] = 0,\n-525 double wDuu[] = 0, double wDuv[] = 0, double wDvv[] = 0,\n-526 int channel = 0) const;\n-528\n-529protected:\n-530\n-_\b5_\b3_\b1 friend class _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bB_\bu_\bi_\bl_\bd_\be_\br;\n-532\n-533 // Factory constructor\n-_\b5_\b3_\b4 _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be(int maxvalence);\n-535\n-_\b5_\b3_\b6 _\bI_\bn_\bd_\be_\bx _\bg_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx(int array, int patch) const;\n-537\n-_\b5_\b3_\b8 _\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bA_\br_\br_\ba_\by _\bg_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bs(int arrayIndex);\n-539\n-_\b5_\b4_\b0 _\bI_\bn_\bd_\be_\bx * _\bg_\be_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bI_\bn_\bd_\bi_\bc_\be_\bs(_\bI_\bn_\bd_\be_\bx arrayIndex);\n-_\b5_\b4_\b1 float * _\bg_\be_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bV_\ba_\bl_\bu_\be_\bs(_\bI_\bn_\bd_\be_\bx arrayIndex);\n-542\n-543private:\n-544\n-545 //\n-546 // Patch arrays\n-547 //\n-548\n-549 struct PatchArray;\n-550 typedef std::vector PatchArrayVector;\n-551\n-552 PatchArray & getPatchArray(_\bI_\bn_\bd_\be_\bx arrayIndex);\n-553 PatchArray const & getPatchArray(_\bI_\bn_\bd_\be_\bx arrayIndex) const;\n-554\n-555 void reservePatchArrays(int numPatchArrays);\n-556 void pushPatchArray(_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br desc, int npatches,\n-557 _\bI_\bn_\bd_\be_\bx * vidx, _\bI_\bn_\bd_\be_\bx * pidx, _\bI_\bn_\bd_\be_\bx * qoidx=0);\n-558\n-559 _\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by getPatchArrayVertices(int arrayIndex);\n-560\n-561 _\bI_\bn_\bd_\be_\bx findPatchArray(_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br desc);\n-562\n-563\n-564 //\n-565 // Varying patch arrays\n-566 //\n-567 _\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by getPatchArrayVaryingVertices(int arrayIndex);\n-568\n-569 void allocateVaryingVertices(\n-570 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br desc, int numPatches);\n-571 void populateVaryingVertices();\n-572\n-573 //\n-574 // Face-varying patch channels\n-575 //\n-576\n-577 struct FVarPatchChannel;\n-578 typedef std::vector FVarPatchChannelVector;\n-579\n-580 FVarPatchChannel & getFVarPatchChannel(int channel);\n-581 FVarPatchChannel const & getFVarPatchChannel(int channel) const;\n-582\n-583 void allocateFVarPatchChannels(int numChannels);\n-584 void allocateFVarPatchChannelValues(\n-585 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br regDesc, _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br irregDesc,\n-586 int numPatches, int channel);\n-587\n-588 // deprecated\n-589 void setFVarPatchChannelLinearInterpolation(\n-590 _\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bV_\ba_\br_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn interpolation, int channel);\n-591\n-592 _\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by getFVarValues(int channel);\n-593 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by getPatchFVarValues(int patch, int channel) const;\n-594\n-595 _\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bA_\br_\br_\ba_\by getFVarPatchParams(int channel);\n-596 _\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm getPatchFVarPatchParam(int patch, int channel) const;\n-597\n-598private:\n-599 //\n-600 // Simple private class to hold stencil table pointers of varying\n-precision,\n-601 // where the discriminant of the precision is external.\n-602 //\n-603 // NOTE that this is a simple pointer container and NOT a smart pointer\n-that\n-604 // manages the ownership of the object referred to by it.\n-605 //\n-606 class StencilTablePtr {\n-607 private:\n-608 typedef _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bR_\be_\ba_\bl_\b<_\bf_\bl_\bo_\ba_\bt_\b> float_type;\n-609 typedef _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bR_\be_\ba_\bl_\b<_\bd_\bo_\bu_\bb_\bl_\be_\b> double_type;\n-610\n-611 union {\n-612 float_type * _fPtr;\n-613 double_type * _dPtr;\n-614 };\n-615\n-616 public:\n-617 StencilTablePtr() { _fPtr = 0; }\n-618 StencilTablePtr(float_type * ptr) { _fPtr = ptr; }\n-619 StencilTablePtr(double_type * ptr) { _dPtr = ptr; }\n-620\n-621 operator bool() const { return _fPtr != 0; }\n-622\n-623 void Set() { _fPtr = 0; }\n-624 void Set(float_type * ptr) { _fPtr = ptr; }\n-625 void Set(double_type * ptr) { _dPtr = ptr; }\n-626\n-627 template StencilTableReal * Get() const;\n-628 };\n-629\n-630private:\n-631\n-632 //\n-633 // Topology\n-634 //\n-635\n-636 int _maxValence, // highest vertex valence found in the mesh\n-637 _numPtexFaces; // total number of ptex faces\n-638\n-639 _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br _patchArrays; // Vector of descriptors for arrays of\n-patches\n-640\n-641 std::vector _patchVerts; // Indices of the control vertices of the\n-patches\n-642\n-643 _\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bT_\ba_\bb_\bl_\be _paramTable; // PatchParam bitfields (one per patch)\n-644\n-645 //\n-646 // Extraordinary vertex closed-form evaluation / endcap basis conversion\n-647 //\n-648 // XXXtakahito: these data will probably be replaced with mask coefficient\n-or something\n-649 // SchemeWorker populates.\n-650 //\n-651 _\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bT_\ba_\bb_\bl_\be _quadOffsetsTable; // Quad offsets (for Gregory patches)\n-652 _\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be_\bT_\ba_\bb_\bl_\be _vertexValenceTable; // Vertex valence table (for\n-Gregory patches)\n-653\n-654 StencilTablePtr _localPointStencils; // local point conversion stencils\n-655 StencilTablePtr _localPointVaryingStencils; // local point varying stencils\n-656\n-657 //\n-658 // Varying data\n-659 //\n-660 PatchDescriptor _varyingDesc;\n-661\n-662 std::vector _varyingVerts;\n-663\n-664 //\n-665 // Face-varying data\n-666 //\n-667 FVarPatchChannelVector _fvarChannels;\n-668\n-669 std::vector _localPointFaceVaryingStencils;\n-670\n-671 //\n-672 // 'single-crease' patch sharpness tables\n-673 //\n-674 std::vector _sharpnessIndices; // Indices of single-crease sharpness\n-(one per patch)\n-675 std::vector _sharpnessValues; // Sharpness values.\n-676\n-677 //\n-678 // Construction history -- relevant to at least one public query:\n-679 //\n-680 unsigned int _isUniformLinear : 1;\n-681\n-682 //\n-683 // Precision -- only applies to local-point stencil tables\n-684 //\n-685 unsigned int _vertexPrecisionIsDouble : 1;\n-686 unsigned int _varyingPrecisionIsDouble : 1;\n-687 unsigned int _faceVaryingPrecisionIsDouble : 1;\n-688};\n-689\n-690\n-691//\n-692// Template specializations for float/double -- to be defined before used:\n-693//\n-694template <> inline StencilTableReal *\n-695PatchTable::StencilTablePtr::Get() const { return _fPtr; }\n-696\n-697template <> inline StencilTableReal *\n-698PatchTable::StencilTablePtr::Get() const { return _dPtr; }\n-699\n-_\b7_\b0_\b0template <> inline bool\n-701PatchTable::LocalPointStencilPrecisionMatchesType() const {\n-702 return !_vertexPrecisionIsDouble;\n-703}\n-_\b7_\b0_\b4template <> inline bool\n-705PatchTable::LocalPointVaryingStencilPrecisionMatchesType() const {\n-706 return !_varyingPrecisionIsDouble;\n-707}\n-_\b7_\b0_\b8template <> inline bool\n-709PatchTable::LocalPointFaceVaryingStencilPrecisionMatchesType() const\n-{\n-710 return !_faceVaryingPrecisionIsDouble;\n-711}\n-712\n-_\b7_\b1_\b3template <> inline bool\n-714PatchTable::LocalPointStencilPrecisionMatchesType() const {\n-715 return _vertexPrecisionIsDouble;\n-716}\n-_\b7_\b1_\b7template <> inline bool\n-718PatchTable::LocalPointVaryingStencilPrecisionMatchesType() const {\n-719 return _varyingPrecisionIsDouble;\n-720}\n-_\b7_\b2_\b1template <> inline bool\n-722PatchTable::LocalPointFaceVaryingStencilPrecisionMatchesType() const\n-{\n-723 return _faceVaryingPrecisionIsDouble;\n-724}\n-725\n-726//\n-727// StencilTable access -- backward compatible and generic:\n-728//\n-729inline _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *\n-_\b7_\b3_\b0_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be() const {\n-731 assert(LocalPointStencilPrecisionMatchesType());\n-732 return static_cast<_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *>(_localPointStencils.Get());\n-733}\n-734inline _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *\n-_\b7_\b3_\b5_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be() const {\n-736 assert(LocalPointVaryingStencilPrecisionMatchesType());\n-737 return static_cast<_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *>(\n-738 _localPointVaryingStencils.Get());\n-739}\n-740inline _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *\n-_\b7_\b4_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(int channel) const {\n-742 assert(LocalPointFaceVaryingStencilPrecisionMatchesType());\n-743 if (channel >= 0 && channel < (int)_localPointFaceVaryingStencils.size()) {\n-744 return static_cast<_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *>(\n-745 _localPointFaceVaryingStencils[channel].Get());\n-746 }\n-747 return NULL;\n-748}\n-749\n-750template \n-751inline _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bR_\be_\ba_\bl_\b<_\bR_\bE_\bA_\bL_\b> const *\n-_\b7_\b5_\b2_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be() const {\n-753 assert(LocalPointStencilPrecisionMatchesType());\n-754 return _localPointStencils.Get();\n-755}\n-756template \n-757inline _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bR_\be_\ba_\bl_\b<_\bR_\bE_\bA_\bL_\b> const *\n-_\b7_\b5_\b8_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be() const {\n-759 assert(LocalPointVaryingStencilPrecisionMatchesType());\n-760 return _localPointVaryingStencils.Get();\n-761}\n-762template \n-763inline _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bR_\be_\ba_\bl_\b<_\bR_\bE_\bA_\bL_\b> const *\n-_\b7_\b6_\b4_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(int channel) const {\n-765 assert(LocalPointFaceVaryingStencilPrecisionMatchesType());\n-766 if (channel >= 0 && channel < (int)_localPointFaceVaryingStencils.size()) {\n-767 return _localPointFaceVaryingStencils[channel].Get();\n-768 }\n-769 return NULL;\n-770}\n-771\n-772\n-773//\n-774// Computation of local point values:\n-775//\n-776template \n-777inline void\n-_\b7_\b7_\b8_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\bl_\bu_\be_\bs(T const *src, T *dst) const {\n-779 assert(LocalPointStencilPrecisionMatchesType());\n-780 if (_localPointStencils) {\n-781 _localPointStencils.Get()->UpdateValues(src, dst);\n-782 }\n-783}\n-784\n-785template \n-786inline void\n-_\b7_\b8_\b7_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\bl_\bu_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(T const *src, T *dst) const {\n-788 assert(LocalPointVaryingStencilPrecisionMatchesType());\n-789 if (_localPointVaryingStencils) {\n-790 _localPointVaryingStencils.Get()->UpdateValues(src, dst);\n-791 }\n-792}\n-793\n-794template \n-795inline void\n-_\b7_\b9_\b6_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\bl_\bu_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(T const *src, T *dst, int\n-channel) const {\n-797 assert(LocalPointFaceVaryingStencilPrecisionMatchesType());\n-798 if (channel >= 0 && channel < (int)_localPointFaceVaryingStencils.size()) {\n-799 if (_localPointFaceVaryingStencils[channel]) {\n-800 _localPointFaceVaryingStencils[channel].Get()->UpdateValues(src,\n-dst);\n-801 }\n-802 }\n-803}\n-804\n-805\n-806//\n-807// Basis evaluation overloads\n-808//\n-809inline void\n-_\b8_\b1_\b0_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, float u, float v,\n-811 float wP[], float wDu[], float wDv[],\n-812 float wDuu[], float wDuv[], float wDvv[]) const {\n-813\n-814 EvaluateBasis(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv);\n-815}\n-816inline void\n-_\b8_\b1_\b7_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, double u, double v,\n-818 double wP[], double wDu[], double wDv[],\n-819 double wDuu[], double wDuv[], double wDvv[]) const {\n-820\n-821 EvaluateBasis(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv);\n-822}\n-823\n-824inline void\n-_\b8_\b2_\b5_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, float u, float\n-v,\n-826 float wP[], float wDu[], float wDv[],\n-827 float wDuu[], float wDuv[], float wDvv[]) const {\n-828\n-829 EvaluateBasisVarying(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv);\n-830}\n-831inline void\n-_\b8_\b3_\b2_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, double u,\n-double v,\n-833 double wP[], double wDu[], double wDv[],\n-834 double wDuu[], double wDuv[], double wDvv[]) const {\n-835\n-836 EvaluateBasisVarying(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv);\n-837}\n-838\n-839inline void\n-_\b8_\b4_\b0_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, float u,\n-float v,\n-841 float wP[], float wDu[], float wDv[],\n-842 float wDuu[], float wDuv[], float wDvv[], int channel) const {\n-843\n-844 EvaluateBasisFaceVarying(handle, u, v, wP, wDu, wDv, wDuu, wDuv,\n-wDvv, channel);\n-845}\n-846inline void\n-_\b8_\b4_\b7_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, double u,\n-double v,\n-848 double wP[], double wDu[], double wDv[],\n-849 double wDuu[], double wDuv[], double wDvv[], int channel) const {\n-850\n-851 EvaluateBasisFaceVarying(handle, u, v, wP, wDu, wDv, wDuu, wDuv,\n-wDvv, channel);\n-852}\n-853\n-854} // end namespace Far\n-855\n-856} // end namespace OPENSUBDIV_VERSION\n-857using namespace OPENSUBDIV_VERSION;\n-858\n-859} // end namespace OpenSubdiv\n-860\n-861#endif /* OPENSUBDIV3_FAR_PATCH_TABLE */\n+234\n+235#endif /* OPENSUBDIV3_FAR_PATCH_TABLE_FACTORY_H */\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bT_\ba_\bb_\bl_\be\n-std::vector< PatchParam > PatchParamTable\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\b._\bh_\b:_\b2_\b4_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bI_\bn_\bd_\be_\bx\n-Vtr::Index Index\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b4_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< PatchArray > PatchArrayVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b1_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-Describes the type of a patch.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bM_\ba_\bp\n-An quadtree-based map connecting coarse faces to their sub-patches.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bM_\ba_\bp_\b._\bh_\b:_\b4_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm\n-Patch parameterization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\b._\bh_\b:_\b1_\b5_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by\n+Vtr::ConstIndexArray ConstIndexArray\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b4_\b7\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n Container for arrays of parametric patches.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\ba_\br_\by_\bi_\bn_\bg_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-ConstIndexArray GetPatchArrayVaryingVertices(int array) const\n-Returns the varying vertex indices for the patches in array.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bg_\be_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bV_\ba_\bl_\bu_\be_\bs\n-float * getSharpnessValues(Index arrayIndex)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs_\bT_\ba_\bb_\bl_\be\n-PatchVertsTable const & GetPatchControlVerticesTable() const\n-Get the table of patch control vertices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b3_\b7_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\bl_\bu_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n-void ComputeLocalPointValuesFaceVarying(T const *src, T *dst, int channel=0)\n-const\n-Updates local point face-varying values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b9_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-ConstIndexArray GetVaryingVertices() const\n-Returns an array of varying vertex indices for the patches.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\bl_\bu_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n-void ComputeLocalPointValuesVarying(T const *src, T *dst) const\n-Updates local point varying values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b8_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bV_\ba_\br_\by_\bi_\bn_\bg_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-ConstIndexArray GetPatchVaryingVertices(PatchHandle const &handle) const\n-Returns the varying vertex indices for a given patch.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bI_\bs_\bF_\be_\ba_\bt_\bu_\br_\be_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be\n-bool IsFeatureAdaptive() const\n-True if the patches are of feature adaptive types.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bM_\ba_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be\n-int GetMaxValence() const\n-Returns max vertex valence.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b9_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n-StencilTableReal< REAL > const * GetLocalPointStencilTable() const\n-Returns the stencil table to compute local point vertex values.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n-StencilTable const * GetLocalPointStencilTable() const\n-Returns the stencil table to compute local point vertex values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b3_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bg_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bs\n-PatchParamArray getPatchParams(int arrayIndex)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bs\n-ConstIndexArray GetPatchArrayFVarValues(int array, int channel=0) const\n-Returns the value indices for the patches in array in channel.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bV_\ba_\bl_\bu_\be_\bs\n-std::vector< float > const & GetSharpnessValues() const\n-Returns sharpness values table.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b3_\b8_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be_\bT_\ba_\bb_\bl_\be\n-std::vector< Index > VertexValenceTable\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b2_\b6_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm\n-PatchParam GetPatchFVarPatchParam(int array, int patch, int channel=0) const\n-Returns the face-varying params for a given patch channel.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bV_\ba_\br_\by_\bi_\bn_\bg_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-ConstIndexArray GetPatchVaryingVertices(int array, int patch) const\n-Returns the varying vertex indices for a given patch.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-PatchTable(PatchTable const &src)\n-Copy constructor.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n-int GetNumPatchArrays() const\n-Returns the number of patch arrays in the table.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-ConstIndexArray GetPatchVertices(PatchHandle const &handle) const\n-Returns the control vertex indices for the patch identified by handle.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-PatchTable(int maxvalence)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bM_\ba_\bt_\bc_\bh_\be_\bs_\bT_\by_\bp_\be\n-bool LocalPointFaceVaryingStencilPrecisionMatchesType() const\n-Tests if the precision of the stencil table to compute local point face-varying\n-values matches the gi...\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bT_\ba_\bb_\bl_\be\n-PatchParamTable const & GetPatchParamTable() const\n-Returns the PatchParamTable (PatchParams order matches patch array sorting)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b3_\b8_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be_\bT_\ba_\bb_\bl_\be\n-VertexValenceTable const & GetVertexValenceTable() const\n-Returns the 'VertexValences' table (vertex neighborhoods table)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b2_\b6_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n-StencilTable const * GetLocalPointFaceVaryingStencilTable(int channel=0) const\n-Returns the stencil table to compute local point face-varying values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b4_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-int GetNumControlVertices(int array) const\n-Returns the number of control vertices in array.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b~_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-~PatchTable()\n-Destructor.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n-void EvaluateBasisFaceVarying(PatchHandle const &handle, REAL u, REAL v, REAL\n-wP[], REAL wDu[]=0, REAL wDv[]=0, REAL wDuu[]=0, REAL wDuv[]=0, REAL wDvv[]=0,\n-int channel=0) const\n-Evaluate basis functions for a face-varying value and derivatives at a given\n-(u,v) parametric locatio...\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs\n-ConstQuadOffsetsArray GetPatchQuadOffsets(PatchHandle const &handle) const\n-Returns the 'QuadOffsets' for the Gregory patch identified by handle.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bI_\br_\br_\be_\bg_\bu_\bl_\ba_\br\n-PatchDescriptor GetFVarPatchDescriptorIrregular(int channel=0) const\n-Returns the irregular patch descriptor for channel.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\bG_\be_\bt_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bV_\ba_\bl_\bu_\be\n-float GetSingleCreasePatchSharpnessValue(int array, int patch) const\n-Returns the crease sharpness for the patch in array if it is a single-crease\n-patch,...\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bg_\be_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-Index * getSharpnessIndices(Index arrayIndex)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\bl_\bu_\be_\bs\n-void ComputeLocalPointValues(T const *src, T *dst) const\n-Updates local point vertex values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b7_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\bG_\be_\bt_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bV_\ba_\bl_\bu_\be\n-float GetSingleCreasePatchSharpnessValue(PatchHandle const &handle) const\n-Returns the crease sharpness for the patch identified by handle if it is a\n-single-crease patch,...\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm\n-PatchParam GetPatchParam(int array, int patch) const\n-Returns the PatchParam for patch in array.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bs\n-ConstIndexArray GetPatchFVarValues(int array, int patch, int channel=0) const\n-Returns the value indices for a given patch in channel.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bR_\be_\bg_\bu_\bl_\ba_\br\n-PatchDescriptor GetFVarPatchDescriptorRegular(int channel=0) const\n-Returns the regular patch descriptor for channel.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-PatchDescriptor GetPatchDescriptor(PatchHandle const &handle) const\n-Returns the PatchDescriptor for the patch identified by handle.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bV_\be_\br_\bt_\bs_\bT_\ba_\bb_\bl_\be\n-std::vector< Index > PatchVertsTable\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b3_\b7_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bT_\ba_\bb_\bl_\be\n-QuadOffsetsTable const & GetQuadOffsetsTable() const\n-Returns the quad-offsets table.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b3_\b9_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bP_\ba_\bt_\bc_\bh_\be_\bs\n-int GetNumPatches(int array) const\n-Returns the number of patches in array.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-PatchDescriptor GetVaryingPatchDescriptor() const\n-Returns the varying patch descriptor.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bs\n-ConstIndexArray GetPatchFVarValues(PatchHandle const &handle, int channel=0)\n-const\n-Returns the value indices for a given patch in channel.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bs\n-ConstPatchParamArray const GetPatchParams(int array) const\n-Returns the PatchParams for the patches in array.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs_\bT_\bo_\bt_\ba_\bl\n-int GetNumControlVerticesTotal() const\n-Returns the total number of control vertex indices in the table.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs\n-int GetNumFVarChannels() const\n-Returns the number of face-varying channels.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bs\n-ConstPatchParamArray GetPatchArrayFVarPatchParams(int array, int channel=0)\n-const\n-Returns the face-varying for a given patch in array in channel.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bg_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx\n-Index getPatchIndex(int array, int patch) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bs\n-int GetNumLocalPoints() const\n-Returns the number of local vertex points.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bM_\ba_\bt_\bc_\bh_\be_\bs_\bT_\by_\bp_\be\n-bool LocalPointVaryingStencilPrecisionMatchesType() const\n-Tests if the precision of the stencil table to compute local point varying\n-values matches the given f...\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-ConstIndexArray GetPatchArrayVertices(int array) const\n-Returns the control vertex indices for the patches in array.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bP_\bt_\be_\bx_\bF_\ba_\bc_\be_\bs\n-int GetNumPtexFaces() const\n-Returns the total number of ptex faces in the mesh.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b9_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bs\n-ConstIndexArray GetFVarValues(int channel=0) const\n-Returns an array of value indices for the patches in channel.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bA_\br_\br_\ba_\by\n-Vtr::ConstArray< unsigned int > ConstQuadOffsetsArray\n-Accessors for the gregory patch evaluation buffers. These methods will be\n-deprecated.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b2_\b5_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs\n-void EvaluateBasis(PatchHandle const &handle, REAL u, REAL v, REAL wP[], REAL\n-wDu[]=0, REAL wDv[]=0, REAL wDuu[]=0, REAL wDuv[]=0, REAL wDvv[]=0) const\n-Evaluate basis functions for position and derivatives at a given (u,v)\n-parametric location of a patch...\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n-StencilTableReal< REAL > const * GetLocalPointFaceVaryingStencilTable(int\n-channel=0) const\n-Returns the stencil table to compute local point face-varying values.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bT_\bo_\bt_\ba_\bl\n-int GetNumPatchesTotal() const\n-Returns the total number of patches stored in the table.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm\n-PatchParam GetPatchParam(PatchHandle const &handle) const\n-Returns a PatchParam for the patch identified by handle.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print() const\n-debug helper\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\bG_\be_\bt_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn\n-Sdc::Options::FVarLinearInterpolation GetFVarChannelLinearInterpolation(int\n-channel=0) const\n-Deprecated.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bI_\bn_\bd_\be_\bx_\bT_\ba_\bb_\bl_\be\n-std::vector< Index > const & GetSharpnessIndexTable() const\n-Returns a sharpness index table for each patch (if exists)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b3_\b8_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-PatchDescriptor GetPatchArrayDescriptor(int array) const\n-Returns the PatchDescriptor for the patches in array.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bB_\bu_\bi_\bl_\bd_\be_\br\n-friend class PatchTableBuilder\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b3_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n-void EvaluateBasisVarying(PatchHandle const &handle, REAL u, REAL v, REAL wP[],\n-REAL wDu[]=0, REAL wDv[]=0, REAL wDuu[]=0, REAL wDuv[]=0, REAL wDvv[]=0) const\n-Evaluate basis functions for a varying value and derivatives at a given (u,v)\n-parametric location of ...\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n-StencilTable const * GetLocalPointVaryingStencilTable() const\n-Returns the stencil table to compute local point varying values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b3_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bT_\ba_\bb_\bl_\be\n-std::vector< unsigned int > QuadOffsetsTable\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b3_\b8_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-ConstIndexArray GetPatchVertices(int array, int patch) const\n-Returns the control vertex indices for patch in array.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm\n-PatchParam GetPatchFVarPatchParam(PatchHandle const &handle, int channel=0)\n-const\n-Returns the value indices for a given patch in channel.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bS_\bt_\br_\bi_\bd_\be\n-int GetFVarValueStride(int channel=0) const\n-Returns the stride between patches in the value index array of channel.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bs\n-ConstPatchParamArray GetFVarPatchParams(int channel=0) const\n-Returns an array of face-varying patch param for channel.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-PatchDescriptor GetFVarPatchDescriptor(int channel=0) const\n-Returns the default/irregular patch descriptor for channel.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n-int GetNumLocalPointsVarying() const\n-Returns the number of local varying points.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bM_\ba_\bt_\bc_\bh_\be_\bs_\bT_\by_\bp_\be\n-bool LocalPointStencilPrecisionMatchesType() const\n-Tests if the precision of the stencil table to compute local point vertex\n-values matches the given fl...\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n-StencilTableReal< REAL > const * GetLocalPointVaryingStencilTable() const\n-Returns the stencil table to compute local point varying values.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n-int GetNumLocalPointsFaceVarying(int channel=0) const\n-Returns the number of local face-varying points for channel.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be\n-Handle that can be used as unique patch identifier within PatchTable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be_\b:_\b:_\bp_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx\n-Index patchIndex\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be_\b:_\b:_\ba_\br_\br_\ba_\by_\bI_\bn_\bd_\be_\bx\n-Index arrayIndex\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be_\b:_\b:_\bv_\be_\br_\bt_\bI_\bn_\bd_\be_\bx\n-Index vertIndex\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bR_\be_\ba_\bl\n-Table of subdivision stencils.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b4_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n-Stencil table class wrapping the template for compatibility.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b2_\b7_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bV_\ba_\br_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn\n-FVarLinearInterpolation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b6_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by\n+Factory for constructing a PatchTable from a TopologyRefiner.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b4_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bg_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< PatchFaceTag > PatchTagVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b2_\b0_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static PatchTable * Create(TopologyRefiner const &refiner, Options\n+options=Options(), ConstIndexArray selectedFaces=ConstIndexArray())\n+Instantiates a PatchTable from a client-provided TopologyRefiner.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n+Public options for the PatchTable factory.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b4_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bT_\ba_\bb_\bl_\be_\bs\n+unsigned int generateVaryingTables\n+Generate varying patch tables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b2_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bL_\be_\bg_\ba_\bc_\by_\bS_\bh_\ba_\br_\bp_\bC_\bo_\br_\bn_\be_\br_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+unsigned int generateLegacySharpCornerPatches\n+Generate sharp regular patches at smooth corners (legacy)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b3_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bs_\bh_\ba_\br_\be_\bE_\bn_\bd_\bC_\ba_\bp_\bP_\ba_\bt_\bc_\bh_\bP_\bo_\bi_\bn_\bt_\bs\n+unsigned int shareEndCapPatchPoints\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b2_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bG_\be_\bt_\bR_\be_\bf_\bi_\bn_\be_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n+TopologyRefiner::AdaptiveOptions GetRefineAdaptiveOptions() const\n+Determine adaptive refinement options to match assigned patch options.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b0_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bm_\ba_\bx_\bI_\bs_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\bL_\be_\bv_\be_\bl\n+unsigned int maxIsolationLevel\n+Cap adaptive feature isolation to the given level (max. 10)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b1_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\be_\bt_\bE_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be\n+EndCapType GetEndCapType() const\n+Get endcap basis type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b8_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bF_\bV_\ba_\br_\bL_\be_\bg_\ba_\bc_\by_\bL_\bi_\bn_\be_\ba_\br_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+unsigned int generateFVarLegacyLinearPatches\n+Generate all linear face-varying patches (legacy)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b3_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bS_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn\n+void SetPatchPrecision()\n+Set precision of vertex patches.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bD_\bo_\bu_\bb_\bl_\be\n+unsigned int fvarPatchPrecisionDouble\n+Generate double-precision stencils for face-varying patches.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b3_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bS_\be_\bt_\bM_\ba_\bx_\bI_\bs_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\bL_\be_\bv_\be_\bl\n+void SetMaxIsolationLevel(unsigned int level)\n+Set maximum isolation level.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b9_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\be_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be\n+unsigned int endCapType\n+EndCapType.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b2_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bf_\bv_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+int const * fvarChannelIndices\n+List containing the indices of the channels selected for the factory.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b4_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bu_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh\n+unsigned int useSingleCreasePatch\n+Use single crease patch.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b1_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bu_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh\n+unsigned int useInfSharpPatch\n+Use infinitely-sharp patch.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b1_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\be_\bt_\bE_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be\n+void SetEndCapType(EndCapType e)\n+Set endcap basis type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b8_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bs\n+unsigned int generateVaryingLocalPoints\n+Generate local points with varying patches.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b2_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bi_\bn_\bc_\bl_\bu_\bd_\be_\bF_\bV_\ba_\br_\bB_\ba_\bs_\be_\bL_\be_\bv_\be_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+unsigned int includeFVarBaseLevelIndices\n+Include base level in face-varying patch point indices (Uniform mode only)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b1_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bA_\bl_\bl_\bL_\be_\bv_\be_\bl_\bs\n+unsigned int generateAllLevels\n+Generate levels from 'firstLevel' to 'maxLevel' (Uniform mode only)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b1_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bp_\ba_\bt_\bc_\bh_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bD_\bo_\bu_\bb_\bl_\be\n+unsigned int patchPrecisionDouble\n+Generate double-precision stencils for vertex patches.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b3_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bF_\bV_\ba_\br_\bT_\ba_\bb_\bl_\be_\bs\n+unsigned int generateFVarTables\n+Generate face-varying patch tables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b2_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bi_\bn_\bc_\bl_\bu_\bd_\be_\bB_\ba_\bs_\be_\bL_\be_\bv_\be_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+unsigned int includeBaseLevelIndices\n+Include base level in patch point indices (Uniform mode only)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b1_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bS_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn\n+void SetFVarPatchPrecision()\n+Set precision of face-varying patches.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bn_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs\n+int numFVarChannels\n+Number of channel indices and interpolation modes passed.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b3_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bQ_\bu_\ba_\bd_\bs\n+unsigned int triangulateQuads\n+Triangulate 'QUADS' primitives (Uniform mode only)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b1_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be\n+EndCapType\n+Choice for approximating irregular patches (end-caps)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b5_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bL_\bE_\bG_\bA_\bC_\bY_\b__\bG_\bR_\bE_\bG_\bO_\bR_\bY\n+@ ENDCAP_LEGACY_GREGORY\n+legacy option for 2.x style Gregory patches (Catmark only)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b6_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bA_\bS_\bI_\bS\n+@ ENDCAP_GREGORY_BASIS\n+use Gregory patches (highest quality, recommended default)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b5_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bN_\bO_\bN_\bE\n+@ ENDCAP_NONE\n+unspecified\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b5_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b__\bB_\bA_\bS_\bI_\bS\n+@ ENDCAP_BILINEAR_BASIS\n+use linear patches (simple quads or tris)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b5_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bB_\bS_\bP_\bL_\bI_\bN_\bE_\b__\bB_\bA_\bS_\bI_\bS\n+@ ENDCAP_BSPLINE_BASIS\n+use BSpline-like patches (same patch type as regular)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b5_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n+Options(unsigned int maxIsolation=10)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b6_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg\n+Obsolete internal struct not intended for public use \u00e2\u0080\u0093 due to be deprecated.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b9_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg_\b:_\b:\n+_\b__\bi_\bs_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be\n+unsigned int _isSingleCrease\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b2_\b0_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg_\b:_\b:\n+_\b__\bi_\bs_\bR_\be_\bg_\bu_\bl_\ba_\br\n+unsigned int _isRegular\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b9_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg_\b:_\b:\n+_\b__\bb_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bd_\be_\bx\n+unsigned int _boundaryIndex\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b9_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg_\b:_\b:\n+_\ba_\bs_\bs_\bi_\bg_\bn_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bP_\br_\bo_\bp_\be_\br_\bt_\bi_\be_\bs_\bF_\br_\bo_\bm_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk\n+void assignBoundaryPropertiesFromVertexMask(int boundaryVertexMask)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg_\b:_\b:\n+_\b__\bt_\br_\ba_\bn_\bs_\bi_\bt_\bi_\bo_\bn_\bM_\ba_\bs_\bk\n+unsigned int _transitionMask\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b9_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg_\b:_\b:\n+_\b__\bh_\ba_\bs_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bE_\bd_\bg_\be\n+unsigned int _hasBoundaryEdge\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b2_\b0_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg_\b:_\b:\n+_\b__\bb_\bo_\bu_\bn_\bd_\ba_\br_\by_\bM_\ba_\bs_\bk\n+unsigned int _boundaryMask\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b9_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg_\b:_\b:_\b__\bh_\ba_\bs_\bP_\ba_\bt_\bc_\bh\n+unsigned int _hasPatch\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b9_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg_\b:_\b:\n+_\ba_\bs_\bs_\bi_\bg_\bn_\bT_\br_\ba_\bn_\bs_\bi_\bt_\bi_\bo_\bn_\bP_\br_\bo_\bp_\be_\br_\bt_\bi_\be_\bs_\bF_\br_\bo_\bm_\bE_\bd_\bg_\be_\bM_\ba_\bs_\bk\n+void assignTransitionPropertiesFromEdgeMask(int boundaryVertexMask)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg_\b:_\b:_\bc_\bl_\be_\ba_\br\n+void clear()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg_\b:_\b:\n+_\ba_\bs_\bs_\bi_\bg_\bn_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bP_\br_\bo_\bp_\be_\br_\bt_\bi_\be_\bs_\bF_\br_\bo_\bm_\bE_\bd_\bg_\be_\bM_\ba_\bs_\bk\n+void assignBoundaryPropertiesFromEdgeMask(int boundaryEdgeMask)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg_\b:_\b:\n+_\b__\bb_\bo_\bu_\bn_\bd_\ba_\br_\by_\bC_\bo_\bu_\bn_\bt\n+unsigned int _boundaryCount\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b9_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br\n+Stores topology data for a specified set of refinement options.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b5_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n+Adaptive refinement options.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b1_\b5_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bu_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh\n+unsigned int useSingleCreasePatch\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b1_\b7_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bu_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh\n+unsigned int useInfSharpPatch\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b1_\b7_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bc_\bo_\bn_\bs_\bi_\bd_\be_\br_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs\n+unsigned int considerFVarChannels\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b1_\b8_\b0\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b5_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b0_\b5\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bf_\ba_\br\n- * _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n+ * _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00731.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00731.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/far/patchTableFactory.h File Reference\n+OpenSubdiv: opensubdiv/far/patchTable.h File Reference\n \n \n \n \n \n \n \n@@ -90,33 +90,33 @@\n \n \n \n
\n \n-
patchTableFactory.h File Reference
\n+
patchTable.h File Reference
\n
\n
\n
#include "../version.h"
\n-#include "../far/topologyRefiner.h"
\n-#include "../far/patchTable.h"
\n+#include "../far/patchDescriptor.h"
\n+#include "../far/patchParam.h"
\n+#include "../far/stencilTable.h"
\n+#include "../sdc/options.h"
\n+#include <vector>
\n
\n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n-\n-\n-\n-\n+\n+\n \n

\n Classes

class  PatchTableFactory
 Factory for constructing a PatchTable from a TopologyRefiner. More...
class  PatchTable
 Container for arrays of parametric patches. More...
 
struct  PatchTableFactory::Options
 Public options for the PatchTable factory. More...
 
struct  PatchTableFactory::PatchFaceTag
 Obsolete internal struct not intended for public use – due to be deprecated. More...
class  PatchTable::PatchHandle
 Handle that can be used as unique patch identifier within PatchTable. More...
 
\n \n \n \n \n@@ -125,13 +125,13 @@\n \n

\n Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +1,32 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-patchTableFactory.h File Reference\n+patchTable.h File Reference\n #include \"../version.h\"\n-#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh\"\n-#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\"\n+#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\"\n+#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\b._\bh\"\n+#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b._\bh\"\n+#include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\"\n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by\n-\u00a0 Factory for constructing a _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be from a _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+\u00a0 Container for arrays of parametric patches. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n-\u00a0 Public options for the _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be factory. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg\n-\u00a0 Obsolete internal struct not intended for public use \u2013 due to be\n- deprecated. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be\n+\u00a0 Handle that can be used as unique patch identifier within _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bf_\ba_\br\n- * _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh\n+ * _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00731.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00731.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,4 @@\n var a00731 = [\n- [\"PatchTableFactory\", \"a01009.html\", \"a01009\"],\n- [\"Options\", \"a01013.html\", \"a01013\"],\n- [\"PatchFaceTag\", \"a01017.html\", \"a01017\"]\n+ [\"PatchTable\", \"a00993.html\", \"a00993\"],\n+ [\"PatchHandle\", \"a00997.html\", \"a00997\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00731_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00731_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/far/patchTableFactory.h Source File\n+OpenSubdiv: opensubdiv/far/patchTable.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
patchTableFactory.h
\n+
patchTable.h
\n
\n
\n Go to the documentation of this file.
1//
\n
2// Copyright 2013 Pixar
\n
3//
\n
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
\n
5// with the following modification; you may not use this file except in
\n@@ -119,249 +119,747 @@\n
18// Unless required by applicable law or agreed to in writing, software
\n
19// distributed under the Apache License with the above modification is
\n
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
\n
21// KIND, either express or implied. See the Apache License for the specific
\n
22// language governing permissions and limitations under the Apache License.
\n
23//
\n
24
\n-
25#ifndef OPENSUBDIV3_FAR_PATCH_TABLE_FACTORY_H
\n-
26#define OPENSUBDIV3_FAR_PATCH_TABLE_FACTORY_H
\n+
25#ifndef OPENSUBDIV3_FAR_PATCH_TABLE_H
\n+
26#define OPENSUBDIV3_FAR_PATCH_TABLE_H
\n
27
\n
28#include "../version.h"
\n
29
\n-
30#include "../far/topologyRefiner.h"
\n-
31#include "../far/patchTable.h"
\n-
32
\n-
33namespace OpenSubdiv {
\n-
34namespace OPENSUBDIV_VERSION {
\n+
30#include "../far/patchDescriptor.h"
\n+
31#include "../far/patchParam.h"
\n+
32#include "../far/stencilTable.h"
\n+
33
\n+
34#include "../sdc/options.h"
\n
35
\n-
36namespace Far {
\n+
36#include <vector>
\n
37
\n-
\n-\n-
41public:
\n+
38namespace OpenSubdiv {
\n+
39namespace OPENSUBDIV_VERSION {
\n+
40
\n+
41namespace Far {
\n
42
\n-
\n-
45 struct Options {
\n-
46
\n \n-
62
\n-
\n-
63 Options(unsigned int maxIsolation=10) :
\n-
64 generateAllLevels(false),
\n-\n-\n-
67 triangulateQuads(false),
\n-\n-
69 useInfSharpPatch(false),
\n-
70 maxIsolationLevel(maxIsolation & 0xf),
\n-\n-\n-\n-\n-
75 generateFVarTables(false),
\n-\n-\n-\n-\n-\n-\n-
82 { }
\n-
\n-
83
\n-\n-
86
\n-
88 void SetEndCapType(EndCapType e) { endCapType = e & 0x7; }
\n-
89
\n-
91 void SetMaxIsolationLevel(unsigned int level) { maxIsolationLevel = level & 0xf; }
\n-
92
\n-
94 template <typename REAL> void SetPatchPrecision();
\n-
95
\n-
97 template <typename REAL> void SetFVarPatchPrecision();
\n-
98
\n-
\n-\n-\n-
102
\n-
103 adaptiveOptions.useInfSharpPatch = useInfSharpPatch;
\n-\n-
105 adaptiveOptions.considerFVarChannels = generateFVarTables &&
\n-\n-
107 return adaptiveOptions;
\n-
108 }
\n-
\n-
109
\n-
110 unsigned int generateAllLevels : 1,
\n-\n-\n-\n+\n+
56
\n+
57public:
\n+
58
\n+
\n+\n+
61 // XXXX manuelk members will eventually be made private
\n+
62 public:
\n+
63
\n+
64 friend class PatchTable;
\n+
65 friend class PatchMap;
\n+
66
\n+
67 Index arrayIndex, // Array index of the patch
\n+
68 patchIndex, // Absolute Index of the patch
\n+
69 vertIndex; // Relative offset to the first CV of the patch in array
\n+
70 };
\n+
\n+
71
\n+
72public:
\n+
73
\n+
75 PatchTable(PatchTable const & src);
\n+
76
\n+\n+
79
\n+
81 bool IsFeatureAdaptive() const;
\n+
82
\n+
\n+\n+
85 return (int)_patchVerts.size();
\n+
86 }
\n+
\n+
87
\n+
89 int GetNumPatchesTotal() const;
\n+
90
\n+
92 int GetMaxValence() const { return _maxValence; }
\n+
93
\n+
95 int GetNumPtexFaces() const { return _numPtexFaces; }
\n+
96
\n+
97
\n+
99
\n+
105
\n+\n+
108
\n+\n+
111
\n+
113 PatchParam GetPatchParam(PatchHandle const & handle) const;
\n
114
\n-\n-\n-\n-
118
\n-
119 // end-capping
\n-\n-\n-
123
\n-
124 // varying
\n-\n-\n-
127
\n-
128 // face-varying
\n-\n+
116 ConstIndexArray GetPatchVertices(int array, int patch) const;
\n+
117
\n+
119 PatchParam GetPatchParam(int array, int patch) const;
\n+
121
\n+
122
\n+
124
\n
130
\n-
131 // precision
\n-\n-\n-
134
\n-
135 // legacy behaviors (default to true)
\n-\n-\n-
138
\n-\n-
140 int const * fvarChannelIndices;
\n-
141 };
\n-
\n+
132 int GetNumPatchArrays() const;
\n+
133
\n+
135 int GetNumPatches(int array) const;
\n+
136
\n+
138 int GetNumControlVertices(int array) const;
\n+
139
\n+\n
142
\n-
175 static PatchTable * Create(TopologyRefiner const & refiner,
\n-
176 Options options = Options(),
\n-
177 ConstIndexArray selectedFaces = ConstIndexArray());
\n-
178
\n-
179public:
\n-
180 // PatchFaceTag
\n-
181 //
\n-
182 // This simple struct was previously used within the factory to take inventory of
\n-
183 // various kinds of patches to fully allocate buffers prior to populating them. It
\n-
184 // was not intended to be exposed as part of the public interface.
\n-
185 //
\n-
186 // It is no longer used internally and is being kept here to respect preservation
\n-
187 // of the public interface, but it will be deprecated at the earliest opportunity.
\n-
188 //
\n-
191 //
\n-
\n-\n-
193 public:
\n-
194 unsigned int _hasPatch : 1;
\n-
195 unsigned int _isRegular : 1;
\n-
196 unsigned int _transitionMask : 4;
\n-
197 unsigned int _boundaryMask : 4;
\n-
198 unsigned int _boundaryIndex : 2;
\n-
199 unsigned int _boundaryCount : 3;
\n-
200 unsigned int _hasBoundaryEdge : 3;
\n-
201 unsigned int _isSingleCrease : 1;
\n-
202
\n-
203 void clear();
\n-
204 void assignBoundaryPropertiesFromEdgeMask(int boundaryEdgeMask);
\n-
205 void assignBoundaryPropertiesFromVertexMask(int boundaryVertexMask);
\n-
206 void assignTransitionPropertiesFromEdgeMask(int boundaryVertexMask);
\n-
207 };
\n-
\n-
208 typedef std::vector<PatchFaceTag> PatchTagVector;
\n-
209};
\n-
\n-
210
\n-
211
\n-
\n-
212template <> inline void PatchTableFactory::Options::SetPatchPrecision<float>() {
\n-
213 patchPrecisionDouble = false;
\n-
214}
\n-
\n-
\n-
215template <> inline void PatchTableFactory::Options::SetFVarPatchPrecision<float>() {
\n-
216 fvarPatchPrecisionDouble = false;
\n-
217}
\n-
\n+\n+
145
\n+
147 ConstPatchParamArray const GetPatchParams(int array) const;
\n+
149
\n+
150
\n+
152
\n+
159
\n+
161 int GetNumLocalPoints() const;
\n+
162
\n+\n+
165
\n+
167 template <typename REAL>
\n+\n+
169
\n+
172 template <typename REAL> bool LocalPointStencilPrecisionMatchesType() const;
\n+
173
\n+
186 template <class T> void
\n+
187 ComputeLocalPointValues(T const *src, T *dst) const;
\n+
188
\n+
189
\n+\n+
192
\n+\n+
195
\n+
197 template <typename REAL>
\n+\n+
199
\n+
202 template <typename REAL> bool LocalPointVaryingStencilPrecisionMatchesType() const;
\n+
203
\n+
216 template <class T> void
\n+
217 ComputeLocalPointValuesVarying(T const *src, T *dst) const;
\n
218
\n-
219template <> inline void PatchTableFactory::Options::SetPatchPrecision<double>() {
\n-
220 patchPrecisionDouble = true;
\n-
221}
\n-
222template <> inline void PatchTableFactory::Options::SetFVarPatchPrecision<double>() {
\n-
223 fvarPatchPrecisionDouble = true;
\n-
224}
\n+
219
\n+
221 int GetNumLocalPointsFaceVarying(int channel = 0) const;
\n+
222
\n+
224 StencilTable const *GetLocalPointFaceVaryingStencilTable(int channel = 0) const;
\n
225
\n-
226
\n-
227} // end namespace Far
\n-
228
\n-
229} // end namespace OPENSUBDIV_VERSION
\n-
230using namespace OPENSUBDIV_VERSION;
\n-
231
\n-
232} // end namespace OpenSubdiv
\n+
227 template <typename REAL>
\n+\n+
229
\n+
232 template <typename REAL> bool LocalPointFaceVaryingStencilPrecisionMatchesType() const;
\n
233
\n-
234
\n-
235#endif /* OPENSUBDIV3_FAR_PATCH_TABLE_FACTORY_H */
\n-\n-
Vtr::ConstIndexArray ConstIndexArray
Definition types.h:47
\n-
Container for arrays of parametric patches.
Definition patchTable.h:55
\n-
Factory for constructing a PatchTable from a TopologyRefiner.
\n-\n-
static PatchTable * Create(TopologyRefiner const &refiner, Options options=Options(), ConstIndexArray selectedFaces=ConstIndexArray())
Instantiates a PatchTable from a client-provided TopologyRefiner.
\n-\n-
unsigned int generateVaryingTables
Generate varying patch tables.
\n-
unsigned int generateLegacySharpCornerPatches
Generate sharp regular patches at smooth corners (legacy)
\n-\n-
TopologyRefiner::AdaptiveOptions GetRefineAdaptiveOptions() const
Determine adaptive refinement options to match assigned patch options.
\n-
unsigned int maxIsolationLevel
Cap adaptive feature isolation to the given level (max. 10)
\n-\n-
unsigned int generateFVarLegacyLinearPatches
Generate all linear face-varying patches (legacy)
\n-
void SetPatchPrecision()
Set precision of vertex patches.
\n-
unsigned int fvarPatchPrecisionDouble
Generate double-precision stencils for face-varying patches.
\n-
void SetMaxIsolationLevel(unsigned int level)
Set maximum isolation level.
\n-\n-
int const * fvarChannelIndices
List containing the indices of the channels selected for the factory.
\n-\n-\n-\n-
unsigned int generateVaryingLocalPoints
Generate local points with varying patches.
\n-
unsigned int includeFVarBaseLevelIndices
Include base level in face-varying patch point indices (Uniform mode only)
\n-
unsigned int generateAllLevels
Generate levels from 'firstLevel' to 'maxLevel' (Uniform mode only)
\n-
unsigned int patchPrecisionDouble
Generate double-precision stencils for vertex patches.
\n-
unsigned int generateFVarTables
Generate face-varying patch tables.
\n-
unsigned int includeBaseLevelIndices
Include base level in patch point indices (Uniform mode only)
\n-
void SetFVarPatchPrecision()
Set precision of face-varying patches.
\n-
int numFVarChannels
Number of channel indices and interpolation modes passed.
\n-
unsigned int triangulateQuads
Triangulate 'QUADS' primitives (Uniform mode only)
\n-
EndCapType
Choice for approximating irregular patches (end-caps)
\n-
@ ENDCAP_LEGACY_GREGORY
legacy option for 2.x style Gregory patches (Catmark only)
\n-
@ ENDCAP_GREGORY_BASIS
use Gregory patches (highest quality, recommended default)
\n-\n-
@ ENDCAP_BILINEAR_BASIS
use linear patches (simple quads or tris)
\n-
@ ENDCAP_BSPLINE_BASIS
use BSpline-like patches (same patch type as regular)
\n-\n-
Obsolete internal struct not intended for public use \u2013 due to be deprecated.
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-
Stores topology data for a specified set of refinement options.
\n-\n-\n-\n-\n-\n+
248 template <class T> void
\n+
249 ComputeLocalPointValuesFaceVarying(T const *src, T *dst, int channel = 0) const;
\n+
251
\n+
252
\n+
254
\n+
255
\n+\n+
260
\n+\n+
263
\n+
264 typedef std::vector<Index> VertexValenceTable;
\n+
265
\n+
\n+\n+
268 return _vertexValenceTable;
\n+
269 }
\n+
\n+
271
\n+
272
\n+
274
\n+
280
\n+\n+
284
\n+
287 float GetSingleCreasePatchSharpnessValue(int array, int patch) const;
\n+
289
\n+
290
\n+
292
\n+
298
\n+\n+
301
\n+\n+
304
\n+
306 ConstIndexArray GetPatchVaryingVertices(int array, int patch) const;
\n+
307
\n+\n+
310
\n+\n+
314
\n+
315
\n+
317
\n+
323
\n+\n+
326
\n+\n+
329
\n+\n+
332
\n+\n+
335
\n+
337 ConstIndexArray GetPatchFVarValues(PatchHandle const & handle, int channel = 0) const;
\n+
338
\n+
340 ConstIndexArray GetPatchFVarValues(int array, int patch, int channel = 0) const;
\n+
341
\n+
343 ConstIndexArray GetPatchArrayFVarValues(int array, int channel = 0) const;
\n+
344
\n+
346 ConstIndexArray GetFVarValues(int channel = 0) const;
\n+
347
\n+
349 int GetFVarValueStride(int channel = 0) const;
\n+
350
\n+
352 PatchParam GetPatchFVarPatchParam(PatchHandle const & handle, int channel = 0) const;
\n+
353
\n+
355 PatchParam GetPatchFVarPatchParam(int array, int patch, int channel = 0) const;
\n+
356
\n+
358 ConstPatchParamArray GetPatchArrayFVarPatchParams(int array, int channel = 0) const;
\n+
359
\n+\n+
362
\n+\n+
366
\n+
367
\n+
369
\n+
374
\n+
375 typedef std::vector<Index> PatchVertsTable;
\n+
376
\n+
378 PatchVertsTable const & GetPatchControlVerticesTable() const { return _patchVerts; }
\n+
379
\n+
381 PatchParamTable const & GetPatchParamTable() const { return _paramTable; }
\n+
382
\n+
384 std::vector<Index> const &GetSharpnessIndexTable() const { return _sharpnessIndices; }
\n+
385
\n+
387 std::vector<float> const &GetSharpnessValues() const { return _sharpnessValues; }
\n+
388
\n+
389 typedef std::vector<unsigned int> QuadOffsetsTable;
\n+
390
\n+
\n+\n+
393 return _quadOffsetsTable;
\n+
394 }
\n+
\n+
396
\n+
398 void print() const;
\n+
399
\n+
400public:
\n+
401
\n+
403
\n+
405
\n+
428 template <typename REAL>
\n+
429 void EvaluateBasis(PatchHandle const & handle, REAL u, REAL v,
\n+
430 REAL wP[], REAL wDu[] = 0, REAL wDv[] = 0,
\n+
431 REAL wDuu[] = 0, REAL wDuv[] = 0, REAL wDvv[] = 0) const;
\n+
432
\n+
435 void EvaluateBasis(PatchHandle const & handle, float u, float v,
\n+
436 float wP[], float wDu[] = 0, float wDv[] = 0,
\n+
437 float wDuu[] = 0, float wDuv[] = 0, float wDvv[] = 0) const;
\n+
438
\n+
441 void EvaluateBasis(PatchHandle const & handle, double u, double v,
\n+
442 double wP[], double wDu[] = 0, double wDv[] = 0,
\n+
443 double wDuu[] = 0, double wDuv[] = 0, double wDvv[] = 0) const;
\n+
444
\n+
467 template <typename REAL>
\n+
468 void EvaluateBasisVarying(PatchHandle const & handle, REAL u, REAL v,
\n+
469 REAL wP[], REAL wDu[] = 0, REAL wDv[] = 0,
\n+
470 REAL wDuu[] = 0, REAL wDuv[] = 0, REAL wDvv[] = 0) const;
\n+
471
\n+
474 void EvaluateBasisVarying(PatchHandle const & handle, float u, float v,
\n+
475 float wP[], float wDu[] = 0, float wDv[] = 0,
\n+
476 float wDuu[] = 0, float wDuv[] = 0, float wDvv[] = 0) const;
\n+
477
\n+
480 void EvaluateBasisVarying(PatchHandle const & handle, double u, double v,
\n+
481 double wP[], double wDu[] = 0, double wDv[] = 0,
\n+
482 double wDuu[] = 0, double wDuv[] = 0, double wDvv[] = 0) const;
\n+
483
\n+
508 template <typename REAL>
\n+
509 void EvaluateBasisFaceVarying(PatchHandle const & handle, REAL u, REAL v,
\n+
510 REAL wP[], REAL wDu[] = 0, REAL wDv[] = 0,
\n+
511 REAL wDuu[] = 0, REAL wDuv[] = 0, REAL wDvv[] = 0,
\n+
512 int channel = 0) const;
\n+
513
\n+
516 void EvaluateBasisFaceVarying(PatchHandle const & handle, float u, float v,
\n+
517 float wP[], float wDu[] = 0, float wDv[] = 0,
\n+
518 float wDuu[] = 0, float wDuv[] = 0, float wDvv[] = 0,
\n+
519 int channel = 0) const;
\n+
520
\n+
523 void EvaluateBasisFaceVarying(PatchHandle const & handle, double u, double v,
\n+
524 double wP[], double wDu[] = 0, double wDv[] = 0,
\n+
525 double wDuu[] = 0, double wDuv[] = 0, double wDvv[] = 0,
\n+
526 int channel = 0) const;
\n+
528
\n+
529protected:
\n+
530
\n+
531 friend class PatchTableBuilder;
\n+
532
\n+
533 // Factory constructor
\n+
534 PatchTable(int maxvalence);
\n+
535
\n+
536 Index getPatchIndex(int array, int patch) const;
\n+
537
\n+\n+
539
\n+\n+
541 float * getSharpnessValues(Index arrayIndex);
\n+
542
\n+
543private:
\n+
544
\n+
545 //
\n+
546 // Patch arrays
\n+
547 //
\n+
548
\n+
549 struct PatchArray;
\n+
550 typedef std::vector<PatchArray> PatchArrayVector;
\n+
551
\n+
552 PatchArray & getPatchArray(Index arrayIndex);
\n+
553 PatchArray const & getPatchArray(Index arrayIndex) const;
\n+
554
\n+
555 void reservePatchArrays(int numPatchArrays);
\n+
556 void pushPatchArray(PatchDescriptor desc, int npatches,
\n+
557 Index * vidx, Index * pidx, Index * qoidx=0);
\n+
558
\n+
559 IndexArray getPatchArrayVertices(int arrayIndex);
\n+
560
\n+
561 Index findPatchArray(PatchDescriptor desc);
\n+
562
\n+
563
\n+
564 //
\n+
565 // Varying patch arrays
\n+
566 //
\n+
567 IndexArray getPatchArrayVaryingVertices(int arrayIndex);
\n+
568
\n+
569 void allocateVaryingVertices(
\n+
570 PatchDescriptor desc, int numPatches);
\n+
571 void populateVaryingVertices();
\n+
572
\n+
573 //
\n+
574 // Face-varying patch channels
\n+
575 //
\n+
576
\n+
577 struct FVarPatchChannel;
\n+
578 typedef std::vector<FVarPatchChannel> FVarPatchChannelVector;
\n+
579
\n+
580 FVarPatchChannel & getFVarPatchChannel(int channel);
\n+
581 FVarPatchChannel const & getFVarPatchChannel(int channel) const;
\n+
582
\n+
583 void allocateFVarPatchChannels(int numChannels);
\n+
584 void allocateFVarPatchChannelValues(
\n+
585 PatchDescriptor regDesc, PatchDescriptor irregDesc,
\n+
586 int numPatches, int channel);
\n+
587
\n+
588 // deprecated
\n+
589 void setFVarPatchChannelLinearInterpolation(
\n+
590 Sdc::Options::FVarLinearInterpolation interpolation, int channel);
\n+
591
\n+
592 IndexArray getFVarValues(int channel);
\n+
593 ConstIndexArray getPatchFVarValues(int patch, int channel) const;
\n+
594
\n+
595 PatchParamArray getFVarPatchParams(int channel);
\n+
596 PatchParam getPatchFVarPatchParam(int patch, int channel) const;
\n+
597
\n+
598private:
\n+
599 //
\n+
600 // Simple private class to hold stencil table pointers of varying precision,
\n+
601 // where the discriminant of the precision is external.
\n+
602 //
\n+
603 // NOTE that this is a simple pointer container and NOT a smart pointer that
\n+
604 // manages the ownership of the object referred to by it.
\n+
605 //
\n+
606 class StencilTablePtr {
\n+
607 private:
\n+
608 typedef StencilTableReal<float> float_type;
\n+
609 typedef StencilTableReal<double> double_type;
\n+
610
\n+
611 union {
\n+
612 float_type * _fPtr;
\n+
613 double_type * _dPtr;
\n+
614 };
\n+
615
\n+
616 public:
\n+
617 StencilTablePtr() { _fPtr = 0; }
\n+
618 StencilTablePtr(float_type * ptr) { _fPtr = ptr; }
\n+
619 StencilTablePtr(double_type * ptr) { _dPtr = ptr; }
\n+
620
\n+
621 operator bool() const { return _fPtr != 0; }
\n+
622
\n+
623 void Set() { _fPtr = 0; }
\n+
624 void Set(float_type * ptr) { _fPtr = ptr; }
\n+
625 void Set(double_type * ptr) { _dPtr = ptr; }
\n+
626
\n+
627 template <typename REAL> StencilTableReal<REAL> * Get() const;
\n+
628 };
\n+
629
\n+
630private:
\n+
631
\n+
632 //
\n+
633 // Topology
\n+
634 //
\n+
635
\n+
636 int _maxValence, // highest vertex valence found in the mesh
\n+
637 _numPtexFaces; // total number of ptex faces
\n+
638
\n+
639 PatchArrayVector _patchArrays; // Vector of descriptors for arrays of patches
\n+
640
\n+
641 std::vector<Index> _patchVerts; // Indices of the control vertices of the patches
\n+
642
\n+
643 PatchParamTable _paramTable; // PatchParam bitfields (one per patch)
\n+
644
\n+
645 //
\n+
646 // Extraordinary vertex closed-form evaluation / endcap basis conversion
\n+
647 //
\n+
648 // XXXtakahito: these data will probably be replaced with mask coefficient or something
\n+
649 // SchemeWorker populates.
\n+
650 //
\n+
651 QuadOffsetsTable _quadOffsetsTable; // Quad offsets (for Gregory patches)
\n+
652 VertexValenceTable _vertexValenceTable; // Vertex valence table (for Gregory patches)
\n+
653
\n+
654 StencilTablePtr _localPointStencils; // local point conversion stencils
\n+
655 StencilTablePtr _localPointVaryingStencils; // local point varying stencils
\n+
656
\n+
657 //
\n+
658 // Varying data
\n+
659 //
\n+
660 PatchDescriptor _varyingDesc;
\n+
661
\n+
662 std::vector<Index> _varyingVerts;
\n+
663
\n+
664 //
\n+
665 // Face-varying data
\n+
666 //
\n+
667 FVarPatchChannelVector _fvarChannels;
\n+
668
\n+
669 std::vector<StencilTablePtr> _localPointFaceVaryingStencils;
\n+
670
\n+
671 //
\n+
672 // 'single-crease' patch sharpness tables
\n+
673 //
\n+
674 std::vector<Index> _sharpnessIndices; // Indices of single-crease sharpness (one per patch)
\n+
675 std::vector<float> _sharpnessValues; // Sharpness values.
\n+
676
\n+
677 //
\n+
678 // Construction history -- relevant to at least one public query:
\n+
679 //
\n+
680 unsigned int _isUniformLinear : 1;
\n+
681
\n+
682 //
\n+
683 // Precision -- only applies to local-point stencil tables
\n+
684 //
\n+
685 unsigned int _vertexPrecisionIsDouble : 1;
\n+
686 unsigned int _varyingPrecisionIsDouble : 1;
\n+
687 unsigned int _faceVaryingPrecisionIsDouble : 1;
\n+
688};
\n+
\n+
689
\n+
690
\n+
691//
\n+
692// Template specializations for float/double -- to be defined before used:
\n+
693//
\n+
694template <> inline StencilTableReal<float> *
\n+
695PatchTable::StencilTablePtr::Get<float>() const { return _fPtr; }
\n+
696
\n+
697template <> inline StencilTableReal<double> *
\n+
698PatchTable::StencilTablePtr::Get<double>() const { return _dPtr; }
\n+
699
\n+
\n+
700template <> inline bool
\n+
701PatchTable::LocalPointStencilPrecisionMatchesType<float>() const {
\n+
702 return !_vertexPrecisionIsDouble;
\n+
703}
\n+
\n+
\n+
704template <> inline bool
\n+
705PatchTable::LocalPointVaryingStencilPrecisionMatchesType<float>() const {
\n+
706 return !_varyingPrecisionIsDouble;
\n+
707}
\n+
\n+
\n+
708template <> inline bool
\n+
709PatchTable::LocalPointFaceVaryingStencilPrecisionMatchesType<float>() const {
\n+
710 return !_faceVaryingPrecisionIsDouble;
\n+
711}
\n+
\n+
712
\n+
\n+
713template <> inline bool
\n+
714PatchTable::LocalPointStencilPrecisionMatchesType<double>() const {
\n+
715 return _vertexPrecisionIsDouble;
\n+
716}
\n+
\n+
\n+
717template <> inline bool
\n+
718PatchTable::LocalPointVaryingStencilPrecisionMatchesType<double>() const {
\n+
719 return _varyingPrecisionIsDouble;
\n+
720}
\n+
\n+
\n+
721template <> inline bool
\n+
722PatchTable::LocalPointFaceVaryingStencilPrecisionMatchesType<double>() const {
\n+
723 return _faceVaryingPrecisionIsDouble;
\n+
724}
\n+
\n+
725
\n+
726//
\n+
727// StencilTable access -- backward compatible and generic:
\n+
728//
\n+
729inline StencilTable const *
\n+
\n+\n+
731 assert(LocalPointStencilPrecisionMatchesType<float>());
\n+
732 return static_cast<StencilTable const *>(_localPointStencils.Get<float>());
\n+
733}
\n+
\n+
734inline StencilTable const *
\n+
\n+\n+
736 assert(LocalPointVaryingStencilPrecisionMatchesType<float>());
\n+
737 return static_cast<StencilTable const *>(
\n+
738 _localPointVaryingStencils.Get<float>());
\n+
739}
\n+
\n+
740inline StencilTable const *
\n+
\n+\n+
742 assert(LocalPointFaceVaryingStencilPrecisionMatchesType<float>());
\n+
743 if (channel >= 0 && channel < (int)_localPointFaceVaryingStencils.size()) {
\n+
744 return static_cast<StencilTable const *>(
\n+
745 _localPointFaceVaryingStencils[channel].Get<float>());
\n+
746 }
\n+
747 return NULL;
\n+
748}
\n+
\n+
749
\n+
750template <typename REAL>
\n+
751inline StencilTableReal<REAL> const *
\n+
\n+\n+
753 assert(LocalPointStencilPrecisionMatchesType<REAL>());
\n+
754 return _localPointStencils.Get<REAL>();
\n+
755}
\n+
\n+
756template <typename REAL>
\n+
757inline StencilTableReal<REAL> const *
\n+
\n+\n+
759 assert(LocalPointVaryingStencilPrecisionMatchesType<REAL>());
\n+
760 return _localPointVaryingStencils.Get<REAL>();
\n+
761}
\n+
\n+
762template <typename REAL>
\n+
763inline StencilTableReal<REAL> const *
\n+
\n+\n+
765 assert(LocalPointFaceVaryingStencilPrecisionMatchesType<REAL>());
\n+
766 if (channel >= 0 && channel < (int)_localPointFaceVaryingStencils.size()) {
\n+
767 return _localPointFaceVaryingStencils[channel].Get<REAL>();
\n+
768 }
\n+
769 return NULL;
\n+
770}
\n+
\n+
771
\n+
772
\n+
773//
\n+
774// Computation of local point values:
\n+
775//
\n+
776template <class T>
\n+
777inline void
\n+
\n+
778PatchTable::ComputeLocalPointValues(T const *src, T *dst) const {
\n+
779 assert(LocalPointStencilPrecisionMatchesType<float>());
\n+
780 if (_localPointStencils) {
\n+
781 _localPointStencils.Get<float>()->UpdateValues(src, dst);
\n+
782 }
\n+
783}
\n+
\n+
784
\n+
785template <class T>
\n+
786inline void
\n+
\n+\n+
788 assert(LocalPointVaryingStencilPrecisionMatchesType<float>());
\n+
789 if (_localPointVaryingStencils) {
\n+
790 _localPointVaryingStencils.Get<float>()->UpdateValues(src, dst);
\n+
791 }
\n+
792}
\n+
\n+
793
\n+
794template <class T>
\n+
795inline void
\n+
\n+
796PatchTable::ComputeLocalPointValuesFaceVarying(T const *src, T *dst, int channel) const {
\n+
797 assert(LocalPointFaceVaryingStencilPrecisionMatchesType<float>());
\n+
798 if (channel >= 0 && channel < (int)_localPointFaceVaryingStencils.size()) {
\n+
799 if (_localPointFaceVaryingStencils[channel]) {
\n+
800 _localPointFaceVaryingStencils[channel].Get<float>()->UpdateValues(src, dst);
\n+
801 }
\n+
802 }
\n+
803}
\n+
\n+
804
\n+
805
\n+
806//
\n+
807// Basis evaluation overloads
\n+
808//
\n+
809inline void
\n+
\n+
810PatchTable::EvaluateBasis(PatchHandle const & handle, float u, float v,
\n+
811 float wP[], float wDu[], float wDv[],
\n+
812 float wDuu[], float wDuv[], float wDvv[]) const {
\n+
813
\n+
814 EvaluateBasis<float>(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv);
\n+
815}
\n+
\n+
816inline void
\n+
\n+
817PatchTable::EvaluateBasis(PatchHandle const & handle, double u, double v,
\n+
818 double wP[], double wDu[], double wDv[],
\n+
819 double wDuu[], double wDuv[], double wDvv[]) const {
\n+
820
\n+
821 EvaluateBasis<double>(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv);
\n+
822}
\n+
\n+
823
\n+
824inline void
\n+
\n+
825PatchTable::EvaluateBasisVarying(PatchHandle const & handle, float u, float v,
\n+
826 float wP[], float wDu[], float wDv[],
\n+
827 float wDuu[], float wDuv[], float wDvv[]) const {
\n+
828
\n+
829 EvaluateBasisVarying<float>(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv);
\n+
830}
\n+
\n+
831inline void
\n+
\n+
832PatchTable::EvaluateBasisVarying(PatchHandle const & handle, double u, double v,
\n+
833 double wP[], double wDu[], double wDv[],
\n+
834 double wDuu[], double wDuv[], double wDvv[]) const {
\n+
835
\n+
836 EvaluateBasisVarying<double>(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv);
\n+
837}
\n+
\n+
838
\n+
839inline void
\n+
\n+
840PatchTable::EvaluateBasisFaceVarying(PatchHandle const & handle, float u, float v,
\n+
841 float wP[], float wDu[], float wDv[],
\n+
842 float wDuu[], float wDuv[], float wDvv[], int channel) const {
\n+
843
\n+
844 EvaluateBasisFaceVarying<float>(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv, channel);
\n+
845}
\n+
\n+
846inline void
\n+
\n+
847PatchTable::EvaluateBasisFaceVarying(PatchHandle const & handle, double u, double v,
\n+
848 double wP[], double wDu[], double wDv[],
\n+
849 double wDuu[], double wDuv[], double wDvv[], int channel) const {
\n+
850
\n+
851 EvaluateBasisFaceVarying<double>(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv, channel);
\n+
852}
\n+
\n+
853
\n+
854} // end namespace Far
\n+
855
\n+
856} // end namespace OPENSUBDIV_VERSION
\n+
857using namespace OPENSUBDIV_VERSION;
\n+
858
\n+
859} // end namespace OpenSubdiv
\n+
860
\n+
861#endif /* OPENSUBDIV3_FAR_PATCH_TABLE */
\n+\n+
std::vector< PatchParam > PatchParamTable
Definition patchParam.h:243
\n+\n+
std::vector< PatchArray > PatchArrayVector
Definition types.h:132
\n+\n+
An quadtree-based map connecting coarse faces to their sub-patches.
Definition patchMap.h:49
\n+\n+
Container for arrays of parametric patches.
Definition patchTable.h:55
\n+
ConstIndexArray GetPatchArrayVaryingVertices(int array) const
Returns the varying vertex indices for the patches in array.
\n+\n+
PatchVertsTable const & GetPatchControlVerticesTable() const
Get the table of patch control vertices.
Definition patchTable.h:378
\n+
void ComputeLocalPointValuesFaceVarying(T const *src, T *dst, int channel=0) const
Updates local point face-varying values.
Definition patchTable.h:796
\n+
ConstIndexArray GetVaryingVertices() const
Returns an array of varying vertex indices for the patches.
\n+
void ComputeLocalPointValuesVarying(T const *src, T *dst) const
Updates local point varying values.
Definition patchTable.h:787
\n+
ConstIndexArray GetPatchVaryingVertices(PatchHandle const &handle) const
Returns the varying vertex indices for a given patch.
\n+
bool IsFeatureAdaptive() const
True if the patches are of feature adaptive types.
\n+
int GetMaxValence() const
Returns max vertex valence.
Definition patchTable.h:92
\n+
StencilTableReal< REAL > const * GetLocalPointStencilTable() const
Returns the stencil table to compute local point vertex values.
\n+
StencilTable const * GetLocalPointStencilTable() const
Returns the stencil table to compute local point vertex values.
Definition patchTable.h:730
\n+
PatchParamArray getPatchParams(int arrayIndex)
\n+
ConstIndexArray GetPatchArrayFVarValues(int array, int channel=0) const
Returns the value indices for the patches in array in channel.
\n+
std::vector< float > const & GetSharpnessValues() const
Returns sharpness values table.
Definition patchTable.h:387
\n+\n+
PatchParam GetPatchFVarPatchParam(int array, int patch, int channel=0) const
Returns the face-varying params for a given patch channel.
\n+
ConstIndexArray GetPatchVaryingVertices(int array, int patch) const
Returns the varying vertex indices for a given patch.
\n+
PatchTable(PatchTable const &src)
Copy constructor.
\n+
int GetNumPatchArrays() const
Returns the number of patch arrays in the table.
\n+
ConstIndexArray GetPatchVertices(PatchHandle const &handle) const
Returns the control vertex indices for the patch identified by handle.
\n+\n+
bool LocalPointFaceVaryingStencilPrecisionMatchesType() const
Tests if the precision of the stencil table to compute local point face-varying values matches the gi...
\n+
PatchParamTable const & GetPatchParamTable() const
Returns the PatchParamTable (PatchParams order matches patch array sorting)
Definition patchTable.h:381
\n+
VertexValenceTable const & GetVertexValenceTable() const
Returns the 'VertexValences' table (vertex neighborhoods table)
Definition patchTable.h:267
\n+
StencilTable const * GetLocalPointFaceVaryingStencilTable(int channel=0) const
Returns the stencil table to compute local point face-varying values.
Definition patchTable.h:741
\n+
int GetNumControlVertices(int array) const
Returns the number of control vertices in array.
\n+\n+
void EvaluateBasisFaceVarying(PatchHandle const &handle, REAL u, REAL v, REAL wP[], REAL wDu[]=0, REAL wDv[]=0, REAL wDuu[]=0, REAL wDuv[]=0, REAL wDvv[]=0, int channel=0) const
Evaluate basis functions for a face-varying value and derivatives at a given (u,v) parametric locatio...
\n+
ConstQuadOffsetsArray GetPatchQuadOffsets(PatchHandle const &handle) const
Returns the 'QuadOffsets' for the Gregory patch identified by handle.
\n+
PatchDescriptor GetFVarPatchDescriptorIrregular(int channel=0) const
Returns the irregular patch descriptor for channel.
\n+
float GetSingleCreasePatchSharpnessValue(int array, int patch) const
Returns the crease sharpness for the patch in array if it is a single-crease patch,...
\n+\n+
void ComputeLocalPointValues(T const *src, T *dst) const
Updates local point vertex values.
Definition patchTable.h:778
\n+
float GetSingleCreasePatchSharpnessValue(PatchHandle const &handle) const
Returns the crease sharpness for the patch identified by handle if it is a single-crease patch,...
\n+
PatchParam GetPatchParam(int array, int patch) const
Returns the PatchParam for patch in array.
\n+
ConstIndexArray GetPatchFVarValues(int array, int patch, int channel=0) const
Returns the value indices for a given patch in channel.
\n+
PatchDescriptor GetFVarPatchDescriptorRegular(int channel=0) const
Returns the regular patch descriptor for channel.
\n+
PatchDescriptor GetPatchDescriptor(PatchHandle const &handle) const
Returns the PatchDescriptor for the patch identified by handle.
\n+\n+
QuadOffsetsTable const & GetQuadOffsetsTable() const
Returns the quad-offsets table.
Definition patchTable.h:392
\n+
int GetNumPatches(int array) const
Returns the number of patches in array.
\n+
PatchDescriptor GetVaryingPatchDescriptor() const
Returns the varying patch descriptor.
\n+
ConstIndexArray GetPatchFVarValues(PatchHandle const &handle, int channel=0) const
Returns the value indices for a given patch in channel.
\n+
ConstPatchParamArray const GetPatchParams(int array) const
Returns the PatchParams for the patches in array.
\n+
int GetNumControlVerticesTotal() const
Returns the total number of control vertex indices in the table.
Definition patchTable.h:84
\n+
int GetNumFVarChannels() const
Returns the number of face-varying channels.
\n+
ConstPatchParamArray GetPatchArrayFVarPatchParams(int array, int channel=0) const
Returns the face-varying for a given patch in array in channel.
\n+
Index getPatchIndex(int array, int patch) const
\n+
int GetNumLocalPoints() const
Returns the number of local vertex points.
\n+
bool LocalPointVaryingStencilPrecisionMatchesType() const
Tests if the precision of the stencil table to compute local point varying values matches the given f...
\n+
ConstIndexArray GetPatchArrayVertices(int array) const
Returns the control vertex indices for the patches in array.
\n+
int GetNumPtexFaces() const
Returns the total number of ptex faces in the mesh.
Definition patchTable.h:95
\n+
ConstIndexArray GetFVarValues(int channel=0) const
Returns an array of value indices for the patches in channel.
\n+
Vtr::ConstArray< unsigned int > ConstQuadOffsetsArray
Accessors for the gregory patch evaluation buffers. These methods will be deprecated.
Definition patchTable.h:259
\n+
void EvaluateBasis(PatchHandle const &handle, REAL u, REAL v, REAL wP[], REAL wDu[]=0, REAL wDv[]=0, REAL wDuu[]=0, REAL wDuv[]=0, REAL wDvv[]=0) const
Evaluate basis functions for position and derivatives at a given (u,v) parametric location of a patch...
\n+
StencilTableReal< REAL > const * GetLocalPointFaceVaryingStencilTable(int channel=0) const
Returns the stencil table to compute local point face-varying values.
\n+
int GetNumPatchesTotal() const
Returns the total number of patches stored in the table.
\n+
PatchParam GetPatchParam(PatchHandle const &handle) const
Returns a PatchParam for the patch identified by handle.
\n+\n+
Sdc::Options::FVarLinearInterpolation GetFVarChannelLinearInterpolation(int channel=0) const
Deprecated.
\n+
std::vector< Index > const & GetSharpnessIndexTable() const
Returns a sharpness index table for each patch (if exists)
Definition patchTable.h:384
\n+
PatchDescriptor GetPatchArrayDescriptor(int array) const
Returns the PatchDescriptor for the patches in array.
\n+\n+
void EvaluateBasisVarying(PatchHandle const &handle, REAL u, REAL v, REAL wP[], REAL wDu[]=0, REAL wDv[]=0, REAL wDuu[]=0, REAL wDuv[]=0, REAL wDvv[]=0) const
Evaluate basis functions for a varying value and derivatives at a given (u,v) parametric location of ...
\n+
StencilTable const * GetLocalPointVaryingStencilTable() const
Returns the stencil table to compute local point varying values.
Definition patchTable.h:735
\n+
std::vector< unsigned int > QuadOffsetsTable
Definition patchTable.h:389
\n+
ConstIndexArray GetPatchVertices(int array, int patch) const
Returns the control vertex indices for patch in array.
\n+
PatchParam GetPatchFVarPatchParam(PatchHandle const &handle, int channel=0) const
Returns the value indices for a given patch in channel.
\n+
int GetFVarValueStride(int channel=0) const
Returns the stride between patches in the value index array of channel.
\n+
ConstPatchParamArray GetFVarPatchParams(int channel=0) const
Returns an array of face-varying patch param for channel.
\n+
PatchDescriptor GetFVarPatchDescriptor(int channel=0) const
Returns the default/irregular patch descriptor for channel.
\n+
int GetNumLocalPointsVarying() const
Returns the number of local varying points.
\n+
bool LocalPointStencilPrecisionMatchesType() const
Tests if the precision of the stencil table to compute local point vertex values matches the given fl...
\n+
StencilTableReal< REAL > const * GetLocalPointVaryingStencilTable() const
Returns the stencil table to compute local point varying values.
\n+
int GetNumLocalPointsFaceVarying(int channel=0) const
Returns the number of local face-varying points for channel.
\n+
Handle that can be used as unique patch identifier within PatchTable.
Definition patchTable.h:60
\n+\n+\n+\n+\n+
Stencil table class wrapping the template for compatibility.
\n+\n+\n+\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-utf-8\n+us-ascii\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-patchTableFactory.h\n+patchTable.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2013 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -24,409 +24,945 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_FAR_PATCH_TABLE_FACTORY_H\n-26#define OPENSUBDIV3_FAR_PATCH_TABLE_FACTORY_H\n+25#ifndef OPENSUBDIV3_FAR_PATCH_TABLE_H\n+26#define OPENSUBDIV3_FAR_PATCH_TABLE_H\n 27\n 28#include \"../version.h\"\n 29\n-30#include \"../far/topologyRefiner.h\"\n-31#include \"../far/patchTable.h\"\n-32\n-33namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-34namespace OPENSUBDIV_VERSION {\n+30#include \"../far/patchDescriptor.h\"\n+31#include \"../far/patchParam.h\"\n+32#include \"../far/stencilTable.h\"\n+33\n+34#include \"../sdc/options.h\"\n 35\n-36namespace Far {\n+36#include \n 37\n-_\b4_\b0class _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by {\n-41public:\n+38namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+39namespace OPENSUBDIV_VERSION {\n+40\n+41namespace Far {\n 42\n-_\b4_\b5 struct _\bO_\bp_\bt_\bi_\bo_\bn_\bs {\n-46\n-_\b5_\b5 enum _\bE_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be {\n-_\b5_\b6 _\bE_\bN_\bD_\bC_\bA_\bP_\b__\bN_\bO_\bN_\bE = 0,\n-_\b5_\b7 _\bE_\bN_\bD_\bC_\bA_\bP_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b__\bB_\bA_\bS_\bI_\bS,\n-_\b5_\b8 _\bE_\bN_\bD_\bC_\bA_\bP_\b__\bB_\bS_\bP_\bL_\bI_\bN_\bE_\b__\bB_\bA_\bS_\bI_\bS,\n-_\b5_\b9 _\bE_\bN_\bD_\bC_\bA_\bP_\b__\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bA_\bS_\bI_\bS,\n-60 _\bE_\bN_\bD_\bC_\bA_\bP_\b__\bL_\bE_\bG_\bA_\bC_\bY_\b__\bG_\bR_\bE_\bG_\bO_\bR_\bY\n-_\b6_\b1 };\n-62\n-_\b6_\b3 _\bO_\bp_\bt_\bi_\bo_\bn_\bs(unsigned int maxIsolation=10) :\n-64 _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bA_\bl_\bl_\bL_\be_\bv_\be_\bl_\bs(false),\n-65 _\bi_\bn_\bc_\bl_\bu_\bd_\be_\bB_\ba_\bs_\be_\bL_\be_\bv_\be_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs(true),\n-66 _\bi_\bn_\bc_\bl_\bu_\bd_\be_\bF_\bV_\ba_\br_\bB_\ba_\bs_\be_\bL_\be_\bv_\be_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs(false),\n-67 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bQ_\bu_\ba_\bd_\bs(false),\n-68 _\bu_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh(false),\n-69 _\bu_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh(false),\n-70 _\bm_\ba_\bx_\bI_\bs_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\bL_\be_\bv_\be_\bl(maxIsolation & 0xf),\n-71 _\be_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be(_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bA_\bS_\bI_\bS),\n-72 _\bs_\bh_\ba_\br_\be_\bE_\bn_\bd_\bC_\ba_\bp_\bP_\ba_\bt_\bc_\bh_\bP_\bo_\bi_\bn_\bt_\bs(true),\n-73 _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bT_\ba_\bb_\bl_\be_\bs(true),\n-74 _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bs(true),\n-75 _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bF_\bV_\ba_\br_\bT_\ba_\bb_\bl_\be_\bs(false),\n-76 _\bp_\ba_\bt_\bc_\bh_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bD_\bo_\bu_\bb_\bl_\be(false),\n-77 _\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bD_\bo_\bu_\bb_\bl_\be(false),\n-78 _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bF_\bV_\ba_\br_\bL_\be_\bg_\ba_\bc_\by_\bL_\bi_\bn_\be_\ba_\br_\bP_\ba_\bt_\bc_\bh_\be_\bs(true),\n-79 _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bL_\be_\bg_\ba_\bc_\by_\bS_\bh_\ba_\br_\bp_\bC_\bo_\br_\bn_\be_\br_\bP_\ba_\bt_\bc_\bh_\be_\bs(true),\n-80 _\bn_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs(-1),\n-81 _\bf_\bv_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs(0)\n-82 { }\n-83\n-_\b8_\b5 _\bE_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be _\bG_\be_\bt_\bE_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be() const { return (_\bE_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be)_\be_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be; }\n-86\n-_\b8_\b8 void _\bS_\be_\bt_\bE_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be(_\bE_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be e) { _\be_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be = e & 0x7; }\n-89\n-_\b9_\b1 void _\bS_\be_\bt_\bM_\ba_\bx_\bI_\bs_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\bL_\be_\bv_\be_\bl(unsigned int level) { _\bm_\ba_\bx_\bI_\bs_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\bL_\be_\bv_\be_\bl = level &\n-0xf; }\n-92\n-_\b9_\b4 template void _\bS_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn();\n-95\n-_\b9_\b7 template void _\bS_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn();\n-98\n-_\b1_\b0_\b0 _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs _\bG_\be_\bt_\bR_\be_\bf_\bi_\bn_\be_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs() const {\n-101 _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs adaptiveOptions(_\bm_\ba_\bx_\bI_\bs_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\bL_\be_\bv_\be_\bl);\n-102\n-103 adaptiveOptions._\bu_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh = _\bu_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh;\n-104 adaptiveOptions._\bu_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh = _\bu_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh;\n-105 adaptiveOptions._\bc_\bo_\bn_\bs_\bi_\bd_\be_\br_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs = _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bF_\bV_\ba_\br_\bT_\ba_\bb_\bl_\be_\bs &&\n-106 !_\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bF_\bV_\ba_\br_\bL_\be_\bg_\ba_\bc_\by_\bL_\bi_\bn_\be_\ba_\br_\bP_\ba_\bt_\bc_\bh_\be_\bs;\n-107 return adaptiveOptions;\n-108 }\n-109\n-_\b1_\b1_\b0 unsigned int _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bA_\bl_\bl_\bL_\be_\bv_\be_\bl_\bs : 1,\n-_\b1_\b1_\b1 _\bi_\bn_\bc_\bl_\bu_\bd_\be_\bB_\ba_\bs_\be_\bL_\be_\bv_\be_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs : 1,\n-_\b1_\b1_\b2 _\bi_\bn_\bc_\bl_\bu_\bd_\be_\bF_\bV_\ba_\br_\bB_\ba_\bs_\be_\bL_\be_\bv_\be_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs : 1,\n-_\b1_\b1_\b3 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bQ_\bu_\ba_\bd_\bs : 1,\n+_\b5_\b5class _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be {\n+56\n+57public:\n+58\n+_\b6_\b0 class _\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be {\n+61 // XXXX manuelk members will eventually be made private\n+62 public:\n+63\n+_\b6_\b4 friend class _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be;\n+_\b6_\b5 friend class _\bP_\ba_\bt_\bc_\bh_\bM_\ba_\bp;\n+66\n+_\b6_\b7 _\bI_\bn_\bd_\be_\bx _\ba_\br_\br_\ba_\by_\bI_\bn_\bd_\be_\bx, // Array index of the patch\n+_\b6_\b8 _\bp_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx, // Absolute Index of the patch\n+_\b6_\b9 _\bv_\be_\br_\bt_\bI_\bn_\bd_\be_\bx; // Relative offset to the first CV of the patch in array\n+70 };\n+71\n+72public:\n+73\n+_\b7_\b5 _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be(_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const & src);\n+76\n+_\b7_\b8 _\b~_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be();\n+79\n+_\b8_\b1 bool _\bI_\bs_\bF_\be_\ba_\bt_\bu_\br_\be_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be() const;\n+82\n+_\b8_\b4 int _\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs_\bT_\bo_\bt_\ba_\bl() const {\n+85 return (int)_patchVerts.size();\n+86 }\n+87\n+_\b8_\b9 int _\bG_\be_\bt_\bN_\bu_\bm_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bT_\bo_\bt_\ba_\bl() const;\n+90\n+_\b9_\b2 int _\bG_\be_\bt_\bM_\ba_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be() const { return _maxValence; }\n+93\n+_\b9_\b5 int _\bG_\be_\bt_\bN_\bu_\bm_\bP_\bt_\be_\bx_\bF_\ba_\bc_\be_\bs() const { return _numPtexFaces; }\n+96\n+97\n+99\n+105\n+_\b1_\b0_\b7 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle) const;\n+108\n+_\b1_\b1_\b0 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle) const;\n+111\n+_\b1_\b1_\b3 _\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle) const;\n 114\n-_\b1_\b1_\b5 _\bu_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh : 1,\n-_\b1_\b1_\b6 _\bu_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh : 1,\n-_\b1_\b1_\b7 _\bm_\ba_\bx_\bI_\bs_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\bL_\be_\bv_\be_\bl : 4,\n-118\n-119 // end-capping\n-_\b1_\b2_\b0 _\be_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be : 3,\n-_\b1_\b2_\b1 _\bs_\bh_\ba_\br_\be_\bE_\bn_\bd_\bC_\ba_\bp_\bP_\ba_\bt_\bc_\bh_\bP_\bo_\bi_\bn_\bt_\bs : 1,\n-123\n-124 // varying\n-_\b1_\b2_\b5 _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bT_\ba_\bb_\bl_\be_\bs : 1,\n-_\b1_\b2_\b6 _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bs : 1,\n-127\n-128 // face-varying\n-_\b1_\b2_\b9 _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bF_\bV_\ba_\br_\bT_\ba_\bb_\bl_\be_\bs : 1,\n+_\b1_\b1_\b6 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int array, int patch) const;\n+117\n+_\b1_\b1_\b9 _\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm(int array, int patch) const;\n+121\n+122\n+124\n 130\n-131 // precision\n-_\b1_\b3_\b2 _\bp_\ba_\bt_\bc_\bh_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bD_\bo_\bu_\bb_\bl_\be : 1,\n-_\b1_\b3_\b3 _\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bD_\bo_\bu_\bb_\bl_\be : 1,\n-134\n-135 // legacy behaviors (default to true)\n-_\b1_\b3_\b6 _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bF_\bV_\ba_\br_\bL_\be_\bg_\ba_\bc_\by_\bL_\bi_\bn_\be_\ba_\br_\bP_\ba_\bt_\bc_\bh_\be_\bs : 1,\n-_\b1_\b3_\b7 _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bL_\be_\bg_\ba_\bc_\by_\bS_\bh_\ba_\br_\bp_\bC_\bo_\br_\bn_\be_\br_\bP_\ba_\bt_\bc_\bh_\be_\bs : 1;\n-138\n-_\b1_\b3_\b9 int _\bn_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs;\n-_\b1_\b4_\b0 int const * _\bf_\bv_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs;\n-141 };\n+_\b1_\b3_\b2 int _\bG_\be_\bt_\bN_\bu_\bm_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs() const;\n+133\n+_\b1_\b3_\b5 int _\bG_\be_\bt_\bN_\bu_\bm_\bP_\ba_\bt_\bc_\bh_\be_\bs(int array) const;\n+136\n+_\b1_\b3_\b8 int _\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int array) const;\n+139\n+_\b1_\b4_\b1 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(int array) const;\n 142\n-_\b1_\b7_\b5 static _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be * _\bC_\br_\be_\ba_\bt_\be(_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br const & refiner,\n-176 _\bO_\bp_\bt_\bi_\bo_\bn_\bs options = _\bO_\bp_\bt_\bi_\bo_\bn_\bs(),\n-177 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by selectedFaces = _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by());\n-178\n-179public:\n-180 // PatchFaceTag\n-181 //\n-182 // This simple struct was previously used within the factory to take\n-inventory of\n-183 // various kinds of patches to fully allocate buffers prior to populating\n-them. It\n-184 // was not intended to be exposed as part of the public interface.\n-185 //\n-186 // It is no longer used internally and is being kept here to respect\n-preservation\n-187 // of the public interface, but it will be deprecated at the earliest\n-opportunity.\n-188 //\n-191 //\n-_\b1_\b9_\b2 struct _\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg {\n-193 public:\n-_\b1_\b9_\b4 unsigned int _\b__\bh_\ba_\bs_\bP_\ba_\bt_\bc_\bh : 1;\n-_\b1_\b9_\b5 unsigned int _\b__\bi_\bs_\bR_\be_\bg_\bu_\bl_\ba_\br : 1;\n-_\b1_\b9_\b6 unsigned int _\b__\bt_\br_\ba_\bn_\bs_\bi_\bt_\bi_\bo_\bn_\bM_\ba_\bs_\bk : 4;\n-_\b1_\b9_\b7 unsigned int _\b__\bb_\bo_\bu_\bn_\bd_\ba_\br_\by_\bM_\ba_\bs_\bk : 4;\n-_\b1_\b9_\b8 unsigned int _\b__\bb_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bd_\be_\bx : 2;\n-_\b1_\b9_\b9 unsigned int _\b__\bb_\bo_\bu_\bn_\bd_\ba_\br_\by_\bC_\bo_\bu_\bn_\bt : 3;\n-_\b2_\b0_\b0 unsigned int _\b__\bh_\ba_\bs_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bE_\bd_\bg_\be : 3;\n-_\b2_\b0_\b1 unsigned int _\b__\bi_\bs_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be : 1;\n-202\n-_\b2_\b0_\b3 void _\bc_\bl_\be_\ba_\br();\n-_\b2_\b0_\b4 void _\ba_\bs_\bs_\bi_\bg_\bn_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bP_\br_\bo_\bp_\be_\br_\bt_\bi_\be_\bs_\bF_\br_\bo_\bm_\bE_\bd_\bg_\be_\bM_\ba_\bs_\bk(int boundaryEdgeMask);\n-_\b2_\b0_\b5 void _\ba_\bs_\bs_\bi_\bg_\bn_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bP_\br_\bo_\bp_\be_\br_\bt_\bi_\be_\bs_\bF_\br_\bo_\bm_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk(int boundaryVertexMask);\n-_\b2_\b0_\b6 void _\ba_\bs_\bs_\bi_\bg_\bn_\bT_\br_\ba_\bn_\bs_\bi_\bt_\bi_\bo_\bn_\bP_\br_\bo_\bp_\be_\br_\bt_\bi_\be_\bs_\bF_\br_\bo_\bm_\bE_\bd_\bg_\be_\bM_\ba_\bs_\bk(int boundaryVertexMask);\n-207 };\n-_\b2_\b0_\b8 typedef std::vector _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bg_\bV_\be_\bc_\bt_\bo_\br;\n-209};\n-210\n-211\n-_\b2_\b1_\b2template <> inline void PatchTableFactory::Options::SetPatchPrecision\n-() {\n-213 _\bp_\ba_\bt_\bc_\bh_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bD_\bo_\bu_\bb_\bl_\be = false;\n-214}\n-_\b2_\b1_\b5template <> inline void PatchTableFactory::Options::\n-SetFVarPatchPrecision() {\n-216 fvarPatchPrecisionDouble = false;\n-217}\n+_\b1_\b4_\b4 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int array) const;\n+145\n+_\b1_\b4_\b7 _\bC_\bo_\bn_\bs_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bA_\br_\br_\ba_\by const _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bs(int array) const;\n+149\n+150\n+152\n+159\n+_\b1_\b6_\b1 int _\bG_\be_\bt_\bN_\bu_\bm_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bs() const;\n+162\n+164 _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be() const;\n+165\n+167 template \n+_\b1_\b6_\b8 _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bR_\be_\ba_\bl_\b<_\bR_\bE_\bA_\bL_\b> const *_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be() const;\n+169\n+_\b1_\b7_\b2 template bool _\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bM_\ba_\bt_\bc_\bh_\be_\bs_\bT_\by_\bp_\be()\n+const;\n+173\n+186 template void\n+187 _\bC_\bo_\bm_\bp_\bu_\bt_\be_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\bl_\bu_\be_\bs(T const *src, T *dst) const;\n+188\n+189\n+_\b1_\b9_\b1 int _\bG_\be_\bt_\bN_\bu_\bm_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg() const;\n+192\n+194 _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be() const;\n+195\n+197 template \n+_\b1_\b9_\b8 _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bR_\be_\ba_\bl_\b<_\bR_\bE_\bA_\bL_\b> const *_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be() const;\n+199\n+_\b2_\b0_\b2 template bool _\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bM_\ba_\bt_\bc_\bh_\be_\bs_\bT_\by_\bp_\be\n+() const;\n+203\n+216 template void\n+217 _\bC_\bo_\bm_\bp_\bu_\bt_\be_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\bl_\bu_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(T const *src, T *dst) const;\n 218\n-219template <> inline void PatchTableFactory::Options::\n-SetPatchPrecision() {\n-220 patchPrecisionDouble = true;\n-221}\n-222template <> inline void PatchTableFactory::Options::\n-SetFVarPatchPrecision() {\n-223 fvarPatchPrecisionDouble = true;\n-224}\n+219\n+_\b2_\b2_\b1 int _\bG_\be_\bt_\bN_\bu_\bm_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(int channel = 0) const;\n+222\n+224 _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(int channel = 0)\n+const;\n 225\n-226\n-227} // end namespace Far\n-228\n-229} // end namespace OPENSUBDIV_VERSION\n-230using namespace OPENSUBDIV_VERSION;\n-231\n-232} // end namespace OpenSubdiv\n+227 template \n+_\b2_\b2_\b8 _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bR_\be_\ba_\bl_\b<_\bR_\bE_\bA_\bL_\b> const * _\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(int\n+channel = 0) const;\n+229\n+_\b2_\b3_\b2 template bool\n+_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bM_\ba_\bt_\bc_\bh_\be_\bs_\bT_\by_\bp_\be() const;\n 233\n-234\n-235#endif /* OPENSUBDIV3_FAR_PATCH_TABLE_FACTORY_H */\n+248 template void\n+249 _\bC_\bo_\bm_\bp_\bu_\bt_\be_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\bl_\bu_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(T const *src, T *dst, int channel = 0)\n+const;\n+251\n+252\n+254\n+255\n+_\b2_\b5_\b9 typedef _\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b<_\bu_\bn_\bs_\bi_\bg_\bn_\be_\bd_\b _\bi_\bn_\bt_\b> _\bC_\bo_\bn_\bs_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bA_\br_\br_\ba_\by;\n+260\n+_\b2_\b6_\b2 _\bC_\bo_\bn_\bs_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle)\n+const;\n+263\n+_\b2_\b6_\b4 typedef std::vector _\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be_\bT_\ba_\bb_\bl_\be;\n+265\n+_\b2_\b6_\b7 _\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be_\bT_\ba_\bb_\bl_\be const & _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be_\bT_\ba_\bb_\bl_\be() const {\n+268 return _vertexValenceTable;\n+269 }\n+271\n+272\n+274\n+280\n+_\b2_\b8_\b3 float _\bG_\be_\bt_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bV_\ba_\bl_\bu_\be(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle) const;\n+284\n+_\b2_\b8_\b7 float _\bG_\be_\bt_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bV_\ba_\bl_\bu_\be(int array, int patch) const;\n+289\n+290\n+292\n+298\n+_\b3_\b0_\b0 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br _\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br() const;\n+301\n+_\b3_\b0_\b3 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bV_\ba_\br_\by_\bi_\bn_\bg_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle) const;\n+304\n+_\b3_\b0_\b6 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bV_\ba_\br_\by_\bi_\bn_\bg_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int array, int patch) const;\n+307\n+_\b3_\b0_\b9 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\ba_\br_\by_\bi_\bn_\bg_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int array) const;\n+310\n+_\b3_\b1_\b2 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const;\n+314\n+315\n+317\n+323\n+_\b3_\b2_\b5 int _\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs() const;\n+326\n+_\b3_\b2_\b8 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br _\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bR_\be_\bg_\bu_\bl_\ba_\br(int channel = 0) const;\n+329\n+_\b3_\b3_\b1 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br _\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bI_\br_\br_\be_\bg_\bu_\bl_\ba_\br(int channel = 0) const;\n+332\n+_\b3_\b3_\b4 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br _\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(int channel = 0) const;\n+335\n+_\b3_\b3_\b7 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bs(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, int channel\n+= 0) const;\n+338\n+_\b3_\b4_\b0 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bs(int array, int patch, int channel = 0)\n+const;\n+341\n+_\b3_\b4_\b3 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bs(int array, int channel = 0) const;\n+344\n+_\b3_\b4_\b6 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bs(int channel = 0) const;\n+347\n+_\b3_\b4_\b9 int _\bG_\be_\bt_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bS_\bt_\br_\bi_\bd_\be(int channel = 0) const;\n+350\n+_\b3_\b5_\b2 _\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, int channel =\n+0) const;\n+353\n+_\b3_\b5_\b5 _\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm(int array, int patch, int channel = 0)\n+const;\n+356\n+_\b3_\b5_\b8 _\bC_\bo_\bn_\bs_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bs(int array, int channel =\n+0) const;\n+359\n+_\b3_\b6_\b1 _\bC_\bo_\bn_\bs_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bA_\br_\br_\ba_\by _\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bs(int channel = 0) const;\n+362\n+_\b3_\b6_\b4 _\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bV_\ba_\br_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn _\bG_\be_\bt_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn(int\n+channel = 0) const;\n+366\n+367\n+369\n+374\n+_\b3_\b7_\b5 typedef std::vector _\bP_\ba_\bt_\bc_\bh_\bV_\be_\br_\bt_\bs_\bT_\ba_\bb_\bl_\be;\n+376\n+_\b3_\b7_\b8 _\bP_\ba_\bt_\bc_\bh_\bV_\be_\br_\bt_\bs_\bT_\ba_\bb_\bl_\be const & _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs_\bT_\ba_\bb_\bl_\be() const { return\n+_patchVerts; }\n+379\n+_\b3_\b8_\b1 _\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bT_\ba_\bb_\bl_\be const & _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bT_\ba_\bb_\bl_\be() const { return _paramTable; }\n+382\n+_\b3_\b8_\b4 std::vector const &_\bG_\be_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bI_\bn_\bd_\be_\bx_\bT_\ba_\bb_\bl_\be() const { return\n+_sharpnessIndices; }\n+385\n+_\b3_\b8_\b7 std::vector const &_\bG_\be_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bV_\ba_\bl_\bu_\be_\bs() const { return\n+_sharpnessValues; }\n+388\n+_\b3_\b8_\b9 typedef std::vector _\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bT_\ba_\bb_\bl_\be;\n+390\n+_\b3_\b9_\b2 _\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bT_\ba_\bb_\bl_\be const & _\bG_\be_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bT_\ba_\bb_\bl_\be() const {\n+393 return _quadOffsetsTable;\n+394 }\n+396\n+_\b3_\b9_\b8 void _\bp_\br_\bi_\bn_\bt() const;\n+399\n+400public:\n+401\n+403\n+405\n+428 template \n+_\b4_\b2_\b9 void _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, REAL u, REAL v,\n+430 REAL wP[], REAL wDu[] = 0, REAL wDv[] = 0,\n+431 REAL wDuu[] = 0, REAL wDuv[] = 0, REAL wDvv[] = 0) const;\n+432\n+435 void _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, float u, float v,\n+436 float wP[], float wDu[] = 0, float wDv[] = 0,\n+437 float wDuu[] = 0, float wDuv[] = 0, float wDvv[] = 0) const;\n+438\n+441 void _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, double u, double v,\n+442 double wP[], double wDu[] = 0, double wDv[] = 0,\n+443 double wDuu[] = 0, double wDuv[] = 0, double wDvv[] = 0) const;\n+444\n+467 template \n+_\b4_\b6_\b8 void _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, REAL u, REAL v,\n+469 REAL wP[], REAL wDu[] = 0, REAL wDv[] = 0,\n+470 REAL wDuu[] = 0, REAL wDuv[] = 0, REAL wDvv[] = 0) const;\n+471\n+474 void _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, float u, float v,\n+475 float wP[], float wDu[] = 0, float wDv[] = 0,\n+476 float wDuu[] = 0, float wDuv[] = 0, float wDvv[] = 0) const;\n+477\n+480 void _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, double u, double v,\n+481 double wP[], double wDu[] = 0, double wDv[] = 0,\n+482 double wDuu[] = 0, double wDuv[] = 0, double wDvv[] = 0) const;\n+483\n+508 template \n+_\b5_\b0_\b9 void _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, REAL u, REAL v,\n+510 REAL wP[], REAL wDu[] = 0, REAL wDv[] = 0,\n+511 REAL wDuu[] = 0, REAL wDuv[] = 0, REAL wDvv[] = 0,\n+512 int channel = 0) const;\n+513\n+516 void _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, float u, float v,\n+517 float wP[], float wDu[] = 0, float wDv[] = 0,\n+518 float wDuu[] = 0, float wDuv[] = 0, float wDvv[] = 0,\n+519 int channel = 0) const;\n+520\n+523 void _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, double u, double\n+v,\n+524 double wP[], double wDu[] = 0, double wDv[] = 0,\n+525 double wDuu[] = 0, double wDuv[] = 0, double wDvv[] = 0,\n+526 int channel = 0) const;\n+528\n+529protected:\n+530\n+_\b5_\b3_\b1 friend class _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bB_\bu_\bi_\bl_\bd_\be_\br;\n+532\n+533 // Factory constructor\n+_\b5_\b3_\b4 _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be(int maxvalence);\n+535\n+_\b5_\b3_\b6 _\bI_\bn_\bd_\be_\bx _\bg_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx(int array, int patch) const;\n+537\n+_\b5_\b3_\b8 _\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bA_\br_\br_\ba_\by _\bg_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bs(int arrayIndex);\n+539\n+_\b5_\b4_\b0 _\bI_\bn_\bd_\be_\bx * _\bg_\be_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bI_\bn_\bd_\bi_\bc_\be_\bs(_\bI_\bn_\bd_\be_\bx arrayIndex);\n+_\b5_\b4_\b1 float * _\bg_\be_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bV_\ba_\bl_\bu_\be_\bs(_\bI_\bn_\bd_\be_\bx arrayIndex);\n+542\n+543private:\n+544\n+545 //\n+546 // Patch arrays\n+547 //\n+548\n+549 struct PatchArray;\n+550 typedef std::vector PatchArrayVector;\n+551\n+552 PatchArray & getPatchArray(_\bI_\bn_\bd_\be_\bx arrayIndex);\n+553 PatchArray const & getPatchArray(_\bI_\bn_\bd_\be_\bx arrayIndex) const;\n+554\n+555 void reservePatchArrays(int numPatchArrays);\n+556 void pushPatchArray(_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br desc, int npatches,\n+557 _\bI_\bn_\bd_\be_\bx * vidx, _\bI_\bn_\bd_\be_\bx * pidx, _\bI_\bn_\bd_\be_\bx * qoidx=0);\n+558\n+559 _\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by getPatchArrayVertices(int arrayIndex);\n+560\n+561 _\bI_\bn_\bd_\be_\bx findPatchArray(_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br desc);\n+562\n+563\n+564 //\n+565 // Varying patch arrays\n+566 //\n+567 _\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by getPatchArrayVaryingVertices(int arrayIndex);\n+568\n+569 void allocateVaryingVertices(\n+570 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br desc, int numPatches);\n+571 void populateVaryingVertices();\n+572\n+573 //\n+574 // Face-varying patch channels\n+575 //\n+576\n+577 struct FVarPatchChannel;\n+578 typedef std::vector FVarPatchChannelVector;\n+579\n+580 FVarPatchChannel & getFVarPatchChannel(int channel);\n+581 FVarPatchChannel const & getFVarPatchChannel(int channel) const;\n+582\n+583 void allocateFVarPatchChannels(int numChannels);\n+584 void allocateFVarPatchChannelValues(\n+585 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br regDesc, _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br irregDesc,\n+586 int numPatches, int channel);\n+587\n+588 // deprecated\n+589 void setFVarPatchChannelLinearInterpolation(\n+590 _\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bV_\ba_\br_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn interpolation, int channel);\n+591\n+592 _\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by getFVarValues(int channel);\n+593 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by getPatchFVarValues(int patch, int channel) const;\n+594\n+595 _\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bA_\br_\br_\ba_\by getFVarPatchParams(int channel);\n+596 _\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm getPatchFVarPatchParam(int patch, int channel) const;\n+597\n+598private:\n+599 //\n+600 // Simple private class to hold stencil table pointers of varying\n+precision,\n+601 // where the discriminant of the precision is external.\n+602 //\n+603 // NOTE that this is a simple pointer container and NOT a smart pointer\n+that\n+604 // manages the ownership of the object referred to by it.\n+605 //\n+606 class StencilTablePtr {\n+607 private:\n+608 typedef _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bR_\be_\ba_\bl_\b<_\bf_\bl_\bo_\ba_\bt_\b> float_type;\n+609 typedef _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bR_\be_\ba_\bl_\b<_\bd_\bo_\bu_\bb_\bl_\be_\b> double_type;\n+610\n+611 union {\n+612 float_type * _fPtr;\n+613 double_type * _dPtr;\n+614 };\n+615\n+616 public:\n+617 StencilTablePtr() { _fPtr = 0; }\n+618 StencilTablePtr(float_type * ptr) { _fPtr = ptr; }\n+619 StencilTablePtr(double_type * ptr) { _dPtr = ptr; }\n+620\n+621 operator bool() const { return _fPtr != 0; }\n+622\n+623 void Set() { _fPtr = 0; }\n+624 void Set(float_type * ptr) { _fPtr = ptr; }\n+625 void Set(double_type * ptr) { _dPtr = ptr; }\n+626\n+627 template StencilTableReal * Get() const;\n+628 };\n+629\n+630private:\n+631\n+632 //\n+633 // Topology\n+634 //\n+635\n+636 int _maxValence, // highest vertex valence found in the mesh\n+637 _numPtexFaces; // total number of ptex faces\n+638\n+639 _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br _patchArrays; // Vector of descriptors for arrays of\n+patches\n+640\n+641 std::vector _patchVerts; // Indices of the control vertices of the\n+patches\n+642\n+643 _\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bT_\ba_\bb_\bl_\be _paramTable; // PatchParam bitfields (one per patch)\n+644\n+645 //\n+646 // Extraordinary vertex closed-form evaluation / endcap basis conversion\n+647 //\n+648 // XXXtakahito: these data will probably be replaced with mask coefficient\n+or something\n+649 // SchemeWorker populates.\n+650 //\n+651 _\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bT_\ba_\bb_\bl_\be _quadOffsetsTable; // Quad offsets (for Gregory patches)\n+652 _\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be_\bT_\ba_\bb_\bl_\be _vertexValenceTable; // Vertex valence table (for\n+Gregory patches)\n+653\n+654 StencilTablePtr _localPointStencils; // local point conversion stencils\n+655 StencilTablePtr _localPointVaryingStencils; // local point varying stencils\n+656\n+657 //\n+658 // Varying data\n+659 //\n+660 PatchDescriptor _varyingDesc;\n+661\n+662 std::vector _varyingVerts;\n+663\n+664 //\n+665 // Face-varying data\n+666 //\n+667 FVarPatchChannelVector _fvarChannels;\n+668\n+669 std::vector _localPointFaceVaryingStencils;\n+670\n+671 //\n+672 // 'single-crease' patch sharpness tables\n+673 //\n+674 std::vector _sharpnessIndices; // Indices of single-crease sharpness\n+(one per patch)\n+675 std::vector _sharpnessValues; // Sharpness values.\n+676\n+677 //\n+678 // Construction history -- relevant to at least one public query:\n+679 //\n+680 unsigned int _isUniformLinear : 1;\n+681\n+682 //\n+683 // Precision -- only applies to local-point stencil tables\n+684 //\n+685 unsigned int _vertexPrecisionIsDouble : 1;\n+686 unsigned int _varyingPrecisionIsDouble : 1;\n+687 unsigned int _faceVaryingPrecisionIsDouble : 1;\n+688};\n+689\n+690\n+691//\n+692// Template specializations for float/double -- to be defined before used:\n+693//\n+694template <> inline StencilTableReal *\n+695PatchTable::StencilTablePtr::Get() const { return _fPtr; }\n+696\n+697template <> inline StencilTableReal *\n+698PatchTable::StencilTablePtr::Get() const { return _dPtr; }\n+699\n+_\b7_\b0_\b0template <> inline bool\n+701PatchTable::LocalPointStencilPrecisionMatchesType() const {\n+702 return !_vertexPrecisionIsDouble;\n+703}\n+_\b7_\b0_\b4template <> inline bool\n+705PatchTable::LocalPointVaryingStencilPrecisionMatchesType() const {\n+706 return !_varyingPrecisionIsDouble;\n+707}\n+_\b7_\b0_\b8template <> inline bool\n+709PatchTable::LocalPointFaceVaryingStencilPrecisionMatchesType() const\n+{\n+710 return !_faceVaryingPrecisionIsDouble;\n+711}\n+712\n+_\b7_\b1_\b3template <> inline bool\n+714PatchTable::LocalPointStencilPrecisionMatchesType() const {\n+715 return _vertexPrecisionIsDouble;\n+716}\n+_\b7_\b1_\b7template <> inline bool\n+718PatchTable::LocalPointVaryingStencilPrecisionMatchesType() const {\n+719 return _varyingPrecisionIsDouble;\n+720}\n+_\b7_\b2_\b1template <> inline bool\n+722PatchTable::LocalPointFaceVaryingStencilPrecisionMatchesType() const\n+{\n+723 return _faceVaryingPrecisionIsDouble;\n+724}\n+725\n+726//\n+727// StencilTable access -- backward compatible and generic:\n+728//\n+729inline _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *\n+_\b7_\b3_\b0_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be() const {\n+731 assert(LocalPointStencilPrecisionMatchesType());\n+732 return static_cast<_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *>(_localPointStencils.Get());\n+733}\n+734inline _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *\n+_\b7_\b3_\b5_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be() const {\n+736 assert(LocalPointVaryingStencilPrecisionMatchesType());\n+737 return static_cast<_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *>(\n+738 _localPointVaryingStencils.Get());\n+739}\n+740inline _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *\n+_\b7_\b4_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(int channel) const {\n+742 assert(LocalPointFaceVaryingStencilPrecisionMatchesType());\n+743 if (channel >= 0 && channel < (int)_localPointFaceVaryingStencils.size()) {\n+744 return static_cast<_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *>(\n+745 _localPointFaceVaryingStencils[channel].Get());\n+746 }\n+747 return NULL;\n+748}\n+749\n+750template \n+751inline _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bR_\be_\ba_\bl_\b<_\bR_\bE_\bA_\bL_\b> const *\n+_\b7_\b5_\b2_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be() const {\n+753 assert(LocalPointStencilPrecisionMatchesType());\n+754 return _localPointStencils.Get();\n+755}\n+756template \n+757inline _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bR_\be_\ba_\bl_\b<_\bR_\bE_\bA_\bL_\b> const *\n+_\b7_\b5_\b8_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be() const {\n+759 assert(LocalPointVaryingStencilPrecisionMatchesType());\n+760 return _localPointVaryingStencils.Get();\n+761}\n+762template \n+763inline _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bR_\be_\ba_\bl_\b<_\bR_\bE_\bA_\bL_\b> const *\n+_\b7_\b6_\b4_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(int channel) const {\n+765 assert(LocalPointFaceVaryingStencilPrecisionMatchesType());\n+766 if (channel >= 0 && channel < (int)_localPointFaceVaryingStencils.size()) {\n+767 return _localPointFaceVaryingStencils[channel].Get();\n+768 }\n+769 return NULL;\n+770}\n+771\n+772\n+773//\n+774// Computation of local point values:\n+775//\n+776template \n+777inline void\n+_\b7_\b7_\b8_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\bl_\bu_\be_\bs(T const *src, T *dst) const {\n+779 assert(LocalPointStencilPrecisionMatchesType());\n+780 if (_localPointStencils) {\n+781 _localPointStencils.Get()->UpdateValues(src, dst);\n+782 }\n+783}\n+784\n+785template \n+786inline void\n+_\b7_\b8_\b7_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\bl_\bu_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(T const *src, T *dst) const {\n+788 assert(LocalPointVaryingStencilPrecisionMatchesType());\n+789 if (_localPointVaryingStencils) {\n+790 _localPointVaryingStencils.Get()->UpdateValues(src, dst);\n+791 }\n+792}\n+793\n+794template \n+795inline void\n+_\b7_\b9_\b6_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\bl_\bu_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(T const *src, T *dst, int\n+channel) const {\n+797 assert(LocalPointFaceVaryingStencilPrecisionMatchesType());\n+798 if (channel >= 0 && channel < (int)_localPointFaceVaryingStencils.size()) {\n+799 if (_localPointFaceVaryingStencils[channel]) {\n+800 _localPointFaceVaryingStencils[channel].Get()->UpdateValues(src,\n+dst);\n+801 }\n+802 }\n+803}\n+804\n+805\n+806//\n+807// Basis evaluation overloads\n+808//\n+809inline void\n+_\b8_\b1_\b0_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, float u, float v,\n+811 float wP[], float wDu[], float wDv[],\n+812 float wDuu[], float wDuv[], float wDvv[]) const {\n+813\n+814 EvaluateBasis(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv);\n+815}\n+816inline void\n+_\b8_\b1_\b7_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, double u, double v,\n+818 double wP[], double wDu[], double wDv[],\n+819 double wDuu[], double wDuv[], double wDvv[]) const {\n+820\n+821 EvaluateBasis(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv);\n+822}\n+823\n+824inline void\n+_\b8_\b2_\b5_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, float u, float\n+v,\n+826 float wP[], float wDu[], float wDv[],\n+827 float wDuu[], float wDuv[], float wDvv[]) const {\n+828\n+829 EvaluateBasisVarying(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv);\n+830}\n+831inline void\n+_\b8_\b3_\b2_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, double u,\n+double v,\n+833 double wP[], double wDu[], double wDv[],\n+834 double wDuu[], double wDuv[], double wDvv[]) const {\n+835\n+836 EvaluateBasisVarying(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv);\n+837}\n+838\n+839inline void\n+_\b8_\b4_\b0_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, float u,\n+float v,\n+841 float wP[], float wDu[], float wDv[],\n+842 float wDuu[], float wDuv[], float wDvv[], int channel) const {\n+843\n+844 EvaluateBasisFaceVarying(handle, u, v, wP, wDu, wDv, wDuu, wDuv,\n+wDvv, channel);\n+845}\n+846inline void\n+_\b8_\b4_\b7_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be const & handle, double u,\n+double v,\n+848 double wP[], double wDu[], double wDv[],\n+849 double wDuu[], double wDuv[], double wDvv[], int channel) const {\n+850\n+851 EvaluateBasisFaceVarying(handle, u, v, wP, wDu, wDv, wDuu, wDuv,\n+wDvv, channel);\n+852}\n+853\n+854} // end namespace Far\n+855\n+856} // end namespace OPENSUBDIV_VERSION\n+857using namespace OPENSUBDIV_VERSION;\n+858\n+859} // end namespace OpenSubdiv\n+860\n+861#endif /* OPENSUBDIV3_FAR_PATCH_TABLE */\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by\n-Vtr::ConstIndexArray ConstIndexArray\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b4_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bT_\ba_\bb_\bl_\be\n+std::vector< PatchParam > PatchParamTable\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\b._\bh_\b:_\b2_\b4_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bI_\bn_\bd_\be_\bx\n+Vtr::Index Index\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b4_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< PatchArray > PatchArrayVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b1_\b3_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+Describes the type of a patch.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bM_\ba_\bp\n+An quadtree-based map connecting coarse faces to their sub-patches.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bM_\ba_\bp_\b._\bh_\b:_\b4_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm\n+Patch parameterization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\b._\bh_\b:_\b1_\b5_\b2\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n Container for arrays of parametric patches.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by\n-Factory for constructing a PatchTable from a TopologyRefiner.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b4_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bg_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< PatchFaceTag > PatchTagVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b2_\b0_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static PatchTable * Create(TopologyRefiner const &refiner, Options\n-options=Options(), ConstIndexArray selectedFaces=ConstIndexArray())\n-Instantiates a PatchTable from a client-provided TopologyRefiner.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n-Public options for the PatchTable factory.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b4_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bT_\ba_\bb_\bl_\be_\bs\n-unsigned int generateVaryingTables\n-Generate varying patch tables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b2_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bL_\be_\bg_\ba_\bc_\by_\bS_\bh_\ba_\br_\bp_\bC_\bo_\br_\bn_\be_\br_\bP_\ba_\bt_\bc_\bh_\be_\bs\n-unsigned int generateLegacySharpCornerPatches\n-Generate sharp regular patches at smooth corners (legacy)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b3_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bs_\bh_\ba_\br_\be_\bE_\bn_\bd_\bC_\ba_\bp_\bP_\ba_\bt_\bc_\bh_\bP_\bo_\bi_\bn_\bt_\bs\n-unsigned int shareEndCapPatchPoints\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b2_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bG_\be_\bt_\bR_\be_\bf_\bi_\bn_\be_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n-TopologyRefiner::AdaptiveOptions GetRefineAdaptiveOptions() const\n-Determine adaptive refinement options to match assigned patch options.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b0_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bm_\ba_\bx_\bI_\bs_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\bL_\be_\bv_\be_\bl\n-unsigned int maxIsolationLevel\n-Cap adaptive feature isolation to the given level (max. 10)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b1_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\be_\bt_\bE_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be\n-EndCapType GetEndCapType() const\n-Get endcap basis type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b8_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bF_\bV_\ba_\br_\bL_\be_\bg_\ba_\bc_\by_\bL_\bi_\bn_\be_\ba_\br_\bP_\ba_\bt_\bc_\bh_\be_\bs\n-unsigned int generateFVarLegacyLinearPatches\n-Generate all linear face-varying patches (legacy)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b3_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bS_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn\n-void SetPatchPrecision()\n-Set precision of vertex patches.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bD_\bo_\bu_\bb_\bl_\be\n-unsigned int fvarPatchPrecisionDouble\n-Generate double-precision stencils for face-varying patches.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b3_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bS_\be_\bt_\bM_\ba_\bx_\bI_\bs_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\bL_\be_\bv_\be_\bl\n-void SetMaxIsolationLevel(unsigned int level)\n-Set maximum isolation level.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b9_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\be_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be\n-unsigned int endCapType\n-EndCapType.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b2_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bf_\bv_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-int const * fvarChannelIndices\n-List containing the indices of the channels selected for the factory.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b4_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bu_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh\n-unsigned int useSingleCreasePatch\n-Use single crease patch.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b1_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bu_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh\n-unsigned int useInfSharpPatch\n-Use infinitely-sharp patch.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b1_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\be_\bt_\bE_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be\n-void SetEndCapType(EndCapType e)\n-Set endcap basis type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b8_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bs\n-unsigned int generateVaryingLocalPoints\n-Generate local points with varying patches.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b2_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bi_\bn_\bc_\bl_\bu_\bd_\be_\bF_\bV_\ba_\br_\bB_\ba_\bs_\be_\bL_\be_\bv_\be_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-unsigned int includeFVarBaseLevelIndices\n-Include base level in face-varying patch point indices (Uniform mode only)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b1_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bA_\bl_\bl_\bL_\be_\bv_\be_\bl_\bs\n-unsigned int generateAllLevels\n-Generate levels from 'firstLevel' to 'maxLevel' (Uniform mode only)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b1_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bp_\ba_\bt_\bc_\bh_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bD_\bo_\bu_\bb_\bl_\be\n-unsigned int patchPrecisionDouble\n-Generate double-precision stencils for vertex patches.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bF_\bV_\ba_\br_\bT_\ba_\bb_\bl_\be_\bs\n-unsigned int generateFVarTables\n-Generate face-varying patch tables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b2_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bi_\bn_\bc_\bl_\bu_\bd_\be_\bB_\ba_\bs_\be_\bL_\be_\bv_\be_\bl_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-unsigned int includeBaseLevelIndices\n-Include base level in patch point indices (Uniform mode only)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b1_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bS_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn\n-void SetFVarPatchPrecision()\n-Set precision of face-varying patches.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bn_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs\n-int numFVarChannels\n-Number of channel indices and interpolation modes passed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b3_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bQ_\bu_\ba_\bd_\bs\n-unsigned int triangulateQuads\n-Triangulate 'QUADS' primitives (Uniform mode only)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b1_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bn_\bd_\bC_\ba_\bp_\bT_\by_\bp_\be\n-EndCapType\n-Choice for approximating irregular patches (end-caps)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b5_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bL_\bE_\bG_\bA_\bC_\bY_\b__\bG_\bR_\bE_\bG_\bO_\bR_\bY\n-@ ENDCAP_LEGACY_GREGORY\n-legacy option for 2.x style Gregory patches (Catmark only)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b6_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bA_\bS_\bI_\bS\n-@ ENDCAP_GREGORY_BASIS\n-use Gregory patches (highest quality, recommended default)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b5_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bN_\bO_\bN_\bE\n-@ ENDCAP_NONE\n-unspecified\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b5_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b__\bB_\bA_\bS_\bI_\bS\n-@ ENDCAP_BILINEAR_BASIS\n-use linear patches (simple quads or tris)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b5_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bB_\bS_\bP_\bL_\bI_\bN_\bE_\b__\bB_\bA_\bS_\bI_\bS\n-@ ENDCAP_BSPLINE_BASIS\n-use BSpline-like patches (same patch type as regular)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b5_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n-Options(unsigned int maxIsolation=10)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b6_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg\n-Obsolete internal struct not intended for public use \u00e2\u0080\u0093 due to be deprecated.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b9_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg_\b:_\b:\n-_\b__\bi_\bs_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be\n-unsigned int _isSingleCrease\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b2_\b0_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg_\b:_\b:\n-_\b__\bi_\bs_\bR_\be_\bg_\bu_\bl_\ba_\br\n-unsigned int _isRegular\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b9_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg_\b:_\b:\n-_\b__\bb_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bd_\be_\bx\n-unsigned int _boundaryIndex\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b9_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg_\b:_\b:\n-_\ba_\bs_\bs_\bi_\bg_\bn_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bP_\br_\bo_\bp_\be_\br_\bt_\bi_\be_\bs_\bF_\br_\bo_\bm_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk\n-void assignBoundaryPropertiesFromVertexMask(int boundaryVertexMask)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg_\b:_\b:\n-_\b__\bt_\br_\ba_\bn_\bs_\bi_\bt_\bi_\bo_\bn_\bM_\ba_\bs_\bk\n-unsigned int _transitionMask\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b9_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg_\b:_\b:\n-_\b__\bh_\ba_\bs_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bE_\bd_\bg_\be\n-unsigned int _hasBoundaryEdge\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b2_\b0_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg_\b:_\b:\n-_\b__\bb_\bo_\bu_\bn_\bd_\ba_\br_\by_\bM_\ba_\bs_\bk\n-unsigned int _boundaryMask\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b9_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg_\b:_\b:_\b__\bh_\ba_\bs_\bP_\ba_\bt_\bc_\bh\n-unsigned int _hasPatch\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b9_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg_\b:_\b:\n-_\ba_\bs_\bs_\bi_\bg_\bn_\bT_\br_\ba_\bn_\bs_\bi_\bt_\bi_\bo_\bn_\bP_\br_\bo_\bp_\be_\br_\bt_\bi_\be_\bs_\bF_\br_\bo_\bm_\bE_\bd_\bg_\be_\bM_\ba_\bs_\bk\n-void assignTransitionPropertiesFromEdgeMask(int boundaryVertexMask)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg_\b:_\b:_\bc_\bl_\be_\ba_\br\n-void clear()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg_\b:_\b:\n-_\ba_\bs_\bs_\bi_\bg_\bn_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bP_\br_\bo_\bp_\be_\br_\bt_\bi_\be_\bs_\bF_\br_\bo_\bm_\bE_\bd_\bg_\be_\bM_\ba_\bs_\bk\n-void assignBoundaryPropertiesFromEdgeMask(int boundaryEdgeMask)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bF_\ba_\bc_\be_\bT_\ba_\bg_\b:_\b:\n-_\b__\bb_\bo_\bu_\bn_\bd_\ba_\br_\by_\bC_\bo_\bu_\bn_\bt\n-unsigned int _boundaryCount\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b1_\b9_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br\n-Stores topology data for a specified set of refinement options.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b5_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n-Adaptive refinement options.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b1_\b5_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bu_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh\n-unsigned int useSingleCreasePatch\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b1_\b7_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bu_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh\n-unsigned int useInfSharpPatch\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b1_\b7_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bc_\bo_\bn_\bs_\bi_\bd_\be_\br_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs\n-unsigned int considerFVarChannels\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b1_\b8_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\ba_\br_\by_\bi_\bn_\bg_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+ConstIndexArray GetPatchArrayVaryingVertices(int array) const\n+Returns the varying vertex indices for the patches in array.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bg_\be_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bV_\ba_\bl_\bu_\be_\bs\n+float * getSharpnessValues(Index arrayIndex)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs_\bT_\ba_\bb_\bl_\be\n+PatchVertsTable const & GetPatchControlVerticesTable() const\n+Get the table of patch control vertices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b3_\b7_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\bl_\bu_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n+void ComputeLocalPointValuesFaceVarying(T const *src, T *dst, int channel=0)\n+const\n+Updates local point face-varying values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b9_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+ConstIndexArray GetVaryingVertices() const\n+Returns an array of varying vertex indices for the patches.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\bl_\bu_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n+void ComputeLocalPointValuesVarying(T const *src, T *dst) const\n+Updates local point varying values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b8_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bV_\ba_\br_\by_\bi_\bn_\bg_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+ConstIndexArray GetPatchVaryingVertices(PatchHandle const &handle) const\n+Returns the varying vertex indices for a given patch.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bI_\bs_\bF_\be_\ba_\bt_\bu_\br_\be_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be\n+bool IsFeatureAdaptive() const\n+True if the patches are of feature adaptive types.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bM_\ba_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be\n+int GetMaxValence() const\n+Returns max vertex valence.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b9_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n+StencilTableReal< REAL > const * GetLocalPointStencilTable() const\n+Returns the stencil table to compute local point vertex values.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n+StencilTable const * GetLocalPointStencilTable() const\n+Returns the stencil table to compute local point vertex values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b3_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bg_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bs\n+PatchParamArray getPatchParams(int arrayIndex)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bs\n+ConstIndexArray GetPatchArrayFVarValues(int array, int channel=0) const\n+Returns the value indices for the patches in array in channel.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bV_\ba_\bl_\bu_\be_\bs\n+std::vector< float > const & GetSharpnessValues() const\n+Returns sharpness values table.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b3_\b8_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be_\bT_\ba_\bb_\bl_\be\n+std::vector< Index > VertexValenceTable\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b2_\b6_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm\n+PatchParam GetPatchFVarPatchParam(int array, int patch, int channel=0) const\n+Returns the face-varying params for a given patch channel.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bV_\ba_\br_\by_\bi_\bn_\bg_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+ConstIndexArray GetPatchVaryingVertices(int array, int patch) const\n+Returns the varying vertex indices for a given patch.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+PatchTable(PatchTable const &src)\n+Copy constructor.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n+int GetNumPatchArrays() const\n+Returns the number of patch arrays in the table.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+ConstIndexArray GetPatchVertices(PatchHandle const &handle) const\n+Returns the control vertex indices for the patch identified by handle.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+PatchTable(int maxvalence)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bM_\ba_\bt_\bc_\bh_\be_\bs_\bT_\by_\bp_\be\n+bool LocalPointFaceVaryingStencilPrecisionMatchesType() const\n+Tests if the precision of the stencil table to compute local point face-varying\n+values matches the gi...\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bT_\ba_\bb_\bl_\be\n+PatchParamTable const & GetPatchParamTable() const\n+Returns the PatchParamTable (PatchParams order matches patch array sorting)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b3_\b8_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be_\bT_\ba_\bb_\bl_\be\n+VertexValenceTable const & GetVertexValenceTable() const\n+Returns the 'VertexValences' table (vertex neighborhoods table)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b2_\b6_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n+StencilTable const * GetLocalPointFaceVaryingStencilTable(int channel=0) const\n+Returns the stencil table to compute local point face-varying values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b4_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+int GetNumControlVertices(int array) const\n+Returns the number of control vertices in array.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b~_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+~PatchTable()\n+Destructor.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n+void EvaluateBasisFaceVarying(PatchHandle const &handle, REAL u, REAL v, REAL\n+wP[], REAL wDu[]=0, REAL wDv[]=0, REAL wDuu[]=0, REAL wDuv[]=0, REAL wDvv[]=0,\n+int channel=0) const\n+Evaluate basis functions for a face-varying value and derivatives at a given\n+(u,v) parametric locatio...\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs\n+ConstQuadOffsetsArray GetPatchQuadOffsets(PatchHandle const &handle) const\n+Returns the 'QuadOffsets' for the Gregory patch identified by handle.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bI_\br_\br_\be_\bg_\bu_\bl_\ba_\br\n+PatchDescriptor GetFVarPatchDescriptorIrregular(int channel=0) const\n+Returns the irregular patch descriptor for channel.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\bG_\be_\bt_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bV_\ba_\bl_\bu_\be\n+float GetSingleCreasePatchSharpnessValue(int array, int patch) const\n+Returns the crease sharpness for the patch in array if it is a single-crease\n+patch,...\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bg_\be_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+Index * getSharpnessIndices(Index arrayIndex)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\bl_\bu_\be_\bs\n+void ComputeLocalPointValues(T const *src, T *dst) const\n+Updates local point vertex values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b7_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\bG_\be_\bt_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bV_\ba_\bl_\bu_\be\n+float GetSingleCreasePatchSharpnessValue(PatchHandle const &handle) const\n+Returns the crease sharpness for the patch identified by handle if it is a\n+single-crease patch,...\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm\n+PatchParam GetPatchParam(int array, int patch) const\n+Returns the PatchParam for patch in array.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bs\n+ConstIndexArray GetPatchFVarValues(int array, int patch, int channel=0) const\n+Returns the value indices for a given patch in channel.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bR_\be_\bg_\bu_\bl_\ba_\br\n+PatchDescriptor GetFVarPatchDescriptorRegular(int channel=0) const\n+Returns the regular patch descriptor for channel.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+PatchDescriptor GetPatchDescriptor(PatchHandle const &handle) const\n+Returns the PatchDescriptor for the patch identified by handle.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bV_\be_\br_\bt_\bs_\bT_\ba_\bb_\bl_\be\n+std::vector< Index > PatchVertsTable\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b3_\b7_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bT_\ba_\bb_\bl_\be\n+QuadOffsetsTable const & GetQuadOffsetsTable() const\n+Returns the quad-offsets table.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b3_\b9_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+int GetNumPatches(int array) const\n+Returns the number of patches in array.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+PatchDescriptor GetVaryingPatchDescriptor() const\n+Returns the varying patch descriptor.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bs\n+ConstIndexArray GetPatchFVarValues(PatchHandle const &handle, int channel=0)\n+const\n+Returns the value indices for a given patch in channel.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bs\n+ConstPatchParamArray const GetPatchParams(int array) const\n+Returns the PatchParams for the patches in array.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs_\bT_\bo_\bt_\ba_\bl\n+int GetNumControlVerticesTotal() const\n+Returns the total number of control vertex indices in the table.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs\n+int GetNumFVarChannels() const\n+Returns the number of face-varying channels.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bs\n+ConstPatchParamArray GetPatchArrayFVarPatchParams(int array, int channel=0)\n+const\n+Returns the face-varying for a given patch in array in channel.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bg_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx\n+Index getPatchIndex(int array, int patch) const\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bs\n+int GetNumLocalPoints() const\n+Returns the number of local vertex points.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bM_\ba_\bt_\bc_\bh_\be_\bs_\bT_\by_\bp_\be\n+bool LocalPointVaryingStencilPrecisionMatchesType() const\n+Tests if the precision of the stencil table to compute local point varying\n+values matches the given f...\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+ConstIndexArray GetPatchArrayVertices(int array) const\n+Returns the control vertex indices for the patches in array.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bP_\bt_\be_\bx_\bF_\ba_\bc_\be_\bs\n+int GetNumPtexFaces() const\n+Returns the total number of ptex faces in the mesh.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b9_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bs\n+ConstIndexArray GetFVarValues(int channel=0) const\n+Returns an array of value indices for the patches in channel.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bA_\br_\br_\ba_\by\n+Vtr::ConstArray< unsigned int > ConstQuadOffsetsArray\n+Accessors for the gregory patch evaluation buffers. These methods will be\n+deprecated.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b2_\b5_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs\n+void EvaluateBasis(PatchHandle const &handle, REAL u, REAL v, REAL wP[], REAL\n+wDu[]=0, REAL wDv[]=0, REAL wDuu[]=0, REAL wDuv[]=0, REAL wDvv[]=0) const\n+Evaluate basis functions for position and derivatives at a given (u,v)\n+parametric location of a patch...\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n+StencilTableReal< REAL > const * GetLocalPointFaceVaryingStencilTable(int\n+channel=0) const\n+Returns the stencil table to compute local point face-varying values.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bT_\bo_\bt_\ba_\bl\n+int GetNumPatchesTotal() const\n+Returns the total number of patches stored in the table.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm\n+PatchParam GetPatchParam(PatchHandle const &handle) const\n+Returns a PatchParam for the patch identified by handle.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print() const\n+debug helper\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\bG_\be_\bt_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn\n+Sdc::Options::FVarLinearInterpolation GetFVarChannelLinearInterpolation(int\n+channel=0) const\n+Deprecated.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bI_\bn_\bd_\be_\bx_\bT_\ba_\bb_\bl_\be\n+std::vector< Index > const & GetSharpnessIndexTable() const\n+Returns a sharpness index table for each patch (if exists)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b3_\b8_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+PatchDescriptor GetPatchArrayDescriptor(int array) const\n+Returns the PatchDescriptor for the patches in array.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bB_\bu_\bi_\bl_\bd_\be_\br\n+friend class PatchTableBuilder\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b3_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n+void EvaluateBasisVarying(PatchHandle const &handle, REAL u, REAL v, REAL wP[],\n+REAL wDu[]=0, REAL wDv[]=0, REAL wDuu[]=0, REAL wDuv[]=0, REAL wDvv[]=0) const\n+Evaluate basis functions for a varying value and derivatives at a given (u,v)\n+parametric location of ...\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n+StencilTable const * GetLocalPointVaryingStencilTable() const\n+Returns the stencil table to compute local point varying values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b3_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bT_\ba_\bb_\bl_\be\n+std::vector< unsigned int > QuadOffsetsTable\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b3_\b8_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+ConstIndexArray GetPatchVertices(int array, int patch) const\n+Returns the control vertex indices for patch in array.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm\n+PatchParam GetPatchFVarPatchParam(PatchHandle const &handle, int channel=0)\n+const\n+Returns the value indices for a given patch in channel.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bV_\ba_\bl_\bu_\be_\bS_\bt_\br_\bi_\bd_\be\n+int GetFVarValueStride(int channel=0) const\n+Returns the stride between patches in the value index array of channel.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bs\n+ConstPatchParamArray GetFVarPatchParams(int channel=0) const\n+Returns an array of face-varying patch param for channel.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+PatchDescriptor GetFVarPatchDescriptor(int channel=0) const\n+Returns the default/irregular patch descriptor for channel.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n+int GetNumLocalPointsVarying() const\n+Returns the number of local varying points.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bM_\ba_\bt_\bc_\bh_\be_\bs_\bT_\by_\bp_\be\n+bool LocalPointStencilPrecisionMatchesType() const\n+Tests if the precision of the stencil table to compute local point vertex\n+values matches the given fl...\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n+StencilTableReal< REAL > const * GetLocalPointVaryingStencilTable() const\n+Returns the stencil table to compute local point varying values.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n+int GetNumLocalPointsFaceVarying(int channel=0) const\n+Returns the number of local face-varying points for channel.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be\n+Handle that can be used as unique patch identifier within PatchTable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be_\b:_\b:_\bp_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx\n+Index patchIndex\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be_\b:_\b:_\ba_\br_\br_\ba_\by_\bI_\bn_\bd_\be_\bx\n+Index arrayIndex\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bH_\ba_\bn_\bd_\bl_\be_\b:_\b:_\bv_\be_\br_\bt_\bI_\bn_\bd_\be_\bx\n+Index vertIndex\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bR_\be_\ba_\bl\n+Table of subdivision stencils.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b4_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n+Stencil table class wrapping the template for compatibility.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b2_\b7_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bV_\ba_\br_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn\n+FVarLinearInterpolation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b6_\b0\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b5_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b0_\b5\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bf_\ba_\br\n- * _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh\n+ * _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00734.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00734.html", "unified_diff": "@@ -94,15 +94,15 @@\n \n
patchMap.h File Reference
\n \n
\n
#include "../version.h"
\n-#include "../far/patchTable.h"
\n+#include "../far/patchTable.h"
\n #include <cassert>
\n
\n

Go to the source code of this file.

\n \n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00734_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00734_source.html", "unified_diff": "@@ -312,25 +312,25 @@\n
234
\n
235} // end namespace OPENSUBDIV_VERSION
\n
236using namespace OPENSUBDIV_VERSION;
\n
237
\n
238} // end namespace OpenSubdiv
\n
239
\n
240#endif /* OPENSUBDIV3_FAR_PATCH_PARAM */
\n-\n+\n
An quadtree-based map connecting coarse faces to their sub-patches.
Definition patchMap.h:49
\n
PatchMap(PatchTable const &patchTable)
Constructor.
\n
Handle const * FindPatch(int patchFaceId, double u, double v) const
Returns a handle to the sub-patch of the face at the given (u,v). Note that the patch face ID corresp...
Definition patchMap.h:193
\n \n \n \n \n \n-
Container for arrays of parametric patches.
Definition patchTable.h:55
\n-
Handle that can be used as unique patch identifier within PatchTable.
Definition patchTable.h:60
\n+
Container for arrays of parametric patches.
Definition patchTable.h:55
\n+
Handle that can be used as unique patch identifier within PatchTable.
Definition patchTable.h:60
\n \n \n \n
\n
\n \n \n
\n
    \n
  • opensubdiv
  • far
  • patchParam.h
  • \n
  • Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by \"doxygen\"/ 1.9.8
  • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00740.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00740.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/far/patchDescriptor.h File Reference\n+OpenSubdiv: opensubdiv/far/error.h File Reference\n \n \n \n \n \n \n \n@@ -88,51 +88,78 @@\n
\n \n \n \n \n
\n \n-
patchDescriptor.h File Reference
\n+Typedefs |\n+Enumerations |\n+Functions
\n+
error.h File Reference
\n \n
\n
#include "../version.h"
\n-#include "../far/types.h"
\n-#include "../sdc/types.h"
\n-#include <vector>
\n
\n

Go to the source code of this file.

\n

\n Classes

class  PatchMap
\n-\n-\n-\n-\n-

\n-Classes

class  PatchDescriptor
 Describes the type of a patch. More...
 
\n \n \n \n \n \n \n \n

\n Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Far
 
\n \n-\n-\n+\n+\n+\n+\n+\n+\n+

\n Typedefs

typedef Vtr::ConstArray< PatchDescriptorConstPatchDescriptorArray
 
typedef void(* ErrorCallbackFunc) (ErrorType err, const char *message)
 The error callback function type (default is \"printf\")
 
typedef void(* WarningCallbackFunc) (const char *message)
 The warning callback function type (default is \"printf\")
 
\n+\n+\n+\n+

\n+Enumerations

enum  ErrorType {
\n+  FAR_NO_ERROR\n+,
\n+  FAR_FATAL_ERROR\n+,
\n+  FAR_INTERNAL_CODING_ERROR\n+,
\n+  FAR_CODING_ERROR\n+,
\n+  FAR_RUNTIME_ERROR\n+
\n+ }
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

void SetErrorCallback (ErrorCallbackFunc func)
 Sets the error callback function (default is \"printf\")
 
void SetWarningCallback (WarningCallbackFunc func)
 Sets the warning callback function (default is \"printf\")
 
void Error (ErrorType err, const char *format,...)
 Sends an OSD error with a message (internal use only)
 
void Warning (const char *format,...)
 Sends an OSD warning message (internal use only)
 
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,29 +1,48 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-patchDescriptor.h File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bE_\bn_\bu_\bm_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+error.h File Reference\n #include \"../version.h\"\n-#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n-#include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n-#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-\u00a0 Describes the type of a patch. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br\n \u00a0\n T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-typedef _\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by< _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br >\u00a0 _\bC_\bo_\bn_\bs_\bt_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bA_\br_\br_\ba_\by\n+typedef void(*\u00a0 _\bE_\br_\br_\bo_\br_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk_\bF_\bu_\bn_\bc) (_\bE_\br_\br_\bo_\br_\bT_\by_\bp_\be err, const char *message)\n+\u00a0 The error callback function type (default is \"printf\")\n+\u00a0\n+typedef void(*\u00a0 _\bW_\ba_\br_\bn_\bi_\bn_\bg_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk_\bF_\bu_\bn_\bc) (const char *message)\n+\u00a0 The warning callback function type (default is \"printf\")\n+\u00a0\n+E\bEn\bnu\bum\bme\ber\bra\bat\bti\bio\bon\bns\bs\n+enum \u00a0 _\bE_\br_\br_\bo_\br_\bT_\by_\bp_\be {\n+ \u00a0\u00a0_\bF_\bA_\bR_\b__\bN_\bO_\b__\bE_\bR_\bR_\bO_\bR ,\n+ \u00a0\u00a0_\bF_\bA_\bR_\b__\bF_\bA_\bT_\bA_\bL_\b__\bE_\bR_\bR_\bO_\bR ,\n+ \u00a0\u00a0_\bF_\bA_\bR_\b__\bI_\bN_\bT_\bE_\bR_\bN_\bA_\bL_\b__\bC_\bO_\bD_\bI_\bN_\bG_\b__\bE_\bR_\bR_\bO_\bR ,\n+ \u00a0\u00a0_\bF_\bA_\bR_\b__\bC_\bO_\bD_\bI_\bN_\bG_\b__\bE_\bR_\bR_\bO_\bR ,\n+ \u00a0\u00a0_\bF_\bA_\bR_\b__\bR_\bU_\bN_\bT_\bI_\bM_\bE_\b__\bE_\bR_\bR_\bO_\bR\n+ }\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+void\u00a0 _\bS_\be_\bt_\bE_\br_\br_\bo_\br_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk (_\bE_\br_\br_\bo_\br_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk_\bF_\bu_\bn_\bc func)\n+\u00a0 Sets the error callback function (default is \"printf\")\n+\u00a0\n+void\u00a0 _\bS_\be_\bt_\bW_\ba_\br_\bn_\bi_\bn_\bg_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk (_\bW_\ba_\br_\bn_\bi_\bn_\bg_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk_\bF_\bu_\bn_\bc func)\n+\u00a0 Sets the warning callback function (default is \"printf\")\n+\u00a0\n+void\u00a0 _\bE_\br_\br_\bo_\br (_\bE_\br_\br_\bo_\br_\bT_\by_\bp_\be err, const char *format,...)\n+\u00a0 Sends an OSD error with a message (internal use only)\n+\u00a0\n+void\u00a0 _\bW_\ba_\br_\bn_\bi_\bn_\bg (const char *format,...)\n+\u00a0 Sends an OSD warning message (internal use only)\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bf_\ba_\br\n- * _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\n+ * _\be_\br_\br_\bo_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00740.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00740.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,15 @@\n var a00740 = [\n- [\"PatchDescriptor\", \"a00973.html\", \"a00973\"],\n- [\"ConstPatchDescriptorArray\", \"a00740.html#ad258c2d8f7871bc0d40cf3a9ded6e08a\", null]\n+ [\"ErrorCallbackFunc\", \"a00740.html#aa1630f297a91dfc683dfcfddeeebb2ac\", null],\n+ [\"WarningCallbackFunc\", \"a00740.html#a2bd300390ebc686e71a3690f4a0b1726\", null],\n+ [\"ErrorType\", \"a00740.html#ab0df38968e4f03a3f1f6d6df0f31f45a\", [\n+ [\"FAR_NO_ERROR\", \"a00740.html#ab0df38968e4f03a3f1f6d6df0f31f45aabeca977bc439b451aea1325f48a52a0b\", null],\n+ [\"FAR_FATAL_ERROR\", \"a00740.html#ab0df38968e4f03a3f1f6d6df0f31f45aa2a5bda2a3e25aa282462381f55284980\", null],\n+ [\"FAR_INTERNAL_CODING_ERROR\", \"a00740.html#ab0df38968e4f03a3f1f6d6df0f31f45aa3efe6cb2ec7e23769d53919dfb3291b5\", null],\n+ [\"FAR_CODING_ERROR\", \"a00740.html#ab0df38968e4f03a3f1f6d6df0f31f45aa9b2839feb039937015e9668f601e4d32\", null],\n+ [\"FAR_RUNTIME_ERROR\", \"a00740.html#ab0df38968e4f03a3f1f6d6df0f31f45aac565fa39d681e2766584dd87246c3bdd\", null]\n+ ]],\n+ [\"Error\", \"a00740.html#a25d51c3a61fb3dacded6e48d01fd2fdb\", null],\n+ [\"SetErrorCallback\", \"a00740.html#a3ba4fd4ed534a5c9c32ad01fa88bb8d9\", null],\n+ [\"SetWarningCallback\", \"a00740.html#a73bbe6b41209e4c34234f192f0193a63\", null],\n+ [\"Warning\", \"a00740.html#a97d41b6faaf421937e6b82bd1c3067db\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00740_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00740_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/far/patchDescriptor.h Source File\n+OpenSubdiv: opensubdiv/far/error.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
patchDescriptor.h
\n+
error.h
\n
\n
\n Go to the documentation of this file.
1//
\n
2// Copyright 2013 Pixar
\n
3//
\n
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
\n
5// with the following modification; you may not use this file except in
\n@@ -119,226 +119,80 @@\n
18// Unless required by applicable law or agreed to in writing, software
\n
19// distributed under the Apache License with the above modification is
\n
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
\n
21// KIND, either express or implied. See the Apache License for the specific
\n
22// language governing permissions and limitations under the Apache License.
\n
23//
\n
24
\n-
25#ifndef OPENSUBDIV3_FAR_PATCH_DESCRIPTOR_H
\n-
26#define OPENSUBDIV3_FAR_PATCH_DESCRIPTOR_H
\n+
25#ifndef OPENSUBDIV3_FAR_ERROR_H
\n+
26#define OPENSUBDIV3_FAR_ERROR_H
\n
27
\n
28#include "../version.h"
\n
29
\n-
30#include "../far/types.h"
\n-
31#include "../sdc/types.h"
\n+
30namespace OpenSubdiv {
\n+
31namespace OPENSUBDIV_VERSION {
\n
32
\n-
33#include <vector>
\n+
33namespace Far {
\n
34
\n-
35namespace OpenSubdiv {
\n-
36namespace OPENSUBDIV_VERSION {
\n-
37
\n-
38namespace Far {
\n-
39
\n-
\n-\n-
45
\n-
46public:
\n-
47
\n-
\n-
48 enum Type {
\n-\n-
50
\n-\n-\n-
53
\n-\n-\n-
56
\n-\n+\n+
42
\n+
43
\n+
45typedef void (*ErrorCallbackFunc)(ErrorType err, const char *message);
\n+
46
\n+\n+
54
\n+
55
\n+
57typedef void (*WarningCallbackFunc)(const char *message);
\n
58
\n-\n-\n-\n-\n-\n-
64 };
\n-
\n-
65
\n-
66public:
\n+\n+
66
\n
67
\n-
\n-\n-
70 _type(NON_PATCH) { }
\n-
\n-
71
\n-
\n-
73 PatchDescriptor(int type) :
\n-
74 _type(type) { }
\n-
\n-
75
\n-
\n-\n-
78 _type(d.GetType()) { }
\n-
\n-
79
\n-
\n-\n-
82 _type = d.GetType();
\n-
83 return *this;
\n-
84 }
\n-
\n-
85
\n-
\n-
87 Type GetType() const {
\n-
88 return (Type)_type;
\n-
89 }
\n-
\n-
90
\n-
\n-
92 static inline bool IsAdaptive(Type type) {
\n-
93 return type > TRIANGLES;
\n-
94 }
\n-
\n-
95
\n-
\n-
97 bool IsAdaptive() const {
\n-
98 return IsAdaptive( this->GetType() );
\n-
99 }
\n-
\n-
100
\n-
103 static inline short GetNumControlVertices( Type t );
\n-
104
\n-
106 static inline short GetNumFVarControlVertices( Type t );
\n-
107
\n-
\n-
110 short GetNumControlVertices() const {
\n-
111 return GetNumControlVertices( this->GetType() );
\n-
112 }
\n-
\n-
113
\n-
\n-\n-
116 return GetNumFVarControlVertices( this->GetType() );
\n-
117 }
\n-
\n-
118
\n-
120 static short GetRegularPatchSize() { return 16; }
\n-
121
\n-
123 static short GetGregoryPatchSize() { return 4; }
\n-
124
\n-
126 static short GetGregoryBasisPatchSize() { return 20; }
\n-
127
\n-
128
\n-\n-
132
\n-
134 inline bool operator < ( PatchDescriptor const other ) const;
\n-
135
\n-
137 inline bool operator == ( PatchDescriptor const other ) const;
\n-
138
\n-
139 // debug helper
\n-
140 void print() const;
\n-
141
\n-
142private:
\n-
143 unsigned int _type;
\n-
144};
\n-
\n-
145
\n-\n-
147
\n-
148// Returns the number of control vertices expected for a patch of this type
\n-
149inline short
\n-
\n-\n-
151 switch (type) {
\n-
152 case REGULAR : return GetRegularPatchSize();
\n-
153 case LOOP : return 12;
\n-
154 case QUADS : return 4;
\n-
155 case GREGORY :
\n-\n-\n-
158 case GREGORY_TRIANGLE : return 18;
\n-
159 case TRIANGLES : return 3;
\n-
160 case LINES : return 2;
\n-
161 case POINTS : return 1;
\n-
162 default : return -1;
\n-
163 }
\n-
164}
\n-
\n-
165
\n-
166// Returns the number of face-varying control vertices expected for a patch of this type
\n-
167inline short
\n-\n-
171
\n-
172// Allows ordering of patches by type
\n-
\n-
173inline bool
\n-\n-
175 return (_type < other._type);
\n-
176}
\n-
\n-
177
\n-
178// True if the descriptors are identical
\n-
179inline bool
\n-
\n-\n-
181 return _type == other._type;
\n-
182}
\n-
\n-
183
\n-
184
\n-
185
\n-
186} // end namespace Far
\n-
187
\n-
188} // end namespace OPENSUBDIV_VERSION
\n-
189using namespace OPENSUBDIV_VERSION;
\n-
190
\n-
191} // end namespace OpenSubdiv
\n-
192
\n-
193#endif /* OPENSUBDIV3_FAR_PATCH_DESCRIPTOR_H */
\n-\n-
Vtr::ConstArray< PatchDescriptor > ConstPatchDescriptorArray
\n-
SchemeType
Enumerated type for all subdivision schemes supported by OpenSubdiv.
Definition types.h:37
\n-\n-\n-\n-\n-\n-
@ LOOP
regular triangular patch for the Loop scheme
\n-\n-\n-\n-\n-\n-\n-
@ REGULAR
regular B-Spline patch for the Catmark scheme
\n-
bool IsAdaptive() const
Returns true if the type is an adaptive patch.
\n-
Type GetType() const
Returns the type of the patch.
\n-
static short GetGregoryBasisPatchSize()
Number of control vertices of Gregory patch basis (20)
\n-
short GetNumControlVertices() const
Returns the number of control vertices expected for a patch of the type described.
\n-
PatchDescriptor(PatchDescriptor const &d)
Copy Constructor.
\n-
bool operator==(PatchDescriptor const other) const
True if the descriptors are identical.
\n-
static short GetRegularPatchSize()
Number of control vertices of Regular Patches in table.
\n-\n-\n-
PatchDescriptor & operator=(PatchDescriptor const &d)
Assignment operator.
\n-
static bool IsAdaptive(Type type)
Returns true if the type is an adaptive (non-linear) patch.
\n-
bool operator<(PatchDescriptor const other) const
Allows ordering of patches by type.
\n-
static short GetGregoryPatchSize()
Number of control vertices of Gregory (and Gregory Boundary) Patches in table.
\n-\n-
static Vtr::ConstArray< PatchDescriptor > GetAdaptivePatchDescriptors(Sdc::SchemeType type)
Returns a vector of all the legal patch descriptors for the given adaptive subdivision scheme.
\n-\n-\n+
68//
\n+
69// The following are intended for internal use only (and will eventually
\n+
70// be moved within namespace internal)
\n+
71//
\n+
72
\n+
79void Error(ErrorType err, const char *format, ...);
\n+
80
\n+
85void Warning(const char *format, ...);
\n+
86
\n+
87
\n+
88} // end namespace
\n+
89
\n+
90} // end namespace OPENSUBDIV_VERSION
\n+
91using namespace OPENSUBDIV_VERSION;
\n+
92
\n+
93} // end namespace OpenSubdiv
\n+
94
\n+
95#endif // OPENSUBDIV3_FAR_ERROR_H
\n+\n+
void Error(ErrorType err, const char *format,...)
Sends an OSD error with a message (internal use only)
\n+
void(* WarningCallbackFunc)(const char *message)
The warning callback function type (default is "printf")
Definition error.h:57
\n+
void SetErrorCallback(ErrorCallbackFunc func)
Sets the error callback function (default is "printf")
\n+
void SetWarningCallback(WarningCallbackFunc func)
Sets the warning callback function (default is "printf")
\n+
void Warning(const char *format,...)
Sends an OSD warning message (internal use only)
\n+
void(* ErrorCallbackFunc)(ErrorType err, const char *message)
The error callback function type (default is "printf")
Definition error.h:45
\n+\n+
@ FAR_FATAL_ERROR
Issue a fatal error and end the program.
Definition error.h:37
\n+
@ FAR_INTERNAL_CODING_ERROR
Issue an internal programming error, but continue execution.
Definition error.h:38
\n+
@ FAR_CODING_ERROR
Issue a generic programming error, but continue execution.
Definition error.h:39
\n+
@ FAR_NO_ERROR
No error. Move along.
Definition error.h:36
\n+
@ FAR_RUNTIME_ERROR
Issue a generic runtime error, but continue execution.
Definition error.h:40
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-patchDescriptor.h\n+error.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2013 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -24,280 +24,103 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_FAR_PATCH_DESCRIPTOR_H\n-26#define OPENSUBDIV3_FAR_PATCH_DESCRIPTOR_H\n+25#ifndef OPENSUBDIV3_FAR_ERROR_H\n+26#define OPENSUBDIV3_FAR_ERROR_H\n 27\n 28#include \"../version.h\"\n 29\n-30#include \"../far/types.h\"\n-31#include \"../sdc/types.h\"\n+30namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+31namespace OPENSUBDIV_VERSION {\n 32\n-33#include \n+33namespace Far {\n 34\n-35namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-36namespace OPENSUBDIV_VERSION {\n-37\n-38namespace Far {\n-39\n-_\b4_\b4class _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br {\n-45\n-46public:\n-47\n-_\b4_\b8 enum _\bT_\by_\bp_\be {\n-_\b4_\b9 _\bN_\bO_\bN_\b__\bP_\bA_\bT_\bC_\bH = 0,\n-50\n-_\b5_\b1 _\bP_\bO_\bI_\bN_\bT_\bS,\n-_\b5_\b2 _\bL_\bI_\bN_\bE_\bS,\n-53\n-_\b5_\b4 _\bQ_\bU_\bA_\bD_\bS,\n-_\b5_\b5 _\bT_\bR_\bI_\bA_\bN_\bG_\bL_\bE_\bS,\n-56\n-_\b5_\b7 _\bL_\bO_\bO_\bP,\n+_\b3_\b5typedef enum {\n+_\b3_\b6 _\bF_\bA_\bR_\b__\bN_\bO_\b__\bE_\bR_\bR_\bO_\bR,\n+_\b3_\b7 _\bF_\bA_\bR_\b__\bF_\bA_\bT_\bA_\bL_\b__\bE_\bR_\bR_\bO_\bR,\n+_\b3_\b8 _\bF_\bA_\bR_\b__\bI_\bN_\bT_\bE_\bR_\bN_\bA_\bL_\b__\bC_\bO_\bD_\bI_\bN_\bG_\b__\bE_\bR_\bR_\bO_\bR,\n+_\b3_\b9 _\bF_\bA_\bR_\b__\bC_\bO_\bD_\bI_\bN_\bG_\b__\bE_\bR_\bR_\bO_\bR,\n+40 _\bF_\bA_\bR_\b__\bR_\bU_\bN_\bT_\bI_\bM_\bE_\b__\bE_\bR_\bR_\bO_\bR\n+_\b4_\b1} _\bE_\br_\br_\bo_\br_\bT_\by_\bp_\be;\n+42\n+43\n+_\b4_\b5typedef void (*_\bE_\br_\br_\bo_\br_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk_\bF_\bu_\bn_\bc)(_\bE_\br_\br_\bo_\br_\bT_\by_\bp_\be err, const char *message);\n+46\n+_\b5_\b3void _\bS_\be_\bt_\bE_\br_\br_\bo_\br_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk(_\bE_\br_\br_\bo_\br_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk_\bF_\bu_\bn_\bc func);\n+54\n+55\n+_\b5_\b7typedef void (*_\bW_\ba_\br_\bn_\bi_\bn_\bg_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk_\bF_\bu_\bn_\bc)(const char *message);\n 58\n-_\b5_\b9 _\bR_\bE_\bG_\bU_\bL_\bA_\bR,\n-_\b6_\b0 _\bG_\bR_\bE_\bG_\bO_\bR_\bY,\n-_\b6_\b1 _\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY,\n-_\b6_\b2 _\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bA_\bS_\bI_\bS,\n-63 _\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bT_\bR_\bI_\bA_\bN_\bG_\bL_\bE\n-_\b6_\b4 };\n-65\n-66public:\n+_\b6_\b5void _\bS_\be_\bt_\bW_\ba_\br_\bn_\bi_\bn_\bg_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk(_\bW_\ba_\br_\bn_\bi_\bn_\bg_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk_\bF_\bu_\bn_\bc func);\n+66\n 67\n-_\b6_\b9 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br() :\n-70 _type(_\bN_\bO_\bN_\b__\bP_\bA_\bT_\bC_\bH) { }\n-71\n-_\b7_\b3 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(int type) :\n-74 _type(type) { }\n-75\n-_\b7_\b7 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br( _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const & d ) :\n-78 _type(d._\bG_\be_\bt_\bT_\by_\bp_\be()) { }\n-79\n-_\b8_\b1 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br & _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=( _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const & d ) {\n-82 _type = d._\bG_\be_\bt_\bT_\by_\bp_\be();\n-83 return *this;\n-84 }\n-85\n-_\b8_\b7 _\bT_\by_\bp_\be _\bG_\be_\bt_\bT_\by_\bp_\be() const {\n-88 return (_\bT_\by_\bp_\be)_type;\n-89 }\n-90\n-_\b9_\b2 static inline bool _\bI_\bs_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be(_\bT_\by_\bp_\be type) {\n-93 return type > _\bT_\bR_\bI_\bA_\bN_\bG_\bL_\bE_\bS;\n-94 }\n-95\n-_\b9_\b7 bool _\bI_\bs_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be() const {\n-98 return _\bI_\bs_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be( this->_\bG_\be_\bt_\bT_\by_\bp_\be() );\n-99 }\n-100\n-103 static inline short _\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs( _\bT_\by_\bp_\be t );\n-104\n-106 static inline short _\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs( _\bT_\by_\bp_\be t );\n-107\n-_\b1_\b1_\b0 short _\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const {\n-111 return _\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs( this->_\bG_\be_\bt_\bT_\by_\bp_\be() );\n-112 }\n-113\n-_\b1_\b1_\b5 short _\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const {\n-116 return _\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs( this->_\bG_\be_\bt_\bT_\by_\bp_\be() );\n-117 }\n-118\n-_\b1_\b2_\b0 static short _\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bS_\bi_\bz_\be() { return 16; }\n-121\n-_\b1_\b2_\b3 static short _\bG_\be_\bt_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bS_\bi_\bz_\be() { return 4; }\n-124\n-_\b1_\b2_\b6 static short _\bG_\be_\bt_\bG_\br_\be_\bg_\bo_\br_\by_\bB_\ba_\bs_\bi_\bs_\bP_\ba_\bt_\bc_\bh_\bS_\bi_\bz_\be() { return 20; }\n-127\n-128\n-_\b1_\b3_\b1 static _\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b<_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b> _\bG_\be_\bt_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs(_\bS_\bd_\bc_\b:_\b:\n-_\bS_\bc_\bh_\be_\bm_\be_\bT_\by_\bp_\be type);\n-132\n-134 inline bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b _\b<_\b ( _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const other ) const;\n-135\n-137 inline bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b _\b=_\b=_\b ( _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const other ) const;\n-138\n-139 // debug helper\n-_\b1_\b4_\b0 void _\bp_\br_\bi_\bn_\bt() const;\n-141\n-142private:\n-143 unsigned int _type;\n-144};\n-145\n-_\b1_\b4_\b6typedef _\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b<_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b> _\bC_\bo_\bn_\bs_\bt_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bA_\br_\br_\ba_\by;\n-147\n-148// Returns the number of control vertices expected for a patch of this type\n-149inline short\n-_\b1_\b5_\b0_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs( _\bT_\by_\bp_\be type ) {\n-151 switch (type) {\n-152 case _\bR_\bE_\bG_\bU_\bL_\bA_\bR : return _\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bS_\bi_\bz_\be();\n-153 case _\bL_\bO_\bO_\bP : return 12;\n-154 case _\bQ_\bU_\bA_\bD_\bS : return 4;\n-155 case _\bG_\bR_\bE_\bG_\bO_\bR_\bY :\n-156 case _\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY : return _\bG_\be_\bt_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bS_\bi_\bz_\be();\n-157 case _\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bA_\bS_\bI_\bS : return _\bG_\be_\bt_\bG_\br_\be_\bg_\bo_\br_\by_\bB_\ba_\bs_\bi_\bs_\bP_\ba_\bt_\bc_\bh_\bS_\bi_\bz_\be();\n-158 case _\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bT_\bR_\bI_\bA_\bN_\bG_\bL_\bE : return 18;\n-159 case _\bT_\bR_\bI_\bA_\bN_\bG_\bL_\bE_\bS : return 3;\n-160 case _\bL_\bI_\bN_\bE_\bS : return 2;\n-161 case _\bP_\bO_\bI_\bN_\bT_\bS : return 1;\n-162 default : return -1;\n-163 }\n-164}\n-165\n-166// Returns the number of face-varying control vertices expected for a patch\n-of this type\n-167inline short\n-_\b1_\b6_\b8_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs( _\bT_\by_\bp_\be type ) {\n-169 return _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(type);\n-170}\n-171\n-172// Allows ordering of patches by type\n-_\b1_\b7_\b3inline bool\n-174_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b _\b<_\b ( _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const other ) const {\n-175 return (_type < other._type);\n-176}\n-177\n-178// True if the descriptors are identical\n-179inline bool\n-_\b1_\b8_\b0_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b _\b=_\b=_\b ( _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const other ) const {\n-181 return _type == other._type;\n-182}\n-183\n-184\n-185\n-186} // end namespace Far\n-187\n-188} // end namespace OPENSUBDIV_VERSION\n-189using namespace OPENSUBDIV_VERSION;\n-190\n-191} // end namespace OpenSubdiv\n-192\n-193#endif /* OPENSUBDIV3_FAR_PATCH_DESCRIPTOR_H */\n+68//\n+69// The following are intended for internal use only (and will eventually\n+70// be moved within namespace internal)\n+71//\n+72\n+_\b7_\b9void _\bE_\br_\br_\bo_\br(_\bE_\br_\br_\bo_\br_\bT_\by_\bp_\be err, const char *format, ...);\n+80\n+_\b8_\b5void _\bW_\ba_\br_\bn_\bi_\bn_\bg(const char *format, ...);\n+86\n+87\n+88} // end namespace\n+89\n+90} // end namespace OPENSUBDIV_VERSION\n+91using namespace OPENSUBDIV_VERSION;\n+92\n+93} // end namespace OpenSubdiv\n+94\n+95#endif // OPENSUBDIV3_FAR_ERROR_H\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bA_\br_\br_\ba_\by\n-Vtr::ConstArray< PatchDescriptor > ConstPatchDescriptorArray\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b1_\b4_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\bT_\by_\bp_\be\n-SchemeType\n-Enumerated type for all subdivision schemes supported by OpenSubdiv.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b3_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-Describes the type of a patch.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be\n-Type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bL_\bI_\bN_\bE_\bS\n-@ LINES\n-lines (useful for cage drawing)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bQ_\bU_\bA_\bD_\bS\n-@ QUADS\n-4-sided quadrilateral (bilinear)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bN_\bO_\bN_\b__\bP_\bA_\bT_\bC_\bH\n-@ NON_PATCH\n-undefined\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bL_\bO_\bO_\bP\n-@ LOOP\n-regular triangular patch for the Loop scheme\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bT_\bR_\bI_\bA_\bN_\bG_\bL_\bE\n-@ GREGORY_TRIANGLE\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\bR_\bI_\bA_\bN_\bG_\bL_\bE_\bS\n-@ TRIANGLES\n-3-sided triangle\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY\n-@ GREGORY_BOUNDARY\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bA_\bS_\bI_\bS\n-@ GREGORY_BASIS\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bP_\bO_\bI_\bN_\bT_\bS\n-@ POINTS\n-points (useful for cage drawing)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\bR_\bE_\bG_\bO_\bR_\bY\n-@ GREGORY\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bR_\bE_\bG_\bU_\bL_\bA_\bR\n-@ REGULAR\n-regular B-Spline patch for the Catmark scheme\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bI_\bs_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be\n-bool IsAdaptive() const\n-Returns true if the type is an adaptive patch.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b9_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bT_\by_\bp_\be\n-Type GetType() const\n-Returns the type of the patch.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b8_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bG_\br_\be_\bg_\bo_\br_\by_\bB_\ba_\bs_\bi_\bs_\bP_\ba_\bt_\bc_\bh_\bS_\bi_\bz_\be\n-static short GetGregoryBasisPatchSize()\n-Number of control vertices of Gregory patch basis (20)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b1_\b2_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-short GetNumControlVertices() const\n-Returns the number of control vertices expected for a patch of the type\n-described.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b1_\b1_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-PatchDescriptor(PatchDescriptor const &d)\n-Copy Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b7_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n-bool operator==(PatchDescriptor const other) const\n-True if the descriptors are identical.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b1_\b8_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bS_\bi_\bz_\be\n-static short GetRegularPatchSize()\n-Number of control vertices of Regular Patches in table.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b1_\b2_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-short GetNumFVarControlVertices() const\n-Deprecated.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b1_\b1_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-PatchDescriptor(int type)\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b7_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-PatchDescriptor & operator=(PatchDescriptor const &d)\n-Assignment operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b8_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bI_\bs_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be\n-static bool IsAdaptive(Type type)\n-Returns true if the type is an adaptive (non-linear) patch.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b9_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<\n-bool operator<(PatchDescriptor const other) const\n-Allows ordering of patches by type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b1_\b7_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bS_\bi_\bz_\be\n-static short GetGregoryPatchSize()\n-Number of control vertices of Gregory (and Gregory Boundary) Patches in table.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b1_\b2_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print() const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:\n-_\bG_\be_\bt_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs\n-static Vtr::ConstArray< PatchDescriptor > GetAdaptivePatchDescriptors(Sdc::\n-SchemeType type)\n-Returns a vector of all the legal patch descriptors for the given adaptive\n-subdivision scheme.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-PatchDescriptor()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b5_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bE_\br_\br_\bo_\br\n+void Error(ErrorType err, const char *format,...)\n+Sends an OSD error with a message (internal use only)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bW_\ba_\br_\bn_\bi_\bn_\bg_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk_\bF_\bu_\bn_\bc\n+void(* WarningCallbackFunc)(const char *message)\n+The warning callback function type (default is \"printf\")\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\be_\br_\br_\bo_\br_\b._\bh_\b:_\b5_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bS_\be_\bt_\bE_\br_\br_\bo_\br_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk\n+void SetErrorCallback(ErrorCallbackFunc func)\n+Sets the error callback function (default is \"printf\")\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bS_\be_\bt_\bW_\ba_\br_\bn_\bi_\bn_\bg_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk\n+void SetWarningCallback(WarningCallbackFunc func)\n+Sets the warning callback function (default is \"printf\")\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bW_\ba_\br_\bn_\bi_\bn_\bg\n+void Warning(const char *format,...)\n+Sends an OSD warning message (internal use only)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bE_\br_\br_\bo_\br_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk_\bF_\bu_\bn_\bc\n+void(* ErrorCallbackFunc)(ErrorType err, const char *message)\n+The error callback function type (default is \"printf\")\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\be_\br_\br_\bo_\br_\b._\bh_\b:_\b4_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bE_\br_\br_\bo_\br_\bT_\by_\bp_\be\n+ErrorType\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\be_\br_\br_\bo_\br_\b._\bh_\b:_\b3_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bF_\bA_\bR_\b__\bF_\bA_\bT_\bA_\bL_\b__\bE_\bR_\bR_\bO_\bR\n+@ FAR_FATAL_ERROR\n+Issue a fatal error and end the program.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\be_\br_\br_\bo_\br_\b._\bh_\b:_\b3_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bF_\bA_\bR_\b__\bI_\bN_\bT_\bE_\bR_\bN_\bA_\bL_\b__\bC_\bO_\bD_\bI_\bN_\bG_\b__\bE_\bR_\bR_\bO_\bR\n+@ FAR_INTERNAL_CODING_ERROR\n+Issue an internal programming error, but continue execution.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\be_\br_\br_\bo_\br_\b._\bh_\b:_\b3_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bF_\bA_\bR_\b__\bC_\bO_\bD_\bI_\bN_\bG_\b__\bE_\bR_\bR_\bO_\bR\n+@ FAR_CODING_ERROR\n+Issue a generic programming error, but continue execution.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\be_\br_\br_\bo_\br_\b._\bh_\b:_\b3_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bF_\bA_\bR_\b__\bN_\bO_\b__\bE_\bR_\bR_\bO_\bR\n+@ FAR_NO_ERROR\n+No error. Move along.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\be_\br_\br_\bo_\br_\b._\bh_\b:_\b3_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bF_\bA_\bR_\b__\bR_\bU_\bN_\bT_\bI_\bM_\bE_\b__\bE_\bR_\bR_\bO_\bR\n+@ FAR_RUNTIME_ERROR\n+Issue a generic runtime error, but continue execution.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\be_\br_\br_\bo_\br_\b._\bh_\b:_\b4_\b0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bf_\ba_\br\n- * _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\n+ * _\be_\br_\br_\bo_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00743.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00743.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/far/error.h File Reference\n+OpenSubdiv: opensubdiv/far/patchDescriptor.h File Reference\n \n \n \n \n \n \n \n@@ -88,78 +88,51 @@\n \n \n \n \n \n
\n \n-
error.h File Reference
\n+Typedefs
\n+
patchDescriptor.h File Reference
\n \n
\n
#include "../version.h"
\n+#include "../far/types.h"
\n+#include "../sdc/types.h"
\n+#include <vector>
\n
\n

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

class  PatchDescriptor
 Describes the type of a patch. More...
 
\n \n \n \n \n \n \n \n

\n Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Far
 
\n \n-\n-\n-\n-\n-\n-\n-

\n Typedefs

typedef void(* ErrorCallbackFunc) (ErrorType err, const char *message)
 The error callback function type (default is \"printf\")
 
typedef void(* WarningCallbackFunc) (const char *message)
 The warning callback function type (default is \"printf\")
 
\n-\n-\n-\n-

\n-Enumerations

enum  ErrorType {
\n-  FAR_NO_ERROR\n-,
\n-  FAR_FATAL_ERROR\n-,
\n-  FAR_INTERNAL_CODING_ERROR\n-,
\n-  FAR_CODING_ERROR\n-,
\n-  FAR_RUNTIME_ERROR\n-
\n- }
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n

\n-Functions

void SetErrorCallback (ErrorCallbackFunc func)
 Sets the error callback function (default is \"printf\")
 
void SetWarningCallback (WarningCallbackFunc func)
 Sets the warning callback function (default is \"printf\")
 
void Error (ErrorType err, const char *format,...)
 Sends an OSD error with a message (internal use only)
 
void Warning (const char *format,...)
 Sends an OSD warning message (internal use only)
 
typedef Vtr::ConstArray< PatchDescriptorConstPatchDescriptorArray
 
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,48 +1,29 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bE_\bn_\bu_\bm_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-error.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+patchDescriptor.h File Reference\n #include \"../version.h\"\n+#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n+#include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+\u00a0 Describes the type of a patch. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br\n \u00a0\n T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-typedef void(*\u00a0 _\bE_\br_\br_\bo_\br_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk_\bF_\bu_\bn_\bc) (_\bE_\br_\br_\bo_\br_\bT_\by_\bp_\be err, const char *message)\n-\u00a0 The error callback function type (default is \"printf\")\n-\u00a0\n-typedef void(*\u00a0 _\bW_\ba_\br_\bn_\bi_\bn_\bg_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk_\bF_\bu_\bn_\bc) (const char *message)\n-\u00a0 The warning callback function type (default is \"printf\")\n-\u00a0\n-E\bEn\bnu\bum\bme\ber\bra\bat\bti\bio\bon\bns\bs\n-enum \u00a0 _\bE_\br_\br_\bo_\br_\bT_\by_\bp_\be {\n- \u00a0\u00a0_\bF_\bA_\bR_\b__\bN_\bO_\b__\bE_\bR_\bR_\bO_\bR ,\n- \u00a0\u00a0_\bF_\bA_\bR_\b__\bF_\bA_\bT_\bA_\bL_\b__\bE_\bR_\bR_\bO_\bR ,\n- \u00a0\u00a0_\bF_\bA_\bR_\b__\bI_\bN_\bT_\bE_\bR_\bN_\bA_\bL_\b__\bC_\bO_\bD_\bI_\bN_\bG_\b__\bE_\bR_\bR_\bO_\bR ,\n- \u00a0\u00a0_\bF_\bA_\bR_\b__\bC_\bO_\bD_\bI_\bN_\bG_\b__\bE_\bR_\bR_\bO_\bR ,\n- \u00a0\u00a0_\bF_\bA_\bR_\b__\bR_\bU_\bN_\bT_\bI_\bM_\bE_\b__\bE_\bR_\bR_\bO_\bR\n- }\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-void\u00a0 _\bS_\be_\bt_\bE_\br_\br_\bo_\br_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk (_\bE_\br_\br_\bo_\br_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk_\bF_\bu_\bn_\bc func)\n-\u00a0 Sets the error callback function (default is \"printf\")\n-\u00a0\n-void\u00a0 _\bS_\be_\bt_\bW_\ba_\br_\bn_\bi_\bn_\bg_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk (_\bW_\ba_\br_\bn_\bi_\bn_\bg_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk_\bF_\bu_\bn_\bc func)\n-\u00a0 Sets the warning callback function (default is \"printf\")\n-\u00a0\n-void\u00a0 _\bE_\br_\br_\bo_\br (_\bE_\br_\br_\bo_\br_\bT_\by_\bp_\be err, const char *format,...)\n-\u00a0 Sends an OSD error with a message (internal use only)\n-\u00a0\n-void\u00a0 _\bW_\ba_\br_\bn_\bi_\bn_\bg (const char *format,...)\n-\u00a0 Sends an OSD warning message (internal use only)\n+typedef _\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by< _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br >\u00a0 _\bC_\bo_\bn_\bs_\bt_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bA_\br_\br_\ba_\by\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bf_\ba_\br\n- * _\be_\br_\br_\bo_\br_\b._\bh\n+ * _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00743.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00743.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,15 +1,4 @@\n var a00743 = [\n- [\"ErrorCallbackFunc\", \"a00743.html#aa1630f297a91dfc683dfcfddeeebb2ac\", null],\n- [\"WarningCallbackFunc\", \"a00743.html#a2bd300390ebc686e71a3690f4a0b1726\", null],\n- [\"ErrorType\", \"a00743.html#ab0df38968e4f03a3f1f6d6df0f31f45a\", [\n- [\"FAR_NO_ERROR\", \"a00743.html#ab0df38968e4f03a3f1f6d6df0f31f45aabeca977bc439b451aea1325f48a52a0b\", null],\n- [\"FAR_FATAL_ERROR\", \"a00743.html#ab0df38968e4f03a3f1f6d6df0f31f45aa2a5bda2a3e25aa282462381f55284980\", null],\n- [\"FAR_INTERNAL_CODING_ERROR\", \"a00743.html#ab0df38968e4f03a3f1f6d6df0f31f45aa3efe6cb2ec7e23769d53919dfb3291b5\", null],\n- [\"FAR_CODING_ERROR\", \"a00743.html#ab0df38968e4f03a3f1f6d6df0f31f45aa9b2839feb039937015e9668f601e4d32\", null],\n- [\"FAR_RUNTIME_ERROR\", \"a00743.html#ab0df38968e4f03a3f1f6d6df0f31f45aac565fa39d681e2766584dd87246c3bdd\", null]\n- ]],\n- [\"Error\", \"a00743.html#a25d51c3a61fb3dacded6e48d01fd2fdb\", null],\n- [\"SetErrorCallback\", \"a00743.html#a3ba4fd4ed534a5c9c32ad01fa88bb8d9\", null],\n- [\"SetWarningCallback\", \"a00743.html#a73bbe6b41209e4c34234f192f0193a63\", null],\n- [\"Warning\", \"a00743.html#a97d41b6faaf421937e6b82bd1c3067db\", null]\n+ [\"PatchDescriptor\", \"a00973.html\", \"a00973\"],\n+ [\"ConstPatchDescriptorArray\", \"a00743.html#ad258c2d8f7871bc0d40cf3a9ded6e08a\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00743_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00743_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/far/error.h Source File\n+OpenSubdiv: opensubdiv/far/patchDescriptor.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
error.h
\n+
patchDescriptor.h
\n
\n
\n Go to the documentation of this file.
1//
\n
2// Copyright 2013 Pixar
\n
3//
\n
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
\n
5// with the following modification; you may not use this file except in
\n@@ -119,80 +119,226 @@\n
18// Unless required by applicable law or agreed to in writing, software
\n
19// distributed under the Apache License with the above modification is
\n
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
\n
21// KIND, either express or implied. See the Apache License for the specific
\n
22// language governing permissions and limitations under the Apache License.
\n
23//
\n
24
\n-
25#ifndef OPENSUBDIV3_FAR_ERROR_H
\n-
26#define OPENSUBDIV3_FAR_ERROR_H
\n+
25#ifndef OPENSUBDIV3_FAR_PATCH_DESCRIPTOR_H
\n+
26#define OPENSUBDIV3_FAR_PATCH_DESCRIPTOR_H
\n
27
\n
28#include "../version.h"
\n
29
\n-
30namespace OpenSubdiv {
\n-
31namespace OPENSUBDIV_VERSION {
\n+
30#include "../far/types.h"
\n+
31#include "../sdc/types.h"
\n
32
\n-
33namespace Far {
\n+
33#include <vector>
\n
34
\n-\n-
42
\n-
43
\n-
45typedef void (*ErrorCallbackFunc)(ErrorType err, const char *message);
\n-
46
\n-\n-
54
\n-
55
\n-
57typedef void (*WarningCallbackFunc)(const char *message);
\n+
35namespace OpenSubdiv {
\n+
36namespace OPENSUBDIV_VERSION {
\n+
37
\n+
38namespace Far {
\n+
39
\n+
\n+\n+
45
\n+
46public:
\n+
47
\n+
\n+
48 enum Type {
\n+\n+
50
\n+\n+\n+
53
\n+\n+\n+
56
\n+\n
58
\n-\n-
66
\n+\n+\n+\n+\n+\n+
64 };
\n+
\n+
65
\n+
66public:
\n
67
\n-
68//
\n-
69// The following are intended for internal use only (and will eventually
\n-
70// be moved within namespace internal)
\n-
71//
\n-
72
\n-
79void Error(ErrorType err, const char *format, ...);
\n-
80
\n-
85void Warning(const char *format, ...);
\n-
86
\n-
87
\n-
88} // end namespace
\n-
89
\n-
90} // end namespace OPENSUBDIV_VERSION
\n-
91using namespace OPENSUBDIV_VERSION;
\n-
92
\n-
93} // end namespace OpenSubdiv
\n-
94
\n-
95#endif // OPENSUBDIV3_FAR_ERROR_H
\n-\n-
void Error(ErrorType err, const char *format,...)
Sends an OSD error with a message (internal use only)
\n-
void(* WarningCallbackFunc)(const char *message)
The warning callback function type (default is "printf")
Definition error.h:57
\n-
void SetErrorCallback(ErrorCallbackFunc func)
Sets the error callback function (default is "printf")
\n-
void SetWarningCallback(WarningCallbackFunc func)
Sets the warning callback function (default is "printf")
\n-
void Warning(const char *format,...)
Sends an OSD warning message (internal use only)
\n-
void(* ErrorCallbackFunc)(ErrorType err, const char *message)
The error callback function type (default is "printf")
Definition error.h:45
\n-\n-
@ FAR_FATAL_ERROR
Issue a fatal error and end the program.
Definition error.h:37
\n-
@ FAR_INTERNAL_CODING_ERROR
Issue an internal programming error, but continue execution.
Definition error.h:38
\n-
@ FAR_CODING_ERROR
Issue a generic programming error, but continue execution.
Definition error.h:39
\n-
@ FAR_NO_ERROR
No error. Move along.
Definition error.h:36
\n-
@ FAR_RUNTIME_ERROR
Issue a generic runtime error, but continue execution.
Definition error.h:40
\n+
\n+\n+
70 _type(NON_PATCH) { }
\n+
\n+
71
\n+
\n+
73 PatchDescriptor(int type) :
\n+
74 _type(type) { }
\n+
\n+
75
\n+
\n+\n+
78 _type(d.GetType()) { }
\n+
\n+
79
\n+
\n+\n+
82 _type = d.GetType();
\n+
83 return *this;
\n+
84 }
\n+
\n+
85
\n+
\n+
87 Type GetType() const {
\n+
88 return (Type)_type;
\n+
89 }
\n+
\n+
90
\n+
\n+
92 static inline bool IsAdaptive(Type type) {
\n+
93 return type > TRIANGLES;
\n+
94 }
\n+
\n+
95
\n+
\n+
97 bool IsAdaptive() const {
\n+
98 return IsAdaptive( this->GetType() );
\n+
99 }
\n+
\n+
100
\n+
103 static inline short GetNumControlVertices( Type t );
\n+
104
\n+
106 static inline short GetNumFVarControlVertices( Type t );
\n+
107
\n+
\n+
110 short GetNumControlVertices() const {
\n+
111 return GetNumControlVertices( this->GetType() );
\n+
112 }
\n+
\n+
113
\n+
\n+\n+
116 return GetNumFVarControlVertices( this->GetType() );
\n+
117 }
\n+
\n+
118
\n+
120 static short GetRegularPatchSize() { return 16; }
\n+
121
\n+
123 static short GetGregoryPatchSize() { return 4; }
\n+
124
\n+
126 static short GetGregoryBasisPatchSize() { return 20; }
\n+
127
\n+
128
\n+\n+
132
\n+
134 inline bool operator < ( PatchDescriptor const other ) const;
\n+
135
\n+
137 inline bool operator == ( PatchDescriptor const other ) const;
\n+
138
\n+
139 // debug helper
\n+
140 void print() const;
\n+
141
\n+
142private:
\n+
143 unsigned int _type;
\n+
144};
\n+
\n+
145
\n+\n+
147
\n+
148// Returns the number of control vertices expected for a patch of this type
\n+
149inline short
\n+
\n+\n+
151 switch (type) {
\n+
152 case REGULAR : return GetRegularPatchSize();
\n+
153 case LOOP : return 12;
\n+
154 case QUADS : return 4;
\n+
155 case GREGORY :
\n+\n+\n+
158 case GREGORY_TRIANGLE : return 18;
\n+
159 case TRIANGLES : return 3;
\n+
160 case LINES : return 2;
\n+
161 case POINTS : return 1;
\n+
162 default : return -1;
\n+
163 }
\n+
164}
\n+
\n+
165
\n+
166// Returns the number of face-varying control vertices expected for a patch of this type
\n+
167inline short
\n+\n+
171
\n+
172// Allows ordering of patches by type
\n+
\n+
173inline bool
\n+\n+
175 return (_type < other._type);
\n+
176}
\n+
\n+
177
\n+
178// True if the descriptors are identical
\n+
179inline bool
\n+
\n+\n+
181 return _type == other._type;
\n+
182}
\n+
\n+
183
\n+
184
\n+
185
\n+
186} // end namespace Far
\n+
187
\n+
188} // end namespace OPENSUBDIV_VERSION
\n+
189using namespace OPENSUBDIV_VERSION;
\n+
190
\n+
191} // end namespace OpenSubdiv
\n+
192
\n+
193#endif /* OPENSUBDIV3_FAR_PATCH_DESCRIPTOR_H */
\n+\n+
Vtr::ConstArray< PatchDescriptor > ConstPatchDescriptorArray
\n+
SchemeType
Enumerated type for all subdivision schemes supported by OpenSubdiv.
Definition types.h:37
\n+\n+\n+\n+\n+\n+
@ LOOP
regular triangular patch for the Loop scheme
\n+\n+\n+\n+\n+\n+\n+
@ REGULAR
regular B-Spline patch for the Catmark scheme
\n+
bool IsAdaptive() const
Returns true if the type is an adaptive patch.
\n+
Type GetType() const
Returns the type of the patch.
\n+
static short GetGregoryBasisPatchSize()
Number of control vertices of Gregory patch basis (20)
\n+
short GetNumControlVertices() const
Returns the number of control vertices expected for a patch of the type described.
\n+
PatchDescriptor(PatchDescriptor const &d)
Copy Constructor.
\n+
bool operator==(PatchDescriptor const other) const
True if the descriptors are identical.
\n+
static short GetRegularPatchSize()
Number of control vertices of Regular Patches in table.
\n+\n+\n+
PatchDescriptor & operator=(PatchDescriptor const &d)
Assignment operator.
\n+
static bool IsAdaptive(Type type)
Returns true if the type is an adaptive (non-linear) patch.
\n+
bool operator<(PatchDescriptor const other) const
Allows ordering of patches by type.
\n+
static short GetGregoryPatchSize()
Number of control vertices of Gregory (and Gregory Boundary) Patches in table.
\n+\n+
static Vtr::ConstArray< PatchDescriptor > GetAdaptivePatchDescriptors(Sdc::SchemeType type)
Returns a vector of all the legal patch descriptors for the given adaptive subdivision scheme.
\n+\n+\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-error.h\n+patchDescriptor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2013 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -24,103 +24,280 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_FAR_ERROR_H\n-26#define OPENSUBDIV3_FAR_ERROR_H\n+25#ifndef OPENSUBDIV3_FAR_PATCH_DESCRIPTOR_H\n+26#define OPENSUBDIV3_FAR_PATCH_DESCRIPTOR_H\n 27\n 28#include \"../version.h\"\n 29\n-30namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-31namespace OPENSUBDIV_VERSION {\n+30#include \"../far/types.h\"\n+31#include \"../sdc/types.h\"\n 32\n-33namespace Far {\n+33#include \n 34\n-_\b3_\b5typedef enum {\n-_\b3_\b6 _\bF_\bA_\bR_\b__\bN_\bO_\b__\bE_\bR_\bR_\bO_\bR,\n-_\b3_\b7 _\bF_\bA_\bR_\b__\bF_\bA_\bT_\bA_\bL_\b__\bE_\bR_\bR_\bO_\bR,\n-_\b3_\b8 _\bF_\bA_\bR_\b__\bI_\bN_\bT_\bE_\bR_\bN_\bA_\bL_\b__\bC_\bO_\bD_\bI_\bN_\bG_\b__\bE_\bR_\bR_\bO_\bR,\n-_\b3_\b9 _\bF_\bA_\bR_\b__\bC_\bO_\bD_\bI_\bN_\bG_\b__\bE_\bR_\bR_\bO_\bR,\n-40 _\bF_\bA_\bR_\b__\bR_\bU_\bN_\bT_\bI_\bM_\bE_\b__\bE_\bR_\bR_\bO_\bR\n-_\b4_\b1} _\bE_\br_\br_\bo_\br_\bT_\by_\bp_\be;\n-42\n-43\n-_\b4_\b5typedef void (*_\bE_\br_\br_\bo_\br_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk_\bF_\bu_\bn_\bc)(_\bE_\br_\br_\bo_\br_\bT_\by_\bp_\be err, const char *message);\n-46\n-_\b5_\b3void _\bS_\be_\bt_\bE_\br_\br_\bo_\br_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk(_\bE_\br_\br_\bo_\br_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk_\bF_\bu_\bn_\bc func);\n-54\n-55\n-_\b5_\b7typedef void (*_\bW_\ba_\br_\bn_\bi_\bn_\bg_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk_\bF_\bu_\bn_\bc)(const char *message);\n+35namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+36namespace OPENSUBDIV_VERSION {\n+37\n+38namespace Far {\n+39\n+_\b4_\b4class _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br {\n+45\n+46public:\n+47\n+_\b4_\b8 enum _\bT_\by_\bp_\be {\n+_\b4_\b9 _\bN_\bO_\bN_\b__\bP_\bA_\bT_\bC_\bH = 0,\n+50\n+_\b5_\b1 _\bP_\bO_\bI_\bN_\bT_\bS,\n+_\b5_\b2 _\bL_\bI_\bN_\bE_\bS,\n+53\n+_\b5_\b4 _\bQ_\bU_\bA_\bD_\bS,\n+_\b5_\b5 _\bT_\bR_\bI_\bA_\bN_\bG_\bL_\bE_\bS,\n+56\n+_\b5_\b7 _\bL_\bO_\bO_\bP,\n 58\n-_\b6_\b5void _\bS_\be_\bt_\bW_\ba_\br_\bn_\bi_\bn_\bg_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk(_\bW_\ba_\br_\bn_\bi_\bn_\bg_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk_\bF_\bu_\bn_\bc func);\n-66\n+_\b5_\b9 _\bR_\bE_\bG_\bU_\bL_\bA_\bR,\n+_\b6_\b0 _\bG_\bR_\bE_\bG_\bO_\bR_\bY,\n+_\b6_\b1 _\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY,\n+_\b6_\b2 _\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bA_\bS_\bI_\bS,\n+63 _\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bT_\bR_\bI_\bA_\bN_\bG_\bL_\bE\n+_\b6_\b4 };\n+65\n+66public:\n 67\n-68//\n-69// The following are intended for internal use only (and will eventually\n-70// be moved within namespace internal)\n-71//\n-72\n-_\b7_\b9void _\bE_\br_\br_\bo_\br(_\bE_\br_\br_\bo_\br_\bT_\by_\bp_\be err, const char *format, ...);\n-80\n-_\b8_\b5void _\bW_\ba_\br_\bn_\bi_\bn_\bg(const char *format, ...);\n-86\n-87\n-88} // end namespace\n-89\n-90} // end namespace OPENSUBDIV_VERSION\n-91using namespace OPENSUBDIV_VERSION;\n-92\n-93} // end namespace OpenSubdiv\n-94\n-95#endif // OPENSUBDIV3_FAR_ERROR_H\n+_\b6_\b9 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br() :\n+70 _type(_\bN_\bO_\bN_\b__\bP_\bA_\bT_\bC_\bH) { }\n+71\n+_\b7_\b3 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(int type) :\n+74 _type(type) { }\n+75\n+_\b7_\b7 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br( _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const & d ) :\n+78 _type(d._\bG_\be_\bt_\bT_\by_\bp_\be()) { }\n+79\n+_\b8_\b1 _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br & _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=( _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const & d ) {\n+82 _type = d._\bG_\be_\bt_\bT_\by_\bp_\be();\n+83 return *this;\n+84 }\n+85\n+_\b8_\b7 _\bT_\by_\bp_\be _\bG_\be_\bt_\bT_\by_\bp_\be() const {\n+88 return (_\bT_\by_\bp_\be)_type;\n+89 }\n+90\n+_\b9_\b2 static inline bool _\bI_\bs_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be(_\bT_\by_\bp_\be type) {\n+93 return type > _\bT_\bR_\bI_\bA_\bN_\bG_\bL_\bE_\bS;\n+94 }\n+95\n+_\b9_\b7 bool _\bI_\bs_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be() const {\n+98 return _\bI_\bs_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be( this->_\bG_\be_\bt_\bT_\by_\bp_\be() );\n+99 }\n+100\n+103 static inline short _\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs( _\bT_\by_\bp_\be t );\n+104\n+106 static inline short _\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs( _\bT_\by_\bp_\be t );\n+107\n+_\b1_\b1_\b0 short _\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const {\n+111 return _\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs( this->_\bG_\be_\bt_\bT_\by_\bp_\be() );\n+112 }\n+113\n+_\b1_\b1_\b5 short _\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const {\n+116 return _\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs( this->_\bG_\be_\bt_\bT_\by_\bp_\be() );\n+117 }\n+118\n+_\b1_\b2_\b0 static short _\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bS_\bi_\bz_\be() { return 16; }\n+121\n+_\b1_\b2_\b3 static short _\bG_\be_\bt_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bS_\bi_\bz_\be() { return 4; }\n+124\n+_\b1_\b2_\b6 static short _\bG_\be_\bt_\bG_\br_\be_\bg_\bo_\br_\by_\bB_\ba_\bs_\bi_\bs_\bP_\ba_\bt_\bc_\bh_\bS_\bi_\bz_\be() { return 20; }\n+127\n+128\n+_\b1_\b3_\b1 static _\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b<_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b> _\bG_\be_\bt_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs(_\bS_\bd_\bc_\b:_\b:\n+_\bS_\bc_\bh_\be_\bm_\be_\bT_\by_\bp_\be type);\n+132\n+134 inline bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b _\b<_\b ( _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const other ) const;\n+135\n+137 inline bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b _\b=_\b=_\b ( _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const other ) const;\n+138\n+139 // debug helper\n+_\b1_\b4_\b0 void _\bp_\br_\bi_\bn_\bt() const;\n+141\n+142private:\n+143 unsigned int _type;\n+144};\n+145\n+_\b1_\b4_\b6typedef _\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b<_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b> _\bC_\bo_\bn_\bs_\bt_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bA_\br_\br_\ba_\by;\n+147\n+148// Returns the number of control vertices expected for a patch of this type\n+149inline short\n+_\b1_\b5_\b0_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs( _\bT_\by_\bp_\be type ) {\n+151 switch (type) {\n+152 case _\bR_\bE_\bG_\bU_\bL_\bA_\bR : return _\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bS_\bi_\bz_\be();\n+153 case _\bL_\bO_\bO_\bP : return 12;\n+154 case _\bQ_\bU_\bA_\bD_\bS : return 4;\n+155 case _\bG_\bR_\bE_\bG_\bO_\bR_\bY :\n+156 case _\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY : return _\bG_\be_\bt_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bS_\bi_\bz_\be();\n+157 case _\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bA_\bS_\bI_\bS : return _\bG_\be_\bt_\bG_\br_\be_\bg_\bo_\br_\by_\bB_\ba_\bs_\bi_\bs_\bP_\ba_\bt_\bc_\bh_\bS_\bi_\bz_\be();\n+158 case _\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bT_\bR_\bI_\bA_\bN_\bG_\bL_\bE : return 18;\n+159 case _\bT_\bR_\bI_\bA_\bN_\bG_\bL_\bE_\bS : return 3;\n+160 case _\bL_\bI_\bN_\bE_\bS : return 2;\n+161 case _\bP_\bO_\bI_\bN_\bT_\bS : return 1;\n+162 default : return -1;\n+163 }\n+164}\n+165\n+166// Returns the number of face-varying control vertices expected for a patch\n+of this type\n+167inline short\n+_\b1_\b6_\b8_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs( _\bT_\by_\bp_\be type ) {\n+169 return _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(type);\n+170}\n+171\n+172// Allows ordering of patches by type\n+_\b1_\b7_\b3inline bool\n+174_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b _\b<_\b ( _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const other ) const {\n+175 return (_type < other._type);\n+176}\n+177\n+178// True if the descriptors are identical\n+179inline bool\n+_\b1_\b8_\b0_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b _\b=_\b=_\b ( _\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const other ) const {\n+181 return _type == other._type;\n+182}\n+183\n+184\n+185\n+186} // end namespace Far\n+187\n+188} // end namespace OPENSUBDIV_VERSION\n+189using namespace OPENSUBDIV_VERSION;\n+190\n+191} // end namespace OpenSubdiv\n+192\n+193#endif /* OPENSUBDIV3_FAR_PATCH_DESCRIPTOR_H */\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bE_\br_\br_\bo_\br\n-void Error(ErrorType err, const char *format,...)\n-Sends an OSD error with a message (internal use only)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bW_\ba_\br_\bn_\bi_\bn_\bg_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk_\bF_\bu_\bn_\bc\n-void(* WarningCallbackFunc)(const char *message)\n-The warning callback function type (default is \"printf\")\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\be_\br_\br_\bo_\br_\b._\bh_\b:_\b5_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bS_\be_\bt_\bE_\br_\br_\bo_\br_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk\n-void SetErrorCallback(ErrorCallbackFunc func)\n-Sets the error callback function (default is \"printf\")\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bS_\be_\bt_\bW_\ba_\br_\bn_\bi_\bn_\bg_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk\n-void SetWarningCallback(WarningCallbackFunc func)\n-Sets the warning callback function (default is \"printf\")\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bW_\ba_\br_\bn_\bi_\bn_\bg\n-void Warning(const char *format,...)\n-Sends an OSD warning message (internal use only)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bE_\br_\br_\bo_\br_\bC_\ba_\bl_\bl_\bb_\ba_\bc_\bk_\bF_\bu_\bn_\bc\n-void(* ErrorCallbackFunc)(ErrorType err, const char *message)\n-The error callback function type (default is \"printf\")\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\be_\br_\br_\bo_\br_\b._\bh_\b:_\b4_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bE_\br_\br_\bo_\br_\bT_\by_\bp_\be\n-ErrorType\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\be_\br_\br_\bo_\br_\b._\bh_\b:_\b3_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bF_\bA_\bR_\b__\bF_\bA_\bT_\bA_\bL_\b__\bE_\bR_\bR_\bO_\bR\n-@ FAR_FATAL_ERROR\n-Issue a fatal error and end the program.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\be_\br_\br_\bo_\br_\b._\bh_\b:_\b3_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bF_\bA_\bR_\b__\bI_\bN_\bT_\bE_\bR_\bN_\bA_\bL_\b__\bC_\bO_\bD_\bI_\bN_\bG_\b__\bE_\bR_\bR_\bO_\bR\n-@ FAR_INTERNAL_CODING_ERROR\n-Issue an internal programming error, but continue execution.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\be_\br_\br_\bo_\br_\b._\bh_\b:_\b3_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bF_\bA_\bR_\b__\bC_\bO_\bD_\bI_\bN_\bG_\b__\bE_\bR_\bR_\bO_\bR\n-@ FAR_CODING_ERROR\n-Issue a generic programming error, but continue execution.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\be_\br_\br_\bo_\br_\b._\bh_\b:_\b3_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bF_\bA_\bR_\b__\bN_\bO_\b__\bE_\bR_\bR_\bO_\bR\n-@ FAR_NO_ERROR\n-No error. Move along.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\be_\br_\br_\bo_\br_\b._\bh_\b:_\b3_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bF_\bA_\bR_\b__\bR_\bU_\bN_\bT_\bI_\bM_\bE_\b__\bE_\bR_\bR_\bO_\bR\n-@ FAR_RUNTIME_ERROR\n-Issue a generic runtime error, but continue execution.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\be_\br_\br_\bo_\br_\b._\bh_\b:_\b4_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bA_\br_\br_\ba_\by\n+Vtr::ConstArray< PatchDescriptor > ConstPatchDescriptorArray\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b1_\b4_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\bT_\by_\bp_\be\n+SchemeType\n+Enumerated type for all subdivision schemes supported by OpenSubdiv.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b3_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+Describes the type of a patch.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be\n+Type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bL_\bI_\bN_\bE_\bS\n+@ LINES\n+lines (useful for cage drawing)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bQ_\bU_\bA_\bD_\bS\n+@ QUADS\n+4-sided quadrilateral (bilinear)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bN_\bO_\bN_\b__\bP_\bA_\bT_\bC_\bH\n+@ NON_PATCH\n+undefined\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bL_\bO_\bO_\bP\n+@ LOOP\n+regular triangular patch for the Loop scheme\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bT_\bR_\bI_\bA_\bN_\bG_\bL_\bE\n+@ GREGORY_TRIANGLE\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\bR_\bI_\bA_\bN_\bG_\bL_\bE_\bS\n+@ TRIANGLES\n+3-sided triangle\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY\n+@ GREGORY_BOUNDARY\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bA_\bS_\bI_\bS\n+@ GREGORY_BASIS\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bP_\bO_\bI_\bN_\bT_\bS\n+@ POINTS\n+points (useful for cage drawing)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\bR_\bE_\bG_\bO_\bR_\bY\n+@ GREGORY\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bR_\bE_\bG_\bU_\bL_\bA_\bR\n+@ REGULAR\n+regular B-Spline patch for the Catmark scheme\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b5_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bI_\bs_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be\n+bool IsAdaptive() const\n+Returns true if the type is an adaptive patch.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b9_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bT_\by_\bp_\be\n+Type GetType() const\n+Returns the type of the patch.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b8_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bG_\br_\be_\bg_\bo_\br_\by_\bB_\ba_\bs_\bi_\bs_\bP_\ba_\bt_\bc_\bh_\bS_\bi_\bz_\be\n+static short GetGregoryBasisPatchSize()\n+Number of control vertices of Gregory patch basis (20)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b1_\b2_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+short GetNumControlVertices() const\n+Returns the number of control vertices expected for a patch of the type\n+described.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b1_\b1_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+PatchDescriptor(PatchDescriptor const &d)\n+Copy Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b7_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n+bool operator==(PatchDescriptor const other) const\n+True if the descriptors are identical.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b1_\b8_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bS_\bi_\bz_\be\n+static short GetRegularPatchSize()\n+Number of control vertices of Regular Patches in table.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b1_\b2_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+short GetNumFVarControlVertices() const\n+Deprecated.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b1_\b1_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+PatchDescriptor(int type)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b7_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+PatchDescriptor & operator=(PatchDescriptor const &d)\n+Assignment operator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b8_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bI_\bs_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be\n+static bool IsAdaptive(Type type)\n+Returns true if the type is an adaptive (non-linear) patch.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b9_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<\n+bool operator<(PatchDescriptor const other) const\n+Allows ordering of patches by type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b1_\b7_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\be_\bt_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bS_\bi_\bz_\be\n+static short GetGregoryPatchSize()\n+Number of control vertices of Gregory (and Gregory Boundary) Patches in table.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b1_\b2_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print() const\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:\n+_\bG_\be_\bt_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs\n+static Vtr::ConstArray< PatchDescriptor > GetAdaptivePatchDescriptors(Sdc::\n+SchemeType type)\n+Returns a vector of all the legal patch descriptors for the given adaptive\n+subdivision scheme.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+PatchDescriptor()\n+Default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b5_\b3\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bf_\ba_\br\n- * _\be_\br_\br_\bo_\br_\b._\bh\n+ * _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00746_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00746_source.html", "unified_diff": "@@ -322,15 +322,15 @@\n
221} // end namespace Vtr
\n
222
\n
223} // end namespace OPENSUBDIV_VERSION
\n
224using namespace OPENSUBDIV_VERSION;
\n
225} // end namespace OpenSubdiv
\n
226
\n
227#endif /* OPENSUBDIV3_VTR_STACK_BUFFER_H */
\n-\n+\n \n \n \n
\n
    \n
  • opensubdiv
  • vtr
  • stackBuffer.h
  • \n
  • Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by \"doxygen\"/ 1.9.8
  • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00749_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00749_source.html", "unified_diff": "@@ -196,15 +196,15 @@\n
    95} // end namespace Vtr
    \n
    96
    \n
    97} // end namespace OPENSUBDIV_VERSION
    \n
    98using namespace OPENSUBDIV_VERSION;
    \n
    99} // end namespace OpenSubdiv
    \n
    100
    \n
    101#endif /* OPENSUBDIV3_VTR_SPARSE_SELECTOR_H */
    \n-\n+\n \n
\n \n \n
\n
    \n
  • opensubdiv
  • vtr
  • sparseSelector.h
  • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00752.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00752.html", "unified_diff": "@@ -94,15 +94,15 @@\n \n
    refinement.h File Reference
    \n
\n
\n
#include "../version.h"
\n #include "../sdc/types.h"
\n-#include "../sdc/options.h"
\n+#include "../sdc/options.h"
\n #include "../vtr/types.h"
\n #include "../vtr/level.h"
\n #include <vector>
\n
\n

Go to the source code of this file.

\n \n \n \n

\n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00752_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00752_source.html", "unified_diff": "@@ -551,15 +551,15 @@\n
450} // end namespace Vtr
\n
451
\n
452} // end namespace OPENSUBDIV_VERSION
\n
453using namespace OPENSUBDIV_VERSION;
\n
454} // end namespace OpenSubdiv
\n
455
\n
456#endif /* OPENSUBDIV3_VTR_REFINEMENT_H */
\n-\n+\n \n
std::vector< Index > IndexVector
Definition types.h:77
\n
ConstArray< Index > ConstIndexArray
Definition types.h:80
\n \n
Split
Enumerated type for all face splitting schemes.
Definition types.h:47
\n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00755.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00755.html", "unified_diff": "@@ -94,16 +94,16 @@\n \n
level.h File Reference
\n \n
\n
#include "../version.h"
\n #include "../sdc/types.h"
\n-#include "../sdc/crease.h"
\n-#include "../sdc/options.h"
\n+#include "../sdc/crease.h"
\n+#include "../sdc/options.h"
\n #include "../vtr/types.h"
\n #include <algorithm>
\n #include <vector>
\n #include <cassert>
\n #include <cstring>
\n
\n

Go to the source code of this file.

\n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00755_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00755_source.html", "unified_diff": "@@ -974,22 +974,22 @@\n
873} // end namespace Vtr
\n
874
\n
875} // end namespace OPENSUBDIV_VERSION
\n
876using namespace OPENSUBDIV_VERSION;
\n
877} // end namespace OpenSubdiv
\n
878
\n
879#endif /* OPENSUBDIV3_VTR_LEVEL_H */
\n-\n+\n
ConstArray< LocalIndex > ConstLocalIndexArray
Definition types.h:83
\n
Array< LocalIndex > LocalIndexArray
Definition types.h:82
\n \n
ConstArray< Index > ConstIndexArray
Definition types.h:80
\n \n \n-\n+\n
\n \n \n
\n
    \n
  • opensubdiv
  • vtr
  • level.h
  • \n
  • Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by \"doxygen\"/ 1.9.8
  • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00758.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00758.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/vtr/fvarLevel.h File Reference\n+OpenSubdiv: opensubdiv/vtr/fvarRefinement.h File Reference\n \n \n \n \n \n \n \n@@ -89,23 +89,23 @@\n
\n \n \n \n
\n \n-
fvarLevel.h File Reference
\n+
fvarRefinement.h File Reference
\n
\n
\n
#include "../version.h"
\n #include "../sdc/types.h"
\n-#include "../sdc/crease.h"
\n-#include "../sdc/options.h"
\n+#include "../sdc/crease.h"
\n #include "../vtr/types.h"
\n-#include "../vtr/level.h"
\n+#include "../vtr/refinement.h"
\n+#include "../vtr/fvarLevel.h"
\n #include <vector>
\n #include <cassert>
\n #include <cstring>
\n
\n

Go to the source code of this file.

\n \n \n

\n@@ -118,13 +118,13 @@\n

 
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,27 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-fvarLevel.h File Reference\n+fvarRefinement.h File Reference\n #include \"../version.h\"\n #include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n #include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bc_\br_\be_\ba_\bs_\be_\b._\bh\"\n-#include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\"\n #include \"_\b._\b._\b/_\bv_\bt_\br_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n-#include \"_\b._\b._\b/_\bv_\bt_\br_\b/_\bl_\be_\bv_\be_\bl_\b._\bh\"\n+#include \"_\b._\b._\b/_\bv_\bt_\br_\b/_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bh\"\n+#include \"_\b._\b._\b/_\bv_\bt_\br_\b/_\bf_\bv_\ba_\br_\bL_\be_\bv_\be_\bl_\b._\bh\"\n #include \n #include \n #include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bv_\bt_\br\n- * _\bf_\bv_\ba_\br_\bL_\be_\bv_\be_\bl_\b._\bh\n+ * _\bf_\bv_\ba_\br_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00758_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00758_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/vtr/fvarLevel.h Source File\n+OpenSubdiv: opensubdiv/vtr/fvarRefinement.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
fvarLevel.h
\n+
fvarRefinement.h
\n
\n
\n Go to the documentation of this file.
1//
\n
2// Copyright 2014 DreamWorks Animation LLC.
\n
3//
\n
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
\n
5// with the following modification; you may not use this file except in
\n@@ -118,443 +118,115 @@\n
17//
\n
18// Unless required by applicable law or agreed to in writing, software
\n
19// distributed under the Apache License with the above modification is
\n
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
\n
21// KIND, either express or implied. See the Apache License for the specific
\n
22// language governing permissions and limitations under the Apache License.
\n
23//
\n-
24#ifndef OPENSUBDIV3_VTR_FVAR_LEVEL_H
\n-
25#define OPENSUBDIV3_VTR_FVAR_LEVEL_H
\n+
24#ifndef OPENSUBDIV3_VTR_FVAR_REFINEMENT_H
\n+
25#define OPENSUBDIV3_VTR_FVAR_REFINEMENT_H
\n
26
\n
27#include "../version.h"
\n
28
\n
29#include "../sdc/types.h"
\n
30#include "../sdc/crease.h"
\n-
31#include "../sdc/options.h"
\n-
32#include "../vtr/types.h"
\n-
33#include "../vtr/level.h"
\n+
31#include "../vtr/types.h"
\n+
32#include "../vtr/refinement.h"
\n+
33#include "../vtr/fvarLevel.h"
\n
34
\n
35#include <vector>
\n
36#include <cassert>
\n
37#include <cstring>
\n
38
\n
39
\n
40namespace OpenSubdiv {
\n
41namespace OPENSUBDIV_VERSION {
\n
42
\n
43namespace Vtr {
\n
44namespace internal {
\n
45
\n
46//
\n-
47// FVarLevel:
\n-
48// A "face-varying channel" includes the topology for a set of face-varying
\n-
49// data, relative to the topology of the Level with which it is associated.
\n-
50//
\n-
51// Analogous to a set of vertices and face-vertices that define the topology for
\n-
52// the geometry, a channel requires a set of "values" and "face-values". The
\n-
53// "values" are indices of entries in a set of face-varying data, just as vertices
\n-
54// are indices into a set of vertex data. The face-values identify a value for
\n-
55// each vertex of the face, and so define topology for the values that may be
\n-
56// unique to each channel.
\n-
57//
\n-
58// In addition to the value size and the vector of face-values (which matches the
\n-
59// size of the geometry's face-vertices), tags are associated with each component
\n-
60// to identify deviations of the face-varying topology from the vertex topology.
\n-
61// And since there may be a one-to-many mapping between vertices and face-varying
\n-
62// values, that mapping is also allocated.
\n-
63//
\n-
64// It turns out that the mapping used is able to completely encode the set of
\n-
65// face-values and is more amenable to refinement. Currently the face-values
\n-
66// take up almost half the memory of this representation, so if memory does
\n-
67// become a concern, we do not need to store them. The only reason we do so now
\n-
68// is that the face-value interface for specifying base topology and inspecting
\n-
69// subsequent levels is very familiar to that of face-vertices for clients. So
\n-
70// having them available for such access is convenient.
\n-
71//
\n-
72// Regarding scope and access...
\n-
73// Unclear at this early state, but leaning towards nesting this class within
\n-
74// Level, given the intimate dependency between the two.
\n-
75// Everything is being declared public for now to facilitate access until it's
\n-
76// clearer how this functionality will be provided.
\n-
77//
\n-
78class FVarLevel {
\n-
79public:
\n-
80 //
\n-
81 // Component tags -- trying to minimize the types needed here:
\n-
82 //
\n-
83 // Tag per Edge:
\n-
84 // - facilitates topological analysis around each vertex
\n-
85 // - required during refinement to spawn one or more edge-values
\n-
86 //
\n-
87 struct ETag {
\n-
88 ETag() { }
\n-
89
\n-
90 void clear() { std::memset(this, 0, sizeof(ETag)); }
\n-
91
\n-
92 typedef unsigned char ETagSize;
\n-
93
\n-
94 ETagSize _mismatch : 1; // local FVar topology does not match
\n-
95 ETagSize _disctsV0 : 1; // discontinuous at vertex 0
\n-
96 ETagSize _disctsV1 : 1; // discontinuous at vertex 1
\n-
97 ETagSize _linear : 1; // linear boundary constraints
\n+
47// FVarRefinement:
\n+
48// A face-varying refinement contains data to support the refinement of a
\n+
49// particular face-varying "channel". Just as Refinement maintains a mapping
\n+
50// between the components of a parent Level and its child, the face-varying
\n+
51// analog maintains a mapping between the face-varying values of a parent
\n+
52// FVarLevel and its child.
\n+
53//
\n+
54// It turns out there is little data necessary here, so the class consists
\n+
55// mainly of methods that populate the child FVarLevel. The mapping data in
\n+
56// the refinement between Levels serves most purposes and all that is required
\n+
57// in addition is a mapping from values in the child FVarLevel to the parent.
\n+
58//
\n+
59class FVarRefinement {
\n+
60public:
\n+
61 FVarRefinement(Refinement const& refinement, FVarLevel& parent, FVarLevel& child);
\n+
62 ~FVarRefinement();
\n+
63
\n+
64 int getChildValueParentSource(Index vIndex, int sibling) const {
\n+
65 return _childValueParentSource[_childFVar.getVertexValueOffset(vIndex, (LocalIndex)sibling)];
\n+
66 }
\n+
67
\n+
68 float getFractionalWeight(Index pVert, LocalIndex pSibling,
\n+
69 Index cVert, LocalIndex cSibling) const;
\n+
70
\n+
71
\n+
72 // Modifiers supporting application of the refinement:
\n+
73 void applyRefinement();
\n+
74
\n+
75 void estimateAndAllocateChildValues();
\n+
76 void populateChildValues();
\n+
77 void populateChildValuesFromFaceVertices();
\n+
78 void populateChildValuesFromEdgeVertices();
\n+
79 int populateChildValuesForEdgeVertex(Index cVert, Index pEdge);
\n+
80 void populateChildValuesFromVertexVertices();
\n+
81 int populateChildValuesForVertexVertex(Index cVert, Index pVert);
\n+
82 void trimAndFinalizeChildValues();
\n+
83
\n+
84 void propagateEdgeTags();
\n+
85 void propagateValueTags();
\n+
86 void propagateValueCreases();
\n+
87 void reclassifySemisharpValues();
\n+
88
\n+
89private:
\n+
90 //
\n+
91 // Identify the Refinement, its Levels and assigned FVarLevels for more
\n+
92 // immediate access -- child FVarLevel is non-const as it is to be assigned:
\n+
93 //
\n+
94 Refinement const & _refinement;
\n+
95
\n+
96 Level const & _parentLevel;
\n+
97 FVarLevel const & _parentFVar;
\n
98
\n-
99 Level::ETag combineWithLevelETag(Level::ETag) const;
\n-
100 };
\n+
99 Level const & _childLevel;
\n+
100 FVarLevel & _childFVar;
\n
101
\n-
102 //
\n-
103 // Tag per Value:
\n-
104 // - informs both refinement and interpolation
\n-
105 // - every value spawns a child value in refinement
\n-
106 // - includes a subset of Level::VTag to be later combined with a VTag
\n-
107 //
\n-
108 struct ValueTag {
\n-
109 ValueTag() { }
\n-
110
\n-
111 void clear() { std::memset(this, 0, sizeof(ValueTag)); }
\n+
102 // When refinement is sparse, we need a mapping between siblings of a vertex
\n+
103 // value in the parent and child -- and for some child values, there will not
\n+
104 // be a parent value, in which case the source of the parent component will
\n+
105 // be stored. So we refer to the parent "source" rather than "sibling":
\n+
106 //
\n+
107 std::vector<LocalIndex> _childValueParentSource;
\n+
108};
\n+
109
\n+
110} // end namespace internal
\n+
111} // end namespace Vtr
\n
112
\n-
113 bool isMismatch() const { return _mismatch; }
\n-
114 bool isCrease() const { return _crease; }
\n-
115 bool isCorner() const { return !_crease; }
\n-
116 bool isSemiSharp() const { return _semiSharp; }
\n-
117 bool isInfSharp() const { return !_semiSharp && !_crease; }
\n-
118 bool isDepSharp() const { return _depSharp; }
\n-
119 bool hasCreaseEnds() const { return _crease || _semiSharp; }
\n-
120
\n-
121 bool hasInfSharpEdges() const { return _infSharpEdges; }
\n-
122 bool hasInfIrregularity() const { return _infIrregular; }
\n-
123
\n-
124 typedef unsigned char ValueTagSize;
\n-
125
\n-
126 // If there is no mismatch, no other members should be inspected
\n-
127 ValueTagSize _mismatch : 1; // local FVar topology does not match
\n-
128 ValueTagSize _xordinary : 1; // local FVar topology is extra-ordinary
\n-
129 ValueTagSize _nonManifold : 1; // local FVar topology is non-manifold
\n-
130 ValueTagSize _crease : 1; // value is a crease, otherwise a corner
\n-
131 ValueTagSize _semiSharp : 1; // value is a corner decaying to crease
\n-
132 ValueTagSize _depSharp : 1; // value is a corner by dependency on another
\n-
133
\n-
134 ValueTagSize _infSharpEdges : 1; // value is a corner by inf-sharp features
\n-
135 ValueTagSize _infIrregular : 1; // value span includes inf-sharp irregularity
\n-
136
\n-
137 Level::VTag combineWithLevelVTag(Level::VTag) const;
\n-
138
\n-
139 // Alternate constructor and accessor for dealing with integer bits directly:
\n-
140 explicit ValueTag(ValueTagSize bits) {
\n-
141 std::memcpy(this, &bits, sizeof(bits));
\n-
142 }
\n-
143 ValueTagSize getBits() const {
\n-
144 ValueTagSize bits;
\n-
145 std::memcpy(&bits, this, sizeof(bits));
\n-
146 return bits;
\n-
147 }
\n-
148 };
\n-
149
\n-
150 typedef Vtr::ConstArray<ValueTag> ConstValueTagArray;
\n-
151 typedef Vtr::Array<ValueTag> ValueTagArray;
\n-
152
\n-
153 //
\n-
154 // Simple struct containing the "end faces" of a crease, i.e. the faces which
\n-
155 // contain the FVar values to be used when interpolating the crease. (Prefer
\n-
156 // the struct over std::pair for its member names)
\n-
157 //
\n-
158 struct CreaseEndPair {
\n-
159 LocalIndex _startFace;
\n-
160 LocalIndex _endFace;
\n-
161 };
\n-
162
\n-
163 typedef Vtr::ConstArray<CreaseEndPair> ConstCreaseEndPairArray;
\n-
164 typedef Vtr::Array<CreaseEndPair> CreaseEndPairArray;
\n-
165
\n-
166 typedef LocalIndex Sibling;
\n-
167
\n-
168 typedef ConstLocalIndexArray ConstSiblingArray;
\n-
169 typedef LocalIndexArray SiblingArray;
\n-
170
\n-
171public:
\n-
172 FVarLevel(Level const& level);
\n-
173 ~FVarLevel();
\n-
174
\n-
175 // Queries for the entire channel:
\n-
176 Level const& getLevel() const { return _level; }
\n-
177
\n-
178 int getNumValues() const { return _valueCount; }
\n-
179 int getNumFaceValuesTotal() const { return (int) _faceVertValues.size(); }
\n-
180
\n-
181 bool isLinear() const { return _isLinear; }
\n-
182 bool hasLinearBoundaries() const { return _hasLinearBoundaries; }
\n-
183 bool hasSmoothBoundaries() const { return ! _hasLinearBoundaries; }
\n-
184 bool hasCreaseEnds() const { return hasSmoothBoundaries(); }
\n-
185
\n-
186 Sdc::Options getOptions() const { return _options; }
\n-
187
\n-
188 // Queries per face:
\n-
189 ConstIndexArray getFaceValues(Index fIndex) const;
\n-
190 IndexArray getFaceValues(Index fIndex);
\n-
191
\n-
192 // Queries per edge:
\n-
193 ETag getEdgeTag(Index eIndex) const { return _edgeTags[eIndex]; }
\n-
194 bool edgeTopologyMatches(Index eIndex) const { return !getEdgeTag(eIndex)._mismatch; }
\n-
195
\n-
196 // Queries per vertex (and its potential sibling values):
\n-
197 int getNumVertexValues(Index v) const { return _vertSiblingCounts[v]; }
\n-
198 Index getVertexValueOffset(Index v, Sibling i = 0) const { return _vertSiblingOffsets[v] + i; }
\n-
199
\n-
200 Index getVertexValue(Index v, Sibling i = 0) const { return _vertValueIndices[getVertexValueOffset(v,i)]; }
\n-
201
\n-
202 Index findVertexValueIndex(Index vertexIndex, Index valueIndex) const;
\n-
203
\n-
204 // Methods to access/modify array properties per vertex:
\n-
205 ConstIndexArray getVertexValues(Index vIndex) const;
\n-
206 IndexArray getVertexValues(Index vIndex);
\n-
207
\n-
208 ConstValueTagArray getVertexValueTags(Index vIndex) const;
\n-
209 ValueTagArray getVertexValueTags(Index vIndex);
\n-
210
\n-
211 ConstCreaseEndPairArray getVertexValueCreaseEnds(Index vIndex) const;
\n-
212 CreaseEndPairArray getVertexValueCreaseEnds(Index vIndex);
\n-
213
\n-
214 ConstSiblingArray getVertexFaceSiblings(Index vIndex) const;
\n-
215 SiblingArray getVertexFaceSiblings(Index vIndex);
\n-
216
\n-
217 // Queries per value:
\n-
218 ValueTag getValueTag(Index valueIndex) const { return _vertValueTags[valueIndex]; }
\n-
219 bool valueTopologyMatches(Index valueIndex) const { return !getValueTag(valueIndex)._mismatch; }
\n-
220
\n-
221 CreaseEndPair getValueCreaseEndPair(Index valueIndex) const { return _vertValueCreaseEnds[valueIndex]; }
\n-
222
\n-
223 // Tag queries related to faces (use Level methods for those returning Level::VTag/ETag)
\n-
224 void getFaceValueTags(Index faceIndex, ValueTag valueTags[]) const;
\n-
225
\n-
226 ValueTag getFaceCompositeValueTag(Index faceIndex) const;
\n-
227
\n-
228 // Higher-level topological queries, i.e. values in a neighborhood:
\n-
229 void getEdgeFaceValues(Index eIndex, int fIncToEdge, Index valuesPerVert[2]) const;
\n-
230 void getVertexEdgeValues(Index vIndex, Index valuesPerEdge[]) const;
\n-
231 void getVertexCreaseEndValues(Index vIndex, Sibling sibling, Index endValues[2]) const;
\n-
232
\n-
233 // Initialization and allocation helpers:
\n-
234 void setOptions(Sdc::Options const& options);
\n-
235 void resizeVertexValues(int numVertexValues);
\n-
236 void resizeValues(int numValues);
\n-
237 void resizeComponents();
\n-
238
\n-
239 // Topological analysis methods -- tagging and face-value population:
\n-
240 void completeTopologyFromFaceValues(int regBoundaryValence);
\n-
241 void initializeFaceValuesFromFaceVertices();
\n-
242 void initializeFaceValuesFromVertexFaceSiblings();
\n-
243
\n-
244 struct ValueSpan;
\n-
245 void gatherValueSpans(Index vIndex, ValueSpan * vValueSpans) const;
\n-
246
\n-
247 // Debugging methods:
\n-
248 bool validate() const;
\n-
249 void print() const;
\n-
250 void buildFaceVertexSiblingsFromVertexFaceSiblings(std::vector<Sibling>& fvSiblings) const;
\n-
251
\n-
252private:
\n-
253 // Just as Refinements build Levels, FVarRefinements build FVarLevels...
\n-
254 friend class FVarRefinement;
\n-
255
\n-
256 Level const & _level;
\n-
257
\n-
258 // Linear interpolation options vary between channels:
\n-
259 Sdc::Options _options;
\n-
260
\n-
261 bool _isLinear;
\n-
262 bool _hasLinearBoundaries;
\n-
263 bool _hasDependentSharpness;
\n-
264 int _valueCount;
\n-
265
\n-
266 //
\n-
267 // Vectors recording face-varying topology including tags that help propagate
\n-
268 // data through the refinement hierarchy. Vectors are not sparse but most use
\n-
269 // 8-bit values relative to the local topology.
\n-
270 //
\n-
271 // The vector of face-values is actually redundant here, but is constructed as
\n-
272 // it is most convenient for clients. It represents almost half the memory of
\n-
273 // the topology (4 32-bit integers per face) and not surprisingly, populating
\n-
274 // it takes a considerable amount of the refinement time (1/3). We can reduce
\n-
275 // both if we are willing to compute these on demand for clients.
\n-
276 //
\n-
277 // Per-face (matches face-verts of corresponding level):
\n-
278 std::vector<Index> _faceVertValues;
\n-
279
\n-
280 // Per-edge:
\n-
281 std::vector<ETag> _edgeTags;
\n-
282
\n-
283 // Per-vertex:
\n-
284 std::vector<Sibling> _vertSiblingCounts;
\n-
285 std::vector<int> _vertSiblingOffsets;
\n-
286 std::vector<Sibling> _vertFaceSiblings;
\n-
287
\n-
288 // Per-value:
\n-
289 std::vector<Index> _vertValueIndices;
\n-
290 std::vector<ValueTag> _vertValueTags;
\n-
291 std::vector<CreaseEndPair> _vertValueCreaseEnds;
\n-
292};
\n-
293
\n-
294//
\n-
295// Access/modify the values associated with each face:
\n-
296//
\n-
297inline ConstIndexArray
\n-
298FVarLevel::getFaceValues(Index fIndex) const {
\n-
299
\n-
300 int vCount = _level.getNumFaceVertices(fIndex);
\n-
301 int vOffset = _level.getOffsetOfFaceVertices(fIndex);
\n-
302 return ConstIndexArray(&_faceVertValues[vOffset], vCount);
\n-
303}
\n-
304inline IndexArray
\n-
305FVarLevel::getFaceValues(Index fIndex) {
\n-
306
\n-
307 int vCount = _level.getNumFaceVertices(fIndex);
\n-
308 int vOffset = _level.getOffsetOfFaceVertices(fIndex);
\n-
309 return IndexArray(&_faceVertValues[vOffset], vCount);
\n-
310}
\n-
311
\n-
312inline FVarLevel::ConstSiblingArray
\n-
313FVarLevel::getVertexFaceSiblings(Index vIndex) const {
\n-
314
\n-
315 int vCount = _level.getNumVertexFaces(vIndex);
\n-
316 int vOffset = _level.getOffsetOfVertexFaces(vIndex);
\n-
317 return ConstSiblingArray(&_vertFaceSiblings[vOffset], vCount);
\n-
318}
\n-
319inline FVarLevel::SiblingArray
\n-
320FVarLevel::getVertexFaceSiblings(Index vIndex) {
\n-
321
\n-
322 int vCount = _level.getNumVertexFaces(vIndex);
\n-
323 int vOffset = _level.getOffsetOfVertexFaces(vIndex);
\n-
324 return SiblingArray(&_vertFaceSiblings[vOffset], vCount);
\n-
325}
\n-
326
\n-
327inline ConstIndexArray
\n-
328FVarLevel::getVertexValues(Index vIndex) const
\n-
329{
\n-
330 int vCount = getNumVertexValues(vIndex);
\n-
331 int vOffset = getVertexValueOffset(vIndex);
\n-
332 return ConstIndexArray(&_vertValueIndices[vOffset], vCount);
\n-
333}
\n-
334inline IndexArray
\n-
335FVarLevel::getVertexValues(Index vIndex)
\n-
336{
\n-
337 int vCount = getNumVertexValues(vIndex);
\n-
338 int vOffset = getVertexValueOffset(vIndex);
\n-
339 return IndexArray(&_vertValueIndices[vOffset], vCount);
\n-
340}
\n-
341
\n-
342inline FVarLevel::ConstValueTagArray
\n-
343FVarLevel::getVertexValueTags(Index vIndex) const
\n-
344{
\n-
345 int vCount = getNumVertexValues(vIndex);
\n-
346 int vOffset = getVertexValueOffset(vIndex);
\n-
347 return ConstValueTagArray(&_vertValueTags[vOffset], vCount);
\n-
348}
\n-
349inline FVarLevel::ValueTagArray
\n-
350FVarLevel::getVertexValueTags(Index vIndex)
\n-
351{
\n-
352 int vCount = getNumVertexValues(vIndex);
\n-
353 int vOffset = getVertexValueOffset(vIndex);
\n-
354 return ValueTagArray(&_vertValueTags[vOffset], vCount);
\n-
355}
\n-
356
\n-
357inline FVarLevel::ConstCreaseEndPairArray
\n-
358FVarLevel::getVertexValueCreaseEnds(Index vIndex) const
\n-
359{
\n-
360 int vCount = getNumVertexValues(vIndex);
\n-
361 int vOffset = getVertexValueOffset(vIndex);
\n-
362 return ConstCreaseEndPairArray(&_vertValueCreaseEnds[vOffset], vCount);
\n-
363}
\n-
364inline FVarLevel::CreaseEndPairArray
\n-
365FVarLevel::getVertexValueCreaseEnds(Index vIndex)
\n-
366{
\n-
367 int vCount = getNumVertexValues(vIndex);
\n-
368 int vOffset = getVertexValueOffset(vIndex);
\n-
369 return CreaseEndPairArray(&_vertValueCreaseEnds[vOffset], vCount);
\n-
370}
\n-
371
\n-
372inline Index
\n-
373FVarLevel::findVertexValueIndex(Index vertexIndex, Index valueIndex) const {
\n-
374
\n-
375 if (_level.getDepth() > 0) return valueIndex;
\n-
376
\n-
377 Index vvIndex = getVertexValueOffset(vertexIndex);
\n-
378 while (_vertValueIndices[vvIndex] != valueIndex) {
\n-
379 ++ vvIndex;
\n-
380 }
\n-
381 return vvIndex;
\n-
382}
\n-
383
\n-
384//
\n-
385// Methods related to tagging:
\n-
386//
\n-
387inline Level::ETag
\n-
388FVarLevel::ETag::combineWithLevelETag(Level::ETag levelTag) const
\n-
389{
\n-
390 if (this->_mismatch) {
\n-
391 levelTag._boundary = true;
\n-
392 levelTag._infSharp = true;
\n-
393 }
\n-
394 return levelTag;
\n-
395}
\n-
396inline Level::VTag
\n-
397FVarLevel::ValueTag::combineWithLevelVTag(Level::VTag levelTag) const
\n-
398{
\n-
399 if (this->_mismatch) {
\n-
400 //
\n-
401 // Semi-sharp FVar values are always tagged and treated as corners
\n-
402 // (at least three sharp edges (two boundary edges and one interior
\n-
403 // semi-sharp) and/or vertex is semi-sharp) until the sharpness has
\n-
404 // decayed, but they ultimately lie on the inf-sharp crease of the
\n-
405 // FVar boundary. Consider this when tagging inf-sharp features.
\n-
406 //
\n-
407 if (this->isCorner()) {
\n-
408 levelTag._rule = (Level::VTag::VTagSize) Sdc::Crease::RULE_CORNER;
\n-
409 } else {
\n-
410 levelTag._rule = (Level::VTag::VTagSize) Sdc::Crease::RULE_CREASE;
\n-
411 }
\n-
412 if (this->isCrease() || this->isSemiSharp()) {
\n-
413 levelTag._infSharp = false;
\n-
414 levelTag._infSharpCrease = true;
\n-
415 levelTag._corner = false;
\n-
416 } else {
\n-
417 levelTag._infSharp = true;
\n-
418 levelTag._infSharpCrease = false;
\n-
419 levelTag._corner = !this->_infIrregular && !this->_infSharpEdges;
\n-
420 }
\n-
421 levelTag._infSharpEdges = true;
\n-
422 levelTag._infIrregular = this->_infIrregular;
\n-
423
\n-
424 levelTag._boundary = true;
\n-
425 levelTag._xordinary = this->_xordinary;
\n-
426
\n-
427 levelTag._nonManifold |= this->_nonManifold;
\n-
428 }
\n-
429 return levelTag;
\n-
430}
\n-
431
\n-
432} // end namespace internal
\n-
433} // end namespace Vtr
\n-
434
\n-
435} // end namespace OPENSUBDIV_VERSION
\n-
436using namespace OPENSUBDIV_VERSION;
\n-
437} // end namespace OpenSubdiv
\n-
438
\n-
439#endif /* OPENSUBDIV3_VTR_FVAR_LEVEL_H */
\n-\n-
ConstArray< LocalIndex > ConstLocalIndexArray
Definition types.h:83
\n-
Array< LocalIndex > LocalIndexArray
Definition types.h:82
\n+
113} // end namespace OPENSUBDIV_VERSION
\n+
114using namespace OPENSUBDIV_VERSION;
\n+
115} // end namespace OpenSubdiv
\n+
116
\n+
117#endif /* OPENSUBDIV3_VTR_FVAR_REFINEMENT_H */
\n+\n \n-
ConstArray< Index > ConstIndexArray
Definition types.h:80
\n \n-\n-\n-\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-fvarLevel.h\n+fvarRefinement.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2014 DreamWorks Animation LLC.\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -23,484 +23,118 @@\n 17//\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n-24#ifndef OPENSUBDIV3_VTR_FVAR_LEVEL_H\n-25#define OPENSUBDIV3_VTR_FVAR_LEVEL_H\n+24#ifndef OPENSUBDIV3_VTR_FVAR_REFINEMENT_H\n+25#define OPENSUBDIV3_VTR_FVAR_REFINEMENT_H\n 26\n 27#include \"../version.h\"\n 28\n 29#include \"../sdc/types.h\"\n 30#include \"../sdc/crease.h\"\n-31#include \"../sdc/options.h\"\n-32#include \"../vtr/types.h\"\n-33#include \"../vtr/level.h\"\n+31#include \"../vtr/types.h\"\n+32#include \"../vtr/refinement.h\"\n+33#include \"../vtr/fvarLevel.h\"\n 34\n 35#include \n 36#include \n 37#include \n 38\n 39\n 40namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n 41namespace OPENSUBDIV_VERSION {\n 42\n 43namespace Vtr {\n 44namespace internal {\n 45\n 46//\n-47// FVarLevel:\n-48// A \"face-varying channel\" includes the topology for a set of face-varying\n-49// data, relative to the topology of the Level with which it is associated.\n-50//\n-51// Analogous to a set of vertices and face-vertices that define the topology\n-for\n-52// the geometry, a channel requires a set of \"values\" and \"face-values\". The\n-53// \"values\" are indices of entries in a set of face-varying data, just as\n-vertices\n-54// are indices into a set of vertex data. The face-values identify a value\n-for\n-55// each vertex of the face, and so define topology for the values that may be\n-56// unique to each channel.\n-57//\n-58// In addition to the value size and the vector of face-values (which matches\n-the\n-59// size of the geometry's face-vertices), tags are associated with each\n-component\n-60// to identify deviations of the face-varying topology from the vertex\n-topology.\n-61// And since there may be a one-to-many mapping between vertices and face-\n-varying\n-62// values, that mapping is also allocated.\n-63//\n-64// It turns out that the mapping used is able to completely encode the set of\n-65// face-values and is more amenable to refinement. Currently the face-values\n-66// take up almost half the memory of this representation, so if memory does\n-67// become a concern, we do not need to store them. The only reason we do so\n-now\n-68// is that the face-value interface for specifying base topology and\n-inspecting\n-69// subsequent levels is very familiar to that of face-vertices for clients.\n-So\n-70// having them available for such access is convenient.\n-71//\n-72// Regarding scope and access...\n-73// Unclear at this early state, but leaning towards nesting this class within\n-74// Level, given the intimate dependency between the two.\n-75// Everything is being declared public for now to facilitate access until\n-it's\n-76// clearer how this functionality will be provided.\n-77//\n-78class FVarLevel {\n-79public:\n-80 //\n-81 // Component tags -- trying to minimize the types needed here:\n-82 //\n-83 // Tag per Edge:\n-84 // - facilitates topological analysis around each vertex\n-85 // - required during refinement to spawn one or more edge-values\n-86 //\n-87 struct ETag {\n-88 ETag() { }\n-89\n-90 void clear() { std::memset(this, 0, sizeof(ETag)); }\n-91\n-92 typedef unsigned char ETagSize;\n-93\n-94 ETagSize _mismatch : 1; // local FVar topology does not match\n-95 ETagSize _disctsV0 : 1; // discontinuous at vertex 0\n-96 ETagSize _disctsV1 : 1; // discontinuous at vertex 1\n-97 ETagSize _linear : 1; // linear boundary constraints\n+47// FVarRefinement:\n+48// A face-varying refinement contains data to support the refinement of a\n+49// particular face-varying \"channel\". Just as Refinement maintains a mapping\n+50// between the components of a parent Level and its child, the face-varying\n+51// analog maintains a mapping between the face-varying values of a parent\n+52// FVarLevel and its child.\n+53//\n+54// It turns out there is little data necessary here, so the class consists\n+55// mainly of methods that populate the child FVarLevel. The mapping data in\n+56// the refinement between Levels serves most purposes and all that is\n+required\n+57// in addition is a mapping from values in the child FVarLevel to the parent.\n+58//\n+59class FVarRefinement {\n+60public:\n+61 FVarRefinement(Refinement const& refinement, FVarLevel& parent, FVarLevel&\n+child);\n+62 ~FVarRefinement();\n+63\n+64 int getChildValueParentSource(_\bI_\bn_\bd_\be_\bx vIndex, int sibling) const {\n+65 return _childValueParentSource[_childFVar.getVertexValueOffset(vIndex,\n+(_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx)sibling)];\n+66 }\n+67\n+68 float getFractionalWeight(_\bI_\bn_\bd_\be_\bx pVert, _\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx pSibling,\n+69 _\bI_\bn_\bd_\be_\bx cVert, _\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx cSibling) const;\n+70\n+71\n+72 // Modifiers supporting application of the refinement:\n+73 void applyRefinement();\n+74\n+75 void estimateAndAllocateChildValues();\n+76 void populateChildValues();\n+77 void populateChildValuesFromFaceVertices();\n+78 void populateChildValuesFromEdgeVertices();\n+79 int populateChildValuesForEdgeVertex(_\bI_\bn_\bd_\be_\bx cVert, _\bI_\bn_\bd_\be_\bx pEdge);\n+80 void populateChildValuesFromVertexVertices();\n+81 int populateChildValuesForVertexVertex(_\bI_\bn_\bd_\be_\bx cVert, _\bI_\bn_\bd_\be_\bx pVert);\n+82 void trimAndFinalizeChildValues();\n+83\n+84 void propagateEdgeTags();\n+85 void propagateValueTags();\n+86 void propagateValueCreases();\n+87 void reclassifySemisharpValues();\n+88\n+89private:\n+90 //\n+91 // Identify the Refinement, its Levels and assigned FVarLevels for more\n+92 // immediate access -- child FVarLevel is non-const as it is to be assigned:\n+93 //\n+94 Refinement const & _refinement;\n+95\n+96 Level const & _parentLevel;\n+97 FVarLevel const & _parentFVar;\n 98\n-99 Level::ETag combineWithLevelETag(Level::ETag) const;\n-100 };\n+99 Level const & _childLevel;\n+100 FVarLevel & _childFVar;\n 101\n-102 //\n-103 // Tag per Value:\n-104 // - informs both refinement and interpolation\n-105 // - every value spawns a child value in refinement\n-106 // - includes a subset of Level::VTag to be later combined with a VTag\n-107 //\n-108 struct ValueTag {\n-109 ValueTag() { }\n-110\n-111 void clear() { std::memset(this, 0, sizeof(ValueTag)); }\n+102 // When refinement is sparse, we need a mapping between siblings of a\n+vertex\n+103 // value in the parent and child -- and for some child values, there will\n+not\n+104 // be a parent value, in which case the source of the parent component will\n+105 // be stored. So we refer to the parent \"source\" rather than \"sibling\":\n+106 //\n+107 std::vector _childValueParentSource;\n+108};\n+109\n+110} // end namespace internal\n+111} // end namespace Vtr\n 112\n-113 bool isMismatch() const { return _mismatch; }\n-114 bool isCrease() const { return _crease; }\n-115 bool isCorner() const { return !_crease; }\n-116 bool isSemiSharp() const { return _semiSharp; }\n-117 bool isInfSharp() const { return !_semiSharp && !_crease; }\n-118 bool isDepSharp() const { return _depSharp; }\n-119 bool hasCreaseEnds() const { return _crease || _semiSharp; }\n-120\n-121 bool hasInfSharpEdges() const { return _infSharpEdges; }\n-122 bool hasInfIrregularity() const { return _infIrregular; }\n-123\n-124 typedef unsigned char ValueTagSize;\n-125\n-126 // If there is no mismatch, no other members should be inspected\n-127 ValueTagSize _mismatch : 1; // local FVar topology does not match\n-128 ValueTagSize _xordinary : 1; // local FVar topology is extra-ordinary\n-129 ValueTagSize _nonManifold : 1; // local FVar topology is non-manifold\n-130 ValueTagSize _crease : 1; // value is a crease, otherwise a corner\n-131 ValueTagSize _semiSharp : 1; // value is a corner decaying to crease\n-132 ValueTagSize _depSharp : 1; // value is a corner by dependency on another\n-133\n-134 ValueTagSize _infSharpEdges : 1; // value is a corner by inf-sharp features\n-135 ValueTagSize _infIrregular : 1; // value span includes inf-sharp\n-irregularity\n-136\n-137 Level::VTag combineWithLevelVTag(Level::VTag) const;\n-138\n-139 // Alternate constructor and accessor for dealing with integer bits\n-directly:\n-140 explicit ValueTag(ValueTagSize bits) {\n-141 std::memcpy(this, &bits, sizeof(bits));\n-142 }\n-143 ValueTagSize getBits() const {\n-144 ValueTagSize bits;\n-145 std::memcpy(&bits, this, sizeof(bits));\n-146 return bits;\n-147 }\n-148 };\n-149\n-150 typedef Vtr::ConstArray ConstValueTagArray;\n-151 typedef Vtr::Array ValueTagArray;\n-152\n-153 //\n-154 // Simple struct containing the \"end faces\" of a crease, i.e. the faces\n-which\n-155 // contain the FVar values to be used when interpolating the crease.\n-(Prefer\n-156 // the struct over std::pair for its member names)\n-157 //\n-158 struct CreaseEndPair {\n-159 _\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx _startFace;\n-160 _\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx _endFace;\n-161 };\n-162\n-163 typedef Vtr::ConstArray ConstCreaseEndPairArray;\n-164 typedef Vtr::Array CreaseEndPairArray;\n-165\n-166 typedef _\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx Sibling;\n-167\n-168 typedef _\bC_\bo_\bn_\bs_\bt_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by ConstSiblingArray;\n-169 typedef _\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by SiblingArray;\n-170\n-171public:\n-172 FVarLevel(Level const& level);\n-173 ~FVarLevel();\n-174\n-175 // Queries for the entire channel:\n-176 Level const& getLevel() const { return _level; }\n-177\n-178 int getNumValues() const { return _valueCount; }\n-179 int getNumFaceValuesTotal() const { return (int) _faceVertValues.size(); }\n-180\n-181 bool isLinear() const { return _isLinear; }\n-182 bool hasLinearBoundaries() const { return _hasLinearBoundaries; }\n-183 bool hasSmoothBoundaries() const { return ! _hasLinearBoundaries; }\n-184 bool hasCreaseEnds() const { return hasSmoothBoundaries(); }\n-185\n-186 Sdc::Options getOptions() const { return _options; }\n-187\n-188 // Queries per face:\n-189 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by getFaceValues(_\bI_\bn_\bd_\be_\bx fIndex) const;\n-190 _\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by getFaceValues(_\bI_\bn_\bd_\be_\bx fIndex);\n-191\n-192 // Queries per edge:\n-193 ETag getEdgeTag(_\bI_\bn_\bd_\be_\bx eIndex) const { return _edgeTags[eIndex]; }\n-194 bool edgeTopologyMatches(_\bI_\bn_\bd_\be_\bx eIndex) const { return !getEdgeTag\n-(eIndex)._mismatch; }\n-195\n-196 // Queries per vertex (and its potential sibling values):\n-197 int getNumVertexValues(_\bI_\bn_\bd_\be_\bx v) const { return _vertSiblingCounts[v]; }\n-198 _\bI_\bn_\bd_\be_\bx getVertexValueOffset(_\bI_\bn_\bd_\be_\bx v, Sibling i = 0) const { return\n-_vertSiblingOffsets[v] + i; }\n-199\n-200 _\bI_\bn_\bd_\be_\bx getVertexValue(_\bI_\bn_\bd_\be_\bx v, Sibling i = 0) const { return\n-_vertValueIndices[getVertexValueOffset(v,i)]; }\n-201\n-202 _\bI_\bn_\bd_\be_\bx findVertexValueIndex(_\bI_\bn_\bd_\be_\bx vertexIndex, _\bI_\bn_\bd_\be_\bx valueIndex) const;\n-203\n-204 // Methods to access/modify array properties per vertex:\n-205 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by getVertexValues(_\bI_\bn_\bd_\be_\bx vIndex) const;\n-206 _\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by getVertexValues(_\bI_\bn_\bd_\be_\bx vIndex);\n-207\n-208 ConstValueTagArray getVertexValueTags(_\bI_\bn_\bd_\be_\bx vIndex) const;\n-209 ValueTagArray getVertexValueTags(_\bI_\bn_\bd_\be_\bx vIndex);\n-210\n-211 ConstCreaseEndPairArray getVertexValueCreaseEnds(_\bI_\bn_\bd_\be_\bx vIndex) const;\n-212 CreaseEndPairArray getVertexValueCreaseEnds(_\bI_\bn_\bd_\be_\bx vIndex);\n-213\n-214 ConstSiblingArray getVertexFaceSiblings(_\bI_\bn_\bd_\be_\bx vIndex) const;\n-215 SiblingArray getVertexFaceSiblings(_\bI_\bn_\bd_\be_\bx vIndex);\n-216\n-217 // Queries per value:\n-218 ValueTag getValueTag(_\bI_\bn_\bd_\be_\bx valueIndex) const { return _vertValueTags\n-[valueIndex]; }\n-219 bool valueTopologyMatches(_\bI_\bn_\bd_\be_\bx valueIndex) const { return !getValueTag\n-(valueIndex)._mismatch; }\n-220\n-221 CreaseEndPair getValueCreaseEndPair(_\bI_\bn_\bd_\be_\bx valueIndex) const { return\n-_vertValueCreaseEnds[valueIndex]; }\n-222\n-223 // Tag queries related to faces (use Level methods for those returning\n-Level::VTag/ETag)\n-224 void getFaceValueTags(_\bI_\bn_\bd_\be_\bx faceIndex, ValueTag valueTags[]) const;\n-225\n-226 ValueTag getFaceCompositeValueTag(_\bI_\bn_\bd_\be_\bx faceIndex) const;\n-227\n-228 // Higher-level topological queries, i.e. values in a neighborhood:\n-229 void getEdgeFaceValues(_\bI_\bn_\bd_\be_\bx eIndex, int fIncToEdge, _\bI_\bn_\bd_\be_\bx valuesPerVert\n-[2]) const;\n-230 void getVertexEdgeValues(_\bI_\bn_\bd_\be_\bx vIndex, _\bI_\bn_\bd_\be_\bx valuesPerEdge[]) const;\n-231 void getVertexCreaseEndValues(_\bI_\bn_\bd_\be_\bx vIndex, Sibling sibling, _\bI_\bn_\bd_\be_\bx\n-endValues[2]) const;\n-232\n-233 // Initialization and allocation helpers:\n-234 void setOptions(Sdc::Options const& options);\n-235 void resizeVertexValues(int numVertexValues);\n-236 void resizeValues(int numValues);\n-237 void resizeComponents();\n-238\n-239 // Topological analysis methods -- tagging and face-value population:\n-240 void completeTopologyFromFaceValues(int regBoundaryValence);\n-241 void initializeFaceValuesFromFaceVertices();\n-242 void initializeFaceValuesFromVertexFaceSiblings();\n-243\n-244 struct ValueSpan;\n-245 void gatherValueSpans(_\bI_\bn_\bd_\be_\bx vIndex, ValueSpan * vValueSpans) const;\n-246\n-247 // Debugging methods:\n-248 bool validate() const;\n-249 void print() const;\n-250 void buildFaceVertexSiblingsFromVertexFaceSiblings(std::vector&\n-fvSiblings) const;\n-251\n-252private:\n-253 // Just as Refinements build Levels, FVarRefinements build FVarLevels...\n-254 friend class FVarRefinement;\n-255\n-256 Level const & _level;\n-257\n-258 // Linear interpolation options vary between channels:\n-259 Sdc::Options _options;\n-260\n-261 bool _isLinear;\n-262 bool _hasLinearBoundaries;\n-263 bool _hasDependentSharpness;\n-264 int _valueCount;\n-265\n-266 //\n-267 // Vectors recording face-varying topology including tags that help\n-propagate\n-268 // data through the refinement hierarchy. Vectors are not sparse but most\n-use\n-269 // 8-bit values relative to the local topology.\n-270 //\n-271 // The vector of face-values is actually redundant here, but is constructed\n-as\n-272 // it is most convenient for clients. It represents almost half the memory\n-of\n-273 // the topology (4 32-bit integers per face) and not surprisingly,\n-populating\n-274 // it takes a considerable amount of the refinement time (1/3). We can\n-reduce\n-275 // both if we are willing to compute these on demand for clients.\n-276 //\n-277 // Per-face (matches face-verts of corresponding level):\n-278 std::vector _faceVertValues;\n-279\n-280 // Per-edge:\n-281 std::vector _edgeTags;\n-282\n-283 // Per-vertex:\n-284 std::vector _vertSiblingCounts;\n-285 std::vector _vertSiblingOffsets;\n-286 std::vector _vertFaceSiblings;\n-287\n-288 // Per-value:\n-289 std::vector _vertValueIndices;\n-290 std::vector _vertValueTags;\n-291 std::vector _vertValueCreaseEnds;\n-292};\n-293\n-294//\n-295// Access/modify the values associated with each face:\n-296//\n-297inline _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by\n-298FVarLevel::getFaceValues(_\bI_\bn_\bd_\be_\bx fIndex) const {\n-299\n-300 int vCount = _level.getNumFaceVertices(fIndex);\n-301 int vOffset = _level.getOffsetOfFaceVertices(fIndex);\n-302 return _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by(&_faceVertValues[vOffset], vCount);\n-303}\n-304inline _\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by\n-305FVarLevel::getFaceValues(_\bI_\bn_\bd_\be_\bx fIndex) {\n-306\n-307 int vCount = _level.getNumFaceVertices(fIndex);\n-308 int vOffset = _level.getOffsetOfFaceVertices(fIndex);\n-309 return _\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by(&_faceVertValues[vOffset], vCount);\n-310}\n-311\n-312inline FVarLevel::ConstSiblingArray\n-313FVarLevel::getVertexFaceSiblings(_\bI_\bn_\bd_\be_\bx vIndex) const {\n-314\n-315 int vCount = _level.getNumVertexFaces(vIndex);\n-316 int vOffset = _level.getOffsetOfVertexFaces(vIndex);\n-317 return ConstSiblingArray(&_vertFaceSiblings[vOffset], vCount);\n-318}\n-319inline FVarLevel::SiblingArray\n-320FVarLevel::getVertexFaceSiblings(_\bI_\bn_\bd_\be_\bx vIndex) {\n-321\n-322 int vCount = _level.getNumVertexFaces(vIndex);\n-323 int vOffset = _level.getOffsetOfVertexFaces(vIndex);\n-324 return SiblingArray(&_vertFaceSiblings[vOffset], vCount);\n-325}\n-326\n-327inline _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by\n-328FVarLevel::getVertexValues(_\bI_\bn_\bd_\be_\bx vIndex) const\n-329{\n-330 int vCount = getNumVertexValues(vIndex);\n-331 int vOffset = getVertexValueOffset(vIndex);\n-332 return _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by(&_vertValueIndices[vOffset], vCount);\n-333}\n-334inline _\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by\n-335FVarLevel::getVertexValues(_\bI_\bn_\bd_\be_\bx vIndex)\n-336{\n-337 int vCount = getNumVertexValues(vIndex);\n-338 int vOffset = getVertexValueOffset(vIndex);\n-339 return _\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by(&_vertValueIndices[vOffset], vCount);\n-340}\n-341\n-342inline FVarLevel::ConstValueTagArray\n-343FVarLevel::getVertexValueTags(_\bI_\bn_\bd_\be_\bx vIndex) const\n-344{\n-345 int vCount = getNumVertexValues(vIndex);\n-346 int vOffset = getVertexValueOffset(vIndex);\n-347 return ConstValueTagArray(&_vertValueTags[vOffset], vCount);\n-348}\n-349inline FVarLevel::ValueTagArray\n-350FVarLevel::getVertexValueTags(_\bI_\bn_\bd_\be_\bx vIndex)\n-351{\n-352 int vCount = getNumVertexValues(vIndex);\n-353 int vOffset = getVertexValueOffset(vIndex);\n-354 return ValueTagArray(&_vertValueTags[vOffset], vCount);\n-355}\n-356\n-357inline FVarLevel::ConstCreaseEndPairArray\n-358FVarLevel::getVertexValueCreaseEnds(_\bI_\bn_\bd_\be_\bx vIndex) const\n-359{\n-360 int vCount = getNumVertexValues(vIndex);\n-361 int vOffset = getVertexValueOffset(vIndex);\n-362 return ConstCreaseEndPairArray(&_vertValueCreaseEnds[vOffset], vCount);\n-363}\n-364inline FVarLevel::CreaseEndPairArray\n-365FVarLevel::getVertexValueCreaseEnds(_\bI_\bn_\bd_\be_\bx vIndex)\n-366{\n-367 int vCount = getNumVertexValues(vIndex);\n-368 int vOffset = getVertexValueOffset(vIndex);\n-369 return CreaseEndPairArray(&_vertValueCreaseEnds[vOffset], vCount);\n-370}\n-371\n-372inline _\bI_\bn_\bd_\be_\bx\n-373FVarLevel::findVertexValueIndex(_\bI_\bn_\bd_\be_\bx vertexIndex, _\bI_\bn_\bd_\be_\bx valueIndex) const {\n-374\n-375 if (_level.getDepth() > 0) return valueIndex;\n-376\n-377 _\bI_\bn_\bd_\be_\bx vvIndex = getVertexValueOffset(vertexIndex);\n-378 while (_vertValueIndices[vvIndex] != valueIndex) {\n-379 ++ vvIndex;\n-380 }\n-381 return vvIndex;\n-382}\n-383\n-384//\n-385// Methods related to tagging:\n-386//\n-387inline Level::ETag\n-388FVarLevel::ETag::combineWithLevelETag(Level::ETag levelTag) const\n-389{\n-390 if (this->_mismatch) {\n-391 levelTag._boundary = true;\n-392 levelTag._infSharp = true;\n-393 }\n-394 return levelTag;\n-395}\n-396inline Level::VTag\n-397FVarLevel::ValueTag::combineWithLevelVTag(Level::VTag levelTag) const\n-398{\n-399 if (this->_mismatch) {\n-400 //\n-401 // Semi-sharp FVar values are always tagged and treated as corners\n-402 // (at least three sharp edges (two boundary edges and one interior\n-403 // semi-sharp) and/or vertex is semi-sharp) until the sharpness has\n-404 // decayed, but they ultimately lie on the inf-sharp crease of the\n-405 // FVar boundary. Consider this when tagging inf-sharp features.\n-406 //\n-407 if (this->isCorner()) {\n-408 levelTag._rule = (Level::VTag::VTagSize) _\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bO_\bR_\bN_\bE_\bR;\n-409 } else {\n-410 levelTag._rule = (Level::VTag::VTagSize) _\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bR_\bE_\bA_\bS_\bE;\n-411 }\n-412 if (this->isCrease() || this->isSemiSharp()) {\n-413 levelTag._infSharp = false;\n-414 levelTag._infSharpCrease = true;\n-415 levelTag._corner = false;\n-416 } else {\n-417 levelTag._infSharp = true;\n-418 levelTag._infSharpCrease = false;\n-419 levelTag._corner = !this->_infIrregular && !this->_infSharpEdges;\n-420 }\n-421 levelTag._infSharpEdges = true;\n-422 levelTag._infIrregular = this->_infIrregular;\n-423\n-424 levelTag._boundary = true;\n-425 levelTag._xordinary = this->_xordinary;\n-426\n-427 levelTag._nonManifold |= this->_nonManifold;\n-428 }\n-429 return levelTag;\n-430}\n-431\n-432} // end namespace internal\n-433} // end namespace Vtr\n-434\n-435} // end namespace OPENSUBDIV_VERSION\n-436using namespace OPENSUBDIV_VERSION;\n-437} // end namespace OpenSubdiv\n-438\n-439#endif /* OPENSUBDIV3_VTR_FVAR_LEVEL_H */\n+113} // end namespace OPENSUBDIV_VERSION\n+114using namespace OPENSUBDIV_VERSION;\n+115} // end namespace OpenSubdiv\n+116\n+117#endif /* OPENSUBDIV3_VTR_FVAR_REFINEMENT_H */\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by\n-ConstArray< LocalIndex > ConstLocalIndexArray\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b8_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by\n-Array< LocalIndex > LocalIndexArray\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b8_\b2\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bI_\bn_\bd_\be_\bx\n int Index\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b5_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by\n-ConstArray< Index > ConstIndexArray\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b8_\b0\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx\n unsigned short LocalIndex\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b6_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by\n-Array< Index > IndexArray\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b7_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bO_\bR_\bN_\bE_\bR\n-@ RULE_CORNER\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bR_\bE_\bA_\bS_\bE\n-@ RULE_CREASE\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b6\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bv_\bt_\br\n- * _\bf_\bv_\ba_\br_\bL_\be_\bv_\be_\bl_\b._\bh\n+ * _\bf_\bv_\ba_\br_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00761.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00761.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/vtr/fvarRefinement.h File Reference\n+OpenSubdiv: opensubdiv/vtr/fvarLevel.h File Reference\n \n \n \n \n \n \n \n@@ -89,23 +89,23 @@\n \n \n \n \n
\n \n-
fvarRefinement.h File Reference
\n+
fvarLevel.h File Reference
\n
\n
\n
#include "../version.h"
\n #include "../sdc/types.h"
\n-#include "../sdc/crease.h"
\n+#include "../sdc/crease.h"
\n+#include "../sdc/options.h"
\n #include "../vtr/types.h"
\n-#include "../vtr/refinement.h"
\n-#include "../vtr/fvarLevel.h"
\n+#include "../vtr/level.h"
\n #include <vector>
\n #include <cassert>
\n #include <cstring>
\n
\n

Go to the source code of this file.

\n \n \n

\n@@ -118,13 +118,13 @@\n

 
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,27 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-fvarRefinement.h File Reference\n+fvarLevel.h File Reference\n #include \"../version.h\"\n #include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n #include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bc_\br_\be_\ba_\bs_\be_\b._\bh\"\n+#include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\"\n #include \"_\b._\b._\b/_\bv_\bt_\br_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n-#include \"_\b._\b._\b/_\bv_\bt_\br_\b/_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bh\"\n-#include \"_\b._\b._\b/_\bv_\bt_\br_\b/_\bf_\bv_\ba_\br_\bL_\be_\bv_\be_\bl_\b._\bh\"\n+#include \"_\b._\b._\b/_\bv_\bt_\br_\b/_\bl_\be_\bv_\be_\bl_\b._\bh\"\n #include \n #include \n #include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bv_\bt_\br\n- * _\bf_\bv_\ba_\br_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bh\n+ * _\bf_\bv_\ba_\br_\bL_\be_\bv_\be_\bl_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00761_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00761_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/vtr/fvarRefinement.h Source File\n+OpenSubdiv: opensubdiv/vtr/fvarLevel.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
fvarRefinement.h
\n+
fvarLevel.h
\n
\n
\n Go to the documentation of this file.
1//
\n
2// Copyright 2014 DreamWorks Animation LLC.
\n
3//
\n
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
\n
5// with the following modification; you may not use this file except in
\n@@ -118,115 +118,443 @@\n
17//
\n
18// Unless required by applicable law or agreed to in writing, software
\n
19// distributed under the Apache License with the above modification is
\n
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
\n
21// KIND, either express or implied. See the Apache License for the specific
\n
22// language governing permissions and limitations under the Apache License.
\n
23//
\n-
24#ifndef OPENSUBDIV3_VTR_FVAR_REFINEMENT_H
\n-
25#define OPENSUBDIV3_VTR_FVAR_REFINEMENT_H
\n+
24#ifndef OPENSUBDIV3_VTR_FVAR_LEVEL_H
\n+
25#define OPENSUBDIV3_VTR_FVAR_LEVEL_H
\n
26
\n
27#include "../version.h"
\n
28
\n
29#include "../sdc/types.h"
\n
30#include "../sdc/crease.h"
\n-
31#include "../vtr/types.h"
\n-
32#include "../vtr/refinement.h"
\n-
33#include "../vtr/fvarLevel.h"
\n+
31#include "../sdc/options.h"
\n+
32#include "../vtr/types.h"
\n+
33#include "../vtr/level.h"
\n
34
\n
35#include <vector>
\n
36#include <cassert>
\n
37#include <cstring>
\n
38
\n
39
\n
40namespace OpenSubdiv {
\n
41namespace OPENSUBDIV_VERSION {
\n
42
\n
43namespace Vtr {
\n
44namespace internal {
\n
45
\n
46//
\n-
47// FVarRefinement:
\n-
48// A face-varying refinement contains data to support the refinement of a
\n-
49// particular face-varying "channel". Just as Refinement maintains a mapping
\n-
50// between the components of a parent Level and its child, the face-varying
\n-
51// analog maintains a mapping between the face-varying values of a parent
\n-
52// FVarLevel and its child.
\n-
53//
\n-
54// It turns out there is little data necessary here, so the class consists
\n-
55// mainly of methods that populate the child FVarLevel. The mapping data in
\n-
56// the refinement between Levels serves most purposes and all that is required
\n-
57// in addition is a mapping from values in the child FVarLevel to the parent.
\n-
58//
\n-
59class FVarRefinement {
\n-
60public:
\n-
61 FVarRefinement(Refinement const& refinement, FVarLevel& parent, FVarLevel& child);
\n-
62 ~FVarRefinement();
\n-
63
\n-
64 int getChildValueParentSource(Index vIndex, int sibling) const {
\n-
65 return _childValueParentSource[_childFVar.getVertexValueOffset(vIndex, (LocalIndex)sibling)];
\n-
66 }
\n-
67
\n-
68 float getFractionalWeight(Index pVert, LocalIndex pSibling,
\n-
69 Index cVert, LocalIndex cSibling) const;
\n-
70
\n-
71
\n-
72 // Modifiers supporting application of the refinement:
\n-
73 void applyRefinement();
\n-
74
\n-
75 void estimateAndAllocateChildValues();
\n-
76 void populateChildValues();
\n-
77 void populateChildValuesFromFaceVertices();
\n-
78 void populateChildValuesFromEdgeVertices();
\n-
79 int populateChildValuesForEdgeVertex(Index cVert, Index pEdge);
\n-
80 void populateChildValuesFromVertexVertices();
\n-
81 int populateChildValuesForVertexVertex(Index cVert, Index pVert);
\n-
82 void trimAndFinalizeChildValues();
\n-
83
\n-
84 void propagateEdgeTags();
\n-
85 void propagateValueTags();
\n-
86 void propagateValueCreases();
\n-
87 void reclassifySemisharpValues();
\n-
88
\n-
89private:
\n-
90 //
\n-
91 // Identify the Refinement, its Levels and assigned FVarLevels for more
\n-
92 // immediate access -- child FVarLevel is non-const as it is to be assigned:
\n-
93 //
\n-
94 Refinement const & _refinement;
\n-
95
\n-
96 Level const & _parentLevel;
\n-
97 FVarLevel const & _parentFVar;
\n+
47// FVarLevel:
\n+
48// A "face-varying channel" includes the topology for a set of face-varying
\n+
49// data, relative to the topology of the Level with which it is associated.
\n+
50//
\n+
51// Analogous to a set of vertices and face-vertices that define the topology for
\n+
52// the geometry, a channel requires a set of "values" and "face-values". The
\n+
53// "values" are indices of entries in a set of face-varying data, just as vertices
\n+
54// are indices into a set of vertex data. The face-values identify a value for
\n+
55// each vertex of the face, and so define topology for the values that may be
\n+
56// unique to each channel.
\n+
57//
\n+
58// In addition to the value size and the vector of face-values (which matches the
\n+
59// size of the geometry's face-vertices), tags are associated with each component
\n+
60// to identify deviations of the face-varying topology from the vertex topology.
\n+
61// And since there may be a one-to-many mapping between vertices and face-varying
\n+
62// values, that mapping is also allocated.
\n+
63//
\n+
64// It turns out that the mapping used is able to completely encode the set of
\n+
65// face-values and is more amenable to refinement. Currently the face-values
\n+
66// take up almost half the memory of this representation, so if memory does
\n+
67// become a concern, we do not need to store them. The only reason we do so now
\n+
68// is that the face-value interface for specifying base topology and inspecting
\n+
69// subsequent levels is very familiar to that of face-vertices for clients. So
\n+
70// having them available for such access is convenient.
\n+
71//
\n+
72// Regarding scope and access...
\n+
73// Unclear at this early state, but leaning towards nesting this class within
\n+
74// Level, given the intimate dependency between the two.
\n+
75// Everything is being declared public for now to facilitate access until it's
\n+
76// clearer how this functionality will be provided.
\n+
77//
\n+
78class FVarLevel {
\n+
79public:
\n+
80 //
\n+
81 // Component tags -- trying to minimize the types needed here:
\n+
82 //
\n+
83 // Tag per Edge:
\n+
84 // - facilitates topological analysis around each vertex
\n+
85 // - required during refinement to spawn one or more edge-values
\n+
86 //
\n+
87 struct ETag {
\n+
88 ETag() { }
\n+
89
\n+
90 void clear() { std::memset(this, 0, sizeof(ETag)); }
\n+
91
\n+
92 typedef unsigned char ETagSize;
\n+
93
\n+
94 ETagSize _mismatch : 1; // local FVar topology does not match
\n+
95 ETagSize _disctsV0 : 1; // discontinuous at vertex 0
\n+
96 ETagSize _disctsV1 : 1; // discontinuous at vertex 1
\n+
97 ETagSize _linear : 1; // linear boundary constraints
\n
98
\n-
99 Level const & _childLevel;
\n-
100 FVarLevel & _childFVar;
\n+
99 Level::ETag combineWithLevelETag(Level::ETag) const;
\n+
100 };
\n
101
\n-
102 // When refinement is sparse, we need a mapping between siblings of a vertex
\n-
103 // value in the parent and child -- and for some child values, there will not
\n-
104 // be a parent value, in which case the source of the parent component will
\n-
105 // be stored. So we refer to the parent "source" rather than "sibling":
\n-
106 //
\n-
107 std::vector<LocalIndex> _childValueParentSource;
\n-
108};
\n-
109
\n-
110} // end namespace internal
\n-
111} // end namespace Vtr
\n+
102 //
\n+
103 // Tag per Value:
\n+
104 // - informs both refinement and interpolation
\n+
105 // - every value spawns a child value in refinement
\n+
106 // - includes a subset of Level::VTag to be later combined with a VTag
\n+
107 //
\n+
108 struct ValueTag {
\n+
109 ValueTag() { }
\n+
110
\n+
111 void clear() { std::memset(this, 0, sizeof(ValueTag)); }
\n
112
\n-
113} // end namespace OPENSUBDIV_VERSION
\n-
114using namespace OPENSUBDIV_VERSION;
\n-
115} // end namespace OpenSubdiv
\n-
116
\n-
117#endif /* OPENSUBDIV3_VTR_FVAR_REFINEMENT_H */
\n-\n+
113 bool isMismatch() const { return _mismatch; }
\n+
114 bool isCrease() const { return _crease; }
\n+
115 bool isCorner() const { return !_crease; }
\n+
116 bool isSemiSharp() const { return _semiSharp; }
\n+
117 bool isInfSharp() const { return !_semiSharp && !_crease; }
\n+
118 bool isDepSharp() const { return _depSharp; }
\n+
119 bool hasCreaseEnds() const { return _crease || _semiSharp; }
\n+
120
\n+
121 bool hasInfSharpEdges() const { return _infSharpEdges; }
\n+
122 bool hasInfIrregularity() const { return _infIrregular; }
\n+
123
\n+
124 typedef unsigned char ValueTagSize;
\n+
125
\n+
126 // If there is no mismatch, no other members should be inspected
\n+
127 ValueTagSize _mismatch : 1; // local FVar topology does not match
\n+
128 ValueTagSize _xordinary : 1; // local FVar topology is extra-ordinary
\n+
129 ValueTagSize _nonManifold : 1; // local FVar topology is non-manifold
\n+
130 ValueTagSize _crease : 1; // value is a crease, otherwise a corner
\n+
131 ValueTagSize _semiSharp : 1; // value is a corner decaying to crease
\n+
132 ValueTagSize _depSharp : 1; // value is a corner by dependency on another
\n+
133
\n+
134 ValueTagSize _infSharpEdges : 1; // value is a corner by inf-sharp features
\n+
135 ValueTagSize _infIrregular : 1; // value span includes inf-sharp irregularity
\n+
136
\n+
137 Level::VTag combineWithLevelVTag(Level::VTag) const;
\n+
138
\n+
139 // Alternate constructor and accessor for dealing with integer bits directly:
\n+
140 explicit ValueTag(ValueTagSize bits) {
\n+
141 std::memcpy(this, &bits, sizeof(bits));
\n+
142 }
\n+
143 ValueTagSize getBits() const {
\n+
144 ValueTagSize bits;
\n+
145 std::memcpy(&bits, this, sizeof(bits));
\n+
146 return bits;
\n+
147 }
\n+
148 };
\n+
149
\n+
150 typedef Vtr::ConstArray<ValueTag> ConstValueTagArray;
\n+
151 typedef Vtr::Array<ValueTag> ValueTagArray;
\n+
152
\n+
153 //
\n+
154 // Simple struct containing the "end faces" of a crease, i.e. the faces which
\n+
155 // contain the FVar values to be used when interpolating the crease. (Prefer
\n+
156 // the struct over std::pair for its member names)
\n+
157 //
\n+
158 struct CreaseEndPair {
\n+
159 LocalIndex _startFace;
\n+
160 LocalIndex _endFace;
\n+
161 };
\n+
162
\n+
163 typedef Vtr::ConstArray<CreaseEndPair> ConstCreaseEndPairArray;
\n+
164 typedef Vtr::Array<CreaseEndPair> CreaseEndPairArray;
\n+
165
\n+
166 typedef LocalIndex Sibling;
\n+
167
\n+
168 typedef ConstLocalIndexArray ConstSiblingArray;
\n+
169 typedef LocalIndexArray SiblingArray;
\n+
170
\n+
171public:
\n+
172 FVarLevel(Level const& level);
\n+
173 ~FVarLevel();
\n+
174
\n+
175 // Queries for the entire channel:
\n+
176 Level const& getLevel() const { return _level; }
\n+
177
\n+
178 int getNumValues() const { return _valueCount; }
\n+
179 int getNumFaceValuesTotal() const { return (int) _faceVertValues.size(); }
\n+
180
\n+
181 bool isLinear() const { return _isLinear; }
\n+
182 bool hasLinearBoundaries() const { return _hasLinearBoundaries; }
\n+
183 bool hasSmoothBoundaries() const { return ! _hasLinearBoundaries; }
\n+
184 bool hasCreaseEnds() const { return hasSmoothBoundaries(); }
\n+
185
\n+
186 Sdc::Options getOptions() const { return _options; }
\n+
187
\n+
188 // Queries per face:
\n+
189 ConstIndexArray getFaceValues(Index fIndex) const;
\n+
190 IndexArray getFaceValues(Index fIndex);
\n+
191
\n+
192 // Queries per edge:
\n+
193 ETag getEdgeTag(Index eIndex) const { return _edgeTags[eIndex]; }
\n+
194 bool edgeTopologyMatches(Index eIndex) const { return !getEdgeTag(eIndex)._mismatch; }
\n+
195
\n+
196 // Queries per vertex (and its potential sibling values):
\n+
197 int getNumVertexValues(Index v) const { return _vertSiblingCounts[v]; }
\n+
198 Index getVertexValueOffset(Index v, Sibling i = 0) const { return _vertSiblingOffsets[v] + i; }
\n+
199
\n+
200 Index getVertexValue(Index v, Sibling i = 0) const { return _vertValueIndices[getVertexValueOffset(v,i)]; }
\n+
201
\n+
202 Index findVertexValueIndex(Index vertexIndex, Index valueIndex) const;
\n+
203
\n+
204 // Methods to access/modify array properties per vertex:
\n+
205 ConstIndexArray getVertexValues(Index vIndex) const;
\n+
206 IndexArray getVertexValues(Index vIndex);
\n+
207
\n+
208 ConstValueTagArray getVertexValueTags(Index vIndex) const;
\n+
209 ValueTagArray getVertexValueTags(Index vIndex);
\n+
210
\n+
211 ConstCreaseEndPairArray getVertexValueCreaseEnds(Index vIndex) const;
\n+
212 CreaseEndPairArray getVertexValueCreaseEnds(Index vIndex);
\n+
213
\n+
214 ConstSiblingArray getVertexFaceSiblings(Index vIndex) const;
\n+
215 SiblingArray getVertexFaceSiblings(Index vIndex);
\n+
216
\n+
217 // Queries per value:
\n+
218 ValueTag getValueTag(Index valueIndex) const { return _vertValueTags[valueIndex]; }
\n+
219 bool valueTopologyMatches(Index valueIndex) const { return !getValueTag(valueIndex)._mismatch; }
\n+
220
\n+
221 CreaseEndPair getValueCreaseEndPair(Index valueIndex) const { return _vertValueCreaseEnds[valueIndex]; }
\n+
222
\n+
223 // Tag queries related to faces (use Level methods for those returning Level::VTag/ETag)
\n+
224 void getFaceValueTags(Index faceIndex, ValueTag valueTags[]) const;
\n+
225
\n+
226 ValueTag getFaceCompositeValueTag(Index faceIndex) const;
\n+
227
\n+
228 // Higher-level topological queries, i.e. values in a neighborhood:
\n+
229 void getEdgeFaceValues(Index eIndex, int fIncToEdge, Index valuesPerVert[2]) const;
\n+
230 void getVertexEdgeValues(Index vIndex, Index valuesPerEdge[]) const;
\n+
231 void getVertexCreaseEndValues(Index vIndex, Sibling sibling, Index endValues[2]) const;
\n+
232
\n+
233 // Initialization and allocation helpers:
\n+
234 void setOptions(Sdc::Options const& options);
\n+
235 void resizeVertexValues(int numVertexValues);
\n+
236 void resizeValues(int numValues);
\n+
237 void resizeComponents();
\n+
238
\n+
239 // Topological analysis methods -- tagging and face-value population:
\n+
240 void completeTopologyFromFaceValues(int regBoundaryValence);
\n+
241 void initializeFaceValuesFromFaceVertices();
\n+
242 void initializeFaceValuesFromVertexFaceSiblings();
\n+
243
\n+
244 struct ValueSpan;
\n+
245 void gatherValueSpans(Index vIndex, ValueSpan * vValueSpans) const;
\n+
246
\n+
247 // Debugging methods:
\n+
248 bool validate() const;
\n+
249 void print() const;
\n+
250 void buildFaceVertexSiblingsFromVertexFaceSiblings(std::vector<Sibling>& fvSiblings) const;
\n+
251
\n+
252private:
\n+
253 // Just as Refinements build Levels, FVarRefinements build FVarLevels...
\n+
254 friend class FVarRefinement;
\n+
255
\n+
256 Level const & _level;
\n+
257
\n+
258 // Linear interpolation options vary between channels:
\n+
259 Sdc::Options _options;
\n+
260
\n+
261 bool _isLinear;
\n+
262 bool _hasLinearBoundaries;
\n+
263 bool _hasDependentSharpness;
\n+
264 int _valueCount;
\n+
265
\n+
266 //
\n+
267 // Vectors recording face-varying topology including tags that help propagate
\n+
268 // data through the refinement hierarchy. Vectors are not sparse but most use
\n+
269 // 8-bit values relative to the local topology.
\n+
270 //
\n+
271 // The vector of face-values is actually redundant here, but is constructed as
\n+
272 // it is most convenient for clients. It represents almost half the memory of
\n+
273 // the topology (4 32-bit integers per face) and not surprisingly, populating
\n+
274 // it takes a considerable amount of the refinement time (1/3). We can reduce
\n+
275 // both if we are willing to compute these on demand for clients.
\n+
276 //
\n+
277 // Per-face (matches face-verts of corresponding level):
\n+
278 std::vector<Index> _faceVertValues;
\n+
279
\n+
280 // Per-edge:
\n+
281 std::vector<ETag> _edgeTags;
\n+
282
\n+
283 // Per-vertex:
\n+
284 std::vector<Sibling> _vertSiblingCounts;
\n+
285 std::vector<int> _vertSiblingOffsets;
\n+
286 std::vector<Sibling> _vertFaceSiblings;
\n+
287
\n+
288 // Per-value:
\n+
289 std::vector<Index> _vertValueIndices;
\n+
290 std::vector<ValueTag> _vertValueTags;
\n+
291 std::vector<CreaseEndPair> _vertValueCreaseEnds;
\n+
292};
\n+
293
\n+
294//
\n+
295// Access/modify the values associated with each face:
\n+
296//
\n+
297inline ConstIndexArray
\n+
298FVarLevel::getFaceValues(Index fIndex) const {
\n+
299
\n+
300 int vCount = _level.getNumFaceVertices(fIndex);
\n+
301 int vOffset = _level.getOffsetOfFaceVertices(fIndex);
\n+
302 return ConstIndexArray(&_faceVertValues[vOffset], vCount);
\n+
303}
\n+
304inline IndexArray
\n+
305FVarLevel::getFaceValues(Index fIndex) {
\n+
306
\n+
307 int vCount = _level.getNumFaceVertices(fIndex);
\n+
308 int vOffset = _level.getOffsetOfFaceVertices(fIndex);
\n+
309 return IndexArray(&_faceVertValues[vOffset], vCount);
\n+
310}
\n+
311
\n+
312inline FVarLevel::ConstSiblingArray
\n+
313FVarLevel::getVertexFaceSiblings(Index vIndex) const {
\n+
314
\n+
315 int vCount = _level.getNumVertexFaces(vIndex);
\n+
316 int vOffset = _level.getOffsetOfVertexFaces(vIndex);
\n+
317 return ConstSiblingArray(&_vertFaceSiblings[vOffset], vCount);
\n+
318}
\n+
319inline FVarLevel::SiblingArray
\n+
320FVarLevel::getVertexFaceSiblings(Index vIndex) {
\n+
321
\n+
322 int vCount = _level.getNumVertexFaces(vIndex);
\n+
323 int vOffset = _level.getOffsetOfVertexFaces(vIndex);
\n+
324 return SiblingArray(&_vertFaceSiblings[vOffset], vCount);
\n+
325}
\n+
326
\n+
327inline ConstIndexArray
\n+
328FVarLevel::getVertexValues(Index vIndex) const
\n+
329{
\n+
330 int vCount = getNumVertexValues(vIndex);
\n+
331 int vOffset = getVertexValueOffset(vIndex);
\n+
332 return ConstIndexArray(&_vertValueIndices[vOffset], vCount);
\n+
333}
\n+
334inline IndexArray
\n+
335FVarLevel::getVertexValues(Index vIndex)
\n+
336{
\n+
337 int vCount = getNumVertexValues(vIndex);
\n+
338 int vOffset = getVertexValueOffset(vIndex);
\n+
339 return IndexArray(&_vertValueIndices[vOffset], vCount);
\n+
340}
\n+
341
\n+
342inline FVarLevel::ConstValueTagArray
\n+
343FVarLevel::getVertexValueTags(Index vIndex) const
\n+
344{
\n+
345 int vCount = getNumVertexValues(vIndex);
\n+
346 int vOffset = getVertexValueOffset(vIndex);
\n+
347 return ConstValueTagArray(&_vertValueTags[vOffset], vCount);
\n+
348}
\n+
349inline FVarLevel::ValueTagArray
\n+
350FVarLevel::getVertexValueTags(Index vIndex)
\n+
351{
\n+
352 int vCount = getNumVertexValues(vIndex);
\n+
353 int vOffset = getVertexValueOffset(vIndex);
\n+
354 return ValueTagArray(&_vertValueTags[vOffset], vCount);
\n+
355}
\n+
356
\n+
357inline FVarLevel::ConstCreaseEndPairArray
\n+
358FVarLevel::getVertexValueCreaseEnds(Index vIndex) const
\n+
359{
\n+
360 int vCount = getNumVertexValues(vIndex);
\n+
361 int vOffset = getVertexValueOffset(vIndex);
\n+
362 return ConstCreaseEndPairArray(&_vertValueCreaseEnds[vOffset], vCount);
\n+
363}
\n+
364inline FVarLevel::CreaseEndPairArray
\n+
365FVarLevel::getVertexValueCreaseEnds(Index vIndex)
\n+
366{
\n+
367 int vCount = getNumVertexValues(vIndex);
\n+
368 int vOffset = getVertexValueOffset(vIndex);
\n+
369 return CreaseEndPairArray(&_vertValueCreaseEnds[vOffset], vCount);
\n+
370}
\n+
371
\n+
372inline Index
\n+
373FVarLevel::findVertexValueIndex(Index vertexIndex, Index valueIndex) const {
\n+
374
\n+
375 if (_level.getDepth() > 0) return valueIndex;
\n+
376
\n+
377 Index vvIndex = getVertexValueOffset(vertexIndex);
\n+
378 while (_vertValueIndices[vvIndex] != valueIndex) {
\n+
379 ++ vvIndex;
\n+
380 }
\n+
381 return vvIndex;
\n+
382}
\n+
383
\n+
384//
\n+
385// Methods related to tagging:
\n+
386//
\n+
387inline Level::ETag
\n+
388FVarLevel::ETag::combineWithLevelETag(Level::ETag levelTag) const
\n+
389{
\n+
390 if (this->_mismatch) {
\n+
391 levelTag._boundary = true;
\n+
392 levelTag._infSharp = true;
\n+
393 }
\n+
394 return levelTag;
\n+
395}
\n+
396inline Level::VTag
\n+
397FVarLevel::ValueTag::combineWithLevelVTag(Level::VTag levelTag) const
\n+
398{
\n+
399 if (this->_mismatch) {
\n+
400 //
\n+
401 // Semi-sharp FVar values are always tagged and treated as corners
\n+
402 // (at least three sharp edges (two boundary edges and one interior
\n+
403 // semi-sharp) and/or vertex is semi-sharp) until the sharpness has
\n+
404 // decayed, but they ultimately lie on the inf-sharp crease of the
\n+
405 // FVar boundary. Consider this when tagging inf-sharp features.
\n+
406 //
\n+
407 if (this->isCorner()) {
\n+
408 levelTag._rule = (Level::VTag::VTagSize) Sdc::Crease::RULE_CORNER;
\n+
409 } else {
\n+
410 levelTag._rule = (Level::VTag::VTagSize) Sdc::Crease::RULE_CREASE;
\n+
411 }
\n+
412 if (this->isCrease() || this->isSemiSharp()) {
\n+
413 levelTag._infSharp = false;
\n+
414 levelTag._infSharpCrease = true;
\n+
415 levelTag._corner = false;
\n+
416 } else {
\n+
417 levelTag._infSharp = true;
\n+
418 levelTag._infSharpCrease = false;
\n+
419 levelTag._corner = !this->_infIrregular && !this->_infSharpEdges;
\n+
420 }
\n+
421 levelTag._infSharpEdges = true;
\n+
422 levelTag._infIrregular = this->_infIrregular;
\n+
423
\n+
424 levelTag._boundary = true;
\n+
425 levelTag._xordinary = this->_xordinary;
\n+
426
\n+
427 levelTag._nonManifold |= this->_nonManifold;
\n+
428 }
\n+
429 return levelTag;
\n+
430}
\n+
431
\n+
432} // end namespace internal
\n+
433} // end namespace Vtr
\n+
434
\n+
435} // end namespace OPENSUBDIV_VERSION
\n+
436using namespace OPENSUBDIV_VERSION;
\n+
437} // end namespace OpenSubdiv
\n+
438
\n+
439#endif /* OPENSUBDIV3_VTR_FVAR_LEVEL_H */
\n+\n+
ConstArray< LocalIndex > ConstLocalIndexArray
Definition types.h:83
\n+
Array< LocalIndex > LocalIndexArray
Definition types.h:82
\n \n+
ConstArray< Index > ConstIndexArray
Definition types.h:80
\n \n+\n+\n+\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-fvarRefinement.h\n+fvarLevel.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2014 DreamWorks Animation LLC.\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -23,118 +23,484 @@\n 17//\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n-24#ifndef OPENSUBDIV3_VTR_FVAR_REFINEMENT_H\n-25#define OPENSUBDIV3_VTR_FVAR_REFINEMENT_H\n+24#ifndef OPENSUBDIV3_VTR_FVAR_LEVEL_H\n+25#define OPENSUBDIV3_VTR_FVAR_LEVEL_H\n 26\n 27#include \"../version.h\"\n 28\n 29#include \"../sdc/types.h\"\n 30#include \"../sdc/crease.h\"\n-31#include \"../vtr/types.h\"\n-32#include \"../vtr/refinement.h\"\n-33#include \"../vtr/fvarLevel.h\"\n+31#include \"../sdc/options.h\"\n+32#include \"../vtr/types.h\"\n+33#include \"../vtr/level.h\"\n 34\n 35#include \n 36#include \n 37#include \n 38\n 39\n 40namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n 41namespace OPENSUBDIV_VERSION {\n 42\n 43namespace Vtr {\n 44namespace internal {\n 45\n 46//\n-47// FVarRefinement:\n-48// A face-varying refinement contains data to support the refinement of a\n-49// particular face-varying \"channel\". Just as Refinement maintains a mapping\n-50// between the components of a parent Level and its child, the face-varying\n-51// analog maintains a mapping between the face-varying values of a parent\n-52// FVarLevel and its child.\n-53//\n-54// It turns out there is little data necessary here, so the class consists\n-55// mainly of methods that populate the child FVarLevel. The mapping data in\n-56// the refinement between Levels serves most purposes and all that is\n-required\n-57// in addition is a mapping from values in the child FVarLevel to the parent.\n-58//\n-59class FVarRefinement {\n-60public:\n-61 FVarRefinement(Refinement const& refinement, FVarLevel& parent, FVarLevel&\n-child);\n-62 ~FVarRefinement();\n-63\n-64 int getChildValueParentSource(_\bI_\bn_\bd_\be_\bx vIndex, int sibling) const {\n-65 return _childValueParentSource[_childFVar.getVertexValueOffset(vIndex,\n-(_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx)sibling)];\n-66 }\n-67\n-68 float getFractionalWeight(_\bI_\bn_\bd_\be_\bx pVert, _\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx pSibling,\n-69 _\bI_\bn_\bd_\be_\bx cVert, _\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx cSibling) const;\n-70\n-71\n-72 // Modifiers supporting application of the refinement:\n-73 void applyRefinement();\n-74\n-75 void estimateAndAllocateChildValues();\n-76 void populateChildValues();\n-77 void populateChildValuesFromFaceVertices();\n-78 void populateChildValuesFromEdgeVertices();\n-79 int populateChildValuesForEdgeVertex(_\bI_\bn_\bd_\be_\bx cVert, _\bI_\bn_\bd_\be_\bx pEdge);\n-80 void populateChildValuesFromVertexVertices();\n-81 int populateChildValuesForVertexVertex(_\bI_\bn_\bd_\be_\bx cVert, _\bI_\bn_\bd_\be_\bx pVert);\n-82 void trimAndFinalizeChildValues();\n-83\n-84 void propagateEdgeTags();\n-85 void propagateValueTags();\n-86 void propagateValueCreases();\n-87 void reclassifySemisharpValues();\n-88\n-89private:\n-90 //\n-91 // Identify the Refinement, its Levels and assigned FVarLevels for more\n-92 // immediate access -- child FVarLevel is non-const as it is to be assigned:\n-93 //\n-94 Refinement const & _refinement;\n-95\n-96 Level const & _parentLevel;\n-97 FVarLevel const & _parentFVar;\n+47// FVarLevel:\n+48// A \"face-varying channel\" includes the topology for a set of face-varying\n+49// data, relative to the topology of the Level with which it is associated.\n+50//\n+51// Analogous to a set of vertices and face-vertices that define the topology\n+for\n+52// the geometry, a channel requires a set of \"values\" and \"face-values\". The\n+53// \"values\" are indices of entries in a set of face-varying data, just as\n+vertices\n+54// are indices into a set of vertex data. The face-values identify a value\n+for\n+55// each vertex of the face, and so define topology for the values that may be\n+56// unique to each channel.\n+57//\n+58// In addition to the value size and the vector of face-values (which matches\n+the\n+59// size of the geometry's face-vertices), tags are associated with each\n+component\n+60// to identify deviations of the face-varying topology from the vertex\n+topology.\n+61// And since there may be a one-to-many mapping between vertices and face-\n+varying\n+62// values, that mapping is also allocated.\n+63//\n+64// It turns out that the mapping used is able to completely encode the set of\n+65// face-values and is more amenable to refinement. Currently the face-values\n+66// take up almost half the memory of this representation, so if memory does\n+67// become a concern, we do not need to store them. The only reason we do so\n+now\n+68// is that the face-value interface for specifying base topology and\n+inspecting\n+69// subsequent levels is very familiar to that of face-vertices for clients.\n+So\n+70// having them available for such access is convenient.\n+71//\n+72// Regarding scope and access...\n+73// Unclear at this early state, but leaning towards nesting this class within\n+74// Level, given the intimate dependency between the two.\n+75// Everything is being declared public for now to facilitate access until\n+it's\n+76// clearer how this functionality will be provided.\n+77//\n+78class FVarLevel {\n+79public:\n+80 //\n+81 // Component tags -- trying to minimize the types needed here:\n+82 //\n+83 // Tag per Edge:\n+84 // - facilitates topological analysis around each vertex\n+85 // - required during refinement to spawn one or more edge-values\n+86 //\n+87 struct ETag {\n+88 ETag() { }\n+89\n+90 void clear() { std::memset(this, 0, sizeof(ETag)); }\n+91\n+92 typedef unsigned char ETagSize;\n+93\n+94 ETagSize _mismatch : 1; // local FVar topology does not match\n+95 ETagSize _disctsV0 : 1; // discontinuous at vertex 0\n+96 ETagSize _disctsV1 : 1; // discontinuous at vertex 1\n+97 ETagSize _linear : 1; // linear boundary constraints\n 98\n-99 Level const & _childLevel;\n-100 FVarLevel & _childFVar;\n+99 Level::ETag combineWithLevelETag(Level::ETag) const;\n+100 };\n 101\n-102 // When refinement is sparse, we need a mapping between siblings of a\n-vertex\n-103 // value in the parent and child -- and for some child values, there will\n-not\n-104 // be a parent value, in which case the source of the parent component will\n-105 // be stored. So we refer to the parent \"source\" rather than \"sibling\":\n-106 //\n-107 std::vector _childValueParentSource;\n-108};\n-109\n-110} // end namespace internal\n-111} // end namespace Vtr\n+102 //\n+103 // Tag per Value:\n+104 // - informs both refinement and interpolation\n+105 // - every value spawns a child value in refinement\n+106 // - includes a subset of Level::VTag to be later combined with a VTag\n+107 //\n+108 struct ValueTag {\n+109 ValueTag() { }\n+110\n+111 void clear() { std::memset(this, 0, sizeof(ValueTag)); }\n 112\n-113} // end namespace OPENSUBDIV_VERSION\n-114using namespace OPENSUBDIV_VERSION;\n-115} // end namespace OpenSubdiv\n-116\n-117#endif /* OPENSUBDIV3_VTR_FVAR_REFINEMENT_H */\n+113 bool isMismatch() const { return _mismatch; }\n+114 bool isCrease() const { return _crease; }\n+115 bool isCorner() const { return !_crease; }\n+116 bool isSemiSharp() const { return _semiSharp; }\n+117 bool isInfSharp() const { return !_semiSharp && !_crease; }\n+118 bool isDepSharp() const { return _depSharp; }\n+119 bool hasCreaseEnds() const { return _crease || _semiSharp; }\n+120\n+121 bool hasInfSharpEdges() const { return _infSharpEdges; }\n+122 bool hasInfIrregularity() const { return _infIrregular; }\n+123\n+124 typedef unsigned char ValueTagSize;\n+125\n+126 // If there is no mismatch, no other members should be inspected\n+127 ValueTagSize _mismatch : 1; // local FVar topology does not match\n+128 ValueTagSize _xordinary : 1; // local FVar topology is extra-ordinary\n+129 ValueTagSize _nonManifold : 1; // local FVar topology is non-manifold\n+130 ValueTagSize _crease : 1; // value is a crease, otherwise a corner\n+131 ValueTagSize _semiSharp : 1; // value is a corner decaying to crease\n+132 ValueTagSize _depSharp : 1; // value is a corner by dependency on another\n+133\n+134 ValueTagSize _infSharpEdges : 1; // value is a corner by inf-sharp features\n+135 ValueTagSize _infIrregular : 1; // value span includes inf-sharp\n+irregularity\n+136\n+137 Level::VTag combineWithLevelVTag(Level::VTag) const;\n+138\n+139 // Alternate constructor and accessor for dealing with integer bits\n+directly:\n+140 explicit ValueTag(ValueTagSize bits) {\n+141 std::memcpy(this, &bits, sizeof(bits));\n+142 }\n+143 ValueTagSize getBits() const {\n+144 ValueTagSize bits;\n+145 std::memcpy(&bits, this, sizeof(bits));\n+146 return bits;\n+147 }\n+148 };\n+149\n+150 typedef Vtr::ConstArray ConstValueTagArray;\n+151 typedef Vtr::Array ValueTagArray;\n+152\n+153 //\n+154 // Simple struct containing the \"end faces\" of a crease, i.e. the faces\n+which\n+155 // contain the FVar values to be used when interpolating the crease.\n+(Prefer\n+156 // the struct over std::pair for its member names)\n+157 //\n+158 struct CreaseEndPair {\n+159 _\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx _startFace;\n+160 _\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx _endFace;\n+161 };\n+162\n+163 typedef Vtr::ConstArray ConstCreaseEndPairArray;\n+164 typedef Vtr::Array CreaseEndPairArray;\n+165\n+166 typedef _\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx Sibling;\n+167\n+168 typedef _\bC_\bo_\bn_\bs_\bt_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by ConstSiblingArray;\n+169 typedef _\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by SiblingArray;\n+170\n+171public:\n+172 FVarLevel(Level const& level);\n+173 ~FVarLevel();\n+174\n+175 // Queries for the entire channel:\n+176 Level const& getLevel() const { return _level; }\n+177\n+178 int getNumValues() const { return _valueCount; }\n+179 int getNumFaceValuesTotal() const { return (int) _faceVertValues.size(); }\n+180\n+181 bool isLinear() const { return _isLinear; }\n+182 bool hasLinearBoundaries() const { return _hasLinearBoundaries; }\n+183 bool hasSmoothBoundaries() const { return ! _hasLinearBoundaries; }\n+184 bool hasCreaseEnds() const { return hasSmoothBoundaries(); }\n+185\n+186 Sdc::Options getOptions() const { return _options; }\n+187\n+188 // Queries per face:\n+189 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by getFaceValues(_\bI_\bn_\bd_\be_\bx fIndex) const;\n+190 _\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by getFaceValues(_\bI_\bn_\bd_\be_\bx fIndex);\n+191\n+192 // Queries per edge:\n+193 ETag getEdgeTag(_\bI_\bn_\bd_\be_\bx eIndex) const { return _edgeTags[eIndex]; }\n+194 bool edgeTopologyMatches(_\bI_\bn_\bd_\be_\bx eIndex) const { return !getEdgeTag\n+(eIndex)._mismatch; }\n+195\n+196 // Queries per vertex (and its potential sibling values):\n+197 int getNumVertexValues(_\bI_\bn_\bd_\be_\bx v) const { return _vertSiblingCounts[v]; }\n+198 _\bI_\bn_\bd_\be_\bx getVertexValueOffset(_\bI_\bn_\bd_\be_\bx v, Sibling i = 0) const { return\n+_vertSiblingOffsets[v] + i; }\n+199\n+200 _\bI_\bn_\bd_\be_\bx getVertexValue(_\bI_\bn_\bd_\be_\bx v, Sibling i = 0) const { return\n+_vertValueIndices[getVertexValueOffset(v,i)]; }\n+201\n+202 _\bI_\bn_\bd_\be_\bx findVertexValueIndex(_\bI_\bn_\bd_\be_\bx vertexIndex, _\bI_\bn_\bd_\be_\bx valueIndex) const;\n+203\n+204 // Methods to access/modify array properties per vertex:\n+205 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by getVertexValues(_\bI_\bn_\bd_\be_\bx vIndex) const;\n+206 _\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by getVertexValues(_\bI_\bn_\bd_\be_\bx vIndex);\n+207\n+208 ConstValueTagArray getVertexValueTags(_\bI_\bn_\bd_\be_\bx vIndex) const;\n+209 ValueTagArray getVertexValueTags(_\bI_\bn_\bd_\be_\bx vIndex);\n+210\n+211 ConstCreaseEndPairArray getVertexValueCreaseEnds(_\bI_\bn_\bd_\be_\bx vIndex) const;\n+212 CreaseEndPairArray getVertexValueCreaseEnds(_\bI_\bn_\bd_\be_\bx vIndex);\n+213\n+214 ConstSiblingArray getVertexFaceSiblings(_\bI_\bn_\bd_\be_\bx vIndex) const;\n+215 SiblingArray getVertexFaceSiblings(_\bI_\bn_\bd_\be_\bx vIndex);\n+216\n+217 // Queries per value:\n+218 ValueTag getValueTag(_\bI_\bn_\bd_\be_\bx valueIndex) const { return _vertValueTags\n+[valueIndex]; }\n+219 bool valueTopologyMatches(_\bI_\bn_\bd_\be_\bx valueIndex) const { return !getValueTag\n+(valueIndex)._mismatch; }\n+220\n+221 CreaseEndPair getValueCreaseEndPair(_\bI_\bn_\bd_\be_\bx valueIndex) const { return\n+_vertValueCreaseEnds[valueIndex]; }\n+222\n+223 // Tag queries related to faces (use Level methods for those returning\n+Level::VTag/ETag)\n+224 void getFaceValueTags(_\bI_\bn_\bd_\be_\bx faceIndex, ValueTag valueTags[]) const;\n+225\n+226 ValueTag getFaceCompositeValueTag(_\bI_\bn_\bd_\be_\bx faceIndex) const;\n+227\n+228 // Higher-level topological queries, i.e. values in a neighborhood:\n+229 void getEdgeFaceValues(_\bI_\bn_\bd_\be_\bx eIndex, int fIncToEdge, _\bI_\bn_\bd_\be_\bx valuesPerVert\n+[2]) const;\n+230 void getVertexEdgeValues(_\bI_\bn_\bd_\be_\bx vIndex, _\bI_\bn_\bd_\be_\bx valuesPerEdge[]) const;\n+231 void getVertexCreaseEndValues(_\bI_\bn_\bd_\be_\bx vIndex, Sibling sibling, _\bI_\bn_\bd_\be_\bx\n+endValues[2]) const;\n+232\n+233 // Initialization and allocation helpers:\n+234 void setOptions(Sdc::Options const& options);\n+235 void resizeVertexValues(int numVertexValues);\n+236 void resizeValues(int numValues);\n+237 void resizeComponents();\n+238\n+239 // Topological analysis methods -- tagging and face-value population:\n+240 void completeTopologyFromFaceValues(int regBoundaryValence);\n+241 void initializeFaceValuesFromFaceVertices();\n+242 void initializeFaceValuesFromVertexFaceSiblings();\n+243\n+244 struct ValueSpan;\n+245 void gatherValueSpans(_\bI_\bn_\bd_\be_\bx vIndex, ValueSpan * vValueSpans) const;\n+246\n+247 // Debugging methods:\n+248 bool validate() const;\n+249 void print() const;\n+250 void buildFaceVertexSiblingsFromVertexFaceSiblings(std::vector&\n+fvSiblings) const;\n+251\n+252private:\n+253 // Just as Refinements build Levels, FVarRefinements build FVarLevels...\n+254 friend class FVarRefinement;\n+255\n+256 Level const & _level;\n+257\n+258 // Linear interpolation options vary between channels:\n+259 Sdc::Options _options;\n+260\n+261 bool _isLinear;\n+262 bool _hasLinearBoundaries;\n+263 bool _hasDependentSharpness;\n+264 int _valueCount;\n+265\n+266 //\n+267 // Vectors recording face-varying topology including tags that help\n+propagate\n+268 // data through the refinement hierarchy. Vectors are not sparse but most\n+use\n+269 // 8-bit values relative to the local topology.\n+270 //\n+271 // The vector of face-values is actually redundant here, but is constructed\n+as\n+272 // it is most convenient for clients. It represents almost half the memory\n+of\n+273 // the topology (4 32-bit integers per face) and not surprisingly,\n+populating\n+274 // it takes a considerable amount of the refinement time (1/3). We can\n+reduce\n+275 // both if we are willing to compute these on demand for clients.\n+276 //\n+277 // Per-face (matches face-verts of corresponding level):\n+278 std::vector _faceVertValues;\n+279\n+280 // Per-edge:\n+281 std::vector _edgeTags;\n+282\n+283 // Per-vertex:\n+284 std::vector _vertSiblingCounts;\n+285 std::vector _vertSiblingOffsets;\n+286 std::vector _vertFaceSiblings;\n+287\n+288 // Per-value:\n+289 std::vector _vertValueIndices;\n+290 std::vector _vertValueTags;\n+291 std::vector _vertValueCreaseEnds;\n+292};\n+293\n+294//\n+295// Access/modify the values associated with each face:\n+296//\n+297inline _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by\n+298FVarLevel::getFaceValues(_\bI_\bn_\bd_\be_\bx fIndex) const {\n+299\n+300 int vCount = _level.getNumFaceVertices(fIndex);\n+301 int vOffset = _level.getOffsetOfFaceVertices(fIndex);\n+302 return _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by(&_faceVertValues[vOffset], vCount);\n+303}\n+304inline _\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by\n+305FVarLevel::getFaceValues(_\bI_\bn_\bd_\be_\bx fIndex) {\n+306\n+307 int vCount = _level.getNumFaceVertices(fIndex);\n+308 int vOffset = _level.getOffsetOfFaceVertices(fIndex);\n+309 return _\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by(&_faceVertValues[vOffset], vCount);\n+310}\n+311\n+312inline FVarLevel::ConstSiblingArray\n+313FVarLevel::getVertexFaceSiblings(_\bI_\bn_\bd_\be_\bx vIndex) const {\n+314\n+315 int vCount = _level.getNumVertexFaces(vIndex);\n+316 int vOffset = _level.getOffsetOfVertexFaces(vIndex);\n+317 return ConstSiblingArray(&_vertFaceSiblings[vOffset], vCount);\n+318}\n+319inline FVarLevel::SiblingArray\n+320FVarLevel::getVertexFaceSiblings(_\bI_\bn_\bd_\be_\bx vIndex) {\n+321\n+322 int vCount = _level.getNumVertexFaces(vIndex);\n+323 int vOffset = _level.getOffsetOfVertexFaces(vIndex);\n+324 return SiblingArray(&_vertFaceSiblings[vOffset], vCount);\n+325}\n+326\n+327inline _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by\n+328FVarLevel::getVertexValues(_\bI_\bn_\bd_\be_\bx vIndex) const\n+329{\n+330 int vCount = getNumVertexValues(vIndex);\n+331 int vOffset = getVertexValueOffset(vIndex);\n+332 return _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by(&_vertValueIndices[vOffset], vCount);\n+333}\n+334inline _\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by\n+335FVarLevel::getVertexValues(_\bI_\bn_\bd_\be_\bx vIndex)\n+336{\n+337 int vCount = getNumVertexValues(vIndex);\n+338 int vOffset = getVertexValueOffset(vIndex);\n+339 return _\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by(&_vertValueIndices[vOffset], vCount);\n+340}\n+341\n+342inline FVarLevel::ConstValueTagArray\n+343FVarLevel::getVertexValueTags(_\bI_\bn_\bd_\be_\bx vIndex) const\n+344{\n+345 int vCount = getNumVertexValues(vIndex);\n+346 int vOffset = getVertexValueOffset(vIndex);\n+347 return ConstValueTagArray(&_vertValueTags[vOffset], vCount);\n+348}\n+349inline FVarLevel::ValueTagArray\n+350FVarLevel::getVertexValueTags(_\bI_\bn_\bd_\be_\bx vIndex)\n+351{\n+352 int vCount = getNumVertexValues(vIndex);\n+353 int vOffset = getVertexValueOffset(vIndex);\n+354 return ValueTagArray(&_vertValueTags[vOffset], vCount);\n+355}\n+356\n+357inline FVarLevel::ConstCreaseEndPairArray\n+358FVarLevel::getVertexValueCreaseEnds(_\bI_\bn_\bd_\be_\bx vIndex) const\n+359{\n+360 int vCount = getNumVertexValues(vIndex);\n+361 int vOffset = getVertexValueOffset(vIndex);\n+362 return ConstCreaseEndPairArray(&_vertValueCreaseEnds[vOffset], vCount);\n+363}\n+364inline FVarLevel::CreaseEndPairArray\n+365FVarLevel::getVertexValueCreaseEnds(_\bI_\bn_\bd_\be_\bx vIndex)\n+366{\n+367 int vCount = getNumVertexValues(vIndex);\n+368 int vOffset = getVertexValueOffset(vIndex);\n+369 return CreaseEndPairArray(&_vertValueCreaseEnds[vOffset], vCount);\n+370}\n+371\n+372inline _\bI_\bn_\bd_\be_\bx\n+373FVarLevel::findVertexValueIndex(_\bI_\bn_\bd_\be_\bx vertexIndex, _\bI_\bn_\bd_\be_\bx valueIndex) const {\n+374\n+375 if (_level.getDepth() > 0) return valueIndex;\n+376\n+377 _\bI_\bn_\bd_\be_\bx vvIndex = getVertexValueOffset(vertexIndex);\n+378 while (_vertValueIndices[vvIndex] != valueIndex) {\n+379 ++ vvIndex;\n+380 }\n+381 return vvIndex;\n+382}\n+383\n+384//\n+385// Methods related to tagging:\n+386//\n+387inline Level::ETag\n+388FVarLevel::ETag::combineWithLevelETag(Level::ETag levelTag) const\n+389{\n+390 if (this->_mismatch) {\n+391 levelTag._boundary = true;\n+392 levelTag._infSharp = true;\n+393 }\n+394 return levelTag;\n+395}\n+396inline Level::VTag\n+397FVarLevel::ValueTag::combineWithLevelVTag(Level::VTag levelTag) const\n+398{\n+399 if (this->_mismatch) {\n+400 //\n+401 // Semi-sharp FVar values are always tagged and treated as corners\n+402 // (at least three sharp edges (two boundary edges and one interior\n+403 // semi-sharp) and/or vertex is semi-sharp) until the sharpness has\n+404 // decayed, but they ultimately lie on the inf-sharp crease of the\n+405 // FVar boundary. Consider this when tagging inf-sharp features.\n+406 //\n+407 if (this->isCorner()) {\n+408 levelTag._rule = (Level::VTag::VTagSize) _\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bO_\bR_\bN_\bE_\bR;\n+409 } else {\n+410 levelTag._rule = (Level::VTag::VTagSize) _\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bR_\bE_\bA_\bS_\bE;\n+411 }\n+412 if (this->isCrease() || this->isSemiSharp()) {\n+413 levelTag._infSharp = false;\n+414 levelTag._infSharpCrease = true;\n+415 levelTag._corner = false;\n+416 } else {\n+417 levelTag._infSharp = true;\n+418 levelTag._infSharpCrease = false;\n+419 levelTag._corner = !this->_infIrregular && !this->_infSharpEdges;\n+420 }\n+421 levelTag._infSharpEdges = true;\n+422 levelTag._infIrregular = this->_infIrregular;\n+423\n+424 levelTag._boundary = true;\n+425 levelTag._xordinary = this->_xordinary;\n+426\n+427 levelTag._nonManifold |= this->_nonManifold;\n+428 }\n+429 return levelTag;\n+430}\n+431\n+432} // end namespace internal\n+433} // end namespace Vtr\n+434\n+435} // end namespace OPENSUBDIV_VERSION\n+436using namespace OPENSUBDIV_VERSION;\n+437} // end namespace OpenSubdiv\n+438\n+439#endif /* OPENSUBDIV3_VTR_FVAR_LEVEL_H */\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by\n+ConstArray< LocalIndex > ConstLocalIndexArray\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b8_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by\n+Array< LocalIndex > LocalIndexArray\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b8_\b2\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bI_\bn_\bd_\be_\bx\n int Index\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b5_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by\n+ConstArray< Index > ConstIndexArray\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b8_\b0\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx\n unsigned short LocalIndex\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b6_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by\n+Array< Index > IndexArray\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b7_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bO_\bR_\bN_\bE_\bR\n+@ RULE_CORNER\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bR_\bE_\bA_\bS_\bE\n+@ RULE_CREASE\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b6\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bv_\bt_\br\n- * _\bf_\bv_\ba_\br_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bh\n+ * _\bf_\bv_\ba_\br_\bL_\be_\bv_\be_\bl_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00764.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00764.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/vtr/componentInterfaces.h File Reference\n+OpenSubdiv: opensubdiv/vtr/array.h File Reference\n \n \n \n \n \n \n \n@@ -88,40 +88,44 @@\n \n \n \n \n \n
\n \n-
componentInterfaces.h File Reference
\n+
array.h File Reference
\n
\n
\n
#include "../version.h"
\n-#include "../sdc/types.h"
\n-#include "../sdc/crease.h"
\n-#include "../vtr/types.h"
\n-#include "../vtr/stackBuffer.h"
\n-#include <vector>
\n+#include <cassert>
\n
\n

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+

\n+Classes

class  ConstArray< TYPE >
 
class  Array< TYPE >
 
\n \n \n \n \n \n \n \n

\n Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Vtr
 
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,24 +1,25 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-componentInterfaces.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+array.h File Reference\n #include \"../version.h\"\n-#include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n-#include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bc_\br_\be_\ba_\bs_\be_\b._\bh\"\n-#include \"_\b._\b._\b/_\bv_\bt_\br_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n-#include \"_\b._\b._\b/_\bv_\bt_\br_\b/_\bs_\bt_\ba_\bc_\bk_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\"\n-#include \n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b<_\b _\bT_\bY_\bP_\bE_\b _\b>\n+\u00a0\n+class \u00a0 _\bA_\br_\br_\ba_\by_\b<_\b _\bT_\bY_\bP_\bE_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bv_\bt_\br\n- * _\bc_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\bs_\b._\bh\n+ * _\ba_\br_\br_\ba_\by_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00764_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00764_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/vtr/componentInterfaces.h Source File\n+OpenSubdiv: opensubdiv/vtr/array.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
componentInterfaces.h
\n+
array.h
\n
\n
\n Go to the documentation of this file.
1//
\n
2// Copyright 2014 DreamWorks Animation LLC.
\n
3//
\n
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
\n
5// with the following modification; you may not use this file except in
\n@@ -118,155 +118,192 @@\n
17//
\n
18// Unless required by applicable law or agreed to in writing, software
\n
19// distributed under the Apache License with the above modification is
\n
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
\n
21// KIND, either express or implied. See the Apache License for the specific
\n
22// language governing permissions and limitations under the Apache License.
\n
23//
\n-
24#ifndef OPENSUBDIV3_VTR_COMPONENT_INTERFACES_H
\n-
25#define OPENSUBDIV3_VTR_COMPONENT_INTERFACES_H
\n+
24#ifndef OPENSUBDIV3_VTR_ARRAY_INTERFACE_H
\n+
25#define OPENSUBDIV3_VTR_ARRAY_INTERFACE_H
\n
26
\n
27#include "../version.h"
\n
28
\n-
29#include "../sdc/types.h"
\n-
30#include "../sdc/crease.h"
\n-
31#include "../vtr/types.h"
\n-
32#include "../vtr/stackBuffer.h"
\n+
29#include <cassert>
\n+
30
\n+
31namespace OpenSubdiv {
\n+
32namespace OPENSUBDIV_VERSION {
\n
33
\n-
34#include <vector>
\n+
34namespace Vtr {
\n
35
\n-
36
\n-
37namespace OpenSubdiv {
\n-
38namespace OPENSUBDIV_VERSION {
\n-
39
\n-
40namespace Vtr {
\n-
41namespace internal {
\n-
42
\n-
43//
\n-
44// Simple classes supporting the interfaces required of generic topological
\n-
45// types in the Scheme mask queries, e.g. <typename FACE, VERTEX, etc.>
\n+
36//
\n+
37// This class provides a simple array-like interface -- a subset std::vector's interface -- for
\n+
38// a sequence of elements stored in contiguous memory. It provides a unified representation for
\n+
39// referencing data on the stack, all or a subset of std::vector<>, or anywhere else in memory.
\n+
40//
\n+
41// Note that its members are head/size rather than begin/end as in std::vector -- we frequently
\n+
42// need only the size for many queries, and that is most often what is stored elsewhere in other
\n+
43// classes, so we hope to reduce unnecessary address arithmetic constructing the interface and
\n+
44// accessing the size. The size type is also specifically 32-bit (rather than size_t) to match
\n+
45// internal usage and avoid unnecessary conversion to/from 64-bit.
\n
46//
\n-
47// These are not used with Vtr but arguably belong with it as the details to
\n-
48// write these efficiently depends very much on intimate details of Vtr's
\n-
49// implementation, e.g. the use of tag bits, subdivision Rules, etc.
\n-
50//
\n-
51
\n-
52
\n-
53//
\n-
54// For <typename FACE>, which provides information in the neighborhood of a face:
\n-
55//
\n-
56class FaceInterface {
\n-
57public:
\n-
58 FaceInterface() { }
\n-
59 FaceInterface(int vertCount) : _vertCount(vertCount) { }
\n-
60 ~FaceInterface() { }
\n+
47// Question:
\n+
48// Naming is at issue here... formerly called ArrayInterface until that was shot down it has
\n+
49// been simplified to Array but needs to be distanced from std::array as it DOES NOT store its
\n+
50// own memory and is simply an interface to memory stored elsewhere.
\n+
51//
\n+
52template <typename TYPE>
\n+
\n+\n+
54
\n+
55public:
\n+
56 typedef TYPE value_type;
\n+
57 typedef int size_type;
\n+
58
\n+
59 typedef TYPE const& const_reference;
\n+
60 typedef TYPE const* const_iterator;
\n
61
\n-
62public: // Generic interface expected of <typename FACE>:
\n-
63 int GetNumVertices() const { return _vertCount; }
\n+
62 typedef TYPE& reference;
\n+
63 typedef TYPE* iterator;
\n
64
\n-
65private:
\n-
66 int _vertCount;
\n-
67};
\n+
65public:
\n+
66
\n+
67 ConstArray() : _begin(0), _size(0) { }
\n
68
\n-
69
\n-
70//
\n-
71// For <typename EDGE>, which provides information in the neighborhood of an edge:
\n-
72//
\n-
73class EdgeInterface {
\n-
74public:
\n-
75 EdgeInterface() { }
\n-
76 EdgeInterface(Level const& level) : _level(&level) { }
\n-
77 ~EdgeInterface() { }
\n-
78
\n-
79 void SetIndex(int edgeIndex) { _eIndex = edgeIndex; }
\n-
80
\n-
81public: // Generic interface expected of <typename EDGE>:
\n-
82 int GetNumFaces() const { return _level->getEdgeFaces(_eIndex).size(); }
\n-
83 float GetSharpness() const { return _level->getEdgeSharpness(_eIndex); }
\n-
84
\n-
85 void GetChildSharpnesses(Sdc::Crease const&, float s[2]) const {
\n-
86 // Need to use the Refinement here to identify the two child edges:
\n-
87 s[0] = s[1] = GetSharpness() - 1.0f;
\n+
\n+
69 ConstArray(value_type const * ptr, size_type sizeArg) :
\n+
70 _begin(ptr), _size(sizeArg) { }
\n+
\n+
71
\n+
72 size_type size() const { return _size; }
\n+
73
\n+
74 bool empty() const { return _size==0; }
\n+
75
\n+
76 const_reference operator[](int index) const { return _begin[index]; }
\n+
77 const_iterator begin() const { return _begin; }
\n+
78 const_iterator end() const { return _begin + _size; }
\n+
79
\n+
\n+\n+
81 assert(_size>=4);
\n+
82 if (value == _begin[0]) return 0;
\n+
83 if (value == _begin[1]) return 1;
\n+
84 if (value == _begin[2]) return 2;
\n+
85 if (value == _begin[3]) return 3;
\n+
86 assert("FindIndexIn4Tuple() did not find expected value!" == 0);
\n+
87 return -1;
\n
88 }
\n+
\n
89
\n-
90 void GetNumVerticesPerFace(int vertsPerFace[]) const {
\n-
91 ConstIndexArray eFaces = _level->getEdgeFaces(_eIndex);
\n-
92 for (int i = 0; i < eFaces.size(); ++i) {
\n-
93 vertsPerFace[i] = _level->getFaceVertices(eFaces[i]).size();
\n-
94 }
\n-
95 }
\n-
96
\n-
97private:
\n-
98 const Level* _level;
\n-
99
\n-
100 int _eIndex;
\n-
101};
\n-
102
\n+
\n+\n+
91 for (size_type i=0; i<size(); ++i) {
\n+
92 if (value==_begin[i]) {
\n+
93 return i;
\n+
94 }
\n+
95 }
\n+
96 return -1;
\n+
97 }
\n+
\n+
98
\n+
99protected:
\n+\n+\n+
102};
\n+
\n
103
\n-
104//
\n-
105// For <typename VERTEX>, which provides information in the neighborhood of a vertex:
\n-
106//
\n-
107class VertexInterface {
\n-
108public:
\n-
109 VertexInterface() { }
\n-
110 VertexInterface(Level const& parent, Level const& child) : _parent(&parent), _child(&child) { }
\n-
111 ~VertexInterface() { }
\n+
104template <typename TYPE>
\n+
\n+
105class Array : public ConstArray<TYPE> {
\n+
106
\n+
107public:
\n+
108 typedef TYPE value_type;
\n+
109 typedef int size_type;
\n+
110
\n+
111 typedef TYPE const& const_reference;
\n
112
\n-
113 void SetIndex(int parentIndex, int childIndex) {
\n-
114 _pIndex = parentIndex;
\n-
115 _cIndex = childIndex;
\n-
116 _eCount = _parent->getVertexEdges(_pIndex).size();
\n-
117 _fCount = _parent->getVertexFaces(_pIndex).size();
\n-
118 }
\n-
119
\n-
120public: // Generic interface expected of <typename VERT>:
\n-
121 int GetNumEdges() const { return _eCount; }
\n-
122 int GetNumFaces() const { return _fCount; }
\n+
113 typedef TYPE& reference;
\n+
114 typedef TYPE* iterator;
\n+
115
\n+
116public:
\n+
117
\n+
118 Array() : ConstArray<TYPE>() { }
\n+
119
\n+
120 Array(value_type * ptr, size_type sizeArg) : ConstArray<TYPE>(ptr, sizeArg) { }
\n+
121
\n+
122public:
\n
123
\n-
124 float GetSharpness() const { return _parent->getVertexSharpness(_pIndex); }
\n-
125 float* GetSharpnessPerEdge(float pSharpness[]) const {
\n-
126 ConstIndexArray pEdges = _parent->getVertexEdges(_pIndex);
\n-
127 for (int i = 0; i < _eCount; ++i) {
\n-
128 pSharpness[i] = _parent->getEdgeSharpness(pEdges[i]);
\n-
129 }
\n-
130 return pSharpness;
\n-
131 }
\n-
132
\n-
133 float GetChildSharpness(Sdc::Crease const&) const { return _child->getVertexSharpness(_cIndex); }
\n-
134 float* GetChildSharpnessPerEdge(Sdc::Crease const& crease, float cSharpness[]) const {
\n-
135 internal::StackBuffer<float,16> pSharpness(_eCount);
\n-
136 GetSharpnessPerEdge(pSharpness);
\n-
137 crease.SubdivideEdgeSharpnessesAroundVertex(_eCount, pSharpness, cSharpness);
\n-
138 return cSharpness;
\n+
\n+
124 const_reference operator[](int index) const {
\n+
125 return ConstArray<TYPE>::_begin[index];
\n+
126 }
\n+
\n+
127
\n+
\n+\n+
129 return const_cast<reference>(ConstArray<TYPE>::_begin[index]);
\n+
130 }
\n+
\n+
131
\n+
\n+\n+
133 return const_cast<iterator>(ConstArray<TYPE>::_begin);
\n+
134 }
\n+
\n+
135
\n+
\n+\n+
137 return const_cast<iterator>(ConstArray<TYPE>::_begin +
\n+\n
139 }
\n-
140
\n-
141private:
\n-
142 const Level* _parent;
\n-
143 const Level* _child;
\n-
144
\n-
145 int _pIndex;
\n-
146 int _cIndex;
\n-
147 int _eCount;
\n-
148 int _fCount;
\n-
149};
\n-
150
\n-
151} // end namespace internal
\n-
152} // end namespace Vtr
\n-
153
\n-
154} // end namespace OPENSUBDIV_VERSION
\n-
155using namespace OPENSUBDIV_VERSION;
\n-
156} // end namespace OpenSubdiv
\n-
157
\n-
158#endif /* OPENSUBDIV3_VTR_COMPONENT_INTERFACES_H */
\n-\n-
ConstArray< Index > ConstIndexArray
Definition types.h:80
\n+
\n+
140};
\n+
\n+
141
\n+
142} // end namespace Vtr
\n+
143
\n+
144} // end namespace OPENSUBDIV_VERSION
\n+
145using namespace OPENSUBDIV_VERSION;
\n+
146} // end namespace OpenSubdiv
\n+
147
\n+
148#endif /* OPENSUBDIV3_VTR_ARRAY_INTERFACE_H */
\n+\n+\n+\n+\n+\n+
const_reference operator[](int index) const
Definition array.h:76
\n+\n+
size_type FindIndexIn4Tuple(value_type value) const
Definition array.h:80
\n+\n+\n+
ConstArray(value_type const *ptr, size_type sizeArg)
Definition array.h:69
\n+\n+\n+
size_type FindIndex(value_type value) const
Definition array.h:90
\n+\n+\n+\n+\n+\n+\n+\n+
const_reference operator[](int index) const
Definition array.h:124
\n+\n+\n+\n+\n+\n+
Array(value_type *ptr, size_type sizeArg)
Definition array.h:120
\n+\n+\n+\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-componentInterfaces.h\n+array.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2014 DreamWorks Animation LLC.\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -23,158 +23,236 @@\n 17//\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n-24#ifndef OPENSUBDIV3_VTR_COMPONENT_INTERFACES_H\n-25#define OPENSUBDIV3_VTR_COMPONENT_INTERFACES_H\n+24#ifndef OPENSUBDIV3_VTR_ARRAY_INTERFACE_H\n+25#define OPENSUBDIV3_VTR_ARRAY_INTERFACE_H\n 26\n 27#include \"../version.h\"\n 28\n-29#include \"../sdc/types.h\"\n-30#include \"../sdc/crease.h\"\n-31#include \"../vtr/types.h\"\n-32#include \"../vtr/stackBuffer.h\"\n+29#include \n+30\n+31namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+32namespace OPENSUBDIV_VERSION {\n 33\n-34#include \n+34namespace Vtr {\n 35\n-36\n-37namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-38namespace OPENSUBDIV_VERSION {\n-39\n-40namespace Vtr {\n-41namespace internal {\n-42\n-43//\n-44// Simple classes supporting the interfaces required of generic topological\n-45// types in the Scheme mask queries, e.g. \n+36//\n+37// This class provides a simple array-like interface -- a subset std::\n+vector's interface -- for\n+38// a sequence of elements stored in contiguous memory. It provides a unified\n+representation for\n+39// referencing data on the stack, all or a subset of std::vector<>, or\n+anywhere else in memory.\n+40//\n+41// Note that its members are head/size rather than begin/end as in std::\n+vector -- we frequently\n+42// need only the size for many queries, and that is most often what is stored\n+elsewhere in other\n+43// classes, so we hope to reduce unnecessary address arithmetic constructing\n+the interface and\n+44// accessing the size. The size type is also specifically 32-bit (rather than\n+size_t) to match\n+45// internal usage and avoid unnecessary conversion to/from 64-bit.\n 46//\n-47// These are not used with Vtr but arguably belong with it as the details to\n-48// write these efficiently depends very much on intimate details of Vtr's\n-49// implementation, e.g. the use of tag bits, subdivision Rules, etc.\n-50//\n-51\n-52\n-53//\n-54// For , which provides information in the neighborhood of a\n-face:\n-55//\n-56class FaceInterface {\n-57public:\n-58 FaceInterface() { }\n-59 FaceInterface(int vertCount) : _vertCount(vertCount) { }\n-60 ~FaceInterface() { }\n+47// Question:\n+48// Naming is at issue here... formerly called ArrayInterface until that was\n+shot down it has\n+49// been simplified to Array but needs to be distanced from std::array as it\n+DOES NOT store its\n+50// own memory and is simply an interface to memory stored elsewhere.\n+51//\n+52template \n+_\b5_\b3class _\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by {\n+54\n+55public:\n+_\b5_\b6 typedef TYPE _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be;\n+_\b5_\b7 typedef int _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n+58\n+_\b5_\b9 typedef TYPE const& _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n+_\b6_\b0 typedef TYPE const* _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n 61\n-62public: // Generic interface expected of :\n-63 int GetNumVertices() const { return _vertCount; }\n+_\b6_\b2 typedef TYPE& _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n+_\b6_\b3 typedef TYPE* _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n 64\n-65private:\n-66 int _vertCount;\n-67};\n+65public:\n+66\n+_\b6_\b7 _\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by() : _\b__\bb_\be_\bg_\bi_\bn(0), _\b__\bs_\bi_\bz_\be(0) { }\n 68\n-69\n-70//\n-71// For , which provides information in the neighborhood of an\n-edge:\n-72//\n-73class EdgeInterface {\n-74public:\n-75 EdgeInterface() { }\n-76 EdgeInterface(Level const& level) : _level(&level) { }\n-77 ~EdgeInterface() { }\n-78\n-79 void SetIndex(int edgeIndex) { _eIndex = edgeIndex; }\n-80\n-81public: // Generic interface expected of :\n-82 int GetNumFaces() const { return _level->getEdgeFaces(_eIndex).size(); }\n-83 float GetSharpness() const { return _level->getEdgeSharpness(_eIndex); }\n-84\n-85 void GetChildSharpnesses(Sdc::Crease const&, float s[2]) const {\n-86 // Need to use the Refinement here to identify the two child edges:\n-87 s[0] = s[1] = GetSharpness() - 1.0f;\n+_\b6_\b9 _\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by(_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be const * ptr, _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be sizeArg) :\n+70 _\b__\bb_\be_\bg_\bi_\bn(ptr), _\b__\bs_\bi_\bz_\be(sizeArg) { }\n+71\n+_\b7_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const { return _\b__\bs_\bi_\bz_\be; }\n+73\n+_\b7_\b4 bool _\be_\bm_\bp_\bt_\by() const { return _\b__\bs_\bi_\bz_\be==0; }\n+75\n+_\b7_\b6 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](int index) const { return _\b__\bb_\be_\bg_\bi_\bn[index]; }\n+_\b7_\b7 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() const { return _\b__\bb_\be_\bg_\bi_\bn; }\n+_\b7_\b8 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() const { return _\b__\bb_\be_\bg_\bi_\bn + _\b__\bs_\bi_\bz_\be; }\n+79\n+_\b8_\b0 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bF_\bi_\bn_\bd_\bI_\bn_\bd_\be_\bx_\bI_\bn_\b4_\bT_\bu_\bp_\bl_\be(_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be value) const {\n+81 assert(_\b__\bs_\bi_\bz_\be>=4);\n+82 if (value == _\b__\bb_\be_\bg_\bi_\bn[0]) return 0;\n+83 if (value == _\b__\bb_\be_\bg_\bi_\bn[1]) return 1;\n+84 if (value == _\b__\bb_\be_\bg_\bi_\bn[2]) return 2;\n+85 if (value == _\b__\bb_\be_\bg_\bi_\bn[3]) return 3;\n+86 assert(\"FindIndexIn4Tuple() did not find expected value!\" == 0);\n+87 return -1;\n 88 }\n 89\n-90 void GetNumVerticesPerFace(int vertsPerFace[]) const {\n-91 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by eFaces = _level->getEdgeFaces(_eIndex);\n-92 for (int i = 0; i < eFaces.size(); ++i) {\n-93 vertsPerFace[i] = _level->getFaceVertices(eFaces[i]).size();\n+_\b9_\b0 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bF_\bi_\bn_\bd_\bI_\bn_\bd_\be_\bx(_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be value) const {\n+91 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); ++i) {\n+92 if (value==_\b__\bb_\be_\bg_\bi_\bn[i]) {\n+93 return i;\n 94 }\n 95 }\n-96\n-97private:\n-98 const Level* _level;\n-99\n-100 int _eIndex;\n-101};\n-102\n+96 return -1;\n+97 }\n+98\n+99protected:\n+_\b1_\b0_\b0 _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be const * _\b__\bb_\be_\bg_\bi_\bn;\n+_\b1_\b0_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\b__\bs_\bi_\bz_\be;\n+102};\n 103\n-104//\n-105// For , which provides information in the neighborhood of\n-a vertex:\n-106//\n-107class VertexInterface {\n-108public:\n-109 VertexInterface() { }\n-110 VertexInterface(Level const& parent, Level const& child) : _parent\n-(&parent), _child(&child) { }\n-111 ~VertexInterface() { }\n+104template \n+_\b1_\b0_\b5class _\bA_\br_\br_\ba_\by : public _\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by {\n+106\n+107public:\n+_\b1_\b0_\b8 typedef TYPE _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be;\n+_\b1_\b0_\b9 typedef int _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n+110\n+_\b1_\b1_\b1 typedef TYPE const& _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n 112\n-113 void SetIndex(int parentIndex, int childIndex) {\n-114 _pIndex = parentIndex;\n-115 _cIndex = childIndex;\n-116 _eCount = _parent->getVertexEdges(_pIndex).size();\n-117 _fCount = _parent->getVertexFaces(_pIndex).size();\n-118 }\n+_\b1_\b1_\b3 typedef TYPE& _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n+_\b1_\b1_\b4 typedef TYPE* _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n+115\n+116public:\n+117\n+_\b1_\b1_\b8 _\bA_\br_\br_\ba_\by() : _\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by() { }\n 119\n-120public: // Generic interface expected of :\n-121 int GetNumEdges() const { return _eCount; }\n-122 int GetNumFaces() const { return _fCount; }\n+_\b1_\b2_\b0 _\bA_\br_\br_\ba_\by(_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be * ptr, _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be sizeArg) : _\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by(ptr, sizeArg)\n+{ }\n+121\n+122public:\n 123\n-124 float GetSharpness() const { return _parent->getVertexSharpness(_pIndex); }\n-125 float* GetSharpnessPerEdge(float pSharpness[]) const {\n-126 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by pEdges = _parent->getVertexEdges(_pIndex);\n-127 for (int i = 0; i < _eCount; ++i) {\n-128 pSharpness[i] = _parent->getEdgeSharpness(pEdges[i]);\n-129 }\n-130 return pSharpness;\n-131 }\n-132\n-133 float GetChildSharpness(Sdc::Crease const&) const { return _child-\n->getVertexSharpness(_cIndex); }\n-134 float* GetChildSharpnessPerEdge(Sdc::Crease const& crease, float cSharpness\n-[]) const {\n-135 internal::StackBuffer pSharpness(_eCount);\n-136 GetSharpnessPerEdge(pSharpness);\n-137 crease.SubdivideEdgeSharpnessesAroundVertex(_eCount, pSharpness,\n-cSharpness);\n-138 return cSharpness;\n+_\b1_\b2_\b4 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](int index) const {\n+125 return _\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b<_\bT_\bY_\bP_\bE_\b>_\b:_\b:_\b__\bb_\be_\bg_\bi_\bn[index];\n+126 }\n+127\n+_\b1_\b2_\b8 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](int index) {\n+129 return const_cast<_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be>(_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b<_\bT_\bY_\bP_\bE_\b>_\b:_\b:_\b__\bb_\be_\bg_\bi_\bn[index]);\n+130 }\n+131\n+_\b1_\b3_\b2 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() {\n+133 return const_cast<_\bi_\bt_\be_\br_\ba_\bt_\bo_\br>(_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b<_\bT_\bY_\bP_\bE_\b>_\b:_\b:_\b__\bb_\be_\bg_\bi_\bn);\n+134 }\n+135\n+_\b1_\b3_\b6 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() {\n+137 return const_cast<_\bi_\bt_\be_\br_\ba_\bt_\bo_\br>(_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b<_\bT_\bY_\bP_\bE_\b>_\b:_\b:_\b__\bb_\be_\bg_\bi_\bn +\n+138 _\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b<_\bT_\bY_\bP_\bE_\b>_\b:_\b:_\b__\bs_\bi_\bz_\be);\n 139 }\n-140\n-141private:\n-142 const Level* _parent;\n-143 const Level* _child;\n-144\n-145 int _pIndex;\n-146 int _cIndex;\n-147 int _eCount;\n-148 int _fCount;\n-149};\n-150\n-151} // end namespace internal\n-152} // end namespace Vtr\n-153\n-154} // end namespace OPENSUBDIV_VERSION\n-155using namespace OPENSUBDIV_VERSION;\n-156} // end namespace OpenSubdiv\n-157\n-158#endif /* OPENSUBDIV3_VTR_COMPONENT_INTERFACES_H */\n+140};\n+141\n+142} // end namespace Vtr\n+143\n+144} // end namespace OPENSUBDIV_VERSION\n+145using namespace OPENSUBDIV_VERSION;\n+146} // end namespace OpenSubdiv\n+147\n+148#endif /* OPENSUBDIV3_VTR_ARRAY_INTERFACE_H */\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by\n-ConstArray< Index > ConstIndexArray\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b8_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b5_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\b__\bb_\be_\bg_\bi_\bn\n+value_type const * _begin\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b0_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n+TYPE value_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b5_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\bb_\be_\bg_\bi_\bn\n+const_iterator begin() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b7_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n+const_reference operator[](int index) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b7_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+TYPE const * const_iterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b6_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\bF_\bi_\bn_\bd_\bI_\bn_\bd_\be_\bx_\bI_\bn_\b4_\bT_\bu_\bp_\bl_\be\n+size_type FindIndexIn4Tuple(value_type value) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b8_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b7_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\be_\bm_\bp_\bt_\by\n+bool empty() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b7_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by\n+ConstArray(value_type const *ptr, size_type sizeArg)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b6_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n+TYPE & reference\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b6_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\b__\bs_\bi_\bz_\be\n+size_type _size\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b0_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\bF_\bi_\bn_\bd_\bI_\bn_\bd_\be_\bx\n+size_type FindIndex(value_type value) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b9_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+int size_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b5_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n+TYPE const & const_reference\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b5_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\be_\bn_\bd\n+const_iterator end() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b7_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+TYPE * iterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b6_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by\n+ConstArray()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b6_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b0_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n+TYPE value_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b0_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n+const_reference operator[](int index) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b2_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n+TYPE & reference\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b1_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+int size_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b0_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n+TYPE const & const_reference\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b1_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by_\b:_\b:_\be_\bn_\bd\n+iterator end()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b3_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by_\b:_\b:_\bb_\be_\bg_\bi_\bn\n+iterator begin()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b3_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by_\b:_\b:_\bA_\br_\br_\ba_\by\n+Array(value_type *ptr, size_type sizeArg)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b2_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+TYPE * iterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b1_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n+reference operator[](int index)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b2_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by_\b:_\b:_\bA_\br_\br_\ba_\by\n+Array()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b1_\b8\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bv_\bt_\br\n- * _\bc_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\bs_\b._\bh\n+ * _\ba_\br_\br_\ba_\by_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00767.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00767.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/vtr/array.h File Reference\n+OpenSubdiv: opensubdiv/vtr/componentInterfaces.h File Reference\n \n \n \n \n \n \n \n@@ -88,44 +88,40 @@\n \n \n \n \n \n
\n \n-
array.h File Reference
\n+
componentInterfaces.h File Reference
\n
\n
\n
#include "../version.h"
\n-#include <cassert>
\n+#include "../sdc/types.h"
\n+#include "../sdc/crease.h"
\n+#include "../vtr/types.h"
\n+#include "../vtr/stackBuffer.h"
\n+#include <vector>
\n
\n

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-

\n-Classes

class  ConstArray< TYPE >
 
class  Array< TYPE >
 
\n \n \n \n \n \n \n \n

\n Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Vtr
 
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +1,24 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-array.h File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+componentInterfaces.h File Reference\n #include \"../version.h\"\n-#include \n+#include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n+#include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bc_\br_\be_\ba_\bs_\be_\b._\bh\"\n+#include \"_\b._\b._\b/_\bv_\bt_\br_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n+#include \"_\b._\b._\b/_\bv_\bt_\br_\b/_\bs_\bt_\ba_\bc_\bk_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\"\n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b<_\b _\bT_\bY_\bP_\bE_\b _\b>\n-\u00a0\n-class \u00a0 _\bA_\br_\br_\ba_\by_\b<_\b _\bT_\bY_\bP_\bE_\b _\b>\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bv_\bt_\br\n- * _\ba_\br_\br_\ba_\by_\b._\bh\n+ * _\bc_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\bs_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00767_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00767_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/vtr/array.h Source File\n+OpenSubdiv: opensubdiv/vtr/componentInterfaces.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
array.h
\n+
componentInterfaces.h
\n
\n
\n Go to the documentation of this file.
1//
\n
2// Copyright 2014 DreamWorks Animation LLC.
\n
3//
\n
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
\n
5// with the following modification; you may not use this file except in
\n@@ -118,192 +118,155 @@\n
17//
\n
18// Unless required by applicable law or agreed to in writing, software
\n
19// distributed under the Apache License with the above modification is
\n
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
\n
21// KIND, either express or implied. See the Apache License for the specific
\n
22// language governing permissions and limitations under the Apache License.
\n
23//
\n-
24#ifndef OPENSUBDIV3_VTR_ARRAY_INTERFACE_H
\n-
25#define OPENSUBDIV3_VTR_ARRAY_INTERFACE_H
\n+
24#ifndef OPENSUBDIV3_VTR_COMPONENT_INTERFACES_H
\n+
25#define OPENSUBDIV3_VTR_COMPONENT_INTERFACES_H
\n
26
\n
27#include "../version.h"
\n
28
\n-
29#include <cassert>
\n-
30
\n-
31namespace OpenSubdiv {
\n-
32namespace OPENSUBDIV_VERSION {
\n+
29#include "../sdc/types.h"
\n+
30#include "../sdc/crease.h"
\n+
31#include "../vtr/types.h"
\n+
32#include "../vtr/stackBuffer.h"
\n
33
\n-
34namespace Vtr {
\n+
34#include <vector>
\n
35
\n-
36//
\n-
37// This class provides a simple array-like interface -- a subset std::vector's interface -- for
\n-
38// a sequence of elements stored in contiguous memory. It provides a unified representation for
\n-
39// referencing data on the stack, all or a subset of std::vector<>, or anywhere else in memory.
\n-
40//
\n-
41// Note that its members are head/size rather than begin/end as in std::vector -- we frequently
\n-
42// need only the size for many queries, and that is most often what is stored elsewhere in other
\n-
43// classes, so we hope to reduce unnecessary address arithmetic constructing the interface and
\n-
44// accessing the size. The size type is also specifically 32-bit (rather than size_t) to match
\n-
45// internal usage and avoid unnecessary conversion to/from 64-bit.
\n+
36
\n+
37namespace OpenSubdiv {
\n+
38namespace OPENSUBDIV_VERSION {
\n+
39
\n+
40namespace Vtr {
\n+
41namespace internal {
\n+
42
\n+
43//
\n+
44// Simple classes supporting the interfaces required of generic topological
\n+
45// types in the Scheme mask queries, e.g. <typename FACE, VERTEX, etc.>
\n
46//
\n-
47// Question:
\n-
48// Naming is at issue here... formerly called ArrayInterface until that was shot down it has
\n-
49// been simplified to Array but needs to be distanced from std::array as it DOES NOT store its
\n-
50// own memory and is simply an interface to memory stored elsewhere.
\n-
51//
\n-
52template <typename TYPE>
\n-
\n-\n-
54
\n-
55public:
\n-
56 typedef TYPE value_type;
\n-
57 typedef int size_type;
\n-
58
\n-
59 typedef TYPE const& const_reference;
\n-
60 typedef TYPE const* const_iterator;
\n+
47// These are not used with Vtr but arguably belong with it as the details to
\n+
48// write these efficiently depends very much on intimate details of Vtr's
\n+
49// implementation, e.g. the use of tag bits, subdivision Rules, etc.
\n+
50//
\n+
51
\n+
52
\n+
53//
\n+
54// For <typename FACE>, which provides information in the neighborhood of a face:
\n+
55//
\n+
56class FaceInterface {
\n+
57public:
\n+
58 FaceInterface() { }
\n+
59 FaceInterface(int vertCount) : _vertCount(vertCount) { }
\n+
60 ~FaceInterface() { }
\n
61
\n-
62 typedef TYPE& reference;
\n-
63 typedef TYPE* iterator;
\n+
62public: // Generic interface expected of <typename FACE>:
\n+
63 int GetNumVertices() const { return _vertCount; }
\n
64
\n-
65public:
\n-
66
\n-
67 ConstArray() : _begin(0), _size(0) { }
\n+
65private:
\n+
66 int _vertCount;
\n+
67};
\n
68
\n-
\n-
69 ConstArray(value_type const * ptr, size_type sizeArg) :
\n-
70 _begin(ptr), _size(sizeArg) { }
\n-
\n-
71
\n-
72 size_type size() const { return _size; }
\n-
73
\n-
74 bool empty() const { return _size==0; }
\n-
75
\n-
76 const_reference operator[](int index) const { return _begin[index]; }
\n-
77 const_iterator begin() const { return _begin; }
\n-
78 const_iterator end() const { return _begin + _size; }
\n-
79
\n-
\n-\n-
81 assert(_size>=4);
\n-
82 if (value == _begin[0]) return 0;
\n-
83 if (value == _begin[1]) return 1;
\n-
84 if (value == _begin[2]) return 2;
\n-
85 if (value == _begin[3]) return 3;
\n-
86 assert("FindIndexIn4Tuple() did not find expected value!" == 0);
\n-
87 return -1;
\n+
69
\n+
70//
\n+
71// For <typename EDGE>, which provides information in the neighborhood of an edge:
\n+
72//
\n+
73class EdgeInterface {
\n+
74public:
\n+
75 EdgeInterface() { }
\n+
76 EdgeInterface(Level const& level) : _level(&level) { }
\n+
77 ~EdgeInterface() { }
\n+
78
\n+
79 void SetIndex(int edgeIndex) { _eIndex = edgeIndex; }
\n+
80
\n+
81public: // Generic interface expected of <typename EDGE>:
\n+
82 int GetNumFaces() const { return _level->getEdgeFaces(_eIndex).size(); }
\n+
83 float GetSharpness() const { return _level->getEdgeSharpness(_eIndex); }
\n+
84
\n+
85 void GetChildSharpnesses(Sdc::Crease const&, float s[2]) const {
\n+
86 // Need to use the Refinement here to identify the two child edges:
\n+
87 s[0] = s[1] = GetSharpness() - 1.0f;
\n
88 }
\n-
\n
89
\n-
\n-\n-
91 for (size_type i=0; i<size(); ++i) {
\n-
92 if (value==_begin[i]) {
\n-
93 return i;
\n-
94 }
\n-
95 }
\n-
96 return -1;
\n-
97 }
\n-
\n-
98
\n-
99protected:
\n-\n-\n-
102};
\n-
\n+
90 void GetNumVerticesPerFace(int vertsPerFace[]) const {
\n+
91 ConstIndexArray eFaces = _level->getEdgeFaces(_eIndex);
\n+
92 for (int i = 0; i < eFaces.size(); ++i) {
\n+
93 vertsPerFace[i] = _level->getFaceVertices(eFaces[i]).size();
\n+
94 }
\n+
95 }
\n+
96
\n+
97private:
\n+
98 const Level* _level;
\n+
99
\n+
100 int _eIndex;
\n+
101};
\n+
102
\n
103
\n-
104template <typename TYPE>
\n-
\n-
105class Array : public ConstArray<TYPE> {
\n-
106
\n-
107public:
\n-
108 typedef TYPE value_type;
\n-
109 typedef int size_type;
\n-
110
\n-
111 typedef TYPE const& const_reference;
\n+
104//
\n+
105// For <typename VERTEX>, which provides information in the neighborhood of a vertex:
\n+
106//
\n+
107class VertexInterface {
\n+
108public:
\n+
109 VertexInterface() { }
\n+
110 VertexInterface(Level const& parent, Level const& child) : _parent(&parent), _child(&child) { }
\n+
111 ~VertexInterface() { }
\n
112
\n-
113 typedef TYPE& reference;
\n-
114 typedef TYPE* iterator;
\n-
115
\n-
116public:
\n-
117
\n-
118 Array() : ConstArray<TYPE>() { }
\n-
119
\n-
120 Array(value_type * ptr, size_type sizeArg) : ConstArray<TYPE>(ptr, sizeArg) { }
\n-
121
\n-
122public:
\n+
113 void SetIndex(int parentIndex, int childIndex) {
\n+
114 _pIndex = parentIndex;
\n+
115 _cIndex = childIndex;
\n+
116 _eCount = _parent->getVertexEdges(_pIndex).size();
\n+
117 _fCount = _parent->getVertexFaces(_pIndex).size();
\n+
118 }
\n+
119
\n+
120public: // Generic interface expected of <typename VERT>:
\n+
121 int GetNumEdges() const { return _eCount; }
\n+
122 int GetNumFaces() const { return _fCount; }
\n
123
\n-
\n-
124 const_reference operator[](int index) const {
\n-
125 return ConstArray<TYPE>::_begin[index];
\n-
126 }
\n-
\n-
127
\n-
\n-\n-
129 return const_cast<reference>(ConstArray<TYPE>::_begin[index]);
\n-
130 }
\n-
\n-
131
\n-
\n-\n-
133 return const_cast<iterator>(ConstArray<TYPE>::_begin);
\n-
134 }
\n-
\n-
135
\n-
\n-\n-
137 return const_cast<iterator>(ConstArray<TYPE>::_begin +
\n-\n+
124 float GetSharpness() const { return _parent->getVertexSharpness(_pIndex); }
\n+
125 float* GetSharpnessPerEdge(float pSharpness[]) const {
\n+
126 ConstIndexArray pEdges = _parent->getVertexEdges(_pIndex);
\n+
127 for (int i = 0; i < _eCount; ++i) {
\n+
128 pSharpness[i] = _parent->getEdgeSharpness(pEdges[i]);
\n+
129 }
\n+
130 return pSharpness;
\n+
131 }
\n+
132
\n+
133 float GetChildSharpness(Sdc::Crease const&) const { return _child->getVertexSharpness(_cIndex); }
\n+
134 float* GetChildSharpnessPerEdge(Sdc::Crease const& crease, float cSharpness[]) const {
\n+
135 internal::StackBuffer<float,16> pSharpness(_eCount);
\n+
136 GetSharpnessPerEdge(pSharpness);
\n+
137 crease.SubdivideEdgeSharpnessesAroundVertex(_eCount, pSharpness, cSharpness);
\n+
138 return cSharpness;
\n
139 }
\n-
\n-
140};
\n-
\n-
141
\n-
142} // end namespace Vtr
\n-
143
\n-
144} // end namespace OPENSUBDIV_VERSION
\n-
145using namespace OPENSUBDIV_VERSION;
\n-
146} // end namespace OpenSubdiv
\n-
147
\n-
148#endif /* OPENSUBDIV3_VTR_ARRAY_INTERFACE_H */
\n-\n-\n-\n-\n-\n-
const_reference operator[](int index) const
Definition array.h:76
\n-\n-
size_type FindIndexIn4Tuple(value_type value) const
Definition array.h:80
\n-\n-\n-
ConstArray(value_type const *ptr, size_type sizeArg)
Definition array.h:69
\n-\n-\n-
size_type FindIndex(value_type value) const
Definition array.h:90
\n-\n-\n-\n-\n-\n-\n-\n-
const_reference operator[](int index) const
Definition array.h:124
\n-\n-\n-\n-\n-\n-
Array(value_type *ptr, size_type sizeArg)
Definition array.h:120
\n-\n-\n-\n+
140
\n+
141private:
\n+
142 const Level* _parent;
\n+
143 const Level* _child;
\n+
144
\n+
145 int _pIndex;
\n+
146 int _cIndex;
\n+
147 int _eCount;
\n+
148 int _fCount;
\n+
149};
\n+
150
\n+
151} // end namespace internal
\n+
152} // end namespace Vtr
\n+
153
\n+
154} // end namespace OPENSUBDIV_VERSION
\n+
155using namespace OPENSUBDIV_VERSION;
\n+
156} // end namespace OpenSubdiv
\n+
157
\n+
158#endif /* OPENSUBDIV3_VTR_COMPONENT_INTERFACES_H */
\n+\n+
ConstArray< Index > ConstIndexArray
Definition types.h:80
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-array.h\n+componentInterfaces.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2014 DreamWorks Animation LLC.\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -23,236 +23,158 @@\n 17//\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n-24#ifndef OPENSUBDIV3_VTR_ARRAY_INTERFACE_H\n-25#define OPENSUBDIV3_VTR_ARRAY_INTERFACE_H\n+24#ifndef OPENSUBDIV3_VTR_COMPONENT_INTERFACES_H\n+25#define OPENSUBDIV3_VTR_COMPONENT_INTERFACES_H\n 26\n 27#include \"../version.h\"\n 28\n-29#include \n-30\n-31namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-32namespace OPENSUBDIV_VERSION {\n+29#include \"../sdc/types.h\"\n+30#include \"../sdc/crease.h\"\n+31#include \"../vtr/types.h\"\n+32#include \"../vtr/stackBuffer.h\"\n 33\n-34namespace Vtr {\n+34#include \n 35\n-36//\n-37// This class provides a simple array-like interface -- a subset std::\n-vector's interface -- for\n-38// a sequence of elements stored in contiguous memory. It provides a unified\n-representation for\n-39// referencing data on the stack, all or a subset of std::vector<>, or\n-anywhere else in memory.\n-40//\n-41// Note that its members are head/size rather than begin/end as in std::\n-vector -- we frequently\n-42// need only the size for many queries, and that is most often what is stored\n-elsewhere in other\n-43// classes, so we hope to reduce unnecessary address arithmetic constructing\n-the interface and\n-44// accessing the size. The size type is also specifically 32-bit (rather than\n-size_t) to match\n-45// internal usage and avoid unnecessary conversion to/from 64-bit.\n+36\n+37namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+38namespace OPENSUBDIV_VERSION {\n+39\n+40namespace Vtr {\n+41namespace internal {\n+42\n+43//\n+44// Simple classes supporting the interfaces required of generic topological\n+45// types in the Scheme mask queries, e.g. \n 46//\n-47// Question:\n-48// Naming is at issue here... formerly called ArrayInterface until that was\n-shot down it has\n-49// been simplified to Array but needs to be distanced from std::array as it\n-DOES NOT store its\n-50// own memory and is simply an interface to memory stored elsewhere.\n-51//\n-52template \n-_\b5_\b3class _\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by {\n-54\n-55public:\n-_\b5_\b6 typedef TYPE _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be;\n-_\b5_\b7 typedef int _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n-58\n-_\b5_\b9 typedef TYPE const& _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-_\b6_\b0 typedef TYPE const* _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n+47// These are not used with Vtr but arguably belong with it as the details to\n+48// write these efficiently depends very much on intimate details of Vtr's\n+49// implementation, e.g. the use of tag bits, subdivision Rules, etc.\n+50//\n+51\n+52\n+53//\n+54// For , which provides information in the neighborhood of a\n+face:\n+55//\n+56class FaceInterface {\n+57public:\n+58 FaceInterface() { }\n+59 FaceInterface(int vertCount) : _vertCount(vertCount) { }\n+60 ~FaceInterface() { }\n 61\n-_\b6_\b2 typedef TYPE& _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-_\b6_\b3 typedef TYPE* _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n+62public: // Generic interface expected of :\n+63 int GetNumVertices() const { return _vertCount; }\n 64\n-65public:\n-66\n-_\b6_\b7 _\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by() : _\b__\bb_\be_\bg_\bi_\bn(0), _\b__\bs_\bi_\bz_\be(0) { }\n+65private:\n+66 int _vertCount;\n+67};\n 68\n-_\b6_\b9 _\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by(_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be const * ptr, _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be sizeArg) :\n-70 _\b__\bb_\be_\bg_\bi_\bn(ptr), _\b__\bs_\bi_\bz_\be(sizeArg) { }\n-71\n-_\b7_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const { return _\b__\bs_\bi_\bz_\be; }\n-73\n-_\b7_\b4 bool _\be_\bm_\bp_\bt_\by() const { return _\b__\bs_\bi_\bz_\be==0; }\n-75\n-_\b7_\b6 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](int index) const { return _\b__\bb_\be_\bg_\bi_\bn[index]; }\n-_\b7_\b7 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() const { return _\b__\bb_\be_\bg_\bi_\bn; }\n-_\b7_\b8 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() const { return _\b__\bb_\be_\bg_\bi_\bn + _\b__\bs_\bi_\bz_\be; }\n-79\n-_\b8_\b0 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bF_\bi_\bn_\bd_\bI_\bn_\bd_\be_\bx_\bI_\bn_\b4_\bT_\bu_\bp_\bl_\be(_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be value) const {\n-81 assert(_\b__\bs_\bi_\bz_\be>=4);\n-82 if (value == _\b__\bb_\be_\bg_\bi_\bn[0]) return 0;\n-83 if (value == _\b__\bb_\be_\bg_\bi_\bn[1]) return 1;\n-84 if (value == _\b__\bb_\be_\bg_\bi_\bn[2]) return 2;\n-85 if (value == _\b__\bb_\be_\bg_\bi_\bn[3]) return 3;\n-86 assert(\"FindIndexIn4Tuple() did not find expected value!\" == 0);\n-87 return -1;\n+69\n+70//\n+71// For , which provides information in the neighborhood of an\n+edge:\n+72//\n+73class EdgeInterface {\n+74public:\n+75 EdgeInterface() { }\n+76 EdgeInterface(Level const& level) : _level(&level) { }\n+77 ~EdgeInterface() { }\n+78\n+79 void SetIndex(int edgeIndex) { _eIndex = edgeIndex; }\n+80\n+81public: // Generic interface expected of :\n+82 int GetNumFaces() const { return _level->getEdgeFaces(_eIndex).size(); }\n+83 float GetSharpness() const { return _level->getEdgeSharpness(_eIndex); }\n+84\n+85 void GetChildSharpnesses(Sdc::Crease const&, float s[2]) const {\n+86 // Need to use the Refinement here to identify the two child edges:\n+87 s[0] = s[1] = GetSharpness() - 1.0f;\n 88 }\n 89\n-_\b9_\b0 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bF_\bi_\bn_\bd_\bI_\bn_\bd_\be_\bx(_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be value) const {\n-91 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); ++i) {\n-92 if (value==_\b__\bb_\be_\bg_\bi_\bn[i]) {\n-93 return i;\n+90 void GetNumVerticesPerFace(int vertsPerFace[]) const {\n+91 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by eFaces = _level->getEdgeFaces(_eIndex);\n+92 for (int i = 0; i < eFaces.size(); ++i) {\n+93 vertsPerFace[i] = _level->getFaceVertices(eFaces[i]).size();\n 94 }\n 95 }\n-96 return -1;\n-97 }\n-98\n-99protected:\n-_\b1_\b0_\b0 _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be const * _\b__\bb_\be_\bg_\bi_\bn;\n-_\b1_\b0_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\b__\bs_\bi_\bz_\be;\n-102};\n+96\n+97private:\n+98 const Level* _level;\n+99\n+100 int _eIndex;\n+101};\n+102\n 103\n-104template \n-_\b1_\b0_\b5class _\bA_\br_\br_\ba_\by : public _\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by {\n-106\n-107public:\n-_\b1_\b0_\b8 typedef TYPE _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be;\n-_\b1_\b0_\b9 typedef int _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n-110\n-_\b1_\b1_\b1 typedef TYPE const& _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n+104//\n+105// For , which provides information in the neighborhood of\n+a vertex:\n+106//\n+107class VertexInterface {\n+108public:\n+109 VertexInterface() { }\n+110 VertexInterface(Level const& parent, Level const& child) : _parent\n+(&parent), _child(&child) { }\n+111 ~VertexInterface() { }\n 112\n-_\b1_\b1_\b3 typedef TYPE& _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-_\b1_\b1_\b4 typedef TYPE* _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-115\n-116public:\n-117\n-_\b1_\b1_\b8 _\bA_\br_\br_\ba_\by() : _\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by() { }\n+113 void SetIndex(int parentIndex, int childIndex) {\n+114 _pIndex = parentIndex;\n+115 _cIndex = childIndex;\n+116 _eCount = _parent->getVertexEdges(_pIndex).size();\n+117 _fCount = _parent->getVertexFaces(_pIndex).size();\n+118 }\n 119\n-_\b1_\b2_\b0 _\bA_\br_\br_\ba_\by(_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be * ptr, _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be sizeArg) : _\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by(ptr, sizeArg)\n-{ }\n-121\n-122public:\n+120public: // Generic interface expected of :\n+121 int GetNumEdges() const { return _eCount; }\n+122 int GetNumFaces() const { return _fCount; }\n 123\n-_\b1_\b2_\b4 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](int index) const {\n-125 return _\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b<_\bT_\bY_\bP_\bE_\b>_\b:_\b:_\b__\bb_\be_\bg_\bi_\bn[index];\n-126 }\n-127\n-_\b1_\b2_\b8 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](int index) {\n-129 return const_cast<_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be>(_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b<_\bT_\bY_\bP_\bE_\b>_\b:_\b:_\b__\bb_\be_\bg_\bi_\bn[index]);\n-130 }\n-131\n-_\b1_\b3_\b2 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() {\n-133 return const_cast<_\bi_\bt_\be_\br_\ba_\bt_\bo_\br>(_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b<_\bT_\bY_\bP_\bE_\b>_\b:_\b:_\b__\bb_\be_\bg_\bi_\bn);\n-134 }\n-135\n-_\b1_\b3_\b6 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() {\n-137 return const_cast<_\bi_\bt_\be_\br_\ba_\bt_\bo_\br>(_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b<_\bT_\bY_\bP_\bE_\b>_\b:_\b:_\b__\bb_\be_\bg_\bi_\bn +\n-138 _\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b<_\bT_\bY_\bP_\bE_\b>_\b:_\b:_\b__\bs_\bi_\bz_\be);\n+124 float GetSharpness() const { return _parent->getVertexSharpness(_pIndex); }\n+125 float* GetSharpnessPerEdge(float pSharpness[]) const {\n+126 _\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by pEdges = _parent->getVertexEdges(_pIndex);\n+127 for (int i = 0; i < _eCount; ++i) {\n+128 pSharpness[i] = _parent->getEdgeSharpness(pEdges[i]);\n+129 }\n+130 return pSharpness;\n+131 }\n+132\n+133 float GetChildSharpness(Sdc::Crease const&) const { return _child-\n+>getVertexSharpness(_cIndex); }\n+134 float* GetChildSharpnessPerEdge(Sdc::Crease const& crease, float cSharpness\n+[]) const {\n+135 internal::StackBuffer pSharpness(_eCount);\n+136 GetSharpnessPerEdge(pSharpness);\n+137 crease.SubdivideEdgeSharpnessesAroundVertex(_eCount, pSharpness,\n+cSharpness);\n+138 return cSharpness;\n 139 }\n-140};\n-141\n-142} // end namespace Vtr\n-143\n-144} // end namespace OPENSUBDIV_VERSION\n-145using namespace OPENSUBDIV_VERSION;\n-146} // end namespace OpenSubdiv\n-147\n-148#endif /* OPENSUBDIV3_VTR_ARRAY_INTERFACE_H */\n+140\n+141private:\n+142 const Level* _parent;\n+143 const Level* _child;\n+144\n+145 int _pIndex;\n+146 int _cIndex;\n+147 int _eCount;\n+148 int _fCount;\n+149};\n+150\n+151} // end namespace internal\n+152} // end namespace Vtr\n+153\n+154} // end namespace OPENSUBDIV_VERSION\n+155using namespace OPENSUBDIV_VERSION;\n+156} // end namespace OpenSubdiv\n+157\n+158#endif /* OPENSUBDIV3_VTR_COMPONENT_INTERFACES_H */\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b5_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\b__\bb_\be_\bg_\bi_\bn\n-value_type const * _begin\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b0_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n-TYPE value_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b5_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-const_iterator begin() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b7_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-const_reference operator[](int index) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b7_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-TYPE const * const_iterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b6_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\bF_\bi_\bn_\bd_\bI_\bn_\bd_\be_\bx_\bI_\bn_\b4_\bT_\bu_\bp_\bl_\be\n-size_type FindIndexIn4Tuple(value_type value) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b8_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b7_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\be_\bm_\bp_\bt_\by\n-bool empty() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b7_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by\n-ConstArray(value_type const *ptr, size_type sizeArg)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b6_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-TYPE & reference\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b6_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\b__\bs_\bi_\bz_\be\n-size_type _size\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b0_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\bF_\bi_\bn_\bd_\bI_\bn_\bd_\be_\bx\n-size_type FindIndex(value_type value) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b9_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-int size_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b5_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-TYPE const & const_reference\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b5_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\be_\bn_\bd\n-const_iterator end() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b7_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-TYPE * iterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b6_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bA_\br_\br_\ba_\by\n-ConstArray()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b6_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b0_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n-TYPE value_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b0_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-const_reference operator[](int index) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b2_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-TYPE & reference\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b1_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-int size_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b0_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-TYPE const & const_reference\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b1_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by_\b:_\b:_\be_\bn_\bd\n-iterator end()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b3_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-iterator begin()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by_\b:_\b:_\bA_\br_\br_\ba_\by\n-Array(value_type *ptr, size_type sizeArg)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b2_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-TYPE * iterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b1_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-reference operator[](int index)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b2_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bA_\br_\br_\ba_\by_\b:_\b:_\bA_\br_\br_\ba_\by\n-Array()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\ba_\br_\br_\ba_\by_\b._\bh_\b:_\b1_\b1_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bV_\bt_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bI_\bn_\bd_\be_\bx_\bA_\br_\br_\ba_\by\n+ConstArray< Index > ConstIndexArray\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b8_\b0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bv_\bt_\br\n- * _\ba_\br_\br_\ba_\by_\b._\bh\n+ * _\bc_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\bs_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00770.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00770.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/sdc/scheme.h File Reference\n+OpenSubdiv: opensubdiv/sdc/options.h File Reference\n \n \n \n \n \n \n \n@@ -90,34 +90,25 @@\n \n \n \n
\n \n-
scheme.h File Reference
\n+
options.h File Reference
\n
\n
\n
#include "../version.h"
\n-#include "../sdc/types.h"
\n-#include "../sdc/options.h"
\n-#include "../sdc/crease.h"
\n-#include <cassert>
\n-#include <cstdlib>
\n-#include <vector>
\n
\n

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n+\n+\n \n

\n Classes

class  Scheme< SCHEME_TYPE >
 Scheme is a class template which provides all implementation for the subdivision schemes supported by OpenSubdiv through specializations of the methods of each. An instance of Scheme<SCHEME_TYPE> includes a set of Options that will dictate the variable aspects of its behavior.
\n- More...
 
class  Scheme< SCHEME_TYPE >::LocalMask< WEIGHT >
class  Options
 All supported options applying to subdivision scheme. More...
 
\n \n \n \n \n@@ -126,13 +117,13 @@\n \n

\n Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,35 +1,23 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-scheme.h File Reference\n+options.h File Reference\n #include \"../version.h\"\n-#include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n-#include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\"\n-#include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bc_\br_\be_\ba_\bs_\be_\b._\bh\"\n-#include \n-#include \n-#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bS_\bc_\bh_\be_\bm_\be_\b<_\b _\bS_\bC_\bH_\bE_\bM_\bE_\b__\bT_\bY_\bP_\bE_\b _\b>\n- _\bS_\bc_\bh_\be_\bm_\be is a class template which provides all implementation for the\n- subdivision schemes supported by _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv through specializations of\n-\u00a0 the methods of each. An instance of Scheme includes a set\n- of _\bO_\bp_\bt_\bi_\bo_\bn_\bs that will dictate the variable aspects of its behavior.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bS_\bc_\bh_\be_\bm_\be_\b<_\b _\bS_\bC_\bH_\bE_\bM_\bE_\b__\bT_\bY_\bP_\bE_\b _\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b<_\b _\bW_\bE_\bI_\bG_\bH_\bT_\b _\b>\n+class \u00a0 _\bO_\bp_\bt_\bi_\bo_\bn_\bs\n+\u00a0 All supported options applying to subdivision scheme. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bs_\bd_\bc\n- * _\bs_\bc_\bh_\be_\bm_\be_\b._\bh\n+ * _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00770.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00770.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a00770 = [\n- [\"Scheme< SCHEME_TYPE >\", \"a01333.html\", \"a01333\"],\n- [\"LocalMask< WEIGHT >\", \"a01337.html\", \"a01337\"]\n+ [\"Options\", \"a01329.html\", \"a01329\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00770_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00770_source.html", "has_internal_linenos": true, "unified_diff": "@@ -22,8471 +22,2397 @@\n 00000150: 656e 743d 2244 6f78 7967 656e 2031 2e39 ent=\"Doxygen 1.9\n 00000160: 2e38 222f 3e0a 3c6d 6574 6120 6e61 6d65 .8\"/>..OpenSubdiv: o\n-000001c0: 7065 6e73 7562 6469 762f 7364 632f 7363 pensubdiv/sdc/sc\n-000001d0: 6865 6d65 2e68 2053 6f75 7263 6520 4669 heme.h Source Fi\n-000001e0: 6c65 3c2f 7469 746c 653e 0a3c 6c69 6e6b le......\n-00000310: 3c73 6372 6970 7420 7479 7065 3d22 7465 .........
.
.\n-00000530: 3c74 6162 6c65 2063 656c 6c73 7061 6369 . \n-00000560: 0a20 3c74 7220 6964 3d22 7072 6f6a 6563 . . . . .
\n-000005c0: 3c2f 7464 3e0a 2020 3c74 6420 6964 3d22 . \n-000005e0: 2020 3c64 6976 2069 643d 2270 726f 6a65
OpenSubd\n-00000600: 6976 0a20 2020 3c2f 6469 763e 0a20 203c iv.
. <\n-00000610: 2f74 643e 0a20 3c2f 7472 3e0a 203c 2f74 /td>.
.<\n-00000630: 2f64 6976 3e0a 3c21 2d2d 2065 6e64 2068 /div>..<\n-00000650: 212d 2d20 4765 6e65 7261 7465 6420 6279 !-- Generated by\n-00000660: 2044 6f78 7967 656e 2031 2e39 2e38 202d Doxygen 1.9.8 -\n-00000670: 2d3e 0a3c 7363 7269 7074 2074 7970 653d ->..\n-00000750: 3c73 6372 6970 7420 7479 7065 3d22 7465 ...
...
..\n-00000d00: 3c21 2d2d 2069 6672 616d 6520 7368 6f77 .<\n-00000d40: 6469 7620 6964 3d22 4d53 6561 7263 6852 div id=\"MSearchR\n-00000d50: 6573 756c 7473 5769 6e64 6f77 223e 0a3c esultsWindow\">.<\n-00000d60: 6469 7620 6964 3d22 4d53 6561 7263 6852 div id=\"MSearchR\n-00000d70: 6573 756c 7473 223e 0a3c 6469 7620 636c esults\">.
.\n-00000da0: 0a3c 6469 7620 6964 3d22 5352 5265 7375 .
.L\n-00000de0: 6f61 6469 6e67 2e2e 2e3c 2f64 6976 3e0a oading...
.\n-00000df0: 3c64 6976 2063 6c61 7373 3d22 5352 5374
Searching..\n-00000e20: 2e3c 2f64 6976 3e0a 3c64 6976 2063 6c61 .
.
No \n-00000e50: 4d61 7463 6865 733c 2f64 6976 3e0a 3c2f Matches
..
..
..
.\n-00000e90: 2020 3c64 6976 2063 6c61 7373 3d22 6865
sc\n-00000ec0: 6865 6d65 2e68 3c2f 6469 763e 3c2f 6469 heme.h
.
.
.Go to the do\n-00000f20: 6375 6d65 6e74 6174 696f 6e20 6f66 2074 cumentation of t\n-00000f30: 6869 7320 6669 6c65 2e3c 2f61 3e3c 6469 his file.
1\n-00000fa0: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 //<\n-00000fc0: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
.<\n-00000fe0: 6120 6964 3d22 6c30 3030 3032 2220 6e61 a id=\"l00002\" na\n-00000ff0: 6d65 3d22 6c30 3030 3032 223e 3c2f 613e me=\"l00002\">\n-00001000: 3c73 7061 6e20 636c 6173 733d 226c 696e 2// Copy\n-00001040: 7269 6768 7420 3230 3134 2044 7265 616d right 2014 Dream\n-00001050: 576f 726b 7320 416e 696d 6174 696f 6e20 Works Animation \n-00001060: 4c4c 432e 3c2f 7370 616e 3e3c 2f64 6976 LLC..
3<\n-000010c0: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>//
.<\n-00001120: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00001130: 6e6f 223e 2020 2020 343c 2f73 7061 6e3e no\"> 4
\n-00001140: 3c73 7061 6e20 636c 6173 733d 2263 6f6d // Licen\n-00001160: 7365 6420 756e 6465 7220 7468 6520 4170 sed under the Ap\n-00001170: 6163 6865 204c 6963 656e 7365 2c20 5665 ache License, Ve\n-00001180: 7273 696f 6e20 322e 3020 2874 6865 2026 rsion 2.0 (the &\n-00001190: 7175 6f74 3b41 7061 6368 6520 4c69 6365 quot;Apache Lice\n-000011a0: 6e73 6526 7175 6f74 3b29 3c2f 7370 616e nse")
.
\n-00001200: 2020 2020 353c 2f73 7061 6e3e 3c73 7061 5// with the \n-00001230: 666f 6c6c 6f77 696e 6720 6d6f 6469 6669 following modifi\n-00001240: 6361 7469 6f6e 3b20 796f 7520 6d61 7920 cation; you may \n-00001250: 6e6f 7420 7573 6520 7468 6973 2066 696c not use this fil\n-00001260: 6520 6578 6365 7074 2069 6e3c 2f73 7061 e except in
.
6// complian\n-000012f0: 6365 2077 6974 6820 7468 6520 4170 6163 ce with the Apac\n-00001300: 6865 204c 6963 656e 7365 2061 6e64 2074 he License and t\n-00001310: 6865 2066 6f6c 6c6f 7769 6e67 206d 6f64 he following mod\n-00001320: 6966 6963 6174 696f 6e20 746f 2069 743a ification to it:\n-00001330: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n-00001350: 3c61 2069 643d 226c 3030 3030 3722 206e 7// Sec\n-000013b0: 7469 6f6e 2036 2e20 5472 6164 656d 6172 tion 6. Trademar\n-000013c0: 6b73 2e20 6973 2064 656c 6574 6564 2061 ks. is deleted a\n-000013d0: 6e64 2072 6570 6c61 6365 6420 7769 7468 nd replaced with\n-000013e0: 3a3c 2f73 7061 6e3e 3c2f 6469 763e 0a3c :
.<\n-000013f0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00001400: 3e3c 6120 6964 3d22 6c30 3030 3038 2220 > 8//.
9// 6. Trade\n-000014e0: 6d61 726b 732e 2054 6869 7320 4c69 6365 marks. This Lice\n-000014f0: 6e73 6520 646f 6573 206e 6f74 2067 7261 nse does not gra\n-00001500: 6e74 2070 6572 6d69 7373 696f 6e20 746f nt permission to\n-00001510: 2075 7365 2074 6865 2074 7261 6465 3c2f use the trade
.<\n-00001560: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00001570: 6e6f 223e 2020 2031 303c 2f73 7061 6e3e no\"> 10\n-00001580: 3c73 7061 6e20 636c 6173 733d 2263 6f6d // na\n-000015a0: 6d65 732c 2074 7261 6465 6d61 726b 732c mes, trademarks,\n-000015b0: 2073 6572 7669 6365 206d 6172 6b73 2c20 service marks, \n-000015c0: 6f72 2070 726f 6475 6374 206e 616d 6573 or product names\n-000015d0: 206f 6620 7468 6520 4c69 6365 6e73 6f72 of the Licensor\n-000015e0: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64 .\n-00001600: 3c61 2069 643d 226c 3030 3031 3122 206e 11// \n-00001660: 616e 6420 6974 7320 6166 6669 6c69 6174 and its affiliat\n-00001670: 6573 2c20 6578 6365 7074 2061 7320 7265 es, except as re\n-00001680: 7175 6972 6564 2074 6f20 636f 6d70 6c79 quired to comply\n-00001690: 2077 6974 6820 5365 6374 696f 6e20 3428 with Section 4(\n-000016a0: 6329 206f 663c 2f73 7061 6e3e 3c2f 6469 c) of.
12\n-00001700: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 // \n-00001720: 2020 2020 2074 6865 204c 6963 656e 7365 the License\n-00001730: 2061 6e64 2074 6f20 7265 7072 6f64 7563 and to reproduc\n-00001740: 6520 7468 6520 636f 6e74 656e 7420 6f66 e the content of\n-00001750: 2074 6865 204e 4f54 4943 4520 6669 6c65 the NOTICE file\n-00001760: 2e3c 2f73 7061 6e3e 3c2f 6469 763e 0a3c .
.<\n-00001770: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00001780: 3e3c 6120 6964 3d22 6c30 3030 3133 2220 > 13//.
14// You may \n-00001860: 6f62 7461 696e 2061 2063 6f70 7920 6f66 obtain a copy of\n-00001870: 2074 6865 2041 7061 6368 6520 4c69 6365 the Apache Lice\n-00001880: 6e73 6520 6174 3c2f 7370 616e 3e3c 2f64 nse at.
1\n-000018e0: 353c 2f73 7061 6e3e 3c73 7061 6e20 636c 5//\n-00001900: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n-00001920: 3c61 2069 643d 226c 3030 3031 3622 206e 16// \n-00001980: 2068 7474 703a 2f2f 7777 772e 6170 6163 http://www.apac\n-00001990: 6865 2e6f 7267 2f6c 6963 656e 7365 732f he.org/licenses/\n-000019a0: 4c49 4345 4e53 452d 322e 303c 2f73 7061 LICENSE-2.0
.
17//.
18\n-00001a80: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 // \n-00001aa0: 2020 556e 6c65 7373 2072 6571 7569 7265 Unless require\n-00001ab0: 6420 6279 2061 7070 6c69 6361 626c 6520 d by applicable \n-00001ac0: 6c61 7720 6f72 2061 6772 6565 6420 746f law or agreed to\n-00001ad0: 2069 6e20 7772 6974 696e 672c 2073 6f66 in writing, sof\n-00001ae0: 7477 6172 653c 2f73 7061 6e3e 3c2f 6469 tware.
19\n-00001b40: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 // \n-00001b60: 2020 6469 7374 7269 6275 7465 6420 756e distributed un\n-00001b70: 6465 7220 7468 6520 4170 6163 6865 204c der the Apache L\n-00001b80: 6963 656e 7365 2077 6974 6820 7468 6520 icense with the \n-00001b90: 6162 6f76 6520 6d6f 6469 6669 6361 7469 above modificati\n-00001ba0: 6f6e 2069 733c 2f73 7061 6e3e 3c2f 6469 on is.
20\n-00001c00: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 // \n-00001c20: 2020 6469 7374 7269 6275 7465 6420 6f6e distributed on\n-00001c30: 2061 6e20 2671 756f 743b 4153 2049 5326 an "AS IS&\n-00001c40: 7175 6f74 3b20 4241 5349 532c 2057 4954 quot; BASIS, WIT\n-00001c50: 484f 5554 2057 4152 5241 4e54 4945 5320 HOUT WARRANTIES \n-00001c60: 4f52 2043 4f4e 4449 5449 4f4e 5320 4f46 OR CONDITIONS OF\n-00001c70: 2041 4e59 3c2f 7370 616e 3e3c 2f64 6976 ANY.
21<\n-00001cd0: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>// \n-00001cf0: 204b 494e 442c 2065 6974 6865 7220 6578 KIND, either ex\n-00001d00: 7072 6573 7320 6f72 2069 6d70 6c69 6564 press or implied\n-00001d10: 2e20 5365 6520 7468 6520 4170 6163 6865 . See the Apache\n-00001d20: 204c 6963 656e 7365 2066 6f72 2074 6865 License for the\n-00001d30: 2073 7065 6369 6669 633c 2f73 7061 6e3e specific\n-00001d40: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00001d90: 2020 3232 3c2f 7370 616e 3e3c 7370 616e 22// language g\n-00001dc0: 6f76 6572 6e69 6e67 2070 6572 6d69 7373 overning permiss\n-00001dd0: 696f 6e73 2061 6e64 206c 696d 6974 6174 ions and limitat\n-00001de0: 696f 6e73 2075 6e64 6572 2074 6865 2041 ions under the A\n-00001df0: 7061 6368 6520 4c69 6365 6e73 652e 3c2f pache License.
.<\n-00001e40: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00001e50: 6e6f 223e 2020 2032 333c 2f73 7061 6e3e no\"> 23\n-00001e60: 3c73 7061 6e20 636c 6173 733d 2263 6f6d //<\n-00001e80: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00001ed0: 2032 343c 2f73 7061 6e3e 3c73 7061 6e20 24#ifndef OPE\n-00001f00: 4e53 5542 4449 5633 5f53 4443 5f53 4348 NSUBDIV3_SDC_SCH\n-00001f10: 454d 455f 483c 2f73 7061 6e3e 3c2f 6469 EME_H.
25\n-00001f70: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 #define OPENSU\n-00001fa0: 4244 4956 335f 5344 435f 5343 4845 4d45 BDIV3_SDC_SCHEME\n-00001fb0: 5f48 3c2f 7370 616e 3e3c 2f64 6976 3e0a _H
.\n-00001fc0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n-00002050: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00002060: 6e6f 223e 2020 2032 373c 2f73 7061 6e3e no\"> 27\n-00002070: 3c73 7061 6e20 636c 6173 733d 2270 7265 #incl\n-00002090: 7564 6520 2671 756f 743b 2e2e 2f76 6572 ude "../ver\n-000020a0: 7369 6f6e 2e68 2671 756f 743b 3c2f 7370 sion.h"
.
28 <\n-00002110: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00002160: 2032 393c 2f73 7061 6e3e 3c73 7061 6e20 29#include &q\n-00002190: 756f 743b 2e2e 2f73 6463 2f74 7970 6573 uot;../sdc/types\n-000021a0: 2e68 2671 756f 743b 3c2f 7370 616e 3e3c .h"<\n-000021b0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00002200: 2033 303c 2f73 7061 6e3e 3c73 7061 6e20 30#include &q\n-00002230: 756f 743b 2e2e 2f73 6463 2f6f 7074 696f uot;../sdc/optio\n-00002240: 6e73 2e68 2671 756f 743b 3c2f 7370 616e ns.h"
.
\n-000022a0: 2020 2033 313c 2f73 7061 6e3e 3c73 7061 31#include \n-000022d0: 2671 756f 743b 2e2e 2f73 6463 2f63 7265 "../sdc/cre\n-000022e0: 6173 652e 6826 7175 6f74 3b3c 2f73 7061 ase.h"
.
32 .....\n+00000310: 0a3c 7363 7269 7074 2074 7970 653d 2274 ..<\n+00000350: 7363 7269 7074 2074 7970 653d 2274 6578 script type=\"tex\n+00000360: 742f 6a61 7661 7363 7269 7074 2220 7372 t/javascript\" sr\n+00000370: 633d 226e 6176 7472 6565 2e6a 7322 3e3c c=\"navtree.js\"><\n+00000380: 2f73 6372 6970 743e 0a3c 6c69 6e6b 2068 /script>...<\n+00000410: 7363 7269 7074 2074 7970 653d 2274 6578 script type=\"tex\n+00000420: 742f 6a61 7661 7363 7269 7074 2220 7372 t/javascript\" sr\n+00000430: 633d 2273 6561 7263 682f 7365 6172 6368 c=\"search/search\n+00000440: 2e6a 7322 3e3c 2f73 6372 6970 743e 0a3c .js\">.<\n+00000450: 6c69 6e6b 2068 7265 663d 2264 6f78 7967 link href=\"doxyg\n+00000460: 656e 2e63 7373 2220 7265 6c3d 2273 7479 en.css\" rel=\"sty\n+00000470: 6c65 7368 6565 7422 2074 7970 653d 2274 lesheet\" type=\"t\n+00000480: 6578 742f 6373 7322 202f 3e0a 3c6c 696e ext/css\" />....
.\n+00000530: 0a3c 7461 626c 6520 6365 6c6c 7370 6163 .. . . . . . .
<\n+00000590: 696d 6720 616c 743d 224c 6f67 6f22 2073 img alt=\"Logo\" s\n+000005a0: 7263 3d22 6f70 656e 7375 6264 6976 5f6c rc=\"opensubdiv_l\n+000005b0: 6f67 6f5f 6865 6164 6572 2e70 6e67 222f ogo_header.png\"/\n+000005c0: 3e3c 2f74 643e 0a20 203c 7464 2069 643d >.\n+000005e0: 2020 203c 6469 7620 6964 3d22 7072 6f6a
OpenSub\n+00000600: 6469 760a 2020 203c 2f64 6976 3e0a 2020 div.
. \n+00000610: 3c2f 7464 3e0a 203c 2f74 723e 0a20 3c2f
.\n+00000630: 3c2f 6469 763e 0a3c 212d 2d20 656e 6420
..\n+00000650: 3c21 2d2d 2047 656e 6572 6174 6564 2062 .\n+00000750: 0a3c 7363 7269 7074 2074 7970 653d 2274 .......
.\n+00000d00: 0a3c 212d 2d20 6966 7261 6d65 2073 686f ..\n+00000d40: 3c64 6976 2069 643d 224d 5365 6172 6368
.\n+00000d60: 3c64 6976 2069 643d 224d 5365 6172 6368
.
.<\n+00000d90: 6469 7620 6964 3d22 5352 496e 6465 7822 div id=\"SRIndex\"\n+00000da0: 3e0a 3c64 6976 2069 643d 2253 5252 6573 >.
.\n+00000de0: 4c6f 6164 696e 672e 2e2e 3c2f 6469 763e Loading...
\n+00000df0: 0a3c 6469 7620 636c 6173 733d 2253 5253 .
Searching.\n+00000e20: 2e2e 3c2f 6469 763e 0a3c 6469 7620 636c ..
.
No\n+00000e50: 204d 6174 6368 6573 3c2f 6469 763e 0a3c Matches
.<\n+00000e60: 2f64 6976 3e0a 3c2f 6469 763e 0a3c 2f64 /div>.
..
..\n+00000e90: 0a20 203c 6469 7620 636c 6173 733d 2268 .
o\n+00000ec0: 7074 696f 6e73 2e68 3c2f 6469 763e 3c2f ptions.h
.
.
.\n+00000f00: 3c61 2068 7265 663d 2261 3030 3737 302e Go to the \n+00000f20: 646f 6375 6d65 6e74 6174 696f 6e20 6f66 documentation of\n+00000f30: 2074 6869 7320 6669 6c65 2e3c 2f61 3e3c this file.<\n+00000f40: 6469 7620 636c 6173 733d 2266 7261 676d div class=\"fragm\n+00000f50: 656e 7422 3e3c 6469 7620 636c 6173 733d ent\">
\n+00000fa0: 2031 3c2f 7370 616e 3e3c 7370 616e 2063 1/\n+00000fc0: 2f3c 2f73 7061 6e3e 3c2f 6469 763e 0a3c /
.<\n+00000fd0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00000fe0: 3e3c 6120 6964 3d22 6c30 3030 3032 2220 > 2// Co\n+00001040: 7079 7269 6768 7420 3230 3134 2044 7265 pyright 2014 Dre\n+00001050: 616d 576f 726b 7320 416e 696d 6174 696f amWorks Animatio\n+00001060: 6e20 4c4c 432e 3c2f 7370 616e 3e3c 2f64 n LLC..
\n+000010c0: 333c 2f73 7061 6e3e 3c73 7061 6e20 636c 3//\n+000010e0: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n+00001100: 3c61 2069 643d 226c 3030 3030 3422 206e 4// Lic\n+00001160: 656e 7365 6420 756e 6465 7220 7468 6520 ensed under the \n+00001170: 4170 6163 6865 204c 6963 656e 7365 2c20 Apache License, \n+00001180: 5665 7273 696f 6e20 322e 3020 2874 6865 Version 2.0 (the\n+00001190: 2026 7175 6f74 3b41 7061 6368 6520 4c69 "Apache Li\n+000011a0: 6365 6e73 6526 7175 6f74 3b29 3c2f 7370 cense")
.
5// with th\n+00001230: 6520 666f 6c6c 6f77 696e 6720 6d6f 6469 e following modi\n+00001240: 6669 6361 7469 6f6e 3b20 796f 7520 6d61 fication; you ma\n+00001250: 7920 6e6f 7420 7573 6520 7468 6973 2066 y not use this f\n+00001260: 696c 6520 6578 6365 7074 2069 6e3c 2f73 ile except in
.
6<\n+000012d0: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n+000012e0: 656e 7422 3e2f 2f20 2020 636f 6d70 6c69 ent\">// compli\n+000012f0: 616e 6365 2077 6974 6820 7468 6520 4170 ance with the Ap\n+00001300: 6163 6865 204c 6963 656e 7365 2061 6e64 ache License and\n+00001310: 2074 6865 2066 6f6c 6c6f 7769 6e67 206d the following m\n+00001320: 6f64 6966 6963 6174 696f 6e20 746f 2069 odification to i\n+00001330: 743a 3c2f 7370 616e 3e3c 2f64 6976 3e0a t:
.\n+00001340: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 \n+000013f0: 0a3c 6469 7620 636c 6173 733d 226c 696e ..
9<\n+000014c0: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n+000014d0: 656e 7422 3e2f 2f20 2020 362e 2054 7261 ent\">// 6. Tra\n+000014e0: 6465 6d61 726b 732e 2054 6869 7320 4c69 demarks. This Li\n+000014f0: 6365 6e73 6520 646f 6573 206e 6f74 2067 cense does not g\n+00001500: 7261 6e74 2070 6572 6d69 7373 696f 6e20 rant permission \n+00001510: 746f 2075 7365 2074 6865 2074 7261 6465 to use the trade\n+00001520: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n+00001540: 3c61 2069 643d 226c 3030 3031 3022 206e 10// \n+000015a0: 6e61 6d65 732c 2074 7261 6465 6d61 726b names, trademark\n+000015b0: 732c 2073 6572 7669 6365 206d 6172 6b73 s, service marks\n+000015c0: 2c20 6f72 2070 726f 6475 6374 206e 616d , or product nam\n+000015d0: 6573 206f 6620 7468 6520 4c69 6365 6e73 es of the Licens\n+000015e0: 6f72 3c2f 7370 616e 3e3c 2f64 6976 3e0a or
.\n+000015f0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n+00001620: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 11// \n+00001660: 2020 616e 6420 6974 7320 6166 6669 6c69 and its affili\n+00001670: 6174 6573 2c20 6578 6365 7074 2061 7320 ates, except as \n+00001680: 7265 7175 6972 6564 2074 6f20 636f 6d70 required to comp\n+00001690: 6c79 2077 6974 6820 5365 6374 696f 6e20 ly with Section \n+000016a0: 3428 6329 206f 663c 2f73 7061 6e3e 3c2f 4(c) of.
\n+00001700: 3132 3c2f 7370 616e 3e3c 7370 616e 2063 12/\n+00001720: 2f20 2020 2020 2074 6865 204c 6963 656e / the Licen\n+00001730: 7365 2061 6e64 2074 6f20 7265 7072 6f64 se and to reprod\n+00001740: 7563 6520 7468 6520 636f 6e74 656e 7420 uce the content \n+00001750: 6f66 2074 6865 204e 4f54 4943 4520 6669 of the NOTICE fi\n+00001760: 6c65 2e3c 2f73 7061 6e3e 3c2f 6469 763e le.
\n+00001770: 0a3c 6469 7620 636c 6173 733d 226c 696e ..
14<\n+00001840: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n+00001850: 656e 7422 3e2f 2f20 2020 596f 7520 6d61 ent\">// You ma\n+00001860: 7920 6f62 7461 696e 2061 2063 6f70 7920 y obtain a copy \n+00001870: 6f66 2074 6865 2041 7061 6368 6520 4c69 of the Apache Li\n+00001880: 6365 6e73 6520 6174 3c2f 7370 616e 3e3c cense at<\n+00001890: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n+000018e0: 2031 353c 2f73 7061 6e3e 3c73 7061 6e20 15\n+00001900: 2f2f 3c2f 7370 616e 3e3c 2f64 6976 3e0a //
.\n+00001910: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
17<\n+00001a10: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n+00001a20: 656e 7422 3e2f 2f3c 2f73 7061 6e3e 3c2f ent\">//.
\n+00001a80: 3138 3c2f 7370 616e 3e3c 7370 616e 2063 18/\n+00001aa0: 2f20 2020 556e 6c65 7373 2072 6571 7569 / Unless requi\n+00001ab0: 7265 6420 6279 2061 7070 6c69 6361 626c red by applicabl\n+00001ac0: 6520 6c61 7720 6f72 2061 6772 6565 6420 e law or agreed \n+00001ad0: 746f 2069 6e20 7772 6974 696e 672c 2073 to in writing, s\n+00001ae0: 6f66 7477 6172 653c 2f73 7061 6e3e 3c2f oftware.
\n+00001b40: 3139 3c2f 7370 616e 3e3c 7370 616e 2063 19/\n+00001b60: 2f20 2020 6469 7374 7269 6275 7465 6420 / distributed \n+00001b70: 756e 6465 7220 7468 6520 4170 6163 6865 under the Apache\n+00001b80: 204c 6963 656e 7365 2077 6974 6820 7468 License with th\n+00001b90: 6520 6162 6f76 6520 6d6f 6469 6669 6361 e above modifica\n+00001ba0: 7469 6f6e 2069 733c 2f73 7061 6e3e 3c2f tion is.
\n+00001c00: 3230 3c2f 7370 616e 3e3c 7370 616e 2063 20/\n+00001c20: 2f20 2020 6469 7374 7269 6275 7465 6420 / distributed \n+00001c30: 6f6e 2061 6e20 2671 756f 743b 4153 2049 on an "AS I\n+00001c40: 5326 7175 6f74 3b20 4241 5349 532c 2057 S" BASIS, W\n+00001c50: 4954 484f 5554 2057 4152 5241 4e54 4945 ITHOUT WARRANTIE\n+00001c60: 5320 4f52 2043 4f4e 4449 5449 4f4e 5320 S OR CONDITIONS \n+00001c70: 4f46 2041 4e59 3c2f 7370 616e 3e3c 2f64 OF ANY.
2\n+00001cd0: 313c 2f73 7061 6e3e 3c73 7061 6e20 636c 1//\n+00001cf0: 2020 204b 494e 442c 2065 6974 6865 7220 KIND, either \n+00001d00: 6578 7072 6573 7320 6f72 2069 6d70 6c69 express or impli\n+00001d10: 6564 2e20 5365 6520 7468 6520 4170 6163 ed. See the Apac\n+00001d20: 6865 204c 6963 656e 7365 2066 6f72 2074 he License for t\n+00001d30: 6865 2073 7065 6369 6669 633c 2f73 7061 he specific
.
22// language\n+00001dc0: 2067 6f76 6572 6e69 6e67 2070 6572 6d69 governing permi\n+00001dd0: 7373 696f 6e73 2061 6e64 206c 696d 6974 ssions and limit\n+00001de0: 6174 696f 6e73 2075 6e64 6572 2074 6865 ations under the\n+00001df0: 2041 7061 6368 6520 4c69 6365 6e73 652e Apache License.\n+00001e00: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n+00001e20: 3c61 2069 643d 226c 3030 3032 3322 206e 23//
.
\n+00001ed0: 2020 2032 343c 2f73 7061 6e3e 3c73 7061 24#ifndef O\n+00001f00: 5045 4e53 5542 4449 5633 5f53 4443 5f4f PENSUBDIV3_SDC_O\n+00001f10: 5054 494f 4e53 5f48 3c2f 7370 616e 3e3c PTIONS_H<\n+00001f20: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n+00001f70: 2032 353c 2f73 7061 6e3e 3c73 7061 6e20 25#define OPE\n+00001fa0: 4e53 5542 4449 5633 5f53 4443 5f4f 5054 NSUBDIV3_SDC_OPT\n+00001fb0: 494f 4e53 5f48 3c2f 7370 616e 3e3c 2f64 IONS_H.
2\n+00002010: 363c 2f73 7061 6e3e 203c 2f64 6976 3e0a 6
.\n+00002020: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .\n+000020d0: 3c61 2069 643d 226c 3030 3032 3822 206e 28
..<\n+00002210: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00002220: 6e6f 223e 2020 2033 303c 2f73 7061 6e3e no\"> 30\n+00002230: 3c73 7061 6e20 636c 6173 733d 226b 6579 namespace \n+00002250: 3c2f 7370 616e 3e4f 5045 4e53 5542 4449 OPENSUBDI\n+00002260: 565f 5645 5253 494f 4e20 7b3c 2f64 6976 V_VERSION {.
31<\n+000022c0: 2f73 7061 6e3e 203c 2f64 6976 3e0a 3c64 /span>
.\n+000022e0: 3c61 2069 643d 226c 3030 3033 3222 206e 32namespac\n+00002340: 6520 3c2f 7370 616e 3e53 6463 207b 3c2f e Sdc {.
\n-000023a0: 3333 3c2f 7370 616e 3e3c 7370 616e 2063 33#include <\n-000023d0: 3b63 6173 7365 7274 2667 743b 3c2f 7370 ;cassert>
.
34#includ\n-00002460: 6520 266c 743b 6373 7464 6c69 6226 6774 e <cstdlib>\n-00002470: 3b3c 2f73 7061 6e3e 3c2f 6469 763e 0a3c ;
.<\n-00002480: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00002490: 3e3c 6120 6964 3d22 6c30 3030 3335 2220 > 35#i\n-000024f0: 6e63 6c75 6465 2026 6c74 3b76 6563 746f nclude <vecto\n-00002500: 7226 6774 3b3c 2f73 7061 6e3e 3c2f 6469 r>.
36\n-00002560: 3c2f 7370 616e 3e20 3c2f 6469 763e 0a3c
.<\n-00002570: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00002580: 3e3c 6120 6964 3d22 6c30 3030 3337 2220 > 37namespa\n-000025e0: 6365 203c 2f73 7061 6e3e 3c61 2063 6c61 ce OpenSu\n-00002620: 6264 6976 3c2f 613e 207b 3c2f 6469 763e bdiv {
\n-00002630: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00002660: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 38names\n-000026a0: 7061 6365 203c 2f73 7061 6e3e 4f50 454e pace OPEN\n-000026b0: 5355 4244 4956 5f56 4552 5349 4f4e 207b SUBDIV_VERSION {\n-000026c0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00002710: 2020 3339 3c2f 7370 616e 3e20 3c2f 6469 39 .
40\n-00002770: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 nam\n-00002790: 6573 7061 6365 203c 2f73 7061 6e3e 5364 espace Sd\n-000027a0: 6320 7b3c 2f64 6976 3e0a 3c64 6976 2063 c {
.
41 <\n-00002800: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00002850: 2036 353c 2f73 7061 6e3e 3c73 7061 6e20 65\n-00002870: 7465 6d70 6c61 7465 3c2f 7370 616e 3e20 template \n-00002880: 266c 743b 5363 6865 6d65 5479 7065 2053 <SchemeType S\n-00002890: 4348 454d 455f 5459 5045 2667 743b 3c2f CHEME_TYPE>.
.<\n-00002920: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00002930: 6e6f 223e 3c61 2063 6c61 7373 3d22 6c69 no\"> 66\n-00002960: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 cla\n-00002980: 7373 203c 2f73 7061 6e3e 3c61 2063 6c61 ss Scheme\n-000029c0: 207b 3c2f 6469 763e 0a3c 6469 7620 636c {
.
67 .
\n-00002a70: 3638 3c2f 7370 616e 3e3c 7370 616e 2063 68p\n-00002a90: 7562 6c69 633c 2f73 7061 6e3e 3a3c 2f64 ublic:.
6\n-00002af0: 393c 2f73 7061 6e3e 203c 2f64 6976 3e0a 9
.\n-00002b00: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n-00002b30: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> \n-00002b90: 3730 3c2f 613e 3c2f 7370 616e 3e20 2020 70 \n-00002ba0: 203c 6120 636c 6173 733d 2263 6f64 6520 Scheme() :\n-00002c00: 205f 6f70 7469 6f6e 7328 2920 7b20 7d3c _options() { }<\n-00002c10: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00002c60: 2037 313c 2f73 7061 6e3e 203c 2f64 6976 71 .
\n-00002d00: 2020 3732 3c2f 613e 3c2f 7370 616e 3e20 72 \n-00002d10: 2020 203c 6120 636c 6173 733d 2263 6f64 Scheme(<\n-00002d70: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-00002d80: 5f63 6c61 7373 2220 6872 6566 3d22 6130 _class\" href=\"a0\n-00002d90: 3133 3239 2e68 746d 6c22 3e4f 7074 696f 1329.html\">Optio\n-00002da0: 6e73 3c2f 613e 203c 7370 616e 2063 6c61 ns con\n-00002dc0: 7374 3c2f 7370 616e 3e26 616d 703b 206f st& o\n-00002dd0: 7074 696f 6e73 2920 3a20 5f6f 7074 696f ptions) : _optio\n-00002de0: 6e73 286f 7074 696f 6e73 2920 7b20 7d3c ns(options) { }<\n-00002df0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00002e40: 2037 333c 2f73 7061 6e3e 203c 2f64 6976 73 .
\n-00002ee0: 2020 3734 3c2f 613e 3c2f 7370 616e 3e20 74 \n-00002ef0: 2020 203c 6120 636c 6173 733d 2263 6f64 O\n-00002f20: 7074 696f 6e73 3c2f 613e 203c 6120 636c ptions GetO\n-00002f80: 7074 696f 6e73 3c2f 613e 2829 3c73 7061 ptions() const \n-00002fb0: 7b20 3c73 7061 6e20 636c 6173 733d 226b { retu\n-00002fd0: 726e 3c2f 7370 616e 3e20 5f6f 7074 696f rn _optio\n-00002fe0: 6e73 3b20 7d3c 2f64 6976 3e0a 3c64 6976 ns; }
.<\n-00003020: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00003030: 6e6f 223e 3c61 2063 6c61 7373 3d22 6c69 no\"> 75 void SetOption\n-00003110: 733c 2f61 3e28 3c73 7061 6e20 636c 6173 s(cons\n-00003130: 743c 2f73 7061 6e3e 203c 6120 636c 6173 t Options\n-00003170: 2661 6d70 3b20 6e65 774f 7074 696f 6e73 & newOptions\n-00003180: 2920 7b20 5f6f 7074 696f 6e73 203d 206e ) { _options = n\n-00003190: 6577 4f70 7469 6f6e 733b 207d 3c2f 6469 ewOptions; }.
76\n-000031f0: 3c2f 7370 616e 3e20 3c2f 6469 763e 0a3c
.<\n-00003200: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00003210: 3e3c 6120 6964 3d22 6c30 3030 3830 2220 > 80 tem\n-00003270: 706c 6174 653c 2f73 7061 6e3e 2026 6c74 plate <\n-00003280: 3b3c 7370 616e 2063 6c61 7373 3d22 6b65 ;typename<\n-000032a0: 2f73 7061 6e3e 2046 4143 452c 203c 7370 /span> FACE, typename MASK>.
81<\n-00003330: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> void \n-00003360: 3c61 2063 6c61 7373 3d22 636f 6465 2068 ComputeFaceVert\n-000033c0: 6578 4d61 736b 3c2f 613e 2846 4143 4520 exMask(FACE \n-000033d0: 3c73 7061 6e20 636c 6173 733d 226b 6579 const& faceNeig\n-00003400: 6862 6f72 686f 6f64 2c20 4d41 534b 2661 hborhood, MASK&a\n-00003410: 6d70 3b20 6661 6365 5665 7274 6578 4d61 mp; faceVertexMa\n-00003420: 736b 2920 3c73 7061 6e20 636c 6173 733d sk) const<\n-00003440: 2f73 7061 6e3e 3b3c 2f64 6976 3e0a 3c64 /span>;
.\n-00003460: 3c61 2069 643d 226c 3030 3038 3222 206e 82
.
98 \n-00003500: 2020 3c73 7061 6e20 636c 6173 733d 226b template\n-00003520: 3c2f 7370 616e 3e20 266c 743b 3c73 7061 <typename EDGE, ty\n-00003570: 7065 6e61 6d65 3c2f 7370 616e 3e20 4d41 pename MA\n-00003580: 534b 2667 743b 3c2f 6469 763e 0a3c 6469 SK>
.<\n-000035a0: 6120 6964 3d22 6c30 3030 3939 2220 6e61 a id=\"l00099\" na\n-000035b0: 6d65 3d22 6c30 3030 3939 223e 3c2f 613e me=\"l00099\">\n-000035c0: 3c73 7061 6e20 636c 6173 733d 226c 696e 99 v\n-00003600: 6f69 643c 2f73 7061 6e3e 203c 6120 636c oid Comp\n-00003660: 7574 6545 6467 6556 6572 7465 784d 6173 uteEdgeVertexMas\n-00003670: 6b3c 2f61 3e28 4544 4745 203c 7370 616e k(EDGE const&am\n-000036a0: 703b 2065 6467 654e 6569 6768 626f 7268 p; edgeNeighborh\n-000036b0: 6f6f 642c 204d 4153 4b26 616d 703b 2065 ood, MASK& e\n-000036c0: 6467 6556 6572 7465 784d 6173 6b2c 3c2f dgeVertexMask,.
1\n-00003720: 3030 3c2f 7370 616e 3e20 2020 2020 2020 00 \n-00003730: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00003740: 2020 2020 2020 2020 3c61 2063 6c61 7373 Crea\n-000037a0: 7365 3a3a 5275 6c65 3c2f 613e 2070 6172 se::Rule par\n-000037b0: 656e 7452 756c 6520 3d20 3c61 2063 6c61 entRule = Cre\n-00003830: 6173 653a 3a52 554c 455f 554e 4b4e 4f57 ase::RULE_UNKNOW\n-00003840: 4e3c 2f61 3e2c 3c2f 6469 763e 0a3c 6469 N,
.<\n-00003860: 6120 6964 3d22 6c30 3031 3031 2220 6e61 a id=\"l00101\" na\n-00003870: 6d65 3d22 6c30 3031 3031 223e 3c2f 613e me=\"l00101\">\n-00003880: 3c73 7061 6e20 636c 6173 733d 226c 696e 101 \n-000038b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000038c0: 3c61 2063 6c61 7373 3d22 636f 6465 2068 Crease::Rule\n-00003920: 3c2f 613e 2063 6869 6c64 5275 6c65 203d childRule =\n-00003930: 203c 6120 636c 6173 733d 2263 6f64 6520 Crease::RULE\n-000039b0: 5f55 4e4b 4e4f 574e 3c2f 613e 2920 3c73 _UNKNOWN) const\n-000039e0: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-00003a30: 2020 3130 323c 2f73 7061 6e3e 203c 2f64 102 .
11\n-00003a90: 323c 2f73 7061 6e3e 2020 2020 3c73 7061 2 template <type\n-00003ae0: 6e61 6d65 3c2f 7370 616e 3e20 5645 5254 name VERT\n-00003af0: 4558 2c20 3c73 7061 6e20 636c 6173 733d EX, typena\n-00003b10: 6d65 3c2f 7370 616e 3e20 4d41 534b 2667 me MASK&g\n-00003b20: 743b 3c2f 6469 763e 0a3c 6469 7620 636c t;
..
114 \n-00003cd0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00003ce0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00003cf0: 203c 6120 636c 6173 733d 2263 6f64 6520 Crease::Rul\n-00003d50: 653c 2f61 3e20 7061 7265 6e74 5275 6c65 e parentRule\n-00003d60: 203d 203c 6120 636c 6173 733d 2263 6f64 = Crease::RU\n-00003de0: 4c45 5f55 4e4b 4e4f 574e 3c2f 613e 2c3c LE_UNKNOWN,<\n-00003df0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00003e40: 3131 353c 2f73 7061 6e3e 2020 2020 2020 115 \n-00003e50: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00003e60: 2020 2020 2020 2020 2020 2020 2020 3c61 Crease::Rule childRule = <\n-00003ee0: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-00003ef0: 5f65 6e75 6d76 616c 7565 2220 6872 6566 _enumvalue\" href\n-00003f00: 3d22 6130 3133 3235 2e68 746d 6c23 6131 =\"a01325.html#a1\n-00003f10: 3166 6364 3531 6566 3836 3131 3866 3635 1fcd51ef86118f65\n-00003f20: 6536 3033 6331 3437 3433 3737 6137 3861 e603c1474377a78a\n-00003f30: 6232 3939 6165 6662 3236 3031 3361 3739 b299aefb26013a79\n-00003f40: 6435 3231 3931 6137 3838 3766 6561 3533 d52191a7887fea53\n-00003f50: 223e 4372 6561 7365 3a3a 5255 4c45 5f55 \">Crease::RULE_U\n-00003f60: 4e4b 4e4f 574e 3c2f 613e 2920 3c73 7061 NKNOWN) const;<\n-00003f90: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00003fe0: 3131 363c 2f73 7061 6e3e 203c 2f64 6976 116 .
141<\n-00004040: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> \n-00004060: 7465 6d70 6c61 7465 3c2f 7370 616e 3e20 template \n-00004070: 266c 743b 3c73 7061 6e20 636c 6173 733d <typena\n-00004090: 6d65 3c2f 7370 616e 3e20 5645 5254 4558 me VERTEX\n-000040a0: 2c20 3c73 7061 6e20 636c 6173 733d 226b , typename\n-000040c0: 3c2f 7370 616e 3e20 4d41 534b 2667 743b MASK>\n-000040d0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00004120: 2031 3432 3c2f 7370 616e 3e20 2020 203c 142 <\n-00004130: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00004140: 6f72 6474 7970 6522 3e76 6f69 643c 2f73 ordtype\">void ComputeVer\n-000041b0: 7465 784c 696d 6974 4d61 736b 3c2f 613e texLimitMask\n-000041c0: 2856 4552 5445 5820 3c73 7061 6e20 636c (VERTEX co\n-000041e0: 6e73 743c 2f73 7061 6e3e 2661 6d70 3b20 nst& \n-000041f0: 7665 7274 6578 4e65 6967 6862 6f72 686f vertexNeighborho\n-00004200: 6f64 2c20 4d41 534b 2661 6d70 3b20 706f od, MASK& po\n-00004210: 7369 7469 6f6e 4d61 736b 2c3c 2f64 6976 sitionMask,.
143<\n-00004270: 2f73 7061 6e3e 2020 2020 2020 2020 2020 /span> \n-00004280: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00004290: 2020 2020 2020 3c61 2063 6c61 7373 3d22 Crease\n-000042f0: 3a3a 5275 6c65 3c2f 613e 2076 6572 7465 ::Rule verte\n-00004300: 7852 756c 6529 203c 7370 616e 2063 6c61 xRule) con\n-00004320: 7374 3c2f 7370 616e 3e3b 3c2f 6469 763e st;
\n-00004330: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n-000043a0: 6120 6964 3d22 6c30 3031 3435 2220 6e61 a id=\"l00145\" na\n-000043b0: 6d65 3d22 6c30 3031 3435 223e 3c2f 613e me=\"l00145\">\n-000043c0: 3c73 7061 6e20 636c 6173 733d 226c 696e 145 templ\n-00004400: 6174 653c 2f73 7061 6e3e 2026 6c74 3b3c ate <<\n-00004410: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00004420: 6f72 6422 3e74 7970 656e 616d 653c 2f73 ord\">typename VERTEX, typename MASK>.
146<\n-000044c0: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> void \n-000044f0: 3c61 2063 6c61 7373 3d22 636f 6465 2068 ComputeVertexLi\n-00004550: 6d69 744d 6173 6b3c 2f61 3e28 5645 5254 mitMask(VERT\n-00004560: 4558 203c 7370 616e 2063 6c61 7373 3d22 EX const& verte\n-00004590: 784e 6569 6768 626f 7268 6f6f 642c 204d xNeighborhood, M\n-000045a0: 4153 4b26 616d 703b 2070 6f73 6974 696f ASK& positio\n-000045b0: 6e4d 6173 6b2c 3c2f 6469 763e 0a3c 6469 nMask,
.<\n-000045d0: 6120 6964 3d22 6c30 3031 3437 2220 6e61 a id=\"l00147\" na\n-000045e0: 6d65 3d22 6c30 3031 3437 223e 3c2f 613e me=\"l00147\">\n-000045f0: 3c73 7061 6e20 636c 6173 733d 226c 696e 147 \n-00004620: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00004630: 204d 4153 4b26 616d 703b 2074 616e 6765 MASK& tange\n-00004640: 6e74 314d 6173 6b2c 204d 4153 4b26 616d nt1Mask, MASK&am\n-00004650: 703b 2074 616e 6765 6e74 324d 6173 6b2c p; tangent2Mask,\n-00004660: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-000046b0: 2031 3438 3c2f 7370 616e 3e20 2020 2020 148 \n-000046c0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000046d0: 2020 2020 2020 2020 2020 203c 6120 636c C\n-00004730: 7265 6173 653a 3a52 756c 653c 2f61 3e20 rease::Rule \n-00004740: 7665 7274 6578 5275 6c65 2920 3c73 7061 vertexRule) const;<\n-00004770: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-000047c0: 3134 393c 2f73 7061 6e3e 203c 2f64 6976 149 .
150<\n-00004820: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> \n-00004840: 2f2f 3c2f 7370 616e 3e3c 2f64 6976 3e0a //
.\n-00004850: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
\n-00004950: 2020 3135 323c 2f73 7061 6e3e 2020 2020 152 \n-00004960: 3c73 7061 6e20 636c 6173 733d 2263 6f6d //<\n-00004980: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>..<\n-00004b20: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00004b30: 3e3c 6120 6964 3d22 6c30 3031 3534 2220 > 15\n-00004bb0: 343c 2f61 3e3c 2f73 7061 6e3e 2020 2020 4 \n-00004bc0: 3c73 7061 6e20 636c 6173 733d 226b 6579 static in\n-00004c00: 743c 2f73 7061 6e3e 2020 203c 6120 636c t GetR\n-00004c60: 6567 756c 6172 4661 6365 5369 7a65 3c2f egularFaceSize();
.<\n-00004cb0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00004cc0: 6e6f 223e 3c61 2063 6c61 7373 3d22 6c69 no\"> 155 static\n-00004d40: 203c 7370 616e 2063 6c61 7373 3d22 6b65 int GetRegu\n-00004dc0: 6c61 7256 6572 7465 7856 616c 656e 6365 larVertexValence\n-00004dd0: 3c2f 613e 2829 3b3c 2f64 6976 3e0a 3c64 ();
.\n-00004df0: 3c61 2069 643d 226c 3030 3135 3622 206e 156\n-00004e70: 3c2f 613e 3c2f 7370 616e 3e20 2020 203c <\n-00004e80: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00004e90: 6f72 6422 3e73 7461 7469 633c 2f73 7061 ord\">static int\n-00004ec0: 3c2f 7370 616e 3e20 2020 3c61 2063 6c61 GetLo\n-00004f20: 6361 6c4e 6569 6768 626f 7268 6f6f 6453 calNeighborhoodS\n-00004f30: 697a 653c 2f61 3e28 293b 3c2f 6469 763e ize();
\n-00004f40: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n-00004fb0: 6120 6964 3d22 6c30 3031 3538 2220 6e61 a id=\"l00158\" na\n-00004fc0: 6d65 3d22 6c30 3031 3538 223e 3c2f 613e me=\"l00158\">\n-00004fd0: 3c73 7061 6e20 636c 6173 733d 226c 696e 158protected\n-00005010: 3c2f 7370 616e 3e3a 3c2f 6469 763e 0a3c :
.<\n-00005020: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00005030: 3e3c 6120 6964 3d22 6c30 3031 3539 2220 > 159
.
160 \n-000050d0: 2020 203c 7370 616e 2063 6c61 7373 3d22 //
.
161 \n-00005150: 203c 7370 616e 2063 6c61 7373 3d22 636f // Suppo\n-00005170: 7274 696e 6720 696e 7465 726e 616c 206d rting internal m\n-00005180: 6574 686f 6473 202d 2d20 6f70 7469 6f6e ethods -- option\n-00005190: 616c 6c79 2069 6d70 6c65 6d65 6e74 6564 ally implemented\n-000051a0: 2c20 6465 7065 6e64 696e 6720 6f6e 2073 , depending on s\n-000051b0: 7065 6369 616c 697a 6174 696f 6e3a 3c2f pecialization:
.<\n-00005200: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00005210: 6e6f 223e 2020 3136 323c 2f73 7061 6e3e no\"> 162\n-00005220: 2020 2020 3c73 7061 6e20 636c 6173 733d //
.
163 <\n-000052a0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-000052f0: 3136 343c 2f73 7061 6e3e 2020 2020 3c73 164 // Subdivis\n-00005320: 696f 6e2f 7265 6669 6e65 6d65 6e74 206d ion/refinement m\n-00005330: 6173 6b73 202d 2d20 7477 6f20 666f 7220 asks -- two for \n-00005340: 6564 6765 2d76 6572 7469 6365 7320 616e edge-vertices an\n-00005350: 6420 7468 7265 6520 666f 7220 7665 7274 d three for vert\n-00005360: 6578 2d76 6572 7469 6365 733a 3c2f 7370 ex-vertices:
.
165 \n-000053d0: 2020 3c73 7061 6e20 636c 6173 733d 2263 //
.
\n-00005440: 2020 3136 363c 2f73 7061 6e3e 2020 2020 166 \n-00005450: 3c73 7061 6e20 636c 6173 733d 226b 6579 template <\n-00005490: 7479 7065 6e61 6d65 3c2f 7370 616e 3e20 typename \n-000054a0: 4544 4745 2c20 3c73 7061 6e20 636c 6173 EDGE, type\n-000054c0: 6e61 6d65 3c2f 7370 616e 3e20 4d41 534b name MASK\n-000054d0: 2667 743b 3c2f 6469 763e 0a3c 6469 7620 >
.
167 \n-00005530: 2020 203c 7370 616e 2063 6c61 7373 3d22 voi\n-00005550: 643c 2f73 7061 6e3e 203c 6120 636c 6173 d assign\n-000055b0: 4372 6561 7365 4d61 736b 466f 7245 6467 CreaseMaskForEdg\n-000055c0: 653c 2f61 3e28 4544 4745 203c 7370 616e e(EDGE const&am\n-000055f0: 703b 2065 6467 652c 204d 4153 4b26 616d p; edge, MASK&am\n-00005600: 703b 206d 6173 6b29 203c 7370 616e 2063 p; mask) c\n-00005620: 6f6e 7374 3c2f 7370 616e 3e3b 3c2f 6469 onst;.
168\n-00005680: 3c2f 7370 616e 3e20 2020 203c 7370 616e template\n-000056b0: 2026 6c74 3b3c 7370 616e 2063 6c61 7373 <typen\n-000056d0: 616d 653c 2f73 7061 6e3e 2045 4447 452c ame EDGE,\n-000056e0: 203c 7370 616e 2063 6c61 7373 3d22 6b65 typename<\n-00005700: 2f73 7061 6e3e 204d 4153 4b26 6774 3b3c /span> MASK><\n-00005710: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
169 void as\n-00005830: 7369 676e 536d 6f6f 7468 4d61 736b 466f signSmoothMaskFo\n-00005840: 7245 6467 653c 2f61 3e28 4544 4745 203c rEdge(EDGE <\n-00005850: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00005860: 6f72 6422 3e63 6f6e 7374 3c2f 7370 616e ord\">const& edge, MAS\n-00005880: 4b26 616d 703b 206d 6173 6b29 203c 7370 K& mask) const;\n-000058b0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00005900: 2031 3730 3c2f 7370 616e 3e20 3c2f 6469 170 .
171\n-00005960: 3c2f 7370 616e 3e20 2020 203c 7370 616e template\n-00005990: 2026 6c74 3b3c 7370 616e 2063 6c61 7373 <typen\n-000059b0: 616d 653c 2f73 7061 6e3e 2056 4552 5445 ame VERTE\n-000059c0: 582c 203c 7370 616e 2063 6c61 7373 3d22 X, typenam\n-000059e0: 653c 2f73 7061 6e3e 204d 4153 4b26 6774 e MASK>\n-000059f0: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-00005a40: 2020 3137 323c 2f73 7061 6e3e 2020 2020 172 \n-00005a50: 3c73 7061 6e20 636c 6173 733d 226b 6579 void assignCor\n-00005ad0: 6e65 724d 6173 6b46 6f72 5665 7274 6578 nerMaskForVertex\n-00005ae0: 3c2f 613e 2856 4552 5445 5820 3c73 7061 (VERTEX const&a\n-00005b10: 6d70 3b20 6564 6765 2c20 4d41 534b 2661 mp; edge, MASK&a\n-00005b20: 6d70 3b20 6d61 736b 2920 3c73 7061 6e20 mp; mask) \n-00005b40: 636f 6e73 743c 2f73 7061 6e3e 3b3c 2f64 const;.
17\n-00005ba0: 333c 2f73 7061 6e3e 2020 2020 3c73 7061 3 template <type\n-00005bf0: 6e61 6d65 3c2f 7370 616e 3e20 5645 5254 name VERT\n-00005c00: 4558 2c20 3c73 7061 6e20 636c 6173 733d EX, typena\n-00005c20: 6d65 3c2f 7370 616e 3e20 4d41 534b 2667 me MASK&g\n-00005c30: 743b 3c2f 6469 763e 0a3c 6469 7620 636c t;
.
174<\n-00005cd0: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> void \n-00005d00: 3c61 2063 6c61 7373 3d22 636f 6465 2068 assignCreaseMas\n-00005d60: 6b46 6f72 5665 7274 6578 3c2f 613e 2856 kForVertex(V\n-00005d70: 4552 5445 5820 3c73 7061 6e20 636c 6173 ERTEX cons\n-00005d90: 743c 2f73 7061 6e3e 2661 6d70 3b20 6564 t& ed\n-00005da0: 6765 2c20 4d41 534b 2661 6d70 3b20 6d61 ge, MASK& ma\n-00005db0: 736b 2c20 3c73 7061 6e20 636c 6173 733d sk, in\n-00005dd0: 743c 2f73 7061 6e3e 203c 7370 616e 2063 t c\n-00005df0: 6f6e 7374 3c2f 7370 616e 3e20 6372 6561 onst crea\n-00005e00: 7365 456e 6473 5b32 5d29 203c 7370 616e seEnds[2]) const;.
1\n-00005e80: 3735 3c2f 7370 616e 3e20 2020 203c 7370 75 template <typ\n-00005ed0: 656e 616d 653c 2f73 7061 6e3e 2056 4552 ename VER\n-00005ee0: 5445 582c 203c 7370 616e 2063 6c61 7373 TEX, typen\n-00005f00: 616d 653c 2f73 7061 6e3e 204d 4153 4b26 ame MASK&\n-00005f10: 6774 3b3c 2f64 6976 3e0a 3c64 6976 2063 gt;
.
176\n-00005fb0: 3c2f 7370 616e 3e20 2020 203c 7370 616e void\n-00005fe0: 203c 6120 636c 6173 733d 2263 6f64 6520 assignSmoothMa\n-00006040: 736b 466f 7256 6572 7465 783c 2f61 3e28 skForVertex(\n-00006050: 5645 5254 4558 203c 7370 616e 2063 6c61 VERTEX con\n-00006070: 7374 3c2f 7370 616e 3e26 616d 703b 2065 st& e\n-00006080: 6467 652c 204d 4153 4b26 616d 703b 206d dge, MASK& m\n-00006090: 6173 6b29 203c 7370 616e 2063 6c61 7373 ask) const\n-000060b0: 3c2f 7370 616e 3e3b 3c2f 6469 763e 0a3c ;
.<\n-000060c0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-000060d0: 3e3c 6120 6964 3d22 6c30 3031 3737 2220 > 177
.
178 \n-00006170: 2020 203c 7370 616e 2063 6c61 7373 3d22 //
.
179 \n-000061f0: 203c 7370 616e 2063 6c61 7373 3d22 636f // Limit\n-00006210: 206d 6173 6b73 2066 6f72 2070 6f73 6974 masks for posit\n-00006220: 696f 6e20 616e 6420 7461 6e67 656e 7473 ion and tangents\n-00006230: 2061 7420 7665 7274 6963 6573 202d 2d20 at vertices -- \n-00006240: 7468 7265 6520 6361 7365 7320 666f 7220 three cases for \n-00006250: 6561 6368 3a3c 2f73 7061 6e3e 3c2f 6469 each:.
180\n-000062b0: 3c2f 7370 616e 3e20 2020 203c 7370 616e //
\n-000062e0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00006310: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 181 t\n-00006350: 656d 706c 6174 653c 2f73 7061 6e3e 2026 emplate &\n-00006360: 6c74 3b3c 7370 616e 2063 6c61 7373 3d22 lt;typenam\n-00006380: 653c 2f73 7061 6e3e 2056 4552 5445 582c e VERTEX,\n-00006390: 203c 7370 616e 2063 6c61 7373 3d22 6b65 typename<\n-000063b0: 2f73 7061 6e3e 204d 4153 4b26 6774 3b3c /span> MASK><\n-000063c0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
182 void as\n-000064e0: 7369 676e 436f 726e 6572 4c69 6d69 744d signCornerLimitM\n-000064f0: 6173 6b3c 2f61 3e28 5645 5254 4558 203c ask(VERTEX <\n-00006500: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00006510: 6f72 6422 3e63 6f6e 7374 3c2f 7370 616e ord\">const& vertex, M\n-00006530: 4153 4b26 616d 703b 2070 6f73 2920 3c73 ASK& pos) const\n-00006560: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-000065b0: 2020 3138 333c 2f73 7061 6e3e 2020 2020 183 \n-000065c0: 3c73 7061 6e20 636c 6173 733d 226b 6579 template <\n-00006600: 7479 7065 6e61 6d65 3c2f 7370 616e 3e20 typename \n-00006610: 5645 5254 4558 2c20 3c73 7061 6e20 636c VERTEX, ty\n-00006630: 7065 6e61 6d65 3c2f 7370 616e 3e20 4d41 pename MA\n-00006640: 534b 2667 743b 3c2f 6469 763e 0a3c 6469 SK>
.<\n-00006660: 6120 6964 3d22 6c30 3031 3834 2220 6e61 a id=\"l00184\" na\n-00006670: 6d65 3d22 6c30 3031 3834 223e 3c2f 613e me=\"l00184\">\n-00006680: 3c73 7061 6e20 636c 6173 733d 226c 696e 184<\n-000066e0: 2f61 3e3c 2f73 7061 6e3e 2020 2020 3c73 /a> void assignCreas\n-00006770: 654c 696d 6974 4d61 736b 3c2f 613e 2856 eLimitMask(V\n-00006780: 4552 5445 5820 3c73 7061 6e20 636c 6173 ERTEX cons\n-000067a0: 743c 2f73 7061 6e3e 2661 6d70 3b20 7665 t& ve\n-000067b0: 7274 6578 2c20 4d41 534b 2661 6d70 3b20 rtex, MASK& \n-000067c0: 706f 732c 203c 7370 616e 2063 6c61 7373 pos, i\n-000067e0: 6e74 3c2f 7370 616e 3e20 3c73 7061 6e20 nt \n-00006800: 636f 6e73 743c 2f73 7061 6e3e 2063 7265 const cre\n-00006810: 6173 6545 6e64 735b 325d 2920 3c73 7061 aseEnds[2]) const
;<\n-00006840: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00006890: 3138 353c 2f73 7061 6e3e 2020 2020 3c73 185 template <ty\n-000068e0: 7065 6e61 6d65 3c2f 7370 616e 3e20 5645 pename VE\n-000068f0: 5254 4558 2c20 3c73 7061 6e20 636c 6173 RTEX, type\n-00006910: 6e61 6d65 3c2f 7370 616e 3e20 4d41 534b name MASK\n-00006920: 2667 743b 3c2f 6469 763e 0a3c 6469 7620 >
.
186 void assignSmoothL\n-00006a50: 696d 6974 4d61 736b 3c2f 613e 2856 4552 imitMask(VER\n-00006a60: 5445 5820 3c73 7061 6e20 636c 6173 733d TEX const<\n-00006a80: 2f73 7061 6e3e 2661 6d70 3b20 7665 7274 /span>& vert\n-00006a90: 6578 2c20 4d41 534b 2661 6d70 3b20 706f ex, MASK& po\n-00006aa0: 7329 203c 7370 616e 2063 6c61 7373 3d22 s) const;
.<\n-00006ae0: 6120 6964 3d22 6c30 3031 3837 2220 6e61 a id=\"l00187\" na\n-00006af0: 6d65 3d22 6c30 3031 3837 223e 3c2f 613e me=\"l00187\">\n-00006b00: 3c73 7061 6e20 636c 6173 733d 226c 696e 187
.
188 \n-00006b80: 203c 7370 616e 2063 6c61 7373 3d22 6b65 template<\n-00006ba0: 2f73 7061 6e3e 2026 6c74 3b3c 7370 616e /span> <typename\n-00006bd0: 2056 4552 5445 582c 203c 7370 616e 2063 VERTEX, t\n-00006bf0: 7970 656e 616d 653c 2f73 7061 6e3e 204d ypename M\n-00006c00: 4153 4b26 6774 3b3c 2f64 6976 3e0a 3c64 ASK>
.\n-00006c20: 3c61 2069 643d 226c 3030 3138 3922 206e 189\n-00006ca0: 3c2f 613e 3c2f 7370 616e 3e20 2020 203c <\n-00006cb0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00006cc0: 6f72 6474 7970 6522 3e76 6f69 643c 2f73 ordtype\">void assignCorn\n-00006d30: 6572 4c69 6d69 7454 616e 6765 6e74 4d61 erLimitTangentMa\n-00006d40: 736b 733c 2f61 3e28 5645 5254 4558 203c sks(VERTEX <\n-00006d50: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00006d60: 6f72 6422 3e63 6f6e 7374 3c2f 7370 616e ord\">const& vertex, M\n-00006d80: 4153 4b26 616d 703b 2074 616e 312c 204d ASK& tan1, M\n-00006d90: 4153 4b26 616d 703b 2074 616e 3229 203c ASK& tan2) <\n-00006da0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00006db0: 6f72 6422 3e63 6f6e 7374 3c2f 7370 616e ord\">const;
.
190 \n-00006e20: 203c 7370 616e 2063 6c61 7373 3d22 6b65 template<\n-00006e40: 2f73 7061 6e3e 2026 6c74 3b3c 7370 616e /span> <typename\n-00006e70: 2056 4552 5445 582c 203c 7370 616e 2063 VERTEX, t\n-00006e90: 7970 656e 616d 653c 2f73 7061 6e3e 204d ypename M\n-00006ea0: 4153 4b26 6774 3b3c 2f64 6976 3e0a 3c64 ASK>
.\n-00006ec0: 3c61 2069 643d 226c 3030 3139 3122 206e 191\n-00006f40: 3c2f 613e 3c2f 7370 616e 3e20 2020 203c <\n-00006f50: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00006f60: 6f72 6474 7970 6522 3e76 6f69 643c 2f73 ordtype\">void assignCrea\n-00006fd0: 7365 4c69 6d69 7454 616e 6765 6e74 4d61 seLimitTangentMa\n-00006fe0: 736b 733c 2f61 3e28 5645 5254 4558 203c sks(VERTEX <\n-00006ff0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00007000: 6f72 6422 3e63 6f6e 7374 3c2f 7370 616e ord\">const& vertex, M\n-00007020: 4153 4b26 616d 703b 2074 616e 312c 204d ASK& tan1, M\n-00007030: 4153 4b26 616d 703b 2074 616e 322c 203c ASK& tan2, <\n-00007040: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00007050: 6f72 6474 7970 6522 3e69 6e74 3c2f 7370 ordtype\">int const<\n-00007080: 2f73 7061 6e3e 2063 7265 6173 6545 6e64 /span> creaseEnd\n-00007090: 735b 325d 2920 3c73 7061 6e20 636c 6173 s[2]) cons\n-000070b0: 743c 2f73 7061 6e3e 3b3c 2f64 6976 3e0a t;
.\n-000070c0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n-000070f0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 192 te\n-00007130: 6d70 6c61 7465 3c2f 7370 616e 3e20 266c mplate &l\n-00007140: 743b 3c73 7061 6e20 636c 6173 733d 226b t;typename\n-00007160: 3c2f 7370 616e 3e20 5645 5254 4558 2c20 VERTEX, \n-00007170: 3c73 7061 6e20 636c 6173 733d 226b 6579 typename MASK>.
193 \n-00007260: 766f 6964 3c2f 7370 616e 3e20 3c61 2063 void ass\n-000072c0: 6967 6e53 6d6f 6f74 684c 696d 6974 5461 ignSmoothLimitTa\n-000072d0: 6e67 656e 744d 6173 6b73 3c2f 613e 2856 ngentMasks(V\n-000072e0: 4552 5445 5820 3c73 7061 6e20 636c 6173 ERTEX cons\n-00007300: 743c 2f73 7061 6e3e 2661 6d70 3b20 7665 t& ve\n-00007310: 7274 6578 2c20 4d41 534b 2661 6d70 3b20 rtex, MASK& \n-00007320: 7461 6e31 2c20 4d41 534b 2661 6d70 3b20 tan1, MASK& \n-00007330: 7461 6e32 2920 3c73 7061 6e20 636c 6173 tan2) cons\n-00007350: 743c 2f73 7061 6e3e 3b3c 2f64 6976 3e0a t;
.\n-00007360: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n-000073f0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00007400: 6e6f 223e 2020 3139 353c 2f73 7061 6e3e no\"> 195\n-00007410: 3c73 7061 6e20 636c 6173 733d 226b 6579 private:
.<\n-00007470: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00007480: 6e6f 223e 2020 3139 363c 2f73 7061 6e3e no\"> 196\n-00007490: 2020 2020 3c61 2063 6c61 7373 3d22 636f \n-000074c0: 4f70 7469 6f6e 733c 2f61 3e20 5f6f 7074 Options _opt\n-000074d0: 696f 6e73 3b3c 2f64 6976 3e0a 3c64 6976 ions;
.<\n-00007510: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00007520: 6e6f 223e 2020 3139 373c 2f73 7061 6e3e no\"> 197
\n-00007530: 203c 2f64 6976 3e0a 3c64 6976 2063 6c61
.
\n-00007580: 2020 3139 383c 2f73 7061 6e3e 3c73 7061 198protected:
.
199 <\n-00007610: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00007660: 3230 303c 2f73 7061 6e3e 2020 2020 3c73 200 //.
20\n-000076e0: 313c 2f73 7061 6e3e 2020 2020 3c73 7061 1 // Internal i\n-00007710: 6d70 6c65 6d65 6e74 6174 696f 6e20 7375 mplementation su\n-00007720: 7070 6f72 743a 3c2f 7370 616e 3e3c 2f64 pport:.
20\n-00007780: 323c 2f73 7061 6e3e 2020 2020 3c73 7061 2 //.
203<\n-00007800: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> \n-00007820: 2f2f 2020 5765 206e 6565 6420 6120 6c6f // We need a lo\n-00007830: 6361 6c20 2671 756f 743b 6d61 736b 2671 cal "mask&q\n-00007840: 756f 743b 2063 6c61 7373 2074 6f20 6265 uot; class to be\n-00007850: 2064 6563 6c61 7265 6420 6c6f 6361 6c6c declared locall\n-00007860: 7920 7769 7468 696e 2074 6865 2076 6572 y within the ver\n-00007870: 7465 782d 7665 7274 6578 206d 6173 6b20 tex-vertex mask \n-00007880: 7175 6572 793c 2f73 7061 6e3e 3c2f 6469 query.
204\n-000078e0: 3c2f 7370 616e 3e20 2020 203c 7370 616e // to hold one\n-00007910: 206f 6620 7468 6520 7477 6f20 706f 7373 of the two poss\n-00007920: 6962 6c65 206d 6173 6b73 2072 6571 7569 ible masks requi\n-00007930: 7265 6420 616e 6420 746f 2063 6f6d 6269 red and to combi\n-00007940: 6e65 2074 6865 206c 6f63 616c 206d 6173 ne the local mas\n-00007950: 6b20 7769 7468 2074 6865 206d 6173 6b3c k with the mask<\n-00007960: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
.<\n-00007980: 6120 6964 3d22 6c30 3032 3035 2220 6e61 a id=\"l00205\" na\n-00007990: 6d65 3d22 6c30 3032 3035 223e 3c2f 613e me=\"l00205\">\n-000079a0: 3c73 7061 6e20 636c 6173 733d 226c 696e 205 // t\n-000079e0: 6865 2063 616c 6c65 7220 7072 6f76 6964 he caller provid\n-000079f0: 6573 2e20 2049 7420 6861 7320 6265 656e es. It has been\n-00007a00: 2070 6172 616d 6574 6572 697a 6564 2062 parameterized b\n-00007a10: 7920 266c 743b 5745 4947 4854 2667 743b y <WEIGHT>\n-00007a20: 2073 6f20 7468 6174 2061 2076 6572 7369 so that a versi\n-00007a30: 6f6e 2063 6f6d 7061 7469 626c 653c 2f73 on compatible
.
206 \n-00007aa0: 2020 203c 7370 616e 2063 6c61 7373 3d22 // wit\n-00007ac0: 6820 7468 6520 6361 6c6c 6572 2623 3339 h the caller'\n-00007ad0: 3b73 206d 6173 6b20 636c 6173 7320 6973 ;s mask class is\n-00007ae0: 2063 7265 6174 6564 2e3c 2f73 7061 6e3e created.\n-00007af0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00007b40: 2032 3037 3c2f 7370 616e 3e20 2020 203c 207 <\n-00007b50: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-00007b60: 656e 7422 3e2f 2f3c 2f73 7061 6e3e 3c2f ent\">//.
2\n-00007bc0: 3038 3c2f 7370 616e 3e20 2020 203c 7370 08 template <typ\n-00007c10: 656e 616d 653c 2f73 7061 6e3e 2057 4549 ename WEI\n-00007c20: 4748 5426 6774 3b3c 2f64 6976 3e0a 3c64 GHT>
..
\n-00007ce0: 2020 3230 393c 2f61 3e3c 2f73 7061 6e3e 209\n-00007cf0: 2020 2020 3c73 7061 6e20 636c 6173 733d class \n-00007d10: 3c2f 7370 616e 3e3c 6120 636c 6173 733d LocalMask\n-00007d50: 207b 3c2f 6469 763e 0a3c 6469 7620 636c {
.
210 .
2\n-00007e00: 3131 3c2f 7370 616e 3e20 2020 203c 7370 11 public\n-00007e30: 3a3c 2f64 6976 3e0a 3c64 6976 2063 6c61 :
.
\n-00007e80: 3c61 2063 6c61 7373 3d22 6c69 6e65 2220 212 typedef WEIGHT Weight<\n-00007f60: 2f61 3e3b 3c2f 6469 763e 0a3c 6469 7620 /a>;
.
213 \n-00007fc0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00008010: 2032 3134 3c2f 7370 616e 3e20 2020 203c 214 <\n-00008020: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00008030: 6f72 6422 3e70 7562 6c69 633c 2f73 7061 ord\">public:
.
215\n-000080e0: 3c2f 7370 616e 3e20 2020 2020 2020 203c <\n-000080f0: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-00008100: 5f66 756e 6374 696f 6e22 2068 7265 663d _function\" href=\n-00008110: 2261 3031 3333 372e 6874 6d6c 2361 6334 \"a01337.html#ac4\n-00008120: 6234 6335 3566 6232 3464 6139 3566 3135 b4c55fb24da95f15\n-00008130: 3466 3461 3966 3531 3764 6230 3739 223e 4f4a9f517db079\">\n-00008140: 4c6f 6361 6c4d 6173 6b3c 2f61 3e28 3c61 LocalMask(We\n-000081a0: 6967 6874 3c2f 613e 2a20 762c 203c 6120 ight* v, Wei\n-00008200: 6768 743c 2f61 3e2a 2065 2c20 3c61 2063 ght* e, Weig\n-00008260: 6874 3c2f 613e 2a20 6629 203a 205f 7657 ht* f) : _vW\n-00008270: 6569 6768 7473 2876 292c 205f 6557 6569 eights(v), _eWei\n-00008280: 6768 7473 2865 292c 205f 6657 6569 6768 ghts(e), _fWeigh\n-00008290: 7473 2866 2920 7b20 7d3c 2f64 6976 3e0a ts(f) { }
.\n-000082a0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 \n-000083b0: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n-00008420: 6120 6964 3d22 6c30 3032 3138 2220 6e61 a id=\"l00218\" na\n-00008430: 6d65 3d22 6c30 3032 3138 223e 3c2f 613e me=\"l00218\">\n-00008440: 3c73 7061 6e20 636c 6173 733d 226c 696e 218 publi\n-00008480: 633c 2f73 7061 6e3e 3a3c 2f64 6976 3e0a c:
.\n-00008490: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n-00008520: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00008530: 6e6f 223e 2020 3232 303c 2f73 7061 6e3e no\"> 220\n-00008540: 2020 2020 2020 2020 3c73 7061 6e20 636c //\n-00008560: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n-00008580: 3c61 2069 643d 226c 3030 3232 3122 206e 221 \n-000085e0: 2f2f 2020 4d65 7468 6f64 7320 7265 7175 // Methods requ\n-000085f0: 6972 6564 2066 6f72 2067 656e 6572 616c ired for general\n-00008600: 206d 6173 6b20 6173 7369 676e 6d65 6e74 mask assignment\n-00008610: 7320 616e 6420 7175 6572 6965 733a 3c2f s and queries:
.<\n-00008660: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00008670: 6e6f 223e 2020 3232 323c 2f73 7061 6e3e no\"> 222\n-00008680: 2020 2020 2020 2020 3c73 7061 6e20 636c //\n-000086a0: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n-000086c0: 3c61 2069 643d 226c 3030 3232 3322 206e 223\n-00008740: 3c2f 613e 3c2f 7370 616e 3e20 2020 2020 \n-00008750: 2020 203c 7370 616e 2063 6c61 7373 3d22 int\n-00008770: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 GetNumV\n-000087d0: 6572 7465 7857 6569 6768 7473 3c2f 613e ertexWeights\n-000087e0: 2829 3c73 7061 6e20 636c 6173 733d 226b () const <\n-00008800: 2f73 7061 6e3e 7b20 3c73 7061 6e20 636c /span>{ return \n-00008830: 5f76 436f 756e 743b 207d 3c2f 6469 763e _vCount; }
\n-00008840: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00008870: 3c2f 613e 3c73 7061 6e20 636c 6173 733d \n-000088d0: 3232 343c 2f61 3e3c 2f73 7061 6e3e 2020 224 \n-000088e0: 2020 2020 2020 3c73 7061 6e20 636c 6173 \n-00008900: 696e 743c 2f73 7061 6e3e 203c 6120 636c int GetN\n-00008960: 756d 4564 6765 5765 6967 6874 733c 2f61 umEdgeWeights() cons\n-00008990: 7420 3c2f 7370 616e 3e7b 203c 7370 616e t { return _eCount; }.
225 int G\n-00008af0: 6574 4e75 6d46 6163 6557 6569 6768 7473 etNumFaceWeights\n-00008b00: 3c2f 613e 2829 3c73 7061 6e20 636c 6173 () c\n-00008b20: 6f6e 7374 203c 2f73 7061 6e3e 7b20 3c73 onst { return _fCount; }\n-00008b60: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00008bb0: 2032 3236 3c2f 7370 616e 3e20 3c2f 6469 226 .
\n-00008c50: 2020 3232 373c 2f61 3e3c 2f73 7061 6e3e 227\n-00008c60: 2020 2020 2020 2020 3c73 7061 6e20 636c void S\n-00008ce0: 6574 4e75 6d56 6572 7465 7857 6569 6768 etNumVertexWeigh\n-00008cf0: 7473 3c2f 613e 283c 7370 616e 2063 6c61 ts(int coun\n-00008d20: 7429 207b 205f 7643 6f75 6e74 203d 2063 t) { _vCount = c\n-00008d30: 6f75 6e74 3b20 7d3c 2f64 6976 3e0a 3c64 ount; }
.\n-00008d50: 3c61 2069 643d 226c 3030 3232 3822 206e 228\n-00008dd0: 3c2f 613e 3c2f 7370 616e 3e20 2020 2020 \n-00008de0: 2020 203c 7370 616e 2063 6c61 7373 3d22 voi\n-00008e00: 643c 2f73 7061 6e3e 203c 6120 636c 6173 d SetNum\n-00008e60: 4564 6765 5765 6967 6874 733c 2f61 3e28 EdgeWeights(\n-00008e70: 2020 3c73 7061 6e20 636c 6173 733d 226b int<\n-00008e90: 2f73 7061 6e3e 2063 6f75 6e74 2920 7b20 /span> count) { \n-00008ea0: 5f65 436f 756e 7420 3d20 636f 756e 743b _eCount = count;\n-00008eb0: 207d 3c2f 6469 763e 0a3c 6469 7620 636c }
.
229<\n-00008f50: 2f73 7061 6e3e 2020 2020 2020 2020 3c73 /span> void SetNumFaceW\n-00008fe0: 6569 6768 7473 3c2f 613e 2820 203c 7370 eights( int count) { _fCou\n-00009020: 6e74 203d 2063 6f75 6e74 3b20 7d3c 2f64 nt = count; }.
23\n-00009080: 303c 2f73 7061 6e3e 203c 2f64 6976 3e0a 0
.\n-00009090: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n-000090c0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 2\n-00009120: 3331 3c2f 613e 3c2f 7370 616e 3e20 2020 31 \n-00009130: 2020 2020 203c 6120 636c 6173 733d 2263 Weight \n-00009190: 3c73 7061 6e20 636c 6173 733d 226b 6579 const& VertexW\n-00009210: 6569 6768 743c 2f61 3e28 3c73 7061 6e20 eight(int i\n-00009240: 6e64 6578 293c 7370 616e 2063 6c61 7373 ndex) cons\n-00009260: 7420 3c2f 7370 616e 3e7b 203c 7370 616e t { return _vWeights[ind\n-000092a0: 6578 5d3b 207d 3c2f 6469 763e 0a3c 6469 ex]; }
.<\n-000092c0: 6120 6964 3d22 6c30 3032 3332 2220 6e61 a id=\"l00232\" na\n-000092d0: 6d65 3d22 6c30 3032 3332 223e 3c2f 613e me=\"l00232\">\n-000092e0: 3c73 7061 6e20 636c 6173 733d 226c 696e 232<\n-00009340: 2f61 3e3c 2f73 7061 6e3e 2020 2020 2020 /a> \n-00009350: 2020 3c61 2063 6c61 7373 3d22 636f 6465 Weight const&\n-000093d0: 616d 703b 203c 6120 636c 6173 733d 2263 amp; EdgeWeight\n-00009430: 3c2f 613e 2820 203c 7370 616e 2063 6c61 ( int inde\n-00009460: 7829 3c73 7061 6e20 636c 6173 733d 226b x) const <\n-00009480: 2f73 7061 6e3e 7b20 3c73 7061 6e20 636c /span>{ return \n-000094b0: 5f65 5765 6967 6874 735b 696e 6465 785d _eWeights[index]\n-000094c0: 3b20 7d3c 2f64 6976 3e0a 3c64 6976 2063 ; }
.
233\n-00009560: 3c2f 7370 616e 3e20 2020 2020 2020 203c <\n-00009570: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-00009580: 5f74 7970 6564 6566 2220 6872 6566 3d22 _typedef\" href=\"\n-00009590: 6130 3133 3337 2e68 746d 6c23 6131 3733 a01337.html#a173\n-000095a0: 6539 3865 3064 3162 3364 3135 6635 6333 e98e0d1b3d15f5c3\n-000095b0: 6164 3433 3664 3066 6564 3430 3122 3e57 ad436d0fed401\">W\n-000095c0: 6569 6768 743c 2f61 3e20 3c73 7061 6e20 eight \n-000095e0: 636f 6e73 743c 2f73 7061 6e3e 2661 6d70 const&\n-000095f0: 3b20 3c61 2063 6c61 7373 3d22 636f 6465 ; FaceWeight( in\n-00009670: 743c 2f73 7061 6e3e 2069 6e64 6578 293c t index)<\n-00009680: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00009690: 6f72 6422 3e20 636f 6e73 7420 3c2f 7370 ord\"> const { r\n-000096c0: 6574 7572 6e3c 2f73 7061 6e3e 205f 6657 eturn _fW\n-000096d0: 6569 6768 7473 5b69 6e64 6578 5d3b 207d eights[index]; }\n-000096e0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00009730: 2032 3334 3c2f 7370 616e 3e20 3c2f 6469 234 .
\n-000097d0: 2020 3233 353c 2f61 3e3c 2f73 7061 6e3e 235\n-000097e0: 2020 2020 2020 2020 3c61 2063 6c61 7373 Weight& VertexW\n-000098a0: 6569 6768 743c 2f61 3e28 3c73 7061 6e20 eight(int i\n-000098d0: 6e64 6578 2920 7b20 3c73 7061 6e20 636c ndex) { return \n-00009900: 5f76 5765 6967 6874 735b 696e 6465 785d _vWeights[index]\n-00009910: 3b20 7d3c 2f64 6976 3e0a 3c64 6976 2063 ; }
.
236\n-000099b0: 3c2f 7370 616e 3e20 2020 2020 2020 203c <\n-000099c0: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-000099d0: 5f74 7970 6564 6566 2220 6872 6566 3d22 _typedef\" href=\"\n-000099e0: 6130 3133 3337 2e68 746d 6c23 6131 3733 a01337.html#a173\n-000099f0: 6539 3865 3064 3162 3364 3135 6635 6333 e98e0d1b3d15f5c3\n-00009a00: 6164 3433 3664 3066 6564 3430 3122 3e57 ad436d0fed401\">W\n-00009a10: 6569 6768 743c 2f61 3e26 616d 703b 203c eight& <\n-00009a20: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-00009a30: 5f66 756e 6374 696f 6e22 2068 7265 663d _function\" href=\n-00009a40: 2261 3031 3333 372e 6874 6d6c 2361 3533 \"a01337.html#a53\n-00009a50: 3364 6261 3332 6139 3436 3835 3463 3366 3dba32a946854c3f\n-00009a60: 3235 6532 3762 3532 3165 6637 6466 223e 25e27b521ef7df\">\n-00009a70: 4564 6765 5765 6967 6874 3c2f 613e 2820 EdgeWeight( \n-00009a80: 203c 7370 616e 2063 6c61 7373 3d22 6b65 int index) { <\n-00009ab0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00009ac0: 6f72 6466 6c6f 7722 3e72 6574 7572 6e3c ordflow\">return<\n-00009ad0: 2f73 7061 6e3e 205f 6557 6569 6768 7473 /span> _eWeights\n-00009ae0: 5b69 6e64 6578 5d3b 207d 3c2f 6469 763e [index]; }
\n-00009af0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00009b20: 3c2f 613e 3c73 7061 6e20 636c 6173 733d \n-00009b80: 3233 373c 2f61 3e3c 2f73 7061 6e3e 2020 237 \n-00009b90: 2020 2020 2020 3c61 2063 6c61 7373 3d22 Weight\n-00009bf0: 2661 6d70 3b20 3c61 2063 6c61 7373 3d22 & FaceWeigh\n-00009c50: 743c 2f61 3e28 2020 3c73 7061 6e20 636c t( int ind\n-00009c80: 6578 2920 7b20 3c73 7061 6e20 636c 6173 ex) { \n-00009ca0: 7265 7475 726e 3c2f 7370 616e 3e20 5f66 return _f\n-00009cb0: 5765 6967 6874 735b 696e 6465 785d 3b20 Weights[index]; \n-00009cc0: 7d3c 2f64 6976 3e0a 3c64 6976 2063 6c61 }
.
\n-00009d10: 2020 3233 383c 2f73 7061 6e3e 203c 2f64 238 .
239 bool <\n-00009df0: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-00009e00: 5f66 756e 6374 696f 6e22 2068 7265 663d _function\" href=\n-00009e10: 2261 3031 3333 372e 6874 6d6c 2361 3335 \"a01337.html#a35\n-00009e20: 3139 6535 6530 3536 3331 3032 3666 6164 19e5e05631026fad\n-00009e30: 3934 6337 3631 3666 3565 3065 3637 223e 94c7616f5e0e67\">\n-00009e40: 4172 6546 6163 6557 6569 6768 7473 466f AreFaceWeightsFo\n-00009e50: 7246 6163 6543 656e 7465 7273 3c2f 613e rFaceCenters\n-00009e60: 2829 3c73 7061 6e20 636c 6173 733d 226b () const \n-00009e80: 3c2f 7370 616e 3e7b 203c 7370 616e 2063 { return\n-00009eb0: 205f 6657 6569 6768 7473 466f 7243 656e _fWeightsForCen\n-00009ec0: 7465 7273 3b20 7d3c 2f64 6976 3e0a 3c64 ters; }
.\n-00009ee0: 3c61 2069 643d 226c 3030 3234 3022 206e 240\n-00009f60: 3c2f 613e 3c2f 7370 616e 3e20 2020 2020 \n-00009f70: 2020 203c 7370 616e 2063 6c61 7373 3d22 voi\n-00009f90: 643c 2f73 7061 6e3e 203c 6120 636c 6173 d SetFac\n-00009ff0: 6557 6569 6768 7473 466f 7246 6163 6543 eWeightsForFaceC\n-0000a000: 656e 7465 7273 3c2f 613e 283c 7370 616e enters(bool\n-0000a030: 206f 6e29 207b 205f 6657 6569 6768 7473 on) { _fWeights\n-0000a040: 466f 7243 656e 7465 7273 203d 206f 6e3b ForCenters = on;\n-0000a050: 207d 3c2f 6469 763e 0a3c 6469 7620 636c }
.
241 .
2\n-0000a100: 3432 3c2f 7370 616e 3e20 2020 203c 7370 42 public\n-0000a130: 3a3c 2f64 6976 3e0a 3c64 6976 2063 6c61 :
.
\n-0000a180: 2020 3234 333c 2f73 7061 6e3e 203c 2f64 243 .
24\n-0000a1e0: 343c 2f73 7061 6e3e 2020 2020 2020 2020 4 \n-0000a1f0: 3c73 7061 6e20 636c 6173 733d 2263 6f6d //<\n-0000a210: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-0000a260: 3234 353c 2f73 7061 6e3e 2020 2020 2020 245 \n-0000a270: 2020 3c73 7061 6e20 636c 6173 733d 2263 // Addi\n-0000a290: 7469 6f6e 616c 206d 6574 686f 6473 202d tional methods -\n-0000a2a0: 2d20 6d61 696e 6c79 2074 6865 2062 6c65 - mainly the ble\n-0000a2b0: 6e64 696e 6720 6d65 7468 6f64 2066 6f72 nding method for\n-0000a2c0: 2076 6572 7465 782d 7665 7274 6578 206d vertex-vertex m\n-0000a2d0: 6173 6b73 3a3c 2f73 7061 6e3e 3c2f 6469 asks:.
246\n-0000a330: 3c2f 7370 616e 3e20 2020 2020 2020 203c <\n-0000a340: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-0000a350: 656e 7422 3e2f 2f3c 2f73 7061 6e3e 3c2f ent\">//.
2\n-0000a3b0: 3437 3c2f 7370 616e 3e20 2020 2020 2020 47 \n-0000a3c0: 203c 7370 616e 2063 6c61 7373 3d22 6b65 template<\n-0000a3e0: 2f73 7061 6e3e 2026 6c74 3b3c 7370 616e /span> <typename\n-0000a410: 2055 5345 525f 4d41 534b 2667 743b 3c2f USER_MASK>.
2\n-0000a470: 3438 3c2f 7370 616e 3e20 2020 2020 2020 48 \n-0000a480: 203c 7370 616e 2063 6c61 7373 3d22 6b65 inline v\n-0000a4c0: 6f69 643c 2f73 7061 6e3e 3c2f 6469 763e oid
\n-0000a4d0: 0a3c 6469 7620 636c 6173 733d 2266 6f6c .
.
<\n-0000a560: 6120 636c 6173 733d 226c 696e 6522 2068 a class=\"line\" h\n-0000a570: 7265 663d 2261 3031 3333 372e 6874 6d6c ref=\"a01337.html\n-0000a580: 2361 3565 6438 3030 6539 6437 3032 6635 #a5ed800e9d702f5\n-0000a590: 3761 6539 3738 6665 3630 6261 3261 3337 7ae978fe60ba2a37\n-0000a5a0: 6463 223e 2020 3234 393c 2f61 3e3c 2f73 dc\"> 249 Com\n-0000a610: 6269 6e65 5665 7274 6578 5665 7274 6578 bineVertexVertex\n-0000a620: 4d61 736b 733c 2f61 3e28 3c61 2063 6c61 Masks(Weight\n-0000a680: 3c2f 613e 2074 6869 7343 6f65 6666 2c20 thisCoeff, \n-0000a690: 3c61 2063 6c61 7373 3d22 636f 6465 2068 \n-0000a6e0: 5765 6967 6874 3c2f 613e 2064 7374 436f Weight dstCo\n-0000a6f0: 6566 662c 2055 5345 525f 4d41 534b 2661 eff, USER_MASK&a\n-0000a700: 6d70 3b20 6473 7429 3c73 7061 6e20 636c mp; dst) c\n-0000a720: 6f6e 7374 203c 2f73 7061 6e3e 7b3c 2f64 onst {.
25\n-0000a780: 303c 2f73 7061 6e3e 203c 2f64 6976 3e0a 0
.\n-0000a790: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n-0000a7c0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 251 \n-0000a7f0: 3c73 7061 6e20 636c 6173 733d 2263 6f6d //<\n-0000a810: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-0000a860: 3235 323c 2f73 7061 6e3e 2020 2020 2020 252 \n-0000a870: 2020 2020 2020 3c73 7061 6e20 636c 6173 // \n-0000a890: 5468 6973 2069 6d70 6c65 6d65 6e74 6174 This implementat\n-0000a8a0: 696f 6e20 6973 2063 6f6e 766f 6c75 7465 ion is convolute\n-0000a8b0: 6420 6279 2074 6865 2070 6f74 656e 7469 d by the potenti\n-0000a8c0: 616c 2073 7061 7273 6974 7920 6f66 2065 al sparsity of e\n-0000a8d0: 6163 6820 6d61 736b 2e20 2053 696e 6365 ach mask. Since\n-0000a8e0: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n-0000a900: 3c61 2069 643d 226c 3030 3235 3322 206e 253 // it is sp\n-0000a970: 6563 6966 6963 2074 6f20 6120 7665 7274 ecific to a vert\n-0000a980: 6578 2d76 6572 7465 7820 6d61 736b 2c20 ex-vertex mask, \n-0000a990: 7765 2061 7265 2067 7561 7261 6e74 6565 we are guarantee\n-0000a9a0: 6420 746f 2068 6176 6520 6578 6163 746c d to have exactl\n-0000a9b0: 7920 6f6e 653c 2f73 7061 6e3e 3c2f 6469 y one.
254\n-0000aa10: 3c2f 7370 616e 3e20 2020 2020 2020 2020 \n-0000aa20: 2020 203c 7370 616e 2063 6c61 7373 3d22 // ver\n-0000aa40: 7465 782d 7765 6967 6874 2066 6f72 2062 tex-weight for b\n-0000aa50: 6f74 6820 6d61 736b 732c 2062 7574 2074 oth masks, but t\n-0000aa60: 6865 2065 6467 652d 2061 6e64 2066 6163 he edge- and fac\n-0000aa70: 652d 7765 6967 6874 7320 6172 6520 6f70 e-weights are op\n-0000aa80: 7469 6f6e 616c 2e20 2054 6865 3c2f 7370 tional. The
.
255 \n-0000aaf0: 2020 2020 2020 2020 2020 3c73 7061 6e20 \n-0000ab10: 2f2f 2020 6368 696c 6420 6d61 736b 2028 // child mask (\n-0000ab20: 7468 6520 2671 756f 743b 736f 7572 6365 the "source\n-0000ab30: 2671 756f 743b 2920 7368 6f75 6c64 2068 ") should h\n-0000ab40: 6176 6520 6120 7375 7065 7273 6574 206f ave a superset o\n-0000ab50: 6620 7468 6520 7765 6967 6874 7320 6f66 f the weights of\n-0000ab60: 2074 6865 2070 6172 656e 743c 2f73 7061 the parent
.
256 \n-0000abd0: 2020 2020 2020 2020 203c 7370 616e 2063 /\n-0000abf0: 2f20 2028 7468 6520 2671 756f 743b 6465 / (the "de\n-0000ac00: 7374 696e 6174 696f 6e26 7175 6f74 3b29 stination")\n-0000ac10: 2067 6976 656e 2069 7473 2072 6564 7563 given its reduc\n-0000ac20: 6564 2073 6861 7270 6e65 7373 2c20 736f ed sharpness, so\n-0000ac30: 2077 6520 666f 7274 756e 6174 656c 7920 we fortunately \n-0000ac40: 646f 6e26 2333 393b 7420 6e65 6564 2074 don't need t\n-0000ac50: 6f3c 2f73 7061 6e3e 3c2f 6469 763e 0a3c o
.<\n-0000ac60: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0000ac70: 3e3c 6120 6964 3d22 6c30 3032 3537 2220 > 257 <\n-0000acc0: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-0000acd0: 656e 7422 3e2f 2f20 2074 6573 7420 616c ent\">// test al\n-0000ace0: 6c20 7065 726d 7574 6174 696f 6e73 2e3c l permutations.<\n-0000acf0: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
.<\n-0000ad10: 6120 6964 3d22 6c30 3032 3538 2220 6e61 a id=\"l00258\" na\n-0000ad20: 6d65 3d22 6c30 3032 3538 223e 3c2f 613e me=\"l00258\">\n-0000ad30: 3c73 7061 6e20 636c 6173 733d 226c 696e 258 //.
259\n-0000add0: 3c2f 7370 616e 3e20 2020 2020 2020 2020 \n-0000ade0: 2020 2064 7374 2e56 6572 7465 7857 6569 dst.VertexWei\n-0000adf0: 6768 7428 3029 203d 2064 7374 436f 6566 ght(0) = dstCoef\n-0000ae00: 6620 2a20 6473 742e 5665 7274 6578 5765 f * dst.VertexWe\n-0000ae10: 6967 6874 2830 2920 2b20 7468 6973 436f ight(0) + thisCo\n-0000ae20: 6566 6620 2a20 7468 6973 2d26 6774 3b3c eff * this-><\n-0000ae30: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-0000ae40: 5f66 756e 6374 696f 6e22 2068 7265 663d _function\" href=\n-0000ae50: 2261 3031 3333 372e 6874 6d6c 2361 6563 \"a01337.html#aec\n-0000ae60: 3563 3261 6266 6466 6264 6534 6464 3933 5c2abfdfbde4dd93\n-0000ae70: 3463 3036 3136 3235 3939 3437 3931 223e 4c061625994791\">\n-0000ae80: 5665 7274 6578 5765 6967 6874 3c2f 613e VertexWeight\n-0000ae90: 2830 293b 3c2f 6469 763e 0a3c 6469 7620 (0);
.
260 \n-0000aef0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0000af40: 2032 3631 3c2f 7370 616e 3e20 2020 2020 261 \n-0000af50: 2020 2020 2020 203c 7370 616e 2063 6c61 int edge\n-0000af80: 5765 6967 6874 436f 756e 7420 3d20 7468 WeightCount = th\n-0000af90: 6973 2d26 6774 3b3c 6120 636c 6173 733d is->GetNumEd\n-0000aff0: 6765 5765 6967 6874 733c 2f61 3e28 293b geWeights();\n-0000b000: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0000b050: 2032 3632 3c2f 7370 616e 3e20 2020 2020 262 \n-0000b060: 2020 2020 2020 203c 7370 616e 2063 6c61 if (edge\n-0000b090: 5765 6967 6874 436f 756e 7429 207b 3c2f WeightCount) {.
2\n-0000b0f0: 3633 3c2f 7370 616e 3e20 2020 2020 2020 63 \n-0000b100: 2020 2020 2020 2020 203c 7370 616e 2063 if (ds\n-0000b130: 742e 4765 744e 756d 4564 6765 5765 6967 t.GetNumEdgeWeig\n-0000b140: 6874 7328 2920 3d3d 2030 2920 7b3c 2f64 hts() == 0) {.
26\n-0000b1a0: 343c 2f73 7061 6e3e 2020 2020 2020 2020 4 \n-0000b1b0: 2020 2020 2020 2020 2020 2020 6473 742e dst.\n-0000b1c0: 5365 744e 756d 4564 6765 5765 6967 6874 SetNumEdgeWeight\n-0000b1d0: 7328 6564 6765 5765 6967 6874 436f 756e s(edgeWeightCoun\n-0000b1e0: 7429 3b3c 2f64 6976 3e0a 3c64 6976 2063 t);
.
265 \n-0000b240: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000b250: 2020 3c73 7061 6e20 636c 6173 733d 226b for<\n-0000b270: 2f73 7061 6e3e 2028 3c73 7061 6e20 636c /span> (int i =\n-0000b2a0: 2030 3b20 6920 266c 743b 2065 6467 6557 0; i < edgeW\n-0000b2b0: 6569 6768 7443 6f75 6e74 3b20 2b2b 6929 eightCount; ++i)\n-0000b2c0: 207b 3c2f 6469 763e 0a3c 6469 7620 636c {
.
266 \n-0000b320: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000b330: 2020 2020 2064 7374 2e45 6467 6557 6569 dst.EdgeWei\n-0000b340: 6768 7428 6929 203d 2074 6869 7343 6f65 ght(i) = thisCoe\n-0000b350: 6666 202a 2074 6869 732d 2667 743b 3c61 ff * this->E\n-0000b3b0: 6467 6557 6569 6768 743c 2f61 3e28 6929 dgeWeight(i)\n-0000b3c0: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-0000b410: 2020 3236 373c 2f73 7061 6e3e 2020 2020 267 \n-0000b420: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000b430: 7d3c 2f64 6976 3e0a 3c64 6976 2063 6c61 }
.
\n-0000b480: 2020 3236 383c 2f73 7061 6e3e 2020 2020 268 \n-0000b490: 2020 2020 2020 2020 2020 2020 7d20 3c73 } else {
.<\n-0000b500: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-0000b510: 6e6f 223e 2020 3236 393c 2f73 7061 6e3e no\"> 269\n-0000b520: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000b530: 2020 2020 3c73 7061 6e20 636c 6173 733d fo\n-0000b550: 723c 2f73 7061 6e3e 2028 3c73 7061 6e20 r (int i\n-0000b580: 203d 2030 3b20 6920 266c 743b 2065 6467 = 0; i < edg\n-0000b590: 6557 6569 6768 7443 6f75 6e74 3b20 2b2b eWeightCount; ++\n-0000b5a0: 6929 207b 3c2f 6469 763e 0a3c 6469 7620 i) {
.
270 \n-0000b600: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000b610: 2020 2020 2020 2064 7374 2e45 6467 6557 dst.EdgeW\n-0000b620: 6569 6768 7428 6929 203d 2064 7374 436f eight(i) = dstCo\n-0000b630: 6566 6620 2a20 6473 742e 4564 6765 5765 eff * dst.EdgeWe\n-0000b640: 6967 6874 2869 2920 2b20 7468 6973 436f ight(i) + thisCo\n-0000b650: 6566 6620 2a20 7468 6973 2d26 6774 3b3c eff * this-><\n-0000b660: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-0000b670: 5f66 756e 6374 696f 6e22 2068 7265 663d _function\" href=\n-0000b680: 2261 3031 3333 372e 6874 6d6c 2361 3464 \"a01337.html#a4d\n-0000b690: 6239 3332 6138 6133 3366 6430 3632 3263 b932a8a33fd0622c\n-0000b6a0: 3764 3031 3136 3765 6231 3462 3532 223e 7d01167eb14b52\">\n-0000b6b0: 4564 6765 5765 6967 6874 3c2f 613e 2869 EdgeWeight(i\n-0000b6c0: 293b 3c2f 6469 763e 0a3c 6469 7620 636c );
.
271 \n-0000b720: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000b730: 207d 3c2f 6469 763e 0a3c 6469 7620 636c }
.
272 \n-0000b790: 2020 2020 2020 2020 2020 2020 207d 3c2f }.
2\n-0000b7f0: 3733 3c2f 7370 616e 3e20 2020 2020 2020 73 \n-0000b800: 2020 2020 207d 3c2f 6469 763e 0a3c 6469 }
.<\n-0000b820: 6120 6964 3d22 6c30 3032 3734 2220 6e61 a id=\"l00274\" na\n-0000b830: 6d65 3d22 6c30 3032 3734 223e 3c2f 613e me=\"l00274\">\n-0000b840: 3c73 7061 6e20 636c 6173 733d 226c 696e 274
.
275 \n-0000b8c0: 2020 2020 2020 2020 203c 7370 616e 2063 int fa\n-0000b8f0: 6365 5765 6967 6874 436f 756e 7420 3d20 ceWeightCount = \n-0000b900: 7468 6973 2d26 6774 3b3c 6120 636c 6173 this->GetNum\n-0000b960: 4661 6365 5765 6967 6874 733c 2f61 3e28 FaceWeights(\n-0000b970: 293b 3c2f 6469 763e 0a3c 6469 7620 636c );
.
276 \n-0000b9d0: 2020 2020 2020 2020 203c 7370 616e 2063 if (fa\n-0000ba00: 6365 5765 6967 6874 436f 756e 7429 207b ceWeightCount) {\n-0000ba10: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0000ba60: 2032 3737 3c2f 7370 616e 3e20 2020 2020 277 \n-0000ba70: 2020 2020 2020 2020 2020 203c 7370 616e //
\n-0000baa0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-0000bad0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 278 \n-0000bb00: 2020 2020 203c 7370 616e 2063 6c61 7373 // I\n-0000bb20: 6620 636f 6d62 696e 696e 6720 6661 6365 f combining face\n-0000bb30: 2077 6569 6768 7473 2c20 6265 2073 7572 weights, be sur\n-0000bb40: 6520 7468 6569 7220 696e 7465 7270 7265 e their interpre\n-0000bb50: 7461 7469 6f6e 2028 692e 652e 2066 6163 tation (i.e. fac\n-0000bb60: 652d 6365 6e74 6572 733c 2f73 7061 6e3e e-centers\n-0000bb70: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0000bbc0: 2032 3739 3c2f 7370 616e 3e20 2020 2020 279 \n-0000bbd0: 2020 2020 2020 2020 2020 203c 7370 616e // or opposite\n-0000bc00: 2076 6572 7469 6365 7329 2069 7320 7072 vertices) is pr\n-0000bc10: 6f70 6572 6c79 2073 6574 2069 6e20 7468 operly set in th\n-0000bc20: 6520 6465 7374 696e 6174 696f 6e20 6d61 e destination ma\n-0000bc30: 736b 3a3c 2f73 7061 6e3e 3c2f 6469 763e sk:
\n-0000bc40: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-0000bc70: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 280 \n-0000bca0: 2020 2020 203c 7370 616e 2063 6c61 7373 //
.
281 \n-0000bd20: 2020 2020 2020 2020 2020 2020 2020 203c <\n-0000bd30: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-0000bd40: 6f72 6466 6c6f 7722 3e69 663c 2f73 7061 ordflow\">if (dst.GetNumFa\n-0000bd60: 6365 5765 6967 6874 7328 2920 3d3d 2030 ceWeights() == 0\n-0000bd70: 2920 7b3c 2f64 6976 3e0a 3c64 6976 2063 ) {
.
282 \n-0000bdd0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000bde0: 2020 6473 742e 5365 744e 756d 4661 6365 dst.SetNumFace\n-0000bdf0: 5765 6967 6874 7328 6661 6365 5765 6967 Weights(faceWeig\n-0000be00: 6874 436f 756e 7429 3b3c 2f64 6976 3e0a htCount);
.\n-0000be10: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .\n-0000bf30: 3c61 2069 643d 226c 3030 3238 3422 206e 284
.
285 \n-0000bfd0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000bfe0: 2020 3c73 7061 6e20 636c 6173 733d 226b for<\n-0000c000: 2f73 7061 6e3e 2028 3c73 7061 6e20 636c /span> (int i =\n-0000c030: 2030 3b20 6920 266c 743b 2066 6163 6557 0; i < faceW\n-0000c040: 6569 6768 7443 6f75 6e74 3b20 2b2b 6929 eightCount; ++i)\n-0000c050: 207b 3c2f 6469 763e 0a3c 6469 7620 636c {
.
286 \n-0000c0b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000c0c0: 2020 2020 2064 7374 2e46 6163 6557 6569 dst.FaceWei\n-0000c0d0: 6768 7428 6929 203d 2074 6869 7343 6f65 ght(i) = thisCoe\n-0000c0e0: 6666 202a 2074 6869 732d 2667 743b 3c61 ff * this->F\n-0000c140: 6163 6557 6569 6768 743c 2f61 3e28 6929 aceWeight(i)\n-0000c150: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-0000c1a0: 2020 3238 373c 2f73 7061 6e3e 2020 2020 287 \n-0000c1b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000c1c0: 7d3c 2f64 6976 3e0a 3c64 6976 2063 6c61 }
.
\n-0000c210: 2020 3238 383c 2f73 7061 6e3e 2020 2020 288 \n-0000c220: 2020 2020 2020 2020 2020 2020 7d20 3c73 } else {
.<\n-0000c290: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-0000c2a0: 6e6f 223e 2020 3238 393c 2f73 7061 6e3e no\"> 289
\n-0000c2b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000c2c0: 2020 2020 6173 7365 7274 2874 6869 732d assert(this-\n-0000c2d0: 2667 743b 3c61 2063 6c61 7373 3d22 636f >AreFaceWeig\n-0000c330: 6874 7346 6f72 4661 6365 4365 6e74 6572 htsForFaceCenter\n-0000c340: 733c 2f61 3e28 2920 3d3d 2064 7374 2e41 s() == dst.A\n-0000c350: 7265 4661 6365 5765 6967 6874 7346 6f72 reFaceWeightsFor\n-0000c360: 4661 6365 4365 6e74 6572 7328 2929 3b3c FaceCenters());<\n-0000c370: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-0000c3c0: 3239 303c 2f73 7061 6e3e 203c 2f64 6976 290 .
291<\n-0000c420: 2f73 7061 6e3e 2020 2020 2020 2020 2020 /span> \n-0000c430: 2020 2020 2020 2020 2020 3c73 7061 6e20 for (\n-0000c460: 3c73 7061 6e20 636c 6173 733d 226b 6579 int i = 0; i &l\n-0000c490: 743b 2066 6163 6557 6569 6768 7443 6f75 t; faceWeightCou\n-0000c4a0: 6e74 3b20 2b2b 6929 207b 3c2f 6469 763e nt; ++i) {
\n-0000c4b0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-0000c4e0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 292 \n-0000c510: 2020 2020 2020 2020 2020 2020 2064 7374 dst\n-0000c520: 2e46 6163 6557 6569 6768 7428 6929 203d .FaceWeight(i) =\n-0000c530: 2064 7374 436f 6566 6620 2a20 6473 742e dstCoeff * dst.\n-0000c540: 4661 6365 5765 6967 6874 2869 2920 2b20 FaceWeight(i) + \n-0000c550: 7468 6973 436f 6566 6620 2a20 7468 6973 thisCoeff * this\n-0000c560: 2d26 6774 3b3c 6120 636c 6173 733d 2263 ->FaceWeight\n-0000c5c0: 3c2f 613e 2869 293b 3c2f 6469 763e 0a3c (i);
.<\n-0000c5d0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0000c5e0: 3e3c 6120 6964 3d22 6c30 3032 3933 2220 > 293 \n-0000c630: 2020 2020 2020 207d 3c2f 6469 763e 0a3c }
.<\n-0000c640: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0000c650: 3e3c 6120 6964 3d22 6c30 3032 3934 2220 > 294 \n-0000c6a0: 2020 207d 3c2f 6469 763e 0a3c 6469 7620 }
.
295 \n-0000c700: 2020 2020 2020 2020 2020 207d 3c2f 6469 }.
296\n-0000c760: 3c2f 7370 616e 3e20 2020 2020 2020 207d }\n-0000c770: 3c2f 6469 763e 0a3c 2f64 6976 3e0a 3c64
.
.\n-0000c790: 3c61 2069 643d 226c 3030 3239 3722 206e 297
.
298 \n-0000c830: 2020 3c73 7061 6e20 636c 6173 733d 226b private<\n-0000c850: 2f73 7061 6e3e 3a3c 2f64 6976 3e0a 3c64 /span>:
.\n-0000c870: 3c61 2069 643d 226c 3030 3239 3922 206e 299 Weight\n-0000c910: 3c2f 613e 2a20 5f76 5765 6967 6874 733b * _vWeights;\n-0000c920: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0000c970: 2033 3030 3c2f 7370 616e 3e20 2020 2020 300 \n-0000c980: 2020 203c 6120 636c 6173 733d 2263 6f64 Weight* _\n-0000c9e0: 6557 6569 6768 7473 3b3c 2f64 6976 3e0a eWeights;
.\n-0000c9f0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
302 \n-0000cb10: 2020 2020 203c 7370 616e 2063 6c61 7373 i\n-0000cb30: 6e74 3c2f 7370 616e 3e20 5f76 436f 756e nt _vCoun\n-0000cb40: 743b 3c2f 6469 763e 0a3c 6469 7620 636c t;
.
303 \n-0000cba0: 2020 2020 203c 7370 616e 2063 6c61 7373 i\n-0000cbc0: 6e74 3c2f 7370 616e 3e20 5f65 436f 756e nt _eCoun\n-0000cbd0: 743b 3c2f 6469 763e 0a3c 6469 7620 636c t;
.
304 \n-0000cc30: 2020 2020 203c 7370 616e 2063 6c61 7373 i\n-0000cc50: 6e74 3c2f 7370 616e 3e20 5f66 436f 756e nt _fCoun\n-0000cc60: 743b 3c2f 6469 763e 0a3c 6469 7620 636c t;
.
305 \n-0000ccc0: 2020 2020 203c 7370 616e 2063 6c61 7373 b\n-0000cce0: 6f6f 6c3c 2f73 7061 6e3e 205f 6657 6569 ool _fWei\n-0000ccf0: 6768 7473 466f 7243 656e 7465 7273 3b3c ghtsForCenters;<\n-0000cd00: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-0000cd50: 3330 363c 2f73 7061 6e3e 2020 2020 7d3b 306 };\n-0000cd60: 3c2f 6469 763e 0a3c 2f64 6976 3e0a 3c64
.
.\n-0000cd80: 3c61 2069 643d 226c 3030 3330 3722 206e 307};
..
308<\n-0000ce20: 2f73 7061 6e3e 203c 2f64 6976 3e0a 3c64 /span>
.\n-0000ce40: 3c61 2069 643d 226c 3030 3330 3922 206e 309
.
310//.
31\n-0000cf50: 313c 2f73 7061 6e3e 3c73 7061 6e20 636c 1//\n-0000cf70: 2020 4372 6561 7365 2061 6e64 2063 6f72 Crease and cor\n-0000cf80: 6e65 7220 6d61 736b 7320 6172 6520 636f ner masks are co\n-0000cf90: 6d6d 6f6e 2074 6f20 6d6f 7374 2073 6368 mmon to most sch\n-0000cfa0: 656d 6573 202d 2d20 7468 6520 7265 7374 emes -- the rest\n-0000cfb0: 206e 6565 6420 746f 2062 6520 7072 6f76 need to be prov\n-0000cfc0: 6964 6564 3c2f 7370 616e 3e3c 2f64 6976 ided.
312<\n-0000d020: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>// \n-0000d040: 666f 7220 6561 6368 2053 6368 656d 6520 for each Scheme \n-0000d050: 7370 6563 6961 6c69 7a61 7469 6f6e 2e3c specialization.<\n-0000d060: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
.<\n-0000d080: 6120 6964 3d22 6c30 3033 3133 2220 6e61 a id=\"l00313\" na\n-0000d090: 6d65 3d22 6c30 3033 3133 223e 3c2f 613e me=\"l00313\">\n-0000d0a0: 3c73 7061 6e20 636c 6173 733d 226c 696e 313//\n-0000d0e0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0000d130: 2033 3134 3c2f 7370 616e 3e3c 7370 616e 314template\n-0000d160: 2026 6c74 3b53 6368 656d 6554 7970 6520 <SchemeType \n-0000d170: 5343 4845 4d45 2667 743b 3c2f 6469 763e SCHEME>
\n-0000d180: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-0000d1b0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 315templ\n-0000d1f0: 6174 653c 2f73 7061 6e3e 2026 6c74 3b3c ate <<\n-0000d200: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-0000d210: 6f72 6422 3e74 7970 656e 616d 653c 2f73 ord\">typename EDGE, typename\n-0000d250: 204d 4153 4b26 6774 3b3c 2f64 6976 3e0a MASK>
.\n-0000d260: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n-0000d290: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 316inline\n-0000d2d0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c void.
.
317\n-0000d3e0: 3c2f 7370 616e 3e3c 6120 636c 6173 733d Scheme&l\n-0000d440: 743b 5343 4845 4d45 2667 743b 3a3a 6173 t;SCHEME>::as\n-0000d450: 7369 676e 4372 6561 7365 4d61 736b 466f signCreaseMaskFo\n-0000d460: 7245 6467 653c 2f61 3e28 4544 4745 203c rEdge(EDGE <\n-0000d470: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-0000d480: 6f72 6422 3e63 6f6e 7374 3c2f 7370 616e ord\">const&, MASK&\n-0000d4a0: 3b20 6d61 736b 293c 7370 616e 2063 6c61 ; mask) co\n-0000d4c0: 6e73 7420 3c2f 7370 616e 3e7b 3c2f 6469 nst {.
318\n-0000d520: 3c2f 7370 616e 3e20 3c2f 6469 763e 0a3c
.<\n-0000d530: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0000d540: 3e3c 6120 6964 3d22 6c30 3033 3139 2220 > 319 mask.SetN\n-0000d590: 756d 5665 7274 6578 5765 6967 6874 7328 umVertexWeights(\n-0000d5a0: 3229 3b3c 2f64 6976 3e0a 3c64 6976 2063 2);
.
320 \n-0000d600: 2020 6d61 736b 2e53 6574 4e75 6d45 6467 mask.SetNumEdg\n-0000d610: 6557 6569 6768 7473 2830 293b 3c2f 6469 eWeights(0);.
321\n-0000d670: 3c2f 7370 616e 3e20 2020 206d 6173 6b2e mask.\n-0000d680: 5365 744e 756d 4661 6365 5765 6967 6874 SetNumFaceWeight\n-0000d690: 7328 3029 3b3c 2f64 6976 3e0a 3c64 6976 s(0);
.<\n-0000d6d0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-0000d6e0: 6e6f 223e 2020 3332 323c 2f73 7061 6e3e no\"> 322\n-0000d6f0: 2020 2020 6d61 736b 2e53 6574 4661 6365 mask.SetFace\n-0000d700: 5765 6967 6874 7346 6f72 4661 6365 4365 WeightsForFaceCe\n-0000d710: 6e74 6572 7328 3c73 7061 6e20 636c 6173 nters(fals\n-0000d730: 653c 2f73 7061 6e3e 293b 3c2f 6469 763e e);
\n-0000d740: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n-0000d7b0: 6120 6964 3d22 6c30 3033 3234 2220 6e61 a id=\"l00324\" na\n-0000d7c0: 6d65 3d22 6c30 3033 3234 223e 3c2f 613e me=\"l00324\">\n-0000d7d0: 3c73 7061 6e20 636c 6173 733d 226c 696e 324 mask.Vertex\n-0000d800: 5765 6967 6874 2830 2920 3d20 302e 3566 Weight(0) = 0.5f\n-0000d810: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-0000d860: 2020 3332 353c 2f73 7061 6e3e 2020 2020 325 \n-0000d870: 6d61 736b 2e56 6572 7465 7857 6569 6768 mask.VertexWeigh\n-0000d880: 7428 3129 203d 2030 2e35 663b 3c2f 6469 t(1) = 0.5f;.
326\n-0000d8e0: 3c2f 7370 616e 3e7d 3c2f 6469 763e 0a3c }
.<\n-0000d8f0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-0000d940: 3332 373c 2f73 7061 6e3e 203c 2f64 6976 327 .
328<\n-0000d9a0: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>temp\n-0000d9c0: 6c61 7465 3c2f 7370 616e 3e20 266c 743b late <\n-0000d9d0: 5363 6865 6d65 5479 7065 2053 4348 454d SchemeType SCHEM\n-0000d9e0: 4526 6774 3b3c 2f64 6976 3e0a 3c64 6976 E>
.<\n-0000da20: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-0000da30: 6e6f 223e 2020 3332 393c 2f73 7061 6e3e no\"> 329\n-0000da40: 3c73 7061 6e20 636c 6173 733d 226b 6579 template <\n-0000da80: 7479 7065 6e61 6d65 3c2f 7370 616e 3e20 typename \n-0000da90: 5645 5254 4558 2c20 3c73 7061 6e20 636c VERTEX, ty\n-0000dab0: 7065 6e61 6d65 3c2f 7370 616e 3e20 4d41 pename MA\n-0000dac0: 534b 2667 743b 3c2f 6469 763e 0a3c 6469 SK>
.<\n-0000dae0: 6120 6964 3d22 6c30 3033 3330 2220 6e61 a id=\"l00330\" na\n-0000daf0: 6d65 3d22 6c30 3033 3330 223e 3c2f 613e me=\"l00330\">\n-0000db00: 3c73 7061 6e20 636c 6173 733d 226c 696e 330inline v\n-0000db60: 6f69 643c 2f73 7061 6e3e 3c2f 6469 763e oid
\n-0000db70: 0a3c 6469 7620 636c 6173 733d 2266 6f6c .
.
<\n-0000dc00: 6120 636c 6173 733d 226c 696e 6522 2068 a class=\"line\" h\n-0000dc10: 7265 663d 2261 3031 3333 332e 6874 6d6c ref=\"a01333.html\n-0000dc20: 2361 3737 3634 3466 3639 6564 6530 3366 #a77644f69ede03f\n-0000dc30: 6136 3232 3232 6436 3061 3939 3937 3032 a62222d60a999702\n-0000dc40: 3338 223e 2020 3333 313c 2f61 3e3c 2f73 38\"> 331Scheme<S\n-0000dcb0: 4348 454d 4526 6774 3b3a 3a61 7373 6967 CHEME>::assig\n-0000dcc0: 6e43 6f72 6e65 724d 6173 6b46 6f72 5665 nCornerMaskForVe\n-0000dcd0: 7274 6578 3c2f 613e 2856 4552 5445 5820 rtex(VERTEX \n-0000dce0: 3c73 7061 6e20 636c 6173 733d 226b 6579 const&, MASK&am\n-0000dd10: 703b 206d 6173 6b29 3c73 7061 6e20 636c p; mask) c\n-0000dd30: 6f6e 7374 203c 2f73 7061 6e3e 7b3c 2f64 onst {.
33\n-0000dd90: 323c 2f73 7061 6e3e 203c 2f64 6976 3e0a 2
.\n-0000dda0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
334 \n-0000de70: 2020 206d 6173 6b2e 5365 744e 756d 4564 mask.SetNumEd\n-0000de80: 6765 5765 6967 6874 7328 3029 3b3c 2f64 geWeights(0);.
33\n-0000dee0: 353c 2f73 7061 6e3e 2020 2020 6d61 736b 5 mask\n-0000def0: 2e53 6574 4e75 6d46 6163 6557 6569 6768 .SetNumFaceWeigh\n-0000df00: 7473 2830 293b 3c2f 6469 763e 0a3c 6469 ts(0);
.<\n-0000df20: 6120 6964 3d22 6c30 3033 3336 2220 6e61 a id=\"l00336\" na\n-0000df30: 6d65 3d22 6c30 3033 3336 223e 3c2f 613e me=\"l00336\">\n-0000df40: 3c73 7061 6e20 636c 6173 733d 226c 696e 336 mask.SetFac\n-0000df70: 6557 6569 6768 7473 466f 7246 6163 6543 eWeightsForFaceC\n-0000df80: 656e 7465 7273 283c 7370 616e 2063 6c61 enters(fal\n-0000dfa0: 7365 3c2f 7370 616e 3e29 3b3c 2f64 6976 se);.
337<\n-0000e000: 2f73 7061 6e3e 203c 2f64 6976 3e0a 3c64 /span>
.\n-0000e020: 3c61 2069 643d 226c 3030 3333 3822 206e 338 mask.Verte\n-0000e070: 7857 6569 6768 7428 3029 203d 2031 2e30 xWeight(0) = 1.0\n-0000e080: 663b 3c2f 6469 763e 0a3c 6469 7620 636c f;
.
339}.
.<\n-0000e120: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-0000e130: 6e6f 223e 2020 3334 303c 2f73 7061 6e3e no\"> 340
\n-0000e140: 203c 2f64 6976 3e0a 3c64 6976 2063 6c61
..
344//.
34\n-0000e3b0: 353c 2f73 7061 6e3e 3c73 7061 6e20 636c 5te\n-0000e3d0: 6d70 6c61 7465 3c2f 7370 616e 3e20 266c mplate &l\n-0000e3e0: 743b 5363 6865 6d65 5479 7065 2053 4348 t;SchemeType SCH\n-0000e3f0: 454d 4526 6774 3b3c 2f64 6976 3e0a 3c64 EME>
.\n-0000e410: 3c61 2069 643d 226c 3030 3334 3622 206e 346template\n-0000e470: 3c2f 7370 616e 3e20 266c 743b 3c73 7061 <typename FACE, ty\n-0000e4c0: 7065 6e61 6d65 3c2f 7370 616e 3e20 4d41 pename MA\n-0000e4d0: 534b 2667 743b 3c2f 6469 763e 0a3c 6469 SK>
.<\n-0000e4f0: 6120 6964 3d22 6c30 3033 3437 2220 6e61 a id=\"l00347\" na\n-0000e500: 6d65 3d22 6c30 3033 3437 223e 3c2f 613e me=\"l00347\">\n-0000e510: 3c73 7061 6e20 636c 6173 733d 226c 696e 347void<\n-0000e550: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
..
\n-0000e630: 2020 3334 383c 2f61 3e3c 2f73 7061 6e3e 348\n-0000e640: 3c61 2063 6c61 7373 3d22 636f 6465 2068 Scheme<SCHEM\n-0000e6a0: 4526 6774 3b3a 3a43 6f6d 7075 7465 4661 E>::ComputeFa\n-0000e6b0: 6365 5665 7274 6578 4d61 736b 3c2f 613e ceVertexMask\n-0000e6c0: 2846 4143 4520 3c73 7061 6e20 636c 6173 (FACE cons\n-0000e6e0: 743c 2f73 7061 6e3e 2661 6d70 3b20 6661 t& fa\n-0000e6f0: 6365 2c20 4d41 534b 2661 6d70 3b20 6d61 ce, MASK& ma\n-0000e700: 736b 293c 7370 616e 2063 6c61 7373 3d22 sk) const \n-0000e720: 3c2f 7370 616e 3e7b 3c2f 6469 763e 0a3c {
.<\n-0000e730: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0000e740: 3e3c 6120 6964 3d22 6c30 3033 3439 2220 > 349
.
350 \n-0000e7e0: 2020 203c 7370 616e 2063 6c61 7373 3d22 int\n-0000e800: 3c2f 7370 616e 3e20 7665 7274 436f 756e vertCoun\n-0000e810: 7420 3d20 6661 6365 2e47 6574 4e75 6d56 t = face.GetNumV\n-0000e820: 6572 7469 6365 7328 293b 3c2f 6469 763e ertices();
\n-0000e830: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n-0000e8a0: 6120 6964 3d22 6c30 3033 3532 2220 6e61 a id=\"l00352\" na\n-0000e8b0: 6d65 3d22 6c30 3033 3532 223e 3c2f 613e me=\"l00352\">\n-0000e8c0: 3c73 7061 6e20 636c 6173 733d 226c 696e 352 mask.SetNum\n-0000e8f0: 5665 7274 6578 5765 6967 6874 7328 7665 VertexWeights(ve\n-0000e900: 7274 436f 756e 7429 3b3c 2f64 6976 3e0a rtCount);
.\n-0000e910: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
354 \n-0000e9e0: 206d 6173 6b2e 5365 744e 756d 4661 6365 mask.SetNumFace\n-0000e9f0: 5765 6967 6874 7328 3029 3b3c 2f64 6976 Weights(0);.
355<\n-0000ea50: 2f73 7061 6e3e 2020 2020 6d61 736b 2e53 /span> mask.S\n-0000ea60: 6574 4661 6365 5765 6967 6874 7346 6f72 etFaceWeightsFor\n-0000ea70: 4661 6365 4365 6e74 6572 7328 3c73 7061 FaceCenters(false);\n-0000eaa0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0000eaf0: 2033 3536 3c2f 7370 616e 3e20 3c2f 6469 356 .
357\n-0000eb50: 3c2f 7370 616e 3e20 2020 203c 7370 616e typename\n-0000eb80: 204d 4153 4b3a 3a57 6569 6768 7420 7657 MASK::Weight vW\n-0000eb90: 6569 6768 7420 3d20 312e 3066 202f 2028 eight = 1.0f / (\n-0000eba0: 3c73 7061 6e20 636c 6173 733d 226b 6579 typename MASK::Weig\n-0000ebd0: 6874 2920 7665 7274 436f 756e 743b 3c2f ht) vertCount;.
3\n-0000ec30: 3538 3c2f 7370 616e 3e20 2020 203c 7370 58 for (int\n-0000ec80: 3c2f 7370 616e 3e20 6920 3d20 303b 2069 i = 0; i\n-0000ec90: 2026 6c74 3b20 7665 7274 436f 756e 743b < vertCount;\n-0000eca0: 202b 2b69 2920 7b3c 2f64 6976 3e0a 3c64 ++i) {
.\n-0000ecc0: 3c61 2069 643d 226c 3030 3335 3922 206e 359 mask.V\n-0000ed10: 6572 7465 7857 6569 6768 7428 6929 203d ertexWeight(i) =\n-0000ed20: 2076 5765 6967 6874 3b3c 2f64 6976 3e0a vWeight;
.\n-0000ed30: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .\n-0000ed90: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 ..
362\n-0000ee40: 3c2f 7370 616e 3e20 3c2f 6469 763e 0a3c
.<\n-0000ee50: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0000ee60: 3e3c 6120 6964 3d22 6c30 3033 3633 2220 > 363
.
364<\n-0000ef00: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-0000ef10: 656e 7422 3e2f 2f3c 2f73 7061 6e3e 3c2f ent\">//.
3\n-0000ef70: 3635 3c2f 7370 616e 3e3c 7370 616e 2063 65/\n-0000ef90: 2f20 2054 6865 2063 6f6d 7075 7461 7469 / The computati\n-0000efa0: 6f6e 206f 6620 616e 2065 6467 652d 7665 on of an edge-ve\n-0000efb0: 7274 6578 206d 6173 6b20 7265 7175 6972 rtex mask requir\n-0000efc0: 6573 2069 6e73 7065 6374 696f 6e20 6f66 es inspection of\n-0000efd0: 2073 6861 7270 6e65 7373 2076 616c 7565 sharpness value\n-0000efe0: 7320 746f 3c2f 7370 616e 3e3c 2f64 6976 s to.
366<\n-0000f040: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>// \n-0000f060: 6465 7465 726d 696e 6520 6966 2073 6d6f determine if smo\n-0000f070: 6f74 6820 6f72 2061 2063 7265 6173 652c oth or a crease,\n-0000f080: 2061 6e64 2061 6c73 6f20 746f 2064 6574 and also to det\n-0000f090: 6563 7420 616e 6420 6170 706c 7920 6120 ect and apply a \n-0000f0a0: 7472 616e 7369 7469 6f6e 2066 726f 6d20 transition from \n-0000f0b0: 613c 2f73 7061 6e3e 3c2f 6469 763e 0a3c a
.<\n-0000f0c0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0000f0d0: 3e3c 6120 6964 3d22 6c30 3033 3637 2220 > 367// cre\n-0000f130: 6173 6520 746f 2073 6d6f 6f74 682e 2020 ase to smooth. \n-0000f140: 5573 696e 6720 7468 6520 7072 6f74 6563 Using the protec\n-0000f150: 7465 6420 6d65 7468 6f64 7320 746f 2061 ted methods to a\n-0000f160: 7373 6967 6e20 7468 6520 7370 6563 6966 ssign the specif\n-0000f170: 6963 206d 6173 6b73 2028 6f6e 6c79 3c2f ic masks (only
.<\n-0000f1c0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-0000f1d0: 6e6f 223e 2020 3336 383c 2f73 7061 6e3e no\"> 368\n-0000f1e0: 3c73 7061 6e20 636c 6173 733d 2263 6f6d // two --\n-0000f200: 2073 6d6f 6f74 6820 6f72 2063 7265 6173 smooth or creas\n-0000f210: 6529 2074 6869 7320 696d 706c 656d 656e e) this implemen\n-0000f220: 7461 7469 6f6e 2073 686f 756c 6420 7365 tation should se\n-0000f230: 7276 6520 616c 6c20 6e6f 6e2d 6c69 6e65 rve all non-line\n-0000f240: 6172 2073 6368 656d 6573 3c2f 7370 616e ar schemes
.
\n-0000f2a0: 2020 3336 393c 2f73 7061 6e3e 3c73 7061 369// (currently\n-0000f2d0: 2043 6174 6d61 726b 2061 6e64 204c 6f6f Catmark and Loo\n-0000f2e0: 7029 2061 6e64 206f 6e6c 7920 6e65 6564 p) and only need\n-0000f2f0: 7320 746f 2062 6520 7370 6563 6961 6c69 s to be speciali\n-0000f300: 7a65 6420 666f 7220 4269 6c69 6e65 6172 zed for Bilinear\n-0000f310: 2074 6f3c 2f73 7061 6e3e 3c2f 6469 763e to
\n-0000f320: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-0000f350: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 370// t\n-0000f390: 7269 7669 616c 697a 6520 6974 2074 6f20 rivialize it to \n-0000f3a0: 7468 6520 6372 6561 7365 2063 6173 652e the crease case.\n-0000f3b0: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n-0000f3d0: 3c61 2069 643d 226c 3030 3337 3122 206e 371//
.
\n-0000f480: 2020 3337 323c 2f73 7061 6e3e 3c73 7061 372// The implem\n-0000f4b0: 656e 7461 7469 6f6e 2068 6572 6520 6973 entation here is\n-0000f4c0: 2073 6c69 6768 746c 7920 636f 6d70 6c69 slightly compli\n-0000f4d0: 6361 7465 6420 6279 2063 6f6d 6269 6e69 cated by combini\n-0000f4e0: 6e67 2074 776f 2073 6365 6e61 7269 6f73 ng two scenarios\n-0000f4f0: 2069 6e74 6f20 613c 2f73 7061 6e3e 3c2f into a.
3\n-0000f550: 3733 3c2f 7370 616e 3e3c 7370 616e 2063 73/\n-0000f570: 2f20 2073 696e 676c 6520 696d 706c 656d / single implem\n-0000f580: 656e 7461 7469 6f6e 202d 2d20 6569 7468 entation -- eith\n-0000f590: 6572 2074 6865 2063 616c 6c65 7220 6b6e er the caller kn\n-0000f5a0: 6f77 7320 7468 6520 7061 7265 6e74 2061 ows the parent a\n-0000f5b0: 6e64 2063 6869 6c64 2072 756c 6573 2061 nd child rules a\n-0000f5c0: 6e64 3c2f 7370 616e 3e3c 2f64 6976 3e0a nd
.\n-0000f5d0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n-0000f6a0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0000f6b0: 3e3c 6120 6964 3d22 6c30 3033 3735 2220 > 375// val\n-0000f710: 7565 732e 2020 426f 7468 2063 6173 6573 ues. Both cases\n-0000f720: 2069 6e63 6c75 6465 2071 7569 636b 2072 include quick r\n-0000f730: 6574 7572 6e20 6f6e 6365 2074 6865 2070 eturn once the p\n-0000f740: 6172 656e 7420 6973 2064 6574 6572 6d69 arent is determi\n-0000f750: 6e65 6420 746f 2062 653c 2f73 7061 6e3e ned to be\n-0000f760: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0000f7b0: 2033 3736 3c2f 7370 616e 3e3c 7370 616e 376// smooth or t\n-0000f7e0: 6865 2063 6869 6c64 2061 2063 7265 6173 he child a creas\n-0000f7f0: 652c 206c 6561 7669 6e67 2074 6865 2074 e, leaving the t\n-0000f800: 7261 6e73 6974 696f 6e61 6c20 6361 7365 ransitional case\n-0000f810: 2072 656d 6169 6e69 6e67 2e3c 2f73 7061 remaining.
.
377//.
378\n-0000f8f0: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 // \n-0000f910: 2054 6865 206f 7665 7261 6c6c 2070 726f The overall pro\n-0000f920: 6365 7373 2069 7320 6173 2066 6f6c 6c6f cess is as follo\n-0000f930: 7773 3a3c 2f73 7061 6e3e 3c2f 6469 763e ws:
\n-0000f940: 0a3c 6469 7620 636c 6173 733d 226c 696e ..
380<\n-0000fa10: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-0000fa20: 656e 7422 3e2f 2f20 2020 2020 202d 2071 ent\">// - q\n-0000fa30: 7569 636b 6c79 2064 6574 6563 7420 7468 uickly detect th\n-0000fa40: 6520 6d6f 7374 2063 6f6d 6d6f 6e20 7370 e most common sp\n-0000fa50: 6563 6966 6965 6420 6f72 2064 6574 6563 ecified or detec\n-0000fa60: 7465 6420 536d 6f6f 7468 2063 6173 6520 ted Smooth case \n-0000fa70: 616e 6420 7265 7475 726e 3c2f 7370 616e and return
.
\n-0000fad0: 2020 3338 313c 2f73 7061 6e3e 3c73 7061 381// - quic\n-0000fb00: 6b6c 7920 6465 7465 6374 2061 2066 756c kly detect a ful\n-0000fb10: 6c20 4372 6561 7365 2062 7920 6368 696c l Crease by chil\n-0000fb20: 6420 5275 6c65 2061 7373 6967 6e6d 656e d Rule assignmen\n-0000fb30: 7420 616e 6420 7265 7475 726e 3c2f 7370 t and return
.
382// - de\n-0000fbc0: 7465 726d 696e 6520 6672 6f6d 2073 6861 termine from sha\n-0000fbd0: 7270 6e65 7373 2069 6620 756e 7370 6563 rpness if unspec\n-0000fbe0: 6966 6965 6420 6368 696c 6420 6973 2061 ified child is a\n-0000fbf0: 2063 7265 6173 6520 2d2d 2072 6574 7572 crease -- retur\n-0000fc00: 6e20 6966 2073 6f3c 2f73 7061 6e3e 3c2f n if so.
3\n-0000fc60: 3833 3c2f 7370 616e 3e3c 7370 616e 2063 83/\n-0000fc80: 2f20 2020 2020 202d 2063 6f6d 7075 7465 / - compute\n-0000fc90: 2073 6d6f 6f74 6820 6d61 736b 2066 6f72 smooth mask for\n-0000fca0: 2063 6869 6c64 2061 6e64 2063 6f6d 6269 child and combi\n-0000fcb0: 6e65 2077 6974 6820 6372 6561 7365 2066 ne with crease f\n-0000fcc0: 726f 6d20 7061 7265 6e74 3c2f 7370 616e rom parent
.
\n-0000fd20: 2020 3338 343c 2f73 7061 6e3e 3c73 7061 384//.
385<\n-0000fda0: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>// \n-0000fdc0: 5573 6167 6520 6f66 2074 6865 2070 6172 Usage of the par\n-0000fdd0: 656e 7420 5275 6c65 2068 6572 6520 616c ent Rule here al\n-0000fde0: 6c6f 7773 2073 6f6d 6520 6d69 7375 7365 lows some misuse\n-0000fdf0: 2069 6e20 7468 6174 206f 6e6c 7920 7468 in that only th\n-0000fe00: 7265 6520 6f66 2066 6976 6520 706f 7373 ree of five poss\n-0000fe10: 6962 6c65 3c2f 7370 616e 3e3c 2f64 6976 ible.
386<\n-0000fe70: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>// \n-0000fe90: 6173 7369 676e 6d65 6e74 7320 6172 6520 assignments are \n-0000fea0: 6c65 6769 7469 6d61 7465 2066 6f72 2074 legitimate for t\n-0000feb0: 6865 2070 6172 656e 7420 616e 6420 666f he parent and fo\n-0000fec0: 7572 2066 6f72 2074 6865 2063 6869 6c64 ur for the child\n-0000fed0: 2028 4461 7274 2062 6569 6e67 206f 6e6c (Dart being onl\n-0000fee0: 793c 2f73 7061 6e3e 3c2f 6469 763e 0a3c y
.<\n-0000fef0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0000ff00: 3e3c 6120 6964 3d22 6c30 3033 3837 2220 > 387// val\n-0000ff60: 6964 2066 6f72 2074 6865 2063 6869 6c64 id for the child\n-0000ff70: 2061 6e64 2043 6f72 6e65 7220 666f 7220 and Corner for \n-0000ff80: 6e65 6974 6865 7229 2e20 2052 6573 756c neither). Resul\n-0000ff90: 7473 2061 7265 2075 6e64 6566 696e 6564 ts are undefined\n-0000ffa0: 2069 6e20 7468 6573 6520 6361 7365 732e in these cases.\n-0000ffb0: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n-0000ffd0: 3c61 2069 643d 226c 3030 3338 3822 206e 388//
.
\n-00010080: 2020 3338 393c 2f73 7061 6e3e 3c73 7061 389template <SchemeType\n-000100c0: 2053 4348 454d 4526 6774 3b3c 2f64 6976 SCHEME>.
390<\n-00010120: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>temp\n-00010140: 6c61 7465 3c2f 7370 616e 3e20 266c 743b late <\n-00010150: 3c73 7061 6e20 636c 6173 733d 226b 6579 typename EDGE, typename MASK>
\n-000101b0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-000101e0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 391v\n-00010220: 6f69 643c 2f73 7061 6e3e 3c2f 6469 763e oid
\n-00010230: 0a3c 6469 7620 636c 6173 733d 2266 6f6c .
.
<\n-000102c0: 6120 636c 6173 733d 226c 696e 6522 2068 a class=\"line\" h\n-000102d0: 7265 663d 2261 3031 3333 332e 6874 6d6c ref=\"a01333.html\n-000102e0: 2361 3562 3561 3533 3737 6130 3165 6234 #a5b5a5377a01eb4\n-000102f0: 6261 3434 3665 3137 3465 6666 3965 3435 ba446e174eff9e45\n-00010300: 6163 223e 2020 3339 323c 2f61 3e3c 2f73 ac\"> 392Scheme<S\n-00010370: 4348 454d 4526 6774 3b3a 3a43 6f6d 7075 CHEME>::Compu\n-00010380: 7465 4564 6765 5665 7274 6578 4d61 736b teEdgeVertexMask\n-00010390: 3c2f 613e 2845 4447 4520 3c73 7061 6e20 (EDGE \n-000103b0: 636f 6e73 743c 2f73 7061 6e3e 2661 6d70 const&\n-000103c0: 3b20 2020 2020 6564 6765 2c3c 2f64 6976 ; edge,.
393<\n-00010420: 2f73 7061 6e3e 2020 2020 2020 2020 2020 /span> \n-00010430: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00010440: 2020 2020 2020 2020 2020 2020 2020 204d M\n-00010450: 4153 4b26 616d 703b 2020 2020 2020 2020 ASK& \n-00010460: 2020 206d 6173 6b2c 3c2f 6469 763e 0a3c mask,
.<\n-00010470: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00010480: 3e3c 6120 6964 3d22 6c30 3033 3934 2220 > 394 \n-000104d0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000104e0: 2020 2020 2020 2020 2020 2020 3c61 2063 \n-00010540: 4372 6561 7365 3a3a 5275 6c65 3c2f 613e Crease::Rule\n-00010550: 2070 6172 656e 7452 756c 652c 3c2f 6469 parentRule,.
395\n-000105b0: 3c2f 7370 616e 3e20 2020 2020 2020 2020 \n-000105c0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000105d0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000105e0: 3c61 2063 6c61 7373 3d22 636f 6465 2068 Crease::Rule\n-00010640: 3c2f 613e 2063 6869 6c64 5275 6c65 293c childRule)<\n-00010650: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00010660: 6f72 6422 3e20 636f 6e73 7420 3c2f 7370 ord\"> const {
.
396 \n-000106d0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00010720: 2033 3937 3c2f 7370 616e 3e20 2020 203c 397 <\n-00010730: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-00010740: 656e 7422 3e2f 2f3c 2f73 7061 6e3e 3c2f ent\">//.
3\n-000107a0: 3938 3c2f 7370 616e 3e20 2020 203c 7370 98 // If the pa\n-000107d0: 7265 6e74 2077 6173 2073 7065 6369 6669 rent was specifi\n-000107e0: 6564 206f 7220 6465 7465 726d 696e 6564 ed or determined\n-000107f0: 2074 6f20 6265 2053 6d6f 6f74 682c 2077 to be Smooth, w\n-00010800: 6520 6361 6e20 7175 6963 6b6c 7920 7265 e can quickly re\n-00010810: 7475 726e 3c2f 7370 616e 3e3c 2f64 6976 turn.
399<\n-00010870: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> \n-00010890: 2f2f 2020 7769 7468 2061 2053 6d6f 6f74 // with a Smoot\n-000108a0: 6820 6d61 736b 2e20 204f 7468 6572 7769 h mask. Otherwi\n-000108b0: 7365 2074 6865 2070 6172 656e 7420 6973 se the parent is\n-000108c0: 2061 2063 7265 6173 6520 2d2d 2069 6620 a crease -- if \n-000108d0: 7468 6520 6368 696c 6420 7761 733c 2f73 the child was
.
400 \n-00010940: 2020 203c 7370 616e 2063 6c61 7373 3d22 // als\n-00010960: 6f20 7370 6563 6966 6965 6420 746f 2062 o specified to b\n-00010970: 6520 6120 6372 6561 7365 2c20 7765 2063 e a crease, we c\n-00010980: 616e 2071 7569 636b 6c79 2072 6574 7572 an quickly retur\n-00010990: 6e20 7769 7468 2061 2043 7265 6173 6520 n with a Crease \n-000109a0: 6d61 736b 2e3c 2f73 7061 6e3e 3c2f 6469 mask..
401\n-00010a00: 3c2f 7370 616e 3e20 2020 203c 7370 616e //
\n-00010a30: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00010a60: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 402 if ((p\n-00010ab0: 6172 656e 7452 756c 6520 3d3d 203c 6120 arentRule == \n-00010b30: 4372 6561 7365 3a3a 5255 4c45 5f53 4d4f Crease::RULE_SMO\n-00010b40: 4f54 483c 2f61 3e29 207c 7c3c 2f64 6976 OTH) ||.
403<\n-00010ba0: 2f73 7061 6e3e 2020 2020 2020 2028 2870 /span> ((p\n-00010bb0: 6172 656e 7452 756c 6520 3d3d 203c 6120 arentRule == \n-00010c30: 4372 6561 7365 3a3a 5255 4c45 5f55 4e4b Crease::RULE_UNK\n-00010c40: 4e4f 574e 3c2f 613e 2920 2661 6d70 3b26 NOWN) &&\n-00010c50: 616d 703b 2028 6564 6765 2e47 6574 5368 amp; (edge.GetSh\n-00010c60: 6172 706e 6573 7328 2920 266c 743b 3d20 arpness() <= \n-00010c70: 302e 3066 2929 2920 7b3c 2f64 6976 3e0a 0.0f))) {
.\n-00010c80: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
\n-00010d50: 2034 3035 3c2f 7370 616e 3e20 2020 2020 405 \n-00010d60: 2020 203c 7370 616e 2063 6c61 7373 3d22 ret\n-00010d80: 7572 6e3c 2f73 7061 6e3e 3b3c 2f64 6976 urn;.
406<\n-00010de0: 2f73 7061 6e3e 2020 2020 7d3c 2f64 6976 /span> }.
407<\n-00010e40: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> if (c\n-00010e70: 6869 6c64 5275 6c65 203d 3d20 3c61 2063 hildRule == C\n-00010ef0: 7265 6173 653a 3a52 554c 455f 4352 4541 rease::RULE_CREA\n-00010f00: 5345 3c2f 613e 2920 7b3c 2f64 6976 3e0a SE) {
.\n-00010f10: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
\n-00010fe0: 2034 3039 3c2f 7370 616e 3e20 2020 2020 409 \n-00010ff0: 2020 203c 7370 616e 2063 6c61 7373 3d22 ret\n-00011010: 7572 6e3c 2f73 7061 6e3e 3b3c 2f64 6976 urn;.
410<\n-00011070: 2f73 7061 6e3e 2020 2020 7d3c 2f64 6976 /span> }.
411<\n-000110d0: 2f73 7061 6e3e 203c 2f64 6976 3e0a 3c64 /span>
.\n-000110f0: 3c61 2069 643d 226c 3030 3431 3222 206e 412 //
.<\n-00011190: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-000111a0: 6e6f 223e 2020 3431 333c 2f73 7061 6e3e no\"> 413\n-000111b0: 2020 2020 3c73 7061 6e20 636c 6173 733d // We\n-000111d0: 2068 6176 6520 6120 4372 6561 7365 206f have a Crease o\n-000111e0: 6e20 7468 6520 7061 7265 6e74 2061 6e64 n the parent and\n-000111f0: 2074 6865 2063 6869 6c64 2077 6173 2065 the child was e\n-00011200: 6974 6865 7220 7370 6563 6966 6965 6420 ither specified \n-00011210: 6173 2053 6d6f 6f74 683c 2f73 7061 6e3e as Smooth\n-00011220: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00011270: 2034 3134 3c2f 7370 616e 3e20 2020 203c 414 <\n-00011280: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-00011290: 656e 7422 3e2f 2f20 206f 7220 7761 7320 ent\">// or was \n-000112a0: 6e6f 7420 7370 6563 6966 6965 6420 6174 not specified at\n-000112b0: 2061 6c6c 202d 2d20 6465 616c 2077 6974 all -- deal wit\n-000112c0: 6820 7468 6520 756e 7370 6563 6966 6965 h the unspecifie\n-000112d0: 6420 6361 7365 2066 6972 7374 2028 6167 d case first (ag\n-000112e0: 6169 6e3c 2f73 7061 6e3e 3c2f 6469 763e ain
\n-000112f0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00011320: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 415 /\n-00011360: 2f20 2072 6574 7572 6e69 6e67 2061 2043 / returning a C\n-00011370: 7265 6173 6520 6d61 736b 2069 6620 7468 rease mask if th\n-00011380: 6520 6368 696c 6420 6973 2061 6c73 6f20 e child is also \n-00011390: 6465 7465 726d 696e 6564 2074 6f20 6265 determined to be\n-000113a0: 2061 2043 7265 6173 6529 2061 6e64 3c2f a Crease) and
.<\n-000113f0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00011400: 6e6f 223e 2020 3431 363c 2f73 7061 6e3e no\"> 416
\n-00011410: 2020 2020 3c73 7061 6e20 636c 6173 733d // co\n-00011430: 6e74 696e 7565 2069 6620 7765 2068 6176 ntinue if we hav\n-00011440: 6520 6120 7472 616e 7369 7469 6f6e 2074 e a transition t\n-00011450: 6f20 536d 6f6f 7468 2e3c 2f73 7061 6e3e o Smooth.\n-00011460: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-000114b0: 2034 3137 3c2f 7370 616e 3e20 2020 203c 417 <\n-000114c0: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-000114d0: 656e 7422 3e2f 2f3c 2f73 7061 6e3e 3c2f ent\">//.
4\n-00011530: 3138 3c2f 7370 616e 3e20 2020 203c 7370 18 // Note when\n-00011560: 2071 7561 6c69 6679 696e 6720 7468 6520 qualifying the \n-00011570: 6368 696c 6420 7468 6174 2069 6620 7468 child that if th\n-00011580: 6520 7061 7265 6e74 2073 6861 7270 6e65 e parent sharpne\n-00011590: 7373 2026 6774 3b20 312e 302c 2072 6567 ss > 1.0, reg\n-000115a0: 6172 646c 6573 733c 2f73 7061 6e3e 3c2f ardless.
4\n-00011600: 3139 3c2f 7370 616e 3e20 2020 203c 7370 19 // of the cr\n-00011630: 6561 7369 6e67 206d 6574 686f 642c 2077 easing method, w\n-00011640: 6865 7468 6572 2074 6865 2063 6869 6c64 hether the child\n-00011650: 2073 6861 7270 6e65 7373 2076 616c 7565 sharpness value\n-00011660: 7320 6465 6361 7920 746f 207a 6572 6f20 s decay to zero \n-00011670: 6973 3c2f 7370 616e 3e3c 2f64 6976 3e0a is
.\n-00011680: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n-00011780: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00011790: 6e6f 223e 2020 3432 313c 2f73 7061 6e3e no\"> 421\n-000117a0: 2020 2020 3c73 7061 6e20 636c 6173 733d // sh\n-000117c0: 6172 706e 6573 7329 2069 7320 2667 743b arpness) is >\n-000117d0: 2031 2e30 2c20 616e 6420 7768 656e 2063 1.0, and when c\n-000117e0: 6c61 6d70 6564 2074 6f20 3120 6566 6665 lamped to 1 effe\n-000117f0: 6374 6976 656c 7920 7969 656c 6473 2061 ctively yields a\n-00011800: 2066 756c 6c20 6372 6561 7365 2e3c 2f73 full crease.
.
422 \n-00011870: 2020 203c 7370 616e 2063 6c61 7373 3d22 //
.
423 \n-000118f0: 203c 7370 616e 2063 6c61 7373 3d22 6b65 if (childRule \n-00011920: 3d3d 203c 6120 636c 6173 733d 2263 6f64 == Crease::RU\n-000119a0: 4c45 5f55 4e4b 4e4f 574e 3c2f 613e 2920 LE_UNKNOWN) \n-000119b0: 7b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 {
.
\n-00011a00: 2020 3432 343c 2f73 7061 6e3e 2020 2020 424 \n-00011a10: 2020 2020 3c61 2063 6c61 7373 3d22 636f \n-00011a40: 4372 6561 7365 3c2f 613e 2063 7265 6173 Crease creas\n-00011a50: 6528 5f6f 7074 696f 6e73 293b 3c2f 6469 e(_options);.
425\n-00011ab0: 3c2f 7370 616e 3e20 3c2f 6469 763e 0a3c
.<\n-00011ac0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00011ad0: 3e3c 6120 6964 3d22 6c30 3034 3236 2220 > 426 bool\n-00011b40: 2063 6869 6c64 4973 4372 6561 7365 203d childIsCrease =\n-00011b50: 203c 7370 616e 2063 6c61 7373 3d22 6b65 false;
.
427 \n-00011bd0: 2020 2020 2020 203c 7370 616e 2063 6c61 if (pare\n-00011c00: 6e74 5275 6c65 203d 3d20 3c61 2063 6c61 ntRule == Cre\n-00011c80: 6173 653a 3a52 554c 455f 4352 4541 5345 ase::RULE_CREASE\n-00011c90: 3c2f 613e 2920 7b3c 2f64 6976 3e0a 3c64 ) {
.\n-00011cb0: 3c61 2069 643d 226c 3030 3432 3822 206e 428 // Child un\n-00011d20: 6b6e 6f77 6e20 6173 2064 6566 6175 6c74 known as default\n-00011d30: 2076 616c 7565 2062 7574 2070 6172 656e value but paren\n-00011d40: 7420 5275 6c65 2073 7065 6369 6669 6564 t Rule specified\n-00011d50: 2061 7320 4372 6561 7365 3c2f 7370 616e as Crease
.
\n-00011db0: 2020 3432 393c 2f73 7061 6e3e 2020 2020 429 \n-00011dc0: 2020 2020 2020 2020 6368 696c 6449 7343 childIsC\n-00011dd0: 7265 6173 6520 3d20 3c73 7061 6e20 636c rease = tr\n-00011df0: 7565 3c2f 7370 616e 3e3b 3c2f 6469 763e ue;
\n-00011e00: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00011e30: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 430 } <\n-00011e60: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00011e70: 6f72 6466 6c6f 7722 3e65 6c73 653c 2f73 ordflow\">else i\n-00011ea0: 663c 2f73 7061 6e3e 2028 6564 6765 2e47 f (edge.G\n-00011eb0: 6574 5368 6172 706e 6573 7328 2920 2667 etSharpness() &g\n-00011ec0: 743b 3d20 312e 3066 2920 7b3c 2f64 6976 t;= 1.0f) {.
431<\n-00011f20: 2f73 7061 6e3e 2020 2020 2020 2020 2020 /span> \n-00011f30: 2020 3c73 7061 6e20 636c 6173 733d 2263 // Shar\n-00011f50: 706e 6573 7320 2667 743b 3d20 312e 3020 pness >= 1.0 \n-00011f60: 616c 7761 7973 2061 2063 7265 6173 6520 always a crease \n-00011f70: 2d2d 2073 6565 206e 6f74 6520 6162 6f76 -- see note abov\n-00011f80: 653c 2f73 7061 6e3e 3c2f 6469 763e 0a3c e
.<\n-00011f90: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00011fa0: 3e3c 6120 6964 3d22 6c30 3034 3332 2220 > 432 c\n-00011ff0: 6869 6c64 4973 4372 6561 7365 203d 203c hildIsCrease = <\n-00012000: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00012010: 6f72 6422 3e74 7275 653c 2f73 7061 6e3e ord\">true\n-00012020: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-00012070: 2020 3433 333c 2f73 7061 6e3e 2020 2020 433 \n-00012080: 2020 2020 7d20 3c73 7061 6e20 636c 6173 } \n-000120a0: 656c 7365 3c2f 7370 616e 3e20 3c73 7061 else if \n-000120d0: 2863 7265 6173 652e 3c61 2063 6c61 7373 (crease.IsUnifo\n-00012130: 726d 3c2f 613e 2829 2920 7b3c 2f64 6976 rm()) {.
434<\n-00012190: 2f73 7061 6e3e 2020 2020 2020 2020 2020 /span> \n-000121a0: 2020 3c73 7061 6e20 636c 6173 733d 2263 // Shar\n-000121c0: 706e 6573 7320 266c 743b 2031 2e30 2069 pness < 1.0 i\n-000121d0: 7320 6775 6172 616e 7465 6564 2074 6f20 s guaranteed to \n-000121e0: 6465 6361 7920 746f 2030 2e30 2066 6f72 decay to 0.0 for\n-000121f0: 2055 6e69 666f 726d 2063 6869 6c64 2065 Uniform child e\n-00012200: 6467 6573 3c2f 7370 616e 3e3c 2f64 6976 dges.
435<\n-00012260: 2f73 7061 6e3e 2020 2020 2020 2020 2020 /span> \n-00012270: 2020 6368 696c 6449 7343 7265 6173 6520 childIsCrease \n-00012280: 3d20 3c73 7061 6e20 636c 6173 733d 226b = false;
.<\n-000122e0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-000122f0: 6e6f 223e 2020 3433 363c 2f73 7061 6e3e no\"> 436
\n-00012300: 2020 2020 2020 2020 7d20 3c73 7061 6e20 } else \n-00012330: 7b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 {
.
\n-00012380: 2020 3433 373c 2f73 7061 6e3e 2020 2020 437 \n-00012390: 2020 2020 2020 2020 3c73 7061 6e20 636c //\n-000123b0: 2020 5368 6172 706e 6573 7320 266c 743b Sharpness <\n-000123c0: 3d20 312e 3020 646f 6573 206e 6f74 206e = 1.0 does not n\n-000123d0: 6563 6573 7361 7269 6c79 2064 6563 6179 ecessarily decay\n-000123e0: 2074 6f20 302e 3020 666f 7220 626f 7468 to 0.0 for both\n-000123f0: 2063 6869 6c64 2065 6467 6573 2e2e 2e3c child edges...<\n-00012400: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
.<\n-00012420: 6120 6964 3d22 6c30 3034 3338 2220 6e61 a id=\"l00438\" na\n-00012430: 6d65 3d22 6c30 3034 3338 223e 3c2f 613e me=\"l00438\">\n-00012440: 3c73 7061 6e20 636c 6173 733d 226c 696e 438 float cEdgeSharpne\n-000124a0: 7373 5b32 5d3b 3c2f 6469 763e 0a3c 6469 ss[2];
.<\n-000124c0: 6120 6964 3d22 6c30 3034 3339 2220 6e61 a id=\"l00439\" na\n-000124d0: 6d65 3d22 6c30 3034 3339 223e 3c2f 613e me=\"l00439\">\n-000124e0: 3c73 7061 6e20 636c 6173 733d 226c 696e 439 edg\n-00012510: 652e 4765 7443 6869 6c64 5368 6172 706e e.GetChildSharpn\n-00012520: 6573 7365 7328 6372 6561 7365 2c20 6345 esses(crease, cE\n-00012530: 6467 6553 6861 7270 6e65 7373 293b 3c2f dgeSharpness);.
4\n-00012590: 3430 3c2f 7370 616e 3e20 2020 2020 2020 40 \n-000125a0: 2020 2020 2063 6869 6c64 4973 4372 6561 childIsCrea\n-000125b0: 7365 203d 2028 6345 6467 6553 6861 7270 se = (cEdgeSharp\n-000125c0: 6e65 7373 5b30 5d20 2667 743b 2030 2e30 ness[0] > 0.0\n-000125d0: 6629 2026 616d 703b 2661 6d70 3b20 2863 f) && (c\n-000125e0: 4564 6765 5368 6172 706e 6573 735b 315d EdgeSharpness[1]\n-000125f0: 2026 6774 3b20 302e 3066 293b 3c2f 6469 > 0.0f);.
441\n-00012650: 3c2f 7370 616e 3e20 2020 2020 2020 207d }\n-00012660: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-000126b0: 2034 3432 3c2f 7370 616e 3e20 2020 2020 442 \n-000126c0: 2020 203c 7370 616e 2063 6c61 7373 3d22 if<\n-000126e0: 2f73 7061 6e3e 2028 6368 696c 6449 7343 /span> (childIsC\n-000126f0: 7265 6173 6529 207b 3c2f 6469 763e 0a3c rease) {
.<\n-00012700: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00012710: 3e3c 6120 6964 3d22 6c30 3034 3433 2220 > 443 a\n-00012760: 7373 6967 6e43 7265 6173 654d 6173 6b46 ssignCreaseMaskF\n-00012770: 6f72 4564 6765 2865 6467 652c 206d 6173 orEdge(edge, mas\n-00012780: 6b29 3b3c 2f64 6976 3e0a 3c64 6976 2063 k);
.
444 \n-000127e0: 2020 2020 2020 2020 2020 3c73 7061 6e20 return;
.
445 \n-00012870: 2020 2020 207d 3c2f 6469 763e 0a3c 6469 }
.<\n-00012890: 6120 6964 3d22 6c30 3034 3436 2220 6e61 a id=\"l00446\" na\n-000128a0: 6d65 3d22 6c30 3034 3436 223e 3c2f 613e me=\"l00446\">\n-000128b0: 3c73 7061 6e20 636c 6173 733d 226c 696e 446 }
.<\n-000128f0: 6120 6964 3d22 6c30 3034 3437 2220 6e61 a id=\"l00447\" na\n-00012900: 6d65 3d22 6c30 3034 3437 223e 3c2f 613e me=\"l00447\">\n-00012910: 3c73 7061 6e20 636c 6173 733d 226c 696e 447
.
448 \n-00012990: 203c 7370 616e 2063 6c61 7373 3d22 636f //\n-000129b0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00012a00: 2034 3439 3c2f 7370 616e 3e20 2020 203c 449 <\n-00012a10: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-00012a20: 656e 7422 3e2f 2f20 2057 6520 6172 6520 ent\">// We are \n-00012a30: 6e6f 7720 6c65 6674 2077 6974 6820 7468 now left with th\n-00012a40: 6520 4372 6561 7365 2d74 6f2d 536d 6f6f e Crease-to-Smoo\n-00012a50: 7468 2063 6173 6520 2d2d 2063 6f6d 7075 th case -- compu\n-00012a60: 7465 2074 6865 2053 6d6f 6f74 6820 6d61 te the Smooth ma\n-00012a70: 736b 3c2f 7370 616e 3e3c 2f64 6976 3e0a sk
.\n-00012a80: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
\n-00012b90: 2020 3435 313c 2f73 7061 6e3e 2020 2020 451 \n-00012ba0: 3c73 7061 6e20 636c 6173 733d 2263 6f6d //<\n-00012bc0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00012c10: 3435 323c 2f73 7061 6e3e 2020 2020 3c73 452 // A genera\n-00012c40: 6c20 636f 6d62 696e 6174 696f 6e20 6f66 l combination of\n-00012c50: 2073 6570 6172 6174 656c 7920 6173 7369 separately assi\n-00012c60: 676e 6564 206d 6173 6b73 2068 6572 6520 gned masks here \n-00012c70: 2861 7320 646f 6e65 2069 6e20 7468 6520 (as done in the \n-00012c80: 7665 7274 6578 2d3c 2f73 7061 6e3e 3c2f vertex-.
4\n-00012ce0: 3533 3c2f 7370 616e 3e20 2020 203c 7370 53 // vertex ca\n-00012d10: 7365 2920 6973 206f 7665 726b 696c 6c20 se) is overkill \n-00012d20: 2d2d 2074 7269 7669 616c 6c79 2063 6f6d -- trivially com\n-00012d30: 6269 6e65 2074 6865 2030 2e35 6620 7665 bine the 0.5f ve\n-00012d40: 7274 6578 2063 6f65 6666 6963 6965 6e74 rtex coefficient\n-00012d50: 2066 6f72 3c2f 7370 616e 3e3c 2f64 6976 for.
454<\n-00012db0: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> \n-00012dd0: 2f2f 2020 7468 6520 4372 6561 7365 206f // the Crease o\n-00012de0: 6620 7468 6520 7061 7265 6e74 2077 6974 f the parent wit\n-00012df0: 6820 7468 6520 7665 7274 6578 2077 6569 h the vertex wei\n-00012e00: 6768 7473 2061 6e64 2061 7474 656e 7561 ghts and attenua\n-00012e10: 7465 2074 6865 2066 6163 6520 7765 6967 te the face weig\n-00012e20: 6874 733c 2f73 7061 6e3e 3c2f 6469 763e hts
\n-00012e30: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00012e60: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 455 /\n-00012ea0: 2f20 2061 6363 6f72 6469 6e67 6c79 2e3c / accordingly.<\n-00012eb0: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
.<\n-00012ed0: 6120 6964 3d22 6c30 3034 3536 2220 6e61 a id=\"l00456\" na\n-00012ee0: 6d65 3d22 6c30 3034 3536 223e 3c2f 613e me=\"l00456\">\n-00012ef0: 3c73 7061 6e20 636c 6173 733d 226c 696e 456 //
.
457 \n-00012f90: 2020 2061 7373 6967 6e53 6d6f 6f74 684d assignSmoothM\n-00012fa0: 6173 6b46 6f72 4564 6765 2865 6467 652c askForEdge(edge,\n-00012fb0: 206d 6173 6b29 3b3c 2f64 6976 3e0a 3c64 mask);
.\n-00012fd0: 3c61 2069 643d 226c 3030 3435 3822 206e 458
.
459 \n-00013070: 2020 3c73 7061 6e20 636c 6173 733d 226b typedef<\n-00013090: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> typ\n-000130b0: 656e 616d 653c 2f73 7061 6e3e 204d 4153 ename MAS\n-000130c0: 4b3a 3a57 6569 6768 7420 5765 6967 6874 K::Weight Weight\n-000130d0: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-00013120: 2020 3436 303c 2f73 7061 6e3e 203c 2f64 460 .
46\n-00013180: 313c 2f73 7061 6e3e 2020 2020 5765 6967 1 Weig\n-00013190: 6874 2070 5765 6967 6874 203d 2065 6467 ht pWeight = edg\n-000131a0: 652e 4765 7453 6861 7270 6e65 7373 2829 e.GetSharpness()\n-000131b0: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-00013200: 2020 3436 323c 2f73 7061 6e3e 2020 2020 462 \n-00013210: 5765 6967 6874 2063 5765 6967 6874 203d Weight cWeight =\n-00013220: 2031 2e30 6620 2d20 7057 6569 6768 743b 1.0f - pWeight;\n-00013230: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00013280: 2034 3633 3c2f 7370 616e 3e20 3c2f 6469 463 .
464\n-000132e0: 3c2f 7370 616e 3e20 2020 206d 6173 6b2e mask.\n-000132f0: 5665 7274 6578 5765 6967 6874 2830 2920 VertexWeight(0) \n-00013300: 3d20 7057 6569 6768 7420 2a20 302e 3566 = pWeight * 0.5f\n-00013310: 202b 2063 5765 6967 6874 202a 206d 6173 + cWeight * mas\n-00013320: 6b2e 5665 7274 6578 5765 6967 6874 2830 k.VertexWeight(0\n-00013330: 293b 3c2f 6469 763e 0a3c 6469 7620 636c );
.
465 \n-00013390: 206d 6173 6b2e 5665 7274 6578 5765 6967 mask.VertexWeig\n-000133a0: 6874 2831 2920 3d20 7057 6569 6768 7420 ht(1) = pWeight \n-000133b0: 2a20 302e 3566 202b 2063 5765 6967 6874 * 0.5f + cWeight\n-000133c0: 202a 206d 6173 6b2e 5665 7274 6578 5765 * mask.VertexWe\n-000133d0: 6967 6874 2831 293b 3c2f 6469 763e 0a3c ight(1);
.<\n-000133e0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-000133f0: 3e3c 6120 6964 3d22 6c30 3034 3636 2220 > 466
.
467 \n-00013490: 2020 203c 7370 616e 2063 6c61 7373 3d22 int\n-000134b0: 3c2f 7370 616e 3e20 6661 6365 436f 756e faceCoun\n-000134c0: 7420 3d20 6d61 736b 2e47 6574 4e75 6d46 t = mask.GetNumF\n-000134d0: 6163 6557 6569 6768 7473 2829 3b3c 2f64 aceWeights();.
46\n-00013530: 383c 2f73 7061 6e3e 2020 2020 3c73 7061 8 for\n-00013560: 2028 3c73 7061 6e20 636c 6173 733d 226b (int<\n-00013580: 2f73 7061 6e3e 2069 203d 2030 3b20 6920 /span> i = 0; i \n-00013590: 266c 743b 2066 6163 6543 6f75 6e74 3b20 < faceCount; \n-000135a0: 2b2b 6929 207b 3c2f 6469 763e 0a3c 6469 ++i) {
.<\n-000135c0: 6120 6964 3d22 6c30 3034 3639 2220 6e61 a id=\"l00469\" na\n-000135d0: 6d65 3d22 6c30 3034 3639 223e 3c2f 613e me=\"l00469\">\n-000135e0: 3c73 7061 6e20 636c 6173 733d 226c 696e 469 mask.Fa\n-00013610: 6365 5765 6967 6874 2869 2920 2a3d 2063 ceWeight(i) *= c\n-00013620: 5765 6967 6874 3b3c 2f64 6976 3e0a 3c64 Weight;
.\n-00013640: 3c61 2069 643d 226c 3030 3437 3022 206e 470 }
.\n-000136a0: 3c61 2069 643d 226c 3030 3437 3122 206e 471}
.
\n-000136f0: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n-00013760: 6120 6964 3d22 6c30 3034 3733 2220 6e61 a id=\"l00473\" na\n-00013770: 6d65 3d22 6c30 3034 3733 223e 3c2f 613e me=\"l00473\">\n-00013780: 3c73 7061 6e20 636c 6173 733d 226c 696e 473//\n-000137c0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00013810: 2034 3734 3c2f 7370 616e 3e3c 7370 616e 474// The computa\n-00013840: 7469 6f6e 206f 6620 6120 7665 7274 6578 tion of a vertex\n-00013850: 2d76 6572 7465 7820 6d61 736b 2072 6571 -vertex mask req\n-00013860: 7569 7265 7320 696e 7370 6563 7469 6f6e uires inspection\n-00013870: 206f 6620 6372 6561 7369 6e67 2073 6861 of creasing sha\n-00013880: 7270 6e65 7373 2076 616c 7565 733c 2f73 rpness values
.
475<\n-000138f0: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-00013900: 656e 7422 3e2f 2f20 2074 6f20 6465 7465 ent\">// to dete\n-00013910: 726d 696e 6520 7768 6174 2073 7562 6469 rmine what subdi\n-00013920: 7669 7369 6f6e 2052 756c 6573 2061 7070 vision Rules app\n-00013930: 6c79 2074 6f20 7468 6520 7061 7265 6e74 ly to the parent\n-00013940: 2061 6e64 2069 7473 2063 6869 6c64 2076 and its child v\n-00013950: 6572 7465 782c 2061 6e64 2061 6c73 6f20 ertex, and also \n-00013960: 746f 3c2f 7370 616e 3e3c 2f64 6976 3e0a to
.\n-00013970: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n-000139a0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 476// de\n-000139e0: 7465 6374 2061 6e64 2061 7070 6c79 2061 tect and apply a\n-000139f0: 2074 7261 6e73 6974 696f 6e20 6265 7477 transition betw\n-00013a00: 6565 6e20 7477 6f20 6469 6666 6572 696e een two differin\n-00013a10: 6720 5275 6c65 732e 2020 5573 696e 6720 g Rules. Using \n-00013a20: 7468 6520 7072 6f74 6563 7465 6420 6d65 the protected me\n-00013a30: 7468 6f64 7320 746f 3c2f 7370 616e 3e3c thods to<\n-00013a40: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00013a90: 3437 373c 2f73 7061 6e3e 3c73 7061 6e20 477\n-00013ab0: 2f2f 2020 6173 7369 676e 2073 7065 6369 // assign speci\n-00013ac0: 6669 6320 6d61 736b 732c 2074 6869 7320 fic masks, this \n-00013ad0: 696d 706c 656d 656e 7461 7469 6f6e 2073 implementation s\n-00013ae0: 686f 756c 6420 7365 7276 6520 616c 6c20 hould serve all \n-00013af0: 6e6f 6e2d 6c69 6e65 6172 2073 6368 656d non-linear schem\n-00013b00: 6573 2028 6375 7272 656e 746c 793c 2f73 es (currently
.
478<\n-00013b70: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-00013b80: 656e 7422 3e2f 2f20 2043 6174 6d61 726b ent\">// Catmark\n-00013b90: 2061 6e64 204c 6f6f 7029 2061 6e64 206f and Loop) and o\n-00013ba0: 6e6c 7920 6e65 6564 7320 746f 2062 6520 nly needs to be \n-00013bb0: 7370 6563 6961 6c69 7a65 6420 666f 7220 specialized for \n-00013bc0: 4269 6c69 6e65 6172 2074 6f20 7265 6d6f Bilinear to remo\n-00013bd0: 7665 2061 6c6c 2075 6e6e 6563 6573 7361 ve all unnecessa\n-00013be0: 7279 3c2f 7370 616e 3e3c 2f64 6976 3e0a ry
.\n-00013bf0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
\n-00013ce0: 2020 3438 303c 2f73 7061 6e3e 3c73 7061 480//.
481<\n-00013d60: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>// \n-00013d80: 5468 6520 696d 706c 656d 656e 7461 7469 The implementati\n-00013d90: 6f6e 2068 6572 6520 6973 2073 6c69 6768 on here is sligh\n-00013da0: 746c 7920 636f 6d70 6c69 6361 7465 6420 tly complicated \n-00013db0: 6279 2063 6f6d 6269 6e69 6e67 2074 776f by combining two\n-00013dc0: 2073 6365 6e61 7269 6f73 2069 6e74 6f20 scenarios into \n-00013dd0: 6f6e 6520 2d2d 3c2f 7370 616e 3e3c 2f64 one --.
48\n-00013e30: 323c 2f73 7061 6e3e 3c73 7061 6e20 636c 2//\n-00013e50: 2020 6569 7468 6572 2074 6865 2063 616c either the cal\n-00013e60: 6c65 7220 6b6e 6f77 7320 7468 6520 7061 ler knows the pa\n-00013e70: 7265 6e74 2061 6e64 2063 6869 6c64 2072 rent and child r\n-00013e80: 756c 6573 2061 6e64 2070 726f 7669 6465 ules and provide\n-00013e90: 7320 7468 656d 2c20 6f72 2074 6865 7920 s them, or they \n-00013ea0: 646f 6e26 2333 393b 7420 616e 643c 2f73 don't and
.
483<\n-00013f10: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-00013f20: 656e 7422 3e2f 2f20 2074 6865 2052 756c ent\">// the Rul\n-00013f30: 6573 2068 6176 6520 746f 2062 6520 6465 es have to be de\n-00013f40: 7465 726d 696e 6564 2066 726f 6d20 7368 termined from sh\n-00013f50: 6172 706e 6573 7320 7661 6c75 6573 2e20 arpness values. \n-00013f60: 2045 7665 6e20 7768 656e 2074 6865 2052 Even when the R\n-00013f70: 756c 6573 2061 7265 206b 6e6f 776e 2061 ules are known a\n-00013f80: 6e64 3c2f 7370 616e 3e3c 2f64 6976 3e0a nd
.\n-00013f90: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n-00013fc0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 484// pr\n-00014000: 6f76 6964 6564 2074 686f 7567 682c 2074 ovided though, t\n-00014010: 6865 7265 2061 7265 2063 6173 6573 2077 here are cases w\n-00014020: 6865 7265 2074 6865 2070 6172 656e 7420 here the parent \n-00014030: 616e 6420 6368 696c 6420 7368 6172 706e and child sharpn\n-00014040: 6573 7320 7661 6c75 6573 206e 6565 6420 ess values need \n-00014050: 746f 2062 653c 2f73 7061 6e3e 3c2f 6469 to be.
485\n-000140b0: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 // \n-000140d0: 2069 6465 6e74 6966 6965 642c 2073 6f20 identified, so \n-000140e0: 6163 636f 756e 7469 6e67 2066 6f72 2074 accounting for t\n-000140f0: 6865 2075 6e6b 6e6f 776e 2052 756c 6573 he unknown Rules\n-00014100: 2074 6f6f 2069 7320 6e6f 7420 6d75 6368 too is not much\n-00014110: 206f 6620 616e 2061 6464 6564 2063 6f6d of an added com\n-00014120: 706c 6963 6174 696f 6e2e 3c2f 7370 616e plication.
.
\n-00014180: 2020 3438 363c 2f73 7061 6e3e 3c73 7061 486//.
487<\n-00014200: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>// \n-00014220: 5468 6520 6265 6e65 6669 7420 6f66 2073 The benefit of s\n-00014230: 7570 706f 7274 696e 6720 7370 6563 6966 upporting specif\n-00014240: 6965 6420 5275 6c65 7320 6973 2074 6861 ied Rules is tha\n-00014250: 7420 7468 6579 2063 616e 206f 6674 656e t they can often\n-00014260: 2062 6520 7472 6976 6961 6c6c 793c 2f73 be trivially
.
488<\n-000142d0: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-000142e0: 656e 7422 3e2f 2f20 2064 6574 6572 6d69 ent\">// determi\n-000142f0: 6e65 6420 6672 6f6d 2063 6f6e 7465 7874 ned from context\n-00014300: 2028 652e 672e 2061 2076 6572 7465 7820 (e.g. a vertex \n-00014310: 6465 7269 7665 6420 6672 6f6d 2061 2066 derived from a f\n-00014320: 6163 6520 6174 2061 2070 7265 7669 6f75 ace at a previou\n-00014330: 7320 6c65 7665 6c20 7769 6c6c 2061 6c77 s level will alw\n-00014340: 6179 733c 2f73 7061 6e3e 3c2f 6469 763e ays
\n-00014350: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00014380: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 489// b\n-000143c0: 6520 736d 6f6f 7468 2920 7261 7468 6572 e smooth) rather\n-000143d0: 2074 6861 6e20 6d6f 7265 2067 656e 6572 than more gener\n-000143e0: 616c 6c79 2c20 616e 6420 6174 2067 7265 ally, and at gre\n-000143f0: 6174 6572 2063 6f73 742c 2069 6e73 7065 ater cost, inspe\n-00014400: 6374 696e 6720 6e65 6967 6862 6f72 696e cting neighborin\n-00014410: 6720 616e 643c 2f73 7061 6e3e 3c2f 6469 g and.
490\n-00014470: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 // \n-00014490: 2074 6865 7920 6172 6520 6f66 7465 6e20 they are often \n-000144a0: 7468 6520 7361 6d65 2066 6f72 2070 6172 the same for par\n-000144b0: 656e 7420 616e 6420 6368 696c 642e 3c2f ent and child.
.<\n-00014500: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00014510: 6e6f 223e 2020 3439 313c 2f73 7061 6e3e no\"> 491
\n-00014520: 3c73 7061 6e20 636c 6173 733d 2263 6f6d //<\n-00014540: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00014590: 3439 323c 2f73 7061 6e3e 3c73 7061 6e20 492\n-000145b0: 2f2f 2020 5468 6520 6f76 6572 616c 6c20 // The overall \n-000145c0: 7072 6f63 6573 7320 6973 2061 7320 666f process is as fo\n-000145d0: 6c6c 6f77 733a 3c2f 7370 616e 3e3c 2f64 llows:.
49\n-00014630: 333c 2f73 7061 6e3e 3c73 7061 6e20 636c 3//\n-00014650: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n-00014670: 3c61 2069 643d 226c 3030 3439 3422 206e 494// \n-000146d0: 2d20 7175 6963 6b6c 7920 6465 7465 6374 - quickly detect\n-000146e0: 2074 6865 206d 6f73 7420 636f 6d6d 6f6e the most common\n-000146f0: 2053 6d6f 6f74 6820 6361 7365 2077 6865 Smooth case whe\n-00014700: 6e20 7370 6563 6966 6965 6420 616e 6420 n specified and \n-00014710: 7265 7475 726e 3c2f 7370 616e 3e3c 2f64 return.
49\n-00014770: 353c 2f73 7061 6e3e 3c73 7061 6e20 636c 5//\n-00014790: 2020 2020 2020 2d20 6465 7465 726d 696e - determin\n-000147a0: 6520 6966 2073 6861 7270 6e65 7373 2066 e if sharpness f\n-000147b0: 6f72 2070 6172 656e 7420 6973 2072 6571 or parent is req\n-000147c0: 7569 7265 6420 616e 6420 6761 7468 6572 uired and gather\n-000147d0: 2069 6620 736f 3c2f 7370 616e 3e3c 2f64 if so.
49\n-00014830: 363c 2f73 7061 6e3e 3c73 7061 6e20 636c 6//\n-00014850: 2020 2020 2020 2d20 6966 2075 6e73 7065 - if unspe\n-00014860: 6369 6669 6564 2c20 6465 7465 726d 696e cified, determin\n-00014870: 6520 7468 6520 7061 7265 6e74 2072 756c e the parent rul\n-00014880: 653c 2f73 7061 6e3e 3c2f 6469 763e 0a3c e
.<\n-00014890: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-000148a0: 3e3c 6120 6964 3d22 6c30 3034 3937 2220 > 497// \n-00014900: 202d 2061 7373 6967 6e20 6d61 736b 2066 - assign mask f\n-00014910: 6f72 2074 6865 2070 6172 656e 7420 7275 or the parent ru\n-00014920: 6c65 202d 2d20 7265 7475 726e 696e 6720 le -- returning \n-00014930: 6966 2053 6d6f 6f74 682f 4461 7274 3c2f if Smooth/Dart
.<\n-00014980: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00014990: 6e6f 223e 2020 3439 383c 2f73 7061 6e3e no\"> 498\n-000149a0: 3c73 7061 6e20 636c 6173 733d 2263 6f6d // - \n-000149c0: 7265 7475 726e 2069 6620 6368 696c 6420 return if child \n-000149d0: 7275 6c65 206d 6174 6368 6573 2070 6172 rule matches par\n-000149e0: 656e 743c 2f73 7061 6e3e 3c2f 6469 763e ent
\n-000149f0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00014a20: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 499// \n-00014a60: 2020 202d 2067 6174 6865 7220 7368 6172 - gather shar\n-00014a70: 706e 6573 7320 666f 7220 6368 696c 6420 pness for child \n-00014a80: 746f 2064 6574 6572 6d69 6e65 206f 7220 to determine or \n-00014a90: 636f 6d62 696e 6520 6368 696c 6420 7275 combine child ru\n-00014aa0: 6c65 3c2f 7370 616e 3e3c 2f64 6976 3e0a le
.\n-00014ab0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
501// - as\n-00014bf0: 7369 676e 206c 6f63 616c 206d 6173 6b20 sign local mask \n-00014c00: 666f 7220 6368 696c 6420 7275 6c65 3c2f for child rule
.<\n-00014c50: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00014c60: 6e6f 223e 2020 3530 323c 2f73 7061 6e3e no\"> 502\n-00014c70: 3c73 7061 6e20 636c 6173 733d 2263 6f6d // - \n-00014c90: 636f 6d62 696e 6520 6c6f 6361 6c20 6368 combine local ch\n-00014ca0: 696c 6420 6d61 736b 2077 6974 6820 7468 ild mask with th\n-00014cb0: 6520 7061 7265 6e74 206d 6173 6b3c 2f73 e parent mask
.
503<\n-00014d20: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-00014d30: 656e 7422 3e2f 2f3c 2f73 7061 6e3e 3c2f ent\">//.
5\n-00014d90: 3034 3c2f 7370 616e 3e3c 7370 616e 2063 04/\n-00014db0: 2f20 2052 656d 656d 6265 7220 2d2d 2069 / Remember -- i\n-00014dc0: 6620 7468 6520 7061 7265 6e74 2072 756c f the parent rul\n-00014dd0: 6520 6973 2073 7065 6369 6669 6564 2062 e is specified b\n-00014de0: 7574 2074 6865 2063 6869 6c64 2069 7320 ut the child is \n-00014df0: 6e6f 742c 2074 6869 7320 696d 706c 6965 not, this implie\n-00014e00: 7320 6f6e 6c79 206f 6e65 3c2f 7370 616e s only one
.
\n-00014e60: 2020 3530 353c 2f73 7061 6e3e 3c73 7061 505// of the two\n-00014e90: 206f 7074 696f 6e61 6c20 7275 6c65 7320 optional rules \n-00014ea0: 7761 7320 7370 6563 6966 6965 6420 616e was specified an\n-00014eb0: 6420 6973 206d 6561 6e74 2074 6f20 696e d is meant to in\n-00014ec0: 6469 6361 7465 2074 6865 7265 2069 7320 dicate there is \n-00014ed0: 6e6f 2074 7261 6e73 6974 696f 6e2c 3c2f no transition,
.<\n-00014f20: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00014f30: 6e6f 223e 2020 3530 363c 2f73 7061 6e3e no\"> 506\n-00014f40: 3c73 7061 6e20 636c 6173 733d 2263 6f6d // so the\n-00014f60: 2063 6869 6c64 2072 756c 6520 7368 6f75 child rule shou\n-00014f70: 6c64 2062 6520 6173 7369 676e 6564 2074 ld be assigned t\n-00014f80: 6f20 6265 2074 6865 2073 616d 6520 2877 o be the same (w\n-00014f90: 6973 6820 7468 6520 636f 6d70 696c 6572 ish the compiler\n-00014fa0: 2077 6f75 6c64 2061 6c6c 6f77 2074 6869 would allow thi\n-00014fb0: 733c 2f73 7061 6e3e 3c2f 6469 763e 0a3c s
.<\n-00014fc0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00014fd0: 3e3c 6120 6964 3d22 6c30 3035 3037 2220 > 507// in \n-00015030: 6465 6661 756c 7420 7661 6c75 6520 6173 default value as\n-00015040: 7369 676e 6d65 6e74 292e 3c2f 7370 616e signment).
.
\n-000150a0: 2020 3530 383c 2f73 7061 6e3e 3c73 7061 508//.
509<\n-00015120: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>temp\n-00015140: 6c61 7465 3c2f 7370 616e 3e20 266c 743b late <\n-00015150: 5363 6865 6d65 5479 7065 2053 4348 454d SchemeType SCHEM\n-00015160: 4526 6774 3b3c 2f64 6976 3e0a 3c64 6976 E>
.<\n-000151a0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-000151b0: 6e6f 223e 2020 3531 303c 2f73 7061 6e3e no\"> 510\n-000151c0: 3c73 7061 6e20 636c 6173 733d 226b 6579 template <\n-00015200: 7479 7065 6e61 6d65 3c2f 7370 616e 3e20 typename \n-00015210: 5645 5254 4558 2c20 3c73 7061 6e20 636c VERTEX, ty\n-00015230: 7065 6e61 6d65 3c2f 7370 616e 3e20 4d41 pename MA\n-00015240: 534b 2667 743b 3c2f 6469 763e 0a3c 6469 SK>
.<\n-00015260: 6120 6964 3d22 6c30 3035 3131 2220 6e61 a id=\"l00511\" na\n-00015270: 6d65 3d22 6c30 3035 3131 223e 3c2f 613e me=\"l00511\">\n-00015280: 3c73 7061 6e20 636c 6173 733d 226c 696e 511void<\n-000152c0: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
..
\n-000153a0: 2020 3531 323c 2f61 3e3c 2f73 7061 6e3e 512\n-000153b0: 3c61 2063 6c61 7373 3d22 636f 6465 2068 Scheme<SCHEM\n-00015410: 4526 6774 3b3a 3a43 6f6d 7075 7465 5665 E>::ComputeVe\n-00015420: 7274 6578 5665 7274 6578 4d61 736b 3c2f rtexVertexMask(VERTEX \n-00015450: 636f 6e73 743c 2f73 7061 6e3e 2661 6d70 const&\n-00015460: 3b20 2020 7665 7274 6578 2c3c 2f64 6976 ; vertex,.
513<\n-000154c0: 2f73 7061 6e3e 2020 2020 2020 2020 2020 /span> \n-000154d0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000154e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000154f0: 204d 4153 4b26 616d 703b 2020 2020 2020 MASK& \n-00015500: 2020 2020 206d 6173 6b2c 3c2f 6469 763e mask,
\n-00015510: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00015540: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 514 \n-00015570: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00015580: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00015590: 3c61 2063 6c61 7373 3d22 636f 6465 2068 Crease::Rule\n-000155f0: 3c2f 613e 2070 5275 6c65 2c3c 2f64 6976 pRule,.
515<\n-00015650: 2f73 7061 6e3e 2020 2020 2020 2020 2020 /span> \n-00015660: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00015670: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00015680: 203c 6120 636c 6173 733d 2263 6f64 6520 Crease::Rul\n-000156e0: 653c 2f61 3e20 6352 756c 6529 3c73 7061 e cRule) const \n-00015710: 7b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 {
.
\n-00015760: 2020 3531 363c 2f73 7061 6e3e 203c 2f64 516 .
51\n-000157c0: 373c 2f73 7061 6e3e 2020 2020 3c73 7061 7 // Quick assi\n-000157f0: 676e 6d65 6e74 2061 6e64 2072 6574 7572 gnment and retur\n-00015800: 6e20 666f 7220 7468 6520 6d6f 7374 2063 n for the most c\n-00015810: 6f6d 6d6f 6e20 6361 7365 3a3c 2f73 7061 ommon case:
.
518 \n-00015880: 203c 7370 616e 2063 6c61 7373 3d22 6b65 if ((pRule == \n-000158b0: 3c61 2063 6c61 7373 3d22 636f 6465 2068 Crease::RULE_\n-00015930: 534d 4f4f 5448 3c2f 613e 2920 7c7c 2028 SMOOTH) || (\n-00015940: 7052 756c 6520 3d3d 203c 6120 636c 6173 pRule == Crea\n-000159c0: 7365 3a3a 5255 4c45 5f44 4152 543c 2f61 se::RULE_DART)) {
.<\n-00015a10: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00015a20: 6e6f 223e 2020 3531 393c 2f73 7061 6e3e no\"> 519\n-00015a30: 2020 2020 2020 2020 6173 7369 676e 536d assignSm\n-00015a40: 6f6f 7468 4d61 736b 466f 7256 6572 7465 oothMaskForVerte\n-00015a50: 7828 7665 7274 6578 2c20 6d61 736b 293b x(vertex, mask);\n-00015a60: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00015ab0: 2035 3230 3c2f 7370 616e 3e20 2020 2020 520 \n-00015ac0: 2020 203c 7370 616e 2063 6c61 7373 3d22 ret\n-00015ae0: 7572 6e3c 2f73 7061 6e3e 3b3c 2f64 6976 urn;.
521<\n-00015b40: 2f73 7061 6e3e 2020 2020 7d3c 2f64 6976 /span> }.
522<\n-00015ba0: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> \n-00015bc0: 2f2f 2020 4966 2075 6e73 7065 6369 6669 // If unspecifi\n-00015bd0: 6564 2c20 6173 7369 676e 2074 6865 2063 ed, assign the c\n-00015be0: 6869 6c64 2072 756c 6520 746f 206d 6174 hild rule to mat\n-00015bf0: 6368 2074 6865 2070 6172 656e 7420 7275 ch the parent ru\n-00015c00: 6c65 2069 6620 7370 6563 6966 6965 643a le if specified:\n-00015c10: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n-00015c30: 3c61 2069 643d 226c 3030 3532 3322 206e 523 \n-00015c90: 6966 3c2f 7370 616e 3e20 2828 6352 756c if ((cRul\n-00015ca0: 6520 3d3d 203c 6120 636c 6173 733d 2263 e == Crease::\n-00015d20: 5255 4c45 5f55 4e4b 4e4f 574e 3c2f 613e RULE_UNKNOWN\n-00015d30: 2920 2661 6d70 3b26 616d 703b 2028 7052 ) && (pR\n-00015d40: 756c 6520 213d 203c 6120 636c 6173 733d ule != Crease\n-00015dc0: 3a3a 5255 4c45 5f55 4e4b 4e4f 574e 3c2f ::RULE_UNKNOWN)) {
.<\n-00015df0: 6120 6964 3d22 6c30 3035 3234 2220 6e61 a id=\"l00524\" na\n-00015e00: 6d65 3d22 6c30 3035 3234 223e 3c2f 613e me=\"l00524\">\n-00015e10: 3c73 7061 6e20 636c 6173 733d 226c 696e 524 cRule =\n-00015e40: 2070 5275 6c65 3b3c 2f64 6976 3e0a 3c64 pRule;
.\n-00015e60: 3c61 2069 643d 226c 3030 3532 3522 206e 525 }
.\n-00015ec0: 3c61 2069 643d 226c 3030 3532 3622 206e 526 \n-00015f20: 696e 743c 2f73 7061 6e3e 2076 616c 656e int valen\n-00015f30: 6365 203d 2076 6572 7465 782e 4765 744e ce = vertex.GetN\n-00015f40: 756d 4564 6765 7328 293b 3c2f 6469 763e umEdges();
\n-00015f50: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n-00015fc0: 6120 6964 3d22 6c30 3035 3238 2220 6e61 a id=\"l00528\" na\n-00015fd0: 6d65 3d22 6c30 3035 3238 223e 3c2f 613e me=\"l00528\">\n-00015fe0: 3c73 7061 6e20 636c 6173 733d 226c 696e 528 //
.
529 \n-00016080: 2020 203c 7370 616e 2063 6c61 7373 3d22 // Det\n-000160a0: 6572 6d69 6e65 2069 6620 7765 206e 6565 ermine if we nee\n-000160b0: 6420 7468 6520 7061 7265 6e74 2065 6467 d the parent edg\n-000160c0: 6520 7368 6172 706e 6573 7320 7661 6c75 e sharpness valu\n-000160d0: 6573 202d 2d20 6964 656e 7469 6679 2f67 es -- identify/g\n-000160e0: 6174 6865 7220 6966 2073 6f3c 2f73 7061 ather if so
.
530 \n-00016150: 203c 7370 616e 2063 6c61 7373 3d22 636f // and u\n-00016170: 7365 2069 7420 746f 2063 6f6d 7075 7465 se it to compute\n-00016180: 2074 6865 2070 6172 656e 7420 7275 6c65 the parent rule\n-00016190: 2069 6620 756e 7370 6563 6966 6965 643a if unspecified:\n-000161a0: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n-000161c0: 3c61 2069 643d 226c 3030 3533 3122 206e 531 //
.<\n-00016260: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00016270: 6e6f 223e 2020 3533 323c 2f73 7061 6e3e no\"> 532\n-00016280: 2020 2020 3c73 7061 6e20 636c 6173 733d fl\n-000162a0: 6f61 743c 2f73 7061 6e3e 202a 2070 4564 oat * pEd\n-000162b0: 6765 5368 6172 706e 6573 7342 7566 6665 geSharpnessBuffe\n-000162c0: 7220 3d20 283c 7370 616e 2063 6c61 7373 r = (f\n-000162e0: 6c6f 6174 3c2f 7370 616e 3e20 2a29 616c loat *)al\n-000162f0: 6c6f 6361 2876 616c 656e 6365 2a3c 7370 loca(valence*sizeof\n-00016320: 283c 7370 616e 2063 6c61 7373 3d22 6b65 (float\n-00016340: 3c2f 7370 616e 3e29 292c 3c2f 6469 763e )),
\n-00016350: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00016380: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 533 *\n-000163b0: 2070 4564 6765 5368 6172 706e 6573 7320 pEdgeSharpness \n-000163c0: 2020 3d20 302c 3c2f 6469 763e 0a3c 6469 = 0,
.<\n-000163e0: 6120 6964 3d22 6c30 3035 3334 2220 6e61 a id=\"l00534\" na\n-000163f0: 6d65 3d22 6c30 3035 3334 223e 3c2f 613e me=\"l00534\">\n-00016400: 3c73 7061 6e20 636c 6173 733d 226c 696e 534 pVe\n-00016430: 7274 6578 5368 6172 706e 6573 7320 3d20 rtexSharpness = \n-00016440: 302e 3066 3b3c 2f64 6976 3e0a 3c64 6976 0.0f;
.<\n-00016480: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00016490: 6e6f 223e 2020 3533 353c 2f73 7061 6e3e no\"> 535
\n-000164a0: 203c 2f64 6976 3e0a 3c64 6976 2063 6c61
.
\n-000164f0: 2020 3533 363c 2f73 7061 6e3e 2020 2020 536 \n-00016500: 3c73 7061 6e20 636c 6173 733d 226b 6579 bool requirePar\n-00016530: 656e 7453 6861 7270 6e65 7373 203d 2028 entSharpness = (\n-00016540: 7052 756c 6520 3d3d 203c 6120 636c 6173 pRule == Crea\n-000165c0: 7365 3a3a 5255 4c45 5f55 4e4b 4e4f 574e se::RULE_UNKNOWN\n-000165d0: 3c2f 613e 2920 7c7c 3c2f 6469 763e 0a3c ) ||
.<\n-000165e0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-000165f0: 3e3c 6120 6964 3d22 6c30 3035 3337 2220 > 537 \n-00016640: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00016650: 2020 2020 2028 7052 756c 6520 3d3d 203c (pRule == <\n-00016660: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-00016670: 5f65 6e75 6d76 616c 7565 2220 6872 6566 _enumvalue\" href\n-00016680: 3d22 6130 3133 3235 2e68 746d 6c23 6131 =\"a01325.html#a1\n-00016690: 3166 6364 3531 6566 3836 3131 3866 3635 1fcd51ef86118f65\n-000166a0: 6536 3033 6331 3437 3433 3737 6137 3861 e603c1474377a78a\n-000166b0: 3936 3666 6131 6165 3861 6562 3835 3837 966fa1ae8aeb8587\n-000166c0: 6334 3938 6366 3661 3932 6363 3333 3335 c498cf6a92cc3335\n-000166d0: 223e 4372 6561 7365 3a3a 5255 4c45 5f43 \">Crease::RULE_C\n-000166e0: 5245 4153 453c 2f61 3e29 207c 7c3c 2f64 REASE) ||.
53\n-00016740: 383c 2f73 7061 6e3e 2020 2020 2020 2020 8 \n-00016750: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00016760: 2020 2020 2020 2020 2020 2870 5275 6c65 (pRule\n-00016770: 2021 3d20 6352 756c 6529 3b3c 2f64 6976 != cRule);.
539<\n-000167d0: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> if (r\n-00016800: 6571 7569 7265 5061 7265 6e74 5368 6172 equireParentShar\n-00016810: 706e 6573 7329 207b 3c2f 6469 763e 0a3c pness) {
.<\n-00016820: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00016830: 3e3c 6120 6964 3d22 6c30 3035 3430 2220 > 540 pVert\n-00016880: 6578 5368 6172 706e 6573 7320 3d20 7665 exSharpness = ve\n-00016890: 7274 6578 2e47 6574 5368 6172 706e 6573 rtex.GetSharpnes\n-000168a0: 7328 293b 3c2f 6469 763e 0a3c 6469 7620 s();
.
541 \n-00016900: 2020 2020 2020 2070 4564 6765 5368 6172 pEdgeShar\n-00016910: 706e 6573 7320 2020 3d20 7665 7274 6578 pness = vertex\n-00016920: 2e47 6574 5368 6172 706e 6573 7350 6572 .GetSharpnessPer\n-00016930: 4564 6765 2870 4564 6765 5368 6172 706e Edge(pEdgeSharpn\n-00016940: 6573 7342 7566 6665 7229 3b3c 2f64 6976 essBuffer);.
542<\n-000169a0: 2f73 7061 6e3e 203c 2f64 6976 3e0a 3c64 /span>
.\n-000169c0: 3c61 2069 643d 226c 3030 3534 3322 206e 543 if (p\n-00016a30: 5275 6c65 203d 3d20 3c61 2063 6c61 7373 Rule == Creas\n-00016ab0: 653a 3a52 554c 455f 554e 4b4e 4f57 4e3c e::RULE_UNKNOWN<\n-00016ac0: 2f61 3e29 207b 3c2f 6469 763e 0a3c 6469 /a>) {
.<\n-00016ae0: 6120 6964 3d22 6c30 3035 3434 2220 6e61 a id=\"l00544\" na\n-00016af0: 6d65 3d22 6c30 3035 3434 223e 3c2f 613e me=\"l00544\">\n-00016b00: 3c73 7061 6e20 636c 6173 733d 226c 696e 544 pRu\n-00016b30: 6c65 203d 203c 6120 636c 6173 733d 2263 le = Crease(_opt\n-00016b70: 696f 6e73 292e 3c61 2063 6c61 7373 3d22 ions).Determine\n-00016bd0: 5665 7274 6578 5665 7274 6578 5275 6c65 VertexVertexRule\n-00016be0: 3c2f 613e 2870 5665 7274 6578 5368 6172 (pVertexShar\n-00016bf0: 706e 6573 732c 2076 616c 656e 6365 2c20 pness, valence, \n-00016c00: 7045 6467 6553 6861 7270 6e65 7373 293b pEdgeSharpness);\n-00016c10: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00016c60: 2035 3435 3c2f 7370 616e 3e20 2020 2020 545 \n-00016c70: 2020 207d 3c2f 6469 763e 0a3c 6469 7620 }
.
546 \n-00016cd0: 2020 207d 3c2f 6469 763e 0a3c 6469 7620 }
.
547 \n-00016d30: 2020 203c 7370 616e 2063 6c61 7373 3d22 if<\n-00016d50: 2f73 7061 6e3e 2028 2870 5275 6c65 203d /span> ((pRule =\n-00016d60: 3d20 3c61 2063 6c61 7373 3d22 636f 6465 = Crease::RUL\n-00016de0: 455f 534d 4f4f 5448 3c2f 613e 2920 7c7c E_SMOOTH) ||\n-00016df0: 2028 7052 756c 6520 3d3d 203c 6120 636c (pRule == Cr\n-00016e70: 6561 7365 3a3a 5255 4c45 5f44 4152 543c ease::RULE_DART<\n-00016e80: 2f61 3e29 2920 7b3c 2f64 6976 3e0a 3c64 /a>)) {
.\n-00016ea0: 3c61 2069 643d 226c 3030 3534 3822 206e 548 assign\n-00016ef0: 536d 6f6f 7468 4d61 736b 466f 7256 6572 SmoothMaskForVer\n-00016f00: 7465 7828 7665 7274 6578 2c20 6d61 736b tex(vertex, mask\n-00016f10: 293b 3c2f 6469 763e 0a3c 6469 7620 636c );
.
549 \n-00016f70: 2020 2020 203c 7370 616e 2063 6c61 7373 r\n-00016f90: 6574 7572 6e3c 2f73 7061 6e3e 3b20 203c eturn; <\n-00016fa0: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-00016fb0: 656e 7422 3e2f 2f20 2041 7320 646f 6e65 ent\">// As done\n-00016fc0: 206f 6e20 656e 7472 792c 2077 6520 6361 on entry, we ca\n-00016fd0: 6e20 7265 7475 726e 2069 6d6d 6564 6961 n return immedia\n-00016fe0: 7465 6c79 2069 6620 7061 7265 6e74 2069 tely if parent i\n-00016ff0: 7320 536d 6f6f 7468 2f44 6172 743c 2f73 s Smooth/Dart
.
550 \n-00017060: 2020 207d 203c 7370 616e 2063 6c61 7373 } e\n-00017080: 6c73 653c 2f73 7061 6e3e 203c 7370 616e lse if (\n-000170b0: 7052 756c 6520 3d3d 203c 6120 636c 6173 pRule == Crea\n-00017130: 7365 3a3a 5255 4c45 5f43 5245 4153 453c se::RULE_CREASE<\n-00017140: 2f61 3e29 207b 3c2f 6469 763e 0a3c 6469 /a>) {
.<\n-00017160: 6120 6964 3d22 6c30 3035 3531 2220 6e61 a id=\"l00551\" na\n-00017170: 6d65 3d22 6c30 3035 3531 223e 3c2f 613e me=\"l00551\">\n-00017180: 3c73 7061 6e20 636c 6173 733d 226c 696e 551 int cr\n-000171d0: 6561 7365 456e 6473 5b32 5d3b 3c2f 6469 easeEnds[2];.
552\n-00017230: 3c2f 7370 616e 3e20 2020 2020 2020 203c <\n-00017240: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-00017250: 5f63 6c61 7373 2220 6872 6566 3d22 6130 _class\" href=\"a0\n-00017260: 3133 3235 2e68 746d 6c22 3e43 7265 6173 1325.html\">Creas\n-00017270: 653c 2f61 3e28 5f6f 7074 696f 6e73 292e e(_options).\n-00017280: 3c61 2063 6c61 7373 3d22 636f 6465 2068 GetSharpEdgePai\n-000172e0: 724f 6643 7265 6173 653c 2f61 3e28 7045 rOfCrease(pE\n-000172f0: 6467 6553 6861 7270 6e65 7373 2c20 7661 dgeSharpness, va\n-00017300: 6c65 6e63 652c 2063 7265 6173 6545 6e64 lence, creaseEnd\n-00017310: 7329 3b3c 2f64 6976 3e0a 3c64 6976 2063 s);
.
553 <\n-00017370: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-000173c0: 3535 343c 2f73 7061 6e3e 2020 2020 2020 554 \n-000173d0: 2020 6173 7369 676e 4372 6561 7365 4d61 assignCreaseMa\n-000173e0: 736b 466f 7256 6572 7465 7828 7665 7274 skForVertex(vert\n-000173f0: 6578 2c20 6d61 736b 2c20 6372 6561 7365 ex, mask, crease\n-00017400: 456e 6473 293b 3c2f 6469 763e 0a3c 6469 Ends);
.<\n-00017420: 6120 6964 3d22 6c30 3035 3535 2220 6e61 a id=\"l00555\" na\n-00017430: 6d65 3d22 6c30 3035 3535 223e 3c2f 613e me=\"l00555\">\n-00017440: 3c73 7061 6e20 636c 6173 733d 226c 696e 555 } else {.
5\n-000174e0: 3536 3c2f 7370 616e 3e20 2020 2020 2020 56 \n-000174f0: 2061 7373 6967 6e43 6f72 6e65 724d 6173 assignCornerMas\n-00017500: 6b46 6f72 5665 7274 6578 2876 6572 7465 kForVertex(verte\n-00017510: 782c 206d 6173 6b29 3b3c 2f64 6976 3e0a x, mask);
.\n-00017520: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .\n-00017580: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n-00017670: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00017680: 6e6f 223e 2020 3535 393c 2f73 7061 6e3e no\"> 559
\n-00017690: 203c 2f64 6976 3e0a 3c64 6976 2063 6c61
.
\n-000176e0: 2020 3536 303c 2f73 7061 6e3e 2020 2020 560 \n-000176f0: 3c73 7061 6e20 636c 6173 733d 2263 6f6d //<\n-00017710: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00017760: 3536 313c 2f73 7061 6e3e 2020 2020 3c73 561 // Identify\n-00017790: 2f67 6174 6865 7220 6368 696c 6420 7368 /gather child sh\n-000177a0: 6172 706e 6573 7320 746f 2063 6f6d 6269 arpness to combi\n-000177b0: 6e65 206d 6173 6b73 2066 6f72 2074 6865 ne masks for the\n-000177c0: 2074 776f 2064 6966 6665 7269 6e67 2052 two differing R\n-000177d0: 756c 6573 3a3c 2f73 7061 6e3e 3c2f 6469 ules:.
562\n-00017830: 3c2f 7370 616e 3e20 2020 203c 7370 616e //
\n-00017860: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00017890: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 563 Crease \n-000178f0: 6372 6561 7365 285f 6f70 7469 6f6e 7329 crease(_options)\n-00017900: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-00017950: 2020 3536 343c 2f73 7061 6e3e 203c 2f64 564 .
56\n-000179b0: 353c 2f73 7061 6e3e 2020 2020 3c73 7061 5 float * cEdgeSharpn\n-000179f0: 6573 7342 7566 6665 7220 3d20 283c 7370 essBuffer = (float *)alloca(val\n-00017a30: 656e 6365 2a3c 7370 616e 2063 6c61 7373 ence*sizeo\n-00017a50: 663c 2f73 7061 6e3e 283c 7370 616e 2063 f(float)\n-00017a80: 292c 3c2f 6469 763e 0a3c 6469 7620 636c ),
.
566 \n-00017ae0: 2020 2020 2020 202a 2063 4564 6765 5368 * cEdgeSh\n-00017af0: 6172 706e 6573 7320 3d20 7665 7274 6578 arpness = vertex\n-00017b00: 2e47 6574 4368 696c 6453 6861 7270 6e65 .GetChildSharpne\n-00017b10: 7373 5065 7245 6467 6528 6372 6561 7365 ssPerEdge(crease\n-00017b20: 2c20 6345 6467 6553 6861 7270 6e65 7373 , cEdgeSharpness\n-00017b30: 4275 6666 6572 292c 3c2f 6469 763e 0a3c Buffer),
.<\n-00017b40: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00017b50: 3e3c 6120 6964 3d22 6c30 3035 3637 2220 > 567 c\n-00017ba0: 5665 7274 6578 5368 6172 706e 6573 7320 VertexSharpness \n-00017bb0: 3d20 7665 7274 6578 2e47 6574 4368 696c = vertex.GetChil\n-00017bc0: 6453 6861 7270 6e65 7373 2863 7265 6173 dSharpness(creas\n-00017bd0: 6529 3b3c 2f64 6976 3e0a 3c64 6976 2063 e);
.
568 <\n-00017c30: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.\n-00017d50: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00017d80: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 570 cRu\n-00017db0: 6c65 203d 2063 7265 6173 652e 3c61 2063 le = crease.Det\n-00017e10: 6572 6d69 6e65 5665 7274 6578 5665 7274 ermineVertexVert\n-00017e20: 6578 5275 6c65 3c2f 613e 2863 5665 7274 exRule(cVert\n-00017e30: 6578 5368 6172 706e 6573 732c 2076 616c exSharpness, val\n-00017e40: 656e 6365 2c20 6345 6467 6553 6861 7270 ence, cEdgeSharp\n-00017e50: 6e65 7373 293b 3c2f 6469 763e 0a3c 6469 ness);
.<\n-00017e70: 6120 6964 3d22 6c30 3035 3731 2220 6e61 a id=\"l00571\" na\n-00017e80: 6d65 3d22 6c30 3035 3731 223e 3c2f 613e me=\"l00571\">\n-00017e90: 3c73 7061 6e20 636c 6173 733d 226c 696e 571 if (cR\n-00017ee0: 756c 6520 3d3d 2070 5275 6c65 2920 3c73 ule == pRule) return;
.<\n-00017f30: 6120 6964 3d22 6c30 3035 3732 2220 6e61 a id=\"l00572\" na\n-00017f40: 6d65 3d22 6c30 3035 3732 223e 3c2f 613e me=\"l00572\">\n-00017f50: 3c73 7061 6e20 636c 6173 733d 226c 696e 572 }
.<\n-00017f90: 6120 6964 3d22 6c30 3035 3733 2220 6e61 a id=\"l00573\" na\n-00017fa0: 6d65 3d22 6c30 3035 3733 223e 3c2f 613e me=\"l00573\">\n-00017fb0: 3c73 7061 6e20 636c 6173 733d 226c 696e 573
.
574 \n-00018030: 203c 7370 616e 2063 6c61 7373 3d22 636f //\n-00018050: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-000180a0: 2035 3735 3c2f 7370 616e 3e20 2020 203c 575 <\n-000180b0: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-000180c0: 656e 7422 3e2f 2f20 2049 6e69 7469 616c ent\">// Initial\n-000180d0: 697a 6520 6120 6c6f 6361 6c20 6368 696c ize a local chil\n-000180e0: 6420 6d61 736b 2c20 636f 6d70 7574 6520 d mask, compute \n-000180f0: 7468 6520 6672 6163 7469 6f6e 616c 2077 the fractional w\n-00018100: 6569 6768 7420 6672 6f6d 2070 6172 656e eight from paren\n-00018110: 7420 616e 6420 6368 696c 643c 2f73 7061 t and child
.
576 \n-00018180: 203c 7370 616e 2063 6c61 7373 3d22 636f // sharp\n-000181a0: 6e65 7373 2076 616c 7565 7320 616e 6420 ness values and \n-000181b0: 636f 6d62 696e 6520 7468 6520 7477 6f20 combine the two \n-000181c0: 6d61 736b 733a 3c2f 7370 616e 3e3c 2f64 masks:.
57\n-00018220: 373c 2f73 7061 6e3e 2020 2020 3c73 7061 7 //.
578<\n-000182a0: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> \n-000182c0: 7479 7065 6465 663c 2f73 7061 6e3e 203c typedef <\n-000182d0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-000182e0: 6f72 6422 3e74 7970 656e 616d 653c 2f73 ord\">typename MASK::Weigh\n-00018300: 7420 5765 6967 6874 3b3c 2f64 6976 3e0a t Weight;
.\n-00018310: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n-000183a0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-000183b0: 6e6f 223e 2020 3538 303c 2f73 7061 6e3e no\"> 580\n-000183c0: 2020 2020 5765 6967 6874 202a 2063 4d61 Weight * cMa\n-000183d0: 736b 5765 6967 6874 7320 3d20 2857 6569 skWeights = (Wei\n-000183e0: 6768 7420 2a29 616c 6c6f 6361 2828 3120 ght *)alloca((1 \n-000183f0: 2b20 3220 2a20 7661 6c65 6e63 6529 2a3c + 2 * valence)*<\n-00018400: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00018410: 6f72 6422 3e73 697a 656f 663c 2f73 7061 ord\">sizeof(Weight));..<\n-00018550: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00018560: 6e6f 223e 2020 3538 323c 2f73 7061 6e3e no\"> 582\n-00018570: 203c 2f64 6976 3e0a 3c64 6976 2063 6c61
.
\n-000185c0: 2020 3538 333c 2f73 7061 6e3e 2020 2020 583 \n-000185d0: 3c73 7061 6e20 636c 6173 733d 226b 6579 if ((cRule == <\n-00018600: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-00018610: 5f65 6e75 6d76 616c 7565 2220 6872 6566 _enumvalue\" href\n-00018620: 3d22 6130 3133 3235 2e68 746d 6c23 6131 =\"a01325.html#a1\n-00018630: 3166 6364 3531 6566 3836 3131 3866 3635 1fcd51ef86118f65\n-00018640: 6536 3033 6331 3437 3433 3737 6137 3861 e603c1474377a78a\n-00018650: 3631 6431 3337 6638 3636 3939 3765 6433 61d137f866997ed3\n-00018660: 3639 3365 3366 6361 6437 3664 6566 3566 693e3fcad76def5f\n-00018670: 223e 4372 6561 7365 3a3a 5255 4c45 5f53 \">Crease::RULE_S\n-00018680: 4d4f 4f54 483c 2f61 3e29 207c 7c20 2863 MOOTH) || (c\n-00018690: 5275 6c65 203d 3d20 3c61 2063 6c61 7373 Rule == Creas\n-00018710: 653a 3a52 554c 455f 4441 5254 3c2f 613e e::RULE_DART\n-00018720: 2929 207b 3c2f 6469 763e 0a3c 6469 7620 )) {
.
584 \n-00018780: 2020 2020 2020 2061 7373 6967 6e53 6d6f assignSmo\n-00018790: 6f74 684d 6173 6b46 6f72 5665 7274 6578 othMaskForVertex\n-000187a0: 2876 6572 7465 782c 2063 4d61 736b 293b (vertex, cMask);\n-000187b0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00018800: 2035 3835 3c2f 7370 616e 3e20 2020 207d 585 }\n-00018810: 203c 7370 616e 2063 6c61 7373 3d22 6b65 else<\n-00018830: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> if (cRul\n-00018860: 6520 3d3d 203c 6120 636c 6173 733d 2263 e == Crease::\n-000188e0: 5255 4c45 5f43 5245 4153 453c 2f61 3e29 RULE_CREASE)\n-000188f0: 207b 3c2f 6469 763e 0a3c 6469 7620 636c {
.
586 \n-00018950: 2020 2020 203c 7370 616e 2063 6c61 7373 i\n-00018970: 6e74 3c2f 7370 616e 3e20 6372 6561 7365 nt crease\n-00018980: 456e 6473 5b32 5d3b 3c2f 6469 763e 0a3c Ends[2];
.<\n-00018990: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-000189a0: 3e3c 6120 6964 3d22 6c30 3035 3837 2220 > 587 Crease(_options).Get\n-00018a80: 5368 6172 7045 6467 6550 6169 724f 6643 SharpEdgePairOfC\n-00018a90: 7265 6173 653c 2f61 3e28 6345 6467 6553 rease(cEdgeS\n-00018aa0: 6861 7270 6e65 7373 2c20 7661 6c65 6e63 harpness, valenc\n-00018ab0: 652c 2063 7265 6173 6545 6e64 7329 3b3c e, creaseEnds);<\n-00018ac0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00018b10: 3538 383c 2f73 7061 6e3e 203c 2f64 6976 588 .
589<\n-00018b70: 2f73 7061 6e3e 2020 2020 2020 2020 6173 /span> as\n-00018b80: 7369 676e 4372 6561 7365 4d61 736b 466f signCreaseMaskFo\n-00018b90: 7256 6572 7465 7828 7665 7274 6578 2c20 rVertex(vertex, \n-00018ba0: 634d 6173 6b2c 2063 7265 6173 6545 6e64 cMask, creaseEnd\n-00018bb0: 7329 3b3c 2f64 6976 3e0a 3c64 6976 2063 s);
.
590 \n-00018c10: 2020 7d20 3c73 7061 6e20 636c 6173 733d } el\n-00018c30: 7365 3c2f 7370 616e 3e20 7b3c 2f64 6976 se {.
591<\n-00018c90: 2f73 7061 6e3e 2020 2020 2020 2020 6173 /span> as\n-00018ca0: 7369 676e 436f 726e 6572 4d61 736b 466f signCornerMaskFo\n-00018cb0: 7256 6572 7465 7828 7665 7274 6578 2c20 rVertex(vertex, \n-00018cc0: 634d 6173 6b29 3b3c 2f64 6976 3e0a 3c64 cMask);
.\n-00018ce0: 3c61 2069 643d 226c 3030 3539 3222 206e 592 }
.\n-00018d40: 3c61 2069 643d 226c 3030 3539 3322 206e 593
.
594 \n-00018de0: 2020 5765 6967 6874 2070 5765 6967 6874 Weight pWeight\n-00018df0: 203d 2063 7265 6173 652e 3c61 2063 6c61 = crease.Compu\n-00018e50: 7465 4672 6163 7469 6f6e 616c 5765 6967 teFractionalWeig\n-00018e60: 6874 4174 5665 7274 6578 3c2f 613e 2870 htAtVertex(p\n-00018e70: 5665 7274 6578 5368 6172 706e 6573 732c VertexSharpness,\n-00018e80: 2063 5665 7274 6578 5368 6172 706e 6573 cVertexSharpnes\n-00018e90: 732c 3c2f 6469 763e 0a3c 6469 7620 636c s,
.
595 \n-00018ef0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00018f00: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00018f10: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00018f20: 7661 6c65 6e63 652c 2070 4564 6765 5368 valence, pEdgeSh\n-00018f30: 6172 706e 6573 732c 2063 4564 6765 5368 arpness, cEdgeSh\n-00018f40: 6172 706e 6573 7329 3b3c 2f64 6976 3e0a arpness);
.\n-00018f50: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n-00018fd0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00018fe0: 3e3c 6120 6964 3d22 6c30 3035 3937 2220 > 597
.
598 \n-00019080: 2020 2063 4d61 736b 2e3c 6120 636c 6173 cMask.Combin\n-000190e0: 6556 6572 7465 7856 6572 7465 784d 6173 eVertexVertexMas\n-000190f0: 6b73 3c2f 613e 2863 5765 6967 6874 2c20 ks(cWeight, \n-00019100: 7057 6569 6768 742c 206d 6173 6b29 3b3c pWeight, mask);<\n-00019110: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00019160: 3539 393c 2f73 7061 6e3e 7d3c 2f64 6976 599}.
.
600 .
6\n-00019220: 3031 3c2f 7370 616e 3e3c 7370 616e 2063 01/\n-00019240: 2f3c 2f73 7061 6e3e 3c2f 6469 763e 0a3c /
.<\n-00019250: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00019260: 3e3c 6120 6964 3d22 6c30 3036 3032 2220 > 602// The\n-000192c0: 2063 6f6d 7075 7461 7469 6f6e 206f 6620 computation of \n-000192d0: 6c69 6d69 7420 6d61 736b 7320 666f 7220 limit masks for \n-000192e0: 7665 7274 6963 6573 3a3c 2f73 7061 6e3e vertices:\n-000192f0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00019340: 2036 3033 3c2f 7370 616e 3e3c 7370 616e 603//
\n-00019370: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-000193a0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 604templ\n-000193e0: 6174 653c 2f73 7061 6e3e 2026 6c74 3b53 ate <S\n-000193f0: 6368 656d 6554 7970 6520 5343 4845 4d45 chemeType SCHEME\n-00019400: 2667 743b 3c2f 6469 763e 0a3c 6469 7620 >
.
605<\n-00019460: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00019470: 6f72 6422 3e74 656d 706c 6174 653c 2f73 ord\">template <t\n-000194a0: 7970 656e 616d 653c 2f73 7061 6e3e 2056 ypename V\n-000194b0: 4552 5445 582c 203c 7370 616e 2063 6c61 ERTEX, typ\n-000194d0: 656e 616d 653c 2f73 7061 6e3e 204d 4153 ename MAS\n-000194e0: 4b26 6774 3b3c 2f64 6976 3e0a 3c64 6976 K>
.<\n-00019520: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00019530: 6e6f 223e 2020 3630 363c 2f73 7061 6e3e no\"> 606\n-00019540: 3c73 7061 6e20 636c 6173 733d 226b 6579 void
..
\n-00019640: 2036 3037 3c2f 613e 3c2f 7370 616e 3e3c 607<\n-00019650: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-00019660: 5f66 756e 6374 696f 6e22 2068 7265 663d _function\" href=\n-00019670: 2261 3031 3333 332e 6874 6d6c 2361 3363 \"a01333.html#a3c\n-00019680: 3864 3736 3363 6131 3863 3435 3763 3933 8d763ca18c457c93\n-00019690: 3664 6230 6534 3739 3937 3436 6632 223e 6db0e4799746f2\">\n-000196a0: 5363 6865 6d65 266c 743b 5343 4845 4d45 Scheme<SCHEME\n-000196b0: 2667 743b 3a3a 436f 6d70 7574 6556 6572 >::ComputeVer\n-000196c0: 7465 784c 696d 6974 4d61 736b 3c2f 613e texLimitMask\n-000196d0: 2856 4552 5445 5820 3c73 7061 6e20 636c (VERTEX co\n-000196f0: 6e73 743c 2f73 7061 6e3e 2661 6d70 3b20 nst& \n-00019700: 7665 7274 6578 2c3c 2f64 6976 3e0a 3c64 vertex,
.\n-00019720: 3c61 2069 643d 226c 3030 3630 3822 206e 608 \n-00019770: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00019780: 2020 2020 2020 2020 204d 4153 4b26 616d MASK&am\n-00019790: 703b 2020 2020 2020 2020 206d 6173 6b2c p; mask,\n-000197a0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-000197f0: 2036 3039 3c2f 7370 616e 3e20 2020 2020 609 \n-00019800: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00019810: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00019820: 2020 3c61 2063 6c61 7373 3d22 636f 6465 Crease::Ru\n-00019880: 6c65 3c2f 613e 2020 7275 6c65 293c 7370 le rule) const {
.
610 .
6\n-00019960: 3131 3c2f 7370 616e 3e20 2020 203c 7370 11 if\n-00019990: 2028 2872 756c 6520 3d3d 203c 6120 636c ((rule == Cr\n-00019a10: 6561 7365 3a3a 5255 4c45 5f53 4d4f 4f54 ease::RULE_SMOOT\n-00019a20: 483c 2f61 3e29 207c 7c20 2872 756c 6520 H) || (rule \n-00019a30: 3d3d 203c 6120 636c 6173 733d 2263 6f64 == Crease::RU\n-00019ab0: 4c45 5f44 4152 543c 2f61 3e29 2920 7b3c LE_DART)) {<\n-00019ac0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00019b10: 3631 323c 2f73 7061 6e3e 2020 2020 2020 612 \n-00019b20: 2020 6173 7369 676e 536d 6f6f 7468 4c69 assignSmoothLi\n-00019b30: 6d69 744d 6173 6b28 7665 7274 6578 2c20 mitMask(vertex, \n-00019b40: 6d61 736b 293b 3c2f 6469 763e 0a3c 6469 mask);
.<\n-00019b60: 6120 6964 3d22 6c30 3036 3133 2220 6e61 a id=\"l00613\" na\n-00019b70: 6d65 3d22 6c30 3036 3133 223e 3c2f 613e me=\"l00613\">\n-00019b80: 3c73 7061 6e20 636c 6173 733d 226c 696e 613 } else if\n-00019bf0: 2028 7275 6c65 203d 3d20 3c61 2063 6c61 (rule == Cre\n-00019c70: 6173 653a 3a52 554c 455f 4352 4541 5345 ase::RULE_CREASE\n-00019c80: 3c2f 613e 2920 7b3c 2f64 6976 3e0a 3c64 ) {
.\n-00019ca0: 3c61 2069 643d 226c 3030 3631 3422 206e 614 float\n-00019d10: 202a 2065 6467 6553 6861 7270 6e65 7373 * edgeSharpness\n-00019d20: 203d 2028 3c73 7061 6e20 636c 6173 733d = (fl\n-00019d40: 6f61 743c 2f73 7061 6e3e 202a 2961 6c6c oat *)all\n-00019d50: 6f63 6128 7665 7274 6578 2e47 6574 4e75 oca(vertex.GetNu\n-00019d60: 6d45 6467 6573 2829 202a 203c 7370 616e mEdges() * sizeof(f\n-00019d90: 6c6f 6174 2929 3b3c 2f64 6976 3e0a 3c64 loat));
.\n-00019db0: 3c61 2069 643d 226c 3030 3631 3522 206e 615 vertex\n-00019e00: 2e47 6574 5368 6172 706e 6573 7350 6572 .GetSharpnessPer\n-00019e10: 4564 6765 2865 6467 6553 6861 7270 6e65 Edge(edgeSharpne\n-00019e20: 7373 293b 3c2f 6469 763e 0a3c 6469 7620 ss);
.
616 \n-00019e80: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00019ed0: 2036 3137 3c2f 7370 616e 3e20 2020 2020 617 \n-00019ee0: 2020 203c 7370 616e 2063 6c61 7373 3d22 int\n-00019f00: 3c2f 7370 616e 3e20 6372 6561 7365 456e creaseEn\n-00019f10: 6473 5b32 5d3b 3c2f 6469 763e 0a3c 6469 ds[2];
.<\n-00019f30: 6120 6964 3d22 6c30 3036 3138 2220 6e61 a id=\"l00618\" na\n-00019f40: 6d65 3d22 6c30 3036 3138 223e 3c2f 613e me=\"l00618\">\n-00019f50: 3c73 7061 6e20 636c 6173 733d 226c 696e 618 Crease(\n-00019fb0: 5f6f 7074 696f 6e73 292e 3c61 2063 6c61 _options).GetSh\n-0001a010: 6172 7045 6467 6550 6169 724f 6643 7265 arpEdgePairOfCre\n-0001a020: 6173 653c 2f61 3e28 6564 6765 5368 6172 ase(edgeShar\n-0001a030: 706e 6573 732c 2076 6572 7465 782e 4765 pness, vertex.Ge\n-0001a040: 744e 756d 4564 6765 7328 292c 2063 7265 tNumEdges(), cre\n-0001a050: 6173 6545 6e64 7329 3b3c 2f64 6976 3e0a aseEnds);
.\n-0001a060: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n-0001a0f0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-0001a100: 6e6f 223e 2020 3632 303c 2f73 7061 6e3e no\"> 620\n-0001a110: 2020 2020 2020 2020 6173 7369 676e 4372 assignCr\n-0001a120: 6561 7365 4c69 6d69 744d 6173 6b28 7665 easeLimitMask(ve\n-0001a130: 7274 6578 2c20 6d61 736b 2c20 6372 6561 rtex, mask, crea\n-0001a140: 7365 456e 6473 293b 3c2f 6469 763e 0a3c seEnds);
.<\n-0001a150: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0001a160: 3e3c 6120 6964 3d22 6c30 3036 3231 2220 > 621 } else {\n-0001a1d0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0001a220: 2036 3232 3c2f 7370 616e 3e20 2020 2020 622 \n-0001a230: 2020 2061 7373 6967 6e43 6f72 6e65 724c assignCornerL\n-0001a240: 696d 6974 4d61 736b 2876 6572 7465 782c imitMask(vertex,\n-0001a250: 206d 6173 6b29 3b3c 2f64 6976 3e0a 3c64 mask);
.\n-0001a270: 3c61 2069 643d 226c 3030 3632 3322 206e 623 }
.\n-0001a2d0: 3c61 2069 643d 226c 3030 3632 3422 206e 624}
.
\n-0001a320: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n-0001a390: 6120 6964 3d22 6c30 3036 3236 2220 6e61 a id=\"l00626\" na\n-0001a3a0: 6d65 3d22 6c30 3036 3236 223e 3c2f 613e me=\"l00626\">\n-0001a3b0: 3c73 7061 6e20 636c 6173 733d 226c 696e 626template<\n-0001a3f0: 2f73 7061 6e3e 2026 6c74 3b53 6368 656d /span> <Schem\n-0001a400: 6554 7970 6520 5343 4845 4d45 2667 743b eType SCHEME>\n-0001a410: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0001a460: 2036 3237 3c2f 7370 616e 3e3c 7370 616e 627template\n-0001a490: 2026 6c74 3b3c 7370 616e 2063 6c61 7373 <typen\n-0001a4b0: 616d 653c 2f73 7061 6e3e 2056 4552 5445 ame VERTE\n-0001a4c0: 582c 203c 7370 616e 2063 6c61 7373 3d22 X, typenam\n-0001a4e0: 653c 2f73 7061 6e3e 204d 4153 4b26 6774 e MASK>\n-0001a4f0: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-0001a540: 2020 3632 383c 2f73 7061 6e3e 3c73 7061 628void
.
.\n-0001a5d0: 3c61 2069 643d 226c 3030 3632 3922 206e 629\n-0001a650: 3c2f 613e 3c2f 7370 616e 3e3c 6120 636c Sche\n-0001a6b0: 6d65 266c 743b 5343 4845 4d45 2667 743b me<SCHEME>\n-0001a6c0: 3a3a 436f 6d70 7574 6556 6572 7465 784c ::ComputeVertexL\n-0001a6d0: 696d 6974 4d61 736b 3c2f 613e 2856 4552 imitMask(VER\n-0001a6e0: 5445 5820 3c73 7061 6e20 636c 6173 733d TEX const<\n-0001a700: 2f73 7061 6e3e 2661 6d70 3b20 7665 7274 /span>& vert\n-0001a710: 6578 2c3c 2f64 6976 3e0a 3c64 6976 2063 ex,
.
630 \n-0001a770: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0001a780: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0001a790: 2020 2020 204d 4153 4b26 616d 703b 2020 MASK& \n-0001a7a0: 2020 2020 2020 2070 6f73 4d61 736b 2c3c posMask,<\n-0001a7b0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-0001a800: 3633 313c 2f73 7061 6e3e 2020 2020 2020 631 \n-0001a810: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0001a820: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0001a830: 204d 4153 4b26 616d 703b 2020 2020 2020 MASK& \n-0001a840: 2020 2074 616e 314d 6173 6b2c 3c2f 6469 tan1Mask,.
632\n-0001a8a0: 3c2f 7370 616e 3e20 2020 2020 2020 2020 \n-0001a8b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0001a8c0: 2020 2020 2020 2020 2020 2020 2020 4d41 MA\n-0001a8d0: 534b 2661 6d70 3b20 2020 2020 2020 2020 SK& \n-0001a8e0: 7461 6e32 4d61 736b 2c3c 2f64 6976 3e0a tan2Mask,
.\n-0001a8f0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n-0001ac10: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0001ac20: 3e3c 6120 6964 3d22 6c30 3036 3336 2220 > 636 assig\n-0001ac70: 6e53 6d6f 6f74 684c 696d 6974 4d61 736b nSmoothLimitMask\n-0001ac80: 2876 6572 7465 782c 2070 6f73 4d61 736b (vertex, posMask\n-0001ac90: 293b 3c2f 6469 763e 0a3c 6469 7620 636c );
.
637 \n-0001acf0: 2020 2020 2061 7373 6967 6e53 6d6f 6f74 assignSmoot\n-0001ad00: 684c 696d 6974 5461 6e67 656e 744d 6173 hLimitTangentMas\n-0001ad10: 6b73 2876 6572 7465 782c 2074 616e 314d ks(vertex, tan1M\n-0001ad20: 6173 6b2c 2074 616e 324d 6173 6b29 3b3c ask, tan2Mask);<\n-0001ad30: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-0001ad80: 3633 383c 2f73 7061 6e3e 2020 2020 7d20 638 } \n-0001ad90: 3c73 7061 6e20 636c 6173 733d 226b 6579 else \n-0001add0: 6966 3c2f 7370 616e 3e20 2872 756c 6520 if (rule \n-0001ade0: 3d3d 203c 6120 636c 6173 733d 2263 6f64 == Crease::RU\n-0001ae60: 4c45 5f43 5245 4153 453c 2f61 3e29 207b LE_CREASE) {\n-0001ae70: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0001aec0: 2036 3339 3c2f 7370 616e 3e20 2020 2020 639 \n-0001aed0: 2020 203c 7370 616e 2063 6c61 7373 3d22 flo\n-0001aef0: 6174 3c2f 7370 616e 3e20 2a20 6564 6765 at * edge\n-0001af00: 5368 6172 706e 6573 7320 3d20 283c 7370 Sharpness = (float *)alloca(ver\n-0001af40: 7465 782e 4765 744e 756d 4564 6765 7328 tex.GetNumEdges(\n-0001af50: 2920 2a20 3c73 7061 6e20 636c 6173 733d ) * sizeof\n-0001af70: 3c2f 7370 616e 3e28 666c 6f61 7429 293b (float));\n-0001af80: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0001afd0: 2036 3430 3c2f 7370 616e 3e20 2020 2020 640 \n-0001afe0: 2020 2076 6572 7465 782e 4765 7453 6861 vertex.GetSha\n-0001aff0: 7270 6e65 7373 5065 7245 6467 6528 6564 rpnessPerEdge(ed\n-0001b000: 6765 5368 6172 706e 6573 7329 3b3c 2f64 geSharpness);.
64\n-0001b060: 313c 2f73 7061 6e3e 203c 2f64 6976 3e0a 1
.\n-0001b070: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n-0001b0a0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 642 int\n-0001b0f0: 2063 7265 6173 6545 6e64 735b 325d 3b3c creaseEnds[2];<\n-0001b100: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-0001b150: 3634 333c 2f73 7061 6e3e 2020 2020 2020 643 \n-0001b160: 2020 3c61 2063 6c61 7373 3d22 636f 6465 Cr\n-0001b190: 6561 7365 3c2f 613e 285f 6f70 7469 6f6e ease(_option\n-0001b1a0: 7329 2e3c 6120 636c 6173 733d 2263 6f64 s).GetSharpEdge\n-0001b200: 5061 6972 4f66 4372 6561 7365 3c2f 613e PairOfCrease\n-0001b210: 2865 6467 6553 6861 7270 6e65 7373 2c20 (edgeSharpness, \n-0001b220: 7665 7274 6578 2e47 6574 4e75 6d45 6467 vertex.GetNumEdg\n-0001b230: 6573 2829 2c20 6372 6561 7365 456e 6473 es(), creaseEnds\n-0001b240: 293b 3c2f 6469 763e 0a3c 6469 7620 636c );
.
644 .
6\n-0001b2f0: 3435 3c2f 7370 616e 3e20 2020 2020 2020 45 \n-0001b300: 2061 7373 6967 6e43 7265 6173 654c 696d assignCreaseLim\n-0001b310: 6974 4d61 736b 2876 6572 7465 782c 2070 itMask(vertex, p\n-0001b320: 6f73 4d61 736b 2c20 6372 6561 7365 456e osMask, creaseEn\n-0001b330: 6473 293b 3c2f 6469 763e 0a3c 6469 7620 ds);
.
646 \n-0001b390: 2020 2020 2020 2061 7373 6967 6e43 7265 assignCre\n-0001b3a0: 6173 654c 696d 6974 5461 6e67 656e 744d aseLimitTangentM\n-0001b3b0: 6173 6b73 2876 6572 7465 782c 2074 616e asks(vertex, tan\n-0001b3c0: 314d 6173 6b2c 2074 616e 324d 6173 6b2c 1Mask, tan2Mask,\n-0001b3d0: 2063 7265 6173 6545 6e64 7329 3b3c 2f64 creaseEnds);.
64\n-0001b430: 373c 2f73 7061 6e3e 2020 2020 7d20 3c73 7 } else {
.<\n-0001b4a0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-0001b4b0: 6e6f 223e 2020 3634 383c 2f73 7061 6e3e no\"> 648\n-0001b4c0: 2020 2020 2020 2020 6173 7369 676e 436f assignCo\n-0001b4d0: 726e 6572 4c69 6d69 744d 6173 6b28 7665 rnerLimitMask(ve\n-0001b4e0: 7274 6578 2c20 706f 734d 6173 6b29 3b3c rtex, posMask);<\n-0001b4f0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-0001b540: 3634 393c 2f73 7061 6e3e 2020 2020 2020 649 \n-0001b550: 2020 6173 7369 676e 436f 726e 6572 4c69 assignCornerLi\n-0001b560: 6d69 7454 616e 6765 6e74 4d61 736b 7328 mitTangentMasks(\n-0001b570: 7665 7274 6578 2c20 7461 6e31 4d61 736b vertex, tan1Mask\n-0001b580: 2c20 7461 6e32 4d61 736b 293b 3c2f 6469 , tan2Mask);.
650\n-0001b5e0: 3c2f 7370 616e 3e20 2020 207d 3c2f 6469 }.
651\n-0001b640: 3c2f 7370 616e 3e7d 3c2f 6469 763e 0a3c }
.<\n-0001b650: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-0001b6a0: 3635 323c 2f73 7061 6e3e 203c 2f64 6976 652 .
653<\n-0001b700: 2f73 7061 6e3e 203c 2f64 6976 3e0a 3c64 /span>
.\n-0001b720: 3c61 2069 643d 226c 3030 3635 3422 206e 654} // end\n-0001b780: 206e 616d 6573 7061 6365 2073 6463 3c2f namespace sdc
.<\n-0001b7d0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-0001b7e0: 6e6f 223e 2020 3635 353c 2f73 7061 6e3e no\"> 655\n-0001b7f0: 203c 2f64 6976 3e0a 3c64 6976 2063 6c61
.
\n-0001b840: 2020 3635 363c 2f73 7061 6e3e 7d20 3c73 656} // end names\n-0001b870: 7061 6365 204f 5045 4e53 5542 4449 565f pace OPENSUBDIV_\n-0001b880: 5645 5253 494f 4e3c 2f73 7061 6e3e 3c2f VERSION.
6\n-0001b8e0: 3537 3c2f 7370 616e 3e3c 7370 616e 2063 57u\n-0001b900: 7369 6e67 206e 616d 6573 7061 6365 203c sing namespace <\n-0001b910: 2f73 7061 6e3e 4f50 454e 5355 4244 4956 /span>OPENSUBDIV\n-0001b920: 5f56 4552 5349 4f4e 3b3c 2f64 6976 3e0a _VERSION;
.\n-0001b930: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n-0001b960: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 658} // e\n-0001b9a0: 6e64 206e 616d 6573 7061 6365 204f 7065 nd namespace Ope\n-0001b9b0: 6e53 7562 6469 763c 2f73 7061 6e3e 3c2f nSubdiv.
6\n-0001ba10: 3539 3c2f 7370 616e 3e20 3c2f 6469 763e 59
\n-0001ba20: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-0001ba50: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 660\n-0001ba90: 2365 6e64 6966 203c 2f73 7061 6e3e 3c73 #endif /* OPENSUBDI\n-0001bac0: 5633 5f53 4443 5f53 4348 454d 455f 4820 V3_SDC_SCHEME_H \n-0001bad0: 2a2f 3c2f 7370 616e 3e3c 7370 616e 2063 */.
E\n-0001bcc0: 6e75 6d65 7261 7465 6420 7479 7065 2066 numerated type f\n-0001bcd0: 6f72 2061 6c6c 2066 6163 6520 7370 6c69 or all face spli\n-0001bce0: 7474 696e 6720 7363 6865 6d65 732e 3c2f tting schemes.
Defini\n-0001bd10: 7469 6f6e 3c2f 623e 203c 6120 6872 6566 tion typ\n-0001bd40: 6573 2e68 3a34 373c 2f61 3e3c 2f64 6976 es.h:47
.
<\n-0001bd90: 6120 6872 6566 3d22 6130 3133 3235 2e68 a href=\"a01325.h\n-0001bda0: 746d 6c22 3e4f 7065 6e53 7562 6469 763a tml\">OpenSubdiv:\n-0001bdb0: 3a4f 5045 4e53 5542 4449 565f 5645 5253 :OPENSUBDIV_VERS\n-0001bdc0: 494f 4e3a 3a53 6463 3a3a 4372 6561 7365 ION::Sdc::Crease\n-0001bdd0: 3c2f 613e 3c2f 6469 763e 3c64 6976 2063
Typ\n-0001bdf0: 6573 2c20 636f 6e73 7461 6e74 7320 616e es, constants an\n-0001be00: 6420 7574 696c 6974 6965 7320 7265 6c61 d utilities rela\n-0001be10: 7465 6420 746f 2073 656d 692d 7368 6172 ted to semi-shar\n-0001be20: 7020 6372 6561 7369 6e67 20e2 8093 2077 p creasing ... w\n-0001be30: 686f 7365 2069 6d70 6c65 6d65 6e74 6174 hose implementat\n-0001be40: 696f 6e20 6973 2069 6e64 6570 656e 6465 ion is independe\n-0001be50: 6e74 206f 2e2e 2e3c 2f64 6976 3e3c 6469 nt o...
\n-0001be70: 3c62 3e44 6566 696e 6974 696f 6e3c 2f62 Definition crease.h:6\n-0001beb0: 323c 2f61 3e3c 2f64 6976 3e3c 2f64 6976 2
.<\n-0001bfc0: 623e 4465 6669 6e69 7469 6f6e 3c2f 623e b>Definition\n-0001bfd0: 203c 6120 6872 6566 3d22 6130 3037 3739 crease.h:82\n-0001c000: 3c2f 613e 3c2f 6469 763e 3c2f 6469 763e
\n-0001c010: 0a3c 6469 7620 636c 6173 733d 2274 7463 .
.
OpenSubdiv::OPE\n-0001c290: 4e53 5542 4449 565f 5645 5253 494f 4e3a NSUBDIV_VERSION:\n-0001c2a0: 3a53 6463 3a3a 4372 6561 7365 3a3a 5255 :Sdc::Crease::RU\n-0001c2b0: 4c45 5f53 4d4f 4f54 483c 2f61 3e3c 2f64 LE_SMOOTH
@ RULE_SM\n-0001c2e0: 4f4f 5448 3c2f 6469 763e 3c64 6976 2063 OOTH
\n-0001c300: 4465 6669 6e69 7469 6f6e 3c2f 623e 203c Definition <\n-0001c310: 6120 6872 6566 3d22 6130 3037 3739 5f73 a href=\"a00779_s\n-0001c320: 6f75 7263 652e 6874 6d6c 236c 3030 3038 ource.html#l0008\n-0001c330: 3422 3e63 7265 6173 652e 683a 3834 3c2f 4\">crease.h:84
.<\n-0001c350: 6469 7620 636c 6173 733d 2274 7463 2220 div class=\"ttc\" \n-0001c360: 6964 3d22 6161 3031 3332 355f 6874 6d6c id=\"aa01325_html\n-0001c370: 5f61 3131 6663 6435 3165 6638 3631 3138 _a11fcd51ef86118\n-0001c380: 6636 3565 3630 3363 3134 3734 3337 3761 f65e603c1474377a\n-0001c390: 3738 6139 3636 6661 3161 6538 6165 6238 78a966fa1ae8aeb8\n-0001c3a0: 3538 3763 3439 3863 6636 6139 3263 6333 587c498cf6a92cc3\n-0001c3b0: 3333 3522 3e3c 6469 7620 636c 6173 733d 335\">.\n-0001c4f0: 3c64 6976 2063 6c61 7373 3d22 7474 6322 .
OpenSubdiv::\n-0001c730: 4f50 454e 5355 4244 4956 5f56 4552 5349 OPENSUBDIV_VERSI\n-0001c740: 4f4e 3a3a 5364 633a 3a43 7265 6173 653a ON::Sdc::Crease:\n-0001c750: 3a47 6574 5368 6172 7045 6467 6550 6169 :GetSharpEdgePai\n-0001c760: 724f 6643 7265 6173 653c 2f61 3e3c 2f64 rOfCrease
void GetS\n-0001c790: 6861 7270 4564 6765 5061 6972 4f66 4372 harpEdgePairOfCr\n-0001c7a0: 6561 7365 2866 6c6f 6174 2063 6f6e 7374 ease(float const\n-0001c7b0: 202a 696e 6369 6465 6e74 4564 6765 5368 *incidentEdgeSh\n-0001c7c0: 6172 706e 6573 732c 2069 6e74 2069 6e63 arpness, int inc\n-0001c7d0: 6964 656e 7445 6467 6543 6f75 6e74 2c20 identEdgeCount, \n-0001c7e0: 696e 7420 7368 6172 7045 6467 6550 6169 int sharpEdgePai\n-0001c7f0: 725b 325d 2920 636f 6e73 743c 2f64 6976 r[2]) const
Definitio\n-0001c820: 6e3c 2f62 3e20 3c61 2068 7265 663d 2261 n crease\n-0001c850: 2e68 3a32 3238 3c2f 613e 3c2f 6469 763e .h:228
\n-0001c860: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
.<\n-0001c9e0: 6469 7620 636c 6173 733d 2274 7463 2220 div class=\"ttc\" \n-0001c9f0: 6964 3d22 6161 3031 3332 355f 6874 6d6c id=\"aa01325_html\n-0001ca00: 5f61 3564 6661 3638 3130 6635 3130 6661 _a5dfa6810f510fa\n-0001ca10: 6331 6563 3632 3166 6339 6536 6235 3330 c1ec621fc9e6b530\n-0001ca20: 6334 223e 3c64 6976 2063 6c61 7373 3d22 c4\">\n-0001cab0: 3c64 6976 2063 6c61 7373 3d22 7474 6465
bool IsUnifo\n-0001cad0: 726d 2829 2063 6f6e 7374 3c2f 6469 763e rm() const
\n-0001cae0: 3c64 6976 2063 6c61 7373 3d22 7474 6465
Definition\n-0001cb00: 3c2f 623e 203c 6120 6872 6566 3d22 6130 crease.\n-0001cb30: 683a 3935 3c2f 613e 3c2f 6469 763e 3c2f h:95
.
OpenSubdiv\n-0001cbe0: 3a3a 4f50 454e 5355 4244 4956 5f56 4552 ::OPENSUBDIV_VER\n-0001cbf0: 5349 4f4e 3a3a 5364 633a 3a43 7265 6173 SION::Sdc::Creas\n-0001cc00: 653a 3a43 6f6d 7075 7465 4672 6163 7469 e::ComputeFracti\n-0001cc10: 6f6e 616c 5765 6967 6874 4174 5665 7274 onalWeightAtVert\n-0001cc20: 6578 3c2f 613e 3c2f 6469 763e 3c64 6976 ex
\n-0001cc40: 666c 6f61 7420 436f 6d70 7574 6546 7261 float ComputeFra\n-0001cc50: 6374 696f 6e61 6c57 6569 6768 7441 7456 ctionalWeightAtV\n-0001cc60: 6572 7465 7828 666c 6f61 7420 7665 7274 ertex(float vert\n-0001cc70: 6578 5368 6172 706e 6573 732c 2066 6c6f exSharpness, flo\n-0001cc80: 6174 2063 6869 6c64 5665 7274 6578 5368 at childVertexSh\n-0001cc90: 6172 706e 6573 732c 2069 6e74 2069 6e63 arpness, int inc\n-0001cca0: 6964 656e 7445 6467 6543 6f75 6e74 2c20 identEdgeCount, \n-0001ccb0: 666c 6f61 7420 636f 6e73 7420 2a69 6e63 float const *inc\n-0001ccc0: 6964 656e 7445 6467 6553 6861 7270 6e65 identEdgeSharpne\n-0001ccd0: 7373 2c20 666c 6f61 7420 636f 6e73 7420 ss, float const \n-0001cce0: 2a63 6869 6c64 4564 6765 7353 6861 7270 *childEdgesSharp\n-0001ccf0: 6e65 7373 2920 636f 6e73 743c 2f64 6976 ness) const
Transitional\n-0001cd20: 2077 6569 6768 7469 6e67 3a20 5768 656e weighting: When\n-0001cd30: 2074 6865 2072 756c 6573 2061 7070 6c69 the rules appli\n-0001cd40: 6361 626c 6520 746f 2061 2070 6172 656e cable to a paren\n-0001cd50: 7420 7665 7274 6578 2061 6e64 2069 7473 t vertex and its\n-0001cd60: 2063 6869 6c64 2064 6966 6665 722c 2e2e child differ,..\n-0001cd70: 2e3c 2f64 6976 3e3c 2f64 6976 3e0a 3c64 .
.
OpenS\n-0001cdd0: 7562 6469 763a 3a4f 5045 4e53 5542 4449 ubdiv::OPENSUBDI\n-0001cde0: 565f 5645 5253 494f 4e3a 3a53 6463 3a3a V_VERSION::Sdc::\n-0001cdf0: 4f70 7469 6f6e 733c 2f61 3e3c 2f64 6976 Options
All supporte\n-0001ce20: 6420 6f70 7469 6f6e 7320 6170 706c 7969 d options applyi\n-0001ce30: 6e67 2074 6f20 7375 6264 6976 6973 696f ng to subdivisio\n-0001ce40: 6e20 7363 6865 6d65 2e3c 2f64 6976 3e3c n scheme.
<\n-0001ce50: 6469 7620 636c 6173 733d 2274 7464 6566 div class=\"ttdef\n-0001ce60: 223e 3c62 3e44 6566 696e 6974 696f 6e3c \">Definition<\n-0001ce70: 2f62 3e20 3c61 2068 7265 663d 2261 3030 /b> options.\n-0001cea0: 683a 3531 3c2f 613e 3c2f 6469 763e 3c2f h:51
..\n-0001d110: 766f 6964 2061 7373 6967 6e53 6d6f 6f74 void assignSmoot\n-0001d120: 684d 6173 6b46 6f72 4564 6765 2845 4447 hMaskForEdge(EDG\n-0001d130: 4520 636f 6e73 7420 2661 6d70 3b65 6467 E const &edg\n-0001d140: 652c 204d 4153 4b20 2661 6d70 3b6d 6173 e, MASK &mas\n-0001d150: 6b29 2063 6f6e 7374 3c2f 6469 763e 3c2f k) const
.
OpenSubdiv\n-0001d200: 3a3a 4f50 454e 5355 4244 4956 5f56 4552 ::OPENSUBDIV_VER\n-0001d210: 5349 4f4e 3a3a 5364 633a 3a53 6368 656d SION::Sdc::Schem\n-0001d220: 653a 3a47 6574 546f 706f 6c6f 6769 6361 e::GetTopologica\n-0001d230: 6c53 706c 6974 5479 7065 3c2f 613e 3c2f lSplitType
static S\n-0001d260: 706c 6974 2047 6574 546f 706f 6c6f 6769 plit GetTopologi\n-0001d270: 6361 6c53 706c 6974 5479 7065 2829 3c2f calSplitType()
.
\n-0001d2d0: 3c64 6976 2063 6c61 7373 3d22 7474 6e61 \n-0001d380: 766f 6964 2061 7373 6967 6e43 7265 6173 void assignCreas\n-0001d390: 654d 6173 6b46 6f72 5665 7274 6578 2856 eMaskForVertex(V\n-0001d3a0: 4552 5445 5820 636f 6e73 7420 2661 6d70 ERTEX const &\n-0001d3b0: 3b65 6467 652c 204d 4153 4b20 2661 6d70 ;edge, MASK &\n-0001d3c0: 3b6d 6173 6b2c 2069 6e74 2063 6f6e 7374 ;mask, int const\n-0001d3d0: 2063 7265 6173 6545 6e64 735b 325d 2920 creaseEnds[2]) \n-0001d3e0: 636f 6e73 743c 2f64 6976 3e3c 2f64 6976 const
.
OpenSubdiv::O\n-0001d490: 5045 4e53 5542 4449 565f 5645 5253 494f PENSUBDIV_VERSIO\n-0001d4a0: 4e3a 3a53 6463 3a3a 5363 6865 6d65 3a3a N::Sdc::Scheme::\n-0001d4b0: 436f 6d70 7574 6556 6572 7465 7856 6572 ComputeVertexVer\n-0001d4c0: 7465 784d 6173 6b3c 2f61 3e3c 2f64 6976 texMask
void Comput\n-0001d4f0: 6556 6572 7465 7856 6572 7465 784d 6173 eVertexVertexMas\n-0001d500: 6b28 5645 5254 4558 2063 6f6e 7374 2026 k(VERTEX const &\n-0001d510: 616d 703b 7665 7274 6578 4e65 6967 6862 amp;vertexNeighb\n-0001d520: 6f72 686f 6f64 2c20 4d41 534b 2026 616d orhood, MASK &am\n-0001d530: 703b 7665 7274 6578 5665 7274 6578 4d61 p;vertexVertexMa\n-0001d540: 736b 2c20 4372 6561 7365 3a3a 5275 6c65 sk, Crease::Rule\n-0001d550: 2070 6172 656e 7452 756c 653d 4372 6561 parentRule=Crea\n-0001d560: 7365 3a3a 5255 4c45 5f55 4e4b 4e4f 574e se::RULE_UNKNOWN\n-0001d570: 2c20 4372 6561 7365 3a3a 5275 6c65 2063 , Crease::Rule c\n-0001d580: 6869 6c64 5275 6c65 3d43 7265 6173 653a hildRule=Crease:\n-0001d590: 3a52 554c 455f 554e 4b4e 4f57 4e29 2063 :RULE_UNKNOWN) c\n-0001d5a0: 6f6e 7374 3c2f 6469 763e 3c64 6976 2063 onst
Ver\n-0001d5c0: 7465 782d 7665 7274 6578 206d 6173 6b73 tex-vertex masks\n-0001d5d0: 2049 6620 6b6e 6f77 6e2c 2061 2073 696e If known, a sin\n-0001d5e0: 676c 6520 5275 6c65 206f 7220 7061 6972 gle Rule or pair\n-0001d5f0: 206f 6620 5275 6c65 7320 6361 6e20 6265 of Rules can be\n-0001d600: 2073 7065 6369 6669 6564 2028 696e 6469 specified (indi\n-0001d610: 6361 7469 6e67 2061 2063 7265 6173 6520 cating a crease \n-0001d620: 7472 2e2e 2e3c 2f64 6976 3e3c 6469 7620 tr...
Definition \n-0001d650: 3c61 2068 7265 663d 2261 3030 3737 305f scheme.h:512\n-0001d680: 3c2f 613e 3c2f 6469 763e 3c2f 6469 763e
\n-0001d690: 0a3c 6469 7620 636c 6173 733d 2274 7463 .
<\n-0001d770: 6469 7620 636c 6173 733d 2274 7464 6563 div class=\"ttdec\n-0001d780: 6922 3e76 6f69 6420 436f 6d70 7574 6556 i\">void ComputeV\n-0001d790: 6572 7465 784c 696d 6974 4d61 736b 2856 ertexLimitMask(V\n-0001d7a0: 4552 5445 5820 636f 6e73 7420 2661 6d70 ERTEX const &\n-0001d7b0: 3b76 6572 7465 784e 6569 6768 626f 7268 ;vertexNeighborh\n-0001d7c0: 6f6f 642c 204d 4153 4b20 2661 6d70 3b70 ood, MASK &p\n-0001d7d0: 6f73 6974 696f 6e4d 6173 6b2c 2043 7265 ositionMask, Cre\n-0001d7e0: 6173 653a 3a52 756c 6520 7665 7274 6578 ase::Rule vertex\n-0001d7f0: 5275 6c65 2920 636f 6e73 743c 2f64 6976 Rule) const
Limit masks \n-0001d820: 666f 7220 7665 7274 6963 6573 20e2 8093 for vertices ...\n-0001d830: 2070 6f73 6974 696f 6e20 616e 6420 7461 position and ta\n-0001d840: 6e67 656e 7473 2054 6865 7365 2070 7265 ngents These pre\n-0001d850: 7375 6d65 2074 6861 7420 6120 7665 7274 sume that a vert\n-0001d860: 6578 2069 7320 7375 6974 6162 6c79 2069 ex is suitably i\n-0001d870: 736f 6c61 7465 6420 666f 722e 2e2e 3c2f solated for...
Defini\n-0001d8a0: 7469 6f6e 3c2f 623e 203c 6120 6872 6566 tion sch\n-0001d8d0: 656d 652e 683a 3630 373c 2f61 3e3c 2f64 eme.h:607
.<\n-0001d9d0: 6469 7620 636c 6173 733d 2274 7464 6563 div class=\"ttdec\n-0001d9e0: 6922 3e76 6f69 6420 6173 7369 676e 4372 i\">void assignCr\n-0001d9f0: 6561 7365 4c69 6d69 7454 616e 6765 6e74 easeLimitTangent\n-0001da00: 4d61 736b 7328 5645 5254 4558 2063 6f6e Masks(VERTEX con\n-0001da10: 7374 2026 616d 703b 7665 7274 6578 2c20 st &vertex, \n-0001da20: 4d41 534b 2026 616d 703b 7461 6e31 2c20 MASK &tan1, \n-0001da30: 4d41 534b 2026 616d 703b 7461 6e32 2c20 MASK &tan2, \n-0001da40: 696e 7420 636f 6e73 7420 6372 6561 7365 int const crease\n-0001da50: 456e 6473 5b32 5d29 2063 6f6e 7374 3c2f Ends[2]) const
.
\n-0001dab0: 3c64 6976 2063 6c61 7373 3d22 7474 6e61
Open\n-0001db00: 5375 6264 6976 3a3a 4f50 454e 5355 4244 Subdiv::OPENSUBD\n-0001db10: 4956 5f56 4552 5349 4f4e 3a3a 5364 633a IV_VERSION::Sdc:\n-0001db20: 3a53 6368 656d 653a 3a47 6574 5265 6775 :Scheme::GetRegu\n-0001db30: 6c61 7246 6163 6553 697a 653c 2f61 3e3c larFaceSize<\n-0001db40: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
static \n-0001db60: 696e 7420 4765 7452 6567 756c 6172 4661 int GetRegularFa\n-0001db70: 6365 5369 7a65 2829 3c2f 6469 763e 3c2f ceSize()
.
OpenSubdiv\n-0001dc20: 3a3a 4f50 454e 5355 4244 4956 5f56 4552 ::OPENSUBDIV_VER\n-0001dc30: 5349 4f4e 3a3a 5364 633a 3a53 6368 656d SION::Sdc::Schem\n-0001dc40: 653a 3a61 7373 6967 6e43 7265 6173 654d e::assignCreaseM\n-0001dc50: 6173 6b46 6f72 4564 6765 3c2f 613e 3c2f askForEdge
void ass\n-0001dc80: 6967 6e43 7265 6173 654d 6173 6b46 6f72 ignCreaseMaskFor\n-0001dc90: 4564 6765 2845 4447 4520 636f 6e73 7420 Edge(EDGE const \n-0001dca0: 2661 6d70 3b65 6467 652c 204d 4153 4b20 &edge, MASK \n-0001dcb0: 2661 6d70 3b6d 6173 6b29 2063 6f6e 7374 &mask) const\n-0001dcc0: 3c2f 6469 763e 3c64 6976 2063 6c61 7373
Defi\n-0001dce0: 6e69 7469 6f6e 3c2f 623e 203c 6120 6872 nition s\n-0001dd10: 6368 656d 652e 683a 3331 373c 2f61 3e3c cheme.h:317<\n-0001dd20: 2f64 6976 3e3c 2f64 6976 3e0a 3c64 6976 /div>
.
voi\n-0001de20: 6420 436f 6d70 7574 6545 6467 6556 6572 d ComputeEdgeVer\n-0001de30: 7465 784d 6173 6b28 4544 4745 2063 6f6e texMask(EDGE con\n-0001de40: 7374 2026 616d 703b 6564 6765 4e65 6967 st &edgeNeig\n-0001de50: 6862 6f72 686f 6f64 2c20 4d41 534b 2026 hborhood, MASK &\n-0001de60: 616d 703b 6564 6765 5665 7274 6578 4d61 amp;edgeVertexMa\n-0001de70: 736b 2c20 4372 6561 7365 3a3a 5275 6c65 sk, Crease::Rule\n-0001de80: 2070 6172 656e 7452 756c 653d 4372 6561 parentRule=Crea\n-0001de90: 7365 3a3a 5255 4c45 5f55 4e4b 4e4f 574e se::RULE_UNKNOWN\n-0001dea0: 2c20 4372 6561 7365 3a3a 5275 6c65 2063 , Crease::Rule c\n-0001deb0: 6869 6c64 5275 6c65 3d43 7265 6173 653a hildRule=Crease:\n-0001dec0: 3a52 554c 455f 554e 4b4e 4f57 4e29 2063 :RULE_UNKNOWN) c\n-0001ded0: 6f6e 7374 3c2f 6469 763e 3c64 6976 2063 onst
\n-0001dfc0: 0a3c 6469 7620 636c 6173 733d 2274 7463 .
<\n-0001e090: 6469 7620 636c 6173 733d 2274 7464 6563 div class=\"ttdec\n-0001e0a0: 6922 3e53 6368 656d 6528 293c 2f64 6976 i\">Scheme()
Definitio\n-0001e0d0: 6e3c 2f62 3e20 3c61 2068 7265 663d 2261 n scheme\n-0001e100: 2e68 3a37 303c 2f61 3e3c 2f64 6976 3e3c .h:70
<\n-0001e110: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
<\n-0001e170: 6120 6872 6566 3d22 6130 3133 3333 2e68 a href=\"a01333.h\n-0001e180: 746d 6c23 6137 3336 6331 3039 3434 6362 tml#a736c10944cb\n-0001e190: 3932 3162 3333 3466 6264 3862 3831 3836 921b334fbd8b8186\n-0001e1a0: 3664 3539 6622 3e4f 7065 6e53 7562 6469 6d59f\">OpenSubdi\n-0001e1b0: 763a 3a4f 5045 4e53 5542 4449 565f 5645 v::OPENSUBDIV_VE\n-0001e1c0: 5253 494f 4e3a 3a53 6463 3a3a 5363 6865 RSION::Sdc::Sche\n-0001e1d0: 6d65 3a3a 6173 7369 676e 536d 6f6f 7468 me::assignSmooth\n-0001e1e0: 4c69 6d69 744d 6173 6b3c 2f61 3e3c 2f64 LimitMask
void assi\n-0001e210: 676e 536d 6f6f 7468 4c69 6d69 744d 6173 gnSmoothLimitMas\n-0001e220: 6b28 5645 5254 4558 2063 6f6e 7374 2026 k(VERTEX const &\n-0001e230: 616d 703b 7665 7274 6578 2c20 4d41 534b amp;vertex, MASK\n-0001e240: 2026 616d 703b 706f 7329 2063 6f6e 7374 &pos) const\n-0001e250: 3c2f 6469 763e 3c2f 6469 763e 0a3c 6469
.static int GetL\n-0001e360: 6f63 616c 4e65 6967 6862 6f72 686f 6f64 ocalNeighborhood\n-0001e370: 5369 7a65 2829 3c2f 6469 763e 3c2f 6469 Size()
.
OpenSubdiv::\n-0001e420: 4f50 454e 5355 4244 4956 5f56 4552 5349 OPENSUBDIV_VERSI\n-0001e430: 4f4e 3a3a 5364 633a 3a53 6368 656d 653a ON::Sdc::Scheme:\n-0001e440: 3a61 7373 6967 6e43 6f72 6e65 724d 6173 :assignCornerMas\n-0001e450: 6b46 6f72 5665 7274 6578 3c2f 613e 3c2f kForVertex
void ass\n-0001e480: 6967 6e43 6f72 6e65 724d 6173 6b46 6f72 ignCornerMaskFor\n-0001e490: 5665 7274 6578 2856 4552 5445 5820 636f Vertex(VERTEX co\n-0001e4a0: 6e73 7420 2661 6d70 3b65 6467 652c 204d nst &edge, M\n-0001e4b0: 4153 4b20 2661 6d70 3b6d 6173 6b29 2063 ASK &mask) c\n-0001e4c0: 6f6e 7374 3c2f 6469 763e 3c64 6976 2063 onst
\n-0001e4e0: 4465 6669 6e69 7469 6f6e 3c2f 623e 203c Definition <\n-0001e4f0: 6120 6872 6566 3d22 6130 3037 3730 5f73 a href=\"a00770_s\n-0001e500: 6f75 7263 652e 6874 6d6c 236c 3030 3333 ource.html#l0033\n-0001e510: 3122 3e73 6368 656d 652e 683a 3333 313c 1\">scheme.h:331<\n-0001e520: 2f61 3e3c 2f64 6976 3e3c 2f64 6976 3e0a /a>
.\n-0001e530: 3c64 6976 2063 6c61 7373 3d22 7474 6322
void assignCrea\n-0001e630: 7365 4c69 6d69 744d 6173 6b28 5645 5254 seLimitMask(VERT\n-0001e640: 4558 2063 6f6e 7374 2026 616d 703b 7665 EX const &ve\n-0001e650: 7274 6578 2c20 4d41 534b 2026 616d 703b rtex, MASK &\n-0001e660: 706f 732c 2069 6e74 2063 6f6e 7374 2063 pos, int const c\n-0001e670: 7265 6173 6545 6e64 735b 325d 2920 636f reaseEnds[2]) co\n-0001e680: 6e73 743c 2f64 6976 3e3c 2f64 6976 3e0a nst
.\n-0001e690: 3c64 6976 2063 6c61 7373 3d22 7474 6322
OpenSubdiv::OPE\n-0001e730: 4e53 5542 4449 565f 5645 5253 494f 4e3a NSUBDIV_VERSION:\n-0001e740: 3a53 6463 3a3a 5363 6865 6d65 3a3a 6173 :Sdc::Scheme::as\n-0001e750: 7369 676e 536d 6f6f 7468 4d61 736b 466f signSmoothMaskFo\n-0001e760: 7256 6572 7465 783c 2f61 3e3c 2f64 6976 rVertex
void assign\n-0001e790: 536d 6f6f 7468 4d61 736b 466f 7256 6572 SmoothMaskForVer\n-0001e7a0: 7465 7828 5645 5254 4558 2063 6f6e 7374 tex(VERTEX const\n-0001e7b0: 2026 616d 703b 6564 6765 2c20 4d41 534b &edge, MASK\n-0001e7c0: 2026 616d 703b 6d61 736b 2920 636f 6e73 &mask) cons\n-0001e7d0: 743c 2f64 6976 3e3c 2f64 6976 3e0a 3c64 t
.static int GetR\n-0001e8e0: 6567 756c 6172 5665 7274 6578 5661 6c65 egularVertexVale\n-0001e8f0: 6e63 6528 293c 2f64 6976 3e3c 2f64 6976 nce()
.
OpenSubdiv::O\n-0001e9a0: 5045 4e53 5542 4449 565f 5645 5253 494f PENSUBDIV_VERSIO\n-0001e9b0: 4e3a 3a53 6463 3a3a 5363 6865 6d65 3a3a N::Sdc::Scheme::\n-0001e9c0: 4765 744f 7074 696f 6e73 3c2f 613e 3c2f GetOptions
Options \n-0001e9f0: 4765 744f 7074 696f 6e73 2829 2063 6f6e GetOptions() con\n-0001ea00: 7374 3c2f 6469 763e 3c64 6976 2063 6c61 st
De\n-0001ea20: 6669 6e69 7469 6f6e 3c2f 623e 203c 6120 finition scheme.h:74\n-0001ea60: 3c2f 6469 763e 3c2f 6469 763e 0a3c 6469
.
Op\n-0001eb00: 656e 5375 6264 6976 3a3a 4f50 454e 5355 enSubdiv::OPENSU\n-0001eb10: 4244 4956 5f56 4552 5349 4f4e 3a3a 5364 BDIV_VERSION::Sd\n-0001eb20: 633a 3a53 6368 656d 653a 3a61 7373 6967 c::Scheme::assig\n-0001eb30: 6e53 6d6f 6f74 684c 696d 6974 5461 6e67 nSmoothLimitTang\n-0001eb40: 656e 744d 6173 6b73 3c2f 613e 3c2f 6469 entMasks
void assig\n-0001eb70: 6e53 6d6f 6f74 684c 696d 6974 5461 6e67 nSmoothLimitTang\n-0001eb80: 656e 744d 6173 6b73 2856 4552 5445 5820 entMasks(VERTEX \n-0001eb90: 636f 6e73 7420 2661 6d70 3b76 6572 7465 const &verte\n-0001eba0: 782c 204d 4153 4b20 2661 6d70 3b74 616e x, MASK &tan\n-0001ebb0: 312c 204d 4153 4b20 2661 6d70 3b74 616e 1, MASK &tan\n-0001ebc0: 3229 2063 6f6e 7374 3c2f 6469 763e 3c2f 2) const
.
OpenSubdiv\n-0001ec70: 3a3a 4f50 454e 5355 4244 4956 5f56 4552 ::OPENSUBDIV_VER\n-0001ec80: 5349 4f4e 3a3a 5364 633a 3a53 6368 656d SION::Sdc::Schem\n-0001ec90: 653a 3a61 7373 6967 6e43 6f72 6e65 724c e::assignCornerL\n-0001eca0: 696d 6974 4d61 736b 3c2f 613e 3c2f 6469 imitMask
void assig\n-0001ecd0: 6e43 6f72 6e65 724c 696d 6974 4d61 736b nCornerLimitMask\n-0001ece0: 2856 4552 5445 5820 636f 6e73 7420 2661 (VERTEX const &a\n-0001ecf0: 6d70 3b76 6572 7465 782c 204d 4153 4b20 mp;vertex, MASK \n-0001ed00: 2661 6d70 3b70 6f73 2920 636f 6e73 743c &pos) const<\n-0001ed10: 2f64 6976 3e3c 2f64 6976 3e0a 3c64 6976 /div>
.
Sc\n-0001ee00: 6865 6d65 284f 7074 696f 6e73 2063 6f6e heme(Options con\n-0001ee10: 7374 2026 616d 703b 6f70 7469 6f6e 7329 st &options)\n-0001ee20: 3c2f 6469 763e 3c64 6976 2063 6c61 7373
Defi\n-0001ee40: 6e69 7469 6f6e 3c2f 623e 203c 6120 6872 nition s\n-0001ee70: 6368 656d 652e 683a 3732 3c2f 613e 3c2f cheme.h:72
.
\n-0001f090: 0a3c 6469 7620 636c 6173 733d 2274 7463 .
void a\n-0001f190: 7373 6967 6e43 6f72 6e65 724c 696d 6974 ssignCornerLimit\n-0001f1a0: 5461 6e67 656e 744d 6173 6b73 2856 4552 TangentMasks(VER\n-0001f1b0: 5445 5820 636f 6e73 7420 2661 6d70 3b76 TEX const &v\n-0001f1c0: 6572 7465 782c 204d 4153 4b20 2661 6d70 ertex, MASK &\n-0001f1d0: 3b74 616e 312c 204d 4153 4b20 2661 6d70 ;tan1, MASK &\n-0001f1e0: 3b74 616e 3229 2063 6f6e 7374 3c2f 6469 ;tan2) const
.
v\n-0001f2e0: 6f69 6420 5365 744f 7074 696f 6e73 2863 oid SetOptions(c\n-0001f2f0: 6f6e 7374 204f 7074 696f 6e73 2026 616d onst Options &am\n-0001f300: 703b 6e65 774f 7074 696f 6e73 293c 2f64 p;newOptions)
Definit\n-0001f330: 696f 6e3c 2f62 3e20 3c61 2068 7265 663d ion sche\n-0001f360: 6d65 2e68 3a37 353c 2f61 3e3c 2f64 6976 me.h:75
.
<\n-0001f3b0: 6120 6872 6566 3d22 6130 3133 3337 2e68 a href=\"a01337.h\n-0001f3c0: 746d 6c22 3e4f 7065 6e53 7562 6469 763a tml\">OpenSubdiv:\n-0001f3d0: 3a4f 5045 4e53 5542 4449 565f 5645 5253 :OPENSUBDIV_VERS\n-0001f3e0: 494f 4e3a 3a53 6463 3a3a 5363 6865 6d65 ION::Sdc::Scheme\n-0001f3f0: 3a3a 4c6f 6361 6c4d 6173 6b3c 2f61 3e3c ::LocalMask<\n-0001f400: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
Defin\n-0001f420: 6974 696f 6e3c 2f62 3e20 3c61 2068 7265 ition sc\n-0001f450: 6865 6d65 2e68 3a32 3039 3c2f 613e 3c2f heme.h:209
.
\n-0001f4b0: 3c64 6976 2063 6c61 7373 3d22 7474 6e61 \n-0001f5d0: 0a3c 6469 7620 636c 6173 733d 2274 7463 ..
W\n-0001f9e0: 6569 6768 7420 636f 6e73 7420 2661 6d70 eight const &\n-0001f9f0: 3b20 4564 6765 5765 6967 6874 2869 6e74 ; EdgeWeight(int\n-0001fa00: 2069 6e64 6578 2920 636f 6e73 743c 2f64 index) const
Definit\n-0001fa30: 696f 6e3c 2f62 3e20 3c61 2068 7265 663d ion sche\n-0001fa60: 6d65 2e68 3a32 3332 3c2f 613e 3c2f 6469 me.h:232
.
Weight\n-0001fb70: 2026 616d 703b 2045 6467 6557 6569 6768 & EdgeWeigh\n-0001fb80: 7428 696e 7420 696e 6465 7829 3c2f 6469 t(int index)
Definiti\n-0001fbb0: 6f6e 3c2f 623e 203c 6120 6872 6566 3d22 on schem\n-0001fbe0: 652e 683a 3233 363c 2f61 3e3c 2f64 6976 e.h:236
.
OpenSub\n-0001fc90: 6469 763a 3a4f 5045 4e53 5542 4449 565f div::OPENSUBDIV_\n-0001fca0: 5645 5253 494f 4e3a 3a53 6463 3a3a 5363 VERSION::Sdc::Sc\n-0001fcb0: 6865 6d65 3a3a 4c6f 6361 6c4d 6173 6b3a heme::LocalMask:\n-0001fcc0: 3a43 6f6d 6269 6e65 5665 7274 6578 5665 :CombineVertexVe\n-0001fcd0: 7274 6578 4d61 736b 733c 2f61 3e3c 2f64 rtexMasks
void Comb\n-0001fd00: 696e 6556 6572 7465 7856 6572 7465 784d ineVertexVertexM\n-0001fd10: 6173 6b73 2857 6569 6768 7420 7468 6973 asks(Weight this\n-0001fd20: 436f 6566 662c 2057 6569 6768 7420 6473 Coeff, Weight ds\n-0001fd30: 7443 6f65 6666 2c20 5553 4552 5f4d 4153 tCoeff, USER_MAS\n-0001fd40: 4b20 2661 6d70 3b64 7374 2920 636f 6e73 K &dst) cons\n-0001fd50: 743c 2f64 6976 3e3c 6469 7620 636c 6173 t
Def\n-0001fd70: 696e 6974 696f 6e3c 2f62 3e20 3c61 2068 inition \n-0001fda0: 7363 6865 6d65 2e68 3a32 3439 3c2f 613e scheme.h:249\n-0001fdb0: 3c2f 6469 763e 3c2f 6469 763e 0a3c 6469
..
void S\n-00020040: 6574 4e75 6d46 6163 6557 6569 6768 7473 etNumFaceWeights\n-00020050: 2869 6e74 2063 6f75 6e74 293c 2f64 6976 (int count)
Definitio\n-00020080: 6e3c 2f62 3e20 3c61 2068 7265 663d 2261 n scheme\n-000200b0: 2e68 3a32 3239 3c2f 613e 3c2f 6469 763e .h:229
\n-000200c0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00020120: 3c61 2068 7265 663d 2261 3031 3333 372e OpenSubd\n-00020160: 6976 3a3a 4f50 454e 5355 4244 4956 5f56 iv::OPENSUBDIV_V\n-00020170: 4552 5349 4f4e 3a3a 5364 633a 3a53 6368 ERSION::Sdc::Sch\n-00020180: 656d 653a 3a4c 6f63 616c 4d61 736b 3a3a eme::LocalMask::\n-00020190: 4661 6365 5765 6967 6874 3c2f 613e 3c2f FaceWeight
Weight c\n-000201c0: 6f6e 7374 2026 616d 703b 2046 6163 6557 onst & FaceW\n-000201d0: 6569 6768 7428 696e 7420 696e 6465 7829 eight(int index)\n-000201e0: 2063 6f6e 7374 3c2f 6469 763e 3c64 6976 const
<\n-00020200: 623e 4465 6669 6e69 7469 6f6e 3c2f 623e b>Definition\n-00020210: 203c 6120 6872 6566 3d22 6130 3037 3730 scheme.h:23\n-00020240: 333c 2f61 3e3c 2f64 6976 3e3c 2f64 6976 3
.
int Ge\n-00020350: 744e 756d 4564 6765 5765 6967 6874 7328 tNumEdgeWeights(\n-00020360: 2920 636f 6e73 743c 2f64 6976 3e3c 6469 ) const
\n-00020380: 3c62 3e44 6566 696e 6974 696f 6e3c 2f62 Definition scheme.h:2\n-000203c0: 3234 3c2f 613e 3c2f 6469 763e 3c2f 6469 24
.
OpenSubdiv::\n-00020470: 4f50 454e 5355 4244 4956 5f56 4552 5349 OPENSUBDIV_VERSI\n-00020480: 4f4e 3a3a 5364 633a 3a53 6368 656d 653a ON::Sdc::Scheme:\n-00020490: 3a4c 6f63 616c 4d61 736b 3a3a 5665 7274 :LocalMask::Vert\n-000204a0: 6578 5765 6967 6874 3c2f 613e 3c2f 6469 exWeight
Weight &am\n-000204d0: 703b 2056 6572 7465 7857 6569 6768 7428 p; VertexWeight(\n-000204e0: 696e 7420 696e 6465 7829 3c2f 6469 763e int index)
\n-000204f0: 3c64 6976 2063 6c61 7373 3d22 7474 6465
Definition\n-00020510: 3c2f 623e 203c 6120 6872 6566 3d22 6130 scheme.\n-00020540: 683a 3233 353c 2f61 3e3c 2f64 6976 3e3c h:235
<\n-00020550: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
<\n-000205b0: 6120 6872 6566 3d22 6130 3133 3337 2e68 a href=\"a01337.h\n-000205c0: 746d 6c23 6139 3366 3537 6535 3333 3733 tml#a93f57e53373\n-000205d0: 3931 6332 3064 3436 6465 6664 6233 6161 91c20d46defdb3aa\n-000205e0: 3263 3166 6522 3e4f 7065 6e53 7562 6469 2c1fe\">OpenSubdi\n-000205f0: 763a 3a4f 5045 4e53 5542 4449 565f 5645 v::OPENSUBDIV_VE\n-00020600: 5253 494f 4e3a 3a53 6463 3a3a 5363 6865 RSION::Sdc::Sche\n-00020610: 6d65 3a3a 4c6f 6361 6c4d 6173 6b3a 3a47 me::LocalMask::G\n-00020620: 6574 4e75 6d46 6163 6557 6569 6768 7473 etNumFaceWeights\n-00020630: 3c2f 613e 3c2f 6469 763e 3c64 6976 2063
in\n-00020650: 7420 4765 744e 756d 4661 6365 5765 6967 t GetNumFaceWeig\n-00020660: 6874 7328 2920 636f 6e73 743c 2f64 6976 hts() const
Definitio\n-00020690: 6e3c 2f62 3e20 3c61 2068 7265 663d 2261 n scheme\n-000206c0: 2e68 3a32 3235 3c2f 613e 3c2f 6469 763e .h:225
\n-000206d0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
void S\n-000207e0: 6574 4661 6365 5765 6967 6874 7346 6f72 etFaceWeightsFor\n-000207f0: 4661 6365 4365 6e74 6572 7328 626f 6f6c FaceCenters(bool\n-00020800: 206f 6e29 3c2f 6469 763e 3c64 6976 2063 on)
\n-00020820: 4465 6669 6e69 7469 6f6e 3c2f 623e 203c Definition <\n-00020830: 6120 6872 6566 3d22 6130 3037 3730 5f73 a href=\"a00770_s\n-00020840: 6f75 7263 652e 6874 6d6c 236c 3030 3234 ource.html#l0024\n-00020850: 3022 3e73 6368 656d 652e 683a 3234 303c 0\">scheme.h:240<\n-00020860: 2f61 3e3c 2f64 6976 3e3c 2f64 6976 3e0a /a>
.\n-00020870: 3c64 6976 2063 6c61 7373 3d22 7474 6322
void S\n-00020970: 6574 4e75 6d56 6572 7465 7857 6569 6768 etNumVertexWeigh\n-00020980: 7473 2869 6e74 2063 6f75 6e74 293c 2f64 ts(int count)
Definit\n-000209b0: 696f 6e3c 2f62 3e20 3c61 2068 7265 663d ion sche\n-000209e0: 6d65 2e68 3a32 3237 3c2f 613e 3c2f 6469 me.h:227
.
OpenSu\n-00020a90: 6264 6976 3a3a 4f50 454e 5355 4244 4956 bdiv::OPENSUBDIV\n-00020aa0: 5f56 4552 5349 4f4e 3a3a 5364 633a 3a53 _VERSION::Sdc::S\n-00020ab0: 6368 656d 653a 3a4c 6f63 616c 4d61 736b cheme::LocalMask\n-00020ac0: 3a3a 4c6f 6361 6c4d 6173 6b3c 2f61 3e3c ::LocalMask<\n-00020ad0: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
LocalMa\n-00020af0: 736b 2857 6569 6768 7420 2a76 2c20 5765 sk(Weight *v, We\n-00020b00: 6967 6874 202a 652c 2057 6569 6768 7420 ight *e, Weight \n-00020b10: 2a66 293c 2f64 6976 3e3c 6469 7620 636c *f)
D\n-00020b30: 6566 696e 6974 696f 6e3c 2f62 3e20 3c61 efinition scheme.h:215
.<\n-00020b80: 6469 7620 636c 6173 733d 2274 7463 2220 div class=\"ttc\" \n-00020b90: 6964 3d22 6161 3031 3333 375f 6874 6d6c id=\"aa01337_html\n-00020ba0: 5f61 6563 3563 3261 6266 6466 6264 6534 _aec5c2abfdfbde4\n-00020bb0: 6464 3933 3463 3036 3136 3235 3939 3437 dd934c0616259947\n-00020bc0: 3931 223e 3c64 6976 2063 6c61 7373 3d22 91\">Weight const &\n-00020c80: 616d 703b 2056 6572 7465 7857 6569 6768 amp; VertexWeigh\n-00020c90: 7428 696e 7420 696e 6465 7829 2063 6f6e t(int index) con\n-00020ca0: 7374 3c2f 6469 763e 3c64 6976 2063 6c61 st
De\n-00020cc0: 6669 6e69 7469 6f6e 3c2f 623e 203c 6120 finition scheme.h:231
.
W\n-00020e00: 6569 6768 7420 2661 6d70 3b20 4661 6365 eight & Face\n-00020e10: 5765 6967 6874 2869 6e74 2069 6e64 6578 Weight(int index\n-00020e20: 293c 2f64 6976 3e3c 6469 7620 636c 6173 )
Def\n-00020e40: 696e 6974 696f 6e3c 2f62 3e20 3c61 2068 inition \n-00020e70: 7363 6865 6d65 2e68 3a32 3337 3c2f 613e scheme.h:237\n-00020e80: 3c2f 6469 763e 3c2f 6469 763e 0a3c 6469
.
~L\n-00020f80: 6f63 616c 4d61 736b 2829 3c2f 6469 763e ocalMask()
\n-00020f90: 3c64 6976 2063 6c61 7373 3d22 7474 6465
Definition\n-00020fb0: 3c2f 623e 203c 6120 6872 6566 3d22 6130 scheme.\n-00020fe0: 683a 3231 363c 2f61 3e3c 2f64 6976 3e3c h:216
<\n-00020ff0: 2f64 6976 3e0a 3c2f 6469 763e 3c21 2d2d /div>.
.
.\n-00021040: 3c21 2d2d 2073 7461 7274 2066 6f6f 7465 .
. .
  • opensub\n-00021110: 6469 763c 2f61 3e3c 2f6c 693e 3c6c 6920 div
  • \n-00021130: 3c61 2063 6c61 7373 3d22 656c 2220 6872 s\n-00021170: 6463 3c2f 613e 3c2f 6c69 3e3c 6c69 2063 dc
  • <\n-00021190: 6120 636c 6173 733d 2265 6c22 2068 7265 a class=\"el\" hre\n-000211a0: 663d 2261 3030 3737 302e 6874 6d6c 223e f=\"a00770.html\">\n-000211b0: 7363 6865 6d65 2e68 3c2f 613e 3c2f 6c69 scheme.h.
  • Generat\n-000211e0: 6564 206f 6e20 5468 7520 4665 6220 3239 ed on Thu Feb 29\n-000211f0: 2032 3032 3420 3132 3a35 383a 3139 2066 2024 12:58:19 f\n-00021200: 6f72 204f 7065 6e53 7562 6469 7620 6279 or OpenSubdiv by\n-00021210: 203c 6120 6872 6566 3d22 6874 7470 733a \n-00021290: 312e 392e 3820 3c2f 6c69 3e0a 2020 3c2f 1.9.8
  • . .
    ...\n+000023a0: 3333 3c2f 7370 616e 3e20 3c2f 6469 763e 33
    \n+000023b0: 0a3c 6469 7620 636c 6173 733d 226c 696e ...
    \n+000024c0: 2020 3531 3c2f 613e 3c2f 7370 616e 3e3c 51<\n+000024d0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+000024e0: 6f72 6422 3e63 6c61 7373 203c 2f73 7061 ord\">class Op\n+00002520: 7469 6f6e 733c 2f61 3e20 7b3c 2f64 6976 tions {.
    52<\n+00002580: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>publ\n+000025a0: 6963 3c2f 7370 616e 3e3a 3c2f 6469 763e ic:
    \n+000025b0: 0a3c 6469 7620 636c 6173 733d 2266 6f6c .
    .
    \n+00002640: 3c61 2063 6c61 7373 3d22 6c69 6e65 2220 53 e\n+000026b0: 6e75 6d3c 2f73 7061 6e3e 203c 6120 636c num V\n+00002710: 7478 426f 756e 6461 7279 496e 7465 7270 txBoundaryInterp\n+00002720: 6f6c 6174 696f 6e3c 2f61 3e20 7b3c 2f64 olation {.
    5\n+00002780: 343c 2f73 7061 6e3e 2020 2020 2020 2020 4 \n+00002790: 3c61 2063 6c61 7373 3d22 636f 6465 2068 VTX_BOUNDARY_\n+00002810: 4e4f 4e45 3c2f 613e 203d 2030 2c20 2020 NONE = 0, \n+00002820: 2020 2020 203c 2f64 6976 3e0a 3c64 6976
    .<\n+00002860: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00002870: 6e6f 223e 3c61 2063 6c61 7373 3d22 6c69 no\"> 56<\n+000028e0: 2f61 3e3c 2f73 7061 6e3e 2020 2020 2020 /a> \n+000028f0: 2020 3c61 2063 6c61 7373 3d22 636f 6465 VTX_BOUNDAR\n+00002970: 595f 4544 4745 5f4f 4e4c 593c 2f61 3e2c Y_EDGE_ONLY,\n+00002980: 2020 2020 2020 203c 2f64 6976 3e0a 3c64
    .\n+000029a0: 3c61 2069 643d 226c 3030 3035 3722 206e 57 VTX\n+00002a60: 5f42 4f55 4e44 4152 595f 4544 4745 5f41 _BOUNDARY_EDGE_A\n+00002a70: 4e44 5f43 4f52 4e45 523c 2f61 3e20 203c ND_CORNER <\n+00002a80: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    59 };
    \n+00002b50: 0a3c 2f64 6976 3e0a 3c64 6976 2063 6c61 .
    .
    .<\n+00002ba0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00002bb0: 3e3c 6120 6964 3d22 6c30 3030 3630 2220 > 6\n+00002c30: 303c 2f61 3e3c 2f73 7061 6e3e 2020 2020 0 \n+00002c40: 3c73 7061 6e20 636c 6173 733d 226b 6579 enum FVarLinear\n+00002cc0: 496e 7465 7270 6f6c 6174 696f 6e3c 2f61 Interpolation {
    ..<\n+00002e70: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00002e80: 6e6f 223e 3c61 2063 6c61 7373 3d22 6c69 no\"> 62<\n+00002ef0: 2f61 3e3c 2f73 7061 6e3e 2020 2020 2020 /a> \n+00002f00: 2020 3c61 2063 6c61 7373 3d22 636f 6465 FVAR_LINEAR\n+00002f80: 5f43 4f52 4e45 5253 5f4f 4e4c 593c 2f61 _CORNERS_ONLY,
    .\n+00002fb0: 3c61 2069 643d 226c 3030 3036 3322 206e 6\n+00003050: 333c 2f61 3e3c 2f73 7061 6e3e 2020 2020 3 \n+00003060: 2020 2020 3c61 2063 6c61 7373 3d22 636f FVAR_LINE\n+000030e0: 4152 5f43 4f52 4e45 5253 5f50 4c55 5331 AR_CORNERS_PLUS1\n+000030f0: 3c2f 613e 2c20 2020 203c 2f64 6976 3e0a ,
    .\n+00003100: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 ..
    68 enum\n+00003690: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 Crea\n+000036f0: 7369 6e67 4d65 7468 6f64 3c2f 613e 207b singMethod {\n+00003700: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    <\n+00003750: 6120 636c 6173 733d 226c 696e 6522 2068 a class=\"line\" h\n+00003760: 7265 663d 2261 3031 3332 392e 6874 6d6c ref=\"a01329.html\n+00003770: 2361 3136 6563 3532 3264 6330 3339 3862 #a16ec522dc0398b\n+00003780: 6631 3433 3561 3931 3263 6436 3639 6666 f1435a912cd669ff\n+00003790: 6230 6131 3066 3239 3536 6462 3438 6432 b0a10f2956db48d2\n+000037a0: 3937 3534 3234 6265 3265 3532 6562 6435 975424be2e52ebd5\n+000037b0: 3434 6422 3e20 2020 3639 3c2f 613e 3c2f 44d\"> 69 \n+00003840: 4352 4541 5345 5f55 4e49 464f 524d 3c2f CREASE_UNIFORM = 0, \n+00003860: 2020 3c2f 6469 763e 0a3c 6469 7620 636c
    .
    70 \n+000038c0: 2020 2020 203c 6120 636c 6173 733d 2263 CREASE_C\n+00003940: 4841 494b 494e 3c2f 613e 2020 2020 2020 HAIKIN \n+00003950: 2020 2020 2020 2020 2020 3c2f 6469 763e
    \n+00003960: 0a3c 6469 7620 636c 6173 733d 226c 696e ...
    .
    72\n+00003b10: 3c2f 7370 616e 3e20 2020 203c 7370 616e enum TriangleSubdivi\n+00003ba0: 7369 6f6e 3c2f 613e 207b 3c2f 6469 763e sion {
    \n+00003bb0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+00003be0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d \n+00003c60: 2020 3733 3c2f 613e 3c2f 7370 616e 3e20 73 \n+00003c70: 2020 2020 2020 203c 6120 636c 6173 733d TRI_SU\n+00003cf0: 425f 4341 544d 4152 4b3c 2f61 3e20 3d20 B_CATMARK = \n+00003d00: 302c 2020 2020 2020 2020 2020 3c2f 6469 0, .
    74\n+00003d60: 3c2f 7370 616e 3e20 2020 2020 2020 203c <\n+00003d70: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n+00003d80: 5f65 6e75 6d76 616c 7565 2220 6872 6566 _enumvalue\" href\n+00003d90: 3d22 6130 3133 3239 2e68 746d 6c23 6131 =\"a01329.html#a1\n+00003da0: 3066 6538 6332 6237 3865 3563 3539 3337 0fe8c2b78e5c5937\n+00003db0: 3736 3134 3837 3661 3336 3263 3338 6261 7614876a362c38ba\n+00003dc0: 6632 3232 6561 6435 6661 3438 3735 6632 f222ead5fa4875f2\n+00003dd0: 6561 3237 3934 6332 6437 3635 6138 3764 ea2794c2d765a87d\n+00003de0: 223e 5452 495f 5355 425f 534d 4f4f 5448 \">TRI_SUB_SMOOTH\n+00003df0: 3c2f 613e 2020 2020 2020 2020 2020 2020 \n+00003e00: 2020 2020 3c2f 6469 763e 0a3c 6469 7620
    ..<\n+00003ef0: 6120 6964 3d22 6c30 3030 3736 2220 6e61 a id=\"l00076\" na\n+00003f00: 6d65 3d22 6c30 3030 3736 223e 3c2f 613e me=\"l00076\">\n+00003f10: 3c73 7061 6e20 636c 6173 733d 226c 696e 76
    .
    77public\n+00003fb0: 3a3c 2f64 6976 3e0a 3c64 6976 2063 6c61 :
    .
    \n+00004000: 2020 2037 383c 2f73 7061 6e3e 203c 2f64 78 .
    .
    79\n+000040f0: 3c2f 7370 616e 3e20 2020 203c 6120 636c Opti\n+00004150: 6f6e 733c 2f61 3e28 2920 3a20 5f76 7478 ons() : _vtx\n+00004160: 426f 756e 6449 6e74 6572 7028 3c61 2063 BoundInterp(V\n+000041e0: 5458 5f42 4f55 4e44 4152 595f 4e4f 4e45 TX_BOUNDARY_NONE\n+000041f0: 3c2f 613e 292c 3c2f 6469 763e 0a3c 6469 ),
    .<\n+00004210: 6120 6964 3d22 6c30 3030 3830 2220 6e61 a id=\"l00080\" na\n+00004220: 6d65 3d22 6c30 3030 3830 223e 3c2f 613e me=\"l00080\">\n+00004230: 3c73 7061 6e20 636c 6173 733d 226c 696e 80 \n+00004260: 205f 6676 6172 4c69 6e49 6e74 6572 7028 _fvarLinInterp(\n+00004270: 3c61 2063 6c61 7373 3d22 636f 6465 2068 FVAR_LINEAR_A\n+000042f0: 4c4c 3c2f 613e 292c 3c2f 6469 763e 0a3c LL),
    .<\n+00004300: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00004310: 3e3c 6120 6964 3d22 6c30 3030 3831 2220 > 81 \n+00004360: 2020 205f 6372 6561 7369 6e67 4d65 7468 _creasingMeth\n+00004370: 6f64 283c 6120 636c 6173 733d 2263 6f64 od(CREASE_UNI\n+000043f0: 464f 524d 3c2f 613e 292c 3c2f 6469 763e FORM),
    \n+00004400: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+00004430: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 82 \n+00004460: 2020 2020 205f 7472 6961 6e67 6c65 5375 _triangleSu\n+00004470: 6228 3c61 2063 6c61 7373 3d22 636f 6465 b(TRI_SUB_CAT\n+000044f0: 4d41 524b 3c2f 613e 2920 7b20 7d3c 2f64 MARK) { }.
    .
    83 \n+00004560: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+000045b0: 2020 3834 3c2f 7370 616e 3e20 2020 203c 84 <\n+000045c0: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n+000045d0: 656e 7422 3e2f 2f3c 2f73 7061 6e3e 3c2f ent\">//.
    \n+00004630: 3835 3c2f 7370 616e 3e20 2020 203c 7370 85 // Trivial g\n+00004660: 6574 2f73 6574 206d 6574 686f 6473 3a3c et/set methods:<\n+00004670: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
    .<\n+00004690: 6120 6964 3d22 6c30 3030 3836 2220 6e61 a id=\"l00086\" na\n+000046a0: 6d65 3d22 6c30 3030 3836 223e 3c2f 613e me=\"l00086\">\n+000046b0: 3c73 7061 6e20 636c 6173 733d 226c 696e 86 //
    .
    87 \n+00004750: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    <\n+000047a0: 6120 636c 6173 733d 226c 696e 6522 2068 a class=\"line\" h\n+000047b0: 7265 663d 2261 3031 3332 392e 6874 6d6c ref=\"a01329.html\n+000047c0: 2361 3539 3033 3338 6565 3862 3534 3433 #a590338ee8b5443\n+000047d0: 3036 6239 3730 6130 6331 3434 3563 6430 06b970a0c1445cd0\n+000047e0: 3166 223e 2020 2038 393c 2f61 3e3c 2f73 1f\"> 89 VtxB\n+00004850: 6f75 6e64 6172 7949 6e74 6572 706f 6c61 oundaryInterpola\n+00004860: 7469 6f6e 3c2f 613e 203c 6120 636c 6173 tion GetVtx\n+000048c0: 426f 756e 6461 7279 496e 7465 7270 6f6c BoundaryInterpol\n+000048d0: 6174 696f 6e3c 2f61 3e28 293c 7370 616e ation() const {\n+00004900: 203c 7370 616e 2063 6c61 7373 3d22 6b65 retur\n+00004920: 6e3c 2f73 7061 6e3e 2028 3c61 2063 6c61 n (Vt\n+00004980: 7842 6f75 6e64 6172 7949 6e74 6572 706f xBoundaryInterpo\n+00004990: 6c61 7469 6f6e 3c2f 613e 2920 5f76 7478 lation) _vtx\n+000049a0: 426f 756e 6449 6e74 6572 703b 207d 3c2f BoundInterp; }.
    \n+00004a00: 3930 3c2f 7370 616e 3e20 3c2f 6469 763e 90
    \n+00004a10: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+00004a40: 3c2f 613e 3c73 7061 6e20 636c 6173 733d \n+00004aa0: 2039 323c 2f61 3e3c 2f73 7061 6e3e 2020 92 \n+00004ab0: 2020 3c73 7061 6e20 636c 6173 733d 226b void\n+00004ad0: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 SetVtxB\n+00004b30: 6f75 6e64 6172 7949 6e74 6572 706f 6c61 oundaryInterpola\n+00004b40: 7469 6f6e 3c2f 613e 283c 6120 636c 6173 tion(Vtx\n+00004ba0: 426f 756e 6461 7279 496e 7465 7270 6f6c BoundaryInterpol\n+00004bb0: 6174 696f 6e3c 2f61 3e20 6229 207b 205f ation b) { _\n+00004bc0: 7674 7842 6f75 6e64 496e 7465 7270 203d vtxBoundInterp =\n+00004bd0: 2028 456e 756d 496e 7454 7970 6529 2062 (EnumIntType) b\n+00004be0: 3b20 7d3c 2f64 6976 3e0a 3c64 6976 2063 ; }
    .
    93 <\n+00004c40: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>..\n+00004ea0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n+00004f30: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00004f40: 6e6f 223e 3c61 2063 6c61 7373 3d22 6c69 no\"> 98 void SetFVarLinea\n+00005020: 7249 6e74 6572 706f 6c61 7469 6f6e 3c2f rInterpolation(FVarLinea\n+00005090: 7249 6e74 6572 706f 6c61 7469 6f6e 3c2f rInterpolation b) { _fvarLin\n+000050b0: 496e 7465 7270 203d 2028 456e 756d 496e Interp = (EnumIn\n+000050c0: 7454 7970 6529 2062 3b20 7d3c 2f64 6976 tType) b; }.
    99<\n+00005120: 2f73 7061 6e3e 203c 2f64 6976 3e0a 3c64 /span>
    .\n+00005140: 3c61 2069 643d 226c 3030 3130 3122 206e 101\n+000051c0: 3c2f 613e 3c2f 7370 616e 3e20 2020 203c <\n+000051d0: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n+000051e0: 5f65 6e75 6d65 7261 7469 6f6e 2220 6872 _enumeration\" hr\n+000051f0: 6566 3d22 6130 3133 3239 2e68 746d 6c23 ef=\"a01329.html#\n+00005200: 6131 3665 6335 3232 6463 3033 3938 6266 a16ec522dc0398bf\n+00005210: 3134 3335 6139 3132 6364 3636 3966 6662 1435a912cd669ffb\n+00005220: 3022 3e43 7265 6173 696e 674d 6574 686f 0\">CreasingMetho\n+00005230: 643c 2f61 3e20 3c61 2063 6c61 7373 3d22 d GetCreasi\n+00005290: 6e67 4d65 7468 6f64 3c2f 613e 2829 3c73 ngMethod() const { re\n+000052e0: 7475 726e 3c2f 7370 616e 3e20 283c 6120 turn (CreasingMethod<\n+00005350: 2f61 3e29 205f 6372 6561 7369 6e67 4d65 /a>) _creasingMe\n+00005360: 7468 6f64 3b20 7d3c 2f64 6976 3e0a 3c64 thod; }
    .\n+00005380: 3c61 2069 643d 226c 3030 3130 3222 206e 102
    .
    104\n+00005460: 3c2f 7370 616e 3e20 2020 203c 7370 616e void\n+00005490: 203c 6120 636c 6173 733d 2263 6f64 6520 SetCreasingMet\n+000054f0: 686f 643c 2f61 3e28 3c61 2063 6c61 7373 hod(Crea\n+00005550: 7369 6e67 4d65 7468 6f64 3c2f 613e 2063 singMethod c\n+00005560: 2920 7b20 5f63 7265 6173 696e 674d 6574 ) { _creasingMet\n+00005570: 686f 6420 3d20 2845 6e75 6d49 6e74 5479 hod = (EnumIntTy\n+00005580: 7065 2920 633b 207d 3c2f 6469 763e 0a3c pe) c; }
    .<\n+00005590: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+000055a0: 3e3c 6120 6964 3d22 6c30 3031 3035 2220 > 105
    ...
    112<\n+00005b10: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+00005b20: 6f72 6422 3e70 7269 7661 7465 3c2f 7370 ord\">private:
    .
    113 \n+00005b90: 2020 203c 7370 616e 2063 6c61 7373 3d22 // Use\n+00005bb0: 2061 2073 6d61 6c6c 2069 6e74 6567 6572 a small integer\n+00005bc0: 2074 7970 6520 746f 2070 6163 6b20 7468 type to pack th\n+00005bd0: 6573 6520 7261 7468 6572 2074 6861 6e20 ese rather than \n+00005be0: 6269 7466 6965 6c64 733a 3c2f 7370 616e bitfields:
    .
    \n+00005c40: 2020 3131 343c 2f73 7061 6e3e 2020 2020 114 \n+00005c50: 3c73 7061 6e20 636c 6173 733d 226b 6579 typedef u\n+00005c90: 6e73 6967 6e65 643c 2f73 7061 6e3e 203c nsigned <\n+00005ca0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+00005cb0: 6f72 6474 7970 6522 3e63 6861 723c 2f73 ordtype\">char EnumIntType\n+00005cd0: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
    .
    \n+00005d20: 2020 3131 353c 2f73 7061 6e3e 203c 2f64 115 .
    11\n+00005d80: 363c 2f73 7061 6e3e 2020 2020 456e 756d 6 Enum\n+00005d90: 496e 7454 7970 6520 5f76 7478 426f 756e IntType _vtxBoun\n+00005da0: 6449 6e74 6572 703b 3c2f 6469 763e 0a3c dInterp;
    .<\n+00005db0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00005dc0: 3e3c 6120 6964 3d22 6c30 3031 3137 2220 > 117 EnumIntTy\n+00005e10: 7065 205f 6676 6172 4c69 6e49 6e74 6572 pe _fvarLinInter\n+00005e20: 703b 3c2f 6469 763e 0a3c 6469 7620 636c p;
    .
    118 \n+00005e80: 2045 6e75 6d49 6e74 5479 7065 205f 6372 EnumIntType _cr\n+00005e90: 6561 7369 6e67 4d65 7468 6f64 3b3c 2f64 easingMethod;.
    11\n+00005ef0: 393c 2f73 7061 6e3e 2020 2020 456e 756d 9 Enum\n+00005f00: 496e 7454 7970 6520 5f74 7269 616e 676c IntType _triangl\n+00005f10: 6553 7562 3b3c 2f64 6976 3e0a 3c64 6976 eSub;
    .<\n+00005f50: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00005f60: 6e6f 223e 2020 3132 303c 2f73 7061 6e3e no\"> 120\n+00005f70: 7d3b 3c2f 6469 763e 0a3c 2f64 6976 3e0a };
    .
    .\n+00005f80: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n+00006010: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00006020: 6e6f 223e 2020 3132 323c 2f73 7061 6e3e no\"> 122\n+00006030: 7d20 3c73 7061 6e20 636c 6173 733d 2263 } // end n\n+00006050: 616d 6573 7061 6365 2073 6463 3c2f 7370 amespace sdc
    .
    123 <\n+000060c0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+00006110: 3132 343c 2f73 7061 6e3e 7d20 3c73 7061 124} // end namespa\n+00006140: 6365 204f 5045 4e53 5542 4449 565f 5645 ce OPENSUBDIV_VE\n+00006150: 5253 494f 4e3c 2f73 7061 6e3e 3c2f 6469 RSION.
    125\n+000061b0: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 usi\n+000061d0: 6e67 206e 616d 6573 7061 6365 203c 2f73 ng namespace OPENSUBDIV_V\n+000061f0: 4552 5349 4f4e 3b3c 2f64 6976 3e0a 3c64 ERSION;
    .\n+00006210: 3c61 2069 643d 226c 3030 3132 3622 206e 126} // end\n+00006270: 206e 616d 6573 7061 6365 204f 7065 6e53 namespace OpenS\n+00006280: 7562 6469 763c 2f73 7061 6e3e 3c2f 6469 ubdiv.
    127\n+000062e0: 3c2f 7370 616e 3e20 3c2f 6469 763e 0a3c
    .<\n+000062f0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00006300: 3e3c 6120 6964 3d22 6c30 3031 3238 2220 > 128#e\n+00006360: 6e64 6966 203c 2f73 7061 6e3e 3c73 7061 ndif /* OPENSUBDIV3\n+00006390: 5f53 4443 5f4f 5054 494f 4e53 5f48 202a _SDC_OPTIONS_H *\n+000063a0: 2f3c 2f73 7061 6e3e 3c73 7061 6e20 636c /
    \n+000063d0: 0a3c 6469 7620 636c 6173 733d 2274 7463 .
    Op\n+00006420: 656e 5375 6264 6976 3c2f 613e 3c2f 6469 enSubdiv
    Definiti\n+00006450: 6f6e 3c2f 623e 203c 6120 6872 6566 3d22 on limit\n+00006480: 732e 683a 3332 3c2f 613e 3c2f 6469 763e s.h:32
    \n+00006490: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    OpenSubdiv::\n+000064f0: 4f50 454e 5355 4244 4956 5f56 4552 5349 OPENSUBDIV_VERSI\n+00006500: 4f4e 3a3a 5364 633a 3a4f 7074 696f 6e73 ON::Sdc::Options\n+00006510: 3c2f 613e 3c2f 6469 763e 3c64 6976 2063
    All\n+00006530: 2073 7570 706f 7274 6564 206f 7074 696f supported optio\n+00006540: 6e73 2061 7070 6c79 696e 6720 746f 2073 ns applying to s\n+00006550: 7562 6469 7669 7369 6f6e 2073 6368 656d ubdivision schem\n+00006560: 652e 3c2f 6469 763e 3c64 6976 2063 6c61 e.
    De\n+00006580: 6669 6e69 7469 6f6e 3c2f 623e 203c 6120 finition options.h:51
    .
    Tr\n+000066c0: 6961 6e67 6c65 5375 6264 6976 6973 696f iangleSubdivisio\n+000066d0: 6e3c 2f64 6976 3e3c 6469 7620 636c 6173 n
    Def\n+000066f0: 696e 6974 696f 6e3c 2f62 3e20 3c61 2068 inition \n+00006720: 6f70 7469 6f6e 732e 683a 3732 3c2f 613e options.h:72\n+00006730: 3c2f 6469 763e 3c2f 6469 763e 0a3c 6469
    .
    @ TRI\n+00006870: 5f53 5542 5f43 4154 4d41 524b 3c2f 6469 _SUB_CATMARK
    Catmark wei\n+000068a0: 6768 7473 2028 4361 746d 6172 6b20 7363 ghts (Catmark sc\n+000068b0: 6865 6d65 206f 6e6c 7929 3c2f 6469 763e heme only)
    \n+000068c0: 3c64 6976 2063 6c61 7373 3d22 7474 6465
    <\n+00006920: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.<\n+00006a40: 6469 7620 636c 6173 733d 2274 7464 6563 div class=\"ttdec\n+00006a50: 6922 3e40 2054 5249 5f53 5542 5f53 4d4f i\">@ TRI_SUB_SMO\n+00006a60: 4f54 483c 2f64 6976 3e3c 6469 7620 636c OTH
    &quo\n+00006a80: 743b 736d 6f6f 7468 2074 7269 616e 676c t;smooth triangl\n+00006a90: 6526 7175 6f74 3b20 7765 6967 6874 7320 e" weights \n+00006aa0: 2843 6174 6d61 726b 2073 6368 656d 6520 (Catmark scheme \n+00006ab0: 6f6e 6c79 293c 2f64 6976 3e3c 6469 7620 only)
    Definition \n+00006ae0: 3c61 2068 7265 663d 2261 3030 3737 305f options.h:74\n+00006b10: 3c2f 613e 3c2f 6469 763e 3c2f 6469 763e
    \n+00006b20: 0a3c 6469 7620 636c 6173 733d 2274 7463 .
    Catm\n+00006de0: 6172 6b20 7275 6c65 2e3c 2f64 6976 3e3c ark rule.
    <\n+00006df0: 6469 7620 636c 6173 733d 2274 7464 6566 div class=\"ttdef\n+00006e00: 223e 3c62 3e44 6566 696e 6974 696f 6e3c \">Definition<\n+00006e10: 2f62 3e20 3c61 2068 7265 663d 2261 3030 /b> options.\n+00006e40: 683a 3639 3c2f 613e 3c2f 6469 763e 3c2f h:69
    .
    <\n+00006ed0: 6120 6872 6566 3d22 6130 3133 3239 2e68 a href=\"a01329.h\n+00006ee0: 746d 6c23 6131 3665 6335 3232 6463 3033 tml#a16ec522dc03\n+00006ef0: 3938 6266 3134 3335 6139 3132 6364 3636 98bf1435a912cd66\n+00006f00: 3966 6662 3061 3165 3331 6135 3833 3636 9ffb0a1e31a58366\n+00006f10: 3364 6436 3561 3762 3266 6566 6665 6232 3dd65a7b2feffeb2\n+00006f20: 3432 3638 6235 223e 4f70 656e 5375 6264 4268b5\">OpenSubd\n+00006f30: 6976 3a3a 4f50 454e 5355 4244 4956 5f56 iv::OPENSUBDIV_V\n+00006f40: 4552 5349 4f4e 3a3a 5364 633a 3a4f 7074 ERSION::Sdc::Opt\n+00006f50: 696f 6e73 3a3a 4352 4541 5345 5f43 4841 ions::CREASE_CHA\n+00006f60: 494b 494e 3c2f 613e 3c2f 6469 763e 3c64 IKIN
    @ CREASE_CHAIK\n+00006f90: 494e 3c2f 6469 763e 3c64 6976 2063 6c61 IN
    Chaik\n+00006fb0: 696e 2072 756c 652e 3c2f 6469 763e 3c64 in rule.
    Definition options.h\n+00007010: 3a37 303c 2f61 3e3c 2f64 6976 3e3c 2f64 :70
    .
    OpenSubdiv:\n+000070c0: 3a4f 5045 4e53 5542 4449 565f 5645 5253 :OPENSUBDIV_VERS\n+000070d0: 494f 4e3a 3a53 6463 3a3a 4f70 7469 6f6e ION::Sdc::Option\n+000070e0: 733a 3a47 6574 5472 6961 6e67 6c65 5375 s::GetTriangleSu\n+000070f0: 6264 6976 6973 696f 6e3c 2f61 3e3c 2f64 bdivision
    TriangleS\n+00007120: 7562 6469 7669 7369 6f6e 2047 6574 5472 ubdivision GetTr\n+00007130: 6961 6e67 6c65 5375 6264 6976 6973 696f iangleSubdivisio\n+00007140: 6e28 2920 636f 6e73 743c 2f64 6976 3e3c n() const
    <\n+00007150: 6469 7620 636c 6173 733d 2274 7464 6f63 div class=\"ttdoc\n+00007160: 223e 4765 7420 7472 6961 6e67 6c65 2073 \">Get triangle s\n+00007170: 7562 6469 7669 7369 6f6e 2077 6569 6768 ubdivision weigh\n+00007180: 7473 2072 756c 6520 2843 6174 6d61 726b ts rule (Catmark\n+00007190: 2073 6368 656d 6520 6f6e 6c79 2021 293c scheme only !)<\n+000071a0: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
    Defin\n+000071c0: 6974 696f 6e3c 2f62 3e20 3c61 2068 7265 ition op\n+000071f0: 7469 6f6e 732e 683a 3130 373c 2f61 3e3c tions.h:107<\n+00007200: 2f64 6976 3e3c 2f64 6976 3e0a 3c64 6976 /div>
    .
    Creasi\n+00007300: 6e67 4d65 7468 6f64 2047 6574 4372 6561 ngMethod GetCrea\n+00007310: 7369 6e67 4d65 7468 6f64 2829 2063 6f6e singMethod() con\n+00007320: 7374 3c2f 6469 763e 3c64 6976 2063 6c61 st
    Get e\n+00007340: 6467 6520 6372 6561 7365 2072 756c 652e dge crease rule.\n+00007350: 3c2f 6469 763e 3c64 6976 2063 6c61 7373
    Defi\n+00007370: 6e69 7469 6f6e 3c2f 623e 203c 6120 6872 nition o\n+000073a0: 7074 696f 6e73 2e68 3a31 3031 3c2f 613e ptions.h:101\n+000073b0: 3c2f 6469 763e 3c2f 6469 763e 0a3c 6469
    .Options()
    \n+000074b0: 3c64 6976 2063 6c61 7373 3d22 7474 6465
    Definition\n+000074d0: 3c2f 623e 203c 6120 6872 6566 3d22 6130 options\n+00007500: 2e68 3a37 393c 2f61 3e3c 2f64 6976 3e3c .h:79
    <\n+00007510: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    <\n+00007570: 6120 6872 6566 3d22 6130 3133 3239 2e68 a href=\"a01329.h\n+00007580: 746d 6c23 6132 6233 3335 6562 3232 3731 tml#a2b335eb2271\n+00007590: 3934 6234 6663 3666 6365 6337 6633 6334 94b4fc6fcec7f3c4\n+000075a0: 6232 3563 6522 3e4f 7065 6e53 7562 6469 b25ce\">OpenSubdi\n+000075b0: 763a 3a4f 5045 4e53 5542 4449 565f 5645 v::OPENSUBDIV_VE\n+000075c0: 5253 494f 4e3a 3a53 6463 3a3a 4f70 7469 RSION::Sdc::Opti\n+000075d0: 6f6e 733a 3a53 6574 4656 6172 4c69 6e65 ons::SetFVarLine\n+000075e0: 6172 496e 7465 7270 6f6c 6174 696f 6e3c arInterpolation<\n+000075f0: 2f61 3e3c 2f64 6976 3e3c 6469 7620 636c /a>
    voi\n+00007610: 6420 5365 7446 5661 724c 696e 6561 7249 d SetFVarLinearI\n+00007620: 6e74 6572 706f 6c61 7469 6f6e 2846 5661 nterpolation(FVa\n+00007630: 724c 696e 6561 7249 6e74 6572 706f 6c61 rLinearInterpola\n+00007640: 7469 6f6e 2062 293c 2f64 6976 3e3c 6469 tion b)
    \n+00007660: 5365 7420 6661 6365 2d76 6172 7969 6e67 Set face-varying\n+00007670: 2069 6e74 6572 706f 6c61 7469 6f6e 2072 interpolation r\n+00007680: 756c 652e 3c2f 6469 763e 3c64 6976 2063 ule.
    \n+000076a0: 4465 6669 6e69 7469 6f6e 3c2f 623e 203c Definition <\n+000076b0: 6120 6872 6566 3d22 6130 3037 3730 5f73 a href=\"a00770_s\n+000076c0: 6f75 7263 652e 6874 6d6c 236c 3030 3039 ource.html#l0009\n+000076d0: 3822 3e6f 7074 696f 6e73 2e68 3a39 383c 8\">options.h:98<\n+000076e0: 2f61 3e3c 2f64 6976 3e3c 2f64 6976 3e0a /a>
    .\n+000076f0: 3c64 6976 2063 6c61 7373 3d22 7474 6322
    <\n+000077d0: 6469 7620 636c 6173 733d 2274 7464 6563 div class=\"ttdec\n+000077e0: 6922 3e76 6f69 6420 5365 7454 7269 616e i\">void SetTrian\n+000077f0: 676c 6553 7562 6469 7669 7369 6f6e 2854 gleSubdivision(T\n+00007800: 7269 616e 676c 6553 7562 6469 7669 7369 riangleSubdivisi\n+00007810: 6f6e 2074 293c 2f64 6976 3e3c 6469 7620 on t)
    Se\n+00007830: 7420 7472 6961 6e67 6c65 2073 7562 6469 t triangle subdi\n+00007840: 7669 7369 6f6e 2077 6569 6768 7473 2072 vision weights r\n+00007850: 756c 6520 2843 6174 6d61 726b 2073 6368 ule (Catmark sch\n+00007860: 656d 6520 6f6e 6c79 2021 293c 2f64 6976 eme only !)
    Definitio\n+00007890: 6e3c 2f62 3e20 3c61 2068 7265 663d 2261 n option\n+000078c0: 732e 683a 3131 303c 2f61 3e3c 2f64 6976 s.h:110
    .\n+000079d0: 5674 7842 6f75 6e64 6172 7949 6e74 6572 VtxBoundaryInter\n+000079e0: 706f 6c61 7469 6f6e 2047 6574 5674 7842 polation GetVtxB\n+000079f0: 6f75 6e64 6172 7949 6e74 6572 706f 6c61 oundaryInterpola\n+00007a00: 7469 6f6e 2829 2063 6f6e 7374 3c2f 6469 tion() const.<\n+00007c30: 6469 7620 636c 6173 733d 2274 7463 2220 div class=\"ttc\" \n+00007c40: 6964 3d22 6161 3031 3332 395f 6874 6d6c id=\"aa01329_html\n+00007c50: 5f61 3562 3837 6561 6361 3663 6130 3833 _a5b87eaca6ca083\n+00007c60: 3334 3632 6339 6434 6164 3834 6466 3136 3462c9d4ad84df16\n+00007c70: 3762 6132 6430 6564 6234 6464 3130 6533 7ba2d0edb4dd10e3\n+00007c80: 3535 6638 3038 3962 3461 3761 6231 6431 55f8089b4a7ab1d1\n+00007c90: 6437 3222 3e3c 6469 7620 636c 6173 733d d72\">
    OpenSubdiv::OP\n+00007d10: 454e 5355 4244 4956 5f56 4552 5349 4f4e ENSUBDIV_VERSION\n+00007d20: 3a3a 5364 633a 3a4f 7074 696f 6e73 3a3a ::Sdc::Options::\n+00007d30: 4656 4152 5f4c 494e 4541 525f 434f 524e FVAR_LINEAR_CORN\n+00007d40: 4552 535f 4f4e 4c59 3c2f 613e 3c2f 6469 ERS_ONLY
    @ FVAR_LIN\n+00007d70: 4541 525f 434f 524e 4552 535f 4f4e 4c59 EAR_CORNERS_ONLY\n+00007d80: 3c2f 6469 763e 3c64 6976 2063 6c61 7373
    sharpen\n+00007da0: 2063 6f72 6e65 7273 206f 6e6c 793c 2f64 corners only
    Definit\n+00007dd0: 696f 6e3c 2f62 3e20 3c61 2068 7265 663d ion opti\n+00007e00: 6f6e 732e 683a 3632 3c2f 613e 3c2f 6469 ons.h:62
    .
    @ \n+00007f50: 4656 4152 5f4c 494e 4541 525f 424f 554e FVAR_LINEAR_BOUN\n+00007f60: 4441 5249 4553 3c2f 6469 763e 3c64 6976 DARIES
    s\n+00007f80: 6861 7270 656e 2061 6c6c 2062 6f75 6e64 harpen all bound\n+00007f90: 6172 6965 7320 2826 7175 6f74 3b61 6c77 aries ("alw\n+00007fa0: 6179 7320 7368 6172 7026 7175 6f74 3b29 ays sharp")\n+00007fb0: 3c2f 6469 763e 3c64 6976 2063 6c61 7373
    Defi\n+00007fd0: 6e69 7469 6f6e 3c2f 623e 203c 6120 6872 nition o\n+00008000: 7074 696f 6e73 2e68 3a36 353c 2f61 3e3c ptions.h:65<\n+00008010: 2f64 6976 3e3c 2f64 6976 3e0a 3c64 6976 /div>
    .\n+00008140: 3c64 6976 2063 6c61 7373 3d22 7474 6465
    @ FVAR_LINEA\n+00008160: 525f 434f 524e 4552 535f 504c 5553 323c R_CORNERS_PLUS2<\n+00008170: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
    ("e\n+00008190: 6467 6520 616e 6420 636f 726e 6572 202b dge and corner +\n+000081a0: 2070 726f 7061 6761 7465 2063 6f72 6e65 propagate corne\n+000081b0: 7226 7175 6f74 3b29 3c2f 6469 763e 3c64 r")
    Definition options.h\n+00008210: 3a36 343c 2f61 3e3c 2f64 6976 3e3c 2f64 :64
    .
    OpenSubdi\n+00008300: 763a 3a4f 5045 4e53 5542 4449 565f 5645 v::OPENSUBDIV_VE\n+00008310: 5253 494f 4e3a 3a53 6463 3a3a 4f70 7469 RSION::Sdc::Opti\n+00008320: 6f6e 733a 3a46 5641 525f 4c49 4e45 4152 ons::FVAR_LINEAR\n+00008330: 5f43 4f52 4e45 5253 5f50 4c55 5331 3c2f _CORNERS_PLUS1
    @ FV\n+00008360: 4152 5f4c 494e 4541 525f 434f 524e 4552 AR_LINEAR_CORNER\n+00008370: 535f 504c 5553 313c 2f64 6976 3e3c 6469 S_PLUS1
    \n+00008390: 2826 7175 6f74 3b65 6467 6520 636f 726e ("edge corn\n+000083a0: 6572 2671 756f 743b 293c 2f64 6976 3e3c er")
    <\n+000083b0: 6469 7620 636c 6173 733d 2274 7464 6566 div class=\"ttdef\n+000083c0: 223e 3c62 3e44 6566 696e 6974 696f 6e3c \">Definition<\n+000083d0: 2f62 3e20 3c61 2068 7265 663d 2261 3030 /b> options.\n+00008400: 683a 3633 3c2f 613e 3c2f 6469 763e 3c2f h:63
    .
    <\n+00008490: 6120 6872 6566 3d22 6130 3133 3239 2e68 a href=\"a01329.h\n+000084a0: 746d 6c23 6135 6238 3765 6163 6136 6361 tml#a5b87eaca6ca\n+000084b0: 3038 3333 3436 3263 3964 3461 6438 3464 0833462c9d4ad84d\n+000084c0: 6631 3637 6261 3864 3464 6630 3833 3130 f167ba8d4df08310\n+000084d0: 3439 3733 6661 6431 3437 3931 3039 3938 4973fad147910998\n+000084e0: 3865 3033 3837 223e 4f70 656e 5375 6264 8e0387\">OpenSubd\n+000084f0: 6976 3a3a 4f50 454e 5355 4244 4956 5f56 iv::OPENSUBDIV_V\n+00008500: 4552 5349 4f4e 3a3a 5364 633a 3a4f 7074 ERSION::Sdc::Opt\n+00008510: 696f 6e73 3a3a 4656 4152 5f4c 494e 4541 ions::FVAR_LINEA\n+00008520: 525f 414c 4c3c 2f61 3e3c 2f64 6976 3e3c R_ALL
    <\n+00008530: 6469 7620 636c 6173 733d 2274 7464 6563 div class=\"ttdec\n+00008540: 6922 3e40 2046 5641 525f 4c49 4e45 4152 i\">@ FVAR_LINEAR\n+00008550: 5f41 4c4c 3c2f 6469 763e 3c64 6976 2063 _ALL
    bil\n+00008570: 696e 6561 7220 696e 7465 7270 6f6c 6174 inear interpolat\n+00008580: 696f 6e20 2826 7175 6f74 3b62 696c 696e ion ("bilin\n+00008590: 6561 7226 7175 6f74 3b29 3c2f 6469 763e ear")
    \n+000085a0: 3c64 6976 2063 6c61 7373 3d22 7474 6465
    Definition\n+000085c0: 3c2f 623e 203c 6120 6872 6566 3d22 6130 options\n+000085f0: 2e68 3a36 363c 2f61 3e3c 2f64 6976 3e3c .h:66
    <\n+00008600: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+00008680: 3c61 2068 7265 663d 2261 3031 3332 392e OpenSub\n+000086e0: 6469 763a 3a4f 5045 4e53 5542 4449 565f div::OPENSUBDIV_\n+000086f0: 5645 5253 494f 4e3a 3a53 6463 3a3a 4f70 VERSION::Sdc::Op\n+00008700: 7469 6f6e 733a 3a46 5641 525f 4c49 4e45 tions::FVAR_LINE\n+00008710: 4152 5f4e 4f4e 453c 2f61 3e3c 2f64 6976 AR_NONE
    @ FVAR_LINE\n+00008740: 4152 5f4e 4f4e 453c 2f64 6976 3e3c 6469 AR_NONE
    \n+00008760: 736d 6f6f 7468 2065 7665 7279 7768 6572 smooth everywher\n+00008770: 6520 2826 7175 6f74 3b65 6467 6520 6f6e e ("edge on\n+00008780: 6c79 2671 756f 743b 293c 2f64 6976 3e3c ly")
    <\n+00008790: 6469 7620 636c 6173 733d 2274 7464 6566 div class=\"ttdef\n+000087a0: 223e 3c62 3e44 6566 696e 6974 696f 6e3c \">Definition<\n+000087b0: 2f62 3e20 3c61 2068 7265 663d 2261 3030 /b> options.\n+000087e0: 683a 3631 3c2f 613e 3c2f 6469 763e 3c2f h:61
    .
    OpenSubdiv\n+00008890: 3a3a 4f50 454e 5355 4244 4956 5f56 4552 ::OPENSUBDIV_VER\n+000088a0: 5349 4f4e 3a3a 5364 633a 3a4f 7074 696f SION::Sdc::Optio\n+000088b0: 6e73 3a3a 5365 7456 7478 426f 756e 6461 ns::SetVtxBounda\n+000088c0: 7279 496e 7465 7270 6f6c 6174 696f 6e3c ryInterpolation<\n+000088d0: 2f61 3e3c 2f64 6976 3e3c 6469 7620 636c /a>
    voi\n+000088f0: 6420 5365 7456 7478 426f 756e 6461 7279 d SetVtxBoundary\n+00008900: 496e 7465 7270 6f6c 6174 696f 6e28 5674 Interpolation(Vt\n+00008910: 7842 6f75 6e64 6172 7949 6e74 6572 706f xBoundaryInterpo\n+00008920: 6c61 7469 6f6e 2062 293c 2f64 6976 3e3c lation b)
    <\n+00008930: 6469 7620 636c 6173 733d 2274 7464 6f63 div class=\"ttdoc\n+00008940: 223e 5365 7420 7665 7274 6578 2062 6f75 \">Set vertex bou\n+00008950: 6e64 6172 7920 696e 7465 7270 6f6c 6174 ndary interpolat\n+00008960: 696f 6e20 7275 6c65 2e3c 2f64 6976 3e3c ion rule.
    <\n+00008970: 6469 7620 636c 6173 733d 2274 7464 6566 div class=\"ttdef\n+00008980: 223e 3c62 3e44 6566 696e 6974 696f 6e3c \">Definition<\n+00008990: 2f62 3e20 3c61 2068 7265 663d 2261 3030 /b> options.\n+000089c0: 683a 3932 3c2f 613e 3c2f 6469 763e 3c2f h:92
    .
    OpenSubdiv\n+00008a70: 3a3a 4f50 454e 5355 4244 4956 5f56 4552 ::OPENSUBDIV_VER\n+00008a80: 5349 4f4e 3a3a 5364 633a 3a4f 7074 696f SION::Sdc::Optio\n+00008a90: 6e73 3a3a 4765 7446 5661 724c 696e 6561 ns::GetFVarLinea\n+00008aa0: 7249 6e74 6572 706f 6c61 7469 6f6e 3c2f rInterpolation
    FVar\n+00008ad0: 4c69 6e65 6172 496e 7465 7270 6f6c 6174 LinearInterpolat\n+00008ae0: 696f 6e20 4765 7446 5661 724c 696e 6561 ion GetFVarLinea\n+00008af0: 7249 6e74 6572 706f 6c61 7469 6f6e 2829 rInterpolation()\n+00008b00: 2063 6f6e 7374 3c2f 6469 763e 3c64 6976 const
    G\n+00008b20: 6574 2066 6163 652d 7661 7279 696e 6720 et face-varying \n+00008b30: 696e 7465 7270 6f6c 6174 696f 6e20 7275 interpolation ru\n+00008b40: 6c65 2e3c 2f64 6976 3e3c 6469 7620 636c le.
    D\n+00008b60: 6566 696e 6974 696f 6e3c 2f62 3e20 3c61 efinition options.h:95
    .<\n+00008bb0: 6469 7620 636c 6173 733d 2274 7463 2220 div class=\"ttc\" \n+00008bc0: 6964 3d22 6161 3031 3332 395f 6874 6d6c id=\"aa01329_html\n+00008bd0: 5f61 6362 6637 3866 3161 3661 6266 6338 _acbf78f1a6abfc8\n+00008be0: 6462 3038 3065 6637 6662 3363 3366 3431 db080ef7fb3c3f41\n+00008bf0: 3765 223e 3c64 6976 2063 6c61 7373 3d22 7e\">\n+00008c90: 3c64 6976 2063 6c61 7373 3d22 7474 6465
    VtxBoundaryI\n+00008cb0: 6e74 6572 706f 6c61 7469 6f6e 3c2f 6469 nterpolation
    Definiti\n+00008ce0: 6f6e 3c2f 623e 203c 6120 6872 6566 3d22 on optio\n+00008d10: 6e73 2e68 3a35 333c 2f61 3e3c 2f64 6976 ns.h:53
    .
    OpenS\n+00008e00: 7562 6469 763a 3a4f 5045 4e53 5542 4449 ubdiv::OPENSUBDI\n+00008e10: 565f 5645 5253 494f 4e3a 3a53 6463 3a3a V_VERSION::Sdc::\n+00008e20: 4f70 7469 6f6e 733a 3a56 5458 5f42 4f55 Options::VTX_BOU\n+00008e30: 4e44 4152 595f 4e4f 4e45 3c2f 613e 3c2f NDARY_NONE
    @ VTX_BO\n+00008e60: 554e 4441 5259 5f4e 4f4e 453c 2f64 6976 UNDARY_NONE
    Definitio\n+00008e90: 6e3c 2f62 3e20 3c61 2068 7265 663d 2261 n option\n+00008ec0: 732e 683a 3534 3c2f 613e 3c2f 6469 763e s.h:54
    \n+00008ed0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .\n+00009070: 3c64 6976 2063 6c61 7373 3d22 7474 6465 <\n+000090d0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.@ VTX_BOUNDARY_\n+00009220: 4544 4745 5f41 4e44 5f43 4f52 4e45 523c EDGE_AND_CORNER<\n+00009230: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
    Defin\n+00009250: 6974 696f 6e3c 2f62 3e20 3c61 2068 7265 ition op\n+00009280: 7469 6f6e 732e 683a 3537 3c2f 613e 3c2f tions.h:57
    .
    \n+000092e0: 3c64 6976 2063 6c61 7373 3d22 7474 6e61
    Open\n+00009330: 5375 6264 6976 3a3a 4f50 454e 5355 4244 Subdiv::OPENSUBD\n+00009340: 4956 5f56 4552 5349 4f4e 3a3a 5364 633a IV_VERSION::Sdc:\n+00009350: 3a4f 7074 696f 6e73 3a3a 5365 7443 7265 :Options::SetCre\n+00009360: 6173 696e 674d 6574 686f 643c 2f61 3e3c asingMethod<\n+00009370: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
    void Se\n+00009390: 7443 7265 6173 696e 674d 6574 686f 6428 tCreasingMethod(\n+000093a0: 4372 6561 7369 6e67 4d65 7468 6f64 2063 CreasingMethod c\n+000093b0: 293c 2f64 6976 3e3c 6469 7620 636c 6173 )
    Set ed\n+000093d0: 6765 2063 7265 6173 6520 7275 6c65 2e3c ge crease rule.<\n+000093e0: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
    Defin\n+00009400: 6974 696f 6e3c 2f62 3e20 3c61 2068 7265 ition op\n+00009430: 7469 6f6e 732e 683a 3130 343c 2f61 3e3c tions.h:104<\n+00009440: 2f64 6976 3e3c 2f64 6976 3e0a 3c2f 6469 /div>
    .
    ..\n+000094b0: 0a3c 6469 7620 6964 3d22 6e61 762d 7061 .
    \n+00009500: 0a20 203c 756c 3e0a 2020 2020 3c6c 6920 . ....\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-scheme.h\n+options.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2014 DreamWorks Animation LLC.\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -23,847 +23,200 @@\n 17//\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n-24#ifndef OPENSUBDIV3_SDC_SCHEME_H\n-25#define OPENSUBDIV3_SDC_SCHEME_H\n+24#ifndef OPENSUBDIV3_SDC_OPTIONS_H\n+25#define OPENSUBDIV3_SDC_OPTIONS_H\n 26\n 27#include \"../version.h\"\n 28\n-29#include \"../sdc/types.h\"\n-30#include \"../sdc/options.h\"\n-31#include \"../sdc/crease.h\"\n-32\n-33#include \n-34#include \n-35#include \n-36\n-37namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-38namespace OPENSUBDIV_VERSION {\n-39\n-40namespace Sdc {\n-41\n-65template \n-_\b6_\b6class _\bS_\bc_\bh_\be_\bm_\be {\n-67\n-68public:\n-69\n-_\b7_\b0 _\bS_\bc_\bh_\be_\bm_\be() : _options() { }\n-71\n-_\b7_\b2 _\bS_\bc_\bh_\be_\bm_\be(_\bO_\bp_\bt_\bi_\bo_\bn_\bs const& options) : _options(options) { }\n-73\n-_\b7_\b4 _\bO_\bp_\bt_\bi_\bo_\bn_\bs _\bG_\be_\bt_\bO_\bp_\bt_\bi_\bo_\bn_\bs() const { return _options; }\n-_\b7_\b5 void _\bS_\be_\bt_\bO_\bp_\bt_\bi_\bo_\bn_\bs(const _\bO_\bp_\bt_\bi_\bo_\bn_\bs& newOptions) { _options = newOptions; }\n+29namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+30namespace OPENSUBDIV_VERSION {\n+31\n+32namespace Sdc {\n+33\n+50\n+_\b5_\b1class _\bO_\bp_\bt_\bi_\bo_\bn_\bs {\n+52public:\n+_\b5_\b3 enum _\bV_\bt_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn {\n+54 _\bV_\bT_\bX_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY_\b__\bN_\bO_\bN_\bE = 0,\n+_\b5_\b6 _\bV_\bT_\bX_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY_\b__\bE_\bD_\bG_\bE_\b__\bO_\bN_\bL_\bY,\n+57 _\bV_\bT_\bX_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY_\b__\bE_\bD_\bG_\bE_\b__\bA_\bN_\bD_\b__\bC_\bO_\bR_\bN_\bE_\bR\n+_\b5_\b9 };\n+_\b6_\b0 enum _\bF_\bV_\ba_\br_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn {\n+_\b6_\b1 _\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bN_\bO_\bN_\bE = 0,\n+_\b6_\b2 _\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bC_\bO_\bR_\bN_\bE_\bR_\bS_\b__\bO_\bN_\bL_\bY,\n+_\b6_\b3 _\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bC_\bO_\bR_\bN_\bE_\bR_\bS_\b__\bP_\bL_\bU_\bS_\b1,\n+_\b6_\b4 _\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bC_\bO_\bR_\bN_\bE_\bR_\bS_\b__\bP_\bL_\bU_\bS_\b2,\n+_\b6_\b5 _\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bI_\bE_\bS,\n+66 _\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bA_\bL_\bL\n+_\b6_\b7 };\n+_\b6_\b8 enum _\bC_\br_\be_\ba_\bs_\bi_\bn_\bg_\bM_\be_\bt_\bh_\bo_\bd {\n+_\b6_\b9 _\bC_\bR_\bE_\bA_\bS_\bE_\b__\bU_\bN_\bI_\bF_\bO_\bR_\bM = 0,\n+70 _\bC_\bR_\bE_\bA_\bS_\bE_\b__\bC_\bH_\bA_\bI_\bK_\bI_\bN\n+_\b7_\b1 };\n+_\b7_\b2 enum _\bT_\br_\bi_\ba_\bn_\bg_\bl_\be_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bs_\bi_\bo_\bn {\n+_\b7_\b3 _\bT_\bR_\bI_\b__\bS_\bU_\bB_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK = 0,\n+74 _\bT_\bR_\bI_\b__\bS_\bU_\bB_\b__\bS_\bM_\bO_\bO_\bT_\bH\n+_\b7_\b5 };\n 76\n-80 template \n-81 void _\bC_\bo_\bm_\bp_\bu_\bt_\be_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk(FACE const& faceNeighborhood, MASK&\n-faceVertexMask) const;\n-82\n-98 template \n-99 void _\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bd_\bg_\be_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk(EDGE const& edgeNeighborhood, MASK&\n-edgeVertexMask,\n-100 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be parentRule = _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN,\n-101 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be childRule = _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN) const;\n+77public:\n+78\n+_\b7_\b9 _\bO_\bp_\bt_\bi_\bo_\bn_\bs() : _vtxBoundInterp(_\bV_\bT_\bX_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY_\b__\bN_\bO_\bN_\bE),\n+80 _fvarLinInterp(_\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bA_\bL_\bL),\n+81 _creasingMethod(_\bC_\bR_\bE_\bA_\bS_\bE_\b__\bU_\bN_\bI_\bF_\bO_\bR_\bM),\n+82 _triangleSub(_\bT_\bR_\bI_\b__\bS_\bU_\bB_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK) { }\n+83\n+84 //\n+85 // Trivial get/set methods:\n+86 //\n+87\n+_\b8_\b9 _\bV_\bt_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn _\bG_\be_\bt_\bV_\bt_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn() const { return\n+(_\bV_\bt_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn) _vtxBoundInterp; }\n+90\n+_\b9_\b2 void _\bS_\be_\bt_\bV_\bt_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn(_\bV_\bt_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn b)\n+{ _vtxBoundInterp = (EnumIntType) b; }\n+93\n+_\b9_\b5 _\bF_\bV_\ba_\br_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn _\bG_\be_\bt_\bF_\bV_\ba_\br_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn() const { return\n+(_\bF_\bV_\ba_\br_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn) _fvarLinInterp; }\n+96\n+_\b9_\b8 void _\bS_\be_\bt_\bF_\bV_\ba_\br_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn(_\bF_\bV_\ba_\br_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn b) { _fvarLinInterp\n+= (EnumIntType) b; }\n+99\n+_\b1_\b0_\b1 _\bC_\br_\be_\ba_\bs_\bi_\bn_\bg_\bM_\be_\bt_\bh_\bo_\bd _\bG_\be_\bt_\bC_\br_\be_\ba_\bs_\bi_\bn_\bg_\bM_\be_\bt_\bh_\bo_\bd() const { return (_\bC_\br_\be_\ba_\bs_\bi_\bn_\bg_\bM_\be_\bt_\bh_\bo_\bd)\n+_creasingMethod; }\n 102\n-112 template \n-113 void _\bC_\bo_\bm_\bp_\bu_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk(VERTEX const& vertexNeighborhood, MASK&\n-vertexVertexMask,\n-114 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be parentRule = _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN,\n-115 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be childRule = _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN) const;\n-116\n-141 template \n-142 void _\bC_\bo_\bm_\bp_\bu_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& vertexNeighborhood, MASK&\n-positionMask,\n-143 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be vertexRule) const;\n-144\n-145 template \n-146 void _\bC_\bo_\bm_\bp_\bu_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& vertexNeighborhood, MASK&\n-positionMask,\n-147 MASK& tangent1Mask, MASK& tangent2Mask,\n-148 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be vertexRule) const;\n-149\n-150 //\n-151 // Static methods defining traits/properties of the scheme:\n-152 //\n-_\b1_\b5_\b3 static _\bS_\bp_\bl_\bi_\bt _\bG_\be_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\bi_\bc_\ba_\bl_\bS_\bp_\bl_\bi_\bt_\bT_\by_\bp_\be();\n-_\b1_\b5_\b4 static int _\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be();\n-_\b1_\b5_\b5 static int _\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be();\n-_\b1_\b5_\b6 static int _\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bN_\be_\bi_\bg_\bh_\bb_\bo_\br_\bh_\bo_\bo_\bd_\bS_\bi_\bz_\be();\n-157\n-158protected:\n-159\n-160 //\n-161 // Supporting internal methods -- optionally implemented, depending on\n-specialization:\n-162 //\n-163\n-164 // Subdivision/refinement masks -- two for edge-vertices and three for\n-vertex-vertices:\n-165 //\n-166 template \n-167 void _\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bE_\bd_\bg_\be(EDGE const& edge, MASK& mask) const;\n-168 template \n-_\b1_\b6_\b9 void _\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bE_\bd_\bg_\be(EDGE const& edge, MASK& mask) const;\n-170\n-171 template \n-172 void _\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bV_\be_\br_\bt_\be_\bx(VERTEX const& edge, MASK& mask) const;\n-173 template \n-_\b1_\b7_\b4 void _\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bV_\be_\br_\bt_\be_\bx(VERTEX const& edge, MASK& mask, int const\n-creaseEnds[2]) const;\n-175 template \n-_\b1_\b7_\b6 void _\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bV_\be_\br_\bt_\be_\bx(VERTEX const& edge, MASK& mask) const;\n-177\n-178 //\n-179 // Limit masks for position and tangents at vertices -- three cases for\n-each:\n-180 //\n-181 template \n-_\b1_\b8_\b2 void _\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& vertex, MASK& pos) const;\n-183 template \n-_\b1_\b8_\b4 void _\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& vertex, MASK& pos, int const\n-creaseEnds[2]) const;\n-185 template \n-_\b1_\b8_\b6 void _\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& vertex, MASK& pos) const;\n-187\n-188 template \n-_\b1_\b8_\b9 void _\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs(VERTEX const& vertex, MASK& tan1, MASK&\n-tan2) const;\n-190 template \n-_\b1_\b9_\b1 void _\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs(VERTEX const& vertex, MASK& tan1, MASK&\n-tan2, int const creaseEnds[2]) const;\n-192 template \n-_\b1_\b9_\b3 void _\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs(VERTEX const& vertex, MASK& tan1, MASK&\n-tan2) const;\n-194\n-195private:\n-196 _\bO_\bp_\bt_\bi_\bo_\bn_\bs _options;\n-197\n-198protected:\n-199\n-200 //\n-201 // Internal implementation support:\n-202 //\n-203 // We need a local \"mask\" class to be declared locally within the vertex-\n-vertex mask query\n-204 // to hold one of the two possible masks required and to combine the local\n-mask with the mask\n-205 // the caller provides. It has been parameterized by so that a\n-version compatible\n-206 // with the caller's mask class is created.\n-207 //\n-208 template \n-_\b2_\b0_\b9 class _\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk {\n-210\n-211 public:\n-_\b2_\b1_\b2 typedef WEIGHT _\bW_\be_\bi_\bg_\bh_\bt;\n-213\n-214 public:\n-_\b2_\b1_\b5 _\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk(_\bW_\be_\bi_\bg_\bh_\bt* v, _\bW_\be_\bi_\bg_\bh_\bt* e, _\bW_\be_\bi_\bg_\bh_\bt* f) : _vWeights(v), _eWeights(e),\n-_fWeights(f) { }\n-_\b2_\b1_\b6 _\b~_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk() { }\n-217\n-218 public:\n-219\n-220 //\n-221 // Methods required for general mask assignments and queries:\n-222 //\n-_\b2_\b2_\b3 int _\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\be_\bx_\bW_\be_\bi_\bg_\bh_\bt_\bs() const { return _vCount; }\n-_\b2_\b2_\b4 int _\bG_\be_\bt_\bN_\bu_\bm_\bE_\bd_\bg_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs() const { return _eCount; }\n-_\b2_\b2_\b5 int _\bG_\be_\bt_\bN_\bu_\bm_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs() const { return _fCount; }\n-226\n-_\b2_\b2_\b7 void _\bS_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\be_\bx_\bW_\be_\bi_\bg_\bh_\bt_\bs(int count) { _vCount = count; }\n-_\b2_\b2_\b8 void _\bS_\be_\bt_\bN_\bu_\bm_\bE_\bd_\bg_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs( int count) { _eCount = count; }\n-_\b2_\b2_\b9 void _\bS_\be_\bt_\bN_\bu_\bm_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs( int count) { _fCount = count; }\n-230\n-_\b2_\b3_\b1 _\bW_\be_\bi_\bg_\bh_\bt const& _\bV_\be_\br_\bt_\be_\bx_\bW_\be_\bi_\bg_\bh_\bt(int index) const { return _vWeights[index]; }\n-_\b2_\b3_\b2 _\bW_\be_\bi_\bg_\bh_\bt const& _\bE_\bd_\bg_\be_\bW_\be_\bi_\bg_\bh_\bt( int index) const { return _eWeights[index]; }\n-_\b2_\b3_\b3 _\bW_\be_\bi_\bg_\bh_\bt const& _\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt( int index) const { return _fWeights[index]; }\n-234\n-_\b2_\b3_\b5 _\bW_\be_\bi_\bg_\bh_\bt& _\bV_\be_\br_\bt_\be_\bx_\bW_\be_\bi_\bg_\bh_\bt(int index) { return _vWeights[index]; }\n-_\b2_\b3_\b6 _\bW_\be_\bi_\bg_\bh_\bt& _\bE_\bd_\bg_\be_\bW_\be_\bi_\bg_\bh_\bt( int index) { return _eWeights[index]; }\n-_\b2_\b3_\b7 _\bW_\be_\bi_\bg_\bh_\bt& _\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt( int index) { return _fWeights[index]; }\n-238\n-_\b2_\b3_\b9 bool _\bA_\br_\be_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bF_\bo_\br_\bF_\ba_\bc_\be_\bC_\be_\bn_\bt_\be_\br_\bs() const { return _fWeightsForCenters; }\n-_\b2_\b4_\b0 void _\bS_\be_\bt_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bF_\bo_\br_\bF_\ba_\bc_\be_\bC_\be_\bn_\bt_\be_\br_\bs(bool on) { _fWeightsForCenters = on; }\n-241\n-242 public:\n-243\n-244 //\n-245 // Additional methods -- mainly the blending method for vertex-vertex\n-masks:\n-246 //\n-247 template \n-248 inline void\n-_\b2_\b4_\b9 _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk_\bs(_\bW_\be_\bi_\bg_\bh_\bt thisCoeff, _\bW_\be_\bi_\bg_\bh_\bt dstCoeff, USER_MASK& dst)\n-const {\n-250\n-251 //\n-252 // This implementation is convoluted by the potential sparsity of each\n-mask. Since\n-253 // it is specific to a vertex-vertex mask, we are guaranteed to have\n-exactly one\n-254 // vertex-weight for both masks, but the edge- and face-weights are\n-optional. The\n-255 // child mask (the \"source\") should have a superset of the weights of the\n-parent\n-256 // (the \"destination\") given its reduced sharpness, so we fortunately don't\n-need to\n-257 // test all permutations.\n-258 //\n-259 dst.VertexWeight(0) = dstCoeff * dst.VertexWeight(0) + thisCoeff * this-\n->_\bV_\be_\br_\bt_\be_\bx_\bW_\be_\bi_\bg_\bh_\bt(0);\n-260\n-261 int edgeWeightCount = this->_\bG_\be_\bt_\bN_\bu_\bm_\bE_\bd_\bg_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs();\n-262 if (edgeWeightCount) {\n-263 if (dst.GetNumEdgeWeights() == 0) {\n-264 dst.SetNumEdgeWeights(edgeWeightCount);\n-265 for (int i = 0; i < edgeWeightCount; ++i) {\n-266 dst.EdgeWeight(i) = thisCoeff * this->_\bE_\bd_\bg_\be_\bW_\be_\bi_\bg_\bh_\bt(i);\n-267 }\n-268 } else {\n-269 for (int i = 0; i < edgeWeightCount; ++i) {\n-270 dst.EdgeWeight(i) = dstCoeff * dst.EdgeWeight(i) + thisCoeff * this-\n->_\bE_\bd_\bg_\be_\bW_\be_\bi_\bg_\bh_\bt(i);\n-271 }\n-272 }\n-273 }\n-274\n-275 int faceWeightCount = this->_\bG_\be_\bt_\bN_\bu_\bm_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs();\n-276 if (faceWeightCount) {\n-277 //\n-278 // If combining face weights, be sure their interpretation (i.e. face-\n-centers\n-279 // or opposite vertices) is properly set in the destination mask:\n-280 //\n-281 if (dst.GetNumFaceWeights() == 0) {\n-282 dst.SetNumFaceWeights(faceWeightCount);\n-283 dst.SetFaceWeightsForFaceCenters(this->_\bA_\br_\be_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bF_\bo_\br_\bF_\ba_\bc_\be_\bC_\be_\bn_\bt_\be_\br_\bs());\n-284\n-285 for (int i = 0; i < faceWeightCount; ++i) {\n-286 dst.FaceWeight(i) = thisCoeff * this->_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt(i);\n-287 }\n-288 } else {\n-289 assert(this->_\bA_\br_\be_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bF_\bo_\br_\bF_\ba_\bc_\be_\bC_\be_\bn_\bt_\be_\br_\bs() ==\n-dst.AreFaceWeightsForFaceCenters());\n-290\n-291 for (int i = 0; i < faceWeightCount; ++i) {\n-292 dst.FaceWeight(i) = dstCoeff * dst.FaceWeight(i) + thisCoeff * this-\n->_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt(i);\n-293 }\n-294 }\n-295 }\n-296 }\n-297\n-298 private:\n-299 _\bW_\be_\bi_\bg_\bh_\bt* _vWeights;\n-300 _\bW_\be_\bi_\bg_\bh_\bt* _eWeights;\n-301 _\bW_\be_\bi_\bg_\bh_\bt* _fWeights;\n-302 int _vCount;\n-303 int _eCount;\n-304 int _fCount;\n-305 bool _fWeightsForCenters;\n-306 };\n-307};\n-308\n-309\n-310//\n-311// Crease and corner masks are common to most schemes -- the rest need to be\n-provided\n-312// for each Scheme specialization.\n-313//\n-314template \n-315template \n-316inline void\n-_\b3_\b1_\b7_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bE_\bd_\bg_\be(EDGE const&, MASK& mask) const {\n-318\n-319 mask.SetNumVertexWeights(2);\n-320 mask.SetNumEdgeWeights(0);\n-321 mask.SetNumFaceWeights(0);\n-322 mask.SetFaceWeightsForFaceCenters(false);\n-323\n-324 mask.VertexWeight(0) = 0.5f;\n-325 mask.VertexWeight(1) = 0.5f;\n-326}\n-327\n-328template \n-329template \n-330inline void\n-_\b3_\b3_\b1_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bV_\be_\br_\bt_\be_\bx(VERTEX const&, MASK& mask) const {\n-332\n-333 mask.SetNumVertexWeights(1);\n-334 mask.SetNumEdgeWeights(0);\n-335 mask.SetNumFaceWeights(0);\n-336 mask.SetFaceWeightsForFaceCenters(false);\n-337\n-338 mask.VertexWeight(0) = 1.0f;\n-339}\n-340\n-341\n-342//\n-343// The computation of a face-vertex mask is trivial and consistent for all\n-schemes:\n-344//\n-345template \n-346template \n-347void\n-_\b3_\b4_\b8_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk(FACE const& face, MASK& mask) const {\n-349\n-350 int vertCount = face.GetNumVertices();\n-351\n-352 mask.SetNumVertexWeights(vertCount);\n-353 mask.SetNumEdgeWeights(0);\n-354 mask.SetNumFaceWeights(0);\n-355 mask.SetFaceWeightsForFaceCenters(false);\n-356\n-357 typename MASK::Weight vWeight = 1.0f / (typename MASK::Weight) vertCount;\n-358 for (int i = 0; i < vertCount; ++i) {\n-359 mask.VertexWeight(i) = vWeight;\n-360 }\n-361}\n-362\n-363\n-364//\n-365// The computation of an edge-vertex mask requires inspection of sharpness\n-values to\n-366// determine if smooth or a crease, and also to detect and apply a\n-transition from a\n-367// crease to smooth. Using the protected methods to assign the specific\n-masks (only\n-368// two -- smooth or crease) this implementation should serve all non-linear\n-schemes\n-369// (currently Catmark and Loop) and only needs to be specialized for\n-Bilinear to\n-370// trivialize it to the crease case.\n-371//\n-372// The implementation here is slightly complicated by combining two\n-scenarios into a\n-373// single implementation -- either the caller knows the parent and child\n-rules and\n-374// provides them, or they don't and the Rules have to be determined from\n-sharpness\n-375// values. Both cases include quick return once the parent is determined to\n-be\n-376// smooth or the child a crease, leaving the transitional case remaining.\n-377//\n-378// The overall process is as follows:\n-379//\n-380// - quickly detect the most common specified or detected Smooth case and\n-return\n-381// - quickly detect a full Crease by child Rule assignment and return\n-382// - determine from sharpness if unspecified child is a crease -- return if\n-so\n-383// - compute smooth mask for child and combine with crease from parent\n-384//\n-385// Usage of the parent Rule here allows some misuse in that only three of\n-five possible\n-386// assignments are legitimate for the parent and four for the child (Dart\n-being only\n-387// valid for the child and Corner for neither). Results are undefined in\n-these cases.\n-388//\n-389template \n-390template \n-391void\n-_\b3_\b9_\b2_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bd_\bg_\be_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk(EDGE const& edge,\n-393 MASK& mask,\n-394 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be parentRule,\n-395 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be childRule) const {\n-396\n-397 //\n-398 // If the parent was specified or determined to be Smooth, we can quickly\n-return\n-399 // with a Smooth mask. Otherwise the parent is a crease -- if the child was\n-400 // also specified to be a crease, we can quickly return with a Crease mask.\n-401 //\n-402 if ((parentRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bS_\bM_\bO_\bO_\bT_\bH) ||\n-403 ((parentRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN) && (edge.GetSharpness() <= 0.0f))) {\n-404 assignSmoothMaskForEdge(edge, mask);\n-405 return;\n-406 }\n-407 if (childRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bR_\bE_\bA_\bS_\bE) {\n-408 assignCreaseMaskForEdge(edge, mask);\n-409 return;\n-410 }\n-411\n-412 //\n-413 // We have a Crease on the parent and the child was either specified as\n-Smooth\n-414 // or was not specified at all -- deal with the unspecified case first\n-(again\n-415 // returning a Crease mask if the child is also determined to be a Crease)\n-and\n-416 // continue if we have a transition to Smooth.\n-417 //\n-418 // Note when qualifying the child that if the parent sharpness > 1.0,\n-regardless\n-419 // of the creasing method, whether the child sharpness values decay to zero\n-is\n-420 // irrelevant -- the fractional weight for such a case (the value of the\n-parent\n-421 // sharpness) is > 1.0, and when clamped to 1 effectively yields a full\n-crease.\n-422 //\n-423 if (childRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN) {\n-424 _\bC_\br_\be_\ba_\bs_\be crease(_options);\n-425\n-426 bool childIsCrease = false;\n-427 if (parentRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bR_\bE_\bA_\bS_\bE) {\n-428 // Child unknown as default value but parent Rule specified as Crease\n-429 childIsCrease = true;\n-430 } else if (edge.GetSharpness() >= 1.0f) {\n-431 // Sharpness >= 1.0 always a crease -- see note above\n-432 childIsCrease = true;\n-433 } else if (crease._\bI_\bs_\bU_\bn_\bi_\bf_\bo_\br_\bm()) {\n-434 // Sharpness < 1.0 is guaranteed to decay to 0.0 for Uniform child edges\n-435 childIsCrease = false;\n-436 } else {\n-437 // Sharpness <= 1.0 does not necessarily decay to 0.0 for both child\n-edges...\n-438 float cEdgeSharpness[2];\n-439 edge.GetChildSharpnesses(crease, cEdgeSharpness);\n-440 childIsCrease = (cEdgeSharpness[0] > 0.0f) && (cEdgeSharpness[1] > 0.0f);\n-441 }\n-442 if (childIsCrease) {\n-443 assignCreaseMaskForEdge(edge, mask);\n-444 return;\n-445 }\n-446 }\n-447\n-448 //\n-449 // We are now left with the Crease-to-Smooth case -- compute the Smooth\n-mask\n-450 // for the child and augment it with the transitional Crease of the parent.\n-451 //\n-452 // A general combination of separately assigned masks here (as done in the\n-vertex-\n-453 // vertex case) is overkill -- trivially combine the 0.5f vertex\n-coefficient for\n-454 // the Crease of the parent with the vertex weights and attenuate the face\n-weights\n-455 // accordingly.\n-456 //\n-457 assignSmoothMaskForEdge(edge, mask);\n-458\n-459 typedef typename MASK::Weight Weight;\n-460\n-461 Weight pWeight = edge.GetSharpness();\n-462 Weight cWeight = 1.0f - pWeight;\n-463\n-464 mask.VertexWeight(0) = pWeight * 0.5f + cWeight * mask.VertexWeight(0);\n-465 mask.VertexWeight(1) = pWeight * 0.5f + cWeight * mask.VertexWeight(1);\n-466\n-467 int faceCount = mask.GetNumFaceWeights();\n-468 for (int i = 0; i < faceCount; ++i) {\n-469 mask.FaceWeight(i) *= cWeight;\n-470 }\n-471}\n-472\n-473//\n-474// The computation of a vertex-vertex mask requires inspection of creasing\n-sharpness values\n-475// to determine what subdivision Rules apply to the parent and its child\n-vertex, and also to\n-476// detect and apply a transition between two differing Rules. Using the\n-protected methods to\n-477// assign specific masks, this implementation should serve all non-linear\n-schemes (currently\n-478// Catmark and Loop) and only needs to be specialized for Bilinear to remove\n-all unnecessary\n-479// complexity relating to creasing, Rules, etc.\n-480//\n-481// The implementation here is slightly complicated by combining two\n-scenarios into one --\n-482// either the caller knows the parent and child rules and provides them, or\n-they don't and\n-483// the Rules have to be determined from sharpness values. Even when the\n-Rules are known and\n-484// provided though, there are cases where the parent and child sharpness\n-values need to be\n-485// identified, so accounting for the unknown Rules too is not much of an\n-added complication.\n-486//\n-487// The benefit of supporting specified Rules is that they can often be\n-trivially\n-488// determined from context (e.g. a vertex derived from a face at a previous\n-level will always\n-489// be smooth) rather than more generally, and at greater cost, inspecting\n-neighboring and\n-490// they are often the same for parent and child.\n-491//\n-492// The overall process is as follows:\n-493//\n-494// - quickly detect the most common Smooth case when specified and return\n-495// - determine if sharpness for parent is required and gather if so\n-496// - if unspecified, determine the parent rule\n-497// - assign mask for the parent rule -- returning if Smooth/Dart\n-498// - return if child rule matches parent\n-499// - gather sharpness for child to determine or combine child rule\n-500// - if unspecified, determine the child rule, returning if it matches\n-parent\n-501// - assign local mask for child rule\n-502// - combine local child mask with the parent mask\n-503//\n-504// Remember -- if the parent rule is specified but the child is not, this\n-implies only one\n-505// of the two optional rules was specified and is meant to indicate there is\n-no transition,\n-506// so the child rule should be assigned to be the same (wish the compiler\n-would allow this\n-507// in default value assignment).\n-508//\n-509template \n-510template \n-511void\n-_\b5_\b1_\b2_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk(VERTEX const& vertex,\n-513 MASK& mask,\n-514 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be pRule,\n-515 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be cRule) const {\n-516\n-517 // Quick assignment and return for the most common case:\n-518 if ((pRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bS_\bM_\bO_\bO_\bT_\bH) || (pRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bD_\bA_\bR_\bT)) {\n-519 assignSmoothMaskForVertex(vertex, mask);\n-520 return;\n-521 }\n-522 // If unspecified, assign the child rule to match the parent rule if\n-specified:\n-523 if ((cRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN) && (pRule != _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN)) {\n-524 cRule = pRule;\n-525 }\n-526 int valence = vertex.GetNumEdges();\n-527\n-528 //\n-529 // Determine if we need the parent edge sharpness values -- identify/gather\n-if so\n-530 // and use it to compute the parent rule if unspecified:\n-531 //\n-532 float * pEdgeSharpnessBuffer = (float *)alloca(valence*sizeof(float)),\n-533 * pEdgeSharpness = 0,\n-534 pVertexSharpness = 0.0f;\n-535\n-536 bool requireParentSharpness = (pRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN) ||\n-537 (pRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bR_\bE_\bA_\bS_\bE) ||\n-538 (pRule != cRule);\n-539 if (requireParentSharpness) {\n-540 pVertexSharpness = vertex.GetSharpness();\n-541 pEdgeSharpness = vertex.GetSharpnessPerEdge(pEdgeSharpnessBuffer);\n-542\n-543 if (pRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN) {\n-544 pRule = _\bC_\br_\be_\ba_\bs_\be(_options)._\bD_\be_\bt_\be_\br_\bm_\bi_\bn_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bR_\bu_\bl_\be(pVertexSharpness,\n-valence, pEdgeSharpness);\n-545 }\n-546 }\n-547 if ((pRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bS_\bM_\bO_\bO_\bT_\bH) || (pRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bD_\bA_\bR_\bT)) {\n-548 assignSmoothMaskForVertex(vertex, mask);\n-549 return; // As done on entry, we can return immediately if parent is Smooth/\n-Dart\n-550 } else if (pRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bR_\bE_\bA_\bS_\bE) {\n-551 int creaseEnds[2];\n-552 _\bC_\br_\be_\ba_\bs_\be(_options)._\bG_\be_\bt_\bS_\bh_\ba_\br_\bp_\bE_\bd_\bg_\be_\bP_\ba_\bi_\br_\bO_\bf_\bC_\br_\be_\ba_\bs_\be(pEdgeSharpness, valence,\n-creaseEnds);\n-553\n-554 assignCreaseMaskForVertex(vertex, mask, creaseEnds);\n-555 } else {\n-556 assignCornerMaskForVertex(vertex, mask);\n-557 }\n-558 if (cRule == pRule) return;\n-559\n-560 //\n-561 // Identify/gather child sharpness to combine masks for the two differing\n-Rules:\n-562 //\n-563 _\bC_\br_\be_\ba_\bs_\be crease(_options);\n-564\n-565 float * cEdgeSharpnessBuffer = (float *)alloca(valence*sizeof(float)),\n-566 * cEdgeSharpness = vertex.GetChildSharpnessPerEdge(crease,\n-cEdgeSharpnessBuffer),\n-567 cVertexSharpness = vertex.GetChildSharpness(crease);\n-568\n-569 if (cRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN) {\n-570 cRule = crease._\bD_\be_\bt_\be_\br_\bm_\bi_\bn_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bR_\bu_\bl_\be(cVertexSharpness, valence,\n-cEdgeSharpness);\n-571 if (cRule == pRule) return;\n-572 }\n-573\n-574 //\n-575 // Initialize a local child mask, compute the fractional weight from parent\n-and child\n-576 // sharpness values and combine the two masks:\n-577 //\n-578 typedef typename MASK::Weight Weight;\n-579\n-580 Weight * cMaskWeights = (Weight *)alloca((1 + 2 * valence)*sizeof(Weight));\n-581 _\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b<_\bW_\be_\bi_\bg_\bh_\bt_\b> cMask(cMaskWeights, cMaskWeights + 1, cMaskWeights + 1 +\n-valence);\n-582\n-583 if ((cRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bS_\bM_\bO_\bO_\bT_\bH) || (cRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bD_\bA_\bR_\bT)) {\n-584 assignSmoothMaskForVertex(vertex, cMask);\n-585 } else if (cRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bR_\bE_\bA_\bS_\bE) {\n-586 int creaseEnds[2];\n-587 _\bC_\br_\be_\ba_\bs_\be(_options)._\bG_\be_\bt_\bS_\bh_\ba_\br_\bp_\bE_\bd_\bg_\be_\bP_\ba_\bi_\br_\bO_\bf_\bC_\br_\be_\ba_\bs_\be(cEdgeSharpness, valence,\n-creaseEnds);\n-588\n-589 assignCreaseMaskForVertex(vertex, cMask, creaseEnds);\n-590 } else {\n-591 assignCornerMaskForVertex(vertex, cMask);\n-592 }\n-593\n-594 Weight pWeight = crease._\bC_\bo_\bm_\bp_\bu_\bt_\be_\bF_\br_\ba_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bW_\be_\bi_\bg_\bh_\bt_\bA_\bt_\bV_\be_\br_\bt_\be_\bx(pVertexSharpness,\n-cVertexSharpness,\n-595 valence, pEdgeSharpness, cEdgeSharpness);\n-596 Weight cWeight = 1.0f - pWeight;\n-597\n-598 cMask._\bC_\bo_\bm_\bb_\bi_\bn_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk_\bs(cWeight, pWeight, mask);\n-599}\n-600\n-601//\n-602// The computation of limit masks for vertices:\n-603//\n-604template \n-605template \n-606void\n-_\b6_\b0_\b7_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& vertex,\n-608 MASK& mask,\n-609 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be rule) const {\n-610\n-611 if ((rule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bS_\bM_\bO_\bO_\bT_\bH) || (rule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bD_\bA_\bR_\bT)) {\n-612 assignSmoothLimitMask(vertex, mask);\n-613 } else if (rule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bR_\bE_\bA_\bS_\bE) {\n-614 float * edgeSharpness = (float *)alloca(vertex.GetNumEdges() * sizeof\n-(float));\n-615 vertex.GetSharpnessPerEdge(edgeSharpness);\n-616\n-617 int creaseEnds[2];\n-618 _\bC_\br_\be_\ba_\bs_\be(_options)._\bG_\be_\bt_\bS_\bh_\ba_\br_\bp_\bE_\bd_\bg_\be_\bP_\ba_\bi_\br_\bO_\bf_\bC_\br_\be_\ba_\bs_\be(edgeSharpness, vertex.GetNumEdges\n-(), creaseEnds);\n-619\n-620 assignCreaseLimitMask(vertex, mask, creaseEnds);\n-621 } else {\n-622 assignCornerLimitMask(vertex, mask);\n-623 }\n-624}\n-625\n-626template \n-627template \n-628void\n-_\b6_\b2_\b9_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& vertex,\n-630 MASK& posMask,\n-631 MASK& tan1Mask,\n-632 MASK& tan2Mask,\n-633 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be rule) const {\n-634\n-635 if ((rule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bS_\bM_\bO_\bO_\bT_\bH) || (rule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bD_\bA_\bR_\bT)) {\n-636 assignSmoothLimitMask(vertex, posMask);\n-637 assignSmoothLimitTangentMasks(vertex, tan1Mask, tan2Mask);\n-638 } else if (rule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bR_\bE_\bA_\bS_\bE) {\n-639 float * edgeSharpness = (float *)alloca(vertex.GetNumEdges() * sizeof\n-(float));\n-640 vertex.GetSharpnessPerEdge(edgeSharpness);\n-641\n-642 int creaseEnds[2];\n-643 _\bC_\br_\be_\ba_\bs_\be(_options)._\bG_\be_\bt_\bS_\bh_\ba_\br_\bp_\bE_\bd_\bg_\be_\bP_\ba_\bi_\br_\bO_\bf_\bC_\br_\be_\ba_\bs_\be(edgeSharpness, vertex.GetNumEdges\n-(), creaseEnds);\n-644\n-645 assignCreaseLimitMask(vertex, posMask, creaseEnds);\n-646 assignCreaseLimitTangentMasks(vertex, tan1Mask, tan2Mask, creaseEnds);\n-647 } else {\n-648 assignCornerLimitMask(vertex, posMask);\n-649 assignCornerLimitTangentMasks(vertex, tan1Mask, tan2Mask);\n-650 }\n-651}\n-652\n-653\n-654} // end namespace sdc\n-655\n-656} // end namespace OPENSUBDIV_VERSION\n-657using namespace OPENSUBDIV_VERSION;\n-658} // end namespace OpenSubdiv\n-659\n-660#endif /* OPENSUBDIV3_SDC_SCHEME_H */\n+_\b1_\b0_\b4 void _\bS_\be_\bt_\bC_\br_\be_\ba_\bs_\bi_\bn_\bg_\bM_\be_\bt_\bh_\bo_\bd(_\bC_\br_\be_\ba_\bs_\bi_\bn_\bg_\bM_\be_\bt_\bh_\bo_\bd c) { _creasingMethod = (EnumIntType)\n+c; }\n+105\n+_\b1_\b0_\b7 _\bT_\br_\bi_\ba_\bn_\bg_\bl_\be_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bs_\bi_\bo_\bn _\bG_\be_\bt_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bs_\bi_\bo_\bn() const { return\n+(_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bs_\bi_\bo_\bn) _triangleSub; }\n+108\n+_\b1_\b1_\b0 void _\bS_\be_\bt_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bs_\bi_\bo_\bn(_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bs_\bi_\bo_\bn t) { _triangleSub =\n+(EnumIntType) t; }\n+111\n+112private:\n+113 // Use a small integer type to pack these rather than bitfields:\n+114 typedef unsigned char EnumIntType;\n+115\n+116 EnumIntType _vtxBoundInterp;\n+117 EnumIntType _fvarLinInterp;\n+118 EnumIntType _creasingMethod;\n+119 EnumIntType _triangleSub;\n+120};\n+121\n+122} // end namespace sdc\n+123\n+124} // end namespace OPENSUBDIV_VERSION\n+125using namespace OPENSUBDIV_VERSION;\n+126} // end namespace OpenSubdiv\n+127\n+128#endif /* OPENSUBDIV3_SDC_OPTIONS_H */\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bp_\bl_\bi_\bt\n-Split\n-Enumerated type for all face splitting schemes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b4_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be\n-Types, constants and utilities related to semi-sharp creasing \u00e2\u0080\u0093 whose\n-implementation is independent o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b6_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be\n-Rule\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bD_\bA_\bR_\bT\n-@ RULE_DART\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bS_\bM_\bO_\bO_\bT_\bH\n-@ RULE_SMOOTH\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bR_\bE_\bA_\bS_\bE\n-@ RULE_CREASE\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN\n-@ RULE_UNKNOWN\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bG_\be_\bt_\bS_\bh_\ba_\br_\bp_\bE_\bd_\bg_\be_\bP_\ba_\bi_\br_\bO_\bf_\bC_\br_\be_\ba_\bs_\be\n-void GetSharpEdgePairOfCrease(float const *incidentEdgeSharpness, int\n-incidentEdgeCount, int sharpEdgePair[2]) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b2_\b2_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bD_\be_\bt_\be_\br_\bm_\bi_\bn_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bR_\bu_\bl_\be\n-Rule DetermineVertexVertexRule(float vertexSharpness, int incidentEdgeCount,\n-float const *incidentEdgeSharpness) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bI_\bs_\bU_\bn_\bi_\bf_\bo_\br_\bm\n-bool IsUniform() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b9_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bF_\br_\ba_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bW_\be_\bi_\bg_\bh_\bt_\bA_\bt_\bV_\be_\br_\bt_\be_\bx\n-float ComputeFractionalWeightAtVertex(float vertexSharpness, float\n-childVertexSharpness, int incidentEdgeCount, float const\n-*incidentEdgeSharpness, float const *childEdgesSharpness) const\n-Transitional weighting: When the rules applicable to a parent vertex and its\n-child differ,...\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n All supported options applying to subdivision scheme.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b5_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be\n-Scheme is a class template which provides all implementation for the\n-subdivision schemes supported by...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b6_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bE_\bd_\bg_\be\n-void assignSmoothMaskForEdge(EDGE const &edge, MASK &mask) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bG_\be_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\bi_\bc_\ba_\bl_\bS_\bp_\bl_\bi_\bt_\bT_\by_\bp_\be\n-static Split GetTopologicalSplitType()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bV_\be_\br_\bt_\be_\bx\n-void assignCreaseMaskForVertex(VERTEX const &edge, MASK &mask, int const\n-creaseEnds[2]) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk\n-void ComputeVertexVertexMask(VERTEX const &vertexNeighborhood, MASK\n-&vertexVertexMask, Crease::Rule parentRule=Crease::RULE_UNKNOWN, Crease::Rule\n-childRule=Crease::RULE_UNKNOWN) const\n-Vertex-vertex masks If known, a single Rule or pair of Rules can be specified\n-(indicating a crease tr...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b5_\b1_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk\n-void ComputeVertexLimitMask(VERTEX const &vertexNeighborhood, MASK\n-&positionMask, Crease::Rule vertexRule) const\n-Limit masks for vertices \u00e2\u0080\u0093 position and tangents These presume that a vertex\n-is suitably isolated for...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b6_\b0_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs\n-void assignCreaseLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK\n-&tan2, int const creaseEnds[2]) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be\n-static int GetRegularFaceSize()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bE_\bd_\bg_\be\n-void assignCreaseMaskForEdge(EDGE const &edge, MASK &mask) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b3_\b1_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bd_\bg_\be_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk\n-void ComputeEdgeVertexMask(EDGE const &edgeNeighborhood, MASK &edgeVertexMask,\n-Crease::Rule parentRule=Crease::RULE_UNKNOWN, Crease::Rule childRule=Crease::\n-RULE_UNKNOWN) const\n-Edge-vertex masks If known, the Rule for the edge and/or the derived vertex can\n-be specified to accel...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b3_\b9_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be\n-Scheme()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b7_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk\n-void assignSmoothLimitMask(VERTEX const &vertex, MASK &pos) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bN_\be_\bi_\bg_\bh_\bb_\bo_\br_\bh_\bo_\bo_\bd_\bS_\bi_\bz_\be\n-static int GetLocalNeighborhoodSize()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bV_\be_\br_\bt_\be_\bx\n-void assignCornerMaskForVertex(VERTEX const &edge, MASK &mask) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b3_\b3_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk\n-void assignCreaseLimitMask(VERTEX const &vertex, MASK &pos, int const\n-creaseEnds[2]) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bV_\be_\br_\bt_\be_\bx\n-void assignSmoothMaskForVertex(VERTEX const &edge, MASK &mask) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be\n-static int GetRegularVertexValence()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bG_\be_\bt_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n-Options GetOptions() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b7_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs\n-void assignSmoothLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK\n-&tan2) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk\n-void assignCornerLimitMask(VERTEX const &vertex, MASK &pos) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be\n-Scheme(Options const &options)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b7_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk\n-void ComputeFaceVertexMask(FACE const &faceNeighborhood, MASK &faceVertexMask)\n-const\n-Face-vertex masks - trivial for all current schemes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b3_\b4_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs\n-void assignCornerLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK\n-&tan2) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bS_\be_\bt_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n-void SetOptions(const Options &newOptions)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b7_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b0_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bW_\be_\bi_\bg_\bh_\bt\n-WEIGHT Weight\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b1_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:\n-_\bA_\br_\be_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bF_\bo_\br_\bF_\ba_\bc_\be_\bC_\be_\bn_\bt_\be_\br_\bs\n-bool AreFaceWeightsForFaceCenters() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b3_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bS_\be_\bt_\bN_\bu_\bm_\bE_\bd_\bg_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs\n-void SetNumEdgeWeights(int count)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b2_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bE_\bd_\bg_\be_\bW_\be_\bi_\bg_\bh_\bt\n-Weight const & EdgeWeight(int index) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bE_\bd_\bg_\be_\bW_\be_\bi_\bg_\bh_\bt\n-Weight & EdgeWeight(int index)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b3_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:\n-_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk_\bs\n-void CombineVertexVertexMasks(Weight thisCoeff, Weight dstCoeff, USER_MASK\n-&dst) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b4_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\be_\bx_\bW_\be_\bi_\bg_\bh_\bt_\bs\n-int GetNumVertexWeights() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b2_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bS_\be_\bt_\bN_\bu_\bm_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs\n-void SetNumFaceWeights(int count)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b2_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt\n-Weight const & FaceWeight(int index) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b3_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bE_\bd_\bg_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs\n-int GetNumEdgeWeights() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b2_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bW_\be_\bi_\bg_\bh_\bt\n-Weight & VertexWeight(int index)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b3_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs\n-int GetNumFaceWeights() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b2_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:\n-_\bS_\be_\bt_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bF_\bo_\br_\bF_\ba_\bc_\be_\bC_\be_\bn_\bt_\be_\br_\bs\n-void SetFaceWeightsForFaceCenters(bool on)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b4_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bS_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\be_\bx_\bW_\be_\bi_\bg_\bh_\bt_\bs\n-void SetNumVertexWeights(int count)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b2_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk\n-LocalMask(Weight *v, Weight *e, Weight *f)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b1_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bW_\be_\bi_\bg_\bh_\bt\n-Weight const & VertexWeight(int index) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b3_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt\n-Weight & FaceWeight(int index)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b3_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\b~_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk\n-~LocalMask()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b1_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bs_\bi_\bo_\bn\n+TriangleSubdivision\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b7_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\bR_\bI_\b__\bS_\bU_\bB_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK\n+@ TRI_SUB_CATMARK\n+Catmark weights (Catmark scheme only)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b7_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\bR_\bI_\b__\bS_\bU_\bB_\b__\bS_\bM_\bO_\bO_\bT_\bH\n+@ TRI_SUB_SMOOTH\n+\"smooth triangle\" weights (Catmark scheme only)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b7_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\br_\be_\ba_\bs_\bi_\bn_\bg_\bM_\be_\bt_\bh_\bo_\bd\n+CreasingMethod\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b6_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bR_\bE_\bA_\bS_\bE_\b__\bU_\bN_\bI_\bF_\bO_\bR_\bM\n+@ CREASE_UNIFORM\n+Catmark rule.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b6_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bR_\bE_\bA_\bS_\bE_\b__\bC_\bH_\bA_\bI_\bK_\bI_\bN\n+@ CREASE_CHAIKIN\n+Chaikin rule.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b7_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\be_\bt_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bs_\bi_\bo_\bn\n+TriangleSubdivision GetTriangleSubdivision() const\n+Get triangle subdivision weights rule (Catmark scheme only !)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b1_\b0_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\be_\bt_\bC_\br_\be_\ba_\bs_\bi_\bn_\bg_\bM_\be_\bt_\bh_\bo_\bd\n+CreasingMethod GetCreasingMethod() const\n+Get edge crease rule.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b1_\b0_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n+Options()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b7_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\be_\bt_\bF_\bV_\ba_\br_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn\n+void SetFVarLinearInterpolation(FVarLinearInterpolation b)\n+Set face-varying interpolation rule.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b9_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\be_\bt_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bs_\bi_\bo_\bn\n+void SetTriangleSubdivision(TriangleSubdivision t)\n+Set triangle subdivision weights rule (Catmark scheme only !)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b1_\b1_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\be_\bt_\bV_\bt_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn\n+VtxBoundaryInterpolation GetVtxBoundaryInterpolation() const\n+Get vertex boundary interpolation rule.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b8_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bV_\ba_\br_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn\n+FVarLinearInterpolation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b6_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bC_\bO_\bR_\bN_\bE_\bR_\bS_\b__\bO_\bN_\bL_\bY\n+@ FVAR_LINEAR_CORNERS_ONLY\n+sharpen corners only\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b6_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bI_\bE_\bS\n+@ FVAR_LINEAR_BOUNDARIES\n+sharpen all boundaries (\"always sharp\")\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b6_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bC_\bO_\bR_\bN_\bE_\bR_\bS_\b__\bP_\bL_\bU_\bS_\b2\n+@ FVAR_LINEAR_CORNERS_PLUS2\n+(\"edge and corner + propagate corner\")\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b6_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bC_\bO_\bR_\bN_\bE_\bR_\bS_\b__\bP_\bL_\bU_\bS_\b1\n+@ FVAR_LINEAR_CORNERS_PLUS1\n+(\"edge corner\")\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b6_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bA_\bL_\bL\n+@ FVAR_LINEAR_ALL\n+bilinear interpolation (\"bilinear\")\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b6_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bN_\bO_\bN_\bE\n+@ FVAR_LINEAR_NONE\n+smooth everywhere (\"edge only\")\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b6_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\be_\bt_\bV_\bt_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn\n+void SetVtxBoundaryInterpolation(VtxBoundaryInterpolation b)\n+Set vertex boundary interpolation rule.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b9_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn\n+FVarLinearInterpolation GetFVarLinearInterpolation() const\n+Get face-varying interpolation rule.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b9_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bV_\bt_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn\n+VtxBoundaryInterpolation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b5_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bV_\bT_\bX_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY_\b__\bN_\bO_\bN_\bE\n+@ VTX_BOUNDARY_NONE\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b5_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bV_\bT_\bX_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY_\b__\bE_\bD_\bG_\bE_\b__\bO_\bN_\bL_\bY\n+@ VTX_BOUNDARY_EDGE_ONLY\n+all boundary edges sharpened and interpolated\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b5_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bV_\bT_\bX_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY_\b__\bE_\bD_\bG_\bE_\b__\bA_\bN_\bD_\b__\bC_\bO_\bR_\bN_\bE_\bR\n+@ VTX_BOUNDARY_EDGE_AND_CORNER\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b5_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\be_\bt_\bC_\br_\be_\ba_\bs_\bi_\bn_\bg_\bM_\be_\bt_\bh_\bo_\bd\n+void SetCreasingMethod(CreasingMethod c)\n+Set edge crease rule.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b1_\b0_\b4\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bs_\bd_\bc\n- * _\bs_\bc_\bh_\be_\bm_\be_\b._\bh\n+ * _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00773.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00773.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/sdc/options.h File Reference\n+OpenSubdiv: opensubdiv/sdc/scheme.h File Reference\n \n \n \n \n \n \n \n@@ -90,25 +90,34 @@\n
    \n
    \n \n
    \n \n-
    options.h File Reference
    \n+
    scheme.h File Reference
    \n
    \n
    \n
    #include "../version.h"
    \n+#include "../sdc/types.h"
    \n+#include "../sdc/options.h"
    \n+#include "../sdc/crease.h"
    \n+#include <cassert>
    \n+#include <cstdlib>
    \n+#include <vector>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n+\n+\n \n

    \n Classes

    class  Options
     All supported options applying to subdivision scheme. More...
    class  Scheme< SCHEME_TYPE >
     Scheme is a class template which provides all implementation for the subdivision schemes supported by OpenSubdiv through specializations of the methods of each. An instance of Scheme<SCHEME_TYPE> includes a set of Options that will dictate the variable aspects of its behavior.
    \n+ More...
     
    class  Scheme< SCHEME_TYPE >::LocalMask< WEIGHT >
     
    \n \n \n \n \n@@ -117,13 +126,13 @@\n \n

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,35 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-options.h File Reference\n+scheme.h File Reference\n #include \"../version.h\"\n+#include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n+#include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\"\n+#include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bc_\br_\be_\ba_\bs_\be_\b._\bh\"\n+#include \n+#include \n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bO_\bp_\bt_\bi_\bo_\bn_\bs\n-\u00a0 All supported options applying to subdivision scheme. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bS_\bc_\bh_\be_\bm_\be_\b<_\b _\bS_\bC_\bH_\bE_\bM_\bE_\b__\bT_\bY_\bP_\bE_\b _\b>\n+ _\bS_\bc_\bh_\be_\bm_\be is a class template which provides all implementation for the\n+ subdivision schemes supported by _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv through specializations of\n+\u00a0 the methods of each. An instance of Scheme includes a set\n+ of _\bO_\bp_\bt_\bi_\bo_\bn_\bs that will dictate the variable aspects of its behavior.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bS_\bc_\bh_\be_\bm_\be_\b<_\b _\bS_\bC_\bH_\bE_\bM_\bE_\b__\bT_\bY_\bP_\bE_\b _\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b<_\b _\bW_\bE_\bI_\bG_\bH_\bT_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bs_\bd_\bc\n- * _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\n+ * _\bs_\bc_\bh_\be_\bm_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00773.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00773.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a00773 = [\n- [\"Options\", \"a01329.html\", \"a01329\"]\n+ [\"Scheme< SCHEME_TYPE >\", \"a01333.html\", \"a01333\"],\n+ [\"LocalMask< WEIGHT >\", \"a01337.html\", \"a01337\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00773_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00773_source.html", "has_internal_linenos": true, "unified_diff": "@@ -22,2397 +22,8471 @@\n 00000150: 656e 743d 2244 6f78 7967 656e 2031 2e39 ent=\"Doxygen 1.9\n 00000160: 2e38 222f 3e0a 3c6d 6574 6120 6e61 6d65 .8\"/>..OpenSubdiv: o\n-000001c0: 7065 6e73 7562 6469 762f 7364 632f 6f70 pensubdiv/sdc/op\n-000001d0: 7469 6f6e 732e 6820 536f 7572 6365 2046 tions.h Source F\n-000001e0: 696c 653c 2f74 6974 6c65 3e0a 3c6c 696e ile.....\n-00000310: 0a3c 7363 7269 7074 2074 7970 653d 2274 ..<\n-00000350: 7363 7269 7074 2074 7970 653d 2274 6578 script type=\"tex\n-00000360: 742f 6a61 7661 7363 7269 7074 2220 7372 t/javascript\" sr\n-00000370: 633d 226e 6176 7472 6565 2e6a 7322 3e3c c=\"navtree.js\"><\n-00000380: 2f73 6372 6970 743e 0a3c 6c69 6e6b 2068 /script>...<\n-00000410: 7363 7269 7074 2074 7970 653d 2274 6578 script type=\"tex\n-00000420: 742f 6a61 7661 7363 7269 7074 2220 7372 t/javascript\" sr\n-00000430: 633d 2273 6561 7263 682f 7365 6172 6368 c=\"search/search\n-00000440: 2e6a 7322 3e3c 2f73 6372 6970 743e 0a3c .js\">.<\n-00000450: 6c69 6e6b 2068 7265 663d 2264 6f78 7967 link href=\"doxyg\n-00000460: 656e 2e63 7373 2220 7265 6c3d 2273 7479 en.css\" rel=\"sty\n-00000470: 6c65 7368 6565 7422 2074 7970 653d 2274 lesheet\" type=\"t\n-00000480: 6578 742f 6373 7322 202f 3e0a 3c6c 696e ext/css\" />....
    .\n-00000530: 0a3c 7461 626c 6520 6365 6c6c 7370 6163 .. . . . . . .
    <\n-00000590: 696d 6720 616c 743d 224c 6f67 6f22 2073 img alt=\"Logo\" s\n-000005a0: 7263 3d22 6f70 656e 7375 6264 6976 5f6c rc=\"opensubdiv_l\n-000005b0: 6f67 6f5f 6865 6164 6572 2e70 6e67 222f ogo_header.png\"/\n-000005c0: 3e3c 2f74 643e 0a20 203c 7464 2069 643d >.\n-000005e0: 2020 203c 6469 7620 6964 3d22 7072 6f6a
    OpenSub\n-00000600: 6469 760a 2020 203c 2f64 6976 3e0a 2020 div.
    . \n-00000610: 3c2f 7464 3e0a 203c 2f74 723e 0a20 3c2f
    .\n-00000630: 3c2f 6469 763e 0a3c 212d 2d20 656e 6420
    ..\n-00000650: 3c21 2d2d 2047 656e 6572 6174 6564 2062 .\n-00000750: 0a3c 7363 7269 7074 2074 7970 653d 2274 .......
    .\n-00000d00: 0a3c 212d 2d20 6966 7261 6d65 2073 686f ..\n-00000d40: 3c64 6976 2069 643d 224d 5365 6172 6368
    .\n-00000d60: 3c64 6976 2069 643d 224d 5365 6172 6368
    .
    .<\n-00000d90: 6469 7620 6964 3d22 5352 496e 6465 7822 div id=\"SRIndex\"\n-00000da0: 3e0a 3c64 6976 2069 643d 2253 5252 6573 >.
    .\n-00000de0: 4c6f 6164 696e 672e 2e2e 3c2f 6469 763e Loading...
    \n-00000df0: 0a3c 6469 7620 636c 6173 733d 2253 5253 .
    Searching.\n-00000e20: 2e2e 3c2f 6469 763e 0a3c 6469 7620 636c ..
    .
    No\n-00000e50: 204d 6174 6368 6573 3c2f 6469 763e 0a3c Matches
    .<\n-00000e60: 2f64 6976 3e0a 3c2f 6469 763e 0a3c 2f64 /div>.
    ..
    ..\n-00000e90: 0a20 203c 6469 7620 636c 6173 733d 2268 .
    o\n-00000ec0: 7074 696f 6e73 2e68 3c2f 6469 763e 3c2f ptions.h
    .
    .
    .\n-00000f00: 3c61 2068 7265 663d 2261 3030 3737 332e Go to the \n-00000f20: 646f 6375 6d65 6e74 6174 696f 6e20 6f66 documentation of\n-00000f30: 2074 6869 7320 6669 6c65 2e3c 2f61 3e3c this file.<\n-00000f40: 6469 7620 636c 6173 733d 2266 7261 676d div class=\"fragm\n-00000f50: 656e 7422 3e3c 6469 7620 636c 6173 733d ent\">
    \n-00000fa0: 2031 3c2f 7370 616e 3e3c 7370 616e 2063 1/\n-00000fc0: 2f3c 2f73 7061 6e3e 3c2f 6469 763e 0a3c /
    .<\n-00000fd0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00000fe0: 3e3c 6120 6964 3d22 6c30 3030 3032 2220 > 2// Co\n-00001040: 7079 7269 6768 7420 3230 3134 2044 7265 pyright 2014 Dre\n-00001050: 616d 576f 726b 7320 416e 696d 6174 696f amWorks Animatio\n-00001060: 6e20 4c4c 432e 3c2f 7370 616e 3e3c 2f64 n LLC..
    \n-000010c0: 333c 2f73 7061 6e3e 3c73 7061 6e20 636c 3//\n-000010e0: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
    .\n-00001100: 3c61 2069 643d 226c 3030 3030 3422 206e 4// Lic\n-00001160: 656e 7365 6420 756e 6465 7220 7468 6520 ensed under the \n-00001170: 4170 6163 6865 204c 6963 656e 7365 2c20 Apache License, \n-00001180: 5665 7273 696f 6e20 322e 3020 2874 6865 Version 2.0 (the\n-00001190: 2026 7175 6f74 3b41 7061 6368 6520 4c69 "Apache Li\n-000011a0: 6365 6e73 6526 7175 6f74 3b29 3c2f 7370 cense")
    .
    5// with th\n-00001230: 6520 666f 6c6c 6f77 696e 6720 6d6f 6469 e following modi\n-00001240: 6669 6361 7469 6f6e 3b20 796f 7520 6d61 fication; you ma\n-00001250: 7920 6e6f 7420 7573 6520 7468 6973 2066 y not use this f\n-00001260: 696c 6520 6578 6365 7074 2069 6e3c 2f73 ile except in
    .
    6<\n-000012d0: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-000012e0: 656e 7422 3e2f 2f20 2020 636f 6d70 6c69 ent\">// compli\n-000012f0: 616e 6365 2077 6974 6820 7468 6520 4170 ance with the Ap\n-00001300: 6163 6865 204c 6963 656e 7365 2061 6e64 ache License and\n-00001310: 2074 6865 2066 6f6c 6c6f 7769 6e67 206d the following m\n-00001320: 6f64 6966 6963 6174 696f 6e20 746f 2069 odification to i\n-00001330: 743a 3c2f 7370 616e 3e3c 2f64 6976 3e0a t:
    .\n-00001340: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 \n-000013f0: 0a3c 6469 7620 636c 6173 733d 226c 696e ..
    9<\n-000014c0: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-000014d0: 656e 7422 3e2f 2f20 2020 362e 2054 7261 ent\">// 6. Tra\n-000014e0: 6465 6d61 726b 732e 2054 6869 7320 4c69 demarks. This Li\n-000014f0: 6365 6e73 6520 646f 6573 206e 6f74 2067 cense does not g\n-00001500: 7261 6e74 2070 6572 6d69 7373 696f 6e20 rant permission \n-00001510: 746f 2075 7365 2074 6865 2074 7261 6465 to use the trade\n-00001520: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
    .\n-00001540: 3c61 2069 643d 226c 3030 3031 3022 206e 10// \n-000015a0: 6e61 6d65 732c 2074 7261 6465 6d61 726b names, trademark\n-000015b0: 732c 2073 6572 7669 6365 206d 6172 6b73 s, service marks\n-000015c0: 2c20 6f72 2070 726f 6475 6374 206e 616d , or product nam\n-000015d0: 6573 206f 6620 7468 6520 4c69 6365 6e73 es of the Licens\n-000015e0: 6f72 3c2f 7370 616e 3e3c 2f64 6976 3e0a or
    .\n-000015f0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
    <\n-00001620: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 11// \n-00001660: 2020 616e 6420 6974 7320 6166 6669 6c69 and its affili\n-00001670: 6174 6573 2c20 6578 6365 7074 2061 7320 ates, except as \n-00001680: 7265 7175 6972 6564 2074 6f20 636f 6d70 required to comp\n-00001690: 6c79 2077 6974 6820 5365 6374 696f 6e20 ly with Section \n-000016a0: 3428 6329 206f 663c 2f73 7061 6e3e 3c2f 4(c) of.
    \n-00001700: 3132 3c2f 7370 616e 3e3c 7370 616e 2063 12/\n-00001720: 2f20 2020 2020 2074 6865 204c 6963 656e / the Licen\n-00001730: 7365 2061 6e64 2074 6f20 7265 7072 6f64 se and to reprod\n-00001740: 7563 6520 7468 6520 636f 6e74 656e 7420 uce the content \n-00001750: 6f66 2074 6865 204e 4f54 4943 4520 6669 of the NOTICE fi\n-00001760: 6c65 2e3c 2f73 7061 6e3e 3c2f 6469 763e le.
    \n-00001770: 0a3c 6469 7620 636c 6173 733d 226c 696e ..
    14<\n-00001840: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-00001850: 656e 7422 3e2f 2f20 2020 596f 7520 6d61 ent\">// You ma\n-00001860: 7920 6f62 7461 696e 2061 2063 6f70 7920 y obtain a copy \n-00001870: 6f66 2074 6865 2041 7061 6368 6520 4c69 of the Apache Li\n-00001880: 6365 6e73 6520 6174 3c2f 7370 616e 3e3c cense at<\n-00001890: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n-000018e0: 2031 353c 2f73 7061 6e3e 3c73 7061 6e20 15\n-00001900: 2f2f 3c2f 7370 616e 3e3c 2f64 6976 3e0a //
    .\n-00001910: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
    17<\n-00001a10: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-00001a20: 656e 7422 3e2f 2f3c 2f73 7061 6e3e 3c2f ent\">//.
    \n-00001a80: 3138 3c2f 7370 616e 3e3c 7370 616e 2063 18/\n-00001aa0: 2f20 2020 556e 6c65 7373 2072 6571 7569 / Unless requi\n-00001ab0: 7265 6420 6279 2061 7070 6c69 6361 626c red by applicabl\n-00001ac0: 6520 6c61 7720 6f72 2061 6772 6565 6420 e law or agreed \n-00001ad0: 746f 2069 6e20 7772 6974 696e 672c 2073 to in writing, s\n-00001ae0: 6f66 7477 6172 653c 2f73 7061 6e3e 3c2f oftware.
    \n-00001b40: 3139 3c2f 7370 616e 3e3c 7370 616e 2063 19/\n-00001b60: 2f20 2020 6469 7374 7269 6275 7465 6420 / distributed \n-00001b70: 756e 6465 7220 7468 6520 4170 6163 6865 under the Apache\n-00001b80: 204c 6963 656e 7365 2077 6974 6820 7468 License with th\n-00001b90: 6520 6162 6f76 6520 6d6f 6469 6669 6361 e above modifica\n-00001ba0: 7469 6f6e 2069 733c 2f73 7061 6e3e 3c2f tion is.
    \n-00001c00: 3230 3c2f 7370 616e 3e3c 7370 616e 2063 20/\n-00001c20: 2f20 2020 6469 7374 7269 6275 7465 6420 / distributed \n-00001c30: 6f6e 2061 6e20 2671 756f 743b 4153 2049 on an "AS I\n-00001c40: 5326 7175 6f74 3b20 4241 5349 532c 2057 S" BASIS, W\n-00001c50: 4954 484f 5554 2057 4152 5241 4e54 4945 ITHOUT WARRANTIE\n-00001c60: 5320 4f52 2043 4f4e 4449 5449 4f4e 5320 S OR CONDITIONS \n-00001c70: 4f46 2041 4e59 3c2f 7370 616e 3e3c 2f64 OF ANY.
    2\n-00001cd0: 313c 2f73 7061 6e3e 3c73 7061 6e20 636c 1//\n-00001cf0: 2020 204b 494e 442c 2065 6974 6865 7220 KIND, either \n-00001d00: 6578 7072 6573 7320 6f72 2069 6d70 6c69 express or impli\n-00001d10: 6564 2e20 5365 6520 7468 6520 4170 6163 ed. See the Apac\n-00001d20: 6865 204c 6963 656e 7365 2066 6f72 2074 he License for t\n-00001d30: 6865 2073 7065 6369 6669 633c 2f73 7061 he specific
    .
    22// language\n-00001dc0: 2067 6f76 6572 6e69 6e67 2070 6572 6d69 governing permi\n-00001dd0: 7373 696f 6e73 2061 6e64 206c 696d 6974 ssions and limit\n-00001de0: 6174 696f 6e73 2075 6e64 6572 2074 6865 ations under the\n-00001df0: 2041 7061 6368 6520 4c69 6365 6e73 652e Apache License.\n-00001e00: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
    .\n-00001e20: 3c61 2069 643d 226c 3030 3032 3322 206e 23//
    .
    \n-00001ed0: 2020 2032 343c 2f73 7061 6e3e 3c73 7061 24#ifndef O\n-00001f00: 5045 4e53 5542 4449 5633 5f53 4443 5f4f PENSUBDIV3_SDC_O\n-00001f10: 5054 494f 4e53 5f48 3c2f 7370 616e 3e3c PTIONS_H<\n-00001f20: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n-00001f70: 2032 353c 2f73 7061 6e3e 3c73 7061 6e20 25#define OPE\n-00001fa0: 4e53 5542 4449 5633 5f53 4443 5f4f 5054 NSUBDIV3_SDC_OPT\n-00001fb0: 494f 4e53 5f48 3c2f 7370 616e 3e3c 2f64 IONS_H.
    2\n-00002010: 363c 2f73 7061 6e3e 203c 2f64 6976 3e0a 6
    .\n-00002020: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .\n-000020d0: 3c61 2069 643d 226c 3030 3032 3822 206e 28
    ..<\n-00002210: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00002220: 6e6f 223e 2020 2033 303c 2f73 7061 6e3e no\"> 30\n-00002230: 3c73 7061 6e20 636c 6173 733d 226b 6579 namespace \n-00002250: 3c2f 7370 616e 3e4f 5045 4e53 5542 4449 OPENSUBDI\n-00002260: 565f 5645 5253 494f 4e20 7b3c 2f64 6976 V_VERSION {.
    31<\n-000022c0: 2f73 7061 6e3e 203c 2f64 6976 3e0a 3c64 /span>
    .\n-000022e0: 3c61 2069 643d 226c 3030 3033 3222 206e 32namespac\n-00002340: 6520 3c2f 7370 616e 3e53 6463 207b 3c2f e Sdc {......\n+00000310: 3c73 6372 6970 7420 7479 7065 3d22 7465 .........
    .
    .\n+00000530: 3c74 6162 6c65 2063 656c 6c73 7061 6369 . \n+00000560: 0a20 3c74 7220 6964 3d22 7072 6f6a 6563 . . . . .
    \n+000005c0: 3c2f 7464 3e0a 2020 3c74 6420 6964 3d22 . \n+000005e0: 2020 3c64 6976 2069 643d 2270 726f 6a65
    OpenSubd\n+00000600: 6976 0a20 2020 3c2f 6469 763e 0a20 203c iv.
    . <\n+00000610: 2f74 643e 0a20 3c2f 7472 3e0a 203c 2f74 /td>.
    .<\n+00000630: 2f64 6976 3e0a 3c21 2d2d 2065 6e64 2068 /div>..<\n+00000650: 212d 2d20 4765 6e65 7261 7465 6420 6279 !-- Generated by\n+00000660: 2044 6f78 7967 656e 2031 2e39 2e38 202d Doxygen 1.9.8 -\n+00000670: 2d3e 0a3c 7363 7269 7074 2074 7970 653d ->..\n+00000750: 3c73 6372 6970 7420 7479 7065 3d22 7465 ...
    ...
    ..\n+00000d00: 3c21 2d2d 2069 6672 616d 6520 7368 6f77 .<\n+00000d40: 6469 7620 6964 3d22 4d53 6561 7263 6852 div id=\"MSearchR\n+00000d50: 6573 756c 7473 5769 6e64 6f77 223e 0a3c esultsWindow\">.<\n+00000d60: 6469 7620 6964 3d22 4d53 6561 7263 6852 div id=\"MSearchR\n+00000d70: 6573 756c 7473 223e 0a3c 6469 7620 636c esults\">.
    .\n+00000da0: 0a3c 6469 7620 6964 3d22 5352 5265 7375 .
    .L\n+00000de0: 6f61 6469 6e67 2e2e 2e3c 2f64 6976 3e0a oading...
    .\n+00000df0: 3c64 6976 2063 6c61 7373 3d22 5352 5374
    Searching..\n+00000e20: 2e3c 2f64 6976 3e0a 3c64 6976 2063 6c61 .
    .
    No \n+00000e50: 4d61 7463 6865 733c 2f64 6976 3e0a 3c2f Matches
    ..
    ..
    ..
    .\n+00000e90: 2020 3c64 6976 2063 6c61 7373 3d22 6865
    sc\n+00000ec0: 6865 6d65 2e68 3c2f 6469 763e 3c2f 6469 heme.h
    .
    .
    .Go to the do\n+00000f20: 6375 6d65 6e74 6174 696f 6e20 6f66 2074 cumentation of t\n+00000f30: 6869 7320 6669 6c65 2e3c 2f61 3e3c 6469 his file.
    1\n+00000fa0: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 //<\n+00000fc0: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
    .<\n+00000fe0: 6120 6964 3d22 6c30 3030 3032 2220 6e61 a id=\"l00002\" na\n+00000ff0: 6d65 3d22 6c30 3030 3032 223e 3c2f 613e me=\"l00002\">\n+00001000: 3c73 7061 6e20 636c 6173 733d 226c 696e 2// Copy\n+00001040: 7269 6768 7420 3230 3134 2044 7265 616d right 2014 Dream\n+00001050: 576f 726b 7320 416e 696d 6174 696f 6e20 Works Animation \n+00001060: 4c4c 432e 3c2f 7370 616e 3e3c 2f64 6976 LLC..
    3<\n+000010c0: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>//
    .<\n+00001120: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00001130: 6e6f 223e 2020 2020 343c 2f73 7061 6e3e no\"> 4
    \n+00001140: 3c73 7061 6e20 636c 6173 733d 2263 6f6d // Licen\n+00001160: 7365 6420 756e 6465 7220 7468 6520 4170 sed under the Ap\n+00001170: 6163 6865 204c 6963 656e 7365 2c20 5665 ache License, Ve\n+00001180: 7273 696f 6e20 322e 3020 2874 6865 2026 rsion 2.0 (the &\n+00001190: 7175 6f74 3b41 7061 6368 6520 4c69 6365 quot;Apache Lice\n+000011a0: 6e73 6526 7175 6f74 3b29 3c2f 7370 616e nse")
    .
    \n+00001200: 2020 2020 353c 2f73 7061 6e3e 3c73 7061 5// with the \n+00001230: 666f 6c6c 6f77 696e 6720 6d6f 6469 6669 following modifi\n+00001240: 6361 7469 6f6e 3b20 796f 7520 6d61 7920 cation; you may \n+00001250: 6e6f 7420 7573 6520 7468 6973 2066 696c not use this fil\n+00001260: 6520 6578 6365 7074 2069 6e3c 2f73 7061 e except in
    .
    6// complian\n+000012f0: 6365 2077 6974 6820 7468 6520 4170 6163 ce with the Apac\n+00001300: 6865 204c 6963 656e 7365 2061 6e64 2074 he License and t\n+00001310: 6865 2066 6f6c 6c6f 7769 6e67 206d 6f64 he following mod\n+00001320: 6966 6963 6174 696f 6e20 746f 2069 743a ification to it:\n+00001330: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
    .\n+00001350: 3c61 2069 643d 226c 3030 3030 3722 206e 7// Sec\n+000013b0: 7469 6f6e 2036 2e20 5472 6164 656d 6172 tion 6. Trademar\n+000013c0: 6b73 2e20 6973 2064 656c 6574 6564 2061 ks. is deleted a\n+000013d0: 6e64 2072 6570 6c61 6365 6420 7769 7468 nd replaced with\n+000013e0: 3a3c 2f73 7061 6e3e 3c2f 6469 763e 0a3c :
    .<\n+000013f0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00001400: 3e3c 6120 6964 3d22 6c30 3030 3038 2220 > 8//
    .
    9// 6. Trade\n+000014e0: 6d61 726b 732e 2054 6869 7320 4c69 6365 marks. This Lice\n+000014f0: 6e73 6520 646f 6573 206e 6f74 2067 7261 nse does not gra\n+00001500: 6e74 2070 6572 6d69 7373 696f 6e20 746f nt permission to\n+00001510: 2075 7365 2074 6865 2074 7261 6465 3c2f use the trade
    .<\n+00001560: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00001570: 6e6f 223e 2020 2031 303c 2f73 7061 6e3e no\"> 10\n+00001580: 3c73 7061 6e20 636c 6173 733d 2263 6f6d // na\n+000015a0: 6d65 732c 2074 7261 6465 6d61 726b 732c mes, trademarks,\n+000015b0: 2073 6572 7669 6365 206d 6172 6b73 2c20 service marks, \n+000015c0: 6f72 2070 726f 6475 6374 206e 616d 6573 or product names\n+000015d0: 206f 6620 7468 6520 4c69 6365 6e73 6f72 of the Licensor\n+000015e0: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
    .\n+00001600: 3c61 2069 643d 226c 3030 3031 3122 206e 11// \n+00001660: 616e 6420 6974 7320 6166 6669 6c69 6174 and its affiliat\n+00001670: 6573 2c20 6578 6365 7074 2061 7320 7265 es, except as re\n+00001680: 7175 6972 6564 2074 6f20 636f 6d70 6c79 quired to comply\n+00001690: 2077 6974 6820 5365 6374 696f 6e20 3428 with Section 4(\n+000016a0: 6329 206f 663c 2f73 7061 6e3e 3c2f 6469 c) of.
    12\n+00001700: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 // \n+00001720: 2020 2020 2074 6865 204c 6963 656e 7365 the License\n+00001730: 2061 6e64 2074 6f20 7265 7072 6f64 7563 and to reproduc\n+00001740: 6520 7468 6520 636f 6e74 656e 7420 6f66 e the content of\n+00001750: 2074 6865 204e 4f54 4943 4520 6669 6c65 the NOTICE file\n+00001760: 2e3c 2f73 7061 6e3e 3c2f 6469 763e 0a3c .
    .<\n+00001770: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00001780: 3e3c 6120 6964 3d22 6c30 3030 3133 2220 > 13//
    .
    14// You may \n+00001860: 6f62 7461 696e 2061 2063 6f70 7920 6f66 obtain a copy of\n+00001870: 2074 6865 2041 7061 6368 6520 4c69 6365 the Apache Lice\n+00001880: 6e73 6520 6174 3c2f 7370 616e 3e3c 2f64 nse at.
    1\n+000018e0: 353c 2f73 7061 6e3e 3c73 7061 6e20 636c 5//\n+00001900: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
    .\n+00001920: 3c61 2069 643d 226c 3030 3031 3622 206e 16// \n+00001980: 2068 7474 703a 2f2f 7777 772e 6170 6163 http://www.apac\n+00001990: 6865 2e6f 7267 2f6c 6963 656e 7365 732f he.org/licenses/\n+000019a0: 4c49 4345 4e53 452d 322e 303c 2f73 7061 LICENSE-2.0
    .
    17//.
    18\n+00001a80: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 // \n+00001aa0: 2020 556e 6c65 7373 2072 6571 7569 7265 Unless require\n+00001ab0: 6420 6279 2061 7070 6c69 6361 626c 6520 d by applicable \n+00001ac0: 6c61 7720 6f72 2061 6772 6565 6420 746f law or agreed to\n+00001ad0: 2069 6e20 7772 6974 696e 672c 2073 6f66 in writing, sof\n+00001ae0: 7477 6172 653c 2f73 7061 6e3e 3c2f 6469 tware.
    19\n+00001b40: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 // \n+00001b60: 2020 6469 7374 7269 6275 7465 6420 756e distributed un\n+00001b70: 6465 7220 7468 6520 4170 6163 6865 204c der the Apache L\n+00001b80: 6963 656e 7365 2077 6974 6820 7468 6520 icense with the \n+00001b90: 6162 6f76 6520 6d6f 6469 6669 6361 7469 above modificati\n+00001ba0: 6f6e 2069 733c 2f73 7061 6e3e 3c2f 6469 on is.
    20\n+00001c00: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 // \n+00001c20: 2020 6469 7374 7269 6275 7465 6420 6f6e distributed on\n+00001c30: 2061 6e20 2671 756f 743b 4153 2049 5326 an "AS IS&\n+00001c40: 7175 6f74 3b20 4241 5349 532c 2057 4954 quot; BASIS, WIT\n+00001c50: 484f 5554 2057 4152 5241 4e54 4945 5320 HOUT WARRANTIES \n+00001c60: 4f52 2043 4f4e 4449 5449 4f4e 5320 4f46 OR CONDITIONS OF\n+00001c70: 2041 4e59 3c2f 7370 616e 3e3c 2f64 6976 ANY.
    21<\n+00001cd0: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>// \n+00001cf0: 204b 494e 442c 2065 6974 6865 7220 6578 KIND, either ex\n+00001d00: 7072 6573 7320 6f72 2069 6d70 6c69 6564 press or implied\n+00001d10: 2e20 5365 6520 7468 6520 4170 6163 6865 . See the Apache\n+00001d20: 204c 6963 656e 7365 2066 6f72 2074 6865 License for the\n+00001d30: 2073 7065 6369 6669 633c 2f73 7061 6e3e specific\n+00001d40: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+00001d90: 2020 3232 3c2f 7370 616e 3e3c 7370 616e 22// language g\n+00001dc0: 6f76 6572 6e69 6e67 2070 6572 6d69 7373 overning permiss\n+00001dd0: 696f 6e73 2061 6e64 206c 696d 6974 6174 ions and limitat\n+00001de0: 696f 6e73 2075 6e64 6572 2074 6865 2041 ions under the A\n+00001df0: 7061 6368 6520 4c69 6365 6e73 652e 3c2f pache License.
    .<\n+00001e40: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00001e50: 6e6f 223e 2020 2032 333c 2f73 7061 6e3e no\"> 23\n+00001e60: 3c73 7061 6e20 636c 6173 733d 2263 6f6d //<\n+00001e80: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+00001ed0: 2032 343c 2f73 7061 6e3e 3c73 7061 6e20 24#ifndef OPE\n+00001f00: 4e53 5542 4449 5633 5f53 4443 5f53 4348 NSUBDIV3_SDC_SCH\n+00001f10: 454d 455f 483c 2f73 7061 6e3e 3c2f 6469 EME_H.
    25\n+00001f70: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 #define OPENSU\n+00001fa0: 4244 4956 335f 5344 435f 5343 4845 4d45 BDIV3_SDC_SCHEME\n+00001fb0: 5f48 3c2f 7370 616e 3e3c 2f64 6976 3e0a _H
    .\n+00001fc0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n+00002050: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00002060: 6e6f 223e 2020 2032 373c 2f73 7061 6e3e no\"> 27\n+00002070: 3c73 7061 6e20 636c 6173 733d 2270 7265 #incl\n+00002090: 7564 6520 2671 756f 743b 2e2e 2f76 6572 ude "../ver\n+000020a0: 7369 6f6e 2e68 2671 756f 743b 3c2f 7370 sion.h"
    .
    28 <\n+00002110: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+00002160: 2032 393c 2f73 7061 6e3e 3c73 7061 6e20 29#include &q\n+00002190: 756f 743b 2e2e 2f73 6463 2f74 7970 6573 uot;../sdc/types\n+000021a0: 2e68 2671 756f 743b 3c2f 7370 616e 3e3c .h"<\n+000021b0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+00002200: 2033 303c 2f73 7061 6e3e 3c73 7061 6e20 30#include &q\n+00002230: 756f 743b 2e2e 2f73 6463 2f6f 7074 696f uot;../sdc/optio\n+00002240: 6e73 2e68 2671 756f 743b 3c2f 7370 616e ns.h"
    .
    \n+000022a0: 2020 2033 313c 2f73 7061 6e3e 3c73 7061 31#include \n+000022d0: 2671 756f 743b 2e2e 2f73 6463 2f63 7265 "../sdc/cre\n+000022e0: 6173 652e 6826 7175 6f74 3b3c 2f73 7061 ase.h"
    .
    32 .
    \n-000023a0: 3333 3c2f 7370 616e 3e20 3c2f 6469 763e 33
    \n-000023b0: 0a3c 6469 7620 636c 6173 733d 226c 696e ...
    \n-000024c0: 2020 3531 3c2f 613e 3c2f 7370 616e 3e3c 51<\n-000024d0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-000024e0: 6f72 6422 3e63 6c61 7373 203c 2f73 7061 ord\">class Op\n-00002520: 7469 6f6e 733c 2f61 3e20 7b3c 2f64 6976 tions {.
    52<\n-00002580: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>publ\n-000025a0: 6963 3c2f 7370 616e 3e3a 3c2f 6469 763e ic:
    \n-000025b0: 0a3c 6469 7620 636c 6173 733d 2266 6f6c .
    .
    \n-00002640: 3c61 2063 6c61 7373 3d22 6c69 6e65 2220 53 e\n-000026b0: 6e75 6d3c 2f73 7061 6e3e 203c 6120 636c num V\n-00002710: 7478 426f 756e 6461 7279 496e 7465 7270 txBoundaryInterp\n-00002720: 6f6c 6174 696f 6e3c 2f61 3e20 7b3c 2f64 olation {.
    5\n-00002780: 343c 2f73 7061 6e3e 2020 2020 2020 2020 4 \n-00002790: 3c61 2063 6c61 7373 3d22 636f 6465 2068 VTX_BOUNDARY_\n-00002810: 4e4f 4e45 3c2f 613e 203d 2030 2c20 2020 NONE = 0, \n-00002820: 2020 2020 203c 2f64 6976 3e0a 3c64 6976
    .<\n-00002860: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00002870: 6e6f 223e 3c61 2063 6c61 7373 3d22 6c69 no\"> 56<\n-000028e0: 2f61 3e3c 2f73 7061 6e3e 2020 2020 2020 /a> \n-000028f0: 2020 3c61 2063 6c61 7373 3d22 636f 6465 VTX_BOUNDAR\n-00002970: 595f 4544 4745 5f4f 4e4c 593c 2f61 3e2c Y_EDGE_ONLY,\n-00002980: 2020 2020 2020 203c 2f64 6976 3e0a 3c64
    .\n-000029a0: 3c61 2069 643d 226c 3030 3035 3722 206e 57 VTX\n-00002a60: 5f42 4f55 4e44 4152 595f 4544 4745 5f41 _BOUNDARY_EDGE_A\n-00002a70: 4e44 5f43 4f52 4e45 523c 2f61 3e20 203c ND_CORNER <\n-00002a80: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    59 };
    \n-00002b50: 0a3c 2f64 6976 3e0a 3c64 6976 2063 6c61 .
    .
    .<\n-00002ba0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00002bb0: 3e3c 6120 6964 3d22 6c30 3030 3630 2220 > 6\n-00002c30: 303c 2f61 3e3c 2f73 7061 6e3e 2020 2020 0 \n-00002c40: 3c73 7061 6e20 636c 6173 733d 226b 6579 enum FVarLinear\n-00002cc0: 496e 7465 7270 6f6c 6174 696f 6e3c 2f61 Interpolation {
    ..<\n-00002e70: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00002e80: 6e6f 223e 3c61 2063 6c61 7373 3d22 6c69 no\"> 62<\n-00002ef0: 2f61 3e3c 2f73 7061 6e3e 2020 2020 2020 /a> \n-00002f00: 2020 3c61 2063 6c61 7373 3d22 636f 6465 FVAR_LINEAR\n-00002f80: 5f43 4f52 4e45 5253 5f4f 4e4c 593c 2f61 _CORNERS_ONLY,
    .\n-00002fb0: 3c61 2069 643d 226c 3030 3036 3322 206e 6\n-00003050: 333c 2f61 3e3c 2f73 7061 6e3e 2020 2020 3 \n-00003060: 2020 2020 3c61 2063 6c61 7373 3d22 636f FVAR_LINE\n-000030e0: 4152 5f43 4f52 4e45 5253 5f50 4c55 5331 AR_CORNERS_PLUS1\n-000030f0: 3c2f 613e 2c20 2020 203c 2f64 6976 3e0a ,
    .\n-00003100: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 ..
    68 enum\n-00003690: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 Crea\n-000036f0: 7369 6e67 4d65 7468 6f64 3c2f 613e 207b singMethod {\n-00003700: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    <\n-00003750: 6120 636c 6173 733d 226c 696e 6522 2068 a class=\"line\" h\n-00003760: 7265 663d 2261 3031 3332 392e 6874 6d6c ref=\"a01329.html\n-00003770: 2361 3136 6563 3532 3264 6330 3339 3862 #a16ec522dc0398b\n-00003780: 6631 3433 3561 3931 3263 6436 3639 6666 f1435a912cd669ff\n-00003790: 6230 6131 3066 3239 3536 6462 3438 6432 b0a10f2956db48d2\n-000037a0: 3937 3534 3234 6265 3265 3532 6562 6435 975424be2e52ebd5\n-000037b0: 3434 6422 3e20 2020 3639 3c2f 613e 3c2f 44d\"> 69 \n-00003840: 4352 4541 5345 5f55 4e49 464f 524d 3c2f CREASE_UNIFORM = 0, \n-00003860: 2020 3c2f 6469 763e 0a3c 6469 7620 636c
    .
    70 \n-000038c0: 2020 2020 203c 6120 636c 6173 733d 2263 CREASE_C\n-00003940: 4841 494b 494e 3c2f 613e 2020 2020 2020 HAIKIN \n-00003950: 2020 2020 2020 2020 2020 3c2f 6469 763e
    \n-00003960: 0a3c 6469 7620 636c 6173 733d 226c 696e ...
    .
    72\n-00003b10: 3c2f 7370 616e 3e20 2020 203c 7370 616e enum TriangleSubdivi\n-00003ba0: 7369 6f6e 3c2f 613e 207b 3c2f 6469 763e sion {
    \n-00003bb0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n-00003be0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d \n-00003c60: 2020 3733 3c2f 613e 3c2f 7370 616e 3e20 73 \n-00003c70: 2020 2020 2020 203c 6120 636c 6173 733d TRI_SU\n-00003cf0: 425f 4341 544d 4152 4b3c 2f61 3e20 3d20 B_CATMARK = \n-00003d00: 302c 2020 2020 2020 2020 2020 3c2f 6469 0, .
    74\n-00003d60: 3c2f 7370 616e 3e20 2020 2020 2020 203c <\n-00003d70: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-00003d80: 5f65 6e75 6d76 616c 7565 2220 6872 6566 _enumvalue\" href\n-00003d90: 3d22 6130 3133 3239 2e68 746d 6c23 6131 =\"a01329.html#a1\n-00003da0: 3066 6538 6332 6237 3865 3563 3539 3337 0fe8c2b78e5c5937\n-00003db0: 3736 3134 3837 3661 3336 3263 3338 6261 7614876a362c38ba\n-00003dc0: 6632 3232 6561 6435 6661 3438 3735 6632 f222ead5fa4875f2\n-00003dd0: 6561 3237 3934 6332 6437 3635 6138 3764 ea2794c2d765a87d\n-00003de0: 223e 5452 495f 5355 425f 534d 4f4f 5448 \">TRI_SUB_SMOOTH\n-00003df0: 3c2f 613e 2020 2020 2020 2020 2020 2020 \n-00003e00: 2020 2020 3c2f 6469 763e 0a3c 6469 7620
    ..<\n-00003ef0: 6120 6964 3d22 6c30 3030 3736 2220 6e61 a id=\"l00076\" na\n-00003f00: 6d65 3d22 6c30 3030 3736 223e 3c2f 613e me=\"l00076\">\n-00003f10: 3c73 7061 6e20 636c 6173 733d 226c 696e 76
    .
    77public\n-00003fb0: 3a3c 2f64 6976 3e0a 3c64 6976 2063 6c61 :
    .
    \n-00004000: 2020 2037 383c 2f73 7061 6e3e 203c 2f64 78 .
    .
    79\n-000040f0: 3c2f 7370 616e 3e20 2020 203c 6120 636c Opti\n-00004150: 6f6e 733c 2f61 3e28 2920 3a20 5f76 7478 ons() : _vtx\n-00004160: 426f 756e 6449 6e74 6572 7028 3c61 2063 BoundInterp(V\n-000041e0: 5458 5f42 4f55 4e44 4152 595f 4e4f 4e45 TX_BOUNDARY_NONE\n-000041f0: 3c2f 613e 292c 3c2f 6469 763e 0a3c 6469 ),
    .<\n-00004210: 6120 6964 3d22 6c30 3030 3830 2220 6e61 a id=\"l00080\" na\n-00004220: 6d65 3d22 6c30 3030 3830 223e 3c2f 613e me=\"l00080\">\n-00004230: 3c73 7061 6e20 636c 6173 733d 226c 696e 80 \n-00004260: 205f 6676 6172 4c69 6e49 6e74 6572 7028 _fvarLinInterp(\n-00004270: 3c61 2063 6c61 7373 3d22 636f 6465 2068 FVAR_LINEAR_A\n-000042f0: 4c4c 3c2f 613e 292c 3c2f 6469 763e 0a3c LL),
    .<\n-00004300: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00004310: 3e3c 6120 6964 3d22 6c30 3030 3831 2220 > 81 \n-00004360: 2020 205f 6372 6561 7369 6e67 4d65 7468 _creasingMeth\n-00004370: 6f64 283c 6120 636c 6173 733d 2263 6f64 od(CREASE_UNI\n-000043f0: 464f 524d 3c2f 613e 292c 3c2f 6469 763e FORM),
    \n-00004400: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n-00004430: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 82 \n-00004460: 2020 2020 205f 7472 6961 6e67 6c65 5375 _triangleSu\n-00004470: 6228 3c61 2063 6c61 7373 3d22 636f 6465 b(TRI_SUB_CAT\n-000044f0: 4d41 524b 3c2f 613e 2920 7b20 7d3c 2f64 MARK) { }.
    .
    83 \n-00004560: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n-000045b0: 2020 3834 3c2f 7370 616e 3e20 2020 203c 84 <\n-000045c0: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-000045d0: 656e 7422 3e2f 2f3c 2f73 7061 6e3e 3c2f ent\">//.
    \n-00004630: 3835 3c2f 7370 616e 3e20 2020 203c 7370 85 // Trivial g\n-00004660: 6574 2f73 6574 206d 6574 686f 6473 3a3c et/set methods:<\n-00004670: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
    .<\n-00004690: 6120 6964 3d22 6c30 3030 3836 2220 6e61 a id=\"l00086\" na\n-000046a0: 6d65 3d22 6c30 3030 3836 223e 3c2f 613e me=\"l00086\">\n-000046b0: 3c73 7061 6e20 636c 6173 733d 226c 696e 86 //
    .
    87 \n-00004750: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    <\n-000047a0: 6120 636c 6173 733d 226c 696e 6522 2068 a class=\"line\" h\n-000047b0: 7265 663d 2261 3031 3332 392e 6874 6d6c ref=\"a01329.html\n-000047c0: 2361 3539 3033 3338 6565 3862 3534 3433 #a590338ee8b5443\n-000047d0: 3036 6239 3730 6130 6331 3434 3563 6430 06b970a0c1445cd0\n-000047e0: 3166 223e 2020 2038 393c 2f61 3e3c 2f73 1f\"> 89 VtxB\n-00004850: 6f75 6e64 6172 7949 6e74 6572 706f 6c61 oundaryInterpola\n-00004860: 7469 6f6e 3c2f 613e 203c 6120 636c 6173 tion GetVtx\n-000048c0: 426f 756e 6461 7279 496e 7465 7270 6f6c BoundaryInterpol\n-000048d0: 6174 696f 6e3c 2f61 3e28 293c 7370 616e ation() const {\n-00004900: 203c 7370 616e 2063 6c61 7373 3d22 6b65 retur\n-00004920: 6e3c 2f73 7061 6e3e 2028 3c61 2063 6c61 n (Vt\n-00004980: 7842 6f75 6e64 6172 7949 6e74 6572 706f xBoundaryInterpo\n-00004990: 6c61 7469 6f6e 3c2f 613e 2920 5f76 7478 lation) _vtx\n-000049a0: 426f 756e 6449 6e74 6572 703b 207d 3c2f BoundInterp; }.
    \n-00004a00: 3930 3c2f 7370 616e 3e20 3c2f 6469 763e 90
    \n-00004a10: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n-00004a40: 3c2f 613e 3c73 7061 6e20 636c 6173 733d \n-00004aa0: 2039 323c 2f61 3e3c 2f73 7061 6e3e 2020 92 \n-00004ab0: 2020 3c73 7061 6e20 636c 6173 733d 226b void\n-00004ad0: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 SetVtxB\n-00004b30: 6f75 6e64 6172 7949 6e74 6572 706f 6c61 oundaryInterpola\n-00004b40: 7469 6f6e 3c2f 613e 283c 6120 636c 6173 tion(Vtx\n-00004ba0: 426f 756e 6461 7279 496e 7465 7270 6f6c BoundaryInterpol\n-00004bb0: 6174 696f 6e3c 2f61 3e20 6229 207b 205f ation b) { _\n-00004bc0: 7674 7842 6f75 6e64 496e 7465 7270 203d vtxBoundInterp =\n-00004bd0: 2028 456e 756d 496e 7454 7970 6529 2062 (EnumIntType) b\n-00004be0: 3b20 7d3c 2f64 6976 3e0a 3c64 6976 2063 ; }
    .
    93 <\n-00004c40: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>..\n-00004ea0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n-00004f30: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00004f40: 6e6f 223e 3c61 2063 6c61 7373 3d22 6c69 no\"> 98 void SetFVarLinea\n-00005020: 7249 6e74 6572 706f 6c61 7469 6f6e 3c2f rInterpolation(FVarLinea\n-00005090: 7249 6e74 6572 706f 6c61 7469 6f6e 3c2f rInterpolation b) { _fvarLin\n-000050b0: 496e 7465 7270 203d 2028 456e 756d 496e Interp = (EnumIn\n-000050c0: 7454 7970 6529 2062 3b20 7d3c 2f64 6976 tType) b; }.
    99<\n-00005120: 2f73 7061 6e3e 203c 2f64 6976 3e0a 3c64 /span>
    .\n-00005140: 3c61 2069 643d 226c 3030 3130 3122 206e 101\n-000051c0: 3c2f 613e 3c2f 7370 616e 3e20 2020 203c <\n-000051d0: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-000051e0: 5f65 6e75 6d65 7261 7469 6f6e 2220 6872 _enumeration\" hr\n-000051f0: 6566 3d22 6130 3133 3239 2e68 746d 6c23 ef=\"a01329.html#\n-00005200: 6131 3665 6335 3232 6463 3033 3938 6266 a16ec522dc0398bf\n-00005210: 3134 3335 6139 3132 6364 3636 3966 6662 1435a912cd669ffb\n-00005220: 3022 3e43 7265 6173 696e 674d 6574 686f 0\">CreasingMetho\n-00005230: 643c 2f61 3e20 3c61 2063 6c61 7373 3d22 d GetCreasi\n-00005290: 6e67 4d65 7468 6f64 3c2f 613e 2829 3c73 ngMethod() const { re\n-000052e0: 7475 726e 3c2f 7370 616e 3e20 283c 6120 turn (CreasingMethod<\n-00005350: 2f61 3e29 205f 6372 6561 7369 6e67 4d65 /a>) _creasingMe\n-00005360: 7468 6f64 3b20 7d3c 2f64 6976 3e0a 3c64 thod; }
    .\n-00005380: 3c61 2069 643d 226c 3030 3130 3222 206e 102
    .
    104\n-00005460: 3c2f 7370 616e 3e20 2020 203c 7370 616e void\n-00005490: 203c 6120 636c 6173 733d 2263 6f64 6520 SetCreasingMet\n-000054f0: 686f 643c 2f61 3e28 3c61 2063 6c61 7373 hod(Crea\n-00005550: 7369 6e67 4d65 7468 6f64 3c2f 613e 2063 singMethod c\n-00005560: 2920 7b20 5f63 7265 6173 696e 674d 6574 ) { _creasingMet\n-00005570: 686f 6420 3d20 2845 6e75 6d49 6e74 5479 hod = (EnumIntTy\n-00005580: 7065 2920 633b 207d 3c2f 6469 763e 0a3c pe) c; }
    .<\n-00005590: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-000055a0: 3e3c 6120 6964 3d22 6c30 3031 3035 2220 > 105
    ...
    112<\n-00005b10: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00005b20: 6f72 6422 3e70 7269 7661 7465 3c2f 7370 ord\">private:
    .
    113 \n-00005b90: 2020 203c 7370 616e 2063 6c61 7373 3d22 // Use\n-00005bb0: 2061 2073 6d61 6c6c 2069 6e74 6567 6572 a small integer\n-00005bc0: 2074 7970 6520 746f 2070 6163 6b20 7468 type to pack th\n-00005bd0: 6573 6520 7261 7468 6572 2074 6861 6e20 ese rather than \n-00005be0: 6269 7466 6965 6c64 733a 3c2f 7370 616e bitfields:
    .
    \n-00005c40: 2020 3131 343c 2f73 7061 6e3e 2020 2020 114 \n-00005c50: 3c73 7061 6e20 636c 6173 733d 226b 6579 typedef u\n-00005c90: 6e73 6967 6e65 643c 2f73 7061 6e3e 203c nsigned <\n-00005ca0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00005cb0: 6f72 6474 7970 6522 3e63 6861 723c 2f73 ordtype\">char EnumIntType\n-00005cd0: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
    .
    \n-00005d20: 2020 3131 353c 2f73 7061 6e3e 203c 2f64 115 .
    11\n-00005d80: 363c 2f73 7061 6e3e 2020 2020 456e 756d 6 Enum\n-00005d90: 496e 7454 7970 6520 5f76 7478 426f 756e IntType _vtxBoun\n-00005da0: 6449 6e74 6572 703b 3c2f 6469 763e 0a3c dInterp;
    .<\n-00005db0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00005dc0: 3e3c 6120 6964 3d22 6c30 3031 3137 2220 > 117 EnumIntTy\n-00005e10: 7065 205f 6676 6172 4c69 6e49 6e74 6572 pe _fvarLinInter\n-00005e20: 703b 3c2f 6469 763e 0a3c 6469 7620 636c p;
    .
    118 \n-00005e80: 2045 6e75 6d49 6e74 5479 7065 205f 6372 EnumIntType _cr\n-00005e90: 6561 7369 6e67 4d65 7468 6f64 3b3c 2f64 easingMethod;.
    11\n-00005ef0: 393c 2f73 7061 6e3e 2020 2020 456e 756d 9 Enum\n-00005f00: 496e 7454 7970 6520 5f74 7269 616e 676c IntType _triangl\n-00005f10: 6553 7562 3b3c 2f64 6976 3e0a 3c64 6976 eSub;
    .<\n-00005f50: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00005f60: 6e6f 223e 2020 3132 303c 2f73 7061 6e3e no\"> 120\n-00005f70: 7d3b 3c2f 6469 763e 0a3c 2f64 6976 3e0a };
    .
    .\n-00005f80: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n-00006010: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00006020: 6e6f 223e 2020 3132 323c 2f73 7061 6e3e no\"> 122\n-00006030: 7d20 3c73 7061 6e20 636c 6173 733d 2263 } // end n\n-00006050: 616d 6573 7061 6365 2073 6463 3c2f 7370 amespace sdc
    .
    123 <\n-000060c0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n-00006110: 3132 343c 2f73 7061 6e3e 7d20 3c73 7061 124} // end namespa\n-00006140: 6365 204f 5045 4e53 5542 4449 565f 5645 ce OPENSUBDIV_VE\n-00006150: 5253 494f 4e3c 2f73 7061 6e3e 3c2f 6469 RSION.
    125\n-000061b0: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 usi\n-000061d0: 6e67 206e 616d 6573 7061 6365 203c 2f73 ng namespace OPENSUBDIV_V\n-000061f0: 4552 5349 4f4e 3b3c 2f64 6976 3e0a 3c64 ERSION;
    .\n-00006210: 3c61 2069 643d 226c 3030 3132 3622 206e 126} // end\n-00006270: 206e 616d 6573 7061 6365 204f 7065 6e53 namespace OpenS\n-00006280: 7562 6469 763c 2f73 7061 6e3e 3c2f 6469 ubdiv.
    127\n-000062e0: 3c2f 7370 616e 3e20 3c2f 6469 763e 0a3c
    .<\n-000062f0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00006300: 3e3c 6120 6964 3d22 6c30 3031 3238 2220 > 128#e\n-00006360: 6e64 6966 203c 2f73 7061 6e3e 3c73 7061 ndif /* OPENSUBDIV3\n-00006390: 5f53 4443 5f4f 5054 494f 4e53 5f48 202a _SDC_OPTIONS_H *\n-000063a0: 2f3c 2f73 7061 6e3e 3c73 7061 6e20 636c /
    \n-000063d0: 0a3c 6469 7620 636c 6173 733d 2274 7463 .
    Op\n-00006420: 656e 5375 6264 6976 3c2f 613e 3c2f 6469 enSubdiv
    Definiti\n-00006450: 6f6e 3c2f 623e 203c 6120 6872 6566 3d22 on limit\n-00006480: 732e 683a 3332 3c2f 613e 3c2f 6469 763e s.h:32
    \n-00006490: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    OpenSubdiv::\n-000064f0: 4f50 454e 5355 4244 4956 5f56 4552 5349 OPENSUBDIV_VERSI\n-00006500: 4f4e 3a3a 5364 633a 3a4f 7074 696f 6e73 ON::Sdc::Options\n-00006510: 3c2f 613e 3c2f 6469 763e 3c64 6976 2063
    All\n-00006530: 2073 7570 706f 7274 6564 206f 7074 696f supported optio\n-00006540: 6e73 2061 7070 6c79 696e 6720 746f 2073 ns applying to s\n-00006550: 7562 6469 7669 7369 6f6e 2073 6368 656d ubdivision schem\n-00006560: 652e 3c2f 6469 763e 3c64 6976 2063 6c61 e.
    De\n-00006580: 6669 6e69 7469 6f6e 3c2f 623e 203c 6120 finition options.h:51
    .
    Tr\n-000066c0: 6961 6e67 6c65 5375 6264 6976 6973 696f iangleSubdivisio\n-000066d0: 6e3c 2f64 6976 3e3c 6469 7620 636c 6173 n
    Def\n-000066f0: 696e 6974 696f 6e3c 2f62 3e20 3c61 2068 inition \n-00006720: 6f70 7469 6f6e 732e 683a 3732 3c2f 613e options.h:72\n-00006730: 3c2f 6469 763e 3c2f 6469 763e 0a3c 6469
    .
    @ TRI\n-00006870: 5f53 5542 5f43 4154 4d41 524b 3c2f 6469 _SUB_CATMARK
    Catmark wei\n-000068a0: 6768 7473 2028 4361 746d 6172 6b20 7363 ghts (Catmark sc\n-000068b0: 6865 6d65 206f 6e6c 7929 3c2f 6469 763e heme only)
    \n-000068c0: 3c64 6976 2063 6c61 7373 3d22 7474 6465
    <\n-00006920: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.<\n-00006a40: 6469 7620 636c 6173 733d 2274 7464 6563 div class=\"ttdec\n-00006a50: 6922 3e40 2054 5249 5f53 5542 5f53 4d4f i\">@ TRI_SUB_SMO\n-00006a60: 4f54 483c 2f64 6976 3e3c 6469 7620 636c OTH
    &quo\n-00006a80: 743b 736d 6f6f 7468 2074 7269 616e 676c t;smooth triangl\n-00006a90: 6526 7175 6f74 3b20 7765 6967 6874 7320 e" weights \n-00006aa0: 2843 6174 6d61 726b 2073 6368 656d 6520 (Catmark scheme \n-00006ab0: 6f6e 6c79 293c 2f64 6976 3e3c 6469 7620 only)
    Definition \n-00006ae0: 3c61 2068 7265 663d 2261 3030 3737 335f options.h:74\n-00006b10: 3c2f 613e 3c2f 6469 763e 3c2f 6469 763e
    \n-00006b20: 0a3c 6469 7620 636c 6173 733d 2274 7463 .
    Catm\n-00006de0: 6172 6b20 7275 6c65 2e3c 2f64 6976 3e3c ark rule.
    <\n-00006df0: 6469 7620 636c 6173 733d 2274 7464 6566 div class=\"ttdef\n-00006e00: 223e 3c62 3e44 6566 696e 6974 696f 6e3c \">Definition<\n-00006e10: 2f62 3e20 3c61 2068 7265 663d 2261 3030 /b> options.\n-00006e40: 683a 3639 3c2f 613e 3c2f 6469 763e 3c2f h:69
    .
    <\n-00006ed0: 6120 6872 6566 3d22 6130 3133 3239 2e68 a href=\"a01329.h\n-00006ee0: 746d 6c23 6131 3665 6335 3232 6463 3033 tml#a16ec522dc03\n-00006ef0: 3938 6266 3134 3335 6139 3132 6364 3636 98bf1435a912cd66\n-00006f00: 3966 6662 3061 3165 3331 6135 3833 3636 9ffb0a1e31a58366\n-00006f10: 3364 6436 3561 3762 3266 6566 6665 6232 3dd65a7b2feffeb2\n-00006f20: 3432 3638 6235 223e 4f70 656e 5375 6264 4268b5\">OpenSubd\n-00006f30: 6976 3a3a 4f50 454e 5355 4244 4956 5f56 iv::OPENSUBDIV_V\n-00006f40: 4552 5349 4f4e 3a3a 5364 633a 3a4f 7074 ERSION::Sdc::Opt\n-00006f50: 696f 6e73 3a3a 4352 4541 5345 5f43 4841 ions::CREASE_CHA\n-00006f60: 494b 494e 3c2f 613e 3c2f 6469 763e 3c64 IKIN
    @ CREASE_CHAIK\n-00006f90: 494e 3c2f 6469 763e 3c64 6976 2063 6c61 IN
    Chaik\n-00006fb0: 696e 2072 756c 652e 3c2f 6469 763e 3c64 in rule.
    Definition options.h\n-00007010: 3a37 303c 2f61 3e3c 2f64 6976 3e3c 2f64 :70
    .
    OpenSubdiv:\n-000070c0: 3a4f 5045 4e53 5542 4449 565f 5645 5253 :OPENSUBDIV_VERS\n-000070d0: 494f 4e3a 3a53 6463 3a3a 4f70 7469 6f6e ION::Sdc::Option\n-000070e0: 733a 3a47 6574 5472 6961 6e67 6c65 5375 s::GetTriangleSu\n-000070f0: 6264 6976 6973 696f 6e3c 2f61 3e3c 2f64 bdivision
    TriangleS\n-00007120: 7562 6469 7669 7369 6f6e 2047 6574 5472 ubdivision GetTr\n-00007130: 6961 6e67 6c65 5375 6264 6976 6973 696f iangleSubdivisio\n-00007140: 6e28 2920 636f 6e73 743c 2f64 6976 3e3c n() const
    <\n-00007150: 6469 7620 636c 6173 733d 2274 7464 6f63 div class=\"ttdoc\n-00007160: 223e 4765 7420 7472 6961 6e67 6c65 2073 \">Get triangle s\n-00007170: 7562 6469 7669 7369 6f6e 2077 6569 6768 ubdivision weigh\n-00007180: 7473 2072 756c 6520 2843 6174 6d61 726b ts rule (Catmark\n-00007190: 2073 6368 656d 6520 6f6e 6c79 2021 293c scheme only !)<\n-000071a0: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
    Defin\n-000071c0: 6974 696f 6e3c 2f62 3e20 3c61 2068 7265 ition op\n-000071f0: 7469 6f6e 732e 683a 3130 373c 2f61 3e3c tions.h:107<\n-00007200: 2f64 6976 3e3c 2f64 6976 3e0a 3c64 6976 /div>
    .
    Creasi\n-00007300: 6e67 4d65 7468 6f64 2047 6574 4372 6561 ngMethod GetCrea\n-00007310: 7369 6e67 4d65 7468 6f64 2829 2063 6f6e singMethod() con\n-00007320: 7374 3c2f 6469 763e 3c64 6976 2063 6c61 st
    Get e\n-00007340: 6467 6520 6372 6561 7365 2072 756c 652e dge crease rule.\n-00007350: 3c2f 6469 763e 3c64 6976 2063 6c61 7373
    Defi\n-00007370: 6e69 7469 6f6e 3c2f 623e 203c 6120 6872 nition o\n-000073a0: 7074 696f 6e73 2e68 3a31 3031 3c2f 613e ptions.h:101\n-000073b0: 3c2f 6469 763e 3c2f 6469 763e 0a3c 6469
    .Options()
    \n-000074b0: 3c64 6976 2063 6c61 7373 3d22 7474 6465
    Definition\n-000074d0: 3c2f 623e 203c 6120 6872 6566 3d22 6130 options\n-00007500: 2e68 3a37 393c 2f61 3e3c 2f64 6976 3e3c .h:79
    <\n-00007510: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    <\n-00007570: 6120 6872 6566 3d22 6130 3133 3239 2e68 a href=\"a01329.h\n-00007580: 746d 6c23 6132 6233 3335 6562 3232 3731 tml#a2b335eb2271\n-00007590: 3934 6234 6663 3666 6365 6337 6633 6334 94b4fc6fcec7f3c4\n-000075a0: 6232 3563 6522 3e4f 7065 6e53 7562 6469 b25ce\">OpenSubdi\n-000075b0: 763a 3a4f 5045 4e53 5542 4449 565f 5645 v::OPENSUBDIV_VE\n-000075c0: 5253 494f 4e3a 3a53 6463 3a3a 4f70 7469 RSION::Sdc::Opti\n-000075d0: 6f6e 733a 3a53 6574 4656 6172 4c69 6e65 ons::SetFVarLine\n-000075e0: 6172 496e 7465 7270 6f6c 6174 696f 6e3c arInterpolation<\n-000075f0: 2f61 3e3c 2f64 6976 3e3c 6469 7620 636c /a>
    voi\n-00007610: 6420 5365 7446 5661 724c 696e 6561 7249 d SetFVarLinearI\n-00007620: 6e74 6572 706f 6c61 7469 6f6e 2846 5661 nterpolation(FVa\n-00007630: 724c 696e 6561 7249 6e74 6572 706f 6c61 rLinearInterpola\n-00007640: 7469 6f6e 2062 293c 2f64 6976 3e3c 6469 tion b)
    \n-00007660: 5365 7420 6661 6365 2d76 6172 7969 6e67 Set face-varying\n-00007670: 2069 6e74 6572 706f 6c61 7469 6f6e 2072 interpolation r\n-00007680: 756c 652e 3c2f 6469 763e 3c64 6976 2063 ule.
    \n-000076a0: 4465 6669 6e69 7469 6f6e 3c2f 623e 203c Definition <\n-000076b0: 6120 6872 6566 3d22 6130 3037 3733 5f73 a href=\"a00773_s\n-000076c0: 6f75 7263 652e 6874 6d6c 236c 3030 3039 ource.html#l0009\n-000076d0: 3822 3e6f 7074 696f 6e73 2e68 3a39 383c 8\">options.h:98<\n-000076e0: 2f61 3e3c 2f64 6976 3e3c 2f64 6976 3e0a /a>
    .\n-000076f0: 3c64 6976 2063 6c61 7373 3d22 7474 6322
    <\n-000077d0: 6469 7620 636c 6173 733d 2274 7464 6563 div class=\"ttdec\n-000077e0: 6922 3e76 6f69 6420 5365 7454 7269 616e i\">void SetTrian\n-000077f0: 676c 6553 7562 6469 7669 7369 6f6e 2854 gleSubdivision(T\n-00007800: 7269 616e 676c 6553 7562 6469 7669 7369 riangleSubdivisi\n-00007810: 6f6e 2074 293c 2f64 6976 3e3c 6469 7620 on t)
    Se\n-00007830: 7420 7472 6961 6e67 6c65 2073 7562 6469 t triangle subdi\n-00007840: 7669 7369 6f6e 2077 6569 6768 7473 2072 vision weights r\n-00007850: 756c 6520 2843 6174 6d61 726b 2073 6368 ule (Catmark sch\n-00007860: 656d 6520 6f6e 6c79 2021 293c 2f64 6976 eme only !)
    Definitio\n-00007890: 6e3c 2f62 3e20 3c61 2068 7265 663d 2261 n option\n-000078c0: 732e 683a 3131 303c 2f61 3e3c 2f64 6976 s.h:110
    .\n-000079d0: 5674 7842 6f75 6e64 6172 7949 6e74 6572 VtxBoundaryInter\n-000079e0: 706f 6c61 7469 6f6e 2047 6574 5674 7842 polation GetVtxB\n-000079f0: 6f75 6e64 6172 7949 6e74 6572 706f 6c61 oundaryInterpola\n-00007a00: 7469 6f6e 2829 2063 6f6e 7374 3c2f 6469 tion() const.<\n-00007c30: 6469 7620 636c 6173 733d 2274 7463 2220 div class=\"ttc\" \n-00007c40: 6964 3d22 6161 3031 3332 395f 6874 6d6c id=\"aa01329_html\n-00007c50: 5f61 3562 3837 6561 6361 3663 6130 3833 _a5b87eaca6ca083\n-00007c60: 3334 3632 6339 6434 6164 3834 6466 3136 3462c9d4ad84df16\n-00007c70: 3762 6132 6430 6564 6234 6464 3130 6533 7ba2d0edb4dd10e3\n-00007c80: 3535 6638 3038 3962 3461 3761 6231 6431 55f8089b4a7ab1d1\n-00007c90: 6437 3222 3e3c 6469 7620 636c 6173 733d d72\">
    OpenSubdiv::OP\n-00007d10: 454e 5355 4244 4956 5f56 4552 5349 4f4e ENSUBDIV_VERSION\n-00007d20: 3a3a 5364 633a 3a4f 7074 696f 6e73 3a3a ::Sdc::Options::\n-00007d30: 4656 4152 5f4c 494e 4541 525f 434f 524e FVAR_LINEAR_CORN\n-00007d40: 4552 535f 4f4e 4c59 3c2f 613e 3c2f 6469 ERS_ONLY
    @ FVAR_LIN\n-00007d70: 4541 525f 434f 524e 4552 535f 4f4e 4c59 EAR_CORNERS_ONLY\n-00007d80: 3c2f 6469 763e 3c64 6976 2063 6c61 7373
    sharpen\n-00007da0: 2063 6f72 6e65 7273 206f 6e6c 793c 2f64 corners only
    Definit\n-00007dd0: 696f 6e3c 2f62 3e20 3c61 2068 7265 663d ion opti\n-00007e00: 6f6e 732e 683a 3632 3c2f 613e 3c2f 6469 ons.h:62
    .
    @ \n-00007f50: 4656 4152 5f4c 494e 4541 525f 424f 554e FVAR_LINEAR_BOUN\n-00007f60: 4441 5249 4553 3c2f 6469 763e 3c64 6976 DARIES
    s\n-00007f80: 6861 7270 656e 2061 6c6c 2062 6f75 6e64 harpen all bound\n-00007f90: 6172 6965 7320 2826 7175 6f74 3b61 6c77 aries ("alw\n-00007fa0: 6179 7320 7368 6172 7026 7175 6f74 3b29 ays sharp")\n-00007fb0: 3c2f 6469 763e 3c64 6976 2063 6c61 7373
    Defi\n-00007fd0: 6e69 7469 6f6e 3c2f 623e 203c 6120 6872 nition o\n-00008000: 7074 696f 6e73 2e68 3a36 353c 2f61 3e3c ptions.h:65<\n-00008010: 2f64 6976 3e3c 2f64 6976 3e0a 3c64 6976 /div>
    .\n-00008140: 3c64 6976 2063 6c61 7373 3d22 7474 6465
    @ FVAR_LINEA\n-00008160: 525f 434f 524e 4552 535f 504c 5553 323c R_CORNERS_PLUS2<\n-00008170: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
    ("e\n-00008190: 6467 6520 616e 6420 636f 726e 6572 202b dge and corner +\n-000081a0: 2070 726f 7061 6761 7465 2063 6f72 6e65 propagate corne\n-000081b0: 7226 7175 6f74 3b29 3c2f 6469 763e 3c64 r")
    Definition options.h\n-00008210: 3a36 343c 2f61 3e3c 2f64 6976 3e3c 2f64 :64
    .
    OpenSubdi\n-00008300: 763a 3a4f 5045 4e53 5542 4449 565f 5645 v::OPENSUBDIV_VE\n-00008310: 5253 494f 4e3a 3a53 6463 3a3a 4f70 7469 RSION::Sdc::Opti\n-00008320: 6f6e 733a 3a46 5641 525f 4c49 4e45 4152 ons::FVAR_LINEAR\n-00008330: 5f43 4f52 4e45 5253 5f50 4c55 5331 3c2f _CORNERS_PLUS1
    @ FV\n-00008360: 4152 5f4c 494e 4541 525f 434f 524e 4552 AR_LINEAR_CORNER\n-00008370: 535f 504c 5553 313c 2f64 6976 3e3c 6469 S_PLUS1
    \n-00008390: 2826 7175 6f74 3b65 6467 6520 636f 726e ("edge corn\n-000083a0: 6572 2671 756f 743b 293c 2f64 6976 3e3c er")
    <\n-000083b0: 6469 7620 636c 6173 733d 2274 7464 6566 div class=\"ttdef\n-000083c0: 223e 3c62 3e44 6566 696e 6974 696f 6e3c \">Definition<\n-000083d0: 2f62 3e20 3c61 2068 7265 663d 2261 3030 /b> options.\n-00008400: 683a 3633 3c2f 613e 3c2f 6469 763e 3c2f h:63
    .
    <\n-00008490: 6120 6872 6566 3d22 6130 3133 3239 2e68 a href=\"a01329.h\n-000084a0: 746d 6c23 6135 6238 3765 6163 6136 6361 tml#a5b87eaca6ca\n-000084b0: 3038 3333 3436 3263 3964 3461 6438 3464 0833462c9d4ad84d\n-000084c0: 6631 3637 6261 3864 3464 6630 3833 3130 f167ba8d4df08310\n-000084d0: 3439 3733 6661 6431 3437 3931 3039 3938 4973fad147910998\n-000084e0: 3865 3033 3837 223e 4f70 656e 5375 6264 8e0387\">OpenSubd\n-000084f0: 6976 3a3a 4f50 454e 5355 4244 4956 5f56 iv::OPENSUBDIV_V\n-00008500: 4552 5349 4f4e 3a3a 5364 633a 3a4f 7074 ERSION::Sdc::Opt\n-00008510: 696f 6e73 3a3a 4656 4152 5f4c 494e 4541 ions::FVAR_LINEA\n-00008520: 525f 414c 4c3c 2f61 3e3c 2f64 6976 3e3c R_ALL
    <\n-00008530: 6469 7620 636c 6173 733d 2274 7464 6563 div class=\"ttdec\n-00008540: 6922 3e40 2046 5641 525f 4c49 4e45 4152 i\">@ FVAR_LINEAR\n-00008550: 5f41 4c4c 3c2f 6469 763e 3c64 6976 2063 _ALL
    bil\n-00008570: 696e 6561 7220 696e 7465 7270 6f6c 6174 inear interpolat\n-00008580: 696f 6e20 2826 7175 6f74 3b62 696c 696e ion ("bilin\n-00008590: 6561 7226 7175 6f74 3b29 3c2f 6469 763e ear")
    \n-000085a0: 3c64 6976 2063 6c61 7373 3d22 7474 6465
    Definition\n-000085c0: 3c2f 623e 203c 6120 6872 6566 3d22 6130 options\n-000085f0: 2e68 3a36 363c 2f61 3e3c 2f64 6976 3e3c .h:66
    <\n-00008600: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n-00008680: 3c61 2068 7265 663d 2261 3031 3332 392e OpenSub\n-000086e0: 6469 763a 3a4f 5045 4e53 5542 4449 565f div::OPENSUBDIV_\n-000086f0: 5645 5253 494f 4e3a 3a53 6463 3a3a 4f70 VERSION::Sdc::Op\n-00008700: 7469 6f6e 733a 3a46 5641 525f 4c49 4e45 tions::FVAR_LINE\n-00008710: 4152 5f4e 4f4e 453c 2f61 3e3c 2f64 6976 AR_NONE
    @ FVAR_LINE\n-00008740: 4152 5f4e 4f4e 453c 2f64 6976 3e3c 6469 AR_NONE
    \n-00008760: 736d 6f6f 7468 2065 7665 7279 7768 6572 smooth everywher\n-00008770: 6520 2826 7175 6f74 3b65 6467 6520 6f6e e ("edge on\n-00008780: 6c79 2671 756f 743b 293c 2f64 6976 3e3c ly")
    <\n-00008790: 6469 7620 636c 6173 733d 2274 7464 6566 div class=\"ttdef\n-000087a0: 223e 3c62 3e44 6566 696e 6974 696f 6e3c \">Definition<\n-000087b0: 2f62 3e20 3c61 2068 7265 663d 2261 3030 /b> options.\n-000087e0: 683a 3631 3c2f 613e 3c2f 6469 763e 3c2f h:61
    .
    OpenSubdiv\n-00008890: 3a3a 4f50 454e 5355 4244 4956 5f56 4552 ::OPENSUBDIV_VER\n-000088a0: 5349 4f4e 3a3a 5364 633a 3a4f 7074 696f SION::Sdc::Optio\n-000088b0: 6e73 3a3a 5365 7456 7478 426f 756e 6461 ns::SetVtxBounda\n-000088c0: 7279 496e 7465 7270 6f6c 6174 696f 6e3c ryInterpolation<\n-000088d0: 2f61 3e3c 2f64 6976 3e3c 6469 7620 636c /a>
    voi\n-000088f0: 6420 5365 7456 7478 426f 756e 6461 7279 d SetVtxBoundary\n-00008900: 496e 7465 7270 6f6c 6174 696f 6e28 5674 Interpolation(Vt\n-00008910: 7842 6f75 6e64 6172 7949 6e74 6572 706f xBoundaryInterpo\n-00008920: 6c61 7469 6f6e 2062 293c 2f64 6976 3e3c lation b)
    <\n-00008930: 6469 7620 636c 6173 733d 2274 7464 6f63 div class=\"ttdoc\n-00008940: 223e 5365 7420 7665 7274 6578 2062 6f75 \">Set vertex bou\n-00008950: 6e64 6172 7920 696e 7465 7270 6f6c 6174 ndary interpolat\n-00008960: 696f 6e20 7275 6c65 2e3c 2f64 6976 3e3c ion rule.
    <\n-00008970: 6469 7620 636c 6173 733d 2274 7464 6566 div class=\"ttdef\n-00008980: 223e 3c62 3e44 6566 696e 6974 696f 6e3c \">Definition<\n-00008990: 2f62 3e20 3c61 2068 7265 663d 2261 3030 /b> options.\n-000089c0: 683a 3932 3c2f 613e 3c2f 6469 763e 3c2f h:92
    .
    OpenSubdiv\n-00008a70: 3a3a 4f50 454e 5355 4244 4956 5f56 4552 ::OPENSUBDIV_VER\n-00008a80: 5349 4f4e 3a3a 5364 633a 3a4f 7074 696f SION::Sdc::Optio\n-00008a90: 6e73 3a3a 4765 7446 5661 724c 696e 6561 ns::GetFVarLinea\n-00008aa0: 7249 6e74 6572 706f 6c61 7469 6f6e 3c2f rInterpolation
    FVar\n-00008ad0: 4c69 6e65 6172 496e 7465 7270 6f6c 6174 LinearInterpolat\n-00008ae0: 696f 6e20 4765 7446 5661 724c 696e 6561 ion GetFVarLinea\n-00008af0: 7249 6e74 6572 706f 6c61 7469 6f6e 2829 rInterpolation()\n-00008b00: 2063 6f6e 7374 3c2f 6469 763e 3c64 6976 const
    G\n-00008b20: 6574 2066 6163 652d 7661 7279 696e 6720 et face-varying \n-00008b30: 696e 7465 7270 6f6c 6174 696f 6e20 7275 interpolation ru\n-00008b40: 6c65 2e3c 2f64 6976 3e3c 6469 7620 636c le.
    D\n-00008b60: 6566 696e 6974 696f 6e3c 2f62 3e20 3c61 efinition options.h:95
    .<\n-00008bb0: 6469 7620 636c 6173 733d 2274 7463 2220 div class=\"ttc\" \n-00008bc0: 6964 3d22 6161 3031 3332 395f 6874 6d6c id=\"aa01329_html\n-00008bd0: 5f61 6362 6637 3866 3161 3661 6266 6338 _acbf78f1a6abfc8\n-00008be0: 6462 3038 3065 6637 6662 3363 3366 3431 db080ef7fb3c3f41\n-00008bf0: 3765 223e 3c64 6976 2063 6c61 7373 3d22 7e\">\n-00008c90: 3c64 6976 2063 6c61 7373 3d22 7474 6465
    VtxBoundaryI\n-00008cb0: 6e74 6572 706f 6c61 7469 6f6e 3c2f 6469 nterpolation
    Definiti\n-00008ce0: 6f6e 3c2f 623e 203c 6120 6872 6566 3d22 on optio\n-00008d10: 6e73 2e68 3a35 333c 2f61 3e3c 2f64 6976 ns.h:53
    .
    OpenS\n-00008e00: 7562 6469 763a 3a4f 5045 4e53 5542 4449 ubdiv::OPENSUBDI\n-00008e10: 565f 5645 5253 494f 4e3a 3a53 6463 3a3a V_VERSION::Sdc::\n-00008e20: 4f70 7469 6f6e 733a 3a56 5458 5f42 4f55 Options::VTX_BOU\n-00008e30: 4e44 4152 595f 4e4f 4e45 3c2f 613e 3c2f NDARY_NONE
    @ VTX_BO\n-00008e60: 554e 4441 5259 5f4e 4f4e 453c 2f64 6976 UNDARY_NONE
    Definitio\n-00008e90: 6e3c 2f62 3e20 3c61 2068 7265 663d 2261 n option\n-00008ec0: 732e 683a 3534 3c2f 613e 3c2f 6469 763e s.h:54
    \n-00008ed0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .\n-00009070: 3c64 6976 2063 6c61 7373 3d22 7474 6465 <\n-000090d0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.@ VTX_BOUNDARY_\n-00009220: 4544 4745 5f41 4e44 5f43 4f52 4e45 523c EDGE_AND_CORNER<\n-00009230: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
    Defin\n-00009250: 6974 696f 6e3c 2f62 3e20 3c61 2068 7265 ition op\n-00009280: 7469 6f6e 732e 683a 3537 3c2f 613e 3c2f tions.h:57
    .
    \n-000092e0: 3c64 6976 2063 6c61 7373 3d22 7474 6e61
    Open\n-00009330: 5375 6264 6976 3a3a 4f50 454e 5355 4244 Subdiv::OPENSUBD\n-00009340: 4956 5f56 4552 5349 4f4e 3a3a 5364 633a IV_VERSION::Sdc:\n-00009350: 3a4f 7074 696f 6e73 3a3a 5365 7443 7265 :Options::SetCre\n-00009360: 6173 696e 674d 6574 686f 643c 2f61 3e3c asingMethod<\n-00009370: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
    void Se\n-00009390: 7443 7265 6173 696e 674d 6574 686f 6428 tCreasingMethod(\n-000093a0: 4372 6561 7369 6e67 4d65 7468 6f64 2063 CreasingMethod c\n-000093b0: 293c 2f64 6976 3e3c 6469 7620 636c 6173 )
    Set ed\n-000093d0: 6765 2063 7265 6173 6520 7275 6c65 2e3c ge crease rule.<\n-000093e0: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
    Defin\n-00009400: 6974 696f 6e3c 2f62 3e20 3c61 2068 7265 ition op\n-00009430: 7469 6f6e 732e 683a 3130 343c 2f61 3e3c tions.h:104<\n-00009440: 2f64 6976 3e3c 2f64 6976 3e0a 3c2f 6469 /div>
    .
    ..\n-000094b0: 0a3c 6469 7620 6964 3d22 6e61 762d 7061 ..
    34#includ\n+00002460: 6520 266c 743b 6373 7464 6c69 6226 6774 e <cstdlib>\n+00002470: 3b3c 2f73 7061 6e3e 3c2f 6469 763e 0a3c ;
    .<\n+00002480: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00002490: 3e3c 6120 6964 3d22 6c30 3030 3335 2220 > 35#i\n+000024f0: 6e63 6c75 6465 2026 6c74 3b76 6563 746f nclude <vecto\n+00002500: 7226 6774 3b3c 2f73 7061 6e3e 3c2f 6469 r>.
    36\n+00002560: 3c2f 7370 616e 3e20 3c2f 6469 763e 0a3c
    .<\n+00002570: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00002580: 3e3c 6120 6964 3d22 6c30 3030 3337 2220 > 37namespa\n+000025e0: 6365 203c 2f73 7061 6e3e 3c61 2063 6c61 ce OpenSu\n+00002620: 6264 6976 3c2f 613e 207b 3c2f 6469 763e bdiv {
    \n+00002630: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+00002660: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 38names\n+000026a0: 7061 6365 203c 2f73 7061 6e3e 4f50 454e pace OPEN\n+000026b0: 5355 4244 4956 5f56 4552 5349 4f4e 207b SUBDIV_VERSION {\n+000026c0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+00002710: 2020 3339 3c2f 7370 616e 3e20 3c2f 6469 39 .
    40\n+00002770: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 nam\n+00002790: 6573 7061 6365 203c 2f73 7061 6e3e 5364 espace Sd\n+000027a0: 6320 7b3c 2f64 6976 3e0a 3c64 6976 2063 c {
    .
    41 <\n+00002800: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+00002850: 2036 353c 2f73 7061 6e3e 3c73 7061 6e20 65\n+00002870: 7465 6d70 6c61 7465 3c2f 7370 616e 3e20 template \n+00002880: 266c 743b 5363 6865 6d65 5479 7065 2053 <SchemeType S\n+00002890: 4348 454d 455f 5459 5045 2667 743b 3c2f CHEME_TYPE>.
    .<\n+00002920: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00002930: 6e6f 223e 3c61 2063 6c61 7373 3d22 6c69 no\"> 66\n+00002960: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 cla\n+00002980: 7373 203c 2f73 7061 6e3e 3c61 2063 6c61 ss Scheme\n+000029c0: 207b 3c2f 6469 763e 0a3c 6469 7620 636c {
    .
    67 .
    \n+00002a70: 3638 3c2f 7370 616e 3e3c 7370 616e 2063 68p\n+00002a90: 7562 6c69 633c 2f73 7061 6e3e 3a3c 2f64 ublic:.
    6\n+00002af0: 393c 2f73 7061 6e3e 203c 2f64 6976 3e0a 9
    .\n+00002b00: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
    <\n+00002b30: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> \n+00002b90: 3730 3c2f 613e 3c2f 7370 616e 3e20 2020 70 \n+00002ba0: 203c 6120 636c 6173 733d 2263 6f64 6520 Scheme() :\n+00002c00: 205f 6f70 7469 6f6e 7328 2920 7b20 7d3c _options() { }<\n+00002c10: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+00002c60: 2037 313c 2f73 7061 6e3e 203c 2f64 6976 71 .
    \n+00002d00: 2020 3732 3c2f 613e 3c2f 7370 616e 3e20 72 \n+00002d10: 2020 203c 6120 636c 6173 733d 2263 6f64 Scheme(<\n+00002d70: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n+00002d80: 5f63 6c61 7373 2220 6872 6566 3d22 6130 _class\" href=\"a0\n+00002d90: 3133 3239 2e68 746d 6c22 3e4f 7074 696f 1329.html\">Optio\n+00002da0: 6e73 3c2f 613e 203c 7370 616e 2063 6c61 ns con\n+00002dc0: 7374 3c2f 7370 616e 3e26 616d 703b 206f st& o\n+00002dd0: 7074 696f 6e73 2920 3a20 5f6f 7074 696f ptions) : _optio\n+00002de0: 6e73 286f 7074 696f 6e73 2920 7b20 7d3c ns(options) { }<\n+00002df0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+00002e40: 2037 333c 2f73 7061 6e3e 203c 2f64 6976 73 .
    \n+00002ee0: 2020 3734 3c2f 613e 3c2f 7370 616e 3e20 74 \n+00002ef0: 2020 203c 6120 636c 6173 733d 2263 6f64 O\n+00002f20: 7074 696f 6e73 3c2f 613e 203c 6120 636c ptions GetO\n+00002f80: 7074 696f 6e73 3c2f 613e 2829 3c73 7061 ptions() const \n+00002fb0: 7b20 3c73 7061 6e20 636c 6173 733d 226b { retu\n+00002fd0: 726e 3c2f 7370 616e 3e20 5f6f 7074 696f rn _optio\n+00002fe0: 6e73 3b20 7d3c 2f64 6976 3e0a 3c64 6976 ns; }
    .<\n+00003020: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00003030: 6e6f 223e 3c61 2063 6c61 7373 3d22 6c69 no\"> 75 void SetOption\n+00003110: 733c 2f61 3e28 3c73 7061 6e20 636c 6173 s(cons\n+00003130: 743c 2f73 7061 6e3e 203c 6120 636c 6173 t Options\n+00003170: 2661 6d70 3b20 6e65 774f 7074 696f 6e73 & newOptions\n+00003180: 2920 7b20 5f6f 7074 696f 6e73 203d 206e ) { _options = n\n+00003190: 6577 4f70 7469 6f6e 733b 207d 3c2f 6469 ewOptions; }.
    76\n+000031f0: 3c2f 7370 616e 3e20 3c2f 6469 763e 0a3c
    .<\n+00003200: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00003210: 3e3c 6120 6964 3d22 6c30 3030 3830 2220 > 80 tem\n+00003270: 706c 6174 653c 2f73 7061 6e3e 2026 6c74 plate <\n+00003280: 3b3c 7370 616e 2063 6c61 7373 3d22 6b65 ;typename<\n+000032a0: 2f73 7061 6e3e 2046 4143 452c 203c 7370 /span> FACE, typename MASK>.
    81<\n+00003330: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> void \n+00003360: 3c61 2063 6c61 7373 3d22 636f 6465 2068 ComputeFaceVert\n+000033c0: 6578 4d61 736b 3c2f 613e 2846 4143 4520 exMask(FACE \n+000033d0: 3c73 7061 6e20 636c 6173 733d 226b 6579 const& faceNeig\n+00003400: 6862 6f72 686f 6f64 2c20 4d41 534b 2661 hborhood, MASK&a\n+00003410: 6d70 3b20 6661 6365 5665 7274 6578 4d61 mp; faceVertexMa\n+00003420: 736b 2920 3c73 7061 6e20 636c 6173 733d sk) const<\n+00003440: 2f73 7061 6e3e 3b3c 2f64 6976 3e0a 3c64 /span>;
    .\n+00003460: 3c61 2069 643d 226c 3030 3038 3222 206e 82
    .
    98 \n+00003500: 2020 3c73 7061 6e20 636c 6173 733d 226b template\n+00003520: 3c2f 7370 616e 3e20 266c 743b 3c73 7061 <typename EDGE, ty\n+00003570: 7065 6e61 6d65 3c2f 7370 616e 3e20 4d41 pename MA\n+00003580: 534b 2667 743b 3c2f 6469 763e 0a3c 6469 SK>
    .<\n+000035a0: 6120 6964 3d22 6c30 3030 3939 2220 6e61 a id=\"l00099\" na\n+000035b0: 6d65 3d22 6c30 3030 3939 223e 3c2f 613e me=\"l00099\">\n+000035c0: 3c73 7061 6e20 636c 6173 733d 226c 696e 99 v\n+00003600: 6f69 643c 2f73 7061 6e3e 203c 6120 636c oid Comp\n+00003660: 7574 6545 6467 6556 6572 7465 784d 6173 uteEdgeVertexMas\n+00003670: 6b3c 2f61 3e28 4544 4745 203c 7370 616e k(EDGE const&am\n+000036a0: 703b 2065 6467 654e 6569 6768 626f 7268 p; edgeNeighborh\n+000036b0: 6f6f 642c 204d 4153 4b26 616d 703b 2065 ood, MASK& e\n+000036c0: 6467 6556 6572 7465 784d 6173 6b2c 3c2f dgeVertexMask,.
    1\n+00003720: 3030 3c2f 7370 616e 3e20 2020 2020 2020 00 \n+00003730: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00003740: 2020 2020 2020 2020 3c61 2063 6c61 7373 Crea\n+000037a0: 7365 3a3a 5275 6c65 3c2f 613e 2070 6172 se::Rule par\n+000037b0: 656e 7452 756c 6520 3d20 3c61 2063 6c61 entRule = Cre\n+00003830: 6173 653a 3a52 554c 455f 554e 4b4e 4f57 ase::RULE_UNKNOW\n+00003840: 4e3c 2f61 3e2c 3c2f 6469 763e 0a3c 6469 N,
    .<\n+00003860: 6120 6964 3d22 6c30 3031 3031 2220 6e61 a id=\"l00101\" na\n+00003870: 6d65 3d22 6c30 3031 3031 223e 3c2f 613e me=\"l00101\">\n+00003880: 3c73 7061 6e20 636c 6173 733d 226c 696e 101 \n+000038b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000038c0: 3c61 2063 6c61 7373 3d22 636f 6465 2068 Crease::Rule\n+00003920: 3c2f 613e 2063 6869 6c64 5275 6c65 203d childRule =\n+00003930: 203c 6120 636c 6173 733d 2263 6f64 6520 Crease::RULE\n+000039b0: 5f55 4e4b 4e4f 574e 3c2f 613e 2920 3c73 _UNKNOWN) const\n+000039e0: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
    .
    \n+00003a30: 2020 3130 323c 2f73 7061 6e3e 203c 2f64 102 .
    11\n+00003a90: 323c 2f73 7061 6e3e 2020 2020 3c73 7061 2 template <type\n+00003ae0: 6e61 6d65 3c2f 7370 616e 3e20 5645 5254 name VERT\n+00003af0: 4558 2c20 3c73 7061 6e20 636c 6173 733d EX, typena\n+00003b10: 6d65 3c2f 7370 616e 3e20 4d41 534b 2667 me MASK&g\n+00003b20: 743b 3c2f 6469 763e 0a3c 6469 7620 636c t;
    ..
    114 \n+00003cd0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00003ce0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00003cf0: 203c 6120 636c 6173 733d 2263 6f64 6520 Crease::Rul\n+00003d50: 653c 2f61 3e20 7061 7265 6e74 5275 6c65 e parentRule\n+00003d60: 203d 203c 6120 636c 6173 733d 2263 6f64 = Crease::RU\n+00003de0: 4c45 5f55 4e4b 4e4f 574e 3c2f 613e 2c3c LE_UNKNOWN,<\n+00003df0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+00003e40: 3131 353c 2f73 7061 6e3e 2020 2020 2020 115 \n+00003e50: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00003e60: 2020 2020 2020 2020 2020 2020 2020 3c61 Crease::Rule childRule = <\n+00003ee0: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n+00003ef0: 5f65 6e75 6d76 616c 7565 2220 6872 6566 _enumvalue\" href\n+00003f00: 3d22 6130 3133 3235 2e68 746d 6c23 6131 =\"a01325.html#a1\n+00003f10: 3166 6364 3531 6566 3836 3131 3866 3635 1fcd51ef86118f65\n+00003f20: 6536 3033 6331 3437 3433 3737 6137 3861 e603c1474377a78a\n+00003f30: 6232 3939 6165 6662 3236 3031 3361 3739 b299aefb26013a79\n+00003f40: 6435 3231 3931 6137 3838 3766 6561 3533 d52191a7887fea53\n+00003f50: 223e 4372 6561 7365 3a3a 5255 4c45 5f55 \">Crease::RULE_U\n+00003f60: 4e4b 4e4f 574e 3c2f 613e 2920 3c73 7061 NKNOWN) const;<\n+00003f90: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+00003fe0: 3131 363c 2f73 7061 6e3e 203c 2f64 6976 116 .
    141<\n+00004040: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> \n+00004060: 7465 6d70 6c61 7465 3c2f 7370 616e 3e20 template \n+00004070: 266c 743b 3c73 7061 6e20 636c 6173 733d <typena\n+00004090: 6d65 3c2f 7370 616e 3e20 5645 5254 4558 me VERTEX\n+000040a0: 2c20 3c73 7061 6e20 636c 6173 733d 226b , typename\n+000040c0: 3c2f 7370 616e 3e20 4d41 534b 2667 743b MASK>\n+000040d0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+00004120: 2031 3432 3c2f 7370 616e 3e20 2020 203c 142 <\n+00004130: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+00004140: 6f72 6474 7970 6522 3e76 6f69 643c 2f73 ordtype\">void ComputeVer\n+000041b0: 7465 784c 696d 6974 4d61 736b 3c2f 613e texLimitMask\n+000041c0: 2856 4552 5445 5820 3c73 7061 6e20 636c (VERTEX co\n+000041e0: 6e73 743c 2f73 7061 6e3e 2661 6d70 3b20 nst& \n+000041f0: 7665 7274 6578 4e65 6967 6862 6f72 686f vertexNeighborho\n+00004200: 6f64 2c20 4d41 534b 2661 6d70 3b20 706f od, MASK& po\n+00004210: 7369 7469 6f6e 4d61 736b 2c3c 2f64 6976 sitionMask,.
    143<\n+00004270: 2f73 7061 6e3e 2020 2020 2020 2020 2020 /span> \n+00004280: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00004290: 2020 2020 2020 3c61 2063 6c61 7373 3d22 Crease\n+000042f0: 3a3a 5275 6c65 3c2f 613e 2076 6572 7465 ::Rule verte\n+00004300: 7852 756c 6529 203c 7370 616e 2063 6c61 xRule) con\n+00004320: 7374 3c2f 7370 616e 3e3b 3c2f 6469 763e st;
    \n+00004330: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n+000043a0: 6120 6964 3d22 6c30 3031 3435 2220 6e61 a id=\"l00145\" na\n+000043b0: 6d65 3d22 6c30 3031 3435 223e 3c2f 613e me=\"l00145\">\n+000043c0: 3c73 7061 6e20 636c 6173 733d 226c 696e 145 templ\n+00004400: 6174 653c 2f73 7061 6e3e 2026 6c74 3b3c ate <<\n+00004410: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+00004420: 6f72 6422 3e74 7970 656e 616d 653c 2f73 ord\">typename VERTEX, typename MASK>.
    146<\n+000044c0: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> void \n+000044f0: 3c61 2063 6c61 7373 3d22 636f 6465 2068 ComputeVertexLi\n+00004550: 6d69 744d 6173 6b3c 2f61 3e28 5645 5254 mitMask(VERT\n+00004560: 4558 203c 7370 616e 2063 6c61 7373 3d22 EX const& verte\n+00004590: 784e 6569 6768 626f 7268 6f6f 642c 204d xNeighborhood, M\n+000045a0: 4153 4b26 616d 703b 2070 6f73 6974 696f ASK& positio\n+000045b0: 6e4d 6173 6b2c 3c2f 6469 763e 0a3c 6469 nMask,
    .<\n+000045d0: 6120 6964 3d22 6c30 3031 3437 2220 6e61 a id=\"l00147\" na\n+000045e0: 6d65 3d22 6c30 3031 3437 223e 3c2f 613e me=\"l00147\">\n+000045f0: 3c73 7061 6e20 636c 6173 733d 226c 696e 147 \n+00004620: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00004630: 204d 4153 4b26 616d 703b 2074 616e 6765 MASK& tange\n+00004640: 6e74 314d 6173 6b2c 204d 4153 4b26 616d nt1Mask, MASK&am\n+00004650: 703b 2074 616e 6765 6e74 324d 6173 6b2c p; tangent2Mask,\n+00004660: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+000046b0: 2031 3438 3c2f 7370 616e 3e20 2020 2020 148 \n+000046c0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000046d0: 2020 2020 2020 2020 2020 203c 6120 636c C\n+00004730: 7265 6173 653a 3a52 756c 653c 2f61 3e20 rease::Rule \n+00004740: 7665 7274 6578 5275 6c65 2920 3c73 7061 vertexRule) const;<\n+00004770: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+000047c0: 3134 393c 2f73 7061 6e3e 203c 2f64 6976 149 .
    150<\n+00004820: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> \n+00004840: 2f2f 3c2f 7370 616e 3e3c 2f64 6976 3e0a //
    .\n+00004850: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
    \n+00004950: 2020 3135 323c 2f73 7061 6e3e 2020 2020 152 \n+00004960: 3c73 7061 6e20 636c 6173 733d 2263 6f6d //<\n+00004980: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>..<\n+00004b20: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00004b30: 3e3c 6120 6964 3d22 6c30 3031 3534 2220 > 15\n+00004bb0: 343c 2f61 3e3c 2f73 7061 6e3e 2020 2020 4 \n+00004bc0: 3c73 7061 6e20 636c 6173 733d 226b 6579 static in\n+00004c00: 743c 2f73 7061 6e3e 2020 203c 6120 636c t GetR\n+00004c60: 6567 756c 6172 4661 6365 5369 7a65 3c2f egularFaceSize();
    .<\n+00004cb0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00004cc0: 6e6f 223e 3c61 2063 6c61 7373 3d22 6c69 no\"> 155 static\n+00004d40: 203c 7370 616e 2063 6c61 7373 3d22 6b65 int GetRegu\n+00004dc0: 6c61 7256 6572 7465 7856 616c 656e 6365 larVertexValence\n+00004dd0: 3c2f 613e 2829 3b3c 2f64 6976 3e0a 3c64 ();
    .\n+00004df0: 3c61 2069 643d 226c 3030 3135 3622 206e 156\n+00004e70: 3c2f 613e 3c2f 7370 616e 3e20 2020 203c <\n+00004e80: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+00004e90: 6f72 6422 3e73 7461 7469 633c 2f73 7061 ord\">static int\n+00004ec0: 3c2f 7370 616e 3e20 2020 3c61 2063 6c61 GetLo\n+00004f20: 6361 6c4e 6569 6768 626f 7268 6f6f 6453 calNeighborhoodS\n+00004f30: 697a 653c 2f61 3e28 293b 3c2f 6469 763e ize();
    \n+00004f40: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n+00004fb0: 6120 6964 3d22 6c30 3031 3538 2220 6e61 a id=\"l00158\" na\n+00004fc0: 6d65 3d22 6c30 3031 3538 223e 3c2f 613e me=\"l00158\">\n+00004fd0: 3c73 7061 6e20 636c 6173 733d 226c 696e 158protected\n+00005010: 3c2f 7370 616e 3e3a 3c2f 6469 763e 0a3c :
    .<\n+00005020: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00005030: 3e3c 6120 6964 3d22 6c30 3031 3539 2220 > 159
    .
    160 \n+000050d0: 2020 203c 7370 616e 2063 6c61 7373 3d22 //
    .
    161 \n+00005150: 203c 7370 616e 2063 6c61 7373 3d22 636f // Suppo\n+00005170: 7274 696e 6720 696e 7465 726e 616c 206d rting internal m\n+00005180: 6574 686f 6473 202d 2d20 6f70 7469 6f6e ethods -- option\n+00005190: 616c 6c79 2069 6d70 6c65 6d65 6e74 6564 ally implemented\n+000051a0: 2c20 6465 7065 6e64 696e 6720 6f6e 2073 , depending on s\n+000051b0: 7065 6369 616c 697a 6174 696f 6e3a 3c2f pecialization:
    .<\n+00005200: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00005210: 6e6f 223e 2020 3136 323c 2f73 7061 6e3e no\"> 162\n+00005220: 2020 2020 3c73 7061 6e20 636c 6173 733d //
    .
    163 <\n+000052a0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+000052f0: 3136 343c 2f73 7061 6e3e 2020 2020 3c73 164 // Subdivis\n+00005320: 696f 6e2f 7265 6669 6e65 6d65 6e74 206d ion/refinement m\n+00005330: 6173 6b73 202d 2d20 7477 6f20 666f 7220 asks -- two for \n+00005340: 6564 6765 2d76 6572 7469 6365 7320 616e edge-vertices an\n+00005350: 6420 7468 7265 6520 666f 7220 7665 7274 d three for vert\n+00005360: 6578 2d76 6572 7469 6365 733a 3c2f 7370 ex-vertices:
    .
    165 \n+000053d0: 2020 3c73 7061 6e20 636c 6173 733d 2263 //
    .
    \n+00005440: 2020 3136 363c 2f73 7061 6e3e 2020 2020 166 \n+00005450: 3c73 7061 6e20 636c 6173 733d 226b 6579 template <\n+00005490: 7479 7065 6e61 6d65 3c2f 7370 616e 3e20 typename \n+000054a0: 4544 4745 2c20 3c73 7061 6e20 636c 6173 EDGE, type\n+000054c0: 6e61 6d65 3c2f 7370 616e 3e20 4d41 534b name MASK\n+000054d0: 2667 743b 3c2f 6469 763e 0a3c 6469 7620 >
    .
    167 \n+00005530: 2020 203c 7370 616e 2063 6c61 7373 3d22 voi\n+00005550: 643c 2f73 7061 6e3e 203c 6120 636c 6173 d assign\n+000055b0: 4372 6561 7365 4d61 736b 466f 7245 6467 CreaseMaskForEdg\n+000055c0: 653c 2f61 3e28 4544 4745 203c 7370 616e e(EDGE const&am\n+000055f0: 703b 2065 6467 652c 204d 4153 4b26 616d p; edge, MASK&am\n+00005600: 703b 206d 6173 6b29 203c 7370 616e 2063 p; mask) c\n+00005620: 6f6e 7374 3c2f 7370 616e 3e3b 3c2f 6469 onst;.
    168\n+00005680: 3c2f 7370 616e 3e20 2020 203c 7370 616e template\n+000056b0: 2026 6c74 3b3c 7370 616e 2063 6c61 7373 <typen\n+000056d0: 616d 653c 2f73 7061 6e3e 2045 4447 452c ame EDGE,\n+000056e0: 203c 7370 616e 2063 6c61 7373 3d22 6b65 typename<\n+00005700: 2f73 7061 6e3e 204d 4153 4b26 6774 3b3c /span> MASK><\n+00005710: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    169 void as\n+00005830: 7369 676e 536d 6f6f 7468 4d61 736b 466f signSmoothMaskFo\n+00005840: 7245 6467 653c 2f61 3e28 4544 4745 203c rEdge(EDGE <\n+00005850: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+00005860: 6f72 6422 3e63 6f6e 7374 3c2f 7370 616e ord\">const& edge, MAS\n+00005880: 4b26 616d 703b 206d 6173 6b29 203c 7370 K& mask) const;\n+000058b0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+00005900: 2031 3730 3c2f 7370 616e 3e20 3c2f 6469 170 .
    171\n+00005960: 3c2f 7370 616e 3e20 2020 203c 7370 616e template\n+00005990: 2026 6c74 3b3c 7370 616e 2063 6c61 7373 <typen\n+000059b0: 616d 653c 2f73 7061 6e3e 2056 4552 5445 ame VERTE\n+000059c0: 582c 203c 7370 616e 2063 6c61 7373 3d22 X, typenam\n+000059e0: 653c 2f73 7061 6e3e 204d 4153 4b26 6774 e MASK>\n+000059f0: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
    .
    \n+00005a40: 2020 3137 323c 2f73 7061 6e3e 2020 2020 172 \n+00005a50: 3c73 7061 6e20 636c 6173 733d 226b 6579 void assignCor\n+00005ad0: 6e65 724d 6173 6b46 6f72 5665 7274 6578 nerMaskForVertex\n+00005ae0: 3c2f 613e 2856 4552 5445 5820 3c73 7061 (VERTEX const&a\n+00005b10: 6d70 3b20 6564 6765 2c20 4d41 534b 2661 mp; edge, MASK&a\n+00005b20: 6d70 3b20 6d61 736b 2920 3c73 7061 6e20 mp; mask) \n+00005b40: 636f 6e73 743c 2f73 7061 6e3e 3b3c 2f64 const;.
    17\n+00005ba0: 333c 2f73 7061 6e3e 2020 2020 3c73 7061 3 template <type\n+00005bf0: 6e61 6d65 3c2f 7370 616e 3e20 5645 5254 name VERT\n+00005c00: 4558 2c20 3c73 7061 6e20 636c 6173 733d EX, typena\n+00005c20: 6d65 3c2f 7370 616e 3e20 4d41 534b 2667 me MASK&g\n+00005c30: 743b 3c2f 6469 763e 0a3c 6469 7620 636c t;
    .
    174<\n+00005cd0: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> void \n+00005d00: 3c61 2063 6c61 7373 3d22 636f 6465 2068 assignCreaseMas\n+00005d60: 6b46 6f72 5665 7274 6578 3c2f 613e 2856 kForVertex(V\n+00005d70: 4552 5445 5820 3c73 7061 6e20 636c 6173 ERTEX cons\n+00005d90: 743c 2f73 7061 6e3e 2661 6d70 3b20 6564 t& ed\n+00005da0: 6765 2c20 4d41 534b 2661 6d70 3b20 6d61 ge, MASK& ma\n+00005db0: 736b 2c20 3c73 7061 6e20 636c 6173 733d sk, in\n+00005dd0: 743c 2f73 7061 6e3e 203c 7370 616e 2063 t c\n+00005df0: 6f6e 7374 3c2f 7370 616e 3e20 6372 6561 onst crea\n+00005e00: 7365 456e 6473 5b32 5d29 203c 7370 616e seEnds[2]) const;.
    1\n+00005e80: 3735 3c2f 7370 616e 3e20 2020 203c 7370 75 template <typ\n+00005ed0: 656e 616d 653c 2f73 7061 6e3e 2056 4552 ename VER\n+00005ee0: 5445 582c 203c 7370 616e 2063 6c61 7373 TEX, typen\n+00005f00: 616d 653c 2f73 7061 6e3e 204d 4153 4b26 ame MASK&\n+00005f10: 6774 3b3c 2f64 6976 3e0a 3c64 6976 2063 gt;
    .
    176\n+00005fb0: 3c2f 7370 616e 3e20 2020 203c 7370 616e void\n+00005fe0: 203c 6120 636c 6173 733d 2263 6f64 6520 assignSmoothMa\n+00006040: 736b 466f 7256 6572 7465 783c 2f61 3e28 skForVertex(\n+00006050: 5645 5254 4558 203c 7370 616e 2063 6c61 VERTEX con\n+00006070: 7374 3c2f 7370 616e 3e26 616d 703b 2065 st& e\n+00006080: 6467 652c 204d 4153 4b26 616d 703b 206d dge, MASK& m\n+00006090: 6173 6b29 203c 7370 616e 2063 6c61 7373 ask) const\n+000060b0: 3c2f 7370 616e 3e3b 3c2f 6469 763e 0a3c ;
    .<\n+000060c0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+000060d0: 3e3c 6120 6964 3d22 6c30 3031 3737 2220 > 177
    .
    178 \n+00006170: 2020 203c 7370 616e 2063 6c61 7373 3d22 //
    .
    179 \n+000061f0: 203c 7370 616e 2063 6c61 7373 3d22 636f // Limit\n+00006210: 206d 6173 6b73 2066 6f72 2070 6f73 6974 masks for posit\n+00006220: 696f 6e20 616e 6420 7461 6e67 656e 7473 ion and tangents\n+00006230: 2061 7420 7665 7274 6963 6573 202d 2d20 at vertices -- \n+00006240: 7468 7265 6520 6361 7365 7320 666f 7220 three cases for \n+00006250: 6561 6368 3a3c 2f73 7061 6e3e 3c2f 6469 each:.
    180\n+000062b0: 3c2f 7370 616e 3e20 2020 203c 7370 616e //
    \n+000062e0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+00006310: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 181 t\n+00006350: 656d 706c 6174 653c 2f73 7061 6e3e 2026 emplate &\n+00006360: 6c74 3b3c 7370 616e 2063 6c61 7373 3d22 lt;typenam\n+00006380: 653c 2f73 7061 6e3e 2056 4552 5445 582c e VERTEX,\n+00006390: 203c 7370 616e 2063 6c61 7373 3d22 6b65 typename<\n+000063b0: 2f73 7061 6e3e 204d 4153 4b26 6774 3b3c /span> MASK><\n+000063c0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    182 void as\n+000064e0: 7369 676e 436f 726e 6572 4c69 6d69 744d signCornerLimitM\n+000064f0: 6173 6b3c 2f61 3e28 5645 5254 4558 203c ask(VERTEX <\n+00006500: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+00006510: 6f72 6422 3e63 6f6e 7374 3c2f 7370 616e ord\">const& vertex, M\n+00006530: 4153 4b26 616d 703b 2070 6f73 2920 3c73 ASK& pos) const\n+00006560: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
    .
    \n+000065b0: 2020 3138 333c 2f73 7061 6e3e 2020 2020 183 \n+000065c0: 3c73 7061 6e20 636c 6173 733d 226b 6579 template <\n+00006600: 7479 7065 6e61 6d65 3c2f 7370 616e 3e20 typename \n+00006610: 5645 5254 4558 2c20 3c73 7061 6e20 636c VERTEX, ty\n+00006630: 7065 6e61 6d65 3c2f 7370 616e 3e20 4d41 pename MA\n+00006640: 534b 2667 743b 3c2f 6469 763e 0a3c 6469 SK>
    .<\n+00006660: 6120 6964 3d22 6c30 3031 3834 2220 6e61 a id=\"l00184\" na\n+00006670: 6d65 3d22 6c30 3031 3834 223e 3c2f 613e me=\"l00184\">\n+00006680: 3c73 7061 6e20 636c 6173 733d 226c 696e 184<\n+000066e0: 2f61 3e3c 2f73 7061 6e3e 2020 2020 3c73 /a> void assignCreas\n+00006770: 654c 696d 6974 4d61 736b 3c2f 613e 2856 eLimitMask(V\n+00006780: 4552 5445 5820 3c73 7061 6e20 636c 6173 ERTEX cons\n+000067a0: 743c 2f73 7061 6e3e 2661 6d70 3b20 7665 t& ve\n+000067b0: 7274 6578 2c20 4d41 534b 2661 6d70 3b20 rtex, MASK& \n+000067c0: 706f 732c 203c 7370 616e 2063 6c61 7373 pos, i\n+000067e0: 6e74 3c2f 7370 616e 3e20 3c73 7061 6e20 nt \n+00006800: 636f 6e73 743c 2f73 7061 6e3e 2063 7265 const cre\n+00006810: 6173 6545 6e64 735b 325d 2920 3c73 7061 aseEnds[2]) const
    ;<\n+00006840: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+00006890: 3138 353c 2f73 7061 6e3e 2020 2020 3c73 185 template <ty\n+000068e0: 7065 6e61 6d65 3c2f 7370 616e 3e20 5645 pename VE\n+000068f0: 5254 4558 2c20 3c73 7061 6e20 636c 6173 RTEX, type\n+00006910: 6e61 6d65 3c2f 7370 616e 3e20 4d41 534b name MASK\n+00006920: 2667 743b 3c2f 6469 763e 0a3c 6469 7620 >
    .
    186 void assignSmoothL\n+00006a50: 696d 6974 4d61 736b 3c2f 613e 2856 4552 imitMask(VER\n+00006a60: 5445 5820 3c73 7061 6e20 636c 6173 733d TEX const<\n+00006a80: 2f73 7061 6e3e 2661 6d70 3b20 7665 7274 /span>& vert\n+00006a90: 6578 2c20 4d41 534b 2661 6d70 3b20 706f ex, MASK& po\n+00006aa0: 7329 203c 7370 616e 2063 6c61 7373 3d22 s) const;
    .<\n+00006ae0: 6120 6964 3d22 6c30 3031 3837 2220 6e61 a id=\"l00187\" na\n+00006af0: 6d65 3d22 6c30 3031 3837 223e 3c2f 613e me=\"l00187\">\n+00006b00: 3c73 7061 6e20 636c 6173 733d 226c 696e 187
    .
    188 \n+00006b80: 203c 7370 616e 2063 6c61 7373 3d22 6b65 template<\n+00006ba0: 2f73 7061 6e3e 2026 6c74 3b3c 7370 616e /span> <typename\n+00006bd0: 2056 4552 5445 582c 203c 7370 616e 2063 VERTEX, t\n+00006bf0: 7970 656e 616d 653c 2f73 7061 6e3e 204d ypename M\n+00006c00: 4153 4b26 6774 3b3c 2f64 6976 3e0a 3c64 ASK>
    .\n+00006c20: 3c61 2069 643d 226c 3030 3138 3922 206e 189\n+00006ca0: 3c2f 613e 3c2f 7370 616e 3e20 2020 203c <\n+00006cb0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+00006cc0: 6f72 6474 7970 6522 3e76 6f69 643c 2f73 ordtype\">void assignCorn\n+00006d30: 6572 4c69 6d69 7454 616e 6765 6e74 4d61 erLimitTangentMa\n+00006d40: 736b 733c 2f61 3e28 5645 5254 4558 203c sks(VERTEX <\n+00006d50: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+00006d60: 6f72 6422 3e63 6f6e 7374 3c2f 7370 616e ord\">const& vertex, M\n+00006d80: 4153 4b26 616d 703b 2074 616e 312c 204d ASK& tan1, M\n+00006d90: 4153 4b26 616d 703b 2074 616e 3229 203c ASK& tan2) <\n+00006da0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+00006db0: 6f72 6422 3e63 6f6e 7374 3c2f 7370 616e ord\">const;
    .
    190 \n+00006e20: 203c 7370 616e 2063 6c61 7373 3d22 6b65 template<\n+00006e40: 2f73 7061 6e3e 2026 6c74 3b3c 7370 616e /span> <typename\n+00006e70: 2056 4552 5445 582c 203c 7370 616e 2063 VERTEX, t\n+00006e90: 7970 656e 616d 653c 2f73 7061 6e3e 204d ypename M\n+00006ea0: 4153 4b26 6774 3b3c 2f64 6976 3e0a 3c64 ASK>
    .\n+00006ec0: 3c61 2069 643d 226c 3030 3139 3122 206e 191\n+00006f40: 3c2f 613e 3c2f 7370 616e 3e20 2020 203c <\n+00006f50: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+00006f60: 6f72 6474 7970 6522 3e76 6f69 643c 2f73 ordtype\">void assignCrea\n+00006fd0: 7365 4c69 6d69 7454 616e 6765 6e74 4d61 seLimitTangentMa\n+00006fe0: 736b 733c 2f61 3e28 5645 5254 4558 203c sks(VERTEX <\n+00006ff0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+00007000: 6f72 6422 3e63 6f6e 7374 3c2f 7370 616e ord\">const& vertex, M\n+00007020: 4153 4b26 616d 703b 2074 616e 312c 204d ASK& tan1, M\n+00007030: 4153 4b26 616d 703b 2074 616e 322c 203c ASK& tan2, <\n+00007040: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+00007050: 6f72 6474 7970 6522 3e69 6e74 3c2f 7370 ordtype\">int const<\n+00007080: 2f73 7061 6e3e 2063 7265 6173 6545 6e64 /span> creaseEnd\n+00007090: 735b 325d 2920 3c73 7061 6e20 636c 6173 s[2]) cons\n+000070b0: 743c 2f73 7061 6e3e 3b3c 2f64 6976 3e0a t;
    .\n+000070c0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
    <\n+000070f0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 192 te\n+00007130: 6d70 6c61 7465 3c2f 7370 616e 3e20 266c mplate &l\n+00007140: 743b 3c73 7061 6e20 636c 6173 733d 226b t;typename\n+00007160: 3c2f 7370 616e 3e20 5645 5254 4558 2c20 VERTEX, \n+00007170: 3c73 7061 6e20 636c 6173 733d 226b 6579 typename MASK>.
    193 \n+00007260: 766f 6964 3c2f 7370 616e 3e20 3c61 2063 void ass\n+000072c0: 6967 6e53 6d6f 6f74 684c 696d 6974 5461 ignSmoothLimitTa\n+000072d0: 6e67 656e 744d 6173 6b73 3c2f 613e 2856 ngentMasks(V\n+000072e0: 4552 5445 5820 3c73 7061 6e20 636c 6173 ERTEX cons\n+00007300: 743c 2f73 7061 6e3e 2661 6d70 3b20 7665 t& ve\n+00007310: 7274 6578 2c20 4d41 534b 2661 6d70 3b20 rtex, MASK& \n+00007320: 7461 6e31 2c20 4d41 534b 2661 6d70 3b20 tan1, MASK& \n+00007330: 7461 6e32 2920 3c73 7061 6e20 636c 6173 tan2) cons\n+00007350: 743c 2f73 7061 6e3e 3b3c 2f64 6976 3e0a t;
    .\n+00007360: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n+000073f0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00007400: 6e6f 223e 2020 3139 353c 2f73 7061 6e3e no\"> 195\n+00007410: 3c73 7061 6e20 636c 6173 733d 226b 6579 private:
    .<\n+00007470: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00007480: 6e6f 223e 2020 3139 363c 2f73 7061 6e3e no\"> 196\n+00007490: 2020 2020 3c61 2063 6c61 7373 3d22 636f \n+000074c0: 4f70 7469 6f6e 733c 2f61 3e20 5f6f 7074 Options _opt\n+000074d0: 696f 6e73 3b3c 2f64 6976 3e0a 3c64 6976 ions;
    .<\n+00007510: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00007520: 6e6f 223e 2020 3139 373c 2f73 7061 6e3e no\"> 197
    \n+00007530: 203c 2f64 6976 3e0a 3c64 6976 2063 6c61
    .
    \n+00007580: 2020 3139 383c 2f73 7061 6e3e 3c73 7061 198protected:
    .
    199 <\n+00007610: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+00007660: 3230 303c 2f73 7061 6e3e 2020 2020 3c73 200 //.
    20\n+000076e0: 313c 2f73 7061 6e3e 2020 2020 3c73 7061 1 // Internal i\n+00007710: 6d70 6c65 6d65 6e74 6174 696f 6e20 7375 mplementation su\n+00007720: 7070 6f72 743a 3c2f 7370 616e 3e3c 2f64 pport:.
    20\n+00007780: 323c 2f73 7061 6e3e 2020 2020 3c73 7061 2 //.
    203<\n+00007800: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> \n+00007820: 2f2f 2020 5765 206e 6565 6420 6120 6c6f // We need a lo\n+00007830: 6361 6c20 2671 756f 743b 6d61 736b 2671 cal "mask&q\n+00007840: 756f 743b 2063 6c61 7373 2074 6f20 6265 uot; class to be\n+00007850: 2064 6563 6c61 7265 6420 6c6f 6361 6c6c declared locall\n+00007860: 7920 7769 7468 696e 2074 6865 2076 6572 y within the ver\n+00007870: 7465 782d 7665 7274 6578 206d 6173 6b20 tex-vertex mask \n+00007880: 7175 6572 793c 2f73 7061 6e3e 3c2f 6469 query.
    204\n+000078e0: 3c2f 7370 616e 3e20 2020 203c 7370 616e // to hold one\n+00007910: 206f 6620 7468 6520 7477 6f20 706f 7373 of the two poss\n+00007920: 6962 6c65 206d 6173 6b73 2072 6571 7569 ible masks requi\n+00007930: 7265 6420 616e 6420 746f 2063 6f6d 6269 red and to combi\n+00007940: 6e65 2074 6865 206c 6f63 616c 206d 6173 ne the local mas\n+00007950: 6b20 7769 7468 2074 6865 206d 6173 6b3c k with the mask<\n+00007960: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
    .<\n+00007980: 6120 6964 3d22 6c30 3032 3035 2220 6e61 a id=\"l00205\" na\n+00007990: 6d65 3d22 6c30 3032 3035 223e 3c2f 613e me=\"l00205\">\n+000079a0: 3c73 7061 6e20 636c 6173 733d 226c 696e 205 // t\n+000079e0: 6865 2063 616c 6c65 7220 7072 6f76 6964 he caller provid\n+000079f0: 6573 2e20 2049 7420 6861 7320 6265 656e es. It has been\n+00007a00: 2070 6172 616d 6574 6572 697a 6564 2062 parameterized b\n+00007a10: 7920 266c 743b 5745 4947 4854 2667 743b y <WEIGHT>\n+00007a20: 2073 6f20 7468 6174 2061 2076 6572 7369 so that a versi\n+00007a30: 6f6e 2063 6f6d 7061 7469 626c 653c 2f73 on compatible
    .
    206 \n+00007aa0: 2020 203c 7370 616e 2063 6c61 7373 3d22 // wit\n+00007ac0: 6820 7468 6520 6361 6c6c 6572 2623 3339 h the caller'\n+00007ad0: 3b73 206d 6173 6b20 636c 6173 7320 6973 ;s mask class is\n+00007ae0: 2063 7265 6174 6564 2e3c 2f73 7061 6e3e created.\n+00007af0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+00007b40: 2032 3037 3c2f 7370 616e 3e20 2020 203c 207 <\n+00007b50: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n+00007b60: 656e 7422 3e2f 2f3c 2f73 7061 6e3e 3c2f ent\">//.
    2\n+00007bc0: 3038 3c2f 7370 616e 3e20 2020 203c 7370 08 template <typ\n+00007c10: 656e 616d 653c 2f73 7061 6e3e 2057 4549 ename WEI\n+00007c20: 4748 5426 6774 3b3c 2f64 6976 3e0a 3c64 GHT>
    ..
    \n+00007ce0: 2020 3230 393c 2f61 3e3c 2f73 7061 6e3e 209\n+00007cf0: 2020 2020 3c73 7061 6e20 636c 6173 733d class \n+00007d10: 3c2f 7370 616e 3e3c 6120 636c 6173 733d LocalMask\n+00007d50: 207b 3c2f 6469 763e 0a3c 6469 7620 636c {
    .
    210 .
    2\n+00007e00: 3131 3c2f 7370 616e 3e20 2020 203c 7370 11 public\n+00007e30: 3a3c 2f64 6976 3e0a 3c64 6976 2063 6c61 :
    .
    \n+00007e80: 3c61 2063 6c61 7373 3d22 6c69 6e65 2220 212 typedef WEIGHT Weight<\n+00007f60: 2f61 3e3b 3c2f 6469 763e 0a3c 6469 7620 /a>;
    .
    213 \n+00007fc0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+00008010: 2032 3134 3c2f 7370 616e 3e20 2020 203c 214 <\n+00008020: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+00008030: 6f72 6422 3e70 7562 6c69 633c 2f73 7061 ord\">public:
    .
    215\n+000080e0: 3c2f 7370 616e 3e20 2020 2020 2020 203c <\n+000080f0: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n+00008100: 5f66 756e 6374 696f 6e22 2068 7265 663d _function\" href=\n+00008110: 2261 3031 3333 372e 6874 6d6c 2361 6334 \"a01337.html#ac4\n+00008120: 6234 6335 3566 6232 3464 6139 3566 3135 b4c55fb24da95f15\n+00008130: 3466 3461 3966 3531 3764 6230 3739 223e 4f4a9f517db079\">\n+00008140: 4c6f 6361 6c4d 6173 6b3c 2f61 3e28 3c61 LocalMask(We\n+000081a0: 6967 6874 3c2f 613e 2a20 762c 203c 6120 ight* v, Wei\n+00008200: 6768 743c 2f61 3e2a 2065 2c20 3c61 2063 ght* e, Weig\n+00008260: 6874 3c2f 613e 2a20 6629 203a 205f 7657 ht* f) : _vW\n+00008270: 6569 6768 7473 2876 292c 205f 6557 6569 eights(v), _eWei\n+00008280: 6768 7473 2865 292c 205f 6657 6569 6768 ghts(e), _fWeigh\n+00008290: 7473 2866 2920 7b20 7d3c 2f64 6976 3e0a ts(f) { }
    .\n+000082a0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 \n+000083b0: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n+00008420: 6120 6964 3d22 6c30 3032 3138 2220 6e61 a id=\"l00218\" na\n+00008430: 6d65 3d22 6c30 3032 3138 223e 3c2f 613e me=\"l00218\">\n+00008440: 3c73 7061 6e20 636c 6173 733d 226c 696e 218 publi\n+00008480: 633c 2f73 7061 6e3e 3a3c 2f64 6976 3e0a c:
    .\n+00008490: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n+00008520: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00008530: 6e6f 223e 2020 3232 303c 2f73 7061 6e3e no\"> 220\n+00008540: 2020 2020 2020 2020 3c73 7061 6e20 636c //\n+00008560: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
    .\n+00008580: 3c61 2069 643d 226c 3030 3232 3122 206e 221 \n+000085e0: 2f2f 2020 4d65 7468 6f64 7320 7265 7175 // Methods requ\n+000085f0: 6972 6564 2066 6f72 2067 656e 6572 616c ired for general\n+00008600: 206d 6173 6b20 6173 7369 676e 6d65 6e74 mask assignment\n+00008610: 7320 616e 6420 7175 6572 6965 733a 3c2f s and queries:
    .<\n+00008660: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00008670: 6e6f 223e 2020 3232 323c 2f73 7061 6e3e no\"> 222\n+00008680: 2020 2020 2020 2020 3c73 7061 6e20 636c //\n+000086a0: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
    .\n+000086c0: 3c61 2069 643d 226c 3030 3232 3322 206e 223\n+00008740: 3c2f 613e 3c2f 7370 616e 3e20 2020 2020 \n+00008750: 2020 203c 7370 616e 2063 6c61 7373 3d22 int\n+00008770: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 GetNumV\n+000087d0: 6572 7465 7857 6569 6768 7473 3c2f 613e ertexWeights\n+000087e0: 2829 3c73 7061 6e20 636c 6173 733d 226b () const <\n+00008800: 2f73 7061 6e3e 7b20 3c73 7061 6e20 636c /span>{ return \n+00008830: 5f76 436f 756e 743b 207d 3c2f 6469 763e _vCount; }
    \n+00008840: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+00008870: 3c2f 613e 3c73 7061 6e20 636c 6173 733d \n+000088d0: 3232 343c 2f61 3e3c 2f73 7061 6e3e 2020 224 \n+000088e0: 2020 2020 2020 3c73 7061 6e20 636c 6173 \n+00008900: 696e 743c 2f73 7061 6e3e 203c 6120 636c int GetN\n+00008960: 756d 4564 6765 5765 6967 6874 733c 2f61 umEdgeWeights() cons\n+00008990: 7420 3c2f 7370 616e 3e7b 203c 7370 616e t { return _eCount; }.
    225 int G\n+00008af0: 6574 4e75 6d46 6163 6557 6569 6768 7473 etNumFaceWeights\n+00008b00: 3c2f 613e 2829 3c73 7061 6e20 636c 6173 () c\n+00008b20: 6f6e 7374 203c 2f73 7061 6e3e 7b20 3c73 onst { return _fCount; }\n+00008b60: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+00008bb0: 2032 3236 3c2f 7370 616e 3e20 3c2f 6469 226 .
    \n+00008c50: 2020 3232 373c 2f61 3e3c 2f73 7061 6e3e 227\n+00008c60: 2020 2020 2020 2020 3c73 7061 6e20 636c void S\n+00008ce0: 6574 4e75 6d56 6572 7465 7857 6569 6768 etNumVertexWeigh\n+00008cf0: 7473 3c2f 613e 283c 7370 616e 2063 6c61 ts(int coun\n+00008d20: 7429 207b 205f 7643 6f75 6e74 203d 2063 t) { _vCount = c\n+00008d30: 6f75 6e74 3b20 7d3c 2f64 6976 3e0a 3c64 ount; }
    .\n+00008d50: 3c61 2069 643d 226c 3030 3232 3822 206e 228\n+00008dd0: 3c2f 613e 3c2f 7370 616e 3e20 2020 2020 \n+00008de0: 2020 203c 7370 616e 2063 6c61 7373 3d22 voi\n+00008e00: 643c 2f73 7061 6e3e 203c 6120 636c 6173 d SetNum\n+00008e60: 4564 6765 5765 6967 6874 733c 2f61 3e28 EdgeWeights(\n+00008e70: 2020 3c73 7061 6e20 636c 6173 733d 226b int<\n+00008e90: 2f73 7061 6e3e 2063 6f75 6e74 2920 7b20 /span> count) { \n+00008ea0: 5f65 436f 756e 7420 3d20 636f 756e 743b _eCount = count;\n+00008eb0: 207d 3c2f 6469 763e 0a3c 6469 7620 636c }
    .
    229<\n+00008f50: 2f73 7061 6e3e 2020 2020 2020 2020 3c73 /span> void SetNumFaceW\n+00008fe0: 6569 6768 7473 3c2f 613e 2820 203c 7370 eights( int count) { _fCou\n+00009020: 6e74 203d 2063 6f75 6e74 3b20 7d3c 2f64 nt = count; }.
    23\n+00009080: 303c 2f73 7061 6e3e 203c 2f64 6976 3e0a 0
    .\n+00009090: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
    <\n+000090c0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 2\n+00009120: 3331 3c2f 613e 3c2f 7370 616e 3e20 2020 31 \n+00009130: 2020 2020 203c 6120 636c 6173 733d 2263 Weight \n+00009190: 3c73 7061 6e20 636c 6173 733d 226b 6579 const& VertexW\n+00009210: 6569 6768 743c 2f61 3e28 3c73 7061 6e20 eight(int i\n+00009240: 6e64 6578 293c 7370 616e 2063 6c61 7373 ndex) cons\n+00009260: 7420 3c2f 7370 616e 3e7b 203c 7370 616e t { return _vWeights[ind\n+000092a0: 6578 5d3b 207d 3c2f 6469 763e 0a3c 6469 ex]; }
    .<\n+000092c0: 6120 6964 3d22 6c30 3032 3332 2220 6e61 a id=\"l00232\" na\n+000092d0: 6d65 3d22 6c30 3032 3332 223e 3c2f 613e me=\"l00232\">\n+000092e0: 3c73 7061 6e20 636c 6173 733d 226c 696e 232<\n+00009340: 2f61 3e3c 2f73 7061 6e3e 2020 2020 2020 /a> \n+00009350: 2020 3c61 2063 6c61 7373 3d22 636f 6465 Weight const&\n+000093d0: 616d 703b 203c 6120 636c 6173 733d 2263 amp; EdgeWeight\n+00009430: 3c2f 613e 2820 203c 7370 616e 2063 6c61 ( int inde\n+00009460: 7829 3c73 7061 6e20 636c 6173 733d 226b x) const <\n+00009480: 2f73 7061 6e3e 7b20 3c73 7061 6e20 636c /span>{ return \n+000094b0: 5f65 5765 6967 6874 735b 696e 6465 785d _eWeights[index]\n+000094c0: 3b20 7d3c 2f64 6976 3e0a 3c64 6976 2063 ; }
    .
    233\n+00009560: 3c2f 7370 616e 3e20 2020 2020 2020 203c <\n+00009570: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n+00009580: 5f74 7970 6564 6566 2220 6872 6566 3d22 _typedef\" href=\"\n+00009590: 6130 3133 3337 2e68 746d 6c23 6131 3733 a01337.html#a173\n+000095a0: 6539 3865 3064 3162 3364 3135 6635 6333 e98e0d1b3d15f5c3\n+000095b0: 6164 3433 3664 3066 6564 3430 3122 3e57 ad436d0fed401\">W\n+000095c0: 6569 6768 743c 2f61 3e20 3c73 7061 6e20 eight \n+000095e0: 636f 6e73 743c 2f73 7061 6e3e 2661 6d70 const&\n+000095f0: 3b20 3c61 2063 6c61 7373 3d22 636f 6465 ; FaceWeight( in\n+00009670: 743c 2f73 7061 6e3e 2069 6e64 6578 293c t index)<\n+00009680: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+00009690: 6f72 6422 3e20 636f 6e73 7420 3c2f 7370 ord\"> const { r\n+000096c0: 6574 7572 6e3c 2f73 7061 6e3e 205f 6657 eturn _fW\n+000096d0: 6569 6768 7473 5b69 6e64 6578 5d3b 207d eights[index]; }\n+000096e0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+00009730: 2032 3334 3c2f 7370 616e 3e20 3c2f 6469 234 .
    \n+000097d0: 2020 3233 353c 2f61 3e3c 2f73 7061 6e3e 235\n+000097e0: 2020 2020 2020 2020 3c61 2063 6c61 7373 Weight& VertexW\n+000098a0: 6569 6768 743c 2f61 3e28 3c73 7061 6e20 eight(int i\n+000098d0: 6e64 6578 2920 7b20 3c73 7061 6e20 636c ndex) { return \n+00009900: 5f76 5765 6967 6874 735b 696e 6465 785d _vWeights[index]\n+00009910: 3b20 7d3c 2f64 6976 3e0a 3c64 6976 2063 ; }
    .
    236\n+000099b0: 3c2f 7370 616e 3e20 2020 2020 2020 203c <\n+000099c0: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n+000099d0: 5f74 7970 6564 6566 2220 6872 6566 3d22 _typedef\" href=\"\n+000099e0: 6130 3133 3337 2e68 746d 6c23 6131 3733 a01337.html#a173\n+000099f0: 6539 3865 3064 3162 3364 3135 6635 6333 e98e0d1b3d15f5c3\n+00009a00: 6164 3433 3664 3066 6564 3430 3122 3e57 ad436d0fed401\">W\n+00009a10: 6569 6768 743c 2f61 3e26 616d 703b 203c eight& <\n+00009a20: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n+00009a30: 5f66 756e 6374 696f 6e22 2068 7265 663d _function\" href=\n+00009a40: 2261 3031 3333 372e 6874 6d6c 2361 3533 \"a01337.html#a53\n+00009a50: 3364 6261 3332 6139 3436 3835 3463 3366 3dba32a946854c3f\n+00009a60: 3235 6532 3762 3532 3165 6637 6466 223e 25e27b521ef7df\">\n+00009a70: 4564 6765 5765 6967 6874 3c2f 613e 2820 EdgeWeight( \n+00009a80: 203c 7370 616e 2063 6c61 7373 3d22 6b65 int index) { <\n+00009ab0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+00009ac0: 6f72 6466 6c6f 7722 3e72 6574 7572 6e3c ordflow\">return<\n+00009ad0: 2f73 7061 6e3e 205f 6557 6569 6768 7473 /span> _eWeights\n+00009ae0: 5b69 6e64 6578 5d3b 207d 3c2f 6469 763e [index]; }
    \n+00009af0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+00009b20: 3c2f 613e 3c73 7061 6e20 636c 6173 733d \n+00009b80: 3233 373c 2f61 3e3c 2f73 7061 6e3e 2020 237 \n+00009b90: 2020 2020 2020 3c61 2063 6c61 7373 3d22 Weight\n+00009bf0: 2661 6d70 3b20 3c61 2063 6c61 7373 3d22 & FaceWeigh\n+00009c50: 743c 2f61 3e28 2020 3c73 7061 6e20 636c t( int ind\n+00009c80: 6578 2920 7b20 3c73 7061 6e20 636c 6173 ex) { \n+00009ca0: 7265 7475 726e 3c2f 7370 616e 3e20 5f66 return _f\n+00009cb0: 5765 6967 6874 735b 696e 6465 785d 3b20 Weights[index]; \n+00009cc0: 7d3c 2f64 6976 3e0a 3c64 6976 2063 6c61 }
    .
    \n+00009d10: 2020 3233 383c 2f73 7061 6e3e 203c 2f64 238 .
    239 bool <\n+00009df0: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n+00009e00: 5f66 756e 6374 696f 6e22 2068 7265 663d _function\" href=\n+00009e10: 2261 3031 3333 372e 6874 6d6c 2361 3335 \"a01337.html#a35\n+00009e20: 3139 6535 6530 3536 3331 3032 3666 6164 19e5e05631026fad\n+00009e30: 3934 6337 3631 3666 3565 3065 3637 223e 94c7616f5e0e67\">\n+00009e40: 4172 6546 6163 6557 6569 6768 7473 466f AreFaceWeightsFo\n+00009e50: 7246 6163 6543 656e 7465 7273 3c2f 613e rFaceCenters\n+00009e60: 2829 3c73 7061 6e20 636c 6173 733d 226b () const \n+00009e80: 3c2f 7370 616e 3e7b 203c 7370 616e 2063 { return\n+00009eb0: 205f 6657 6569 6768 7473 466f 7243 656e _fWeightsForCen\n+00009ec0: 7465 7273 3b20 7d3c 2f64 6976 3e0a 3c64 ters; }
    .\n+00009ee0: 3c61 2069 643d 226c 3030 3234 3022 206e 240\n+00009f60: 3c2f 613e 3c2f 7370 616e 3e20 2020 2020 \n+00009f70: 2020 203c 7370 616e 2063 6c61 7373 3d22 voi\n+00009f90: 643c 2f73 7061 6e3e 203c 6120 636c 6173 d SetFac\n+00009ff0: 6557 6569 6768 7473 466f 7246 6163 6543 eWeightsForFaceC\n+0000a000: 656e 7465 7273 3c2f 613e 283c 7370 616e enters(bool\n+0000a030: 206f 6e29 207b 205f 6657 6569 6768 7473 on) { _fWeights\n+0000a040: 466f 7243 656e 7465 7273 203d 206f 6e3b ForCenters = on;\n+0000a050: 207d 3c2f 6469 763e 0a3c 6469 7620 636c }
    .
    241 .
    2\n+0000a100: 3432 3c2f 7370 616e 3e20 2020 203c 7370 42 public\n+0000a130: 3a3c 2f64 6976 3e0a 3c64 6976 2063 6c61 :
    .
    \n+0000a180: 2020 3234 333c 2f73 7061 6e3e 203c 2f64 243 .
    24\n+0000a1e0: 343c 2f73 7061 6e3e 2020 2020 2020 2020 4 \n+0000a1f0: 3c73 7061 6e20 636c 6173 733d 2263 6f6d //<\n+0000a210: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+0000a260: 3234 353c 2f73 7061 6e3e 2020 2020 2020 245 \n+0000a270: 2020 3c73 7061 6e20 636c 6173 733d 2263 // Addi\n+0000a290: 7469 6f6e 616c 206d 6574 686f 6473 202d tional methods -\n+0000a2a0: 2d20 6d61 696e 6c79 2074 6865 2062 6c65 - mainly the ble\n+0000a2b0: 6e64 696e 6720 6d65 7468 6f64 2066 6f72 nding method for\n+0000a2c0: 2076 6572 7465 782d 7665 7274 6578 206d vertex-vertex m\n+0000a2d0: 6173 6b73 3a3c 2f73 7061 6e3e 3c2f 6469 asks:.
    246\n+0000a330: 3c2f 7370 616e 3e20 2020 2020 2020 203c <\n+0000a340: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n+0000a350: 656e 7422 3e2f 2f3c 2f73 7061 6e3e 3c2f ent\">//.
    2\n+0000a3b0: 3437 3c2f 7370 616e 3e20 2020 2020 2020 47 \n+0000a3c0: 203c 7370 616e 2063 6c61 7373 3d22 6b65 template<\n+0000a3e0: 2f73 7061 6e3e 2026 6c74 3b3c 7370 616e /span> <typename\n+0000a410: 2055 5345 525f 4d41 534b 2667 743b 3c2f USER_MASK>.
    2\n+0000a470: 3438 3c2f 7370 616e 3e20 2020 2020 2020 48 \n+0000a480: 203c 7370 616e 2063 6c61 7373 3d22 6b65 inline v\n+0000a4c0: 6f69 643c 2f73 7061 6e3e 3c2f 6469 763e oid
    \n+0000a4d0: 0a3c 6469 7620 636c 6173 733d 2266 6f6c .
    .
    <\n+0000a560: 6120 636c 6173 733d 226c 696e 6522 2068 a class=\"line\" h\n+0000a570: 7265 663d 2261 3031 3333 372e 6874 6d6c ref=\"a01337.html\n+0000a580: 2361 3565 6438 3030 6539 6437 3032 6635 #a5ed800e9d702f5\n+0000a590: 3761 6539 3738 6665 3630 6261 3261 3337 7ae978fe60ba2a37\n+0000a5a0: 6463 223e 2020 3234 393c 2f61 3e3c 2f73 dc\"> 249 Com\n+0000a610: 6269 6e65 5665 7274 6578 5665 7274 6578 bineVertexVertex\n+0000a620: 4d61 736b 733c 2f61 3e28 3c61 2063 6c61 Masks(Weight\n+0000a680: 3c2f 613e 2074 6869 7343 6f65 6666 2c20 thisCoeff, \n+0000a690: 3c61 2063 6c61 7373 3d22 636f 6465 2068 \n+0000a6e0: 5765 6967 6874 3c2f 613e 2064 7374 436f Weight dstCo\n+0000a6f0: 6566 662c 2055 5345 525f 4d41 534b 2661 eff, USER_MASK&a\n+0000a700: 6d70 3b20 6473 7429 3c73 7061 6e20 636c mp; dst) c\n+0000a720: 6f6e 7374 203c 2f73 7061 6e3e 7b3c 2f64 onst {.
    25\n+0000a780: 303c 2f73 7061 6e3e 203c 2f64 6976 3e0a 0
    .\n+0000a790: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
    <\n+0000a7c0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 251 \n+0000a7f0: 3c73 7061 6e20 636c 6173 733d 2263 6f6d //<\n+0000a810: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+0000a860: 3235 323c 2f73 7061 6e3e 2020 2020 2020 252 \n+0000a870: 2020 2020 2020 3c73 7061 6e20 636c 6173 // \n+0000a890: 5468 6973 2069 6d70 6c65 6d65 6e74 6174 This implementat\n+0000a8a0: 696f 6e20 6973 2063 6f6e 766f 6c75 7465 ion is convolute\n+0000a8b0: 6420 6279 2074 6865 2070 6f74 656e 7469 d by the potenti\n+0000a8c0: 616c 2073 7061 7273 6974 7920 6f66 2065 al sparsity of e\n+0000a8d0: 6163 6820 6d61 736b 2e20 2053 696e 6365 ach mask. Since\n+0000a8e0: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
    .\n+0000a900: 3c61 2069 643d 226c 3030 3235 3322 206e 253 // it is sp\n+0000a970: 6563 6966 6963 2074 6f20 6120 7665 7274 ecific to a vert\n+0000a980: 6578 2d76 6572 7465 7820 6d61 736b 2c20 ex-vertex mask, \n+0000a990: 7765 2061 7265 2067 7561 7261 6e74 6565 we are guarantee\n+0000a9a0: 6420 746f 2068 6176 6520 6578 6163 746c d to have exactl\n+0000a9b0: 7920 6f6e 653c 2f73 7061 6e3e 3c2f 6469 y one.
    254\n+0000aa10: 3c2f 7370 616e 3e20 2020 2020 2020 2020 \n+0000aa20: 2020 203c 7370 616e 2063 6c61 7373 3d22 // ver\n+0000aa40: 7465 782d 7765 6967 6874 2066 6f72 2062 tex-weight for b\n+0000aa50: 6f74 6820 6d61 736b 732c 2062 7574 2074 oth masks, but t\n+0000aa60: 6865 2065 6467 652d 2061 6e64 2066 6163 he edge- and fac\n+0000aa70: 652d 7765 6967 6874 7320 6172 6520 6f70 e-weights are op\n+0000aa80: 7469 6f6e 616c 2e20 2054 6865 3c2f 7370 tional. The
    .
    255 \n+0000aaf0: 2020 2020 2020 2020 2020 3c73 7061 6e20 \n+0000ab10: 2f2f 2020 6368 696c 6420 6d61 736b 2028 // child mask (\n+0000ab20: 7468 6520 2671 756f 743b 736f 7572 6365 the "source\n+0000ab30: 2671 756f 743b 2920 7368 6f75 6c64 2068 ") should h\n+0000ab40: 6176 6520 6120 7375 7065 7273 6574 206f ave a superset o\n+0000ab50: 6620 7468 6520 7765 6967 6874 7320 6f66 f the weights of\n+0000ab60: 2074 6865 2070 6172 656e 743c 2f73 7061 the parent
    .
    256 \n+0000abd0: 2020 2020 2020 2020 203c 7370 616e 2063 /\n+0000abf0: 2f20 2028 7468 6520 2671 756f 743b 6465 / (the "de\n+0000ac00: 7374 696e 6174 696f 6e26 7175 6f74 3b29 stination")\n+0000ac10: 2067 6976 656e 2069 7473 2072 6564 7563 given its reduc\n+0000ac20: 6564 2073 6861 7270 6e65 7373 2c20 736f ed sharpness, so\n+0000ac30: 2077 6520 666f 7274 756e 6174 656c 7920 we fortunately \n+0000ac40: 646f 6e26 2333 393b 7420 6e65 6564 2074 don't need t\n+0000ac50: 6f3c 2f73 7061 6e3e 3c2f 6469 763e 0a3c o
    .<\n+0000ac60: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+0000ac70: 3e3c 6120 6964 3d22 6c30 3032 3537 2220 > 257 <\n+0000acc0: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n+0000acd0: 656e 7422 3e2f 2f20 2074 6573 7420 616c ent\">// test al\n+0000ace0: 6c20 7065 726d 7574 6174 696f 6e73 2e3c l permutations.<\n+0000acf0: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
    .<\n+0000ad10: 6120 6964 3d22 6c30 3032 3538 2220 6e61 a id=\"l00258\" na\n+0000ad20: 6d65 3d22 6c30 3032 3538 223e 3c2f 613e me=\"l00258\">\n+0000ad30: 3c73 7061 6e20 636c 6173 733d 226c 696e 258 //.
    259\n+0000add0: 3c2f 7370 616e 3e20 2020 2020 2020 2020 \n+0000ade0: 2020 2064 7374 2e56 6572 7465 7857 6569 dst.VertexWei\n+0000adf0: 6768 7428 3029 203d 2064 7374 436f 6566 ght(0) = dstCoef\n+0000ae00: 6620 2a20 6473 742e 5665 7274 6578 5765 f * dst.VertexWe\n+0000ae10: 6967 6874 2830 2920 2b20 7468 6973 436f ight(0) + thisCo\n+0000ae20: 6566 6620 2a20 7468 6973 2d26 6774 3b3c eff * this-><\n+0000ae30: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n+0000ae40: 5f66 756e 6374 696f 6e22 2068 7265 663d _function\" href=\n+0000ae50: 2261 3031 3333 372e 6874 6d6c 2361 6563 \"a01337.html#aec\n+0000ae60: 3563 3261 6266 6466 6264 6534 6464 3933 5c2abfdfbde4dd93\n+0000ae70: 3463 3036 3136 3235 3939 3437 3931 223e 4c061625994791\">\n+0000ae80: 5665 7274 6578 5765 6967 6874 3c2f 613e VertexWeight\n+0000ae90: 2830 293b 3c2f 6469 763e 0a3c 6469 7620 (0);
    .
    260 \n+0000aef0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+0000af40: 2032 3631 3c2f 7370 616e 3e20 2020 2020 261 \n+0000af50: 2020 2020 2020 203c 7370 616e 2063 6c61 int edge\n+0000af80: 5765 6967 6874 436f 756e 7420 3d20 7468 WeightCount = th\n+0000af90: 6973 2d26 6774 3b3c 6120 636c 6173 733d is->GetNumEd\n+0000aff0: 6765 5765 6967 6874 733c 2f61 3e28 293b geWeights();\n+0000b000: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+0000b050: 2032 3632 3c2f 7370 616e 3e20 2020 2020 262 \n+0000b060: 2020 2020 2020 203c 7370 616e 2063 6c61 if (edge\n+0000b090: 5765 6967 6874 436f 756e 7429 207b 3c2f WeightCount) {.
    2\n+0000b0f0: 3633 3c2f 7370 616e 3e20 2020 2020 2020 63 \n+0000b100: 2020 2020 2020 2020 203c 7370 616e 2063 if (ds\n+0000b130: 742e 4765 744e 756d 4564 6765 5765 6967 t.GetNumEdgeWeig\n+0000b140: 6874 7328 2920 3d3d 2030 2920 7b3c 2f64 hts() == 0) {.
    26\n+0000b1a0: 343c 2f73 7061 6e3e 2020 2020 2020 2020 4 \n+0000b1b0: 2020 2020 2020 2020 2020 2020 6473 742e dst.\n+0000b1c0: 5365 744e 756d 4564 6765 5765 6967 6874 SetNumEdgeWeight\n+0000b1d0: 7328 6564 6765 5765 6967 6874 436f 756e s(edgeWeightCoun\n+0000b1e0: 7429 3b3c 2f64 6976 3e0a 3c64 6976 2063 t);
    .
    265 \n+0000b240: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000b250: 2020 3c73 7061 6e20 636c 6173 733d 226b for<\n+0000b270: 2f73 7061 6e3e 2028 3c73 7061 6e20 636c /span> (int i =\n+0000b2a0: 2030 3b20 6920 266c 743b 2065 6467 6557 0; i < edgeW\n+0000b2b0: 6569 6768 7443 6f75 6e74 3b20 2b2b 6929 eightCount; ++i)\n+0000b2c0: 207b 3c2f 6469 763e 0a3c 6469 7620 636c {
    .
    266 \n+0000b320: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000b330: 2020 2020 2064 7374 2e45 6467 6557 6569 dst.EdgeWei\n+0000b340: 6768 7428 6929 203d 2074 6869 7343 6f65 ght(i) = thisCoe\n+0000b350: 6666 202a 2074 6869 732d 2667 743b 3c61 ff * this->E\n+0000b3b0: 6467 6557 6569 6768 743c 2f61 3e28 6929 dgeWeight(i)\n+0000b3c0: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
    .
    \n+0000b410: 2020 3236 373c 2f73 7061 6e3e 2020 2020 267 \n+0000b420: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000b430: 7d3c 2f64 6976 3e0a 3c64 6976 2063 6c61 }
    .
    \n+0000b480: 2020 3236 383c 2f73 7061 6e3e 2020 2020 268 \n+0000b490: 2020 2020 2020 2020 2020 2020 7d20 3c73 } else {
    .<\n+0000b500: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+0000b510: 6e6f 223e 2020 3236 393c 2f73 7061 6e3e no\"> 269\n+0000b520: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000b530: 2020 2020 3c73 7061 6e20 636c 6173 733d fo\n+0000b550: 723c 2f73 7061 6e3e 2028 3c73 7061 6e20 r (int i\n+0000b580: 203d 2030 3b20 6920 266c 743b 2065 6467 = 0; i < edg\n+0000b590: 6557 6569 6768 7443 6f75 6e74 3b20 2b2b eWeightCount; ++\n+0000b5a0: 6929 207b 3c2f 6469 763e 0a3c 6469 7620 i) {
    .
    270 \n+0000b600: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000b610: 2020 2020 2020 2064 7374 2e45 6467 6557 dst.EdgeW\n+0000b620: 6569 6768 7428 6929 203d 2064 7374 436f eight(i) = dstCo\n+0000b630: 6566 6620 2a20 6473 742e 4564 6765 5765 eff * dst.EdgeWe\n+0000b640: 6967 6874 2869 2920 2b20 7468 6973 436f ight(i) + thisCo\n+0000b650: 6566 6620 2a20 7468 6973 2d26 6774 3b3c eff * this-><\n+0000b660: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n+0000b670: 5f66 756e 6374 696f 6e22 2068 7265 663d _function\" href=\n+0000b680: 2261 3031 3333 372e 6874 6d6c 2361 3464 \"a01337.html#a4d\n+0000b690: 6239 3332 6138 6133 3366 6430 3632 3263 b932a8a33fd0622c\n+0000b6a0: 3764 3031 3136 3765 6231 3462 3532 223e 7d01167eb14b52\">\n+0000b6b0: 4564 6765 5765 6967 6874 3c2f 613e 2869 EdgeWeight(i\n+0000b6c0: 293b 3c2f 6469 763e 0a3c 6469 7620 636c );
    .
    271 \n+0000b720: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000b730: 207d 3c2f 6469 763e 0a3c 6469 7620 636c }
    .
    272 \n+0000b790: 2020 2020 2020 2020 2020 2020 207d 3c2f }.
    2\n+0000b7f0: 3733 3c2f 7370 616e 3e20 2020 2020 2020 73 \n+0000b800: 2020 2020 207d 3c2f 6469 763e 0a3c 6469 }
    .<\n+0000b820: 6120 6964 3d22 6c30 3032 3734 2220 6e61 a id=\"l00274\" na\n+0000b830: 6d65 3d22 6c30 3032 3734 223e 3c2f 613e me=\"l00274\">\n+0000b840: 3c73 7061 6e20 636c 6173 733d 226c 696e 274
    .
    275 \n+0000b8c0: 2020 2020 2020 2020 203c 7370 616e 2063 int fa\n+0000b8f0: 6365 5765 6967 6874 436f 756e 7420 3d20 ceWeightCount = \n+0000b900: 7468 6973 2d26 6774 3b3c 6120 636c 6173 this->GetNum\n+0000b960: 4661 6365 5765 6967 6874 733c 2f61 3e28 FaceWeights(\n+0000b970: 293b 3c2f 6469 763e 0a3c 6469 7620 636c );
    .
    276 \n+0000b9d0: 2020 2020 2020 2020 203c 7370 616e 2063 if (fa\n+0000ba00: 6365 5765 6967 6874 436f 756e 7429 207b ceWeightCount) {\n+0000ba10: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+0000ba60: 2032 3737 3c2f 7370 616e 3e20 2020 2020 277 \n+0000ba70: 2020 2020 2020 2020 2020 203c 7370 616e //
    \n+0000baa0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+0000bad0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 278 \n+0000bb00: 2020 2020 203c 7370 616e 2063 6c61 7373 // I\n+0000bb20: 6620 636f 6d62 696e 696e 6720 6661 6365 f combining face\n+0000bb30: 2077 6569 6768 7473 2c20 6265 2073 7572 weights, be sur\n+0000bb40: 6520 7468 6569 7220 696e 7465 7270 7265 e their interpre\n+0000bb50: 7461 7469 6f6e 2028 692e 652e 2066 6163 tation (i.e. fac\n+0000bb60: 652d 6365 6e74 6572 733c 2f73 7061 6e3e e-centers\n+0000bb70: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+0000bbc0: 2032 3739 3c2f 7370 616e 3e20 2020 2020 279 \n+0000bbd0: 2020 2020 2020 2020 2020 203c 7370 616e // or opposite\n+0000bc00: 2076 6572 7469 6365 7329 2069 7320 7072 vertices) is pr\n+0000bc10: 6f70 6572 6c79 2073 6574 2069 6e20 7468 operly set in th\n+0000bc20: 6520 6465 7374 696e 6174 696f 6e20 6d61 e destination ma\n+0000bc30: 736b 3a3c 2f73 7061 6e3e 3c2f 6469 763e sk:
    \n+0000bc40: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+0000bc70: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 280 \n+0000bca0: 2020 2020 203c 7370 616e 2063 6c61 7373 //
    .
    281 \n+0000bd20: 2020 2020 2020 2020 2020 2020 2020 203c <\n+0000bd30: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+0000bd40: 6f72 6466 6c6f 7722 3e69 663c 2f73 7061 ordflow\">if (dst.GetNumFa\n+0000bd60: 6365 5765 6967 6874 7328 2920 3d3d 2030 ceWeights() == 0\n+0000bd70: 2920 7b3c 2f64 6976 3e0a 3c64 6976 2063 ) {
    .
    282 \n+0000bdd0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000bde0: 2020 6473 742e 5365 744e 756d 4661 6365 dst.SetNumFace\n+0000bdf0: 5765 6967 6874 7328 6661 6365 5765 6967 Weights(faceWeig\n+0000be00: 6874 436f 756e 7429 3b3c 2f64 6976 3e0a htCount);
    .\n+0000be10: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .\n+0000bf30: 3c61 2069 643d 226c 3030 3238 3422 206e 284
    .
    285 \n+0000bfd0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000bfe0: 2020 3c73 7061 6e20 636c 6173 733d 226b for<\n+0000c000: 2f73 7061 6e3e 2028 3c73 7061 6e20 636c /span> (int i =\n+0000c030: 2030 3b20 6920 266c 743b 2066 6163 6557 0; i < faceW\n+0000c040: 6569 6768 7443 6f75 6e74 3b20 2b2b 6929 eightCount; ++i)\n+0000c050: 207b 3c2f 6469 763e 0a3c 6469 7620 636c {
    .
    286 \n+0000c0b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000c0c0: 2020 2020 2064 7374 2e46 6163 6557 6569 dst.FaceWei\n+0000c0d0: 6768 7428 6929 203d 2074 6869 7343 6f65 ght(i) = thisCoe\n+0000c0e0: 6666 202a 2074 6869 732d 2667 743b 3c61 ff * this->F\n+0000c140: 6163 6557 6569 6768 743c 2f61 3e28 6929 aceWeight(i)\n+0000c150: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
    .
    \n+0000c1a0: 2020 3238 373c 2f73 7061 6e3e 2020 2020 287 \n+0000c1b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000c1c0: 7d3c 2f64 6976 3e0a 3c64 6976 2063 6c61 }
    .
    \n+0000c210: 2020 3238 383c 2f73 7061 6e3e 2020 2020 288 \n+0000c220: 2020 2020 2020 2020 2020 2020 7d20 3c73 } else {
    .<\n+0000c290: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+0000c2a0: 6e6f 223e 2020 3238 393c 2f73 7061 6e3e no\"> 289
    \n+0000c2b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000c2c0: 2020 2020 6173 7365 7274 2874 6869 732d assert(this-\n+0000c2d0: 2667 743b 3c61 2063 6c61 7373 3d22 636f >AreFaceWeig\n+0000c330: 6874 7346 6f72 4661 6365 4365 6e74 6572 htsForFaceCenter\n+0000c340: 733c 2f61 3e28 2920 3d3d 2064 7374 2e41 s() == dst.A\n+0000c350: 7265 4661 6365 5765 6967 6874 7346 6f72 reFaceWeightsFor\n+0000c360: 4661 6365 4365 6e74 6572 7328 2929 3b3c FaceCenters());<\n+0000c370: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+0000c3c0: 3239 303c 2f73 7061 6e3e 203c 2f64 6976 290 .
    291<\n+0000c420: 2f73 7061 6e3e 2020 2020 2020 2020 2020 /span> \n+0000c430: 2020 2020 2020 2020 2020 3c73 7061 6e20 for (\n+0000c460: 3c73 7061 6e20 636c 6173 733d 226b 6579 int i = 0; i &l\n+0000c490: 743b 2066 6163 6557 6569 6768 7443 6f75 t; faceWeightCou\n+0000c4a0: 6e74 3b20 2b2b 6929 207b 3c2f 6469 763e nt; ++i) {
    \n+0000c4b0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+0000c4e0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 292 \n+0000c510: 2020 2020 2020 2020 2020 2020 2064 7374 dst\n+0000c520: 2e46 6163 6557 6569 6768 7428 6929 203d .FaceWeight(i) =\n+0000c530: 2064 7374 436f 6566 6620 2a20 6473 742e dstCoeff * dst.\n+0000c540: 4661 6365 5765 6967 6874 2869 2920 2b20 FaceWeight(i) + \n+0000c550: 7468 6973 436f 6566 6620 2a20 7468 6973 thisCoeff * this\n+0000c560: 2d26 6774 3b3c 6120 636c 6173 733d 2263 ->FaceWeight\n+0000c5c0: 3c2f 613e 2869 293b 3c2f 6469 763e 0a3c (i);
    .<\n+0000c5d0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+0000c5e0: 3e3c 6120 6964 3d22 6c30 3032 3933 2220 > 293 \n+0000c630: 2020 2020 2020 207d 3c2f 6469 763e 0a3c }
    .<\n+0000c640: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+0000c650: 3e3c 6120 6964 3d22 6c30 3032 3934 2220 > 294 \n+0000c6a0: 2020 207d 3c2f 6469 763e 0a3c 6469 7620 }
    .
    295 \n+0000c700: 2020 2020 2020 2020 2020 207d 3c2f 6469 }.
    296\n+0000c760: 3c2f 7370 616e 3e20 2020 2020 2020 207d }\n+0000c770: 3c2f 6469 763e 0a3c 2f64 6976 3e0a 3c64
    .
    .\n+0000c790: 3c61 2069 643d 226c 3030 3239 3722 206e 297
    .
    298 \n+0000c830: 2020 3c73 7061 6e20 636c 6173 733d 226b private<\n+0000c850: 2f73 7061 6e3e 3a3c 2f64 6976 3e0a 3c64 /span>:
    .\n+0000c870: 3c61 2069 643d 226c 3030 3239 3922 206e 299 Weight\n+0000c910: 3c2f 613e 2a20 5f76 5765 6967 6874 733b * _vWeights;\n+0000c920: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+0000c970: 2033 3030 3c2f 7370 616e 3e20 2020 2020 300 \n+0000c980: 2020 203c 6120 636c 6173 733d 2263 6f64 Weight* _\n+0000c9e0: 6557 6569 6768 7473 3b3c 2f64 6976 3e0a eWeights;
    .\n+0000c9f0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
    302 \n+0000cb10: 2020 2020 203c 7370 616e 2063 6c61 7373 i\n+0000cb30: 6e74 3c2f 7370 616e 3e20 5f76 436f 756e nt _vCoun\n+0000cb40: 743b 3c2f 6469 763e 0a3c 6469 7620 636c t;
    .
    303 \n+0000cba0: 2020 2020 203c 7370 616e 2063 6c61 7373 i\n+0000cbc0: 6e74 3c2f 7370 616e 3e20 5f65 436f 756e nt _eCoun\n+0000cbd0: 743b 3c2f 6469 763e 0a3c 6469 7620 636c t;
    .
    304 \n+0000cc30: 2020 2020 203c 7370 616e 2063 6c61 7373 i\n+0000cc50: 6e74 3c2f 7370 616e 3e20 5f66 436f 756e nt _fCoun\n+0000cc60: 743b 3c2f 6469 763e 0a3c 6469 7620 636c t;
    .
    305 \n+0000ccc0: 2020 2020 203c 7370 616e 2063 6c61 7373 b\n+0000cce0: 6f6f 6c3c 2f73 7061 6e3e 205f 6657 6569 ool _fWei\n+0000ccf0: 6768 7473 466f 7243 656e 7465 7273 3b3c ghtsForCenters;<\n+0000cd00: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+0000cd50: 3330 363c 2f73 7061 6e3e 2020 2020 7d3b 306 };\n+0000cd60: 3c2f 6469 763e 0a3c 2f64 6976 3e0a 3c64
    .
    .\n+0000cd80: 3c61 2069 643d 226c 3030 3330 3722 206e 307};
    ..
    308<\n+0000ce20: 2f73 7061 6e3e 203c 2f64 6976 3e0a 3c64 /span>
    .\n+0000ce40: 3c61 2069 643d 226c 3030 3330 3922 206e 309
    .
    310//.
    31\n+0000cf50: 313c 2f73 7061 6e3e 3c73 7061 6e20 636c 1//\n+0000cf70: 2020 4372 6561 7365 2061 6e64 2063 6f72 Crease and cor\n+0000cf80: 6e65 7220 6d61 736b 7320 6172 6520 636f ner masks are co\n+0000cf90: 6d6d 6f6e 2074 6f20 6d6f 7374 2073 6368 mmon to most sch\n+0000cfa0: 656d 6573 202d 2d20 7468 6520 7265 7374 emes -- the rest\n+0000cfb0: 206e 6565 6420 746f 2062 6520 7072 6f76 need to be prov\n+0000cfc0: 6964 6564 3c2f 7370 616e 3e3c 2f64 6976 ided.
    312<\n+0000d020: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>// \n+0000d040: 666f 7220 6561 6368 2053 6368 656d 6520 for each Scheme \n+0000d050: 7370 6563 6961 6c69 7a61 7469 6f6e 2e3c specialization.<\n+0000d060: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
    .<\n+0000d080: 6120 6964 3d22 6c30 3033 3133 2220 6e61 a id=\"l00313\" na\n+0000d090: 6d65 3d22 6c30 3033 3133 223e 3c2f 613e me=\"l00313\">\n+0000d0a0: 3c73 7061 6e20 636c 6173 733d 226c 696e 313//\n+0000d0e0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+0000d130: 2033 3134 3c2f 7370 616e 3e3c 7370 616e 314template\n+0000d160: 2026 6c74 3b53 6368 656d 6554 7970 6520 <SchemeType \n+0000d170: 5343 4845 4d45 2667 743b 3c2f 6469 763e SCHEME>
    \n+0000d180: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+0000d1b0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 315templ\n+0000d1f0: 6174 653c 2f73 7061 6e3e 2026 6c74 3b3c ate <<\n+0000d200: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+0000d210: 6f72 6422 3e74 7970 656e 616d 653c 2f73 ord\">typename EDGE, typename\n+0000d250: 204d 4153 4b26 6774 3b3c 2f64 6976 3e0a MASK>
    .\n+0000d260: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
    <\n+0000d290: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 316inline\n+0000d2d0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c void.
    .
    317\n+0000d3e0: 3c2f 7370 616e 3e3c 6120 636c 6173 733d Scheme&l\n+0000d440: 743b 5343 4845 4d45 2667 743b 3a3a 6173 t;SCHEME>::as\n+0000d450: 7369 676e 4372 6561 7365 4d61 736b 466f signCreaseMaskFo\n+0000d460: 7245 6467 653c 2f61 3e28 4544 4745 203c rEdge(EDGE <\n+0000d470: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+0000d480: 6f72 6422 3e63 6f6e 7374 3c2f 7370 616e ord\">const&, MASK&\n+0000d4a0: 3b20 6d61 736b 293c 7370 616e 2063 6c61 ; mask) co\n+0000d4c0: 6e73 7420 3c2f 7370 616e 3e7b 3c2f 6469 nst {.
    318\n+0000d520: 3c2f 7370 616e 3e20 3c2f 6469 763e 0a3c
    .<\n+0000d530: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+0000d540: 3e3c 6120 6964 3d22 6c30 3033 3139 2220 > 319 mask.SetN\n+0000d590: 756d 5665 7274 6578 5765 6967 6874 7328 umVertexWeights(\n+0000d5a0: 3229 3b3c 2f64 6976 3e0a 3c64 6976 2063 2);
    .
    320 \n+0000d600: 2020 6d61 736b 2e53 6574 4e75 6d45 6467 mask.SetNumEdg\n+0000d610: 6557 6569 6768 7473 2830 293b 3c2f 6469 eWeights(0);.
    321\n+0000d670: 3c2f 7370 616e 3e20 2020 206d 6173 6b2e mask.\n+0000d680: 5365 744e 756d 4661 6365 5765 6967 6874 SetNumFaceWeight\n+0000d690: 7328 3029 3b3c 2f64 6976 3e0a 3c64 6976 s(0);
    .<\n+0000d6d0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+0000d6e0: 6e6f 223e 2020 3332 323c 2f73 7061 6e3e no\"> 322\n+0000d6f0: 2020 2020 6d61 736b 2e53 6574 4661 6365 mask.SetFace\n+0000d700: 5765 6967 6874 7346 6f72 4661 6365 4365 WeightsForFaceCe\n+0000d710: 6e74 6572 7328 3c73 7061 6e20 636c 6173 nters(fals\n+0000d730: 653c 2f73 7061 6e3e 293b 3c2f 6469 763e e);
    \n+0000d740: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n+0000d7b0: 6120 6964 3d22 6c30 3033 3234 2220 6e61 a id=\"l00324\" na\n+0000d7c0: 6d65 3d22 6c30 3033 3234 223e 3c2f 613e me=\"l00324\">\n+0000d7d0: 3c73 7061 6e20 636c 6173 733d 226c 696e 324 mask.Vertex\n+0000d800: 5765 6967 6874 2830 2920 3d20 302e 3566 Weight(0) = 0.5f\n+0000d810: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
    .
    \n+0000d860: 2020 3332 353c 2f73 7061 6e3e 2020 2020 325 \n+0000d870: 6d61 736b 2e56 6572 7465 7857 6569 6768 mask.VertexWeigh\n+0000d880: 7428 3129 203d 2030 2e35 663b 3c2f 6469 t(1) = 0.5f;.
    326\n+0000d8e0: 3c2f 7370 616e 3e7d 3c2f 6469 763e 0a3c }
    .<\n+0000d8f0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+0000d940: 3332 373c 2f73 7061 6e3e 203c 2f64 6976 327 .
    328<\n+0000d9a0: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>temp\n+0000d9c0: 6c61 7465 3c2f 7370 616e 3e20 266c 743b late <\n+0000d9d0: 5363 6865 6d65 5479 7065 2053 4348 454d SchemeType SCHEM\n+0000d9e0: 4526 6774 3b3c 2f64 6976 3e0a 3c64 6976 E>
    .<\n+0000da20: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+0000da30: 6e6f 223e 2020 3332 393c 2f73 7061 6e3e no\"> 329\n+0000da40: 3c73 7061 6e20 636c 6173 733d 226b 6579 template <\n+0000da80: 7479 7065 6e61 6d65 3c2f 7370 616e 3e20 typename \n+0000da90: 5645 5254 4558 2c20 3c73 7061 6e20 636c VERTEX, ty\n+0000dab0: 7065 6e61 6d65 3c2f 7370 616e 3e20 4d41 pename MA\n+0000dac0: 534b 2667 743b 3c2f 6469 763e 0a3c 6469 SK>
    .<\n+0000dae0: 6120 6964 3d22 6c30 3033 3330 2220 6e61 a id=\"l00330\" na\n+0000daf0: 6d65 3d22 6c30 3033 3330 223e 3c2f 613e me=\"l00330\">\n+0000db00: 3c73 7061 6e20 636c 6173 733d 226c 696e 330inline v\n+0000db60: 6f69 643c 2f73 7061 6e3e 3c2f 6469 763e oid
    \n+0000db70: 0a3c 6469 7620 636c 6173 733d 2266 6f6c .
    .
    <\n+0000dc00: 6120 636c 6173 733d 226c 696e 6522 2068 a class=\"line\" h\n+0000dc10: 7265 663d 2261 3031 3333 332e 6874 6d6c ref=\"a01333.html\n+0000dc20: 2361 3737 3634 3466 3639 6564 6530 3366 #a77644f69ede03f\n+0000dc30: 6136 3232 3232 6436 3061 3939 3937 3032 a62222d60a999702\n+0000dc40: 3338 223e 2020 3333 313c 2f61 3e3c 2f73 38\"> 331Scheme<S\n+0000dcb0: 4348 454d 4526 6774 3b3a 3a61 7373 6967 CHEME>::assig\n+0000dcc0: 6e43 6f72 6e65 724d 6173 6b46 6f72 5665 nCornerMaskForVe\n+0000dcd0: 7274 6578 3c2f 613e 2856 4552 5445 5820 rtex(VERTEX \n+0000dce0: 3c73 7061 6e20 636c 6173 733d 226b 6579 const&, MASK&am\n+0000dd10: 703b 206d 6173 6b29 3c73 7061 6e20 636c p; mask) c\n+0000dd30: 6f6e 7374 203c 2f73 7061 6e3e 7b3c 2f64 onst {.
    33\n+0000dd90: 323c 2f73 7061 6e3e 203c 2f64 6976 3e0a 2
    .\n+0000dda0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
    334 \n+0000de70: 2020 206d 6173 6b2e 5365 744e 756d 4564 mask.SetNumEd\n+0000de80: 6765 5765 6967 6874 7328 3029 3b3c 2f64 geWeights(0);.
    33\n+0000dee0: 353c 2f73 7061 6e3e 2020 2020 6d61 736b 5 mask\n+0000def0: 2e53 6574 4e75 6d46 6163 6557 6569 6768 .SetNumFaceWeigh\n+0000df00: 7473 2830 293b 3c2f 6469 763e 0a3c 6469 ts(0);
    .<\n+0000df20: 6120 6964 3d22 6c30 3033 3336 2220 6e61 a id=\"l00336\" na\n+0000df30: 6d65 3d22 6c30 3033 3336 223e 3c2f 613e me=\"l00336\">\n+0000df40: 3c73 7061 6e20 636c 6173 733d 226c 696e 336 mask.SetFac\n+0000df70: 6557 6569 6768 7473 466f 7246 6163 6543 eWeightsForFaceC\n+0000df80: 656e 7465 7273 283c 7370 616e 2063 6c61 enters(fal\n+0000dfa0: 7365 3c2f 7370 616e 3e29 3b3c 2f64 6976 se);.
    337<\n+0000e000: 2f73 7061 6e3e 203c 2f64 6976 3e0a 3c64 /span>
    .\n+0000e020: 3c61 2069 643d 226c 3030 3333 3822 206e 338 mask.Verte\n+0000e070: 7857 6569 6768 7428 3029 203d 2031 2e30 xWeight(0) = 1.0\n+0000e080: 663b 3c2f 6469 763e 0a3c 6469 7620 636c f;
    .
    339}.
    .<\n+0000e120: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+0000e130: 6e6f 223e 2020 3334 303c 2f73 7061 6e3e no\"> 340
    \n+0000e140: 203c 2f64 6976 3e0a 3c64 6976 2063 6c61
    ..
    344//.
    34\n+0000e3b0: 353c 2f73 7061 6e3e 3c73 7061 6e20 636c 5te\n+0000e3d0: 6d70 6c61 7465 3c2f 7370 616e 3e20 266c mplate &l\n+0000e3e0: 743b 5363 6865 6d65 5479 7065 2053 4348 t;SchemeType SCH\n+0000e3f0: 454d 4526 6774 3b3c 2f64 6976 3e0a 3c64 EME>
    .\n+0000e410: 3c61 2069 643d 226c 3030 3334 3622 206e 346template\n+0000e470: 3c2f 7370 616e 3e20 266c 743b 3c73 7061 <typename FACE, ty\n+0000e4c0: 7065 6e61 6d65 3c2f 7370 616e 3e20 4d41 pename MA\n+0000e4d0: 534b 2667 743b 3c2f 6469 763e 0a3c 6469 SK>
    .<\n+0000e4f0: 6120 6964 3d22 6c30 3033 3437 2220 6e61 a id=\"l00347\" na\n+0000e500: 6d65 3d22 6c30 3033 3437 223e 3c2f 613e me=\"l00347\">\n+0000e510: 3c73 7061 6e20 636c 6173 733d 226c 696e 347void<\n+0000e550: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
    ..
    \n+0000e630: 2020 3334 383c 2f61 3e3c 2f73 7061 6e3e 348\n+0000e640: 3c61 2063 6c61 7373 3d22 636f 6465 2068 Scheme<SCHEM\n+0000e6a0: 4526 6774 3b3a 3a43 6f6d 7075 7465 4661 E>::ComputeFa\n+0000e6b0: 6365 5665 7274 6578 4d61 736b 3c2f 613e ceVertexMask\n+0000e6c0: 2846 4143 4520 3c73 7061 6e20 636c 6173 (FACE cons\n+0000e6e0: 743c 2f73 7061 6e3e 2661 6d70 3b20 6661 t& fa\n+0000e6f0: 6365 2c20 4d41 534b 2661 6d70 3b20 6d61 ce, MASK& ma\n+0000e700: 736b 293c 7370 616e 2063 6c61 7373 3d22 sk) const \n+0000e720: 3c2f 7370 616e 3e7b 3c2f 6469 763e 0a3c {
    .<\n+0000e730: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+0000e740: 3e3c 6120 6964 3d22 6c30 3033 3439 2220 > 349
    .
    350 \n+0000e7e0: 2020 203c 7370 616e 2063 6c61 7373 3d22 int\n+0000e800: 3c2f 7370 616e 3e20 7665 7274 436f 756e vertCoun\n+0000e810: 7420 3d20 6661 6365 2e47 6574 4e75 6d56 t = face.GetNumV\n+0000e820: 6572 7469 6365 7328 293b 3c2f 6469 763e ertices();
    \n+0000e830: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n+0000e8a0: 6120 6964 3d22 6c30 3033 3532 2220 6e61 a id=\"l00352\" na\n+0000e8b0: 6d65 3d22 6c30 3033 3532 223e 3c2f 613e me=\"l00352\">\n+0000e8c0: 3c73 7061 6e20 636c 6173 733d 226c 696e 352 mask.SetNum\n+0000e8f0: 5665 7274 6578 5765 6967 6874 7328 7665 VertexWeights(ve\n+0000e900: 7274 436f 756e 7429 3b3c 2f64 6976 3e0a rtCount);
    .\n+0000e910: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
    354 \n+0000e9e0: 206d 6173 6b2e 5365 744e 756d 4661 6365 mask.SetNumFace\n+0000e9f0: 5765 6967 6874 7328 3029 3b3c 2f64 6976 Weights(0);.
    355<\n+0000ea50: 2f73 7061 6e3e 2020 2020 6d61 736b 2e53 /span> mask.S\n+0000ea60: 6574 4661 6365 5765 6967 6874 7346 6f72 etFaceWeightsFor\n+0000ea70: 4661 6365 4365 6e74 6572 7328 3c73 7061 FaceCenters(false);\n+0000eaa0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+0000eaf0: 2033 3536 3c2f 7370 616e 3e20 3c2f 6469 356 .
    357\n+0000eb50: 3c2f 7370 616e 3e20 2020 203c 7370 616e typename\n+0000eb80: 204d 4153 4b3a 3a57 6569 6768 7420 7657 MASK::Weight vW\n+0000eb90: 6569 6768 7420 3d20 312e 3066 202f 2028 eight = 1.0f / (\n+0000eba0: 3c73 7061 6e20 636c 6173 733d 226b 6579 typename MASK::Weig\n+0000ebd0: 6874 2920 7665 7274 436f 756e 743b 3c2f ht) vertCount;.
    3\n+0000ec30: 3538 3c2f 7370 616e 3e20 2020 203c 7370 58 for (int\n+0000ec80: 3c2f 7370 616e 3e20 6920 3d20 303b 2069 i = 0; i\n+0000ec90: 2026 6c74 3b20 7665 7274 436f 756e 743b < vertCount;\n+0000eca0: 202b 2b69 2920 7b3c 2f64 6976 3e0a 3c64 ++i) {
    .\n+0000ecc0: 3c61 2069 643d 226c 3030 3335 3922 206e 359 mask.V\n+0000ed10: 6572 7465 7857 6569 6768 7428 6929 203d ertexWeight(i) =\n+0000ed20: 2076 5765 6967 6874 3b3c 2f64 6976 3e0a vWeight;
    .\n+0000ed30: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .\n+0000ed90: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 ..
    362\n+0000ee40: 3c2f 7370 616e 3e20 3c2f 6469 763e 0a3c
    .<\n+0000ee50: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+0000ee60: 3e3c 6120 6964 3d22 6c30 3033 3633 2220 > 363
    .
    364<\n+0000ef00: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n+0000ef10: 656e 7422 3e2f 2f3c 2f73 7061 6e3e 3c2f ent\">//.
    3\n+0000ef70: 3635 3c2f 7370 616e 3e3c 7370 616e 2063 65/\n+0000ef90: 2f20 2054 6865 2063 6f6d 7075 7461 7469 / The computati\n+0000efa0: 6f6e 206f 6620 616e 2065 6467 652d 7665 on of an edge-ve\n+0000efb0: 7274 6578 206d 6173 6b20 7265 7175 6972 rtex mask requir\n+0000efc0: 6573 2069 6e73 7065 6374 696f 6e20 6f66 es inspection of\n+0000efd0: 2073 6861 7270 6e65 7373 2076 616c 7565 sharpness value\n+0000efe0: 7320 746f 3c2f 7370 616e 3e3c 2f64 6976 s to.
    366<\n+0000f040: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>// \n+0000f060: 6465 7465 726d 696e 6520 6966 2073 6d6f determine if smo\n+0000f070: 6f74 6820 6f72 2061 2063 7265 6173 652c oth or a crease,\n+0000f080: 2061 6e64 2061 6c73 6f20 746f 2064 6574 and also to det\n+0000f090: 6563 7420 616e 6420 6170 706c 7920 6120 ect and apply a \n+0000f0a0: 7472 616e 7369 7469 6f6e 2066 726f 6d20 transition from \n+0000f0b0: 613c 2f73 7061 6e3e 3c2f 6469 763e 0a3c a
    .<\n+0000f0c0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+0000f0d0: 3e3c 6120 6964 3d22 6c30 3033 3637 2220 > 367// cre\n+0000f130: 6173 6520 746f 2073 6d6f 6f74 682e 2020 ase to smooth. \n+0000f140: 5573 696e 6720 7468 6520 7072 6f74 6563 Using the protec\n+0000f150: 7465 6420 6d65 7468 6f64 7320 746f 2061 ted methods to a\n+0000f160: 7373 6967 6e20 7468 6520 7370 6563 6966 ssign the specif\n+0000f170: 6963 206d 6173 6b73 2028 6f6e 6c79 3c2f ic masks (only
    .<\n+0000f1c0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+0000f1d0: 6e6f 223e 2020 3336 383c 2f73 7061 6e3e no\"> 368\n+0000f1e0: 3c73 7061 6e20 636c 6173 733d 2263 6f6d // two --\n+0000f200: 2073 6d6f 6f74 6820 6f72 2063 7265 6173 smooth or creas\n+0000f210: 6529 2074 6869 7320 696d 706c 656d 656e e) this implemen\n+0000f220: 7461 7469 6f6e 2073 686f 756c 6420 7365 tation should se\n+0000f230: 7276 6520 616c 6c20 6e6f 6e2d 6c69 6e65 rve all non-line\n+0000f240: 6172 2073 6368 656d 6573 3c2f 7370 616e ar schemes
    .
    \n+0000f2a0: 2020 3336 393c 2f73 7061 6e3e 3c73 7061 369// (currently\n+0000f2d0: 2043 6174 6d61 726b 2061 6e64 204c 6f6f Catmark and Loo\n+0000f2e0: 7029 2061 6e64 206f 6e6c 7920 6e65 6564 p) and only need\n+0000f2f0: 7320 746f 2062 6520 7370 6563 6961 6c69 s to be speciali\n+0000f300: 7a65 6420 666f 7220 4269 6c69 6e65 6172 zed for Bilinear\n+0000f310: 2074 6f3c 2f73 7061 6e3e 3c2f 6469 763e to
    \n+0000f320: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+0000f350: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 370// t\n+0000f390: 7269 7669 616c 697a 6520 6974 2074 6f20 rivialize it to \n+0000f3a0: 7468 6520 6372 6561 7365 2063 6173 652e the crease case.\n+0000f3b0: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
    .\n+0000f3d0: 3c61 2069 643d 226c 3030 3337 3122 206e 371//
    .
    \n+0000f480: 2020 3337 323c 2f73 7061 6e3e 3c73 7061 372// The implem\n+0000f4b0: 656e 7461 7469 6f6e 2068 6572 6520 6973 entation here is\n+0000f4c0: 2073 6c69 6768 746c 7920 636f 6d70 6c69 slightly compli\n+0000f4d0: 6361 7465 6420 6279 2063 6f6d 6269 6e69 cated by combini\n+0000f4e0: 6e67 2074 776f 2073 6365 6e61 7269 6f73 ng two scenarios\n+0000f4f0: 2069 6e74 6f20 613c 2f73 7061 6e3e 3c2f into a.
    3\n+0000f550: 3733 3c2f 7370 616e 3e3c 7370 616e 2063 73/\n+0000f570: 2f20 2073 696e 676c 6520 696d 706c 656d / single implem\n+0000f580: 656e 7461 7469 6f6e 202d 2d20 6569 7468 entation -- eith\n+0000f590: 6572 2074 6865 2063 616c 6c65 7220 6b6e er the caller kn\n+0000f5a0: 6f77 7320 7468 6520 7061 7265 6e74 2061 ows the parent a\n+0000f5b0: 6e64 2063 6869 6c64 2072 756c 6573 2061 nd child rules a\n+0000f5c0: 6e64 3c2f 7370 616e 3e3c 2f64 6976 3e0a nd
    .\n+0000f5d0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n+0000f6a0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+0000f6b0: 3e3c 6120 6964 3d22 6c30 3033 3735 2220 > 375// val\n+0000f710: 7565 732e 2020 426f 7468 2063 6173 6573 ues. Both cases\n+0000f720: 2069 6e63 6c75 6465 2071 7569 636b 2072 include quick r\n+0000f730: 6574 7572 6e20 6f6e 6365 2074 6865 2070 eturn once the p\n+0000f740: 6172 656e 7420 6973 2064 6574 6572 6d69 arent is determi\n+0000f750: 6e65 6420 746f 2062 653c 2f73 7061 6e3e ned to be\n+0000f760: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+0000f7b0: 2033 3736 3c2f 7370 616e 3e3c 7370 616e 376// smooth or t\n+0000f7e0: 6865 2063 6869 6c64 2061 2063 7265 6173 he child a creas\n+0000f7f0: 652c 206c 6561 7669 6e67 2074 6865 2074 e, leaving the t\n+0000f800: 7261 6e73 6974 696f 6e61 6c20 6361 7365 ransitional case\n+0000f810: 2072 656d 6169 6e69 6e67 2e3c 2f73 7061 remaining.
    .
    377//.
    378\n+0000f8f0: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 // \n+0000f910: 2054 6865 206f 7665 7261 6c6c 2070 726f The overall pro\n+0000f920: 6365 7373 2069 7320 6173 2066 6f6c 6c6f cess is as follo\n+0000f930: 7773 3a3c 2f73 7061 6e3e 3c2f 6469 763e ws:
    \n+0000f940: 0a3c 6469 7620 636c 6173 733d 226c 696e ..
    380<\n+0000fa10: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n+0000fa20: 656e 7422 3e2f 2f20 2020 2020 202d 2071 ent\">// - q\n+0000fa30: 7569 636b 6c79 2064 6574 6563 7420 7468 uickly detect th\n+0000fa40: 6520 6d6f 7374 2063 6f6d 6d6f 6e20 7370 e most common sp\n+0000fa50: 6563 6966 6965 6420 6f72 2064 6574 6563 ecified or detec\n+0000fa60: 7465 6420 536d 6f6f 7468 2063 6173 6520 ted Smooth case \n+0000fa70: 616e 6420 7265 7475 726e 3c2f 7370 616e and return
    .
    \n+0000fad0: 2020 3338 313c 2f73 7061 6e3e 3c73 7061 381// - quic\n+0000fb00: 6b6c 7920 6465 7465 6374 2061 2066 756c kly detect a ful\n+0000fb10: 6c20 4372 6561 7365 2062 7920 6368 696c l Crease by chil\n+0000fb20: 6420 5275 6c65 2061 7373 6967 6e6d 656e d Rule assignmen\n+0000fb30: 7420 616e 6420 7265 7475 726e 3c2f 7370 t and return
    .
    382// - de\n+0000fbc0: 7465 726d 696e 6520 6672 6f6d 2073 6861 termine from sha\n+0000fbd0: 7270 6e65 7373 2069 6620 756e 7370 6563 rpness if unspec\n+0000fbe0: 6966 6965 6420 6368 696c 6420 6973 2061 ified child is a\n+0000fbf0: 2063 7265 6173 6520 2d2d 2072 6574 7572 crease -- retur\n+0000fc00: 6e20 6966 2073 6f3c 2f73 7061 6e3e 3c2f n if so.
    3\n+0000fc60: 3833 3c2f 7370 616e 3e3c 7370 616e 2063 83/\n+0000fc80: 2f20 2020 2020 202d 2063 6f6d 7075 7465 / - compute\n+0000fc90: 2073 6d6f 6f74 6820 6d61 736b 2066 6f72 smooth mask for\n+0000fca0: 2063 6869 6c64 2061 6e64 2063 6f6d 6269 child and combi\n+0000fcb0: 6e65 2077 6974 6820 6372 6561 7365 2066 ne with crease f\n+0000fcc0: 726f 6d20 7061 7265 6e74 3c2f 7370 616e rom parent
    .
    \n+0000fd20: 2020 3338 343c 2f73 7061 6e3e 3c73 7061 384//.
    385<\n+0000fda0: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>// \n+0000fdc0: 5573 6167 6520 6f66 2074 6865 2070 6172 Usage of the par\n+0000fdd0: 656e 7420 5275 6c65 2068 6572 6520 616c ent Rule here al\n+0000fde0: 6c6f 7773 2073 6f6d 6520 6d69 7375 7365 lows some misuse\n+0000fdf0: 2069 6e20 7468 6174 206f 6e6c 7920 7468 in that only th\n+0000fe00: 7265 6520 6f66 2066 6976 6520 706f 7373 ree of five poss\n+0000fe10: 6962 6c65 3c2f 7370 616e 3e3c 2f64 6976 ible.
    386<\n+0000fe70: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>// \n+0000fe90: 6173 7369 676e 6d65 6e74 7320 6172 6520 assignments are \n+0000fea0: 6c65 6769 7469 6d61 7465 2066 6f72 2074 legitimate for t\n+0000feb0: 6865 2070 6172 656e 7420 616e 6420 666f he parent and fo\n+0000fec0: 7572 2066 6f72 2074 6865 2063 6869 6c64 ur for the child\n+0000fed0: 2028 4461 7274 2062 6569 6e67 206f 6e6c (Dart being onl\n+0000fee0: 793c 2f73 7061 6e3e 3c2f 6469 763e 0a3c y
    .<\n+0000fef0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+0000ff00: 3e3c 6120 6964 3d22 6c30 3033 3837 2220 > 387// val\n+0000ff60: 6964 2066 6f72 2074 6865 2063 6869 6c64 id for the child\n+0000ff70: 2061 6e64 2043 6f72 6e65 7220 666f 7220 and Corner for \n+0000ff80: 6e65 6974 6865 7229 2e20 2052 6573 756c neither). Resul\n+0000ff90: 7473 2061 7265 2075 6e64 6566 696e 6564 ts are undefined\n+0000ffa0: 2069 6e20 7468 6573 6520 6361 7365 732e in these cases.\n+0000ffb0: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
    .\n+0000ffd0: 3c61 2069 643d 226c 3030 3338 3822 206e 388//
    .
    \n+00010080: 2020 3338 393c 2f73 7061 6e3e 3c73 7061 389template <SchemeType\n+000100c0: 2053 4348 454d 4526 6774 3b3c 2f64 6976 SCHEME>.
    390<\n+00010120: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>temp\n+00010140: 6c61 7465 3c2f 7370 616e 3e20 266c 743b late <\n+00010150: 3c73 7061 6e20 636c 6173 733d 226b 6579 typename EDGE, typename MASK>
    \n+000101b0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+000101e0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 391v\n+00010220: 6f69 643c 2f73 7061 6e3e 3c2f 6469 763e oid
    \n+00010230: 0a3c 6469 7620 636c 6173 733d 2266 6f6c .
    .
    <\n+000102c0: 6120 636c 6173 733d 226c 696e 6522 2068 a class=\"line\" h\n+000102d0: 7265 663d 2261 3031 3333 332e 6874 6d6c ref=\"a01333.html\n+000102e0: 2361 3562 3561 3533 3737 6130 3165 6234 #a5b5a5377a01eb4\n+000102f0: 6261 3434 3665 3137 3465 6666 3965 3435 ba446e174eff9e45\n+00010300: 6163 223e 2020 3339 323c 2f61 3e3c 2f73 ac\"> 392Scheme<S\n+00010370: 4348 454d 4526 6774 3b3a 3a43 6f6d 7075 CHEME>::Compu\n+00010380: 7465 4564 6765 5665 7274 6578 4d61 736b teEdgeVertexMask\n+00010390: 3c2f 613e 2845 4447 4520 3c73 7061 6e20 (EDGE \n+000103b0: 636f 6e73 743c 2f73 7061 6e3e 2661 6d70 const&\n+000103c0: 3b20 2020 2020 6564 6765 2c3c 2f64 6976 ; edge,.
    393<\n+00010420: 2f73 7061 6e3e 2020 2020 2020 2020 2020 /span> \n+00010430: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00010440: 2020 2020 2020 2020 2020 2020 2020 204d M\n+00010450: 4153 4b26 616d 703b 2020 2020 2020 2020 ASK& \n+00010460: 2020 206d 6173 6b2c 3c2f 6469 763e 0a3c mask,
    .<\n+00010470: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00010480: 3e3c 6120 6964 3d22 6c30 3033 3934 2220 > 394 \n+000104d0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000104e0: 2020 2020 2020 2020 2020 2020 3c61 2063 \n+00010540: 4372 6561 7365 3a3a 5275 6c65 3c2f 613e Crease::Rule\n+00010550: 2070 6172 656e 7452 756c 652c 3c2f 6469 parentRule,.
    395\n+000105b0: 3c2f 7370 616e 3e20 2020 2020 2020 2020 \n+000105c0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000105d0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000105e0: 3c61 2063 6c61 7373 3d22 636f 6465 2068 Crease::Rule\n+00010640: 3c2f 613e 2063 6869 6c64 5275 6c65 293c childRule)<\n+00010650: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+00010660: 6f72 6422 3e20 636f 6e73 7420 3c2f 7370 ord\"> const {
    .
    396 \n+000106d0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+00010720: 2033 3937 3c2f 7370 616e 3e20 2020 203c 397 <\n+00010730: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n+00010740: 656e 7422 3e2f 2f3c 2f73 7061 6e3e 3c2f ent\">//.
    3\n+000107a0: 3938 3c2f 7370 616e 3e20 2020 203c 7370 98 // If the pa\n+000107d0: 7265 6e74 2077 6173 2073 7065 6369 6669 rent was specifi\n+000107e0: 6564 206f 7220 6465 7465 726d 696e 6564 ed or determined\n+000107f0: 2074 6f20 6265 2053 6d6f 6f74 682c 2077 to be Smooth, w\n+00010800: 6520 6361 6e20 7175 6963 6b6c 7920 7265 e can quickly re\n+00010810: 7475 726e 3c2f 7370 616e 3e3c 2f64 6976 turn.
    399<\n+00010870: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> \n+00010890: 2f2f 2020 7769 7468 2061 2053 6d6f 6f74 // with a Smoot\n+000108a0: 6820 6d61 736b 2e20 204f 7468 6572 7769 h mask. Otherwi\n+000108b0: 7365 2074 6865 2070 6172 656e 7420 6973 se the parent is\n+000108c0: 2061 2063 7265 6173 6520 2d2d 2069 6620 a crease -- if \n+000108d0: 7468 6520 6368 696c 6420 7761 733c 2f73 the child was
    .
    400 \n+00010940: 2020 203c 7370 616e 2063 6c61 7373 3d22 // als\n+00010960: 6f20 7370 6563 6966 6965 6420 746f 2062 o specified to b\n+00010970: 6520 6120 6372 6561 7365 2c20 7765 2063 e a crease, we c\n+00010980: 616e 2071 7569 636b 6c79 2072 6574 7572 an quickly retur\n+00010990: 6e20 7769 7468 2061 2043 7265 6173 6520 n with a Crease \n+000109a0: 6d61 736b 2e3c 2f73 7061 6e3e 3c2f 6469 mask..
    401\n+00010a00: 3c2f 7370 616e 3e20 2020 203c 7370 616e //
    \n+00010a30: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+00010a60: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 402 if ((p\n+00010ab0: 6172 656e 7452 756c 6520 3d3d 203c 6120 arentRule == \n+00010b30: 4372 6561 7365 3a3a 5255 4c45 5f53 4d4f Crease::RULE_SMO\n+00010b40: 4f54 483c 2f61 3e29 207c 7c3c 2f64 6976 OTH) ||.
    403<\n+00010ba0: 2f73 7061 6e3e 2020 2020 2020 2028 2870 /span> ((p\n+00010bb0: 6172 656e 7452 756c 6520 3d3d 203c 6120 arentRule == \n+00010c30: 4372 6561 7365 3a3a 5255 4c45 5f55 4e4b Crease::RULE_UNK\n+00010c40: 4e4f 574e 3c2f 613e 2920 2661 6d70 3b26 NOWN) &&\n+00010c50: 616d 703b 2028 6564 6765 2e47 6574 5368 amp; (edge.GetSh\n+00010c60: 6172 706e 6573 7328 2920 266c 743b 3d20 arpness() <= \n+00010c70: 302e 3066 2929 2920 7b3c 2f64 6976 3e0a 0.0f))) {
    .\n+00010c80: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
    \n+00010d50: 2034 3035 3c2f 7370 616e 3e20 2020 2020 405 \n+00010d60: 2020 203c 7370 616e 2063 6c61 7373 3d22 ret\n+00010d80: 7572 6e3c 2f73 7061 6e3e 3b3c 2f64 6976 urn;.
    406<\n+00010de0: 2f73 7061 6e3e 2020 2020 7d3c 2f64 6976 /span> }.
    407<\n+00010e40: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> if (c\n+00010e70: 6869 6c64 5275 6c65 203d 3d20 3c61 2063 hildRule == C\n+00010ef0: 7265 6173 653a 3a52 554c 455f 4352 4541 rease::RULE_CREA\n+00010f00: 5345 3c2f 613e 2920 7b3c 2f64 6976 3e0a SE) {
    .\n+00010f10: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
    \n+00010fe0: 2034 3039 3c2f 7370 616e 3e20 2020 2020 409 \n+00010ff0: 2020 203c 7370 616e 2063 6c61 7373 3d22 ret\n+00011010: 7572 6e3c 2f73 7061 6e3e 3b3c 2f64 6976 urn;.
    410<\n+00011070: 2f73 7061 6e3e 2020 2020 7d3c 2f64 6976 /span> }.
    411<\n+000110d0: 2f73 7061 6e3e 203c 2f64 6976 3e0a 3c64 /span>
    .\n+000110f0: 3c61 2069 643d 226c 3030 3431 3222 206e 412 //
    .<\n+00011190: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+000111a0: 6e6f 223e 2020 3431 333c 2f73 7061 6e3e no\"> 413\n+000111b0: 2020 2020 3c73 7061 6e20 636c 6173 733d // We\n+000111d0: 2068 6176 6520 6120 4372 6561 7365 206f have a Crease o\n+000111e0: 6e20 7468 6520 7061 7265 6e74 2061 6e64 n the parent and\n+000111f0: 2074 6865 2063 6869 6c64 2077 6173 2065 the child was e\n+00011200: 6974 6865 7220 7370 6563 6966 6965 6420 ither specified \n+00011210: 6173 2053 6d6f 6f74 683c 2f73 7061 6e3e as Smooth\n+00011220: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+00011270: 2034 3134 3c2f 7370 616e 3e20 2020 203c 414 <\n+00011280: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n+00011290: 656e 7422 3e2f 2f20 206f 7220 7761 7320 ent\">// or was \n+000112a0: 6e6f 7420 7370 6563 6966 6965 6420 6174 not specified at\n+000112b0: 2061 6c6c 202d 2d20 6465 616c 2077 6974 all -- deal wit\n+000112c0: 6820 7468 6520 756e 7370 6563 6966 6965 h the unspecifie\n+000112d0: 6420 6361 7365 2066 6972 7374 2028 6167 d case first (ag\n+000112e0: 6169 6e3c 2f73 7061 6e3e 3c2f 6469 763e ain
    \n+000112f0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+00011320: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 415 /\n+00011360: 2f20 2072 6574 7572 6e69 6e67 2061 2043 / returning a C\n+00011370: 7265 6173 6520 6d61 736b 2069 6620 7468 rease mask if th\n+00011380: 6520 6368 696c 6420 6973 2061 6c73 6f20 e child is also \n+00011390: 6465 7465 726d 696e 6564 2074 6f20 6265 determined to be\n+000113a0: 2061 2043 7265 6173 6529 2061 6e64 3c2f a Crease) and
    .<\n+000113f0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00011400: 6e6f 223e 2020 3431 363c 2f73 7061 6e3e no\"> 416
    \n+00011410: 2020 2020 3c73 7061 6e20 636c 6173 733d // co\n+00011430: 6e74 696e 7565 2069 6620 7765 2068 6176 ntinue if we hav\n+00011440: 6520 6120 7472 616e 7369 7469 6f6e 2074 e a transition t\n+00011450: 6f20 536d 6f6f 7468 2e3c 2f73 7061 6e3e o Smooth.\n+00011460: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+000114b0: 2034 3137 3c2f 7370 616e 3e20 2020 203c 417 <\n+000114c0: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n+000114d0: 656e 7422 3e2f 2f3c 2f73 7061 6e3e 3c2f ent\">//.
    4\n+00011530: 3138 3c2f 7370 616e 3e20 2020 203c 7370 18 // Note when\n+00011560: 2071 7561 6c69 6679 696e 6720 7468 6520 qualifying the \n+00011570: 6368 696c 6420 7468 6174 2069 6620 7468 child that if th\n+00011580: 6520 7061 7265 6e74 2073 6861 7270 6e65 e parent sharpne\n+00011590: 7373 2026 6774 3b20 312e 302c 2072 6567 ss > 1.0, reg\n+000115a0: 6172 646c 6573 733c 2f73 7061 6e3e 3c2f ardless.
    4\n+00011600: 3139 3c2f 7370 616e 3e20 2020 203c 7370 19 // of the cr\n+00011630: 6561 7369 6e67 206d 6574 686f 642c 2077 easing method, w\n+00011640: 6865 7468 6572 2074 6865 2063 6869 6c64 hether the child\n+00011650: 2073 6861 7270 6e65 7373 2076 616c 7565 sharpness value\n+00011660: 7320 6465 6361 7920 746f 207a 6572 6f20 s decay to zero \n+00011670: 6973 3c2f 7370 616e 3e3c 2f64 6976 3e0a is
    .\n+00011680: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n+00011780: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00011790: 6e6f 223e 2020 3432 313c 2f73 7061 6e3e no\"> 421\n+000117a0: 2020 2020 3c73 7061 6e20 636c 6173 733d // sh\n+000117c0: 6172 706e 6573 7329 2069 7320 2667 743b arpness) is >\n+000117d0: 2031 2e30 2c20 616e 6420 7768 656e 2063 1.0, and when c\n+000117e0: 6c61 6d70 6564 2074 6f20 3120 6566 6665 lamped to 1 effe\n+000117f0: 6374 6976 656c 7920 7969 656c 6473 2061 ctively yields a\n+00011800: 2066 756c 6c20 6372 6561 7365 2e3c 2f73 full crease.
    .
    422 \n+00011870: 2020 203c 7370 616e 2063 6c61 7373 3d22 //
    .
    423 \n+000118f0: 203c 7370 616e 2063 6c61 7373 3d22 6b65 if (childRule \n+00011920: 3d3d 203c 6120 636c 6173 733d 2263 6f64 == Crease::RU\n+000119a0: 4c45 5f55 4e4b 4e4f 574e 3c2f 613e 2920 LE_UNKNOWN) \n+000119b0: 7b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 {
    .
    \n+00011a00: 2020 3432 343c 2f73 7061 6e3e 2020 2020 424 \n+00011a10: 2020 2020 3c61 2063 6c61 7373 3d22 636f \n+00011a40: 4372 6561 7365 3c2f 613e 2063 7265 6173 Crease creas\n+00011a50: 6528 5f6f 7074 696f 6e73 293b 3c2f 6469 e(_options);.
    425\n+00011ab0: 3c2f 7370 616e 3e20 3c2f 6469 763e 0a3c
    .<\n+00011ac0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00011ad0: 3e3c 6120 6964 3d22 6c30 3034 3236 2220 > 426 bool\n+00011b40: 2063 6869 6c64 4973 4372 6561 7365 203d childIsCrease =\n+00011b50: 203c 7370 616e 2063 6c61 7373 3d22 6b65 false;
    .
    427 \n+00011bd0: 2020 2020 2020 203c 7370 616e 2063 6c61 if (pare\n+00011c00: 6e74 5275 6c65 203d 3d20 3c61 2063 6c61 ntRule == Cre\n+00011c80: 6173 653a 3a52 554c 455f 4352 4541 5345 ase::RULE_CREASE\n+00011c90: 3c2f 613e 2920 7b3c 2f64 6976 3e0a 3c64 ) {
    .\n+00011cb0: 3c61 2069 643d 226c 3030 3432 3822 206e 428 // Child un\n+00011d20: 6b6e 6f77 6e20 6173 2064 6566 6175 6c74 known as default\n+00011d30: 2076 616c 7565 2062 7574 2070 6172 656e value but paren\n+00011d40: 7420 5275 6c65 2073 7065 6369 6669 6564 t Rule specified\n+00011d50: 2061 7320 4372 6561 7365 3c2f 7370 616e as Crease
    .
    \n+00011db0: 2020 3432 393c 2f73 7061 6e3e 2020 2020 429 \n+00011dc0: 2020 2020 2020 2020 6368 696c 6449 7343 childIsC\n+00011dd0: 7265 6173 6520 3d20 3c73 7061 6e20 636c rease = tr\n+00011df0: 7565 3c2f 7370 616e 3e3b 3c2f 6469 763e ue;
    \n+00011e00: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+00011e30: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 430 } <\n+00011e60: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+00011e70: 6f72 6466 6c6f 7722 3e65 6c73 653c 2f73 ordflow\">else i\n+00011ea0: 663c 2f73 7061 6e3e 2028 6564 6765 2e47 f (edge.G\n+00011eb0: 6574 5368 6172 706e 6573 7328 2920 2667 etSharpness() &g\n+00011ec0: 743b 3d20 312e 3066 2920 7b3c 2f64 6976 t;= 1.0f) {.
    431<\n+00011f20: 2f73 7061 6e3e 2020 2020 2020 2020 2020 /span> \n+00011f30: 2020 3c73 7061 6e20 636c 6173 733d 2263 // Shar\n+00011f50: 706e 6573 7320 2667 743b 3d20 312e 3020 pness >= 1.0 \n+00011f60: 616c 7761 7973 2061 2063 7265 6173 6520 always a crease \n+00011f70: 2d2d 2073 6565 206e 6f74 6520 6162 6f76 -- see note abov\n+00011f80: 653c 2f73 7061 6e3e 3c2f 6469 763e 0a3c e
    .<\n+00011f90: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00011fa0: 3e3c 6120 6964 3d22 6c30 3034 3332 2220 > 432 c\n+00011ff0: 6869 6c64 4973 4372 6561 7365 203d 203c hildIsCrease = <\n+00012000: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+00012010: 6f72 6422 3e74 7275 653c 2f73 7061 6e3e ord\">true\n+00012020: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
    .
    \n+00012070: 2020 3433 333c 2f73 7061 6e3e 2020 2020 433 \n+00012080: 2020 2020 7d20 3c73 7061 6e20 636c 6173 } \n+000120a0: 656c 7365 3c2f 7370 616e 3e20 3c73 7061 else if \n+000120d0: 2863 7265 6173 652e 3c61 2063 6c61 7373 (crease.IsUnifo\n+00012130: 726d 3c2f 613e 2829 2920 7b3c 2f64 6976 rm()) {.
    434<\n+00012190: 2f73 7061 6e3e 2020 2020 2020 2020 2020 /span> \n+000121a0: 2020 3c73 7061 6e20 636c 6173 733d 2263 // Shar\n+000121c0: 706e 6573 7320 266c 743b 2031 2e30 2069 pness < 1.0 i\n+000121d0: 7320 6775 6172 616e 7465 6564 2074 6f20 s guaranteed to \n+000121e0: 6465 6361 7920 746f 2030 2e30 2066 6f72 decay to 0.0 for\n+000121f0: 2055 6e69 666f 726d 2063 6869 6c64 2065 Uniform child e\n+00012200: 6467 6573 3c2f 7370 616e 3e3c 2f64 6976 dges.
    435<\n+00012260: 2f73 7061 6e3e 2020 2020 2020 2020 2020 /span> \n+00012270: 2020 6368 696c 6449 7343 7265 6173 6520 childIsCrease \n+00012280: 3d20 3c73 7061 6e20 636c 6173 733d 226b = false;
    .<\n+000122e0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+000122f0: 6e6f 223e 2020 3433 363c 2f73 7061 6e3e no\"> 436
    \n+00012300: 2020 2020 2020 2020 7d20 3c73 7061 6e20 } else \n+00012330: 7b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 {
    .
    \n+00012380: 2020 3433 373c 2f73 7061 6e3e 2020 2020 437 \n+00012390: 2020 2020 2020 2020 3c73 7061 6e20 636c //\n+000123b0: 2020 5368 6172 706e 6573 7320 266c 743b Sharpness <\n+000123c0: 3d20 312e 3020 646f 6573 206e 6f74 206e = 1.0 does not n\n+000123d0: 6563 6573 7361 7269 6c79 2064 6563 6179 ecessarily decay\n+000123e0: 2074 6f20 302e 3020 666f 7220 626f 7468 to 0.0 for both\n+000123f0: 2063 6869 6c64 2065 6467 6573 2e2e 2e3c child edges...<\n+00012400: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
    .<\n+00012420: 6120 6964 3d22 6c30 3034 3338 2220 6e61 a id=\"l00438\" na\n+00012430: 6d65 3d22 6c30 3034 3338 223e 3c2f 613e me=\"l00438\">\n+00012440: 3c73 7061 6e20 636c 6173 733d 226c 696e 438 float cEdgeSharpne\n+000124a0: 7373 5b32 5d3b 3c2f 6469 763e 0a3c 6469 ss[2];
    .<\n+000124c0: 6120 6964 3d22 6c30 3034 3339 2220 6e61 a id=\"l00439\" na\n+000124d0: 6d65 3d22 6c30 3034 3339 223e 3c2f 613e me=\"l00439\">\n+000124e0: 3c73 7061 6e20 636c 6173 733d 226c 696e 439 edg\n+00012510: 652e 4765 7443 6869 6c64 5368 6172 706e e.GetChildSharpn\n+00012520: 6573 7365 7328 6372 6561 7365 2c20 6345 esses(crease, cE\n+00012530: 6467 6553 6861 7270 6e65 7373 293b 3c2f dgeSharpness);.
    4\n+00012590: 3430 3c2f 7370 616e 3e20 2020 2020 2020 40 \n+000125a0: 2020 2020 2063 6869 6c64 4973 4372 6561 childIsCrea\n+000125b0: 7365 203d 2028 6345 6467 6553 6861 7270 se = (cEdgeSharp\n+000125c0: 6e65 7373 5b30 5d20 2667 743b 2030 2e30 ness[0] > 0.0\n+000125d0: 6629 2026 616d 703b 2661 6d70 3b20 2863 f) && (c\n+000125e0: 4564 6765 5368 6172 706e 6573 735b 315d EdgeSharpness[1]\n+000125f0: 2026 6774 3b20 302e 3066 293b 3c2f 6469 > 0.0f);.
    441\n+00012650: 3c2f 7370 616e 3e20 2020 2020 2020 207d }\n+00012660: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+000126b0: 2034 3432 3c2f 7370 616e 3e20 2020 2020 442 \n+000126c0: 2020 203c 7370 616e 2063 6c61 7373 3d22 if<\n+000126e0: 2f73 7061 6e3e 2028 6368 696c 6449 7343 /span> (childIsC\n+000126f0: 7265 6173 6529 207b 3c2f 6469 763e 0a3c rease) {
    .<\n+00012700: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00012710: 3e3c 6120 6964 3d22 6c30 3034 3433 2220 > 443 a\n+00012760: 7373 6967 6e43 7265 6173 654d 6173 6b46 ssignCreaseMaskF\n+00012770: 6f72 4564 6765 2865 6467 652c 206d 6173 orEdge(edge, mas\n+00012780: 6b29 3b3c 2f64 6976 3e0a 3c64 6976 2063 k);
    .
    444 \n+000127e0: 2020 2020 2020 2020 2020 3c73 7061 6e20 return;
    .
    445 \n+00012870: 2020 2020 207d 3c2f 6469 763e 0a3c 6469 }
    .<\n+00012890: 6120 6964 3d22 6c30 3034 3436 2220 6e61 a id=\"l00446\" na\n+000128a0: 6d65 3d22 6c30 3034 3436 223e 3c2f 613e me=\"l00446\">\n+000128b0: 3c73 7061 6e20 636c 6173 733d 226c 696e 446 }
    .<\n+000128f0: 6120 6964 3d22 6c30 3034 3437 2220 6e61 a id=\"l00447\" na\n+00012900: 6d65 3d22 6c30 3034 3437 223e 3c2f 613e me=\"l00447\">\n+00012910: 3c73 7061 6e20 636c 6173 733d 226c 696e 447
    .
    448 \n+00012990: 203c 7370 616e 2063 6c61 7373 3d22 636f //\n+000129b0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+00012a00: 2034 3439 3c2f 7370 616e 3e20 2020 203c 449 <\n+00012a10: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n+00012a20: 656e 7422 3e2f 2f20 2057 6520 6172 6520 ent\">// We are \n+00012a30: 6e6f 7720 6c65 6674 2077 6974 6820 7468 now left with th\n+00012a40: 6520 4372 6561 7365 2d74 6f2d 536d 6f6f e Crease-to-Smoo\n+00012a50: 7468 2063 6173 6520 2d2d 2063 6f6d 7075 th case -- compu\n+00012a60: 7465 2074 6865 2053 6d6f 6f74 6820 6d61 te the Smooth ma\n+00012a70: 736b 3c2f 7370 616e 3e3c 2f64 6976 3e0a sk
    .\n+00012a80: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
    \n+00012b90: 2020 3435 313c 2f73 7061 6e3e 2020 2020 451 \n+00012ba0: 3c73 7061 6e20 636c 6173 733d 2263 6f6d //<\n+00012bc0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+00012c10: 3435 323c 2f73 7061 6e3e 2020 2020 3c73 452 // A genera\n+00012c40: 6c20 636f 6d62 696e 6174 696f 6e20 6f66 l combination of\n+00012c50: 2073 6570 6172 6174 656c 7920 6173 7369 separately assi\n+00012c60: 676e 6564 206d 6173 6b73 2068 6572 6520 gned masks here \n+00012c70: 2861 7320 646f 6e65 2069 6e20 7468 6520 (as done in the \n+00012c80: 7665 7274 6578 2d3c 2f73 7061 6e3e 3c2f vertex-.
    4\n+00012ce0: 3533 3c2f 7370 616e 3e20 2020 203c 7370 53 // vertex ca\n+00012d10: 7365 2920 6973 206f 7665 726b 696c 6c20 se) is overkill \n+00012d20: 2d2d 2074 7269 7669 616c 6c79 2063 6f6d -- trivially com\n+00012d30: 6269 6e65 2074 6865 2030 2e35 6620 7665 bine the 0.5f ve\n+00012d40: 7274 6578 2063 6f65 6666 6963 6965 6e74 rtex coefficient\n+00012d50: 2066 6f72 3c2f 7370 616e 3e3c 2f64 6976 for.
    454<\n+00012db0: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> \n+00012dd0: 2f2f 2020 7468 6520 4372 6561 7365 206f // the Crease o\n+00012de0: 6620 7468 6520 7061 7265 6e74 2077 6974 f the parent wit\n+00012df0: 6820 7468 6520 7665 7274 6578 2077 6569 h the vertex wei\n+00012e00: 6768 7473 2061 6e64 2061 7474 656e 7561 ghts and attenua\n+00012e10: 7465 2074 6865 2066 6163 6520 7765 6967 te the face weig\n+00012e20: 6874 733c 2f73 7061 6e3e 3c2f 6469 763e hts
    \n+00012e30: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+00012e60: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 455 /\n+00012ea0: 2f20 2061 6363 6f72 6469 6e67 6c79 2e3c / accordingly.<\n+00012eb0: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
    .<\n+00012ed0: 6120 6964 3d22 6c30 3034 3536 2220 6e61 a id=\"l00456\" na\n+00012ee0: 6d65 3d22 6c30 3034 3536 223e 3c2f 613e me=\"l00456\">\n+00012ef0: 3c73 7061 6e20 636c 6173 733d 226c 696e 456 //
    .
    457 \n+00012f90: 2020 2061 7373 6967 6e53 6d6f 6f74 684d assignSmoothM\n+00012fa0: 6173 6b46 6f72 4564 6765 2865 6467 652c askForEdge(edge,\n+00012fb0: 206d 6173 6b29 3b3c 2f64 6976 3e0a 3c64 mask);
    .\n+00012fd0: 3c61 2069 643d 226c 3030 3435 3822 206e 458
    .
    459 \n+00013070: 2020 3c73 7061 6e20 636c 6173 733d 226b typedef<\n+00013090: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> typ\n+000130b0: 656e 616d 653c 2f73 7061 6e3e 204d 4153 ename MAS\n+000130c0: 4b3a 3a57 6569 6768 7420 5765 6967 6874 K::Weight Weight\n+000130d0: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
    .
    \n+00013120: 2020 3436 303c 2f73 7061 6e3e 203c 2f64 460 .
    46\n+00013180: 313c 2f73 7061 6e3e 2020 2020 5765 6967 1 Weig\n+00013190: 6874 2070 5765 6967 6874 203d 2065 6467 ht pWeight = edg\n+000131a0: 652e 4765 7453 6861 7270 6e65 7373 2829 e.GetSharpness()\n+000131b0: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
    .
    \n+00013200: 2020 3436 323c 2f73 7061 6e3e 2020 2020 462 \n+00013210: 5765 6967 6874 2063 5765 6967 6874 203d Weight cWeight =\n+00013220: 2031 2e30 6620 2d20 7057 6569 6768 743b 1.0f - pWeight;\n+00013230: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+00013280: 2034 3633 3c2f 7370 616e 3e20 3c2f 6469 463 .
    464\n+000132e0: 3c2f 7370 616e 3e20 2020 206d 6173 6b2e mask.\n+000132f0: 5665 7274 6578 5765 6967 6874 2830 2920 VertexWeight(0) \n+00013300: 3d20 7057 6569 6768 7420 2a20 302e 3566 = pWeight * 0.5f\n+00013310: 202b 2063 5765 6967 6874 202a 206d 6173 + cWeight * mas\n+00013320: 6b2e 5665 7274 6578 5765 6967 6874 2830 k.VertexWeight(0\n+00013330: 293b 3c2f 6469 763e 0a3c 6469 7620 636c );
    .
    465 \n+00013390: 206d 6173 6b2e 5665 7274 6578 5765 6967 mask.VertexWeig\n+000133a0: 6874 2831 2920 3d20 7057 6569 6768 7420 ht(1) = pWeight \n+000133b0: 2a20 302e 3566 202b 2063 5765 6967 6874 * 0.5f + cWeight\n+000133c0: 202a 206d 6173 6b2e 5665 7274 6578 5765 * mask.VertexWe\n+000133d0: 6967 6874 2831 293b 3c2f 6469 763e 0a3c ight(1);
    .<\n+000133e0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+000133f0: 3e3c 6120 6964 3d22 6c30 3034 3636 2220 > 466
    .
    467 \n+00013490: 2020 203c 7370 616e 2063 6c61 7373 3d22 int\n+000134b0: 3c2f 7370 616e 3e20 6661 6365 436f 756e faceCoun\n+000134c0: 7420 3d20 6d61 736b 2e47 6574 4e75 6d46 t = mask.GetNumF\n+000134d0: 6163 6557 6569 6768 7473 2829 3b3c 2f64 aceWeights();.
    46\n+00013530: 383c 2f73 7061 6e3e 2020 2020 3c73 7061 8 for\n+00013560: 2028 3c73 7061 6e20 636c 6173 733d 226b (int<\n+00013580: 2f73 7061 6e3e 2069 203d 2030 3b20 6920 /span> i = 0; i \n+00013590: 266c 743b 2066 6163 6543 6f75 6e74 3b20 < faceCount; \n+000135a0: 2b2b 6929 207b 3c2f 6469 763e 0a3c 6469 ++i) {
    .<\n+000135c0: 6120 6964 3d22 6c30 3034 3639 2220 6e61 a id=\"l00469\" na\n+000135d0: 6d65 3d22 6c30 3034 3639 223e 3c2f 613e me=\"l00469\">\n+000135e0: 3c73 7061 6e20 636c 6173 733d 226c 696e 469 mask.Fa\n+00013610: 6365 5765 6967 6874 2869 2920 2a3d 2063 ceWeight(i) *= c\n+00013620: 5765 6967 6874 3b3c 2f64 6976 3e0a 3c64 Weight;
    .\n+00013640: 3c61 2069 643d 226c 3030 3437 3022 206e 470 }
    .\n+000136a0: 3c61 2069 643d 226c 3030 3437 3122 206e 471}
    .
    \n+000136f0: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n+00013760: 6120 6964 3d22 6c30 3034 3733 2220 6e61 a id=\"l00473\" na\n+00013770: 6d65 3d22 6c30 3034 3733 223e 3c2f 613e me=\"l00473\">\n+00013780: 3c73 7061 6e20 636c 6173 733d 226c 696e 473//\n+000137c0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+00013810: 2034 3734 3c2f 7370 616e 3e3c 7370 616e 474// The computa\n+00013840: 7469 6f6e 206f 6620 6120 7665 7274 6578 tion of a vertex\n+00013850: 2d76 6572 7465 7820 6d61 736b 2072 6571 -vertex mask req\n+00013860: 7569 7265 7320 696e 7370 6563 7469 6f6e uires inspection\n+00013870: 206f 6620 6372 6561 7369 6e67 2073 6861 of creasing sha\n+00013880: 7270 6e65 7373 2076 616c 7565 733c 2f73 rpness values
    .
    475<\n+000138f0: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n+00013900: 656e 7422 3e2f 2f20 2074 6f20 6465 7465 ent\">// to dete\n+00013910: 726d 696e 6520 7768 6174 2073 7562 6469 rmine what subdi\n+00013920: 7669 7369 6f6e 2052 756c 6573 2061 7070 vision Rules app\n+00013930: 6c79 2074 6f20 7468 6520 7061 7265 6e74 ly to the parent\n+00013940: 2061 6e64 2069 7473 2063 6869 6c64 2076 and its child v\n+00013950: 6572 7465 782c 2061 6e64 2061 6c73 6f20 ertex, and also \n+00013960: 746f 3c2f 7370 616e 3e3c 2f64 6976 3e0a to
    .\n+00013970: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
    <\n+000139a0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 476// de\n+000139e0: 7465 6374 2061 6e64 2061 7070 6c79 2061 tect and apply a\n+000139f0: 2074 7261 6e73 6974 696f 6e20 6265 7477 transition betw\n+00013a00: 6565 6e20 7477 6f20 6469 6666 6572 696e een two differin\n+00013a10: 6720 5275 6c65 732e 2020 5573 696e 6720 g Rules. Using \n+00013a20: 7468 6520 7072 6f74 6563 7465 6420 6d65 the protected me\n+00013a30: 7468 6f64 7320 746f 3c2f 7370 616e 3e3c thods to<\n+00013a40: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+00013a90: 3437 373c 2f73 7061 6e3e 3c73 7061 6e20 477\n+00013ab0: 2f2f 2020 6173 7369 676e 2073 7065 6369 // assign speci\n+00013ac0: 6669 6320 6d61 736b 732c 2074 6869 7320 fic masks, this \n+00013ad0: 696d 706c 656d 656e 7461 7469 6f6e 2073 implementation s\n+00013ae0: 686f 756c 6420 7365 7276 6520 616c 6c20 hould serve all \n+00013af0: 6e6f 6e2d 6c69 6e65 6172 2073 6368 656d non-linear schem\n+00013b00: 6573 2028 6375 7272 656e 746c 793c 2f73 es (currently
    .
    478<\n+00013b70: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n+00013b80: 656e 7422 3e2f 2f20 2043 6174 6d61 726b ent\">// Catmark\n+00013b90: 2061 6e64 204c 6f6f 7029 2061 6e64 206f and Loop) and o\n+00013ba0: 6e6c 7920 6e65 6564 7320 746f 2062 6520 nly needs to be \n+00013bb0: 7370 6563 6961 6c69 7a65 6420 666f 7220 specialized for \n+00013bc0: 4269 6c69 6e65 6172 2074 6f20 7265 6d6f Bilinear to remo\n+00013bd0: 7665 2061 6c6c 2075 6e6e 6563 6573 7361 ve all unnecessa\n+00013be0: 7279 3c2f 7370 616e 3e3c 2f64 6976 3e0a ry
    .\n+00013bf0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
    \n+00013ce0: 2020 3438 303c 2f73 7061 6e3e 3c73 7061 480//.
    481<\n+00013d60: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>// \n+00013d80: 5468 6520 696d 706c 656d 656e 7461 7469 The implementati\n+00013d90: 6f6e 2068 6572 6520 6973 2073 6c69 6768 on here is sligh\n+00013da0: 746c 7920 636f 6d70 6c69 6361 7465 6420 tly complicated \n+00013db0: 6279 2063 6f6d 6269 6e69 6e67 2074 776f by combining two\n+00013dc0: 2073 6365 6e61 7269 6f73 2069 6e74 6f20 scenarios into \n+00013dd0: 6f6e 6520 2d2d 3c2f 7370 616e 3e3c 2f64 one --.
    48\n+00013e30: 323c 2f73 7061 6e3e 3c73 7061 6e20 636c 2//\n+00013e50: 2020 6569 7468 6572 2074 6865 2063 616c either the cal\n+00013e60: 6c65 7220 6b6e 6f77 7320 7468 6520 7061 ler knows the pa\n+00013e70: 7265 6e74 2061 6e64 2063 6869 6c64 2072 rent and child r\n+00013e80: 756c 6573 2061 6e64 2070 726f 7669 6465 ules and provide\n+00013e90: 7320 7468 656d 2c20 6f72 2074 6865 7920 s them, or they \n+00013ea0: 646f 6e26 2333 393b 7420 616e 643c 2f73 don't and
    .
    483<\n+00013f10: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n+00013f20: 656e 7422 3e2f 2f20 2074 6865 2052 756c ent\">// the Rul\n+00013f30: 6573 2068 6176 6520 746f 2062 6520 6465 es have to be de\n+00013f40: 7465 726d 696e 6564 2066 726f 6d20 7368 termined from sh\n+00013f50: 6172 706e 6573 7320 7661 6c75 6573 2e20 arpness values. \n+00013f60: 2045 7665 6e20 7768 656e 2074 6865 2052 Even when the R\n+00013f70: 756c 6573 2061 7265 206b 6e6f 776e 2061 ules are known a\n+00013f80: 6e64 3c2f 7370 616e 3e3c 2f64 6976 3e0a nd
    .\n+00013f90: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
    <\n+00013fc0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 484// pr\n+00014000: 6f76 6964 6564 2074 686f 7567 682c 2074 ovided though, t\n+00014010: 6865 7265 2061 7265 2063 6173 6573 2077 here are cases w\n+00014020: 6865 7265 2074 6865 2070 6172 656e 7420 here the parent \n+00014030: 616e 6420 6368 696c 6420 7368 6172 706e and child sharpn\n+00014040: 6573 7320 7661 6c75 6573 206e 6565 6420 ess values need \n+00014050: 746f 2062 653c 2f73 7061 6e3e 3c2f 6469 to be.
    485\n+000140b0: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 // \n+000140d0: 2069 6465 6e74 6966 6965 642c 2073 6f20 identified, so \n+000140e0: 6163 636f 756e 7469 6e67 2066 6f72 2074 accounting for t\n+000140f0: 6865 2075 6e6b 6e6f 776e 2052 756c 6573 he unknown Rules\n+00014100: 2074 6f6f 2069 7320 6e6f 7420 6d75 6368 too is not much\n+00014110: 206f 6620 616e 2061 6464 6564 2063 6f6d of an added com\n+00014120: 706c 6963 6174 696f 6e2e 3c2f 7370 616e plication.
    .
    \n+00014180: 2020 3438 363c 2f73 7061 6e3e 3c73 7061 486//.
    487<\n+00014200: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>// \n+00014220: 5468 6520 6265 6e65 6669 7420 6f66 2073 The benefit of s\n+00014230: 7570 706f 7274 696e 6720 7370 6563 6966 upporting specif\n+00014240: 6965 6420 5275 6c65 7320 6973 2074 6861 ied Rules is tha\n+00014250: 7420 7468 6579 2063 616e 206f 6674 656e t they can often\n+00014260: 2062 6520 7472 6976 6961 6c6c 793c 2f73 be trivially
    .
    488<\n+000142d0: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n+000142e0: 656e 7422 3e2f 2f20 2064 6574 6572 6d69 ent\">// determi\n+000142f0: 6e65 6420 6672 6f6d 2063 6f6e 7465 7874 ned from context\n+00014300: 2028 652e 672e 2061 2076 6572 7465 7820 (e.g. a vertex \n+00014310: 6465 7269 7665 6420 6672 6f6d 2061 2066 derived from a f\n+00014320: 6163 6520 6174 2061 2070 7265 7669 6f75 ace at a previou\n+00014330: 7320 6c65 7665 6c20 7769 6c6c 2061 6c77 s level will alw\n+00014340: 6179 733c 2f73 7061 6e3e 3c2f 6469 763e ays
    \n+00014350: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+00014380: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 489// b\n+000143c0: 6520 736d 6f6f 7468 2920 7261 7468 6572 e smooth) rather\n+000143d0: 2074 6861 6e20 6d6f 7265 2067 656e 6572 than more gener\n+000143e0: 616c 6c79 2c20 616e 6420 6174 2067 7265 ally, and at gre\n+000143f0: 6174 6572 2063 6f73 742c 2069 6e73 7065 ater cost, inspe\n+00014400: 6374 696e 6720 6e65 6967 6862 6f72 696e cting neighborin\n+00014410: 6720 616e 643c 2f73 7061 6e3e 3c2f 6469 g and.
    490\n+00014470: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 // \n+00014490: 2074 6865 7920 6172 6520 6f66 7465 6e20 they are often \n+000144a0: 7468 6520 7361 6d65 2066 6f72 2070 6172 the same for par\n+000144b0: 656e 7420 616e 6420 6368 696c 642e 3c2f ent and child.
    .<\n+00014500: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00014510: 6e6f 223e 2020 3439 313c 2f73 7061 6e3e no\"> 491
    \n+00014520: 3c73 7061 6e20 636c 6173 733d 2263 6f6d //<\n+00014540: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+00014590: 3439 323c 2f73 7061 6e3e 3c73 7061 6e20 492\n+000145b0: 2f2f 2020 5468 6520 6f76 6572 616c 6c20 // The overall \n+000145c0: 7072 6f63 6573 7320 6973 2061 7320 666f process is as fo\n+000145d0: 6c6c 6f77 733a 3c2f 7370 616e 3e3c 2f64 llows:.
    49\n+00014630: 333c 2f73 7061 6e3e 3c73 7061 6e20 636c 3//\n+00014650: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
    .\n+00014670: 3c61 2069 643d 226c 3030 3439 3422 206e 494// \n+000146d0: 2d20 7175 6963 6b6c 7920 6465 7465 6374 - quickly detect\n+000146e0: 2074 6865 206d 6f73 7420 636f 6d6d 6f6e the most common\n+000146f0: 2053 6d6f 6f74 6820 6361 7365 2077 6865 Smooth case whe\n+00014700: 6e20 7370 6563 6966 6965 6420 616e 6420 n specified and \n+00014710: 7265 7475 726e 3c2f 7370 616e 3e3c 2f64 return.
    49\n+00014770: 353c 2f73 7061 6e3e 3c73 7061 6e20 636c 5//\n+00014790: 2020 2020 2020 2d20 6465 7465 726d 696e - determin\n+000147a0: 6520 6966 2073 6861 7270 6e65 7373 2066 e if sharpness f\n+000147b0: 6f72 2070 6172 656e 7420 6973 2072 6571 or parent is req\n+000147c0: 7569 7265 6420 616e 6420 6761 7468 6572 uired and gather\n+000147d0: 2069 6620 736f 3c2f 7370 616e 3e3c 2f64 if so.
    49\n+00014830: 363c 2f73 7061 6e3e 3c73 7061 6e20 636c 6//\n+00014850: 2020 2020 2020 2d20 6966 2075 6e73 7065 - if unspe\n+00014860: 6369 6669 6564 2c20 6465 7465 726d 696e cified, determin\n+00014870: 6520 7468 6520 7061 7265 6e74 2072 756c e the parent rul\n+00014880: 653c 2f73 7061 6e3e 3c2f 6469 763e 0a3c e
    .<\n+00014890: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+000148a0: 3e3c 6120 6964 3d22 6c30 3034 3937 2220 > 497// \n+00014900: 202d 2061 7373 6967 6e20 6d61 736b 2066 - assign mask f\n+00014910: 6f72 2074 6865 2070 6172 656e 7420 7275 or the parent ru\n+00014920: 6c65 202d 2d20 7265 7475 726e 696e 6720 le -- returning \n+00014930: 6966 2053 6d6f 6f74 682f 4461 7274 3c2f if Smooth/Dart
    .<\n+00014980: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00014990: 6e6f 223e 2020 3439 383c 2f73 7061 6e3e no\"> 498\n+000149a0: 3c73 7061 6e20 636c 6173 733d 2263 6f6d // - \n+000149c0: 7265 7475 726e 2069 6620 6368 696c 6420 return if child \n+000149d0: 7275 6c65 206d 6174 6368 6573 2070 6172 rule matches par\n+000149e0: 656e 743c 2f73 7061 6e3e 3c2f 6469 763e ent
    \n+000149f0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+00014a20: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 499// \n+00014a60: 2020 202d 2067 6174 6865 7220 7368 6172 - gather shar\n+00014a70: 706e 6573 7320 666f 7220 6368 696c 6420 pness for child \n+00014a80: 746f 2064 6574 6572 6d69 6e65 206f 7220 to determine or \n+00014a90: 636f 6d62 696e 6520 6368 696c 6420 7275 combine child ru\n+00014aa0: 6c65 3c2f 7370 616e 3e3c 2f64 6976 3e0a le
    .\n+00014ab0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
    501// - as\n+00014bf0: 7369 676e 206c 6f63 616c 206d 6173 6b20 sign local mask \n+00014c00: 666f 7220 6368 696c 6420 7275 6c65 3c2f for child rule
    .<\n+00014c50: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00014c60: 6e6f 223e 2020 3530 323c 2f73 7061 6e3e no\"> 502\n+00014c70: 3c73 7061 6e20 636c 6173 733d 2263 6f6d // - \n+00014c90: 636f 6d62 696e 6520 6c6f 6361 6c20 6368 combine local ch\n+00014ca0: 696c 6420 6d61 736b 2077 6974 6820 7468 ild mask with th\n+00014cb0: 6520 7061 7265 6e74 206d 6173 6b3c 2f73 e parent mask
    .
    503<\n+00014d20: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n+00014d30: 656e 7422 3e2f 2f3c 2f73 7061 6e3e 3c2f ent\">//.
    5\n+00014d90: 3034 3c2f 7370 616e 3e3c 7370 616e 2063 04/\n+00014db0: 2f20 2052 656d 656d 6265 7220 2d2d 2069 / Remember -- i\n+00014dc0: 6620 7468 6520 7061 7265 6e74 2072 756c f the parent rul\n+00014dd0: 6520 6973 2073 7065 6369 6669 6564 2062 e is specified b\n+00014de0: 7574 2074 6865 2063 6869 6c64 2069 7320 ut the child is \n+00014df0: 6e6f 742c 2074 6869 7320 696d 706c 6965 not, this implie\n+00014e00: 7320 6f6e 6c79 206f 6e65 3c2f 7370 616e s only one
    .
    \n+00014e60: 2020 3530 353c 2f73 7061 6e3e 3c73 7061 505// of the two\n+00014e90: 206f 7074 696f 6e61 6c20 7275 6c65 7320 optional rules \n+00014ea0: 7761 7320 7370 6563 6966 6965 6420 616e was specified an\n+00014eb0: 6420 6973 206d 6561 6e74 2074 6f20 696e d is meant to in\n+00014ec0: 6469 6361 7465 2074 6865 7265 2069 7320 dicate there is \n+00014ed0: 6e6f 2074 7261 6e73 6974 696f 6e2c 3c2f no transition,
    .<\n+00014f20: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00014f30: 6e6f 223e 2020 3530 363c 2f73 7061 6e3e no\"> 506\n+00014f40: 3c73 7061 6e20 636c 6173 733d 2263 6f6d // so the\n+00014f60: 2063 6869 6c64 2072 756c 6520 7368 6f75 child rule shou\n+00014f70: 6c64 2062 6520 6173 7369 676e 6564 2074 ld be assigned t\n+00014f80: 6f20 6265 2074 6865 2073 616d 6520 2877 o be the same (w\n+00014f90: 6973 6820 7468 6520 636f 6d70 696c 6572 ish the compiler\n+00014fa0: 2077 6f75 6c64 2061 6c6c 6f77 2074 6869 would allow thi\n+00014fb0: 733c 2f73 7061 6e3e 3c2f 6469 763e 0a3c s
    .<\n+00014fc0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00014fd0: 3e3c 6120 6964 3d22 6c30 3035 3037 2220 > 507// in \n+00015030: 6465 6661 756c 7420 7661 6c75 6520 6173 default value as\n+00015040: 7369 676e 6d65 6e74 292e 3c2f 7370 616e signment).
    .
    \n+000150a0: 2020 3530 383c 2f73 7061 6e3e 3c73 7061 508//.
    509<\n+00015120: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>temp\n+00015140: 6c61 7465 3c2f 7370 616e 3e20 266c 743b late <\n+00015150: 5363 6865 6d65 5479 7065 2053 4348 454d SchemeType SCHEM\n+00015160: 4526 6774 3b3c 2f64 6976 3e0a 3c64 6976 E>
    .<\n+000151a0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+000151b0: 6e6f 223e 2020 3531 303c 2f73 7061 6e3e no\"> 510\n+000151c0: 3c73 7061 6e20 636c 6173 733d 226b 6579 template <\n+00015200: 7479 7065 6e61 6d65 3c2f 7370 616e 3e20 typename \n+00015210: 5645 5254 4558 2c20 3c73 7061 6e20 636c VERTEX, ty\n+00015230: 7065 6e61 6d65 3c2f 7370 616e 3e20 4d41 pename MA\n+00015240: 534b 2667 743b 3c2f 6469 763e 0a3c 6469 SK>
    .<\n+00015260: 6120 6964 3d22 6c30 3035 3131 2220 6e61 a id=\"l00511\" na\n+00015270: 6d65 3d22 6c30 3035 3131 223e 3c2f 613e me=\"l00511\">\n+00015280: 3c73 7061 6e20 636c 6173 733d 226c 696e 511void<\n+000152c0: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
    ..
    \n+000153a0: 2020 3531 323c 2f61 3e3c 2f73 7061 6e3e 512\n+000153b0: 3c61 2063 6c61 7373 3d22 636f 6465 2068 Scheme<SCHEM\n+00015410: 4526 6774 3b3a 3a43 6f6d 7075 7465 5665 E>::ComputeVe\n+00015420: 7274 6578 5665 7274 6578 4d61 736b 3c2f rtexVertexMask(VERTEX \n+00015450: 636f 6e73 743c 2f73 7061 6e3e 2661 6d70 const&\n+00015460: 3b20 2020 7665 7274 6578 2c3c 2f64 6976 ; vertex,.
    513<\n+000154c0: 2f73 7061 6e3e 2020 2020 2020 2020 2020 /span> \n+000154d0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000154e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000154f0: 204d 4153 4b26 616d 703b 2020 2020 2020 MASK& \n+00015500: 2020 2020 206d 6173 6b2c 3c2f 6469 763e mask,
    \n+00015510: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+00015540: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 514 \n+00015570: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00015580: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00015590: 3c61 2063 6c61 7373 3d22 636f 6465 2068 Crease::Rule\n+000155f0: 3c2f 613e 2070 5275 6c65 2c3c 2f64 6976 pRule,.
    515<\n+00015650: 2f73 7061 6e3e 2020 2020 2020 2020 2020 /span> \n+00015660: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00015670: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00015680: 203c 6120 636c 6173 733d 2263 6f64 6520 Crease::Rul\n+000156e0: 653c 2f61 3e20 6352 756c 6529 3c73 7061 e cRule) const \n+00015710: 7b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 {
    .
    \n+00015760: 2020 3531 363c 2f73 7061 6e3e 203c 2f64 516 .
    51\n+000157c0: 373c 2f73 7061 6e3e 2020 2020 3c73 7061 7 // Quick assi\n+000157f0: 676e 6d65 6e74 2061 6e64 2072 6574 7572 gnment and retur\n+00015800: 6e20 666f 7220 7468 6520 6d6f 7374 2063 n for the most c\n+00015810: 6f6d 6d6f 6e20 6361 7365 3a3c 2f73 7061 ommon case:
    .
    518 \n+00015880: 203c 7370 616e 2063 6c61 7373 3d22 6b65 if ((pRule == \n+000158b0: 3c61 2063 6c61 7373 3d22 636f 6465 2068 Crease::RULE_\n+00015930: 534d 4f4f 5448 3c2f 613e 2920 7c7c 2028 SMOOTH) || (\n+00015940: 7052 756c 6520 3d3d 203c 6120 636c 6173 pRule == Crea\n+000159c0: 7365 3a3a 5255 4c45 5f44 4152 543c 2f61 se::RULE_DART)) {
    .<\n+00015a10: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00015a20: 6e6f 223e 2020 3531 393c 2f73 7061 6e3e no\"> 519\n+00015a30: 2020 2020 2020 2020 6173 7369 676e 536d assignSm\n+00015a40: 6f6f 7468 4d61 736b 466f 7256 6572 7465 oothMaskForVerte\n+00015a50: 7828 7665 7274 6578 2c20 6d61 736b 293b x(vertex, mask);\n+00015a60: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+00015ab0: 2035 3230 3c2f 7370 616e 3e20 2020 2020 520 \n+00015ac0: 2020 203c 7370 616e 2063 6c61 7373 3d22 ret\n+00015ae0: 7572 6e3c 2f73 7061 6e3e 3b3c 2f64 6976 urn;.
    521<\n+00015b40: 2f73 7061 6e3e 2020 2020 7d3c 2f64 6976 /span> }.
    522<\n+00015ba0: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> \n+00015bc0: 2f2f 2020 4966 2075 6e73 7065 6369 6669 // If unspecifi\n+00015bd0: 6564 2c20 6173 7369 676e 2074 6865 2063 ed, assign the c\n+00015be0: 6869 6c64 2072 756c 6520 746f 206d 6174 hild rule to mat\n+00015bf0: 6368 2074 6865 2070 6172 656e 7420 7275 ch the parent ru\n+00015c00: 6c65 2069 6620 7370 6563 6966 6965 643a le if specified:\n+00015c10: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
    .\n+00015c30: 3c61 2069 643d 226c 3030 3532 3322 206e 523 \n+00015c90: 6966 3c2f 7370 616e 3e20 2828 6352 756c if ((cRul\n+00015ca0: 6520 3d3d 203c 6120 636c 6173 733d 2263 e == Crease::\n+00015d20: 5255 4c45 5f55 4e4b 4e4f 574e 3c2f 613e RULE_UNKNOWN\n+00015d30: 2920 2661 6d70 3b26 616d 703b 2028 7052 ) && (pR\n+00015d40: 756c 6520 213d 203c 6120 636c 6173 733d ule != Crease\n+00015dc0: 3a3a 5255 4c45 5f55 4e4b 4e4f 574e 3c2f ::RULE_UNKNOWN)) {
    .<\n+00015df0: 6120 6964 3d22 6c30 3035 3234 2220 6e61 a id=\"l00524\" na\n+00015e00: 6d65 3d22 6c30 3035 3234 223e 3c2f 613e me=\"l00524\">\n+00015e10: 3c73 7061 6e20 636c 6173 733d 226c 696e 524 cRule =\n+00015e40: 2070 5275 6c65 3b3c 2f64 6976 3e0a 3c64 pRule;
    .\n+00015e60: 3c61 2069 643d 226c 3030 3532 3522 206e 525 }
    .\n+00015ec0: 3c61 2069 643d 226c 3030 3532 3622 206e 526 \n+00015f20: 696e 743c 2f73 7061 6e3e 2076 616c 656e int valen\n+00015f30: 6365 203d 2076 6572 7465 782e 4765 744e ce = vertex.GetN\n+00015f40: 756d 4564 6765 7328 293b 3c2f 6469 763e umEdges();
    \n+00015f50: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n+00015fc0: 6120 6964 3d22 6c30 3035 3238 2220 6e61 a id=\"l00528\" na\n+00015fd0: 6d65 3d22 6c30 3035 3238 223e 3c2f 613e me=\"l00528\">\n+00015fe0: 3c73 7061 6e20 636c 6173 733d 226c 696e 528 //
    .
    529 \n+00016080: 2020 203c 7370 616e 2063 6c61 7373 3d22 // Det\n+000160a0: 6572 6d69 6e65 2069 6620 7765 206e 6565 ermine if we nee\n+000160b0: 6420 7468 6520 7061 7265 6e74 2065 6467 d the parent edg\n+000160c0: 6520 7368 6172 706e 6573 7320 7661 6c75 e sharpness valu\n+000160d0: 6573 202d 2d20 6964 656e 7469 6679 2f67 es -- identify/g\n+000160e0: 6174 6865 7220 6966 2073 6f3c 2f73 7061 ather if so
    .
    530 \n+00016150: 203c 7370 616e 2063 6c61 7373 3d22 636f // and u\n+00016170: 7365 2069 7420 746f 2063 6f6d 7075 7465 se it to compute\n+00016180: 2074 6865 2070 6172 656e 7420 7275 6c65 the parent rule\n+00016190: 2069 6620 756e 7370 6563 6966 6965 643a if unspecified:\n+000161a0: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
    .\n+000161c0: 3c61 2069 643d 226c 3030 3533 3122 206e 531 //
    .<\n+00016260: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00016270: 6e6f 223e 2020 3533 323c 2f73 7061 6e3e no\"> 532\n+00016280: 2020 2020 3c73 7061 6e20 636c 6173 733d fl\n+000162a0: 6f61 743c 2f73 7061 6e3e 202a 2070 4564 oat * pEd\n+000162b0: 6765 5368 6172 706e 6573 7342 7566 6665 geSharpnessBuffe\n+000162c0: 7220 3d20 283c 7370 616e 2063 6c61 7373 r = (f\n+000162e0: 6c6f 6174 3c2f 7370 616e 3e20 2a29 616c loat *)al\n+000162f0: 6c6f 6361 2876 616c 656e 6365 2a3c 7370 loca(valence*sizeof\n+00016320: 283c 7370 616e 2063 6c61 7373 3d22 6b65 (float\n+00016340: 3c2f 7370 616e 3e29 292c 3c2f 6469 763e )),
    \n+00016350: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+00016380: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 533 *\n+000163b0: 2070 4564 6765 5368 6172 706e 6573 7320 pEdgeSharpness \n+000163c0: 2020 3d20 302c 3c2f 6469 763e 0a3c 6469 = 0,
    .<\n+000163e0: 6120 6964 3d22 6c30 3035 3334 2220 6e61 a id=\"l00534\" na\n+000163f0: 6d65 3d22 6c30 3035 3334 223e 3c2f 613e me=\"l00534\">\n+00016400: 3c73 7061 6e20 636c 6173 733d 226c 696e 534 pVe\n+00016430: 7274 6578 5368 6172 706e 6573 7320 3d20 rtexSharpness = \n+00016440: 302e 3066 3b3c 2f64 6976 3e0a 3c64 6976 0.0f;
    .<\n+00016480: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00016490: 6e6f 223e 2020 3533 353c 2f73 7061 6e3e no\"> 535
    \n+000164a0: 203c 2f64 6976 3e0a 3c64 6976 2063 6c61
    .
    \n+000164f0: 2020 3533 363c 2f73 7061 6e3e 2020 2020 536 \n+00016500: 3c73 7061 6e20 636c 6173 733d 226b 6579 bool requirePar\n+00016530: 656e 7453 6861 7270 6e65 7373 203d 2028 entSharpness = (\n+00016540: 7052 756c 6520 3d3d 203c 6120 636c 6173 pRule == Crea\n+000165c0: 7365 3a3a 5255 4c45 5f55 4e4b 4e4f 574e se::RULE_UNKNOWN\n+000165d0: 3c2f 613e 2920 7c7c 3c2f 6469 763e 0a3c ) ||
    .<\n+000165e0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+000165f0: 3e3c 6120 6964 3d22 6c30 3035 3337 2220 > 537 \n+00016640: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00016650: 2020 2020 2028 7052 756c 6520 3d3d 203c (pRule == <\n+00016660: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n+00016670: 5f65 6e75 6d76 616c 7565 2220 6872 6566 _enumvalue\" href\n+00016680: 3d22 6130 3133 3235 2e68 746d 6c23 6131 =\"a01325.html#a1\n+00016690: 3166 6364 3531 6566 3836 3131 3866 3635 1fcd51ef86118f65\n+000166a0: 6536 3033 6331 3437 3433 3737 6137 3861 e603c1474377a78a\n+000166b0: 3936 3666 6131 6165 3861 6562 3835 3837 966fa1ae8aeb8587\n+000166c0: 6334 3938 6366 3661 3932 6363 3333 3335 c498cf6a92cc3335\n+000166d0: 223e 4372 6561 7365 3a3a 5255 4c45 5f43 \">Crease::RULE_C\n+000166e0: 5245 4153 453c 2f61 3e29 207c 7c3c 2f64 REASE) ||.
    53\n+00016740: 383c 2f73 7061 6e3e 2020 2020 2020 2020 8 \n+00016750: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00016760: 2020 2020 2020 2020 2020 2870 5275 6c65 (pRule\n+00016770: 2021 3d20 6352 756c 6529 3b3c 2f64 6976 != cRule);.
    539<\n+000167d0: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> if (r\n+00016800: 6571 7569 7265 5061 7265 6e74 5368 6172 equireParentShar\n+00016810: 706e 6573 7329 207b 3c2f 6469 763e 0a3c pness) {
    .<\n+00016820: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00016830: 3e3c 6120 6964 3d22 6c30 3035 3430 2220 > 540 pVert\n+00016880: 6578 5368 6172 706e 6573 7320 3d20 7665 exSharpness = ve\n+00016890: 7274 6578 2e47 6574 5368 6172 706e 6573 rtex.GetSharpnes\n+000168a0: 7328 293b 3c2f 6469 763e 0a3c 6469 7620 s();
    .
    541 \n+00016900: 2020 2020 2020 2070 4564 6765 5368 6172 pEdgeShar\n+00016910: 706e 6573 7320 2020 3d20 7665 7274 6578 pness = vertex\n+00016920: 2e47 6574 5368 6172 706e 6573 7350 6572 .GetSharpnessPer\n+00016930: 4564 6765 2870 4564 6765 5368 6172 706e Edge(pEdgeSharpn\n+00016940: 6573 7342 7566 6665 7229 3b3c 2f64 6976 essBuffer);.
    542<\n+000169a0: 2f73 7061 6e3e 203c 2f64 6976 3e0a 3c64 /span>
    .\n+000169c0: 3c61 2069 643d 226c 3030 3534 3322 206e 543 if (p\n+00016a30: 5275 6c65 203d 3d20 3c61 2063 6c61 7373 Rule == Creas\n+00016ab0: 653a 3a52 554c 455f 554e 4b4e 4f57 4e3c e::RULE_UNKNOWN<\n+00016ac0: 2f61 3e29 207b 3c2f 6469 763e 0a3c 6469 /a>) {
    .<\n+00016ae0: 6120 6964 3d22 6c30 3035 3434 2220 6e61 a id=\"l00544\" na\n+00016af0: 6d65 3d22 6c30 3035 3434 223e 3c2f 613e me=\"l00544\">\n+00016b00: 3c73 7061 6e20 636c 6173 733d 226c 696e 544 pRu\n+00016b30: 6c65 203d 203c 6120 636c 6173 733d 2263 le = Crease(_opt\n+00016b70: 696f 6e73 292e 3c61 2063 6c61 7373 3d22 ions).Determine\n+00016bd0: 5665 7274 6578 5665 7274 6578 5275 6c65 VertexVertexRule\n+00016be0: 3c2f 613e 2870 5665 7274 6578 5368 6172 (pVertexShar\n+00016bf0: 706e 6573 732c 2076 616c 656e 6365 2c20 pness, valence, \n+00016c00: 7045 6467 6553 6861 7270 6e65 7373 293b pEdgeSharpness);\n+00016c10: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+00016c60: 2035 3435 3c2f 7370 616e 3e20 2020 2020 545 \n+00016c70: 2020 207d 3c2f 6469 763e 0a3c 6469 7620 }
    .
    546 \n+00016cd0: 2020 207d 3c2f 6469 763e 0a3c 6469 7620 }
    .
    547 \n+00016d30: 2020 203c 7370 616e 2063 6c61 7373 3d22 if<\n+00016d50: 2f73 7061 6e3e 2028 2870 5275 6c65 203d /span> ((pRule =\n+00016d60: 3d20 3c61 2063 6c61 7373 3d22 636f 6465 = Crease::RUL\n+00016de0: 455f 534d 4f4f 5448 3c2f 613e 2920 7c7c E_SMOOTH) ||\n+00016df0: 2028 7052 756c 6520 3d3d 203c 6120 636c (pRule == Cr\n+00016e70: 6561 7365 3a3a 5255 4c45 5f44 4152 543c ease::RULE_DART<\n+00016e80: 2f61 3e29 2920 7b3c 2f64 6976 3e0a 3c64 /a>)) {
    .\n+00016ea0: 3c61 2069 643d 226c 3030 3534 3822 206e 548 assign\n+00016ef0: 536d 6f6f 7468 4d61 736b 466f 7256 6572 SmoothMaskForVer\n+00016f00: 7465 7828 7665 7274 6578 2c20 6d61 736b tex(vertex, mask\n+00016f10: 293b 3c2f 6469 763e 0a3c 6469 7620 636c );
    .
    549 \n+00016f70: 2020 2020 203c 7370 616e 2063 6c61 7373 r\n+00016f90: 6574 7572 6e3c 2f73 7061 6e3e 3b20 203c eturn; <\n+00016fa0: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n+00016fb0: 656e 7422 3e2f 2f20 2041 7320 646f 6e65 ent\">// As done\n+00016fc0: 206f 6e20 656e 7472 792c 2077 6520 6361 on entry, we ca\n+00016fd0: 6e20 7265 7475 726e 2069 6d6d 6564 6961 n return immedia\n+00016fe0: 7465 6c79 2069 6620 7061 7265 6e74 2069 tely if parent i\n+00016ff0: 7320 536d 6f6f 7468 2f44 6172 743c 2f73 s Smooth/Dart
    .
    550 \n+00017060: 2020 207d 203c 7370 616e 2063 6c61 7373 } e\n+00017080: 6c73 653c 2f73 7061 6e3e 203c 7370 616e lse if (\n+000170b0: 7052 756c 6520 3d3d 203c 6120 636c 6173 pRule == Crea\n+00017130: 7365 3a3a 5255 4c45 5f43 5245 4153 453c se::RULE_CREASE<\n+00017140: 2f61 3e29 207b 3c2f 6469 763e 0a3c 6469 /a>) {
    .<\n+00017160: 6120 6964 3d22 6c30 3035 3531 2220 6e61 a id=\"l00551\" na\n+00017170: 6d65 3d22 6c30 3035 3531 223e 3c2f 613e me=\"l00551\">\n+00017180: 3c73 7061 6e20 636c 6173 733d 226c 696e 551 int cr\n+000171d0: 6561 7365 456e 6473 5b32 5d3b 3c2f 6469 easeEnds[2];.
    552\n+00017230: 3c2f 7370 616e 3e20 2020 2020 2020 203c <\n+00017240: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n+00017250: 5f63 6c61 7373 2220 6872 6566 3d22 6130 _class\" href=\"a0\n+00017260: 3133 3235 2e68 746d 6c22 3e43 7265 6173 1325.html\">Creas\n+00017270: 653c 2f61 3e28 5f6f 7074 696f 6e73 292e e(_options).\n+00017280: 3c61 2063 6c61 7373 3d22 636f 6465 2068 GetSharpEdgePai\n+000172e0: 724f 6643 7265 6173 653c 2f61 3e28 7045 rOfCrease(pE\n+000172f0: 6467 6553 6861 7270 6e65 7373 2c20 7661 dgeSharpness, va\n+00017300: 6c65 6e63 652c 2063 7265 6173 6545 6e64 lence, creaseEnd\n+00017310: 7329 3b3c 2f64 6976 3e0a 3c64 6976 2063 s);
    .
    553 <\n+00017370: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+000173c0: 3535 343c 2f73 7061 6e3e 2020 2020 2020 554 \n+000173d0: 2020 6173 7369 676e 4372 6561 7365 4d61 assignCreaseMa\n+000173e0: 736b 466f 7256 6572 7465 7828 7665 7274 skForVertex(vert\n+000173f0: 6578 2c20 6d61 736b 2c20 6372 6561 7365 ex, mask, crease\n+00017400: 456e 6473 293b 3c2f 6469 763e 0a3c 6469 Ends);
    .<\n+00017420: 6120 6964 3d22 6c30 3035 3535 2220 6e61 a id=\"l00555\" na\n+00017430: 6d65 3d22 6c30 3035 3535 223e 3c2f 613e me=\"l00555\">\n+00017440: 3c73 7061 6e20 636c 6173 733d 226c 696e 555 } else {.
    5\n+000174e0: 3536 3c2f 7370 616e 3e20 2020 2020 2020 56 \n+000174f0: 2061 7373 6967 6e43 6f72 6e65 724d 6173 assignCornerMas\n+00017500: 6b46 6f72 5665 7274 6578 2876 6572 7465 kForVertex(verte\n+00017510: 782c 206d 6173 6b29 3b3c 2f64 6976 3e0a x, mask);
    .\n+00017520: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .\n+00017580: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n+00017670: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00017680: 6e6f 223e 2020 3535 393c 2f73 7061 6e3e no\"> 559
    \n+00017690: 203c 2f64 6976 3e0a 3c64 6976 2063 6c61
    .
    \n+000176e0: 2020 3536 303c 2f73 7061 6e3e 2020 2020 560 \n+000176f0: 3c73 7061 6e20 636c 6173 733d 2263 6f6d //<\n+00017710: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+00017760: 3536 313c 2f73 7061 6e3e 2020 2020 3c73 561 // Identify\n+00017790: 2f67 6174 6865 7220 6368 696c 6420 7368 /gather child sh\n+000177a0: 6172 706e 6573 7320 746f 2063 6f6d 6269 arpness to combi\n+000177b0: 6e65 206d 6173 6b73 2066 6f72 2074 6865 ne masks for the\n+000177c0: 2074 776f 2064 6966 6665 7269 6e67 2052 two differing R\n+000177d0: 756c 6573 3a3c 2f73 7061 6e3e 3c2f 6469 ules:.
    562\n+00017830: 3c2f 7370 616e 3e20 2020 203c 7370 616e //
    \n+00017860: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+00017890: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 563 Crease \n+000178f0: 6372 6561 7365 285f 6f70 7469 6f6e 7329 crease(_options)\n+00017900: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
    .
    \n+00017950: 2020 3536 343c 2f73 7061 6e3e 203c 2f64 564 .
    56\n+000179b0: 353c 2f73 7061 6e3e 2020 2020 3c73 7061 5 float * cEdgeSharpn\n+000179f0: 6573 7342 7566 6665 7220 3d20 283c 7370 essBuffer = (float *)alloca(val\n+00017a30: 656e 6365 2a3c 7370 616e 2063 6c61 7373 ence*sizeo\n+00017a50: 663c 2f73 7061 6e3e 283c 7370 616e 2063 f(float)\n+00017a80: 292c 3c2f 6469 763e 0a3c 6469 7620 636c ),
    .
    566 \n+00017ae0: 2020 2020 2020 202a 2063 4564 6765 5368 * cEdgeSh\n+00017af0: 6172 706e 6573 7320 3d20 7665 7274 6578 arpness = vertex\n+00017b00: 2e47 6574 4368 696c 6453 6861 7270 6e65 .GetChildSharpne\n+00017b10: 7373 5065 7245 6467 6528 6372 6561 7365 ssPerEdge(crease\n+00017b20: 2c20 6345 6467 6553 6861 7270 6e65 7373 , cEdgeSharpness\n+00017b30: 4275 6666 6572 292c 3c2f 6469 763e 0a3c Buffer),
    .<\n+00017b40: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00017b50: 3e3c 6120 6964 3d22 6c30 3035 3637 2220 > 567 c\n+00017ba0: 5665 7274 6578 5368 6172 706e 6573 7320 VertexSharpness \n+00017bb0: 3d20 7665 7274 6578 2e47 6574 4368 696c = vertex.GetChil\n+00017bc0: 6453 6861 7270 6e65 7373 2863 7265 6173 dSharpness(creas\n+00017bd0: 6529 3b3c 2f64 6976 3e0a 3c64 6976 2063 e);
    .
    568 <\n+00017c30: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.\n+00017d50: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+00017d80: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 570 cRu\n+00017db0: 6c65 203d 2063 7265 6173 652e 3c61 2063 le = crease.Det\n+00017e10: 6572 6d69 6e65 5665 7274 6578 5665 7274 ermineVertexVert\n+00017e20: 6578 5275 6c65 3c2f 613e 2863 5665 7274 exRule(cVert\n+00017e30: 6578 5368 6172 706e 6573 732c 2076 616c exSharpness, val\n+00017e40: 656e 6365 2c20 6345 6467 6553 6861 7270 ence, cEdgeSharp\n+00017e50: 6e65 7373 293b 3c2f 6469 763e 0a3c 6469 ness);
    .<\n+00017e70: 6120 6964 3d22 6c30 3035 3731 2220 6e61 a id=\"l00571\" na\n+00017e80: 6d65 3d22 6c30 3035 3731 223e 3c2f 613e me=\"l00571\">\n+00017e90: 3c73 7061 6e20 636c 6173 733d 226c 696e 571 if (cR\n+00017ee0: 756c 6520 3d3d 2070 5275 6c65 2920 3c73 ule == pRule) return;
    .<\n+00017f30: 6120 6964 3d22 6c30 3035 3732 2220 6e61 a id=\"l00572\" na\n+00017f40: 6d65 3d22 6c30 3035 3732 223e 3c2f 613e me=\"l00572\">\n+00017f50: 3c73 7061 6e20 636c 6173 733d 226c 696e 572 }
    .<\n+00017f90: 6120 6964 3d22 6c30 3035 3733 2220 6e61 a id=\"l00573\" na\n+00017fa0: 6d65 3d22 6c30 3035 3733 223e 3c2f 613e me=\"l00573\">\n+00017fb0: 3c73 7061 6e20 636c 6173 733d 226c 696e 573
    .
    574 \n+00018030: 203c 7370 616e 2063 6c61 7373 3d22 636f //\n+00018050: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+000180a0: 2035 3735 3c2f 7370 616e 3e20 2020 203c 575 <\n+000180b0: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n+000180c0: 656e 7422 3e2f 2f20 2049 6e69 7469 616c ent\">// Initial\n+000180d0: 697a 6520 6120 6c6f 6361 6c20 6368 696c ize a local chil\n+000180e0: 6420 6d61 736b 2c20 636f 6d70 7574 6520 d mask, compute \n+000180f0: 7468 6520 6672 6163 7469 6f6e 616c 2077 the fractional w\n+00018100: 6569 6768 7420 6672 6f6d 2070 6172 656e eight from paren\n+00018110: 7420 616e 6420 6368 696c 643c 2f73 7061 t and child
    .
    576 \n+00018180: 203c 7370 616e 2063 6c61 7373 3d22 636f // sharp\n+000181a0: 6e65 7373 2076 616c 7565 7320 616e 6420 ness values and \n+000181b0: 636f 6d62 696e 6520 7468 6520 7477 6f20 combine the two \n+000181c0: 6d61 736b 733a 3c2f 7370 616e 3e3c 2f64 masks:.
    57\n+00018220: 373c 2f73 7061 6e3e 2020 2020 3c73 7061 7 //.
    578<\n+000182a0: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> \n+000182c0: 7479 7065 6465 663c 2f73 7061 6e3e 203c typedef <\n+000182d0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+000182e0: 6f72 6422 3e74 7970 656e 616d 653c 2f73 ord\">typename MASK::Weigh\n+00018300: 7420 5765 6967 6874 3b3c 2f64 6976 3e0a t Weight;
    .\n+00018310: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n+000183a0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+000183b0: 6e6f 223e 2020 3538 303c 2f73 7061 6e3e no\"> 580\n+000183c0: 2020 2020 5765 6967 6874 202a 2063 4d61 Weight * cMa\n+000183d0: 736b 5765 6967 6874 7320 3d20 2857 6569 skWeights = (Wei\n+000183e0: 6768 7420 2a29 616c 6c6f 6361 2828 3120 ght *)alloca((1 \n+000183f0: 2b20 3220 2a20 7661 6c65 6e63 6529 2a3c + 2 * valence)*<\n+00018400: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+00018410: 6f72 6422 3e73 697a 656f 663c 2f73 7061 ord\">sizeof(Weight));..<\n+00018550: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00018560: 6e6f 223e 2020 3538 323c 2f73 7061 6e3e no\"> 582\n+00018570: 203c 2f64 6976 3e0a 3c64 6976 2063 6c61
    .
    \n+000185c0: 2020 3538 333c 2f73 7061 6e3e 2020 2020 583 \n+000185d0: 3c73 7061 6e20 636c 6173 733d 226b 6579 if ((cRule == <\n+00018600: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n+00018610: 5f65 6e75 6d76 616c 7565 2220 6872 6566 _enumvalue\" href\n+00018620: 3d22 6130 3133 3235 2e68 746d 6c23 6131 =\"a01325.html#a1\n+00018630: 3166 6364 3531 6566 3836 3131 3866 3635 1fcd51ef86118f65\n+00018640: 6536 3033 6331 3437 3433 3737 6137 3861 e603c1474377a78a\n+00018650: 3631 6431 3337 6638 3636 3939 3765 6433 61d137f866997ed3\n+00018660: 3639 3365 3366 6361 6437 3664 6566 3566 693e3fcad76def5f\n+00018670: 223e 4372 6561 7365 3a3a 5255 4c45 5f53 \">Crease::RULE_S\n+00018680: 4d4f 4f54 483c 2f61 3e29 207c 7c20 2863 MOOTH) || (c\n+00018690: 5275 6c65 203d 3d20 3c61 2063 6c61 7373 Rule == Creas\n+00018710: 653a 3a52 554c 455f 4441 5254 3c2f 613e e::RULE_DART\n+00018720: 2929 207b 3c2f 6469 763e 0a3c 6469 7620 )) {
    .
    584 \n+00018780: 2020 2020 2020 2061 7373 6967 6e53 6d6f assignSmo\n+00018790: 6f74 684d 6173 6b46 6f72 5665 7274 6578 othMaskForVertex\n+000187a0: 2876 6572 7465 782c 2063 4d61 736b 293b (vertex, cMask);\n+000187b0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+00018800: 2035 3835 3c2f 7370 616e 3e20 2020 207d 585 }\n+00018810: 203c 7370 616e 2063 6c61 7373 3d22 6b65 else<\n+00018830: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> if (cRul\n+00018860: 6520 3d3d 203c 6120 636c 6173 733d 2263 e == Crease::\n+000188e0: 5255 4c45 5f43 5245 4153 453c 2f61 3e29 RULE_CREASE)\n+000188f0: 207b 3c2f 6469 763e 0a3c 6469 7620 636c {
    .
    586 \n+00018950: 2020 2020 203c 7370 616e 2063 6c61 7373 i\n+00018970: 6e74 3c2f 7370 616e 3e20 6372 6561 7365 nt crease\n+00018980: 456e 6473 5b32 5d3b 3c2f 6469 763e 0a3c Ends[2];
    .<\n+00018990: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+000189a0: 3e3c 6120 6964 3d22 6c30 3035 3837 2220 > 587 Crease(_options).Get\n+00018a80: 5368 6172 7045 6467 6550 6169 724f 6643 SharpEdgePairOfC\n+00018a90: 7265 6173 653c 2f61 3e28 6345 6467 6553 rease(cEdgeS\n+00018aa0: 6861 7270 6e65 7373 2c20 7661 6c65 6e63 harpness, valenc\n+00018ab0: 652c 2063 7265 6173 6545 6e64 7329 3b3c e, creaseEnds);<\n+00018ac0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+00018b10: 3538 383c 2f73 7061 6e3e 203c 2f64 6976 588 .
    589<\n+00018b70: 2f73 7061 6e3e 2020 2020 2020 2020 6173 /span> as\n+00018b80: 7369 676e 4372 6561 7365 4d61 736b 466f signCreaseMaskFo\n+00018b90: 7256 6572 7465 7828 7665 7274 6578 2c20 rVertex(vertex, \n+00018ba0: 634d 6173 6b2c 2063 7265 6173 6545 6e64 cMask, creaseEnd\n+00018bb0: 7329 3b3c 2f64 6976 3e0a 3c64 6976 2063 s);
    .
    590 \n+00018c10: 2020 7d20 3c73 7061 6e20 636c 6173 733d } el\n+00018c30: 7365 3c2f 7370 616e 3e20 7b3c 2f64 6976 se {.
    591<\n+00018c90: 2f73 7061 6e3e 2020 2020 2020 2020 6173 /span> as\n+00018ca0: 7369 676e 436f 726e 6572 4d61 736b 466f signCornerMaskFo\n+00018cb0: 7256 6572 7465 7828 7665 7274 6578 2c20 rVertex(vertex, \n+00018cc0: 634d 6173 6b29 3b3c 2f64 6976 3e0a 3c64 cMask);
    .\n+00018ce0: 3c61 2069 643d 226c 3030 3539 3222 206e 592 }
    .\n+00018d40: 3c61 2069 643d 226c 3030 3539 3322 206e 593
    .
    594 \n+00018de0: 2020 5765 6967 6874 2070 5765 6967 6874 Weight pWeight\n+00018df0: 203d 2063 7265 6173 652e 3c61 2063 6c61 = crease.Compu\n+00018e50: 7465 4672 6163 7469 6f6e 616c 5765 6967 teFractionalWeig\n+00018e60: 6874 4174 5665 7274 6578 3c2f 613e 2870 htAtVertex(p\n+00018e70: 5665 7274 6578 5368 6172 706e 6573 732c VertexSharpness,\n+00018e80: 2063 5665 7274 6578 5368 6172 706e 6573 cVertexSharpnes\n+00018e90: 732c 3c2f 6469 763e 0a3c 6469 7620 636c s,
    .
    595 \n+00018ef0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00018f00: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00018f10: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00018f20: 7661 6c65 6e63 652c 2070 4564 6765 5368 valence, pEdgeSh\n+00018f30: 6172 706e 6573 732c 2063 4564 6765 5368 arpness, cEdgeSh\n+00018f40: 6172 706e 6573 7329 3b3c 2f64 6976 3e0a arpness);
    .\n+00018f50: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n+00018fd0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00018fe0: 3e3c 6120 6964 3d22 6c30 3035 3937 2220 > 597
    .
    598 \n+00019080: 2020 2063 4d61 736b 2e3c 6120 636c 6173 cMask.Combin\n+000190e0: 6556 6572 7465 7856 6572 7465 784d 6173 eVertexVertexMas\n+000190f0: 6b73 3c2f 613e 2863 5765 6967 6874 2c20 ks(cWeight, \n+00019100: 7057 6569 6768 742c 206d 6173 6b29 3b3c pWeight, mask);<\n+00019110: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+00019160: 3539 393c 2f73 7061 6e3e 7d3c 2f64 6976 599}.
    .
    600 .
    6\n+00019220: 3031 3c2f 7370 616e 3e3c 7370 616e 2063 01/\n+00019240: 2f3c 2f73 7061 6e3e 3c2f 6469 763e 0a3c /
    .<\n+00019250: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00019260: 3e3c 6120 6964 3d22 6c30 3036 3032 2220 > 602// The\n+000192c0: 2063 6f6d 7075 7461 7469 6f6e 206f 6620 computation of \n+000192d0: 6c69 6d69 7420 6d61 736b 7320 666f 7220 limit masks for \n+000192e0: 7665 7274 6963 6573 3a3c 2f73 7061 6e3e vertices:\n+000192f0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+00019340: 2036 3033 3c2f 7370 616e 3e3c 7370 616e 603//
    \n+00019370: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+000193a0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 604templ\n+000193e0: 6174 653c 2f73 7061 6e3e 2026 6c74 3b53 ate <S\n+000193f0: 6368 656d 6554 7970 6520 5343 4845 4d45 chemeType SCHEME\n+00019400: 2667 743b 3c2f 6469 763e 0a3c 6469 7620 >
    .
    605<\n+00019460: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+00019470: 6f72 6422 3e74 656d 706c 6174 653c 2f73 ord\">template <t\n+000194a0: 7970 656e 616d 653c 2f73 7061 6e3e 2056 ypename V\n+000194b0: 4552 5445 582c 203c 7370 616e 2063 6c61 ERTEX, typ\n+000194d0: 656e 616d 653c 2f73 7061 6e3e 204d 4153 ename MAS\n+000194e0: 4b26 6774 3b3c 2f64 6976 3e0a 3c64 6976 K>
    .<\n+00019520: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00019530: 6e6f 223e 2020 3630 363c 2f73 7061 6e3e no\"> 606\n+00019540: 3c73 7061 6e20 636c 6173 733d 226b 6579 void
    ..
    \n+00019640: 2036 3037 3c2f 613e 3c2f 7370 616e 3e3c 607<\n+00019650: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n+00019660: 5f66 756e 6374 696f 6e22 2068 7265 663d _function\" href=\n+00019670: 2261 3031 3333 332e 6874 6d6c 2361 3363 \"a01333.html#a3c\n+00019680: 3864 3736 3363 6131 3863 3435 3763 3933 8d763ca18c457c93\n+00019690: 3664 6230 6534 3739 3937 3436 6632 223e 6db0e4799746f2\">\n+000196a0: 5363 6865 6d65 266c 743b 5343 4845 4d45 Scheme<SCHEME\n+000196b0: 2667 743b 3a3a 436f 6d70 7574 6556 6572 >::ComputeVer\n+000196c0: 7465 784c 696d 6974 4d61 736b 3c2f 613e texLimitMask\n+000196d0: 2856 4552 5445 5820 3c73 7061 6e20 636c (VERTEX co\n+000196f0: 6e73 743c 2f73 7061 6e3e 2661 6d70 3b20 nst& \n+00019700: 7665 7274 6578 2c3c 2f64 6976 3e0a 3c64 vertex,
    .\n+00019720: 3c61 2069 643d 226c 3030 3630 3822 206e 608 \n+00019770: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00019780: 2020 2020 2020 2020 204d 4153 4b26 616d MASK&am\n+00019790: 703b 2020 2020 2020 2020 206d 6173 6b2c p; mask,\n+000197a0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+000197f0: 2036 3039 3c2f 7370 616e 3e20 2020 2020 609 \n+00019800: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00019810: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00019820: 2020 3c61 2063 6c61 7373 3d22 636f 6465 Crease::Ru\n+00019880: 6c65 3c2f 613e 2020 7275 6c65 293c 7370 le rule) const {
    .
    610 .
    6\n+00019960: 3131 3c2f 7370 616e 3e20 2020 203c 7370 11 if\n+00019990: 2028 2872 756c 6520 3d3d 203c 6120 636c ((rule == Cr\n+00019a10: 6561 7365 3a3a 5255 4c45 5f53 4d4f 4f54 ease::RULE_SMOOT\n+00019a20: 483c 2f61 3e29 207c 7c20 2872 756c 6520 H) || (rule \n+00019a30: 3d3d 203c 6120 636c 6173 733d 2263 6f64 == Crease::RU\n+00019ab0: 4c45 5f44 4152 543c 2f61 3e29 2920 7b3c LE_DART)) {<\n+00019ac0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+00019b10: 3631 323c 2f73 7061 6e3e 2020 2020 2020 612 \n+00019b20: 2020 6173 7369 676e 536d 6f6f 7468 4c69 assignSmoothLi\n+00019b30: 6d69 744d 6173 6b28 7665 7274 6578 2c20 mitMask(vertex, \n+00019b40: 6d61 736b 293b 3c2f 6469 763e 0a3c 6469 mask);
    .<\n+00019b60: 6120 6964 3d22 6c30 3036 3133 2220 6e61 a id=\"l00613\" na\n+00019b70: 6d65 3d22 6c30 3036 3133 223e 3c2f 613e me=\"l00613\">\n+00019b80: 3c73 7061 6e20 636c 6173 733d 226c 696e 613 } else if\n+00019bf0: 2028 7275 6c65 203d 3d20 3c61 2063 6c61 (rule == Cre\n+00019c70: 6173 653a 3a52 554c 455f 4352 4541 5345 ase::RULE_CREASE\n+00019c80: 3c2f 613e 2920 7b3c 2f64 6976 3e0a 3c64 ) {
    .\n+00019ca0: 3c61 2069 643d 226c 3030 3631 3422 206e 614 float\n+00019d10: 202a 2065 6467 6553 6861 7270 6e65 7373 * edgeSharpness\n+00019d20: 203d 2028 3c73 7061 6e20 636c 6173 733d = (fl\n+00019d40: 6f61 743c 2f73 7061 6e3e 202a 2961 6c6c oat *)all\n+00019d50: 6f63 6128 7665 7274 6578 2e47 6574 4e75 oca(vertex.GetNu\n+00019d60: 6d45 6467 6573 2829 202a 203c 7370 616e mEdges() * sizeof(f\n+00019d90: 6c6f 6174 2929 3b3c 2f64 6976 3e0a 3c64 loat));
    .\n+00019db0: 3c61 2069 643d 226c 3030 3631 3522 206e 615 vertex\n+00019e00: 2e47 6574 5368 6172 706e 6573 7350 6572 .GetSharpnessPer\n+00019e10: 4564 6765 2865 6467 6553 6861 7270 6e65 Edge(edgeSharpne\n+00019e20: 7373 293b 3c2f 6469 763e 0a3c 6469 7620 ss);
    .
    616 \n+00019e80: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+00019ed0: 2036 3137 3c2f 7370 616e 3e20 2020 2020 617 \n+00019ee0: 2020 203c 7370 616e 2063 6c61 7373 3d22 int\n+00019f00: 3c2f 7370 616e 3e20 6372 6561 7365 456e creaseEn\n+00019f10: 6473 5b32 5d3b 3c2f 6469 763e 0a3c 6469 ds[2];
    .<\n+00019f30: 6120 6964 3d22 6c30 3036 3138 2220 6e61 a id=\"l00618\" na\n+00019f40: 6d65 3d22 6c30 3036 3138 223e 3c2f 613e me=\"l00618\">\n+00019f50: 3c73 7061 6e20 636c 6173 733d 226c 696e 618 Crease(\n+00019fb0: 5f6f 7074 696f 6e73 292e 3c61 2063 6c61 _options).GetSh\n+0001a010: 6172 7045 6467 6550 6169 724f 6643 7265 arpEdgePairOfCre\n+0001a020: 6173 653c 2f61 3e28 6564 6765 5368 6172 ase(edgeShar\n+0001a030: 706e 6573 732c 2076 6572 7465 782e 4765 pness, vertex.Ge\n+0001a040: 744e 756d 4564 6765 7328 292c 2063 7265 tNumEdges(), cre\n+0001a050: 6173 6545 6e64 7329 3b3c 2f64 6976 3e0a aseEnds);
    .\n+0001a060: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n+0001a0f0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+0001a100: 6e6f 223e 2020 3632 303c 2f73 7061 6e3e no\"> 620\n+0001a110: 2020 2020 2020 2020 6173 7369 676e 4372 assignCr\n+0001a120: 6561 7365 4c69 6d69 744d 6173 6b28 7665 easeLimitMask(ve\n+0001a130: 7274 6578 2c20 6d61 736b 2c20 6372 6561 rtex, mask, crea\n+0001a140: 7365 456e 6473 293b 3c2f 6469 763e 0a3c seEnds);
    .<\n+0001a150: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+0001a160: 3e3c 6120 6964 3d22 6c30 3036 3231 2220 > 621 } else {\n+0001a1d0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+0001a220: 2036 3232 3c2f 7370 616e 3e20 2020 2020 622 \n+0001a230: 2020 2061 7373 6967 6e43 6f72 6e65 724c assignCornerL\n+0001a240: 696d 6974 4d61 736b 2876 6572 7465 782c imitMask(vertex,\n+0001a250: 206d 6173 6b29 3b3c 2f64 6976 3e0a 3c64 mask);
    .\n+0001a270: 3c61 2069 643d 226c 3030 3632 3322 206e 623 }
    .\n+0001a2d0: 3c61 2069 643d 226c 3030 3632 3422 206e 624}
    .
    \n+0001a320: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n+0001a390: 6120 6964 3d22 6c30 3036 3236 2220 6e61 a id=\"l00626\" na\n+0001a3a0: 6d65 3d22 6c30 3036 3236 223e 3c2f 613e me=\"l00626\">\n+0001a3b0: 3c73 7061 6e20 636c 6173 733d 226c 696e 626template<\n+0001a3f0: 2f73 7061 6e3e 2026 6c74 3b53 6368 656d /span> <Schem\n+0001a400: 6554 7970 6520 5343 4845 4d45 2667 743b eType SCHEME>\n+0001a410: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+0001a460: 2036 3237 3c2f 7370 616e 3e3c 7370 616e 627template\n+0001a490: 2026 6c74 3b3c 7370 616e 2063 6c61 7373 <typen\n+0001a4b0: 616d 653c 2f73 7061 6e3e 2056 4552 5445 ame VERTE\n+0001a4c0: 582c 203c 7370 616e 2063 6c61 7373 3d22 X, typenam\n+0001a4e0: 653c 2f73 7061 6e3e 204d 4153 4b26 6774 e MASK>\n+0001a4f0: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
    .
    \n+0001a540: 2020 3632 383c 2f73 7061 6e3e 3c73 7061 628void
    .
    .\n+0001a5d0: 3c61 2069 643d 226c 3030 3632 3922 206e 629\n+0001a650: 3c2f 613e 3c2f 7370 616e 3e3c 6120 636c Sche\n+0001a6b0: 6d65 266c 743b 5343 4845 4d45 2667 743b me<SCHEME>\n+0001a6c0: 3a3a 436f 6d70 7574 6556 6572 7465 784c ::ComputeVertexL\n+0001a6d0: 696d 6974 4d61 736b 3c2f 613e 2856 4552 imitMask(VER\n+0001a6e0: 5445 5820 3c73 7061 6e20 636c 6173 733d TEX const<\n+0001a700: 2f73 7061 6e3e 2661 6d70 3b20 7665 7274 /span>& vert\n+0001a710: 6578 2c3c 2f64 6976 3e0a 3c64 6976 2063 ex,
    .
    630 \n+0001a770: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0001a780: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0001a790: 2020 2020 204d 4153 4b26 616d 703b 2020 MASK& \n+0001a7a0: 2020 2020 2020 2070 6f73 4d61 736b 2c3c posMask,<\n+0001a7b0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+0001a800: 3633 313c 2f73 7061 6e3e 2020 2020 2020 631 \n+0001a810: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0001a820: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0001a830: 204d 4153 4b26 616d 703b 2020 2020 2020 MASK& \n+0001a840: 2020 2074 616e 314d 6173 6b2c 3c2f 6469 tan1Mask,.
    632\n+0001a8a0: 3c2f 7370 616e 3e20 2020 2020 2020 2020 \n+0001a8b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0001a8c0: 2020 2020 2020 2020 2020 2020 2020 4d41 MA\n+0001a8d0: 534b 2661 6d70 3b20 2020 2020 2020 2020 SK& \n+0001a8e0: 7461 6e32 4d61 736b 2c3c 2f64 6976 3e0a tan2Mask,
    .\n+0001a8f0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n+0001ac10: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+0001ac20: 3e3c 6120 6964 3d22 6c30 3036 3336 2220 > 636 assig\n+0001ac70: 6e53 6d6f 6f74 684c 696d 6974 4d61 736b nSmoothLimitMask\n+0001ac80: 2876 6572 7465 782c 2070 6f73 4d61 736b (vertex, posMask\n+0001ac90: 293b 3c2f 6469 763e 0a3c 6469 7620 636c );
    .
    637 \n+0001acf0: 2020 2020 2061 7373 6967 6e53 6d6f 6f74 assignSmoot\n+0001ad00: 684c 696d 6974 5461 6e67 656e 744d 6173 hLimitTangentMas\n+0001ad10: 6b73 2876 6572 7465 782c 2074 616e 314d ks(vertex, tan1M\n+0001ad20: 6173 6b2c 2074 616e 324d 6173 6b29 3b3c ask, tan2Mask);<\n+0001ad30: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+0001ad80: 3633 383c 2f73 7061 6e3e 2020 2020 7d20 638 } \n+0001ad90: 3c73 7061 6e20 636c 6173 733d 226b 6579 else \n+0001add0: 6966 3c2f 7370 616e 3e20 2872 756c 6520 if (rule \n+0001ade0: 3d3d 203c 6120 636c 6173 733d 2263 6f64 == Crease::RU\n+0001ae60: 4c45 5f43 5245 4153 453c 2f61 3e29 207b LE_CREASE) {\n+0001ae70: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+0001aec0: 2036 3339 3c2f 7370 616e 3e20 2020 2020 639 \n+0001aed0: 2020 203c 7370 616e 2063 6c61 7373 3d22 flo\n+0001aef0: 6174 3c2f 7370 616e 3e20 2a20 6564 6765 at * edge\n+0001af00: 5368 6172 706e 6573 7320 3d20 283c 7370 Sharpness = (float *)alloca(ver\n+0001af40: 7465 782e 4765 744e 756d 4564 6765 7328 tex.GetNumEdges(\n+0001af50: 2920 2a20 3c73 7061 6e20 636c 6173 733d ) * sizeof\n+0001af70: 3c2f 7370 616e 3e28 666c 6f61 7429 293b (float));\n+0001af80: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+0001afd0: 2036 3430 3c2f 7370 616e 3e20 2020 2020 640 \n+0001afe0: 2020 2076 6572 7465 782e 4765 7453 6861 vertex.GetSha\n+0001aff0: 7270 6e65 7373 5065 7245 6467 6528 6564 rpnessPerEdge(ed\n+0001b000: 6765 5368 6172 706e 6573 7329 3b3c 2f64 geSharpness);.
    64\n+0001b060: 313c 2f73 7061 6e3e 203c 2f64 6976 3e0a 1
    .\n+0001b070: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
    <\n+0001b0a0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 642 int\n+0001b0f0: 2063 7265 6173 6545 6e64 735b 325d 3b3c creaseEnds[2];<\n+0001b100: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+0001b150: 3634 333c 2f73 7061 6e3e 2020 2020 2020 643 \n+0001b160: 2020 3c61 2063 6c61 7373 3d22 636f 6465 Cr\n+0001b190: 6561 7365 3c2f 613e 285f 6f70 7469 6f6e ease(_option\n+0001b1a0: 7329 2e3c 6120 636c 6173 733d 2263 6f64 s).GetSharpEdge\n+0001b200: 5061 6972 4f66 4372 6561 7365 3c2f 613e PairOfCrease\n+0001b210: 2865 6467 6553 6861 7270 6e65 7373 2c20 (edgeSharpness, \n+0001b220: 7665 7274 6578 2e47 6574 4e75 6d45 6467 vertex.GetNumEdg\n+0001b230: 6573 2829 2c20 6372 6561 7365 456e 6473 es(), creaseEnds\n+0001b240: 293b 3c2f 6469 763e 0a3c 6469 7620 636c );
    .
    644 .
    6\n+0001b2f0: 3435 3c2f 7370 616e 3e20 2020 2020 2020 45 \n+0001b300: 2061 7373 6967 6e43 7265 6173 654c 696d assignCreaseLim\n+0001b310: 6974 4d61 736b 2876 6572 7465 782c 2070 itMask(vertex, p\n+0001b320: 6f73 4d61 736b 2c20 6372 6561 7365 456e osMask, creaseEn\n+0001b330: 6473 293b 3c2f 6469 763e 0a3c 6469 7620 ds);
    .
    646 \n+0001b390: 2020 2020 2020 2061 7373 6967 6e43 7265 assignCre\n+0001b3a0: 6173 654c 696d 6974 5461 6e67 656e 744d aseLimitTangentM\n+0001b3b0: 6173 6b73 2876 6572 7465 782c 2074 616e asks(vertex, tan\n+0001b3c0: 314d 6173 6b2c 2074 616e 324d 6173 6b2c 1Mask, tan2Mask,\n+0001b3d0: 2063 7265 6173 6545 6e64 7329 3b3c 2f64 creaseEnds);.
    64\n+0001b430: 373c 2f73 7061 6e3e 2020 2020 7d20 3c73 7 } else {
    .<\n+0001b4a0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+0001b4b0: 6e6f 223e 2020 3634 383c 2f73 7061 6e3e no\"> 648\n+0001b4c0: 2020 2020 2020 2020 6173 7369 676e 436f assignCo\n+0001b4d0: 726e 6572 4c69 6d69 744d 6173 6b28 7665 rnerLimitMask(ve\n+0001b4e0: 7274 6578 2c20 706f 734d 6173 6b29 3b3c rtex, posMask);<\n+0001b4f0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+0001b540: 3634 393c 2f73 7061 6e3e 2020 2020 2020 649 \n+0001b550: 2020 6173 7369 676e 436f 726e 6572 4c69 assignCornerLi\n+0001b560: 6d69 7454 616e 6765 6e74 4d61 736b 7328 mitTangentMasks(\n+0001b570: 7665 7274 6578 2c20 7461 6e31 4d61 736b vertex, tan1Mask\n+0001b580: 2c20 7461 6e32 4d61 736b 293b 3c2f 6469 , tan2Mask);.
    650\n+0001b5e0: 3c2f 7370 616e 3e20 2020 207d 3c2f 6469 }.
    651\n+0001b640: 3c2f 7370 616e 3e7d 3c2f 6469 763e 0a3c }
    .<\n+0001b650: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    \n+0001b6a0: 3635 323c 2f73 7061 6e3e 203c 2f64 6976 652 .
    653<\n+0001b700: 2f73 7061 6e3e 203c 2f64 6976 3e0a 3c64 /span>
    .\n+0001b720: 3c61 2069 643d 226c 3030 3635 3422 206e 654} // end\n+0001b780: 206e 616d 6573 7061 6365 2073 6463 3c2f namespace sdc
    .<\n+0001b7d0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+0001b7e0: 6e6f 223e 2020 3635 353c 2f73 7061 6e3e no\"> 655\n+0001b7f0: 203c 2f64 6976 3e0a 3c64 6976 2063 6c61
    .
    \n+0001b840: 2020 3635 363c 2f73 7061 6e3e 7d20 3c73 656} // end names\n+0001b870: 7061 6365 204f 5045 4e53 5542 4449 565f pace OPENSUBDIV_\n+0001b880: 5645 5253 494f 4e3c 2f73 7061 6e3e 3c2f VERSION.
    6\n+0001b8e0: 3537 3c2f 7370 616e 3e3c 7370 616e 2063 57u\n+0001b900: 7369 6e67 206e 616d 6573 7061 6365 203c sing namespace <\n+0001b910: 2f73 7061 6e3e 4f50 454e 5355 4244 4956 /span>OPENSUBDIV\n+0001b920: 5f56 4552 5349 4f4e 3b3c 2f64 6976 3e0a _VERSION;
    .\n+0001b930: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
    <\n+0001b960: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 658} // e\n+0001b9a0: 6e64 206e 616d 6573 7061 6365 204f 7065 nd namespace Ope\n+0001b9b0: 6e53 7562 6469 763c 2f73 7061 6e3e 3c2f nSubdiv.
    6\n+0001ba10: 3539 3c2f 7370 616e 3e20 3c2f 6469 763e 59
    \n+0001ba20: 0a3c 6469 7620 636c 6173 733d 226c 696e .
    \n+0001ba50: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 660\n+0001ba90: 2365 6e64 6966 203c 2f73 7061 6e3e 3c73 #endif /* OPENSUBDI\n+0001bac0: 5633 5f53 4443 5f53 4348 454d 455f 4820 V3_SDC_SCHEME_H \n+0001bad0: 2a2f 3c2f 7370 616e 3e3c 7370 616e 2063 */.
    E\n+0001bcc0: 6e75 6d65 7261 7465 6420 7479 7065 2066 numerated type f\n+0001bcd0: 6f72 2061 6c6c 2066 6163 6520 7370 6c69 or all face spli\n+0001bce0: 7474 696e 6720 7363 6865 6d65 732e 3c2f tting schemes.
    Defini\n+0001bd10: 7469 6f6e 3c2f 623e 203c 6120 6872 6566 tion typ\n+0001bd40: 6573 2e68 3a34 373c 2f61 3e3c 2f64 6976 es.h:47
    .
    <\n+0001bd90: 6120 6872 6566 3d22 6130 3133 3235 2e68 a href=\"a01325.h\n+0001bda0: 746d 6c22 3e4f 7065 6e53 7562 6469 763a tml\">OpenSubdiv:\n+0001bdb0: 3a4f 5045 4e53 5542 4449 565f 5645 5253 :OPENSUBDIV_VERS\n+0001bdc0: 494f 4e3a 3a53 6463 3a3a 4372 6561 7365 ION::Sdc::Crease\n+0001bdd0: 3c2f 613e 3c2f 6469 763e 3c64 6976 2063
    Typ\n+0001bdf0: 6573 2c20 636f 6e73 7461 6e74 7320 616e es, constants an\n+0001be00: 6420 7574 696c 6974 6965 7320 7265 6c61 d utilities rela\n+0001be10: 7465 6420 746f 2073 656d 692d 7368 6172 ted to semi-shar\n+0001be20: 7020 6372 6561 7369 6e67 20e2 8093 2077 p creasing ... w\n+0001be30: 686f 7365 2069 6d70 6c65 6d65 6e74 6174 hose implementat\n+0001be40: 696f 6e20 6973 2069 6e64 6570 656e 6465 ion is independe\n+0001be50: 6e74 206f 2e2e 2e3c 2f64 6976 3e3c 6469 nt o...
    \n+0001be70: 3c62 3e44 6566 696e 6974 696f 6e3c 2f62 Definition crease.h:6\n+0001beb0: 323c 2f61 3e3c 2f64 6976 3e3c 2f64 6976 2
    .<\n+0001bfc0: 623e 4465 6669 6e69 7469 6f6e 3c2f 623e b>Definition\n+0001bfd0: 203c 6120 6872 6566 3d22 6130 3037 3832 crease.h:82\n+0001c000: 3c2f 613e 3c2f 6469 763e 3c2f 6469 763e
    \n+0001c010: 0a3c 6469 7620 636c 6173 733d 2274 7463 .
    .
    OpenSubdiv::OPE\n+0001c290: 4e53 5542 4449 565f 5645 5253 494f 4e3a NSUBDIV_VERSION:\n+0001c2a0: 3a53 6463 3a3a 4372 6561 7365 3a3a 5255 :Sdc::Crease::RU\n+0001c2b0: 4c45 5f53 4d4f 4f54 483c 2f61 3e3c 2f64 LE_SMOOTH
    @ RULE_SM\n+0001c2e0: 4f4f 5448 3c2f 6469 763e 3c64 6976 2063 OOTH
    \n+0001c300: 4465 6669 6e69 7469 6f6e 3c2f 623e 203c Definition <\n+0001c310: 6120 6872 6566 3d22 6130 3037 3832 5f73 a href=\"a00782_s\n+0001c320: 6f75 7263 652e 6874 6d6c 236c 3030 3038 ource.html#l0008\n+0001c330: 3422 3e63 7265 6173 652e 683a 3834 3c2f 4\">crease.h:84
    .<\n+0001c350: 6469 7620 636c 6173 733d 2274 7463 2220 div class=\"ttc\" \n+0001c360: 6964 3d22 6161 3031 3332 355f 6874 6d6c id=\"aa01325_html\n+0001c370: 5f61 3131 6663 6435 3165 6638 3631 3138 _a11fcd51ef86118\n+0001c380: 6636 3565 3630 3363 3134 3734 3337 3761 f65e603c1474377a\n+0001c390: 3738 6139 3636 6661 3161 6538 6165 6238 78a966fa1ae8aeb8\n+0001c3a0: 3538 3763 3439 3863 6636 6139 3263 6333 587c498cf6a92cc3\n+0001c3b0: 3333 3522 3e3c 6469 7620 636c 6173 733d 335\">.\n+0001c4f0: 3c64 6976 2063 6c61 7373 3d22 7474 6322 .
    OpenSubdiv::\n+0001c730: 4f50 454e 5355 4244 4956 5f56 4552 5349 OPENSUBDIV_VERSI\n+0001c740: 4f4e 3a3a 5364 633a 3a43 7265 6173 653a ON::Sdc::Crease:\n+0001c750: 3a47 6574 5368 6172 7045 6467 6550 6169 :GetSharpEdgePai\n+0001c760: 724f 6643 7265 6173 653c 2f61 3e3c 2f64 rOfCrease
    void GetS\n+0001c790: 6861 7270 4564 6765 5061 6972 4f66 4372 harpEdgePairOfCr\n+0001c7a0: 6561 7365 2866 6c6f 6174 2063 6f6e 7374 ease(float const\n+0001c7b0: 202a 696e 6369 6465 6e74 4564 6765 5368 *incidentEdgeSh\n+0001c7c0: 6172 706e 6573 732c 2069 6e74 2069 6e63 arpness, int inc\n+0001c7d0: 6964 656e 7445 6467 6543 6f75 6e74 2c20 identEdgeCount, \n+0001c7e0: 696e 7420 7368 6172 7045 6467 6550 6169 int sharpEdgePai\n+0001c7f0: 725b 325d 2920 636f 6e73 743c 2f64 6976 r[2]) const
    Definitio\n+0001c820: 6e3c 2f62 3e20 3c61 2068 7265 663d 2261 n crease\n+0001c850: 2e68 3a32 3238 3c2f 613e 3c2f 6469 763e .h:228
    \n+0001c860: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    .<\n+0001c9e0: 6469 7620 636c 6173 733d 2274 7463 2220 div class=\"ttc\" \n+0001c9f0: 6964 3d22 6161 3031 3332 355f 6874 6d6c id=\"aa01325_html\n+0001ca00: 5f61 3564 6661 3638 3130 6635 3130 6661 _a5dfa6810f510fa\n+0001ca10: 6331 6563 3632 3166 6339 6536 6235 3330 c1ec621fc9e6b530\n+0001ca20: 6334 223e 3c64 6976 2063 6c61 7373 3d22 c4\">\n+0001cab0: 3c64 6976 2063 6c61 7373 3d22 7474 6465
    bool IsUnifo\n+0001cad0: 726d 2829 2063 6f6e 7374 3c2f 6469 763e rm() const
    \n+0001cae0: 3c64 6976 2063 6c61 7373 3d22 7474 6465
    Definition\n+0001cb00: 3c2f 623e 203c 6120 6872 6566 3d22 6130 crease.\n+0001cb30: 683a 3935 3c2f 613e 3c2f 6469 763e 3c2f h:95
    .
    OpenSubdiv\n+0001cbe0: 3a3a 4f50 454e 5355 4244 4956 5f56 4552 ::OPENSUBDIV_VER\n+0001cbf0: 5349 4f4e 3a3a 5364 633a 3a43 7265 6173 SION::Sdc::Creas\n+0001cc00: 653a 3a43 6f6d 7075 7465 4672 6163 7469 e::ComputeFracti\n+0001cc10: 6f6e 616c 5765 6967 6874 4174 5665 7274 onalWeightAtVert\n+0001cc20: 6578 3c2f 613e 3c2f 6469 763e 3c64 6976 ex
    \n+0001cc40: 666c 6f61 7420 436f 6d70 7574 6546 7261 float ComputeFra\n+0001cc50: 6374 696f 6e61 6c57 6569 6768 7441 7456 ctionalWeightAtV\n+0001cc60: 6572 7465 7828 666c 6f61 7420 7665 7274 ertex(float vert\n+0001cc70: 6578 5368 6172 706e 6573 732c 2066 6c6f exSharpness, flo\n+0001cc80: 6174 2063 6869 6c64 5665 7274 6578 5368 at childVertexSh\n+0001cc90: 6172 706e 6573 732c 2069 6e74 2069 6e63 arpness, int inc\n+0001cca0: 6964 656e 7445 6467 6543 6f75 6e74 2c20 identEdgeCount, \n+0001ccb0: 666c 6f61 7420 636f 6e73 7420 2a69 6e63 float const *inc\n+0001ccc0: 6964 656e 7445 6467 6553 6861 7270 6e65 identEdgeSharpne\n+0001ccd0: 7373 2c20 666c 6f61 7420 636f 6e73 7420 ss, float const \n+0001cce0: 2a63 6869 6c64 4564 6765 7353 6861 7270 *childEdgesSharp\n+0001ccf0: 6e65 7373 2920 636f 6e73 743c 2f64 6976 ness) const
    Transitional\n+0001cd20: 2077 6569 6768 7469 6e67 3a20 5768 656e weighting: When\n+0001cd30: 2074 6865 2072 756c 6573 2061 7070 6c69 the rules appli\n+0001cd40: 6361 626c 6520 746f 2061 2070 6172 656e cable to a paren\n+0001cd50: 7420 7665 7274 6578 2061 6e64 2069 7473 t vertex and its\n+0001cd60: 2063 6869 6c64 2064 6966 6665 722c 2e2e child differ,..\n+0001cd70: 2e3c 2f64 6976 3e3c 2f64 6976 3e0a 3c64 .
    .
    OpenS\n+0001cdd0: 7562 6469 763a 3a4f 5045 4e53 5542 4449 ubdiv::OPENSUBDI\n+0001cde0: 565f 5645 5253 494f 4e3a 3a53 6463 3a3a V_VERSION::Sdc::\n+0001cdf0: 4f70 7469 6f6e 733c 2f61 3e3c 2f64 6976 Options
    All supporte\n+0001ce20: 6420 6f70 7469 6f6e 7320 6170 706c 7969 d options applyi\n+0001ce30: 6e67 2074 6f20 7375 6264 6976 6973 696f ng to subdivisio\n+0001ce40: 6e20 7363 6865 6d65 2e3c 2f64 6976 3e3c n scheme.
    <\n+0001ce50: 6469 7620 636c 6173 733d 2274 7464 6566 div class=\"ttdef\n+0001ce60: 223e 3c62 3e44 6566 696e 6974 696f 6e3c \">Definition<\n+0001ce70: 2f62 3e20 3c61 2068 7265 663d 2261 3030 /b> options.\n+0001cea0: 683a 3531 3c2f 613e 3c2f 6469 763e 3c2f h:51
    ..\n+0001d110: 766f 6964 2061 7373 6967 6e53 6d6f 6f74 void assignSmoot\n+0001d120: 684d 6173 6b46 6f72 4564 6765 2845 4447 hMaskForEdge(EDG\n+0001d130: 4520 636f 6e73 7420 2661 6d70 3b65 6467 E const &edg\n+0001d140: 652c 204d 4153 4b20 2661 6d70 3b6d 6173 e, MASK &mas\n+0001d150: 6b29 2063 6f6e 7374 3c2f 6469 763e 3c2f k) const
    .
    OpenSubdiv\n+0001d200: 3a3a 4f50 454e 5355 4244 4956 5f56 4552 ::OPENSUBDIV_VER\n+0001d210: 5349 4f4e 3a3a 5364 633a 3a53 6368 656d SION::Sdc::Schem\n+0001d220: 653a 3a47 6574 546f 706f 6c6f 6769 6361 e::GetTopologica\n+0001d230: 6c53 706c 6974 5479 7065 3c2f 613e 3c2f lSplitType
    static S\n+0001d260: 706c 6974 2047 6574 546f 706f 6c6f 6769 plit GetTopologi\n+0001d270: 6361 6c53 706c 6974 5479 7065 2829 3c2f calSplitType()
    .
    \n+0001d2d0: 3c64 6976 2063 6c61 7373 3d22 7474 6e61 \n+0001d380: 766f 6964 2061 7373 6967 6e43 7265 6173 void assignCreas\n+0001d390: 654d 6173 6b46 6f72 5665 7274 6578 2856 eMaskForVertex(V\n+0001d3a0: 4552 5445 5820 636f 6e73 7420 2661 6d70 ERTEX const &\n+0001d3b0: 3b65 6467 652c 204d 4153 4b20 2661 6d70 ;edge, MASK &\n+0001d3c0: 3b6d 6173 6b2c 2069 6e74 2063 6f6e 7374 ;mask, int const\n+0001d3d0: 2063 7265 6173 6545 6e64 735b 325d 2920 creaseEnds[2]) \n+0001d3e0: 636f 6e73 743c 2f64 6976 3e3c 2f64 6976 const
    .
    OpenSubdiv::O\n+0001d490: 5045 4e53 5542 4449 565f 5645 5253 494f PENSUBDIV_VERSIO\n+0001d4a0: 4e3a 3a53 6463 3a3a 5363 6865 6d65 3a3a N::Sdc::Scheme::\n+0001d4b0: 436f 6d70 7574 6556 6572 7465 7856 6572 ComputeVertexVer\n+0001d4c0: 7465 784d 6173 6b3c 2f61 3e3c 2f64 6976 texMask
    void Comput\n+0001d4f0: 6556 6572 7465 7856 6572 7465 784d 6173 eVertexVertexMas\n+0001d500: 6b28 5645 5254 4558 2063 6f6e 7374 2026 k(VERTEX const &\n+0001d510: 616d 703b 7665 7274 6578 4e65 6967 6862 amp;vertexNeighb\n+0001d520: 6f72 686f 6f64 2c20 4d41 534b 2026 616d orhood, MASK &am\n+0001d530: 703b 7665 7274 6578 5665 7274 6578 4d61 p;vertexVertexMa\n+0001d540: 736b 2c20 4372 6561 7365 3a3a 5275 6c65 sk, Crease::Rule\n+0001d550: 2070 6172 656e 7452 756c 653d 4372 6561 parentRule=Crea\n+0001d560: 7365 3a3a 5255 4c45 5f55 4e4b 4e4f 574e se::RULE_UNKNOWN\n+0001d570: 2c20 4372 6561 7365 3a3a 5275 6c65 2063 , Crease::Rule c\n+0001d580: 6869 6c64 5275 6c65 3d43 7265 6173 653a hildRule=Crease:\n+0001d590: 3a52 554c 455f 554e 4b4e 4f57 4e29 2063 :RULE_UNKNOWN) c\n+0001d5a0: 6f6e 7374 3c2f 6469 763e 3c64 6976 2063 onst
    Ver\n+0001d5c0: 7465 782d 7665 7274 6578 206d 6173 6b73 tex-vertex masks\n+0001d5d0: 2049 6620 6b6e 6f77 6e2c 2061 2073 696e If known, a sin\n+0001d5e0: 676c 6520 5275 6c65 206f 7220 7061 6972 gle Rule or pair\n+0001d5f0: 206f 6620 5275 6c65 7320 6361 6e20 6265 of Rules can be\n+0001d600: 2073 7065 6369 6669 6564 2028 696e 6469 specified (indi\n+0001d610: 6361 7469 6e67 2061 2063 7265 6173 6520 cating a crease \n+0001d620: 7472 2e2e 2e3c 2f64 6976 3e3c 6469 7620 tr...
    Definition \n+0001d650: 3c61 2068 7265 663d 2261 3030 3737 335f scheme.h:512\n+0001d680: 3c2f 613e 3c2f 6469 763e 3c2f 6469 763e
    \n+0001d690: 0a3c 6469 7620 636c 6173 733d 2274 7463 .
    <\n+0001d770: 6469 7620 636c 6173 733d 2274 7464 6563 div class=\"ttdec\n+0001d780: 6922 3e76 6f69 6420 436f 6d70 7574 6556 i\">void ComputeV\n+0001d790: 6572 7465 784c 696d 6974 4d61 736b 2856 ertexLimitMask(V\n+0001d7a0: 4552 5445 5820 636f 6e73 7420 2661 6d70 ERTEX const &\n+0001d7b0: 3b76 6572 7465 784e 6569 6768 626f 7268 ;vertexNeighborh\n+0001d7c0: 6f6f 642c 204d 4153 4b20 2661 6d70 3b70 ood, MASK &p\n+0001d7d0: 6f73 6974 696f 6e4d 6173 6b2c 2043 7265 ositionMask, Cre\n+0001d7e0: 6173 653a 3a52 756c 6520 7665 7274 6578 ase::Rule vertex\n+0001d7f0: 5275 6c65 2920 636f 6e73 743c 2f64 6976 Rule) const
    Limit masks \n+0001d820: 666f 7220 7665 7274 6963 6573 20e2 8093 for vertices ...\n+0001d830: 2070 6f73 6974 696f 6e20 616e 6420 7461 position and ta\n+0001d840: 6e67 656e 7473 2054 6865 7365 2070 7265 ngents These pre\n+0001d850: 7375 6d65 2074 6861 7420 6120 7665 7274 sume that a vert\n+0001d860: 6578 2069 7320 7375 6974 6162 6c79 2069 ex is suitably i\n+0001d870: 736f 6c61 7465 6420 666f 722e 2e2e 3c2f solated for...
    Defini\n+0001d8a0: 7469 6f6e 3c2f 623e 203c 6120 6872 6566 tion sch\n+0001d8d0: 656d 652e 683a 3630 373c 2f61 3e3c 2f64 eme.h:607
    .<\n+0001d9d0: 6469 7620 636c 6173 733d 2274 7464 6563 div class=\"ttdec\n+0001d9e0: 6922 3e76 6f69 6420 6173 7369 676e 4372 i\">void assignCr\n+0001d9f0: 6561 7365 4c69 6d69 7454 616e 6765 6e74 easeLimitTangent\n+0001da00: 4d61 736b 7328 5645 5254 4558 2063 6f6e Masks(VERTEX con\n+0001da10: 7374 2026 616d 703b 7665 7274 6578 2c20 st &vertex, \n+0001da20: 4d41 534b 2026 616d 703b 7461 6e31 2c20 MASK &tan1, \n+0001da30: 4d41 534b 2026 616d 703b 7461 6e32 2c20 MASK &tan2, \n+0001da40: 696e 7420 636f 6e73 7420 6372 6561 7365 int const crease\n+0001da50: 456e 6473 5b32 5d29 2063 6f6e 7374 3c2f Ends[2]) const
    .
    \n+0001dab0: 3c64 6976 2063 6c61 7373 3d22 7474 6e61
    Open\n+0001db00: 5375 6264 6976 3a3a 4f50 454e 5355 4244 Subdiv::OPENSUBD\n+0001db10: 4956 5f56 4552 5349 4f4e 3a3a 5364 633a IV_VERSION::Sdc:\n+0001db20: 3a53 6368 656d 653a 3a47 6574 5265 6775 :Scheme::GetRegu\n+0001db30: 6c61 7246 6163 6553 697a 653c 2f61 3e3c larFaceSize<\n+0001db40: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
    static \n+0001db60: 696e 7420 4765 7452 6567 756c 6172 4661 int GetRegularFa\n+0001db70: 6365 5369 7a65 2829 3c2f 6469 763e 3c2f ceSize()
    .
    OpenSubdiv\n+0001dc20: 3a3a 4f50 454e 5355 4244 4956 5f56 4552 ::OPENSUBDIV_VER\n+0001dc30: 5349 4f4e 3a3a 5364 633a 3a53 6368 656d SION::Sdc::Schem\n+0001dc40: 653a 3a61 7373 6967 6e43 7265 6173 654d e::assignCreaseM\n+0001dc50: 6173 6b46 6f72 4564 6765 3c2f 613e 3c2f askForEdge
    void ass\n+0001dc80: 6967 6e43 7265 6173 654d 6173 6b46 6f72 ignCreaseMaskFor\n+0001dc90: 4564 6765 2845 4447 4520 636f 6e73 7420 Edge(EDGE const \n+0001dca0: 2661 6d70 3b65 6467 652c 204d 4153 4b20 &edge, MASK \n+0001dcb0: 2661 6d70 3b6d 6173 6b29 2063 6f6e 7374 &mask) const\n+0001dcc0: 3c2f 6469 763e 3c64 6976 2063 6c61 7373
    Defi\n+0001dce0: 6e69 7469 6f6e 3c2f 623e 203c 6120 6872 nition s\n+0001dd10: 6368 656d 652e 683a 3331 373c 2f61 3e3c cheme.h:317<\n+0001dd20: 2f64 6976 3e3c 2f64 6976 3e0a 3c64 6976 /div>
    .
    voi\n+0001de20: 6420 436f 6d70 7574 6545 6467 6556 6572 d ComputeEdgeVer\n+0001de30: 7465 784d 6173 6b28 4544 4745 2063 6f6e texMask(EDGE con\n+0001de40: 7374 2026 616d 703b 6564 6765 4e65 6967 st &edgeNeig\n+0001de50: 6862 6f72 686f 6f64 2c20 4d41 534b 2026 hborhood, MASK &\n+0001de60: 616d 703b 6564 6765 5665 7274 6578 4d61 amp;edgeVertexMa\n+0001de70: 736b 2c20 4372 6561 7365 3a3a 5275 6c65 sk, Crease::Rule\n+0001de80: 2070 6172 656e 7452 756c 653d 4372 6561 parentRule=Crea\n+0001de90: 7365 3a3a 5255 4c45 5f55 4e4b 4e4f 574e se::RULE_UNKNOWN\n+0001dea0: 2c20 4372 6561 7365 3a3a 5275 6c65 2063 , Crease::Rule c\n+0001deb0: 6869 6c64 5275 6c65 3d43 7265 6173 653a hildRule=Crease:\n+0001dec0: 3a52 554c 455f 554e 4b4e 4f57 4e29 2063 :RULE_UNKNOWN) c\n+0001ded0: 6f6e 7374 3c2f 6469 763e 3c64 6976 2063 onst
    \n+0001dfc0: 0a3c 6469 7620 636c 6173 733d 2274 7463 .
    <\n+0001e090: 6469 7620 636c 6173 733d 2274 7464 6563 div class=\"ttdec\n+0001e0a0: 6922 3e53 6368 656d 6528 293c 2f64 6976 i\">Scheme()
    Definitio\n+0001e0d0: 6e3c 2f62 3e20 3c61 2068 7265 663d 2261 n scheme\n+0001e100: 2e68 3a37 303c 2f61 3e3c 2f64 6976 3e3c .h:70
    <\n+0001e110: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    <\n+0001e170: 6120 6872 6566 3d22 6130 3133 3333 2e68 a href=\"a01333.h\n+0001e180: 746d 6c23 6137 3336 6331 3039 3434 6362 tml#a736c10944cb\n+0001e190: 3932 3162 3333 3466 6264 3862 3831 3836 921b334fbd8b8186\n+0001e1a0: 3664 3539 6622 3e4f 7065 6e53 7562 6469 6d59f\">OpenSubdi\n+0001e1b0: 763a 3a4f 5045 4e53 5542 4449 565f 5645 v::OPENSUBDIV_VE\n+0001e1c0: 5253 494f 4e3a 3a53 6463 3a3a 5363 6865 RSION::Sdc::Sche\n+0001e1d0: 6d65 3a3a 6173 7369 676e 536d 6f6f 7468 me::assignSmooth\n+0001e1e0: 4c69 6d69 744d 6173 6b3c 2f61 3e3c 2f64 LimitMask
    void assi\n+0001e210: 676e 536d 6f6f 7468 4c69 6d69 744d 6173 gnSmoothLimitMas\n+0001e220: 6b28 5645 5254 4558 2063 6f6e 7374 2026 k(VERTEX const &\n+0001e230: 616d 703b 7665 7274 6578 2c20 4d41 534b amp;vertex, MASK\n+0001e240: 2026 616d 703b 706f 7329 2063 6f6e 7374 &pos) const\n+0001e250: 3c2f 6469 763e 3c2f 6469 763e 0a3c 6469
    .static int GetL\n+0001e360: 6f63 616c 4e65 6967 6862 6f72 686f 6f64 ocalNeighborhood\n+0001e370: 5369 7a65 2829 3c2f 6469 763e 3c2f 6469 Size()
    .
    OpenSubdiv::\n+0001e420: 4f50 454e 5355 4244 4956 5f56 4552 5349 OPENSUBDIV_VERSI\n+0001e430: 4f4e 3a3a 5364 633a 3a53 6368 656d 653a ON::Sdc::Scheme:\n+0001e440: 3a61 7373 6967 6e43 6f72 6e65 724d 6173 :assignCornerMas\n+0001e450: 6b46 6f72 5665 7274 6578 3c2f 613e 3c2f kForVertex
    void ass\n+0001e480: 6967 6e43 6f72 6e65 724d 6173 6b46 6f72 ignCornerMaskFor\n+0001e490: 5665 7274 6578 2856 4552 5445 5820 636f Vertex(VERTEX co\n+0001e4a0: 6e73 7420 2661 6d70 3b65 6467 652c 204d nst &edge, M\n+0001e4b0: 4153 4b20 2661 6d70 3b6d 6173 6b29 2063 ASK &mask) c\n+0001e4c0: 6f6e 7374 3c2f 6469 763e 3c64 6976 2063 onst
    \n+0001e4e0: 4465 6669 6e69 7469 6f6e 3c2f 623e 203c Definition <\n+0001e4f0: 6120 6872 6566 3d22 6130 3037 3733 5f73 a href=\"a00773_s\n+0001e500: 6f75 7263 652e 6874 6d6c 236c 3030 3333 ource.html#l0033\n+0001e510: 3122 3e73 6368 656d 652e 683a 3333 313c 1\">scheme.h:331<\n+0001e520: 2f61 3e3c 2f64 6976 3e3c 2f64 6976 3e0a /a>
    .\n+0001e530: 3c64 6976 2063 6c61 7373 3d22 7474 6322
    void assignCrea\n+0001e630: 7365 4c69 6d69 744d 6173 6b28 5645 5254 seLimitMask(VERT\n+0001e640: 4558 2063 6f6e 7374 2026 616d 703b 7665 EX const &ve\n+0001e650: 7274 6578 2c20 4d41 534b 2026 616d 703b rtex, MASK &\n+0001e660: 706f 732c 2069 6e74 2063 6f6e 7374 2063 pos, int const c\n+0001e670: 7265 6173 6545 6e64 735b 325d 2920 636f reaseEnds[2]) co\n+0001e680: 6e73 743c 2f64 6976 3e3c 2f64 6976 3e0a nst
    .\n+0001e690: 3c64 6976 2063 6c61 7373 3d22 7474 6322
    OpenSubdiv::OPE\n+0001e730: 4e53 5542 4449 565f 5645 5253 494f 4e3a NSUBDIV_VERSION:\n+0001e740: 3a53 6463 3a3a 5363 6865 6d65 3a3a 6173 :Sdc::Scheme::as\n+0001e750: 7369 676e 536d 6f6f 7468 4d61 736b 466f signSmoothMaskFo\n+0001e760: 7256 6572 7465 783c 2f61 3e3c 2f64 6976 rVertex
    void assign\n+0001e790: 536d 6f6f 7468 4d61 736b 466f 7256 6572 SmoothMaskForVer\n+0001e7a0: 7465 7828 5645 5254 4558 2063 6f6e 7374 tex(VERTEX const\n+0001e7b0: 2026 616d 703b 6564 6765 2c20 4d41 534b &edge, MASK\n+0001e7c0: 2026 616d 703b 6d61 736b 2920 636f 6e73 &mask) cons\n+0001e7d0: 743c 2f64 6976 3e3c 2f64 6976 3e0a 3c64 t
    .static int GetR\n+0001e8e0: 6567 756c 6172 5665 7274 6578 5661 6c65 egularVertexVale\n+0001e8f0: 6e63 6528 293c 2f64 6976 3e3c 2f64 6976 nce()
    .
    OpenSubdiv::O\n+0001e9a0: 5045 4e53 5542 4449 565f 5645 5253 494f PENSUBDIV_VERSIO\n+0001e9b0: 4e3a 3a53 6463 3a3a 5363 6865 6d65 3a3a N::Sdc::Scheme::\n+0001e9c0: 4765 744f 7074 696f 6e73 3c2f 613e 3c2f GetOptions
    Options \n+0001e9f0: 4765 744f 7074 696f 6e73 2829 2063 6f6e GetOptions() con\n+0001ea00: 7374 3c2f 6469 763e 3c64 6976 2063 6c61 st
    De\n+0001ea20: 6669 6e69 7469 6f6e 3c2f 623e 203c 6120 finition scheme.h:74\n+0001ea60: 3c2f 6469 763e 3c2f 6469 763e 0a3c 6469
    .
    Op\n+0001eb00: 656e 5375 6264 6976 3a3a 4f50 454e 5355 enSubdiv::OPENSU\n+0001eb10: 4244 4956 5f56 4552 5349 4f4e 3a3a 5364 BDIV_VERSION::Sd\n+0001eb20: 633a 3a53 6368 656d 653a 3a61 7373 6967 c::Scheme::assig\n+0001eb30: 6e53 6d6f 6f74 684c 696d 6974 5461 6e67 nSmoothLimitTang\n+0001eb40: 656e 744d 6173 6b73 3c2f 613e 3c2f 6469 entMasks
    void assig\n+0001eb70: 6e53 6d6f 6f74 684c 696d 6974 5461 6e67 nSmoothLimitTang\n+0001eb80: 656e 744d 6173 6b73 2856 4552 5445 5820 entMasks(VERTEX \n+0001eb90: 636f 6e73 7420 2661 6d70 3b76 6572 7465 const &verte\n+0001eba0: 782c 204d 4153 4b20 2661 6d70 3b74 616e x, MASK &tan\n+0001ebb0: 312c 204d 4153 4b20 2661 6d70 3b74 616e 1, MASK &tan\n+0001ebc0: 3229 2063 6f6e 7374 3c2f 6469 763e 3c2f 2) const
    .
    OpenSubdiv\n+0001ec70: 3a3a 4f50 454e 5355 4244 4956 5f56 4552 ::OPENSUBDIV_VER\n+0001ec80: 5349 4f4e 3a3a 5364 633a 3a53 6368 656d SION::Sdc::Schem\n+0001ec90: 653a 3a61 7373 6967 6e43 6f72 6e65 724c e::assignCornerL\n+0001eca0: 696d 6974 4d61 736b 3c2f 613e 3c2f 6469 imitMask
    void assig\n+0001ecd0: 6e43 6f72 6e65 724c 696d 6974 4d61 736b nCornerLimitMask\n+0001ece0: 2856 4552 5445 5820 636f 6e73 7420 2661 (VERTEX const &a\n+0001ecf0: 6d70 3b76 6572 7465 782c 204d 4153 4b20 mp;vertex, MASK \n+0001ed00: 2661 6d70 3b70 6f73 2920 636f 6e73 743c &pos) const<\n+0001ed10: 2f64 6976 3e3c 2f64 6976 3e0a 3c64 6976 /div>
    .
    Sc\n+0001ee00: 6865 6d65 284f 7074 696f 6e73 2063 6f6e heme(Options con\n+0001ee10: 7374 2026 616d 703b 6f70 7469 6f6e 7329 st &options)\n+0001ee20: 3c2f 6469 763e 3c64 6976 2063 6c61 7373
    Defi\n+0001ee40: 6e69 7469 6f6e 3c2f 623e 203c 6120 6872 nition s\n+0001ee70: 6368 656d 652e 683a 3732 3c2f 613e 3c2f cheme.h:72
    .
    \n+0001f090: 0a3c 6469 7620 636c 6173 733d 2274 7463 .
    void a\n+0001f190: 7373 6967 6e43 6f72 6e65 724c 696d 6974 ssignCornerLimit\n+0001f1a0: 5461 6e67 656e 744d 6173 6b73 2856 4552 TangentMasks(VER\n+0001f1b0: 5445 5820 636f 6e73 7420 2661 6d70 3b76 TEX const &v\n+0001f1c0: 6572 7465 782c 204d 4153 4b20 2661 6d70 ertex, MASK &\n+0001f1d0: 3b74 616e 312c 204d 4153 4b20 2661 6d70 ;tan1, MASK &\n+0001f1e0: 3b74 616e 3229 2063 6f6e 7374 3c2f 6469 ;tan2) const
    .
    v\n+0001f2e0: 6f69 6420 5365 744f 7074 696f 6e73 2863 oid SetOptions(c\n+0001f2f0: 6f6e 7374 204f 7074 696f 6e73 2026 616d onst Options &am\n+0001f300: 703b 6e65 774f 7074 696f 6e73 293c 2f64 p;newOptions)
    Definit\n+0001f330: 696f 6e3c 2f62 3e20 3c61 2068 7265 663d ion sche\n+0001f360: 6d65 2e68 3a37 353c 2f61 3e3c 2f64 6976 me.h:75
    .
    <\n+0001f3b0: 6120 6872 6566 3d22 6130 3133 3337 2e68 a href=\"a01337.h\n+0001f3c0: 746d 6c22 3e4f 7065 6e53 7562 6469 763a tml\">OpenSubdiv:\n+0001f3d0: 3a4f 5045 4e53 5542 4449 565f 5645 5253 :OPENSUBDIV_VERS\n+0001f3e0: 494f 4e3a 3a53 6463 3a3a 5363 6865 6d65 ION::Sdc::Scheme\n+0001f3f0: 3a3a 4c6f 6361 6c4d 6173 6b3c 2f61 3e3c ::LocalMask<\n+0001f400: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
    Defin\n+0001f420: 6974 696f 6e3c 2f62 3e20 3c61 2068 7265 ition sc\n+0001f450: 6865 6d65 2e68 3a32 3039 3c2f 613e 3c2f heme.h:209
    .
    \n+0001f4b0: 3c64 6976 2063 6c61 7373 3d22 7474 6e61 \n+0001f5d0: 0a3c 6469 7620 636c 6173 733d 2274 7463 ..
    W\n+0001f9e0: 6569 6768 7420 636f 6e73 7420 2661 6d70 eight const &\n+0001f9f0: 3b20 4564 6765 5765 6967 6874 2869 6e74 ; EdgeWeight(int\n+0001fa00: 2069 6e64 6578 2920 636f 6e73 743c 2f64 index) const
    Definit\n+0001fa30: 696f 6e3c 2f62 3e20 3c61 2068 7265 663d ion sche\n+0001fa60: 6d65 2e68 3a32 3332 3c2f 613e 3c2f 6469 me.h:232
    .
    Weight\n+0001fb70: 2026 616d 703b 2045 6467 6557 6569 6768 & EdgeWeigh\n+0001fb80: 7428 696e 7420 696e 6465 7829 3c2f 6469 t(int index)
    Definiti\n+0001fbb0: 6f6e 3c2f 623e 203c 6120 6872 6566 3d22 on schem\n+0001fbe0: 652e 683a 3233 363c 2f61 3e3c 2f64 6976 e.h:236
    .
    OpenSub\n+0001fc90: 6469 763a 3a4f 5045 4e53 5542 4449 565f div::OPENSUBDIV_\n+0001fca0: 5645 5253 494f 4e3a 3a53 6463 3a3a 5363 VERSION::Sdc::Sc\n+0001fcb0: 6865 6d65 3a3a 4c6f 6361 6c4d 6173 6b3a heme::LocalMask:\n+0001fcc0: 3a43 6f6d 6269 6e65 5665 7274 6578 5665 :CombineVertexVe\n+0001fcd0: 7274 6578 4d61 736b 733c 2f61 3e3c 2f64 rtexMasks
    void Comb\n+0001fd00: 696e 6556 6572 7465 7856 6572 7465 784d ineVertexVertexM\n+0001fd10: 6173 6b73 2857 6569 6768 7420 7468 6973 asks(Weight this\n+0001fd20: 436f 6566 662c 2057 6569 6768 7420 6473 Coeff, Weight ds\n+0001fd30: 7443 6f65 6666 2c20 5553 4552 5f4d 4153 tCoeff, USER_MAS\n+0001fd40: 4b20 2661 6d70 3b64 7374 2920 636f 6e73 K &dst) cons\n+0001fd50: 743c 2f64 6976 3e3c 6469 7620 636c 6173 t
    Def\n+0001fd70: 696e 6974 696f 6e3c 2f62 3e20 3c61 2068 inition \n+0001fda0: 7363 6865 6d65 2e68 3a32 3439 3c2f 613e scheme.h:249\n+0001fdb0: 3c2f 6469 763e 3c2f 6469 763e 0a3c 6469
    ..
    void S\n+00020040: 6574 4e75 6d46 6163 6557 6569 6768 7473 etNumFaceWeights\n+00020050: 2869 6e74 2063 6f75 6e74 293c 2f64 6976 (int count)
    Definitio\n+00020080: 6e3c 2f62 3e20 3c61 2068 7265 663d 2261 n scheme\n+000200b0: 2e68 3a32 3239 3c2f 613e 3c2f 6469 763e .h:229
    \n+000200c0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    \n+00020120: 3c61 2068 7265 663d 2261 3031 3333 372e OpenSubd\n+00020160: 6976 3a3a 4f50 454e 5355 4244 4956 5f56 iv::OPENSUBDIV_V\n+00020170: 4552 5349 4f4e 3a3a 5364 633a 3a53 6368 ERSION::Sdc::Sch\n+00020180: 656d 653a 3a4c 6f63 616c 4d61 736b 3a3a eme::LocalMask::\n+00020190: 4661 6365 5765 6967 6874 3c2f 613e 3c2f FaceWeight
    Weight c\n+000201c0: 6f6e 7374 2026 616d 703b 2046 6163 6557 onst & FaceW\n+000201d0: 6569 6768 7428 696e 7420 696e 6465 7829 eight(int index)\n+000201e0: 2063 6f6e 7374 3c2f 6469 763e 3c64 6976 const
    <\n+00020200: 623e 4465 6669 6e69 7469 6f6e 3c2f 623e b>Definition\n+00020210: 203c 6120 6872 6566 3d22 6130 3037 3733 scheme.h:23\n+00020240: 333c 2f61 3e3c 2f64 6976 3e3c 2f64 6976 3
    .
    int Ge\n+00020350: 744e 756d 4564 6765 5765 6967 6874 7328 tNumEdgeWeights(\n+00020360: 2920 636f 6e73 743c 2f64 6976 3e3c 6469 ) const
    \n+00020380: 3c62 3e44 6566 696e 6974 696f 6e3c 2f62 Definition scheme.h:2\n+000203c0: 3234 3c2f 613e 3c2f 6469 763e 3c2f 6469 24
    .
    OpenSubdiv::\n+00020470: 4f50 454e 5355 4244 4956 5f56 4552 5349 OPENSUBDIV_VERSI\n+00020480: 4f4e 3a3a 5364 633a 3a53 6368 656d 653a ON::Sdc::Scheme:\n+00020490: 3a4c 6f63 616c 4d61 736b 3a3a 5665 7274 :LocalMask::Vert\n+000204a0: 6578 5765 6967 6874 3c2f 613e 3c2f 6469 exWeight
    Weight &am\n+000204d0: 703b 2056 6572 7465 7857 6569 6768 7428 p; VertexWeight(\n+000204e0: 696e 7420 696e 6465 7829 3c2f 6469 763e int index)
    \n+000204f0: 3c64 6976 2063 6c61 7373 3d22 7474 6465
    Definition\n+00020510: 3c2f 623e 203c 6120 6872 6566 3d22 6130 scheme.\n+00020540: 683a 3233 353c 2f61 3e3c 2f64 6976 3e3c h:235
    <\n+00020550: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    <\n+000205b0: 6120 6872 6566 3d22 6130 3133 3337 2e68 a href=\"a01337.h\n+000205c0: 746d 6c23 6139 3366 3537 6535 3333 3733 tml#a93f57e53373\n+000205d0: 3931 6332 3064 3436 6465 6664 6233 6161 91c20d46defdb3aa\n+000205e0: 3263 3166 6522 3e4f 7065 6e53 7562 6469 2c1fe\">OpenSubdi\n+000205f0: 763a 3a4f 5045 4e53 5542 4449 565f 5645 v::OPENSUBDIV_VE\n+00020600: 5253 494f 4e3a 3a53 6463 3a3a 5363 6865 RSION::Sdc::Sche\n+00020610: 6d65 3a3a 4c6f 6361 6c4d 6173 6b3a 3a47 me::LocalMask::G\n+00020620: 6574 4e75 6d46 6163 6557 6569 6768 7473 etNumFaceWeights\n+00020630: 3c2f 613e 3c2f 6469 763e 3c64 6976 2063
    in\n+00020650: 7420 4765 744e 756d 4661 6365 5765 6967 t GetNumFaceWeig\n+00020660: 6874 7328 2920 636f 6e73 743c 2f64 6976 hts() const
    Definitio\n+00020690: 6e3c 2f62 3e20 3c61 2068 7265 663d 2261 n scheme\n+000206c0: 2e68 3a32 3235 3c2f 613e 3c2f 6469 763e .h:225
    \n+000206d0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    void S\n+000207e0: 6574 4661 6365 5765 6967 6874 7346 6f72 etFaceWeightsFor\n+000207f0: 4661 6365 4365 6e74 6572 7328 626f 6f6c FaceCenters(bool\n+00020800: 206f 6e29 3c2f 6469 763e 3c64 6976 2063 on)
    \n+00020820: 4465 6669 6e69 7469 6f6e 3c2f 623e 203c Definition <\n+00020830: 6120 6872 6566 3d22 6130 3037 3733 5f73 a href=\"a00773_s\n+00020840: 6f75 7263 652e 6874 6d6c 236c 3030 3234 ource.html#l0024\n+00020850: 3022 3e73 6368 656d 652e 683a 3234 303c 0\">scheme.h:240<\n+00020860: 2f61 3e3c 2f64 6976 3e3c 2f64 6976 3e0a /a>
    .\n+00020870: 3c64 6976 2063 6c61 7373 3d22 7474 6322
    void S\n+00020970: 6574 4e75 6d56 6572 7465 7857 6569 6768 etNumVertexWeigh\n+00020980: 7473 2869 6e74 2063 6f75 6e74 293c 2f64 ts(int count)
    Definit\n+000209b0: 696f 6e3c 2f62 3e20 3c61 2068 7265 663d ion sche\n+000209e0: 6d65 2e68 3a32 3237 3c2f 613e 3c2f 6469 me.h:227
    .
    OpenSu\n+00020a90: 6264 6976 3a3a 4f50 454e 5355 4244 4956 bdiv::OPENSUBDIV\n+00020aa0: 5f56 4552 5349 4f4e 3a3a 5364 633a 3a53 _VERSION::Sdc::S\n+00020ab0: 6368 656d 653a 3a4c 6f63 616c 4d61 736b cheme::LocalMask\n+00020ac0: 3a3a 4c6f 6361 6c4d 6173 6b3c 2f61 3e3c ::LocalMask<\n+00020ad0: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
    LocalMa\n+00020af0: 736b 2857 6569 6768 7420 2a76 2c20 5765 sk(Weight *v, We\n+00020b00: 6967 6874 202a 652c 2057 6569 6768 7420 ight *e, Weight \n+00020b10: 2a66 293c 2f64 6976 3e3c 6469 7620 636c *f)
    D\n+00020b30: 6566 696e 6974 696f 6e3c 2f62 3e20 3c61 efinition scheme.h:215
    .<\n+00020b80: 6469 7620 636c 6173 733d 2274 7463 2220 div class=\"ttc\" \n+00020b90: 6964 3d22 6161 3031 3333 375f 6874 6d6c id=\"aa01337_html\n+00020ba0: 5f61 6563 3563 3261 6266 6466 6264 6534 _aec5c2abfdfbde4\n+00020bb0: 6464 3933 3463 3036 3136 3235 3939 3437 dd934c0616259947\n+00020bc0: 3931 223e 3c64 6976 2063 6c61 7373 3d22 91\">Weight const &\n+00020c80: 616d 703b 2056 6572 7465 7857 6569 6768 amp; VertexWeigh\n+00020c90: 7428 696e 7420 696e 6465 7829 2063 6f6e t(int index) con\n+00020ca0: 7374 3c2f 6469 763e 3c64 6976 2063 6c61 st
    De\n+00020cc0: 6669 6e69 7469 6f6e 3c2f 623e 203c 6120 finition scheme.h:231
    .
    W\n+00020e00: 6569 6768 7420 2661 6d70 3b20 4661 6365 eight & Face\n+00020e10: 5765 6967 6874 2869 6e74 2069 6e64 6578 Weight(int index\n+00020e20: 293c 2f64 6976 3e3c 6469 7620 636c 6173 )
    Def\n+00020e40: 696e 6974 696f 6e3c 2f62 3e20 3c61 2068 inition \n+00020e70: 7363 6865 6d65 2e68 3a32 3337 3c2f 613e scheme.h:237\n+00020e80: 3c2f 6469 763e 3c2f 6469 763e 0a3c 6469
    .
    ~L\n+00020f80: 6f63 616c 4d61 736b 2829 3c2f 6469 763e ocalMask()
    \n+00020f90: 3c64 6976 2063 6c61 7373 3d22 7474 6465
    Definition\n+00020fb0: 3c2f 623e 203c 6120 6872 6566 3d22 6130 scheme.\n+00020fe0: 683a 3231 363c 2f61 3e3c 2f64 6976 3e3c h:216
    <\n+00020ff0: 2f64 6976 3e0a 3c2f 6469 763e 3c21 2d2d /div>.
    .
    .\n+00021040: 3c21 2d2d 2073 7461 7274 2066 6f6f 7465 .
    . .
  • opensub\n+00021110: 6469 763c 2f61 3e3c 2f6c 693e 3c6c 6920 div
  • \n+00021130: 3c61 2063 6c61 7373 3d22 656c 2220 6872 s\n+00021170: 6463 3c2f 613e 3c2f 6c69 3e3c 6c69 2063 dc
  • <\n+00021190: 6120 636c 6173 733d 2265 6c22 2068 7265 a class=\"el\" hre\n+000211a0: 663d 2261 3030 3737 332e 6874 6d6c 223e f=\"a00773.html\">\n+000211b0: 7363 6865 6d65 2e68 3c2f 613e 3c2f 6c69 scheme.h.
  • Generat\n+000211e0: 6564 206f 6e20 5468 7520 4665 6220 3239 ed on Thu Feb 29\n+000211f0: 2032 3032 3420 3132 3a35 383a 3139 2066 2024 12:58:19 f\n+00021200: 6f72 204f 7065 6e53 7562 6469 7620 6279 or OpenSubdiv by\n+00021210: 203c 6120 6872 6566 3d22 6874 7470 733a \n+00021290: 312e 392e 3820 3c2f 6c69 3e0a 2020 3c2f 1.9.8
  • . .
    ...\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-options.h\n+scheme.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2014 DreamWorks Animation LLC.\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -23,200 +23,847 @@\n 17//\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n-24#ifndef OPENSUBDIV3_SDC_OPTIONS_H\n-25#define OPENSUBDIV3_SDC_OPTIONS_H\n+24#ifndef OPENSUBDIV3_SDC_SCHEME_H\n+25#define OPENSUBDIV3_SDC_SCHEME_H\n 26\n 27#include \"../version.h\"\n 28\n-29namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-30namespace OPENSUBDIV_VERSION {\n-31\n-32namespace Sdc {\n-33\n-50\n-_\b5_\b1class _\bO_\bp_\bt_\bi_\bo_\bn_\bs {\n-52public:\n-_\b5_\b3 enum _\bV_\bt_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn {\n-54 _\bV_\bT_\bX_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY_\b__\bN_\bO_\bN_\bE = 0,\n-_\b5_\b6 _\bV_\bT_\bX_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY_\b__\bE_\bD_\bG_\bE_\b__\bO_\bN_\bL_\bY,\n-57 _\bV_\bT_\bX_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY_\b__\bE_\bD_\bG_\bE_\b__\bA_\bN_\bD_\b__\bC_\bO_\bR_\bN_\bE_\bR\n-_\b5_\b9 };\n-_\b6_\b0 enum _\bF_\bV_\ba_\br_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn {\n-_\b6_\b1 _\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bN_\bO_\bN_\bE = 0,\n-_\b6_\b2 _\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bC_\bO_\bR_\bN_\bE_\bR_\bS_\b__\bO_\bN_\bL_\bY,\n-_\b6_\b3 _\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bC_\bO_\bR_\bN_\bE_\bR_\bS_\b__\bP_\bL_\bU_\bS_\b1,\n-_\b6_\b4 _\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bC_\bO_\bR_\bN_\bE_\bR_\bS_\b__\bP_\bL_\bU_\bS_\b2,\n-_\b6_\b5 _\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bI_\bE_\bS,\n-66 _\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bA_\bL_\bL\n-_\b6_\b7 };\n-_\b6_\b8 enum _\bC_\br_\be_\ba_\bs_\bi_\bn_\bg_\bM_\be_\bt_\bh_\bo_\bd {\n-_\b6_\b9 _\bC_\bR_\bE_\bA_\bS_\bE_\b__\bU_\bN_\bI_\bF_\bO_\bR_\bM = 0,\n-70 _\bC_\bR_\bE_\bA_\bS_\bE_\b__\bC_\bH_\bA_\bI_\bK_\bI_\bN\n-_\b7_\b1 };\n-_\b7_\b2 enum _\bT_\br_\bi_\ba_\bn_\bg_\bl_\be_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bs_\bi_\bo_\bn {\n-_\b7_\b3 _\bT_\bR_\bI_\b__\bS_\bU_\bB_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK = 0,\n-74 _\bT_\bR_\bI_\b__\bS_\bU_\bB_\b__\bS_\bM_\bO_\bO_\bT_\bH\n-_\b7_\b5 };\n+29#include \"../sdc/types.h\"\n+30#include \"../sdc/options.h\"\n+31#include \"../sdc/crease.h\"\n+32\n+33#include \n+34#include \n+35#include \n+36\n+37namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+38namespace OPENSUBDIV_VERSION {\n+39\n+40namespace Sdc {\n+41\n+65template \n+_\b6_\b6class _\bS_\bc_\bh_\be_\bm_\be {\n+67\n+68public:\n+69\n+_\b7_\b0 _\bS_\bc_\bh_\be_\bm_\be() : _options() { }\n+71\n+_\b7_\b2 _\bS_\bc_\bh_\be_\bm_\be(_\bO_\bp_\bt_\bi_\bo_\bn_\bs const& options) : _options(options) { }\n+73\n+_\b7_\b4 _\bO_\bp_\bt_\bi_\bo_\bn_\bs _\bG_\be_\bt_\bO_\bp_\bt_\bi_\bo_\bn_\bs() const { return _options; }\n+_\b7_\b5 void _\bS_\be_\bt_\bO_\bp_\bt_\bi_\bo_\bn_\bs(const _\bO_\bp_\bt_\bi_\bo_\bn_\bs& newOptions) { _options = newOptions; }\n 76\n-77public:\n-78\n-_\b7_\b9 _\bO_\bp_\bt_\bi_\bo_\bn_\bs() : _vtxBoundInterp(_\bV_\bT_\bX_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY_\b__\bN_\bO_\bN_\bE),\n-80 _fvarLinInterp(_\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bA_\bL_\bL),\n-81 _creasingMethod(_\bC_\bR_\bE_\bA_\bS_\bE_\b__\bU_\bN_\bI_\bF_\bO_\bR_\bM),\n-82 _triangleSub(_\bT_\bR_\bI_\b__\bS_\bU_\bB_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK) { }\n-83\n-84 //\n-85 // Trivial get/set methods:\n-86 //\n-87\n-_\b8_\b9 _\bV_\bt_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn _\bG_\be_\bt_\bV_\bt_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn() const { return\n-(_\bV_\bt_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn) _vtxBoundInterp; }\n-90\n-_\b9_\b2 void _\bS_\be_\bt_\bV_\bt_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn(_\bV_\bt_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn b)\n-{ _vtxBoundInterp = (EnumIntType) b; }\n-93\n-_\b9_\b5 _\bF_\bV_\ba_\br_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn _\bG_\be_\bt_\bF_\bV_\ba_\br_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn() const { return\n-(_\bF_\bV_\ba_\br_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn) _fvarLinInterp; }\n-96\n-_\b9_\b8 void _\bS_\be_\bt_\bF_\bV_\ba_\br_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn(_\bF_\bV_\ba_\br_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn b) { _fvarLinInterp\n-= (EnumIntType) b; }\n-99\n-_\b1_\b0_\b1 _\bC_\br_\be_\ba_\bs_\bi_\bn_\bg_\bM_\be_\bt_\bh_\bo_\bd _\bG_\be_\bt_\bC_\br_\be_\ba_\bs_\bi_\bn_\bg_\bM_\be_\bt_\bh_\bo_\bd() const { return (_\bC_\br_\be_\ba_\bs_\bi_\bn_\bg_\bM_\be_\bt_\bh_\bo_\bd)\n-_creasingMethod; }\n+80 template \n+81 void _\bC_\bo_\bm_\bp_\bu_\bt_\be_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk(FACE const& faceNeighborhood, MASK&\n+faceVertexMask) const;\n+82\n+98 template \n+99 void _\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bd_\bg_\be_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk(EDGE const& edgeNeighborhood, MASK&\n+edgeVertexMask,\n+100 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be parentRule = _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN,\n+101 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be childRule = _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN) const;\n 102\n-_\b1_\b0_\b4 void _\bS_\be_\bt_\bC_\br_\be_\ba_\bs_\bi_\bn_\bg_\bM_\be_\bt_\bh_\bo_\bd(_\bC_\br_\be_\ba_\bs_\bi_\bn_\bg_\bM_\be_\bt_\bh_\bo_\bd c) { _creasingMethod = (EnumIntType)\n-c; }\n-105\n-_\b1_\b0_\b7 _\bT_\br_\bi_\ba_\bn_\bg_\bl_\be_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bs_\bi_\bo_\bn _\bG_\be_\bt_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bs_\bi_\bo_\bn() const { return\n-(_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bs_\bi_\bo_\bn) _triangleSub; }\n-108\n-_\b1_\b1_\b0 void _\bS_\be_\bt_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bs_\bi_\bo_\bn(_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bs_\bi_\bo_\bn t) { _triangleSub =\n-(EnumIntType) t; }\n-111\n-112private:\n-113 // Use a small integer type to pack these rather than bitfields:\n-114 typedef unsigned char EnumIntType;\n-115\n-116 EnumIntType _vtxBoundInterp;\n-117 EnumIntType _fvarLinInterp;\n-118 EnumIntType _creasingMethod;\n-119 EnumIntType _triangleSub;\n-120};\n-121\n-122} // end namespace sdc\n-123\n-124} // end namespace OPENSUBDIV_VERSION\n-125using namespace OPENSUBDIV_VERSION;\n-126} // end namespace OpenSubdiv\n-127\n-128#endif /* OPENSUBDIV3_SDC_OPTIONS_H */\n+112 template \n+113 void _\bC_\bo_\bm_\bp_\bu_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk(VERTEX const& vertexNeighborhood, MASK&\n+vertexVertexMask,\n+114 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be parentRule = _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN,\n+115 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be childRule = _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN) const;\n+116\n+141 template \n+142 void _\bC_\bo_\bm_\bp_\bu_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& vertexNeighborhood, MASK&\n+positionMask,\n+143 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be vertexRule) const;\n+144\n+145 template \n+146 void _\bC_\bo_\bm_\bp_\bu_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& vertexNeighborhood, MASK&\n+positionMask,\n+147 MASK& tangent1Mask, MASK& tangent2Mask,\n+148 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be vertexRule) const;\n+149\n+150 //\n+151 // Static methods defining traits/properties of the scheme:\n+152 //\n+_\b1_\b5_\b3 static _\bS_\bp_\bl_\bi_\bt _\bG_\be_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\bi_\bc_\ba_\bl_\bS_\bp_\bl_\bi_\bt_\bT_\by_\bp_\be();\n+_\b1_\b5_\b4 static int _\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be();\n+_\b1_\b5_\b5 static int _\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be();\n+_\b1_\b5_\b6 static int _\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bN_\be_\bi_\bg_\bh_\bb_\bo_\br_\bh_\bo_\bo_\bd_\bS_\bi_\bz_\be();\n+157\n+158protected:\n+159\n+160 //\n+161 // Supporting internal methods -- optionally implemented, depending on\n+specialization:\n+162 //\n+163\n+164 // Subdivision/refinement masks -- two for edge-vertices and three for\n+vertex-vertices:\n+165 //\n+166 template \n+167 void _\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bE_\bd_\bg_\be(EDGE const& edge, MASK& mask) const;\n+168 template \n+_\b1_\b6_\b9 void _\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bE_\bd_\bg_\be(EDGE const& edge, MASK& mask) const;\n+170\n+171 template \n+172 void _\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bV_\be_\br_\bt_\be_\bx(VERTEX const& edge, MASK& mask) const;\n+173 template \n+_\b1_\b7_\b4 void _\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bV_\be_\br_\bt_\be_\bx(VERTEX const& edge, MASK& mask, int const\n+creaseEnds[2]) const;\n+175 template \n+_\b1_\b7_\b6 void _\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bV_\be_\br_\bt_\be_\bx(VERTEX const& edge, MASK& mask) const;\n+177\n+178 //\n+179 // Limit masks for position and tangents at vertices -- three cases for\n+each:\n+180 //\n+181 template \n+_\b1_\b8_\b2 void _\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& vertex, MASK& pos) const;\n+183 template \n+_\b1_\b8_\b4 void _\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& vertex, MASK& pos, int const\n+creaseEnds[2]) const;\n+185 template \n+_\b1_\b8_\b6 void _\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& vertex, MASK& pos) const;\n+187\n+188 template \n+_\b1_\b8_\b9 void _\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs(VERTEX const& vertex, MASK& tan1, MASK&\n+tan2) const;\n+190 template \n+_\b1_\b9_\b1 void _\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs(VERTEX const& vertex, MASK& tan1, MASK&\n+tan2, int const creaseEnds[2]) const;\n+192 template \n+_\b1_\b9_\b3 void _\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs(VERTEX const& vertex, MASK& tan1, MASK&\n+tan2) const;\n+194\n+195private:\n+196 _\bO_\bp_\bt_\bi_\bo_\bn_\bs _options;\n+197\n+198protected:\n+199\n+200 //\n+201 // Internal implementation support:\n+202 //\n+203 // We need a local \"mask\" class to be declared locally within the vertex-\n+vertex mask query\n+204 // to hold one of the two possible masks required and to combine the local\n+mask with the mask\n+205 // the caller provides. It has been parameterized by so that a\n+version compatible\n+206 // with the caller's mask class is created.\n+207 //\n+208 template \n+_\b2_\b0_\b9 class _\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk {\n+210\n+211 public:\n+_\b2_\b1_\b2 typedef WEIGHT _\bW_\be_\bi_\bg_\bh_\bt;\n+213\n+214 public:\n+_\b2_\b1_\b5 _\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk(_\bW_\be_\bi_\bg_\bh_\bt* v, _\bW_\be_\bi_\bg_\bh_\bt* e, _\bW_\be_\bi_\bg_\bh_\bt* f) : _vWeights(v), _eWeights(e),\n+_fWeights(f) { }\n+_\b2_\b1_\b6 _\b~_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk() { }\n+217\n+218 public:\n+219\n+220 //\n+221 // Methods required for general mask assignments and queries:\n+222 //\n+_\b2_\b2_\b3 int _\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\be_\bx_\bW_\be_\bi_\bg_\bh_\bt_\bs() const { return _vCount; }\n+_\b2_\b2_\b4 int _\bG_\be_\bt_\bN_\bu_\bm_\bE_\bd_\bg_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs() const { return _eCount; }\n+_\b2_\b2_\b5 int _\bG_\be_\bt_\bN_\bu_\bm_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs() const { return _fCount; }\n+226\n+_\b2_\b2_\b7 void _\bS_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\be_\bx_\bW_\be_\bi_\bg_\bh_\bt_\bs(int count) { _vCount = count; }\n+_\b2_\b2_\b8 void _\bS_\be_\bt_\bN_\bu_\bm_\bE_\bd_\bg_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs( int count) { _eCount = count; }\n+_\b2_\b2_\b9 void _\bS_\be_\bt_\bN_\bu_\bm_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs( int count) { _fCount = count; }\n+230\n+_\b2_\b3_\b1 _\bW_\be_\bi_\bg_\bh_\bt const& _\bV_\be_\br_\bt_\be_\bx_\bW_\be_\bi_\bg_\bh_\bt(int index) const { return _vWeights[index]; }\n+_\b2_\b3_\b2 _\bW_\be_\bi_\bg_\bh_\bt const& _\bE_\bd_\bg_\be_\bW_\be_\bi_\bg_\bh_\bt( int index) const { return _eWeights[index]; }\n+_\b2_\b3_\b3 _\bW_\be_\bi_\bg_\bh_\bt const& _\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt( int index) const { return _fWeights[index]; }\n+234\n+_\b2_\b3_\b5 _\bW_\be_\bi_\bg_\bh_\bt& _\bV_\be_\br_\bt_\be_\bx_\bW_\be_\bi_\bg_\bh_\bt(int index) { return _vWeights[index]; }\n+_\b2_\b3_\b6 _\bW_\be_\bi_\bg_\bh_\bt& _\bE_\bd_\bg_\be_\bW_\be_\bi_\bg_\bh_\bt( int index) { return _eWeights[index]; }\n+_\b2_\b3_\b7 _\bW_\be_\bi_\bg_\bh_\bt& _\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt( int index) { return _fWeights[index]; }\n+238\n+_\b2_\b3_\b9 bool _\bA_\br_\be_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bF_\bo_\br_\bF_\ba_\bc_\be_\bC_\be_\bn_\bt_\be_\br_\bs() const { return _fWeightsForCenters; }\n+_\b2_\b4_\b0 void _\bS_\be_\bt_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bF_\bo_\br_\bF_\ba_\bc_\be_\bC_\be_\bn_\bt_\be_\br_\bs(bool on) { _fWeightsForCenters = on; }\n+241\n+242 public:\n+243\n+244 //\n+245 // Additional methods -- mainly the blending method for vertex-vertex\n+masks:\n+246 //\n+247 template \n+248 inline void\n+_\b2_\b4_\b9 _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk_\bs(_\bW_\be_\bi_\bg_\bh_\bt thisCoeff, _\bW_\be_\bi_\bg_\bh_\bt dstCoeff, USER_MASK& dst)\n+const {\n+250\n+251 //\n+252 // This implementation is convoluted by the potential sparsity of each\n+mask. Since\n+253 // it is specific to a vertex-vertex mask, we are guaranteed to have\n+exactly one\n+254 // vertex-weight for both masks, but the edge- and face-weights are\n+optional. The\n+255 // child mask (the \"source\") should have a superset of the weights of the\n+parent\n+256 // (the \"destination\") given its reduced sharpness, so we fortunately don't\n+need to\n+257 // test all permutations.\n+258 //\n+259 dst.VertexWeight(0) = dstCoeff * dst.VertexWeight(0) + thisCoeff * this-\n+>_\bV_\be_\br_\bt_\be_\bx_\bW_\be_\bi_\bg_\bh_\bt(0);\n+260\n+261 int edgeWeightCount = this->_\bG_\be_\bt_\bN_\bu_\bm_\bE_\bd_\bg_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs();\n+262 if (edgeWeightCount) {\n+263 if (dst.GetNumEdgeWeights() == 0) {\n+264 dst.SetNumEdgeWeights(edgeWeightCount);\n+265 for (int i = 0; i < edgeWeightCount; ++i) {\n+266 dst.EdgeWeight(i) = thisCoeff * this->_\bE_\bd_\bg_\be_\bW_\be_\bi_\bg_\bh_\bt(i);\n+267 }\n+268 } else {\n+269 for (int i = 0; i < edgeWeightCount; ++i) {\n+270 dst.EdgeWeight(i) = dstCoeff * dst.EdgeWeight(i) + thisCoeff * this-\n+>_\bE_\bd_\bg_\be_\bW_\be_\bi_\bg_\bh_\bt(i);\n+271 }\n+272 }\n+273 }\n+274\n+275 int faceWeightCount = this->_\bG_\be_\bt_\bN_\bu_\bm_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs();\n+276 if (faceWeightCount) {\n+277 //\n+278 // If combining face weights, be sure their interpretation (i.e. face-\n+centers\n+279 // or opposite vertices) is properly set in the destination mask:\n+280 //\n+281 if (dst.GetNumFaceWeights() == 0) {\n+282 dst.SetNumFaceWeights(faceWeightCount);\n+283 dst.SetFaceWeightsForFaceCenters(this->_\bA_\br_\be_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bF_\bo_\br_\bF_\ba_\bc_\be_\bC_\be_\bn_\bt_\be_\br_\bs());\n+284\n+285 for (int i = 0; i < faceWeightCount; ++i) {\n+286 dst.FaceWeight(i) = thisCoeff * this->_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt(i);\n+287 }\n+288 } else {\n+289 assert(this->_\bA_\br_\be_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bF_\bo_\br_\bF_\ba_\bc_\be_\bC_\be_\bn_\bt_\be_\br_\bs() ==\n+dst.AreFaceWeightsForFaceCenters());\n+290\n+291 for (int i = 0; i < faceWeightCount; ++i) {\n+292 dst.FaceWeight(i) = dstCoeff * dst.FaceWeight(i) + thisCoeff * this-\n+>_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt(i);\n+293 }\n+294 }\n+295 }\n+296 }\n+297\n+298 private:\n+299 _\bW_\be_\bi_\bg_\bh_\bt* _vWeights;\n+300 _\bW_\be_\bi_\bg_\bh_\bt* _eWeights;\n+301 _\bW_\be_\bi_\bg_\bh_\bt* _fWeights;\n+302 int _vCount;\n+303 int _eCount;\n+304 int _fCount;\n+305 bool _fWeightsForCenters;\n+306 };\n+307};\n+308\n+309\n+310//\n+311// Crease and corner masks are common to most schemes -- the rest need to be\n+provided\n+312// for each Scheme specialization.\n+313//\n+314template \n+315template \n+316inline void\n+_\b3_\b1_\b7_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bE_\bd_\bg_\be(EDGE const&, MASK& mask) const {\n+318\n+319 mask.SetNumVertexWeights(2);\n+320 mask.SetNumEdgeWeights(0);\n+321 mask.SetNumFaceWeights(0);\n+322 mask.SetFaceWeightsForFaceCenters(false);\n+323\n+324 mask.VertexWeight(0) = 0.5f;\n+325 mask.VertexWeight(1) = 0.5f;\n+326}\n+327\n+328template \n+329template \n+330inline void\n+_\b3_\b3_\b1_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bV_\be_\br_\bt_\be_\bx(VERTEX const&, MASK& mask) const {\n+332\n+333 mask.SetNumVertexWeights(1);\n+334 mask.SetNumEdgeWeights(0);\n+335 mask.SetNumFaceWeights(0);\n+336 mask.SetFaceWeightsForFaceCenters(false);\n+337\n+338 mask.VertexWeight(0) = 1.0f;\n+339}\n+340\n+341\n+342//\n+343// The computation of a face-vertex mask is trivial and consistent for all\n+schemes:\n+344//\n+345template \n+346template \n+347void\n+_\b3_\b4_\b8_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk(FACE const& face, MASK& mask) const {\n+349\n+350 int vertCount = face.GetNumVertices();\n+351\n+352 mask.SetNumVertexWeights(vertCount);\n+353 mask.SetNumEdgeWeights(0);\n+354 mask.SetNumFaceWeights(0);\n+355 mask.SetFaceWeightsForFaceCenters(false);\n+356\n+357 typename MASK::Weight vWeight = 1.0f / (typename MASK::Weight) vertCount;\n+358 for (int i = 0; i < vertCount; ++i) {\n+359 mask.VertexWeight(i) = vWeight;\n+360 }\n+361}\n+362\n+363\n+364//\n+365// The computation of an edge-vertex mask requires inspection of sharpness\n+values to\n+366// determine if smooth or a crease, and also to detect and apply a\n+transition from a\n+367// crease to smooth. Using the protected methods to assign the specific\n+masks (only\n+368// two -- smooth or crease) this implementation should serve all non-linear\n+schemes\n+369// (currently Catmark and Loop) and only needs to be specialized for\n+Bilinear to\n+370// trivialize it to the crease case.\n+371//\n+372// The implementation here is slightly complicated by combining two\n+scenarios into a\n+373// single implementation -- either the caller knows the parent and child\n+rules and\n+374// provides them, or they don't and the Rules have to be determined from\n+sharpness\n+375// values. Both cases include quick return once the parent is determined to\n+be\n+376// smooth or the child a crease, leaving the transitional case remaining.\n+377//\n+378// The overall process is as follows:\n+379//\n+380// - quickly detect the most common specified or detected Smooth case and\n+return\n+381// - quickly detect a full Crease by child Rule assignment and return\n+382// - determine from sharpness if unspecified child is a crease -- return if\n+so\n+383// - compute smooth mask for child and combine with crease from parent\n+384//\n+385// Usage of the parent Rule here allows some misuse in that only three of\n+five possible\n+386// assignments are legitimate for the parent and four for the child (Dart\n+being only\n+387// valid for the child and Corner for neither). Results are undefined in\n+these cases.\n+388//\n+389template \n+390template \n+391void\n+_\b3_\b9_\b2_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bd_\bg_\be_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk(EDGE const& edge,\n+393 MASK& mask,\n+394 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be parentRule,\n+395 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be childRule) const {\n+396\n+397 //\n+398 // If the parent was specified or determined to be Smooth, we can quickly\n+return\n+399 // with a Smooth mask. Otherwise the parent is a crease -- if the child was\n+400 // also specified to be a crease, we can quickly return with a Crease mask.\n+401 //\n+402 if ((parentRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bS_\bM_\bO_\bO_\bT_\bH) ||\n+403 ((parentRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN) && (edge.GetSharpness() <= 0.0f))) {\n+404 assignSmoothMaskForEdge(edge, mask);\n+405 return;\n+406 }\n+407 if (childRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bR_\bE_\bA_\bS_\bE) {\n+408 assignCreaseMaskForEdge(edge, mask);\n+409 return;\n+410 }\n+411\n+412 //\n+413 // We have a Crease on the parent and the child was either specified as\n+Smooth\n+414 // or was not specified at all -- deal with the unspecified case first\n+(again\n+415 // returning a Crease mask if the child is also determined to be a Crease)\n+and\n+416 // continue if we have a transition to Smooth.\n+417 //\n+418 // Note when qualifying the child that if the parent sharpness > 1.0,\n+regardless\n+419 // of the creasing method, whether the child sharpness values decay to zero\n+is\n+420 // irrelevant -- the fractional weight for such a case (the value of the\n+parent\n+421 // sharpness) is > 1.0, and when clamped to 1 effectively yields a full\n+crease.\n+422 //\n+423 if (childRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN) {\n+424 _\bC_\br_\be_\ba_\bs_\be crease(_options);\n+425\n+426 bool childIsCrease = false;\n+427 if (parentRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bR_\bE_\bA_\bS_\bE) {\n+428 // Child unknown as default value but parent Rule specified as Crease\n+429 childIsCrease = true;\n+430 } else if (edge.GetSharpness() >= 1.0f) {\n+431 // Sharpness >= 1.0 always a crease -- see note above\n+432 childIsCrease = true;\n+433 } else if (crease._\bI_\bs_\bU_\bn_\bi_\bf_\bo_\br_\bm()) {\n+434 // Sharpness < 1.0 is guaranteed to decay to 0.0 for Uniform child edges\n+435 childIsCrease = false;\n+436 } else {\n+437 // Sharpness <= 1.0 does not necessarily decay to 0.0 for both child\n+edges...\n+438 float cEdgeSharpness[2];\n+439 edge.GetChildSharpnesses(crease, cEdgeSharpness);\n+440 childIsCrease = (cEdgeSharpness[0] > 0.0f) && (cEdgeSharpness[1] > 0.0f);\n+441 }\n+442 if (childIsCrease) {\n+443 assignCreaseMaskForEdge(edge, mask);\n+444 return;\n+445 }\n+446 }\n+447\n+448 //\n+449 // We are now left with the Crease-to-Smooth case -- compute the Smooth\n+mask\n+450 // for the child and augment it with the transitional Crease of the parent.\n+451 //\n+452 // A general combination of separately assigned masks here (as done in the\n+vertex-\n+453 // vertex case) is overkill -- trivially combine the 0.5f vertex\n+coefficient for\n+454 // the Crease of the parent with the vertex weights and attenuate the face\n+weights\n+455 // accordingly.\n+456 //\n+457 assignSmoothMaskForEdge(edge, mask);\n+458\n+459 typedef typename MASK::Weight Weight;\n+460\n+461 Weight pWeight = edge.GetSharpness();\n+462 Weight cWeight = 1.0f - pWeight;\n+463\n+464 mask.VertexWeight(0) = pWeight * 0.5f + cWeight * mask.VertexWeight(0);\n+465 mask.VertexWeight(1) = pWeight * 0.5f + cWeight * mask.VertexWeight(1);\n+466\n+467 int faceCount = mask.GetNumFaceWeights();\n+468 for (int i = 0; i < faceCount; ++i) {\n+469 mask.FaceWeight(i) *= cWeight;\n+470 }\n+471}\n+472\n+473//\n+474// The computation of a vertex-vertex mask requires inspection of creasing\n+sharpness values\n+475// to determine what subdivision Rules apply to the parent and its child\n+vertex, and also to\n+476// detect and apply a transition between two differing Rules. Using the\n+protected methods to\n+477// assign specific masks, this implementation should serve all non-linear\n+schemes (currently\n+478// Catmark and Loop) and only needs to be specialized for Bilinear to remove\n+all unnecessary\n+479// complexity relating to creasing, Rules, etc.\n+480//\n+481// The implementation here is slightly complicated by combining two\n+scenarios into one --\n+482// either the caller knows the parent and child rules and provides them, or\n+they don't and\n+483// the Rules have to be determined from sharpness values. Even when the\n+Rules are known and\n+484// provided though, there are cases where the parent and child sharpness\n+values need to be\n+485// identified, so accounting for the unknown Rules too is not much of an\n+added complication.\n+486//\n+487// The benefit of supporting specified Rules is that they can often be\n+trivially\n+488// determined from context (e.g. a vertex derived from a face at a previous\n+level will always\n+489// be smooth) rather than more generally, and at greater cost, inspecting\n+neighboring and\n+490// they are often the same for parent and child.\n+491//\n+492// The overall process is as follows:\n+493//\n+494// - quickly detect the most common Smooth case when specified and return\n+495// - determine if sharpness for parent is required and gather if so\n+496// - if unspecified, determine the parent rule\n+497// - assign mask for the parent rule -- returning if Smooth/Dart\n+498// - return if child rule matches parent\n+499// - gather sharpness for child to determine or combine child rule\n+500// - if unspecified, determine the child rule, returning if it matches\n+parent\n+501// - assign local mask for child rule\n+502// - combine local child mask with the parent mask\n+503//\n+504// Remember -- if the parent rule is specified but the child is not, this\n+implies only one\n+505// of the two optional rules was specified and is meant to indicate there is\n+no transition,\n+506// so the child rule should be assigned to be the same (wish the compiler\n+would allow this\n+507// in default value assignment).\n+508//\n+509template \n+510template \n+511void\n+_\b5_\b1_\b2_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk(VERTEX const& vertex,\n+513 MASK& mask,\n+514 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be pRule,\n+515 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be cRule) const {\n+516\n+517 // Quick assignment and return for the most common case:\n+518 if ((pRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bS_\bM_\bO_\bO_\bT_\bH) || (pRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bD_\bA_\bR_\bT)) {\n+519 assignSmoothMaskForVertex(vertex, mask);\n+520 return;\n+521 }\n+522 // If unspecified, assign the child rule to match the parent rule if\n+specified:\n+523 if ((cRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN) && (pRule != _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN)) {\n+524 cRule = pRule;\n+525 }\n+526 int valence = vertex.GetNumEdges();\n+527\n+528 //\n+529 // Determine if we need the parent edge sharpness values -- identify/gather\n+if so\n+530 // and use it to compute the parent rule if unspecified:\n+531 //\n+532 float * pEdgeSharpnessBuffer = (float *)alloca(valence*sizeof(float)),\n+533 * pEdgeSharpness = 0,\n+534 pVertexSharpness = 0.0f;\n+535\n+536 bool requireParentSharpness = (pRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN) ||\n+537 (pRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bR_\bE_\bA_\bS_\bE) ||\n+538 (pRule != cRule);\n+539 if (requireParentSharpness) {\n+540 pVertexSharpness = vertex.GetSharpness();\n+541 pEdgeSharpness = vertex.GetSharpnessPerEdge(pEdgeSharpnessBuffer);\n+542\n+543 if (pRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN) {\n+544 pRule = _\bC_\br_\be_\ba_\bs_\be(_options)._\bD_\be_\bt_\be_\br_\bm_\bi_\bn_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bR_\bu_\bl_\be(pVertexSharpness,\n+valence, pEdgeSharpness);\n+545 }\n+546 }\n+547 if ((pRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bS_\bM_\bO_\bO_\bT_\bH) || (pRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bD_\bA_\bR_\bT)) {\n+548 assignSmoothMaskForVertex(vertex, mask);\n+549 return; // As done on entry, we can return immediately if parent is Smooth/\n+Dart\n+550 } else if (pRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bR_\bE_\bA_\bS_\bE) {\n+551 int creaseEnds[2];\n+552 _\bC_\br_\be_\ba_\bs_\be(_options)._\bG_\be_\bt_\bS_\bh_\ba_\br_\bp_\bE_\bd_\bg_\be_\bP_\ba_\bi_\br_\bO_\bf_\bC_\br_\be_\ba_\bs_\be(pEdgeSharpness, valence,\n+creaseEnds);\n+553\n+554 assignCreaseMaskForVertex(vertex, mask, creaseEnds);\n+555 } else {\n+556 assignCornerMaskForVertex(vertex, mask);\n+557 }\n+558 if (cRule == pRule) return;\n+559\n+560 //\n+561 // Identify/gather child sharpness to combine masks for the two differing\n+Rules:\n+562 //\n+563 _\bC_\br_\be_\ba_\bs_\be crease(_options);\n+564\n+565 float * cEdgeSharpnessBuffer = (float *)alloca(valence*sizeof(float)),\n+566 * cEdgeSharpness = vertex.GetChildSharpnessPerEdge(crease,\n+cEdgeSharpnessBuffer),\n+567 cVertexSharpness = vertex.GetChildSharpness(crease);\n+568\n+569 if (cRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN) {\n+570 cRule = crease._\bD_\be_\bt_\be_\br_\bm_\bi_\bn_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bR_\bu_\bl_\be(cVertexSharpness, valence,\n+cEdgeSharpness);\n+571 if (cRule == pRule) return;\n+572 }\n+573\n+574 //\n+575 // Initialize a local child mask, compute the fractional weight from parent\n+and child\n+576 // sharpness values and combine the two masks:\n+577 //\n+578 typedef typename MASK::Weight Weight;\n+579\n+580 Weight * cMaskWeights = (Weight *)alloca((1 + 2 * valence)*sizeof(Weight));\n+581 _\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b<_\bW_\be_\bi_\bg_\bh_\bt_\b> cMask(cMaskWeights, cMaskWeights + 1, cMaskWeights + 1 +\n+valence);\n+582\n+583 if ((cRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bS_\bM_\bO_\bO_\bT_\bH) || (cRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bD_\bA_\bR_\bT)) {\n+584 assignSmoothMaskForVertex(vertex, cMask);\n+585 } else if (cRule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bR_\bE_\bA_\bS_\bE) {\n+586 int creaseEnds[2];\n+587 _\bC_\br_\be_\ba_\bs_\be(_options)._\bG_\be_\bt_\bS_\bh_\ba_\br_\bp_\bE_\bd_\bg_\be_\bP_\ba_\bi_\br_\bO_\bf_\bC_\br_\be_\ba_\bs_\be(cEdgeSharpness, valence,\n+creaseEnds);\n+588\n+589 assignCreaseMaskForVertex(vertex, cMask, creaseEnds);\n+590 } else {\n+591 assignCornerMaskForVertex(vertex, cMask);\n+592 }\n+593\n+594 Weight pWeight = crease._\bC_\bo_\bm_\bp_\bu_\bt_\be_\bF_\br_\ba_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bW_\be_\bi_\bg_\bh_\bt_\bA_\bt_\bV_\be_\br_\bt_\be_\bx(pVertexSharpness,\n+cVertexSharpness,\n+595 valence, pEdgeSharpness, cEdgeSharpness);\n+596 Weight cWeight = 1.0f - pWeight;\n+597\n+598 cMask._\bC_\bo_\bm_\bb_\bi_\bn_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk_\bs(cWeight, pWeight, mask);\n+599}\n+600\n+601//\n+602// The computation of limit masks for vertices:\n+603//\n+604template \n+605template \n+606void\n+_\b6_\b0_\b7_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& vertex,\n+608 MASK& mask,\n+609 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be rule) const {\n+610\n+611 if ((rule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bS_\bM_\bO_\bO_\bT_\bH) || (rule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bD_\bA_\bR_\bT)) {\n+612 assignSmoothLimitMask(vertex, mask);\n+613 } else if (rule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bR_\bE_\bA_\bS_\bE) {\n+614 float * edgeSharpness = (float *)alloca(vertex.GetNumEdges() * sizeof\n+(float));\n+615 vertex.GetSharpnessPerEdge(edgeSharpness);\n+616\n+617 int creaseEnds[2];\n+618 _\bC_\br_\be_\ba_\bs_\be(_options)._\bG_\be_\bt_\bS_\bh_\ba_\br_\bp_\bE_\bd_\bg_\be_\bP_\ba_\bi_\br_\bO_\bf_\bC_\br_\be_\ba_\bs_\be(edgeSharpness, vertex.GetNumEdges\n+(), creaseEnds);\n+619\n+620 assignCreaseLimitMask(vertex, mask, creaseEnds);\n+621 } else {\n+622 assignCornerLimitMask(vertex, mask);\n+623 }\n+624}\n+625\n+626template \n+627template \n+628void\n+_\b6_\b2_\b9_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& vertex,\n+630 MASK& posMask,\n+631 MASK& tan1Mask,\n+632 MASK& tan2Mask,\n+633 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be rule) const {\n+634\n+635 if ((rule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bS_\bM_\bO_\bO_\bT_\bH) || (rule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bD_\bA_\bR_\bT)) {\n+636 assignSmoothLimitMask(vertex, posMask);\n+637 assignSmoothLimitTangentMasks(vertex, tan1Mask, tan2Mask);\n+638 } else if (rule == _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bR_\bE_\bA_\bS_\bE) {\n+639 float * edgeSharpness = (float *)alloca(vertex.GetNumEdges() * sizeof\n+(float));\n+640 vertex.GetSharpnessPerEdge(edgeSharpness);\n+641\n+642 int creaseEnds[2];\n+643 _\bC_\br_\be_\ba_\bs_\be(_options)._\bG_\be_\bt_\bS_\bh_\ba_\br_\bp_\bE_\bd_\bg_\be_\bP_\ba_\bi_\br_\bO_\bf_\bC_\br_\be_\ba_\bs_\be(edgeSharpness, vertex.GetNumEdges\n+(), creaseEnds);\n+644\n+645 assignCreaseLimitMask(vertex, posMask, creaseEnds);\n+646 assignCreaseLimitTangentMasks(vertex, tan1Mask, tan2Mask, creaseEnds);\n+647 } else {\n+648 assignCornerLimitMask(vertex, posMask);\n+649 assignCornerLimitTangentMasks(vertex, tan1Mask, tan2Mask);\n+650 }\n+651}\n+652\n+653\n+654} // end namespace sdc\n+655\n+656} // end namespace OPENSUBDIV_VERSION\n+657using namespace OPENSUBDIV_VERSION;\n+658} // end namespace OpenSubdiv\n+659\n+660#endif /* OPENSUBDIV3_SDC_SCHEME_H */\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bp_\bl_\bi_\bt\n+Split\n+Enumerated type for all face splitting schemes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b4_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be\n+Types, constants and utilities related to semi-sharp creasing \u00e2\u0080\u0093 whose\n+implementation is independent o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b6_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be\n+Rule\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bD_\bA_\bR_\bT\n+@ RULE_DART\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bS_\bM_\bO_\bO_\bT_\bH\n+@ RULE_SMOOTH\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bR_\bE_\bA_\bS_\bE\n+@ RULE_CREASE\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN\n+@ RULE_UNKNOWN\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bG_\be_\bt_\bS_\bh_\ba_\br_\bp_\bE_\bd_\bg_\be_\bP_\ba_\bi_\br_\bO_\bf_\bC_\br_\be_\ba_\bs_\be\n+void GetSharpEdgePairOfCrease(float const *incidentEdgeSharpness, int\n+incidentEdgeCount, int sharpEdgePair[2]) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b2_\b2_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bD_\be_\bt_\be_\br_\bm_\bi_\bn_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bR_\bu_\bl_\be\n+Rule DetermineVertexVertexRule(float vertexSharpness, int incidentEdgeCount,\n+float const *incidentEdgeSharpness) const\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bI_\bs_\bU_\bn_\bi_\bf_\bo_\br_\bm\n+bool IsUniform() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b9_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bF_\br_\ba_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bW_\be_\bi_\bg_\bh_\bt_\bA_\bt_\bV_\be_\br_\bt_\be_\bx\n+float ComputeFractionalWeightAtVertex(float vertexSharpness, float\n+childVertexSharpness, int incidentEdgeCount, float const\n+*incidentEdgeSharpness, float const *childEdgesSharpness) const\n+Transitional weighting: When the rules applicable to a parent vertex and its\n+child differ,...\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n All supported options applying to subdivision scheme.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b5_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bs_\bi_\bo_\bn\n-TriangleSubdivision\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b7_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\bR_\bI_\b__\bS_\bU_\bB_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK\n-@ TRI_SUB_CATMARK\n-Catmark weights (Catmark scheme only)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b7_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\bR_\bI_\b__\bS_\bU_\bB_\b__\bS_\bM_\bO_\bO_\bT_\bH\n-@ TRI_SUB_SMOOTH\n-\"smooth triangle\" weights (Catmark scheme only)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b7_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\br_\be_\ba_\bs_\bi_\bn_\bg_\bM_\be_\bt_\bh_\bo_\bd\n-CreasingMethod\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b6_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bR_\bE_\bA_\bS_\bE_\b__\bU_\bN_\bI_\bF_\bO_\bR_\bM\n-@ CREASE_UNIFORM\n-Catmark rule.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b6_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bR_\bE_\bA_\bS_\bE_\b__\bC_\bH_\bA_\bI_\bK_\bI_\bN\n-@ CREASE_CHAIKIN\n-Chaikin rule.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b7_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\be_\bt_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bs_\bi_\bo_\bn\n-TriangleSubdivision GetTriangleSubdivision() const\n-Get triangle subdivision weights rule (Catmark scheme only !)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b1_\b0_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\be_\bt_\bC_\br_\be_\ba_\bs_\bi_\bn_\bg_\bM_\be_\bt_\bh_\bo_\bd\n-CreasingMethod GetCreasingMethod() const\n-Get edge crease rule.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b1_\b0_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n-Options()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b7_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\be_\bt_\bF_\bV_\ba_\br_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn\n-void SetFVarLinearInterpolation(FVarLinearInterpolation b)\n-Set face-varying interpolation rule.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b9_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\be_\bt_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bs_\bi_\bo_\bn\n-void SetTriangleSubdivision(TriangleSubdivision t)\n-Set triangle subdivision weights rule (Catmark scheme only !)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b1_\b1_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\be_\bt_\bV_\bt_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn\n-VtxBoundaryInterpolation GetVtxBoundaryInterpolation() const\n-Get vertex boundary interpolation rule.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b8_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bV_\ba_\br_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn\n-FVarLinearInterpolation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b6_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bC_\bO_\bR_\bN_\bE_\bR_\bS_\b__\bO_\bN_\bL_\bY\n-@ FVAR_LINEAR_CORNERS_ONLY\n-sharpen corners only\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b6_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bI_\bE_\bS\n-@ FVAR_LINEAR_BOUNDARIES\n-sharpen all boundaries (\"always sharp\")\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b6_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bC_\bO_\bR_\bN_\bE_\bR_\bS_\b__\bP_\bL_\bU_\bS_\b2\n-@ FVAR_LINEAR_CORNERS_PLUS2\n-(\"edge and corner + propagate corner\")\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b6_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bC_\bO_\bR_\bN_\bE_\bR_\bS_\b__\bP_\bL_\bU_\bS_\b1\n-@ FVAR_LINEAR_CORNERS_PLUS1\n-(\"edge corner\")\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b6_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bA_\bL_\bL\n-@ FVAR_LINEAR_ALL\n-bilinear interpolation (\"bilinear\")\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b6_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bV_\bA_\bR_\b__\bL_\bI_\bN_\bE_\bA_\bR_\b__\bN_\bO_\bN_\bE\n-@ FVAR_LINEAR_NONE\n-smooth everywhere (\"edge only\")\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b6_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\be_\bt_\bV_\bt_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn\n-void SetVtxBoundaryInterpolation(VtxBoundaryInterpolation b)\n-Set vertex boundary interpolation rule.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b9_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bL_\bi_\bn_\be_\ba_\br_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn\n-FVarLinearInterpolation GetFVarLinearInterpolation() const\n-Get face-varying interpolation rule.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b9_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bV_\bt_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn\n-VtxBoundaryInterpolation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b5_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bV_\bT_\bX_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY_\b__\bN_\bO_\bN_\bE\n-@ VTX_BOUNDARY_NONE\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b5_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bV_\bT_\bX_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY_\b__\bE_\bD_\bG_\bE_\b__\bO_\bN_\bL_\bY\n-@ VTX_BOUNDARY_EDGE_ONLY\n-all boundary edges sharpened and interpolated\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b5_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bV_\bT_\bX_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY_\b__\bE_\bD_\bG_\bE_\b__\bA_\bN_\bD_\b__\bC_\bO_\bR_\bN_\bE_\bR\n-@ VTX_BOUNDARY_EDGE_AND_CORNER\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b5_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\be_\bt_\bC_\br_\be_\ba_\bs_\bi_\bn_\bg_\bM_\be_\bt_\bh_\bo_\bd\n-void SetCreasingMethod(CreasingMethod c)\n-Set edge crease rule.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b1_\b0_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be\n+Scheme is a class template which provides all implementation for the\n+subdivision schemes supported by...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b6_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bE_\bd_\bg_\be\n+void assignSmoothMaskForEdge(EDGE const &edge, MASK &mask) const\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bG_\be_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\bi_\bc_\ba_\bl_\bS_\bp_\bl_\bi_\bt_\bT_\by_\bp_\be\n+static Split GetTopologicalSplitType()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bV_\be_\br_\bt_\be_\bx\n+void assignCreaseMaskForVertex(VERTEX const &edge, MASK &mask, int const\n+creaseEnds[2]) const\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk\n+void ComputeVertexVertexMask(VERTEX const &vertexNeighborhood, MASK\n+&vertexVertexMask, Crease::Rule parentRule=Crease::RULE_UNKNOWN, Crease::Rule\n+childRule=Crease::RULE_UNKNOWN) const\n+Vertex-vertex masks If known, a single Rule or pair of Rules can be specified\n+(indicating a crease tr...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b5_\b1_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk\n+void ComputeVertexLimitMask(VERTEX const &vertexNeighborhood, MASK\n+&positionMask, Crease::Rule vertexRule) const\n+Limit masks for vertices \u00e2\u0080\u0093 position and tangents These presume that a vertex\n+is suitably isolated for...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b6_\b0_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs\n+void assignCreaseLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK\n+&tan2, int const creaseEnds[2]) const\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be\n+static int GetRegularFaceSize()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bE_\bd_\bg_\be\n+void assignCreaseMaskForEdge(EDGE const &edge, MASK &mask) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b3_\b1_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bd_\bg_\be_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk\n+void ComputeEdgeVertexMask(EDGE const &edgeNeighborhood, MASK &edgeVertexMask,\n+Crease::Rule parentRule=Crease::RULE_UNKNOWN, Crease::Rule childRule=Crease::\n+RULE_UNKNOWN) const\n+Edge-vertex masks If known, the Rule for the edge and/or the derived vertex can\n+be specified to accel...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b3_\b9_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be\n+Scheme()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b7_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk\n+void assignSmoothLimitMask(VERTEX const &vertex, MASK &pos) const\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bN_\be_\bi_\bg_\bh_\bb_\bo_\br_\bh_\bo_\bo_\bd_\bS_\bi_\bz_\be\n+static int GetLocalNeighborhoodSize()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bV_\be_\br_\bt_\be_\bx\n+void assignCornerMaskForVertex(VERTEX const &edge, MASK &mask) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b3_\b3_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk\n+void assignCreaseLimitMask(VERTEX const &vertex, MASK &pos, int const\n+creaseEnds[2]) const\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bV_\be_\br_\bt_\be_\bx\n+void assignSmoothMaskForVertex(VERTEX const &edge, MASK &mask) const\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be\n+static int GetRegularVertexValence()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bG_\be_\bt_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n+Options GetOptions() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b7_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs\n+void assignSmoothLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK\n+&tan2) const\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk\n+void assignCornerLimitMask(VERTEX const &vertex, MASK &pos) const\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be\n+Scheme(Options const &options)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b7_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bF_\ba_\bc_\be_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk\n+void ComputeFaceVertexMask(FACE const &faceNeighborhood, MASK &faceVertexMask)\n+const\n+Face-vertex masks - trivial for all current schemes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b3_\b4_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs\n+void assignCornerLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK\n+&tan2) const\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bS_\be_\bt_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n+void SetOptions(const Options &newOptions)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b7_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b0_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bW_\be_\bi_\bg_\bh_\bt\n+WEIGHT Weight\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b1_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:\n+_\bA_\br_\be_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bF_\bo_\br_\bF_\ba_\bc_\be_\bC_\be_\bn_\bt_\be_\br_\bs\n+bool AreFaceWeightsForFaceCenters() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b3_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bS_\be_\bt_\bN_\bu_\bm_\bE_\bd_\bg_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs\n+void SetNumEdgeWeights(int count)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b2_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bE_\bd_\bg_\be_\bW_\be_\bi_\bg_\bh_\bt\n+Weight const & EdgeWeight(int index) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b3_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bE_\bd_\bg_\be_\bW_\be_\bi_\bg_\bh_\bt\n+Weight & EdgeWeight(int index)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b3_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:\n+_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk_\bs\n+void CombineVertexVertexMasks(Weight thisCoeff, Weight dstCoeff, USER_MASK\n+&dst) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b4_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\be_\bx_\bW_\be_\bi_\bg_\bh_\bt_\bs\n+int GetNumVertexWeights() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b2_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bS_\be_\bt_\bN_\bu_\bm_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs\n+void SetNumFaceWeights(int count)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b2_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt\n+Weight const & FaceWeight(int index) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b3_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bE_\bd_\bg_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs\n+int GetNumEdgeWeights() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b2_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bW_\be_\bi_\bg_\bh_\bt\n+Weight & VertexWeight(int index)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b3_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs\n+int GetNumFaceWeights() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b2_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:\n+_\bS_\be_\bt_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bF_\bo_\br_\bF_\ba_\bc_\be_\bC_\be_\bn_\bt_\be_\br_\bs\n+void SetFaceWeightsForFaceCenters(bool on)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b4_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bS_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\be_\bx_\bW_\be_\bi_\bg_\bh_\bt_\bs\n+void SetNumVertexWeights(int count)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b2_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk\n+LocalMask(Weight *v, Weight *e, Weight *f)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b1_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bW_\be_\bi_\bg_\bh_\bt\n+Weight const & VertexWeight(int index) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b3_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\bF_\ba_\bc_\be_\bW_\be_\bi_\bg_\bh_\bt\n+Weight & FaceWeight(int index)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b3_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk_\b:_\b:_\b~_\bL_\bo_\bc_\ba_\bl_\bM_\ba_\bs_\bk\n+~LocalMask()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b2_\b1_\b6\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bs_\bd_\bc\n- * _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\n+ * _\bs_\bc_\bh_\be_\bm_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00776.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00776.html", "unified_diff": "@@ -93,15 +93,15 @@\n
    \n \n
    loopScheme.h File Reference
    \n
    \n
    \n
    #include "../version.h"
    \n-#include "../sdc/scheme.h"
    \n+#include "../sdc/scheme.h"
    \n #include <cassert>
    \n #include <cmath>
    \n
    \n

    Go to the source code of this file.

    \n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00776_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00776_source.html", "unified_diff": "@@ -700,26 +700,26 @@\n
    577
    \n
    578} // end namespace Sdc
    \n
    579} // end namespace OPENSUBDIV_VERSION
    \n
    580using namespace OPENSUBDIV_VERSION;
    \n
    581} // end namespace OpenSubdiv
    \n
    582
    \n
    583#endif /* OPENSUBDIV3_SDC_LOOP_SCHEME_H */
    \n-\n+\n
    Split
    Enumerated type for all face splitting schemes.
    Definition types.h:47
    \n \n
    void assignSmoothMaskForEdge(EDGE const &edge, MASK &mask) const
    \n \n
    void assignCreaseMaskForVertex(VERTEX const &edge, MASK &mask, int const creaseEnds[2]) const
    \n
    void assignCreaseLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK &tan2, int const creaseEnds[2]) const
    \n \n-
    void assignCreaseMaskForEdge(EDGE const &edge, MASK &mask) const
    Definition scheme.h:317
    \n+
    void assignCreaseMaskForEdge(EDGE const &edge, MASK &mask) const
    Definition scheme.h:317
    \n
    void assignSmoothLimitMask(VERTEX const &vertex, MASK &pos) const
    \n \n-
    void assignCornerMaskForVertex(VERTEX const &edge, MASK &mask) const
    Definition scheme.h:331
    \n+
    void assignCornerMaskForVertex(VERTEX const &edge, MASK &mask) const
    Definition scheme.h:331
    \n
    void assignCreaseLimitMask(VERTEX const &vertex, MASK &pos, int const creaseEnds[2]) const
    \n
    void assignSmoothMaskForVertex(VERTEX const &edge, MASK &mask) const
    \n \n
    void assignSmoothLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK &tan2) const
    \n
    void assignCornerLimitMask(VERTEX const &vertex, MASK &pos) const
    \n
    void assignCornerLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK &tan2) const
    \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00779.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00779.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/sdc/crease.h File Reference\n+OpenSubdiv: opensubdiv/sdc/bilinearScheme.h File Reference\n \n \n \n \n \n \n \n@@ -88,43 +88,36 @@\n \n \n \n \n \n
    \n \n-
    crease.h File Reference
    \n+
    bilinearScheme.h File Reference
    \n
    \n
    \n
    #include "../version.h"
    \n-#include "../sdc/options.h"
    \n+#include "../sdc/scheme.h"
    \n
    \n

    Go to the source code of this file.

    \n

    \n Namespaces

    \n-\n-\n-\n-\n-

    \n-Classes

    class  Crease
     Types, constants and utilities related to semi-sharp creasing – whose implementation is independent of the subdivision scheme. More...
     
    \n \n \n \n \n \n \n \n

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Sdc
     
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +1,20 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-crease.h File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+bilinearScheme.h File Reference\n #include \"../version.h\"\n-#include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\"\n+#include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bs_\bc_\bh_\be_\bm_\be_\b._\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bC_\br_\be_\ba_\bs_\be\n-\u00a0 Types, constants and utilities related to semi-sharp creasing \u2013 whose\n- implementation is independent of the subdivision scheme. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bs_\bd_\bc\n- * _\bc_\br_\be_\ba_\bs_\be_\b._\bh\n+ * _\bb_\bi_\bl_\bi_\bn_\be_\ba_\br_\bS_\bc_\bh_\be_\bm_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00779_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00779_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/sdc/crease.h Source File\n+OpenSubdiv: opensubdiv/sdc/bilinearScheme.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
    No Matches
    \n
    \n
    \n
    \n
    \n \n
    \n-
    crease.h
    \n+
    bilinearScheme.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n
    2// Copyright 2014 DreamWorks Animation LLC.
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n@@ -118,221 +118,193 @@\n
    17//
    \n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n-
    24#ifndef OPENSUBDIV3_SDC_CREASE_H
    \n-
    25#define OPENSUBDIV3_SDC_CREASE_H
    \n+
    24#ifndef OPENSUBDIV3_SDC_BILINEAR_SCHEME_H
    \n+
    25#define OPENSUBDIV3_SDC_BILINEAR_SCHEME_H
    \n
    26
    \n
    27#include "../version.h"
    \n
    28
    \n-
    29#include "../sdc/options.h"
    \n+
    29#include "../sdc/scheme.h"
    \n
    30
    \n
    31namespace OpenSubdiv {
    \n
    32namespace OPENSUBDIV_VERSION {
    \n
    33
    \n-
    34namespace Sdc {
    \n+
    \n+
    34namespace Sdc {
    \n
    35
    \n-
    61
    \n-
    \n-
    62class Crease {
    \n-
    63public:
    \n-
    65
    \n-
    67 static float const SHARPNESS_SMOOTH; // = 0.0f, do we really need this?
    \n-
    68 static float const SHARPNESS_INFINITE; // = 10.0f;
    \n-
    69
    \n-
    70 static bool IsSmooth(float sharpness) { return sharpness <= SHARPNESS_SMOOTH; }
    \n-
    71 static bool IsSharp(float sharpness) { return sharpness > SHARPNESS_SMOOTH; }
    \n-
    72 static bool IsInfinite(float sharpness) { return sharpness >= SHARPNESS_INFINITE; }
    \n-
    73 static bool IsSemiSharp(float sharpness) { return (SHARPNESS_SMOOTH < sharpness) && (sharpness < SHARPNESS_INFINITE); }
    \n-
    75
    \n-
    \n-
    82 enum Rule {
    \n-\n-
    84 RULE_SMOOTH = (1 << 0),
    \n-
    85 RULE_DART = (1 << 1),
    \n-
    86 RULE_CREASE = (1 << 2),
    \n-
    87 RULE_CORNER = (1 << 3)
    \n-
    88 };
    \n-
    \n-
    89
    \n-
    90public:
    \n-
    91 Crease() : _options() { }
    \n-
    92 Crease(Options const& options) : _options(options) { }
    \n-
    93 ~Crease() { }
    \n-
    94
    \n-
    95 bool IsUniform() const { return _options.GetCreasingMethod() == Options::CREASE_UNIFORM; }
    \n-
    96
    \n-
    98
    \n-
    104 float SharpenBoundaryEdge(float edgeSharpness) const;
    \n-
    105 float SharpenBoundaryVertex(float edgeSharpness) const;
    \n-
    106
    \n-
    107 // For future consideration
    \n-
    108 //float SharpenNonManifoldEdge(float edgeSharpness) const;
    \n-
    109 //float SharpenNonManifoldVertex(float edgeSharpness) const;
    \n-
    111
    \n-
    113
    \n-
    124 float SubdivideUniformSharpness(float vertexOrEdgeSharpness) const;
    \n+
    36//
    \n+
    37// Specializations for Scheme<SCHEME_BILINEAR>:
    \n+
    38//
    \n+
    39
    \n+
    40//
    \n+
    41// Bilinear traits:
    \n+
    42//
    \n+
    43template <>
    \n+\n+
    45
    \n+
    46template <>
    \n+\n+
    48
    \n+
    49template <>
    \n+\n+
    51
    \n+
    52template <>
    \n+\n+
    54
    \n+
    55
    \n+
    56//
    \n+
    57// Refinement masks:
    \n+
    58//
    \n+
    59template <>
    \n+
    60template <typename EDGE, typename MASK>
    \n+
    61void
    \n+
    \n+\n+\n+
    64 // This should be inline, otherwise trivially replicate it:
    \n+
    65 assignCreaseMaskForEdge(edge, mask);
    \n+
    66}
    \n+
    \n+
    67
    \n+
    68template <>
    \n+
    69template <typename VERTEX, typename MASK>
    \n+
    70void
    \n+
    \n+
    71Scheme<SCHEME_BILINEAR>::ComputeVertexVertexMask(VERTEX const& vertex, MASK& mask,
    \n+\n+
    73 // This should be inline, otherwise trivially replicate it:
    \n+
    74 assignCornerMaskForVertex(vertex, mask);
    \n+
    75}
    \n+
    \n+
    76
    \n+
    77
    \n+
    78//
    \n+
    79// Limit masks for position -- the limit position of all vertices is the refined vertex.
    \n+
    80//
    \n+
    81template <>
    \n+
    82template <typename VERTEX, typename MASK>
    \n+
    83inline void
    \n+
    \n+
    84Scheme<SCHEME_BILINEAR>::assignCornerLimitMask(VERTEX const& /* vertex */, MASK& posMask) const {
    \n+
    85
    \n+
    86 posMask.SetNumVertexWeights(1);
    \n+
    87 posMask.SetNumEdgeWeights(0);
    \n+
    88 posMask.SetNumFaceWeights(0);
    \n+
    89 posMask.SetFaceWeightsForFaceCenters(false);
    \n+
    90
    \n+
    91 posMask.VertexWeight(0) = 1.0f;
    \n+
    92}
    \n+
    \n+
    93
    \n+
    94template <>
    \n+
    95template <typename VERTEX, typename MASK>
    \n+
    96inline void
    \n+
    \n+
    97Scheme<SCHEME_BILINEAR>::assignCreaseLimitMask(VERTEX const& vertex, MASK& posMask,
    \n+
    98 int const /* creaseEnds */[2]) const {
    \n+
    99
    \n+
    100 assignCornerLimitMask(vertex, posMask);
    \n+
    101}
    \n+
    \n+
    102
    \n+
    103template <>
    \n+
    104template <typename VERTEX, typename MASK>
    \n+
    105inline void
    \n+
    \n+
    106Scheme<SCHEME_BILINEAR>::assignSmoothLimitMask(VERTEX const& vertex, MASK& posMask) const {
    \n+
    107
    \n+
    108 assignCornerLimitMask(vertex, posMask);
    \n+
    109}
    \n+
    \n+
    110
    \n+
    111//
    \n+
    112// Limit masks for tangents -- these are ambiguous around all vertices. Provide
    \n+
    113// the tangents based on the incident edges of the first face.
    \n+
    114//
    \n+
    115template <>
    \n+
    116template <typename VERTEX, typename MASK>
    \n+
    117inline void
    \n+
    \n+\n+
    119 MASK& tan1Mask, MASK& tan2Mask) const {
    \n+
    120
    \n+
    121 tan1Mask.SetNumVertexWeights(1);
    \n+
    122 tan1Mask.SetNumEdgeWeights(2);
    \n+
    123 tan1Mask.SetNumFaceWeights(0);
    \n+
    124 tan1Mask.SetFaceWeightsForFaceCenters(false);
    \n
    125
    \n-
    126 float SubdivideVertexSharpness(float vertexSharpness) const;
    \n-
    127
    \n-
    128 float SubdivideEdgeSharpnessAtVertex(float edgeSharpness,
    \n-
    129 int incidentEdgeCountAtEndVertex,
    \n-
    130 float const* edgeSharpnessAroundEndVertex) const;
    \n-
    131
    \n-
    132 void SubdivideEdgeSharpnessesAroundVertex(int incidentEdgeCountAtVertex,
    \n-
    133 float const* incidentEdgeSharpnessAroundVertex,
    \n-
    134 float* childEdgesSharpnessAroundVertex) const;
    \n-
    136
    \n-
    138
    \n-
    144 Rule DetermineVertexVertexRule(float vertexSharpness,
    \n-
    145 int incidentEdgeCount,
    \n-
    146 float const* incidentEdgeSharpness) const;
    \n-
    147 Rule DetermineVertexVertexRule(float vertexSharpness,
    \n-
    148 int sharpEdgeCount) const;
    \n-
    150
    \n-
    162 float ComputeFractionalWeightAtVertex(float vertexSharpness,
    \n-
    163 float childVertexSharpness,
    \n-
    164 int incidentEdgeCount,
    \n-
    165 float const* incidentEdgeSharpness,
    \n-
    166 float const* childEdgesSharpness) const;
    \n-
    167
    \n-
    168 void GetSharpEdgePairOfCrease(float const * incidentEdgeSharpness,
    \n-
    169 int incidentEdgeCount,
    \n-
    170 int sharpEdgePair[2]) const;
    \n-
    171
    \n-
    172 // Would these really help? Maybe only need Rules for the vertex-vertex case...
    \n-
    173 //
    \n-
    174 // Rule DetermineEdgeVertexRule(float parentEdgeSharpness) const;
    \n-
    175 // Rule DetermineEdgeVertexRule(float childEdge1Sharpness, float childEdge2Sharpness) const;
    \n-
    176
    \n-
    177protected:
    \n-
    178 float decrementSharpness(float sharpness) const;
    \n-
    179
    \n-
    180private:
    \n-
    181 Options _options;
    \n-
    182};
    \n-
    \n-
    183
    \n-
    184
    \n-
    185//
    \n-
    186// Inline declarations:
    \n-
    187//
    \n-
    188inline float
    \n-
    \n-
    189Crease::SharpenBoundaryEdge(float /* edgeSharpness */) const {
    \n-
    190
    \n-
    191 //
    \n-
    192 // Despite the presence of the BOUNDARY_NONE option, boundary edges are always sharpened.
    \n-
    193 // Much of the code relies on sharpness to indicate boundaries to avoid the more complex
    \n-
    194 // topological inspection
    \n-
    195 //
    \n-
    196 return SHARPNESS_INFINITE;
    \n-
    197}
    \n-
    \n-
    198
    \n-
    199inline float
    \n-
    \n-
    200Crease::SharpenBoundaryVertex(float vertexSharpness) const {
    \n-
    201
    \n-\n-
    203 SHARPNESS_INFINITE : vertexSharpness;
    \n-
    204}
    \n-
    \n-
    205
    \n-
    206inline float
    \n-
    \n-
    207Crease::decrementSharpness(float sharpness) const {
    \n-
    208
    \n-
    209 if (IsSmooth(sharpness)) return Crease::SHARPNESS_SMOOTH; // redundant but most common
    \n-
    210 if (IsInfinite(sharpness)) return Crease::SHARPNESS_INFINITE;
    \n-
    211 if (sharpness > 1.0f) return (sharpness - 1.0f);
    \n-\n-
    213}
    \n-
    \n-
    214
    \n-
    215inline float
    \n-
    \n-
    216Crease::SubdivideUniformSharpness(float vertexOrEdgeSharpness) const {
    \n-
    217
    \n-
    218 return decrementSharpness(vertexOrEdgeSharpness);
    \n-
    219}
    \n-
    \n-
    220
    \n-
    221inline float
    \n-
    \n-
    222Crease::SubdivideVertexSharpness(float vertexSharpness) const {
    \n-
    223
    \n-
    224 return decrementSharpness(vertexSharpness);
    \n-
    225}
    \n-
    \n-
    226
    \n-
    227inline void
    \n-
    \n-
    228Crease::GetSharpEdgePairOfCrease(float const * incidentEdgeSharpness, int incidentEdgeCount,
    \n-
    229 int sharpEdgePair[2]) const {
    \n-
    230
    \n-
    231 // Only to be called when a crease is present at a vertex -- exactly two sharp
    \n-
    232 // edges are expected here:
    \n-
    233 //
    \n-
    234 sharpEdgePair[0] = 0;
    \n-
    235 while (IsSmooth(incidentEdgeSharpness[sharpEdgePair[0]])) ++ sharpEdgePair[0];
    \n-
    236
    \n-
    237 sharpEdgePair[1] = incidentEdgeCount - 1;
    \n-
    238 while (IsSmooth(incidentEdgeSharpness[sharpEdgePair[1]])) -- sharpEdgePair[1];
    \n-
    239}
    \n-
    \n-
    240
    \n-
    241} // end namespace sdc
    \n-
    242
    \n-
    243} // end namespace OPENSUBDIV_VERSION
    \n-
    244using namespace OPENSUBDIV_VERSION;
    \n-
    245} // end namespace OpenSubdiv
    \n-
    246
    \n-
    247#endif /* OPENSUBDIV3_SDC_CREASE_H */
    \n-\n-
    Types, constants and utilities related to semi-sharp creasing \u2013 whose implementation is independent o...
    Definition crease.h:62
    \n-
    float SubdivideVertexSharpness(float vertexSharpness) const
    Definition crease.h:222
    \n-
    static bool IsInfinite(float sharpness)
    Definition crease.h:72
    \n-\n-\n-\n-\n-\n-\n-
    float SharpenBoundaryVertex(float edgeSharpness) const
    Definition crease.h:200
    \n-\n-
    void GetSharpEdgePairOfCrease(float const *incidentEdgeSharpness, int incidentEdgeCount, int sharpEdgePair[2]) const
    Definition crease.h:228
    \n-\n-
    Rule DetermineVertexVertexRule(float vertexSharpness, int incidentEdgeCount, float const *incidentEdgeSharpness) const
    \n-
    float decrementSharpness(float sharpness) const
    Definition crease.h:207
    \n-
    static bool IsSmooth(float sharpness)
    Definition crease.h:70
    \n-
    Rule DetermineVertexVertexRule(float vertexSharpness, int sharpEdgeCount) const
    \n-\n-
    static bool IsSemiSharp(float sharpness)
    Definition crease.h:73
    \n-\n-
    void SubdivideEdgeSharpnessesAroundVertex(int incidentEdgeCountAtVertex, float const *incidentEdgeSharpnessAroundVertex, float *childEdgesSharpnessAroundVertex) const
    \n-
    float SubdivideUniformSharpness(float vertexOrEdgeSharpness) const
    Definition crease.h:216
    \n-\n-
    float SharpenBoundaryEdge(float edgeSharpness) const
    Definition crease.h:189
    \n-
    float ComputeFractionalWeightAtVertex(float vertexSharpness, float childVertexSharpness, int incidentEdgeCount, float const *incidentEdgeSharpness, float const *childEdgesSharpness) const
    Transitional weighting: When the rules applicable to a parent vertex and its child differ,...
    \n-
    float SubdivideEdgeSharpnessAtVertex(float edgeSharpness, int incidentEdgeCountAtEndVertex, float const *edgeSharpnessAroundEndVertex) const
    \n-
    static bool IsSharp(float sharpness)
    Definition crease.h:71
    \n-\n-
    All supported options applying to subdivision scheme.
    Definition options.h:51
    \n-\n-
    CreasingMethod GetCreasingMethod() const
    Get edge crease rule.
    Definition options.h:101
    \n-
    VtxBoundaryInterpolation GetVtxBoundaryInterpolation() const
    Get vertex boundary interpolation rule.
    Definition options.h:89
    \n-\n+
    126 tan2Mask.SetNumVertexWeights(1);
    \n+
    127 tan2Mask.SetNumEdgeWeights(2);
    \n+
    128 tan2Mask.SetNumFaceWeights(0);
    \n+
    129 tan2Mask.SetFaceWeightsForFaceCenters(false);
    \n+
    130
    \n+
    131 tan1Mask.VertexWeight(0) = -1.0f;
    \n+
    132 tan1Mask.EdgeWeight(0) = 1.0f;
    \n+
    133 tan1Mask.EdgeWeight(1) = 0.0f;
    \n+
    134
    \n+
    135 tan2Mask.VertexWeight(0) = -1.0f;
    \n+
    136 tan2Mask.EdgeWeight(0) = 0.0f;
    \n+
    137 tan2Mask.EdgeWeight(1) = 1.0f;
    \n+
    138}
    \n+
    \n+
    139
    \n+
    140template <>
    \n+
    141template <typename VERTEX, typename MASK>
    \n+
    142inline void
    \n+
    \n+\n+
    144 MASK& tan1Mask, MASK& tan2Mask, int const /* creaseEnds */[2]) const {
    \n+
    145
    \n+
    146 assignCornerLimitTangentMasks(vertex, tan1Mask, tan2Mask);
    \n+
    147}
    \n+
    \n+
    148
    \n+
    149template <>
    \n+
    150template <typename VERTEX, typename MASK>
    \n+
    151inline void
    \n+
    \n+\n+
    153 MASK& tan1Mask, MASK& tan2Mask) const {
    \n+
    154
    \n+
    155 assignCornerLimitTangentMasks(vertex, tan1Mask, tan2Mask);
    \n+
    156}
    \n+
    \n+
    157
    \n+
    158} // end namespace sdc
    \n+
    \n+
    159
    \n+
    160} // end namespace OPENSUBDIV_VERSION
    \n+
    161using namespace OPENSUBDIV_VERSION;
    \n+
    162} // end namespace OpenSubdiv
    \n+
    163
    \n+
    164#endif /* OPENSUBDIV3_SDC_BILINEAR_SCHEME_H */
    \n+\n+
    Split
    Enumerated type for all face splitting schemes.
    Definition types.h:47
    \n+
    @ SPLIT_TO_QUADS
    Used by Catmark and Bilinear.
    Definition types.h:48
    \n+\n+\n+
    void ComputeVertexVertexMask(VERTEX const &vertexNeighborhood, MASK &vertexVertexMask, Crease::Rule parentRule=Crease::RULE_UNKNOWN, Crease::Rule childRule=Crease::RULE_UNKNOWN) const
    Vertex-vertex masks If known, a single Rule or pair of Rules can be specified (indicating a crease tr...
    Definition scheme.h:512
    \n+
    void assignCreaseLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK &tan2, int const creaseEnds[2]) const
    \n+\n+
    void ComputeEdgeVertexMask(EDGE const &edgeNeighborhood, MASK &edgeVertexMask, Crease::Rule parentRule=Crease::RULE_UNKNOWN, Crease::Rule childRule=Crease::RULE_UNKNOWN) const
    Edge-vertex masks If known, the Rule for the edge and/or the derived vertex can be specified to accel...
    Definition scheme.h:392
    \n+
    void assignSmoothLimitMask(VERTEX const &vertex, MASK &pos) const
    \n+\n+
    void assignCreaseLimitMask(VERTEX const &vertex, MASK &pos, int const creaseEnds[2]) const
    \n+\n+
    void assignSmoothLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK &tan2) const
    \n+
    void assignCornerLimitMask(VERTEX const &vertex, MASK &pos) const
    \n+
    void assignCornerLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK &tan2) const
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-utf-8\n+us-ascii\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-crease.h\n+bilinearScheme.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2014 DreamWorks Animation LLC.\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -23,289 +23,211 @@\n 17//\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n-24#ifndef OPENSUBDIV3_SDC_CREASE_H\n-25#define OPENSUBDIV3_SDC_CREASE_H\n+24#ifndef OPENSUBDIV3_SDC_BILINEAR_SCHEME_H\n+25#define OPENSUBDIV3_SDC_BILINEAR_SCHEME_H\n 26\n 27#include \"../version.h\"\n 28\n-29#include \"../sdc/options.h\"\n+29#include \"../sdc/scheme.h\"\n 30\n 31namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n 32namespace OPENSUBDIV_VERSION {\n 33\n-34namespace Sdc {\n+_\b3_\b4namespace Sdc {\n 35\n-61\n-_\b6_\b2class _\bC_\br_\be_\ba_\bs_\be {\n-63public:\n-65\n-_\b6_\b7 static float const _\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bS_\bM_\bO_\bO_\bT_\bH; // = 0.0f, do we really need this?\n-_\b6_\b8 static float const _\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bI_\bN_\bF_\bI_\bN_\bI_\bT_\bE; // = 10.0f;\n-69\n-_\b7_\b0 static bool _\bI_\bs_\bS_\bm_\bo_\bo_\bt_\bh(float sharpness) { return sharpness <=\n-_\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bS_\bM_\bO_\bO_\bT_\bH; }\n-_\b7_\b1 static bool _\bI_\bs_\bS_\bh_\ba_\br_\bp(float sharpness) { return sharpness > _\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bS_\bM_\bO_\bO_\bT_\bH;\n-}\n-_\b7_\b2 static bool _\bI_\bs_\bI_\bn_\bf_\bi_\bn_\bi_\bt_\be(float sharpness) { return sharpness >=\n-_\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bI_\bN_\bF_\bI_\bN_\bI_\bT_\bE; }\n-_\b7_\b3 static bool _\bI_\bs_\bS_\be_\bm_\bi_\bS_\bh_\ba_\br_\bp(float sharpness) { return (_\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bS_\bM_\bO_\bO_\bT_\bH <\n-sharpness) && (sharpness < _\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bI_\bN_\bF_\bI_\bN_\bI_\bT_\bE); }\n-75\n-_\b8_\b2 enum _\bR_\bu_\bl_\be {\n-_\b8_\b3 _\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN = 0,\n-_\b8_\b4 _\bR_\bU_\bL_\bE_\b__\bS_\bM_\bO_\bO_\bT_\bH = (1 << 0),\n-_\b8_\b5 _\bR_\bU_\bL_\bE_\b__\bD_\bA_\bR_\bT = (1 << 1),\n-_\b8_\b6 _\bR_\bU_\bL_\bE_\b__\bC_\bR_\bE_\bA_\bS_\bE = (1 << 2),\n-87 _\bR_\bU_\bL_\bE_\b__\bC_\bO_\bR_\bN_\bE_\bR = (1 << 3)\n-_\b8_\b8 };\n-89\n-90public:\n-_\b9_\b1 _\bC_\br_\be_\ba_\bs_\be() : _options() { }\n-_\b9_\b2 _\bC_\br_\be_\ba_\bs_\be(_\bO_\bp_\bt_\bi_\bo_\bn_\bs const& options) : _options(options) { }\n-_\b9_\b3 _\b~_\bC_\br_\be_\ba_\bs_\be() { }\n-94\n-_\b9_\b5 bool _\bI_\bs_\bU_\bn_\bi_\bf_\bo_\br_\bm() const { return _options._\bG_\be_\bt_\bC_\br_\be_\ba_\bs_\bi_\bn_\bg_\bM_\be_\bt_\bh_\bo_\bd() == _\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bC_\bR_\bE_\bA_\bS_\bE_\b__\bU_\bN_\bI_\bF_\bO_\bR_\bM; }\n-96\n-98\n-104 float _\bS_\bh_\ba_\br_\bp_\be_\bn_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bE_\bd_\bg_\be(float edgeSharpness) const;\n-105 float _\bS_\bh_\ba_\br_\bp_\be_\bn_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bV_\be_\br_\bt_\be_\bx(float edgeSharpness) const;\n-106\n-107 // For future consideration\n-108 //float SharpenNonManifoldEdge(float edgeSharpness) const;\n-109 //float SharpenNonManifoldVertex(float edgeSharpness) const;\n-111\n-113\n-124 float _\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bd_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(float vertexOrEdgeSharpness) const;\n+36//\n+37// Specializations for Scheme:\n+38//\n+39\n+40//\n+41// Bilinear traits:\n+42//\n+43template <>\n+_\b4_\b4inline _\bS_\bp_\bl_\bi_\bt _\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b>_\b:_\b:_\bG_\be_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\bi_\bc_\ba_\bl_\bS_\bp_\bl_\bi_\bt_\bT_\by_\bp_\be() { return\n+_\bS_\bP_\bL_\bI_\bT_\b__\bT_\bO_\b__\bQ_\bU_\bA_\bD_\bS; }\n+45\n+46template <>\n+_\b4_\b7inline int _\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b>_\b:_\b:_\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be() { return 4; }\n+48\n+49template <>\n+_\b5_\b0inline int _\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b>_\b:_\b:_\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be() { return 4; }\n+51\n+52template <>\n+_\b5_\b3inline int _\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b>_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bN_\be_\bi_\bg_\bh_\bb_\bo_\br_\bh_\bo_\bo_\bd_\bS_\bi_\bz_\be() { return 0; }\n+54\n+55\n+56//\n+57// Refinement masks:\n+58//\n+59template <>\n+60template \n+61void\n+_\b6_\b2_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bd_\bg_\be_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk(EDGE const& edge, MASK& mask,\n+63 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be, _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be) const {\n+64 // This should be inline, otherwise trivially replicate it:\n+65 assignCreaseMaskForEdge(edge, mask);\n+66}\n+67\n+68template <>\n+69template \n+70void\n+_\b7_\b1_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk(VERTEX const& vertex, MASK&\n+mask,\n+72 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be, _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be) const {\n+73 // This should be inline, otherwise trivially replicate it:\n+74 assignCornerMaskForVertex(vertex, mask);\n+75}\n+76\n+77\n+78//\n+79// Limit masks for position -- the limit position of all vertices is the\n+refined vertex.\n+80//\n+81template <>\n+82template \n+83inline void\n+_\b8_\b4_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& /* vertex */,\n+MASK& posMask) const {\n+85\n+86 posMask.SetNumVertexWeights(1);\n+87 posMask.SetNumEdgeWeights(0);\n+88 posMask.SetNumFaceWeights(0);\n+89 posMask.SetFaceWeightsForFaceCenters(false);\n+90\n+91 posMask.VertexWeight(0) = 1.0f;\n+92}\n+93\n+94template <>\n+95template \n+96inline void\n+_\b9_\b7_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& vertex, MASK&\n+posMask,\n+98 int const /* creaseEnds */[2]) const {\n+99\n+100 assignCornerLimitMask(vertex, posMask);\n+101}\n+102\n+103template <>\n+104template \n+105inline void\n+_\b1_\b0_\b6_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& vertex, MASK&\n+posMask) const {\n+107\n+108 assignCornerLimitMask(vertex, posMask);\n+109}\n+110\n+111//\n+112// Limit masks for tangents -- these are ambiguous around all vertices.\n+Provide\n+113// the tangents based on the incident edges of the first face.\n+114//\n+115template <>\n+116template \n+117inline void\n+_\b1_\b1_\b8_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs(VERTEX const& /\n+* vertex */,\n+119 MASK& tan1Mask, MASK& tan2Mask) const {\n+120\n+121 tan1Mask.SetNumVertexWeights(1);\n+122 tan1Mask.SetNumEdgeWeights(2);\n+123 tan1Mask.SetNumFaceWeights(0);\n+124 tan1Mask.SetFaceWeightsForFaceCenters(false);\n 125\n-126 float _\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bd_\be_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(float vertexSharpness) const;\n-127\n-_\b1_\b2_\b8 float _\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bd_\be_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bA_\bt_\bV_\be_\br_\bt_\be_\bx(float edgeSharpness,\n-129 int incidentEdgeCountAtEndVertex,\n-130 float const* edgeSharpnessAroundEndVertex) const;\n-131\n-_\b1_\b3_\b2 void _\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bd_\be_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\be_\bs_\bA_\br_\bo_\bu_\bn_\bd_\bV_\be_\br_\bt_\be_\bx(int incidentEdgeCountAtVertex,\n-133 float const* incidentEdgeSharpnessAroundVertex,\n-134 float* childEdgesSharpnessAroundVertex) const;\n-136\n-138\n-_\b1_\b4_\b4 _\bR_\bu_\bl_\be _\bD_\be_\bt_\be_\br_\bm_\bi_\bn_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bR_\bu_\bl_\be(float vertexSharpness,\n-145 int incidentEdgeCount,\n-146 float const* incidentEdgeSharpness) const;\n-_\b1_\b4_\b7 _\bR_\bu_\bl_\be _\bD_\be_\bt_\be_\br_\bm_\bi_\bn_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bR_\bu_\bl_\be(float vertexSharpness,\n-148 int sharpEdgeCount) const;\n-150\n-_\b1_\b6_\b2 float _\bC_\bo_\bm_\bp_\bu_\bt_\be_\bF_\br_\ba_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bW_\be_\bi_\bg_\bh_\bt_\bA_\bt_\bV_\be_\br_\bt_\be_\bx(float vertexSharpness,\n-163 float childVertexSharpness,\n-164 int incidentEdgeCount,\n-165 float const* incidentEdgeSharpness,\n-166 float const* childEdgesSharpness) const;\n-167\n-168 void _\bG_\be_\bt_\bS_\bh_\ba_\br_\bp_\bE_\bd_\bg_\be_\bP_\ba_\bi_\br_\bO_\bf_\bC_\br_\be_\ba_\bs_\be(float const * incidentEdgeSharpness,\n-169 int incidentEdgeCount,\n-170 int sharpEdgePair[2]) const;\n-171\n-172 // Would these really help? Maybe only need Rules for the vertex-vertex\n-case...\n-173 //\n-174 // Rule DetermineEdgeVertexRule(float parentEdgeSharpness) const;\n-175 // Rule DetermineEdgeVertexRule(float childEdge1Sharpness, float\n-childEdge2Sharpness) const;\n-176\n-177protected:\n-178 float _\bd_\be_\bc_\br_\be_\bm_\be_\bn_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(float sharpness) const;\n-179\n-180private:\n-181 _\bO_\bp_\bt_\bi_\bo_\bn_\bs _options;\n-182};\n-183\n-184\n-185//\n-186// Inline declarations:\n-187//\n-188inline float\n-_\b1_\b8_\b9_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bh_\ba_\br_\bp_\be_\bn_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bE_\bd_\bg_\be(float /* edgeSharpness */) const {\n-190\n-191 //\n-192 // Despite the presence of the BOUNDARY_NONE option, boundary edges are\n-always sharpened.\n-193 // Much of the code relies on sharpness to indicate boundaries to avoid the\n-more complex\n-194 // topological inspection\n-195 //\n-196 return _\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bI_\bN_\bF_\bI_\bN_\bI_\bT_\bE;\n-197}\n-198\n-199inline float\n-_\b2_\b0_\b0_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bh_\ba_\br_\bp_\be_\bn_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bV_\be_\br_\bt_\be_\bx(float vertexSharpness) const {\n-201\n-202 return (_options._\bG_\be_\bt_\bV_\bt_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn() == _\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bV_\bT_\bX_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY_\b__\bE_\bD_\bG_\bE_\b__\bA_\bN_\bD_\b__\bC_\bO_\bR_\bN_\bE_\bR) ?\n-203 _\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bI_\bN_\bF_\bI_\bN_\bI_\bT_\bE : vertexSharpness;\n-204}\n-205\n-206inline float\n-_\b2_\b0_\b7_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bd_\be_\bc_\br_\be_\bm_\be_\bn_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(float sharpness) const {\n-208\n-209 if (_\bI_\bs_\bS_\bm_\bo_\bo_\bt_\bh(sharpness)) return _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bS_\bM_\bO_\bO_\bT_\bH; // redundant but\n-most common\n-210 if (_\bI_\bs_\bI_\bn_\bf_\bi_\bn_\bi_\bt_\be(sharpness)) return _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bI_\bN_\bF_\bI_\bN_\bI_\bT_\bE;\n-211 if (sharpness > 1.0f) return (sharpness - 1.0f);\n-212 return _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bS_\bM_\bO_\bO_\bT_\bH;\n-213}\n-214\n-215inline float\n-_\b2_\b1_\b6_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bd_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(float vertexOrEdgeSharpness) const {\n-217\n-218 return _\bd_\be_\bc_\br_\be_\bm_\be_\bn_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(vertexOrEdgeSharpness);\n-219}\n-220\n-221inline float\n-_\b2_\b2_\b2_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bd_\be_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(float vertexSharpness) const {\n-223\n-224 return _\bd_\be_\bc_\br_\be_\bm_\be_\bn_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(vertexSharpness);\n-225}\n-226\n-227inline void\n-_\b2_\b2_\b8_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bG_\be_\bt_\bS_\bh_\ba_\br_\bp_\bE_\bd_\bg_\be_\bP_\ba_\bi_\br_\bO_\bf_\bC_\br_\be_\ba_\bs_\be(float const * incidentEdgeSharpness, int\n-incidentEdgeCount,\n-229 int sharpEdgePair[2]) const {\n-230\n-231 // Only to be called when a crease is present at a vertex -- exactly two\n-sharp\n-232 // edges are expected here:\n-233 //\n-234 sharpEdgePair[0] = 0;\n-235 while (_\bI_\bs_\bS_\bm_\bo_\bo_\bt_\bh(incidentEdgeSharpness[sharpEdgePair[0]])) ++ sharpEdgePair\n-[0];\n-236\n-237 sharpEdgePair[1] = incidentEdgeCount - 1;\n-238 while (_\bI_\bs_\bS_\bm_\bo_\bo_\bt_\bh(incidentEdgeSharpness[sharpEdgePair[1]])) -- sharpEdgePair\n-[1];\n-239}\n-240\n-241} // end namespace sdc\n-242\n-243} // end namespace OPENSUBDIV_VERSION\n-244using namespace OPENSUBDIV_VERSION;\n-245} // end namespace OpenSubdiv\n-246\n-247#endif /* OPENSUBDIV3_SDC_CREASE_H */\n+126 tan2Mask.SetNumVertexWeights(1);\n+127 tan2Mask.SetNumEdgeWeights(2);\n+128 tan2Mask.SetNumFaceWeights(0);\n+129 tan2Mask.SetFaceWeightsForFaceCenters(false);\n+130\n+131 tan1Mask.VertexWeight(0) = -1.0f;\n+132 tan1Mask.EdgeWeight(0) = 1.0f;\n+133 tan1Mask.EdgeWeight(1) = 0.0f;\n+134\n+135 tan2Mask.VertexWeight(0) = -1.0f;\n+136 tan2Mask.EdgeWeight(0) = 0.0f;\n+137 tan2Mask.EdgeWeight(1) = 1.0f;\n+138}\n+139\n+140template <>\n+141template \n+142inline void\n+_\b1_\b4_\b3_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs(VERTEX const& vertex,\n+144 MASK& tan1Mask, MASK& tan2Mask, int const /* creaseEnds */[2]) const {\n+145\n+146 assignCornerLimitTangentMasks(vertex, tan1Mask, tan2Mask);\n+147}\n+148\n+149template <>\n+150template \n+151inline void\n+_\b1_\b5_\b2_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs(VERTEX const& vertex,\n+153 MASK& tan1Mask, MASK& tan2Mask) const {\n+154\n+155 assignCornerLimitTangentMasks(vertex, tan1Mask, tan2Mask);\n+156}\n+157\n+158} // end namespace sdc\n+159\n+160} // end namespace OPENSUBDIV_VERSION\n+161using namespace OPENSUBDIV_VERSION;\n+162} // end namespace OpenSubdiv\n+163\n+164#endif /* OPENSUBDIV3_SDC_BILINEAR_SCHEME_H */\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be\n-Types, constants and utilities related to semi-sharp creasing \u00e2\u0080\u0093 whose\n-implementation is independent o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b6_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bd_\be_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n-float SubdivideVertexSharpness(float vertexSharpness) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b2_\b2_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bI_\bs_\bI_\bn_\bf_\bi_\bn_\bi_\bt_\be\n-static bool IsInfinite(float sharpness)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b7_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bp_\bl_\bi_\bt\n+Split\n+Enumerated type for all face splitting schemes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b4_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bP_\bL_\bI_\bT_\b__\bT_\bO_\b__\bQ_\bU_\bA_\bD_\bS\n+@ SPLIT_TO_QUADS\n+Used by Catmark and Bilinear.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b4_\b8\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be\n Rule\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bO_\bR_\bN_\bE_\bR\n-@ RULE_CORNER\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bD_\bA_\bR_\bT\n-@ RULE_DART\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bS_\bM_\bO_\bO_\bT_\bH\n-@ RULE_SMOOTH\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bR_\bE_\bA_\bS_\bE\n-@ RULE_CREASE\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN\n-@ RULE_UNKNOWN\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bh_\ba_\br_\bp_\be_\bn_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bV_\be_\br_\bt_\be_\bx\n-float SharpenBoundaryVertex(float edgeSharpness) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b2_\b0_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bS_\bM_\bO_\bO_\bT_\bH\n-static float const SHARPNESS_SMOOTH\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b6_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bG_\be_\bt_\bS_\bh_\ba_\br_\bp_\bE_\bd_\bg_\be_\bP_\ba_\bi_\br_\bO_\bf_\bC_\br_\be_\ba_\bs_\be\n-void GetSharpEdgePairOfCrease(float const *incidentEdgeSharpness, int\n-incidentEdgeCount, int sharpEdgePair[2]) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b2_\b2_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bI_\bN_\bF_\bI_\bN_\bI_\bT_\bE\n-static float const SHARPNESS_INFINITE\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b6_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bD_\be_\bt_\be_\br_\bm_\bi_\bn_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bR_\bu_\bl_\be\n-Rule DetermineVertexVertexRule(float vertexSharpness, int incidentEdgeCount,\n-float const *incidentEdgeSharpness) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bd_\be_\bc_\br_\be_\bm_\be_\bn_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n-float decrementSharpness(float sharpness) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b2_\b0_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bI_\bs_\bS_\bm_\bo_\bo_\bt_\bh\n-static bool IsSmooth(float sharpness)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b7_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bD_\be_\bt_\be_\br_\bm_\bi_\bn_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bR_\bu_\bl_\be\n-Rule DetermineVertexVertexRule(float vertexSharpness, int sharpEdgeCount) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bI_\bs_\bU_\bn_\bi_\bf_\bo_\br_\bm\n-bool IsUniform() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b9_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bI_\bs_\bS_\be_\bm_\bi_\bS_\bh_\ba_\br_\bp\n-static bool IsSemiSharp(float sharpness)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b7_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bC_\br_\be_\ba_\bs_\be\n-Crease(Options const &options)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b9_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:\n-_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bd_\be_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\be_\bs_\bA_\br_\bo_\bu_\bn_\bd_\bV_\be_\br_\bt_\be_\bx\n-void SubdivideEdgeSharpnessesAroundVertex(int incidentEdgeCountAtVertex, float\n-const *incidentEdgeSharpnessAroundVertex, float\n-*childEdgesSharpnessAroundVertex) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bd_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n-float SubdivideUniformSharpness(float vertexOrEdgeSharpness) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b2_\b1_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bC_\br_\be_\ba_\bs_\be\n-Crease()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b9_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bh_\ba_\br_\bp_\be_\bn_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bE_\bd_\bg_\be\n-float SharpenBoundaryEdge(float edgeSharpness) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b1_\b8_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bF_\br_\ba_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bW_\be_\bi_\bg_\bh_\bt_\bA_\bt_\bV_\be_\br_\bt_\be_\bx\n-float ComputeFractionalWeightAtVertex(float vertexSharpness, float\n-childVertexSharpness, int incidentEdgeCount, float const\n-*incidentEdgeSharpness, float const *childEdgesSharpness) const\n-Transitional weighting: When the rules applicable to a parent vertex and its\n-child differ,...\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bd_\be_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bA_\bt_\bV_\be_\br_\bt_\be_\bx\n-float SubdivideEdgeSharpnessAtVertex(float edgeSharpness, int\n-incidentEdgeCountAtEndVertex, float const *edgeSharpnessAroundEndVertex) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bI_\bs_\bS_\bh_\ba_\br_\bp\n-static bool IsSharp(float sharpness)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b7_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\b~_\bC_\br_\be_\ba_\bs_\be\n-~Crease()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b9_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n-All supported options applying to subdivision scheme.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b5_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bR_\bE_\bA_\bS_\bE_\b__\bU_\bN_\bI_\bF_\bO_\bR_\bM\n-@ CREASE_UNIFORM\n-Catmark rule.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b6_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\be_\bt_\bC_\br_\be_\ba_\bs_\bi_\bn_\bg_\bM_\be_\bt_\bh_\bo_\bd\n-CreasingMethod GetCreasingMethod() const\n-Get edge crease rule.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b1_\b0_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\be_\bt_\bV_\bt_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn\n-VtxBoundaryInterpolation GetVtxBoundaryInterpolation() const\n-Get vertex boundary interpolation rule.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b8_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bV_\bT_\bX_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY_\b__\bE_\bD_\bG_\bE_\b__\bA_\bN_\bD_\b__\bC_\bO_\bR_\bN_\bE_\bR\n-@ VTX_BOUNDARY_EDGE_AND_CORNER\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b5_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bG_\be_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\bi_\bc_\ba_\bl_\bS_\bp_\bl_\bi_\bt_\bT_\by_\bp_\be\n+static Split GetTopologicalSplitType()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk\n+void ComputeVertexVertexMask(VERTEX const &vertexNeighborhood, MASK\n+&vertexVertexMask, Crease::Rule parentRule=Crease::RULE_UNKNOWN, Crease::Rule\n+childRule=Crease::RULE_UNKNOWN) const\n+Vertex-vertex masks If known, a single Rule or pair of Rules can be specified\n+(indicating a crease tr...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b5_\b1_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs\n+void assignCreaseLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK\n+&tan2, int const creaseEnds[2]) const\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be\n+static int GetRegularFaceSize()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bd_\bg_\be_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk\n+void ComputeEdgeVertexMask(EDGE const &edgeNeighborhood, MASK &edgeVertexMask,\n+Crease::Rule parentRule=Crease::RULE_UNKNOWN, Crease::Rule childRule=Crease::\n+RULE_UNKNOWN) const\n+Edge-vertex masks If known, the Rule for the edge and/or the derived vertex can\n+be specified to accel...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b3_\b9_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk\n+void assignSmoothLimitMask(VERTEX const &vertex, MASK &pos) const\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bN_\be_\bi_\bg_\bh_\bb_\bo_\br_\bh_\bo_\bo_\bd_\bS_\bi_\bz_\be\n+static int GetLocalNeighborhoodSize()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk\n+void assignCreaseLimitMask(VERTEX const &vertex, MASK &pos, int const\n+creaseEnds[2]) const\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be\n+static int GetRegularVertexValence()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs\n+void assignSmoothLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK\n+&tan2) const\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk\n+void assignCornerLimitMask(VERTEX const &vertex, MASK &pos) const\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs\n+void assignCornerLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK\n+&tan2) const\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bs_\bd_\bc\n- * _\bc_\br_\be_\ba_\bs_\be_\b._\bh\n+ * _\bb_\bi_\bl_\bi_\bn_\be_\ba_\br_\bS_\bc_\bh_\be_\bm_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00782.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00782.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/sdc/catmarkScheme.h File Reference\n+OpenSubdiv: opensubdiv/sdc/crease.h File Reference\n \n \n \n \n \n \n \n@@ -88,38 +88,43 @@\n
    \n
    \n
    \n
    \n \n
    \n \n-
    catmarkScheme.h File Reference
    \n+
    crease.h File Reference
    \n
    \n
    \n
    #include "../version.h"
    \n-#include "../sdc/scheme.h"
    \n-#include <cassert>
    \n-#include <cmath>
    \n+#include "../sdc/options.h"
    \n
    \n

    Go to the source code of this file.

    \n \n+\n+\n+\n+\n+

    \n+Classes

    class  Crease
     Types, constants and utilities related to semi-sharp creasing – whose implementation is independent of the subdivision scheme. More...
     
    \n \n \n \n \n \n \n \n

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Sdc
     
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,25 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-catmarkScheme.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+crease.h File Reference\n #include \"../version.h\"\n-#include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bs_\bc_\bh_\be_\bm_\be_\b._\bh\"\n-#include \n-#include \n+#include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bC_\br_\be_\ba_\bs_\be\n+\u00a0 Types, constants and utilities related to semi-sharp creasing \u2013 whose\n+ implementation is independent of the subdivision scheme. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bs_\bd_\bc\n- * _\bc_\ba_\bt_\bm_\ba_\br_\bk_\bS_\bc_\bh_\be_\bm_\be_\b._\bh\n+ * _\bc_\br_\be_\ba_\bs_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00782_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00782_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/sdc/catmarkScheme.h Source File\n+OpenSubdiv: opensubdiv/sdc/crease.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
    No Matches
    \n
    \n
    \n
    \n
    \n \n
    \n-
    catmarkScheme.h
    \n+
    crease.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n
    2// Copyright 2014 DreamWorks Animation LLC.
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n@@ -118,566 +118,221 @@\n
    17//
    \n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n-
    24#ifndef OPENSUBDIV3_SDC_CATMARK_SCHEME_H
    \n-
    25#define OPENSUBDIV3_SDC_CATMARK_SCHEME_H
    \n+
    24#ifndef OPENSUBDIV3_SDC_CREASE_H
    \n+
    25#define OPENSUBDIV3_SDC_CREASE_H
    \n
    26
    \n
    27#include "../version.h"
    \n
    28
    \n-
    29#include "../sdc/scheme.h"
    \n+
    29#include "../sdc/options.h"
    \n
    30
    \n-
    31#include <cassert>
    \n-
    32#include <cmath>
    \n+
    31namespace OpenSubdiv {
    \n+
    32namespace OPENSUBDIV_VERSION {
    \n
    33
    \n-
    34namespace OpenSubdiv {
    \n-
    35namespace OPENSUBDIV_VERSION {
    \n-
    36
    \n-
    37namespace Sdc {
    \n-
    38
    \n-
    39//
    \n-
    40// Specializations for Scheme<SCHEME_CATMARK>:
    \n-
    41//
    \n-
    42
    \n-
    43//
    \n-
    44// Catmark traits:
    \n-
    45//
    \n-
    46template <>
    \n-\n-
    48
    \n-
    49template <>
    \n-\n-
    51
    \n-
    52template <>
    \n-\n-
    54
    \n-
    55template <>
    \n-\n-
    57
    \n-
    58
    \n-
    59//
    \n-
    60// Masks for edge-vertices: the hard Crease mask does not need to be specialized
    \n-
    61// (simply the midpoint), so all that is left is the Smooth case:
    \n-
    62//
    \n-
    63// The Smooth mask is complicated by the need to support the "triangle subdivision"
    \n-
    64// option, which applies different weighting in the presence of triangles. It is
    \n-
    65// up for debate as to whether this is useful or not -- we may be able to deprecate
    \n-
    66// this option.
    \n-
    67//
    \n-
    68template <>
    \n-
    69template <typename EDGE, typename MASK>
    \n-
    70inline void
    \n-
    \n-
    71Scheme<SCHEME_CATMARK>::assignSmoothMaskForEdge(EDGE const& edge, MASK& mask) const {
    \n-
    72
    \n-
    73 typedef typename MASK::Weight Weight;
    \n-
    74
    \n-
    75 int faceCount = edge.GetNumFaces();
    \n-
    76
    \n-
    77 mask.SetNumVertexWeights(2);
    \n-
    78 mask.SetNumEdgeWeights(0);
    \n-
    79 mask.SetNumFaceWeights(faceCount);
    \n-
    80 mask.SetFaceWeightsForFaceCenters(true);
    \n-
    81
    \n-
    82 //
    \n-
    83 // Determine if we need to inspect incident faces and apply alternate weighting for
    \n-
    84 // triangles -- and if so, determine which of the two are triangles.
    \n-
    85 //
    \n-
    86 bool face0IsTri = false;
    \n-
    87 bool face1IsTri = false;
    \n-
    88 bool useTriangleOption = (_options.GetTriangleSubdivision() == Options::TRI_SUB_SMOOTH);
    \n-
    89 if (useTriangleOption) {
    \n-
    90 if (faceCount == 2) {
    \n-
    91 //
    \n-
    92 // Ideally we want to avoid this inspection when we have already subdivided at
    \n-
    93 // least once -- need something in the Edge interface to help avoid this, e.g.
    \n-
    94 // an IsRegular() query, the subdivision level...
    \n-
    95 //
    \n-
    96 int vertsPerFace[2];
    \n-
    97 edge.GetNumVerticesPerFace(vertsPerFace);
    \n+
    34namespace Sdc {
    \n+
    35
    \n+
    61
    \n+
    \n+
    62class Crease {
    \n+
    63public:
    \n+
    65
    \n+
    67 static float const SHARPNESS_SMOOTH; // = 0.0f, do we really need this?
    \n+
    68 static float const SHARPNESS_INFINITE; // = 10.0f;
    \n+
    69
    \n+
    70 static bool IsSmooth(float sharpness) { return sharpness <= SHARPNESS_SMOOTH; }
    \n+
    71 static bool IsSharp(float sharpness) { return sharpness > SHARPNESS_SMOOTH; }
    \n+
    72 static bool IsInfinite(float sharpness) { return sharpness >= SHARPNESS_INFINITE; }
    \n+
    73 static bool IsSemiSharp(float sharpness) { return (SHARPNESS_SMOOTH < sharpness) && (sharpness < SHARPNESS_INFINITE); }
    \n+
    75
    \n+
    \n+
    82 enum Rule {
    \n+\n+
    84 RULE_SMOOTH = (1 << 0),
    \n+
    85 RULE_DART = (1 << 1),
    \n+
    86 RULE_CREASE = (1 << 2),
    \n+
    87 RULE_CORNER = (1 << 3)
    \n+
    88 };
    \n+
    \n+
    89
    \n+
    90public:
    \n+
    91 Crease() : _options() { }
    \n+
    92 Crease(Options const& options) : _options(options) { }
    \n+
    93 ~Crease() { }
    \n+
    94
    \n+
    95 bool IsUniform() const { return _options.GetCreasingMethod() == Options::CREASE_UNIFORM; }
    \n+
    96
    \n
    98
    \n-
    99 face0IsTri = (vertsPerFace[0] == 3);
    \n-
    100 face1IsTri = (vertsPerFace[1] == 3);
    \n-
    101 useTriangleOption = face0IsTri || face1IsTri;
    \n-
    102 } else {
    \n-
    103 useTriangleOption = false;
    \n-
    104 }
    \n-
    105 }
    \n+
    104 float SharpenBoundaryEdge(float edgeSharpness) const;
    \n+
    105 float SharpenBoundaryVertex(float edgeSharpness) const;
    \n
    106
    \n-
    107 if (! useTriangleOption) {
    \n-
    108 mask.VertexWeight(0) = 0.25f;
    \n-
    109 mask.VertexWeight(1) = 0.25f;
    \n-
    110
    \n-
    111 if (faceCount == 2) {
    \n-
    112 mask.FaceWeight(0) = 0.25f;
    \n-
    113 mask.FaceWeight(1) = 0.25f;
    \n-
    114 } else {
    \n-
    115 Weight fWeight = 0.5f / (Weight)faceCount;
    \n-
    116 for (int i = 0; i < faceCount; ++i) {
    \n-
    117 mask.FaceWeight(i) = fWeight;
    \n-
    118 }
    \n-
    119 }
    \n-
    120 } else {
    \n-
    121 //
    \n-
    122 // This mimics the implementation in Hbr in terms of order of operations.
    \n-
    123 //
    \n-
    124 const Weight CATMARK_SMOOTH_TRI_EDGE_WEIGHT = (Weight) 0.470;
    \n+
    107 // For future consideration
    \n+
    108 //float SharpenNonManifoldEdge(float edgeSharpness) const;
    \n+
    109 //float SharpenNonManifoldVertex(float edgeSharpness) const;
    \n+
    111
    \n+
    113
    \n+
    124 float SubdivideUniformSharpness(float vertexOrEdgeSharpness) const;
    \n
    125
    \n-
    126 Weight f0Weight = face0IsTri ? CATMARK_SMOOTH_TRI_EDGE_WEIGHT : 0.25f;
    \n-
    127 Weight f1Weight = face1IsTri ? CATMARK_SMOOTH_TRI_EDGE_WEIGHT : 0.25f;
    \n-
    128
    \n-
    129 Weight fWeight = 0.5f * (f0Weight + f1Weight);
    \n-
    130 Weight vWeight = 0.5f * (1.0f - 2.0f * fWeight);
    \n+
    126 float SubdivideVertexSharpness(float vertexSharpness) const;
    \n+
    127
    \n+
    128 float SubdivideEdgeSharpnessAtVertex(float edgeSharpness,
    \n+
    129 int incidentEdgeCountAtEndVertex,
    \n+
    130 float const* edgeSharpnessAroundEndVertex) const;
    \n
    131
    \n-
    132 mask.VertexWeight(0) = vWeight;
    \n-
    133 mask.VertexWeight(1) = vWeight;
    \n-
    134
    \n-
    135 mask.FaceWeight(0) = fWeight;
    \n-
    136 mask.FaceWeight(1) = fWeight;
    \n-
    137 }
    \n-
    138}
    \n-
    \n-
    139
    \n-
    140
    \n-
    141//
    \n-
    142// Masks for vertex-vertices: the hard Corner mask does not need to be specialized
    \n-
    143// (simply the vertex itself), leaving the Crease and Smooth cases (Dart is smooth):
    \n-
    144//
    \n-
    145template <>
    \n-
    146template <typename VERTEX, typename MASK>
    \n-
    147inline void
    \n-
    \n-\n-
    149 int const creaseEnds[2]) const {
    \n-
    150 typedef typename MASK::Weight Weight;
    \n-
    151
    \n-
    152 int valence = vertex.GetNumEdges();
    \n-
    153
    \n-
    154 mask.SetNumVertexWeights(1);
    \n-
    155 mask.SetNumEdgeWeights(valence);
    \n-
    156 mask.SetNumFaceWeights(0);
    \n-
    157 mask.SetFaceWeightsForFaceCenters(false);
    \n-
    158
    \n-
    159 Weight vWeight = 0.75f;
    \n-
    160 Weight eWeight = 0.125f;
    \n-
    161
    \n-
    162 mask.VertexWeight(0) = vWeight;
    \n-
    163 for (int i = 0; i < valence; ++i) {
    \n-
    164 mask.EdgeWeight(i) = 0.0f;
    \n-
    165 }
    \n-
    166 mask.EdgeWeight(creaseEnds[0]) = eWeight;
    \n-
    167 mask.EdgeWeight(creaseEnds[1]) = eWeight;
    \n-
    168}
    \n-
    \n-
    169
    \n-
    170template <>
    \n-
    171template <typename VERTEX, typename MASK>
    \n-
    172inline void
    \n-
    \n-
    173Scheme<SCHEME_CATMARK>::assignSmoothMaskForVertex(VERTEX const& vertex, MASK& mask) const {
    \n-
    174
    \n-
    175 typedef typename MASK::Weight Weight;
    \n+
    132 void SubdivideEdgeSharpnessesAroundVertex(int incidentEdgeCountAtVertex,
    \n+
    133 float const* incidentEdgeSharpnessAroundVertex,
    \n+
    134 float* childEdgesSharpnessAroundVertex) const;
    \n+
    136
    \n+
    138
    \n+
    144 Rule DetermineVertexVertexRule(float vertexSharpness,
    \n+
    145 int incidentEdgeCount,
    \n+
    146 float const* incidentEdgeSharpness) const;
    \n+
    147 Rule DetermineVertexVertexRule(float vertexSharpness,
    \n+
    148 int sharpEdgeCount) const;
    \n+
    150
    \n+
    162 float ComputeFractionalWeightAtVertex(float vertexSharpness,
    \n+
    163 float childVertexSharpness,
    \n+
    164 int incidentEdgeCount,
    \n+
    165 float const* incidentEdgeSharpness,
    \n+
    166 float const* childEdgesSharpness) const;
    \n+
    167
    \n+
    168 void GetSharpEdgePairOfCrease(float const * incidentEdgeSharpness,
    \n+
    169 int incidentEdgeCount,
    \n+
    170 int sharpEdgePair[2]) const;
    \n+
    171
    \n+
    172 // Would these really help? Maybe only need Rules for the vertex-vertex case...
    \n+
    173 //
    \n+
    174 // Rule DetermineEdgeVertexRule(float parentEdgeSharpness) const;
    \n+
    175 // Rule DetermineEdgeVertexRule(float childEdge1Sharpness, float childEdge2Sharpness) const;
    \n
    176
    \n-
    177 //
    \n-
    178 // A Smooth vertex must be manifold and interior -- manifold boundary vertices will be
    \n-
    179 // Creases and non-manifold vertices of any kind will be Corners or Creases. If smooth
    \n-
    180 // rules for non-manifold vertices are ever defined, this will need adjusting:
    \n-
    181 //
    \n-
    182 assert(vertex.GetNumFaces() == vertex.GetNumEdges());
    \n+
    177protected:
    \n+
    178 float decrementSharpness(float sharpness) const;
    \n+
    179
    \n+
    180private:
    \n+
    181 Options _options;
    \n+
    182};
    \n+
    \n
    183
    \n-
    184 int valence = vertex.GetNumFaces();
    \n-
    185
    \n-
    186 mask.SetNumVertexWeights(1);
    \n-
    187 mask.SetNumEdgeWeights(valence);
    \n-
    188 mask.SetNumFaceWeights(valence);
    \n-
    189 mask.SetFaceWeightsForFaceCenters(true);
    \n+
    184
    \n+
    185//
    \n+
    186// Inline declarations:
    \n+
    187//
    \n+
    188inline float
    \n+
    \n+
    189Crease::SharpenBoundaryEdge(float /* edgeSharpness */) const {
    \n
    190
    \n-
    191 Weight vWeight = (Weight)(valence - 2) / (Weight)valence;
    \n-
    192 Weight fWeight = 1.0f / (Weight)(valence * valence);
    \n-
    193 Weight eWeight = fWeight;
    \n-
    194
    \n-
    195 mask.VertexWeight(0) = vWeight;
    \n-
    196 for (int i = 0; i < valence; ++i) {
    \n-
    197 mask.EdgeWeight(i) = eWeight;
    \n-
    198 mask.FaceWeight(i) = fWeight;
    \n-
    199 }
    \n-
    200}
    \n-
    \n+
    191 //
    \n+
    192 // Despite the presence of the BOUNDARY_NONE option, boundary edges are always sharpened.
    \n+
    193 // Much of the code relies on sharpness to indicate boundaries to avoid the more complex
    \n+
    194 // topological inspection
    \n+
    195 //
    \n+
    196 return SHARPNESS_INFINITE;
    \n+
    197}
    \n+
    \n+
    198
    \n+
    199inline float
    \n+
    \n+
    200Crease::SharpenBoundaryVertex(float vertexSharpness) const {
    \n
    201
    \n-
    202//
    \n-
    203// Limit masks for position:
    \n-
    204//
    \n-
    205template <>
    \n-
    206template <typename VERTEX, typename MASK>
    \n-
    207inline void
    \n-
    \n-
    208Scheme<SCHEME_CATMARK>::assignCornerLimitMask(VERTEX const& /* vertex */, MASK& posMask) const {
    \n-
    209
    \n-
    210 posMask.SetNumVertexWeights(1);
    \n-
    211 posMask.SetNumEdgeWeights(0);
    \n-
    212 posMask.SetNumFaceWeights(0);
    \n-
    213 posMask.SetFaceWeightsForFaceCenters(false);
    \n-
    214
    \n-
    215 posMask.VertexWeight(0) = 1.0f;
    \n-
    216}
    \n+\n+
    203 SHARPNESS_INFINITE : vertexSharpness;
    \n+
    204}
    \n+
    \n+
    205
    \n+
    206inline float
    \n+
    \n+
    207Crease::decrementSharpness(float sharpness) const {
    \n+
    208
    \n+
    209 if (IsSmooth(sharpness)) return Crease::SHARPNESS_SMOOTH; // redundant but most common
    \n+
    210 if (IsInfinite(sharpness)) return Crease::SHARPNESS_INFINITE;
    \n+
    211 if (sharpness > 1.0f) return (sharpness - 1.0f);
    \n+\n+
    213}
    \n
    \n+
    214
    \n+
    215inline float
    \n+
    \n+
    216Crease::SubdivideUniformSharpness(float vertexOrEdgeSharpness) const {
    \n
    217
    \n-
    218template <>
    \n-
    219template <typename VERTEX, typename MASK>
    \n-
    220inline void
    \n-
    \n-
    221Scheme<SCHEME_CATMARK>::assignCreaseLimitMask(VERTEX const& vertex, MASK& posMask,
    \n-
    222 int const creaseEnds[2]) const {
    \n+
    218 return decrementSharpness(vertexOrEdgeSharpness);
    \n+
    219}
    \n+
    \n+
    220
    \n+
    221inline float
    \n+
    \n+
    222Crease::SubdivideVertexSharpness(float vertexSharpness) const {
    \n
    223
    \n-
    224 typedef typename MASK::Weight Weight;
    \n-
    225
    \n-
    226 int valence = vertex.GetNumEdges();
    \n-
    227
    \n-
    228 posMask.SetNumVertexWeights(1);
    \n-
    229 posMask.SetNumEdgeWeights(valence);
    \n-
    230 posMask.SetNumFaceWeights(0);
    \n-
    231 posMask.SetFaceWeightsForFaceCenters(false);
    \n-
    232
    \n-
    233 Weight vWeight = (Weight)(2.0 / 3.0);
    \n-
    234 Weight eWeight = (Weight)(1.0 / 6.0);
    \n-
    235
    \n-
    236 posMask.VertexWeight(0) = vWeight;
    \n-
    237 for (int i = 0; i < valence; ++i) {
    \n-
    238 posMask.EdgeWeight(i) = 0.0f;
    \n-
    239 }
    \n-
    240 posMask.EdgeWeight(creaseEnds[0]) = eWeight;
    \n-
    241 posMask.EdgeWeight(creaseEnds[1]) = eWeight;
    \n-
    242}
    \n-
    \n-
    243
    \n-
    244template <>
    \n-
    245template <typename VERTEX, typename MASK>
    \n-
    246inline void
    \n-
    \n-
    247Scheme<SCHEME_CATMARK>::assignSmoothLimitMask(VERTEX const& vertex, MASK& posMask) const {
    \n-
    248
    \n-
    249 typedef typename MASK::Weight Weight;
    \n-
    250
    \n-
    251 int valence = vertex.GetNumFaces();
    \n-
    252 if (valence == 2) {
    \n-
    253 assignCornerLimitMask(vertex, posMask);
    \n-
    254 return;
    \n-
    255 }
    \n-
    256
    \n-
    257 posMask.SetNumVertexWeights(1);
    \n-
    258 posMask.SetNumEdgeWeights(valence);
    \n-
    259 posMask.SetNumFaceWeights(valence);
    \n-
    260 posMask.SetFaceWeightsForFaceCenters(false);
    \n-
    261
    \n-
    262 // Specialize for the regular case:
    \n-
    263 if (valence == 4) {
    \n-
    264 Weight fWeight = (Weight)(1.0 / 36.0);
    \n-
    265 Weight eWeight = (Weight)(1.0 / 9.0);
    \n-
    266 Weight vWeight = (Weight)(4.0 / 9.0);
    \n-
    267
    \n-
    268 posMask.VertexWeight(0) = vWeight;
    \n-
    269
    \n-
    270 posMask.EdgeWeight(0) = eWeight;
    \n-
    271 posMask.EdgeWeight(1) = eWeight;
    \n-
    272 posMask.EdgeWeight(2) = eWeight;
    \n-
    273 posMask.EdgeWeight(3) = eWeight;
    \n-
    274
    \n-
    275 posMask.FaceWeight(0) = fWeight;
    \n-
    276 posMask.FaceWeight(1) = fWeight;
    \n-
    277 posMask.FaceWeight(2) = fWeight;
    \n-
    278 posMask.FaceWeight(3) = fWeight;
    \n-
    279 } else {
    \n-
    280 Weight Valence = (Weight) valence;
    \n-
    281
    \n-
    282 Weight fWeight = 1.0f / (Valence * (Valence + 5.0f));
    \n-
    283 Weight eWeight = 4.0f * fWeight;
    \n-
    284 Weight vWeight = 1.0f - Valence * (eWeight + fWeight);
    \n-
    285
    \n-
    286 posMask.VertexWeight(0) = vWeight;
    \n-
    287 for (int i = 0; i < valence; ++i) {
    \n-
    288 posMask.EdgeWeight(i) = eWeight;
    \n-
    289 posMask.FaceWeight(i) = fWeight;
    \n-
    290 }
    \n-
    291 }
    \n-
    292}
    \n-
    \n-
    293
    \n-
    294//
    \n-
    295// Limit masks for tangents -- these are stubs for now, or have a temporary
    \n-
    296// implementation
    \n-
    297//
    \n-
    298template <>
    \n-
    299template <typename VERTEX, typename MASK>
    \n-
    300inline void
    \n-
    \n-\n-
    302 MASK& tan1Mask, MASK& tan2Mask) const {
    \n-
    303
    \n-
    304 int valence = vertex.GetNumEdges();
    \n-
    305
    \n-
    306 tan1Mask.SetNumVertexWeights(1);
    \n-
    307 tan1Mask.SetNumEdgeWeights(valence);
    \n-
    308 tan1Mask.SetNumFaceWeights(0);
    \n-
    309 tan1Mask.SetFaceWeightsForFaceCenters(false);
    \n-
    310
    \n-
    311 tan2Mask.SetNumVertexWeights(1);
    \n-
    312 tan2Mask.SetNumEdgeWeights(valence);
    \n-
    313 tan2Mask.SetNumFaceWeights(0);
    \n-
    314 tan2Mask.SetFaceWeightsForFaceCenters(false);
    \n-
    315
    \n-
    316 // Should be at least 2 edges -- be sure to clear weights for any more:
    \n-
    317 tan1Mask.VertexWeight(0) = -1.0f;
    \n-
    318 tan1Mask.EdgeWeight(0) = 1.0f;
    \n-
    319 tan1Mask.EdgeWeight(1) = 0.0f;
    \n-
    320
    \n-
    321 tan2Mask.VertexWeight(0) = -1.0f;
    \n-
    322 tan2Mask.EdgeWeight(0) = 0.0f;
    \n-
    323 tan2Mask.EdgeWeight(1) = 1.0f;
    \n-
    324
    \n-
    325 for (int i = 2; i < valence; ++i) {
    \n-
    326 tan1Mask.EdgeWeight(i) = 0.0f;
    \n-
    327 tan2Mask.EdgeWeight(i) = 0.0f;
    \n-
    328 }
    \n-
    329}
    \n-
    \n-
    330
    \n-
    331template <>
    \n-
    332template <typename VERTEX, typename MASK>
    \n-
    333inline void
    \n-
    \n-\n-
    335 MASK& tan1Mask, MASK& tan2Mask, int const creaseEnds[2]) const {
    \n-
    336
    \n-
    337 typedef typename MASK::Weight Weight;
    \n-
    338
    \n-
    339 //
    \n-
    340 // First, the tangent along the crease:
    \n-
    341 // The first crease edge is considered the "leading" edge of the span
    \n-
    342 // of surface for which we are evaluating tangents and the second edge the
    \n-
    343 // "trailing edge". By convention, the tangent along the crease is oriented
    \n-
    344 // in the direction of the leading edge.
    \n-
    345 //
    \n-
    346 int numEdges = vertex.GetNumEdges();
    \n-
    347 int numFaces = vertex.GetNumFaces();
    \n-
    348
    \n-
    349 tan1Mask.SetNumVertexWeights(1);
    \n-
    350 tan1Mask.SetNumEdgeWeights(numEdges);
    \n-
    351 tan1Mask.SetNumFaceWeights(numFaces);
    \n-
    352 tan1Mask.SetFaceWeightsForFaceCenters(false);
    \n-
    353
    \n-
    354 tan1Mask.VertexWeight(0) = 0.0f;
    \n-
    355 for (int i = 0; i < numEdges; ++i) {
    \n-
    356 tan1Mask.EdgeWeight(i) = 0.0f;
    \n-
    357 }
    \n-
    358 for (int i = 0; i < numFaces; ++i) {
    \n-
    359 tan1Mask.FaceWeight(i) = 0.0f;
    \n-
    360 }
    \n-
    361
    \n-
    362 tan1Mask.EdgeWeight(creaseEnds[0]) = 0.5f;
    \n-
    363 tan1Mask.EdgeWeight(creaseEnds[1]) = -0.5f;
    \n-
    364
    \n-
    365 //
    \n-
    366 // Second, the tangent across the interior faces:
    \n-
    367 // Note this is ambiguous for an interior vertex. We currently return
    \n-
    368 // the tangent for the surface in the counter-clockwise span between the
    \n-
    369 // leading and trailing edges that form the crease. Given the expected
    \n-
    370 // computation of a surface normal as Tan1 X Tan2, this tangent should be
    \n-
    371 // oriented "inward" from the crease/boundary -- across the surface rather
    \n-
    372 // than outward and away from it.
    \n-
    373 //
    \n-
    374 tan2Mask.SetNumVertexWeights(1);
    \n-
    375 tan2Mask.SetNumEdgeWeights(numEdges);
    \n-
    376 tan2Mask.SetNumFaceWeights(numFaces);
    \n-
    377 tan2Mask.SetFaceWeightsForFaceCenters(false);
    \n-
    378
    \n-
    379 // Prepend weights of 0 preceding the crease:
    \n-
    380 for (int i = 0; i < creaseEnds[0]; ++i) {
    \n-
    381 tan2Mask.EdgeWeight(i) = 0.0f;
    \n-
    382 tan2Mask.FaceWeight(i) = 0.0f;
    \n-
    383 }
    \n-
    384
    \n-
    385 // Assign weights to crease edge and interior points:
    \n-
    386 int interiorEdgeCount = creaseEnds[1] - creaseEnds[0] - 1;
    \n-
    387 if (interiorEdgeCount == 1) {
    \n-
    388 // The regular case -- uniform B-spline cross-tangent:
    \n-
    389
    \n-
    390 tan2Mask.VertexWeight(0) = (Weight)(-4.0 / 6.0);
    \n-
    391
    \n-
    392 tan2Mask.EdgeWeight(creaseEnds[0]) = (Weight)(-1.0 / 6.0);
    \n-
    393 tan2Mask.EdgeWeight(creaseEnds[0] + 1) = (Weight)( 4.0 / 6.0);
    \n-
    394 tan2Mask.EdgeWeight(creaseEnds[1]) = (Weight)(-1.0 / 6.0);
    \n-
    395
    \n-
    396 tan2Mask.FaceWeight(creaseEnds[0]) = (Weight)(1.0 / 6.0);
    \n-
    397 tan2Mask.FaceWeight(creaseEnds[0] + 1) = (Weight)(1.0 / 6.0);
    \n-
    398 } else if (interiorEdgeCount > 1) {
    \n-
    399 // The irregular case -- formulae from Biermann et al:
    \n-
    400
    \n-
    401 double k = (double) (interiorEdgeCount + 1);
    \n-
    402 double theta = M_PI / k;
    \n-
    403
    \n-
    404 double cosTheta = std::cos(theta);
    \n-
    405 double sinTheta = std::sin(theta);
    \n-
    406
    \n-
    407 // Loop/Schaefer use a different divisor here (3*k + cos(theta)):
    \n-
    408 double commonDenom = 1.0f / (k * (3.0f + cosTheta));
    \n-
    409 double R = (cosTheta + 1.0f) / sinTheta;
    \n-
    410
    \n-
    411 double vertexWeight = 4.0f * R * (cosTheta - 1.0f);
    \n-
    412 double creaseWeight = -R * (1.0f + 2.0f * cosTheta);
    \n-
    413
    \n-
    414 tan2Mask.VertexWeight(0) = (Weight) (vertexWeight * commonDenom);
    \n-
    415
    \n-
    416 tan2Mask.EdgeWeight(creaseEnds[0]) = (Weight) (creaseWeight * commonDenom);
    \n-
    417 tan2Mask.EdgeWeight(creaseEnds[1]) = (Weight) (creaseWeight * commonDenom);
    \n-
    418
    \n-
    419 tan2Mask.FaceWeight(creaseEnds[0]) = (Weight) (sinTheta * commonDenom);
    \n-
    420
    \n-
    421 double sinThetaI = 0.0f;
    \n-
    422 double sinThetaIplus1 = sinTheta;
    \n-
    423 for (int i = 1; i < k; ++i) {
    \n-
    424 sinThetaI = sinThetaIplus1;
    \n-
    425 sinThetaIplus1 = std::sin((i+1)*theta);
    \n-
    426
    \n-
    427 tan2Mask.EdgeWeight(creaseEnds[0] + i) = (Weight) ((4.0f * sinThetaI) * commonDenom);
    \n-
    428 tan2Mask.FaceWeight(creaseEnds[0] + i) = (Weight) ((sinThetaI + sinThetaIplus1) * commonDenom);
    \n-
    429 }
    \n-
    430 } else {
    \n-
    431 // Special case for a single face -- simple average of boundary edges:
    \n-
    432
    \n-
    433 tan2Mask.VertexWeight(0) = -6.0f;
    \n-
    434
    \n-
    435 tan2Mask.EdgeWeight(creaseEnds[0]) = 3.0f;
    \n-
    436 tan2Mask.EdgeWeight(creaseEnds[1]) = 3.0f;
    \n-
    437
    \n-
    438 tan2Mask.FaceWeight(creaseEnds[0]) = 0.0f;
    \n-
    439 }
    \n-
    440
    \n-
    441 // Append weights of 0 following the crease:
    \n-
    442 for (int i = creaseEnds[1]; i < numFaces; ++i) {
    \n-
    443 tan2Mask.FaceWeight(i) = 0.0f;
    \n-
    444 }
    \n-
    445 for (int i = creaseEnds[1] + 1; i < numEdges; ++i) {
    \n-
    446 tan2Mask.EdgeWeight(i) = 0.0f;
    \n-
    447 }
    \n-
    448}
    \n-
    \n-
    449
    \n-
    450template <>
    \n-
    451template <typename VERTEX, typename MASK>
    \n-
    452inline void
    \n-
    \n-\n-
    454 MASK& tan1Mask, MASK& tan2Mask) const {
    \n-
    455
    \n-
    456 typedef typename MASK::Weight Weight;
    \n-
    457
    \n-
    458 int valence = vertex.GetNumFaces();
    \n-
    459 if (valence == 2) {
    \n-
    460 assignCornerLimitTangentMasks(vertex, tan1Mask, tan2Mask);
    \n-
    461 return;
    \n-
    462 }
    \n-
    463
    \n-
    464 // Compute tan1 initially -- tan2 is simply a rotation:
    \n-
    465 tan1Mask.SetNumVertexWeights(1);
    \n-
    466 tan1Mask.SetNumEdgeWeights(valence);
    \n-
    467 tan1Mask.SetNumFaceWeights(valence);
    \n-
    468 tan1Mask.SetFaceWeightsForFaceCenters(false);
    \n-
    469
    \n-
    470 tan1Mask.VertexWeight(0) = 0.0f;
    \n-
    471
    \n-
    472 if (valence == 4) {
    \n-
    473 tan1Mask.EdgeWeight(0) = 4.0f;
    \n-
    474 tan1Mask.EdgeWeight(1) = 0.0f;
    \n-
    475 tan1Mask.EdgeWeight(2) = -4.0f;
    \n-
    476 tan1Mask.EdgeWeight(3) = 0.0f;
    \n-
    477
    \n-
    478 tan1Mask.FaceWeight(0) = 1.0f;
    \n-
    479 tan1Mask.FaceWeight(1) = -1.0f;
    \n-
    480 tan1Mask.FaceWeight(2) = -1.0f;
    \n-
    481 tan1Mask.FaceWeight(3) = 1.0f;
    \n-
    482 } else {
    \n-
    483 double theta = 2.0f * M_PI / (double)valence;
    \n-
    484
    \n-
    485 double cosTheta = std::cos(theta);
    \n-
    486 double cosHalfTheta = std::cos(theta * 0.5f);
    \n-
    487
    \n-
    488 double lambda = (5.0 / 16.0) + (1.0 / 16.0) *
    \n-
    489 (cosTheta + cosHalfTheta * std::sqrt(2.0f * (9.0f + cosTheta)));
    \n-
    490
    \n-
    491 double edgeWeightScale = 4.0f;
    \n-
    492 double faceWeightScale = 1.0f / (4.0f * lambda - 1.0f);
    \n-
    493
    \n-
    494 for (int i = 0; i < valence; ++i) {
    \n-
    495 double cosThetaI = std::cos( i * theta);
    \n-
    496 double cosThetaIplus1 = std::cos((i+1)* theta);
    \n-
    497
    \n-
    498 tan1Mask.EdgeWeight(i) = (Weight) (edgeWeightScale * cosThetaI);
    \n-
    499 tan1Mask.FaceWeight(i) = (Weight) (faceWeightScale * (cosThetaI + cosThetaIplus1));
    \n-
    500 }
    \n-
    501 }
    \n-
    502
    \n-
    503 // Now rotate/copy tan1 weights to tan2:
    \n-
    504 tan2Mask.SetNumVertexWeights(1);
    \n-
    505 tan2Mask.SetNumEdgeWeights(valence);
    \n-
    506 tan2Mask.SetNumFaceWeights(valence);
    \n-
    507 tan2Mask.SetFaceWeightsForFaceCenters(false);
    \n-
    508
    \n-
    509 tan2Mask.VertexWeight(0) = 0.0f;
    \n-
    510 if (valence == 4) {
    \n-
    511 tan2Mask.EdgeWeight(0) = 0.0f;
    \n-
    512 tan2Mask.EdgeWeight(1) = 4.0f;
    \n-
    513 tan2Mask.EdgeWeight(2) = 0.0f;
    \n-
    514 tan2Mask.EdgeWeight(3) = -4.0f;
    \n-
    515
    \n-
    516 tan2Mask.FaceWeight(0) = 1.0f;
    \n-
    517 tan2Mask.FaceWeight(1) = 1.0f;
    \n-
    518 tan2Mask.FaceWeight(2) = -1.0f;
    \n-
    519 tan2Mask.FaceWeight(3) = -1.0f;
    \n-
    520 } else {
    \n-
    521 tan2Mask.EdgeWeight(0) = tan1Mask.EdgeWeight(valence-1);
    \n-
    522 tan2Mask.FaceWeight(0) = tan1Mask.FaceWeight(valence-1);
    \n-
    523 for (int i = 1; i < valence; ++i) {
    \n-
    524 tan2Mask.EdgeWeight(i) = tan1Mask.EdgeWeight(i-1);
    \n-
    525 tan2Mask.FaceWeight(i) = tan1Mask.FaceWeight(i-1);
    \n-
    526 }
    \n-
    527 }
    \n-
    528}
    \n-
    \n-
    529
    \n-
    530} // end namespace sdc
    \n-
    531
    \n-
    532} // end namespace OPENSUBDIV_VERSION
    \n-
    533using namespace OPENSUBDIV_VERSION;
    \n-
    534} // end namespace OpenSubdiv
    \n-
    535
    \n-
    536#endif /* OPENSUBDIV3_SDC_CATMARK_SCHEME_H */
    \n-\n-
    Split
    Enumerated type for all face splitting schemes.
    Definition types.h:47
    \n-
    @ SPLIT_TO_QUADS
    Used by Catmark and Bilinear.
    Definition types.h:48
    \n-
    @ TRI_SUB_SMOOTH
    "smooth triangle" weights (Catmark scheme only)
    Definition options.h:74
    \n-
    void assignSmoothMaskForEdge(EDGE const &edge, MASK &mask) const
    \n-\n-
    void assignCreaseMaskForVertex(VERTEX const &edge, MASK &mask, int const creaseEnds[2]) const
    \n-
    void assignCreaseLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK &tan2, int const creaseEnds[2]) const
    \n-\n-
    void assignSmoothLimitMask(VERTEX const &vertex, MASK &pos) const
    \n-\n-
    void assignCreaseLimitMask(VERTEX const &vertex, MASK &pos, int const creaseEnds[2]) const
    \n-
    void assignSmoothMaskForVertex(VERTEX const &edge, MASK &mask) const
    \n-\n-
    void assignSmoothLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK &tan2) const
    \n-
    void assignCornerLimitMask(VERTEX const &vertex, MASK &pos) const
    \n-
    void assignCornerLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK &tan2) const
    \n+
    224 return decrementSharpness(vertexSharpness);
    \n+
    225}
    \n+
    \n+
    226
    \n+
    227inline void
    \n+
    \n+
    228Crease::GetSharpEdgePairOfCrease(float const * incidentEdgeSharpness, int incidentEdgeCount,
    \n+
    229 int sharpEdgePair[2]) const {
    \n+
    230
    \n+
    231 // Only to be called when a crease is present at a vertex -- exactly two sharp
    \n+
    232 // edges are expected here:
    \n+
    233 //
    \n+
    234 sharpEdgePair[0] = 0;
    \n+
    235 while (IsSmooth(incidentEdgeSharpness[sharpEdgePair[0]])) ++ sharpEdgePair[0];
    \n+
    236
    \n+
    237 sharpEdgePair[1] = incidentEdgeCount - 1;
    \n+
    238 while (IsSmooth(incidentEdgeSharpness[sharpEdgePair[1]])) -- sharpEdgePair[1];
    \n+
    239}
    \n+
    \n+
    240
    \n+
    241} // end namespace sdc
    \n+
    242
    \n+
    243} // end namespace OPENSUBDIV_VERSION
    \n+
    244using namespace OPENSUBDIV_VERSION;
    \n+
    245} // end namespace OpenSubdiv
    \n+
    246
    \n+
    247#endif /* OPENSUBDIV3_SDC_CREASE_H */
    \n+\n+
    Types, constants and utilities related to semi-sharp creasing \u2013 whose implementation is independent o...
    Definition crease.h:62
    \n+
    float SubdivideVertexSharpness(float vertexSharpness) const
    Definition crease.h:222
    \n+
    static bool IsInfinite(float sharpness)
    Definition crease.h:72
    \n+\n+\n+\n+\n+\n+\n+
    float SharpenBoundaryVertex(float edgeSharpness) const
    Definition crease.h:200
    \n+\n+
    void GetSharpEdgePairOfCrease(float const *incidentEdgeSharpness, int incidentEdgeCount, int sharpEdgePair[2]) const
    Definition crease.h:228
    \n+\n+
    Rule DetermineVertexVertexRule(float vertexSharpness, int incidentEdgeCount, float const *incidentEdgeSharpness) const
    \n+
    float decrementSharpness(float sharpness) const
    Definition crease.h:207
    \n+
    static bool IsSmooth(float sharpness)
    Definition crease.h:70
    \n+
    Rule DetermineVertexVertexRule(float vertexSharpness, int sharpEdgeCount) const
    \n+\n+
    static bool IsSemiSharp(float sharpness)
    Definition crease.h:73
    \n+\n+
    void SubdivideEdgeSharpnessesAroundVertex(int incidentEdgeCountAtVertex, float const *incidentEdgeSharpnessAroundVertex, float *childEdgesSharpnessAroundVertex) const
    \n+
    float SubdivideUniformSharpness(float vertexOrEdgeSharpness) const
    Definition crease.h:216
    \n+\n+
    float SharpenBoundaryEdge(float edgeSharpness) const
    Definition crease.h:189
    \n+
    float ComputeFractionalWeightAtVertex(float vertexSharpness, float childVertexSharpness, int incidentEdgeCount, float const *incidentEdgeSharpness, float const *childEdgesSharpness) const
    Transitional weighting: When the rules applicable to a parent vertex and its child differ,...
    \n+
    float SubdivideEdgeSharpnessAtVertex(float edgeSharpness, int incidentEdgeCountAtEndVertex, float const *edgeSharpnessAroundEndVertex) const
    \n+
    static bool IsSharp(float sharpness)
    Definition crease.h:71
    \n+\n+
    All supported options applying to subdivision scheme.
    Definition options.h:51
    \n+\n+
    CreasingMethod GetCreasingMethod() const
    Get edge crease rule.
    Definition options.h:101
    \n+
    VtxBoundaryInterpolation GetVtxBoundaryInterpolation() const
    Get vertex boundary interpolation rule.
    Definition options.h:89
    \n+\n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-us-ascii\n+utf-8\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-catmarkScheme.h\n+crease.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2014 DreamWorks Animation LLC.\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -23,592 +23,289 @@\n 17//\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n-24#ifndef OPENSUBDIV3_SDC_CATMARK_SCHEME_H\n-25#define OPENSUBDIV3_SDC_CATMARK_SCHEME_H\n+24#ifndef OPENSUBDIV3_SDC_CREASE_H\n+25#define OPENSUBDIV3_SDC_CREASE_H\n 26\n 27#include \"../version.h\"\n 28\n-29#include \"../sdc/scheme.h\"\n+29#include \"../sdc/options.h\"\n 30\n-31#include \n-32#include \n+31namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+32namespace OPENSUBDIV_VERSION {\n 33\n-34namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-35namespace OPENSUBDIV_VERSION {\n-36\n-37namespace Sdc {\n-38\n-39//\n-40// Specializations for Scheme:\n-41//\n-42\n-43//\n-44// Catmark traits:\n-45//\n-46template <>\n-_\b4_\b7inline _\bS_\bp_\bl_\bi_\bt _\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\bG_\be_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\bi_\bc_\ba_\bl_\bS_\bp_\bl_\bi_\bt_\bT_\by_\bp_\be() { return\n-_\bS_\bP_\bL_\bI_\bT_\b__\bT_\bO_\b__\bQ_\bU_\bA_\bD_\bS; }\n-48\n-49template <>\n-_\b5_\b0inline int _\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be() { return 4; }\n-51\n-52template <>\n-_\b5_\b3inline int _\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be() { return 4; }\n-54\n-55template <>\n-_\b5_\b6inline int _\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bN_\be_\bi_\bg_\bh_\bb_\bo_\br_\bh_\bo_\bo_\bd_\bS_\bi_\bz_\be() { return 1; }\n-57\n-58\n-59//\n-60// Masks for edge-vertices: the hard Crease mask does not need to be\n-specialized\n-61// (simply the midpoint), so all that is left is the Smooth case:\n-62//\n-63// The Smooth mask is complicated by the need to support the \"triangle\n-subdivision\"\n-64// option, which applies different weighting in the presence of triangles. It\n-is\n-65// up for debate as to whether this is useful or not -- we may be able to\n-deprecate\n-66// this option.\n-67//\n-68template <>\n-69template \n-70inline void\n-_\b7_\b1_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bE_\bd_\bg_\be(EDGE const& edge, MASK& mask)\n-const {\n-72\n-73 typedef typename MASK::Weight Weight;\n-74\n-75 int faceCount = edge.GetNumFaces();\n-76\n-77 mask.SetNumVertexWeights(2);\n-78 mask.SetNumEdgeWeights(0);\n-79 mask.SetNumFaceWeights(faceCount);\n-80 mask.SetFaceWeightsForFaceCenters(true);\n-81\n-82 //\n-83 // Determine if we need to inspect incident faces and apply alternate\n-weighting for\n-84 // triangles -- and if so, determine which of the two are triangles.\n-85 //\n-86 bool face0IsTri = false;\n-87 bool face1IsTri = false;\n-88 bool useTriangleOption = (_options.GetTriangleSubdivision() == _\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bT_\bR_\bI_\b__\bS_\bU_\bB_\b__\bS_\bM_\bO_\bO_\bT_\bH);\n-89 if (useTriangleOption) {\n-90 if (faceCount == 2) {\n-91 //\n-92 // Ideally we want to avoid this inspection when we have already subdivided\n-at\n-93 // least once -- need something in the Edge interface to help avoid this,\n-e.g.\n-94 // an IsRegular() query, the subdivision level...\n-95 //\n-96 int vertsPerFace[2];\n-97 edge.GetNumVerticesPerFace(vertsPerFace);\n+34namespace Sdc {\n+35\n+61\n+_\b6_\b2class _\bC_\br_\be_\ba_\bs_\be {\n+63public:\n+65\n+_\b6_\b7 static float const _\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bS_\bM_\bO_\bO_\bT_\bH; // = 0.0f, do we really need this?\n+_\b6_\b8 static float const _\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bI_\bN_\bF_\bI_\bN_\bI_\bT_\bE; // = 10.0f;\n+69\n+_\b7_\b0 static bool _\bI_\bs_\bS_\bm_\bo_\bo_\bt_\bh(float sharpness) { return sharpness <=\n+_\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bS_\bM_\bO_\bO_\bT_\bH; }\n+_\b7_\b1 static bool _\bI_\bs_\bS_\bh_\ba_\br_\bp(float sharpness) { return sharpness > _\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bS_\bM_\bO_\bO_\bT_\bH;\n+}\n+_\b7_\b2 static bool _\bI_\bs_\bI_\bn_\bf_\bi_\bn_\bi_\bt_\be(float sharpness) { return sharpness >=\n+_\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bI_\bN_\bF_\bI_\bN_\bI_\bT_\bE; }\n+_\b7_\b3 static bool _\bI_\bs_\bS_\be_\bm_\bi_\bS_\bh_\ba_\br_\bp(float sharpness) { return (_\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bS_\bM_\bO_\bO_\bT_\bH <\n+sharpness) && (sharpness < _\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bI_\bN_\bF_\bI_\bN_\bI_\bT_\bE); }\n+75\n+_\b8_\b2 enum _\bR_\bu_\bl_\be {\n+_\b8_\b3 _\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN = 0,\n+_\b8_\b4 _\bR_\bU_\bL_\bE_\b__\bS_\bM_\bO_\bO_\bT_\bH = (1 << 0),\n+_\b8_\b5 _\bR_\bU_\bL_\bE_\b__\bD_\bA_\bR_\bT = (1 << 1),\n+_\b8_\b6 _\bR_\bU_\bL_\bE_\b__\bC_\bR_\bE_\bA_\bS_\bE = (1 << 2),\n+87 _\bR_\bU_\bL_\bE_\b__\bC_\bO_\bR_\bN_\bE_\bR = (1 << 3)\n+_\b8_\b8 };\n+89\n+90public:\n+_\b9_\b1 _\bC_\br_\be_\ba_\bs_\be() : _options() { }\n+_\b9_\b2 _\bC_\br_\be_\ba_\bs_\be(_\bO_\bp_\bt_\bi_\bo_\bn_\bs const& options) : _options(options) { }\n+_\b9_\b3 _\b~_\bC_\br_\be_\ba_\bs_\be() { }\n+94\n+_\b9_\b5 bool _\bI_\bs_\bU_\bn_\bi_\bf_\bo_\br_\bm() const { return _options._\bG_\be_\bt_\bC_\br_\be_\ba_\bs_\bi_\bn_\bg_\bM_\be_\bt_\bh_\bo_\bd() == _\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bC_\bR_\bE_\bA_\bS_\bE_\b__\bU_\bN_\bI_\bF_\bO_\bR_\bM; }\n+96\n 98\n-99 face0IsTri = (vertsPerFace[0] == 3);\n-100 face1IsTri = (vertsPerFace[1] == 3);\n-101 useTriangleOption = face0IsTri || face1IsTri;\n-102 } else {\n-103 useTriangleOption = false;\n-104 }\n-105 }\n+104 float _\bS_\bh_\ba_\br_\bp_\be_\bn_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bE_\bd_\bg_\be(float edgeSharpness) const;\n+105 float _\bS_\bh_\ba_\br_\bp_\be_\bn_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bV_\be_\br_\bt_\be_\bx(float edgeSharpness) const;\n 106\n-107 if (! useTriangleOption) {\n-108 mask.VertexWeight(0) = 0.25f;\n-109 mask.VertexWeight(1) = 0.25f;\n-110\n-111 if (faceCount == 2) {\n-112 mask.FaceWeight(0) = 0.25f;\n-113 mask.FaceWeight(1) = 0.25f;\n-114 } else {\n-115 Weight fWeight = 0.5f / (Weight)faceCount;\n-116 for (int i = 0; i < faceCount; ++i) {\n-117 mask.FaceWeight(i) = fWeight;\n-118 }\n-119 }\n-120 } else {\n-121 //\n-122 // This mimics the implementation in Hbr in terms of order of operations.\n-123 //\n-124 const Weight CATMARK_SMOOTH_TRI_EDGE_WEIGHT = (Weight) 0.470;\n+107 // For future consideration\n+108 //float SharpenNonManifoldEdge(float edgeSharpness) const;\n+109 //float SharpenNonManifoldVertex(float edgeSharpness) const;\n+111\n+113\n+124 float _\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bd_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(float vertexOrEdgeSharpness) const;\n 125\n-126 Weight f0Weight = face0IsTri ? CATMARK_SMOOTH_TRI_EDGE_WEIGHT : 0.25f;\n-127 Weight f1Weight = face1IsTri ? CATMARK_SMOOTH_TRI_EDGE_WEIGHT : 0.25f;\n-128\n-129 Weight fWeight = 0.5f * (f0Weight + f1Weight);\n-130 Weight vWeight = 0.5f * (1.0f - 2.0f * fWeight);\n+126 float _\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bd_\be_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(float vertexSharpness) const;\n+127\n+_\b1_\b2_\b8 float _\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bd_\be_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bA_\bt_\bV_\be_\br_\bt_\be_\bx(float edgeSharpness,\n+129 int incidentEdgeCountAtEndVertex,\n+130 float const* edgeSharpnessAroundEndVertex) const;\n 131\n-132 mask.VertexWeight(0) = vWeight;\n-133 mask.VertexWeight(1) = vWeight;\n-134\n-135 mask.FaceWeight(0) = fWeight;\n-136 mask.FaceWeight(1) = fWeight;\n-137 }\n-138}\n-139\n-140\n-141//\n-142// Masks for vertex-vertices: the hard Corner mask does not need to be\n-specialized\n-143// (simply the vertex itself), leaving the Crease and Smooth cases (Dart is\n-smooth):\n-144//\n-145template <>\n-146template \n-147inline void\n-_\b1_\b4_\b8_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bV_\be_\br_\bt_\be_\bx(VERTEX const& vertex,\n-MASK& mask,\n-149 int const creaseEnds[2]) const {\n-150 typedef typename MASK::Weight Weight;\n-151\n-152 int valence = vertex.GetNumEdges();\n-153\n-154 mask.SetNumVertexWeights(1);\n-155 mask.SetNumEdgeWeights(valence);\n-156 mask.SetNumFaceWeights(0);\n-157 mask.SetFaceWeightsForFaceCenters(false);\n-158\n-159 Weight vWeight = 0.75f;\n-160 Weight eWeight = 0.125f;\n-161\n-162 mask.VertexWeight(0) = vWeight;\n-163 for (int i = 0; i < valence; ++i) {\n-164 mask.EdgeWeight(i) = 0.0f;\n-165 }\n-166 mask.EdgeWeight(creaseEnds[0]) = eWeight;\n-167 mask.EdgeWeight(creaseEnds[1]) = eWeight;\n-168}\n-169\n-170template <>\n-171template \n-172inline void\n-_\b1_\b7_\b3_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bV_\be_\br_\bt_\be_\bx(VERTEX const& vertex,\n-MASK& mask) const {\n-174\n-175 typedef typename MASK::Weight Weight;\n+_\b1_\b3_\b2 void _\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bd_\be_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\be_\bs_\bA_\br_\bo_\bu_\bn_\bd_\bV_\be_\br_\bt_\be_\bx(int incidentEdgeCountAtVertex,\n+133 float const* incidentEdgeSharpnessAroundVertex,\n+134 float* childEdgesSharpnessAroundVertex) const;\n+136\n+138\n+_\b1_\b4_\b4 _\bR_\bu_\bl_\be _\bD_\be_\bt_\be_\br_\bm_\bi_\bn_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bR_\bu_\bl_\be(float vertexSharpness,\n+145 int incidentEdgeCount,\n+146 float const* incidentEdgeSharpness) const;\n+_\b1_\b4_\b7 _\bR_\bu_\bl_\be _\bD_\be_\bt_\be_\br_\bm_\bi_\bn_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bR_\bu_\bl_\be(float vertexSharpness,\n+148 int sharpEdgeCount) const;\n+150\n+_\b1_\b6_\b2 float _\bC_\bo_\bm_\bp_\bu_\bt_\be_\bF_\br_\ba_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bW_\be_\bi_\bg_\bh_\bt_\bA_\bt_\bV_\be_\br_\bt_\be_\bx(float vertexSharpness,\n+163 float childVertexSharpness,\n+164 int incidentEdgeCount,\n+165 float const* incidentEdgeSharpness,\n+166 float const* childEdgesSharpness) const;\n+167\n+168 void _\bG_\be_\bt_\bS_\bh_\ba_\br_\bp_\bE_\bd_\bg_\be_\bP_\ba_\bi_\br_\bO_\bf_\bC_\br_\be_\ba_\bs_\be(float const * incidentEdgeSharpness,\n+169 int incidentEdgeCount,\n+170 int sharpEdgePair[2]) const;\n+171\n+172 // Would these really help? Maybe only need Rules for the vertex-vertex\n+case...\n+173 //\n+174 // Rule DetermineEdgeVertexRule(float parentEdgeSharpness) const;\n+175 // Rule DetermineEdgeVertexRule(float childEdge1Sharpness, float\n+childEdge2Sharpness) const;\n 176\n-177 //\n-178 // A Smooth vertex must be manifold and interior -- manifold boundary\n-vertices will be\n-179 // Creases and non-manifold vertices of any kind will be Corners or\n-Creases. If smooth\n-180 // rules for non-manifold vertices are ever defined, this will need\n-adjusting:\n-181 //\n-182 assert(vertex.GetNumFaces() == vertex.GetNumEdges());\n+177protected:\n+178 float _\bd_\be_\bc_\br_\be_\bm_\be_\bn_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(float sharpness) const;\n+179\n+180private:\n+181 _\bO_\bp_\bt_\bi_\bo_\bn_\bs _options;\n+182};\n 183\n-184 int valence = vertex.GetNumFaces();\n-185\n-186 mask.SetNumVertexWeights(1);\n-187 mask.SetNumEdgeWeights(valence);\n-188 mask.SetNumFaceWeights(valence);\n-189 mask.SetFaceWeightsForFaceCenters(true);\n+184\n+185//\n+186// Inline declarations:\n+187//\n+188inline float\n+_\b1_\b8_\b9_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bh_\ba_\br_\bp_\be_\bn_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bE_\bd_\bg_\be(float /* edgeSharpness */) const {\n 190\n-191 Weight vWeight = (Weight)(valence - 2) / (Weight)valence;\n-192 Weight fWeight = 1.0f / (Weight)(valence * valence);\n-193 Weight eWeight = fWeight;\n-194\n-195 mask.VertexWeight(0) = vWeight;\n-196 for (int i = 0; i < valence; ++i) {\n-197 mask.EdgeWeight(i) = eWeight;\n-198 mask.FaceWeight(i) = fWeight;\n-199 }\n-200}\n+191 //\n+192 // Despite the presence of the BOUNDARY_NONE option, boundary edges are\n+always sharpened.\n+193 // Much of the code relies on sharpness to indicate boundaries to avoid the\n+more complex\n+194 // topological inspection\n+195 //\n+196 return _\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bI_\bN_\bF_\bI_\bN_\bI_\bT_\bE;\n+197}\n+198\n+199inline float\n+_\b2_\b0_\b0_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bh_\ba_\br_\bp_\be_\bn_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bV_\be_\br_\bt_\be_\bx(float vertexSharpness) const {\n 201\n-202//\n-203// Limit masks for position:\n-204//\n-205template <>\n-206template \n-207inline void\n-_\b2_\b0_\b8_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& /* vertex */,\n-MASK& posMask) const {\n-209\n-210 posMask.SetNumVertexWeights(1);\n-211 posMask.SetNumEdgeWeights(0);\n-212 posMask.SetNumFaceWeights(0);\n-213 posMask.SetFaceWeightsForFaceCenters(false);\n+202 return (_options._\bG_\be_\bt_\bV_\bt_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn() == _\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bV_\bT_\bX_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY_\b__\bE_\bD_\bG_\bE_\b__\bA_\bN_\bD_\b__\bC_\bO_\bR_\bN_\bE_\bR) ?\n+203 _\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bI_\bN_\bF_\bI_\bN_\bI_\bT_\bE : vertexSharpness;\n+204}\n+205\n+206inline float\n+_\b2_\b0_\b7_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bd_\be_\bc_\br_\be_\bm_\be_\bn_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(float sharpness) const {\n+208\n+209 if (_\bI_\bs_\bS_\bm_\bo_\bo_\bt_\bh(sharpness)) return _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bS_\bM_\bO_\bO_\bT_\bH; // redundant but\n+most common\n+210 if (_\bI_\bs_\bI_\bn_\bf_\bi_\bn_\bi_\bt_\be(sharpness)) return _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bI_\bN_\bF_\bI_\bN_\bI_\bT_\bE;\n+211 if (sharpness > 1.0f) return (sharpness - 1.0f);\n+212 return _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bS_\bM_\bO_\bO_\bT_\bH;\n+213}\n 214\n-215 posMask.VertexWeight(0) = 1.0f;\n-216}\n+215inline float\n+_\b2_\b1_\b6_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bd_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(float vertexOrEdgeSharpness) const {\n 217\n-218template <>\n-219template \n-220inline void\n-_\b2_\b2_\b1_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& vertex, MASK&\n-posMask,\n-222 int const creaseEnds[2]) const {\n+218 return _\bd_\be_\bc_\br_\be_\bm_\be_\bn_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(vertexOrEdgeSharpness);\n+219}\n+220\n+221inline float\n+_\b2_\b2_\b2_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bd_\be_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(float vertexSharpness) const {\n 223\n-224 typedef typename MASK::Weight Weight;\n-225\n-226 int valence = vertex.GetNumEdges();\n-227\n-228 posMask.SetNumVertexWeights(1);\n-229 posMask.SetNumEdgeWeights(valence);\n-230 posMask.SetNumFaceWeights(0);\n-231 posMask.SetFaceWeightsForFaceCenters(false);\n-232\n-233 Weight vWeight = (Weight)(2.0 / 3.0);\n-234 Weight eWeight = (Weight)(1.0 / 6.0);\n-235\n-236 posMask.VertexWeight(0) = vWeight;\n-237 for (int i = 0; i < valence; ++i) {\n-238 posMask.EdgeWeight(i) = 0.0f;\n-239 }\n-240 posMask.EdgeWeight(creaseEnds[0]) = eWeight;\n-241 posMask.EdgeWeight(creaseEnds[1]) = eWeight;\n-242}\n-243\n-244template <>\n-245template \n-246inline void\n-_\b2_\b4_\b7_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& vertex, MASK&\n-posMask) const {\n-248\n-249 typedef typename MASK::Weight Weight;\n-250\n-251 int valence = vertex.GetNumFaces();\n-252 if (valence == 2) {\n-253 assignCornerLimitMask(vertex, posMask);\n-254 return;\n-255 }\n-256\n-257 posMask.SetNumVertexWeights(1);\n-258 posMask.SetNumEdgeWeights(valence);\n-259 posMask.SetNumFaceWeights(valence);\n-260 posMask.SetFaceWeightsForFaceCenters(false);\n-261\n-262 // Specialize for the regular case:\n-263 if (valence == 4) {\n-264 Weight fWeight = (Weight)(1.0 / 36.0);\n-265 Weight eWeight = (Weight)(1.0 / 9.0);\n-266 Weight vWeight = (Weight)(4.0 / 9.0);\n-267\n-268 posMask.VertexWeight(0) = vWeight;\n-269\n-270 posMask.EdgeWeight(0) = eWeight;\n-271 posMask.EdgeWeight(1) = eWeight;\n-272 posMask.EdgeWeight(2) = eWeight;\n-273 posMask.EdgeWeight(3) = eWeight;\n-274\n-275 posMask.FaceWeight(0) = fWeight;\n-276 posMask.FaceWeight(1) = fWeight;\n-277 posMask.FaceWeight(2) = fWeight;\n-278 posMask.FaceWeight(3) = fWeight;\n-279 } else {\n-280 Weight Valence = (Weight) valence;\n-281\n-282 Weight fWeight = 1.0f / (Valence * (Valence + 5.0f));\n-283 Weight eWeight = 4.0f * fWeight;\n-284 Weight vWeight = 1.0f - Valence * (eWeight + fWeight);\n-285\n-286 posMask.VertexWeight(0) = vWeight;\n-287 for (int i = 0; i < valence; ++i) {\n-288 posMask.EdgeWeight(i) = eWeight;\n-289 posMask.FaceWeight(i) = fWeight;\n-290 }\n-291 }\n-292}\n-293\n-294//\n-295// Limit masks for tangents -- these are stubs for now, or have a temporary\n-296// implementation\n-297//\n-298template <>\n-299template \n-300inline void\n-_\b3_\b0_\b1_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs(VERTEX const& vertex,\n-302 MASK& tan1Mask, MASK& tan2Mask) const {\n-303\n-304 int valence = vertex.GetNumEdges();\n-305\n-306 tan1Mask.SetNumVertexWeights(1);\n-307 tan1Mask.SetNumEdgeWeights(valence);\n-308 tan1Mask.SetNumFaceWeights(0);\n-309 tan1Mask.SetFaceWeightsForFaceCenters(false);\n-310\n-311 tan2Mask.SetNumVertexWeights(1);\n-312 tan2Mask.SetNumEdgeWeights(valence);\n-313 tan2Mask.SetNumFaceWeights(0);\n-314 tan2Mask.SetFaceWeightsForFaceCenters(false);\n-315\n-316 // Should be at least 2 edges -- be sure to clear weights for any more:\n-317 tan1Mask.VertexWeight(0) = -1.0f;\n-318 tan1Mask.EdgeWeight(0) = 1.0f;\n-319 tan1Mask.EdgeWeight(1) = 0.0f;\n-320\n-321 tan2Mask.VertexWeight(0) = -1.0f;\n-322 tan2Mask.EdgeWeight(0) = 0.0f;\n-323 tan2Mask.EdgeWeight(1) = 1.0f;\n-324\n-325 for (int i = 2; i < valence; ++i) {\n-326 tan1Mask.EdgeWeight(i) = 0.0f;\n-327 tan2Mask.EdgeWeight(i) = 0.0f;\n-328 }\n-329}\n-330\n-331template <>\n-332template \n-333inline void\n-_\b3_\b3_\b4_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs(VERTEX const& vertex,\n-335 MASK& tan1Mask, MASK& tan2Mask, int const creaseEnds[2]) const {\n-336\n-337 typedef typename MASK::Weight Weight;\n-338\n-339 //\n-340 // First, the tangent along the crease:\n-341 // The first crease edge is considered the \"leading\" edge of the span\n-342 // of surface for which we are evaluating tangents and the second edge the\n-343 // \"trailing edge\". By convention, the tangent along the crease is oriented\n-344 // in the direction of the leading edge.\n-345 //\n-346 int numEdges = vertex.GetNumEdges();\n-347 int numFaces = vertex.GetNumFaces();\n-348\n-349 tan1Mask.SetNumVertexWeights(1);\n-350 tan1Mask.SetNumEdgeWeights(numEdges);\n-351 tan1Mask.SetNumFaceWeights(numFaces);\n-352 tan1Mask.SetFaceWeightsForFaceCenters(false);\n-353\n-354 tan1Mask.VertexWeight(0) = 0.0f;\n-355 for (int i = 0; i < numEdges; ++i) {\n-356 tan1Mask.EdgeWeight(i) = 0.0f;\n-357 }\n-358 for (int i = 0; i < numFaces; ++i) {\n-359 tan1Mask.FaceWeight(i) = 0.0f;\n-360 }\n-361\n-362 tan1Mask.EdgeWeight(creaseEnds[0]) = 0.5f;\n-363 tan1Mask.EdgeWeight(creaseEnds[1]) = -0.5f;\n-364\n-365 //\n-366 // Second, the tangent across the interior faces:\n-367 // Note this is ambiguous for an interior vertex. We currently return\n-368 // the tangent for the surface in the counter-clockwise span between the\n-369 // leading and trailing edges that form the crease. Given the expected\n-370 // computation of a surface normal as Tan1 X Tan2, this tangent should be\n-371 // oriented \"inward\" from the crease/boundary -- across the surface rather\n-372 // than outward and away from it.\n-373 //\n-374 tan2Mask.SetNumVertexWeights(1);\n-375 tan2Mask.SetNumEdgeWeights(numEdges);\n-376 tan2Mask.SetNumFaceWeights(numFaces);\n-377 tan2Mask.SetFaceWeightsForFaceCenters(false);\n-378\n-379 // Prepend weights of 0 preceding the crease:\n-380 for (int i = 0; i < creaseEnds[0]; ++i) {\n-381 tan2Mask.EdgeWeight(i) = 0.0f;\n-382 tan2Mask.FaceWeight(i) = 0.0f;\n-383 }\n-384\n-385 // Assign weights to crease edge and interior points:\n-386 int interiorEdgeCount = creaseEnds[1] - creaseEnds[0] - 1;\n-387 if (interiorEdgeCount == 1) {\n-388 // The regular case -- uniform B-spline cross-tangent:\n-389\n-390 tan2Mask.VertexWeight(0) = (Weight)(-4.0 / 6.0);\n-391\n-392 tan2Mask.EdgeWeight(creaseEnds[0]) = (Weight)(-1.0 / 6.0);\n-393 tan2Mask.EdgeWeight(creaseEnds[0] + 1) = (Weight)( 4.0 / 6.0);\n-394 tan2Mask.EdgeWeight(creaseEnds[1]) = (Weight)(-1.0 / 6.0);\n-395\n-396 tan2Mask.FaceWeight(creaseEnds[0]) = (Weight)(1.0 / 6.0);\n-397 tan2Mask.FaceWeight(creaseEnds[0] + 1) = (Weight)(1.0 / 6.0);\n-398 } else if (interiorEdgeCount > 1) {\n-399 // The irregular case -- formulae from Biermann et al:\n-400\n-401 double k = (double) (interiorEdgeCount + 1);\n-402 double theta = M_PI / k;\n-403\n-404 double cosTheta = std::cos(theta);\n-405 double sinTheta = std::sin(theta);\n-406\n-407 // Loop/Schaefer use a different divisor here (3*k + cos(theta)):\n-408 double commonDenom = 1.0f / (k * (3.0f + cosTheta));\n-409 double R = (cosTheta + 1.0f) / sinTheta;\n-410\n-411 double vertexWeight = 4.0f * R * (cosTheta - 1.0f);\n-412 double creaseWeight = -R * (1.0f + 2.0f * cosTheta);\n-413\n-414 tan2Mask.VertexWeight(0) = (Weight) (vertexWeight * commonDenom);\n-415\n-416 tan2Mask.EdgeWeight(creaseEnds[0]) = (Weight) (creaseWeight * commonDenom);\n-417 tan2Mask.EdgeWeight(creaseEnds[1]) = (Weight) (creaseWeight * commonDenom);\n-418\n-419 tan2Mask.FaceWeight(creaseEnds[0]) = (Weight) (sinTheta * commonDenom);\n-420\n-421 double sinThetaI = 0.0f;\n-422 double sinThetaIplus1 = sinTheta;\n-423 for (int i = 1; i < k; ++i) {\n-424 sinThetaI = sinThetaIplus1;\n-425 sinThetaIplus1 = std::sin((i+1)*theta);\n-426\n-427 tan2Mask.EdgeWeight(creaseEnds[0] + i) = (Weight) ((4.0f * sinThetaI) *\n-commonDenom);\n-428 tan2Mask.FaceWeight(creaseEnds[0] + i) = (Weight) ((sinThetaI +\n-sinThetaIplus1) * commonDenom);\n-429 }\n-430 } else {\n-431 // Special case for a single face -- simple average of boundary edges:\n-432\n-433 tan2Mask.VertexWeight(0) = -6.0f;\n-434\n-435 tan2Mask.EdgeWeight(creaseEnds[0]) = 3.0f;\n-436 tan2Mask.EdgeWeight(creaseEnds[1]) = 3.0f;\n-437\n-438 tan2Mask.FaceWeight(creaseEnds[0]) = 0.0f;\n-439 }\n-440\n-441 // Append weights of 0 following the crease:\n-442 for (int i = creaseEnds[1]; i < numFaces; ++i) {\n-443 tan2Mask.FaceWeight(i) = 0.0f;\n-444 }\n-445 for (int i = creaseEnds[1] + 1; i < numEdges; ++i) {\n-446 tan2Mask.EdgeWeight(i) = 0.0f;\n-447 }\n-448}\n-449\n-450template <>\n-451template \n-452inline void\n-_\b4_\b5_\b3_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs(VERTEX const& vertex,\n-454 MASK& tan1Mask, MASK& tan2Mask) const {\n-455\n-456 typedef typename MASK::Weight Weight;\n-457\n-458 int valence = vertex.GetNumFaces();\n-459 if (valence == 2) {\n-460 assignCornerLimitTangentMasks(vertex, tan1Mask, tan2Mask);\n-461 return;\n-462 }\n-463\n-464 // Compute tan1 initially -- tan2 is simply a rotation:\n-465 tan1Mask.SetNumVertexWeights(1);\n-466 tan1Mask.SetNumEdgeWeights(valence);\n-467 tan1Mask.SetNumFaceWeights(valence);\n-468 tan1Mask.SetFaceWeightsForFaceCenters(false);\n-469\n-470 tan1Mask.VertexWeight(0) = 0.0f;\n-471\n-472 if (valence == 4) {\n-473 tan1Mask.EdgeWeight(0) = 4.0f;\n-474 tan1Mask.EdgeWeight(1) = 0.0f;\n-475 tan1Mask.EdgeWeight(2) = -4.0f;\n-476 tan1Mask.EdgeWeight(3) = 0.0f;\n-477\n-478 tan1Mask.FaceWeight(0) = 1.0f;\n-479 tan1Mask.FaceWeight(1) = -1.0f;\n-480 tan1Mask.FaceWeight(2) = -1.0f;\n-481 tan1Mask.FaceWeight(3) = 1.0f;\n-482 } else {\n-483 double theta = 2.0f * M_PI / (double)valence;\n-484\n-485 double cosTheta = std::cos(theta);\n-486 double cosHalfTheta = std::cos(theta * 0.5f);\n-487\n-488 double lambda = (5.0 / 16.0) + (1.0 / 16.0) *\n-489 (cosTheta + cosHalfTheta * std::sqrt(2.0f * (9.0f + cosTheta)));\n-490\n-491 double edgeWeightScale = 4.0f;\n-492 double faceWeightScale = 1.0f / (4.0f * lambda - 1.0f);\n-493\n-494 for (int i = 0; i < valence; ++i) {\n-495 double cosThetaI = std::cos( i * theta);\n-496 double cosThetaIplus1 = std::cos((i+1)* theta);\n-497\n-498 tan1Mask.EdgeWeight(i) = (Weight) (edgeWeightScale * cosThetaI);\n-499 tan1Mask.FaceWeight(i) = (Weight) (faceWeightScale * (cosThetaI +\n-cosThetaIplus1));\n-500 }\n-501 }\n-502\n-503 // Now rotate/copy tan1 weights to tan2:\n-504 tan2Mask.SetNumVertexWeights(1);\n-505 tan2Mask.SetNumEdgeWeights(valence);\n-506 tan2Mask.SetNumFaceWeights(valence);\n-507 tan2Mask.SetFaceWeightsForFaceCenters(false);\n-508\n-509 tan2Mask.VertexWeight(0) = 0.0f;\n-510 if (valence == 4) {\n-511 tan2Mask.EdgeWeight(0) = 0.0f;\n-512 tan2Mask.EdgeWeight(1) = 4.0f;\n-513 tan2Mask.EdgeWeight(2) = 0.0f;\n-514 tan2Mask.EdgeWeight(3) = -4.0f;\n-515\n-516 tan2Mask.FaceWeight(0) = 1.0f;\n-517 tan2Mask.FaceWeight(1) = 1.0f;\n-518 tan2Mask.FaceWeight(2) = -1.0f;\n-519 tan2Mask.FaceWeight(3) = -1.0f;\n-520 } else {\n-521 tan2Mask.EdgeWeight(0) = tan1Mask.EdgeWeight(valence-1);\n-522 tan2Mask.FaceWeight(0) = tan1Mask.FaceWeight(valence-1);\n-523 for (int i = 1; i < valence; ++i) {\n-524 tan2Mask.EdgeWeight(i) = tan1Mask.EdgeWeight(i-1);\n-525 tan2Mask.FaceWeight(i) = tan1Mask.FaceWeight(i-1);\n-526 }\n-527 }\n-528}\n-529\n-530} // end namespace sdc\n-531\n-532} // end namespace OPENSUBDIV_VERSION\n-533using namespace OPENSUBDIV_VERSION;\n-534} // end namespace OpenSubdiv\n-535\n-536#endif /* OPENSUBDIV3_SDC_CATMARK_SCHEME_H */\n+224 return _\bd_\be_\bc_\br_\be_\bm_\be_\bn_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs(vertexSharpness);\n+225}\n+226\n+227inline void\n+_\b2_\b2_\b8_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bG_\be_\bt_\bS_\bh_\ba_\br_\bp_\bE_\bd_\bg_\be_\bP_\ba_\bi_\br_\bO_\bf_\bC_\br_\be_\ba_\bs_\be(float const * incidentEdgeSharpness, int\n+incidentEdgeCount,\n+229 int sharpEdgePair[2]) const {\n+230\n+231 // Only to be called when a crease is present at a vertex -- exactly two\n+sharp\n+232 // edges are expected here:\n+233 //\n+234 sharpEdgePair[0] = 0;\n+235 while (_\bI_\bs_\bS_\bm_\bo_\bo_\bt_\bh(incidentEdgeSharpness[sharpEdgePair[0]])) ++ sharpEdgePair\n+[0];\n+236\n+237 sharpEdgePair[1] = incidentEdgeCount - 1;\n+238 while (_\bI_\bs_\bS_\bm_\bo_\bo_\bt_\bh(incidentEdgeSharpness[sharpEdgePair[1]])) -- sharpEdgePair\n+[1];\n+239}\n+240\n+241} // end namespace sdc\n+242\n+243} // end namespace OPENSUBDIV_VERSION\n+244using namespace OPENSUBDIV_VERSION;\n+245} // end namespace OpenSubdiv\n+246\n+247#endif /* OPENSUBDIV3_SDC_CREASE_H */\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bp_\bl_\bi_\bt\n-Split\n-Enumerated type for all face splitting schemes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b4_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bP_\bL_\bI_\bT_\b__\bT_\bO_\b__\bQ_\bU_\bA_\bD_\bS\n-@ SPLIT_TO_QUADS\n-Used by Catmark and Bilinear.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b4_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\bR_\bI_\b__\bS_\bU_\bB_\b__\bS_\bM_\bO_\bO_\bT_\bH\n-@ TRI_SUB_SMOOTH\n-\"smooth triangle\" weights (Catmark scheme only)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b7_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bE_\bd_\bg_\be\n-void assignSmoothMaskForEdge(EDGE const &edge, MASK &mask) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bG_\be_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\bi_\bc_\ba_\bl_\bS_\bp_\bl_\bi_\bt_\bT_\by_\bp_\be\n-static Split GetTopologicalSplitType()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bV_\be_\br_\bt_\be_\bx\n-void assignCreaseMaskForVertex(VERTEX const &edge, MASK &mask, int const\n-creaseEnds[2]) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs\n-void assignCreaseLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK\n-&tan2, int const creaseEnds[2]) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be\n-static int GetRegularFaceSize()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk\n-void assignSmoothLimitMask(VERTEX const &vertex, MASK &pos) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bN_\be_\bi_\bg_\bh_\bb_\bo_\br_\bh_\bo_\bo_\bd_\bS_\bi_\bz_\be\n-static int GetLocalNeighborhoodSize()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk\n-void assignCreaseLimitMask(VERTEX const &vertex, MASK &pos, int const\n-creaseEnds[2]) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bV_\be_\br_\bt_\be_\bx\n-void assignSmoothMaskForVertex(VERTEX const &edge, MASK &mask) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be\n-static int GetRegularVertexValence()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs\n-void assignSmoothLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK\n-&tan2) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk\n-void assignCornerLimitMask(VERTEX const &vertex, MASK &pos) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs\n-void assignCornerLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK\n-&tan2) const\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be\n+Types, constants and utilities related to semi-sharp creasing \u00e2\u0080\u0093 whose\n+implementation is independent o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b6_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bd_\be_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n+float SubdivideVertexSharpness(float vertexSharpness) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b2_\b2_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bI_\bs_\bI_\bn_\bf_\bi_\bn_\bi_\bt_\be\n+static bool IsInfinite(float sharpness)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b7_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be\n+Rule\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bO_\bR_\bN_\bE_\bR\n+@ RULE_CORNER\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bD_\bA_\bR_\bT\n+@ RULE_DART\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bS_\bM_\bO_\bO_\bT_\bH\n+@ RULE_SMOOTH\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bC_\bR_\bE_\bA_\bS_\bE\n+@ RULE_CREASE\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bU_\bL_\bE_\b__\bU_\bN_\bK_\bN_\bO_\bW_\bN\n+@ RULE_UNKNOWN\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bh_\ba_\br_\bp_\be_\bn_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bV_\be_\br_\bt_\be_\bx\n+float SharpenBoundaryVertex(float edgeSharpness) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b2_\b0_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bS_\bM_\bO_\bO_\bT_\bH\n+static float const SHARPNESS_SMOOTH\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b6_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bG_\be_\bt_\bS_\bh_\ba_\br_\bp_\bE_\bd_\bg_\be_\bP_\ba_\bi_\br_\bO_\bf_\bC_\br_\be_\ba_\bs_\be\n+void GetSharpEdgePairOfCrease(float const *incidentEdgeSharpness, int\n+incidentEdgeCount, int sharpEdgePair[2]) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b2_\b2_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bH_\bA_\bR_\bP_\bN_\bE_\bS_\bS_\b__\bI_\bN_\bF_\bI_\bN_\bI_\bT_\bE\n+static float const SHARPNESS_INFINITE\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b6_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bD_\be_\bt_\be_\br_\bm_\bi_\bn_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bR_\bu_\bl_\be\n+Rule DetermineVertexVertexRule(float vertexSharpness, int incidentEdgeCount,\n+float const *incidentEdgeSharpness) const\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bd_\be_\bc_\br_\be_\bm_\be_\bn_\bt_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n+float decrementSharpness(float sharpness) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b2_\b0_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bI_\bs_\bS_\bm_\bo_\bo_\bt_\bh\n+static bool IsSmooth(float sharpness)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b7_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bD_\be_\bt_\be_\br_\bm_\bi_\bn_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bR_\bu_\bl_\be\n+Rule DetermineVertexVertexRule(float vertexSharpness, int sharpEdgeCount) const\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bI_\bs_\bU_\bn_\bi_\bf_\bo_\br_\bm\n+bool IsUniform() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b9_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bI_\bs_\bS_\be_\bm_\bi_\bS_\bh_\ba_\br_\bp\n+static bool IsSemiSharp(float sharpness)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b7_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bC_\br_\be_\ba_\bs_\be\n+Crease(Options const &options)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b9_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:\n+_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bd_\be_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\be_\bs_\bA_\br_\bo_\bu_\bn_\bd_\bV_\be_\br_\bt_\be_\bx\n+void SubdivideEdgeSharpnessesAroundVertex(int incidentEdgeCountAtVertex, float\n+const *incidentEdgeSharpnessAroundVertex, float\n+*childEdgesSharpnessAroundVertex) const\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bd_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs\n+float SubdivideUniformSharpness(float vertexOrEdgeSharpness) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b2_\b1_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bC_\br_\be_\ba_\bs_\be\n+Crease()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b9_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bh_\ba_\br_\bp_\be_\bn_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bE_\bd_\bg_\be\n+float SharpenBoundaryEdge(float edgeSharpness) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b1_\b8_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bF_\br_\ba_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bW_\be_\bi_\bg_\bh_\bt_\bA_\bt_\bV_\be_\br_\bt_\be_\bx\n+float ComputeFractionalWeightAtVertex(float vertexSharpness, float\n+childVertexSharpness, int incidentEdgeCount, float const\n+*incidentEdgeSharpness, float const *childEdgesSharpness) const\n+Transitional weighting: When the rules applicable to a parent vertex and its\n+child differ,...\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bS_\bu_\bb_\bd_\bi_\bv_\bi_\bd_\be_\bE_\bd_\bg_\be_\bS_\bh_\ba_\br_\bp_\bn_\be_\bs_\bs_\bA_\bt_\bV_\be_\br_\bt_\be_\bx\n+float SubdivideEdgeSharpnessAtVertex(float edgeSharpness, int\n+incidentEdgeCountAtEndVertex, float const *edgeSharpnessAroundEndVertex) const\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bI_\bs_\bS_\bh_\ba_\br_\bp\n+static bool IsSharp(float sharpness)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b7_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\b~_\bC_\br_\be_\ba_\bs_\be\n+~Crease()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b9_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n+All supported options applying to subdivision scheme.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b5_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bR_\bE_\bA_\bS_\bE_\b__\bU_\bN_\bI_\bF_\bO_\bR_\bM\n+@ CREASE_UNIFORM\n+Catmark rule.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b6_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\be_\bt_\bC_\br_\be_\ba_\bs_\bi_\bn_\bg_\bM_\be_\bt_\bh_\bo_\bd\n+CreasingMethod GetCreasingMethod() const\n+Get edge crease rule.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b1_\b0_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\be_\bt_\bV_\bt_\bx_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn\n+VtxBoundaryInterpolation GetVtxBoundaryInterpolation() const\n+Get vertex boundary interpolation rule.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b8_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bV_\bT_\bX_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY_\b__\bE_\bD_\bG_\bE_\b__\bA_\bN_\bD_\b__\bC_\bO_\bR_\bN_\bE_\bR\n+@ VTX_BOUNDARY_EDGE_AND_CORNER\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b5_\b7\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bs_\bd_\bc\n- * _\bc_\ba_\bt_\bm_\ba_\br_\bk_\bS_\bc_\bh_\be_\bm_\be_\b._\bh\n+ * _\bc_\br_\be_\ba_\bs_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00785.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00785.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/sdc/bilinearScheme.h File Reference\n+OpenSubdiv: opensubdiv/sdc/catmarkScheme.h File Reference\n \n \n \n \n \n \n \n@@ -89,19 +89,21 @@\n
    \n
    \n
    \n \n
    \n \n-
    bilinearScheme.h File Reference
    \n+
    catmarkScheme.h File Reference
    \n
    \n
    \n
    #include "../version.h"
    \n-#include "../sdc/scheme.h"
    \n+#include "../sdc/scheme.h"
    \n+#include <cassert>
    \n+#include <cmath>
    \n
    \n

    Go to the source code of this file.

    \n \n \n \n \n@@ -111,13 +113,13 @@\n \n

    \n Namespaces

    namespace  OpenSubdiv
     
     
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +1,22 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-bilinearScheme.h File Reference\n+catmarkScheme.h File Reference\n #include \"../version.h\"\n #include \"_\b._\b._\b/_\bs_\bd_\bc_\b/_\bs_\bc_\bh_\be_\bm_\be_\b._\bh\"\n+#include \n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bs_\bd_\bc\n- * _\bb_\bi_\bl_\bi_\bn_\be_\ba_\br_\bS_\bc_\bh_\be_\bm_\be_\b._\bh\n+ * _\bc_\ba_\bt_\bm_\ba_\br_\bk_\bS_\bc_\bh_\be_\bm_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00785_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00785_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/sdc/bilinearScheme.h Source File\n+OpenSubdiv: opensubdiv/sdc/catmarkScheme.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
    No Matches
    \n
    \n
    \n
    \n
    \n \n
    \n-
    bilinearScheme.h
    \n+
    catmarkScheme.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n
    2// Copyright 2014 DreamWorks Animation LLC.
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n@@ -118,193 +118,566 @@\n
    17//
    \n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n-
    24#ifndef OPENSUBDIV3_SDC_BILINEAR_SCHEME_H
    \n-
    25#define OPENSUBDIV3_SDC_BILINEAR_SCHEME_H
    \n+
    24#ifndef OPENSUBDIV3_SDC_CATMARK_SCHEME_H
    \n+
    25#define OPENSUBDIV3_SDC_CATMARK_SCHEME_H
    \n
    26
    \n
    27#include "../version.h"
    \n
    28
    \n
    29#include "../sdc/scheme.h"
    \n
    30
    \n-
    31namespace OpenSubdiv {
    \n-
    32namespace OPENSUBDIV_VERSION {
    \n+
    31#include <cassert>
    \n+
    32#include <cmath>
    \n
    33
    \n-
    \n-
    34namespace Sdc {
    \n-
    35
    \n-
    36//
    \n-
    37// Specializations for Scheme<SCHEME_BILINEAR>:
    \n-
    38//
    \n-
    39
    \n-
    40//
    \n-
    41// Bilinear traits:
    \n-
    42//
    \n-
    43template <>
    \n-\n-
    45
    \n+
    34namespace OpenSubdiv {
    \n+
    35namespace OPENSUBDIV_VERSION {
    \n+
    36
    \n+
    37namespace Sdc {
    \n+
    38
    \n+
    39//
    \n+
    40// Specializations for Scheme<SCHEME_CATMARK>:
    \n+
    41//
    \n+
    42
    \n+
    43//
    \n+
    44// Catmark traits:
    \n+
    45//
    \n
    46template <>
    \n-\n+\n
    48
    \n
    49template <>
    \n-\n+\n
    51
    \n
    52template <>
    \n-\n+\n
    54
    \n-
    55
    \n-
    56//
    \n-
    57// Refinement masks:
    \n-
    58//
    \n-
    59template <>
    \n-
    60template <typename EDGE, typename MASK>
    \n-
    61void
    \n-
    \n-\n-\n-
    64 // This should be inline, otherwise trivially replicate it:
    \n-
    65 assignCreaseMaskForEdge(edge, mask);
    \n-
    66}
    \n-
    \n-
    67
    \n+
    55template <>
    \n+\n+
    57
    \n+
    58
    \n+
    59//
    \n+
    60// Masks for edge-vertices: the hard Crease mask does not need to be specialized
    \n+
    61// (simply the midpoint), so all that is left is the Smooth case:
    \n+
    62//
    \n+
    63// The Smooth mask is complicated by the need to support the "triangle subdivision"
    \n+
    64// option, which applies different weighting in the presence of triangles. It is
    \n+
    65// up for debate as to whether this is useful or not -- we may be able to deprecate
    \n+
    66// this option.
    \n+
    67//
    \n
    68template <>
    \n-
    69template <typename VERTEX, typename MASK>
    \n-
    70void
    \n+
    69template <typename EDGE, typename MASK>
    \n+
    70inline void
    \n
    \n-
    71Scheme<SCHEME_BILINEAR>::ComputeVertexVertexMask(VERTEX const& vertex, MASK& mask,
    \n-\n-
    73 // This should be inline, otherwise trivially replicate it:
    \n-
    74 assignCornerMaskForVertex(vertex, mask);
    \n-
    75}
    \n-
    \n+
    71Scheme<SCHEME_CATMARK>::assignSmoothMaskForEdge(EDGE const& edge, MASK& mask) const {
    \n+
    72
    \n+
    73 typedef typename MASK::Weight Weight;
    \n+
    74
    \n+
    75 int faceCount = edge.GetNumFaces();
    \n
    76
    \n-
    77
    \n-
    78//
    \n-
    79// Limit masks for position -- the limit position of all vertices is the refined vertex.
    \n-
    80//
    \n-
    81template <>
    \n-
    82template <typename VERTEX, typename MASK>
    \n-
    83inline void
    \n-
    \n-
    84Scheme<SCHEME_BILINEAR>::assignCornerLimitMask(VERTEX const& /* vertex */, MASK& posMask) const {
    \n-
    85
    \n-
    86 posMask.SetNumVertexWeights(1);
    \n-
    87 posMask.SetNumEdgeWeights(0);
    \n-
    88 posMask.SetNumFaceWeights(0);
    \n-
    89 posMask.SetFaceWeightsForFaceCenters(false);
    \n-
    90
    \n-
    91 posMask.VertexWeight(0) = 1.0f;
    \n-
    92}
    \n-
    \n-
    93
    \n-
    94template <>
    \n-
    95template <typename VERTEX, typename MASK>
    \n-
    96inline void
    \n-
    \n-
    97Scheme<SCHEME_BILINEAR>::assignCreaseLimitMask(VERTEX const& vertex, MASK& posMask,
    \n-
    98 int const /* creaseEnds */[2]) const {
    \n-
    99
    \n-
    100 assignCornerLimitMask(vertex, posMask);
    \n-
    101}
    \n-
    \n-
    102
    \n-
    103template <>
    \n-
    104template <typename VERTEX, typename MASK>
    \n-
    105inline void
    \n-
    \n-
    106Scheme<SCHEME_BILINEAR>::assignSmoothLimitMask(VERTEX const& vertex, MASK& posMask) const {
    \n-
    107
    \n-
    108 assignCornerLimitMask(vertex, posMask);
    \n-
    109}
    \n-
    \n+
    77 mask.SetNumVertexWeights(2);
    \n+
    78 mask.SetNumEdgeWeights(0);
    \n+
    79 mask.SetNumFaceWeights(faceCount);
    \n+
    80 mask.SetFaceWeightsForFaceCenters(true);
    \n+
    81
    \n+
    82 //
    \n+
    83 // Determine if we need to inspect incident faces and apply alternate weighting for
    \n+
    84 // triangles -- and if so, determine which of the two are triangles.
    \n+
    85 //
    \n+
    86 bool face0IsTri = false;
    \n+
    87 bool face1IsTri = false;
    \n+
    88 bool useTriangleOption = (_options.GetTriangleSubdivision() == Options::TRI_SUB_SMOOTH);
    \n+
    89 if (useTriangleOption) {
    \n+
    90 if (faceCount == 2) {
    \n+
    91 //
    \n+
    92 // Ideally we want to avoid this inspection when we have already subdivided at
    \n+
    93 // least once -- need something in the Edge interface to help avoid this, e.g.
    \n+
    94 // an IsRegular() query, the subdivision level...
    \n+
    95 //
    \n+
    96 int vertsPerFace[2];
    \n+
    97 edge.GetNumVerticesPerFace(vertsPerFace);
    \n+
    98
    \n+
    99 face0IsTri = (vertsPerFace[0] == 3);
    \n+
    100 face1IsTri = (vertsPerFace[1] == 3);
    \n+
    101 useTriangleOption = face0IsTri || face1IsTri;
    \n+
    102 } else {
    \n+
    103 useTriangleOption = false;
    \n+
    104 }
    \n+
    105 }
    \n+
    106
    \n+
    107 if (! useTriangleOption) {
    \n+
    108 mask.VertexWeight(0) = 0.25f;
    \n+
    109 mask.VertexWeight(1) = 0.25f;
    \n
    110
    \n-
    111//
    \n-
    112// Limit masks for tangents -- these are ambiguous around all vertices. Provide
    \n-
    113// the tangents based on the incident edges of the first face.
    \n-
    114//
    \n-
    115template <>
    \n-
    116template <typename VERTEX, typename MASK>
    \n-
    117inline void
    \n-
    \n-\n-
    119 MASK& tan1Mask, MASK& tan2Mask) const {
    \n-
    120
    \n-
    121 tan1Mask.SetNumVertexWeights(1);
    \n-
    122 tan1Mask.SetNumEdgeWeights(2);
    \n-
    123 tan1Mask.SetNumFaceWeights(0);
    \n-
    124 tan1Mask.SetFaceWeightsForFaceCenters(false);
    \n+
    111 if (faceCount == 2) {
    \n+
    112 mask.FaceWeight(0) = 0.25f;
    \n+
    113 mask.FaceWeight(1) = 0.25f;
    \n+
    114 } else {
    \n+
    115 Weight fWeight = 0.5f / (Weight)faceCount;
    \n+
    116 for (int i = 0; i < faceCount; ++i) {
    \n+
    117 mask.FaceWeight(i) = fWeight;
    \n+
    118 }
    \n+
    119 }
    \n+
    120 } else {
    \n+
    121 //
    \n+
    122 // This mimics the implementation in Hbr in terms of order of operations.
    \n+
    123 //
    \n+
    124 const Weight CATMARK_SMOOTH_TRI_EDGE_WEIGHT = (Weight) 0.470;
    \n
    125
    \n-
    126 tan2Mask.SetNumVertexWeights(1);
    \n-
    127 tan2Mask.SetNumEdgeWeights(2);
    \n-
    128 tan2Mask.SetNumFaceWeights(0);
    \n-
    129 tan2Mask.SetFaceWeightsForFaceCenters(false);
    \n-
    130
    \n-
    131 tan1Mask.VertexWeight(0) = -1.0f;
    \n-
    132 tan1Mask.EdgeWeight(0) = 1.0f;
    \n-
    133 tan1Mask.EdgeWeight(1) = 0.0f;
    \n+
    126 Weight f0Weight = face0IsTri ? CATMARK_SMOOTH_TRI_EDGE_WEIGHT : 0.25f;
    \n+
    127 Weight f1Weight = face1IsTri ? CATMARK_SMOOTH_TRI_EDGE_WEIGHT : 0.25f;
    \n+
    128
    \n+
    129 Weight fWeight = 0.5f * (f0Weight + f1Weight);
    \n+
    130 Weight vWeight = 0.5f * (1.0f - 2.0f * fWeight);
    \n+
    131
    \n+
    132 mask.VertexWeight(0) = vWeight;
    \n+
    133 mask.VertexWeight(1) = vWeight;
    \n
    134
    \n-
    135 tan2Mask.VertexWeight(0) = -1.0f;
    \n-
    136 tan2Mask.EdgeWeight(0) = 0.0f;
    \n-
    137 tan2Mask.EdgeWeight(1) = 1.0f;
    \n+
    135 mask.FaceWeight(0) = fWeight;
    \n+
    136 mask.FaceWeight(1) = fWeight;
    \n+
    137 }
    \n
    138}
    \n
    \n
    139
    \n-
    140template <>
    \n-
    141template <typename VERTEX, typename MASK>
    \n-
    142inline void
    \n-
    \n-\n-
    144 MASK& tan1Mask, MASK& tan2Mask, int const /* creaseEnds */[2]) const {
    \n-
    145
    \n-
    146 assignCornerLimitTangentMasks(vertex, tan1Mask, tan2Mask);
    \n-
    147}
    \n-
    \n-
    148
    \n-
    149template <>
    \n-
    150template <typename VERTEX, typename MASK>
    \n-
    151inline void
    \n-
    \n-\n-
    153 MASK& tan1Mask, MASK& tan2Mask) const {
    \n-
    154
    \n-
    155 assignCornerLimitTangentMasks(vertex, tan1Mask, tan2Mask);
    \n-
    156}
    \n-
    \n-
    157
    \n-
    158} // end namespace sdc
    \n-
    \n-
    159
    \n-
    160} // end namespace OPENSUBDIV_VERSION
    \n-
    161using namespace OPENSUBDIV_VERSION;
    \n-
    162} // end namespace OpenSubdiv
    \n-
    163
    \n-
    164#endif /* OPENSUBDIV3_SDC_BILINEAR_SCHEME_H */
    \n-\n+
    140
    \n+
    141//
    \n+
    142// Masks for vertex-vertices: the hard Corner mask does not need to be specialized
    \n+
    143// (simply the vertex itself), leaving the Crease and Smooth cases (Dart is smooth):
    \n+
    144//
    \n+
    145template <>
    \n+
    146template <typename VERTEX, typename MASK>
    \n+
    147inline void
    \n+
    \n+\n+
    149 int const creaseEnds[2]) const {
    \n+
    150 typedef typename MASK::Weight Weight;
    \n+
    151
    \n+
    152 int valence = vertex.GetNumEdges();
    \n+
    153
    \n+
    154 mask.SetNumVertexWeights(1);
    \n+
    155 mask.SetNumEdgeWeights(valence);
    \n+
    156 mask.SetNumFaceWeights(0);
    \n+
    157 mask.SetFaceWeightsForFaceCenters(false);
    \n+
    158
    \n+
    159 Weight vWeight = 0.75f;
    \n+
    160 Weight eWeight = 0.125f;
    \n+
    161
    \n+
    162 mask.VertexWeight(0) = vWeight;
    \n+
    163 for (int i = 0; i < valence; ++i) {
    \n+
    164 mask.EdgeWeight(i) = 0.0f;
    \n+
    165 }
    \n+
    166 mask.EdgeWeight(creaseEnds[0]) = eWeight;
    \n+
    167 mask.EdgeWeight(creaseEnds[1]) = eWeight;
    \n+
    168}
    \n+
    \n+
    169
    \n+
    170template <>
    \n+
    171template <typename VERTEX, typename MASK>
    \n+
    172inline void
    \n+
    \n+
    173Scheme<SCHEME_CATMARK>::assignSmoothMaskForVertex(VERTEX const& vertex, MASK& mask) const {
    \n+
    174
    \n+
    175 typedef typename MASK::Weight Weight;
    \n+
    176
    \n+
    177 //
    \n+
    178 // A Smooth vertex must be manifold and interior -- manifold boundary vertices will be
    \n+
    179 // Creases and non-manifold vertices of any kind will be Corners or Creases. If smooth
    \n+
    180 // rules for non-manifold vertices are ever defined, this will need adjusting:
    \n+
    181 //
    \n+
    182 assert(vertex.GetNumFaces() == vertex.GetNumEdges());
    \n+
    183
    \n+
    184 int valence = vertex.GetNumFaces();
    \n+
    185
    \n+
    186 mask.SetNumVertexWeights(1);
    \n+
    187 mask.SetNumEdgeWeights(valence);
    \n+
    188 mask.SetNumFaceWeights(valence);
    \n+
    189 mask.SetFaceWeightsForFaceCenters(true);
    \n+
    190
    \n+
    191 Weight vWeight = (Weight)(valence - 2) / (Weight)valence;
    \n+
    192 Weight fWeight = 1.0f / (Weight)(valence * valence);
    \n+
    193 Weight eWeight = fWeight;
    \n+
    194
    \n+
    195 mask.VertexWeight(0) = vWeight;
    \n+
    196 for (int i = 0; i < valence; ++i) {
    \n+
    197 mask.EdgeWeight(i) = eWeight;
    \n+
    198 mask.FaceWeight(i) = fWeight;
    \n+
    199 }
    \n+
    200}
    \n+
    \n+
    201
    \n+
    202//
    \n+
    203// Limit masks for position:
    \n+
    204//
    \n+
    205template <>
    \n+
    206template <typename VERTEX, typename MASK>
    \n+
    207inline void
    \n+
    \n+
    208Scheme<SCHEME_CATMARK>::assignCornerLimitMask(VERTEX const& /* vertex */, MASK& posMask) const {
    \n+
    209
    \n+
    210 posMask.SetNumVertexWeights(1);
    \n+
    211 posMask.SetNumEdgeWeights(0);
    \n+
    212 posMask.SetNumFaceWeights(0);
    \n+
    213 posMask.SetFaceWeightsForFaceCenters(false);
    \n+
    214
    \n+
    215 posMask.VertexWeight(0) = 1.0f;
    \n+
    216}
    \n+
    \n+
    217
    \n+
    218template <>
    \n+
    219template <typename VERTEX, typename MASK>
    \n+
    220inline void
    \n+
    \n+
    221Scheme<SCHEME_CATMARK>::assignCreaseLimitMask(VERTEX const& vertex, MASK& posMask,
    \n+
    222 int const creaseEnds[2]) const {
    \n+
    223
    \n+
    224 typedef typename MASK::Weight Weight;
    \n+
    225
    \n+
    226 int valence = vertex.GetNumEdges();
    \n+
    227
    \n+
    228 posMask.SetNumVertexWeights(1);
    \n+
    229 posMask.SetNumEdgeWeights(valence);
    \n+
    230 posMask.SetNumFaceWeights(0);
    \n+
    231 posMask.SetFaceWeightsForFaceCenters(false);
    \n+
    232
    \n+
    233 Weight vWeight = (Weight)(2.0 / 3.0);
    \n+
    234 Weight eWeight = (Weight)(1.0 / 6.0);
    \n+
    235
    \n+
    236 posMask.VertexWeight(0) = vWeight;
    \n+
    237 for (int i = 0; i < valence; ++i) {
    \n+
    238 posMask.EdgeWeight(i) = 0.0f;
    \n+
    239 }
    \n+
    240 posMask.EdgeWeight(creaseEnds[0]) = eWeight;
    \n+
    241 posMask.EdgeWeight(creaseEnds[1]) = eWeight;
    \n+
    242}
    \n+
    \n+
    243
    \n+
    244template <>
    \n+
    245template <typename VERTEX, typename MASK>
    \n+
    246inline void
    \n+
    \n+
    247Scheme<SCHEME_CATMARK>::assignSmoothLimitMask(VERTEX const& vertex, MASK& posMask) const {
    \n+
    248
    \n+
    249 typedef typename MASK::Weight Weight;
    \n+
    250
    \n+
    251 int valence = vertex.GetNumFaces();
    \n+
    252 if (valence == 2) {
    \n+
    253 assignCornerLimitMask(vertex, posMask);
    \n+
    254 return;
    \n+
    255 }
    \n+
    256
    \n+
    257 posMask.SetNumVertexWeights(1);
    \n+
    258 posMask.SetNumEdgeWeights(valence);
    \n+
    259 posMask.SetNumFaceWeights(valence);
    \n+
    260 posMask.SetFaceWeightsForFaceCenters(false);
    \n+
    261
    \n+
    262 // Specialize for the regular case:
    \n+
    263 if (valence == 4) {
    \n+
    264 Weight fWeight = (Weight)(1.0 / 36.0);
    \n+
    265 Weight eWeight = (Weight)(1.0 / 9.0);
    \n+
    266 Weight vWeight = (Weight)(4.0 / 9.0);
    \n+
    267
    \n+
    268 posMask.VertexWeight(0) = vWeight;
    \n+
    269
    \n+
    270 posMask.EdgeWeight(0) = eWeight;
    \n+
    271 posMask.EdgeWeight(1) = eWeight;
    \n+
    272 posMask.EdgeWeight(2) = eWeight;
    \n+
    273 posMask.EdgeWeight(3) = eWeight;
    \n+
    274
    \n+
    275 posMask.FaceWeight(0) = fWeight;
    \n+
    276 posMask.FaceWeight(1) = fWeight;
    \n+
    277 posMask.FaceWeight(2) = fWeight;
    \n+
    278 posMask.FaceWeight(3) = fWeight;
    \n+
    279 } else {
    \n+
    280 Weight Valence = (Weight) valence;
    \n+
    281
    \n+
    282 Weight fWeight = 1.0f / (Valence * (Valence + 5.0f));
    \n+
    283 Weight eWeight = 4.0f * fWeight;
    \n+
    284 Weight vWeight = 1.0f - Valence * (eWeight + fWeight);
    \n+
    285
    \n+
    286 posMask.VertexWeight(0) = vWeight;
    \n+
    287 for (int i = 0; i < valence; ++i) {
    \n+
    288 posMask.EdgeWeight(i) = eWeight;
    \n+
    289 posMask.FaceWeight(i) = fWeight;
    \n+
    290 }
    \n+
    291 }
    \n+
    292}
    \n+
    \n+
    293
    \n+
    294//
    \n+
    295// Limit masks for tangents -- these are stubs for now, or have a temporary
    \n+
    296// implementation
    \n+
    297//
    \n+
    298template <>
    \n+
    299template <typename VERTEX, typename MASK>
    \n+
    300inline void
    \n+
    \n+\n+
    302 MASK& tan1Mask, MASK& tan2Mask) const {
    \n+
    303
    \n+
    304 int valence = vertex.GetNumEdges();
    \n+
    305
    \n+
    306 tan1Mask.SetNumVertexWeights(1);
    \n+
    307 tan1Mask.SetNumEdgeWeights(valence);
    \n+
    308 tan1Mask.SetNumFaceWeights(0);
    \n+
    309 tan1Mask.SetFaceWeightsForFaceCenters(false);
    \n+
    310
    \n+
    311 tan2Mask.SetNumVertexWeights(1);
    \n+
    312 tan2Mask.SetNumEdgeWeights(valence);
    \n+
    313 tan2Mask.SetNumFaceWeights(0);
    \n+
    314 tan2Mask.SetFaceWeightsForFaceCenters(false);
    \n+
    315
    \n+
    316 // Should be at least 2 edges -- be sure to clear weights for any more:
    \n+
    317 tan1Mask.VertexWeight(0) = -1.0f;
    \n+
    318 tan1Mask.EdgeWeight(0) = 1.0f;
    \n+
    319 tan1Mask.EdgeWeight(1) = 0.0f;
    \n+
    320
    \n+
    321 tan2Mask.VertexWeight(0) = -1.0f;
    \n+
    322 tan2Mask.EdgeWeight(0) = 0.0f;
    \n+
    323 tan2Mask.EdgeWeight(1) = 1.0f;
    \n+
    324
    \n+
    325 for (int i = 2; i < valence; ++i) {
    \n+
    326 tan1Mask.EdgeWeight(i) = 0.0f;
    \n+
    327 tan2Mask.EdgeWeight(i) = 0.0f;
    \n+
    328 }
    \n+
    329}
    \n+
    \n+
    330
    \n+
    331template <>
    \n+
    332template <typename VERTEX, typename MASK>
    \n+
    333inline void
    \n+
    \n+\n+
    335 MASK& tan1Mask, MASK& tan2Mask, int const creaseEnds[2]) const {
    \n+
    336
    \n+
    337 typedef typename MASK::Weight Weight;
    \n+
    338
    \n+
    339 //
    \n+
    340 // First, the tangent along the crease:
    \n+
    341 // The first crease edge is considered the "leading" edge of the span
    \n+
    342 // of surface for which we are evaluating tangents and the second edge the
    \n+
    343 // "trailing edge". By convention, the tangent along the crease is oriented
    \n+
    344 // in the direction of the leading edge.
    \n+
    345 //
    \n+
    346 int numEdges = vertex.GetNumEdges();
    \n+
    347 int numFaces = vertex.GetNumFaces();
    \n+
    348
    \n+
    349 tan1Mask.SetNumVertexWeights(1);
    \n+
    350 tan1Mask.SetNumEdgeWeights(numEdges);
    \n+
    351 tan1Mask.SetNumFaceWeights(numFaces);
    \n+
    352 tan1Mask.SetFaceWeightsForFaceCenters(false);
    \n+
    353
    \n+
    354 tan1Mask.VertexWeight(0) = 0.0f;
    \n+
    355 for (int i = 0; i < numEdges; ++i) {
    \n+
    356 tan1Mask.EdgeWeight(i) = 0.0f;
    \n+
    357 }
    \n+
    358 for (int i = 0; i < numFaces; ++i) {
    \n+
    359 tan1Mask.FaceWeight(i) = 0.0f;
    \n+
    360 }
    \n+
    361
    \n+
    362 tan1Mask.EdgeWeight(creaseEnds[0]) = 0.5f;
    \n+
    363 tan1Mask.EdgeWeight(creaseEnds[1]) = -0.5f;
    \n+
    364
    \n+
    365 //
    \n+
    366 // Second, the tangent across the interior faces:
    \n+
    367 // Note this is ambiguous for an interior vertex. We currently return
    \n+
    368 // the tangent for the surface in the counter-clockwise span between the
    \n+
    369 // leading and trailing edges that form the crease. Given the expected
    \n+
    370 // computation of a surface normal as Tan1 X Tan2, this tangent should be
    \n+
    371 // oriented "inward" from the crease/boundary -- across the surface rather
    \n+
    372 // than outward and away from it.
    \n+
    373 //
    \n+
    374 tan2Mask.SetNumVertexWeights(1);
    \n+
    375 tan2Mask.SetNumEdgeWeights(numEdges);
    \n+
    376 tan2Mask.SetNumFaceWeights(numFaces);
    \n+
    377 tan2Mask.SetFaceWeightsForFaceCenters(false);
    \n+
    378
    \n+
    379 // Prepend weights of 0 preceding the crease:
    \n+
    380 for (int i = 0; i < creaseEnds[0]; ++i) {
    \n+
    381 tan2Mask.EdgeWeight(i) = 0.0f;
    \n+
    382 tan2Mask.FaceWeight(i) = 0.0f;
    \n+
    383 }
    \n+
    384
    \n+
    385 // Assign weights to crease edge and interior points:
    \n+
    386 int interiorEdgeCount = creaseEnds[1] - creaseEnds[0] - 1;
    \n+
    387 if (interiorEdgeCount == 1) {
    \n+
    388 // The regular case -- uniform B-spline cross-tangent:
    \n+
    389
    \n+
    390 tan2Mask.VertexWeight(0) = (Weight)(-4.0 / 6.0);
    \n+
    391
    \n+
    392 tan2Mask.EdgeWeight(creaseEnds[0]) = (Weight)(-1.0 / 6.0);
    \n+
    393 tan2Mask.EdgeWeight(creaseEnds[0] + 1) = (Weight)( 4.0 / 6.0);
    \n+
    394 tan2Mask.EdgeWeight(creaseEnds[1]) = (Weight)(-1.0 / 6.0);
    \n+
    395
    \n+
    396 tan2Mask.FaceWeight(creaseEnds[0]) = (Weight)(1.0 / 6.0);
    \n+
    397 tan2Mask.FaceWeight(creaseEnds[0] + 1) = (Weight)(1.0 / 6.0);
    \n+
    398 } else if (interiorEdgeCount > 1) {
    \n+
    399 // The irregular case -- formulae from Biermann et al:
    \n+
    400
    \n+
    401 double k = (double) (interiorEdgeCount + 1);
    \n+
    402 double theta = M_PI / k;
    \n+
    403
    \n+
    404 double cosTheta = std::cos(theta);
    \n+
    405 double sinTheta = std::sin(theta);
    \n+
    406
    \n+
    407 // Loop/Schaefer use a different divisor here (3*k + cos(theta)):
    \n+
    408 double commonDenom = 1.0f / (k * (3.0f + cosTheta));
    \n+
    409 double R = (cosTheta + 1.0f) / sinTheta;
    \n+
    410
    \n+
    411 double vertexWeight = 4.0f * R * (cosTheta - 1.0f);
    \n+
    412 double creaseWeight = -R * (1.0f + 2.0f * cosTheta);
    \n+
    413
    \n+
    414 tan2Mask.VertexWeight(0) = (Weight) (vertexWeight * commonDenom);
    \n+
    415
    \n+
    416 tan2Mask.EdgeWeight(creaseEnds[0]) = (Weight) (creaseWeight * commonDenom);
    \n+
    417 tan2Mask.EdgeWeight(creaseEnds[1]) = (Weight) (creaseWeight * commonDenom);
    \n+
    418
    \n+
    419 tan2Mask.FaceWeight(creaseEnds[0]) = (Weight) (sinTheta * commonDenom);
    \n+
    420
    \n+
    421 double sinThetaI = 0.0f;
    \n+
    422 double sinThetaIplus1 = sinTheta;
    \n+
    423 for (int i = 1; i < k; ++i) {
    \n+
    424 sinThetaI = sinThetaIplus1;
    \n+
    425 sinThetaIplus1 = std::sin((i+1)*theta);
    \n+
    426
    \n+
    427 tan2Mask.EdgeWeight(creaseEnds[0] + i) = (Weight) ((4.0f * sinThetaI) * commonDenom);
    \n+
    428 tan2Mask.FaceWeight(creaseEnds[0] + i) = (Weight) ((sinThetaI + sinThetaIplus1) * commonDenom);
    \n+
    429 }
    \n+
    430 } else {
    \n+
    431 // Special case for a single face -- simple average of boundary edges:
    \n+
    432
    \n+
    433 tan2Mask.VertexWeight(0) = -6.0f;
    \n+
    434
    \n+
    435 tan2Mask.EdgeWeight(creaseEnds[0]) = 3.0f;
    \n+
    436 tan2Mask.EdgeWeight(creaseEnds[1]) = 3.0f;
    \n+
    437
    \n+
    438 tan2Mask.FaceWeight(creaseEnds[0]) = 0.0f;
    \n+
    439 }
    \n+
    440
    \n+
    441 // Append weights of 0 following the crease:
    \n+
    442 for (int i = creaseEnds[1]; i < numFaces; ++i) {
    \n+
    443 tan2Mask.FaceWeight(i) = 0.0f;
    \n+
    444 }
    \n+
    445 for (int i = creaseEnds[1] + 1; i < numEdges; ++i) {
    \n+
    446 tan2Mask.EdgeWeight(i) = 0.0f;
    \n+
    447 }
    \n+
    448}
    \n+
    \n+
    449
    \n+
    450template <>
    \n+
    451template <typename VERTEX, typename MASK>
    \n+
    452inline void
    \n+
    \n+\n+
    454 MASK& tan1Mask, MASK& tan2Mask) const {
    \n+
    455
    \n+
    456 typedef typename MASK::Weight Weight;
    \n+
    457
    \n+
    458 int valence = vertex.GetNumFaces();
    \n+
    459 if (valence == 2) {
    \n+
    460 assignCornerLimitTangentMasks(vertex, tan1Mask, tan2Mask);
    \n+
    461 return;
    \n+
    462 }
    \n+
    463
    \n+
    464 // Compute tan1 initially -- tan2 is simply a rotation:
    \n+
    465 tan1Mask.SetNumVertexWeights(1);
    \n+
    466 tan1Mask.SetNumEdgeWeights(valence);
    \n+
    467 tan1Mask.SetNumFaceWeights(valence);
    \n+
    468 tan1Mask.SetFaceWeightsForFaceCenters(false);
    \n+
    469
    \n+
    470 tan1Mask.VertexWeight(0) = 0.0f;
    \n+
    471
    \n+
    472 if (valence == 4) {
    \n+
    473 tan1Mask.EdgeWeight(0) = 4.0f;
    \n+
    474 tan1Mask.EdgeWeight(1) = 0.0f;
    \n+
    475 tan1Mask.EdgeWeight(2) = -4.0f;
    \n+
    476 tan1Mask.EdgeWeight(3) = 0.0f;
    \n+
    477
    \n+
    478 tan1Mask.FaceWeight(0) = 1.0f;
    \n+
    479 tan1Mask.FaceWeight(1) = -1.0f;
    \n+
    480 tan1Mask.FaceWeight(2) = -1.0f;
    \n+
    481 tan1Mask.FaceWeight(3) = 1.0f;
    \n+
    482 } else {
    \n+
    483 double theta = 2.0f * M_PI / (double)valence;
    \n+
    484
    \n+
    485 double cosTheta = std::cos(theta);
    \n+
    486 double cosHalfTheta = std::cos(theta * 0.5f);
    \n+
    487
    \n+
    488 double lambda = (5.0 / 16.0) + (1.0 / 16.0) *
    \n+
    489 (cosTheta + cosHalfTheta * std::sqrt(2.0f * (9.0f + cosTheta)));
    \n+
    490
    \n+
    491 double edgeWeightScale = 4.0f;
    \n+
    492 double faceWeightScale = 1.0f / (4.0f * lambda - 1.0f);
    \n+
    493
    \n+
    494 for (int i = 0; i < valence; ++i) {
    \n+
    495 double cosThetaI = std::cos( i * theta);
    \n+
    496 double cosThetaIplus1 = std::cos((i+1)* theta);
    \n+
    497
    \n+
    498 tan1Mask.EdgeWeight(i) = (Weight) (edgeWeightScale * cosThetaI);
    \n+
    499 tan1Mask.FaceWeight(i) = (Weight) (faceWeightScale * (cosThetaI + cosThetaIplus1));
    \n+
    500 }
    \n+
    501 }
    \n+
    502
    \n+
    503 // Now rotate/copy tan1 weights to tan2:
    \n+
    504 tan2Mask.SetNumVertexWeights(1);
    \n+
    505 tan2Mask.SetNumEdgeWeights(valence);
    \n+
    506 tan2Mask.SetNumFaceWeights(valence);
    \n+
    507 tan2Mask.SetFaceWeightsForFaceCenters(false);
    \n+
    508
    \n+
    509 tan2Mask.VertexWeight(0) = 0.0f;
    \n+
    510 if (valence == 4) {
    \n+
    511 tan2Mask.EdgeWeight(0) = 0.0f;
    \n+
    512 tan2Mask.EdgeWeight(1) = 4.0f;
    \n+
    513 tan2Mask.EdgeWeight(2) = 0.0f;
    \n+
    514 tan2Mask.EdgeWeight(3) = -4.0f;
    \n+
    515
    \n+
    516 tan2Mask.FaceWeight(0) = 1.0f;
    \n+
    517 tan2Mask.FaceWeight(1) = 1.0f;
    \n+
    518 tan2Mask.FaceWeight(2) = -1.0f;
    \n+
    519 tan2Mask.FaceWeight(3) = -1.0f;
    \n+
    520 } else {
    \n+
    521 tan2Mask.EdgeWeight(0) = tan1Mask.EdgeWeight(valence-1);
    \n+
    522 tan2Mask.FaceWeight(0) = tan1Mask.FaceWeight(valence-1);
    \n+
    523 for (int i = 1; i < valence; ++i) {
    \n+
    524 tan2Mask.EdgeWeight(i) = tan1Mask.EdgeWeight(i-1);
    \n+
    525 tan2Mask.FaceWeight(i) = tan1Mask.FaceWeight(i-1);
    \n+
    526 }
    \n+
    527 }
    \n+
    528}
    \n+
    \n+
    529
    \n+
    530} // end namespace sdc
    \n+
    531
    \n+
    532} // end namespace OPENSUBDIV_VERSION
    \n+
    533using namespace OPENSUBDIV_VERSION;
    \n+
    534} // end namespace OpenSubdiv
    \n+
    535
    \n+
    536#endif /* OPENSUBDIV3_SDC_CATMARK_SCHEME_H */
    \n+\n
    Split
    Enumerated type for all face splitting schemes.
    Definition types.h:47
    \n
    @ SPLIT_TO_QUADS
    Used by Catmark and Bilinear.
    Definition types.h:48
    \n-\n+
    @ TRI_SUB_SMOOTH
    "smooth triangle" weights (Catmark scheme only)
    Definition options.h:74
    \n+
    void assignSmoothMaskForEdge(EDGE const &edge, MASK &mask) const
    \n \n-
    void ComputeVertexVertexMask(VERTEX const &vertexNeighborhood, MASK &vertexVertexMask, Crease::Rule parentRule=Crease::RULE_UNKNOWN, Crease::Rule childRule=Crease::RULE_UNKNOWN) const
    Vertex-vertex masks If known, a single Rule or pair of Rules can be specified (indicating a crease tr...
    Definition scheme.h:512
    \n+
    void assignCreaseMaskForVertex(VERTEX const &edge, MASK &mask, int const creaseEnds[2]) const
    \n
    void assignCreaseLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK &tan2, int const creaseEnds[2]) const
    \n \n-
    void ComputeEdgeVertexMask(EDGE const &edgeNeighborhood, MASK &edgeVertexMask, Crease::Rule parentRule=Crease::RULE_UNKNOWN, Crease::Rule childRule=Crease::RULE_UNKNOWN) const
    Edge-vertex masks If known, the Rule for the edge and/or the derived vertex can be specified to accel...
    Definition scheme.h:392
    \n
    void assignSmoothLimitMask(VERTEX const &vertex, MASK &pos) const
    \n \n
    void assignCreaseLimitMask(VERTEX const &vertex, MASK &pos, int const creaseEnds[2]) const
    \n+
    void assignSmoothMaskForVertex(VERTEX const &edge, MASK &mask) const
    \n \n
    void assignSmoothLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK &tan2) const
    \n
    void assignCornerLimitMask(VERTEX const &vertex, MASK &pos) const
    \n
    void assignCornerLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK &tan2) const
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-bilinearScheme.h\n+catmarkScheme.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2014 DreamWorks Animation LLC.\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -23,211 +23,592 @@\n 17//\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n-24#ifndef OPENSUBDIV3_SDC_BILINEAR_SCHEME_H\n-25#define OPENSUBDIV3_SDC_BILINEAR_SCHEME_H\n+24#ifndef OPENSUBDIV3_SDC_CATMARK_SCHEME_H\n+25#define OPENSUBDIV3_SDC_CATMARK_SCHEME_H\n 26\n 27#include \"../version.h\"\n 28\n 29#include \"../sdc/scheme.h\"\n 30\n-31namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-32namespace OPENSUBDIV_VERSION {\n+31#include \n+32#include \n 33\n-_\b3_\b4namespace Sdc {\n-35\n-36//\n-37// Specializations for Scheme:\n-38//\n-39\n-40//\n-41// Bilinear traits:\n-42//\n-43template <>\n-_\b4_\b4inline _\bS_\bp_\bl_\bi_\bt _\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b>_\b:_\b:_\bG_\be_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\bi_\bc_\ba_\bl_\bS_\bp_\bl_\bi_\bt_\bT_\by_\bp_\be() { return\n-_\bS_\bP_\bL_\bI_\bT_\b__\bT_\bO_\b__\bQ_\bU_\bA_\bD_\bS; }\n-45\n+34namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+35namespace OPENSUBDIV_VERSION {\n+36\n+37namespace Sdc {\n+38\n+39//\n+40// Specializations for Scheme:\n+41//\n+42\n+43//\n+44// Catmark traits:\n+45//\n 46template <>\n-_\b4_\b7inline int _\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b>_\b:_\b:_\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be() { return 4; }\n+_\b4_\b7inline _\bS_\bp_\bl_\bi_\bt _\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\bG_\be_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\bi_\bc_\ba_\bl_\bS_\bp_\bl_\bi_\bt_\bT_\by_\bp_\be() { return\n+_\bS_\bP_\bL_\bI_\bT_\b__\bT_\bO_\b__\bQ_\bU_\bA_\bD_\bS; }\n 48\n 49template <>\n-_\b5_\b0inline int _\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b>_\b:_\b:_\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be() { return 4; }\n+_\b5_\b0inline int _\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be() { return 4; }\n 51\n 52template <>\n-_\b5_\b3inline int _\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b>_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bN_\be_\bi_\bg_\bh_\bb_\bo_\br_\bh_\bo_\bo_\bd_\bS_\bi_\bz_\be() { return 0; }\n+_\b5_\b3inline int _\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be() { return 4; }\n 54\n-55\n-56//\n-57// Refinement masks:\n-58//\n-59template <>\n-60template \n-61void\n-_\b6_\b2_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bd_\bg_\be_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk(EDGE const& edge, MASK& mask,\n-63 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be, _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be) const {\n-64 // This should be inline, otherwise trivially replicate it:\n-65 assignCreaseMaskForEdge(edge, mask);\n-66}\n-67\n+55template <>\n+_\b5_\b6inline int _\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bN_\be_\bi_\bg_\bh_\bb_\bo_\br_\bh_\bo_\bo_\bd_\bS_\bi_\bz_\be() { return 1; }\n+57\n+58\n+59//\n+60// Masks for edge-vertices: the hard Crease mask does not need to be\n+specialized\n+61// (simply the midpoint), so all that is left is the Smooth case:\n+62//\n+63// The Smooth mask is complicated by the need to support the \"triangle\n+subdivision\"\n+64// option, which applies different weighting in the presence of triangles. It\n+is\n+65// up for debate as to whether this is useful or not -- we may be able to\n+deprecate\n+66// this option.\n+67//\n 68template <>\n-69template \n-70void\n-_\b7_\b1_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk(VERTEX const& vertex, MASK&\n-mask,\n-72 _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be, _\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be) const {\n-73 // This should be inline, otherwise trivially replicate it:\n-74 assignCornerMaskForVertex(vertex, mask);\n-75}\n+69template \n+70inline void\n+_\b7_\b1_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bE_\bd_\bg_\be(EDGE const& edge, MASK& mask)\n+const {\n+72\n+73 typedef typename MASK::Weight Weight;\n+74\n+75 int faceCount = edge.GetNumFaces();\n 76\n-77\n-78//\n-79// Limit masks for position -- the limit position of all vertices is the\n-refined vertex.\n-80//\n-81template <>\n-82template \n-83inline void\n-_\b8_\b4_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& /* vertex */,\n-MASK& posMask) const {\n-85\n-86 posMask.SetNumVertexWeights(1);\n-87 posMask.SetNumEdgeWeights(0);\n-88 posMask.SetNumFaceWeights(0);\n-89 posMask.SetFaceWeightsForFaceCenters(false);\n-90\n-91 posMask.VertexWeight(0) = 1.0f;\n-92}\n-93\n-94template <>\n-95template \n-96inline void\n-_\b9_\b7_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& vertex, MASK&\n-posMask,\n-98 int const /* creaseEnds */[2]) const {\n-99\n-100 assignCornerLimitMask(vertex, posMask);\n-101}\n-102\n-103template <>\n-104template \n-105inline void\n-_\b1_\b0_\b6_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& vertex, MASK&\n-posMask) const {\n-107\n-108 assignCornerLimitMask(vertex, posMask);\n-109}\n+77 mask.SetNumVertexWeights(2);\n+78 mask.SetNumEdgeWeights(0);\n+79 mask.SetNumFaceWeights(faceCount);\n+80 mask.SetFaceWeightsForFaceCenters(true);\n+81\n+82 //\n+83 // Determine if we need to inspect incident faces and apply alternate\n+weighting for\n+84 // triangles -- and if so, determine which of the two are triangles.\n+85 //\n+86 bool face0IsTri = false;\n+87 bool face1IsTri = false;\n+88 bool useTriangleOption = (_options.GetTriangleSubdivision() == _\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bT_\bR_\bI_\b__\bS_\bU_\bB_\b__\bS_\bM_\bO_\bO_\bT_\bH);\n+89 if (useTriangleOption) {\n+90 if (faceCount == 2) {\n+91 //\n+92 // Ideally we want to avoid this inspection when we have already subdivided\n+at\n+93 // least once -- need something in the Edge interface to help avoid this,\n+e.g.\n+94 // an IsRegular() query, the subdivision level...\n+95 //\n+96 int vertsPerFace[2];\n+97 edge.GetNumVerticesPerFace(vertsPerFace);\n+98\n+99 face0IsTri = (vertsPerFace[0] == 3);\n+100 face1IsTri = (vertsPerFace[1] == 3);\n+101 useTriangleOption = face0IsTri || face1IsTri;\n+102 } else {\n+103 useTriangleOption = false;\n+104 }\n+105 }\n+106\n+107 if (! useTriangleOption) {\n+108 mask.VertexWeight(0) = 0.25f;\n+109 mask.VertexWeight(1) = 0.25f;\n 110\n-111//\n-112// Limit masks for tangents -- these are ambiguous around all vertices.\n-Provide\n-113// the tangents based on the incident edges of the first face.\n-114//\n-115template <>\n-116template \n-117inline void\n-_\b1_\b1_\b8_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs(VERTEX const& /\n-* vertex */,\n-119 MASK& tan1Mask, MASK& tan2Mask) const {\n-120\n-121 tan1Mask.SetNumVertexWeights(1);\n-122 tan1Mask.SetNumEdgeWeights(2);\n-123 tan1Mask.SetNumFaceWeights(0);\n-124 tan1Mask.SetFaceWeightsForFaceCenters(false);\n+111 if (faceCount == 2) {\n+112 mask.FaceWeight(0) = 0.25f;\n+113 mask.FaceWeight(1) = 0.25f;\n+114 } else {\n+115 Weight fWeight = 0.5f / (Weight)faceCount;\n+116 for (int i = 0; i < faceCount; ++i) {\n+117 mask.FaceWeight(i) = fWeight;\n+118 }\n+119 }\n+120 } else {\n+121 //\n+122 // This mimics the implementation in Hbr in terms of order of operations.\n+123 //\n+124 const Weight CATMARK_SMOOTH_TRI_EDGE_WEIGHT = (Weight) 0.470;\n 125\n-126 tan2Mask.SetNumVertexWeights(1);\n-127 tan2Mask.SetNumEdgeWeights(2);\n-128 tan2Mask.SetNumFaceWeights(0);\n-129 tan2Mask.SetFaceWeightsForFaceCenters(false);\n-130\n-131 tan1Mask.VertexWeight(0) = -1.0f;\n-132 tan1Mask.EdgeWeight(0) = 1.0f;\n-133 tan1Mask.EdgeWeight(1) = 0.0f;\n+126 Weight f0Weight = face0IsTri ? CATMARK_SMOOTH_TRI_EDGE_WEIGHT : 0.25f;\n+127 Weight f1Weight = face1IsTri ? CATMARK_SMOOTH_TRI_EDGE_WEIGHT : 0.25f;\n+128\n+129 Weight fWeight = 0.5f * (f0Weight + f1Weight);\n+130 Weight vWeight = 0.5f * (1.0f - 2.0f * fWeight);\n+131\n+132 mask.VertexWeight(0) = vWeight;\n+133 mask.VertexWeight(1) = vWeight;\n 134\n-135 tan2Mask.VertexWeight(0) = -1.0f;\n-136 tan2Mask.EdgeWeight(0) = 0.0f;\n-137 tan2Mask.EdgeWeight(1) = 1.0f;\n+135 mask.FaceWeight(0) = fWeight;\n+136 mask.FaceWeight(1) = fWeight;\n+137 }\n 138}\n 139\n-140template <>\n-141template \n-142inline void\n-_\b1_\b4_\b3_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs(VERTEX const& vertex,\n-144 MASK& tan1Mask, MASK& tan2Mask, int const /* creaseEnds */[2]) const {\n-145\n-146 assignCornerLimitTangentMasks(vertex, tan1Mask, tan2Mask);\n-147}\n-148\n-149template <>\n-150template \n-151inline void\n-_\b1_\b5_\b2_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs(VERTEX const& vertex,\n-153 MASK& tan1Mask, MASK& tan2Mask) const {\n-154\n-155 assignCornerLimitTangentMasks(vertex, tan1Mask, tan2Mask);\n-156}\n-157\n-158} // end namespace sdc\n-159\n-160} // end namespace OPENSUBDIV_VERSION\n-161using namespace OPENSUBDIV_VERSION;\n-162} // end namespace OpenSubdiv\n-163\n-164#endif /* OPENSUBDIV3_SDC_BILINEAR_SCHEME_H */\n+140\n+141//\n+142// Masks for vertex-vertices: the hard Corner mask does not need to be\n+specialized\n+143// (simply the vertex itself), leaving the Crease and Smooth cases (Dart is\n+smooth):\n+144//\n+145template <>\n+146template \n+147inline void\n+_\b1_\b4_\b8_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bV_\be_\br_\bt_\be_\bx(VERTEX const& vertex,\n+MASK& mask,\n+149 int const creaseEnds[2]) const {\n+150 typedef typename MASK::Weight Weight;\n+151\n+152 int valence = vertex.GetNumEdges();\n+153\n+154 mask.SetNumVertexWeights(1);\n+155 mask.SetNumEdgeWeights(valence);\n+156 mask.SetNumFaceWeights(0);\n+157 mask.SetFaceWeightsForFaceCenters(false);\n+158\n+159 Weight vWeight = 0.75f;\n+160 Weight eWeight = 0.125f;\n+161\n+162 mask.VertexWeight(0) = vWeight;\n+163 for (int i = 0; i < valence; ++i) {\n+164 mask.EdgeWeight(i) = 0.0f;\n+165 }\n+166 mask.EdgeWeight(creaseEnds[0]) = eWeight;\n+167 mask.EdgeWeight(creaseEnds[1]) = eWeight;\n+168}\n+169\n+170template <>\n+171template \n+172inline void\n+_\b1_\b7_\b3_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bV_\be_\br_\bt_\be_\bx(VERTEX const& vertex,\n+MASK& mask) const {\n+174\n+175 typedef typename MASK::Weight Weight;\n+176\n+177 //\n+178 // A Smooth vertex must be manifold and interior -- manifold boundary\n+vertices will be\n+179 // Creases and non-manifold vertices of any kind will be Corners or\n+Creases. If smooth\n+180 // rules for non-manifold vertices are ever defined, this will need\n+adjusting:\n+181 //\n+182 assert(vertex.GetNumFaces() == vertex.GetNumEdges());\n+183\n+184 int valence = vertex.GetNumFaces();\n+185\n+186 mask.SetNumVertexWeights(1);\n+187 mask.SetNumEdgeWeights(valence);\n+188 mask.SetNumFaceWeights(valence);\n+189 mask.SetFaceWeightsForFaceCenters(true);\n+190\n+191 Weight vWeight = (Weight)(valence - 2) / (Weight)valence;\n+192 Weight fWeight = 1.0f / (Weight)(valence * valence);\n+193 Weight eWeight = fWeight;\n+194\n+195 mask.VertexWeight(0) = vWeight;\n+196 for (int i = 0; i < valence; ++i) {\n+197 mask.EdgeWeight(i) = eWeight;\n+198 mask.FaceWeight(i) = fWeight;\n+199 }\n+200}\n+201\n+202//\n+203// Limit masks for position:\n+204//\n+205template <>\n+206template \n+207inline void\n+_\b2_\b0_\b8_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& /* vertex */,\n+MASK& posMask) const {\n+209\n+210 posMask.SetNumVertexWeights(1);\n+211 posMask.SetNumEdgeWeights(0);\n+212 posMask.SetNumFaceWeights(0);\n+213 posMask.SetFaceWeightsForFaceCenters(false);\n+214\n+215 posMask.VertexWeight(0) = 1.0f;\n+216}\n+217\n+218template <>\n+219template \n+220inline void\n+_\b2_\b2_\b1_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& vertex, MASK&\n+posMask,\n+222 int const creaseEnds[2]) const {\n+223\n+224 typedef typename MASK::Weight Weight;\n+225\n+226 int valence = vertex.GetNumEdges();\n+227\n+228 posMask.SetNumVertexWeights(1);\n+229 posMask.SetNumEdgeWeights(valence);\n+230 posMask.SetNumFaceWeights(0);\n+231 posMask.SetFaceWeightsForFaceCenters(false);\n+232\n+233 Weight vWeight = (Weight)(2.0 / 3.0);\n+234 Weight eWeight = (Weight)(1.0 / 6.0);\n+235\n+236 posMask.VertexWeight(0) = vWeight;\n+237 for (int i = 0; i < valence; ++i) {\n+238 posMask.EdgeWeight(i) = 0.0f;\n+239 }\n+240 posMask.EdgeWeight(creaseEnds[0]) = eWeight;\n+241 posMask.EdgeWeight(creaseEnds[1]) = eWeight;\n+242}\n+243\n+244template <>\n+245template \n+246inline void\n+_\b2_\b4_\b7_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk(VERTEX const& vertex, MASK&\n+posMask) const {\n+248\n+249 typedef typename MASK::Weight Weight;\n+250\n+251 int valence = vertex.GetNumFaces();\n+252 if (valence == 2) {\n+253 assignCornerLimitMask(vertex, posMask);\n+254 return;\n+255 }\n+256\n+257 posMask.SetNumVertexWeights(1);\n+258 posMask.SetNumEdgeWeights(valence);\n+259 posMask.SetNumFaceWeights(valence);\n+260 posMask.SetFaceWeightsForFaceCenters(false);\n+261\n+262 // Specialize for the regular case:\n+263 if (valence == 4) {\n+264 Weight fWeight = (Weight)(1.0 / 36.0);\n+265 Weight eWeight = (Weight)(1.0 / 9.0);\n+266 Weight vWeight = (Weight)(4.0 / 9.0);\n+267\n+268 posMask.VertexWeight(0) = vWeight;\n+269\n+270 posMask.EdgeWeight(0) = eWeight;\n+271 posMask.EdgeWeight(1) = eWeight;\n+272 posMask.EdgeWeight(2) = eWeight;\n+273 posMask.EdgeWeight(3) = eWeight;\n+274\n+275 posMask.FaceWeight(0) = fWeight;\n+276 posMask.FaceWeight(1) = fWeight;\n+277 posMask.FaceWeight(2) = fWeight;\n+278 posMask.FaceWeight(3) = fWeight;\n+279 } else {\n+280 Weight Valence = (Weight) valence;\n+281\n+282 Weight fWeight = 1.0f / (Valence * (Valence + 5.0f));\n+283 Weight eWeight = 4.0f * fWeight;\n+284 Weight vWeight = 1.0f - Valence * (eWeight + fWeight);\n+285\n+286 posMask.VertexWeight(0) = vWeight;\n+287 for (int i = 0; i < valence; ++i) {\n+288 posMask.EdgeWeight(i) = eWeight;\n+289 posMask.FaceWeight(i) = fWeight;\n+290 }\n+291 }\n+292}\n+293\n+294//\n+295// Limit masks for tangents -- these are stubs for now, or have a temporary\n+296// implementation\n+297//\n+298template <>\n+299template \n+300inline void\n+_\b3_\b0_\b1_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs(VERTEX const& vertex,\n+302 MASK& tan1Mask, MASK& tan2Mask) const {\n+303\n+304 int valence = vertex.GetNumEdges();\n+305\n+306 tan1Mask.SetNumVertexWeights(1);\n+307 tan1Mask.SetNumEdgeWeights(valence);\n+308 tan1Mask.SetNumFaceWeights(0);\n+309 tan1Mask.SetFaceWeightsForFaceCenters(false);\n+310\n+311 tan2Mask.SetNumVertexWeights(1);\n+312 tan2Mask.SetNumEdgeWeights(valence);\n+313 tan2Mask.SetNumFaceWeights(0);\n+314 tan2Mask.SetFaceWeightsForFaceCenters(false);\n+315\n+316 // Should be at least 2 edges -- be sure to clear weights for any more:\n+317 tan1Mask.VertexWeight(0) = -1.0f;\n+318 tan1Mask.EdgeWeight(0) = 1.0f;\n+319 tan1Mask.EdgeWeight(1) = 0.0f;\n+320\n+321 tan2Mask.VertexWeight(0) = -1.0f;\n+322 tan2Mask.EdgeWeight(0) = 0.0f;\n+323 tan2Mask.EdgeWeight(1) = 1.0f;\n+324\n+325 for (int i = 2; i < valence; ++i) {\n+326 tan1Mask.EdgeWeight(i) = 0.0f;\n+327 tan2Mask.EdgeWeight(i) = 0.0f;\n+328 }\n+329}\n+330\n+331template <>\n+332template \n+333inline void\n+_\b3_\b3_\b4_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs(VERTEX const& vertex,\n+335 MASK& tan1Mask, MASK& tan2Mask, int const creaseEnds[2]) const {\n+336\n+337 typedef typename MASK::Weight Weight;\n+338\n+339 //\n+340 // First, the tangent along the crease:\n+341 // The first crease edge is considered the \"leading\" edge of the span\n+342 // of surface for which we are evaluating tangents and the second edge the\n+343 // \"trailing edge\". By convention, the tangent along the crease is oriented\n+344 // in the direction of the leading edge.\n+345 //\n+346 int numEdges = vertex.GetNumEdges();\n+347 int numFaces = vertex.GetNumFaces();\n+348\n+349 tan1Mask.SetNumVertexWeights(1);\n+350 tan1Mask.SetNumEdgeWeights(numEdges);\n+351 tan1Mask.SetNumFaceWeights(numFaces);\n+352 tan1Mask.SetFaceWeightsForFaceCenters(false);\n+353\n+354 tan1Mask.VertexWeight(0) = 0.0f;\n+355 for (int i = 0; i < numEdges; ++i) {\n+356 tan1Mask.EdgeWeight(i) = 0.0f;\n+357 }\n+358 for (int i = 0; i < numFaces; ++i) {\n+359 tan1Mask.FaceWeight(i) = 0.0f;\n+360 }\n+361\n+362 tan1Mask.EdgeWeight(creaseEnds[0]) = 0.5f;\n+363 tan1Mask.EdgeWeight(creaseEnds[1]) = -0.5f;\n+364\n+365 //\n+366 // Second, the tangent across the interior faces:\n+367 // Note this is ambiguous for an interior vertex. We currently return\n+368 // the tangent for the surface in the counter-clockwise span between the\n+369 // leading and trailing edges that form the crease. Given the expected\n+370 // computation of a surface normal as Tan1 X Tan2, this tangent should be\n+371 // oriented \"inward\" from the crease/boundary -- across the surface rather\n+372 // than outward and away from it.\n+373 //\n+374 tan2Mask.SetNumVertexWeights(1);\n+375 tan2Mask.SetNumEdgeWeights(numEdges);\n+376 tan2Mask.SetNumFaceWeights(numFaces);\n+377 tan2Mask.SetFaceWeightsForFaceCenters(false);\n+378\n+379 // Prepend weights of 0 preceding the crease:\n+380 for (int i = 0; i < creaseEnds[0]; ++i) {\n+381 tan2Mask.EdgeWeight(i) = 0.0f;\n+382 tan2Mask.FaceWeight(i) = 0.0f;\n+383 }\n+384\n+385 // Assign weights to crease edge and interior points:\n+386 int interiorEdgeCount = creaseEnds[1] - creaseEnds[0] - 1;\n+387 if (interiorEdgeCount == 1) {\n+388 // The regular case -- uniform B-spline cross-tangent:\n+389\n+390 tan2Mask.VertexWeight(0) = (Weight)(-4.0 / 6.0);\n+391\n+392 tan2Mask.EdgeWeight(creaseEnds[0]) = (Weight)(-1.0 / 6.0);\n+393 tan2Mask.EdgeWeight(creaseEnds[0] + 1) = (Weight)( 4.0 / 6.0);\n+394 tan2Mask.EdgeWeight(creaseEnds[1]) = (Weight)(-1.0 / 6.0);\n+395\n+396 tan2Mask.FaceWeight(creaseEnds[0]) = (Weight)(1.0 / 6.0);\n+397 tan2Mask.FaceWeight(creaseEnds[0] + 1) = (Weight)(1.0 / 6.0);\n+398 } else if (interiorEdgeCount > 1) {\n+399 // The irregular case -- formulae from Biermann et al:\n+400\n+401 double k = (double) (interiorEdgeCount + 1);\n+402 double theta = M_PI / k;\n+403\n+404 double cosTheta = std::cos(theta);\n+405 double sinTheta = std::sin(theta);\n+406\n+407 // Loop/Schaefer use a different divisor here (3*k + cos(theta)):\n+408 double commonDenom = 1.0f / (k * (3.0f + cosTheta));\n+409 double R = (cosTheta + 1.0f) / sinTheta;\n+410\n+411 double vertexWeight = 4.0f * R * (cosTheta - 1.0f);\n+412 double creaseWeight = -R * (1.0f + 2.0f * cosTheta);\n+413\n+414 tan2Mask.VertexWeight(0) = (Weight) (vertexWeight * commonDenom);\n+415\n+416 tan2Mask.EdgeWeight(creaseEnds[0]) = (Weight) (creaseWeight * commonDenom);\n+417 tan2Mask.EdgeWeight(creaseEnds[1]) = (Weight) (creaseWeight * commonDenom);\n+418\n+419 tan2Mask.FaceWeight(creaseEnds[0]) = (Weight) (sinTheta * commonDenom);\n+420\n+421 double sinThetaI = 0.0f;\n+422 double sinThetaIplus1 = sinTheta;\n+423 for (int i = 1; i < k; ++i) {\n+424 sinThetaI = sinThetaIplus1;\n+425 sinThetaIplus1 = std::sin((i+1)*theta);\n+426\n+427 tan2Mask.EdgeWeight(creaseEnds[0] + i) = (Weight) ((4.0f * sinThetaI) *\n+commonDenom);\n+428 tan2Mask.FaceWeight(creaseEnds[0] + i) = (Weight) ((sinThetaI +\n+sinThetaIplus1) * commonDenom);\n+429 }\n+430 } else {\n+431 // Special case for a single face -- simple average of boundary edges:\n+432\n+433 tan2Mask.VertexWeight(0) = -6.0f;\n+434\n+435 tan2Mask.EdgeWeight(creaseEnds[0]) = 3.0f;\n+436 tan2Mask.EdgeWeight(creaseEnds[1]) = 3.0f;\n+437\n+438 tan2Mask.FaceWeight(creaseEnds[0]) = 0.0f;\n+439 }\n+440\n+441 // Append weights of 0 following the crease:\n+442 for (int i = creaseEnds[1]; i < numFaces; ++i) {\n+443 tan2Mask.FaceWeight(i) = 0.0f;\n+444 }\n+445 for (int i = creaseEnds[1] + 1; i < numEdges; ++i) {\n+446 tan2Mask.EdgeWeight(i) = 0.0f;\n+447 }\n+448}\n+449\n+450template <>\n+451template \n+452inline void\n+_\b4_\b5_\b3_\bS_\bc_\bh_\be_\bm_\be_\b<_\bS_\bC_\bH_\bE_\bM_\bE_\b__\bC_\bA_\bT_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs(VERTEX const& vertex,\n+454 MASK& tan1Mask, MASK& tan2Mask) const {\n+455\n+456 typedef typename MASK::Weight Weight;\n+457\n+458 int valence = vertex.GetNumFaces();\n+459 if (valence == 2) {\n+460 assignCornerLimitTangentMasks(vertex, tan1Mask, tan2Mask);\n+461 return;\n+462 }\n+463\n+464 // Compute tan1 initially -- tan2 is simply a rotation:\n+465 tan1Mask.SetNumVertexWeights(1);\n+466 tan1Mask.SetNumEdgeWeights(valence);\n+467 tan1Mask.SetNumFaceWeights(valence);\n+468 tan1Mask.SetFaceWeightsForFaceCenters(false);\n+469\n+470 tan1Mask.VertexWeight(0) = 0.0f;\n+471\n+472 if (valence == 4) {\n+473 tan1Mask.EdgeWeight(0) = 4.0f;\n+474 tan1Mask.EdgeWeight(1) = 0.0f;\n+475 tan1Mask.EdgeWeight(2) = -4.0f;\n+476 tan1Mask.EdgeWeight(3) = 0.0f;\n+477\n+478 tan1Mask.FaceWeight(0) = 1.0f;\n+479 tan1Mask.FaceWeight(1) = -1.0f;\n+480 tan1Mask.FaceWeight(2) = -1.0f;\n+481 tan1Mask.FaceWeight(3) = 1.0f;\n+482 } else {\n+483 double theta = 2.0f * M_PI / (double)valence;\n+484\n+485 double cosTheta = std::cos(theta);\n+486 double cosHalfTheta = std::cos(theta * 0.5f);\n+487\n+488 double lambda = (5.0 / 16.0) + (1.0 / 16.0) *\n+489 (cosTheta + cosHalfTheta * std::sqrt(2.0f * (9.0f + cosTheta)));\n+490\n+491 double edgeWeightScale = 4.0f;\n+492 double faceWeightScale = 1.0f / (4.0f * lambda - 1.0f);\n+493\n+494 for (int i = 0; i < valence; ++i) {\n+495 double cosThetaI = std::cos( i * theta);\n+496 double cosThetaIplus1 = std::cos((i+1)* theta);\n+497\n+498 tan1Mask.EdgeWeight(i) = (Weight) (edgeWeightScale * cosThetaI);\n+499 tan1Mask.FaceWeight(i) = (Weight) (faceWeightScale * (cosThetaI +\n+cosThetaIplus1));\n+500 }\n+501 }\n+502\n+503 // Now rotate/copy tan1 weights to tan2:\n+504 tan2Mask.SetNumVertexWeights(1);\n+505 tan2Mask.SetNumEdgeWeights(valence);\n+506 tan2Mask.SetNumFaceWeights(valence);\n+507 tan2Mask.SetFaceWeightsForFaceCenters(false);\n+508\n+509 tan2Mask.VertexWeight(0) = 0.0f;\n+510 if (valence == 4) {\n+511 tan2Mask.EdgeWeight(0) = 0.0f;\n+512 tan2Mask.EdgeWeight(1) = 4.0f;\n+513 tan2Mask.EdgeWeight(2) = 0.0f;\n+514 tan2Mask.EdgeWeight(3) = -4.0f;\n+515\n+516 tan2Mask.FaceWeight(0) = 1.0f;\n+517 tan2Mask.FaceWeight(1) = 1.0f;\n+518 tan2Mask.FaceWeight(2) = -1.0f;\n+519 tan2Mask.FaceWeight(3) = -1.0f;\n+520 } else {\n+521 tan2Mask.EdgeWeight(0) = tan1Mask.EdgeWeight(valence-1);\n+522 tan2Mask.FaceWeight(0) = tan1Mask.FaceWeight(valence-1);\n+523 for (int i = 1; i < valence; ++i) {\n+524 tan2Mask.EdgeWeight(i) = tan1Mask.EdgeWeight(i-1);\n+525 tan2Mask.FaceWeight(i) = tan1Mask.FaceWeight(i-1);\n+526 }\n+527 }\n+528}\n+529\n+530} // end namespace sdc\n+531\n+532} // end namespace OPENSUBDIV_VERSION\n+533using namespace OPENSUBDIV_VERSION;\n+534} // end namespace OpenSubdiv\n+535\n+536#endif /* OPENSUBDIV3_SDC_CATMARK_SCHEME_H */\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bp_\bl_\bi_\bt\n Split\n Enumerated type for all face splitting schemes.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b4_\b7\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bP_\bL_\bI_\bT_\b__\bT_\bO_\b__\bQ_\bU_\bA_\bD_\bS\n @ SPLIT_TO_QUADS\n Used by Catmark and Bilinear.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b4_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bC_\br_\be_\ba_\bs_\be_\b:_\b:_\bR_\bu_\bl_\be\n-Rule\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\br_\be_\ba_\bs_\be_\b._\bh_\b:_\b8_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\bR_\bI_\b__\bS_\bU_\bB_\b__\bS_\bM_\bO_\bO_\bT_\bH\n+@ TRI_SUB_SMOOTH\n+\"smooth triangle\" weights (Catmark scheme only)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\b:_\b7_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bE_\bd_\bg_\be\n+void assignSmoothMaskForEdge(EDGE const &edge, MASK &mask) const\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bG_\be_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\bi_\bc_\ba_\bl_\bS_\bp_\bl_\bi_\bt_\bT_\by_\bp_\be\n static Split GetTopologicalSplitType()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk\n-void ComputeVertexVertexMask(VERTEX const &vertexNeighborhood, MASK\n-&vertexVertexMask, Crease::Rule parentRule=Crease::RULE_UNKNOWN, Crease::Rule\n-childRule=Crease::RULE_UNKNOWN) const\n-Vertex-vertex masks If known, a single Rule or pair of Rules can be specified\n-(indicating a crease tr...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b5_\b1_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bV_\be_\br_\bt_\be_\bx\n+void assignCreaseMaskForVertex(VERTEX const &edge, MASK &mask, int const\n+creaseEnds[2]) const\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs\n void assignCreaseLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK\n &tan2, int const creaseEnds[2]) const\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bF_\ba_\bc_\be_\bS_\bi_\bz_\be\n static int GetRegularFaceSize()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bd_\bg_\be_\bV_\be_\br_\bt_\be_\bx_\bM_\ba_\bs_\bk\n-void ComputeEdgeVertexMask(EDGE const &edgeNeighborhood, MASK &edgeVertexMask,\n-Crease::Rule parentRule=Crease::RULE_UNKNOWN, Crease::Rule childRule=Crease::\n-RULE_UNKNOWN) const\n-Edge-vertex masks If known, the Rule for the edge and/or the derived vertex can\n-be specified to accel...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bc_\bh_\be_\bm_\be_\b._\bh_\b:_\b3_\b9_\b2\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk\n void assignSmoothLimitMask(VERTEX const &vertex, MASK &pos) const\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bN_\be_\bi_\bg_\bh_\bb_\bo_\br_\bh_\bo_\bo_\bd_\bS_\bi_\bz_\be\n static int GetLocalNeighborhoodSize()\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\br_\be_\ba_\bs_\be_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk\n void assignCreaseLimitMask(VERTEX const &vertex, MASK &pos, int const\n creaseEnds[2]) const\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bM_\ba_\bs_\bk_\bF_\bo_\br_\bV_\be_\br_\bt_\be_\bx\n+void assignSmoothMaskForVertex(VERTEX const &edge, MASK &mask) const\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\bG_\be_\bt_\bR_\be_\bg_\bu_\bl_\ba_\br_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be\n static int GetRegularVertexValence()\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bS_\bm_\bo_\bo_\bt_\bh_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs\n void assignSmoothLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK\n &tan2) const\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bL_\bi_\bm_\bi_\bt_\bM_\ba_\bs_\bk\n void assignCornerLimitMask(VERTEX const &vertex, MASK &pos) const\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bS_\bd_\bc_\b:_\b:_\bS_\bc_\bh_\be_\bm_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bC_\bo_\br_\bn_\be_\br_\bL_\bi_\bm_\bi_\bt_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bM_\ba_\bs_\bk_\bs\n void assignCornerLimitTangentMasks(VERTEX const &vertex, MASK &tan1, MASK\n &tan2) const\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bs_\bd_\bc\n- * _\bb_\bi_\bl_\bi_\bn_\be_\ba_\br_\bS_\bc_\bh_\be_\bm_\be_\b._\bh\n+ * _\bc_\ba_\bt_\bm_\ba_\br_\bk_\bS_\bc_\bh_\be_\bm_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00788.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00788.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/clVertexBuffer.h File Reference\n+OpenSubdiv: opensubdiv/osd/cudaPatchTable.h File Reference\n \n \n \n \n \n \n \n@@ -90,41 +90,45 @@\n
    \n
    \n \n
    \n \n-
    clVertexBuffer.h File Reference
    \n+
    cudaPatchTable.h File Reference
    \n
    \n
    \n
    #include "../version.h"
    \n-#include "../osd/opencl.h"
    \n+#include "../osd/nonCopyable.h"
    \n+#include "../osd/types.h"
    \n+#include <vector>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n \n

    \n Classes

    class  CLVertexBuffer
     Concrete vertex buffer class for OpenCL subdivision. More...
    class  CudaPatchTable
     CUDA patch table. More...
     
    \n \n \n \n \n \n+\n+\n \n \n

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Far
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
     
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,24 +1,28 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-clVertexBuffer.h File Reference\n+cudaPatchTable.h File Reference\n #include \"../version.h\"\n-#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bo_\bp_\be_\bn_\bc_\bl_\b._\bh\"\n+#include \"../osd/nonCopyable.h\"\n+#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-\u00a0 Concrete vertex buffer class for OpenCL subdivision. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+\u00a0 CUDA patch table. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n+namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br\n+\u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bc_\bl_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\n+ * _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00788.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00788.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00788 = [\n- [\"CLVertexBuffer\", \"a01149.html\", \"a01149\"]\n+ [\"CudaPatchTable\", \"a01181.html\", \"a01181\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00788_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00788_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/clVertexBuffer.h Source File\n+OpenSubdiv: opensubdiv/osd/cudaPatchTable.h Source File\n \n \n \n \n \n \n \n@@ -92,19 +92,19 @@\n
    No Matches
    \n
    \n
    \n
    \n
    \n \n
    \n-
    clVertexBuffer.h
    \n+
    cudaPatchTable.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n-
    2// Copyright 2013 Pixar
    \n+
    2// Copyright 2015 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n
    6// compliance with the Apache License and the following modification to it:
    \n
    7// Section 6. Trademarks. is deleted and replaced with:
    \n
    8//
    \n
    9// 6. Trademarks. This License does not grant permission to use the trade
    \n@@ -119,95 +119,131 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_CL_VERTEX_BUFFER_H
    \n-
    26#define OPENSUBDIV3_OSD_CL_VERTEX_BUFFER_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_CUDA_PATCH_TABLE_H
    \n+
    26#define OPENSUBDIV3_OSD_CUDA_PATCH_TABLE_H
    \n
    27
    \n
    28#include "../version.h"
    \n-
    29#include "../osd/opencl.h"
    \n-
    30
    \n-
    31namespace OpenSubdiv {
    \n-
    32namespace OPENSUBDIV_VERSION {
    \n-
    33
    \n-
    34namespace Osd {
    \n-
    35
    \n-
    \n-\n+
    29
    \n+
    30#include "../osd/nonCopyable.h"
    \n+
    31#include "../osd/types.h"
    \n+
    32
    \n+
    33#include <vector>
    \n+
    34
    \n+
    35namespace OpenSubdiv {
    \n+
    36namespace OPENSUBDIV_VERSION {
    \n+
    37
    \n+
    38namespace Far{
    \n+
    39 class PatchTable;
    \n+
    40};
    \n+
    41
    \n+
    42namespace Osd {
    \n
    43
    \n-
    44public:
    \n-
    46 static CLVertexBuffer * Create(int numElements, int numVertices, cl_context clContext);
    \n-
    47
    \n-
    48 template <typename DEVICE_CONTEXT>
    \n-
    \n-
    49 static CLVertexBuffer * Create(int numElements, int numVertices,
    \n-
    50 DEVICE_CONTEXT context) {
    \n-
    51 return Create(numElements, numVertices, context->GetContext());
    \n-
    52 }
    \n-
    \n-
    53
    \n-\n-
    56
    \n-
    59 void UpdateData(const float *src, int startVertex, int numVertices, cl_command_queue clQueue,
    \n-
    60 cl_event* startEvents = NULL, unsigned int numStartEvents = 0, cl_event* endEvent = NULL);
    \n+
    \n+
    51class CudaPatchTable : private NonCopyable<CudaPatchTable> {
    \n+
    52public:
    \n+
    54 static CudaPatchTable *Create(Far::PatchTable const *patchTable,
    \n+
    55 void *deviceContext = NULL);
    \n+\n+
    58
    \n+
    60 void *GetPatchArrayBuffer() const { return _patchArrays; }
    \n
    61
    \n-
    62 template<typename DEVICE_CONTEXT>
    \n-
    \n-
    63 void UpdateData(const float *src, int startVertex, int numVertices,
    \n-
    64 DEVICE_CONTEXT context,
    \n-
    65 cl_event* startEvents = NULL, unsigned int numStartEvents = 0, cl_event* endEvent = NULL) {
    \n-
    66 UpdateData(src, startVertex, numVertices, context->GetCommandQueue(), startEvents, numStartEvents, endEvent);
    \n-
    67 }
    \n-
    \n-
    68
    \n-
    70 int GetNumElements() const;
    \n-
    71
    \n-
    73 int GetNumVertices() const;
    \n-
    74
    \n-
    76 cl_mem BindCLBuffer(cl_command_queue queue);
    \n-
    77
    \n-
    78protected:
    \n-
    80 CLVertexBuffer(int numElements, int numVertices, cl_context clContext);
    \n-
    81
    \n-
    84 bool allocate(cl_context clContext);
    \n-
    85
    \n-
    86private:
    \n-
    87 int _numElements;
    \n-
    88 int _numVertices;
    \n-
    89 cl_mem _clMemory;
    \n-
    90};
    \n-
    \n-
    91
    \n-
    92} // end namespace Osd
    \n-
    93
    \n-
    94} // end namespace OPENSUBDIV_VERSION
    \n-
    95using namespace OPENSUBDIV_VERSION;
    \n-
    96
    \n-
    97} // end namespace OpenSubdiv
    \n-
    98
    \n-
    99#endif // OPENSUBDIV3_OSD_CL_VERTEX_BUFFER_H
    \n-\n-
    Concrete vertex buffer class for OpenCL subdivision.
    \n-
    void UpdateData(const float *src, int startVertex, int numVertices, DEVICE_CONTEXT context, cl_event *startEvents=NULL, unsigned int numStartEvents=0, cl_event *endEvent=NULL)
    \n-\n-
    CLVertexBuffer(int numElements, int numVertices, cl_context clContext)
    Constructor.
    \n-
    void UpdateData(const float *src, int startVertex, int numVertices, cl_command_queue clQueue, cl_event *startEvents=NULL, unsigned int numStartEvents=0, cl_event *endEvent=NULL)
    \n-
    int GetNumElements() const
    Returns how many elements defined in this vertex buffer.
    \n-\n-
    int GetNumVertices() const
    Returns how many vertices allocated in this vertex buffer.
    \n-
    static CLVertexBuffer * Create(int numElements, int numVertices, cl_context clContext)
    Creator. Returns NULL if error.
    \n-
    static CLVertexBuffer * Create(int numElements, int numVertices, DEVICE_CONTEXT context)
    \n-
    cl_mem BindCLBuffer(cl_command_queue queue)
    Returns the CL memory object.
    \n+
    63 void *GetPatchIndexBuffer() const { return _indexBuffer; }
    \n+
    64
    \n+
    66 void *GetPatchParamBuffer() const { return _patchParamBuffer; }
    \n+
    67
    \n+
    \n+\n+\n+
    71 }
    \n+
    \n+
    \n+\n+\n+
    75 }
    \n+
    \n+
    76
    \n+
    78 int GetNumFVarChannels() const { return (int)_fvarPatchArrays.size(); }
    \n+
    79
    \n+
    \n+
    81 void *GetFVarPatchArrayBuffer(int fvarChannel) const {
    \n+
    82 return _fvarPatchArrays[fvarChannel];
    \n+
    83 }
    \n+
    \n+
    84
    \n+
    \n+
    86 void *GetFVarPatchIndexBuffer(int fvarChannel = 0) const {
    \n+
    87 return _fvarIndexBuffers[fvarChannel];
    \n+
    88 }
    \n+
    \n+
    89
    \n+
    \n+
    91 void *GetFVarPatchParamBuffer(int fvarChannel = 0) const {
    \n+
    92 return _fvarParamBuffers[fvarChannel];
    \n+
    93 }
    \n+
    \n+
    94
    \n+
    95protected:
    \n+\n+
    97
    \n+
    98 bool allocate(Far::PatchTable const *patchTable);
    \n+
    99
    \n+\n+\n+\n+
    103
    \n+\n+\n+
    106
    \n+
    107 std::vector<void *> _fvarPatchArrays;
    \n+
    108 std::vector<void *> _fvarIndexBuffers;
    \n+
    109 std::vector<void *> _fvarParamBuffers;
    \n+
    110};
    \n+
    \n+
    111
    \n+
    112} // end namespace Osd
    \n+
    113
    \n+
    114} // end namespace OPENSUBDIV_VERSION
    \n+
    115using namespace OPENSUBDIV_VERSION;
    \n+
    116
    \n+
    117} // end namespace OpenSubdiv
    \n+
    118
    \n+
    119#endif // OPENSUBDIV3_OSD_CUDA_PATCH_TABLE_H
    \n+\n+
    Container for arrays of parametric patches.
    Definition patchTable.h:55
    \n+\n+
    void * GetFVarPatchArrayBuffer(int fvarChannel) const
    Returns the cuda memory of the array of Osd::PatchArray buffer.
    \n+\n+
    static CudaPatchTable * Create(Far::PatchTable const *patchTable, void *deviceContext=NULL)
    Creator. Returns NULL if error.
    \n+\n+
    void * GetVaryingPatchIndexBuffer() const
    Returns the cuda memory of the array of varying control vertices.
    \n+\n+
    void * GetVaryingPatchArrayBuffer() const
    Returns the cuda memory of the array of Osd::PatchArray buffer.
    \n+\n+\n+
    void * GetPatchArrayBuffer() const
    Returns the cuda memory of the array of Osd::PatchArray buffer.
    \n+\n+
    bool allocate(Far::PatchTable const *patchTable)
    \n+
    void * GetPatchIndexBuffer() const
    Returns the cuda memory of the patch control vertices.
    \n+
    int GetNumFVarChannels() const
    Returns the number of face-varying channels buffers.
    \n+\n+
    void * GetPatchParamBuffer() const
    Returns the cuda memory of the array of Osd::PatchParam buffer.
    \n+
    void * GetFVarPatchIndexBuffer(int fvarChannel=0) const
    Returns the cuda memory of the array of face-varying control vertices.
    \n+
    void * GetFVarPatchParamBuffer(int fvarChannel=0) const
    Returns the cuda memory of the array of face-varying param.
    \n+\n+\n+\n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,15 +1,15 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-clVertexBuffer.h\n+cudaPatchTable.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n-2// Copyright 2013 Pixar\n+2// Copyright 2015 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n 7// Section 6. Trademarks. is deleted and replaced with:\n 8//\n 9// 6. Trademarks. This License does not grant permission to use the trade\n@@ -24,114 +24,167 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_CL_VERTEX_BUFFER_H\n-26#define OPENSUBDIV3_OSD_CL_VERTEX_BUFFER_H\n+25#ifndef OPENSUBDIV3_OSD_CUDA_PATCH_TABLE_H\n+26#define OPENSUBDIV3_OSD_CUDA_PATCH_TABLE_H\n 27\n 28#include \"../version.h\"\n-29#include \"../osd/opencl.h\"\n-30\n-31namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-32namespace OPENSUBDIV_VERSION {\n-33\n-34namespace Osd {\n-35\n-_\b4_\b2class _\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br {\n+29\n+30#include \"../osd/nonCopyable.h\"\n+31#include \"../osd/types.h\"\n+32\n+33#include \n+34\n+35namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+36namespace OPENSUBDIV_VERSION {\n+37\n+38namespace Far{\n+39 class PatchTable;\n+40};\n+41\n+42namespace Osd {\n 43\n-44public:\n-_\b4_\b6 static _\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br * _\bC_\br_\be_\ba_\bt_\be(int numElements, int numVertices, cl_context\n-clContext);\n-47\n-48 template \n-_\b4_\b9 static _\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br * _\bC_\br_\be_\ba_\bt_\be(int numElements, int numVertices,\n-50 DEVICE_CONTEXT context) {\n-51 return _\bC_\br_\be_\ba_\bt_\be(numElements, numVertices, context->GetContext());\n-52 }\n-53\n-_\b5_\b5 _\b~_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br();\n-56\n-_\b5_\b9 void _\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba(const float *src, int startVertex, int numVertices,\n-cl_command_queue clQueue,\n-60 cl_event* startEvents = NULL, unsigned int numStartEvents = 0, cl_event*\n-endEvent = NULL);\n+_\b5_\b1class _\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be : private NonCopyable {\n+52public:\n+_\b5_\b4 static _\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be *_\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *patchTable,\n+55 void *deviceContext = NULL);\n+_\b5_\b7 _\b~_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be();\n+58\n+_\b6_\b0 void *_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bB_\bu_\bf_\bf_\be_\br() const { return _\b__\bp_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs; }\n 61\n-62 template\n-_\b6_\b3 void _\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba(const float *src, int startVertex, int numVertices,\n-64 DEVICE_CONTEXT context,\n-65 cl_event* startEvents = NULL, unsigned int numStartEvents = 0, cl_event*\n-endEvent = NULL) {\n-66 _\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba(src, startVertex, numVertices, context->GetCommandQueue(),\n-startEvents, numStartEvents, endEvent);\n-67 }\n-68\n-_\b7_\b0 int _\bG_\be_\bt_\bN_\bu_\bm_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs() const;\n-71\n-_\b7_\b3 int _\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const;\n-74\n-_\b7_\b6 cl_mem _\bB_\bi_\bn_\bd_\bC_\bL_\bB_\bu_\bf_\bf_\be_\br(cl_command_queue queue);\n-77\n-78protected:\n-_\b8_\b0 _\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(int numElements, int numVertices, cl_context clContext);\n-81\n-_\b8_\b4 bool _\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be(cl_context clContext);\n-85\n-86private:\n-87 int _numElements;\n-88 int _numVertices;\n-89 cl_mem _clMemory;\n-90};\n-91\n-92} // end namespace Osd\n-93\n-94} // end namespace OPENSUBDIV_VERSION\n-95using namespace OPENSUBDIV_VERSION;\n-96\n-97} // end namespace OpenSubdiv\n-98\n-99#endif // OPENSUBDIV3_OSD_CL_VERTEX_BUFFER_H\n+_\b6_\b3 void *_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br() const { return _\b__\bi_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br; }\n+64\n+_\b6_\b6 void *_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br() const { return _\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br; }\n+67\n+_\b6_\b9 void *_\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bB_\bu_\bf_\bf_\be_\br() const {\n+70 return _\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs;\n+71 }\n+_\b7_\b3 void *_\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br() const {\n+74 return _\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br;\n+75 }\n+76\n+_\b7_\b8 int _\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs() const { return (int)_\b__\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs.size(); }\n+79\n+_\b8_\b1 void *_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bB_\bu_\bf_\bf_\be_\br(int fvarChannel) const {\n+82 return _\b__\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs[fvarChannel];\n+83 }\n+84\n+_\b8_\b6 void *_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(int fvarChannel = 0) const {\n+87 return _\b__\bf_\bv_\ba_\br_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bs[fvarChannel];\n+88 }\n+89\n+_\b9_\b1 void *_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br(int fvarChannel = 0) const {\n+92 return _\b__\bf_\bv_\ba_\br_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br_\bs[fvarChannel];\n+93 }\n+94\n+95protected:\n+_\b9_\b6 _\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be();\n+97\n+_\b9_\b8 bool _\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *patchTable);\n+99\n+_\b1_\b0_\b0 void *_\b__\bp_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs;\n+_\b1_\b0_\b1 void *_\b__\bi_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br;\n+_\b1_\b0_\b2 void *_\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br;\n+103\n+_\b1_\b0_\b4 void *_\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs;\n+_\b1_\b0_\b5 void *_\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br;\n+106\n+_\b1_\b0_\b7 std::vector _\b__\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs;\n+_\b1_\b0_\b8 std::vector _\b__\bf_\bv_\ba_\br_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bs;\n+_\b1_\b0_\b9 std::vector _\b__\bf_\bv_\ba_\br_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br_\bs;\n+110};\n+111\n+112} // end namespace Osd\n+113\n+114} // end namespace OPENSUBDIV_VERSION\n+115using namespace OPENSUBDIV_VERSION;\n+116\n+117} // end namespace OpenSubdiv\n+118\n+119#endif // OPENSUBDIV3_OSD_CUDA_PATCH_TABLE_H\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-Concrete vertex buffer class for OpenCL subdivision.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh_\b:_\b4_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba\n-void UpdateData(const float *src, int startVertex, int numVertices,\n-DEVICE_CONTEXT context, cl_event *startEvents=NULL, unsigned int\n-numStartEvents=0, cl_event *endEvent=NULL)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh_\b:_\b6_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\b~_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-~CLVertexBuffer()\n-Destructor.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-CLVertexBuffer(int numElements, int numVertices, cl_context clContext)\n-Constructor.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba\n-void UpdateData(const float *src, int startVertex, int numVertices,\n-cl_command_queue clQueue, cl_event *startEvents=NULL, unsigned int\n-numStartEvents=0, cl_event *endEvent=NULL)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n-int GetNumElements() const\n-Returns how many elements defined in this vertex buffer.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be\n-bool allocate(cl_context clContext)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-int GetNumVertices() const\n-Returns how many vertices allocated in this vertex buffer.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static CLVertexBuffer * Create(int numElements, int numVertices, cl_context\n-clContext)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+Container for arrays of parametric patches.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+CUDA patch table.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bB_\bu_\bf_\bf_\be_\br\n+void * GetFVarPatchArrayBuffer(int fvarChannel) const\n+Returns the cuda memory of the array of Osd::PatchArray buffer.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bf_\bv_\ba_\br_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br_\bs\n+std::vector< void * > _fvarParamBuffers\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static CudaPatchTable * Create(Far::PatchTable const *patchTable, void\n+*deviceContext=NULL)\n Creator. Returns NULL if error.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static CLVertexBuffer * Create(int numElements, int numVertices, DEVICE_CONTEXT\n-context)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh_\b:_\b4_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bB_\bi_\bn_\bd_\bC_\bL_\bB_\bu_\bf_\bf_\be_\br\n-cl_mem BindCLBuffer(cl_command_queue queue)\n-Returns the CL memory object.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n+void * _varyingPatchArrays\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+void * GetVaryingPatchIndexBuffer() const\n+Returns the cuda memory of the array of varying control vertices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bf_\bv_\ba_\br_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bs\n+std::vector< void * > _fvarIndexBuffers\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bB_\bu_\bf_\bf_\be_\br\n+void * GetVaryingPatchArrayBuffer() const\n+Returns the cuda memory of the array of Osd::PatchArray buffer.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+void * _varyingIndexBuffer\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b~_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+~CudaPatchTable()\n+Destructor.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bB_\bu_\bf_\bf_\be_\br\n+void * GetPatchArrayBuffer() const\n+Returns the cuda memory of the array of Osd::PatchArray buffer.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n+std::vector< void * > _fvarPatchArrays\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be\n+bool allocate(Far::PatchTable const *patchTable)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+void * GetPatchIndexBuffer() const\n+Returns the cuda memory of the patch control vertices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs\n+int GetNumFVarChannels() const\n+Returns the number of face-varying channels buffers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bp_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n+void * _patchArrays\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br\n+void * GetPatchParamBuffer() const\n+Returns the cuda memory of the array of Osd::PatchParam buffer.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+void * GetFVarPatchIndexBuffer(int fvarChannel=0) const\n+Returns the cuda memory of the array of face-varying control vertices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br\n+void * GetFVarPatchParamBuffer(int fvarChannel=0) const\n+Returns the cuda memory of the array of face-varying param.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b9_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+CudaPatchTable()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br\n+void * _patchParamBuffer\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bi_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+void * _indexBuffer\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b1\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bc_\bl_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\n+ * _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00791.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00791.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/cudaPatchTable.h File Reference\n+OpenSubdiv: opensubdiv/osd/clPatchTable.h File Reference\n \n \n \n \n \n \n \n@@ -90,28 +90,29 @@\n
    \n
    \n \n
    \n \n-
    cudaPatchTable.h File Reference
    \n+
    clPatchTable.h File Reference
    \n
    \n
    \n
    #include "../version.h"
    \n+#include "../osd/opencl.h"
    \n #include "../osd/nonCopyable.h"
    \n #include "../osd/types.h"
    \n #include <vector>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n \n

    \n Classes

    class  CudaPatchTable
     CUDA patch table. More...
    class  CLPatchTable
     CL patch table. More...
     
    \n \n \n \n \n@@ -122,13 +123,13 @@\n \n

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,29 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-cudaPatchTable.h File Reference\n+clPatchTable.h File Reference\n #include \"../version.h\"\n+#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bo_\bp_\be_\bn_\bc_\bl_\b._\bh\"\n #include \"../osd/nonCopyable.h\"\n #include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n #include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-\u00a0 CUDA patch table. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+\u00a0 CL patch table. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n+ * _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00791.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00791.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00791 = [\n- [\"CudaPatchTable\", \"a01181.html\", \"a01181\"]\n+ [\"CLPatchTable\", \"a01145.html\", \"a01145\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00791_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00791_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/cudaPatchTable.h Source File\n+OpenSubdiv: opensubdiv/osd/clPatchTable.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
    No Matches
    \n
    \n
    \n
    \n
    \n \n
    \n-
    cudaPatchTable.h
    \n+
    clPatchTable.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n
    2// Copyright 2015 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n@@ -119,131 +119,124 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_CUDA_PATCH_TABLE_H
    \n-
    26#define OPENSUBDIV3_OSD_CUDA_PATCH_TABLE_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_CL_PATCH_TABLE_H
    \n+
    26#define OPENSUBDIV3_OSD_CL_PATCH_TABLE_H
    \n
    27
    \n
    28#include "../version.h"
    \n
    29
    \n-
    30#include "../osd/nonCopyable.h"
    \n-
    31#include "../osd/types.h"
    \n-
    32
    \n-
    33#include <vector>
    \n-
    34
    \n-
    35namespace OpenSubdiv {
    \n-
    36namespace OPENSUBDIV_VERSION {
    \n-
    37
    \n-
    38namespace Far{
    \n-
    39 class PatchTable;
    \n-
    40};
    \n-
    41
    \n-
    42namespace Osd {
    \n-
    43
    \n-
    \n-
    51class CudaPatchTable : private NonCopyable<CudaPatchTable> {
    \n-
    52public:
    \n-
    54 static CudaPatchTable *Create(Far::PatchTable const *patchTable,
    \n-
    55 void *deviceContext = NULL);
    \n-\n-
    58
    \n-
    60 void *GetPatchArrayBuffer() const { return _patchArrays; }
    \n-
    61
    \n-
    63 void *GetPatchIndexBuffer() const { return _indexBuffer; }
    \n-
    64
    \n-
    66 void *GetPatchParamBuffer() const { return _patchParamBuffer; }
    \n-
    67
    \n-
    \n-\n-\n-
    71 }
    \n-
    \n-
    \n-\n-\n-
    75 }
    \n-
    \n-
    76
    \n-
    78 int GetNumFVarChannels() const { return (int)_fvarPatchArrays.size(); }
    \n-
    79
    \n-
    \n-
    81 void *GetFVarPatchArrayBuffer(int fvarChannel) const {
    \n-
    82 return _fvarPatchArrays[fvarChannel];
    \n-
    83 }
    \n-
    \n+
    30#include "../osd/opencl.h"
    \n+
    31#include "../osd/nonCopyable.h"
    \n+
    32#include "../osd/types.h"
    \n+
    33
    \n+
    34#include <vector>
    \n+
    35
    \n+
    36namespace OpenSubdiv {
    \n+
    37namespace OPENSUBDIV_VERSION {
    \n+
    38
    \n+
    39namespace Far{
    \n+
    40 class PatchTable;
    \n+
    41};
    \n+
    42
    \n+
    43namespace Osd {
    \n+
    44
    \n+
    \n+
    52class CLPatchTable : private NonCopyable<CLPatchTable> {
    \n+
    53public:
    \n+
    55 static CLPatchTable *Create(Far::PatchTable const *patchTable,
    \n+
    56 cl_context clContext);
    \n+
    57
    \n+
    58 template <typename DEVICE_CONTEXT>
    \n+
    \n+
    59 static CLPatchTable * Create(Far::PatchTable const *patchTable,
    \n+
    60 DEVICE_CONTEXT context) {
    \n+
    61 return Create(patchTable, context->GetContext());
    \n+
    62 }
    \n+
    \n+
    63
    \n+\n+
    66
    \n+
    68 cl_mem GetPatchArrayBuffer() const { return _patchArrays; }
    \n+
    69
    \n+
    71 cl_mem GetPatchIndexBuffer() const { return _indexBuffer; }
    \n+
    72
    \n+
    74 cl_mem GetPatchParamBuffer() const { return _patchParamBuffer; }
    \n+
    75
    \n+\n+
    78
    \n+\n+
    81
    \n+
    83 int GetNumFVarChannels() const { return (int)_fvarPatchArrays.size(); }
    \n
    84
    \n-
    \n-
    86 void *GetFVarPatchIndexBuffer(int fvarChannel = 0) const {
    \n-
    87 return _fvarIndexBuffers[fvarChannel];
    \n-
    88 }
    \n-
    \n-
    89
    \n-
    \n-
    91 void *GetFVarPatchParamBuffer(int fvarChannel = 0) const {
    \n-
    92 return _fvarParamBuffers[fvarChannel];
    \n-
    93 }
    \n-
    \n-
    94
    \n-
    95protected:
    \n-\n-
    97
    \n-
    98 bool allocate(Far::PatchTable const *patchTable);
    \n-
    99
    \n-\n-\n-\n-
    103
    \n-\n-\n-
    106
    \n-
    107 std::vector<void *> _fvarPatchArrays;
    \n-
    108 std::vector<void *> _fvarIndexBuffers;
    \n-
    109 std::vector<void *> _fvarParamBuffers;
    \n+
    86 cl_mem GetFVarPatchArrayBuffer(int fvarChannel = 0) const { return _fvarPatchArrays[fvarChannel]; }
    \n+
    87
    \n+
    89 cl_mem GetFVarPatchIndexBuffer(int fvarChannel = 0) const { return _fvarIndexBuffers[fvarChannel]; }
    \n+
    90
    \n+
    92 cl_mem GetFVarPatchParamBuffer(int fvarChannel = 0) const { return _fvarParamBuffers[fvarChannel]; }
    \n+
    93
    \n+
    94protected:
    \n+\n+
    96
    \n+
    97 bool allocate(Far::PatchTable const *patchTable, cl_context clContext);
    \n+
    98
    \n+\n+\n+\n+
    102
    \n+\n+\n+
    105
    \n+
    106 std::vector<cl_mem> _fvarPatchArrays;
    \n+
    107 std::vector<cl_mem> _fvarIndexBuffers;
    \n+
    108 std::vector<cl_mem> _fvarParamBuffers;
    \n+
    109
    \n
    110};
    \n
    \n
    111
    \n
    112} // end namespace Osd
    \n
    113
    \n
    114} // end namespace OPENSUBDIV_VERSION
    \n
    115using namespace OPENSUBDIV_VERSION;
    \n
    116
    \n
    117} // end namespace OpenSubdiv
    \n
    118
    \n-
    119#endif // OPENSUBDIV3_OSD_CUDA_PATCH_TABLE_H
    \n-\n-
    Container for arrays of parametric patches.
    Definition patchTable.h:55
    \n-\n-
    void * GetFVarPatchArrayBuffer(int fvarChannel) const
    Returns the cuda memory of the array of Osd::PatchArray buffer.
    \n-\n-
    static CudaPatchTable * Create(Far::PatchTable const *patchTable, void *deviceContext=NULL)
    Creator. Returns NULL if error.
    \n-\n-
    void * GetVaryingPatchIndexBuffer() const
    Returns the cuda memory of the array of varying control vertices.
    \n-\n-
    void * GetVaryingPatchArrayBuffer() const
    Returns the cuda memory of the array of Osd::PatchArray buffer.
    \n-\n-\n-
    void * GetPatchArrayBuffer() const
    Returns the cuda memory of the array of Osd::PatchArray buffer.
    \n-\n-
    bool allocate(Far::PatchTable const *patchTable)
    \n-
    void * GetPatchIndexBuffer() const
    Returns the cuda memory of the patch control vertices.
    \n-
    int GetNumFVarChannels() const
    Returns the number of face-varying channels buffers.
    \n-\n-
    void * GetPatchParamBuffer() const
    Returns the cuda memory of the array of Osd::PatchParam buffer.
    \n-
    void * GetFVarPatchIndexBuffer(int fvarChannel=0) const
    Returns the cuda memory of the array of face-varying control vertices.
    \n-
    void * GetFVarPatchParamBuffer(int fvarChannel=0) const
    Returns the cuda memory of the array of face-varying param.
    \n-\n-\n-\n+
    119#endif // OPENSUBDIV3_OSD_CL_PATCH_TABLE_H
    \n+\n+
    Container for arrays of parametric patches.
    Definition patchTable.h:55
    \n+\n+\n+\n+\n+
    cl_mem GetPatchParamBuffer() const
    Returns the CL memory of the array of Osd::PatchParam buffer.
    \n+\n+
    cl_mem GetFVarPatchArrayBuffer(int fvarChannel=0) const
    Returns the CL memory of the array of Osd::PatchArray buffer.
    \n+
    cl_mem GetPatchArrayBuffer() const
    Returns the CL memory of the array of Osd::PatchArray buffer.
    \n+
    static CLPatchTable * Create(Far::PatchTable const *patchTable, cl_context clContext)
    Creator. Returns NULL if error.
    \n+\n+
    cl_mem GetFVarPatchIndexBuffer(int fvarChannel=0) const
    Returns the CL memory of the face-varying control vertices.
    \n+\n+
    cl_mem GetVaryingPatchIndexBuffer() const
    Returns the CL memory of the varying control vertices.
    \n+
    int GetNumFVarChannels() const
    Returns the number of face-varying channel buffers.
    \n+
    cl_mem GetPatchIndexBuffer() const
    Returns the CL memory of the patch control vertices.
    \n+
    static CLPatchTable * Create(Far::PatchTable const *patchTable, DEVICE_CONTEXT context)
    \n+
    cl_mem GetFVarPatchParamBuffer(int fvarChannel=0) const
    Returns the CL memory of the array of Osd::PatchParam buffer.
    \n+\n+
    bool allocate(Far::PatchTable const *patchTable, cl_context clContext)
    \n+\n+\n+\n+
    cl_mem GetVaryingPatchArrayBuffer() const
    Returns the CL memory of the array of Osd::PatchArray buffer.
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-cudaPatchTable.h\n+clPatchTable.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2015 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -24,167 +24,174 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_CUDA_PATCH_TABLE_H\n-26#define OPENSUBDIV3_OSD_CUDA_PATCH_TABLE_H\n+25#ifndef OPENSUBDIV3_OSD_CL_PATCH_TABLE_H\n+26#define OPENSUBDIV3_OSD_CL_PATCH_TABLE_H\n 27\n 28#include \"../version.h\"\n 29\n-30#include \"../osd/nonCopyable.h\"\n-31#include \"../osd/types.h\"\n-32\n-33#include \n-34\n-35namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-36namespace OPENSUBDIV_VERSION {\n-37\n-38namespace Far{\n-39 class PatchTable;\n-40};\n-41\n-42namespace Osd {\n-43\n-_\b5_\b1class _\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be : private NonCopyable {\n-52public:\n-_\b5_\b4 static _\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be *_\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *patchTable,\n-55 void *deviceContext = NULL);\n-_\b5_\b7 _\b~_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be();\n-58\n-_\b6_\b0 void *_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bB_\bu_\bf_\bf_\be_\br() const { return _\b__\bp_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs; }\n-61\n-_\b6_\b3 void *_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br() const { return _\b__\bi_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br; }\n-64\n-_\b6_\b6 void *_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br() const { return _\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br; }\n-67\n-_\b6_\b9 void *_\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bB_\bu_\bf_\bf_\be_\br() const {\n-70 return _\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs;\n-71 }\n-_\b7_\b3 void *_\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br() const {\n-74 return _\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br;\n-75 }\n-76\n-_\b7_\b8 int _\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs() const { return (int)_\b__\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs.size(); }\n-79\n-_\b8_\b1 void *_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bB_\bu_\bf_\bf_\be_\br(int fvarChannel) const {\n-82 return _\b__\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs[fvarChannel];\n-83 }\n+30#include \"../osd/opencl.h\"\n+31#include \"../osd/nonCopyable.h\"\n+32#include \"../osd/types.h\"\n+33\n+34#include \n+35\n+36namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+37namespace OPENSUBDIV_VERSION {\n+38\n+39namespace Far{\n+40 class PatchTable;\n+41};\n+42\n+43namespace Osd {\n+44\n+_\b5_\b2class _\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be : private NonCopyable {\n+53public:\n+_\b5_\b5 static _\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be *_\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *patchTable,\n+56 cl_context clContext);\n+57\n+58 template \n+_\b5_\b9 static _\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be * _\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *patchTable,\n+60 DEVICE_CONTEXT context) {\n+61 return _\bC_\br_\be_\ba_\bt_\be(patchTable, context->GetContext());\n+62 }\n+63\n+_\b6_\b5 _\b~_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be();\n+66\n+_\b6_\b8 cl_mem _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bB_\bu_\bf_\bf_\be_\br() const { return _\b__\bp_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs; }\n+69\n+_\b7_\b1 cl_mem _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br() const { return _\b__\bi_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br; }\n+72\n+_\b7_\b4 cl_mem _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br() const { return _\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br; }\n+75\n+_\b7_\b7 cl_mem _\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bB_\bu_\bf_\bf_\be_\br() const { return _\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs; }\n+78\n+_\b8_\b0 cl_mem _\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br() const { return _\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br; }\n+81\n+_\b8_\b3 int _\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs() const { return (int)_\b__\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs.size(); }\n 84\n-_\b8_\b6 void *_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(int fvarChannel = 0) const {\n-87 return _\b__\bf_\bv_\ba_\br_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bs[fvarChannel];\n-88 }\n-89\n-_\b9_\b1 void *_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br(int fvarChannel = 0) const {\n-92 return _\b__\bf_\bv_\ba_\br_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br_\bs[fvarChannel];\n-93 }\n-94\n-95protected:\n-_\b9_\b6 _\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be();\n-97\n-_\b9_\b8 bool _\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *patchTable);\n-99\n-_\b1_\b0_\b0 void *_\b__\bp_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs;\n-_\b1_\b0_\b1 void *_\b__\bi_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br;\n-_\b1_\b0_\b2 void *_\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br;\n-103\n-_\b1_\b0_\b4 void *_\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs;\n-_\b1_\b0_\b5 void *_\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br;\n-106\n-_\b1_\b0_\b7 std::vector _\b__\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs;\n-_\b1_\b0_\b8 std::vector _\b__\bf_\bv_\ba_\br_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bs;\n-_\b1_\b0_\b9 std::vector _\b__\bf_\bv_\ba_\br_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br_\bs;\n+_\b8_\b6 cl_mem _\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bB_\bu_\bf_\bf_\be_\br(int fvarChannel = 0) const { return\n+_\b__\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs[fvarChannel]; }\n+87\n+_\b8_\b9 cl_mem _\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(int fvarChannel = 0) const { return\n+_\b__\bf_\bv_\ba_\br_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bs[fvarChannel]; }\n+90\n+_\b9_\b2 cl_mem _\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br(int fvarChannel = 0) const { return\n+_\b__\bf_\bv_\ba_\br_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br_\bs[fvarChannel]; }\n+93\n+94protected:\n+_\b9_\b5 _\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be();\n+96\n+_\b9_\b7 bool _\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *patchTable, cl_context clContext);\n+98\n+_\b9_\b9 cl_mem _\b__\bp_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs;\n+_\b1_\b0_\b0 cl_mem _\b__\bi_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br;\n+_\b1_\b0_\b1 cl_mem _\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br;\n+102\n+_\b1_\b0_\b3 cl_mem _\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs;\n+_\b1_\b0_\b4 cl_mem _\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br;\n+105\n+_\b1_\b0_\b6 std::vector _\b__\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs;\n+_\b1_\b0_\b7 std::vector _\b__\bf_\bv_\ba_\br_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bs;\n+_\b1_\b0_\b8 std::vector _\b__\bf_\bv_\ba_\br_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br_\bs;\n+109\n 110};\n 111\n 112} // end namespace Osd\n 113\n 114} // end namespace OPENSUBDIV_VERSION\n 115using namespace OPENSUBDIV_VERSION;\n 116\n 117} // end namespace OpenSubdiv\n 118\n-119#endif // OPENSUBDIV3_OSD_CUDA_PATCH_TABLE_H\n+119#endif // OPENSUBDIV3_OSD_CL_PATCH_TABLE_H\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n Container for arrays of parametric patches.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-CUDA patch table.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bB_\bu_\bf_\bf_\be_\br\n-void * GetFVarPatchArrayBuffer(int fvarChannel) const\n-Returns the cuda memory of the array of Osd::PatchArray buffer.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bf_\bv_\ba_\br_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br_\bs\n-std::vector< void * > _fvarParamBuffers\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static CudaPatchTable * Create(Far::PatchTable const *patchTable, void\n-*deviceContext=NULL)\n-Creator. Returns NULL if error.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n-void * _varyingPatchArrays\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-void * GetVaryingPatchIndexBuffer() const\n-Returns the cuda memory of the array of varying control vertices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bf_\bv_\ba_\br_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bs\n-std::vector< void * > _fvarIndexBuffers\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bB_\bu_\bf_\bf_\be_\br\n-void * GetVaryingPatchArrayBuffer() const\n-Returns the cuda memory of the array of Osd::PatchArray buffer.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-void * _varyingIndexBuffer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b~_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-~CudaPatchTable()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+CL patch table.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n+std::vector< cl_mem > _fvarPatchArrays\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b~_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+~CLPatchTable()\n Destructor.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bB_\bu_\bf_\bf_\be_\br\n-void * GetPatchArrayBuffer() const\n-Returns the cuda memory of the array of Osd::PatchArray buffer.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n-std::vector< void * > _fvarPatchArrays\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be\n-bool allocate(Far::PatchTable const *patchTable)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-void * GetPatchIndexBuffer() const\n-Returns the cuda memory of the patch control vertices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br\n+cl_mem _patchParamBuffer\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br\n+cl_mem GetPatchParamBuffer() const\n+Returns the CL memory of the array of Osd::PatchParam buffer.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bi_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+cl_mem _indexBuffer\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bB_\bu_\bf_\bf_\be_\br\n+cl_mem GetFVarPatchArrayBuffer(int fvarChannel=0) const\n+Returns the CL memory of the array of Osd::PatchArray buffer.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bB_\bu_\bf_\bf_\be_\br\n+cl_mem GetPatchArrayBuffer() const\n+Returns the CL memory of the array of Osd::PatchArray buffer.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static CLPatchTable * Create(Far::PatchTable const *patchTable, cl_context\n+clContext)\n+Creator. Returns NULL if error.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bp_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n+cl_mem _patchArrays\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b9_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+cl_mem GetFVarPatchIndexBuffer(int fvarChannel=0) const\n+Returns the CL memory of the face-varying control vertices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+cl_mem _varyingIndexBuffer\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+cl_mem GetVaryingPatchIndexBuffer() const\n+Returns the CL memory of the varying control vertices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs\n int GetNumFVarChannels() const\n-Returns the number of face-varying channels buffers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bp_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n-void * _patchArrays\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br\n-void * GetPatchParamBuffer() const\n-Returns the cuda memory of the array of Osd::PatchParam buffer.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-void * GetFVarPatchIndexBuffer(int fvarChannel=0) const\n-Returns the cuda memory of the array of face-varying control vertices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br\n-void * GetFVarPatchParamBuffer(int fvarChannel=0) const\n-Returns the cuda memory of the array of face-varying param.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b9_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-CudaPatchTable()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br\n-void * _patchParamBuffer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bi_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-void * _indexBuffer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b1\n+Returns the number of face-varying channel buffers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+cl_mem GetPatchIndexBuffer() const\n+Returns the CL memory of the patch control vertices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static CLPatchTable * Create(Far::PatchTable const *patchTable, DEVICE_CONTEXT\n+context)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br\n+cl_mem GetFVarPatchParamBuffer(int fvarChannel=0) const\n+Returns the CL memory of the array of Osd::PatchParam buffer.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b9_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+CLPatchTable()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be\n+bool allocate(Far::PatchTable const *patchTable, cl_context clContext)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bf_\bv_\ba_\br_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br_\bs\n+std::vector< cl_mem > _fvarParamBuffers\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bf_\bv_\ba_\br_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bs\n+std::vector< cl_mem > _fvarIndexBuffers\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n+cl_mem _varyingPatchArrays\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bB_\bu_\bf_\bf_\be_\br\n+cl_mem GetVaryingPatchArrayBuffer() const\n+Returns the CL memory of the array of Osd::PatchArray buffer.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b7\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bc_\bu_\bd_\ba_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n+ * _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00794_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00794_source.html", "unified_diff": "@@ -640,15 +640,15 @@\n
    1267} // end namespace OPENSUBDIV_VERSION
    \n
    1268using namespace OPENSUBDIV_VERSION;
    \n
    1269
    \n
    1270} // end namespace OpenSubdiv
    \n
    1271
    \n
    1272
    \n
    1273#endif // OPENSUBDIV3_OSD_CUDA_EVALUATOR_H
    \n-\n+\n
    Stencil table class wrapping the template for compatibility.
    \n
    Limit stencil table class wrapping the template for compatibility.
    \n
    BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
    \n \n \n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00797.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00797.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/opencl.h File Reference\n+OpenSubdiv: opensubdiv/osd/clVertexBuffer.h File Reference\n \n \n \n \n \n \n \n@@ -87,24 +87,44 @@\n
    No Matches
    \n
    \n
    \n
    \n
    \n \n
    \n-
    opencl.h File Reference
    \n+ \n+
    clVertexBuffer.h File Reference
    \n
    \n
    \n-
    #include <CL/opencl.h>
    \n+
    #include "../version.h"
    \n+#include "../osd/opencl.h"
    \n
    \n

    Go to the source code of this file.

    \n+\n+\n+\n+\n+\n+

    \n+Classes

    class  CLVertexBuffer
     Concrete vertex buffer class for OpenCL subdivision. More...
     
    \n+\n+\n+\n+\n+\n+\n+\n+

    \n+Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
     
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,11 +1,24 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-opencl.h File Reference\n-#include \n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+clVertexBuffer.h File Reference\n+#include \"../version.h\"\n+#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bo_\bp_\be_\bn_\bc_\bl_\b._\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+\u00a0 Concrete vertex buffer class for OpenCL subdivision. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n+namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n+\u00a0\n+namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n+\u00a0\n+namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n+\u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bo_\bp_\be_\bn_\bc_\bl_\b._\bh\n+ * _\bc_\bl_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00797_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00797_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/opencl.h Source File\n+OpenSubdiv: opensubdiv/osd/clVertexBuffer.h Source File\n \n \n \n \n \n \n \n@@ -92,19 +92,19 @@\n
    No Matches
    \n
    \n
    \n
    \n
    \n \n
    \n-
    opencl.h
    \n+
    clVertexBuffer.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n-
    2// Copyright 2014 Pixar
    \n+
    2// Copyright 2013 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n
    6// compliance with the Apache License and the following modification to it:
    \n
    7// Section 6. Trademarks. is deleted and replaced with:
    \n
    8//
    \n
    9// 6. Trademarks. This License does not grant permission to use the trade
    \n@@ -119,32 +119,95 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_OPENCL_H
    \n-
    26#define OPENSUBDIV3_OSD_OPENCL_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_CL_VERTEX_BUFFER_H
    \n+
    26#define OPENSUBDIV3_OSD_CL_VERTEX_BUFFER_H
    \n
    27
    \n-
    28#if defined(OPENSUBDIV_HAS_CLEW)
    \n-
    29# include <clew.h>
    \n-
    30#else
    \n-
    31# if defined(__APPLE__)
    \n-
    32# include <OpenCL/opencl.h>
    \n-
    33# else
    \n-
    34# include <CL/opencl.h>
    \n-
    35# endif
    \n-
    36#endif
    \n-
    37
    \n-
    38#endif // OPENSUBDIV3_OSD_CL_UTIL_H
    \n+
    28#include "../version.h"
    \n+
    29#include "../osd/opencl.h"
    \n+
    30
    \n+
    31namespace OpenSubdiv {
    \n+
    32namespace OPENSUBDIV_VERSION {
    \n+
    33
    \n+
    34namespace Osd {
    \n+
    35
    \n+
    \n+\n+
    43
    \n+
    44public:
    \n+
    46 static CLVertexBuffer * Create(int numElements, int numVertices, cl_context clContext);
    \n+
    47
    \n+
    48 template <typename DEVICE_CONTEXT>
    \n+
    \n+
    49 static CLVertexBuffer * Create(int numElements, int numVertices,
    \n+
    50 DEVICE_CONTEXT context) {
    \n+
    51 return Create(numElements, numVertices, context->GetContext());
    \n+
    52 }
    \n+
    \n+
    53
    \n+\n+
    56
    \n+
    59 void UpdateData(const float *src, int startVertex, int numVertices, cl_command_queue clQueue,
    \n+
    60 cl_event* startEvents = NULL, unsigned int numStartEvents = 0, cl_event* endEvent = NULL);
    \n+
    61
    \n+
    62 template<typename DEVICE_CONTEXT>
    \n+
    \n+
    63 void UpdateData(const float *src, int startVertex, int numVertices,
    \n+
    64 DEVICE_CONTEXT context,
    \n+
    65 cl_event* startEvents = NULL, unsigned int numStartEvents = 0, cl_event* endEvent = NULL) {
    \n+
    66 UpdateData(src, startVertex, numVertices, context->GetCommandQueue(), startEvents, numStartEvents, endEvent);
    \n+
    67 }
    \n+
    \n+
    68
    \n+
    70 int GetNumElements() const;
    \n+
    71
    \n+
    73 int GetNumVertices() const;
    \n+
    74
    \n+
    76 cl_mem BindCLBuffer(cl_command_queue queue);
    \n+
    77
    \n+
    78protected:
    \n+
    80 CLVertexBuffer(int numElements, int numVertices, cl_context clContext);
    \n+
    81
    \n+
    84 bool allocate(cl_context clContext);
    \n+
    85
    \n+
    86private:
    \n+
    87 int _numElements;
    \n+
    88 int _numVertices;
    \n+
    89 cl_mem _clMemory;
    \n+
    90};
    \n+
    \n+
    91
    \n+
    92} // end namespace Osd
    \n+
    93
    \n+
    94} // end namespace OPENSUBDIV_VERSION
    \n+
    95using namespace OPENSUBDIV_VERSION;
    \n+
    96
    \n+
    97} // end namespace OpenSubdiv
    \n+
    98
    \n+
    99#endif // OPENSUBDIV3_OSD_CL_VERTEX_BUFFER_H
    \n+\n+
    Concrete vertex buffer class for OpenCL subdivision.
    \n+
    void UpdateData(const float *src, int startVertex, int numVertices, DEVICE_CONTEXT context, cl_event *startEvents=NULL, unsigned int numStartEvents=0, cl_event *endEvent=NULL)
    \n+\n+
    CLVertexBuffer(int numElements, int numVertices, cl_context clContext)
    Constructor.
    \n+
    void UpdateData(const float *src, int startVertex, int numVertices, cl_command_queue clQueue, cl_event *startEvents=NULL, unsigned int numStartEvents=0, cl_event *endEvent=NULL)
    \n+
    int GetNumElements() const
    Returns how many elements defined in this vertex buffer.
    \n+\n+
    int GetNumVertices() const
    Returns how many vertices allocated in this vertex buffer.
    \n+
    static CLVertexBuffer * Create(int numElements, int numVertices, cl_context clContext)
    Creator. Returns NULL if error.
    \n+
    static CLVertexBuffer * Create(int numElements, int numVertices, DEVICE_CONTEXT context)
    \n+
    cl_mem BindCLBuffer(cl_command_queue queue)
    Returns the CL memory object.
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,15 +1,15 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-opencl.h\n+clVertexBuffer.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n-2// Copyright 2014 Pixar\n+2// Copyright 2013 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n 7// Section 6. Trademarks. is deleted and replaced with:\n 8//\n 9// 6. Trademarks. This License does not grant permission to use the trade\n@@ -24,25 +24,114 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_OPENCL_H\n-26#define OPENSUBDIV3_OSD_OPENCL_H\n+25#ifndef OPENSUBDIV3_OSD_CL_VERTEX_BUFFER_H\n+26#define OPENSUBDIV3_OSD_CL_VERTEX_BUFFER_H\n 27\n-28#if defined(OPENSUBDIV_HAS_CLEW)\n-29# include \n-30#else\n-31# if defined(__APPLE__)\n-32# include \n-33# else\n-34# include \n-35# endif\n-36#endif\n-37\n-38#endif // OPENSUBDIV3_OSD_CL_UTIL_H\n+28#include \"../version.h\"\n+29#include \"../osd/opencl.h\"\n+30\n+31namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+32namespace OPENSUBDIV_VERSION {\n+33\n+34namespace Osd {\n+35\n+_\b4_\b2class _\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br {\n+43\n+44public:\n+_\b4_\b6 static _\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br * _\bC_\br_\be_\ba_\bt_\be(int numElements, int numVertices, cl_context\n+clContext);\n+47\n+48 template \n+_\b4_\b9 static _\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br * _\bC_\br_\be_\ba_\bt_\be(int numElements, int numVertices,\n+50 DEVICE_CONTEXT context) {\n+51 return _\bC_\br_\be_\ba_\bt_\be(numElements, numVertices, context->GetContext());\n+52 }\n+53\n+_\b5_\b5 _\b~_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br();\n+56\n+_\b5_\b9 void _\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba(const float *src, int startVertex, int numVertices,\n+cl_command_queue clQueue,\n+60 cl_event* startEvents = NULL, unsigned int numStartEvents = 0, cl_event*\n+endEvent = NULL);\n+61\n+62 template\n+_\b6_\b3 void _\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba(const float *src, int startVertex, int numVertices,\n+64 DEVICE_CONTEXT context,\n+65 cl_event* startEvents = NULL, unsigned int numStartEvents = 0, cl_event*\n+endEvent = NULL) {\n+66 _\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba(src, startVertex, numVertices, context->GetCommandQueue(),\n+startEvents, numStartEvents, endEvent);\n+67 }\n+68\n+_\b7_\b0 int _\bG_\be_\bt_\bN_\bu_\bm_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs() const;\n+71\n+_\b7_\b3 int _\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const;\n+74\n+_\b7_\b6 cl_mem _\bB_\bi_\bn_\bd_\bC_\bL_\bB_\bu_\bf_\bf_\be_\br(cl_command_queue queue);\n+77\n+78protected:\n+_\b8_\b0 _\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(int numElements, int numVertices, cl_context clContext);\n+81\n+_\b8_\b4 bool _\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be(cl_context clContext);\n+85\n+86private:\n+87 int _numElements;\n+88 int _numVertices;\n+89 cl_mem _clMemory;\n+90};\n+91\n+92} // end namespace Osd\n+93\n+94} // end namespace OPENSUBDIV_VERSION\n+95using namespace OPENSUBDIV_VERSION;\n+96\n+97} // end namespace OpenSubdiv\n+98\n+99#endif // OPENSUBDIV3_OSD_CL_VERTEX_BUFFER_H\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+Concrete vertex buffer class for OpenCL subdivision.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh_\b:_\b4_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba\n+void UpdateData(const float *src, int startVertex, int numVertices,\n+DEVICE_CONTEXT context, cl_event *startEvents=NULL, unsigned int\n+numStartEvents=0, cl_event *endEvent=NULL)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh_\b:_\b6_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\b~_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+~CLVertexBuffer()\n+Destructor.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+CLVertexBuffer(int numElements, int numVertices, cl_context clContext)\n+Constructor.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba\n+void UpdateData(const float *src, int startVertex, int numVertices,\n+cl_command_queue clQueue, cl_event *startEvents=NULL, unsigned int\n+numStartEvents=0, cl_event *endEvent=NULL)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n+int GetNumElements() const\n+Returns how many elements defined in this vertex buffer.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be\n+bool allocate(cl_context clContext)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+int GetNumVertices() const\n+Returns how many vertices allocated in this vertex buffer.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static CLVertexBuffer * Create(int numElements, int numVertices, cl_context\n+clContext)\n+Creator. Returns NULL if error.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static CLVertexBuffer * Create(int numElements, int numVertices, DEVICE_CONTEXT\n+context)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh_\b:_\b4_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bB_\bi_\bn_\bd_\bC_\bL_\bB_\bu_\bf_\bf_\be_\br\n+cl_mem BindCLBuffer(cl_command_queue queue)\n+Returns the CL memory object.\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bo_\bp_\be_\bn_\bc_\bl_\b._\bh\n+ * _\bc_\bl_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00800.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00800.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/clPatchTable.h File Reference\n+OpenSubdiv: opensubdiv/osd/opencl.h File Reference\n \n \n \n \n \n \n \n@@ -87,49 +87,24 @@\n
    No Matches
    \n
    \n
    \n
    \n
    \n \n
    \n- \n-
    clPatchTable.h File Reference
    \n+
    opencl.h File Reference
    \n
    \n
    \n-
    #include "../version.h"
    \n-#include "../osd/opencl.h"
    \n-#include "../osd/nonCopyable.h"
    \n-#include "../osd/types.h"
    \n-#include <vector>
    \n+
    #include <CL/opencl.h>
    \n
    \n

    Go to the source code of this file.

    \n-\n-\n-\n-\n-\n-

    \n-Classes

    class  CLPatchTable
     CL patch table. More...
     
    \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

    \n-Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Far
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
     
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,29 +1,11 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-clPatchTable.h File Reference\n-#include \"../version.h\"\n-#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bo_\bp_\be_\bn_\bc_\bl_\b._\bh\"\n-#include \"../osd/nonCopyable.h\"\n-#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n-#include \n+opencl.h File Reference\n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-\u00a0 CL patch table. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n-namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n-\u00a0\n-namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n-\u00a0\n-namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br\n-\u00a0\n-namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n-\u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n+ * _\bo_\bp_\be_\bn_\bc_\bl_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00800_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00800_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/clPatchTable.h Source File\n+OpenSubdiv: opensubdiv/osd/opencl.h Source File\n \n \n \n \n \n \n \n@@ -92,19 +92,19 @@\n
    No Matches
    \n
    \n
    \n
    \n
    \n \n
    \n-
    clPatchTable.h
    \n+
    opencl.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n-
    2// Copyright 2015 Pixar
    \n+
    2// Copyright 2014 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n
    6// compliance with the Apache License and the following modification to it:
    \n
    7// Section 6. Trademarks. is deleted and replaced with:
    \n
    8//
    \n
    9// 6. Trademarks. This License does not grant permission to use the trade
    \n@@ -119,124 +119,32 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_CL_PATCH_TABLE_H
    \n-
    26#define OPENSUBDIV3_OSD_CL_PATCH_TABLE_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_OPENCL_H
    \n+
    26#define OPENSUBDIV3_OSD_OPENCL_H
    \n
    27
    \n-
    28#include "../version.h"
    \n-
    29
    \n-
    30#include "../osd/opencl.h"
    \n-
    31#include "../osd/nonCopyable.h"
    \n-
    32#include "../osd/types.h"
    \n-
    33
    \n-
    34#include <vector>
    \n-
    35
    \n-
    36namespace OpenSubdiv {
    \n-
    37namespace OPENSUBDIV_VERSION {
    \n-
    38
    \n-
    39namespace Far{
    \n-
    40 class PatchTable;
    \n-
    41};
    \n-
    42
    \n-
    43namespace Osd {
    \n-
    44
    \n-
    \n-
    52class CLPatchTable : private NonCopyable<CLPatchTable> {
    \n-
    53public:
    \n-
    55 static CLPatchTable *Create(Far::PatchTable const *patchTable,
    \n-
    56 cl_context clContext);
    \n-
    57
    \n-
    58 template <typename DEVICE_CONTEXT>
    \n-
    \n-
    59 static CLPatchTable * Create(Far::PatchTable const *patchTable,
    \n-
    60 DEVICE_CONTEXT context) {
    \n-
    61 return Create(patchTable, context->GetContext());
    \n-
    62 }
    \n-
    \n-
    63
    \n-\n-
    66
    \n-
    68 cl_mem GetPatchArrayBuffer() const { return _patchArrays; }
    \n-
    69
    \n-
    71 cl_mem GetPatchIndexBuffer() const { return _indexBuffer; }
    \n-
    72
    \n-
    74 cl_mem GetPatchParamBuffer() const { return _patchParamBuffer; }
    \n-
    75
    \n-\n-
    78
    \n-\n-
    81
    \n-
    83 int GetNumFVarChannels() const { return (int)_fvarPatchArrays.size(); }
    \n-
    84
    \n-
    86 cl_mem GetFVarPatchArrayBuffer(int fvarChannel = 0) const { return _fvarPatchArrays[fvarChannel]; }
    \n-
    87
    \n-
    89 cl_mem GetFVarPatchIndexBuffer(int fvarChannel = 0) const { return _fvarIndexBuffers[fvarChannel]; }
    \n-
    90
    \n-
    92 cl_mem GetFVarPatchParamBuffer(int fvarChannel = 0) const { return _fvarParamBuffers[fvarChannel]; }
    \n-
    93
    \n-
    94protected:
    \n-\n-
    96
    \n-
    97 bool allocate(Far::PatchTable const *patchTable, cl_context clContext);
    \n-
    98
    \n-\n-\n-\n-
    102
    \n-\n-\n-
    105
    \n-
    106 std::vector<cl_mem> _fvarPatchArrays;
    \n-
    107 std::vector<cl_mem> _fvarIndexBuffers;
    \n-
    108 std::vector<cl_mem> _fvarParamBuffers;
    \n-
    109
    \n-
    110};
    \n-
    \n-
    111
    \n-
    112} // end namespace Osd
    \n-
    113
    \n-
    114} // end namespace OPENSUBDIV_VERSION
    \n-
    115using namespace OPENSUBDIV_VERSION;
    \n-
    116
    \n-
    117} // end namespace OpenSubdiv
    \n-
    118
    \n-
    119#endif // OPENSUBDIV3_OSD_CL_PATCH_TABLE_H
    \n-\n-
    Container for arrays of parametric patches.
    Definition patchTable.h:55
    \n-\n-\n-\n-\n-
    cl_mem GetPatchParamBuffer() const
    Returns the CL memory of the array of Osd::PatchParam buffer.
    \n-\n-
    cl_mem GetFVarPatchArrayBuffer(int fvarChannel=0) const
    Returns the CL memory of the array of Osd::PatchArray buffer.
    \n-
    cl_mem GetPatchArrayBuffer() const
    Returns the CL memory of the array of Osd::PatchArray buffer.
    \n-
    static CLPatchTable * Create(Far::PatchTable const *patchTable, cl_context clContext)
    Creator. Returns NULL if error.
    \n-\n-
    cl_mem GetFVarPatchIndexBuffer(int fvarChannel=0) const
    Returns the CL memory of the face-varying control vertices.
    \n-\n-
    cl_mem GetVaryingPatchIndexBuffer() const
    Returns the CL memory of the varying control vertices.
    \n-
    int GetNumFVarChannels() const
    Returns the number of face-varying channel buffers.
    \n-
    cl_mem GetPatchIndexBuffer() const
    Returns the CL memory of the patch control vertices.
    \n-
    static CLPatchTable * Create(Far::PatchTable const *patchTable, DEVICE_CONTEXT context)
    \n-
    cl_mem GetFVarPatchParamBuffer(int fvarChannel=0) const
    Returns the CL memory of the array of Osd::PatchParam buffer.
    \n-\n-
    bool allocate(Far::PatchTable const *patchTable, cl_context clContext)
    \n-\n-\n-\n-
    cl_mem GetVaryingPatchArrayBuffer() const
    Returns the CL memory of the array of Osd::PatchArray buffer.
    \n+
    28#if defined(OPENSUBDIV_HAS_CLEW)
    \n+
    29# include <clew.h>
    \n+
    30#else
    \n+
    31# if defined(__APPLE__)
    \n+
    32# include <OpenCL/opencl.h>
    \n+
    33# else
    \n+
    34# include <CL/opencl.h>
    \n+
    35# endif
    \n+
    36#endif
    \n+
    37
    \n+
    38#endif // OPENSUBDIV3_OSD_CL_UTIL_H
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,15 +1,15 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-clPatchTable.h\n+opencl.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n-2// Copyright 2015 Pixar\n+2// Copyright 2014 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n 7// Section 6. Trademarks. is deleted and replaced with:\n 8//\n 9// 6. Trademarks. This License does not grant permission to use the trade\n@@ -24,174 +24,25 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_CL_PATCH_TABLE_H\n-26#define OPENSUBDIV3_OSD_CL_PATCH_TABLE_H\n+25#ifndef OPENSUBDIV3_OSD_OPENCL_H\n+26#define OPENSUBDIV3_OSD_OPENCL_H\n 27\n-28#include \"../version.h\"\n-29\n-30#include \"../osd/opencl.h\"\n-31#include \"../osd/nonCopyable.h\"\n-32#include \"../osd/types.h\"\n-33\n-34#include \n-35\n-36namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-37namespace OPENSUBDIV_VERSION {\n-38\n-39namespace Far{\n-40 class PatchTable;\n-41};\n-42\n-43namespace Osd {\n-44\n-_\b5_\b2class _\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be : private NonCopyable {\n-53public:\n-_\b5_\b5 static _\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be *_\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *patchTable,\n-56 cl_context clContext);\n-57\n-58 template \n-_\b5_\b9 static _\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be * _\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *patchTable,\n-60 DEVICE_CONTEXT context) {\n-61 return _\bC_\br_\be_\ba_\bt_\be(patchTable, context->GetContext());\n-62 }\n-63\n-_\b6_\b5 _\b~_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be();\n-66\n-_\b6_\b8 cl_mem _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bB_\bu_\bf_\bf_\be_\br() const { return _\b__\bp_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs; }\n-69\n-_\b7_\b1 cl_mem _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br() const { return _\b__\bi_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br; }\n-72\n-_\b7_\b4 cl_mem _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br() const { return _\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br; }\n-75\n-_\b7_\b7 cl_mem _\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bB_\bu_\bf_\bf_\be_\br() const { return _\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs; }\n-78\n-_\b8_\b0 cl_mem _\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br() const { return _\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br; }\n-81\n-_\b8_\b3 int _\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs() const { return (int)_\b__\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs.size(); }\n-84\n-_\b8_\b6 cl_mem _\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bB_\bu_\bf_\bf_\be_\br(int fvarChannel = 0) const { return\n-_\b__\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs[fvarChannel]; }\n-87\n-_\b8_\b9 cl_mem _\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(int fvarChannel = 0) const { return\n-_\b__\bf_\bv_\ba_\br_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bs[fvarChannel]; }\n-90\n-_\b9_\b2 cl_mem _\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br(int fvarChannel = 0) const { return\n-_\b__\bf_\bv_\ba_\br_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br_\bs[fvarChannel]; }\n-93\n-94protected:\n-_\b9_\b5 _\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be();\n-96\n-_\b9_\b7 bool _\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *patchTable, cl_context clContext);\n-98\n-_\b9_\b9 cl_mem _\b__\bp_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs;\n-_\b1_\b0_\b0 cl_mem _\b__\bi_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br;\n-_\b1_\b0_\b1 cl_mem _\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br;\n-102\n-_\b1_\b0_\b3 cl_mem _\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs;\n-_\b1_\b0_\b4 cl_mem _\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br;\n-105\n-_\b1_\b0_\b6 std::vector _\b__\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs;\n-_\b1_\b0_\b7 std::vector _\b__\bf_\bv_\ba_\br_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bs;\n-_\b1_\b0_\b8 std::vector _\b__\bf_\bv_\ba_\br_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br_\bs;\n-109\n-110};\n-111\n-112} // end namespace Osd\n-113\n-114} // end namespace OPENSUBDIV_VERSION\n-115using namespace OPENSUBDIV_VERSION;\n-116\n-117} // end namespace OpenSubdiv\n-118\n-119#endif // OPENSUBDIV3_OSD_CL_PATCH_TABLE_H\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-Container for arrays of parametric patches.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-CL patch table.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n-std::vector< cl_mem > _fvarPatchArrays\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b~_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-~CLPatchTable()\n-Destructor.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br\n-cl_mem _patchParamBuffer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br\n-cl_mem GetPatchParamBuffer() const\n-Returns the CL memory of the array of Osd::PatchParam buffer.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bi_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-cl_mem _indexBuffer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bB_\bu_\bf_\bf_\be_\br\n-cl_mem GetFVarPatchArrayBuffer(int fvarChannel=0) const\n-Returns the CL memory of the array of Osd::PatchArray buffer.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bB_\bu_\bf_\bf_\be_\br\n-cl_mem GetPatchArrayBuffer() const\n-Returns the CL memory of the array of Osd::PatchArray buffer.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static CLPatchTable * Create(Far::PatchTable const *patchTable, cl_context\n-clContext)\n-Creator. Returns NULL if error.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bp_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n-cl_mem _patchArrays\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b9_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-cl_mem GetFVarPatchIndexBuffer(int fvarChannel=0) const\n-Returns the CL memory of the face-varying control vertices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-cl_mem _varyingIndexBuffer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-cl_mem GetVaryingPatchIndexBuffer() const\n-Returns the CL memory of the varying control vertices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs\n-int GetNumFVarChannels() const\n-Returns the number of face-varying channel buffers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-cl_mem GetPatchIndexBuffer() const\n-Returns the CL memory of the patch control vertices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static CLPatchTable * Create(Far::PatchTable const *patchTable, DEVICE_CONTEXT\n-context)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br\n-cl_mem GetFVarPatchParamBuffer(int fvarChannel=0) const\n-Returns the CL memory of the array of Osd::PatchParam buffer.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b9_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-CLPatchTable()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be\n-bool allocate(Far::PatchTable const *patchTable, cl_context clContext)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bf_\bv_\ba_\br_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br_\bs\n-std::vector< cl_mem > _fvarParamBuffers\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bf_\bv_\ba_\br_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bs\n-std::vector< cl_mem > _fvarIndexBuffers\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n-cl_mem _varyingPatchArrays\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b0_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bB_\bu_\bf_\bf_\be_\br\n-cl_mem GetVaryingPatchArrayBuffer() const\n-Returns the CL memory of the array of Osd::PatchArray buffer.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b7\n+28#if defined(OPENSUBDIV_HAS_CLEW)\n+29# include \n+30#else\n+31# if defined(__APPLE__)\n+32# include \n+33# else\n+34# include \n+35# endif\n+36#endif\n+37\n+38#endif // OPENSUBDIV3_OSD_CL_UTIL_H\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bc_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n+ * _\bo_\bp_\be_\bn_\bc_\bl_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00803.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00803.html", "unified_diff": "@@ -94,15 +94,15 @@\n \n
    clEvaluator.h File Reference
    \n
    \n
    \n
    #include "../version.h"
    \n-#include "../osd/opencl.h"
    \n+#include "../osd/opencl.h"
    \n #include "../osd/types.h"
    \n #include "../osd/bufferDescriptor.h"
    \n
    \n

    Go to the source code of this file.

    \n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00803_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00803_source.html", "unified_diff": "@@ -1324,15 +1324,15 @@\n
    2630} // end namespace OPENSUBDIV_VERSION
    \n
    2631using namespace OPENSUBDIV_VERSION;
    \n
    2632
    \n
    2633} // end namespace OpenSubdiv
    \n
    2634
    \n
    2635
    \n
    2636#endif // OPENSUBDIV3_OSD_CL_EVALUATOR_H
    \n-\n+\n
    Stencil table class wrapping the template for compatibility.
    \n
    Limit stencil table class wrapping the template for compatibility.
    \n
    BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
    \n \n \n
    CLStencilTable(Far::StencilTable const *stencilTable, cl_context clContext)
    \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00806.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00806.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/mtlMesh.h File Reference\n+OpenSubdiv: opensubdiv/osd/mtlCommon.h File Reference\n \n \n \n \n \n \n \n@@ -88,43 +88,42 @@\n \n \n \n \n \n
    \n \n-
    mtlMesh.h File Reference
    \n+Classes |\n+Namespaces
    \n+
    mtlCommon.h File Reference
    \n \n
    \n
    #include "../version.h"
    \n-#include "../osd/mesh.h"
    \n-#include "../osd/mtlPatchTable.h"
    \n+#include <cstddef>
    \n
    \n

    Go to the source code of this file.

    \n

    \n Classes

    \n+\n+\n+\n+

    \n+Classes

    class  MTLContext
     
    \n \n \n \n \n \n \n \n-

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
     
    \n-\n-\n-\n

    \n-Typedefs

    typedef MeshInterface< MTLPatchTableMTLMeshInterface
     
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,24 +1,23 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-mtlMesh.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+mtlCommon.h File Reference\n #include \"../version.h\"\n-#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bm_\be_\bs_\bh_\b._\bh\"\n-#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\"\n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bM_\bT_\bL_\bC_\bo_\bn_\bt_\be_\bx_\bt\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-typedef _\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be< _\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be >\u00a0 _\bM_\bT_\bL_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n-\u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bm_\bt_\bl_\bM_\be_\bs_\bh_\b._\bh\n+ * _\bm_\bt_\bl_\bC_\bo_\bm_\bm_\bo_\bn_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00806.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00806.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00806 = [\n- [\"MTLMeshInterface\", \"a00806.html#aa41e5b43fe46eeb0f97ff6ebdb1935aa\", null]\n+ [\"MTLContext\", \"a01277.html\", \"a01277\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00806_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00806_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/mtlMesh.h Source File\n+OpenSubdiv: opensubdiv/osd/mtlCommon.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
    No Matches
    \n
    \n
    \n
    \n
    \n \n
    \n-
    mtlMesh.h
    \n+
    mtlCommon.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n
    2// Copyright 2013 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n@@ -119,44 +119,53 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_MTL_MESH_H
    \n-
    26#define OPENSUBDIV3_OSD_MTL_MESH_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_MTL_COMMON_H
    \n+
    26#define OPENSUBDIV3_OSD_MTL_COMMON_H
    \n
    27
    \n
    28#include "../version.h"
    \n-
    29#include "../osd/mesh.h"
    \n-
    30#include "../osd/mtlPatchTable.h"
    \n+
    29
    \n+
    30#include <cstddef>
    \n
    31
    \n-
    32
    \n-
    33namespace OpenSubdiv {
    \n-
    34namespace OPENSUBDIV_VERSION {
    \n-
    35
    \n-
    36namespace Osd {
    \n+
    32@protocol MTLDevice;
    \n+
    33@protocol MTLCommandQueue;
    \n+
    34
    \n+
    35namespace OpenSubdiv {
    \n+
    36namespace OPENSUBDIV_VERSION {
    \n
    37
    \n-\n+
    38namespace Osd {
    \n
    39
    \n-
    40} // end namespace Osd
    \n-
    41
    \n-
    42} // end namespace OPENSUBDIV_VERSION
    \n-
    43using namespace OPENSUBDIV_VERSION;
    \n-
    44
    \n-
    45} // end namespace OpenSubdiv
    \n-
    46
    \n-
    47#endif // OPENSUBDIV3_OSD_MTL_MESH_H
    \n-\n-
    MeshInterface< MTLPatchTable > MTLMeshInterface
    Definition mtlMesh.h:38
    \n-\n+
    \n+\n+
    41public:
    \n+
    42 id<MTLDevice> device = nullptr;
    \n+
    43 id<MTLCommandQueue> commandQueue = nullptr;
    \n+
    44};
    \n+
    \n+
    45
    \n+
    46} // end namespace Osd
    \n+
    47
    \n+
    48} // end namespace OPENSUBDIV_VERSION
    \n+
    49using namespace OPENSUBDIV_VERSION;
    \n+
    50
    \n+
    51} // end namespace OpenSubdiv
    \n+
    52
    \n+
    53#endif //OPENSUBDIV3_OSD_MTL_COMMON_H
    \n+\n+\n+\n+\n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-mtlMesh.h\n+mtlCommon.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2013 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -24,41 +24,50 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_MTL_MESH_H\n-26#define OPENSUBDIV3_OSD_MTL_MESH_H\n+25#ifndef OPENSUBDIV3_OSD_MTL_COMMON_H\n+26#define OPENSUBDIV3_OSD_MTL_COMMON_H\n 27\n 28#include \"../version.h\"\n-29#include \"../osd/mesh.h\"\n-30#include \"../osd/mtlPatchTable.h\"\n+29\n+30#include \n 31\n-32\n-33namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-34namespace OPENSUBDIV_VERSION {\n-35\n-36namespace Osd {\n+32@protocol MTLDevice;\n+33@protocol MTLCommandQueue;\n+34\n+35namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+36namespace OPENSUBDIV_VERSION {\n 37\n-_\b3_\b8typedef _\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b<_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b> _\bM_\bT_\bL_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be;\n+38namespace Osd {\n 39\n-40} // end namespace Osd\n-41\n-42} // end namespace OPENSUBDIV_VERSION\n-43using namespace OPENSUBDIV_VERSION;\n-44\n-45} // end namespace OpenSubdiv\n-46\n-47#endif // OPENSUBDIV3_OSD_MTL_MESH_H\n+_\b4_\b0class _\bM_\bT_\bL_\bC_\bo_\bn_\bt_\be_\bx_\bt {\n+41public:\n+_\b4_\b2 id _\bd_\be_\bv_\bi_\bc_\be = nullptr;\n+_\b4_\b3 id _\bc_\bo_\bm_\bm_\ba_\bn_\bd_\bQ_\bu_\be_\bu_\be = nullptr;\n+44};\n+45\n+46} // end namespace Osd\n+47\n+48} // end namespace OPENSUBDIV_VERSION\n+49using namespace OPENSUBDIV_VERSION;\n+50\n+51} // end namespace OpenSubdiv\n+52\n+53#endif //OPENSUBDIV3_OSD_MTL_COMMON_H\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n-MeshInterface< MTLPatchTable > MTLMeshInterface\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bM_\be_\bs_\bh_\b._\bh_\b:_\b3_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b6_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bC_\bo_\bn_\bt_\be_\bx_\bt\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bC_\bo_\bm_\bm_\bo_\bn_\b._\bh_\b:_\b4_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b:_\b:_\bc_\bo_\bm_\bm_\ba_\bn_\bd_\bQ_\bu_\be_\bu_\be\n+id< MTLCommandQueue > commandQueue\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bC_\bo_\bm_\bm_\bo_\bn_\b._\bh_\b:_\b4_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b:_\b:_\bd_\be_\bv_\bi_\bc_\be\n+id< MTLDevice > device\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bC_\bo_\bm_\bm_\bo_\bn_\b._\bh_\b:_\b4_\b2\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bm_\bt_\bl_\bM_\be_\bs_\bh_\b._\bh\n+ * _\bm_\bt_\bl_\bC_\bo_\bm_\bm_\bo_\bn_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00809.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00809.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/mtlCommon.h File Reference\n+OpenSubdiv: opensubdiv/osd/mtlPatchShaderSource.h File Reference\n \n \n \n \n \n \n \n@@ -90,25 +90,26 @@\n
    \n
    \n \n
    \n \n-
    mtlCommon.h File Reference
    \n+
    mtlPatchShaderSource.h File Reference
    \n
    \n
    \n-
    #include "../version.h"
    \n-#include <cstddef>
    \n+
    import "../version.h"
    \n+import "../far/patchDescriptor.h"
    \n+import <string>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n+\n \n

    \n Classes

    class  MTLContext
    class  MTLPatchShaderSource
     
    \n \n \n \n \n@@ -117,13 +118,13 @@\n \n

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,24 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-mtlCommon.h File Reference\n-#include \"../version.h\"\n-#include \n+mtlPatchShaderSource.h File Reference\n+import \"../version.h\"\n+import \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\"\n+import \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bM_\bT_\bL_\bC_\bo_\bn_\bt_\be_\bx_\bt\n+class \u00a0 _\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bm_\bt_\bl_\bC_\bo_\bm_\bm_\bo_\bn_\b._\bh\n+ * _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00809.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00809.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00809 = [\n- [\"MTLContext\", \"a01277.html\", \"a01277\"]\n+ [\"MTLPatchShaderSource\", \"a01293.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00809_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00809_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/mtlCommon.h Source File\n+OpenSubdiv: opensubdiv/osd/mtlPatchShaderSource.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
    No Matches
    \n
    \n
    \n
    \n
    \n \n
    \n-
    mtlCommon.h
    \n+
    mtlPatchShaderSource.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n
    2// Copyright 2013 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n@@ -119,53 +119,74 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_MTL_COMMON_H
    \n-
    26#define OPENSUBDIV3_OSD_MTL_COMMON_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_MTL_PATCH_SHADER_SOURCE_H
    \n+
    26#define OPENSUBDIV3_OSD_MTL_PATCH_SHADER_SOURCE_H
    \n
    27
    \n-
    28#include "../version.h"
    \n-
    29
    \n-
    30#include <cstddef>
    \n+
    28#import "../version.h"
    \n+
    29#import "../far/patchDescriptor.h"
    \n+
    30#import <string>
    \n
    31
    \n-
    32@protocol MTLDevice;
    \n-
    33@protocol MTLCommandQueue;
    \n+
    32namespace OpenSubdiv {
    \n+
    33namespace OPENSUBDIV_VERSION {
    \n
    34
    \n-
    35namespace OpenSubdiv {
    \n-
    36namespace OPENSUBDIV_VERSION {
    \n-
    37
    \n-
    38namespace Osd {
    \n-
    39
    \n-
    \n-\n-
    41public:
    \n-
    42 id<MTLDevice> device = nullptr;
    \n-
    43 id<MTLCommandQueue> commandQueue = nullptr;
    \n-
    44};
    \n-
    \n-
    45
    \n-
    46} // end namespace Osd
    \n-
    47
    \n-
    48} // end namespace OPENSUBDIV_VERSION
    \n-
    49using namespace OPENSUBDIV_VERSION;
    \n-
    50
    \n-
    51} // end namespace OpenSubdiv
    \n-
    52
    \n-
    53#endif //OPENSUBDIV3_OSD_MTL_COMMON_H
    \n-\n-\n-\n-\n+
    35namespace Osd {
    \n+
    36
    \n+
    \n+\n+
    38 public:
    \n+
    39 static std::string GetCommonShaderSource();
    \n+
    40
    \n+
    41 static std::string GetPatchBasisShaderSource();
    \n+
    42
    \n+\n+
    44
    \n+\n+
    46
    \n+\n+
    48
    \n+
    53 static std::string GetVertexShaderSource(
    \n+\n+\n+
    56 static std::string GetHullShaderSource(
    \n+\n+\n+
    59 static std::string GetDomainShaderSource(
    \n+\n+\n+
    62};
    \n+
    \n+
    63
    \n+
    64} // end namespace Osd
    \n+
    65
    \n+
    66} // end namespace OPENSUBDIV_VERSION
    \n+
    67using namespace OPENSUBDIV_VERSION;
    \n+
    68
    \n+
    69} // end namespace OpenSubdiv
    \n+
    70
    \n+
    71#endif // OPENSUBDIV3_OSD_MTL_PATCH_SHADER_SOURCE
    \n+\n+\n+\n+
    static std::string GetVertexShaderSource(Far::PatchDescriptor::Type type)
    \n+
    static std::string GetHullShaderSource(Far::PatchDescriptor::Type type, Far::PatchDescriptor::Type fvarType)
    \n+
    static std::string GetDomainShaderSource(Far::PatchDescriptor::Type type)
    \n+
    static std::string GetVertexShaderSource(Far::PatchDescriptor::Type type, Far::PatchDescriptor::Type fvarType)
    Deprecated.
    \n+
    static std::string GetDomainShaderSource(Far::PatchDescriptor::Type type, Far::PatchDescriptor::Type fvarType)
    \n+
    static std::string GetHullShaderSource(Far::PatchDescriptor::Type type)
    \n+\n+\n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-mtlCommon.h\n+mtlPatchShaderSource.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2013 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -24,50 +24,87 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_MTL_COMMON_H\n-26#define OPENSUBDIV3_OSD_MTL_COMMON_H\n+25#ifndef OPENSUBDIV3_OSD_MTL_PATCH_SHADER_SOURCE_H\n+26#define OPENSUBDIV3_OSD_MTL_PATCH_SHADER_SOURCE_H\n 27\n-28#include \"../version.h\"\n-29\n-30#include \n+28#import \"../version.h\"\n+29#import \"../far/patchDescriptor.h\"\n+30#import \n 31\n-32@protocol MTLDevice;\n-33@protocol MTLCommandQueue;\n+32namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+33namespace OPENSUBDIV_VERSION {\n 34\n-35namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-36namespace OPENSUBDIV_VERSION {\n-37\n-38namespace Osd {\n-39\n-_\b4_\b0class _\bM_\bT_\bL_\bC_\bo_\bn_\bt_\be_\bx_\bt {\n-41public:\n-_\b4_\b2 id _\bd_\be_\bv_\bi_\bc_\be = nullptr;\n-_\b4_\b3 id _\bc_\bo_\bm_\bm_\ba_\bn_\bd_\bQ_\bu_\be_\bu_\be = nullptr;\n-44};\n-45\n-46} // end namespace Osd\n-47\n-48} // end namespace OPENSUBDIV_VERSION\n-49using namespace OPENSUBDIV_VERSION;\n-50\n-51} // end namespace OpenSubdiv\n-52\n-53#endif //OPENSUBDIV3_OSD_MTL_COMMON_H\n+35namespace Osd {\n+36\n+_\b3_\b7class _\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be {\n+38 public:\n+_\b3_\b9 static std::string _\bG_\be_\bt_\bC_\bo_\bm_\bm_\bo_\bn_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be();\n+40\n+_\b4_\b1 static std::string _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bB_\ba_\bs_\bi_\bs_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be();\n+42\n+_\b4_\b3 static std::string _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type);\n+44\n+_\b4_\b5 static std::string _\bG_\be_\bt_\bH_\bu_\bl_\bl_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type);\n+46\n+_\b4_\b7 static std::string _\bG_\be_\bt_\bD_\bo_\bm_\ba_\bi_\bn_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type);\n+48\n+_\b5_\b3 static std::string _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be(\n+54 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type,\n+55 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be fvarType);\n+_\b5_\b6 static std::string _\bG_\be_\bt_\bH_\bu_\bl_\bl_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be(\n+57 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type,\n+58 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be fvarType);\n+_\b5_\b9 static std::string _\bG_\be_\bt_\bD_\bo_\bm_\ba_\bi_\bn_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be(\n+60 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type,\n+61 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be fvarType);\n+62};\n+63\n+64} // end namespace Osd\n+65\n+66} // end namespace OPENSUBDIV_VERSION\n+67using namespace OPENSUBDIV_VERSION;\n+68\n+69} // end namespace OpenSubdiv\n+70\n+71#endif // OPENSUBDIV3_OSD_MTL_PATCH_SHADER_SOURCE\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bC_\bo_\bn_\bt_\be_\bx_\bt\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bC_\bo_\bm_\bm_\bo_\bn_\b._\bh_\b:_\b4_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b:_\b:_\bc_\bo_\bm_\bm_\ba_\bn_\bd_\bQ_\bu_\be_\bu_\be\n-id< MTLCommandQueue > commandQueue\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bC_\bo_\bm_\bm_\bo_\bn_\b._\bh_\b:_\b4_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b:_\b:_\bd_\be_\bv_\bi_\bc_\be\n-id< MTLDevice > device\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bC_\bo_\bm_\bm_\bo_\bn_\b._\bh_\b:_\b4_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be\n+Type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b._\bh_\b:_\b3_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n+_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n+static std::string GetVertexShaderSource(Far::PatchDescriptor::Type type)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:_\bG_\be_\bt_\bH_\bu_\bl_\bl_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n+static std::string GetHullShaderSource(Far::PatchDescriptor::Type type, Far::\n+PatchDescriptor::Type fvarType)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n+_\bG_\be_\bt_\bD_\bo_\bm_\ba_\bi_\bn_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n+static std::string GetDomainShaderSource(Far::PatchDescriptor::Type type)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n+_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n+static std::string GetVertexShaderSource(Far::PatchDescriptor::Type type, Far::\n+PatchDescriptor::Type fvarType)\n+Deprecated.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n+_\bG_\be_\bt_\bD_\bo_\bm_\ba_\bi_\bn_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n+static std::string GetDomainShaderSource(Far::PatchDescriptor::Type type, Far::\n+PatchDescriptor::Type fvarType)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:_\bG_\be_\bt_\bH_\bu_\bl_\bl_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n+static std::string GetHullShaderSource(Far::PatchDescriptor::Type type)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n+_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bB_\ba_\bs_\bi_\bs_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n+static std::string GetPatchBasisShaderSource()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n+_\bG_\be_\bt_\bC_\bo_\bm_\bm_\bo_\bn_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n+static std::string GetCommonShaderSource()\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bm_\bt_\bl_\bC_\bo_\bm_\bm_\bo_\bn_\b._\bh\n+ * _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00812.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00812.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/mtlPatchShaderSource.h File Reference\n+OpenSubdiv: opensubdiv/osd/mtlMesh.h File Reference\n \n \n \n \n \n \n \n@@ -88,43 +88,43 @@\n
    \n
    \n
    \n
    \n \n
    \n \n-
    mtlPatchShaderSource.h File Reference
    \n+Namespaces |\n+Typedefs
    \n+
    mtlMesh.h File Reference
    \n
    \n
    \n-
    import "../version.h"
    \n-import "../far/patchDescriptor.h"
    \n-import <string>
    \n+
    #include "../version.h"
    \n+#include "../osd/mesh.h"
    \n+#include "../osd/mtlPatchTable.h"
    \n
    \n

    Go to the source code of this file.

    \n \n-\n-\n-\n-

    \n-Classes

    class  MTLPatchShaderSource
     
    \n \n \n \n \n \n \n \n+

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
     
    \n+\n+\n+\n

    \n+Typedefs

    typedef MeshInterface< MTLPatchTableMTLMeshInterface
     
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,24 +1,24 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-mtlPatchShaderSource.h File Reference\n-import \"../version.h\"\n-import \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\"\n-import \n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+mtlMesh.h File Reference\n+#include \"../version.h\"\n+#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bm_\be_\bs_\bh_\b._\bh\"\n+#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+typedef _\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be< _\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be >\u00a0 _\bM_\bT_\bL_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n+\u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b._\bh\n+ * _\bm_\bt_\bl_\bM_\be_\bs_\bh_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00812.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00812.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00812 = [\n- [\"MTLPatchShaderSource\", \"a01293.html\", null]\n+ [\"MTLMeshInterface\", \"a00812.html#aa41e5b43fe46eeb0f97ff6ebdb1935aa\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00812_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00812_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/mtlPatchShaderSource.h Source File\n+OpenSubdiv: opensubdiv/osd/mtlMesh.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
    No Matches
    \n
    \n
    \n \n \n \n
    \n-
    mtlPatchShaderSource.h
    \n+
    mtlMesh.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n
    2// Copyright 2013 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n@@ -119,74 +119,44 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_MTL_PATCH_SHADER_SOURCE_H
    \n-
    26#define OPENSUBDIV3_OSD_MTL_PATCH_SHADER_SOURCE_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_MTL_MESH_H
    \n+
    26#define OPENSUBDIV3_OSD_MTL_MESH_H
    \n
    27
    \n-
    28#import "../version.h"
    \n-
    29#import "../far/patchDescriptor.h"
    \n-
    30#import <string>
    \n+
    28#include "../version.h"
    \n+
    29#include "../osd/mesh.h"
    \n+
    30#include "../osd/mtlPatchTable.h"
    \n
    31
    \n-
    32namespace OpenSubdiv {
    \n-
    33namespace OPENSUBDIV_VERSION {
    \n-
    34
    \n-
    35namespace Osd {
    \n-
    36
    \n-
    \n-\n-
    38 public:
    \n-
    39 static std::string GetCommonShaderSource();
    \n-
    40
    \n-
    41 static std::string GetPatchBasisShaderSource();
    \n-
    42
    \n-\n+
    32
    \n+
    33namespace OpenSubdiv {
    \n+
    34namespace OPENSUBDIV_VERSION {
    \n+
    35
    \n+
    36namespace Osd {
    \n+
    37
    \n+\n+
    39
    \n+
    40} // end namespace Osd
    \n+
    41
    \n+
    42} // end namespace OPENSUBDIV_VERSION
    \n+
    43using namespace OPENSUBDIV_VERSION;
    \n
    44
    \n-\n+
    45} // end namespace OpenSubdiv
    \n
    46
    \n-\n-
    48
    \n-
    53 static std::string GetVertexShaderSource(
    \n-\n-\n-
    56 static std::string GetHullShaderSource(
    \n-\n-\n-
    59 static std::string GetDomainShaderSource(
    \n-\n-\n-
    62};
    \n-
    \n-
    63
    \n-
    64} // end namespace Osd
    \n-
    65
    \n-
    66} // end namespace OPENSUBDIV_VERSION
    \n-
    67using namespace OPENSUBDIV_VERSION;
    \n-
    68
    \n-
    69} // end namespace OpenSubdiv
    \n-
    70
    \n-
    71#endif // OPENSUBDIV3_OSD_MTL_PATCH_SHADER_SOURCE
    \n-\n-\n-\n-
    static std::string GetVertexShaderSource(Far::PatchDescriptor::Type type)
    \n-
    static std::string GetHullShaderSource(Far::PatchDescriptor::Type type, Far::PatchDescriptor::Type fvarType)
    \n-
    static std::string GetDomainShaderSource(Far::PatchDescriptor::Type type)
    \n-
    static std::string GetVertexShaderSource(Far::PatchDescriptor::Type type, Far::PatchDescriptor::Type fvarType)
    Deprecated.
    \n-
    static std::string GetDomainShaderSource(Far::PatchDescriptor::Type type, Far::PatchDescriptor::Type fvarType)
    \n-
    static std::string GetHullShaderSource(Far::PatchDescriptor::Type type)
    \n-\n-\n+
    47#endif // OPENSUBDIV3_OSD_MTL_MESH_H
    \n+\n+
    MeshInterface< MTLPatchTable > MTLMeshInterface
    Definition mtlMesh.h:38
    \n+\n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-mtlPatchShaderSource.h\n+mtlMesh.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2013 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -24,87 +24,41 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_MTL_PATCH_SHADER_SOURCE_H\n-26#define OPENSUBDIV3_OSD_MTL_PATCH_SHADER_SOURCE_H\n+25#ifndef OPENSUBDIV3_OSD_MTL_MESH_H\n+26#define OPENSUBDIV3_OSD_MTL_MESH_H\n 27\n-28#import \"../version.h\"\n-29#import \"../far/patchDescriptor.h\"\n-30#import \n+28#include \"../version.h\"\n+29#include \"../osd/mesh.h\"\n+30#include \"../osd/mtlPatchTable.h\"\n 31\n-32namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-33namespace OPENSUBDIV_VERSION {\n-34\n-35namespace Osd {\n-36\n-_\b3_\b7class _\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be {\n-38 public:\n-_\b3_\b9 static std::string _\bG_\be_\bt_\bC_\bo_\bm_\bm_\bo_\bn_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be();\n-40\n-_\b4_\b1 static std::string _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bB_\ba_\bs_\bi_\bs_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be();\n-42\n-_\b4_\b3 static std::string _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type);\n+32\n+33namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+34namespace OPENSUBDIV_VERSION {\n+35\n+36namespace Osd {\n+37\n+_\b3_\b8typedef _\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b<_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b> _\bM_\bT_\bL_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be;\n+39\n+40} // end namespace Osd\n+41\n+42} // end namespace OPENSUBDIV_VERSION\n+43using namespace OPENSUBDIV_VERSION;\n 44\n-_\b4_\b5 static std::string _\bG_\be_\bt_\bH_\bu_\bl_\bl_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type);\n+45} // end namespace OpenSubdiv\n 46\n-_\b4_\b7 static std::string _\bG_\be_\bt_\bD_\bo_\bm_\ba_\bi_\bn_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type);\n-48\n-_\b5_\b3 static std::string _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be(\n-54 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type,\n-55 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be fvarType);\n-_\b5_\b6 static std::string _\bG_\be_\bt_\bH_\bu_\bl_\bl_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be(\n-57 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type,\n-58 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be fvarType);\n-_\b5_\b9 static std::string _\bG_\be_\bt_\bD_\bo_\bm_\ba_\bi_\bn_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be(\n-60 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type,\n-61 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be fvarType);\n-62};\n-63\n-64} // end namespace Osd\n-65\n-66} // end namespace OPENSUBDIV_VERSION\n-67using namespace OPENSUBDIV_VERSION;\n-68\n-69} // end namespace OpenSubdiv\n-70\n-71#endif // OPENSUBDIV3_OSD_MTL_PATCH_SHADER_SOURCE\n+47#endif // OPENSUBDIV3_OSD_MTL_MESH_H\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be\n-Type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b._\bh_\b:_\b3_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n-_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n-static std::string GetVertexShaderSource(Far::PatchDescriptor::Type type)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:_\bG_\be_\bt_\bH_\bu_\bl_\bl_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n-static std::string GetHullShaderSource(Far::PatchDescriptor::Type type, Far::\n-PatchDescriptor::Type fvarType)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n-_\bG_\be_\bt_\bD_\bo_\bm_\ba_\bi_\bn_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n-static std::string GetDomainShaderSource(Far::PatchDescriptor::Type type)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n-_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n-static std::string GetVertexShaderSource(Far::PatchDescriptor::Type type, Far::\n-PatchDescriptor::Type fvarType)\n-Deprecated.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n-_\bG_\be_\bt_\bD_\bo_\bm_\ba_\bi_\bn_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n-static std::string GetDomainShaderSource(Far::PatchDescriptor::Type type, Far::\n-PatchDescriptor::Type fvarType)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:_\bG_\be_\bt_\bH_\bu_\bl_\bl_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n-static std::string GetHullShaderSource(Far::PatchDescriptor::Type type)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n-_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bB_\ba_\bs_\bi_\bs_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n-static std::string GetPatchBasisShaderSource()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n-_\bG_\be_\bt_\bC_\bo_\bm_\bm_\bo_\bn_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n-static std::string GetCommonShaderSource()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n+MeshInterface< MTLPatchTable > MTLMeshInterface\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bM_\be_\bs_\bh_\b._\bh_\b:_\b3_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b6_\b8\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b._\bh\n+ * _\bm_\bt_\bl_\bM_\be_\bs_\bh_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00815.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00815.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/mtlLegacyGregoryPatchTable.h File Reference\n+OpenSubdiv: opensubdiv/osd/mtlPatchTable.h File Reference\n \n \n \n \n \n \n \n@@ -90,42 +90,45 @@\n \n \n \n
    \n \n-
    mtlLegacyGregoryPatchTable.h File Reference
    \n+
    mtlPatchTable.h File Reference
    \n
    \n
    \n
    #include "../version.h"
    \n-#include "../far/patchTable.h"
    \n+#include "../far/patchDescriptor.h"
    \n #include "../osd/nonCopyable.h"
    \n-#include "../osd/mtlCommon.h"
    \n+#include "../osd/types.h"
    \n+#include "../osd/mtlCommon.h"
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n+\n \n

    \n Classes

    class  MTLLegacyGregoryPatchTable
    class  MTLPatchTable
     
    \n \n \n \n \n \n+\n+\n \n \n

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Far
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
     
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +1,28 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-mtlLegacyGregoryPatchTable.h File Reference\n+mtlPatchTable.h File Reference\n #include \"../version.h\"\n-#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\"\n+#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\"\n #include \"../osd/nonCopyable.h\"\n+#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n #include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bm_\bt_\bl_\bC_\bo_\bm_\bm_\bo_\bn_\b._\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+class \u00a0 _\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n+namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br\n+\u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bm_\bt_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n+ * _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00815.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00815.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00815 = [\n- [\"MTLLegacyGregoryPatchTable\", \"a01289.html\", \"a01289\"]\n+ [\"MTLPatchTable\", \"a01297.html\", \"a01297\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00815_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00815_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/mtlLegacyGregoryPatchTable.h Source File\n+OpenSubdiv: opensubdiv/osd/mtlPatchTable.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    mtlLegacyGregoryPatchTable.h
    \n+
    mtlPatchTable.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n
    2// Copyright 2013 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n@@ -119,112 +119,123 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_MTL_LEGACY_GREGORY_PATCH_TABLE_H
    \n-
    26#define OPENSUBDIV3_OSD_MTL_LEGACY_GREGORY_PATCH_TABLE_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H
    \n+
    26#define OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H
    \n
    27
    \n
    28#include "../version.h"
    \n-
    29#include "../far/patchTable.h"
    \n+
    29#include "../far/patchDescriptor.h"
    \n
    30#include "../osd/nonCopyable.h"
    \n-
    31#include "../osd/mtlCommon.h"
    \n-
    32
    \n-
    33@protocol MTLDevice;
    \n-
    34@protocol MTLBuffer;
    \n-
    35
    \n-
    36namespace OpenSubdiv {
    \n-
    37namespace OPENSUBDIV_VERSION {
    \n-
    38
    \n-
    39namespace Osd {
    \n-
    40
    \n-
    \n-\n-
    42: private NonCopyable<MTLLegacyGregoryPatchTable>
    \n-
    43{
    \n-
    44public:
    \n-\n-
    46
    \n-
    47 template<typename DEVICE_CONTEXT>
    \n-
    \n-
    48 static MTLLegacyGregoryPatchTable* Create(Far::PatchTable const* farPatchTable, DEVICE_CONTEXT context) {
    \n-
    49 return Create(farPatchTable, context);
    \n-
    50 }
    \n-
    \n-
    51
    \n-
    52 static MTLLegacyGregoryPatchTable* Create(Far::PatchTable const* farPatchTable, MTLContext* context);
    \n-
    53
    \n-
    54 void UpdateVertexBuffer(id<MTLBuffer> vbo, int numVertices, int numVertexElements, MTLContext* context);
    \n-
    55
    \n-
    \n-
    56 id<MTLBuffer> GetVertexBuffer() const
    \n-
    57 {
    \n-
    58 return _vertexBuffer;
    \n-
    59 }
    \n+
    31#include "../osd/types.h"
    \n+
    32#include "../osd/mtlCommon.h"
    \n+
    33
    \n+
    34@protocol MTLDevice;
    \n+
    35@protocol MTLBuffer;
    \n+
    36
    \n+
    37namespace OpenSubdiv {
    \n+
    38namespace OPENSUBDIV_VERSION {
    \n+
    39
    \n+
    40namespace Far {
    \n+
    41 class PatchTable;
    \n+
    42};
    \n+
    43
    \n+
    44namespace Osd {
    \n+
    45
    \n+
    \n+
    46class MTLPatchTable : private NonCopyable<MTLPatchTable> {
    \n+
    47public:
    \n+
    48 typedef id<MTLBuffer> VertexBufferBinding;
    \n+
    49
    \n+\n+\n+
    52
    \n+
    53 template<typename DEVICE_CONTEXT>
    \n+
    \n+
    54 static MTLPatchTable *Create(Far::PatchTable const *farPatchTable, DEVICE_CONTEXT context)
    \n+
    55 {
    \n+
    56 return Create(farPatchTable, context);
    \n+
    57 }
    \n
    \n+
    58
    \n+
    59 static MTLPatchTable *Create(Far::PatchTable const *farPatchTable, MTLContext* context);
    \n
    60
    \n-
    \n-
    61 id<MTLBuffer> GetVertexValenceBuffer() const
    \n-
    62 {
    \n-
    63 return _vertexValenceBuffer;
    \n-
    64 }
    \n-
    \n-
    65
    \n-
    \n-
    66 id<MTLBuffer> GetQuadOffsetsBuffer() const
    \n-
    67 {
    \n-
    68 return _quadOffsetsBuffer;
    \n-
    69 }
    \n-
    \n-
    70
    \n-
    \n-\n-
    72 {
    \n-\n-
    74 return _quadOffsetsBase[1];
    \n-
    75 return _quadOffsetsBase[0];
    \n-
    76 }
    \n-
    \n+
    61 PatchArrayVector const &GetPatchArrays() const { return _patchArrays; }
    \n+
    62 id<MTLBuffer> GetPatchIndexBuffer() const { return _indexBuffer; }
    \n+
    63 id<MTLBuffer> GetPatchParamBuffer() const { return _patchParamBuffer; }
    \n+
    64
    \n+\n+
    66 id<MTLBuffer> GetVaryingPatchIndexBuffer() const { return _varyingPatchIndexBuffer; }
    \n+
    67
    \n+
    68 int GetNumFVarChannels() const { return (int)_fvarPatchArrays.size(); }
    \n+
    69 PatchArrayVector const &GetFVarPatchArrays(int fvarChannel = 0) const { return _fvarPatchArrays[fvarChannel]; }
    \n+
    70 id<MTLBuffer> GetFVarPatchIndexBuffer(int fvarChannel = 0) const { return _fvarIndexBuffers[fvarChannel]; }
    \n+
    71 id<MTLBuffer> GetFVarPatchParamBuffer(int fvarChannel = 0) const { return _fvarParamBuffers[fvarChannel]; }
    \n+
    72
    \n+
    73protected:
    \n+
    74 bool allocate(Far::PatchTable const *farPatchTable, MTLContext* context);
    \n+
    75
    \n+\n
    77
    \n-
    78private:
    \n-
    79 id<MTLBuffer> _vertexBuffer;
    \n-
    80 id<MTLBuffer> _vertexValenceBuffer;
    \n-
    81 id<MTLBuffer> _quadOffsetsBuffer;
    \n-
    82 int _quadOffsetsBase[2];
    \n-
    83};
    \n-
    \n+
    78 id<MTLBuffer> _indexBuffer;
    \n+
    79 id<MTLBuffer> _patchParamBuffer;
    \n+
    80
    \n+\n+
    82
    \n+\n
    84
    \n-
    85} //end namespace Osd
    \n-
    86
    \n-
    87} //end namespace OPENSUBDIV_VERSION
    \n-
    88using namespace OPENSUBDIV_VERSION;
    \n+
    85 std::vector<PatchArrayVector> _fvarPatchArrays;
    \n+
    86 std::vector<id<MTLBuffer>> _fvarIndexBuffers;
    \n+
    87 std::vector<id<MTLBuffer>> _fvarParamBuffers;
    \n+
    88};
    \n+
    \n
    89
    \n-
    90} //end namespace OpenSuddiv
    \n+
    90} // end namespace Osd
    \n
    91
    \n-
    92#endif // OPENSUBDIV3_OSD_MTL_LEGACY_GREGORY_PATCH_TABLE_H
    \n-\n-\n-\n-
    Container for arrays of parametric patches.
    Definition patchTable.h:55
    \n-\n-\n-\n-
    static MTLLegacyGregoryPatchTable * Create(Far::PatchTable const *farPatchTable, DEVICE_CONTEXT context)
    \n-\n-\n-
    static MTLLegacyGregoryPatchTable * Create(Far::PatchTable const *farPatchTable, MTLContext *context)
    \n-
    void UpdateVertexBuffer(id< MTLBuffer > vbo, int numVertices, int numVertexElements, MTLContext *context)
    \n-\n-\n+
    92} //end namespace OPENSUBDIV_VERSION
    \n+
    93using namespace OPENSUBDIV_VERSION;
    \n+
    94
    \n+
    95} //end namespace OpenSubdiv
    \n+
    96
    \n+
    97#endif //end OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H
    \n+\n+
    std::vector< PatchArray > PatchArrayVector
    Definition types.h:132
    \n+
    Container for arrays of parametric patches.
    Definition patchTable.h:55
    \n+\n+\n+
    PatchArrayVector const & GetPatchArrays() const
    \n+
    bool allocate(Far::PatchTable const *farPatchTable, MTLContext *context)
    \n+
    static MTLPatchTable * Create(Far::PatchTable const *farPatchTable, MTLContext *context)
    \n+\n+
    std::vector< id< MTLBuffer > > _fvarIndexBuffers
    \n+
    id< MTLBuffer > GetFVarPatchParamBuffer(int fvarChannel=0) const
    \n+\n+\n+\n+\n+\n+\n+
    PatchArrayVector const & GetFVarPatchArrays(int fvarChannel=0) const
    \n+\n+
    std::vector< id< MTLBuffer > > _fvarParamBuffers
    \n+
    std::vector< PatchArrayVector > _fvarPatchArrays
    \n+\n+\n+
    static MTLPatchTable * Create(Far::PatchTable const *farPatchTable, DEVICE_CONTEXT context)
    \n+\n+
    id< MTLBuffer > GetFVarPatchIndexBuffer(int fvarChannel=0) const
    \n+
    PatchArrayVector const & GetVaryingPatchArrays() const
    \n+\n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-mtlLegacyGregoryPatchTable.h\n+mtlPatchTable.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2013 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -24,127 +24,170 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_MTL_LEGACY_GREGORY_PATCH_TABLE_H\n-26#define OPENSUBDIV3_OSD_MTL_LEGACY_GREGORY_PATCH_TABLE_H\n+25#ifndef OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H\n+26#define OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H\n 27\n 28#include \"../version.h\"\n-29#include \"../far/patchTable.h\"\n+29#include \"../far/patchDescriptor.h\"\n 30#include \"../osd/nonCopyable.h\"\n-31#include \"../osd/mtlCommon.h\"\n-32\n-33@protocol MTLDevice;\n-34@protocol MTLBuffer;\n-35\n-36namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-37namespace OPENSUBDIV_VERSION {\n-38\n-39namespace Osd {\n-40\n-_\b4_\b1class _\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-42: private NonCopyable\n-43{\n-44public:\n-_\b4_\b5 _\b~_\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be();\n-46\n-47 template\n-_\b4_\b8 static _\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be* _\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const*\n-farPatchTable, DEVICE_CONTEXT context) {\n-49 return Create(farPatchTable, context);\n-50 }\n-51\n-_\b5_\b2 static _\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be* _\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const*\n-farPatchTable, _\bM_\bT_\bL_\bC_\bo_\bn_\bt_\be_\bx_\bt* context);\n-53\n-_\b5_\b4 void _\bU_\bp_\bd_\ba_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(id vbo, int numVertices, int\n-numVertexElements, _\bM_\bT_\bL_\bC_\bo_\bn_\bt_\be_\bx_\bt* context);\n-55\n-_\b5_\b6 id _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br() const\n-57 {\n-58 return _vertexBuffer;\n-59 }\n+31#include \"../osd/types.h\"\n+32#include \"../osd/mtlCommon.h\"\n+33\n+34@protocol MTLDevice;\n+35@protocol MTLBuffer;\n+36\n+37namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+38namespace OPENSUBDIV_VERSION {\n+39\n+40namespace Far {\n+41 class PatchTable;\n+42};\n+43\n+44namespace Osd {\n+45\n+_\b4_\b6class _\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be : private NonCopyable {\n+47public:\n+_\b4_\b8 typedef id _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bB_\bi_\bn_\bd_\bi_\bn_\bg;\n+49\n+_\b5_\b0 _\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be();\n+_\b5_\b1 _\b~_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be();\n+52\n+53 template\n+_\b5_\b4 static _\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be *_\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *farPatchTable,\n+DEVICE_CONTEXT context)\n+55 {\n+56 return _\bC_\br_\be_\ba_\bt_\be(farPatchTable, context);\n+57 }\n+58\n+_\b5_\b9 static _\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be *_\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *farPatchTable,\n+_\bM_\bT_\bL_\bC_\bo_\bn_\bt_\be_\bx_\bt* context);\n 60\n-_\b6_\b1 id _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be_\bB_\bu_\bf_\bf_\be_\br() const\n-62 {\n-63 return _vertexValenceBuffer;\n-64 }\n-65\n-_\b6_\b6 id _\bG_\be_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br() const\n-67 {\n-68 return _quadOffsetsBuffer;\n-69 }\n-70\n-_\b7_\b1 int _\bG_\be_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bB_\ba_\bs_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type)\n-72 {\n-73 if(type == _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY)\n-74 return _quadOffsetsBase[1];\n-75 return _quadOffsetsBase[0];\n-76 }\n+_\b6_\b1 _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br const &_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs() const { return _\b__\bp_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs; }\n+_\b6_\b2 id _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br() const { return _\b__\bi_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br; }\n+_\b6_\b3 id _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br() const { return _\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br; }\n+64\n+_\b6_\b5 _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br const &_\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs() const { return\n+_\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs; }\n+_\b6_\b6 id _\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br() const { return\n+_\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br; }\n+67\n+_\b6_\b8 int _\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs() const { return (int)_\b__\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs.size(); }\n+_\b6_\b9 _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br const &_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs(int fvarChannel = 0) const\n+{ return _\b__\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs[fvarChannel]; }\n+_\b7_\b0 id _\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(int fvarChannel = 0) const { return\n+_\b__\bf_\bv_\ba_\br_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bs[fvarChannel]; }\n+_\b7_\b1 id _\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br(int fvarChannel = 0) const { return\n+_\b__\bf_\bv_\ba_\br_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br_\bs[fvarChannel]; }\n+72\n+73protected:\n+_\b7_\b4 bool _\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *farPatchTable, _\bM_\bT_\bL_\bC_\bo_\bn_\bt_\be_\bx_\bt* context);\n+75\n+_\b7_\b6 _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br _\b__\bp_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs;\n 77\n-78private:\n-79 id _vertexBuffer;\n-80 id _vertexValenceBuffer;\n-81 id _quadOffsetsBuffer;\n-82 int _quadOffsetsBase[2];\n-83};\n+_\b7_\b8 id _\b__\bi_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br;\n+_\b7_\b9 id _\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br;\n+80\n+_\b8_\b1 _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br _\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs;\n+82\n+_\b8_\b3 id _\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br;\n 84\n-85} //end namespace Osd\n-86\n-87} //end namespace OPENSUBDIV_VERSION\n-88using namespace OPENSUBDIV_VERSION;\n+_\b8_\b5 std::vector _\b__\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs;\n+_\b8_\b6 std::vector> _\b__\bf_\bv_\ba_\br_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bs;\n+_\b8_\b7 std::vector> _\b__\bf_\bv_\ba_\br_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br_\bs;\n+88};\n 89\n-90} //end namespace OpenSuddiv\n+90} // end namespace Osd\n 91\n-92#endif // OPENSUBDIV3_OSD_MTL_LEGACY_GREGORY_PATCH_TABLE_H\n+92} //end namespace OPENSUBDIV_VERSION\n+93using namespace OPENSUBDIV_VERSION;\n+94\n+95} //end namespace OpenSubdiv\n+96\n+97#endif //end OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be\n-Type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY\n-@ GREGORY_BOUNDARY\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< PatchArray > PatchArrayVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b1_\b3_\b2\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n Container for arrays of parametric patches.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b5\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bC_\bo_\bn_\bt_\be_\bx_\bt\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bC_\bo_\bm_\bm_\bo_\bn_\b._\bh_\b:_\b4_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b4_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\bG_\be_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bB_\ba_\bs_\be\n-int GetQuadOffsetsBase(Far::PatchDescriptor::Type type)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static MTLLegacyGregoryPatchTable * Create(Far::PatchTable const\n-*farPatchTable, DEVICE_CONTEXT context)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b4_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be_\bB_\bu_\bf_\bf_\be_\br\n-id< MTLBuffer > GetVertexValenceBuffer() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\bG_\be_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br\n-id< MTLBuffer > GetQuadOffsetsBuffer() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static MTLLegacyGregoryPatchTable * Create(Far::PatchTable const\n-*farPatchTable, MTLContext *context)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\bU_\bp_\bd_\ba_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-void UpdateVertexBuffer(id< MTLBuffer > vbo, int numVertices, int\n-numVertexElements, MTLContext *context)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\b~_\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-~MTLLegacyGregoryPatchTable()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-id< MTLBuffer > GetVertexBuffer() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b4_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n+PatchArrayVector const & GetPatchArrays() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be\n+bool allocate(Far::PatchTable const *farPatchTable, MTLContext *context)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static MTLPatchTable * Create(Far::PatchTable const *farPatchTable, MTLContext\n+*context)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+id< MTLBuffer > GetVaryingPatchIndexBuffer() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bf_\bv_\ba_\br_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bs\n+std::vector< id< MTLBuffer > > _fvarIndexBuffers\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br\n+id< MTLBuffer > GetFVarPatchParamBuffer(int fvarChannel=0) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+MTLPatchTable()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br\n+id< MTLBuffer > GetPatchParamBuffer() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+id< MTLBuffer > GetPatchIndexBuffer() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bp_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n+PatchArrayVector _patchArrays\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bB_\bi_\bn_\bd_\bi_\bn_\bg\n+id< MTLBuffer > VertexBufferBinding\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b4_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs\n+int GetNumFVarChannels() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n+PatchArrayVector const & GetFVarPatchArrays(int fvarChannel=0) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+id< MTLBuffer > _varyingPatchIndexBuffer\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bf_\bv_\ba_\br_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br_\bs\n+std::vector< id< MTLBuffer > > _fvarParamBuffers\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n+std::vector< PatchArrayVector > _fvarPatchArrays\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br\n+id< MTLBuffer > _patchParamBuffer\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n+PatchArrayVector _varyingPatchArrays\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static MTLPatchTable * Create(Far::PatchTable const *farPatchTable,\n+DEVICE_CONTEXT context)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b~_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+~MTLPatchTable()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+id< MTLBuffer > GetFVarPatchIndexBuffer(int fvarChannel=0) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n+PatchArrayVector const & GetVaryingPatchArrays() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bi_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+id< MTLBuffer > _indexBuffer\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b8\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bm_\bt_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n+ * _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00818.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00818.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/mtlPatchTable.h File Reference\n+OpenSubdiv: opensubdiv/osd/mtlLegacyGregoryPatchTable.h File Reference\n \n \n \n \n \n \n \n@@ -90,45 +90,42 @@\n \n \n \n
    \n \n-
    mtlPatchTable.h File Reference
    \n+
    mtlLegacyGregoryPatchTable.h File Reference
    \n
    \n
    \n
    #include "../version.h"
    \n-#include "../far/patchDescriptor.h"
    \n+#include "../far/patchTable.h"
    \n #include "../osd/nonCopyable.h"
    \n-#include "../osd/types.h"
    \n-#include "../osd/mtlCommon.h"
    \n+#include "../osd/mtlCommon.h"
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n+\n \n

    \n Classes

    class  MTLPatchTable
    class  MTLLegacyGregoryPatchTable
     
    \n \n \n \n \n \n-\n-\n \n \n

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Far
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
     
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,25 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-mtlPatchTable.h File Reference\n+mtlLegacyGregoryPatchTable.h File Reference\n #include \"../version.h\"\n-#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\"\n+#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\"\n #include \"../osd/nonCopyable.h\"\n-#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n #include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bm_\bt_\bl_\bC_\bo_\bm_\bm_\bo_\bn_\b._\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+class \u00a0 _\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n-namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br\n-\u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n+ * _\bm_\bt_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00818.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00818.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00818 = [\n- [\"MTLPatchTable\", \"a01297.html\", \"a01297\"]\n+ [\"MTLLegacyGregoryPatchTable\", \"a01289.html\", \"a01289\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00818_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00818_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/mtlPatchTable.h Source File\n+OpenSubdiv: opensubdiv/osd/mtlLegacyGregoryPatchTable.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    mtlPatchTable.h
    \n+
    mtlLegacyGregoryPatchTable.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n
    2// Copyright 2013 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n@@ -119,123 +119,112 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H
    \n-
    26#define OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_MTL_LEGACY_GREGORY_PATCH_TABLE_H
    \n+
    26#define OPENSUBDIV3_OSD_MTL_LEGACY_GREGORY_PATCH_TABLE_H
    \n
    27
    \n
    28#include "../version.h"
    \n-
    29#include "../far/patchDescriptor.h"
    \n+
    29#include "../far/patchTable.h"
    \n
    30#include "../osd/nonCopyable.h"
    \n-
    31#include "../osd/types.h"
    \n-
    32#include "../osd/mtlCommon.h"
    \n-
    33
    \n-
    34@protocol MTLDevice;
    \n-
    35@protocol MTLBuffer;
    \n-
    36
    \n-
    37namespace OpenSubdiv {
    \n-
    38namespace OPENSUBDIV_VERSION {
    \n-
    39
    \n-
    40namespace Far {
    \n-
    41 class PatchTable;
    \n-
    42};
    \n-
    43
    \n-
    44namespace Osd {
    \n-
    45
    \n-
    \n-
    46class MTLPatchTable : private NonCopyable<MTLPatchTable> {
    \n-
    47public:
    \n-
    48 typedef id<MTLBuffer> VertexBufferBinding;
    \n-
    49
    \n-\n-\n-
    52
    \n-
    53 template<typename DEVICE_CONTEXT>
    \n-
    \n-
    54 static MTLPatchTable *Create(Far::PatchTable const *farPatchTable, DEVICE_CONTEXT context)
    \n-
    55 {
    \n-
    56 return Create(farPatchTable, context);
    \n-
    57 }
    \n+
    31#include "../osd/mtlCommon.h"
    \n+
    32
    \n+
    33@protocol MTLDevice;
    \n+
    34@protocol MTLBuffer;
    \n+
    35
    \n+
    36namespace OpenSubdiv {
    \n+
    37namespace OPENSUBDIV_VERSION {
    \n+
    38
    \n+
    39namespace Osd {
    \n+
    40
    \n+
    \n+\n+
    42: private NonCopyable<MTLLegacyGregoryPatchTable>
    \n+
    43{
    \n+
    44public:
    \n+\n+
    46
    \n+
    47 template<typename DEVICE_CONTEXT>
    \n+
    \n+
    48 static MTLLegacyGregoryPatchTable* Create(Far::PatchTable const* farPatchTable, DEVICE_CONTEXT context) {
    \n+
    49 return Create(farPatchTable, context);
    \n+
    50 }
    \n+
    \n+
    51
    \n+
    52 static MTLLegacyGregoryPatchTable* Create(Far::PatchTable const* farPatchTable, MTLContext* context);
    \n+
    53
    \n+
    54 void UpdateVertexBuffer(id<MTLBuffer> vbo, int numVertices, int numVertexElements, MTLContext* context);
    \n+
    55
    \n+
    \n+
    56 id<MTLBuffer> GetVertexBuffer() const
    \n+
    57 {
    \n+
    58 return _vertexBuffer;
    \n+
    59 }
    \n
    \n-
    58
    \n-
    59 static MTLPatchTable *Create(Far::PatchTable const *farPatchTable, MTLContext* context);
    \n
    60
    \n-
    61 PatchArrayVector const &GetPatchArrays() const { return _patchArrays; }
    \n-
    62 id<MTLBuffer> GetPatchIndexBuffer() const { return _indexBuffer; }
    \n-
    63 id<MTLBuffer> GetPatchParamBuffer() const { return _patchParamBuffer; }
    \n-
    64
    \n-\n-
    66 id<MTLBuffer> GetVaryingPatchIndexBuffer() const { return _varyingPatchIndexBuffer; }
    \n-
    67
    \n-
    68 int GetNumFVarChannels() const { return (int)_fvarPatchArrays.size(); }
    \n-
    69 PatchArrayVector const &GetFVarPatchArrays(int fvarChannel = 0) const { return _fvarPatchArrays[fvarChannel]; }
    \n-
    70 id<MTLBuffer> GetFVarPatchIndexBuffer(int fvarChannel = 0) const { return _fvarIndexBuffers[fvarChannel]; }
    \n-
    71 id<MTLBuffer> GetFVarPatchParamBuffer(int fvarChannel = 0) const { return _fvarParamBuffers[fvarChannel]; }
    \n-
    72
    \n-
    73protected:
    \n-
    74 bool allocate(Far::PatchTable const *farPatchTable, MTLContext* context);
    \n-
    75
    \n-\n+
    \n+
    61 id<MTLBuffer> GetVertexValenceBuffer() const
    \n+
    62 {
    \n+
    63 return _vertexValenceBuffer;
    \n+
    64 }
    \n+
    \n+
    65
    \n+
    \n+
    66 id<MTLBuffer> GetQuadOffsetsBuffer() const
    \n+
    67 {
    \n+
    68 return _quadOffsetsBuffer;
    \n+
    69 }
    \n+
    \n+
    70
    \n+
    \n+\n+
    72 {
    \n+\n+
    74 return _quadOffsetsBase[1];
    \n+
    75 return _quadOffsetsBase[0];
    \n+
    76 }
    \n+
    \n
    77
    \n-
    78 id<MTLBuffer> _indexBuffer;
    \n-
    79 id<MTLBuffer> _patchParamBuffer;
    \n-
    80
    \n-\n-
    82
    \n-\n-
    84
    \n-
    85 std::vector<PatchArrayVector> _fvarPatchArrays;
    \n-
    86 std::vector<id<MTLBuffer>> _fvarIndexBuffers;
    \n-
    87 std::vector<id<MTLBuffer>> _fvarParamBuffers;
    \n-
    88};
    \n+
    78private:
    \n+
    79 id<MTLBuffer> _vertexBuffer;
    \n+
    80 id<MTLBuffer> _vertexValenceBuffer;
    \n+
    81 id<MTLBuffer> _quadOffsetsBuffer;
    \n+
    82 int _quadOffsetsBase[2];
    \n+
    83};
    \n
    \n+
    84
    \n+
    85} //end namespace Osd
    \n+
    86
    \n+
    87} //end namespace OPENSUBDIV_VERSION
    \n+
    88using namespace OPENSUBDIV_VERSION;
    \n
    89
    \n-
    90} // end namespace Osd
    \n+
    90} //end namespace OpenSuddiv
    \n
    91
    \n-
    92} //end namespace OPENSUBDIV_VERSION
    \n-
    93using namespace OPENSUBDIV_VERSION;
    \n-
    94
    \n-
    95} //end namespace OpenSubdiv
    \n-
    96
    \n-
    97#endif //end OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H
    \n-\n-
    std::vector< PatchArray > PatchArrayVector
    Definition types.h:132
    \n-
    Container for arrays of parametric patches.
    Definition patchTable.h:55
    \n-\n-\n-
    PatchArrayVector const & GetPatchArrays() const
    \n-
    bool allocate(Far::PatchTable const *farPatchTable, MTLContext *context)
    \n-
    static MTLPatchTable * Create(Far::PatchTable const *farPatchTable, MTLContext *context)
    \n-\n-
    std::vector< id< MTLBuffer > > _fvarIndexBuffers
    \n-
    id< MTLBuffer > GetFVarPatchParamBuffer(int fvarChannel=0) const
    \n-\n-\n-\n-\n-\n-\n-
    PatchArrayVector const & GetFVarPatchArrays(int fvarChannel=0) const
    \n-\n-
    std::vector< id< MTLBuffer > > _fvarParamBuffers
    \n-
    std::vector< PatchArrayVector > _fvarPatchArrays
    \n-\n-\n-
    static MTLPatchTable * Create(Far::PatchTable const *farPatchTable, DEVICE_CONTEXT context)
    \n-\n-
    id< MTLBuffer > GetFVarPatchIndexBuffer(int fvarChannel=0) const
    \n-
    PatchArrayVector const & GetVaryingPatchArrays() const
    \n-\n+
    92#endif // OPENSUBDIV3_OSD_MTL_LEGACY_GREGORY_PATCH_TABLE_H
    \n+\n+\n+\n+
    Container for arrays of parametric patches.
    Definition patchTable.h:55
    \n+\n+\n+\n+
    static MTLLegacyGregoryPatchTable * Create(Far::PatchTable const *farPatchTable, DEVICE_CONTEXT context)
    \n+\n+\n+
    static MTLLegacyGregoryPatchTable * Create(Far::PatchTable const *farPatchTable, MTLContext *context)
    \n+
    void UpdateVertexBuffer(id< MTLBuffer > vbo, int numVertices, int numVertexElements, MTLContext *context)
    \n+\n+\n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-mtlPatchTable.h\n+mtlLegacyGregoryPatchTable.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2013 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -24,170 +24,127 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H\n-26#define OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H\n+25#ifndef OPENSUBDIV3_OSD_MTL_LEGACY_GREGORY_PATCH_TABLE_H\n+26#define OPENSUBDIV3_OSD_MTL_LEGACY_GREGORY_PATCH_TABLE_H\n 27\n 28#include \"../version.h\"\n-29#include \"../far/patchDescriptor.h\"\n+29#include \"../far/patchTable.h\"\n 30#include \"../osd/nonCopyable.h\"\n-31#include \"../osd/types.h\"\n-32#include \"../osd/mtlCommon.h\"\n-33\n-34@protocol MTLDevice;\n-35@protocol MTLBuffer;\n-36\n-37namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-38namespace OPENSUBDIV_VERSION {\n-39\n-40namespace Far {\n-41 class PatchTable;\n-42};\n-43\n-44namespace Osd {\n-45\n-_\b4_\b6class _\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be : private NonCopyable {\n-47public:\n-_\b4_\b8 typedef id _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bB_\bi_\bn_\bd_\bi_\bn_\bg;\n-49\n-_\b5_\b0 _\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be();\n-_\b5_\b1 _\b~_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be();\n-52\n-53 template\n-_\b5_\b4 static _\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be *_\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *farPatchTable,\n-DEVICE_CONTEXT context)\n-55 {\n-56 return _\bC_\br_\be_\ba_\bt_\be(farPatchTable, context);\n-57 }\n-58\n-_\b5_\b9 static _\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be *_\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *farPatchTable,\n-_\bM_\bT_\bL_\bC_\bo_\bn_\bt_\be_\bx_\bt* context);\n+31#include \"../osd/mtlCommon.h\"\n+32\n+33@protocol MTLDevice;\n+34@protocol MTLBuffer;\n+35\n+36namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+37namespace OPENSUBDIV_VERSION {\n+38\n+39namespace Osd {\n+40\n+_\b4_\b1class _\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+42: private NonCopyable\n+43{\n+44public:\n+_\b4_\b5 _\b~_\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be();\n+46\n+47 template\n+_\b4_\b8 static _\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be* _\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const*\n+farPatchTable, DEVICE_CONTEXT context) {\n+49 return Create(farPatchTable, context);\n+50 }\n+51\n+_\b5_\b2 static _\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be* _\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const*\n+farPatchTable, _\bM_\bT_\bL_\bC_\bo_\bn_\bt_\be_\bx_\bt* context);\n+53\n+_\b5_\b4 void _\bU_\bp_\bd_\ba_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(id vbo, int numVertices, int\n+numVertexElements, _\bM_\bT_\bL_\bC_\bo_\bn_\bt_\be_\bx_\bt* context);\n+55\n+_\b5_\b6 id _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br() const\n+57 {\n+58 return _vertexBuffer;\n+59 }\n 60\n-_\b6_\b1 _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br const &_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs() const { return _\b__\bp_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs; }\n-_\b6_\b2 id _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br() const { return _\b__\bi_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br; }\n-_\b6_\b3 id _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br() const { return _\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br; }\n-64\n-_\b6_\b5 _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br const &_\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs() const { return\n-_\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs; }\n-_\b6_\b6 id _\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br() const { return\n-_\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br; }\n-67\n-_\b6_\b8 int _\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs() const { return (int)_\b__\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs.size(); }\n-_\b6_\b9 _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br const &_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs(int fvarChannel = 0) const\n-{ return _\b__\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs[fvarChannel]; }\n-_\b7_\b0 id _\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(int fvarChannel = 0) const { return\n-_\b__\bf_\bv_\ba_\br_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bs[fvarChannel]; }\n-_\b7_\b1 id _\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br(int fvarChannel = 0) const { return\n-_\b__\bf_\bv_\ba_\br_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br_\bs[fvarChannel]; }\n-72\n-73protected:\n-_\b7_\b4 bool _\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *farPatchTable, _\bM_\bT_\bL_\bC_\bo_\bn_\bt_\be_\bx_\bt* context);\n-75\n-_\b7_\b6 _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br _\b__\bp_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs;\n+_\b6_\b1 id _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be_\bB_\bu_\bf_\bf_\be_\br() const\n+62 {\n+63 return _vertexValenceBuffer;\n+64 }\n+65\n+_\b6_\b6 id _\bG_\be_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br() const\n+67 {\n+68 return _quadOffsetsBuffer;\n+69 }\n+70\n+_\b7_\b1 int _\bG_\be_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bB_\ba_\bs_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type)\n+72 {\n+73 if(type == _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY)\n+74 return _quadOffsetsBase[1];\n+75 return _quadOffsetsBase[0];\n+76 }\n 77\n-_\b7_\b8 id _\b__\bi_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br;\n-_\b7_\b9 id _\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br;\n-80\n-_\b8_\b1 _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br _\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs;\n-82\n-_\b8_\b3 id _\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br;\n+78private:\n+79 id _vertexBuffer;\n+80 id _vertexValenceBuffer;\n+81 id _quadOffsetsBuffer;\n+82 int _quadOffsetsBase[2];\n+83};\n 84\n-_\b8_\b5 std::vector _\b__\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs;\n-_\b8_\b6 std::vector> _\b__\bf_\bv_\ba_\br_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bs;\n-_\b8_\b7 std::vector> _\b__\bf_\bv_\ba_\br_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br_\bs;\n-88};\n+85} //end namespace Osd\n+86\n+87} //end namespace OPENSUBDIV_VERSION\n+88using namespace OPENSUBDIV_VERSION;\n 89\n-90} // end namespace Osd\n+90} //end namespace OpenSuddiv\n 91\n-92} //end namespace OPENSUBDIV_VERSION\n-93using namespace OPENSUBDIV_VERSION;\n-94\n-95} //end namespace OpenSubdiv\n-96\n-97#endif //end OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H\n+92#endif // OPENSUBDIV3_OSD_MTL_LEGACY_GREGORY_PATCH_TABLE_H\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< PatchArray > PatchArrayVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b1_\b3_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be\n+Type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY\n+@ GREGORY_BOUNDARY\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b1\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n Container for arrays of parametric patches.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b5\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bC_\bo_\bn_\bt_\be_\bx_\bt\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bC_\bo_\bm_\bm_\bo_\bn_\b._\bh_\b:_\b4_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b4_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n-PatchArrayVector const & GetPatchArrays() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be\n-bool allocate(Far::PatchTable const *farPatchTable, MTLContext *context)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static MTLPatchTable * Create(Far::PatchTable const *farPatchTable, MTLContext\n-*context)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-id< MTLBuffer > GetVaryingPatchIndexBuffer() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bf_\bv_\ba_\br_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bs\n-std::vector< id< MTLBuffer > > _fvarIndexBuffers\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br\n-id< MTLBuffer > GetFVarPatchParamBuffer(int fvarChannel=0) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-MTLPatchTable()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br\n-id< MTLBuffer > GetPatchParamBuffer() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-id< MTLBuffer > GetPatchIndexBuffer() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bp_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n-PatchArrayVector _patchArrays\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bB_\bi_\bn_\bd_\bi_\bn_\bg\n-id< MTLBuffer > VertexBufferBinding\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b4_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs\n-int GetNumFVarChannels() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n-PatchArrayVector const & GetFVarPatchArrays(int fvarChannel=0) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-id< MTLBuffer > _varyingPatchIndexBuffer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bf_\bv_\ba_\br_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br_\bs\n-std::vector< id< MTLBuffer > > _fvarParamBuffers\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bf_\bv_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n-std::vector< PatchArrayVector > _fvarPatchArrays\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br\n-id< MTLBuffer > _patchParamBuffer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bv_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n-PatchArrayVector _varyingPatchArrays\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static MTLPatchTable * Create(Far::PatchTable const *farPatchTable,\n-DEVICE_CONTEXT context)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b~_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-~MTLPatchTable()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bF_\bV_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-id< MTLBuffer > GetFVarPatchIndexBuffer(int fvarChannel=0) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n-PatchArrayVector const & GetVaryingPatchArrays() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bi_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-id< MTLBuffer > _indexBuffer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b4_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\bG_\be_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bB_\ba_\bs_\be\n+int GetQuadOffsetsBase(Far::PatchDescriptor::Type type)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static MTLLegacyGregoryPatchTable * Create(Far::PatchTable const\n+*farPatchTable, DEVICE_CONTEXT context)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b4_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be_\bB_\bu_\bf_\bf_\be_\br\n+id< MTLBuffer > GetVertexValenceBuffer() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\bG_\be_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br\n+id< MTLBuffer > GetQuadOffsetsBuffer() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static MTLLegacyGregoryPatchTable * Create(Far::PatchTable const\n+*farPatchTable, MTLContext *context)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\bU_\bp_\bd_\ba_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+void UpdateVertexBuffer(id< MTLBuffer > vbo, int numVertices, int\n+numVertexElements, MTLContext *context)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\b~_\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+~MTLLegacyGregoryPatchTable()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\bT_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+id< MTLBuffer > GetVertexBuffer() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\bt_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b6\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bm_\bt_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n+ * _\bm_\bt_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00821.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00821.html", "unified_diff": "@@ -96,15 +96,15 @@\n Namespaces
    \n
    mtlComputeEvaluator.h File Reference
    \n \n
    \n
    #include "../version.h"
    \n #include "../osd/types.h"
    \n #include "../osd/bufferDescriptor.h"
    \n-#include "../osd/mtlCommon.h"
    \n+#include "../osd/mtlCommon.h"
    \n
    \n

    Go to the source code of this file.

    \n \n \n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00821_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00821_source.html", "unified_diff": "@@ -1182,20 +1182,20 @@\n
    2161
    \n
    2162} //end namespace OPENSUBDIV_VERSION
    \n
    2163using namespace OPENSUBDIV_VERSION;
    \n
    2164
    \n
    2165} //end namespace OpenSubdiv
    \n
    2166
    \n
    2167#endif // OPENSUBDIV3_OSD_MTL_COMPUTE_EVALUATOR_H
    \n-\n+\n
    std::vector< PatchArray > PatchArrayVector
    Definition types.h:132
    \n
    Stencil table class wrapping the template for compatibility.
    \n
    Limit stencil table class wrapping the template for compatibility.
    \n
    BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
    \n-\n+\n \n
    MTLStencilTable(Far::LimitStencilTable const *stencilTable, MTLContext *context)
    \n \n \n \n
    MTLStencilTable(Far::StencilTable const *stencilTable, MTLContext *context)
    \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00824.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00824.html", "unified_diff": "@@ -94,15 +94,15 @@\n \n
    mtlVertexBuffer.h File Reference
    \n \n
    \n
    #include "../version.h"
    \n-#include "../osd/mtlCommon.h"
    \n+#include "../osd/mtlCommon.h"
    \n
    \n

    Go to the source code of this file.

    \n

    \n Classes

    class  MTLStencilTable
     
    \n \n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00824_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00824_source.html", "unified_diff": "@@ -186,16 +186,16 @@\n
    77
    \n
    78} //end namespace OPENSUBDIV_VERSION
    \n
    79 using namespace OPENSUBDIV_VERSION;
    \n
    80
    \n
    81} //end namespace OpenSubdiv
    \n
    82
    \n
    83#endif // OPENSUBDIV3_OSD_MTL_VERTEX_BUFFER_H
    \n-\n-\n+\n+\n \n \n
    CPUMTLVertexBuffer(int numElements, int numVertices)
    \n
    static CPUMTLVertexBuffer * Create(int numElements, int numVertices, MTLContext *context)
    \n \n
    void UpdateData(const float *src, int startVertex, int numVertices, MTLContext *context)
    \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00827.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00827.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/hlslPatchShaderSource.h File Reference\n+OpenSubdiv: opensubdiv/osd/d3d11Mesh.h File Reference\n \n \n \n \n \n \n \n@@ -88,43 +88,43 @@\n \n \n \n \n \n
    \n \n-
    hlslPatchShaderSource.h File Reference
    \n+Namespaces |\n+Typedefs
    \n+
    d3d11Mesh.h File Reference
    \n \n
    \n
    #include "../version.h"
    \n-#include <string>
    \n-#include "../far/patchDescriptor.h"
    \n+#include "../osd/mesh.h"
    \n+#include "../osd/d3d11PatchTable.h"
    \n
    \n

    Go to the source code of this file.

    \n

    \n Classes

    class  CPUMTLVertexBuffer
     
    \n-\n-\n-\n-

    \n-Classes

    class  HLSLPatchShaderSource
     
    \n \n \n \n \n \n \n \n+

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
     
    \n+\n+\n+\n

    \n+Typedefs

    typedef MeshInterface< D3D11PatchTableD3D11MeshInterface
     
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,24 +1,24 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-hlslPatchShaderSource.h File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+d3d11Mesh.h File Reference\n #include \"../version.h\"\n-#include \n-#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\"\n+#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bm_\be_\bs_\bh_\b._\bh\"\n+#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bH_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+typedef _\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be< _\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be >\u00a0 _\bD_\b3_\bD_\b1_\b1_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n+\u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bh_\bl_\bs_\bl_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b._\bh\n+ * _\bd_\b3_\bd_\b1_\b1_\bM_\be_\bs_\bh_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00827.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00827.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00827 = [\n- [\"HLSLPatchShaderSource\", \"a01257.html\", null]\n+ [\"D3D11MeshInterface\", \"a00827.html#ae5c8e80d05d6eaee105d8eecfa9ab609\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00827_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00827_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/hlslPatchShaderSource.h Source File\n+OpenSubdiv: opensubdiv/osd/d3d11Mesh.h Source File\n \n \n \n \n \n \n \n@@ -92,19 +92,19 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    hlslPatchShaderSource.h
    \n+
    d3d11Mesh.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n-
    2// Copyright 2015 Pixar
    \n+
    2// Copyright 2013 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n
    6// compliance with the Apache License and the following modification to it:
    \n
    7// Section 6. Trademarks. is deleted and replaced with:
    \n
    8//
    \n
    9// 6. Trademarks. This License does not grant permission to use the trade
    \n@@ -119,61 +119,45 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_HLSL_PATCH_SHADER_SOURCE_H
    \n-
    26#define OPENSUBDIV3_OSD_HLSL_PATCH_SHADER_SOURCE_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_D3D11MESH_H
    \n+
    26#define OPENSUBDIV3_OSD_D3D11MESH_H
    \n
    27
    \n
    28#include "../version.h"
    \n-
    29#include <string>
    \n-
    30#include "../far/patchDescriptor.h"
    \n-
    31
    \n-
    32namespace OpenSubdiv {
    \n-
    33namespace OPENSUBDIV_VERSION {
    \n-
    34
    \n-
    35namespace Osd {
    \n-
    36
    \n-
    \n-\n-
    38public:
    \n-
    39 static std::string GetCommonShaderSource();
    \n+
    29
    \n+
    30#include "../osd/mesh.h"
    \n+
    31#include "../osd/d3d11PatchTable.h"
    \n+
    32
    \n+
    33namespace OpenSubdiv {
    \n+
    34namespace OPENSUBDIV_VERSION {
    \n+
    35
    \n+
    36namespace Osd {
    \n+
    37
    \n+\n+
    39
    \n
    40
    \n-
    41 static std::string GetPatchBasisShaderSource();
    \n+
    41} // end namespace Osd
    \n
    42
    \n-\n-
    44
    \n-\n-
    46
    \n-\n-
    48};
    \n-
    \n-
    49
    \n-
    50} // end namespace Osd
    \n-
    51
    \n-
    52} // end namespace OPENSUBDIV_VERSION
    \n-
    53using namespace OPENSUBDIV_VERSION;
    \n-
    54
    \n-
    55} // end namespace OpenSubdiv
    \n-
    56
    \n-
    57#endif // OPENSUBDIV3_OSD_HLSL_PATCH_SHADER_SOURCE_H
    \n-\n-\n-\n-
    static std::string GetVertexShaderSource(Far::PatchDescriptor::Type type)
    \n-
    static std::string GetDomainShaderSource(Far::PatchDescriptor::Type type)
    \n-
    static std::string GetHullShaderSource(Far::PatchDescriptor::Type type)
    \n-\n-\n+
    43} // end namespace OPENSUBDIV_VERSION
    \n+
    44using namespace OPENSUBDIV_VERSION;
    \n+
    45
    \n+
    46} // end namespace OpenSubdiv
    \n+
    47
    \n+
    48#endif // OPENSUBDIV3_OSD_D3D11MESH_H
    \n+\n+
    MeshInterface< D3D11PatchTable > D3D11MeshInterface
    Definition d3d11Mesh.h:38
    \n+\n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,15 +1,15 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-hlslPatchShaderSource.h\n+d3d11Mesh.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n-2// Copyright 2015 Pixar\n+2// Copyright 2013 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n 7// Section 6. Trademarks. is deleted and replaced with:\n 8//\n 9// 6. Trademarks. This License does not grant permission to use the trade\n@@ -24,65 +24,42 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_HLSL_PATCH_SHADER_SOURCE_H\n-26#define OPENSUBDIV3_OSD_HLSL_PATCH_SHADER_SOURCE_H\n+25#ifndef OPENSUBDIV3_OSD_D3D11MESH_H\n+26#define OPENSUBDIV3_OSD_D3D11MESH_H\n 27\n 28#include \"../version.h\"\n-29#include \n-30#include \"../far/patchDescriptor.h\"\n-31\n-32namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-33namespace OPENSUBDIV_VERSION {\n-34\n-35namespace Osd {\n-36\n-_\b3_\b7class _\bH_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be {\n-38public:\n-_\b3_\b9 static std::string _\bG_\be_\bt_\bC_\bo_\bm_\bm_\bo_\bn_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be();\n+29\n+30#include \"../osd/mesh.h\"\n+31#include \"../osd/d3d11PatchTable.h\"\n+32\n+33namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+34namespace OPENSUBDIV_VERSION {\n+35\n+36namespace Osd {\n+37\n+_\b3_\b8typedef _\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b<_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b> _\bD_\b3_\bD_\b1_\b1_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be;\n+39\n 40\n-_\b4_\b1 static std::string _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bB_\ba_\bs_\bi_\bs_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be();\n+41} // end namespace Osd\n 42\n-_\b4_\b3 static std::string _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type);\n-44\n-_\b4_\b5 static std::string _\bG_\be_\bt_\bH_\bu_\bl_\bl_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type);\n-46\n-_\b4_\b7 static std::string _\bG_\be_\bt_\bD_\bo_\bm_\ba_\bi_\bn_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type);\n-48};\n-49\n-50} // end namespace Osd\n-51\n-52} // end namespace OPENSUBDIV_VERSION\n-53using namespace OPENSUBDIV_VERSION;\n-54\n-55} // end namespace OpenSubdiv\n-56\n-57#endif // OPENSUBDIV3_OSD_HLSL_PATCH_SHADER_SOURCE_H\n+43} // end namespace OPENSUBDIV_VERSION\n+44using namespace OPENSUBDIV_VERSION;\n+45\n+46} // end namespace OpenSubdiv\n+47\n+48#endif // OPENSUBDIV3_OSD_D3D11MESH_H\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be\n-Type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bH_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bh_\bl_\bs_\bl_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b._\bh_\b:_\b3_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bH_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n-_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n-static std::string GetVertexShaderSource(Far::PatchDescriptor::Type type)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bH_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n-_\bG_\be_\bt_\bD_\bo_\bm_\ba_\bi_\bn_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n-static std::string GetDomainShaderSource(Far::PatchDescriptor::Type type)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bH_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:_\bG_\be_\bt_\bH_\bu_\bl_\bl_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n-static std::string GetHullShaderSource(Far::PatchDescriptor::Type type)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bH_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n-_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bB_\ba_\bs_\bi_\bs_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n-static std::string GetPatchBasisShaderSource()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bH_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n-_\bG_\be_\bt_\bC_\bo_\bm_\bm_\bo_\bn_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n-static std::string GetCommonShaderSource()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n+MeshInterface< D3D11PatchTable > D3D11MeshInterface\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bM_\be_\bs_\bh_\b._\bh_\b:_\b3_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b6_\b8\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bh_\bl_\bs_\bl_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b._\bh\n+ * _\bd_\b3_\bd_\b1_\b1_\bM_\be_\bs_\bh_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00830.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00830.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/d3d11Mesh.h File Reference\n+OpenSubdiv: opensubdiv/osd/hlslPatchShaderSource.h File Reference\n \n \n \n \n \n \n \n@@ -88,43 +88,43 @@\n \n \n \n \n \n
    \n \n-
    d3d11Mesh.h File Reference
    \n+Classes |\n+Namespaces
    \n+
    hlslPatchShaderSource.h File Reference
    \n \n
    \n
    #include "../version.h"
    \n-#include "../osd/mesh.h"
    \n-#include "../osd/d3d11PatchTable.h"
    \n+#include <string>
    \n+#include "../far/patchDescriptor.h"
    \n
    \n

    Go to the source code of this file.

    \n \n+\n+\n+\n+

    \n+Classes

    class  HLSLPatchShaderSource
     
    \n \n \n \n \n \n \n \n-

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
     
    \n-\n-\n-\n

    \n-Typedefs

    typedef MeshInterface< D3D11PatchTableD3D11MeshInterface
     
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,24 +1,24 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-d3d11Mesh.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+hlslPatchShaderSource.h File Reference\n #include \"../version.h\"\n-#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bm_\be_\bs_\bh_\b._\bh\"\n-#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\"\n+#include \n+#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bH_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-typedef _\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be< _\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be >\u00a0 _\bD_\b3_\bD_\b1_\b1_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n-\u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bd_\b3_\bd_\b1_\b1_\bM_\be_\bs_\bh_\b._\bh\n+ * _\bh_\bl_\bs_\bl_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00830.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00830.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00830 = [\n- [\"D3D11MeshInterface\", \"a00830.html#ae5c8e80d05d6eaee105d8eecfa9ab609\", null]\n+ [\"HLSLPatchShaderSource\", \"a01257.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00830_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00830_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/d3d11Mesh.h Source File\n+OpenSubdiv: opensubdiv/osd/hlslPatchShaderSource.h Source File\n \n \n \n \n \n \n \n@@ -92,19 +92,19 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    d3d11Mesh.h
    \n+
    hlslPatchShaderSource.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n-
    2// Copyright 2013 Pixar
    \n+
    2// Copyright 2015 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n
    6// compliance with the Apache License and the following modification to it:
    \n
    7// Section 6. Trademarks. is deleted and replaced with:
    \n
    8//
    \n
    9// 6. Trademarks. This License does not grant permission to use the trade
    \n@@ -119,45 +119,61 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_D3D11MESH_H
    \n-
    26#define OPENSUBDIV3_OSD_D3D11MESH_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_HLSL_PATCH_SHADER_SOURCE_H
    \n+
    26#define OPENSUBDIV3_OSD_HLSL_PATCH_SHADER_SOURCE_H
    \n
    27
    \n
    28#include "../version.h"
    \n-
    29
    \n-
    30#include "../osd/mesh.h"
    \n-
    31#include "../osd/d3d11PatchTable.h"
    \n-
    32
    \n-
    33namespace OpenSubdiv {
    \n-
    34namespace OPENSUBDIV_VERSION {
    \n-
    35
    \n-
    36namespace Osd {
    \n-
    37
    \n-\n-
    39
    \n+
    29#include <string>
    \n+
    30#include "../far/patchDescriptor.h"
    \n+
    31
    \n+
    32namespace OpenSubdiv {
    \n+
    33namespace OPENSUBDIV_VERSION {
    \n+
    34
    \n+
    35namespace Osd {
    \n+
    36
    \n+
    \n+\n+
    38public:
    \n+
    39 static std::string GetCommonShaderSource();
    \n
    40
    \n-
    41} // end namespace Osd
    \n+
    41 static std::string GetPatchBasisShaderSource();
    \n
    42
    \n-
    43} // end namespace OPENSUBDIV_VERSION
    \n-
    44using namespace OPENSUBDIV_VERSION;
    \n-
    45
    \n-
    46} // end namespace OpenSubdiv
    \n-
    47
    \n-
    48#endif // OPENSUBDIV3_OSD_D3D11MESH_H
    \n-\n-
    MeshInterface< D3D11PatchTable > D3D11MeshInterface
    Definition d3d11Mesh.h:38
    \n-\n+\n+
    44
    \n+\n+
    46
    \n+\n+
    48};
    \n+
    \n+
    49
    \n+
    50} // end namespace Osd
    \n+
    51
    \n+
    52} // end namespace OPENSUBDIV_VERSION
    \n+
    53using namespace OPENSUBDIV_VERSION;
    \n+
    54
    \n+
    55} // end namespace OpenSubdiv
    \n+
    56
    \n+
    57#endif // OPENSUBDIV3_OSD_HLSL_PATCH_SHADER_SOURCE_H
    \n+\n+\n+\n+
    static std::string GetVertexShaderSource(Far::PatchDescriptor::Type type)
    \n+
    static std::string GetDomainShaderSource(Far::PatchDescriptor::Type type)
    \n+
    static std::string GetHullShaderSource(Far::PatchDescriptor::Type type)
    \n+\n+\n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,15 +1,15 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-d3d11Mesh.h\n+hlslPatchShaderSource.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n-2// Copyright 2013 Pixar\n+2// Copyright 2015 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n 7// Section 6. Trademarks. is deleted and replaced with:\n 8//\n 9// 6. Trademarks. This License does not grant permission to use the trade\n@@ -24,42 +24,65 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_D3D11MESH_H\n-26#define OPENSUBDIV3_OSD_D3D11MESH_H\n+25#ifndef OPENSUBDIV3_OSD_HLSL_PATCH_SHADER_SOURCE_H\n+26#define OPENSUBDIV3_OSD_HLSL_PATCH_SHADER_SOURCE_H\n 27\n 28#include \"../version.h\"\n-29\n-30#include \"../osd/mesh.h\"\n-31#include \"../osd/d3d11PatchTable.h\"\n-32\n-33namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-34namespace OPENSUBDIV_VERSION {\n-35\n-36namespace Osd {\n-37\n-_\b3_\b8typedef _\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b<_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b> _\bD_\b3_\bD_\b1_\b1_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be;\n-39\n+29#include \n+30#include \"../far/patchDescriptor.h\"\n+31\n+32namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+33namespace OPENSUBDIV_VERSION {\n+34\n+35namespace Osd {\n+36\n+_\b3_\b7class _\bH_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be {\n+38public:\n+_\b3_\b9 static std::string _\bG_\be_\bt_\bC_\bo_\bm_\bm_\bo_\bn_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be();\n 40\n-41} // end namespace Osd\n+_\b4_\b1 static std::string _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bB_\ba_\bs_\bi_\bs_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be();\n 42\n-43} // end namespace OPENSUBDIV_VERSION\n-44using namespace OPENSUBDIV_VERSION;\n-45\n-46} // end namespace OpenSubdiv\n-47\n-48#endif // OPENSUBDIV3_OSD_D3D11MESH_H\n+_\b4_\b3 static std::string _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type);\n+44\n+_\b4_\b5 static std::string _\bG_\be_\bt_\bH_\bu_\bl_\bl_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type);\n+46\n+_\b4_\b7 static std::string _\bG_\be_\bt_\bD_\bo_\bm_\ba_\bi_\bn_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type);\n+48};\n+49\n+50} // end namespace Osd\n+51\n+52} // end namespace OPENSUBDIV_VERSION\n+53using namespace OPENSUBDIV_VERSION;\n+54\n+55} // end namespace OpenSubdiv\n+56\n+57#endif // OPENSUBDIV3_OSD_HLSL_PATCH_SHADER_SOURCE_H\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n-MeshInterface< D3D11PatchTable > D3D11MeshInterface\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bM_\be_\bs_\bh_\b._\bh_\b:_\b3_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b6_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be\n+Type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bH_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bh_\bl_\bs_\bl_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b._\bh_\b:_\b3_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bH_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n+_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n+static std::string GetVertexShaderSource(Far::PatchDescriptor::Type type)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bH_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n+_\bG_\be_\bt_\bD_\bo_\bm_\ba_\bi_\bn_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n+static std::string GetDomainShaderSource(Far::PatchDescriptor::Type type)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bH_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:_\bG_\be_\bt_\bH_\bu_\bl_\bl_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n+static std::string GetHullShaderSource(Far::PatchDescriptor::Type type)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bH_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n+_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bB_\ba_\bs_\bi_\bs_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n+static std::string GetPatchBasisShaderSource()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bH_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n+_\bG_\be_\bt_\bC_\bo_\bm_\bm_\bo_\bn_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n+static std::string GetCommonShaderSource()\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bd_\b3_\bd_\b1_\b1_\bM_\be_\bs_\bh_\b._\bh\n+ * _\bh_\bl_\bs_\bl_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00833.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00833.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/d3d11PatchTable.h File Reference\n+OpenSubdiv: opensubdiv/osd/d3d11VertexBuffer.h File Reference\n \n \n \n \n \n \n \n@@ -90,45 +90,40 @@\n \n \n \n
    \n \n-
    d3d11PatchTable.h File Reference
    \n+
    d3d11VertexBuffer.h File Reference
    \n
    \n
    \n
    #include "../version.h"
    \n-#include <vector>
    \n-#include "../far/patchDescriptor.h"
    \n-#include "../osd/nonCopyable.h"
    \n-#include "../osd/types.h"
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n+\n+\n \n

    \n Classes

    class  D3D11PatchTable
    class  D3D11VertexBuffer
     Concrete vertex buffer class for DirectX subdivision and DirectX drawing. More...
     
    \n \n \n \n \n \n-\n-\n \n \n

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Far
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
     
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,24 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-d3d11PatchTable.h File Reference\n+d3d11VertexBuffer.h File Reference\n #include \"../version.h\"\n-#include \n-#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\"\n-#include \"../osd/nonCopyable.h\"\n-#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+class \u00a0 _\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+\u00a0 Concrete vertex buffer class for DirectX subdivision and DirectX\n+ drawing. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n-namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br\n-\u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n+ * _\bd_\b3_\bd_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00833.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00833.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00833 = [\n- [\"D3D11PatchTable\", \"a01201.html\", \"a01201\"]\n+ [\"D3D11VertexBuffer\", \"a01205.html\", \"a01205\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00833_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00833_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/d3d11PatchTable.h Source File\n+OpenSubdiv: opensubdiv/osd/d3d11VertexBuffer.h Source File\n \n \n \n \n \n \n \n@@ -92,19 +92,19 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    d3d11PatchTable.h
    \n+
    d3d11VertexBuffer.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n-
    2// Copyright 2015 Pixar
    \n+
    2// Copyright 2013 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n
    6// compliance with the Apache License and the following modification to it:
    \n
    7// Section 6. Trademarks. is deleted and replaced with:
    \n
    8//
    \n
    9// 6. Trademarks. This License does not grant permission to use the trade
    \n@@ -119,118 +119,93 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_GL_PATCH_TABLE_H
    \n-
    26#define OPENSUBDIV3_OSD_GL_PATCH_TABLE_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_D3D11_VERTEX_BUFFER_H
    \n+
    26#define OPENSUBDIV3_OSD_D3D11_VERTEX_BUFFER_H
    \n
    27
    \n
    28#include "../version.h"
    \n
    29
    \n-
    30#include <vector>
    \n-
    31#include "../far/patchDescriptor.h"
    \n-
    32#include "../osd/nonCopyable.h"
    \n-
    33#include "../osd/types.h"
    \n+
    30struct ID3D11Buffer;
    \n+
    31struct ID3D11Device;
    \n+
    32struct ID3D11DeviceContext;
    \n+
    33struct ID3D11UnorderedAccessView;
    \n
    34
    \n-
    35struct ID3D11Buffer;
    \n-
    36struct ID3D11ShaderResourceView;
    \n-
    37struct ID3D11Device;
    \n-
    38struct ID3D11DeviceContext;
    \n+
    35namespace OpenSubdiv {
    \n+
    36namespace OPENSUBDIV_VERSION {
    \n+
    37
    \n+
    38namespace Osd {
    \n
    39
    \n-
    40namespace OpenSubdiv {
    \n-
    41namespace OPENSUBDIV_VERSION {
    \n-
    42
    \n-
    43namespace Far{
    \n-
    44 class PatchTable;
    \n-
    45};
    \n-
    46
    \n-
    47namespace Osd {
    \n-
    48
    \n-
    \n-
    49class D3D11PatchTable : private NonCopyable<D3D11PatchTable> {
    \n-
    50public:
    \n-
    51 typedef ID3D11Buffer * VertexBufferBinding;
    \n-
    52
    \n-\n-\n-
    55
    \n-
    56 template<typename DEVICE_CONTEXT>
    \n-
    \n-
    57 static D3D11PatchTable *Create(Far::PatchTable const *farPatchTable,
    \n-
    58 DEVICE_CONTEXT context) {
    \n-
    59 return Create(farPatchTable, context->GetDeviceContext());
    \n-
    60 }
    \n-
    \n-
    61
    \n-
    62 static D3D11PatchTable *Create(Far::PatchTable const *farPatchTable,
    \n-
    63 ID3D11DeviceContext *deviceContext);
    \n-
    64
    \n-
    \n-\n-
    66 return _patchArrays;
    \n-
    67 }
    \n-
    \n+
    \n+\n+
    47public:
    \n+
    49 static D3D11VertexBuffer * Create(int numElements, int numVertices,
    \n+
    50 ID3D11DeviceContext *deviceContext);
    \n+
    51
    \n+\n+
    54
    \n+
    57 void UpdateData(const float *src, int startVertex, int numVertices,
    \n+
    58 ID3D11DeviceContext *deviceContext);
    \n+
    59
    \n+
    61 int GetNumElements() const;
    \n+
    62
    \n+
    64 int GetNumVertices() const;
    \n+
    65
    \n+
    67 ID3D11Buffer *BindD3D11Buffer(ID3D11DeviceContext *deviceContext);
    \n
    68
    \n
    \n-
    70 ID3D11Buffer* GetPatchIndexBuffer() const {
    \n-
    71 return _indexBuffer;
    \n+
    70 ID3D11Buffer *BindVBO(ID3D11DeviceContext *deviceContext) {
    \n+
    71 return BindD3D11Buffer(deviceContext);
    \n
    72 }
    \n
    \n
    73
    \n-
    \n-
    75 ID3D11ShaderResourceView* GetPatchParamSRV() const {
    \n-\n-
    77 }
    \n-
    \n-
    78
    \n-
    79protected:
    \n-
    80 // allocate buffers from patchTable
    \n-
    81 bool allocate(Far::PatchTable const *farPatchTable,
    \n-
    82 ID3D11DeviceContext *deviceContext);
    \n+
    75 ID3D11UnorderedAccessView *BindD3D11UAV(ID3D11DeviceContext *deviceContext);
    \n+
    76
    \n+
    77protected:
    \n+
    79 D3D11VertexBuffer(int numElements, int numVertices);
    \n+
    80
    \n+
    81 // Allocates D3D11 buffer
    \n+
    82 bool allocate(ID3D11Device *device);
    \n
    83
    \n-\n-
    85
    \n-
    86 ID3D11Buffer *_indexBuffer;
    \n-
    87 ID3D11Buffer *_patchParamBuffer;
    \n-
    88 ID3D11ShaderResourceView *_patchParamBufferSRV;
    \n-
    89};
    \n+
    84private:
    \n+
    85 int _numElements;
    \n+
    86 int _numVertices;
    \n+
    87 ID3D11Buffer *_buffer;
    \n+
    88 ID3D11Buffer *_uploadBuffer;
    \n+
    89 ID3D11UnorderedAccessView *_uav;
    \n+
    90};
    \n
    \n-
    90
    \n
    91
    \n
    92} // end namespace Osd
    \n
    93
    \n
    94} // end namespace OPENSUBDIV_VERSION
    \n
    95using namespace OPENSUBDIV_VERSION;
    \n
    96
    \n
    97} // end namespace OpenSubdiv
    \n
    98
    \n-
    99#endif // OPENSUBDIV3_OSD_GL_PATCH_TABLE_H
    \n-\n-
    std::vector< PatchArray > PatchArrayVector
    Definition types.h:132
    \n-
    Container for arrays of parametric patches.
    Definition patchTable.h:55
    \n-\n-
    static D3D11PatchTable * Create(Far::PatchTable const *farPatchTable, DEVICE_CONTEXT context)
    \n-\n-
    bool allocate(Far::PatchTable const *farPatchTable, ID3D11DeviceContext *deviceContext)
    \n-\n-\n-
    ID3D11Buffer * GetPatchIndexBuffer() const
    Returns the index buffer containing the patch control vertices.
    \n-\n-\n-
    static D3D11PatchTable * Create(Far::PatchTable const *farPatchTable, ID3D11DeviceContext *deviceContext)
    \n-\n-\n-
    ID3D11ShaderResourceView * GetPatchParamSRV() const
    Returns the SRV containing the patch parameter.
    \n-\n+
    99#endif // OPENSUBDIV3_OSD_D3D11_VERTEX_BUFFER_H
    \n+\n+
    Concrete vertex buffer class for DirectX subdivision and DirectX drawing.
    \n+
    int GetNumElements() const
    Returns how many elements defined in this vertex buffer.
    \n+
    void UpdateData(const float *src, int startVertex, int numVertices, ID3D11DeviceContext *deviceContext)
    \n+
    static D3D11VertexBuffer * Create(int numElements, int numVertices, ID3D11DeviceContext *deviceContext)
    Creator. Returns NULL if error.
    \n+
    D3D11VertexBuffer(int numElements, int numVertices)
    Constructor.
    \n+
    int GetNumVertices() const
    Returns how many vertices allocated in this vertex buffer.
    \n+
    ID3D11Buffer * BindD3D11Buffer(ID3D11DeviceContext *deviceContext)
    Returns the D3D11 buffer object.
    \n+\n+
    ID3D11UnorderedAccessView * BindD3D11UAV(ID3D11DeviceContext *deviceContext)
    Returns the D3D11 UAV.
    \n+\n+
    ID3D11Buffer * BindVBO(ID3D11DeviceContext *deviceContext)
    Returns the D3D11 buffer object (for Osd::Mesh interface)
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,15 +1,15 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-d3d11PatchTable.h\n+d3d11VertexBuffer.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n-2// Copyright 2015 Pixar\n+2// Copyright 2013 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n 7// Section 6. Trademarks. is deleted and replaced with:\n 8//\n 9// 6. Trademarks. This License does not grant permission to use the trade\n@@ -24,134 +24,106 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_GL_PATCH_TABLE_H\n-26#define OPENSUBDIV3_OSD_GL_PATCH_TABLE_H\n+25#ifndef OPENSUBDIV3_OSD_D3D11_VERTEX_BUFFER_H\n+26#define OPENSUBDIV3_OSD_D3D11_VERTEX_BUFFER_H\n 27\n 28#include \"../version.h\"\n 29\n-30#include \n-31#include \"../far/patchDescriptor.h\"\n-32#include \"../osd/nonCopyable.h\"\n-33#include \"../osd/types.h\"\n+30struct ID3D11Buffer;\n+31struct ID3D11Device;\n+32struct ID3D11DeviceContext;\n+33struct ID3D11UnorderedAccessView;\n 34\n-35struct ID3D11Buffer;\n-36struct ID3D11ShaderResourceView;\n-37struct ID3D11Device;\n-38struct ID3D11DeviceContext;\n+35namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+36namespace OPENSUBDIV_VERSION {\n+37\n+38namespace Osd {\n 39\n-40namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-41namespace OPENSUBDIV_VERSION {\n-42\n-43namespace Far{\n-44 class PatchTable;\n-45};\n-46\n-47namespace Osd {\n-48\n-_\b4_\b9class _\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be : private NonCopyable {\n-50public:\n-_\b5_\b1 typedef ID3D11Buffer * _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bB_\bi_\bn_\bd_\bi_\bn_\bg;\n-52\n-_\b5_\b3 _\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be();\n-_\b5_\b4 _\b~_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be();\n-55\n-56 template\n-_\b5_\b7 static _\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be *_\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *farPatchTable,\n-58 DEVICE_CONTEXT context) {\n-59 return _\bC_\br_\be_\ba_\bt_\be(farPatchTable, context->GetDeviceContext());\n-60 }\n-61\n-_\b6_\b2 static _\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be *_\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *farPatchTable,\n-63 ID3D11DeviceContext *deviceContext);\n-64\n-_\b6_\b5 _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br const &_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs() const {\n-66 return _\b__\bp_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs;\n-67 }\n+_\b4_\b6class _\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br {\n+47public:\n+_\b4_\b9 static _\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br * _\bC_\br_\be_\ba_\bt_\be(int numElements, int numVertices,\n+50 ID3D11DeviceContext *deviceContext);\n+51\n+_\b5_\b3 virtual _\b~_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br();\n+54\n+_\b5_\b7 void _\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba(const float *src, int startVertex, int numVertices,\n+58 ID3D11DeviceContext *deviceContext);\n+59\n+_\b6_\b1 int _\bG_\be_\bt_\bN_\bu_\bm_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs() const;\n+62\n+_\b6_\b4 int _\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const;\n+65\n+_\b6_\b7 ID3D11Buffer *_\bB_\bi_\bn_\bd_\bD_\b3_\bD_\b1_\b1_\bB_\bu_\bf_\bf_\be_\br(ID3D11DeviceContext *deviceContext);\n 68\n-_\b7_\b0 ID3D11Buffer* _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br() const {\n-71 return _\b__\bi_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br;\n+_\b7_\b0 ID3D11Buffer *_\bB_\bi_\bn_\bd_\bV_\bB_\bO(ID3D11DeviceContext *deviceContext) {\n+71 return _\bB_\bi_\bn_\bd_\bD_\b3_\bD_\b1_\b1_\bB_\bu_\bf_\bf_\be_\br(deviceContext);\n 72 }\n 73\n-_\b7_\b5 ID3D11ShaderResourceView* _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bS_\bR_\bV() const {\n-76 return _\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br_\bS_\bR_\bV;\n-77 }\n-78\n-79protected:\n-80 // allocate buffers from patchTable\n-_\b8_\b1 bool _\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *farPatchTable,\n-82 ID3D11DeviceContext *deviceContext);\n+_\b7_\b5 ID3D11UnorderedAccessView *_\bB_\bi_\bn_\bd_\bD_\b3_\bD_\b1_\b1_\bU_\bA_\bV(ID3D11DeviceContext *deviceContext);\n+76\n+77protected:\n+_\b7_\b9 _\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(int numElements, int numVertices);\n+80\n+81 // Allocates D3D11 buffer\n+_\b8_\b2 bool _\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be(ID3D11Device *device);\n 83\n-_\b8_\b4 _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br _\b__\bp_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs;\n-85\n-_\b8_\b6 ID3D11Buffer *_\b__\bi_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br;\n-_\b8_\b7 ID3D11Buffer *_\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br;\n-_\b8_\b8 ID3D11ShaderResourceView *_\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br_\bS_\bR_\bV;\n-89};\n-90\n+84private:\n+85 int _numElements;\n+86 int _numVertices;\n+87 ID3D11Buffer *_buffer;\n+88 ID3D11Buffer *_uploadBuffer;\n+89 ID3D11UnorderedAccessView *_uav;\n+90};\n 91\n 92} // end namespace Osd\n 93\n 94} // end namespace OPENSUBDIV_VERSION\n 95using namespace OPENSUBDIV_VERSION;\n 96\n 97} // end namespace OpenSubdiv\n 98\n-99#endif // OPENSUBDIV3_OSD_GL_PATCH_TABLE_H\n+99#endif // OPENSUBDIV3_OSD_D3D11_VERTEX_BUFFER_H\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< PatchArray > PatchArrayVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b1_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-Container for arrays of parametric patches.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b4_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static D3D11PatchTable * Create(Far::PatchTable const *farPatchTable,\n-DEVICE_CONTEXT context)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n-PatchArrayVector const & GetPatchArrays() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be\n-bool allocate(Far::PatchTable const *farPatchTable, ID3D11DeviceContext\n-*deviceContext)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bB_\bi_\bn_\bd_\bi_\bn_\bg\n-ID3D11Buffer * VertexBufferBinding\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b~_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-~D3D11PatchTable()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-ID3D11Buffer * GetPatchIndexBuffer() const\n-Returns the index buffer containing the patch control vertices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bp_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n-PatchArrayVector _patchArrays\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bi_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-ID3D11Buffer * _indexBuffer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static D3D11PatchTable * Create(Far::PatchTable const *farPatchTable,\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+Concrete vertex buffer class for DirectX subdivision and DirectX drawing.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh_\b:_\b4_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n+int GetNumElements() const\n+Returns how many elements defined in this vertex buffer.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba\n+void UpdateData(const float *src, int startVertex, int numVertices,\n ID3D11DeviceContext *deviceContext)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br_\bS_\bR_\bV\n-ID3D11ShaderResourceView * _patchParamBufferSRV\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br\n-ID3D11Buffer * _patchParamBuffer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bS_\bR_\bV\n-ID3D11ShaderResourceView * GetPatchParamSRV() const\n-Returns the SRV containing the patch parameter.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-D3D11PatchTable()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static D3D11VertexBuffer * Create(int numElements, int numVertices,\n+ID3D11DeviceContext *deviceContext)\n+Creator. Returns NULL if error.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+D3D11VertexBuffer(int numElements, int numVertices)\n+Constructor.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+int GetNumVertices() const\n+Returns how many vertices allocated in this vertex buffer.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bB_\bi_\bn_\bd_\bD_\b3_\bD_\b1_\b1_\bB_\bu_\bf_\bf_\be_\br\n+ID3D11Buffer * BindD3D11Buffer(ID3D11DeviceContext *deviceContext)\n+Returns the D3D11 buffer object.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\b~_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+virtual ~D3D11VertexBuffer()\n+Destructor.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bB_\bi_\bn_\bd_\bD_\b3_\bD_\b1_\b1_\bU_\bA_\bV\n+ID3D11UnorderedAccessView * BindD3D11UAV(ID3D11DeviceContext *deviceContext)\n+Returns the D3D11 UAV.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be\n+bool allocate(ID3D11Device *device)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bB_\bi_\bn_\bd_\bV_\bB_\bO\n+ID3D11Buffer * BindVBO(ID3D11DeviceContext *deviceContext)\n+Returns the D3D11 buffer object (for Osd::Mesh interface)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh_\b:_\b7_\b0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n+ * _\bd_\b3_\bd_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00836.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00836.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/d3d11VertexBuffer.h File Reference\n+OpenSubdiv: opensubdiv/osd/d3d11PatchTable.h File Reference\n \n \n \n \n \n \n \n@@ -90,40 +90,45 @@\n \n \n \n
    \n \n-
    d3d11VertexBuffer.h File Reference
    \n+
    d3d11PatchTable.h File Reference
    \n
    \n
    \n
    #include "../version.h"
    \n+#include <vector>
    \n+#include "../far/patchDescriptor.h"
    \n+#include "../osd/nonCopyable.h"
    \n+#include "../osd/types.h"
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n \n

    \n Classes

    class  D3D11VertexBuffer
     Concrete vertex buffer class for DirectX subdivision and DirectX drawing. More...
    class  D3D11PatchTable
     
    \n \n \n \n \n \n+\n+\n \n \n

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Far
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
     
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,24 +1,28 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-d3d11VertexBuffer.h File Reference\n+d3d11PatchTable.h File Reference\n #include \"../version.h\"\n+#include \n+#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\"\n+#include \"../osd/nonCopyable.h\"\n+#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-\u00a0 Concrete vertex buffer class for DirectX subdivision and DirectX\n- drawing. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n+namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br\n+\u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bd_\b3_\bd_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\n+ * _\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00836.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00836.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00836 = [\n- [\"D3D11VertexBuffer\", \"a01205.html\", \"a01205\"]\n+ [\"D3D11PatchTable\", \"a01201.html\", \"a01201\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00836_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00836_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/d3d11VertexBuffer.h Source File\n+OpenSubdiv: opensubdiv/osd/d3d11PatchTable.h Source File\n \n \n \n \n \n \n \n@@ -92,19 +92,19 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    d3d11VertexBuffer.h
    \n+
    d3d11PatchTable.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n-
    2// Copyright 2013 Pixar
    \n+
    2// Copyright 2015 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n
    6// compliance with the Apache License and the following modification to it:
    \n
    7// Section 6. Trademarks. is deleted and replaced with:
    \n
    8//
    \n
    9// 6. Trademarks. This License does not grant permission to use the trade
    \n@@ -119,93 +119,118 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_D3D11_VERTEX_BUFFER_H
    \n-
    26#define OPENSUBDIV3_OSD_D3D11_VERTEX_BUFFER_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_GL_PATCH_TABLE_H
    \n+
    26#define OPENSUBDIV3_OSD_GL_PATCH_TABLE_H
    \n
    27
    \n
    28#include "../version.h"
    \n
    29
    \n-
    30struct ID3D11Buffer;
    \n-
    31struct ID3D11Device;
    \n-
    32struct ID3D11DeviceContext;
    \n-
    33struct ID3D11UnorderedAccessView;
    \n+
    30#include <vector>
    \n+
    31#include "../far/patchDescriptor.h"
    \n+
    32#include "../osd/nonCopyable.h"
    \n+
    33#include "../osd/types.h"
    \n
    34
    \n-
    35namespace OpenSubdiv {
    \n-
    36namespace OPENSUBDIV_VERSION {
    \n-
    37
    \n-
    38namespace Osd {
    \n+
    35struct ID3D11Buffer;
    \n+
    36struct ID3D11ShaderResourceView;
    \n+
    37struct ID3D11Device;
    \n+
    38struct ID3D11DeviceContext;
    \n
    39
    \n-
    \n-\n-
    47public:
    \n-
    49 static D3D11VertexBuffer * Create(int numElements, int numVertices,
    \n-
    50 ID3D11DeviceContext *deviceContext);
    \n-
    51
    \n-\n-
    54
    \n-
    57 void UpdateData(const float *src, int startVertex, int numVertices,
    \n-
    58 ID3D11DeviceContext *deviceContext);
    \n-
    59
    \n-
    61 int GetNumElements() const;
    \n-
    62
    \n-
    64 int GetNumVertices() const;
    \n-
    65
    \n-
    67 ID3D11Buffer *BindD3D11Buffer(ID3D11DeviceContext *deviceContext);
    \n+
    40namespace OpenSubdiv {
    \n+
    41namespace OPENSUBDIV_VERSION {
    \n+
    42
    \n+
    43namespace Far{
    \n+
    44 class PatchTable;
    \n+
    45};
    \n+
    46
    \n+
    47namespace Osd {
    \n+
    48
    \n+
    \n+
    49class D3D11PatchTable : private NonCopyable<D3D11PatchTable> {
    \n+
    50public:
    \n+
    51 typedef ID3D11Buffer * VertexBufferBinding;
    \n+
    52
    \n+\n+\n+
    55
    \n+
    56 template<typename DEVICE_CONTEXT>
    \n+
    \n+
    57 static D3D11PatchTable *Create(Far::PatchTable const *farPatchTable,
    \n+
    58 DEVICE_CONTEXT context) {
    \n+
    59 return Create(farPatchTable, context->GetDeviceContext());
    \n+
    60 }
    \n+
    \n+
    61
    \n+
    62 static D3D11PatchTable *Create(Far::PatchTable const *farPatchTable,
    \n+
    63 ID3D11DeviceContext *deviceContext);
    \n+
    64
    \n+
    \n+\n+
    66 return _patchArrays;
    \n+
    67 }
    \n+
    \n
    68
    \n
    \n-
    70 ID3D11Buffer *BindVBO(ID3D11DeviceContext *deviceContext) {
    \n-
    71 return BindD3D11Buffer(deviceContext);
    \n+
    70 ID3D11Buffer* GetPatchIndexBuffer() const {
    \n+
    71 return _indexBuffer;
    \n
    72 }
    \n
    \n
    73
    \n-
    75 ID3D11UnorderedAccessView *BindD3D11UAV(ID3D11DeviceContext *deviceContext);
    \n-
    76
    \n-
    77protected:
    \n-
    79 D3D11VertexBuffer(int numElements, int numVertices);
    \n-
    80
    \n-
    81 // Allocates D3D11 buffer
    \n-
    82 bool allocate(ID3D11Device *device);
    \n+
    \n+
    75 ID3D11ShaderResourceView* GetPatchParamSRV() const {
    \n+\n+
    77 }
    \n+
    \n+
    78
    \n+
    79protected:
    \n+
    80 // allocate buffers from patchTable
    \n+
    81 bool allocate(Far::PatchTable const *farPatchTable,
    \n+
    82 ID3D11DeviceContext *deviceContext);
    \n
    83
    \n-
    84private:
    \n-
    85 int _numElements;
    \n-
    86 int _numVertices;
    \n-
    87 ID3D11Buffer *_buffer;
    \n-
    88 ID3D11Buffer *_uploadBuffer;
    \n-
    89 ID3D11UnorderedAccessView *_uav;
    \n-
    90};
    \n+\n+
    85
    \n+
    86 ID3D11Buffer *_indexBuffer;
    \n+
    87 ID3D11Buffer *_patchParamBuffer;
    \n+
    88 ID3D11ShaderResourceView *_patchParamBufferSRV;
    \n+
    89};
    \n
    \n+
    90
    \n
    91
    \n
    92} // end namespace Osd
    \n
    93
    \n
    94} // end namespace OPENSUBDIV_VERSION
    \n
    95using namespace OPENSUBDIV_VERSION;
    \n
    96
    \n
    97} // end namespace OpenSubdiv
    \n
    98
    \n-
    99#endif // OPENSUBDIV3_OSD_D3D11_VERTEX_BUFFER_H
    \n-\n-
    Concrete vertex buffer class for DirectX subdivision and DirectX drawing.
    \n-
    int GetNumElements() const
    Returns how many elements defined in this vertex buffer.
    \n-
    void UpdateData(const float *src, int startVertex, int numVertices, ID3D11DeviceContext *deviceContext)
    \n-
    static D3D11VertexBuffer * Create(int numElements, int numVertices, ID3D11DeviceContext *deviceContext)
    Creator. Returns NULL if error.
    \n-
    D3D11VertexBuffer(int numElements, int numVertices)
    Constructor.
    \n-
    int GetNumVertices() const
    Returns how many vertices allocated in this vertex buffer.
    \n-
    ID3D11Buffer * BindD3D11Buffer(ID3D11DeviceContext *deviceContext)
    Returns the D3D11 buffer object.
    \n-\n-
    ID3D11UnorderedAccessView * BindD3D11UAV(ID3D11DeviceContext *deviceContext)
    Returns the D3D11 UAV.
    \n-\n-
    ID3D11Buffer * BindVBO(ID3D11DeviceContext *deviceContext)
    Returns the D3D11 buffer object (for Osd::Mesh interface)
    \n+
    99#endif // OPENSUBDIV3_OSD_GL_PATCH_TABLE_H
    \n+\n+
    std::vector< PatchArray > PatchArrayVector
    Definition types.h:132
    \n+
    Container for arrays of parametric patches.
    Definition patchTable.h:55
    \n+\n+
    static D3D11PatchTable * Create(Far::PatchTable const *farPatchTable, DEVICE_CONTEXT context)
    \n+\n+
    bool allocate(Far::PatchTable const *farPatchTable, ID3D11DeviceContext *deviceContext)
    \n+\n+\n+
    ID3D11Buffer * GetPatchIndexBuffer() const
    Returns the index buffer containing the patch control vertices.
    \n+\n+\n+
    static D3D11PatchTable * Create(Far::PatchTable const *farPatchTable, ID3D11DeviceContext *deviceContext)
    \n+\n+\n+
    ID3D11ShaderResourceView * GetPatchParamSRV() const
    Returns the SRV containing the patch parameter.
    \n+\n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,15 +1,15 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-d3d11VertexBuffer.h\n+d3d11PatchTable.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n-2// Copyright 2013 Pixar\n+2// Copyright 2015 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n 7// Section 6. Trademarks. is deleted and replaced with:\n 8//\n 9// 6. Trademarks. This License does not grant permission to use the trade\n@@ -24,106 +24,134 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_D3D11_VERTEX_BUFFER_H\n-26#define OPENSUBDIV3_OSD_D3D11_VERTEX_BUFFER_H\n+25#ifndef OPENSUBDIV3_OSD_GL_PATCH_TABLE_H\n+26#define OPENSUBDIV3_OSD_GL_PATCH_TABLE_H\n 27\n 28#include \"../version.h\"\n 29\n-30struct ID3D11Buffer;\n-31struct ID3D11Device;\n-32struct ID3D11DeviceContext;\n-33struct ID3D11UnorderedAccessView;\n+30#include \n+31#include \"../far/patchDescriptor.h\"\n+32#include \"../osd/nonCopyable.h\"\n+33#include \"../osd/types.h\"\n 34\n-35namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-36namespace OPENSUBDIV_VERSION {\n-37\n-38namespace Osd {\n+35struct ID3D11Buffer;\n+36struct ID3D11ShaderResourceView;\n+37struct ID3D11Device;\n+38struct ID3D11DeviceContext;\n 39\n-_\b4_\b6class _\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br {\n-47public:\n-_\b4_\b9 static _\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br * _\bC_\br_\be_\ba_\bt_\be(int numElements, int numVertices,\n-50 ID3D11DeviceContext *deviceContext);\n-51\n-_\b5_\b3 virtual _\b~_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br();\n-54\n-_\b5_\b7 void _\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba(const float *src, int startVertex, int numVertices,\n-58 ID3D11DeviceContext *deviceContext);\n-59\n-_\b6_\b1 int _\bG_\be_\bt_\bN_\bu_\bm_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs() const;\n-62\n-_\b6_\b4 int _\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const;\n-65\n-_\b6_\b7 ID3D11Buffer *_\bB_\bi_\bn_\bd_\bD_\b3_\bD_\b1_\b1_\bB_\bu_\bf_\bf_\be_\br(ID3D11DeviceContext *deviceContext);\n+40namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+41namespace OPENSUBDIV_VERSION {\n+42\n+43namespace Far{\n+44 class PatchTable;\n+45};\n+46\n+47namespace Osd {\n+48\n+_\b4_\b9class _\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be : private NonCopyable {\n+50public:\n+_\b5_\b1 typedef ID3D11Buffer * _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bB_\bi_\bn_\bd_\bi_\bn_\bg;\n+52\n+_\b5_\b3 _\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be();\n+_\b5_\b4 _\b~_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be();\n+55\n+56 template\n+_\b5_\b7 static _\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be *_\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *farPatchTable,\n+58 DEVICE_CONTEXT context) {\n+59 return _\bC_\br_\be_\ba_\bt_\be(farPatchTable, context->GetDeviceContext());\n+60 }\n+61\n+_\b6_\b2 static _\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be *_\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *farPatchTable,\n+63 ID3D11DeviceContext *deviceContext);\n+64\n+_\b6_\b5 _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br const &_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs() const {\n+66 return _\b__\bp_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs;\n+67 }\n 68\n-_\b7_\b0 ID3D11Buffer *_\bB_\bi_\bn_\bd_\bV_\bB_\bO(ID3D11DeviceContext *deviceContext) {\n-71 return _\bB_\bi_\bn_\bd_\bD_\b3_\bD_\b1_\b1_\bB_\bu_\bf_\bf_\be_\br(deviceContext);\n+_\b7_\b0 ID3D11Buffer* _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br() const {\n+71 return _\b__\bi_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br;\n 72 }\n 73\n-_\b7_\b5 ID3D11UnorderedAccessView *_\bB_\bi_\bn_\bd_\bD_\b3_\bD_\b1_\b1_\bU_\bA_\bV(ID3D11DeviceContext *deviceContext);\n-76\n-77protected:\n-_\b7_\b9 _\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(int numElements, int numVertices);\n-80\n-81 // Allocates D3D11 buffer\n-_\b8_\b2 bool _\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be(ID3D11Device *device);\n+_\b7_\b5 ID3D11ShaderResourceView* _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bS_\bR_\bV() const {\n+76 return _\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br_\bS_\bR_\bV;\n+77 }\n+78\n+79protected:\n+80 // allocate buffers from patchTable\n+_\b8_\b1 bool _\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *farPatchTable,\n+82 ID3D11DeviceContext *deviceContext);\n 83\n-84private:\n-85 int _numElements;\n-86 int _numVertices;\n-87 ID3D11Buffer *_buffer;\n-88 ID3D11Buffer *_uploadBuffer;\n-89 ID3D11UnorderedAccessView *_uav;\n-90};\n+_\b8_\b4 _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br _\b__\bp_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs;\n+85\n+_\b8_\b6 ID3D11Buffer *_\b__\bi_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br;\n+_\b8_\b7 ID3D11Buffer *_\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br;\n+_\b8_\b8 ID3D11ShaderResourceView *_\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br_\bS_\bR_\bV;\n+89};\n+90\n 91\n 92} // end namespace Osd\n 93\n 94} // end namespace OPENSUBDIV_VERSION\n 95using namespace OPENSUBDIV_VERSION;\n 96\n 97} // end namespace OpenSubdiv\n 98\n-99#endif // OPENSUBDIV3_OSD_D3D11_VERTEX_BUFFER_H\n+99#endif // OPENSUBDIV3_OSD_GL_PATCH_TABLE_H\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-Concrete vertex buffer class for DirectX subdivision and DirectX drawing.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh_\b:_\b4_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n-int GetNumElements() const\n-Returns how many elements defined in this vertex buffer.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba\n-void UpdateData(const float *src, int startVertex, int numVertices,\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< PatchArray > PatchArrayVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b1_\b3_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+Container for arrays of parametric patches.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b4_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static D3D11PatchTable * Create(Far::PatchTable const *farPatchTable,\n+DEVICE_CONTEXT context)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n+PatchArrayVector const & GetPatchArrays() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be\n+bool allocate(Far::PatchTable const *farPatchTable, ID3D11DeviceContext\n+*deviceContext)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bB_\bi_\bn_\bd_\bi_\bn_\bg\n+ID3D11Buffer * VertexBufferBinding\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b~_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+~D3D11PatchTable()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+ID3D11Buffer * GetPatchIndexBuffer() const\n+Returns the index buffer containing the patch control vertices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bp_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bs\n+PatchArrayVector _patchArrays\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bi_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+ID3D11Buffer * _indexBuffer\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static D3D11PatchTable * Create(Far::PatchTable const *farPatchTable,\n ID3D11DeviceContext *deviceContext)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static D3D11VertexBuffer * Create(int numElements, int numVertices,\n-ID3D11DeviceContext *deviceContext)\n-Creator. Returns NULL if error.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-D3D11VertexBuffer(int numElements, int numVertices)\n-Constructor.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-int GetNumVertices() const\n-Returns how many vertices allocated in this vertex buffer.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bB_\bi_\bn_\bd_\bD_\b3_\bD_\b1_\b1_\bB_\bu_\bf_\bf_\be_\br\n-ID3D11Buffer * BindD3D11Buffer(ID3D11DeviceContext *deviceContext)\n-Returns the D3D11 buffer object.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\b~_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-virtual ~D3D11VertexBuffer()\n-Destructor.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bB_\bi_\bn_\bd_\bD_\b3_\bD_\b1_\b1_\bU_\bA_\bV\n-ID3D11UnorderedAccessView * BindD3D11UAV(ID3D11DeviceContext *deviceContext)\n-Returns the D3D11 UAV.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be\n-bool allocate(ID3D11Device *device)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bB_\bi_\bn_\bd_\bV_\bB_\bO\n-ID3D11Buffer * BindVBO(ID3D11DeviceContext *deviceContext)\n-Returns the D3D11 buffer object (for Osd::Mesh interface)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh_\b:_\b7_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br_\bS_\bR_\bV\n+ID3D11ShaderResourceView * _patchParamBufferSRV\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b__\bp_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bB_\bu_\bf_\bf_\be_\br\n+ID3D11Buffer * _patchParamBuffer\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b8_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm_\bS_\bR_\bV\n+ID3D11ShaderResourceView * GetPatchParamSRV() const\n+Returns the SRV containing the patch parameter.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+D3D11PatchTable()\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bd_\b3_\bd_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\n+ * _\bd_\b3_\bd_\b1_\b1_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00839.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00839.html", "unified_diff": "@@ -94,15 +94,15 @@\n \n
    d3d11LegacyGregoryPatchTable.h File Reference
    \n \n
    \n
    #include "../version.h"
    \n-#include "../far/patchTable.h"
    \n+#include "../far/patchTable.h"
    \n #include "../osd/nonCopyable.h"
    \n
    \n

    Go to the source code of this file.

    \n \n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00839_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00839_source.html", "unified_diff": "@@ -209,18 +209,18 @@\n
    96
    \n
    97} // end namespace OPENSUBDIV_VERSION
    \n
    98using namespace OPENSUBDIV_VERSION;
    \n
    99
    \n
    100} // end namespace OpenSubdiv
    \n
    101
    \n
    102#endif // OPENSUBDIV3_OSD_D3D11_LEGACY_GREGORY_PATCH_TABLE_H
    \n-\n-\n-\n-
    Container for arrays of parametric patches.
    Definition patchTable.h:55
    \n+\n+\n+\n+
    Container for arrays of parametric patches.
    Definition patchTable.h:55
    \n \n
    void UpdateVertexBuffer(ID3D11Buffer *vbo, int numVertices, int numVertexElements, ID3D11DeviceContext *pd3d11DeviceContext)
    \n \n \n
    static D3D11LegacyGregoryPatchTable * Create(Far::PatchTable const *farPatchTable, ID3D11DeviceContext *deviceContext)
    \n \n
    static D3D11LegacyGregoryPatchTable * Create(Far::PatchTable const *farPatchTable, DEVICE_CONTEXT context)
    \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00842.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00842.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/cpuD3D11VertexBuffer.h File Reference\n+OpenSubdiv: opensubdiv/osd/d3d11ComputeEvaluator.h File Reference\n \n \n \n \n \n \n \n@@ -90,41 +90,45 @@\n \n \n \n
    \n \n-
    cpuD3D11VertexBuffer.h File Reference
    \n+
    d3d11ComputeEvaluator.h File Reference
    \n
    \n
    \n
    #include "../version.h"
    \n-#include <cstddef>
    \n+#include "../osd/bufferDescriptor.h"
    \n
    \n

    Go to the source code of this file.

    \n

    \n Classes

    class  D3D11LegacyGregoryPatchTable
    \n \n-\n-\n+\n+\n+\n+\n \n

    \n Classes

    class  CpuD3D11VertexBuffer
     Concrete vertex buffer class for Cpu subdivision and DirectX drawing. More...
    class  D3D11StencilTable
     D3D11 stencil table. More...
     
    class  D3D11ComputeEvaluator
     
    \n \n \n \n \n \n+\n+\n \n \n

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Far
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
     
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +1,28 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-cpuD3D11VertexBuffer.h File Reference\n+d3d11ComputeEvaluator.h File Reference\n #include \"../version.h\"\n-#include \n+#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bb_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-\u00a0 Concrete vertex buffer class for Cpu subdivision and DirectX drawing.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n+\u00a0 D3D11 stencil table. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n+namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br\n+\u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bc_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\n+ * _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00842.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00842.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a00842 = [\n- [\"CpuD3D11VertexBuffer\", \"a01153.html\", \"a01153\"]\n+ [\"D3D11StencilTable\", \"a01189.html\", \"a01189\"],\n+ [\"D3D11ComputeEvaluator\", \"a01193.html\", \"a01193\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00842_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00842_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/cpuD3D11VertexBuffer.h Source File\n+OpenSubdiv: opensubdiv/osd/d3d11ComputeEvaluator.h Source File\n \n \n \n \n \n \n \n@@ -92,19 +92,19 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    cpuD3D11VertexBuffer.h
    \n+
    d3d11ComputeEvaluator.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n-
    2// Copyright 2013 Pixar
    \n+
    2// Copyright 2015 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n
    6// compliance with the Apache License and the following modification to it:
    \n
    7// Section 6. Trademarks. is deleted and replaced with:
    \n
    8//
    \n
    9// 6. Trademarks. This License does not grant permission to use the trade
    \n@@ -119,91 +119,225 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_CPU_D3D11_VERTEX_BUFFER_H
    \n-
    26#define OPENSUBDIV3_OSD_CPU_D3D11_VERTEX_BUFFER_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_D3D11_COMPUTE_EVALUATOR_H
    \n+
    26#define OPENSUBDIV3_OSD_D3D11_COMPUTE_EVALUATOR_H
    \n
    27
    \n
    28#include "../version.h"
    \n-
    29#include <cstddef>
    \n-
    30
    \n+
    29
    \n+
    30struct ID3D11DeviceContext;
    \n
    31struct ID3D11Buffer;
    \n-
    32struct ID3D11Device;
    \n-
    33struct ID3D11DeviceContext;
    \n-
    34
    \n-
    35namespace OpenSubdiv {
    \n-
    36namespace OPENSUBDIV_VERSION {
    \n+
    32struct ID3D11ComputeShader;
    \n+
    33struct ID3D11ClassLinkage;
    \n+
    34struct ID3D11ClassInstance;
    \n+
    35struct ID3D11ShaderResourceView;
    \n+
    36struct ID3D11UnorderedAccessView;
    \n
    37
    \n-
    38namespace Osd {
    \n+
    38#include "../osd/bufferDescriptor.h"
    \n
    39
    \n-
    \n-\n-
    49public:
    \n-
    51 static CpuD3D11VertexBuffer * Create(int numElements, int numVertices,
    \n-
    52 ID3D11DeviceContext *deviceContext);
    \n-
    53
    \n-\n-
    56
    \n-
    59 void UpdateData(const float *src, int startVertex, int numVertices,
    \n-
    60 void *deviceContext = NULL);
    \n-
    61
    \n-
    63 int GetNumElements() const;
    \n-
    64
    \n-
    66 int GetNumVertices() const;
    \n-
    67
    \n-
    69 float * BindCpuBuffer();
    \n-
    70
    \n-
    72 ID3D11Buffer *BindD3D11Buffer(ID3D11DeviceContext *deviceContext);
    \n+
    40namespace OpenSubdiv {
    \n+
    41namespace OPENSUBDIV_VERSION {
    \n+
    42
    \n+
    43namespace Far {
    \n+
    44 class StencilTable;
    \n+
    45}
    \n+
    46
    \n+
    47namespace Osd {
    \n+
    48
    \n+
    \n+\n+
    57public:
    \n+
    58 template <typename DEVICE_CONTEXT>
    \n+
    \n+
    59 static D3D11StencilTable *Create(Far::StencilTable const *stencilTable,
    \n+
    60 DEVICE_CONTEXT context) {
    \n+
    61 return new D3D11StencilTable(stencilTable, context->GetDeviceContext());
    \n+
    62 }
    \n+
    \n+
    63
    \n+
    \n+
    64 static D3D11StencilTable *Create(Far::StencilTable const *stencilTable,
    \n+
    65 ID3D11DeviceContext *deviceContext) {
    \n+
    66 return new D3D11StencilTable(stencilTable, deviceContext);
    \n+
    67 }
    \n+
    \n+
    68
    \n+\n+
    70 ID3D11DeviceContext *deviceContext);
    \n+
    71
    \n+\n
    73
    \n-
    \n-
    75 ID3D11Buffer *BindVBO(ID3D11DeviceContext *deviceContext) {
    \n-
    76 return BindD3D11Buffer(deviceContext);
    \n-
    77 }
    \n-
    \n-
    78
    \n-
    79protected:
    \n-
    81 CpuD3D11VertexBuffer(int numElements, int numVertices);
    \n-
    82
    \n-
    83 bool allocate(ID3D11Device *device);
    \n-
    84
    \n-
    85private:
    \n-
    86 int _numElements;
    \n-
    87 int _numVertices;
    \n-
    88 ID3D11Buffer *_d3d11Buffer;
    \n-
    89 float *_cpuBuffer;
    \n-
    90};
    \n+
    74 // interfaces needed for D3D11ComputeEvaluator
    \n+
    75 ID3D11ShaderResourceView *GetSizesSRV() const { return _sizes; }
    \n+
    76 ID3D11ShaderResourceView *GetOffsetsSRV() const { return _offsets; }
    \n+
    77 ID3D11ShaderResourceView *GetIndicesSRV() const { return _indices; }
    \n+
    78 ID3D11ShaderResourceView *GetWeightsSRV() const { return _weights; }
    \n+
    79 int GetNumStencils() const { return _numStencils; }
    \n+
    80
    \n+
    81private:
    \n+
    82 ID3D11ShaderResourceView *_sizes;
    \n+
    83 ID3D11ShaderResourceView *_offsets;
    \n+
    84 ID3D11ShaderResourceView *_indices;
    \n+
    85 ID3D11ShaderResourceView *_weights;
    \n+
    86 ID3D11Buffer *_sizesBuffer;
    \n+
    87 ID3D11Buffer *_offsetsBuffer;
    \n+
    88 ID3D11Buffer *_indicesBuffer;
    \n+
    89 ID3D11Buffer *_weightsBuffer;
    \n+
    90
    \n+
    91 int _numStencils;
    \n+
    92};
    \n
    \n-
    91
    \n-
    92} // end namespace Osd
    \n
    93
    \n-
    94} // end namespace OPENSUBDIV_VERSION
    \n-
    95using namespace OPENSUBDIV_VERSION;
    \n-
    96
    \n-
    97} // end namespace OpenSubdiv
    \n-
    98
    \n-
    99#endif // OPENSUBDIV3_OSD_CPU_D3D11_VERTEX_BUFFER_H
    \n-\n-
    Concrete vertex buffer class for Cpu subdivision and DirectX drawing.
    \n-
    static CpuD3D11VertexBuffer * Create(int numElements, int numVertices, ID3D11DeviceContext *deviceContext)
    Creator. Returns NULL if error.
    \n-
    CpuD3D11VertexBuffer(int numElements, int numVertices)
    Constructor.
    \n-
    int GetNumElements() const
    Returns how many elements defined in this vertex buffer.
    \n-
    void UpdateData(const float *src, int startVertex, int numVertices, void *deviceContext=NULL)
    \n-
    int GetNumVertices() const
    Returns how many vertices allocated in this vertex buffer.
    \n-
    ID3D11Buffer * BindD3D11Buffer(ID3D11DeviceContext *deviceContext)
    Returns the D3D11 buffer object.
    \n-
    float * BindCpuBuffer()
    Returns the address of CPU buffer.
    \n-\n-\n-
    ID3D11Buffer * BindVBO(ID3D11DeviceContext *deviceContext)
    Returns the D3D11 buffer object (for Osd::Mesh interface)
    \n+
    94// ---------------------------------------------------------------------------
    \n+
    95
    \n+
    \n+\n+
    97public:
    \n+
    98 typedef bool Instantiatable;
    \n+\n+
    100 BufferDescriptor const &dstDesc,
    \n+
    101 BufferDescriptor const &duDesc,
    \n+
    102 BufferDescriptor const &dvDesc,
    \n+
    103 ID3D11DeviceContext *deviceContext);
    \n+
    104
    \n+\n+
    106 BufferDescriptor const &dstDesc,
    \n+
    107 BufferDescriptor const &duDesc,
    \n+
    108 BufferDescriptor const &dvDesc,
    \n+
    109 BufferDescriptor const &duuDesc,
    \n+
    110 BufferDescriptor const &duvDesc,
    \n+
    111 BufferDescriptor const &dvvDesc,
    \n+
    112 ID3D11DeviceContext *deviceContext);
    \n+
    113
    \n+\n+
    116
    \n+\n+
    119
    \n+
    147 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n+
    \n+
    148 static bool EvalStencils(
    \n+
    149 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    150 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    151 STENCIL_TABLE const *stencilTable,
    \n+
    152 D3D11ComputeEvaluator const *instance,
    \n+
    153 ID3D11DeviceContext * deviceContext) {
    \n+
    154 if (instance) {
    \n+
    155 return instance->EvalStencils(srcBuffer, srcDesc,
    \n+
    156 dstBuffer, dstDesc,
    \n+
    157 stencilTable,
    \n+
    158 deviceContext);
    \n+
    159 } else {
    \n+
    160 // Create an instance on demand (slow)
    \n+
    161 (void)deviceContext; // unused
    \n+
    162 instance = Create(srcDesc, dstDesc,
    \n+\n+\n+
    165 deviceContext);
    \n+
    166 if (instance) {
    \n+
    167 bool r = instance->EvalStencils(srcBuffer, srcDesc,
    \n+
    168 dstBuffer, dstDesc,
    \n+
    169 stencilTable,
    \n+
    170 deviceContext);
    \n+
    171 delete instance;
    \n+
    172 return r;
    \n+
    173 }
    \n+
    174 return false;
    \n+
    175 }
    \n+
    176 }
    \n+
    \n+
    177
    \n+
    180 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n+
    \n+\n+
    182 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    183 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    184 STENCIL_TABLE const *stencilTable,
    \n+
    185 ID3D11DeviceContext *deviceContext) const {
    \n+
    186 return EvalStencils(srcBuffer->BindD3D11UAV(deviceContext), srcDesc,
    \n+
    187 dstBuffer->BindD3D11UAV(deviceContext), dstDesc,
    \n+
    188 stencilTable->GetSizesSRV(),
    \n+
    189 stencilTable->GetOffsetsSRV(),
    \n+
    190 stencilTable->GetIndicesSRV(),
    \n+
    191 stencilTable->GetWeightsSRV(),
    \n+
    192 /* start = */ 0,
    \n+
    193 /* end = */ stencilTable->GetNumStencils(),
    \n+
    194 deviceContext);
    \n+
    195 }
    \n+
    \n+
    196
    \n+
    199 bool EvalStencils(ID3D11UnorderedAccessView *srcSRV,
    \n+
    200 BufferDescriptor const &srcDesc,
    \n+
    201 ID3D11UnorderedAccessView *dstUAV,
    \n+
    202 BufferDescriptor const &dstDesc,
    \n+
    203 ID3D11ShaderResourceView *sizesSRV,
    \n+
    204 ID3D11ShaderResourceView *offsetsSRV,
    \n+
    205 ID3D11ShaderResourceView *indicesSRV,
    \n+
    206 ID3D11ShaderResourceView *weightsSRV,
    \n+
    207 int start,
    \n+
    208 int end,
    \n+
    209 ID3D11DeviceContext *deviceContext) const;
    \n+
    210
    \n+
    212 bool Compile(BufferDescriptor const &srcDesc,
    \n+
    213 BufferDescriptor const &dstDesc,
    \n+
    214 ID3D11DeviceContext *deviceContext);
    \n+
    215
    \n+
    217 static void Synchronize(ID3D11DeviceContext *deviceContext);
    \n+
    218
    \n+
    219private:
    \n+
    220 ID3D11ComputeShader * _computeShader;
    \n+
    221 ID3D11ClassLinkage * _classLinkage;
    \n+
    222 ID3D11ClassInstance * _singleBufferKernel;
    \n+
    223 ID3D11ClassInstance * _separateBufferKernel;
    \n+
    224 ID3D11Buffer * _uniformArgs; // uniform parameters for kernels
    \n+
    225
    \n+
    226 int _workGroupSize;
    \n+
    227};
    \n+
    \n+
    228
    \n+
    229} // end namespace Osd
    \n+
    230
    \n+
    231} // end namespace OPENSUBDIV_VERSION
    \n+
    232using namespace OPENSUBDIV_VERSION;
    \n+
    233
    \n+
    234} // end namespace OpenSubdiv
    \n+
    235
    \n+
    236
    \n+
    237#endif // OPENSUBDIV3_OSD_D3D11_COMPUTE_EVALUATOR_H
    \n+\n+
    Stencil table class wrapping the template for compatibility.
    \n+
    BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
    \n+\n+
    static D3D11StencilTable * Create(Far::StencilTable const *stencilTable, DEVICE_CONTEXT context)
    \n+\n+\n+\n+\n+
    D3D11StencilTable(Far::StencilTable const *stencilTable, ID3D11DeviceContext *deviceContext)
    \n+
    static D3D11StencilTable * Create(Far::StencilTable const *stencilTable, ID3D11DeviceContext *deviceContext)
    \n+\n+\n+\n+
    static D3D11ComputeEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, ID3D11DeviceContext *deviceContext)
    \n+
    static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, D3D11ComputeEvaluator const *instance, ID3D11DeviceContext *deviceContext)
    Generic static compute function. This function has a same signature as other device kernels have so t...
    \n+
    static D3D11ComputeEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, ID3D11DeviceContext *deviceContext)
    \n+\n+
    static void Synchronize(ID3D11DeviceContext *deviceContext)
    Wait the dispatched kernel finishes.
    \n+
    bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, ID3D11DeviceContext *deviceContext) const
    \n+
    bool Compile(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, ID3D11DeviceContext *deviceContext)
    Configure DX kernel. Returns false if it fails to compile the kernel.
    \n+\n+\n+
    bool EvalStencils(ID3D11UnorderedAccessView *srcSRV, BufferDescriptor const &srcDesc, ID3D11UnorderedAccessView *dstUAV, BufferDescriptor const &dstDesc, ID3D11ShaderResourceView *sizesSRV, ID3D11ShaderResourceView *offsetsSRV, ID3D11ShaderResourceView *indicesSRV, ID3D11ShaderResourceView *weightsSRV, int start, int end, ID3D11DeviceContext *deviceContext) const
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,15 +1,15 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-cpuD3D11VertexBuffer.h\n+d3d11ComputeEvaluator.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n-2// Copyright 2013 Pixar\n+2// Copyright 2015 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n 7// Section 6. Trademarks. is deleted and replaced with:\n 8//\n 9// 6. Trademarks. This License does not grant permission to use the trade\n@@ -24,105 +24,272 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_CPU_D3D11_VERTEX_BUFFER_H\n-26#define OPENSUBDIV3_OSD_CPU_D3D11_VERTEX_BUFFER_H\n+25#ifndef OPENSUBDIV3_OSD_D3D11_COMPUTE_EVALUATOR_H\n+26#define OPENSUBDIV3_OSD_D3D11_COMPUTE_EVALUATOR_H\n 27\n 28#include \"../version.h\"\n-29#include \n-30\n+29\n+30struct ID3D11DeviceContext;\n 31struct ID3D11Buffer;\n-32struct ID3D11Device;\n-33struct ID3D11DeviceContext;\n-34\n-35namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-36namespace OPENSUBDIV_VERSION {\n+32struct ID3D11ComputeShader;\n+33struct ID3D11ClassLinkage;\n+34struct ID3D11ClassInstance;\n+35struct ID3D11ShaderResourceView;\n+36struct ID3D11UnorderedAccessView;\n 37\n-38namespace Osd {\n+38#include \"../osd/bufferDescriptor.h\"\n 39\n-_\b4_\b8class _\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br {\n-49public:\n-_\b5_\b1 static _\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br * _\bC_\br_\be_\ba_\bt_\be(int numElements, int numVertices,\n-52 ID3D11DeviceContext *deviceContext);\n-53\n-_\b5_\b5 virtual _\b~_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br();\n-56\n-_\b5_\b9 void _\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba(const float *src, int startVertex, int numVertices,\n-60 void *deviceContext = NULL);\n-61\n-_\b6_\b3 int _\bG_\be_\bt_\bN_\bu_\bm_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs() const;\n-64\n-_\b6_\b6 int _\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const;\n-67\n-_\b6_\b9 float * _\bB_\bi_\bn_\bd_\bC_\bp_\bu_\bB_\bu_\bf_\bf_\be_\br();\n-70\n-_\b7_\b2 ID3D11Buffer *_\bB_\bi_\bn_\bd_\bD_\b3_\bD_\b1_\b1_\bB_\bu_\bf_\bf_\be_\br(ID3D11DeviceContext *deviceContext);\n+40namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+41namespace OPENSUBDIV_VERSION {\n+42\n+43namespace Far {\n+44 class StencilTable;\n+45}\n+46\n+47namespace Osd {\n+48\n+_\b5_\b6class _\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be {\n+57public:\n+58 template \n+_\b5_\b9 static _\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be *_\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *stencilTable,\n+60 DEVICE_CONTEXT context) {\n+61 return new _\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(stencilTable, context->GetDeviceContext());\n+62 }\n+63\n+_\b6_\b4 static _\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be *_\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *stencilTable,\n+65 ID3D11DeviceContext *deviceContext) {\n+66 return new _\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(stencilTable, deviceContext);\n+67 }\n+68\n+_\b6_\b9 _\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *stencilTable,\n+70 ID3D11DeviceContext *deviceContext);\n+71\n+_\b7_\b2 _\b~_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be();\n 73\n-_\b7_\b5 ID3D11Buffer *_\bB_\bi_\bn_\bd_\bV_\bB_\bO(ID3D11DeviceContext *deviceContext) {\n-76 return _\bB_\bi_\bn_\bd_\bD_\b3_\bD_\b1_\b1_\bB_\bu_\bf_\bf_\be_\br(deviceContext);\n-77 }\n-78\n-79protected:\n-_\b8_\b1 _\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(int numElements, int numVertices);\n-82\n-_\b8_\b3 bool _\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be(ID3D11Device *device);\n-84\n-85private:\n-86 int _numElements;\n-87 int _numVertices;\n-88 ID3D11Buffer *_d3d11Buffer;\n-89 float *_cpuBuffer;\n-90};\n-91\n-92} // end namespace Osd\n+74 // interfaces needed for D3D11ComputeEvaluator\n+_\b7_\b5 ID3D11ShaderResourceView *_\bG_\be_\bt_\bS_\bi_\bz_\be_\bs_\bS_\bR_\bV() const { return _sizes; }\n+_\b7_\b6 ID3D11ShaderResourceView *_\bG_\be_\bt_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bS_\bR_\bV() const { return _offsets; }\n+_\b7_\b7 ID3D11ShaderResourceView *_\bG_\be_\bt_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bS_\bR_\bV() const { return _indices; }\n+_\b7_\b8 ID3D11ShaderResourceView *_\bG_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bS_\bR_\bV() const { return _weights; }\n+_\b7_\b9 int _\bG_\be_\bt_\bN_\bu_\bm_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs() const { return _numStencils; }\n+80\n+81private:\n+82 ID3D11ShaderResourceView *_sizes;\n+83 ID3D11ShaderResourceView *_offsets;\n+84 ID3D11ShaderResourceView *_indices;\n+85 ID3D11ShaderResourceView *_weights;\n+86 ID3D11Buffer *_sizesBuffer;\n+87 ID3D11Buffer *_offsetsBuffer;\n+88 ID3D11Buffer *_indicesBuffer;\n+89 ID3D11Buffer *_weightsBuffer;\n+90\n+91 int _numStencils;\n+92};\n 93\n-94} // end namespace OPENSUBDIV_VERSION\n-95using namespace OPENSUBDIV_VERSION;\n-96\n-97} // end namespace OpenSubdiv\n-98\n-99#endif // OPENSUBDIV3_OSD_CPU_D3D11_VERTEX_BUFFER_H\n+94// --------------------------------------------------------------------------\n+-\n+95\n+_\b9_\b6class _\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br {\n+97public:\n+_\b9_\b8 typedef bool _\bI_\bn_\bs_\bt_\ba_\bn_\bt_\bi_\ba_\bt_\ba_\bb_\bl_\be;\n+_\b9_\b9 static _\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br * _\bC_\br_\be_\ba_\bt_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+100 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+101 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+102 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+103 ID3D11DeviceContext *deviceContext);\n+104\n+_\b1_\b0_\b5 static _\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br * _\bC_\br_\be_\ba_\bt_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+106 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+107 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+108 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+109 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+110 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+111 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+112 ID3D11DeviceContext *deviceContext);\n+113\n+_\b1_\b1_\b5 _\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br();\n+116\n+_\b1_\b1_\b8 _\b~_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br();\n+119\n+147 template \n+_\b1_\b4_\b8 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n+149 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+150 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+151 STENCIL_TABLE const *stencilTable,\n+152 _\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+153 ID3D11DeviceContext * deviceContext) {\n+154 if (instance) {\n+155 return instance->_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer, srcDesc,\n+156 dstBuffer, dstDesc,\n+157 stencilTable,\n+158 deviceContext);\n+159 } else {\n+160 // Create an instance on demand (slow)\n+161 (void)deviceContext; // unused\n+162 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n+163 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+164 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+165 deviceContext);\n+166 if (instance) {\n+167 bool r = instance->_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer, srcDesc,\n+168 dstBuffer, dstDesc,\n+169 stencilTable,\n+170 deviceContext);\n+171 delete instance;\n+172 return r;\n+173 }\n+174 return false;\n+175 }\n+176 }\n+177\n+180 template \n+_\b1_\b8_\b1 bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n+182 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+183 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+184 STENCIL_TABLE const *stencilTable,\n+185 ID3D11DeviceContext *deviceContext) const {\n+186 return _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer->BindD3D11UAV(deviceContext), srcDesc,\n+187 dstBuffer->BindD3D11UAV(deviceContext), dstDesc,\n+188 stencilTable->GetSizesSRV(),\n+189 stencilTable->GetOffsetsSRV(),\n+190 stencilTable->GetIndicesSRV(),\n+191 stencilTable->GetWeightsSRV(),\n+192 /* start = */ 0,\n+193 /* end = */ stencilTable->GetNumStencils(),\n+194 deviceContext);\n+195 }\n+196\n+_\b1_\b9_\b9 bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(ID3D11UnorderedAccessView *srcSRV,\n+200 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+201 ID3D11UnorderedAccessView *dstUAV,\n+202 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+203 ID3D11ShaderResourceView *sizesSRV,\n+204 ID3D11ShaderResourceView *offsetsSRV,\n+205 ID3D11ShaderResourceView *indicesSRV,\n+206 ID3D11ShaderResourceView *weightsSRV,\n+207 int start,\n+208 int end,\n+209 ID3D11DeviceContext *deviceContext) const;\n+210\n+_\b2_\b1_\b2 bool _\bC_\bo_\bm_\bp_\bi_\bl_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+213 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+214 ID3D11DeviceContext *deviceContext);\n+215\n+_\b2_\b1_\b7 static void _\bS_\by_\bn_\bc_\bh_\br_\bo_\bn_\bi_\bz_\be(ID3D11DeviceContext *deviceContext);\n+218\n+219private:\n+220 ID3D11ComputeShader * _computeShader;\n+221 ID3D11ClassLinkage * _classLinkage;\n+222 ID3D11ClassInstance * _singleBufferKernel;\n+223 ID3D11ClassInstance * _separateBufferKernel;\n+224 ID3D11Buffer * _uniformArgs; // uniform parameters for kernels\n+225\n+226 int _workGroupSize;\n+227};\n+228\n+229} // end namespace Osd\n+230\n+231} // end namespace OPENSUBDIV_VERSION\n+232using namespace OPENSUBDIV_VERSION;\n+233\n+234} // end namespace OpenSubdiv\n+235\n+236\n+237#endif // OPENSUBDIV3_OSD_D3D11_COMPUTE_EVALUATOR_H\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-Concrete vertex buffer class for Cpu subdivision and DirectX drawing.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh_\b:_\b4_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static CpuD3D11VertexBuffer * Create(int numElements, int numVertices,\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n+Stencil table class wrapping the template for compatibility.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b2_\b7_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+BufferDescriptor is a struct which describes buffer elements in interleaved\n+data buffers....\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bb_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n+D3D11 stencil table.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b5_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static D3D11StencilTable * Create(Far::StencilTable const *stencilTable,\n+DEVICE_CONTEXT context)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b5_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bS_\bR_\bV\n+ID3D11ShaderResourceView * GetOffsetsSRV() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+int GetNumStencils() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bS_\bR_\bV\n+ID3D11ShaderResourceView * GetIndicesSRV() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b~_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n+~D3D11StencilTable()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n+D3D11StencilTable(Far::StencilTable const *stencilTable, ID3D11DeviceContext\n+*deviceContext)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static D3D11StencilTable * Create(Far::StencilTable const *stencilTable,\n ID3D11DeviceContext *deviceContext)\n-Creator. Returns NULL if error.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-CpuD3D11VertexBuffer(int numElements, int numVertices)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b6_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bS_\bi_\bz_\be_\bs_\bS_\bR_\bV\n+ID3D11ShaderResourceView * GetSizesSRV() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bS_\bR_\bV\n+ID3D11ShaderResourceView * GetWeightsSRV() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b9_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static D3D11ComputeEvaluator * Create(BufferDescriptor const &srcDesc,\n+BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc,\n+BufferDescriptor const &dvDesc, ID3D11DeviceContext *deviceContext)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const\n+&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE\n+const *stencilTable, D3D11ComputeEvaluator const *instance, ID3D11DeviceContext\n+*deviceContext)\n+Generic static compute function. This function has a same signature as other\n+device kernels have so t...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b4_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static D3D11ComputeEvaluator * Create(BufferDescriptor const &srcDesc,\n+BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc,\n+BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc,\n+BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc,\n+ID3D11DeviceContext *deviceContext)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bI_\bn_\bs_\bt_\ba_\bn_\bt_\bi_\ba_\bt_\ba_\bb_\bl_\be\n+bool Instantiatable\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b9_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bS_\by_\bn_\bc_\bh_\br_\bo_\bn_\bi_\bz_\be\n+static void Synchronize(ID3D11DeviceContext *deviceContext)\n+Wait the dispatched kernel finishes.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n+DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const\n+*stencilTable, ID3D11DeviceContext *deviceContext) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b8_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bm_\bp_\bi_\bl_\be\n+bool Compile(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc,\n+ID3D11DeviceContext *deviceContext)\n+Configure DX kernel. Returns false if it fails to compile the kernel.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:\n+_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n+D3D11ComputeEvaluator()\n Constructor.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n-int GetNumElements() const\n-Returns how many elements defined in this vertex buffer.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba\n-void UpdateData(const float *src, int startVertex, int numVertices, void\n-*deviceContext=NULL)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-int GetNumVertices() const\n-Returns how many vertices allocated in this vertex buffer.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bB_\bi_\bn_\bd_\bD_\b3_\bD_\b1_\b1_\bB_\bu_\bf_\bf_\be_\br\n-ID3D11Buffer * BindD3D11Buffer(ID3D11DeviceContext *deviceContext)\n-Returns the D3D11 buffer object.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bB_\bi_\bn_\bd_\bC_\bp_\bu_\bB_\bu_\bf_\bf_\be_\br\n-float * BindCpuBuffer()\n-Returns the address of CPU buffer.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be\n-bool allocate(ID3D11Device *device)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:\n-_\b~_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-virtual ~CpuD3D11VertexBuffer()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:\n+_\b~_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n+~D3D11ComputeEvaluator()\n Destructor.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bB_\bi_\bn_\bd_\bV_\bB_\bO\n-ID3D11Buffer * BindVBO(ID3D11DeviceContext *deviceContext)\n-Returns the D3D11 buffer object (for Osd::Mesh interface)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh_\b:_\b7_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+bool EvalStencils(ID3D11UnorderedAccessView *srcSRV, BufferDescriptor const\n+&srcDesc, ID3D11UnorderedAccessView *dstUAV, BufferDescriptor const &dstDesc,\n+ID3D11ShaderResourceView *sizesSRV, ID3D11ShaderResourceView *offsetsSRV,\n+ID3D11ShaderResourceView *indicesSRV, ID3D11ShaderResourceView *weightsSRV, int\n+start, int end, ID3D11DeviceContext *deviceContext) const\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bc_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\n+ * _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00845.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00845.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/d3d11ComputeEvaluator.h File Reference\n+OpenSubdiv: opensubdiv/osd/cpuD3D11VertexBuffer.h File Reference\n \n \n \n \n \n \n \n@@ -90,45 +90,41 @@\n \n \n \n
    \n \n-
    d3d11ComputeEvaluator.h File Reference
    \n+
    cpuD3D11VertexBuffer.h File Reference
    \n
    \n
    \n
    #include "../version.h"
    \n-#include "../osd/bufferDescriptor.h"
    \n+#include <cstddef>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n-\n-\n+\n+\n \n

    \n Classes

    class  D3D11StencilTable
     D3D11 stencil table. More...
     
    class  D3D11ComputeEvaluator
    class  CpuD3D11VertexBuffer
     Concrete vertex buffer class for Cpu subdivision and DirectX drawing. More...
     
    \n \n \n \n \n \n-\n-\n \n \n

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Far
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
     
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,25 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-d3d11ComputeEvaluator.h File Reference\n+cpuD3D11VertexBuffer.h File Reference\n #include \"../version.h\"\n-#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bb_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\"\n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n-\u00a0 D3D11 stencil table. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n+class \u00a0 _\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+\u00a0 Concrete vertex buffer class for Cpu subdivision and DirectX drawing.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n-namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br\n-\u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh\n+ * _\bc_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00845.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00845.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a00845 = [\n- [\"D3D11StencilTable\", \"a01189.html\", \"a01189\"],\n- [\"D3D11ComputeEvaluator\", \"a01193.html\", \"a01193\"]\n+ [\"CpuD3D11VertexBuffer\", \"a01153.html\", \"a01153\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00845_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00845_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/d3d11ComputeEvaluator.h Source File\n+OpenSubdiv: opensubdiv/osd/cpuD3D11VertexBuffer.h Source File\n \n \n \n \n \n \n \n@@ -92,19 +92,19 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    d3d11ComputeEvaluator.h
    \n+
    cpuD3D11VertexBuffer.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n-
    2// Copyright 2015 Pixar
    \n+
    2// Copyright 2013 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n
    6// compliance with the Apache License and the following modification to it:
    \n
    7// Section 6. Trademarks. is deleted and replaced with:
    \n
    8//
    \n
    9// 6. Trademarks. This License does not grant permission to use the trade
    \n@@ -119,225 +119,91 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_D3D11_COMPUTE_EVALUATOR_H
    \n-
    26#define OPENSUBDIV3_OSD_D3D11_COMPUTE_EVALUATOR_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_CPU_D3D11_VERTEX_BUFFER_H
    \n+
    26#define OPENSUBDIV3_OSD_CPU_D3D11_VERTEX_BUFFER_H
    \n
    27
    \n
    28#include "../version.h"
    \n-
    29
    \n-
    30struct ID3D11DeviceContext;
    \n+
    29#include <cstddef>
    \n+
    30
    \n
    31struct ID3D11Buffer;
    \n-
    32struct ID3D11ComputeShader;
    \n-
    33struct ID3D11ClassLinkage;
    \n-
    34struct ID3D11ClassInstance;
    \n-
    35struct ID3D11ShaderResourceView;
    \n-
    36struct ID3D11UnorderedAccessView;
    \n+
    32struct ID3D11Device;
    \n+
    33struct ID3D11DeviceContext;
    \n+
    34
    \n+
    35namespace OpenSubdiv {
    \n+
    36namespace OPENSUBDIV_VERSION {
    \n
    37
    \n-
    38#include "../osd/bufferDescriptor.h"
    \n+
    38namespace Osd {
    \n
    39
    \n-
    40namespace OpenSubdiv {
    \n-
    41namespace OPENSUBDIV_VERSION {
    \n-
    42
    \n-
    43namespace Far {
    \n-
    44 class StencilTable;
    \n-
    45}
    \n-
    46
    \n-
    47namespace Osd {
    \n-
    48
    \n-
    \n-\n-
    57public:
    \n-
    58 template <typename DEVICE_CONTEXT>
    \n-
    \n-
    59 static D3D11StencilTable *Create(Far::StencilTable const *stencilTable,
    \n-
    60 DEVICE_CONTEXT context) {
    \n-
    61 return new D3D11StencilTable(stencilTable, context->GetDeviceContext());
    \n-
    62 }
    \n-
    \n-
    63
    \n-
    \n-
    64 static D3D11StencilTable *Create(Far::StencilTable const *stencilTable,
    \n-
    65 ID3D11DeviceContext *deviceContext) {
    \n-
    66 return new D3D11StencilTable(stencilTable, deviceContext);
    \n-
    67 }
    \n-
    \n-
    68
    \n-\n-
    70 ID3D11DeviceContext *deviceContext);
    \n-
    71
    \n-\n+
    \n+\n+
    49public:
    \n+
    51 static CpuD3D11VertexBuffer * Create(int numElements, int numVertices,
    \n+
    52 ID3D11DeviceContext *deviceContext);
    \n+
    53
    \n+\n+
    56
    \n+
    59 void UpdateData(const float *src, int startVertex, int numVertices,
    \n+
    60 void *deviceContext = NULL);
    \n+
    61
    \n+
    63 int GetNumElements() const;
    \n+
    64
    \n+
    66 int GetNumVertices() const;
    \n+
    67
    \n+
    69 float * BindCpuBuffer();
    \n+
    70
    \n+
    72 ID3D11Buffer *BindD3D11Buffer(ID3D11DeviceContext *deviceContext);
    \n
    73
    \n-
    74 // interfaces needed for D3D11ComputeEvaluator
    \n-
    75 ID3D11ShaderResourceView *GetSizesSRV() const { return _sizes; }
    \n-
    76 ID3D11ShaderResourceView *GetOffsetsSRV() const { return _offsets; }
    \n-
    77 ID3D11ShaderResourceView *GetIndicesSRV() const { return _indices; }
    \n-
    78 ID3D11ShaderResourceView *GetWeightsSRV() const { return _weights; }
    \n-
    79 int GetNumStencils() const { return _numStencils; }
    \n-
    80
    \n-
    81private:
    \n-
    82 ID3D11ShaderResourceView *_sizes;
    \n-
    83 ID3D11ShaderResourceView *_offsets;
    \n-
    84 ID3D11ShaderResourceView *_indices;
    \n-
    85 ID3D11ShaderResourceView *_weights;
    \n-
    86 ID3D11Buffer *_sizesBuffer;
    \n-
    87 ID3D11Buffer *_offsetsBuffer;
    \n-
    88 ID3D11Buffer *_indicesBuffer;
    \n-
    89 ID3D11Buffer *_weightsBuffer;
    \n-
    90
    \n-
    91 int _numStencils;
    \n-
    92};
    \n+
    \n+
    75 ID3D11Buffer *BindVBO(ID3D11DeviceContext *deviceContext) {
    \n+
    76 return BindD3D11Buffer(deviceContext);
    \n+
    77 }
    \n+
    \n+
    78
    \n+
    79protected:
    \n+
    81 CpuD3D11VertexBuffer(int numElements, int numVertices);
    \n+
    82
    \n+
    83 bool allocate(ID3D11Device *device);
    \n+
    84
    \n+
    85private:
    \n+
    86 int _numElements;
    \n+
    87 int _numVertices;
    \n+
    88 ID3D11Buffer *_d3d11Buffer;
    \n+
    89 float *_cpuBuffer;
    \n+
    90};
    \n
    \n+
    91
    \n+
    92} // end namespace Osd
    \n
    93
    \n-
    94// ---------------------------------------------------------------------------
    \n-
    95
    \n-
    \n-\n-
    97public:
    \n-
    98 typedef bool Instantiatable;
    \n-\n-
    100 BufferDescriptor const &dstDesc,
    \n-
    101 BufferDescriptor const &duDesc,
    \n-
    102 BufferDescriptor const &dvDesc,
    \n-
    103 ID3D11DeviceContext *deviceContext);
    \n-
    104
    \n-\n-
    106 BufferDescriptor const &dstDesc,
    \n-
    107 BufferDescriptor const &duDesc,
    \n-
    108 BufferDescriptor const &dvDesc,
    \n-
    109 BufferDescriptor const &duuDesc,
    \n-
    110 BufferDescriptor const &duvDesc,
    \n-
    111 BufferDescriptor const &dvvDesc,
    \n-
    112 ID3D11DeviceContext *deviceContext);
    \n-
    113
    \n-\n-
    116
    \n-\n-
    119
    \n-
    147 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n-
    \n-
    148 static bool EvalStencils(
    \n-
    149 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    150 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    151 STENCIL_TABLE const *stencilTable,
    \n-
    152 D3D11ComputeEvaluator const *instance,
    \n-
    153 ID3D11DeviceContext * deviceContext) {
    \n-
    154 if (instance) {
    \n-
    155 return instance->EvalStencils(srcBuffer, srcDesc,
    \n-
    156 dstBuffer, dstDesc,
    \n-
    157 stencilTable,
    \n-
    158 deviceContext);
    \n-
    159 } else {
    \n-
    160 // Create an instance on demand (slow)
    \n-
    161 (void)deviceContext; // unused
    \n-
    162 instance = Create(srcDesc, dstDesc,
    \n-\n-\n-
    165 deviceContext);
    \n-
    166 if (instance) {
    \n-
    167 bool r = instance->EvalStencils(srcBuffer, srcDesc,
    \n-
    168 dstBuffer, dstDesc,
    \n-
    169 stencilTable,
    \n-
    170 deviceContext);
    \n-
    171 delete instance;
    \n-
    172 return r;
    \n-
    173 }
    \n-
    174 return false;
    \n-
    175 }
    \n-
    176 }
    \n-
    \n-
    177
    \n-
    180 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n-
    \n-\n-
    182 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    183 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    184 STENCIL_TABLE const *stencilTable,
    \n-
    185 ID3D11DeviceContext *deviceContext) const {
    \n-
    186 return EvalStencils(srcBuffer->BindD3D11UAV(deviceContext), srcDesc,
    \n-
    187 dstBuffer->BindD3D11UAV(deviceContext), dstDesc,
    \n-
    188 stencilTable->GetSizesSRV(),
    \n-
    189 stencilTable->GetOffsetsSRV(),
    \n-
    190 stencilTable->GetIndicesSRV(),
    \n-
    191 stencilTable->GetWeightsSRV(),
    \n-
    192 /* start = */ 0,
    \n-
    193 /* end = */ stencilTable->GetNumStencils(),
    \n-
    194 deviceContext);
    \n-
    195 }
    \n-
    \n-
    196
    \n-
    199 bool EvalStencils(ID3D11UnorderedAccessView *srcSRV,
    \n-
    200 BufferDescriptor const &srcDesc,
    \n-
    201 ID3D11UnorderedAccessView *dstUAV,
    \n-
    202 BufferDescriptor const &dstDesc,
    \n-
    203 ID3D11ShaderResourceView *sizesSRV,
    \n-
    204 ID3D11ShaderResourceView *offsetsSRV,
    \n-
    205 ID3D11ShaderResourceView *indicesSRV,
    \n-
    206 ID3D11ShaderResourceView *weightsSRV,
    \n-
    207 int start,
    \n-
    208 int end,
    \n-
    209 ID3D11DeviceContext *deviceContext) const;
    \n-
    210
    \n-
    212 bool Compile(BufferDescriptor const &srcDesc,
    \n-
    213 BufferDescriptor const &dstDesc,
    \n-
    214 ID3D11DeviceContext *deviceContext);
    \n-
    215
    \n-
    217 static void Synchronize(ID3D11DeviceContext *deviceContext);
    \n-
    218
    \n-
    219private:
    \n-
    220 ID3D11ComputeShader * _computeShader;
    \n-
    221 ID3D11ClassLinkage * _classLinkage;
    \n-
    222 ID3D11ClassInstance * _singleBufferKernel;
    \n-
    223 ID3D11ClassInstance * _separateBufferKernel;
    \n-
    224 ID3D11Buffer * _uniformArgs; // uniform parameters for kernels
    \n-
    225
    \n-
    226 int _workGroupSize;
    \n-
    227};
    \n-
    \n-
    228
    \n-
    229} // end namespace Osd
    \n-
    230
    \n-
    231} // end namespace OPENSUBDIV_VERSION
    \n-
    232using namespace OPENSUBDIV_VERSION;
    \n-
    233
    \n-
    234} // end namespace OpenSubdiv
    \n-
    235
    \n-
    236
    \n-
    237#endif // OPENSUBDIV3_OSD_D3D11_COMPUTE_EVALUATOR_H
    \n-\n-
    Stencil table class wrapping the template for compatibility.
    \n-
    BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
    \n-\n-
    static D3D11StencilTable * Create(Far::StencilTable const *stencilTable, DEVICE_CONTEXT context)
    \n-\n-\n-\n-\n-
    D3D11StencilTable(Far::StencilTable const *stencilTable, ID3D11DeviceContext *deviceContext)
    \n-
    static D3D11StencilTable * Create(Far::StencilTable const *stencilTable, ID3D11DeviceContext *deviceContext)
    \n-\n-\n-\n-
    static D3D11ComputeEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, ID3D11DeviceContext *deviceContext)
    \n-
    static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, D3D11ComputeEvaluator const *instance, ID3D11DeviceContext *deviceContext)
    Generic static compute function. This function has a same signature as other device kernels have so t...
    \n-
    static D3D11ComputeEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, ID3D11DeviceContext *deviceContext)
    \n-\n-
    static void Synchronize(ID3D11DeviceContext *deviceContext)
    Wait the dispatched kernel finishes.
    \n-
    bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, ID3D11DeviceContext *deviceContext) const
    \n-
    bool Compile(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, ID3D11DeviceContext *deviceContext)
    Configure DX kernel. Returns false if it fails to compile the kernel.
    \n-\n-\n-
    bool EvalStencils(ID3D11UnorderedAccessView *srcSRV, BufferDescriptor const &srcDesc, ID3D11UnorderedAccessView *dstUAV, BufferDescriptor const &dstDesc, ID3D11ShaderResourceView *sizesSRV, ID3D11ShaderResourceView *offsetsSRV, ID3D11ShaderResourceView *indicesSRV, ID3D11ShaderResourceView *weightsSRV, int start, int end, ID3D11DeviceContext *deviceContext) const
    \n+
    94} // end namespace OPENSUBDIV_VERSION
    \n+
    95using namespace OPENSUBDIV_VERSION;
    \n+
    96
    \n+
    97} // end namespace OpenSubdiv
    \n+
    98
    \n+
    99#endif // OPENSUBDIV3_OSD_CPU_D3D11_VERTEX_BUFFER_H
    \n+\n+
    Concrete vertex buffer class for Cpu subdivision and DirectX drawing.
    \n+
    static CpuD3D11VertexBuffer * Create(int numElements, int numVertices, ID3D11DeviceContext *deviceContext)
    Creator. Returns NULL if error.
    \n+
    CpuD3D11VertexBuffer(int numElements, int numVertices)
    Constructor.
    \n+
    int GetNumElements() const
    Returns how many elements defined in this vertex buffer.
    \n+
    void UpdateData(const float *src, int startVertex, int numVertices, void *deviceContext=NULL)
    \n+
    int GetNumVertices() const
    Returns how many vertices allocated in this vertex buffer.
    \n+
    ID3D11Buffer * BindD3D11Buffer(ID3D11DeviceContext *deviceContext)
    Returns the D3D11 buffer object.
    \n+
    float * BindCpuBuffer()
    Returns the address of CPU buffer.
    \n+\n+\n+
    ID3D11Buffer * BindVBO(ID3D11DeviceContext *deviceContext)
    Returns the D3D11 buffer object (for Osd::Mesh interface)
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,15 +1,15 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-d3d11ComputeEvaluator.h\n+cpuD3D11VertexBuffer.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n-2// Copyright 2015 Pixar\n+2// Copyright 2013 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n 7// Section 6. Trademarks. is deleted and replaced with:\n 8//\n 9// 6. Trademarks. This License does not grant permission to use the trade\n@@ -24,272 +24,105 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_D3D11_COMPUTE_EVALUATOR_H\n-26#define OPENSUBDIV3_OSD_D3D11_COMPUTE_EVALUATOR_H\n+25#ifndef OPENSUBDIV3_OSD_CPU_D3D11_VERTEX_BUFFER_H\n+26#define OPENSUBDIV3_OSD_CPU_D3D11_VERTEX_BUFFER_H\n 27\n 28#include \"../version.h\"\n-29\n-30struct ID3D11DeviceContext;\n+29#include \n+30\n 31struct ID3D11Buffer;\n-32struct ID3D11ComputeShader;\n-33struct ID3D11ClassLinkage;\n-34struct ID3D11ClassInstance;\n-35struct ID3D11ShaderResourceView;\n-36struct ID3D11UnorderedAccessView;\n+32struct ID3D11Device;\n+33struct ID3D11DeviceContext;\n+34\n+35namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+36namespace OPENSUBDIV_VERSION {\n 37\n-38#include \"../osd/bufferDescriptor.h\"\n+38namespace Osd {\n 39\n-40namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-41namespace OPENSUBDIV_VERSION {\n-42\n-43namespace Far {\n-44 class StencilTable;\n-45}\n-46\n-47namespace Osd {\n-48\n-_\b5_\b6class _\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be {\n-57public:\n-58 template \n-_\b5_\b9 static _\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be *_\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *stencilTable,\n-60 DEVICE_CONTEXT context) {\n-61 return new _\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(stencilTable, context->GetDeviceContext());\n-62 }\n-63\n-_\b6_\b4 static _\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be *_\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *stencilTable,\n-65 ID3D11DeviceContext *deviceContext) {\n-66 return new _\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(stencilTable, deviceContext);\n-67 }\n-68\n-_\b6_\b9 _\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *stencilTable,\n-70 ID3D11DeviceContext *deviceContext);\n-71\n-_\b7_\b2 _\b~_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be();\n+_\b4_\b8class _\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br {\n+49public:\n+_\b5_\b1 static _\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br * _\bC_\br_\be_\ba_\bt_\be(int numElements, int numVertices,\n+52 ID3D11DeviceContext *deviceContext);\n+53\n+_\b5_\b5 virtual _\b~_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br();\n+56\n+_\b5_\b9 void _\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba(const float *src, int startVertex, int numVertices,\n+60 void *deviceContext = NULL);\n+61\n+_\b6_\b3 int _\bG_\be_\bt_\bN_\bu_\bm_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs() const;\n+64\n+_\b6_\b6 int _\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const;\n+67\n+_\b6_\b9 float * _\bB_\bi_\bn_\bd_\bC_\bp_\bu_\bB_\bu_\bf_\bf_\be_\br();\n+70\n+_\b7_\b2 ID3D11Buffer *_\bB_\bi_\bn_\bd_\bD_\b3_\bD_\b1_\b1_\bB_\bu_\bf_\bf_\be_\br(ID3D11DeviceContext *deviceContext);\n 73\n-74 // interfaces needed for D3D11ComputeEvaluator\n-_\b7_\b5 ID3D11ShaderResourceView *_\bG_\be_\bt_\bS_\bi_\bz_\be_\bs_\bS_\bR_\bV() const { return _sizes; }\n-_\b7_\b6 ID3D11ShaderResourceView *_\bG_\be_\bt_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bS_\bR_\bV() const { return _offsets; }\n-_\b7_\b7 ID3D11ShaderResourceView *_\bG_\be_\bt_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bS_\bR_\bV() const { return _indices; }\n-_\b7_\b8 ID3D11ShaderResourceView *_\bG_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bS_\bR_\bV() const { return _weights; }\n-_\b7_\b9 int _\bG_\be_\bt_\bN_\bu_\bm_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs() const { return _numStencils; }\n-80\n-81private:\n-82 ID3D11ShaderResourceView *_sizes;\n-83 ID3D11ShaderResourceView *_offsets;\n-84 ID3D11ShaderResourceView *_indices;\n-85 ID3D11ShaderResourceView *_weights;\n-86 ID3D11Buffer *_sizesBuffer;\n-87 ID3D11Buffer *_offsetsBuffer;\n-88 ID3D11Buffer *_indicesBuffer;\n-89 ID3D11Buffer *_weightsBuffer;\n-90\n-91 int _numStencils;\n-92};\n+_\b7_\b5 ID3D11Buffer *_\bB_\bi_\bn_\bd_\bV_\bB_\bO(ID3D11DeviceContext *deviceContext) {\n+76 return _\bB_\bi_\bn_\bd_\bD_\b3_\bD_\b1_\b1_\bB_\bu_\bf_\bf_\be_\br(deviceContext);\n+77 }\n+78\n+79protected:\n+_\b8_\b1 _\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(int numElements, int numVertices);\n+82\n+_\b8_\b3 bool _\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be(ID3D11Device *device);\n+84\n+85private:\n+86 int _numElements;\n+87 int _numVertices;\n+88 ID3D11Buffer *_d3d11Buffer;\n+89 float *_cpuBuffer;\n+90};\n+91\n+92} // end namespace Osd\n 93\n-94// --------------------------------------------------------------------------\n--\n-95\n-_\b9_\b6class _\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br {\n-97public:\n-_\b9_\b8 typedef bool _\bI_\bn_\bs_\bt_\ba_\bn_\bt_\bi_\ba_\bt_\ba_\bb_\bl_\be;\n-_\b9_\b9 static _\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br * _\bC_\br_\be_\ba_\bt_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-100 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-101 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-102 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-103 ID3D11DeviceContext *deviceContext);\n-104\n-_\b1_\b0_\b5 static _\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br * _\bC_\br_\be_\ba_\bt_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-106 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-107 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-108 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-109 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-110 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-111 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-112 ID3D11DeviceContext *deviceContext);\n-113\n-_\b1_\b1_\b5 _\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br();\n-116\n-_\b1_\b1_\b8 _\b~_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br();\n-119\n-147 template \n-_\b1_\b4_\b8 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n-149 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-150 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-151 STENCIL_TABLE const *stencilTable,\n-152 _\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n-153 ID3D11DeviceContext * deviceContext) {\n-154 if (instance) {\n-155 return instance->_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer, srcDesc,\n-156 dstBuffer, dstDesc,\n-157 stencilTable,\n-158 deviceContext);\n-159 } else {\n-160 // Create an instance on demand (slow)\n-161 (void)deviceContext; // unused\n-162 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n-163 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-164 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-165 deviceContext);\n-166 if (instance) {\n-167 bool r = instance->_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer, srcDesc,\n-168 dstBuffer, dstDesc,\n-169 stencilTable,\n-170 deviceContext);\n-171 delete instance;\n-172 return r;\n-173 }\n-174 return false;\n-175 }\n-176 }\n-177\n-180 template \n-_\b1_\b8_\b1 bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n-182 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-183 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-184 STENCIL_TABLE const *stencilTable,\n-185 ID3D11DeviceContext *deviceContext) const {\n-186 return _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer->BindD3D11UAV(deviceContext), srcDesc,\n-187 dstBuffer->BindD3D11UAV(deviceContext), dstDesc,\n-188 stencilTable->GetSizesSRV(),\n-189 stencilTable->GetOffsetsSRV(),\n-190 stencilTable->GetIndicesSRV(),\n-191 stencilTable->GetWeightsSRV(),\n-192 /* start = */ 0,\n-193 /* end = */ stencilTable->GetNumStencils(),\n-194 deviceContext);\n-195 }\n-196\n-_\b1_\b9_\b9 bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(ID3D11UnorderedAccessView *srcSRV,\n-200 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-201 ID3D11UnorderedAccessView *dstUAV,\n-202 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-203 ID3D11ShaderResourceView *sizesSRV,\n-204 ID3D11ShaderResourceView *offsetsSRV,\n-205 ID3D11ShaderResourceView *indicesSRV,\n-206 ID3D11ShaderResourceView *weightsSRV,\n-207 int start,\n-208 int end,\n-209 ID3D11DeviceContext *deviceContext) const;\n-210\n-_\b2_\b1_\b2 bool _\bC_\bo_\bm_\bp_\bi_\bl_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-213 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-214 ID3D11DeviceContext *deviceContext);\n-215\n-_\b2_\b1_\b7 static void _\bS_\by_\bn_\bc_\bh_\br_\bo_\bn_\bi_\bz_\be(ID3D11DeviceContext *deviceContext);\n-218\n-219private:\n-220 ID3D11ComputeShader * _computeShader;\n-221 ID3D11ClassLinkage * _classLinkage;\n-222 ID3D11ClassInstance * _singleBufferKernel;\n-223 ID3D11ClassInstance * _separateBufferKernel;\n-224 ID3D11Buffer * _uniformArgs; // uniform parameters for kernels\n-225\n-226 int _workGroupSize;\n-227};\n-228\n-229} // end namespace Osd\n-230\n-231} // end namespace OPENSUBDIV_VERSION\n-232using namespace OPENSUBDIV_VERSION;\n-233\n-234} // end namespace OpenSubdiv\n-235\n-236\n-237#endif // OPENSUBDIV3_OSD_D3D11_COMPUTE_EVALUATOR_H\n+94} // end namespace OPENSUBDIV_VERSION\n+95using namespace OPENSUBDIV_VERSION;\n+96\n+97} // end namespace OpenSubdiv\n+98\n+99#endif // OPENSUBDIV3_OSD_CPU_D3D11_VERTEX_BUFFER_H\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n-Stencil table class wrapping the template for compatibility.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b2_\b7_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-BufferDescriptor is a struct which describes buffer elements in interleaved\n-data buffers....\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bb_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n-D3D11 stencil table.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b5_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static D3D11StencilTable * Create(Far::StencilTable const *stencilTable,\n-DEVICE_CONTEXT context)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b5_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bS_\bR_\bV\n-ID3D11ShaderResourceView * GetOffsetsSRV() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n-int GetNumStencils() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bS_\bR_\bV\n-ID3D11ShaderResourceView * GetIndicesSRV() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b:_\b:_\b~_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n-~D3D11StencilTable()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n-D3D11StencilTable(Far::StencilTable const *stencilTable, ID3D11DeviceContext\n-*deviceContext)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static D3D11StencilTable * Create(Far::StencilTable const *stencilTable,\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+Concrete vertex buffer class for Cpu subdivision and DirectX drawing.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh_\b:_\b4_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static CpuD3D11VertexBuffer * Create(int numElements, int numVertices,\n ID3D11DeviceContext *deviceContext)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b6_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bS_\bi_\bz_\be_\bs_\bS_\bR_\bV\n-ID3D11ShaderResourceView * GetSizesSRV() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bS_\bR_\bV\n-ID3D11ShaderResourceView * GetWeightsSRV() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b9_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static D3D11ComputeEvaluator * Create(BufferDescriptor const &srcDesc,\n-BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc,\n-BufferDescriptor const &dvDesc, ID3D11DeviceContext *deviceContext)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n-static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const\n-&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE\n-const *stencilTable, D3D11ComputeEvaluator const *instance, ID3D11DeviceContext\n-*deviceContext)\n-Generic static compute function. This function has a same signature as other\n-device kernels have so t...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b4_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static D3D11ComputeEvaluator * Create(BufferDescriptor const &srcDesc,\n-BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc,\n-BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc,\n-BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc,\n-ID3D11DeviceContext *deviceContext)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bI_\bn_\bs_\bt_\ba_\bn_\bt_\bi_\ba_\bt_\ba_\bb_\bl_\be\n-bool Instantiatable\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b9_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bS_\by_\bn_\bc_\bh_\br_\bo_\bn_\bi_\bz_\be\n-static void Synchronize(ID3D11DeviceContext *deviceContext)\n-Wait the dispatched kernel finishes.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n-bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n-DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const\n-*stencilTable, ID3D11DeviceContext *deviceContext) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b8_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bm_\bp_\bi_\bl_\be\n-bool Compile(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc,\n-ID3D11DeviceContext *deviceContext)\n-Configure DX kernel. Returns false if it fails to compile the kernel.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:\n-_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n-D3D11ComputeEvaluator()\n+Creator. Returns NULL if error.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+CpuD3D11VertexBuffer(int numElements, int numVertices)\n Constructor.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:\n-_\b~_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n-~D3D11ComputeEvaluator()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n+int GetNumElements() const\n+Returns how many elements defined in this vertex buffer.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba\n+void UpdateData(const float *src, int startVertex, int numVertices, void\n+*deviceContext=NULL)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+int GetNumVertices() const\n+Returns how many vertices allocated in this vertex buffer.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bB_\bi_\bn_\bd_\bD_\b3_\bD_\b1_\b1_\bB_\bu_\bf_\bf_\be_\br\n+ID3D11Buffer * BindD3D11Buffer(ID3D11DeviceContext *deviceContext)\n+Returns the D3D11 buffer object.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bB_\bi_\bn_\bd_\bC_\bp_\bu_\bB_\bu_\bf_\bf_\be_\br\n+float * BindCpuBuffer()\n+Returns the address of CPU buffer.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be\n+bool allocate(ID3D11Device *device)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:\n+_\b~_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+virtual ~CpuD3D11VertexBuffer()\n Destructor.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bD_\b3_\bD_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n-bool EvalStencils(ID3D11UnorderedAccessView *srcSRV, BufferDescriptor const\n-&srcDesc, ID3D11UnorderedAccessView *dstUAV, BufferDescriptor const &dstDesc,\n-ID3D11ShaderResourceView *sizesSRV, ID3D11ShaderResourceView *offsetsSRV,\n-ID3D11ShaderResourceView *indicesSRV, ID3D11ShaderResourceView *weightsSRV, int\n-start, int end, ID3D11DeviceContext *deviceContext) const\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bB_\bi_\bn_\bd_\bV_\bB_\bO\n+ID3D11Buffer * BindVBO(ID3D11DeviceContext *deviceContext)\n+Returns the D3D11 buffer object (for Osd::Mesh interface)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh_\b:_\b7_\b5\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bd_\b3_\bd_\b1_\b1_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh\n+ * _\bc_\bp_\bu_\bD_\b3_\bD_\b1_\b1_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00848.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00848.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/glComputeEvaluator.h File Reference\n+OpenSubdiv: opensubdiv/osd/glXFBEvaluator.h File Reference\n \n \n \n \n \n \n \n@@ -90,30 +90,30 @@\n \n \n \n
    \n \n-
    glComputeEvaluator.h File Reference
    \n+
    glXFBEvaluator.h File Reference
    \n
    \n
    \n
    #include "../version.h"
    \n #include "../osd/opengl.h"
    \n #include "../osd/types.h"
    \n #include "../osd/bufferDescriptor.h"
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n \n-\n+\n \n

    \n Classes

    class  GLStencilTableSSBO
     GL stencil table (Shader Storage buffer) More...
    class  GLStencilTableTBO
     GL TextureBuffer stencil table. More...
     
    class  GLComputeEvaluator
    class  GLXFBEvaluator
     
    \n \n \n \n \n@@ -124,13 +124,13 @@\n \n

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,30 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-glComputeEvaluator.h File Reference\n+glXFBEvaluator.h File Reference\n #include \"../version.h\"\n #include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bo_\bp_\be_\bn_\bg_\bl_\b._\bh\"\n #include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n #include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bb_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO\n-\u00a0 GL stencil table (Shader Storage buffer) _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO\n+\u00a0 GL TextureBuffer stencil table. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-class \u00a0 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n+class \u00a0 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh\n+ * _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00848.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00848.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a00848 = [\n- [\"GLStencilTableSSBO\", \"a01209.html\", \"a01209\"],\n- [\"GLComputeEvaluator\", \"a01213.html\", \"a01213\"]\n+ [\"GLStencilTableTBO\", \"a01241.html\", \"a01241\"],\n+ [\"GLXFBEvaluator\", \"a01245.html\", \"a01245\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00848_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00848_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/glComputeEvaluator.h Source File\n+OpenSubdiv: opensubdiv/osd/glXFBEvaluator.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    glComputeEvaluator.h
    \n+
    glXFBEvaluator.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n
    2// Copyright 2015 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n@@ -119,16 +119,16 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_GL_COMPUTE_EVALUATOR_H
    \n-
    26#define OPENSUBDIV3_OSD_GL_COMPUTE_EVALUATOR_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H
    \n+
    26#define OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H
    \n
    27
    \n
    28#include "../version.h"
    \n
    29
    \n
    30#include "../osd/opengl.h"
    \n
    31#include "../osd/types.h"
    \n
    32#include "../osd/bufferDescriptor.h"
    \n
    33
    \n@@ -139,1112 +139,1185 @@\n
    38 class PatchTable;
    \n
    39 class StencilTable;
    \n
    40 class LimitStencilTable;
    \n
    41}
    \n
    42
    \n
    43namespace Osd {
    \n
    44
    \n-
    \n-\n-
    52public:
    \n-
    \n-
    53 static GLStencilTableSSBO *Create(Far::StencilTable const *stencilTable,
    \n-
    54 void *deviceContext = NULL) {
    \n-
    55 (void)deviceContext; // unused
    \n-
    56 return new GLStencilTableSSBO(stencilTable);
    \n-
    57 }
    \n-
    \n-
    \n-\n-
    59 Far::LimitStencilTable const *limitStencilTable,
    \n-
    60 void *deviceContext = NULL) {
    \n-
    61 (void)deviceContext; // unused
    \n-
    62 return new GLStencilTableSSBO(limitStencilTable);
    \n-
    63 }
    \n-
    \n-
    64
    \n-
    65 explicit GLStencilTableSSBO(Far::StencilTable const *stencilTable);
    \n-
    66 explicit GLStencilTableSSBO(Far::LimitStencilTable const *limitStencilTable);
    \n-\n-
    68
    \n-
    69 // interfaces needed for GLSLComputeKernel
    \n-
    70 GLuint GetSizesBuffer() const { return _sizes; }
    \n-
    71 GLuint GetOffsetsBuffer() const { return _offsets; }
    \n-
    72 GLuint GetIndicesBuffer() const { return _indices; }
    \n-
    73 GLuint GetWeightsBuffer() const { return _weights; }
    \n-
    74 GLuint GetDuWeightsBuffer() const { return _duWeights; }
    \n-
    75 GLuint GetDvWeightsBuffer() const { return _dvWeights; }
    \n-
    76 GLuint GetDuuWeightsBuffer() const { return _duuWeights; }
    \n-
    77 GLuint GetDuvWeightsBuffer() const { return _duvWeights; }
    \n-
    78 GLuint GetDvvWeightsBuffer() const { return _dvvWeights; }
    \n-
    79 int GetNumStencils() const { return _numStencils; }
    \n-
    80
    \n-
    81private:
    \n-
    82 GLuint _sizes;
    \n-
    83 GLuint _offsets;
    \n-
    84 GLuint _indices;
    \n-
    85 GLuint _weights;
    \n-
    86 GLuint _duWeights;
    \n-
    87 GLuint _dvWeights;
    \n-
    88 GLuint _duuWeights;
    \n-
    89 GLuint _duvWeights;
    \n-
    90 GLuint _dvvWeights;
    \n-
    91 int _numStencils;
    \n-
    92};
    \n+
    \n+\n+
    53public:
    \n+
    \n+\n+
    55 Far::StencilTable const *stencilTable, void *deviceContext = NULL) {
    \n+
    56 (void)deviceContext; // unused
    \n+
    57 return new GLStencilTableTBO(stencilTable);
    \n+
    58 }
    \n+
    \n+
    59
    \n+
    \n+\n+
    61 Far::LimitStencilTable const *limitStencilTable,
    \n+
    62 void *deviceContext = NULL) {
    \n+
    63 (void)deviceContext; // unused
    \n+
    64 return new GLStencilTableTBO(limitStencilTable);
    \n+
    65 }
    \n+
    \n+
    66
    \n+
    67 explicit GLStencilTableTBO(Far::StencilTable const *stencilTable);
    \n+
    68 explicit GLStencilTableTBO(Far::LimitStencilTable const *limitStencilTable);
    \n+\n+
    70
    \n+
    71 // interfaces needed for GLSLTransformFeedbackKernel
    \n+
    72 GLuint GetSizesTexture() const { return _sizes; }
    \n+
    73 GLuint GetOffsetsTexture() const { return _offsets; }
    \n+
    74 GLuint GetIndicesTexture() const { return _indices; }
    \n+
    75 GLuint GetWeightsTexture() const { return _weights; }
    \n+
    76 GLuint GetDuWeightsTexture() const { return _duWeights; }
    \n+
    77 GLuint GetDvWeightsTexture() const { return _dvWeights; }
    \n+
    78 GLuint GetDuuWeightsTexture() const { return _duuWeights; }
    \n+
    79 GLuint GetDuvWeightsTexture() const { return _duvWeights; }
    \n+
    80 GLuint GetDvvWeightsTexture() const { return _dvvWeights; }
    \n+
    81 int GetNumStencils() const { return _numStencils; }
    \n+
    82
    \n+
    83private:
    \n+
    84 GLuint _sizes;
    \n+
    85 GLuint _offsets;
    \n+
    86 GLuint _indices;
    \n+
    87 GLuint _weights;
    \n+
    88 GLuint _duWeights;
    \n+
    89 GLuint _dvWeights;
    \n+
    90 GLuint _duuWeights;
    \n+
    91 GLuint _duvWeights;
    \n+
    92 GLuint _dvvWeights;
    \n+
    93 int _numStencils;
    \n+
    94};
    \n
    \n-
    93
    \n-
    94// ---------------------------------------------------------------------------
    \n
    95
    \n-
    \n-\n-
    97public:
    \n-
    98 typedef bool Instantiatable;
    \n-
    \n-\n-
    100 BufferDescriptor const &dstDesc,
    \n-
    101 BufferDescriptor const &duDesc,
    \n-
    102 BufferDescriptor const &dvDesc,
    \n-
    103 void * deviceContext = NULL) {
    \n-
    104 return Create(srcDesc, dstDesc, duDesc, dvDesc,
    \n-\n-\n-\n-
    108 deviceContext);
    \n-
    109 }
    \n-
    \n-
    110
    \n-
    \n-\n-
    112 BufferDescriptor const &dstDesc,
    \n-
    113 BufferDescriptor const &duDesc,
    \n-
    114 BufferDescriptor const &dvDesc,
    \n-
    115 BufferDescriptor const &duuDesc,
    \n-
    116 BufferDescriptor const &duvDesc,
    \n-
    117 BufferDescriptor const &dvvDesc,
    \n-
    118 void * deviceContext = NULL) {
    \n-
    119 (void)deviceContext; // not used
    \n-
    120 GLComputeEvaluator *instance = new GLComputeEvaluator();
    \n-
    121 if (instance->Compile(srcDesc, dstDesc, duDesc, dvDesc,
    \n-
    122 duuDesc, duvDesc, dvvDesc))
    \n-
    123 return instance;
    \n-
    124 delete instance;
    \n-
    125 return NULL;
    \n-
    126 }
    \n-
    \n-
    127
    \n-\n-
    130
    \n-\n-
    133
    \n-
    139
    \n-
    167 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n-
    \n-
    168 static bool EvalStencils(
    \n-
    169 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    170 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    171 STENCIL_TABLE const *stencilTable,
    \n-
    172 GLComputeEvaluator const *instance,
    \n-
    173 void * deviceContext = NULL) {
    \n-
    174
    \n-
    175 if (instance) {
    \n-
    176 return instance->EvalStencils(srcBuffer, srcDesc,
    \n-
    177 dstBuffer, dstDesc,
    \n-
    178 stencilTable);
    \n-
    179 } else {
    \n-
    180 // Create an instance on demand (slow)
    \n-
    181 (void)deviceContext; // unused
    \n-
    182 instance = Create(srcDesc, dstDesc,
    \n-\n-\n-
    185 if (instance) {
    \n-
    186 bool r = instance->EvalStencils(srcBuffer, srcDesc,
    \n-
    187 dstBuffer, dstDesc,
    \n-
    188 stencilTable);
    \n-
    189 delete instance;
    \n-
    190 return r;
    \n-
    191 }
    \n-
    192 return false;
    \n-
    193 }
    \n-
    194 }
    \n-
    \n-
    195
    \n-
    235 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n-
    \n-
    236 static bool EvalStencils(
    \n-
    237 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    238 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    239 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    240 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    96// ---------------------------------------------------------------------------
    \n+
    97
    \n+
    \n+\n+
    99public:
    \n+
    100 typedef bool Instantiatable;
    \n+
    101
    \n+
    103 template <typename DEVICE_CONTEXT>
    \n+
    \n+
    104 static GLXFBEvaluator *Create(BufferDescriptor const &srcDesc,
    \n+
    105 BufferDescriptor const &dstDesc,
    \n+
    106 BufferDescriptor const &duDesc,
    \n+
    107 BufferDescriptor const &dvDesc,
    \n+
    108 DEVICE_CONTEXT deviceContext) {
    \n+
    109 bool interleavedDerivativeBuffers = deviceContext
    \n+
    110 ? deviceContext->AreInterleavedDerivativeBuffers()
    \n+
    111 : false;
    \n+
    112 return Create(srcDesc, dstDesc, duDesc, dvDesc,
    \n+
    113 interleavedDerivativeBuffers);
    \n+
    114 }
    \n+
    \n+
    115
    \n+
    \n+
    117 static GLXFBEvaluator *Create(BufferDescriptor const &srcDesc,
    \n+
    118 BufferDescriptor const &dstDesc,
    \n+
    119 BufferDescriptor const &duDesc,
    \n+
    120 BufferDescriptor const &dvDesc,
    \n+
    121 void * deviceContext) {
    \n+
    122 (void)deviceContext; // not used
    \n+
    123 return Create(srcDesc, dstDesc, duDesc, dvDesc);
    \n+
    124 }
    \n+
    \n+
    125
    \n+
    \n+
    126 static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc,
    \n+
    127 BufferDescriptor const &dstDesc,
    \n+
    128 BufferDescriptor const &duDesc,
    \n+
    129 BufferDescriptor const &dvDesc,
    \n+
    130 bool interleavedDerivativeBuffers = false) {
    \n+
    131 GLXFBEvaluator *instance = new GLXFBEvaluator(interleavedDerivativeBuffers);
    \n+
    132 if (instance->Compile(srcDesc, dstDesc, duDesc, dvDesc))
    \n+
    133 return instance;
    \n+
    134 delete instance;
    \n+
    135 return NULL;
    \n+
    136 }
    \n+
    \n+
    137
    \n+
    139 template <typename DEVICE_CONTEXT>
    \n+
    \n+
    140 static GLXFBEvaluator *Create(BufferDescriptor const &srcDesc,
    \n+
    141 BufferDescriptor const &dstDesc,
    \n+
    142 BufferDescriptor const &duDesc,
    \n+
    143 BufferDescriptor const &dvDesc,
    \n+
    144 BufferDescriptor const &duuDesc,
    \n+
    145 BufferDescriptor const &duvDesc,
    \n+
    146 BufferDescriptor const &dvvDesc,
    \n+
    147 DEVICE_CONTEXT deviceContext) {
    \n+
    148 bool interleavedDerivativeBuffers = deviceContext
    \n+
    149 ? deviceContext->AreInterleavedDerivativeBuffers()
    \n+
    150 : false;
    \n+
    151 return Create(srcDesc, dstDesc, duDesc, dvDesc,
    \n+
    152 duuDesc, duvDesc, dvvDesc,
    \n+
    153 interleavedDerivativeBuffers);
    \n+
    154 }
    \n+
    \n+
    155
    \n+
    \n+
    157 static GLXFBEvaluator *Create(BufferDescriptor const &srcDesc,
    \n+
    158 BufferDescriptor const &dstDesc,
    \n+
    159 BufferDescriptor const &duDesc,
    \n+
    160 BufferDescriptor const &dvDesc,
    \n+
    161 BufferDescriptor const &duuDesc,
    \n+
    162 BufferDescriptor const &duvDesc,
    \n+
    163 BufferDescriptor const &dvvDesc,
    \n+
    164 void * deviceContext) {
    \n+
    165 (void)deviceContext; // not used
    \n+
    166 return Create(srcDesc, dstDesc, duDesc, dvDesc,
    \n+
    167 duuDesc, duvDesc, dvvDesc);
    \n+
    168 }
    \n+
    \n+
    169
    \n+
    \n+
    170 static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc,
    \n+
    171 BufferDescriptor const &dstDesc,
    \n+
    172 BufferDescriptor const &duDesc,
    \n+
    173 BufferDescriptor const &dvDesc,
    \n+
    174 BufferDescriptor const &duuDesc,
    \n+
    175 BufferDescriptor const &duvDesc,
    \n+
    176 BufferDescriptor const &dvvDesc,
    \n+
    177 bool interleavedDerivativeBuffers = false) {
    \n+
    178 GLXFBEvaluator *instance = new GLXFBEvaluator(interleavedDerivativeBuffers);
    \n+
    179 if (instance->Compile(srcDesc, dstDesc, duDesc, dvDesc,
    \n+
    180 duuDesc, duvDesc, dvvDesc))
    \n+
    181 return instance;
    \n+
    182 delete instance;
    \n+
    183 return NULL;
    \n+
    184 }
    \n+
    \n+
    185
    \n+
    199 GLXFBEvaluator(bool interleavedDerivativeBuffers = false);
    \n+
    200
    \n+\n+
    203
    \n+
    209
    \n+
    237 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n+
    \n+
    238 static bool EvalStencils(
    \n+
    239 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    240 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n
    241 STENCIL_TABLE const *stencilTable,
    \n-
    242 GLComputeEvaluator const *instance,
    \n+
    242 GLXFBEvaluator const *instance,
    \n
    243 void * deviceContext = NULL) {
    \n
    244
    \n
    245 if (instance) {
    \n-
    246 return instance->EvalStencils(srcBuffer, srcDesc,
    \n+
    246 return instance->EvalStencils(srcBuffer, srcDesc,
    \n
    247 dstBuffer, dstDesc,
    \n-
    248 duBuffer, duDesc,
    \n-
    249 dvBuffer, dvDesc,
    \n-
    250 stencilTable);
    \n-
    251 } else {
    \n-
    252 // Create an instance on demand (slow)
    \n-
    253 (void)deviceContext; // unused
    \n-
    254 instance = Create(srcDesc, dstDesc, duDesc, dvDesc);
    \n+
    248 stencilTable);
    \n+
    249 } else {
    \n+
    250 // Create an instance on demand (slow)
    \n+
    251 (void)deviceContext; // unused
    \n+
    252 instance = Create(srcDesc, dstDesc,
    \n+\n+\n
    255 if (instance) {
    \n-
    256 bool r = instance->EvalStencils(srcBuffer, srcDesc,
    \n+
    256 bool r = instance->EvalStencils(srcBuffer, srcDesc,
    \n
    257 dstBuffer, dstDesc,
    \n-
    258 duBuffer, duDesc,
    \n-
    259 dvBuffer, dvDesc,
    \n-
    260 stencilTable);
    \n-
    261 delete instance;
    \n-
    262 return r;
    \n-
    263 }
    \n-
    264 return false;
    \n-
    265 }
    \n-
    266 }
    \n-
    \n-
    267
    \n-
    325 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n-
    \n-
    326 static bool EvalStencils(
    \n-
    327 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    328 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    329 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    330 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    331 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n-
    332 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n-
    333 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n-
    334 STENCIL_TABLE const *stencilTable,
    \n-
    335 GLComputeEvaluator const *instance,
    \n-
    336 void * deviceContext = NULL) {
    \n+
    258 stencilTable);
    \n+
    259 delete instance;
    \n+
    260 return r;
    \n+
    261 }
    \n+
    262 return false;
    \n+
    263 }
    \n+
    264 }
    \n+
    \n+
    265
    \n+
    305 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n+
    \n+
    306 static bool EvalStencils(
    \n+
    307 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    308 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    309 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    310 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    311 STENCIL_TABLE const *stencilTable,
    \n+
    312 GLXFBEvaluator const *instance,
    \n+
    313 void * deviceContext = NULL) {
    \n+
    314
    \n+
    315 if (instance) {
    \n+
    316 return instance->EvalStencils(srcBuffer, srcDesc,
    \n+
    317 dstBuffer, dstDesc,
    \n+
    318 duBuffer, duDesc,
    \n+
    319 dvBuffer, dvDesc,
    \n+
    320 stencilTable);
    \n+
    321 } else {
    \n+
    322 // Create an instance on demand (slow)
    \n+
    323 (void)deviceContext; // unused
    \n+
    324 instance = Create(srcDesc, dstDesc, duDesc, dvDesc);
    \n+
    325 if (instance) {
    \n+
    326 bool r = instance->EvalStencils(srcBuffer, srcDesc,
    \n+
    327 dstBuffer, dstDesc,
    \n+
    328 duBuffer, duDesc,
    \n+
    329 dvBuffer, dvDesc,
    \n+
    330 stencilTable);
    \n+
    331 delete instance;
    \n+
    332 return r;
    \n+
    333 }
    \n+
    334 return false;
    \n+
    335 }
    \n+
    336 }
    \n+
    \n
    337
    \n-
    338 if (instance) {
    \n-
    339 return instance->EvalStencils(srcBuffer, srcDesc,
    \n-
    340 dstBuffer, dstDesc,
    \n-
    341 duBuffer, duDesc,
    \n-
    342 dvBuffer, dvDesc,
    \n-
    343 duuBuffer, duuDesc,
    \n-
    344 duvBuffer, duvDesc,
    \n-
    345 dvvBuffer, dvvDesc,
    \n-
    346 stencilTable);
    \n-
    347 } else {
    \n-
    348 // Create an instance on demand (slow)
    \n-
    349 (void)deviceContext; // unused
    \n-
    350 instance = Create(srcDesc, dstDesc, duDesc, dvDesc,
    \n-
    351 duuDesc, duvDesc, dvvDesc);
    \n-
    352 if (instance) {
    \n-
    353 bool r = instance->EvalStencils(srcBuffer, srcDesc,
    \n-
    354 dstBuffer, dstDesc,
    \n-
    355 duBuffer, duDesc,
    \n-
    356 dvBuffer, dvDesc,
    \n-
    357 duuBuffer, duuDesc,
    \n-
    358 duvBuffer, duvDesc,
    \n-
    359 dvvBuffer, dvvDesc,
    \n-
    360 stencilTable);
    \n-
    361 delete instance;
    \n-
    362 return r;
    \n-
    363 }
    \n-
    364 return false;
    \n-
    365 }
    \n-
    366 }
    \n-
    \n-
    367
    \n-
    385 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n-
    \n-\n-
    387 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    388 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    389 STENCIL_TABLE const *stencilTable) const {
    \n-
    390 return EvalStencils(srcBuffer->BindVBO(), srcDesc,
    \n-
    391 dstBuffer->BindVBO(), dstDesc,
    \n-
    392 0, BufferDescriptor(),
    \n-
    393 0, BufferDescriptor(),
    \n-
    394 stencilTable->GetSizesBuffer(),
    \n-
    395 stencilTable->GetOffsetsBuffer(),
    \n-
    396 stencilTable->GetIndicesBuffer(),
    \n-
    397 stencilTable->GetWeightsBuffer(),
    \n-
    398 0,
    \n-
    399 0,
    \n-
    400 /* start = */ 0,
    \n-
    401 /* end = */ stencilTable->GetNumStencils());
    \n-
    402 }
    \n-
    \n-
    403
    \n-
    433 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n-
    \n-\n-
    435 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    436 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    437 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    438 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    439 STENCIL_TABLE const *stencilTable) const {
    \n-
    440 return EvalStencils(srcBuffer->BindVBO(), srcDesc,
    \n-
    441 dstBuffer->BindVBO(), dstDesc,
    \n-
    442 duBuffer->BindVBO(), duDesc,
    \n-
    443 dvBuffer->BindVBO(), dvDesc,
    \n-
    444 stencilTable->GetSizesBuffer(),
    \n-
    445 stencilTable->GetOffsetsBuffer(),
    \n-
    446 stencilTable->GetIndicesBuffer(),
    \n-
    447 stencilTable->GetWeightsBuffer(),
    \n-
    448 stencilTable->GetDuWeightsBuffer(),
    \n-
    449 stencilTable->GetDvWeightsBuffer(),
    \n-
    450 /* start = */ 0,
    \n-
    451 /* end = */ stencilTable->GetNumStencils());
    \n-
    452 }
    \n-
    \n-
    453
    \n-
    501 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n-
    \n-\n-
    503 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    504 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    505 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    506 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    507 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n-
    508 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n-
    509 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n-
    510 STENCIL_TABLE const *stencilTable) const {
    \n-
    511 return EvalStencils(srcBuffer->BindVBO(), srcDesc,
    \n-
    512 dstBuffer->BindVBO(), dstDesc,
    \n-
    513 duBuffer->BindVBO(), duDesc,
    \n-
    514 dvBuffer->BindVBO(), dvDesc,
    \n-
    515 duuBuffer->BindVBO(), duuDesc,
    \n-
    516 duvBuffer->BindVBO(), duvDesc,
    \n-
    517 dvvBuffer->BindVBO(), dvvDesc,
    \n-
    518 stencilTable->GetSizesBuffer(),
    \n-
    519 stencilTable->GetOffsetsBuffer(),
    \n-
    520 stencilTable->GetIndicesBuffer(),
    \n-
    521 stencilTable->GetWeightsBuffer(),
    \n-
    522 stencilTable->GetDuWeightsBuffer(),
    \n-
    523 stencilTable->GetDvWeightsBuffer(),
    \n-
    524 stencilTable->GetDuuWeightsBuffer(),
    \n-
    525 stencilTable->GetDuvWeightsBuffer(),
    \n-
    526 stencilTable->GetDvvWeightsBuffer(),
    \n-
    527 /* start = */ 0,
    \n-
    528 /* end = */ stencilTable->GetNumStencils());
    \n-
    529 }
    \n-
    \n-
    530
    \n-
    566 bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    567 GLuint dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    568 GLuint duBuffer, BufferDescriptor const &duDesc,
    \n-
    569 GLuint dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    570 GLuint sizesBuffer,
    \n-
    571 GLuint offsetsBuffer,
    \n-
    572 GLuint indicesBuffer,
    \n-
    573 GLuint weightsBuffer,
    \n-
    574 GLuint duWeightsBuffer,
    \n-
    575 GLuint dvWeightsBuffer,
    \n-
    576 int start,
    \n-
    577 int end) const;
    \n-
    578
    \n-
    632 bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    633 GLuint dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    634 GLuint duBuffer, BufferDescriptor const &duDesc,
    \n-
    635 GLuint dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    636 GLuint duuBuffer, BufferDescriptor const &duuDesc,
    \n-
    637 GLuint duvBuffer, BufferDescriptor const &duvDesc,
    \n-
    638 GLuint dvvBuffer, BufferDescriptor const &dvvDesc,
    \n-
    639 GLuint sizesBuffer,
    \n-
    640 GLuint offsetsBuffer,
    \n-
    641 GLuint indicesBuffer,
    \n-
    642 GLuint weightsBuffer,
    \n-
    643 GLuint duWeightsBuffer,
    \n-
    644 GLuint dvWeightsBuffer,
    \n-
    645 GLuint duuWeightsBuffer,
    \n-
    646 GLuint duvWeightsBuffer,
    \n-
    647 GLuint dvvWeightsBuffer,
    \n-
    648 int start,
    \n-
    649 int end) const;
    \n-
    650
    \n-
    656
    \n-
    689 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    690 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-
    691 static bool EvalPatches(
    \n-
    692 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    693 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    694 int numPatchCoords,
    \n-
    695 PATCHCOORD_BUFFER *patchCoords,
    \n-
    696 PATCH_TABLE *patchTable,
    \n-
    697 GLComputeEvaluator const *instance,
    \n-
    698 void * deviceContext = NULL) {
    \n-
    699
    \n-
    700 if (instance) {
    \n-
    701 return instance->EvalPatches(srcBuffer, srcDesc,
    \n-
    702 dstBuffer, dstDesc,
    \n-
    703 numPatchCoords, patchCoords,
    \n-
    704 patchTable);
    \n-
    705 } else {
    \n-
    706 // Create an instance on demand (slow)
    \n-
    707 (void)deviceContext; // unused
    \n-
    708 instance = Create(srcDesc, dstDesc,
    \n-\n-\n-
    711 if (instance) {
    \n-
    712 bool r = instance->EvalPatches(srcBuffer, srcDesc,
    \n-
    713 dstBuffer, dstDesc,
    \n-
    714 numPatchCoords, patchCoords,
    \n-
    715 patchTable);
    \n-
    716 delete instance;
    \n-
    717 return r;
    \n-
    718 }
    \n-
    719 return false;
    \n-
    720 }
    \n-
    721 }
    \n-
    \n-
    722
    \n-
    767 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    768 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-
    769 static bool EvalPatches(
    \n-
    770 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    771 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    772 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    773 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    774 int numPatchCoords,
    \n-
    775 PATCHCOORD_BUFFER *patchCoords,
    \n-
    776 PATCH_TABLE *patchTable,
    \n-
    777 GLComputeEvaluator const *instance,
    \n-
    778 void * deviceContext = NULL) {
    \n-
    779
    \n-
    780 if (instance) {
    \n-
    781 return instance->EvalPatches(srcBuffer, srcDesc,
    \n-
    782 dstBuffer, dstDesc,
    \n-
    783 duBuffer, duDesc,
    \n-
    784 dvBuffer, dvDesc,
    \n-
    785 numPatchCoords, patchCoords,
    \n-
    786 patchTable);
    \n-
    787 } else {
    \n-
    788 // Create an instance on demand (slow)
    \n-
    789 (void)deviceContext; // unused
    \n-
    790 instance = Create(srcDesc, dstDesc,
    \n-
    791 duDesc, dvDesc);
    \n-
    792 if (instance) {
    \n-
    793 bool r = instance->EvalPatches(srcBuffer, srcDesc,
    \n-
    794 dstBuffer, dstDesc,
    \n-
    795 duBuffer, duDesc,
    \n-
    796 dvBuffer, dvDesc,
    \n-
    797 numPatchCoords, patchCoords,
    \n-
    798 patchTable);
    \n-
    799 delete instance;
    \n-
    800 return r;
    \n-
    801 }
    \n-
    802 return false;
    \n-
    803 }
    \n-
    804 }
    \n-
    \n-
    805
    \n-
    868 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    869 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-
    870 static bool EvalPatches(
    \n-
    871 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    872 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    873 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    874 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    875 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n-
    876 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n-
    877 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n-
    878 int numPatchCoords,
    \n-
    879 PATCHCOORD_BUFFER *patchCoords,
    \n-
    880 PATCH_TABLE *patchTable,
    \n-
    881 GLComputeEvaluator const *instance,
    \n-
    882 void * deviceContext = NULL) {
    \n-
    883
    \n-
    884 if (instance) {
    \n-
    885 return instance->EvalPatches(srcBuffer, srcDesc,
    \n-
    886 dstBuffer, dstDesc,
    \n-
    887 duBuffer, duDesc,
    \n-
    888 dvBuffer, dvDesc,
    \n-
    889 duuBuffer, duuDesc,
    \n-
    890 duvBuffer, duvDesc,
    \n-
    891 dvvBuffer, dvvDesc,
    \n-
    892 numPatchCoords, patchCoords,
    \n-
    893 patchTable);
    \n-
    894 } else {
    \n-
    895 // Create an instance on demand (slow)
    \n-
    896 (void)deviceContext; // unused
    \n-
    897 instance = Create(srcDesc, dstDesc,
    \n-
    898 duDesc, dvDesc,
    \n-
    899 duuDesc, duvDesc, dvvDesc);
    \n-
    900 if (instance) {
    \n-
    901 bool r = instance->EvalPatches(srcBuffer, srcDesc,
    \n-
    902 dstBuffer, dstDesc,
    \n-
    903 duBuffer, duDesc,
    \n-
    904 dvBuffer, dvDesc,
    \n-
    905 duuBuffer, duuDesc,
    \n-
    906 duvBuffer, duvDesc,
    \n-
    907 dvvBuffer, dvvDesc,
    \n-
    908 numPatchCoords, patchCoords,
    \n-
    909 patchTable);
    \n-
    910 delete instance;
    \n-
    911 return r;
    \n-
    912 }
    \n-
    913 return false;
    \n-
    914 }
    \n-
    915 }
    \n+
    395 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n+
    \n+
    396 static bool EvalStencils(
    \n+
    397 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    398 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    399 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    400 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    401 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n+
    402 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n+
    403 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n+
    404 STENCIL_TABLE const *stencilTable,
    \n+
    405 GLXFBEvaluator const *instance,
    \n+
    406 void * deviceContext = NULL) {
    \n+
    407
    \n+
    408 if (instance) {
    \n+
    409 return instance->EvalStencils(srcBuffer, srcDesc,
    \n+
    410 dstBuffer, dstDesc,
    \n+
    411 duBuffer, duDesc,
    \n+
    412 dvBuffer, dvDesc,
    \n+
    413 duuBuffer, duuDesc,
    \n+
    414 duvBuffer, duvDesc,
    \n+
    415 dvvBuffer, dvvDesc,
    \n+
    416 stencilTable);
    \n+
    417 } else {
    \n+
    418 // Create an instance on demand (slow)
    \n+
    419 (void)deviceContext; // unused
    \n+
    420 instance = Create(srcDesc, dstDesc,
    \n+
    421 duDesc, dvDesc,
    \n+
    422 duuDesc, duvDesc, dvvDesc);
    \n+
    423 if (instance) {
    \n+
    424 bool r = instance->EvalStencils(srcBuffer, srcDesc,
    \n+
    425 dstBuffer, dstDesc,
    \n+
    426 duBuffer, duDesc,
    \n+
    427 dvBuffer, dvDesc,
    \n+
    428 duuBuffer, duuDesc,
    \n+
    429 duvBuffer, duvDesc,
    \n+
    430 dvvBuffer, dvvDesc,
    \n+
    431 stencilTable);
    \n+
    432 delete instance;
    \n+
    433 return r;
    \n+
    434 }
    \n+
    435 return false;
    \n+
    436 }
    \n+
    437 }
    \n+
    \n+
    438
    \n+
    456 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n+
    \n+\n+
    458 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    459 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    460 STENCIL_TABLE const *stencilTable) const {
    \n+
    461
    \n+
    462 return EvalStencils(srcBuffer->BindVBO(), srcDesc,
    \n+
    463 dstBuffer->BindVBO(), dstDesc,
    \n+
    464 0, BufferDescriptor(),
    \n+
    465 0, BufferDescriptor(),
    \n+
    466 stencilTable->GetSizesTexture(),
    \n+
    467 stencilTable->GetOffsetsTexture(),
    \n+
    468 stencilTable->GetIndicesTexture(),
    \n+
    469 stencilTable->GetWeightsTexture(),
    \n+
    470 0,
    \n+
    471 0,
    \n+
    472 /* start = */ 0,
    \n+
    473 /* end = */ stencilTable->GetNumStencils());
    \n+
    474 }
    \n+
    \n+
    475
    \n+
    505 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n+
    \n+\n+
    507 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    508 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    509 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    510 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    511 STENCIL_TABLE const *stencilTable) const {
    \n+
    512
    \n+
    513 return EvalStencils(srcBuffer->BindVBO(), srcDesc,
    \n+
    514 dstBuffer->BindVBO(), dstDesc,
    \n+
    515 duBuffer->BindVBO(), duDesc,
    \n+
    516 dvBuffer->BindVBO(), dvDesc,
    \n+
    517 stencilTable->GetSizesTexture(),
    \n+
    518 stencilTable->GetOffsetsTexture(),
    \n+
    519 stencilTable->GetIndicesTexture(),
    \n+
    520 stencilTable->GetWeightsTexture(),
    \n+
    521 stencilTable->GetDuWeightsTexture(),
    \n+
    522 stencilTable->GetDvWeightsTexture(),
    \n+
    523 /* start = */ 0,
    \n+
    524 /* end = */ stencilTable->GetNumStencils());
    \n+
    525 }
    \n+
    \n+
    526
    \n+
    574 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n+
    \n+\n+
    576 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    577 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    578 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    579 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    580 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n+
    581 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n+
    582 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n+
    583 STENCIL_TABLE const *stencilTable) const {
    \n+
    584
    \n+
    585 return EvalStencils(srcBuffer->BindVBO(), srcDesc,
    \n+
    586 dstBuffer->BindVBO(), dstDesc,
    \n+
    587 duBuffer->BindVBO(), duDesc,
    \n+
    588 dvBuffer->BindVBO(), dvDesc,
    \n+
    589 duuBuffer->BindVBO(), duuDesc,
    \n+
    590 duvBuffer->BindVBO(), duvDesc,
    \n+
    591 dvvBuffer->BindVBO(), dvvDesc,
    \n+
    592 stencilTable->GetSizesTexture(),
    \n+
    593 stencilTable->GetOffsetsTexture(),
    \n+
    594 stencilTable->GetIndicesTexture(),
    \n+
    595 stencilTable->GetWeightsTexture(),
    \n+
    596 stencilTable->GetDuWeightsTexture(),
    \n+
    597 stencilTable->GetDvWeightsTexture(),
    \n+
    598 stencilTable->GetDuuWeightsTexture(),
    \n+
    599 stencilTable->GetDuvWeightsTexture(),
    \n+
    600 stencilTable->GetDvvWeightsTexture(),
    \n+
    601 /* start = */ 0,
    \n+
    602 /* end = */ stencilTable->GetNumStencils());
    \n+
    603 }
    \n+
    \n+
    604
    \n+
    640 bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    641 GLuint dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    642 GLuint duBuffer, BufferDescriptor const &duDesc,
    \n+
    643 GLuint dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    644 GLuint sizesBuffer,
    \n+
    645 GLuint offsetsBuffer,
    \n+
    646 GLuint indicesBuffer,
    \n+
    647 GLuint weightsBuffer,
    \n+
    648 GLuint duWeightsBuffer,
    \n+
    649 GLuint dvWeightsBuffer,
    \n+
    650 int start,
    \n+
    651 int end) const;
    \n+
    652
    \n+
    706 bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    707 GLuint dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    708 GLuint duBuffer, BufferDescriptor const &duDesc,
    \n+
    709 GLuint dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    710 GLuint duuBuffer, BufferDescriptor const &duuDesc,
    \n+
    711 GLuint duvBuffer, BufferDescriptor const &duvDesc,
    \n+
    712 GLuint dvvBuffer, BufferDescriptor const &dvvDesc,
    \n+
    713 GLuint sizesBuffer,
    \n+
    714 GLuint offsetsBuffer,
    \n+
    715 GLuint indicesBuffer,
    \n+
    716 GLuint weightsBuffer,
    \n+
    717 GLuint duWeightsBuffer,
    \n+
    718 GLuint dvWeightsBuffer,
    \n+
    719 GLuint duuWeightsBuffer,
    \n+
    720 GLuint duvWeightsBuffer,
    \n+
    721 GLuint dvvWeightsBuffer,
    \n+
    722 int start,
    \n+
    723 int end) const;
    \n+
    724
    \n+
    730
    \n+
    763 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    764 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+
    765 static bool EvalPatches(
    \n+
    766 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    767 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    768 int numPatchCoords,
    \n+
    769 PATCHCOORD_BUFFER *patchCoords,
    \n+
    770 PATCH_TABLE *patchTable,
    \n+
    771 GLXFBEvaluator const *instance,
    \n+
    772 void * deviceContext = NULL) {
    \n+
    773
    \n+
    774 if (instance) {
    \n+
    775 return instance->EvalPatches(srcBuffer, srcDesc,
    \n+
    776 dstBuffer, dstDesc,
    \n+
    777 numPatchCoords, patchCoords,
    \n+
    778 patchTable);
    \n+
    779 } else {
    \n+
    780 // Create an instance on demand (slow)
    \n+
    781 (void)deviceContext; // unused
    \n+
    782 instance = Create(srcDesc, dstDesc,
    \n+\n+\n+
    785 if (instance) {
    \n+
    786 bool r = instance->EvalPatches(srcBuffer, srcDesc,
    \n+
    787 dstBuffer, dstDesc,
    \n+
    788 numPatchCoords, patchCoords,
    \n+
    789 patchTable);
    \n+
    790 delete instance;
    \n+
    791 return r;
    \n+
    792 }
    \n+
    793 return false;
    \n+
    794 }
    \n+
    795 }
    \n+
    \n+
    796
    \n+
    841 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    842 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+
    843 static bool EvalPatches(
    \n+
    844 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    845 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    846 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    847 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    848 int numPatchCoords,
    \n+
    849 PATCHCOORD_BUFFER *patchCoords,
    \n+
    850 PATCH_TABLE *patchTable,
    \n+
    851 GLXFBEvaluator const *instance,
    \n+
    852 void * deviceContext = NULL) {
    \n+
    853
    \n+
    854 if (instance) {
    \n+
    855 return instance->EvalPatches(srcBuffer, srcDesc,
    \n+
    856 dstBuffer, dstDesc,
    \n+
    857 duBuffer, duDesc,
    \n+
    858 dvBuffer, dvDesc,
    \n+
    859 numPatchCoords, patchCoords,
    \n+
    860 patchTable);
    \n+
    861 } else {
    \n+
    862 // Create an instance on demand (slow)
    \n+
    863 (void)deviceContext; // unused
    \n+
    864 instance = Create(srcDesc, dstDesc, duDesc, dvDesc);
    \n+
    865 if (instance) {
    \n+
    866 bool r = instance->EvalPatches(srcBuffer, srcDesc,
    \n+
    867 dstBuffer, dstDesc,
    \n+
    868 duBuffer, duDesc,
    \n+
    869 dvBuffer, dvDesc,
    \n+
    870 numPatchCoords, patchCoords,
    \n+
    871 patchTable);
    \n+
    872 delete instance;
    \n+
    873 return r;
    \n+
    874 }
    \n+
    875 return false;
    \n+
    876 }
    \n+
    877 }
    \n
    \n-
    916
    \n+
    878
    \n
    941 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n
    942 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n
    \n-\n+
    943 static bool EvalPatches(
    \n
    944 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n
    945 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    946 int numPatchCoords,
    \n-
    947 PATCHCOORD_BUFFER *patchCoords,
    \n-
    948 PATCH_TABLE *patchTable) const {
    \n-
    949
    \n-
    950 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n-
    951 dstBuffer->BindVBO(), dstDesc,
    \n-
    952 0, BufferDescriptor(),
    \n-
    953 0, BufferDescriptor(),
    \n-
    954 numPatchCoords,
    \n-
    955 patchCoords->BindVBO(),
    \n-
    956 patchTable->GetPatchArrays(),
    \n-
    957 patchTable->GetPatchIndexBuffer(),
    \n-
    958 patchTable->GetPatchParamBuffer());
    \n-
    959 }
    \n-
    \n-
    960
    \n-
    995 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    996 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    998 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    999 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1000 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    1001 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    1002 int numPatchCoords,
    \n-
    1003 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1004 PATCH_TABLE *patchTable) const {
    \n-
    1005
    \n-
    1006 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n-
    1007 dstBuffer->BindVBO(), dstDesc,
    \n-
    1008 duBuffer->BindVBO(), duDesc,
    \n-
    1009 dvBuffer->BindVBO(), dvDesc,
    \n-
    1010 numPatchCoords,
    \n-
    1011 patchCoords->BindVBO(),
    \n-
    1012 patchTable->GetPatchArrays(),
    \n-
    1013 patchTable->GetPatchIndexBuffer(),
    \n-
    1014 patchTable->GetPatchParamBuffer());
    \n-
    1015 }
    \n-
    \n-
    1016
    \n-
    1069 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1070 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1072 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1073 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1074 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    1075 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    1076 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n-
    1077 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n-
    1078 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n-
    1079 int numPatchCoords,
    \n-
    1080 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1081 PATCH_TABLE *patchTable) const {
    \n-
    1082
    \n-
    1083 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n-
    1084 dstBuffer->BindVBO(), dstDesc,
    \n-
    1085 duBuffer->BindVBO(), duDesc,
    \n-
    1086 dvBuffer->BindVBO(), dvDesc,
    \n-
    1087 duuBuffer->BindVBO(), duuDesc,
    \n-
    1088 duvBuffer->BindVBO(), duvDesc,
    \n-
    1089 dvvBuffer->BindVBO(), dvvDesc,
    \n-
    1090 numPatchCoords,
    \n-
    1091 patchCoords->BindVBO(),
    \n-
    1092 patchTable->GetPatchArrays(),
    \n-
    1093 patchTable->GetPatchIndexBuffer(),
    \n-
    1094 patchTable->GetPatchParamBuffer());
    \n-
    1095 }
    \n-
    \n-
    1096
    \n-
    1097 bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1098 GLuint dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1099 GLuint duBuffer, BufferDescriptor const &duDesc,
    \n-
    1100 GLuint dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    1101 int numPatchCoords,
    \n-
    1102 GLuint patchCoordsBuffer,
    \n-
    1103 const PatchArrayVector &patchArrays,
    \n-
    1104 GLuint patchIndexBuffer,
    \n-
    1105 GLuint patchParamsBuffer) const;
    \n-
    1106
    \n-
    1107 bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1108 GLuint dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1109 GLuint duBuffer, BufferDescriptor const &duDesc,
    \n-
    1110 GLuint dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    1111 GLuint duuBuffer, BufferDescriptor const &duuDesc,
    \n-
    1112 GLuint duvBuffer, BufferDescriptor const &duvDesc,
    \n-
    1113 GLuint dvvBuffer, BufferDescriptor const &dvvDesc,
    \n-
    1114 int numPatchCoords,
    \n-
    1115 GLuint patchCoordsBuffer,
    \n-
    1116 const PatchArrayVector &patchArrays,
    \n-
    1117 GLuint patchIndexBuffer,
    \n-
    1118 GLuint patchParamsBuffer) const;
    \n-
    1119
    \n-
    1152 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1153 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1155 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1156 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1157 int numPatchCoords,
    \n-
    1158 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1159 PATCH_TABLE *patchTable,
    \n-
    1160 GLComputeEvaluator const *instance,
    \n-
    1161 void * deviceContext = NULL) {
    \n-
    1162
    \n-
    1163 if (instance) {
    \n-
    1164 return instance->EvalPatchesVarying(
    \n-
    1165 srcBuffer, srcDesc,
    \n-
    1166 dstBuffer, dstDesc,
    \n-
    1167 numPatchCoords, patchCoords,
    \n-
    1168 patchTable);
    \n-
    1169 } else {
    \n-
    1170 // Create an instance on demand (slow)
    \n-
    1171 (void)deviceContext; // unused
    \n-
    1172 instance = Create(srcDesc, dstDesc,
    \n-\n-\n-
    1175 if (instance) {
    \n-
    1176 bool r = instance->EvalPatchesVarying(
    \n-
    1177 srcBuffer, srcDesc,
    \n-
    1178 dstBuffer, dstDesc,
    \n-
    1179 numPatchCoords, patchCoords,
    \n-
    1180 patchTable);
    \n-
    1181 delete instance;
    \n-
    1182 return r;
    \n-
    1183 }
    \n-
    1184 return false;
    \n-
    1185 }
    \n-
    1186 }
    \n-
    \n-
    1187
    \n-
    1212 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1213 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1215 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1216 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1217 int numPatchCoords,
    \n-
    1218 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1219 PATCH_TABLE *patchTable) const {
    \n-
    1220
    \n-
    1221 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n-
    1222 dstBuffer->BindVBO(), dstDesc,
    \n-
    1223 0, BufferDescriptor(),
    \n-
    1224 0, BufferDescriptor(),
    \n-
    1225 numPatchCoords,
    \n-
    1226 patchCoords->BindVBO(),
    \n-
    1227 patchTable->GetVaryingPatchArrays(),
    \n-
    1228 patchTable->GetVaryingPatchIndexBuffer(),
    \n-
    1229 patchTable->GetPatchParamBuffer());
    \n-
    1230 }
    \n-
    \n-
    1231
    \n-
    1276 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1277 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1279 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1280 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1281 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    1282 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    1283 int numPatchCoords,
    \n-
    1284 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1285 PATCH_TABLE *patchTable,
    \n-
    1286 GLComputeEvaluator const *instance,
    \n-
    1287 void * deviceContext = NULL) {
    \n-
    1288
    \n-
    1289 if (instance) {
    \n-
    1290 return instance->EvalPatchesVarying(
    \n-
    1291 srcBuffer, srcDesc,
    \n-
    1292 dstBuffer, dstDesc,
    \n-
    1293 duBuffer, duDesc,
    \n-
    1294 dvBuffer, dvDesc,
    \n-
    1295 numPatchCoords, patchCoords,
    \n-
    1296 patchTable);
    \n-
    1297 } else {
    \n-
    1298 // Create an instance on demand (slow)
    \n-
    1299 (void)deviceContext; // unused
    \n-
    1300 instance = Create(srcDesc, dstDesc,
    \n-
    1301 duDesc, dvDesc);
    \n-
    1302 if (instance) {
    \n-
    1303 bool r = instance->EvalPatchesVarying(
    \n-
    1304 srcBuffer, srcDesc,
    \n-
    1305 dstBuffer, dstDesc,
    \n-
    1306 duBuffer, duDesc,
    \n-
    1307 dvBuffer, dvDesc,
    \n-
    1308 numPatchCoords, patchCoords,
    \n-
    1309 patchTable);
    \n-
    1310 delete instance;
    \n-
    1311 return r;
    \n-
    1312 }
    \n-
    1313 return false;
    \n-
    1314 }
    \n-
    1315 }
    \n-
    \n-
    1316
    \n-
    1353 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1354 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1356 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1357 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1358 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    1359 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    1360 int numPatchCoords,
    \n-
    1361 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1362 PATCH_TABLE *patchTable) const {
    \n-
    1363
    \n-
    1364 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n-
    1365 dstBuffer->BindVBO(), dstDesc,
    \n-
    1366 duBuffer->BindVBO(), duDesc,
    \n-
    1367 dvBuffer->BindVBO(), dvDesc,
    \n-
    1368 numPatchCoords,
    \n-
    1369 patchCoords->BindVBO(),
    \n-
    1370 patchTable->GetVaryingPatchArrays(),
    \n-
    1371 patchTable->GetVaryingPatchIndexBuffer(),
    \n-
    1372 patchTable->GetPatchParamBuffer());
    \n-
    1373 }
    \n-
    \n-
    1374
    \n-
    1437 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1438 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1440 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1441 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1442 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    1443 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    1444 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n-
    1445 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n-
    1446 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n-
    1447 int numPatchCoords,
    \n-
    1448 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1449 PATCH_TABLE *patchTable,
    \n-
    1450 GLComputeEvaluator const *instance,
    \n-
    1451 void * deviceContext = NULL) {
    \n-
    1452
    \n-
    1453 if (instance) {
    \n-
    1454 return instance->EvalPatchesVarying(
    \n-
    1455 srcBuffer, srcDesc,
    \n-
    1456 dstBuffer, dstDesc,
    \n-
    1457 duBuffer, duDesc,
    \n-
    1458 dvBuffer, dvDesc,
    \n-
    1459 duuBuffer, duuDesc,
    \n-
    1460 duvBuffer, duvDesc,
    \n-
    1461 dvvBuffer, dvvDesc,
    \n-
    1462 numPatchCoords, patchCoords,
    \n-
    1463 patchTable);
    \n-
    1464 } else {
    \n-
    1465 // Create an instance on demand (slow)
    \n-
    1466 (void)deviceContext; // unused
    \n-
    1467 instance = Create(srcDesc, dstDesc,
    \n-
    1468 duDesc, dvDesc,
    \n-
    1469 duuDesc, duvDesc, dvvDesc);
    \n-
    1470 if (instance) {
    \n-
    1471 bool r = instance->EvalPatchesVarying(
    \n-
    1472 srcBuffer, srcDesc,
    \n-
    1473 dstBuffer, dstDesc,
    \n-
    1474 duBuffer, duDesc,
    \n-
    1475 dvBuffer, dvDesc,
    \n-
    1476 duuBuffer, duuDesc,
    \n-
    1477 duvBuffer, duvDesc,
    \n-
    1478 dvvBuffer, dvvDesc,
    \n-
    1479 numPatchCoords, patchCoords,
    \n-
    1480 patchTable);
    \n-
    1481 delete instance;
    \n-
    1482 return r;
    \n-
    1483 }
    \n-
    1484 return false;
    \n-
    1485 }
    \n-
    1486 }
    \n-
    \n-
    1487
    \n-
    1542 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1543 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1545 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1546 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1547 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    1548 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    1549 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n-
    1550 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n-
    1551 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n-
    1552 int numPatchCoords,
    \n-
    1553 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1554 PATCH_TABLE *patchTable) const {
    \n-
    1555
    \n-
    1556 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n-
    1557 dstBuffer->BindVBO(), dstDesc,
    \n-
    1558 duBuffer->BindVBO(), duDesc,
    \n-
    1559 dvBuffer->BindVBO(), dvDesc,
    \n-
    1560 duuBuffer->BindVBO(), duuDesc,
    \n-
    1561 duvBuffer->BindVBO(), duvDesc,
    \n-
    1562 dvvBuffer->BindVBO(), dvvDesc,
    \n-
    1563 numPatchCoords,
    \n-
    1564 patchCoords->BindVBO(),
    \n-
    1565 patchTable->GetVaryingPatchArrays(),
    \n-
    1566 patchTable->GetVaryingPatchIndexBuffer(),
    \n-
    1567 patchTable->GetPatchParamBuffer());
    \n-
    1568 }
    \n-
    \n-
    1569
    \n-
    1604 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1605 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1607 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1608 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1609 int numPatchCoords,
    \n-
    1610 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1611 PATCH_TABLE *patchTable,
    \n-
    1612 int fvarChannel,
    \n-
    1613 GLComputeEvaluator const *instance,
    \n-
    1614 void * deviceContext = NULL) {
    \n-
    1615
    \n-
    1616 if (instance) {
    \n-
    1617 return instance->EvalPatchesFaceVarying(
    \n-
    1618 srcBuffer, srcDesc,
    \n-
    1619 dstBuffer, dstDesc,
    \n-
    1620 numPatchCoords, patchCoords,
    \n-
    1621 patchTable, fvarChannel);
    \n-
    1622 } else {
    \n-
    1623 // Create an instance on demand (slow)
    \n-
    1624 (void)deviceContext; // unused
    \n-
    1625 instance = Create(srcDesc, dstDesc,
    \n-\n-\n-
    1628 if (instance) {
    \n-
    1629 bool r = instance->EvalPatchesFaceVarying(
    \n-
    1630 srcBuffer, srcDesc,
    \n-
    1631 dstBuffer, dstDesc,
    \n-
    1632 numPatchCoords, patchCoords,
    \n-
    1633 patchTable, fvarChannel);
    \n-
    1634 delete instance;
    \n-
    1635 return r;
    \n-
    1636 }
    \n-
    1637 return false;
    \n-
    1638 }
    \n-
    1639 }
    \n-
    \n-
    1640
    \n-
    1667 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1668 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1670 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1671 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1672 int numPatchCoords,
    \n-
    1673 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1674 PATCH_TABLE *patchTable,
    \n-
    1675 int fvarChannel = 0) const {
    \n-
    1676
    \n-
    1677 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n-
    1678 dstBuffer->BindVBO(), dstDesc,
    \n-
    1679 0, BufferDescriptor(),
    \n-
    1680 0, BufferDescriptor(),
    \n-
    1681 numPatchCoords,
    \n-
    1682 patchCoords->BindVBO(),
    \n-
    1683 patchTable->GetFVarPatchArrays(fvarChannel),
    \n-
    1684 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
    \n-
    1685 patchTable->GetFVarPatchParamBuffer(fvarChannel));
    \n-
    1686 }
    \n-
    \n-
    1687
    \n-
    1734 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1735 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1737 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1738 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1739 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    1740 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    1741 int numPatchCoords,
    \n-
    1742 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1743 PATCH_TABLE *patchTable,
    \n-
    1744 int fvarChannel,
    \n-
    1745 GLComputeEvaluator const *instance,
    \n-
    1746 void * deviceContext = NULL) {
    \n-
    1747
    \n-
    1748 if (instance) {
    \n-
    1749 return instance->EvalPatchesFaceVarying(
    \n-
    1750 srcBuffer, srcDesc,
    \n-
    1751 dstBuffer, dstDesc,
    \n-
    1752 duBuffer, duDesc,
    \n-
    1753 dvBuffer, dvDesc,
    \n-
    1754 numPatchCoords, patchCoords,
    \n-
    1755 patchTable, fvarChannel);
    \n-
    1756 } else {
    \n-
    1757 // Create an instance on demand (slow)
    \n-
    1758 (void)deviceContext; // unused
    \n-
    1759 instance = Create(srcDesc, dstDesc,
    \n-
    1760 duDesc, dvDesc);
    \n-
    1761 if (instance) {
    \n-
    1762 bool r = instance->EvalPatchesFaceVarying(
    \n-
    1763 srcBuffer, srcDesc,
    \n-
    1764 dstBuffer, dstDesc,
    \n-
    1765 duBuffer, duDesc,
    \n-
    1766 dvBuffer, dvDesc,
    \n-
    1767 numPatchCoords, patchCoords,
    \n-
    1768 patchTable, fvarChannel);
    \n-
    1769 delete instance;
    \n-
    1770 return r;
    \n-
    1771 }
    \n-
    1772 return false;
    \n-
    1773 }
    \n-
    1774 }
    \n-
    \n-
    1775
    \n-
    1814 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1815 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1817 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1818 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1819 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    1820 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    1821 int numPatchCoords,
    \n-
    1822 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1823 PATCH_TABLE *patchTable,
    \n-
    1824 int fvarChannel = 0) const {
    \n-
    1825
    \n-
    1826 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n-
    1827 dstBuffer->BindVBO(), dstDesc,
    \n-
    1828 duBuffer->BindVBO(), duDesc,
    \n-
    1829 dvBuffer->BindVBO(), dvDesc,
    \n-
    1830 numPatchCoords,
    \n-
    1831 patchCoords->BindVBO(),
    \n-
    1832 patchTable->GetFVarPatchArrays(fvarChannel),
    \n-
    1833 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
    \n-
    1834 patchTable->GetFVarPatchParamBuffer(fvarChannel));
    \n-
    1835 }
    \n-
    \n-
    1836
    \n-
    1901 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1902 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1904 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1905 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1906 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    1907 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    1908 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n-
    1909 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n-
    1910 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n-
    1911 int numPatchCoords,
    \n-
    1912 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1913 PATCH_TABLE *patchTable,
    \n-
    1914 int fvarChannel,
    \n-
    1915 GLComputeEvaluator const *instance,
    \n-
    1916 void * deviceContext = NULL) {
    \n-
    1917
    \n-
    1918 if (instance) {
    \n-
    1919 return instance->EvalPatchesFaceVarying(
    \n-
    1920 srcBuffer, srcDesc,
    \n-
    1921 dstBuffer, dstDesc,
    \n-
    1922 duBuffer, duDesc,
    \n-
    1923 dvBuffer, dvDesc,
    \n-
    1924 duuBuffer, duuDesc,
    \n-
    1925 duvBuffer, duvDesc,
    \n-
    1926 dvvBuffer, dvvDesc,
    \n-
    1927 numPatchCoords, patchCoords,
    \n-
    1928 patchTable, fvarChannel);
    \n-
    1929 } else {
    \n-
    1930 // Create an instance on demand (slow)
    \n-
    1931 (void)deviceContext; // unused
    \n-
    1932 instance = Create(srcDesc, dstDesc,
    \n-
    1933 duDesc, dvDesc,
    \n-
    1934 duuDesc, duvDesc, dvvDesc);
    \n-
    1935 if (instance) {
    \n-
    1936 bool r = instance->EvalPatchesFaceVarying(
    \n-
    1937 srcBuffer, srcDesc,
    \n-
    1938 dstBuffer, dstDesc,
    \n-
    1939 duBuffer, duDesc,
    \n-
    1940 dvBuffer, dvDesc,
    \n-
    1941 duuBuffer, duuDesc,
    \n-
    1942 duvBuffer, duvDesc,
    \n-
    1943 dvvBuffer, dvvDesc,
    \n-
    1944 numPatchCoords, patchCoords,
    \n-
    1945 patchTable, fvarChannel);
    \n-
    1946 delete instance;
    \n-
    1947 return r;
    \n-
    1948 }
    \n-
    1949 return false;
    \n-
    1950 }
    \n-
    1951 }
    \n-
    \n-
    1952
    \n-
    2009 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    2010 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    2012 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    2013 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    2014 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    2015 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    2016 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n-
    2017 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n-
    2018 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n-
    2019 int numPatchCoords,
    \n-
    2020 PATCHCOORD_BUFFER *patchCoords,
    \n-
    2021 PATCH_TABLE *patchTable,
    \n-
    2022 int fvarChannel = 0) const {
    \n-
    2023
    \n-
    2024 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n-
    2025 dstBuffer->BindVBO(), dstDesc,
    \n-
    2026 duBuffer->BindVBO(), duDesc,
    \n-
    2027 dvBuffer->BindVBO(), dvDesc,
    \n-
    2028 duuBuffer->BindVBO(), duuDesc,
    \n-
    2029 duvBuffer->BindVBO(), duvDesc,
    \n-
    2030 dvvBuffer->BindVBO(), dvvDesc,
    \n-
    2031 numPatchCoords,
    \n-
    2032 patchCoords->BindVBO(),
    \n-
    2033 patchTable->GetFVarPatchArrays(fvarChannel),
    \n-
    2034 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
    \n-
    2035 patchTable->GetFVarPatchParamBuffer(fvarChannel));
    \n-
    2036 }
    \n-
    \n-
    2037
    \n-
    2043
    \n-
    2046 bool Compile(BufferDescriptor const &srcDesc,
    \n-
    2047 BufferDescriptor const &dstDesc,
    \n-
    2048 BufferDescriptor const &duDesc = BufferDescriptor(),
    \n-
    2049 BufferDescriptor const &dvDesc = BufferDescriptor(),
    \n-
    2050 BufferDescriptor const &duuDesc = BufferDescriptor(),
    \n-
    2051 BufferDescriptor const &duvDesc = BufferDescriptor(),
    \n-
    2052 BufferDescriptor const &dvvDesc = BufferDescriptor());
    \n-
    2053
    \n-
    2055 static void Synchronize(void *deviceContext);
    \n-
    2056
    \n-
    2057private:
    \n-
    2058 struct _StencilKernel {
    \n-
    2059 _StencilKernel();
    \n-
    2060 ~_StencilKernel();
    \n-
    2061 bool Compile(BufferDescriptor const &srcDesc,
    \n-
    2062 BufferDescriptor const &dstDesc,
    \n-
    2063 BufferDescriptor const &duDesc,
    \n-
    2064 BufferDescriptor const &dvDesc,
    \n-
    2065 BufferDescriptor const &duuDesc,
    \n-
    2066 BufferDescriptor const &duvDesc,
    \n-
    2067 BufferDescriptor const &dvvDesc,
    \n-
    2068 int workGroupSize);
    \n-
    2069 GLuint program;
    \n-
    2070 GLuint uniformStart;
    \n-
    2071 GLuint uniformEnd;
    \n-
    2072 GLuint uniformSrcOffset;
    \n-
    2073 GLuint uniformDstOffset;
    \n-
    2074 GLuint uniformDuDesc;
    \n-
    2075 GLuint uniformDvDesc;
    \n-
    2076 GLuint uniformDuuDesc;
    \n-
    2077 GLuint uniformDuvDesc;
    \n-
    2078 GLuint uniformDvvDesc;
    \n-
    2079 } _stencilKernel;
    \n-
    2080
    \n-
    2081 struct _PatchKernel {
    \n-
    2082 _PatchKernel();
    \n-
    2083 ~_PatchKernel();
    \n-
    2084 bool Compile(BufferDescriptor const &srcDesc,
    \n-
    2085 BufferDescriptor const &dstDesc,
    \n-
    2086 BufferDescriptor const &duDesc,
    \n-
    2087 BufferDescriptor const &dvDesc,
    \n-
    2088 BufferDescriptor const &duuDesc,
    \n-
    2089 BufferDescriptor const &duvDesc,
    \n-
    2090 BufferDescriptor const &dvvDesc,
    \n-
    2091 int workGroupSize);
    \n-
    2092 GLuint program;
    \n-
    2093 GLuint uniformSrcOffset;
    \n-
    2094 GLuint uniformDstOffset;
    \n-
    2095 GLuint uniformPatchArray;
    \n-
    2096 GLuint uniformDuDesc;
    \n-
    2097 GLuint uniformDvDesc;
    \n-
    2098 GLuint uniformDuuDesc;
    \n-
    2099 GLuint uniformDuvDesc;
    \n-
    2100 GLuint uniformDvvDesc;
    \n-
    2101 } _patchKernel;
    \n-
    2102
    \n-
    2103 int _workGroupSize;
    \n-
    2104 GLuint _patchArraysSSBO;
    \n-
    2105};
    \n-
    \n-
    2106
    \n-
    2107} // end namespace Osd
    \n-
    2108
    \n-
    2109} // end namespace OPENSUBDIV_VERSION
    \n-
    2110using namespace OPENSUBDIV_VERSION;
    \n-
    2111
    \n-
    2112} // end namespace OpenSubdiv
    \n-
    2113
    \n-
    2114
    \n-
    2115#endif // OPENSUBDIV3_OSD_GL_COMPUTE_EVALUATOR_H
    \n-\n+
    946 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    947 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    948 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n+
    949 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n+
    950 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n+
    951 int numPatchCoords,
    \n+
    952 PATCHCOORD_BUFFER *patchCoords,
    \n+
    953 PATCH_TABLE *patchTable,
    \n+
    954 GLXFBEvaluator const *instance,
    \n+
    955 void * deviceContext = NULL) {
    \n+
    956
    \n+
    957 if (instance) {
    \n+
    958 return instance->EvalPatches(srcBuffer, srcDesc,
    \n+
    959 dstBuffer, dstDesc,
    \n+
    960 duBuffer, duDesc,
    \n+
    961 dvBuffer, dvDesc,
    \n+
    962 duuBuffer, duuDesc,
    \n+
    963 duvBuffer, duvDesc,
    \n+
    964 dvvBuffer, dvvDesc,
    \n+
    965 numPatchCoords, patchCoords,
    \n+
    966 patchTable);
    \n+
    967 } else {
    \n+
    968 // Create an instance on demand (slow)
    \n+
    969 (void)deviceContext; // unused
    \n+
    970 instance = Create(srcDesc, dstDesc,
    \n+
    971 duDesc, dvDesc,
    \n+
    972 duuDesc, duvDesc, dvvDesc);
    \n+
    973 if (instance) {
    \n+
    974 bool r = instance->EvalPatches(srcBuffer, srcDesc,
    \n+
    975 dstBuffer, dstDesc,
    \n+
    976 duBuffer, duDesc,
    \n+
    977 dvBuffer, dvDesc,
    \n+
    978 duuBuffer, duuDesc,
    \n+
    979 duvBuffer, duvDesc,
    \n+
    980 dvvBuffer, dvvDesc,
    \n+
    981 numPatchCoords, patchCoords,
    \n+
    982 patchTable);
    \n+
    983 delete instance;
    \n+
    984 return r;
    \n+
    985 }
    \n+
    986 return false;
    \n+
    987 }
    \n+
    988 }
    \n+
    \n+
    989
    \n+
    1014 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1015 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1017 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1018 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1019 int numPatchCoords,
    \n+
    1020 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1021 PATCH_TABLE *patchTable) const {
    \n+
    1022
    \n+
    1023 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n+
    1024 dstBuffer->BindVBO(), dstDesc,
    \n+
    1025 0, BufferDescriptor(),
    \n+
    1026 0, BufferDescriptor(),
    \n+
    1027 numPatchCoords,
    \n+
    1028 patchCoords->BindVBO(),
    \n+
    1029 patchTable->GetPatchArrays(),
    \n+
    1030 patchTable->GetPatchIndexTextureBuffer(),
    \n+
    1031 patchTable->GetPatchParamTextureBuffer());
    \n+
    1032 }
    \n+
    \n+
    1033
    \n+
    1068 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1069 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1071 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1072 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1073 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    1074 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    1075 int numPatchCoords,
    \n+
    1076 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1077 PATCH_TABLE *patchTable) const {
    \n+
    1078
    \n+
    1079 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n+
    1080 dstBuffer->BindVBO(), dstDesc,
    \n+
    1081 duBuffer->BindVBO(), duDesc,
    \n+
    1082 dvBuffer->BindVBO(), dvDesc,
    \n+
    1083 numPatchCoords,
    \n+
    1084 patchCoords->BindVBO(),
    \n+
    1085 patchTable->GetPatchArrays(),
    \n+
    1086 patchTable->GetPatchIndexTextureBuffer(),
    \n+
    1087 patchTable->GetPatchParamTextureBuffer());
    \n+
    1088 }
    \n+
    \n+
    1089
    \n+
    1142 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1143 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1145 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1146 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1147 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    1148 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    1149 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n+
    1150 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n+
    1151 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n+
    1152 int numPatchCoords,
    \n+
    1153 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1154 PATCH_TABLE *patchTable) const {
    \n+
    1155
    \n+
    1156 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n+
    1157 dstBuffer->BindVBO(), dstDesc,
    \n+
    1158 duBuffer->BindVBO(), duDesc,
    \n+
    1159 dvBuffer->BindVBO(), dvDesc,
    \n+
    1160 duuBuffer->BindVBO(), duuDesc,
    \n+
    1161 duvBuffer->BindVBO(), duvDesc,
    \n+
    1162 dvvBuffer->BindVBO(), dvvDesc,
    \n+
    1163 numPatchCoords,
    \n+
    1164 patchCoords->BindVBO(),
    \n+
    1165 patchTable->GetPatchArrays(),
    \n+
    1166 patchTable->GetPatchIndexTextureBuffer(),
    \n+
    1167 patchTable->GetPatchParamTextureBuffer());
    \n+
    1168 }
    \n+
    \n+
    1169
    \n+
    1170 bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1171 GLuint dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1172 GLuint duBuffer, BufferDescriptor const &duDesc,
    \n+
    1173 GLuint dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    1174 int numPatchCoords,
    \n+
    1175 GLuint patchCoordsBuffer,
    \n+
    1176 const PatchArrayVector &patchArrays,
    \n+
    1177 GLuint patchIndexBuffer,
    \n+
    1178 GLuint patchParamsBuffer) const;
    \n+
    1179
    \n+
    1180 bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1181 GLuint dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1182 GLuint duBuffer, BufferDescriptor const &duDesc,
    \n+
    1183 GLuint dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    1184 GLuint duuBuffer, BufferDescriptor const &duuDesc,
    \n+
    1185 GLuint duvBuffer, BufferDescriptor const &duvDesc,
    \n+
    1186 GLuint dvvBuffer, BufferDescriptor const &dvvDesc,
    \n+
    1187 int numPatchCoords,
    \n+
    1188 GLuint patchCoordsBuffer,
    \n+
    1189 const PatchArrayVector &patchArrays,
    \n+
    1190 GLuint patchIndexBuffer,
    \n+
    1191 GLuint patchParamsBuffer) const;
    \n+
    1192
    \n+
    1225 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1226 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1228 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1229 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1230 int numPatchCoords,
    \n+
    1231 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1232 PATCH_TABLE *patchTable,
    \n+
    1233 GLXFBEvaluator const *instance,
    \n+
    1234 void * deviceContext = NULL) {
    \n+
    1235
    \n+
    1236 if (instance) {
    \n+
    1237 return instance->EvalPatchesVarying(
    \n+
    1238 srcBuffer, srcDesc,
    \n+
    1239 dstBuffer, dstDesc,
    \n+
    1240 numPatchCoords, patchCoords,
    \n+
    1241 patchTable);
    \n+
    1242 } else {
    \n+
    1243 // Create an instance on demand (slow)
    \n+
    1244 (void)deviceContext; // unused
    \n+
    1245 instance = Create(srcDesc, dstDesc,
    \n+\n+\n+
    1248 if (instance) {
    \n+
    1249 bool r = instance->EvalPatchesVarying(
    \n+
    1250 srcBuffer, srcDesc,
    \n+
    1251 dstBuffer, dstDesc,
    \n+
    1252 numPatchCoords, patchCoords,
    \n+
    1253 patchTable);
    \n+
    1254 delete instance;
    \n+
    1255 return r;
    \n+
    1256 }
    \n+
    1257 return false;
    \n+
    1258 }
    \n+
    1259 }
    \n+
    \n+
    1260
    \n+
    1285 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1286 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1288 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1289 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1290 int numPatchCoords,
    \n+
    1291 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1292 PATCH_TABLE *patchTable) const {
    \n+
    1293
    \n+
    1294 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n+
    1295 dstBuffer->BindVBO(), dstDesc,
    \n+
    1296 0, BufferDescriptor(),
    \n+
    1297 0, BufferDescriptor(),
    \n+
    1298 numPatchCoords,
    \n+
    1299 patchCoords->BindVBO(),
    \n+
    1300 patchTable->GetVaryingPatchArrays(),
    \n+
    1301 patchTable->GetVaryingPatchIndexTextureBuffer(),
    \n+
    1302 patchTable->GetPatchParamTextureBuffer());
    \n+
    1303 }
    \n+
    \n+
    1304
    \n+
    1349 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1350 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1352 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1353 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1354 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    1355 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    1356 int numPatchCoords,
    \n+
    1357 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1358 PATCH_TABLE *patchTable,
    \n+
    1359 GLXFBEvaluator const *instance,
    \n+
    1360 void * deviceContext = NULL) {
    \n+
    1361
    \n+
    1362 if (instance) {
    \n+
    1363 return instance->EvalPatchesVarying(
    \n+
    1364 srcBuffer, srcDesc,
    \n+
    1365 dstBuffer, dstDesc,
    \n+
    1366 duBuffer, duDesc,
    \n+
    1367 dvBuffer, dvDesc,
    \n+
    1368 numPatchCoords, patchCoords,
    \n+
    1369 patchTable);
    \n+
    1370 } else {
    \n+
    1371 // Create an instance on demand (slow)
    \n+
    1372 (void)deviceContext; // unused
    \n+
    1373 instance = Create(srcDesc, dstDesc,
    \n+
    1374 duDesc, dvDesc);
    \n+
    1375 if (instance) {
    \n+
    1376 bool r = instance->EvalPatchesVarying(
    \n+
    1377 srcBuffer, srcDesc,
    \n+
    1378 dstBuffer, dstDesc,
    \n+
    1379 duBuffer, duDesc,
    \n+
    1380 dvBuffer, dvDesc,
    \n+
    1381 numPatchCoords, patchCoords,
    \n+
    1382 patchTable);
    \n+
    1383 delete instance;
    \n+
    1384 return r;
    \n+
    1385 }
    \n+
    1386 return false;
    \n+
    1387 }
    \n+
    1388 }
    \n+
    \n+
    1389
    \n+
    1426 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1427 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1429 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1430 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1431 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    1432 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    1433 int numPatchCoords,
    \n+
    1434 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1435 PATCH_TABLE *patchTable) const {
    \n+
    1436
    \n+
    1437 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n+
    1438 dstBuffer->BindVBO(), dstDesc,
    \n+
    1439 duBuffer->BindVBO(), duDesc,
    \n+
    1440 dvBuffer->BindVBO(), dvDesc,
    \n+
    1441 numPatchCoords,
    \n+
    1442 patchCoords->BindVBO(),
    \n+
    1443 patchTable->GetVaryingPatchArrays(),
    \n+
    1444 patchTable->GetVaryingPatchIndexTextureBuffer(),
    \n+
    1445 patchTable->GetPatchParamTextureBuffer());
    \n+
    1446 }
    \n+
    \n+
    1447
    \n+
    1510 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1511 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1513 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1514 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1515 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    1516 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    1517 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n+
    1518 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n+
    1519 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n+
    1520 int numPatchCoords,
    \n+
    1521 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1522 PATCH_TABLE *patchTable,
    \n+
    1523 GLXFBEvaluator const *instance,
    \n+
    1524 void * deviceContext = NULL) {
    \n+
    1525
    \n+
    1526 if (instance) {
    \n+
    1527 return instance->EvalPatchesVarying(
    \n+
    1528 srcBuffer, srcDesc,
    \n+
    1529 dstBuffer, dstDesc,
    \n+
    1530 duBuffer, duDesc,
    \n+
    1531 dvBuffer, dvDesc,
    \n+
    1532 duuBuffer, duuDesc,
    \n+
    1533 duvBuffer, duvDesc,
    \n+
    1534 dvvBuffer, dvvDesc,
    \n+
    1535 numPatchCoords, patchCoords,
    \n+
    1536 patchTable);
    \n+
    1537 } else {
    \n+
    1538 // Create an instance on demand (slow)
    \n+
    1539 (void)deviceContext; // unused
    \n+
    1540 instance = Create(srcDesc, dstDesc,
    \n+
    1541 duDesc, dvDesc,
    \n+
    1542 duuDesc, duvDesc, dvvDesc);
    \n+
    1543 if (instance) {
    \n+
    1544 bool r = instance->EvalPatchesVarying(
    \n+
    1545 srcBuffer, srcDesc,
    \n+
    1546 dstBuffer, dstDesc,
    \n+
    1547 duBuffer, duDesc,
    \n+
    1548 dvBuffer, dvDesc,
    \n+
    1549 duuBuffer, duuDesc,
    \n+
    1550 duvBuffer, duvDesc,
    \n+
    1551 dvvBuffer, dvvDesc,
    \n+
    1552 numPatchCoords, patchCoords,
    \n+
    1553 patchTable);
    \n+
    1554 delete instance;
    \n+
    1555 return r;
    \n+
    1556 }
    \n+
    1557 return false;
    \n+
    1558 }
    \n+
    1559 }
    \n+
    \n+
    1560
    \n+
    1615 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1616 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1618 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1619 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1620 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    1621 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    1622 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n+
    1623 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n+
    1624 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n+
    1625 int numPatchCoords,
    \n+
    1626 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1627 PATCH_TABLE *patchTable) const {
    \n+
    1628
    \n+
    1629 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n+
    1630 dstBuffer->BindVBO(), dstDesc,
    \n+
    1631 duBuffer->BindVBO(), duDesc,
    \n+
    1632 dvBuffer->BindVBO(), dvDesc,
    \n+
    1633 duuBuffer->BindVBO(), duuDesc,
    \n+
    1634 duvBuffer->BindVBO(), duvDesc,
    \n+
    1635 dvvBuffer->BindVBO(), dvvDesc,
    \n+
    1636 numPatchCoords,
    \n+
    1637 patchCoords->BindVBO(),
    \n+
    1638 patchTable->GetVaryingPatchArrays(),
    \n+
    1639 patchTable->GetVaryingPatchIndexTextureBuffer(),
    \n+
    1640 patchTable->GetPatchParamTextureBuffer());
    \n+
    1641 }
    \n+
    \n+
    1642
    \n+
    1677 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1678 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1680 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1681 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1682 int numPatchCoords,
    \n+
    1683 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1684 PATCH_TABLE *patchTable,
    \n+
    1685 int fvarChannel,
    \n+
    1686 GLXFBEvaluator const *instance,
    \n+
    1687 void * deviceContext = NULL) {
    \n+
    1688
    \n+
    1689 if (instance) {
    \n+
    1690 return instance->EvalPatchesFaceVarying(
    \n+
    1691 srcBuffer, srcDesc,
    \n+
    1692 dstBuffer, dstDesc,
    \n+
    1693 numPatchCoords, patchCoords,
    \n+
    1694 patchTable, fvarChannel);
    \n+
    1695 } else {
    \n+
    1696 // Create an instance on demand (slow)
    \n+
    1697 (void)deviceContext; // unused
    \n+
    1698 instance = Create(srcDesc, dstDesc,
    \n+\n+\n+
    1701 if (instance) {
    \n+
    1702 bool r = instance->EvalPatchesFaceVarying(
    \n+
    1703 srcBuffer, srcDesc,
    \n+
    1704 dstBuffer, dstDesc,
    \n+
    1705 numPatchCoords, patchCoords,
    \n+
    1706 patchTable, fvarChannel);
    \n+
    1707 delete instance;
    \n+
    1708 return r;
    \n+
    1709 }
    \n+
    1710 return false;
    \n+
    1711 }
    \n+
    1712 }
    \n+
    \n+
    1713
    \n+
    1740 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1741 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1743 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1744 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1745 int numPatchCoords,
    \n+
    1746 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1747 PATCH_TABLE *patchTable,
    \n+
    1748 int fvarChannel = 0) const {
    \n+
    1749
    \n+
    1750 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n+
    1751 dstBuffer->BindVBO(), dstDesc,
    \n+
    1752 0, BufferDescriptor(),
    \n+
    1753 0, BufferDescriptor(),
    \n+
    1754 numPatchCoords,
    \n+
    1755 patchCoords->BindVBO(),
    \n+
    1756 patchTable->GetFVarPatchArrays(fvarChannel),
    \n+
    1757 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),
    \n+
    1758 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));
    \n+
    1759 }
    \n+
    \n+
    1760
    \n+
    1807 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1808 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1810 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1811 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1812 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    1813 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    1814 int numPatchCoords,
    \n+
    1815 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1816 PATCH_TABLE *patchTable,
    \n+
    1817 int fvarChannel,
    \n+
    1818 GLXFBEvaluator const *instance,
    \n+
    1819 void * deviceContext = NULL) {
    \n+
    1820
    \n+
    1821 if (instance) {
    \n+
    1822 return instance->EvalPatchesFaceVarying(
    \n+
    1823 srcBuffer, srcDesc,
    \n+
    1824 dstBuffer, dstDesc,
    \n+
    1825 duBuffer, duDesc,
    \n+
    1826 dvBuffer, dvDesc,
    \n+
    1827 numPatchCoords, patchCoords,
    \n+
    1828 patchTable, fvarChannel);
    \n+
    1829 } else {
    \n+
    1830 // Create an instance on demand (slow)
    \n+
    1831 (void)deviceContext; // unused
    \n+
    1832 instance = Create(srcDesc, dstDesc,
    \n+
    1833 duDesc, dvDesc);
    \n+
    1834 if (instance) {
    \n+
    1835 bool r = instance->EvalPatchesFaceVarying(
    \n+
    1836 srcBuffer, srcDesc,
    \n+
    1837 dstBuffer, dstDesc,
    \n+
    1838 duBuffer, duDesc,
    \n+
    1839 dvBuffer, dvDesc,
    \n+
    1840 numPatchCoords, patchCoords,
    \n+
    1841 patchTable, fvarChannel);
    \n+
    1842 delete instance;
    \n+
    1843 return r;
    \n+
    1844 }
    \n+
    1845 return false;
    \n+
    1846 }
    \n+
    1847 }
    \n+
    \n+
    1848
    \n+
    1887 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1888 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1890 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1891 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1892 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    1893 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    1894 int numPatchCoords,
    \n+
    1895 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1896 PATCH_TABLE *patchTable,
    \n+
    1897 int fvarChannel = 0) const {
    \n+
    1898
    \n+
    1899 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n+
    1900 dstBuffer->BindVBO(), dstDesc,
    \n+
    1901 duBuffer->BindVBO(), duDesc,
    \n+
    1902 dvBuffer->BindVBO(), dvDesc,
    \n+
    1903 numPatchCoords,
    \n+
    1904 patchCoords->BindVBO(),
    \n+
    1905 patchTable->GetFVarPatchArrays(fvarChannel),
    \n+
    1906 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),
    \n+
    1907 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));
    \n+
    1908 }
    \n+
    \n+
    1909
    \n+
    1974 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1975 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1977 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1978 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1979 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    1980 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    1981 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n+
    1982 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n+
    1983 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n+
    1984 int numPatchCoords,
    \n+
    1985 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1986 PATCH_TABLE *patchTable,
    \n+
    1987 int fvarChannel,
    \n+
    1988 GLXFBEvaluator const *instance,
    \n+
    1989 void * deviceContext = NULL) {
    \n+
    1990
    \n+
    1991 if (instance) {
    \n+
    1992 return instance->EvalPatchesFaceVarying(
    \n+
    1993 srcBuffer, srcDesc,
    \n+
    1994 dstBuffer, dstDesc,
    \n+
    1995 duBuffer, duDesc,
    \n+
    1996 dvBuffer, dvDesc,
    \n+
    1997 duuBuffer, duuDesc,
    \n+
    1998 duvBuffer, duvDesc,
    \n+
    1999 dvvBuffer, dvvDesc,
    \n+
    2000 numPatchCoords, patchCoords,
    \n+
    2001 patchTable, fvarChannel);
    \n+
    2002 } else {
    \n+
    2003 // Create an instance on demand (slow)
    \n+
    2004 (void)deviceContext; // unused
    \n+
    2005 instance = Create(srcDesc, dstDesc,
    \n+
    2006 duDesc, dvDesc,
    \n+
    2007 duuDesc, duvDesc, dvvDesc);
    \n+
    2008 if (instance) {
    \n+
    2009 bool r = instance->EvalPatchesFaceVarying(
    \n+
    2010 srcBuffer, srcDesc,
    \n+
    2011 dstBuffer, dstDesc,
    \n+
    2012 duBuffer, duDesc,
    \n+
    2013 dvBuffer, dvDesc,
    \n+
    2014 duuBuffer, duuDesc,
    \n+
    2015 duvBuffer, duvDesc,
    \n+
    2016 dvvBuffer, dvvDesc,
    \n+
    2017 numPatchCoords, patchCoords,
    \n+
    2018 patchTable, fvarChannel);
    \n+
    2019 delete instance;
    \n+
    2020 return r;
    \n+
    2021 }
    \n+
    2022 return false;
    \n+
    2023 }
    \n+
    2024 }
    \n+
    \n+
    2025
    \n+
    2082 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    2083 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    2085 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    2086 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    2087 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    2088 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    2089 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n+
    2090 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n+
    2091 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n+
    2092 int numPatchCoords,
    \n+
    2093 PATCHCOORD_BUFFER *patchCoords,
    \n+
    2094 PATCH_TABLE *patchTable,
    \n+
    2095 int fvarChannel = 0) const {
    \n+
    2096
    \n+
    2097 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n+
    2098 dstBuffer->BindVBO(), dstDesc,
    \n+
    2099 duBuffer->BindVBO(), duDesc,
    \n+
    2100 dvBuffer->BindVBO(), dvDesc,
    \n+
    2101 duuBuffer->BindVBO(), duuDesc,
    \n+
    2102 duvBuffer->BindVBO(), duvDesc,
    \n+
    2103 dvvBuffer->BindVBO(), dvvDesc,
    \n+
    2104 numPatchCoords,
    \n+
    2105 patchCoords->BindVBO(),
    \n+
    2106 patchTable->GetFVarPatchArrays(fvarChannel),
    \n+
    2107 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),
    \n+
    2108 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));
    \n+
    2109 }
    \n+
    \n+
    2110
    \n+
    2116
    \n+
    2119 bool Compile(BufferDescriptor const &srcDesc,
    \n+
    2120 BufferDescriptor const &dstDesc,
    \n+
    2121 BufferDescriptor const &duDesc = BufferDescriptor(),
    \n+
    2122 BufferDescriptor const &dvDesc = BufferDescriptor(),
    \n+
    2123 BufferDescriptor const &duuDesc = BufferDescriptor(),
    \n+
    2124 BufferDescriptor const &duvDesc = BufferDescriptor(),
    \n+
    2125 BufferDescriptor const &dvvDesc = BufferDescriptor());
    \n+
    2126
    \n+
    2128 static void Synchronize(void *kernel);
    \n+
    2129
    \n+
    2130private:
    \n+
    2131 GLuint _srcBufferTexture;
    \n+
    2132 GLuint _patchArraysUBO;
    \n+
    2133 bool _interleavedDerivativeBuffers;
    \n+
    2134
    \n+
    2135 struct _StencilKernel {
    \n+
    2136 _StencilKernel();
    \n+
    2137 ~_StencilKernel();
    \n+
    2138 bool Compile(BufferDescriptor const &srcDesc,
    \n+
    2139 BufferDescriptor const &dstDesc,
    \n+
    2140 BufferDescriptor const &duDesc,
    \n+
    2141 BufferDescriptor const &dvDesc,
    \n+
    2142 BufferDescriptor const &duuDesc,
    \n+
    2143 BufferDescriptor const &duvDesc,
    \n+
    2144 BufferDescriptor const &dvvDesc,
    \n+
    2145 bool interleavedDerivativeBuffers);
    \n+
    2146 GLuint program;
    \n+
    2147 GLint uniformSrcBufferTexture;
    \n+
    2148 GLint uniformSrcOffset; // src buffer offset (in elements)
    \n+
    2149
    \n+
    2150 GLint uniformSizesTexture;
    \n+
    2151 GLint uniformOffsetsTexture;
    \n+
    2152 GLint uniformIndicesTexture;
    \n+
    2153 GLint uniformWeightsTexture;
    \n+
    2154 GLint uniformDuWeightsTexture;
    \n+
    2155 GLint uniformDvWeightsTexture;
    \n+
    2156 GLint uniformDuuWeightsTexture;
    \n+
    2157 GLint uniformDuvWeightsTexture;
    \n+
    2158 GLint uniformDvvWeightsTexture;
    \n+
    2159 GLint uniformStart; // range
    \n+
    2160 GLint uniformEnd;
    \n+
    2161 } _stencilKernel;
    \n+
    2162
    \n+
    2163 struct _PatchKernel {
    \n+
    2164 _PatchKernel();
    \n+
    2165 ~_PatchKernel();
    \n+
    2166 bool Compile(BufferDescriptor const &srcDesc,
    \n+
    2167 BufferDescriptor const &dstDesc,
    \n+
    2168 BufferDescriptor const &duDesc,
    \n+
    2169 BufferDescriptor const &dvDesc,
    \n+
    2170 BufferDescriptor const &duuDesc,
    \n+
    2171 BufferDescriptor const &duvDesc,
    \n+
    2172 BufferDescriptor const &dvvDesc,
    \n+
    2173 bool interleavedDerivativeBuffers);
    \n+
    2174 GLuint program;
    \n+
    2175 GLint uniformSrcBufferTexture;
    \n+
    2176 GLint uniformSrcOffset; // src buffer offset (in elements)
    \n+
    2177
    \n+
    2178 GLint uniformPatchArraysUBOBinding;
    \n+
    2179 GLint uniformPatchParamTexture;
    \n+
    2180 GLint uniformPatchIndexTexture;
    \n+
    2181 } _patchKernel;
    \n+
    2182
    \n+
    2183};
    \n+
    \n+
    2184
    \n+
    2185} // end namespace Osd
    \n+
    2186
    \n+
    2187} // end namespace OPENSUBDIV_VERSION
    \n+
    2188using namespace OPENSUBDIV_VERSION;
    \n+
    2189
    \n+
    2190} // end namespace OpenSubdiv
    \n+
    2191
    \n+
    2192
    \n+
    2193#endif // OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H
    \n+\n
    std::vector< PatchArray > PatchArrayVector
    Definition types.h:132
    \n
    Stencil table class wrapping the template for compatibility.
    \n
    Limit stencil table class wrapping the template for compatibility.
    \n
    BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
    \n-\n-\n-\n-
    GLStencilTableSSBO(Far::LimitStencilTable const *limitStencilTable)
    \n-\n-\n-\n-\n-\n-
    GLStencilTableSSBO(Far::StencilTable const *stencilTable)
    \n-\n-\n-
    static GLStencilTableSSBO * Create(Far::LimitStencilTable const *limitStencilTable, void *deviceContext=NULL)
    \n-\n-\n-
    static GLStencilTableSSBO * Create(Far::StencilTable const *stencilTable, void *deviceContext=NULL)
    \n-\n-
    bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, GLComputeEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, STENCIL_TABLE const *stencilTable) const
    Generic stencil function.
    \n-
    static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, GLComputeEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, STENCIL_TABLE const *stencilTable) const
    Generic stencil function.
    \n-
    static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-\n-
    bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, GLuint duuBuffer, BufferDescriptor const &duuDesc, GLuint duvBuffer, BufferDescriptor const &duvDesc, GLuint dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, GLuint patchCoordsBuffer, const PatchArrayVector &patchArrays, GLuint patchIndexBuffer, GLuint patchParamsBuffer) const
    \n-
    ~GLComputeEvaluator()
    Destructor. note that the GL context must be made current.
    \n-
    bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
    Generic limit eval function with derivatives. This function has a same signature as other device kern...
    \n-
    static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, STENCIL_TABLE const *stencilTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
    Generic static stencil function. This function has a same signature as other device kernels have so t...
    \n-
    bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, GLuint duuBuffer, BufferDescriptor const &duuDesc, GLuint duvBuffer, BufferDescriptor const &duvDesc, GLuint dvvBuffer, BufferDescriptor const &dvvDesc, GLuint sizesBuffer, GLuint offsetsBuffer, GLuint indicesBuffer, GLuint weightsBuffer, GLuint duWeightsBuffer, GLuint dvWeightsBuffer, GLuint duuWeightsBuffer, GLuint duvWeightsBuffer, GLuint dvvWeightsBuffer, int start, int end) const
    Dispatch the GLSL compute kernel on GPU asynchronously returns false if the kernel hasn't been compil...
    \n-
    static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
    Generic static stencil function. This function has a same signature as other device kernels have so t...
    \n-
    static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, GLComputeEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel=0) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-\n-
    bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
    Generic limit eval function with derivatives. This function has a same signature as other device kern...
    \n-
    static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable) const
    Generic stencil function.
    \n-
    bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, GLuint patchCoordsBuffer, const PatchArrayVector &patchArrays, GLuint patchIndexBuffer, GLuint patchParamsBuffer) const
    \n-
    bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel=0) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    static GLComputeEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, void *deviceContext=NULL)
    \n-
    bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, GLuint sizesBuffer, GLuint offsetsBuffer, GLuint indicesBuffer, GLuint weightsBuffer, GLuint duWeightsBuffer, GLuint dvWeightsBuffer, int start, int end) const
    Dispatch the GLSL compute kernel on GPU asynchronously returns false if the kernel hasn't been compil...
    \n-
    static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, STENCIL_TABLE const *stencilTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
    Generic static stencil function. This function has a same signature as other device kernels have so t...
    \n-
    static void Synchronize(void *deviceContext)
    Wait the dispatched kernel finishes.
    \n-
    bool Compile(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc=BufferDescriptor(), BufferDescriptor const &dvDesc=BufferDescriptor(), BufferDescriptor const &duuDesc=BufferDescriptor(), BufferDescriptor const &duvDesc=BufferDescriptor(), BufferDescriptor const &dvvDesc=BufferDescriptor())
    \n-
    bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    static GLComputeEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, void *deviceContext=NULL)
    \n-
    bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel=0) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+\n+\n+
    static GLStencilTableTBO * Create(Far::StencilTable const *stencilTable, void *deviceContext=NULL)
    \n+\n+\n+\n+\n+\n+\n+
    GLStencilTableTBO(Far::StencilTable const *stencilTable)
    \n+
    GLStencilTableTBO(Far::LimitStencilTable const *limitStencilTable)
    \n+\n+
    static GLStencilTableTBO * Create(Far::LimitStencilTable const *limitStencilTable, void *deviceContext=NULL)
    \n+\n+\n+\n+\n+
    bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, bool interleavedDerivativeBuffers=false)
    \n+
    bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, STENCIL_TABLE const *stencilTable) const
    Generic stencil function.
    \n+
    GLXFBEvaluator(bool interleavedDerivativeBuffers=false)
    Constructor.
    \n+
    bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, STENCIL_TABLE const *stencilTable) const
    Generic stencil function.
    \n+\n+
    bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, GLuint duuBuffer, BufferDescriptor const &duuDesc, GLuint duvBuffer, BufferDescriptor const &duvDesc, GLuint dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, GLuint patchCoordsBuffer, const PatchArrayVector &patchArrays, GLuint patchIndexBuffer, GLuint patchParamsBuffer) const
    \n+
    static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, STENCIL_TABLE const *stencilTable, GLXFBEvaluator const *instance, void *deviceContext=NULL)
    Generic static stencil function. This function has a same signature as other device kernels have so t...
    \n+
    bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
    Generic limit eval function with derivatives. This function has a same signature as other device kern...
    \n+
    static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, bool interleavedDerivativeBuffers=false)
    \n+
    static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, void *deviceContext)
    Specialization to allow creation without a device context.
    \n+
    static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, STENCIL_TABLE const *stencilTable, GLXFBEvaluator const *instance, void *deviceContext=NULL)
    Generic static stencil function. This function has a same signature as other device kernels have so t...
    \n+
    static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLXFBEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, GLuint duuBuffer, BufferDescriptor const &duuDesc, GLuint duvBuffer, BufferDescriptor const &duvDesc, GLuint dvvBuffer, BufferDescriptor const &dvvDesc, GLuint sizesBuffer, GLuint offsetsBuffer, GLuint indicesBuffer, GLuint weightsBuffer, GLuint duWeightsBuffer, GLuint dvWeightsBuffer, GLuint duuWeightsBuffer, GLuint duvWeightsBuffer, GLuint dvvWeightsBuffer, int start, int end) const
    Dispatch the GLSL XFB kernel on on GPU asynchronously returns false if the kernel hasn't been compile...
    \n+
    static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLXFBEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, DEVICE_CONTEXT deviceContext)
    Generic creator template.
    \n+
    static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, DEVICE_CONTEXT deviceContext)
    Generic creator template.
    \n+
    static void Synchronize(void *kernel)
    Wait the dispatched kernel finishes.
    \n+
    static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLXFBEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel=0) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLXFBEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, GLXFBEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLXFBEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
    Generic limit eval function with derivatives. This function has a same signature as other device kern...
    \n+
    bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable) const
    Generic stencil function.
    \n+
    bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, GLuint patchCoordsBuffer, const PatchArrayVector &patchArrays, GLuint patchIndexBuffer, GLuint patchParamsBuffer) const
    \n+
    static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, void *deviceContext)
    Specialization to allow creation without a device context.
    \n+
    bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel=0) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLXFBEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, GLuint sizesBuffer, GLuint offsetsBuffer, GLuint indicesBuffer, GLuint weightsBuffer, GLuint duWeightsBuffer, GLuint dvWeightsBuffer, int start, int end) const
    Dispatch the GLSL XFB kernel on on GPU asynchronously returns false if the kernel hasn't been compile...
    \n+
    static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, GLXFBEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, GLXFBEvaluator const *instance, void *deviceContext=NULL)
    Generic static stencil function. This function has a same signature as other device kernels have so t...
    \n+
    ~GLXFBEvaluator()
    Destructor. note that the GL context must be made current.
    \n+
    bool Compile(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc=BufferDescriptor(), BufferDescriptor const &dvDesc=BufferDescriptor(), BufferDescriptor const &duuDesc=BufferDescriptor(), BufferDescriptor const &duvDesc=BufferDescriptor(), BufferDescriptor const &dvvDesc=BufferDescriptor())
    \n+
    bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel=0) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, GLXFBEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-glComputeEvaluator.h\n+glXFBEvaluator.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2015 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -24,16 +24,16 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_GL_COMPUTE_EVALUATOR_H\n-26#define OPENSUBDIV3_OSD_GL_COMPUTE_EVALUATOR_H\n+25#ifndef OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H\n+26#define OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H\n 27\n 28#include \"../version.h\"\n 29\n 30#include \"../osd/opengl.h\"\n 31#include \"../osd/types.h\"\n 32#include \"../osd/bufferDescriptor.h\"\n 33\n@@ -44,993 +44,1055 @@\n 38 class PatchTable;\n 39 class StencilTable;\n 40 class LimitStencilTable;\n 41}\n 42\n 43namespace Osd {\n 44\n-_\b5_\b1class _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO {\n-52public:\n-_\b5_\b3 static _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO *_\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *stencilTable,\n-54 void *deviceContext = NULL) {\n-55 (void)deviceContext; // unused\n-56 return new _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO(stencilTable);\n-57 }\n-_\b5_\b8 static _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO *_\bC_\br_\be_\ba_\bt_\be(\n-59 _\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *limitStencilTable,\n-60 void *deviceContext = NULL) {\n-61 (void)deviceContext; // unused\n-62 return new _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO(limitStencilTable);\n-63 }\n-64\n-_\b6_\b5 explicit _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO(_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *stencilTable);\n-_\b6_\b6 explicit _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO(_\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const\n-*limitStencilTable);\n-_\b6_\b7 _\b~_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO();\n-68\n-69 // interfaces needed for GLSLComputeKernel\n-_\b7_\b0 GLuint _\bG_\be_\bt_\bS_\bi_\bz_\be_\bs_\bB_\bu_\bf_\bf_\be_\br() const { return _sizes; }\n-_\b7_\b1 GLuint _\bG_\be_\bt_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br() const { return _offsets; }\n-_\b7_\b2 GLuint _\bG_\be_\bt_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bB_\bu_\bf_\bf_\be_\br() const { return _indices; }\n-_\b7_\b3 GLuint _\bG_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br() const { return _weights; }\n-_\b7_\b4 GLuint _\bG_\be_\bt_\bD_\bu_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br() const { return _duWeights; }\n-_\b7_\b5 GLuint _\bG_\be_\bt_\bD_\bv_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br() const { return _dvWeights; }\n-_\b7_\b6 GLuint _\bG_\be_\bt_\bD_\bu_\bu_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br() const { return _duuWeights; }\n-_\b7_\b7 GLuint _\bG_\be_\bt_\bD_\bu_\bv_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br() const { return _duvWeights; }\n-_\b7_\b8 GLuint _\bG_\be_\bt_\bD_\bv_\bv_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br() const { return _dvvWeights; }\n-_\b7_\b9 int _\bG_\be_\bt_\bN_\bu_\bm_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs() const { return _numStencils; }\n-80\n-81private:\n-82 GLuint _sizes;\n-83 GLuint _offsets;\n-84 GLuint _indices;\n-85 GLuint _weights;\n-86 GLuint _duWeights;\n-87 GLuint _dvWeights;\n-88 GLuint _duuWeights;\n-89 GLuint _duvWeights;\n-90 GLuint _dvvWeights;\n-91 int _numStencils;\n-92};\n-93\n-94// --------------------------------------------------------------------------\n--\n+_\b5_\b2class _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO {\n+53public:\n+_\b5_\b4 static _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO *_\bC_\br_\be_\ba_\bt_\be(\n+55 _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *stencilTable, void *deviceContext = NULL) {\n+56 (void)deviceContext; // unused\n+57 return new _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO(stencilTable);\n+58 }\n+59\n+_\b6_\b0 static _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO *_\bC_\br_\be_\ba_\bt_\be(\n+61 _\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *limitStencilTable,\n+62 void *deviceContext = NULL) {\n+63 (void)deviceContext; // unused\n+64 return new _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO(limitStencilTable);\n+65 }\n+66\n+_\b6_\b7 explicit _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO(_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *stencilTable);\n+_\b6_\b8 explicit _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO(_\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *limitStencilTable);\n+_\b6_\b9 _\b~_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO();\n+70\n+71 // interfaces needed for GLSLTransformFeedbackKernel\n+_\b7_\b2 GLuint _\bG_\be_\bt_\bS_\bi_\bz_\be_\bs_\bT_\be_\bx_\bt_\bu_\br_\be() const { return _sizes; }\n+_\b7_\b3 GLuint _\bG_\be_\bt_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be() const { return _offsets; }\n+_\b7_\b4 GLuint _\bG_\be_\bt_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bT_\be_\bx_\bt_\bu_\br_\be() const { return _indices; }\n+_\b7_\b5 GLuint _\bG_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be() const { return _weights; }\n+_\b7_\b6 GLuint _\bG_\be_\bt_\bD_\bu_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be() const { return _duWeights; }\n+_\b7_\b7 GLuint _\bG_\be_\bt_\bD_\bv_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be() const { return _dvWeights; }\n+_\b7_\b8 GLuint _\bG_\be_\bt_\bD_\bu_\bu_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be() const { return _duuWeights; }\n+_\b7_\b9 GLuint _\bG_\be_\bt_\bD_\bu_\bv_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be() const { return _duvWeights; }\n+_\b8_\b0 GLuint _\bG_\be_\bt_\bD_\bv_\bv_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be() const { return _dvvWeights; }\n+_\b8_\b1 int _\bG_\be_\bt_\bN_\bu_\bm_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs() const { return _numStencils; }\n+82\n+83private:\n+84 GLuint _sizes;\n+85 GLuint _offsets;\n+86 GLuint _indices;\n+87 GLuint _weights;\n+88 GLuint _duWeights;\n+89 GLuint _dvWeights;\n+90 GLuint _duuWeights;\n+91 GLuint _duvWeights;\n+92 GLuint _dvvWeights;\n+93 int _numStencils;\n+94};\n 95\n-_\b9_\b6class _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br {\n-97public:\n-_\b9_\b8 typedef bool _\bI_\bn_\bs_\bt_\ba_\bn_\bt_\bi_\ba_\bt_\ba_\bb_\bl_\be;\n-_\b9_\b9 static _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br * _\bC_\br_\be_\ba_\bt_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-100 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-101 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-102 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-103 void * deviceContext = NULL) {\n-104 return _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc, duDesc, dvDesc,\n-105 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-106 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-107 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-108 deviceContext);\n-109 }\n-110\n-_\b1_\b1_\b1 static _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br * _\bC_\br_\be_\ba_\bt_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-112 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-113 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-114 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-115 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-116 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-117 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-118 void * deviceContext = NULL) {\n-119 (void)deviceContext; // not used\n-120 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br *instance = new _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br();\n-121 if (instance->_\bC_\bo_\bm_\bp_\bi_\bl_\be(srcDesc, dstDesc, duDesc, dvDesc,\n-122 duuDesc, duvDesc, dvvDesc))\n-123 return instance;\n-124 delete instance;\n-125 return NULL;\n-126 }\n-127\n-_\b1_\b2_\b9 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br();\n-130\n-_\b1_\b3_\b2 _\b~_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br();\n-133\n-139\n-167 template \n-_\b1_\b6_\b8 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n-169 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-170 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-171 STENCIL_TABLE const *stencilTable,\n-172 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n-173 void * deviceContext = NULL) {\n-174\n-175 if (instance) {\n-176 return instance->_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer, srcDesc,\n-177 dstBuffer, dstDesc,\n-178 stencilTable);\n-179 } else {\n-180 // Create an instance on demand (slow)\n-181 (void)deviceContext; // unused\n-182 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n-183 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-184 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br());\n-185 if (instance) {\n-186 bool r = instance->_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer, srcDesc,\n-187 dstBuffer, dstDesc,\n-188 stencilTable);\n-189 delete instance;\n-190 return r;\n-191 }\n-192 return false;\n-193 }\n-194 }\n-195\n-235 template \n-_\b2_\b3_\b6 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n-237 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-238 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-239 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-240 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+96// --------------------------------------------------------------------------\n+-\n+97\n+_\b9_\b8class _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br {\n+99public:\n+_\b1_\b0_\b0 typedef bool _\bI_\bn_\bs_\bt_\ba_\bn_\bt_\bi_\ba_\bt_\ba_\bb_\bl_\be;\n+101\n+103 template \n+_\b1_\b0_\b4 static _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br *_\bC_\br_\be_\ba_\bt_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+105 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+106 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+107 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+108 DEVICE_CONTEXT deviceContext) {\n+109 bool interleavedDerivativeBuffers = deviceContext\n+110 ? deviceContext->AreInterleavedDerivativeBuffers()\n+111 : false;\n+112 return _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc, duDesc, dvDesc,\n+113 interleavedDerivativeBuffers);\n+114 }\n+115\n+_\b1_\b1_\b7 static _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br *_\bC_\br_\be_\ba_\bt_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+118 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+119 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+120 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+121 void * deviceContext) {\n+122 (void)deviceContext; // not used\n+123 return _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc, duDesc, dvDesc);\n+124 }\n+125\n+_\b1_\b2_\b6 static _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br * _\bC_\br_\be_\ba_\bt_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+127 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+128 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+129 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+130 bool interleavedDerivativeBuffers = false) {\n+131 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br *instance = new _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n+(interleavedDerivativeBuffers);\n+132 if (instance->_\bC_\bo_\bm_\bp_\bi_\bl_\be(srcDesc, dstDesc, duDesc, dvDesc))\n+133 return instance;\n+134 delete instance;\n+135 return NULL;\n+136 }\n+137\n+139 template \n+_\b1_\b4_\b0 static _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br *_\bC_\br_\be_\ba_\bt_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+141 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+142 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+143 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+144 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+145 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+146 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+147 DEVICE_CONTEXT deviceContext) {\n+148 bool interleavedDerivativeBuffers = deviceContext\n+149 ? deviceContext->AreInterleavedDerivativeBuffers()\n+150 : false;\n+151 return _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc, duDesc, dvDesc,\n+152 duuDesc, duvDesc, dvvDesc,\n+153 interleavedDerivativeBuffers);\n+154 }\n+155\n+_\b1_\b5_\b7 static _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br *_\bC_\br_\be_\ba_\bt_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+158 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+159 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+160 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+161 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+162 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+163 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+164 void * deviceContext) {\n+165 (void)deviceContext; // not used\n+166 return _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc, duDesc, dvDesc,\n+167 duuDesc, duvDesc, dvvDesc);\n+168 }\n+169\n+_\b1_\b7_\b0 static _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br * _\bC_\br_\be_\ba_\bt_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+171 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+172 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+173 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+174 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+175 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+176 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+177 bool interleavedDerivativeBuffers = false) {\n+178 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br *instance = new _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n+(interleavedDerivativeBuffers);\n+179 if (instance->_\bC_\bo_\bm_\bp_\bi_\bl_\be(srcDesc, dstDesc, duDesc, dvDesc,\n+180 duuDesc, duvDesc, dvvDesc))\n+181 return instance;\n+182 delete instance;\n+183 return NULL;\n+184 }\n+185\n+_\b1_\b9_\b9 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br(bool interleavedDerivativeBuffers = false);\n+200\n+_\b2_\b0_\b2 _\b~_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br();\n+203\n+209\n+237 template \n+_\b2_\b3_\b8 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n+239 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+240 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n 241 STENCIL_TABLE const *stencilTable,\n-242 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+242 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n 243 void * deviceContext = NULL) {\n 244\n 245 if (instance) {\n 246 return instance->_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer, srcDesc,\n 247 dstBuffer, dstDesc,\n-248 duBuffer, duDesc,\n-249 dvBuffer, dvDesc,\n-250 stencilTable);\n-251 } else {\n-252 // Create an instance on demand (slow)\n-253 (void)deviceContext; // unused\n-254 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc, duDesc, dvDesc);\n+248 stencilTable);\n+249 } else {\n+250 // Create an instance on demand (slow)\n+251 (void)deviceContext; // unused\n+252 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n+253 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+254 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br());\n 255 if (instance) {\n 256 bool r = instance->_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer, srcDesc,\n 257 dstBuffer, dstDesc,\n-258 duBuffer, duDesc,\n-259 dvBuffer, dvDesc,\n-260 stencilTable);\n-261 delete instance;\n-262 return r;\n+258 stencilTable);\n+259 delete instance;\n+260 return r;\n+261 }\n+262 return false;\n 263 }\n-264 return false;\n-265 }\n-266 }\n-267\n-325 template \n-_\b3_\b2_\b6 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n-327 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-328 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-329 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-330 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-331 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-332 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-333 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-334 STENCIL_TABLE const *stencilTable,\n-335 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n-336 void * deviceContext = NULL) {\n+264 }\n+265\n+305 template \n+_\b3_\b0_\b6 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n+307 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+308 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+309 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+310 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+311 STENCIL_TABLE const *stencilTable,\n+312 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+313 void * deviceContext = NULL) {\n+314\n+315 if (instance) {\n+316 return instance->_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer, srcDesc,\n+317 dstBuffer, dstDesc,\n+318 duBuffer, duDesc,\n+319 dvBuffer, dvDesc,\n+320 stencilTable);\n+321 } else {\n+322 // Create an instance on demand (slow)\n+323 (void)deviceContext; // unused\n+324 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc, duDesc, dvDesc);\n+325 if (instance) {\n+326 bool r = instance->_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer, srcDesc,\n+327 dstBuffer, dstDesc,\n+328 duBuffer, duDesc,\n+329 dvBuffer, dvDesc,\n+330 stencilTable);\n+331 delete instance;\n+332 return r;\n+333 }\n+334 return false;\n+335 }\n+336 }\n 337\n-338 if (instance) {\n-339 return instance->_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer, srcDesc,\n-340 dstBuffer, dstDesc,\n-341 duBuffer, duDesc,\n-342 dvBuffer, dvDesc,\n-343 duuBuffer, duuDesc,\n-344 duvBuffer, duvDesc,\n-345 dvvBuffer, dvvDesc,\n-346 stencilTable);\n-347 } else {\n-348 // Create an instance on demand (slow)\n-349 (void)deviceContext; // unused\n-350 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc, duDesc, dvDesc,\n-351 duuDesc, duvDesc, dvvDesc);\n-352 if (instance) {\n-353 bool r = instance->_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer, srcDesc,\n-354 dstBuffer, dstDesc,\n-355 duBuffer, duDesc,\n-356 dvBuffer, dvDesc,\n-357 duuBuffer, duuDesc,\n-358 duvBuffer, duvDesc,\n-359 dvvBuffer, dvvDesc,\n-360 stencilTable);\n-361 delete instance;\n-362 return r;\n-363 }\n-364 return false;\n-365 }\n-366 }\n-367\n-385 template \n-_\b3_\b8_\b6 bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n-387 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-388 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-389 STENCIL_TABLE const *stencilTable) const {\n-390 return _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer->BindVBO(), srcDesc,\n-391 dstBuffer->BindVBO(), dstDesc,\n-392 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-393 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-394 stencilTable->GetSizesBuffer(),\n-395 stencilTable->GetOffsetsBuffer(),\n-396 stencilTable->GetIndicesBuffer(),\n-397 stencilTable->GetWeightsBuffer(),\n-398 0,\n-399 0,\n-400 /* start = */ 0,\n-401 /* end = */ stencilTable->GetNumStencils());\n-402 }\n-403\n-433 template \n-_\b4_\b3_\b4 bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n-435 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-436 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-437 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-438 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-439 STENCIL_TABLE const *stencilTable) const {\n-440 return _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer->BindVBO(), srcDesc,\n-441 dstBuffer->BindVBO(), dstDesc,\n-442 duBuffer->BindVBO(), duDesc,\n-443 dvBuffer->BindVBO(), dvDesc,\n-444 stencilTable->GetSizesBuffer(),\n-445 stencilTable->GetOffsetsBuffer(),\n-446 stencilTable->GetIndicesBuffer(),\n-447 stencilTable->GetWeightsBuffer(),\n-448 stencilTable->GetDuWeightsBuffer(),\n-449 stencilTable->GetDvWeightsBuffer(),\n-450 /* start = */ 0,\n-451 /* end = */ stencilTable->GetNumStencils());\n-452 }\n-453\n-501 template \n-_\b5_\b0_\b2 bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n-503 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-504 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-505 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-506 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-507 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-508 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-509 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-510 STENCIL_TABLE const *stencilTable) const {\n-511 return _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer->BindVBO(), srcDesc,\n-512 dstBuffer->BindVBO(), dstDesc,\n-513 duBuffer->BindVBO(), duDesc,\n-514 dvBuffer->BindVBO(), dvDesc,\n-515 duuBuffer->BindVBO(), duuDesc,\n-516 duvBuffer->BindVBO(), duvDesc,\n-517 dvvBuffer->BindVBO(), dvvDesc,\n-518 stencilTable->GetSizesBuffer(),\n-519 stencilTable->GetOffsetsBuffer(),\n-520 stencilTable->GetIndicesBuffer(),\n-521 stencilTable->GetWeightsBuffer(),\n-522 stencilTable->GetDuWeightsBuffer(),\n-523 stencilTable->GetDvWeightsBuffer(),\n-524 stencilTable->GetDuuWeightsBuffer(),\n-525 stencilTable->GetDuvWeightsBuffer(),\n-526 stencilTable->GetDvvWeightsBuffer(),\n-527 /* start = */ 0,\n-528 /* end = */ stencilTable->GetNumStencils());\n-529 }\n-530\n-_\b5_\b6_\b6 bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(GLuint srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-567 GLuint dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-568 GLuint duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-569 GLuint dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-570 GLuint sizesBuffer,\n-571 GLuint offsetsBuffer,\n-572 GLuint indicesBuffer,\n-573 GLuint weightsBuffer,\n-574 GLuint duWeightsBuffer,\n-575 GLuint dvWeightsBuffer,\n-576 int start,\n-577 int end) const;\n-578\n-_\b6_\b3_\b2 bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(GLuint srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-633 GLuint dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-634 GLuint duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-635 GLuint dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-636 GLuint duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-637 GLuint duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-638 GLuint dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-639 GLuint sizesBuffer,\n-640 GLuint offsetsBuffer,\n-641 GLuint indicesBuffer,\n-642 GLuint weightsBuffer,\n-643 GLuint duWeightsBuffer,\n-644 GLuint dvWeightsBuffer,\n-645 GLuint duuWeightsBuffer,\n-646 GLuint duvWeightsBuffer,\n-647 GLuint dvvWeightsBuffer,\n-648 int start,\n-649 int end) const;\n-650\n-656\n-689 template \n-_\b6_\b9_\b1 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n-692 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-693 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-694 int numPatchCoords,\n-695 PATCHCOORD_BUFFER *patchCoords,\n-696 PATCH_TABLE *patchTable,\n-697 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n-698 void * deviceContext = NULL) {\n-699\n-700 if (instance) {\n-701 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer, srcDesc,\n-702 dstBuffer, dstDesc,\n-703 numPatchCoords, patchCoords,\n-704 patchTable);\n-705 } else {\n-706 // Create an instance on demand (slow)\n-707 (void)deviceContext; // unused\n-708 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n-709 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-710 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br());\n-711 if (instance) {\n-712 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer, srcDesc,\n-713 dstBuffer, dstDesc,\n-714 numPatchCoords, patchCoords,\n-715 patchTable);\n-716 delete instance;\n-717 return r;\n-718 }\n-719 return false;\n-720 }\n-721 }\n-722\n-767 template \n-_\b7_\b6_\b9 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n-770 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-771 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-772 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-773 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-774 int numPatchCoords,\n-775 PATCHCOORD_BUFFER *patchCoords,\n-776 PATCH_TABLE *patchTable,\n-777 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n-778 void * deviceContext = NULL) {\n-779\n-780 if (instance) {\n-781 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer, srcDesc,\n-782 dstBuffer, dstDesc,\n-783 duBuffer, duDesc,\n-784 dvBuffer, dvDesc,\n-785 numPatchCoords, patchCoords,\n-786 patchTable);\n-787 } else {\n-788 // Create an instance on demand (slow)\n-789 (void)deviceContext; // unused\n-790 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n-791 duDesc, dvDesc);\n-792 if (instance) {\n-793 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer, srcDesc,\n-794 dstBuffer, dstDesc,\n-795 duBuffer, duDesc,\n-796 dvBuffer, dvDesc,\n-797 numPatchCoords, patchCoords,\n-798 patchTable);\n-799 delete instance;\n-800 return r;\n-801 }\n-802 return false;\n-803 }\n-804 }\n-805\n-868 template \n-_\b8_\b7_\b0 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n-871 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-872 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-873 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-874 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-875 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-876 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-877 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-878 int numPatchCoords,\n-879 PATCHCOORD_BUFFER *patchCoords,\n-880 PATCH_TABLE *patchTable,\n-881 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n-882 void * deviceContext = NULL) {\n-883\n-884 if (instance) {\n-885 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer, srcDesc,\n-886 dstBuffer, dstDesc,\n-887 duBuffer, duDesc,\n-888 dvBuffer, dvDesc,\n-889 duuBuffer, duuDesc,\n-890 duvBuffer, duvDesc,\n-891 dvvBuffer, dvvDesc,\n-892 numPatchCoords, patchCoords,\n-893 patchTable);\n-894 } else {\n-895 // Create an instance on demand (slow)\n-896 (void)deviceContext; // unused\n-897 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n-898 duDesc, dvDesc,\n-899 duuDesc, duvDesc, dvvDesc);\n-900 if (instance) {\n-901 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer, srcDesc,\n-902 dstBuffer, dstDesc,\n-903 duBuffer, duDesc,\n-904 dvBuffer, dvDesc,\n-905 duuBuffer, duuDesc,\n-906 duvBuffer, duvDesc,\n-907 dvvBuffer, dvvDesc,\n-908 numPatchCoords, patchCoords,\n-909 patchTable);\n-910 delete instance;\n-911 return r;\n-912 }\n-913 return false;\n-914 }\n-915 }\n-916\n+395 template \n+_\b3_\b9_\b6 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n+397 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+398 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+399 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+400 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+401 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+402 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+403 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+404 STENCIL_TABLE const *stencilTable,\n+405 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+406 void * deviceContext = NULL) {\n+407\n+408 if (instance) {\n+409 return instance->_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer, srcDesc,\n+410 dstBuffer, dstDesc,\n+411 duBuffer, duDesc,\n+412 dvBuffer, dvDesc,\n+413 duuBuffer, duuDesc,\n+414 duvBuffer, duvDesc,\n+415 dvvBuffer, dvvDesc,\n+416 stencilTable);\n+417 } else {\n+418 // Create an instance on demand (slow)\n+419 (void)deviceContext; // unused\n+420 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n+421 duDesc, dvDesc,\n+422 duuDesc, duvDesc, dvvDesc);\n+423 if (instance) {\n+424 bool r = instance->_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer, srcDesc,\n+425 dstBuffer, dstDesc,\n+426 duBuffer, duDesc,\n+427 dvBuffer, dvDesc,\n+428 duuBuffer, duuDesc,\n+429 duvBuffer, duvDesc,\n+430 dvvBuffer, dvvDesc,\n+431 stencilTable);\n+432 delete instance;\n+433 return r;\n+434 }\n+435 return false;\n+436 }\n+437 }\n+438\n+456 template \n+_\b4_\b5_\b7 bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n+458 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+459 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+460 STENCIL_TABLE const *stencilTable) const {\n+461\n+462 return _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer->BindVBO(), srcDesc,\n+463 dstBuffer->BindVBO(), dstDesc,\n+464 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+465 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+466 stencilTable->GetSizesTexture(),\n+467 stencilTable->GetOffsetsTexture(),\n+468 stencilTable->GetIndicesTexture(),\n+469 stencilTable->GetWeightsTexture(),\n+470 0,\n+471 0,\n+472 /* start = */ 0,\n+473 /* end = */ stencilTable->GetNumStencils());\n+474 }\n+475\n+505 template \n+_\b5_\b0_\b6 bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n+507 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+508 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+509 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+510 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+511 STENCIL_TABLE const *stencilTable) const {\n+512\n+513 return _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer->BindVBO(), srcDesc,\n+514 dstBuffer->BindVBO(), dstDesc,\n+515 duBuffer->BindVBO(), duDesc,\n+516 dvBuffer->BindVBO(), dvDesc,\n+517 stencilTable->GetSizesTexture(),\n+518 stencilTable->GetOffsetsTexture(),\n+519 stencilTable->GetIndicesTexture(),\n+520 stencilTable->GetWeightsTexture(),\n+521 stencilTable->GetDuWeightsTexture(),\n+522 stencilTable->GetDvWeightsTexture(),\n+523 /* start = */ 0,\n+524 /* end = */ stencilTable->GetNumStencils());\n+525 }\n+526\n+574 template \n+_\b5_\b7_\b5 bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n+576 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+577 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+578 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+579 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+580 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+581 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+582 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+583 STENCIL_TABLE const *stencilTable) const {\n+584\n+585 return _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer->BindVBO(), srcDesc,\n+586 dstBuffer->BindVBO(), dstDesc,\n+587 duBuffer->BindVBO(), duDesc,\n+588 dvBuffer->BindVBO(), dvDesc,\n+589 duuBuffer->BindVBO(), duuDesc,\n+590 duvBuffer->BindVBO(), duvDesc,\n+591 dvvBuffer->BindVBO(), dvvDesc,\n+592 stencilTable->GetSizesTexture(),\n+593 stencilTable->GetOffsetsTexture(),\n+594 stencilTable->GetIndicesTexture(),\n+595 stencilTable->GetWeightsTexture(),\n+596 stencilTable->GetDuWeightsTexture(),\n+597 stencilTable->GetDvWeightsTexture(),\n+598 stencilTable->GetDuuWeightsTexture(),\n+599 stencilTable->GetDuvWeightsTexture(),\n+600 stencilTable->GetDvvWeightsTexture(),\n+601 /* start = */ 0,\n+602 /* end = */ stencilTable->GetNumStencils());\n+603 }\n+604\n+_\b6_\b4_\b0 bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(GLuint srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+641 GLuint dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+642 GLuint duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+643 GLuint dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+644 GLuint sizesBuffer,\n+645 GLuint offsetsBuffer,\n+646 GLuint indicesBuffer,\n+647 GLuint weightsBuffer,\n+648 GLuint duWeightsBuffer,\n+649 GLuint dvWeightsBuffer,\n+650 int start,\n+651 int end) const;\n+652\n+_\b7_\b0_\b6 bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(GLuint srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+707 GLuint dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+708 GLuint duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+709 GLuint dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+710 GLuint duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+711 GLuint duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+712 GLuint dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+713 GLuint sizesBuffer,\n+714 GLuint offsetsBuffer,\n+715 GLuint indicesBuffer,\n+716 GLuint weightsBuffer,\n+717 GLuint duWeightsBuffer,\n+718 GLuint dvWeightsBuffer,\n+719 GLuint duuWeightsBuffer,\n+720 GLuint duvWeightsBuffer,\n+721 GLuint dvvWeightsBuffer,\n+722 int start,\n+723 int end) const;\n+724\n+730\n+763 template \n+_\b7_\b6_\b5 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n+766 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+767 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+768 int numPatchCoords,\n+769 PATCHCOORD_BUFFER *patchCoords,\n+770 PATCH_TABLE *patchTable,\n+771 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+772 void * deviceContext = NULL) {\n+773\n+774 if (instance) {\n+775 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer, srcDesc,\n+776 dstBuffer, dstDesc,\n+777 numPatchCoords, patchCoords,\n+778 patchTable);\n+779 } else {\n+780 // Create an instance on demand (slow)\n+781 (void)deviceContext; // unused\n+782 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n+783 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+784 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br());\n+785 if (instance) {\n+786 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer, srcDesc,\n+787 dstBuffer, dstDesc,\n+788 numPatchCoords, patchCoords,\n+789 patchTable);\n+790 delete instance;\n+791 return r;\n+792 }\n+793 return false;\n+794 }\n+795 }\n+796\n+841 template \n+_\b8_\b4_\b3 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n+844 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+845 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+846 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+847 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+848 int numPatchCoords,\n+849 PATCHCOORD_BUFFER *patchCoords,\n+850 PATCH_TABLE *patchTable,\n+851 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+852 void * deviceContext = NULL) {\n+853\n+854 if (instance) {\n+855 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer, srcDesc,\n+856 dstBuffer, dstDesc,\n+857 duBuffer, duDesc,\n+858 dvBuffer, dvDesc,\n+859 numPatchCoords, patchCoords,\n+860 patchTable);\n+861 } else {\n+862 // Create an instance on demand (slow)\n+863 (void)deviceContext; // unused\n+864 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc, duDesc, dvDesc);\n+865 if (instance) {\n+866 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer, srcDesc,\n+867 dstBuffer, dstDesc,\n+868 duBuffer, duDesc,\n+869 dvBuffer, dvDesc,\n+870 numPatchCoords, patchCoords,\n+871 patchTable);\n+872 delete instance;\n+873 return r;\n+874 }\n+875 return false;\n+876 }\n+877 }\n+878\n 941 template \n-_\b9_\b4_\b3 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n+_\b9_\b4_\b3 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n 944 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n 945 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-946 int numPatchCoords,\n-947 PATCHCOORD_BUFFER *patchCoords,\n-948 PATCH_TABLE *patchTable) const {\n-949\n-950 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n-951 dstBuffer->BindVBO(), dstDesc,\n-952 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-953 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-954 numPatchCoords,\n-955 patchCoords->BindVBO(),\n-956 patchTable->GetPatchArrays(),\n-957 patchTable->GetPatchIndexBuffer(),\n-958 patchTable->GetPatchParamBuffer());\n-959 }\n-960\n-995 template \n-_\b9_\b9_\b7 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n-998 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-999 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1000 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-1001 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-1002 int numPatchCoords,\n-1003 PATCHCOORD_BUFFER *patchCoords,\n-1004 PATCH_TABLE *patchTable) const {\n-1005\n-1006 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n-1007 dstBuffer->BindVBO(), dstDesc,\n-1008 duBuffer->BindVBO(), duDesc,\n-1009 dvBuffer->BindVBO(), dvDesc,\n-1010 numPatchCoords,\n-1011 patchCoords->BindVBO(),\n-1012 patchTable->GetPatchArrays(),\n-1013 patchTable->GetPatchIndexBuffer(),\n-1014 patchTable->GetPatchParamBuffer());\n-1015 }\n-1016\n-1069 template \n-_\b1_\b0_\b7_\b1 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n-1072 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1073 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1074 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-1075 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-1076 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-1077 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-1078 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-1079 int numPatchCoords,\n-1080 PATCHCOORD_BUFFER *patchCoords,\n-1081 PATCH_TABLE *patchTable) const {\n-1082\n-1083 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n-1084 dstBuffer->BindVBO(), dstDesc,\n-1085 duBuffer->BindVBO(), duDesc,\n-1086 dvBuffer->BindVBO(), dvDesc,\n-1087 duuBuffer->BindVBO(), duuDesc,\n-1088 duvBuffer->BindVBO(), duvDesc,\n-1089 dvvBuffer->BindVBO(), dvvDesc,\n-1090 numPatchCoords,\n-1091 patchCoords->BindVBO(),\n-1092 patchTable->GetPatchArrays(),\n-1093 patchTable->GetPatchIndexBuffer(),\n-1094 patchTable->GetPatchParamBuffer());\n-1095 }\n-1096\n-_\b1_\b0_\b9_\b7 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(GLuint srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1098 GLuint dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1099 GLuint duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-1100 GLuint dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-1101 int numPatchCoords,\n-1102 GLuint patchCoordsBuffer,\n-1103 const _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br &patchArrays,\n-1104 GLuint patchIndexBuffer,\n-1105 GLuint patchParamsBuffer) const;\n-1106\n-_\b1_\b1_\b0_\b7 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(GLuint srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1108 GLuint dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1109 GLuint duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-1110 GLuint dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-1111 GLuint duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-1112 GLuint duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-1113 GLuint dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-1114 int numPatchCoords,\n-1115 GLuint patchCoordsBuffer,\n-1116 const _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br &patchArrays,\n-1117 GLuint patchIndexBuffer,\n-1118 GLuint patchParamsBuffer) const;\n-1119\n-1152 template \n-_\b1_\b1_\b5_\b4 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1155 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1156 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1157 int numPatchCoords,\n-1158 PATCHCOORD_BUFFER *patchCoords,\n-1159 PATCH_TABLE *patchTable,\n-1160 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n-1161 void * deviceContext = NULL) {\n-1162\n-1163 if (instance) {\n-1164 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1165 srcBuffer, srcDesc,\n-1166 dstBuffer, dstDesc,\n-1167 numPatchCoords, patchCoords,\n-1168 patchTable);\n-1169 } else {\n-1170 // Create an instance on demand (slow)\n-1171 (void)deviceContext; // unused\n-1172 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n-1173 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-1174 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br());\n-1175 if (instance) {\n-1176 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1177 srcBuffer, srcDesc,\n-1178 dstBuffer, dstDesc,\n-1179 numPatchCoords, patchCoords,\n-1180 patchTable);\n-1181 delete instance;\n-1182 return r;\n-1183 }\n-1184 return false;\n-1185 }\n-1186 }\n-1187\n-1212 template \n-_\b1_\b2_\b1_\b4 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1215 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1216 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1217 int numPatchCoords,\n-1218 PATCHCOORD_BUFFER *patchCoords,\n-1219 PATCH_TABLE *patchTable) const {\n-1220\n-1221 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n-1222 dstBuffer->BindVBO(), dstDesc,\n-1223 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-1224 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-1225 numPatchCoords,\n-1226 patchCoords->BindVBO(),\n-1227 patchTable->GetVaryingPatchArrays(),\n-1228 patchTable->GetVaryingPatchIndexBuffer(),\n-1229 patchTable->GetPatchParamBuffer());\n-1230 }\n-1231\n-1276 template \n-_\b1_\b2_\b7_\b8 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1279 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1280 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1281 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-1282 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-1283 int numPatchCoords,\n-1284 PATCHCOORD_BUFFER *patchCoords,\n-1285 PATCH_TABLE *patchTable,\n-1286 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n-1287 void * deviceContext = NULL) {\n-1288\n-1289 if (instance) {\n-1290 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1291 srcBuffer, srcDesc,\n-1292 dstBuffer, dstDesc,\n-1293 duBuffer, duDesc,\n-1294 dvBuffer, dvDesc,\n-1295 numPatchCoords, patchCoords,\n-1296 patchTable);\n-1297 } else {\n-1298 // Create an instance on demand (slow)\n-1299 (void)deviceContext; // unused\n-1300 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n-1301 duDesc, dvDesc);\n-1302 if (instance) {\n-1303 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1304 srcBuffer, srcDesc,\n-1305 dstBuffer, dstDesc,\n-1306 duBuffer, duDesc,\n-1307 dvBuffer, dvDesc,\n-1308 numPatchCoords, patchCoords,\n-1309 patchTable);\n-1310 delete instance;\n-1311 return r;\n-1312 }\n-1313 return false;\n-1314 }\n-1315 }\n-1316\n-1353 template \n-_\b1_\b3_\b5_\b5 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1356 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1357 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1358 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-1359 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-1360 int numPatchCoords,\n-1361 PATCHCOORD_BUFFER *patchCoords,\n-1362 PATCH_TABLE *patchTable) const {\n-1363\n-1364 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n-1365 dstBuffer->BindVBO(), dstDesc,\n-1366 duBuffer->BindVBO(), duDesc,\n-1367 dvBuffer->BindVBO(), dvDesc,\n-1368 numPatchCoords,\n-1369 patchCoords->BindVBO(),\n-1370 patchTable->GetVaryingPatchArrays(),\n-1371 patchTable->GetVaryingPatchIndexBuffer(),\n-1372 patchTable->GetPatchParamBuffer());\n-1373 }\n-1374\n-1437 template \n-_\b1_\b4_\b3_\b9 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1440 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1441 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1442 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-1443 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-1444 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-1445 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-1446 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-1447 int numPatchCoords,\n-1448 PATCHCOORD_BUFFER *patchCoords,\n-1449 PATCH_TABLE *patchTable,\n-1450 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n-1451 void * deviceContext = NULL) {\n-1452\n-1453 if (instance) {\n-1454 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1455 srcBuffer, srcDesc,\n-1456 dstBuffer, dstDesc,\n-1457 duBuffer, duDesc,\n-1458 dvBuffer, dvDesc,\n-1459 duuBuffer, duuDesc,\n-1460 duvBuffer, duvDesc,\n-1461 dvvBuffer, dvvDesc,\n-1462 numPatchCoords, patchCoords,\n-1463 patchTable);\n-1464 } else {\n-1465 // Create an instance on demand (slow)\n-1466 (void)deviceContext; // unused\n-1467 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n-1468 duDesc, dvDesc,\n-1469 duuDesc, duvDesc, dvvDesc);\n-1470 if (instance) {\n-1471 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1472 srcBuffer, srcDesc,\n-1473 dstBuffer, dstDesc,\n-1474 duBuffer, duDesc,\n-1475 dvBuffer, dvDesc,\n-1476 duuBuffer, duuDesc,\n-1477 duvBuffer, duvDesc,\n-1478 dvvBuffer, dvvDesc,\n-1479 numPatchCoords, patchCoords,\n-1480 patchTable);\n-1481 delete instance;\n-1482 return r;\n-1483 }\n-1484 return false;\n-1485 }\n-1486 }\n-1487\n-1542 template \n-_\b1_\b5_\b4_\b4 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1545 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1546 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1547 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-1548 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-1549 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-1550 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-1551 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-1552 int numPatchCoords,\n-1553 PATCHCOORD_BUFFER *patchCoords,\n-1554 PATCH_TABLE *patchTable) const {\n-1555\n-1556 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n-1557 dstBuffer->BindVBO(), dstDesc,\n-1558 duBuffer->BindVBO(), duDesc,\n-1559 dvBuffer->BindVBO(), dvDesc,\n-1560 duuBuffer->BindVBO(), duuDesc,\n-1561 duvBuffer->BindVBO(), duvDesc,\n-1562 dvvBuffer->BindVBO(), dvvDesc,\n-1563 numPatchCoords,\n-1564 patchCoords->BindVBO(),\n-1565 patchTable->GetVaryingPatchArrays(),\n-1566 patchTable->GetVaryingPatchIndexBuffer(),\n-1567 patchTable->GetPatchParamBuffer());\n-1568 }\n-1569\n-1604 template \n-_\b1_\b6_\b0_\b6 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1607 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1608 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1609 int numPatchCoords,\n-1610 PATCHCOORD_BUFFER *patchCoords,\n-1611 PATCH_TABLE *patchTable,\n-1612 int fvarChannel,\n-1613 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n-1614 void * deviceContext = NULL) {\n-1615\n-1616 if (instance) {\n-1617 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1618 srcBuffer, srcDesc,\n-1619 dstBuffer, dstDesc,\n-1620 numPatchCoords, patchCoords,\n-1621 patchTable, fvarChannel);\n-1622 } else {\n-1623 // Create an instance on demand (slow)\n-1624 (void)deviceContext; // unused\n-1625 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n-1626 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-1627 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br());\n-1628 if (instance) {\n-1629 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1630 srcBuffer, srcDesc,\n-1631 dstBuffer, dstDesc,\n-1632 numPatchCoords, patchCoords,\n-1633 patchTable, fvarChannel);\n-1634 delete instance;\n-1635 return r;\n-1636 }\n-1637 return false;\n-1638 }\n-1639 }\n-1640\n-1667 template \n-_\b1_\b6_\b6_\b9 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1670 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1671 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1672 int numPatchCoords,\n-1673 PATCHCOORD_BUFFER *patchCoords,\n-1674 PATCH_TABLE *patchTable,\n-1675 int fvarChannel = 0) const {\n-1676\n-1677 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n-1678 dstBuffer->BindVBO(), dstDesc,\n-1679 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-1680 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-1681 numPatchCoords,\n-1682 patchCoords->BindVBO(),\n-1683 patchTable->GetFVarPatchArrays(fvarChannel),\n-1684 patchTable->GetFVarPatchIndexBuffer(fvarChannel),\n-1685 patchTable->GetFVarPatchParamBuffer(fvarChannel));\n-1686 }\n-1687\n-1734 template \n-_\b1_\b7_\b3_\b6 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1737 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1738 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1739 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-1740 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-1741 int numPatchCoords,\n-1742 PATCHCOORD_BUFFER *patchCoords,\n-1743 PATCH_TABLE *patchTable,\n-1744 int fvarChannel,\n-1745 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n-1746 void * deviceContext = NULL) {\n-1747\n-1748 if (instance) {\n-1749 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1750 srcBuffer, srcDesc,\n-1751 dstBuffer, dstDesc,\n-1752 duBuffer, duDesc,\n-1753 dvBuffer, dvDesc,\n-1754 numPatchCoords, patchCoords,\n-1755 patchTable, fvarChannel);\n-1756 } else {\n-1757 // Create an instance on demand (slow)\n-1758 (void)deviceContext; // unused\n-1759 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n-1760 duDesc, dvDesc);\n-1761 if (instance) {\n-1762 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1763 srcBuffer, srcDesc,\n-1764 dstBuffer, dstDesc,\n-1765 duBuffer, duDesc,\n-1766 dvBuffer, dvDesc,\n-1767 numPatchCoords, patchCoords,\n-1768 patchTable, fvarChannel);\n-1769 delete instance;\n-1770 return r;\n-1771 }\n-1772 return false;\n-1773 }\n-1774 }\n-1775\n-1814 template \n-_\b1_\b8_\b1_\b6 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1817 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1818 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1819 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-1820 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-1821 int numPatchCoords,\n-1822 PATCHCOORD_BUFFER *patchCoords,\n-1823 PATCH_TABLE *patchTable,\n-1824 int fvarChannel = 0) const {\n-1825\n-1826 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n-1827 dstBuffer->BindVBO(), dstDesc,\n-1828 duBuffer->BindVBO(), duDesc,\n-1829 dvBuffer->BindVBO(), dvDesc,\n-1830 numPatchCoords,\n-1831 patchCoords->BindVBO(),\n-1832 patchTable->GetFVarPatchArrays(fvarChannel),\n-1833 patchTable->GetFVarPatchIndexBuffer(fvarChannel),\n-1834 patchTable->GetFVarPatchParamBuffer(fvarChannel));\n-1835 }\n-1836\n-1901 template \n-_\b1_\b9_\b0_\b3 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1904 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1905 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1906 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-1907 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-1908 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-1909 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-1910 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-1911 int numPatchCoords,\n-1912 PATCHCOORD_BUFFER *patchCoords,\n-1913 PATCH_TABLE *patchTable,\n-1914 int fvarChannel,\n-1915 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n-1916 void * deviceContext = NULL) {\n-1917\n-1918 if (instance) {\n-1919 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1920 srcBuffer, srcDesc,\n-1921 dstBuffer, dstDesc,\n-1922 duBuffer, duDesc,\n-1923 dvBuffer, dvDesc,\n-1924 duuBuffer, duuDesc,\n-1925 duvBuffer, duvDesc,\n-1926 dvvBuffer, dvvDesc,\n-1927 numPatchCoords, patchCoords,\n-1928 patchTable, fvarChannel);\n-1929 } else {\n-1930 // Create an instance on demand (slow)\n-1931 (void)deviceContext; // unused\n-1932 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n-1933 duDesc, dvDesc,\n-1934 duuDesc, duvDesc, dvvDesc);\n-1935 if (instance) {\n-1936 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1937 srcBuffer, srcDesc,\n-1938 dstBuffer, dstDesc,\n-1939 duBuffer, duDesc,\n-1940 dvBuffer, dvDesc,\n-1941 duuBuffer, duuDesc,\n-1942 duvBuffer, duvDesc,\n-1943 dvvBuffer, dvvDesc,\n-1944 numPatchCoords, patchCoords,\n-1945 patchTable, fvarChannel);\n-1946 delete instance;\n-1947 return r;\n-1948 }\n-1949 return false;\n-1950 }\n-1951 }\n-1952\n-2009 template \n-_\b2_\b0_\b1_\b1 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-2012 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-2013 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-2014 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-2015 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-2016 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-2017 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-2018 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-2019 int numPatchCoords,\n-2020 PATCHCOORD_BUFFER *patchCoords,\n-2021 PATCH_TABLE *patchTable,\n-2022 int fvarChannel = 0) const {\n-2023\n-2024 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n-2025 dstBuffer->BindVBO(), dstDesc,\n-2026 duBuffer->BindVBO(), duDesc,\n-2027 dvBuffer->BindVBO(), dvDesc,\n-2028 duuBuffer->BindVBO(), duuDesc,\n-2029 duvBuffer->BindVBO(), duvDesc,\n-2030 dvvBuffer->BindVBO(), dvvDesc,\n-2031 numPatchCoords,\n-2032 patchCoords->BindVBO(),\n-2033 patchTable->GetFVarPatchArrays(fvarChannel),\n-2034 patchTable->GetFVarPatchIndexBuffer(fvarChannel),\n-2035 patchTable->GetFVarPatchParamBuffer(fvarChannel));\n-2036 }\n-2037\n-2043\n-_\b2_\b0_\b4_\b6 bool _\bC_\bo_\bm_\bp_\bi_\bl_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-2047 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-2048 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc = _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-2049 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc = _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-2050 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc = _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-2051 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc = _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-2052 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc = _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br());\n-2053\n-_\b2_\b0_\b5_\b5 static void _\bS_\by_\bn_\bc_\bh_\br_\bo_\bn_\bi_\bz_\be(void *deviceContext);\n-2056\n-2057private:\n-2058 struct _StencilKernel {\n-2059 _StencilKernel();\n-2060 ~_StencilKernel();\n-2061 bool Compile(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-2062 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-2063 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-2064 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-2065 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-2066 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-2067 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-2068 int workGroupSize);\n-2069 GLuint program;\n-2070 GLuint uniformStart;\n-2071 GLuint uniformEnd;\n-2072 GLuint uniformSrcOffset;\n-2073 GLuint uniformDstOffset;\n-2074 GLuint uniformDuDesc;\n-2075 GLuint uniformDvDesc;\n-2076 GLuint uniformDuuDesc;\n-2077 GLuint uniformDuvDesc;\n-2078 GLuint uniformDvvDesc;\n-2079 } _stencilKernel;\n-2080\n-2081 struct _PatchKernel {\n-2082 _PatchKernel();\n-2083 ~_PatchKernel();\n-2084 bool Compile(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-2085 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-2086 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-2087 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-2088 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-2089 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-2090 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-2091 int workGroupSize);\n-2092 GLuint program;\n-2093 GLuint uniformSrcOffset;\n-2094 GLuint uniformDstOffset;\n-2095 GLuint uniformPatchArray;\n-2096 GLuint uniformDuDesc;\n-2097 GLuint uniformDvDesc;\n-2098 GLuint uniformDuuDesc;\n-2099 GLuint uniformDuvDesc;\n-2100 GLuint uniformDvvDesc;\n-2101 } _patchKernel;\n-2102\n-2103 int _workGroupSize;\n-2104 GLuint _patchArraysSSBO;\n-2105};\n-2106\n-2107} // end namespace Osd\n-2108\n-2109} // end namespace OPENSUBDIV_VERSION\n-2110using namespace OPENSUBDIV_VERSION;\n-2111\n-2112} // end namespace OpenSubdiv\n-2113\n-2114\n-2115#endif // OPENSUBDIV3_OSD_GL_COMPUTE_EVALUATOR_H\n+946 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+947 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+948 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+949 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+950 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+951 int numPatchCoords,\n+952 PATCHCOORD_BUFFER *patchCoords,\n+953 PATCH_TABLE *patchTable,\n+954 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+955 void * deviceContext = NULL) {\n+956\n+957 if (instance) {\n+958 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer, srcDesc,\n+959 dstBuffer, dstDesc,\n+960 duBuffer, duDesc,\n+961 dvBuffer, dvDesc,\n+962 duuBuffer, duuDesc,\n+963 duvBuffer, duvDesc,\n+964 dvvBuffer, dvvDesc,\n+965 numPatchCoords, patchCoords,\n+966 patchTable);\n+967 } else {\n+968 // Create an instance on demand (slow)\n+969 (void)deviceContext; // unused\n+970 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n+971 duDesc, dvDesc,\n+972 duuDesc, duvDesc, dvvDesc);\n+973 if (instance) {\n+974 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer, srcDesc,\n+975 dstBuffer, dstDesc,\n+976 duBuffer, duDesc,\n+977 dvBuffer, dvDesc,\n+978 duuBuffer, duuDesc,\n+979 duvBuffer, duvDesc,\n+980 dvvBuffer, dvvDesc,\n+981 numPatchCoords, patchCoords,\n+982 patchTable);\n+983 delete instance;\n+984 return r;\n+985 }\n+986 return false;\n+987 }\n+988 }\n+989\n+1014 template \n+_\b1_\b0_\b1_\b6 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n+1017 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1018 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1019 int numPatchCoords,\n+1020 PATCHCOORD_BUFFER *patchCoords,\n+1021 PATCH_TABLE *patchTable) const {\n+1022\n+1023 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n+1024 dstBuffer->BindVBO(), dstDesc,\n+1025 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+1026 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+1027 numPatchCoords,\n+1028 patchCoords->BindVBO(),\n+1029 patchTable->GetPatchArrays(),\n+1030 patchTable->GetPatchIndexTextureBuffer(),\n+1031 patchTable->GetPatchParamTextureBuffer());\n+1032 }\n+1033\n+1068 template \n+_\b1_\b0_\b7_\b0 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n+1071 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1072 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1073 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+1074 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+1075 int numPatchCoords,\n+1076 PATCHCOORD_BUFFER *patchCoords,\n+1077 PATCH_TABLE *patchTable) const {\n+1078\n+1079 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n+1080 dstBuffer->BindVBO(), dstDesc,\n+1081 duBuffer->BindVBO(), duDesc,\n+1082 dvBuffer->BindVBO(), dvDesc,\n+1083 numPatchCoords,\n+1084 patchCoords->BindVBO(),\n+1085 patchTable->GetPatchArrays(),\n+1086 patchTable->GetPatchIndexTextureBuffer(),\n+1087 patchTable->GetPatchParamTextureBuffer());\n+1088 }\n+1089\n+1142 template \n+_\b1_\b1_\b4_\b4 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n+1145 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1146 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1147 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+1148 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+1149 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+1150 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+1151 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+1152 int numPatchCoords,\n+1153 PATCHCOORD_BUFFER *patchCoords,\n+1154 PATCH_TABLE *patchTable) const {\n+1155\n+1156 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n+1157 dstBuffer->BindVBO(), dstDesc,\n+1158 duBuffer->BindVBO(), duDesc,\n+1159 dvBuffer->BindVBO(), dvDesc,\n+1160 duuBuffer->BindVBO(), duuDesc,\n+1161 duvBuffer->BindVBO(), duvDesc,\n+1162 dvvBuffer->BindVBO(), dvvDesc,\n+1163 numPatchCoords,\n+1164 patchCoords->BindVBO(),\n+1165 patchTable->GetPatchArrays(),\n+1166 patchTable->GetPatchIndexTextureBuffer(),\n+1167 patchTable->GetPatchParamTextureBuffer());\n+1168 }\n+1169\n+_\b1_\b1_\b7_\b0 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(GLuint srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1171 GLuint dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1172 GLuint duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+1173 GLuint dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+1174 int numPatchCoords,\n+1175 GLuint patchCoordsBuffer,\n+1176 const _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br &patchArrays,\n+1177 GLuint patchIndexBuffer,\n+1178 GLuint patchParamsBuffer) const;\n+1179\n+_\b1_\b1_\b8_\b0 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(GLuint srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1181 GLuint dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1182 GLuint duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+1183 GLuint dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+1184 GLuint duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+1185 GLuint duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+1186 GLuint dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+1187 int numPatchCoords,\n+1188 GLuint patchCoordsBuffer,\n+1189 const _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br &patchArrays,\n+1190 GLuint patchIndexBuffer,\n+1191 GLuint patchParamsBuffer) const;\n+1192\n+1225 template \n+_\b1_\b2_\b2_\b7 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1228 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1229 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1230 int numPatchCoords,\n+1231 PATCHCOORD_BUFFER *patchCoords,\n+1232 PATCH_TABLE *patchTable,\n+1233 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+1234 void * deviceContext = NULL) {\n+1235\n+1236 if (instance) {\n+1237 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1238 srcBuffer, srcDesc,\n+1239 dstBuffer, dstDesc,\n+1240 numPatchCoords, patchCoords,\n+1241 patchTable);\n+1242 } else {\n+1243 // Create an instance on demand (slow)\n+1244 (void)deviceContext; // unused\n+1245 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n+1246 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+1247 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br());\n+1248 if (instance) {\n+1249 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1250 srcBuffer, srcDesc,\n+1251 dstBuffer, dstDesc,\n+1252 numPatchCoords, patchCoords,\n+1253 patchTable);\n+1254 delete instance;\n+1255 return r;\n+1256 }\n+1257 return false;\n+1258 }\n+1259 }\n+1260\n+1285 template \n+_\b1_\b2_\b8_\b7 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1288 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1289 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1290 int numPatchCoords,\n+1291 PATCHCOORD_BUFFER *patchCoords,\n+1292 PATCH_TABLE *patchTable) const {\n+1293\n+1294 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n+1295 dstBuffer->BindVBO(), dstDesc,\n+1296 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+1297 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+1298 numPatchCoords,\n+1299 patchCoords->BindVBO(),\n+1300 patchTable->GetVaryingPatchArrays(),\n+1301 patchTable->GetVaryingPatchIndexTextureBuffer(),\n+1302 patchTable->GetPatchParamTextureBuffer());\n+1303 }\n+1304\n+1349 template \n+_\b1_\b3_\b5_\b1 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1352 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1353 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1354 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+1355 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+1356 int numPatchCoords,\n+1357 PATCHCOORD_BUFFER *patchCoords,\n+1358 PATCH_TABLE *patchTable,\n+1359 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+1360 void * deviceContext = NULL) {\n+1361\n+1362 if (instance) {\n+1363 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1364 srcBuffer, srcDesc,\n+1365 dstBuffer, dstDesc,\n+1366 duBuffer, duDesc,\n+1367 dvBuffer, dvDesc,\n+1368 numPatchCoords, patchCoords,\n+1369 patchTable);\n+1370 } else {\n+1371 // Create an instance on demand (slow)\n+1372 (void)deviceContext; // unused\n+1373 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n+1374 duDesc, dvDesc);\n+1375 if (instance) {\n+1376 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1377 srcBuffer, srcDesc,\n+1378 dstBuffer, dstDesc,\n+1379 duBuffer, duDesc,\n+1380 dvBuffer, dvDesc,\n+1381 numPatchCoords, patchCoords,\n+1382 patchTable);\n+1383 delete instance;\n+1384 return r;\n+1385 }\n+1386 return false;\n+1387 }\n+1388 }\n+1389\n+1426 template \n+_\b1_\b4_\b2_\b8 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1429 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1430 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1431 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+1432 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+1433 int numPatchCoords,\n+1434 PATCHCOORD_BUFFER *patchCoords,\n+1435 PATCH_TABLE *patchTable) const {\n+1436\n+1437 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n+1438 dstBuffer->BindVBO(), dstDesc,\n+1439 duBuffer->BindVBO(), duDesc,\n+1440 dvBuffer->BindVBO(), dvDesc,\n+1441 numPatchCoords,\n+1442 patchCoords->BindVBO(),\n+1443 patchTable->GetVaryingPatchArrays(),\n+1444 patchTable->GetVaryingPatchIndexTextureBuffer(),\n+1445 patchTable->GetPatchParamTextureBuffer());\n+1446 }\n+1447\n+1510 template \n+_\b1_\b5_\b1_\b2 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1513 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1514 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1515 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+1516 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+1517 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+1518 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+1519 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+1520 int numPatchCoords,\n+1521 PATCHCOORD_BUFFER *patchCoords,\n+1522 PATCH_TABLE *patchTable,\n+1523 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+1524 void * deviceContext = NULL) {\n+1525\n+1526 if (instance) {\n+1527 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1528 srcBuffer, srcDesc,\n+1529 dstBuffer, dstDesc,\n+1530 duBuffer, duDesc,\n+1531 dvBuffer, dvDesc,\n+1532 duuBuffer, duuDesc,\n+1533 duvBuffer, duvDesc,\n+1534 dvvBuffer, dvvDesc,\n+1535 numPatchCoords, patchCoords,\n+1536 patchTable);\n+1537 } else {\n+1538 // Create an instance on demand (slow)\n+1539 (void)deviceContext; // unused\n+1540 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n+1541 duDesc, dvDesc,\n+1542 duuDesc, duvDesc, dvvDesc);\n+1543 if (instance) {\n+1544 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1545 srcBuffer, srcDesc,\n+1546 dstBuffer, dstDesc,\n+1547 duBuffer, duDesc,\n+1548 dvBuffer, dvDesc,\n+1549 duuBuffer, duuDesc,\n+1550 duvBuffer, duvDesc,\n+1551 dvvBuffer, dvvDesc,\n+1552 numPatchCoords, patchCoords,\n+1553 patchTable);\n+1554 delete instance;\n+1555 return r;\n+1556 }\n+1557 return false;\n+1558 }\n+1559 }\n+1560\n+1615 template \n+_\b1_\b6_\b1_\b7 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1618 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1619 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1620 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+1621 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+1622 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+1623 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+1624 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+1625 int numPatchCoords,\n+1626 PATCHCOORD_BUFFER *patchCoords,\n+1627 PATCH_TABLE *patchTable) const {\n+1628\n+1629 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n+1630 dstBuffer->BindVBO(), dstDesc,\n+1631 duBuffer->BindVBO(), duDesc,\n+1632 dvBuffer->BindVBO(), dvDesc,\n+1633 duuBuffer->BindVBO(), duuDesc,\n+1634 duvBuffer->BindVBO(), duvDesc,\n+1635 dvvBuffer->BindVBO(), dvvDesc,\n+1636 numPatchCoords,\n+1637 patchCoords->BindVBO(),\n+1638 patchTable->GetVaryingPatchArrays(),\n+1639 patchTable->GetVaryingPatchIndexTextureBuffer(),\n+1640 patchTable->GetPatchParamTextureBuffer());\n+1641 }\n+1642\n+1677 template \n+_\b1_\b6_\b7_\b9 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1680 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1681 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1682 int numPatchCoords,\n+1683 PATCHCOORD_BUFFER *patchCoords,\n+1684 PATCH_TABLE *patchTable,\n+1685 int fvarChannel,\n+1686 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+1687 void * deviceContext = NULL) {\n+1688\n+1689 if (instance) {\n+1690 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1691 srcBuffer, srcDesc,\n+1692 dstBuffer, dstDesc,\n+1693 numPatchCoords, patchCoords,\n+1694 patchTable, fvarChannel);\n+1695 } else {\n+1696 // Create an instance on demand (slow)\n+1697 (void)deviceContext; // unused\n+1698 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n+1699 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+1700 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br());\n+1701 if (instance) {\n+1702 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1703 srcBuffer, srcDesc,\n+1704 dstBuffer, dstDesc,\n+1705 numPatchCoords, patchCoords,\n+1706 patchTable, fvarChannel);\n+1707 delete instance;\n+1708 return r;\n+1709 }\n+1710 return false;\n+1711 }\n+1712 }\n+1713\n+1740 template \n+_\b1_\b7_\b4_\b2 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1743 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1744 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1745 int numPatchCoords,\n+1746 PATCHCOORD_BUFFER *patchCoords,\n+1747 PATCH_TABLE *patchTable,\n+1748 int fvarChannel = 0) const {\n+1749\n+1750 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n+1751 dstBuffer->BindVBO(), dstDesc,\n+1752 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+1753 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+1754 numPatchCoords,\n+1755 patchCoords->BindVBO(),\n+1756 patchTable->GetFVarPatchArrays(fvarChannel),\n+1757 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),\n+1758 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));\n+1759 }\n+1760\n+1807 template \n+_\b1_\b8_\b0_\b9 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1810 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1811 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1812 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+1813 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+1814 int numPatchCoords,\n+1815 PATCHCOORD_BUFFER *patchCoords,\n+1816 PATCH_TABLE *patchTable,\n+1817 int fvarChannel,\n+1818 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+1819 void * deviceContext = NULL) {\n+1820\n+1821 if (instance) {\n+1822 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1823 srcBuffer, srcDesc,\n+1824 dstBuffer, dstDesc,\n+1825 duBuffer, duDesc,\n+1826 dvBuffer, dvDesc,\n+1827 numPatchCoords, patchCoords,\n+1828 patchTable, fvarChannel);\n+1829 } else {\n+1830 // Create an instance on demand (slow)\n+1831 (void)deviceContext; // unused\n+1832 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n+1833 duDesc, dvDesc);\n+1834 if (instance) {\n+1835 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1836 srcBuffer, srcDesc,\n+1837 dstBuffer, dstDesc,\n+1838 duBuffer, duDesc,\n+1839 dvBuffer, dvDesc,\n+1840 numPatchCoords, patchCoords,\n+1841 patchTable, fvarChannel);\n+1842 delete instance;\n+1843 return r;\n+1844 }\n+1845 return false;\n+1846 }\n+1847 }\n+1848\n+1887 template \n+_\b1_\b8_\b8_\b9 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1890 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1891 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1892 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+1893 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+1894 int numPatchCoords,\n+1895 PATCHCOORD_BUFFER *patchCoords,\n+1896 PATCH_TABLE *patchTable,\n+1897 int fvarChannel = 0) const {\n+1898\n+1899 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n+1900 dstBuffer->BindVBO(), dstDesc,\n+1901 duBuffer->BindVBO(), duDesc,\n+1902 dvBuffer->BindVBO(), dvDesc,\n+1903 numPatchCoords,\n+1904 patchCoords->BindVBO(),\n+1905 patchTable->GetFVarPatchArrays(fvarChannel),\n+1906 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),\n+1907 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));\n+1908 }\n+1909\n+1974 template \n+_\b1_\b9_\b7_\b6 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1977 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1978 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1979 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+1980 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+1981 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+1982 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+1983 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+1984 int numPatchCoords,\n+1985 PATCHCOORD_BUFFER *patchCoords,\n+1986 PATCH_TABLE *patchTable,\n+1987 int fvarChannel,\n+1988 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+1989 void * deviceContext = NULL) {\n+1990\n+1991 if (instance) {\n+1992 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1993 srcBuffer, srcDesc,\n+1994 dstBuffer, dstDesc,\n+1995 duBuffer, duDesc,\n+1996 dvBuffer, dvDesc,\n+1997 duuBuffer, duuDesc,\n+1998 duvBuffer, duvDesc,\n+1999 dvvBuffer, dvvDesc,\n+2000 numPatchCoords, patchCoords,\n+2001 patchTable, fvarChannel);\n+2002 } else {\n+2003 // Create an instance on demand (slow)\n+2004 (void)deviceContext; // unused\n+2005 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n+2006 duDesc, dvDesc,\n+2007 duuDesc, duvDesc, dvvDesc);\n+2008 if (instance) {\n+2009 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+2010 srcBuffer, srcDesc,\n+2011 dstBuffer, dstDesc,\n+2012 duBuffer, duDesc,\n+2013 dvBuffer, dvDesc,\n+2014 duuBuffer, duuDesc,\n+2015 duvBuffer, duvDesc,\n+2016 dvvBuffer, dvvDesc,\n+2017 numPatchCoords, patchCoords,\n+2018 patchTable, fvarChannel);\n+2019 delete instance;\n+2020 return r;\n+2021 }\n+2022 return false;\n+2023 }\n+2024 }\n+2025\n+2082 template \n+_\b2_\b0_\b8_\b4 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+2085 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+2086 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+2087 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+2088 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+2089 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+2090 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+2091 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+2092 int numPatchCoords,\n+2093 PATCHCOORD_BUFFER *patchCoords,\n+2094 PATCH_TABLE *patchTable,\n+2095 int fvarChannel = 0) const {\n+2096\n+2097 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n+2098 dstBuffer->BindVBO(), dstDesc,\n+2099 duBuffer->BindVBO(), duDesc,\n+2100 dvBuffer->BindVBO(), dvDesc,\n+2101 duuBuffer->BindVBO(), duuDesc,\n+2102 duvBuffer->BindVBO(), duvDesc,\n+2103 dvvBuffer->BindVBO(), dvvDesc,\n+2104 numPatchCoords,\n+2105 patchCoords->BindVBO(),\n+2106 patchTable->GetFVarPatchArrays(fvarChannel),\n+2107 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),\n+2108 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));\n+2109 }\n+2110\n+2116\n+_\b2_\b1_\b1_\b9 bool _\bC_\bo_\bm_\bp_\bi_\bl_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+2120 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+2121 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc = _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+2122 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc = _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+2123 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc = _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+2124 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc = _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+2125 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc = _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br());\n+2126\n+_\b2_\b1_\b2_\b8 static void _\bS_\by_\bn_\bc_\bh_\br_\bo_\bn_\bi_\bz_\be(void *kernel);\n+2129\n+2130private:\n+2131 GLuint _srcBufferTexture;\n+2132 GLuint _patchArraysUBO;\n+2133 bool _interleavedDerivativeBuffers;\n+2134\n+2135 struct _StencilKernel {\n+2136 _StencilKernel();\n+2137 ~_StencilKernel();\n+2138 bool Compile(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+2139 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+2140 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+2141 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+2142 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+2143 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+2144 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+2145 bool interleavedDerivativeBuffers);\n+2146 GLuint program;\n+2147 GLint uniformSrcBufferTexture;\n+2148 GLint uniformSrcOffset; // src buffer offset (in elements)\n+2149\n+2150 GLint uniformSizesTexture;\n+2151 GLint uniformOffsetsTexture;\n+2152 GLint uniformIndicesTexture;\n+2153 GLint uniformWeightsTexture;\n+2154 GLint uniformDuWeightsTexture;\n+2155 GLint uniformDvWeightsTexture;\n+2156 GLint uniformDuuWeightsTexture;\n+2157 GLint uniformDuvWeightsTexture;\n+2158 GLint uniformDvvWeightsTexture;\n+2159 GLint uniformStart; // range\n+2160 GLint uniformEnd;\n+2161 } _stencilKernel;\n+2162\n+2163 struct _PatchKernel {\n+2164 _PatchKernel();\n+2165 ~_PatchKernel();\n+2166 bool Compile(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+2167 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+2168 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+2169 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+2170 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+2171 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+2172 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+2173 bool interleavedDerivativeBuffers);\n+2174 GLuint program;\n+2175 GLint uniformSrcBufferTexture;\n+2176 GLint uniformSrcOffset; // src buffer offset (in elements)\n+2177\n+2178 GLint uniformPatchArraysUBOBinding;\n+2179 GLint uniformPatchParamTexture;\n+2180 GLint uniformPatchIndexTexture;\n+2181 } _patchKernel;\n+2182\n+2183};\n+2184\n+2185} // end namespace Osd\n+2186\n+2187} // end namespace OPENSUBDIV_VERSION\n+2188using namespace OPENSUBDIV_VERSION;\n+2189\n+2190} // end namespace OpenSubdiv\n+2191\n+2192\n+2193#endif // OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br\n std::vector< PatchArray > PatchArrayVector\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b1_\b3_\b2\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n Stencil table class wrapping the template for compatibility.\n@@ -1038,345 +1100,372 @@\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n Limit stencil table class wrapping the template for compatibility.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b8_\b3\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n BufferDescriptor is a struct which describes buffer elements in interleaved\n data buffers....\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bb_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO\n-GL stencil table (Shader Storage buffer)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b5_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bD_\bu_\bv_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br\n-GLuint GetDuvWeightsBuffer() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br\n-GLuint GetWeightsBuffer() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO\n-GLStencilTableSSBO(Far::LimitStencilTable const *limitStencilTable)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bD_\bu_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br\n-GLuint GetDuWeightsBuffer() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\b~_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO\n-~GLStencilTableSSBO()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO\n+GL TextureBuffer stencil table.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b5_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bS_\bi_\bz_\be_\bs_\bT_\be_\bx_\bt_\bu_\br_\be\n+GLuint GetSizesTexture() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static GLStencilTableTBO * Create(Far::StencilTable const *stencilTable, void\n+*deviceContext=NULL)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b5_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bD_\bv_\bv_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be\n+GLuint GetDvvWeightsTexture() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b8_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n int GetNumStencils() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bB_\bu_\bf_\bf_\be_\br\n-GLuint GetIndicesBuffer() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br\n-GLuint GetOffsetsBuffer() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO\n-GLStencilTableSSBO(Far::StencilTable const *stencilTable)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bD_\bv_\bv_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br\n-GLuint GetDvvWeightsBuffer() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bS_\bi_\bz_\be_\bs_\bB_\bu_\bf_\bf_\be_\br\n-GLuint GetSizesBuffer() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static GLStencilTableSSBO * Create(Far::LimitStencilTable const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b8_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bD_\bu_\bv_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be\n+GLuint GetDuvWeightsTexture() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bD_\bu_\bu_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be\n+GLuint GetDuuWeightsTexture() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bT_\be_\bx_\bt_\bu_\br_\be\n+GLuint GetIndicesTexture() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\b~_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO\n+~GLStencilTableTBO()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO\n+GLStencilTableTBO(Far::StencilTable const *stencilTable)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO\n+GLStencilTableTBO(Far::LimitStencilTable const *limitStencilTable)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be\n+GLuint GetWeightsTexture() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static GLStencilTableTBO * Create(Far::LimitStencilTable const\n *limitStencilTable, void *deviceContext=NULL)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b5_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bD_\bu_\bu_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br\n-GLuint GetDuuWeightsBuffer() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bD_\bv_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br\n-GLuint GetDvWeightsBuffer() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static GLStencilTableSSBO * Create(Far::StencilTable const *stencilTable, void\n-*deviceContext=NULL)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b5_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b9_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b6_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bD_\bv_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be\n+GLuint GetDvWeightsTexture() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bD_\bu_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be\n+GLuint GetDuWeightsTexture() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be\n+GLuint GetOffsetsTexture() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b9_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords,\n PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const\n Generic limit eval function. This function has a same signature as other device\n kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b2_\b1_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n-static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor\n-const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,\n-DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n-BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER\n-*patchCoords, PATCH_TABLE *patchTable, int fvarChannel, GLComputeEvaluator\n-const *instance, void *deviceContext=NULL)\n-Generic limit eval function. This function has a same signature as other device\n-kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b7_\b3_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b2_\b8_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc,\n+BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc,\n+BufferDescriptor const &dvDesc, bool interleavedDerivativeBuffers=false)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b2_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer,\n BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const\n &dvDesc, STENCIL_TABLE const *stencilTable) const\n Generic stencil function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b4_\b3_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n-static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const\n-&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int\n-numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable,\n-GLComputeEvaluator const *instance, void *deviceContext=NULL)\n-Generic limit eval function. This function has a same signature as other device\n-kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b1_\b5_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n-static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor\n-const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int\n-numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int\n-fvarChannel, GLComputeEvaluator const *instance, void *deviceContext=NULL)\n-Generic limit eval function. This function has a same signature as other device\n-kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b6_\b0_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b5_\b0_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n+GLXFBEvaluator(bool interleavedDerivativeBuffers=false)\n+Constructor.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer,\n BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const\n &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER\n *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer,\n BufferDescriptor const &dvvDesc, STENCIL_TABLE const *stencilTable) const\n Generic stencil function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b5_\b0_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n-static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const\n-&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n-*duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n-BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER\n-*patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator const *instance, void\n-*deviceContext=NULL)\n-Generic limit eval function. This function has a same signature as other device\n-kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b2_\b7_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bI_\bn_\bs_\bt_\ba_\bn_\bt_\bi_\ba_\bt_\ba_\bb_\bl_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b5_\b7_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bI_\bn_\bs_\bt_\ba_\bn_\bt_\bi_\ba_\bt_\ba_\bb_\bl_\be\n bool Instantiatable\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b9_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b0_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint\n dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor\n const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, GLuint\n duuBuffer, BufferDescriptor const &duuDesc, GLuint duvBuffer, BufferDescriptor\n const &duvDesc, GLuint dvvBuffer, BufferDescriptor const &dvvDesc, int\n numPatchCoords, GLuint patchCoordsBuffer, const PatchArrayVector &patchArrays,\n GLuint patchIndexBuffer, GLuint patchParamsBuffer) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\b~_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n-~GLComputeEvaluator()\n-Destructor. note that the GL context must be made current.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const\n+&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n+*duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n+BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const\n+&duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER\n+*dvvBuffer, BufferDescriptor const &dvvDesc, STENCIL_TABLE const *stencilTable,\n+GLXFBEvaluator const *instance, void *deviceContext=NULL)\n+Generic static stencil function. This function has a same signature as other\n+device kernels have so t...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b3_\b9_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer,\n BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const\n &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER\n *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer,\n BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER\n *patchCoords, PATCH_TABLE *patchTable) const\n Generic limit eval function with derivatives. This function has a same\n signature as other device kern...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b0_\b7_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b1_\b4_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc,\n+BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc,\n+BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc,\n+BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, bool\n+interleavedDerivativeBuffers=false)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b7_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc,\n+BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc,\n+BufferDescriptor const &dvDesc, void *deviceContext)\n+Specialization to allow creation without a device context.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b1_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const\n &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n BufferDescriptor const &dvDesc, STENCIL_TABLE const *stencilTable,\n-GLComputeEvaluator const *instance, void *deviceContext=NULL)\n+GLXFBEvaluator const *instance, void *deviceContext=NULL)\n Generic static stencil function. This function has a same signature as other\n device kernels have so t...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b2_\b3_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b3_\b0_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n+static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const\n+&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n+*duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n+BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER\n+*patchCoords, PATCH_TABLE *patchTable, GLXFBEvaluator const *instance, void\n+*deviceContext=NULL)\n+Generic limit eval function. This function has a same signature as other device\n+kernels have so that ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b3_\b5_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint\n dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor\n const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, GLuint\n duuBuffer, BufferDescriptor const &duuDesc, GLuint duvBuffer, BufferDescriptor\n const &duvDesc, GLuint dvvBuffer, BufferDescriptor const &dvvDesc, GLuint\n sizesBuffer, GLuint offsetsBuffer, GLuint indicesBuffer, GLuint weightsBuffer,\n GLuint duWeightsBuffer, GLuint dvWeightsBuffer, GLuint duuWeightsBuffer, GLuint\n duvWeightsBuffer, GLuint dvvWeightsBuffer, int start, int end) const\n-Dispatch the GLSL compute kernel on GPU asynchronously returns false if the\n-kernel hasn't been compil...\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n-static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const\n-&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE\n-const *stencilTable, GLComputeEvaluator const *instance, void\n-*deviceContext=NULL)\n-Generic static stencil function. This function has a same signature as other\n-device kernels have so t...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b6_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n-static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const\n-&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n-*duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n-BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const\n-&duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER\n-*dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords,\n-PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator\n-const *instance, void *deviceContext=NULL)\n-Generic limit eval function. This function has a same signature as other device\n-kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b4_\b3_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+Dispatch the GLSL XFB kernel on on GPU asynchronously returns false if the\n+kernel hasn't been compile...\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer,\n BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const\n &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE\n-*patchTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)\n+*patchTable, GLXFBEvaluator const *instance, void *deviceContext=NULL)\n Generic limit eval function. This function has a same signature as other device\n kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b6_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n-static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor\n-const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,\n-DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n-BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const\n-&duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER\n-*dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords,\n-PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel,\n-GLComputeEvaluator const *instance, void *deviceContext=NULL)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b8_\b4_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc,\n+BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc,\n+BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc,\n+BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc,\n+DEVICE_CONTEXT deviceContext)\n+Generic creator template.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b4_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc,\n+BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc,\n+BufferDescriptor const &dvDesc, DEVICE_CONTEXT deviceContext)\n+Generic creator template.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b0_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bS_\by_\bn_\bc_\bh_\br_\bo_\bn_\bi_\bz_\be\n+static void Synchronize(void *kernel)\n+Wait the dispatched kernel finishes.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n+static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const\n+&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int\n+numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable,\n+GLXFBEvaluator const *instance, void *deviceContext=NULL)\n Generic limit eval function. This function has a same signature as other device\n kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b9_\b0_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b2_\b2_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer,\n BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const\n &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER\n *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer,\n BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER\n *patchCoords, PATCH_TABLE *patchTable) const\n Generic limit eval function. This function has a same signature as other device\n kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b5_\b4_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b6_\b1_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const\n &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER\n *patchCoords, PATCH_TABLE *patchTable, int fvarChannel=0) const\n Generic limit eval function. This function has a same signature as other device\n kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b8_\b1_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b8_\b8_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n+DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords,\n+PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLXFBEvaluator const\n+*instance, void *deviceContext=NULL)\n+Generic limit eval function. This function has a same signature as other device\n+kernels have so that ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b6_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n+static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor\n+const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,\n+DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n+BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER\n+*patchCoords, PATCH_TABLE *patchTable, int fvarChannel, GLXFBEvaluator const\n+*instance, void *deviceContext=NULL)\n+Generic limit eval function. This function has a same signature as other device\n+kernels have so that ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b8_\b0_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords,\n PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const\n Generic limit eval function. This function has a same signature as other device\n kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b9_\b4_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n-GLComputeEvaluator()\n-Constructor.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b0_\b1_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n+DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer,\n+BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const\n+&dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER\n+*duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer,\n+BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER\n+*patchCoords, PATCH_TABLE *patchTable, GLXFBEvaluator const *instance, void\n+*deviceContext=NULL)\n+Generic limit eval function. This function has a same signature as other device\n+kernels have so that ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b9_\b4_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer,\n BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const\n &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE\n *patchTable) const\n Generic limit eval function with derivatives. This function has a same\n signature as other device kern...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b9_\b9_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n-static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n-DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords,\n-PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator\n-const *instance, void *deviceContext=NULL)\n-Generic limit eval function. This function has a same signature as other device\n-kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b6_\b9_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b0_\b7_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const\n *stencilTable) const\n Generic stencil function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b3_\b8_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b4_\b5_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint\n dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor\n const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, int\n numPatchCoords, GLuint patchCoordsBuffer, const PatchArrayVector &patchArrays,\n GLuint patchIndexBuffer, GLuint patchParamsBuffer) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc,\n+BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc,\n+BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc,\n+BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, void\n+*deviceContext)\n+Specialization to allow creation without a device context.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b5_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const\n &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const\n &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER\n *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords,\n PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel=0)\n const\n Generic limit eval function. This function has a same signature as other device\n kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b2_\b0_\b1_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static GLComputeEvaluator * Create(BufferDescriptor const &srcDesc,\n-BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc,\n-BufferDescriptor const &dvDesc, void *deviceContext=NULL)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b9_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b2_\b0_\b8_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n+static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const\n+&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n+*duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n+BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const\n+&duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER\n+*dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords,\n+PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLXFBEvaluator const\n+*instance, void *deviceContext=NULL)\n+Generic limit eval function. This function has a same signature as other device\n+kernels have so that ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b5_\b1_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint\n dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor\n const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, GLuint\n sizesBuffer, GLuint offsetsBuffer, GLuint indicesBuffer, GLuint weightsBuffer,\n GLuint duWeightsBuffer, GLuint dvWeightsBuffer, int start, int end) const\n-Dispatch the GLSL compute kernel on GPU asynchronously returns false if the\n-kernel hasn't been compil...\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+Dispatch the GLSL XFB kernel on on GPU asynchronously returns false if the\n+kernel hasn't been compile...\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n+static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor\n+const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int\n+numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int\n+fvarChannel, GLXFBEvaluator const *instance, void *deviceContext=NULL)\n+Generic limit eval function. This function has a same signature as other device\n+kernels have so that ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b6_\b7_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const\n-&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n-*duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n-BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const\n-&duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER\n-*dvvBuffer, BufferDescriptor const &dvvDesc, STENCIL_TABLE const *stencilTable,\n-GLComputeEvaluator const *instance, void *deviceContext=NULL)\n+&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE\n+const *stencilTable, GLXFBEvaluator const *instance, void *deviceContext=NULL)\n Generic static stencil function. This function has a same signature as other\n device kernels have so t...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b3_\b2_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bS_\by_\bn_\bc_\bh_\br_\bo_\bn_\bi_\bz_\be\n-static void Synchronize(void *deviceContext)\n-Wait the dispatched kernel finishes.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bm_\bp_\bi_\bl_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b2_\b3_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\b~_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n+~GLXFBEvaluator()\n+Destructor. note that the GL context must be made current.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bm_\bp_\bi_\bl_\be\n bool Compile(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc,\n BufferDescriptor const &duDesc=BufferDescriptor(), BufferDescriptor const\n &dvDesc=BufferDescriptor(), BufferDescriptor const &duuDesc=BufferDescriptor(),\n BufferDescriptor const &duvDesc=BufferDescriptor(), BufferDescriptor const\n &dvvDesc=BufferDescriptor())\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer,\n BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const\n &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE\n *patchTable) const\n Generic limit eval function. This function has a same signature as other device\n kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b3_\b5_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static GLComputeEvaluator * Create(BufferDescriptor const &srcDesc,\n-BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc,\n-BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc,\n-BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, void\n-*deviceContext=NULL)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b1_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b4_\b2_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const\n &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int\n numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int\n fvarChannel=0) const\n Generic limit eval function. This function has a same signature as other device\n kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b6_\b6_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n-static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n-DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer,\n-BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const\n-&dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER\n-*duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer,\n-BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER\n-*patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator const *instance, void\n-*deviceContext=NULL)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b7_\b4_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n+static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor\n+const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,\n+DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n+BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const\n+&duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER\n+*dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords,\n+PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel,\n+GLXFBEvaluator const *instance, void *deviceContext=NULL)\n Generic limit eval function. This function has a same signature as other device\n kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b8_\b7_\b0\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b9_\b7_\b6\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh\n+ * _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00851.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00851.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/glXFBEvaluator.h File Reference\n+OpenSubdiv: opensubdiv/osd/glComputeEvaluator.h File Reference\n \n \n \n \n \n \n \n@@ -90,30 +90,30 @@\n \n \n \n
    \n \n-
    glXFBEvaluator.h File Reference
    \n+
    glComputeEvaluator.h File Reference
    \n
    \n
    \n
    #include "../version.h"
    \n #include "../osd/opengl.h"
    \n #include "../osd/types.h"
    \n #include "../osd/bufferDescriptor.h"
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n \n-\n+\n \n

    \n Classes

    class  GLStencilTableTBO
     GL TextureBuffer stencil table. More...
    class  GLStencilTableSSBO
     GL stencil table (Shader Storage buffer) More...
     
    class  GLXFBEvaluator
    class  GLComputeEvaluator
     
    \n \n \n \n \n@@ -124,13 +124,13 @@\n \n

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,30 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-glXFBEvaluator.h File Reference\n+glComputeEvaluator.h File Reference\n #include \"../version.h\"\n #include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bo_\bp_\be_\bn_\bg_\bl_\b._\bh\"\n #include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n #include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bb_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO\n-\u00a0 GL TextureBuffer stencil table. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO\n+\u00a0 GL stencil table (Shader Storage buffer) _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-class \u00a0 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n+class \u00a0 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh\n+ * _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00851.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00851.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a00851 = [\n- [\"GLStencilTableTBO\", \"a01241.html\", \"a01241\"],\n- [\"GLXFBEvaluator\", \"a01245.html\", \"a01245\"]\n+ [\"GLStencilTableSSBO\", \"a01209.html\", \"a01209\"],\n+ [\"GLComputeEvaluator\", \"a01213.html\", \"a01213\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00851_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00851_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/glXFBEvaluator.h Source File\n+OpenSubdiv: opensubdiv/osd/glComputeEvaluator.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    glXFBEvaluator.h
    \n+
    glComputeEvaluator.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n
    2// Copyright 2015 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n@@ -119,16 +119,16 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H
    \n-
    26#define OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_GL_COMPUTE_EVALUATOR_H
    \n+
    26#define OPENSUBDIV3_OSD_GL_COMPUTE_EVALUATOR_H
    \n
    27
    \n
    28#include "../version.h"
    \n
    29
    \n
    30#include "../osd/opengl.h"
    \n
    31#include "../osd/types.h"
    \n
    32#include "../osd/bufferDescriptor.h"
    \n
    33
    \n@@ -139,1185 +139,1112 @@\n
    38 class PatchTable;
    \n
    39 class StencilTable;
    \n
    40 class LimitStencilTable;
    \n
    41}
    \n
    42
    \n
    43namespace Osd {
    \n
    44
    \n-
    \n-\n-
    53public:
    \n-
    \n-\n-
    55 Far::StencilTable const *stencilTable, void *deviceContext = NULL) {
    \n-
    56 (void)deviceContext; // unused
    \n-
    57 return new GLStencilTableTBO(stencilTable);
    \n-
    58 }
    \n-
    \n-
    59
    \n-
    \n-\n-
    61 Far::LimitStencilTable const *limitStencilTable,
    \n-
    62 void *deviceContext = NULL) {
    \n-
    63 (void)deviceContext; // unused
    \n-
    64 return new GLStencilTableTBO(limitStencilTable);
    \n-
    65 }
    \n-
    \n-
    66
    \n-
    67 explicit GLStencilTableTBO(Far::StencilTable const *stencilTable);
    \n-
    68 explicit GLStencilTableTBO(Far::LimitStencilTable const *limitStencilTable);
    \n-\n-
    70
    \n-
    71 // interfaces needed for GLSLTransformFeedbackKernel
    \n-
    72 GLuint GetSizesTexture() const { return _sizes; }
    \n-
    73 GLuint GetOffsetsTexture() const { return _offsets; }
    \n-
    74 GLuint GetIndicesTexture() const { return _indices; }
    \n-
    75 GLuint GetWeightsTexture() const { return _weights; }
    \n-
    76 GLuint GetDuWeightsTexture() const { return _duWeights; }
    \n-
    77 GLuint GetDvWeightsTexture() const { return _dvWeights; }
    \n-
    78 GLuint GetDuuWeightsTexture() const { return _duuWeights; }
    \n-
    79 GLuint GetDuvWeightsTexture() const { return _duvWeights; }
    \n-
    80 GLuint GetDvvWeightsTexture() const { return _dvvWeights; }
    \n-
    81 int GetNumStencils() const { return _numStencils; }
    \n-
    82
    \n-
    83private:
    \n-
    84 GLuint _sizes;
    \n-
    85 GLuint _offsets;
    \n-
    86 GLuint _indices;
    \n-
    87 GLuint _weights;
    \n-
    88 GLuint _duWeights;
    \n-
    89 GLuint _dvWeights;
    \n-
    90 GLuint _duuWeights;
    \n-
    91 GLuint _duvWeights;
    \n-
    92 GLuint _dvvWeights;
    \n-
    93 int _numStencils;
    \n-
    94};
    \n+
    \n+\n+
    52public:
    \n+
    \n+
    53 static GLStencilTableSSBO *Create(Far::StencilTable const *stencilTable,
    \n+
    54 void *deviceContext = NULL) {
    \n+
    55 (void)deviceContext; // unused
    \n+
    56 return new GLStencilTableSSBO(stencilTable);
    \n+
    57 }
    \n+
    \n+
    \n+\n+
    59 Far::LimitStencilTable const *limitStencilTable,
    \n+
    60 void *deviceContext = NULL) {
    \n+
    61 (void)deviceContext; // unused
    \n+
    62 return new GLStencilTableSSBO(limitStencilTable);
    \n+
    63 }
    \n+
    \n+
    64
    \n+
    65 explicit GLStencilTableSSBO(Far::StencilTable const *stencilTable);
    \n+
    66 explicit GLStencilTableSSBO(Far::LimitStencilTable const *limitStencilTable);
    \n+\n+
    68
    \n+
    69 // interfaces needed for GLSLComputeKernel
    \n+
    70 GLuint GetSizesBuffer() const { return _sizes; }
    \n+
    71 GLuint GetOffsetsBuffer() const { return _offsets; }
    \n+
    72 GLuint GetIndicesBuffer() const { return _indices; }
    \n+
    73 GLuint GetWeightsBuffer() const { return _weights; }
    \n+
    74 GLuint GetDuWeightsBuffer() const { return _duWeights; }
    \n+
    75 GLuint GetDvWeightsBuffer() const { return _dvWeights; }
    \n+
    76 GLuint GetDuuWeightsBuffer() const { return _duuWeights; }
    \n+
    77 GLuint GetDuvWeightsBuffer() const { return _duvWeights; }
    \n+
    78 GLuint GetDvvWeightsBuffer() const { return _dvvWeights; }
    \n+
    79 int GetNumStencils() const { return _numStencils; }
    \n+
    80
    \n+
    81private:
    \n+
    82 GLuint _sizes;
    \n+
    83 GLuint _offsets;
    \n+
    84 GLuint _indices;
    \n+
    85 GLuint _weights;
    \n+
    86 GLuint _duWeights;
    \n+
    87 GLuint _dvWeights;
    \n+
    88 GLuint _duuWeights;
    \n+
    89 GLuint _duvWeights;
    \n+
    90 GLuint _dvvWeights;
    \n+
    91 int _numStencils;
    \n+
    92};
    \n
    \n+
    93
    \n+
    94// ---------------------------------------------------------------------------
    \n
    95
    \n-
    96// ---------------------------------------------------------------------------
    \n-
    97
    \n-
    \n-\n-
    99public:
    \n-
    100 typedef bool Instantiatable;
    \n-
    101
    \n-
    103 template <typename DEVICE_CONTEXT>
    \n-
    \n-
    104 static GLXFBEvaluator *Create(BufferDescriptor const &srcDesc,
    \n-
    105 BufferDescriptor const &dstDesc,
    \n-
    106 BufferDescriptor const &duDesc,
    \n-
    107 BufferDescriptor const &dvDesc,
    \n-
    108 DEVICE_CONTEXT deviceContext) {
    \n-
    109 bool interleavedDerivativeBuffers = deviceContext
    \n-
    110 ? deviceContext->AreInterleavedDerivativeBuffers()
    \n-
    111 : false;
    \n-
    112 return Create(srcDesc, dstDesc, duDesc, dvDesc,
    \n-
    113 interleavedDerivativeBuffers);
    \n-
    114 }
    \n-
    \n-
    115
    \n-
    \n-
    117 static GLXFBEvaluator *Create(BufferDescriptor const &srcDesc,
    \n-
    118 BufferDescriptor const &dstDesc,
    \n-
    119 BufferDescriptor const &duDesc,
    \n-
    120 BufferDescriptor const &dvDesc,
    \n-
    121 void * deviceContext) {
    \n-
    122 (void)deviceContext; // not used
    \n-
    123 return Create(srcDesc, dstDesc, duDesc, dvDesc);
    \n-
    124 }
    \n-
    \n-
    125
    \n-
    \n-
    126 static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc,
    \n-
    127 BufferDescriptor const &dstDesc,
    \n-
    128 BufferDescriptor const &duDesc,
    \n-
    129 BufferDescriptor const &dvDesc,
    \n-
    130 bool interleavedDerivativeBuffers = false) {
    \n-
    131 GLXFBEvaluator *instance = new GLXFBEvaluator(interleavedDerivativeBuffers);
    \n-
    132 if (instance->Compile(srcDesc, dstDesc, duDesc, dvDesc))
    \n-
    133 return instance;
    \n-
    134 delete instance;
    \n-
    135 return NULL;
    \n-
    136 }
    \n-
    \n-
    137
    \n-
    139 template <typename DEVICE_CONTEXT>
    \n-
    \n-
    140 static GLXFBEvaluator *Create(BufferDescriptor const &srcDesc,
    \n-
    141 BufferDescriptor const &dstDesc,
    \n-
    142 BufferDescriptor const &duDesc,
    \n-
    143 BufferDescriptor const &dvDesc,
    \n-
    144 BufferDescriptor const &duuDesc,
    \n-
    145 BufferDescriptor const &duvDesc,
    \n-
    146 BufferDescriptor const &dvvDesc,
    \n-
    147 DEVICE_CONTEXT deviceContext) {
    \n-
    148 bool interleavedDerivativeBuffers = deviceContext
    \n-
    149 ? deviceContext->AreInterleavedDerivativeBuffers()
    \n-
    150 : false;
    \n-
    151 return Create(srcDesc, dstDesc, duDesc, dvDesc,
    \n-
    152 duuDesc, duvDesc, dvvDesc,
    \n-
    153 interleavedDerivativeBuffers);
    \n-
    154 }
    \n-
    \n-
    155
    \n-
    \n-
    157 static GLXFBEvaluator *Create(BufferDescriptor const &srcDesc,
    \n-
    158 BufferDescriptor const &dstDesc,
    \n-
    159 BufferDescriptor const &duDesc,
    \n-
    160 BufferDescriptor const &dvDesc,
    \n-
    161 BufferDescriptor const &duuDesc,
    \n-
    162 BufferDescriptor const &duvDesc,
    \n-
    163 BufferDescriptor const &dvvDesc,
    \n-
    164 void * deviceContext) {
    \n-
    165 (void)deviceContext; // not used
    \n-
    166 return Create(srcDesc, dstDesc, duDesc, dvDesc,
    \n-
    167 duuDesc, duvDesc, dvvDesc);
    \n-
    168 }
    \n-
    \n-
    169
    \n-
    \n-
    170 static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc,
    \n-
    171 BufferDescriptor const &dstDesc,
    \n-
    172 BufferDescriptor const &duDesc,
    \n-
    173 BufferDescriptor const &dvDesc,
    \n-
    174 BufferDescriptor const &duuDesc,
    \n-
    175 BufferDescriptor const &duvDesc,
    \n-
    176 BufferDescriptor const &dvvDesc,
    \n-
    177 bool interleavedDerivativeBuffers = false) {
    \n-
    178 GLXFBEvaluator *instance = new GLXFBEvaluator(interleavedDerivativeBuffers);
    \n-
    179 if (instance->Compile(srcDesc, dstDesc, duDesc, dvDesc,
    \n-
    180 duuDesc, duvDesc, dvvDesc))
    \n-
    181 return instance;
    \n-
    182 delete instance;
    \n-
    183 return NULL;
    \n-
    184 }
    \n-
    \n-
    185
    \n-
    199 GLXFBEvaluator(bool interleavedDerivativeBuffers = false);
    \n-
    200
    \n-\n-
    203
    \n-
    209
    \n-
    237 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n-
    \n-
    238 static bool EvalStencils(
    \n-
    239 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    240 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    \n+\n+
    97public:
    \n+
    98 typedef bool Instantiatable;
    \n+
    \n+\n+
    100 BufferDescriptor const &dstDesc,
    \n+
    101 BufferDescriptor const &duDesc,
    \n+
    102 BufferDescriptor const &dvDesc,
    \n+
    103 void * deviceContext = NULL) {
    \n+
    104 return Create(srcDesc, dstDesc, duDesc, dvDesc,
    \n+\n+\n+\n+
    108 deviceContext);
    \n+
    109 }
    \n+
    \n+
    110
    \n+
    \n+\n+
    112 BufferDescriptor const &dstDesc,
    \n+
    113 BufferDescriptor const &duDesc,
    \n+
    114 BufferDescriptor const &dvDesc,
    \n+
    115 BufferDescriptor const &duuDesc,
    \n+
    116 BufferDescriptor const &duvDesc,
    \n+
    117 BufferDescriptor const &dvvDesc,
    \n+
    118 void * deviceContext = NULL) {
    \n+
    119 (void)deviceContext; // not used
    \n+
    120 GLComputeEvaluator *instance = new GLComputeEvaluator();
    \n+
    121 if (instance->Compile(srcDesc, dstDesc, duDesc, dvDesc,
    \n+
    122 duuDesc, duvDesc, dvvDesc))
    \n+
    123 return instance;
    \n+
    124 delete instance;
    \n+
    125 return NULL;
    \n+
    126 }
    \n+
    \n+
    127
    \n+\n+
    130
    \n+\n+
    133
    \n+
    139
    \n+
    167 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n+
    \n+
    168 static bool EvalStencils(
    \n+
    169 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    170 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    171 STENCIL_TABLE const *stencilTable,
    \n+
    172 GLComputeEvaluator const *instance,
    \n+
    173 void * deviceContext = NULL) {
    \n+
    174
    \n+
    175 if (instance) {
    \n+
    176 return instance->EvalStencils(srcBuffer, srcDesc,
    \n+
    177 dstBuffer, dstDesc,
    \n+
    178 stencilTable);
    \n+
    179 } else {
    \n+
    180 // Create an instance on demand (slow)
    \n+
    181 (void)deviceContext; // unused
    \n+
    182 instance = Create(srcDesc, dstDesc,
    \n+\n+\n+
    185 if (instance) {
    \n+
    186 bool r = instance->EvalStencils(srcBuffer, srcDesc,
    \n+
    187 dstBuffer, dstDesc,
    \n+
    188 stencilTable);
    \n+
    189 delete instance;
    \n+
    190 return r;
    \n+
    191 }
    \n+
    192 return false;
    \n+
    193 }
    \n+
    194 }
    \n+
    \n+
    195
    \n+
    235 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n+
    \n+
    236 static bool EvalStencils(
    \n+
    237 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    238 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    239 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    240 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n
    241 STENCIL_TABLE const *stencilTable,
    \n-
    242 GLXFBEvaluator const *instance,
    \n+
    242 GLComputeEvaluator const *instance,
    \n
    243 void * deviceContext = NULL) {
    \n
    244
    \n
    245 if (instance) {
    \n-
    246 return instance->EvalStencils(srcBuffer, srcDesc,
    \n+
    246 return instance->EvalStencils(srcBuffer, srcDesc,
    \n
    247 dstBuffer, dstDesc,
    \n-
    248 stencilTable);
    \n-
    249 } else {
    \n-
    250 // Create an instance on demand (slow)
    \n-
    251 (void)deviceContext; // unused
    \n-
    252 instance = Create(srcDesc, dstDesc,
    \n-\n-\n+
    248 duBuffer, duDesc,
    \n+
    249 dvBuffer, dvDesc,
    \n+
    250 stencilTable);
    \n+
    251 } else {
    \n+
    252 // Create an instance on demand (slow)
    \n+
    253 (void)deviceContext; // unused
    \n+
    254 instance = Create(srcDesc, dstDesc, duDesc, dvDesc);
    \n
    255 if (instance) {
    \n-
    256 bool r = instance->EvalStencils(srcBuffer, srcDesc,
    \n+
    256 bool r = instance->EvalStencils(srcBuffer, srcDesc,
    \n
    257 dstBuffer, dstDesc,
    \n-
    258 stencilTable);
    \n-
    259 delete instance;
    \n-
    260 return r;
    \n-
    261 }
    \n-
    262 return false;
    \n-
    263 }
    \n-
    264 }
    \n-
    \n-
    265
    \n-
    305 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n-
    \n-
    306 static bool EvalStencils(
    \n-
    307 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    308 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    309 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    310 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    311 STENCIL_TABLE const *stencilTable,
    \n-
    312 GLXFBEvaluator const *instance,
    \n-
    313 void * deviceContext = NULL) {
    \n-
    314
    \n-
    315 if (instance) {
    \n-
    316 return instance->EvalStencils(srcBuffer, srcDesc,
    \n-
    317 dstBuffer, dstDesc,
    \n-
    318 duBuffer, duDesc,
    \n-
    319 dvBuffer, dvDesc,
    \n-
    320 stencilTable);
    \n-
    321 } else {
    \n-
    322 // Create an instance on demand (slow)
    \n-
    323 (void)deviceContext; // unused
    \n-
    324 instance = Create(srcDesc, dstDesc, duDesc, dvDesc);
    \n-
    325 if (instance) {
    \n-
    326 bool r = instance->EvalStencils(srcBuffer, srcDesc,
    \n-
    327 dstBuffer, dstDesc,
    \n-
    328 duBuffer, duDesc,
    \n-
    329 dvBuffer, dvDesc,
    \n-
    330 stencilTable);
    \n-
    331 delete instance;
    \n-
    332 return r;
    \n-
    333 }
    \n-
    334 return false;
    \n-
    335 }
    \n-
    336 }
    \n-
    \n+
    258 duBuffer, duDesc,
    \n+
    259 dvBuffer, dvDesc,
    \n+
    260 stencilTable);
    \n+
    261 delete instance;
    \n+
    262 return r;
    \n+
    263 }
    \n+
    264 return false;
    \n+
    265 }
    \n+
    266 }
    \n+
    \n+
    267
    \n+
    325 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n+
    \n+
    326 static bool EvalStencils(
    \n+
    327 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    328 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    329 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    330 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    331 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n+
    332 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n+
    333 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n+
    334 STENCIL_TABLE const *stencilTable,
    \n+
    335 GLComputeEvaluator const *instance,
    \n+
    336 void * deviceContext = NULL) {
    \n
    337
    \n-
    395 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n-
    \n-
    396 static bool EvalStencils(
    \n-
    397 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    398 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    399 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    400 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    401 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n-
    402 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n-
    403 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n-
    404 STENCIL_TABLE const *stencilTable,
    \n-
    405 GLXFBEvaluator const *instance,
    \n-
    406 void * deviceContext = NULL) {
    \n-
    407
    \n-
    408 if (instance) {
    \n-
    409 return instance->EvalStencils(srcBuffer, srcDesc,
    \n-
    410 dstBuffer, dstDesc,
    \n-
    411 duBuffer, duDesc,
    \n-
    412 dvBuffer, dvDesc,
    \n-
    413 duuBuffer, duuDesc,
    \n-
    414 duvBuffer, duvDesc,
    \n-
    415 dvvBuffer, dvvDesc,
    \n-
    416 stencilTable);
    \n-
    417 } else {
    \n-
    418 // Create an instance on demand (slow)
    \n-
    419 (void)deviceContext; // unused
    \n-
    420 instance = Create(srcDesc, dstDesc,
    \n-
    421 duDesc, dvDesc,
    \n-
    422 duuDesc, duvDesc, dvvDesc);
    \n-
    423 if (instance) {
    \n-
    424 bool r = instance->EvalStencils(srcBuffer, srcDesc,
    \n-
    425 dstBuffer, dstDesc,
    \n-
    426 duBuffer, duDesc,
    \n-
    427 dvBuffer, dvDesc,
    \n-
    428 duuBuffer, duuDesc,
    \n-
    429 duvBuffer, duvDesc,
    \n-
    430 dvvBuffer, dvvDesc,
    \n-
    431 stencilTable);
    \n-
    432 delete instance;
    \n-
    433 return r;
    \n-
    434 }
    \n-
    435 return false;
    \n-
    436 }
    \n-
    437 }
    \n-
    \n-
    438
    \n-
    456 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n-
    \n-\n-
    458 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    459 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    460 STENCIL_TABLE const *stencilTable) const {
    \n-
    461
    \n-
    462 return EvalStencils(srcBuffer->BindVBO(), srcDesc,
    \n-
    463 dstBuffer->BindVBO(), dstDesc,
    \n-
    464 0, BufferDescriptor(),
    \n-
    465 0, BufferDescriptor(),
    \n-
    466 stencilTable->GetSizesTexture(),
    \n-
    467 stencilTable->GetOffsetsTexture(),
    \n-
    468 stencilTable->GetIndicesTexture(),
    \n-
    469 stencilTable->GetWeightsTexture(),
    \n-
    470 0,
    \n-
    471 0,
    \n-
    472 /* start = */ 0,
    \n-
    473 /* end = */ stencilTable->GetNumStencils());
    \n-
    474 }
    \n-
    \n-
    475
    \n-
    505 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n-
    \n-\n-
    507 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    508 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    509 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    510 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    511 STENCIL_TABLE const *stencilTable) const {
    \n-
    512
    \n-
    513 return EvalStencils(srcBuffer->BindVBO(), srcDesc,
    \n-
    514 dstBuffer->BindVBO(), dstDesc,
    \n-
    515 duBuffer->BindVBO(), duDesc,
    \n-
    516 dvBuffer->BindVBO(), dvDesc,
    \n-
    517 stencilTable->GetSizesTexture(),
    \n-
    518 stencilTable->GetOffsetsTexture(),
    \n-
    519 stencilTable->GetIndicesTexture(),
    \n-
    520 stencilTable->GetWeightsTexture(),
    \n-
    521 stencilTable->GetDuWeightsTexture(),
    \n-
    522 stencilTable->GetDvWeightsTexture(),
    \n-
    523 /* start = */ 0,
    \n-
    524 /* end = */ stencilTable->GetNumStencils());
    \n-
    525 }
    \n-
    \n-
    526
    \n-
    574 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n-
    \n-\n-
    576 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    577 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    578 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    579 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    580 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n-
    581 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n-
    582 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n-
    583 STENCIL_TABLE const *stencilTable) const {
    \n-
    584
    \n-
    585 return EvalStencils(srcBuffer->BindVBO(), srcDesc,
    \n-
    586 dstBuffer->BindVBO(), dstDesc,
    \n-
    587 duBuffer->BindVBO(), duDesc,
    \n-
    588 dvBuffer->BindVBO(), dvDesc,
    \n-
    589 duuBuffer->BindVBO(), duuDesc,
    \n-
    590 duvBuffer->BindVBO(), duvDesc,
    \n-
    591 dvvBuffer->BindVBO(), dvvDesc,
    \n-
    592 stencilTable->GetSizesTexture(),
    \n-
    593 stencilTable->GetOffsetsTexture(),
    \n-
    594 stencilTable->GetIndicesTexture(),
    \n-
    595 stencilTable->GetWeightsTexture(),
    \n-
    596 stencilTable->GetDuWeightsTexture(),
    \n-
    597 stencilTable->GetDvWeightsTexture(),
    \n-
    598 stencilTable->GetDuuWeightsTexture(),
    \n-
    599 stencilTable->GetDuvWeightsTexture(),
    \n-
    600 stencilTable->GetDvvWeightsTexture(),
    \n-
    601 /* start = */ 0,
    \n-
    602 /* end = */ stencilTable->GetNumStencils());
    \n-
    603 }
    \n-
    \n-
    604
    \n-
    640 bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    641 GLuint dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    642 GLuint duBuffer, BufferDescriptor const &duDesc,
    \n-
    643 GLuint dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    644 GLuint sizesBuffer,
    \n-
    645 GLuint offsetsBuffer,
    \n-
    646 GLuint indicesBuffer,
    \n-
    647 GLuint weightsBuffer,
    \n-
    648 GLuint duWeightsBuffer,
    \n-
    649 GLuint dvWeightsBuffer,
    \n-
    650 int start,
    \n-
    651 int end) const;
    \n-
    652
    \n-
    706 bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    707 GLuint dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    708 GLuint duBuffer, BufferDescriptor const &duDesc,
    \n-
    709 GLuint dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    710 GLuint duuBuffer, BufferDescriptor const &duuDesc,
    \n-
    711 GLuint duvBuffer, BufferDescriptor const &duvDesc,
    \n-
    712 GLuint dvvBuffer, BufferDescriptor const &dvvDesc,
    \n-
    713 GLuint sizesBuffer,
    \n-
    714 GLuint offsetsBuffer,
    \n-
    715 GLuint indicesBuffer,
    \n-
    716 GLuint weightsBuffer,
    \n-
    717 GLuint duWeightsBuffer,
    \n-
    718 GLuint dvWeightsBuffer,
    \n-
    719 GLuint duuWeightsBuffer,
    \n-
    720 GLuint duvWeightsBuffer,
    \n-
    721 GLuint dvvWeightsBuffer,
    \n-
    722 int start,
    \n-
    723 int end) const;
    \n-
    724
    \n-
    730
    \n-
    763 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    764 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-
    765 static bool EvalPatches(
    \n-
    766 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    767 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    768 int numPatchCoords,
    \n-
    769 PATCHCOORD_BUFFER *patchCoords,
    \n-
    770 PATCH_TABLE *patchTable,
    \n-
    771 GLXFBEvaluator const *instance,
    \n-
    772 void * deviceContext = NULL) {
    \n-
    773
    \n-
    774 if (instance) {
    \n-
    775 return instance->EvalPatches(srcBuffer, srcDesc,
    \n-
    776 dstBuffer, dstDesc,
    \n-
    777 numPatchCoords, patchCoords,
    \n-
    778 patchTable);
    \n-
    779 } else {
    \n-
    780 // Create an instance on demand (slow)
    \n-
    781 (void)deviceContext; // unused
    \n-
    782 instance = Create(srcDesc, dstDesc,
    \n-\n-\n-
    785 if (instance) {
    \n-
    786 bool r = instance->EvalPatches(srcBuffer, srcDesc,
    \n-
    787 dstBuffer, dstDesc,
    \n-
    788 numPatchCoords, patchCoords,
    \n-
    789 patchTable);
    \n-
    790 delete instance;
    \n-
    791 return r;
    \n-
    792 }
    \n-
    793 return false;
    \n-
    794 }
    \n-
    795 }
    \n-
    \n-
    796
    \n-
    841 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    842 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-
    843 static bool EvalPatches(
    \n-
    844 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    845 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    846 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    847 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    848 int numPatchCoords,
    \n-
    849 PATCHCOORD_BUFFER *patchCoords,
    \n-
    850 PATCH_TABLE *patchTable,
    \n-
    851 GLXFBEvaluator const *instance,
    \n-
    852 void * deviceContext = NULL) {
    \n-
    853
    \n-
    854 if (instance) {
    \n-
    855 return instance->EvalPatches(srcBuffer, srcDesc,
    \n-
    856 dstBuffer, dstDesc,
    \n-
    857 duBuffer, duDesc,
    \n-
    858 dvBuffer, dvDesc,
    \n-
    859 numPatchCoords, patchCoords,
    \n-
    860 patchTable);
    \n-
    861 } else {
    \n-
    862 // Create an instance on demand (slow)
    \n-
    863 (void)deviceContext; // unused
    \n-
    864 instance = Create(srcDesc, dstDesc, duDesc, dvDesc);
    \n-
    865 if (instance) {
    \n-
    866 bool r = instance->EvalPatches(srcBuffer, srcDesc,
    \n-
    867 dstBuffer, dstDesc,
    \n-
    868 duBuffer, duDesc,
    \n-
    869 dvBuffer, dvDesc,
    \n-
    870 numPatchCoords, patchCoords,
    \n-
    871 patchTable);
    \n-
    872 delete instance;
    \n-
    873 return r;
    \n-
    874 }
    \n-
    875 return false;
    \n-
    876 }
    \n-
    877 }
    \n+
    338 if (instance) {
    \n+
    339 return instance->EvalStencils(srcBuffer, srcDesc,
    \n+
    340 dstBuffer, dstDesc,
    \n+
    341 duBuffer, duDesc,
    \n+
    342 dvBuffer, dvDesc,
    \n+
    343 duuBuffer, duuDesc,
    \n+
    344 duvBuffer, duvDesc,
    \n+
    345 dvvBuffer, dvvDesc,
    \n+
    346 stencilTable);
    \n+
    347 } else {
    \n+
    348 // Create an instance on demand (slow)
    \n+
    349 (void)deviceContext; // unused
    \n+
    350 instance = Create(srcDesc, dstDesc, duDesc, dvDesc,
    \n+
    351 duuDesc, duvDesc, dvvDesc);
    \n+
    352 if (instance) {
    \n+
    353 bool r = instance->EvalStencils(srcBuffer, srcDesc,
    \n+
    354 dstBuffer, dstDesc,
    \n+
    355 duBuffer, duDesc,
    \n+
    356 dvBuffer, dvDesc,
    \n+
    357 duuBuffer, duuDesc,
    \n+
    358 duvBuffer, duvDesc,
    \n+
    359 dvvBuffer, dvvDesc,
    \n+
    360 stencilTable);
    \n+
    361 delete instance;
    \n+
    362 return r;
    \n+
    363 }
    \n+
    364 return false;
    \n+
    365 }
    \n+
    366 }
    \n+
    \n+
    367
    \n+
    385 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n+
    \n+\n+
    387 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    388 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    389 STENCIL_TABLE const *stencilTable) const {
    \n+
    390 return EvalStencils(srcBuffer->BindVBO(), srcDesc,
    \n+
    391 dstBuffer->BindVBO(), dstDesc,
    \n+
    392 0, BufferDescriptor(),
    \n+
    393 0, BufferDescriptor(),
    \n+
    394 stencilTable->GetSizesBuffer(),
    \n+
    395 stencilTable->GetOffsetsBuffer(),
    \n+
    396 stencilTable->GetIndicesBuffer(),
    \n+
    397 stencilTable->GetWeightsBuffer(),
    \n+
    398 0,
    \n+
    399 0,
    \n+
    400 /* start = */ 0,
    \n+
    401 /* end = */ stencilTable->GetNumStencils());
    \n+
    402 }
    \n+
    \n+
    403
    \n+
    433 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n+
    \n+\n+
    435 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    436 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    437 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    438 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    439 STENCIL_TABLE const *stencilTable) const {
    \n+
    440 return EvalStencils(srcBuffer->BindVBO(), srcDesc,
    \n+
    441 dstBuffer->BindVBO(), dstDesc,
    \n+
    442 duBuffer->BindVBO(), duDesc,
    \n+
    443 dvBuffer->BindVBO(), dvDesc,
    \n+
    444 stencilTable->GetSizesBuffer(),
    \n+
    445 stencilTable->GetOffsetsBuffer(),
    \n+
    446 stencilTable->GetIndicesBuffer(),
    \n+
    447 stencilTable->GetWeightsBuffer(),
    \n+
    448 stencilTable->GetDuWeightsBuffer(),
    \n+
    449 stencilTable->GetDvWeightsBuffer(),
    \n+
    450 /* start = */ 0,
    \n+
    451 /* end = */ stencilTable->GetNumStencils());
    \n+
    452 }
    \n+
    \n+
    453
    \n+
    501 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n+
    \n+\n+
    503 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    504 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    505 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    506 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    507 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n+
    508 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n+
    509 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n+
    510 STENCIL_TABLE const *stencilTable) const {
    \n+
    511 return EvalStencils(srcBuffer->BindVBO(), srcDesc,
    \n+
    512 dstBuffer->BindVBO(), dstDesc,
    \n+
    513 duBuffer->BindVBO(), duDesc,
    \n+
    514 dvBuffer->BindVBO(), dvDesc,
    \n+
    515 duuBuffer->BindVBO(), duuDesc,
    \n+
    516 duvBuffer->BindVBO(), duvDesc,
    \n+
    517 dvvBuffer->BindVBO(), dvvDesc,
    \n+
    518 stencilTable->GetSizesBuffer(),
    \n+
    519 stencilTable->GetOffsetsBuffer(),
    \n+
    520 stencilTable->GetIndicesBuffer(),
    \n+
    521 stencilTable->GetWeightsBuffer(),
    \n+
    522 stencilTable->GetDuWeightsBuffer(),
    \n+
    523 stencilTable->GetDvWeightsBuffer(),
    \n+
    524 stencilTable->GetDuuWeightsBuffer(),
    \n+
    525 stencilTable->GetDuvWeightsBuffer(),
    \n+
    526 stencilTable->GetDvvWeightsBuffer(),
    \n+
    527 /* start = */ 0,
    \n+
    528 /* end = */ stencilTable->GetNumStencils());
    \n+
    529 }
    \n+
    \n+
    530
    \n+
    566 bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    567 GLuint dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    568 GLuint duBuffer, BufferDescriptor const &duDesc,
    \n+
    569 GLuint dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    570 GLuint sizesBuffer,
    \n+
    571 GLuint offsetsBuffer,
    \n+
    572 GLuint indicesBuffer,
    \n+
    573 GLuint weightsBuffer,
    \n+
    574 GLuint duWeightsBuffer,
    \n+
    575 GLuint dvWeightsBuffer,
    \n+
    576 int start,
    \n+
    577 int end) const;
    \n+
    578
    \n+
    632 bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    633 GLuint dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    634 GLuint duBuffer, BufferDescriptor const &duDesc,
    \n+
    635 GLuint dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    636 GLuint duuBuffer, BufferDescriptor const &duuDesc,
    \n+
    637 GLuint duvBuffer, BufferDescriptor const &duvDesc,
    \n+
    638 GLuint dvvBuffer, BufferDescriptor const &dvvDesc,
    \n+
    639 GLuint sizesBuffer,
    \n+
    640 GLuint offsetsBuffer,
    \n+
    641 GLuint indicesBuffer,
    \n+
    642 GLuint weightsBuffer,
    \n+
    643 GLuint duWeightsBuffer,
    \n+
    644 GLuint dvWeightsBuffer,
    \n+
    645 GLuint duuWeightsBuffer,
    \n+
    646 GLuint duvWeightsBuffer,
    \n+
    647 GLuint dvvWeightsBuffer,
    \n+
    648 int start,
    \n+
    649 int end) const;
    \n+
    650
    \n+
    656
    \n+
    689 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    690 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+
    691 static bool EvalPatches(
    \n+
    692 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    693 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    694 int numPatchCoords,
    \n+
    695 PATCHCOORD_BUFFER *patchCoords,
    \n+
    696 PATCH_TABLE *patchTable,
    \n+
    697 GLComputeEvaluator const *instance,
    \n+
    698 void * deviceContext = NULL) {
    \n+
    699
    \n+
    700 if (instance) {
    \n+
    701 return instance->EvalPatches(srcBuffer, srcDesc,
    \n+
    702 dstBuffer, dstDesc,
    \n+
    703 numPatchCoords, patchCoords,
    \n+
    704 patchTable);
    \n+
    705 } else {
    \n+
    706 // Create an instance on demand (slow)
    \n+
    707 (void)deviceContext; // unused
    \n+
    708 instance = Create(srcDesc, dstDesc,
    \n+\n+\n+
    711 if (instance) {
    \n+
    712 bool r = instance->EvalPatches(srcBuffer, srcDesc,
    \n+
    713 dstBuffer, dstDesc,
    \n+
    714 numPatchCoords, patchCoords,
    \n+
    715 patchTable);
    \n+
    716 delete instance;
    \n+
    717 return r;
    \n+
    718 }
    \n+
    719 return false;
    \n+
    720 }
    \n+
    721 }
    \n+
    \n+
    722
    \n+
    767 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    768 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+
    769 static bool EvalPatches(
    \n+
    770 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    771 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    772 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    773 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    774 int numPatchCoords,
    \n+
    775 PATCHCOORD_BUFFER *patchCoords,
    \n+
    776 PATCH_TABLE *patchTable,
    \n+
    777 GLComputeEvaluator const *instance,
    \n+
    778 void * deviceContext = NULL) {
    \n+
    779
    \n+
    780 if (instance) {
    \n+
    781 return instance->EvalPatches(srcBuffer, srcDesc,
    \n+
    782 dstBuffer, dstDesc,
    \n+
    783 duBuffer, duDesc,
    \n+
    784 dvBuffer, dvDesc,
    \n+
    785 numPatchCoords, patchCoords,
    \n+
    786 patchTable);
    \n+
    787 } else {
    \n+
    788 // Create an instance on demand (slow)
    \n+
    789 (void)deviceContext; // unused
    \n+
    790 instance = Create(srcDesc, dstDesc,
    \n+
    791 duDesc, dvDesc);
    \n+
    792 if (instance) {
    \n+
    793 bool r = instance->EvalPatches(srcBuffer, srcDesc,
    \n+
    794 dstBuffer, dstDesc,
    \n+
    795 duBuffer, duDesc,
    \n+
    796 dvBuffer, dvDesc,
    \n+
    797 numPatchCoords, patchCoords,
    \n+
    798 patchTable);
    \n+
    799 delete instance;
    \n+
    800 return r;
    \n+
    801 }
    \n+
    802 return false;
    \n+
    803 }
    \n+
    804 }
    \n+
    \n+
    805
    \n+
    868 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    869 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+
    870 static bool EvalPatches(
    \n+
    871 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    872 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    873 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    874 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    875 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n+
    876 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n+
    877 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n+
    878 int numPatchCoords,
    \n+
    879 PATCHCOORD_BUFFER *patchCoords,
    \n+
    880 PATCH_TABLE *patchTable,
    \n+
    881 GLComputeEvaluator const *instance,
    \n+
    882 void * deviceContext = NULL) {
    \n+
    883
    \n+
    884 if (instance) {
    \n+
    885 return instance->EvalPatches(srcBuffer, srcDesc,
    \n+
    886 dstBuffer, dstDesc,
    \n+
    887 duBuffer, duDesc,
    \n+
    888 dvBuffer, dvDesc,
    \n+
    889 duuBuffer, duuDesc,
    \n+
    890 duvBuffer, duvDesc,
    \n+
    891 dvvBuffer, dvvDesc,
    \n+
    892 numPatchCoords, patchCoords,
    \n+
    893 patchTable);
    \n+
    894 } else {
    \n+
    895 // Create an instance on demand (slow)
    \n+
    896 (void)deviceContext; // unused
    \n+
    897 instance = Create(srcDesc, dstDesc,
    \n+
    898 duDesc, dvDesc,
    \n+
    899 duuDesc, duvDesc, dvvDesc);
    \n+
    900 if (instance) {
    \n+
    901 bool r = instance->EvalPatches(srcBuffer, srcDesc,
    \n+
    902 dstBuffer, dstDesc,
    \n+
    903 duBuffer, duDesc,
    \n+
    904 dvBuffer, dvDesc,
    \n+
    905 duuBuffer, duuDesc,
    \n+
    906 duvBuffer, duvDesc,
    \n+
    907 dvvBuffer, dvvDesc,
    \n+
    908 numPatchCoords, patchCoords,
    \n+
    909 patchTable);
    \n+
    910 delete instance;
    \n+
    911 return r;
    \n+
    912 }
    \n+
    913 return false;
    \n+
    914 }
    \n+
    915 }
    \n
    \n-
    878
    \n+
    916
    \n
    941 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n
    942 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n
    \n-
    943 static bool EvalPatches(
    \n+\n
    944 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n
    945 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    946 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    947 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    948 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n-
    949 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n-
    950 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n-
    951 int numPatchCoords,
    \n-
    952 PATCHCOORD_BUFFER *patchCoords,
    \n-
    953 PATCH_TABLE *patchTable,
    \n-
    954 GLXFBEvaluator const *instance,
    \n-
    955 void * deviceContext = NULL) {
    \n-
    956
    \n-
    957 if (instance) {
    \n-
    958 return instance->EvalPatches(srcBuffer, srcDesc,
    \n-
    959 dstBuffer, dstDesc,
    \n-
    960 duBuffer, duDesc,
    \n-
    961 dvBuffer, dvDesc,
    \n-
    962 duuBuffer, duuDesc,
    \n-
    963 duvBuffer, duvDesc,
    \n-
    964 dvvBuffer, dvvDesc,
    \n-
    965 numPatchCoords, patchCoords,
    \n-
    966 patchTable);
    \n-
    967 } else {
    \n-
    968 // Create an instance on demand (slow)
    \n-
    969 (void)deviceContext; // unused
    \n-
    970 instance = Create(srcDesc, dstDesc,
    \n-
    971 duDesc, dvDesc,
    \n-
    972 duuDesc, duvDesc, dvvDesc);
    \n-
    973 if (instance) {
    \n-
    974 bool r = instance->EvalPatches(srcBuffer, srcDesc,
    \n-
    975 dstBuffer, dstDesc,
    \n-
    976 duBuffer, duDesc,
    \n-
    977 dvBuffer, dvDesc,
    \n-
    978 duuBuffer, duuDesc,
    \n-
    979 duvBuffer, duvDesc,
    \n-
    980 dvvBuffer, dvvDesc,
    \n-
    981 numPatchCoords, patchCoords,
    \n-
    982 patchTable);
    \n-
    983 delete instance;
    \n-
    984 return r;
    \n-
    985 }
    \n-
    986 return false;
    \n-
    987 }
    \n-
    988 }
    \n-
    \n-
    989
    \n-
    1014 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1015 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1017 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1018 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1019 int numPatchCoords,
    \n-
    1020 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1021 PATCH_TABLE *patchTable) const {
    \n-
    1022
    \n-
    1023 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n-
    1024 dstBuffer->BindVBO(), dstDesc,
    \n-
    1025 0, BufferDescriptor(),
    \n-
    1026 0, BufferDescriptor(),
    \n-
    1027 numPatchCoords,
    \n-
    1028 patchCoords->BindVBO(),
    \n-
    1029 patchTable->GetPatchArrays(),
    \n-
    1030 patchTable->GetPatchIndexTextureBuffer(),
    \n-
    1031 patchTable->GetPatchParamTextureBuffer());
    \n-
    1032 }
    \n-
    \n-
    1033
    \n-
    1068 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1069 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1071 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1072 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1073 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    1074 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    1075 int numPatchCoords,
    \n-
    1076 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1077 PATCH_TABLE *patchTable) const {
    \n-
    1078
    \n-
    1079 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n-
    1080 dstBuffer->BindVBO(), dstDesc,
    \n-
    1081 duBuffer->BindVBO(), duDesc,
    \n-
    1082 dvBuffer->BindVBO(), dvDesc,
    \n-
    1083 numPatchCoords,
    \n-
    1084 patchCoords->BindVBO(),
    \n-
    1085 patchTable->GetPatchArrays(),
    \n-
    1086 patchTable->GetPatchIndexTextureBuffer(),
    \n-
    1087 patchTable->GetPatchParamTextureBuffer());
    \n-
    1088 }
    \n-
    \n-
    1089
    \n-
    1142 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1143 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1145 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1146 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1147 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    1148 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    1149 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n-
    1150 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n-
    1151 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n-
    1152 int numPatchCoords,
    \n-
    1153 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1154 PATCH_TABLE *patchTable) const {
    \n-
    1155
    \n-
    1156 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n-
    1157 dstBuffer->BindVBO(), dstDesc,
    \n-
    1158 duBuffer->BindVBO(), duDesc,
    \n-
    1159 dvBuffer->BindVBO(), dvDesc,
    \n-
    1160 duuBuffer->BindVBO(), duuDesc,
    \n-
    1161 duvBuffer->BindVBO(), duvDesc,
    \n-
    1162 dvvBuffer->BindVBO(), dvvDesc,
    \n-
    1163 numPatchCoords,
    \n-
    1164 patchCoords->BindVBO(),
    \n-
    1165 patchTable->GetPatchArrays(),
    \n-
    1166 patchTable->GetPatchIndexTextureBuffer(),
    \n-
    1167 patchTable->GetPatchParamTextureBuffer());
    \n-
    1168 }
    \n-
    \n-
    1169
    \n-
    1170 bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1171 GLuint dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1172 GLuint duBuffer, BufferDescriptor const &duDesc,
    \n-
    1173 GLuint dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    1174 int numPatchCoords,
    \n-
    1175 GLuint patchCoordsBuffer,
    \n-
    1176 const PatchArrayVector &patchArrays,
    \n-
    1177 GLuint patchIndexBuffer,
    \n-
    1178 GLuint patchParamsBuffer) const;
    \n-
    1179
    \n-
    1180 bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1181 GLuint dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1182 GLuint duBuffer, BufferDescriptor const &duDesc,
    \n-
    1183 GLuint dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    1184 GLuint duuBuffer, BufferDescriptor const &duuDesc,
    \n-
    1185 GLuint duvBuffer, BufferDescriptor const &duvDesc,
    \n-
    1186 GLuint dvvBuffer, BufferDescriptor const &dvvDesc,
    \n-
    1187 int numPatchCoords,
    \n-
    1188 GLuint patchCoordsBuffer,
    \n-
    1189 const PatchArrayVector &patchArrays,
    \n-
    1190 GLuint patchIndexBuffer,
    \n-
    1191 GLuint patchParamsBuffer) const;
    \n-
    1192
    \n-
    1225 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1226 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1228 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1229 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1230 int numPatchCoords,
    \n-
    1231 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1232 PATCH_TABLE *patchTable,
    \n-
    1233 GLXFBEvaluator const *instance,
    \n-
    1234 void * deviceContext = NULL) {
    \n-
    1235
    \n-
    1236 if (instance) {
    \n-
    1237 return instance->EvalPatchesVarying(
    \n-
    1238 srcBuffer, srcDesc,
    \n-
    1239 dstBuffer, dstDesc,
    \n-
    1240 numPatchCoords, patchCoords,
    \n-
    1241 patchTable);
    \n-
    1242 } else {
    \n-
    1243 // Create an instance on demand (slow)
    \n-
    1244 (void)deviceContext; // unused
    \n-
    1245 instance = Create(srcDesc, dstDesc,
    \n-\n-\n-
    1248 if (instance) {
    \n-
    1249 bool r = instance->EvalPatchesVarying(
    \n-
    1250 srcBuffer, srcDesc,
    \n-
    1251 dstBuffer, dstDesc,
    \n-
    1252 numPatchCoords, patchCoords,
    \n-
    1253 patchTable);
    \n-
    1254 delete instance;
    \n-
    1255 return r;
    \n-
    1256 }
    \n-
    1257 return false;
    \n-
    1258 }
    \n-
    1259 }
    \n-
    \n-
    1260
    \n-
    1285 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1286 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1288 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1289 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1290 int numPatchCoords,
    \n-
    1291 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1292 PATCH_TABLE *patchTable) const {
    \n-
    1293
    \n-
    1294 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n-
    1295 dstBuffer->BindVBO(), dstDesc,
    \n-
    1296 0, BufferDescriptor(),
    \n-
    1297 0, BufferDescriptor(),
    \n-
    1298 numPatchCoords,
    \n-
    1299 patchCoords->BindVBO(),
    \n-
    1300 patchTable->GetVaryingPatchArrays(),
    \n-
    1301 patchTable->GetVaryingPatchIndexTextureBuffer(),
    \n-
    1302 patchTable->GetPatchParamTextureBuffer());
    \n-
    1303 }
    \n-
    \n-
    1304
    \n-
    1349 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1350 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1352 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1353 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1354 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    1355 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    1356 int numPatchCoords,
    \n-
    1357 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1358 PATCH_TABLE *patchTable,
    \n-
    1359 GLXFBEvaluator const *instance,
    \n-
    1360 void * deviceContext = NULL) {
    \n-
    1361
    \n-
    1362 if (instance) {
    \n-
    1363 return instance->EvalPatchesVarying(
    \n-
    1364 srcBuffer, srcDesc,
    \n-
    1365 dstBuffer, dstDesc,
    \n-
    1366 duBuffer, duDesc,
    \n-
    1367 dvBuffer, dvDesc,
    \n-
    1368 numPatchCoords, patchCoords,
    \n-
    1369 patchTable);
    \n-
    1370 } else {
    \n-
    1371 // Create an instance on demand (slow)
    \n-
    1372 (void)deviceContext; // unused
    \n-
    1373 instance = Create(srcDesc, dstDesc,
    \n-
    1374 duDesc, dvDesc);
    \n-
    1375 if (instance) {
    \n-
    1376 bool r = instance->EvalPatchesVarying(
    \n-
    1377 srcBuffer, srcDesc,
    \n-
    1378 dstBuffer, dstDesc,
    \n-
    1379 duBuffer, duDesc,
    \n-
    1380 dvBuffer, dvDesc,
    \n-
    1381 numPatchCoords, patchCoords,
    \n-
    1382 patchTable);
    \n-
    1383 delete instance;
    \n-
    1384 return r;
    \n-
    1385 }
    \n-
    1386 return false;
    \n-
    1387 }
    \n-
    1388 }
    \n-
    \n-
    1389
    \n-
    1426 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1427 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1429 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1430 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1431 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    1432 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    1433 int numPatchCoords,
    \n-
    1434 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1435 PATCH_TABLE *patchTable) const {
    \n-
    1436
    \n-
    1437 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n-
    1438 dstBuffer->BindVBO(), dstDesc,
    \n-
    1439 duBuffer->BindVBO(), duDesc,
    \n-
    1440 dvBuffer->BindVBO(), dvDesc,
    \n-
    1441 numPatchCoords,
    \n-
    1442 patchCoords->BindVBO(),
    \n-
    1443 patchTable->GetVaryingPatchArrays(),
    \n-
    1444 patchTable->GetVaryingPatchIndexTextureBuffer(),
    \n-
    1445 patchTable->GetPatchParamTextureBuffer());
    \n-
    1446 }
    \n-
    \n-
    1447
    \n-
    1510 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1511 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1513 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1514 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1515 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    1516 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    1517 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n-
    1518 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n-
    1519 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n-
    1520 int numPatchCoords,
    \n-
    1521 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1522 PATCH_TABLE *patchTable,
    \n-
    1523 GLXFBEvaluator const *instance,
    \n-
    1524 void * deviceContext = NULL) {
    \n-
    1525
    \n-
    1526 if (instance) {
    \n-
    1527 return instance->EvalPatchesVarying(
    \n-
    1528 srcBuffer, srcDesc,
    \n-
    1529 dstBuffer, dstDesc,
    \n-
    1530 duBuffer, duDesc,
    \n-
    1531 dvBuffer, dvDesc,
    \n-
    1532 duuBuffer, duuDesc,
    \n-
    1533 duvBuffer, duvDesc,
    \n-
    1534 dvvBuffer, dvvDesc,
    \n-
    1535 numPatchCoords, patchCoords,
    \n-
    1536 patchTable);
    \n-
    1537 } else {
    \n-
    1538 // Create an instance on demand (slow)
    \n-
    1539 (void)deviceContext; // unused
    \n-
    1540 instance = Create(srcDesc, dstDesc,
    \n-
    1541 duDesc, dvDesc,
    \n-
    1542 duuDesc, duvDesc, dvvDesc);
    \n-
    1543 if (instance) {
    \n-
    1544 bool r = instance->EvalPatchesVarying(
    \n-
    1545 srcBuffer, srcDesc,
    \n-
    1546 dstBuffer, dstDesc,
    \n-
    1547 duBuffer, duDesc,
    \n-
    1548 dvBuffer, dvDesc,
    \n-
    1549 duuBuffer, duuDesc,
    \n-
    1550 duvBuffer, duvDesc,
    \n-
    1551 dvvBuffer, dvvDesc,
    \n-
    1552 numPatchCoords, patchCoords,
    \n-
    1553 patchTable);
    \n-
    1554 delete instance;
    \n-
    1555 return r;
    \n-
    1556 }
    \n-
    1557 return false;
    \n-
    1558 }
    \n-
    1559 }
    \n-
    \n-
    1560
    \n-
    1615 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1616 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1618 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1619 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1620 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    1621 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    1622 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n-
    1623 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n-
    1624 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n-
    1625 int numPatchCoords,
    \n-
    1626 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1627 PATCH_TABLE *patchTable) const {
    \n-
    1628
    \n-
    1629 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n-
    1630 dstBuffer->BindVBO(), dstDesc,
    \n-
    1631 duBuffer->BindVBO(), duDesc,
    \n-
    1632 dvBuffer->BindVBO(), dvDesc,
    \n-
    1633 duuBuffer->BindVBO(), duuDesc,
    \n-
    1634 duvBuffer->BindVBO(), duvDesc,
    \n-
    1635 dvvBuffer->BindVBO(), dvvDesc,
    \n-
    1636 numPatchCoords,
    \n-
    1637 patchCoords->BindVBO(),
    \n-
    1638 patchTable->GetVaryingPatchArrays(),
    \n-
    1639 patchTable->GetVaryingPatchIndexTextureBuffer(),
    \n-
    1640 patchTable->GetPatchParamTextureBuffer());
    \n-
    1641 }
    \n-
    \n-
    1642
    \n-
    1677 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1678 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1680 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1681 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1682 int numPatchCoords,
    \n-
    1683 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1684 PATCH_TABLE *patchTable,
    \n-
    1685 int fvarChannel,
    \n-
    1686 GLXFBEvaluator const *instance,
    \n-
    1687 void * deviceContext = NULL) {
    \n-
    1688
    \n-
    1689 if (instance) {
    \n-
    1690 return instance->EvalPatchesFaceVarying(
    \n-
    1691 srcBuffer, srcDesc,
    \n-
    1692 dstBuffer, dstDesc,
    \n-
    1693 numPatchCoords, patchCoords,
    \n-
    1694 patchTable, fvarChannel);
    \n-
    1695 } else {
    \n-
    1696 // Create an instance on demand (slow)
    \n-
    1697 (void)deviceContext; // unused
    \n-
    1698 instance = Create(srcDesc, dstDesc,
    \n-\n-\n-
    1701 if (instance) {
    \n-
    1702 bool r = instance->EvalPatchesFaceVarying(
    \n-
    1703 srcBuffer, srcDesc,
    \n-
    1704 dstBuffer, dstDesc,
    \n-
    1705 numPatchCoords, patchCoords,
    \n-
    1706 patchTable, fvarChannel);
    \n-
    1707 delete instance;
    \n-
    1708 return r;
    \n-
    1709 }
    \n-
    1710 return false;
    \n-
    1711 }
    \n-
    1712 }
    \n-
    \n-
    1713
    \n-
    1740 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1741 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1743 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1744 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1745 int numPatchCoords,
    \n-
    1746 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1747 PATCH_TABLE *patchTable,
    \n-
    1748 int fvarChannel = 0) const {
    \n-
    1749
    \n-
    1750 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n-
    1751 dstBuffer->BindVBO(), dstDesc,
    \n-
    1752 0, BufferDescriptor(),
    \n-
    1753 0, BufferDescriptor(),
    \n-
    1754 numPatchCoords,
    \n-
    1755 patchCoords->BindVBO(),
    \n-
    1756 patchTable->GetFVarPatchArrays(fvarChannel),
    \n-
    1757 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),
    \n-
    1758 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));
    \n-
    1759 }
    \n-
    \n-
    1760
    \n-
    1807 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1808 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1810 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1811 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1812 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    1813 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    1814 int numPatchCoords,
    \n-
    1815 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1816 PATCH_TABLE *patchTable,
    \n-
    1817 int fvarChannel,
    \n-
    1818 GLXFBEvaluator const *instance,
    \n-
    1819 void * deviceContext = NULL) {
    \n-
    1820
    \n-
    1821 if (instance) {
    \n-
    1822 return instance->EvalPatchesFaceVarying(
    \n-
    1823 srcBuffer, srcDesc,
    \n-
    1824 dstBuffer, dstDesc,
    \n-
    1825 duBuffer, duDesc,
    \n-
    1826 dvBuffer, dvDesc,
    \n-
    1827 numPatchCoords, patchCoords,
    \n-
    1828 patchTable, fvarChannel);
    \n-
    1829 } else {
    \n-
    1830 // Create an instance on demand (slow)
    \n-
    1831 (void)deviceContext; // unused
    \n-
    1832 instance = Create(srcDesc, dstDesc,
    \n-
    1833 duDesc, dvDesc);
    \n-
    1834 if (instance) {
    \n-
    1835 bool r = instance->EvalPatchesFaceVarying(
    \n-
    1836 srcBuffer, srcDesc,
    \n-
    1837 dstBuffer, dstDesc,
    \n-
    1838 duBuffer, duDesc,
    \n-
    1839 dvBuffer, dvDesc,
    \n-
    1840 numPatchCoords, patchCoords,
    \n-
    1841 patchTable, fvarChannel);
    \n-
    1842 delete instance;
    \n-
    1843 return r;
    \n-
    1844 }
    \n-
    1845 return false;
    \n-
    1846 }
    \n-
    1847 }
    \n-
    \n-
    1848
    \n-
    1887 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1888 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1890 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1891 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1892 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    1893 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    1894 int numPatchCoords,
    \n-
    1895 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1896 PATCH_TABLE *patchTable,
    \n-
    1897 int fvarChannel = 0) const {
    \n-
    1898
    \n-
    1899 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n-
    1900 dstBuffer->BindVBO(), dstDesc,
    \n-
    1901 duBuffer->BindVBO(), duDesc,
    \n-
    1902 dvBuffer->BindVBO(), dvDesc,
    \n-
    1903 numPatchCoords,
    \n-
    1904 patchCoords->BindVBO(),
    \n-
    1905 patchTable->GetFVarPatchArrays(fvarChannel),
    \n-
    1906 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),
    \n-
    1907 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));
    \n-
    1908 }
    \n-
    \n-
    1909
    \n-
    1974 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1975 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1977 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1978 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1979 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    1980 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    1981 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n-
    1982 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n-
    1983 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n-
    1984 int numPatchCoords,
    \n-
    1985 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1986 PATCH_TABLE *patchTable,
    \n-
    1987 int fvarChannel,
    \n-
    1988 GLXFBEvaluator const *instance,
    \n-
    1989 void * deviceContext = NULL) {
    \n-
    1990
    \n-
    1991 if (instance) {
    \n-
    1992 return instance->EvalPatchesFaceVarying(
    \n-
    1993 srcBuffer, srcDesc,
    \n-
    1994 dstBuffer, dstDesc,
    \n-
    1995 duBuffer, duDesc,
    \n-
    1996 dvBuffer, dvDesc,
    \n-
    1997 duuBuffer, duuDesc,
    \n-
    1998 duvBuffer, duvDesc,
    \n-
    1999 dvvBuffer, dvvDesc,
    \n-
    2000 numPatchCoords, patchCoords,
    \n-
    2001 patchTable, fvarChannel);
    \n-
    2002 } else {
    \n-
    2003 // Create an instance on demand (slow)
    \n-
    2004 (void)deviceContext; // unused
    \n-
    2005 instance = Create(srcDesc, dstDesc,
    \n-
    2006 duDesc, dvDesc,
    \n-
    2007 duuDesc, duvDesc, dvvDesc);
    \n-
    2008 if (instance) {
    \n-
    2009 bool r = instance->EvalPatchesFaceVarying(
    \n-
    2010 srcBuffer, srcDesc,
    \n-
    2011 dstBuffer, dstDesc,
    \n-
    2012 duBuffer, duDesc,
    \n-
    2013 dvBuffer, dvDesc,
    \n-
    2014 duuBuffer, duuDesc,
    \n-
    2015 duvBuffer, duvDesc,
    \n-
    2016 dvvBuffer, dvvDesc,
    \n-
    2017 numPatchCoords, patchCoords,
    \n-
    2018 patchTable, fvarChannel);
    \n-
    2019 delete instance;
    \n-
    2020 return r;
    \n-
    2021 }
    \n-
    2022 return false;
    \n-
    2023 }
    \n-
    2024 }
    \n-
    \n-
    2025
    \n-
    2082 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    2083 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    2085 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    2086 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    2087 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    2088 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    2089 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n-
    2090 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n-
    2091 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n-
    2092 int numPatchCoords,
    \n-
    2093 PATCHCOORD_BUFFER *patchCoords,
    \n-
    2094 PATCH_TABLE *patchTable,
    \n-
    2095 int fvarChannel = 0) const {
    \n-
    2096
    \n-
    2097 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n-
    2098 dstBuffer->BindVBO(), dstDesc,
    \n-
    2099 duBuffer->BindVBO(), duDesc,
    \n-
    2100 dvBuffer->BindVBO(), dvDesc,
    \n-
    2101 duuBuffer->BindVBO(), duuDesc,
    \n-
    2102 duvBuffer->BindVBO(), duvDesc,
    \n-
    2103 dvvBuffer->BindVBO(), dvvDesc,
    \n-
    2104 numPatchCoords,
    \n-
    2105 patchCoords->BindVBO(),
    \n-
    2106 patchTable->GetFVarPatchArrays(fvarChannel),
    \n-
    2107 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),
    \n-
    2108 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));
    \n-
    2109 }
    \n-
    \n-
    2110
    \n-
    2116
    \n-
    2119 bool Compile(BufferDescriptor const &srcDesc,
    \n-
    2120 BufferDescriptor const &dstDesc,
    \n-
    2121 BufferDescriptor const &duDesc = BufferDescriptor(),
    \n-
    2122 BufferDescriptor const &dvDesc = BufferDescriptor(),
    \n-
    2123 BufferDescriptor const &duuDesc = BufferDescriptor(),
    \n-
    2124 BufferDescriptor const &duvDesc = BufferDescriptor(),
    \n-
    2125 BufferDescriptor const &dvvDesc = BufferDescriptor());
    \n-
    2126
    \n-
    2128 static void Synchronize(void *kernel);
    \n-
    2129
    \n-
    2130private:
    \n-
    2131 GLuint _srcBufferTexture;
    \n-
    2132 GLuint _patchArraysUBO;
    \n-
    2133 bool _interleavedDerivativeBuffers;
    \n-
    2134
    \n-
    2135 struct _StencilKernel {
    \n-
    2136 _StencilKernel();
    \n-
    2137 ~_StencilKernel();
    \n-
    2138 bool Compile(BufferDescriptor const &srcDesc,
    \n-
    2139 BufferDescriptor const &dstDesc,
    \n-
    2140 BufferDescriptor const &duDesc,
    \n-
    2141 BufferDescriptor const &dvDesc,
    \n-
    2142 BufferDescriptor const &duuDesc,
    \n-
    2143 BufferDescriptor const &duvDesc,
    \n-
    2144 BufferDescriptor const &dvvDesc,
    \n-
    2145 bool interleavedDerivativeBuffers);
    \n-
    2146 GLuint program;
    \n-
    2147 GLint uniformSrcBufferTexture;
    \n-
    2148 GLint uniformSrcOffset; // src buffer offset (in elements)
    \n-
    2149
    \n-
    2150 GLint uniformSizesTexture;
    \n-
    2151 GLint uniformOffsetsTexture;
    \n-
    2152 GLint uniformIndicesTexture;
    \n-
    2153 GLint uniformWeightsTexture;
    \n-
    2154 GLint uniformDuWeightsTexture;
    \n-
    2155 GLint uniformDvWeightsTexture;
    \n-
    2156 GLint uniformDuuWeightsTexture;
    \n-
    2157 GLint uniformDuvWeightsTexture;
    \n-
    2158 GLint uniformDvvWeightsTexture;
    \n-
    2159 GLint uniformStart; // range
    \n-
    2160 GLint uniformEnd;
    \n-
    2161 } _stencilKernel;
    \n-
    2162
    \n-
    2163 struct _PatchKernel {
    \n-
    2164 _PatchKernel();
    \n-
    2165 ~_PatchKernel();
    \n-
    2166 bool Compile(BufferDescriptor const &srcDesc,
    \n-
    2167 BufferDescriptor const &dstDesc,
    \n-
    2168 BufferDescriptor const &duDesc,
    \n-
    2169 BufferDescriptor const &dvDesc,
    \n-
    2170 BufferDescriptor const &duuDesc,
    \n-
    2171 BufferDescriptor const &duvDesc,
    \n-
    2172 BufferDescriptor const &dvvDesc,
    \n-
    2173 bool interleavedDerivativeBuffers);
    \n-
    2174 GLuint program;
    \n-
    2175 GLint uniformSrcBufferTexture;
    \n-
    2176 GLint uniformSrcOffset; // src buffer offset (in elements)
    \n-
    2177
    \n-
    2178 GLint uniformPatchArraysUBOBinding;
    \n-
    2179 GLint uniformPatchParamTexture;
    \n-
    2180 GLint uniformPatchIndexTexture;
    \n-
    2181 } _patchKernel;
    \n-
    2182
    \n-
    2183};
    \n-
    \n-
    2184
    \n-
    2185} // end namespace Osd
    \n-
    2186
    \n-
    2187} // end namespace OPENSUBDIV_VERSION
    \n-
    2188using namespace OPENSUBDIV_VERSION;
    \n-
    2189
    \n-
    2190} // end namespace OpenSubdiv
    \n-
    2191
    \n-
    2192
    \n-
    2193#endif // OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H
    \n-\n+
    946 int numPatchCoords,
    \n+
    947 PATCHCOORD_BUFFER *patchCoords,
    \n+
    948 PATCH_TABLE *patchTable) const {
    \n+
    949
    \n+
    950 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n+
    951 dstBuffer->BindVBO(), dstDesc,
    \n+
    952 0, BufferDescriptor(),
    \n+
    953 0, BufferDescriptor(),
    \n+
    954 numPatchCoords,
    \n+
    955 patchCoords->BindVBO(),
    \n+
    956 patchTable->GetPatchArrays(),
    \n+
    957 patchTable->GetPatchIndexBuffer(),
    \n+
    958 patchTable->GetPatchParamBuffer());
    \n+
    959 }
    \n+
    \n+
    960
    \n+
    995 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    996 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    998 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    999 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1000 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    1001 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    1002 int numPatchCoords,
    \n+
    1003 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1004 PATCH_TABLE *patchTable) const {
    \n+
    1005
    \n+
    1006 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n+
    1007 dstBuffer->BindVBO(), dstDesc,
    \n+
    1008 duBuffer->BindVBO(), duDesc,
    \n+
    1009 dvBuffer->BindVBO(), dvDesc,
    \n+
    1010 numPatchCoords,
    \n+
    1011 patchCoords->BindVBO(),
    \n+
    1012 patchTable->GetPatchArrays(),
    \n+
    1013 patchTable->GetPatchIndexBuffer(),
    \n+
    1014 patchTable->GetPatchParamBuffer());
    \n+
    1015 }
    \n+
    \n+
    1016
    \n+
    1069 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1070 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1072 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1073 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1074 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    1075 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    1076 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n+
    1077 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n+
    1078 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n+
    1079 int numPatchCoords,
    \n+
    1080 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1081 PATCH_TABLE *patchTable) const {
    \n+
    1082
    \n+
    1083 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n+
    1084 dstBuffer->BindVBO(), dstDesc,
    \n+
    1085 duBuffer->BindVBO(), duDesc,
    \n+
    1086 dvBuffer->BindVBO(), dvDesc,
    \n+
    1087 duuBuffer->BindVBO(), duuDesc,
    \n+
    1088 duvBuffer->BindVBO(), duvDesc,
    \n+
    1089 dvvBuffer->BindVBO(), dvvDesc,
    \n+
    1090 numPatchCoords,
    \n+
    1091 patchCoords->BindVBO(),
    \n+
    1092 patchTable->GetPatchArrays(),
    \n+
    1093 patchTable->GetPatchIndexBuffer(),
    \n+
    1094 patchTable->GetPatchParamBuffer());
    \n+
    1095 }
    \n+
    \n+
    1096
    \n+
    1097 bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1098 GLuint dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1099 GLuint duBuffer, BufferDescriptor const &duDesc,
    \n+
    1100 GLuint dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    1101 int numPatchCoords,
    \n+
    1102 GLuint patchCoordsBuffer,
    \n+
    1103 const PatchArrayVector &patchArrays,
    \n+
    1104 GLuint patchIndexBuffer,
    \n+
    1105 GLuint patchParamsBuffer) const;
    \n+
    1106
    \n+
    1107 bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1108 GLuint dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1109 GLuint duBuffer, BufferDescriptor const &duDesc,
    \n+
    1110 GLuint dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    1111 GLuint duuBuffer, BufferDescriptor const &duuDesc,
    \n+
    1112 GLuint duvBuffer, BufferDescriptor const &duvDesc,
    \n+
    1113 GLuint dvvBuffer, BufferDescriptor const &dvvDesc,
    \n+
    1114 int numPatchCoords,
    \n+
    1115 GLuint patchCoordsBuffer,
    \n+
    1116 const PatchArrayVector &patchArrays,
    \n+
    1117 GLuint patchIndexBuffer,
    \n+
    1118 GLuint patchParamsBuffer) const;
    \n+
    1119
    \n+
    1152 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1153 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1155 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1156 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1157 int numPatchCoords,
    \n+
    1158 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1159 PATCH_TABLE *patchTable,
    \n+
    1160 GLComputeEvaluator const *instance,
    \n+
    1161 void * deviceContext = NULL) {
    \n+
    1162
    \n+
    1163 if (instance) {
    \n+
    1164 return instance->EvalPatchesVarying(
    \n+
    1165 srcBuffer, srcDesc,
    \n+
    1166 dstBuffer, dstDesc,
    \n+
    1167 numPatchCoords, patchCoords,
    \n+
    1168 patchTable);
    \n+
    1169 } else {
    \n+
    1170 // Create an instance on demand (slow)
    \n+
    1171 (void)deviceContext; // unused
    \n+
    1172 instance = Create(srcDesc, dstDesc,
    \n+\n+\n+
    1175 if (instance) {
    \n+
    1176 bool r = instance->EvalPatchesVarying(
    \n+
    1177 srcBuffer, srcDesc,
    \n+
    1178 dstBuffer, dstDesc,
    \n+
    1179 numPatchCoords, patchCoords,
    \n+
    1180 patchTable);
    \n+
    1181 delete instance;
    \n+
    1182 return r;
    \n+
    1183 }
    \n+
    1184 return false;
    \n+
    1185 }
    \n+
    1186 }
    \n+
    \n+
    1187
    \n+
    1212 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1213 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1215 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1216 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1217 int numPatchCoords,
    \n+
    1218 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1219 PATCH_TABLE *patchTable) const {
    \n+
    1220
    \n+
    1221 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n+
    1222 dstBuffer->BindVBO(), dstDesc,
    \n+
    1223 0, BufferDescriptor(),
    \n+
    1224 0, BufferDescriptor(),
    \n+
    1225 numPatchCoords,
    \n+
    1226 patchCoords->BindVBO(),
    \n+
    1227 patchTable->GetVaryingPatchArrays(),
    \n+
    1228 patchTable->GetVaryingPatchIndexBuffer(),
    \n+
    1229 patchTable->GetPatchParamBuffer());
    \n+
    1230 }
    \n+
    \n+
    1231
    \n+
    1276 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1277 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1279 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1280 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1281 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    1282 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    1283 int numPatchCoords,
    \n+
    1284 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1285 PATCH_TABLE *patchTable,
    \n+
    1286 GLComputeEvaluator const *instance,
    \n+
    1287 void * deviceContext = NULL) {
    \n+
    1288
    \n+
    1289 if (instance) {
    \n+
    1290 return instance->EvalPatchesVarying(
    \n+
    1291 srcBuffer, srcDesc,
    \n+
    1292 dstBuffer, dstDesc,
    \n+
    1293 duBuffer, duDesc,
    \n+
    1294 dvBuffer, dvDesc,
    \n+
    1295 numPatchCoords, patchCoords,
    \n+
    1296 patchTable);
    \n+
    1297 } else {
    \n+
    1298 // Create an instance on demand (slow)
    \n+
    1299 (void)deviceContext; // unused
    \n+
    1300 instance = Create(srcDesc, dstDesc,
    \n+
    1301 duDesc, dvDesc);
    \n+
    1302 if (instance) {
    \n+
    1303 bool r = instance->EvalPatchesVarying(
    \n+
    1304 srcBuffer, srcDesc,
    \n+
    1305 dstBuffer, dstDesc,
    \n+
    1306 duBuffer, duDesc,
    \n+
    1307 dvBuffer, dvDesc,
    \n+
    1308 numPatchCoords, patchCoords,
    \n+
    1309 patchTable);
    \n+
    1310 delete instance;
    \n+
    1311 return r;
    \n+
    1312 }
    \n+
    1313 return false;
    \n+
    1314 }
    \n+
    1315 }
    \n+
    \n+
    1316
    \n+
    1353 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1354 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1356 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1357 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1358 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    1359 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    1360 int numPatchCoords,
    \n+
    1361 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1362 PATCH_TABLE *patchTable) const {
    \n+
    1363
    \n+
    1364 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n+
    1365 dstBuffer->BindVBO(), dstDesc,
    \n+
    1366 duBuffer->BindVBO(), duDesc,
    \n+
    1367 dvBuffer->BindVBO(), dvDesc,
    \n+
    1368 numPatchCoords,
    \n+
    1369 patchCoords->BindVBO(),
    \n+
    1370 patchTable->GetVaryingPatchArrays(),
    \n+
    1371 patchTable->GetVaryingPatchIndexBuffer(),
    \n+
    1372 patchTable->GetPatchParamBuffer());
    \n+
    1373 }
    \n+
    \n+
    1374
    \n+
    1437 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1438 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1440 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1441 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1442 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    1443 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    1444 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n+
    1445 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n+
    1446 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n+
    1447 int numPatchCoords,
    \n+
    1448 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1449 PATCH_TABLE *patchTable,
    \n+
    1450 GLComputeEvaluator const *instance,
    \n+
    1451 void * deviceContext = NULL) {
    \n+
    1452
    \n+
    1453 if (instance) {
    \n+
    1454 return instance->EvalPatchesVarying(
    \n+
    1455 srcBuffer, srcDesc,
    \n+
    1456 dstBuffer, dstDesc,
    \n+
    1457 duBuffer, duDesc,
    \n+
    1458 dvBuffer, dvDesc,
    \n+
    1459 duuBuffer, duuDesc,
    \n+
    1460 duvBuffer, duvDesc,
    \n+
    1461 dvvBuffer, dvvDesc,
    \n+
    1462 numPatchCoords, patchCoords,
    \n+
    1463 patchTable);
    \n+
    1464 } else {
    \n+
    1465 // Create an instance on demand (slow)
    \n+
    1466 (void)deviceContext; // unused
    \n+
    1467 instance = Create(srcDesc, dstDesc,
    \n+
    1468 duDesc, dvDesc,
    \n+
    1469 duuDesc, duvDesc, dvvDesc);
    \n+
    1470 if (instance) {
    \n+
    1471 bool r = instance->EvalPatchesVarying(
    \n+
    1472 srcBuffer, srcDesc,
    \n+
    1473 dstBuffer, dstDesc,
    \n+
    1474 duBuffer, duDesc,
    \n+
    1475 dvBuffer, dvDesc,
    \n+
    1476 duuBuffer, duuDesc,
    \n+
    1477 duvBuffer, duvDesc,
    \n+
    1478 dvvBuffer, dvvDesc,
    \n+
    1479 numPatchCoords, patchCoords,
    \n+
    1480 patchTable);
    \n+
    1481 delete instance;
    \n+
    1482 return r;
    \n+
    1483 }
    \n+
    1484 return false;
    \n+
    1485 }
    \n+
    1486 }
    \n+
    \n+
    1487
    \n+
    1542 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1543 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1545 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1546 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1547 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    1548 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    1549 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n+
    1550 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n+
    1551 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n+
    1552 int numPatchCoords,
    \n+
    1553 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1554 PATCH_TABLE *patchTable) const {
    \n+
    1555
    \n+
    1556 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n+
    1557 dstBuffer->BindVBO(), dstDesc,
    \n+
    1558 duBuffer->BindVBO(), duDesc,
    \n+
    1559 dvBuffer->BindVBO(), dvDesc,
    \n+
    1560 duuBuffer->BindVBO(), duuDesc,
    \n+
    1561 duvBuffer->BindVBO(), duvDesc,
    \n+
    1562 dvvBuffer->BindVBO(), dvvDesc,
    \n+
    1563 numPatchCoords,
    \n+
    1564 patchCoords->BindVBO(),
    \n+
    1565 patchTable->GetVaryingPatchArrays(),
    \n+
    1566 patchTable->GetVaryingPatchIndexBuffer(),
    \n+
    1567 patchTable->GetPatchParamBuffer());
    \n+
    1568 }
    \n+
    \n+
    1569
    \n+
    1604 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1605 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1607 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1608 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1609 int numPatchCoords,
    \n+
    1610 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1611 PATCH_TABLE *patchTable,
    \n+
    1612 int fvarChannel,
    \n+
    1613 GLComputeEvaluator const *instance,
    \n+
    1614 void * deviceContext = NULL) {
    \n+
    1615
    \n+
    1616 if (instance) {
    \n+
    1617 return instance->EvalPatchesFaceVarying(
    \n+
    1618 srcBuffer, srcDesc,
    \n+
    1619 dstBuffer, dstDesc,
    \n+
    1620 numPatchCoords, patchCoords,
    \n+
    1621 patchTable, fvarChannel);
    \n+
    1622 } else {
    \n+
    1623 // Create an instance on demand (slow)
    \n+
    1624 (void)deviceContext; // unused
    \n+
    1625 instance = Create(srcDesc, dstDesc,
    \n+\n+\n+
    1628 if (instance) {
    \n+
    1629 bool r = instance->EvalPatchesFaceVarying(
    \n+
    1630 srcBuffer, srcDesc,
    \n+
    1631 dstBuffer, dstDesc,
    \n+
    1632 numPatchCoords, patchCoords,
    \n+
    1633 patchTable, fvarChannel);
    \n+
    1634 delete instance;
    \n+
    1635 return r;
    \n+
    1636 }
    \n+
    1637 return false;
    \n+
    1638 }
    \n+
    1639 }
    \n+
    \n+
    1640
    \n+
    1667 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1668 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1670 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1671 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1672 int numPatchCoords,
    \n+
    1673 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1674 PATCH_TABLE *patchTable,
    \n+
    1675 int fvarChannel = 0) const {
    \n+
    1676
    \n+
    1677 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n+
    1678 dstBuffer->BindVBO(), dstDesc,
    \n+
    1679 0, BufferDescriptor(),
    \n+
    1680 0, BufferDescriptor(),
    \n+
    1681 numPatchCoords,
    \n+
    1682 patchCoords->BindVBO(),
    \n+
    1683 patchTable->GetFVarPatchArrays(fvarChannel),
    \n+
    1684 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
    \n+
    1685 patchTable->GetFVarPatchParamBuffer(fvarChannel));
    \n+
    1686 }
    \n+
    \n+
    1687
    \n+
    1734 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1735 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1737 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1738 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1739 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    1740 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    1741 int numPatchCoords,
    \n+
    1742 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1743 PATCH_TABLE *patchTable,
    \n+
    1744 int fvarChannel,
    \n+
    1745 GLComputeEvaluator const *instance,
    \n+
    1746 void * deviceContext = NULL) {
    \n+
    1747
    \n+
    1748 if (instance) {
    \n+
    1749 return instance->EvalPatchesFaceVarying(
    \n+
    1750 srcBuffer, srcDesc,
    \n+
    1751 dstBuffer, dstDesc,
    \n+
    1752 duBuffer, duDesc,
    \n+
    1753 dvBuffer, dvDesc,
    \n+
    1754 numPatchCoords, patchCoords,
    \n+
    1755 patchTable, fvarChannel);
    \n+
    1756 } else {
    \n+
    1757 // Create an instance on demand (slow)
    \n+
    1758 (void)deviceContext; // unused
    \n+
    1759 instance = Create(srcDesc, dstDesc,
    \n+
    1760 duDesc, dvDesc);
    \n+
    1761 if (instance) {
    \n+
    1762 bool r = instance->EvalPatchesFaceVarying(
    \n+
    1763 srcBuffer, srcDesc,
    \n+
    1764 dstBuffer, dstDesc,
    \n+
    1765 duBuffer, duDesc,
    \n+
    1766 dvBuffer, dvDesc,
    \n+
    1767 numPatchCoords, patchCoords,
    \n+
    1768 patchTable, fvarChannel);
    \n+
    1769 delete instance;
    \n+
    1770 return r;
    \n+
    1771 }
    \n+
    1772 return false;
    \n+
    1773 }
    \n+
    1774 }
    \n+
    \n+
    1775
    \n+
    1814 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1815 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1817 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1818 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1819 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    1820 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    1821 int numPatchCoords,
    \n+
    1822 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1823 PATCH_TABLE *patchTable,
    \n+
    1824 int fvarChannel = 0) const {
    \n+
    1825
    \n+
    1826 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n+
    1827 dstBuffer->BindVBO(), dstDesc,
    \n+
    1828 duBuffer->BindVBO(), duDesc,
    \n+
    1829 dvBuffer->BindVBO(), dvDesc,
    \n+
    1830 numPatchCoords,
    \n+
    1831 patchCoords->BindVBO(),
    \n+
    1832 patchTable->GetFVarPatchArrays(fvarChannel),
    \n+
    1833 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
    \n+
    1834 patchTable->GetFVarPatchParamBuffer(fvarChannel));
    \n+
    1835 }
    \n+
    \n+
    1836
    \n+
    1901 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1902 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1904 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1905 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1906 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    1907 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    1908 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n+
    1909 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n+
    1910 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n+
    1911 int numPatchCoords,
    \n+
    1912 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1913 PATCH_TABLE *patchTable,
    \n+
    1914 int fvarChannel,
    \n+
    1915 GLComputeEvaluator const *instance,
    \n+
    1916 void * deviceContext = NULL) {
    \n+
    1917
    \n+
    1918 if (instance) {
    \n+
    1919 return instance->EvalPatchesFaceVarying(
    \n+
    1920 srcBuffer, srcDesc,
    \n+
    1921 dstBuffer, dstDesc,
    \n+
    1922 duBuffer, duDesc,
    \n+
    1923 dvBuffer, dvDesc,
    \n+
    1924 duuBuffer, duuDesc,
    \n+
    1925 duvBuffer, duvDesc,
    \n+
    1926 dvvBuffer, dvvDesc,
    \n+
    1927 numPatchCoords, patchCoords,
    \n+
    1928 patchTable, fvarChannel);
    \n+
    1929 } else {
    \n+
    1930 // Create an instance on demand (slow)
    \n+
    1931 (void)deviceContext; // unused
    \n+
    1932 instance = Create(srcDesc, dstDesc,
    \n+
    1933 duDesc, dvDesc,
    \n+
    1934 duuDesc, duvDesc, dvvDesc);
    \n+
    1935 if (instance) {
    \n+
    1936 bool r = instance->EvalPatchesFaceVarying(
    \n+
    1937 srcBuffer, srcDesc,
    \n+
    1938 dstBuffer, dstDesc,
    \n+
    1939 duBuffer, duDesc,
    \n+
    1940 dvBuffer, dvDesc,
    \n+
    1941 duuBuffer, duuDesc,
    \n+
    1942 duvBuffer, duvDesc,
    \n+
    1943 dvvBuffer, dvvDesc,
    \n+
    1944 numPatchCoords, patchCoords,
    \n+
    1945 patchTable, fvarChannel);
    \n+
    1946 delete instance;
    \n+
    1947 return r;
    \n+
    1948 }
    \n+
    1949 return false;
    \n+
    1950 }
    \n+
    1951 }
    \n+
    \n+
    1952
    \n+
    2009 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    2010 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    2012 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    2013 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    2014 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    2015 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    2016 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n+
    2017 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n+
    2018 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n+
    2019 int numPatchCoords,
    \n+
    2020 PATCHCOORD_BUFFER *patchCoords,
    \n+
    2021 PATCH_TABLE *patchTable,
    \n+
    2022 int fvarChannel = 0) const {
    \n+
    2023
    \n+
    2024 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
    \n+
    2025 dstBuffer->BindVBO(), dstDesc,
    \n+
    2026 duBuffer->BindVBO(), duDesc,
    \n+
    2027 dvBuffer->BindVBO(), dvDesc,
    \n+
    2028 duuBuffer->BindVBO(), duuDesc,
    \n+
    2029 duvBuffer->BindVBO(), duvDesc,
    \n+
    2030 dvvBuffer->BindVBO(), dvvDesc,
    \n+
    2031 numPatchCoords,
    \n+
    2032 patchCoords->BindVBO(),
    \n+
    2033 patchTable->GetFVarPatchArrays(fvarChannel),
    \n+
    2034 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
    \n+
    2035 patchTable->GetFVarPatchParamBuffer(fvarChannel));
    \n+
    2036 }
    \n+
    \n+
    2037
    \n+
    2043
    \n+
    2046 bool Compile(BufferDescriptor const &srcDesc,
    \n+
    2047 BufferDescriptor const &dstDesc,
    \n+
    2048 BufferDescriptor const &duDesc = BufferDescriptor(),
    \n+
    2049 BufferDescriptor const &dvDesc = BufferDescriptor(),
    \n+
    2050 BufferDescriptor const &duuDesc = BufferDescriptor(),
    \n+
    2051 BufferDescriptor const &duvDesc = BufferDescriptor(),
    \n+
    2052 BufferDescriptor const &dvvDesc = BufferDescriptor());
    \n+
    2053
    \n+
    2055 static void Synchronize(void *deviceContext);
    \n+
    2056
    \n+
    2057private:
    \n+
    2058 struct _StencilKernel {
    \n+
    2059 _StencilKernel();
    \n+
    2060 ~_StencilKernel();
    \n+
    2061 bool Compile(BufferDescriptor const &srcDesc,
    \n+
    2062 BufferDescriptor const &dstDesc,
    \n+
    2063 BufferDescriptor const &duDesc,
    \n+
    2064 BufferDescriptor const &dvDesc,
    \n+
    2065 BufferDescriptor const &duuDesc,
    \n+
    2066 BufferDescriptor const &duvDesc,
    \n+
    2067 BufferDescriptor const &dvvDesc,
    \n+
    2068 int workGroupSize);
    \n+
    2069 GLuint program;
    \n+
    2070 GLuint uniformStart;
    \n+
    2071 GLuint uniformEnd;
    \n+
    2072 GLuint uniformSrcOffset;
    \n+
    2073 GLuint uniformDstOffset;
    \n+
    2074 GLuint uniformDuDesc;
    \n+
    2075 GLuint uniformDvDesc;
    \n+
    2076 GLuint uniformDuuDesc;
    \n+
    2077 GLuint uniformDuvDesc;
    \n+
    2078 GLuint uniformDvvDesc;
    \n+
    2079 } _stencilKernel;
    \n+
    2080
    \n+
    2081 struct _PatchKernel {
    \n+
    2082 _PatchKernel();
    \n+
    2083 ~_PatchKernel();
    \n+
    2084 bool Compile(BufferDescriptor const &srcDesc,
    \n+
    2085 BufferDescriptor const &dstDesc,
    \n+
    2086 BufferDescriptor const &duDesc,
    \n+
    2087 BufferDescriptor const &dvDesc,
    \n+
    2088 BufferDescriptor const &duuDesc,
    \n+
    2089 BufferDescriptor const &duvDesc,
    \n+
    2090 BufferDescriptor const &dvvDesc,
    \n+
    2091 int workGroupSize);
    \n+
    2092 GLuint program;
    \n+
    2093 GLuint uniformSrcOffset;
    \n+
    2094 GLuint uniformDstOffset;
    \n+
    2095 GLuint uniformPatchArray;
    \n+
    2096 GLuint uniformDuDesc;
    \n+
    2097 GLuint uniformDvDesc;
    \n+
    2098 GLuint uniformDuuDesc;
    \n+
    2099 GLuint uniformDuvDesc;
    \n+
    2100 GLuint uniformDvvDesc;
    \n+
    2101 } _patchKernel;
    \n+
    2102
    \n+
    2103 int _workGroupSize;
    \n+
    2104 GLuint _patchArraysSSBO;
    \n+
    2105};
    \n+
    \n+
    2106
    \n+
    2107} // end namespace Osd
    \n+
    2108
    \n+
    2109} // end namespace OPENSUBDIV_VERSION
    \n+
    2110using namespace OPENSUBDIV_VERSION;
    \n+
    2111
    \n+
    2112} // end namespace OpenSubdiv
    \n+
    2113
    \n+
    2114
    \n+
    2115#endif // OPENSUBDIV3_OSD_GL_COMPUTE_EVALUATOR_H
    \n+\n
    std::vector< PatchArray > PatchArrayVector
    Definition types.h:132
    \n
    Stencil table class wrapping the template for compatibility.
    \n
    Limit stencil table class wrapping the template for compatibility.
    \n
    BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
    \n-\n-\n-
    static GLStencilTableTBO * Create(Far::StencilTable const *stencilTable, void *deviceContext=NULL)
    \n-\n-\n-\n-\n-\n-\n-
    GLStencilTableTBO(Far::StencilTable const *stencilTable)
    \n-
    GLStencilTableTBO(Far::LimitStencilTable const *limitStencilTable)
    \n-\n-
    static GLStencilTableTBO * Create(Far::LimitStencilTable const *limitStencilTable, void *deviceContext=NULL)
    \n-\n-\n-\n-\n-
    bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, bool interleavedDerivativeBuffers=false)
    \n-
    bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, STENCIL_TABLE const *stencilTable) const
    Generic stencil function.
    \n-
    GLXFBEvaluator(bool interleavedDerivativeBuffers=false)
    Constructor.
    \n-
    bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, STENCIL_TABLE const *stencilTable) const
    Generic stencil function.
    \n-\n-
    bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, GLuint duuBuffer, BufferDescriptor const &duuDesc, GLuint duvBuffer, BufferDescriptor const &duvDesc, GLuint dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, GLuint patchCoordsBuffer, const PatchArrayVector &patchArrays, GLuint patchIndexBuffer, GLuint patchParamsBuffer) const
    \n-
    static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, STENCIL_TABLE const *stencilTable, GLXFBEvaluator const *instance, void *deviceContext=NULL)
    Generic static stencil function. This function has a same signature as other device kernels have so t...
    \n-
    bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
    Generic limit eval function with derivatives. This function has a same signature as other device kern...
    \n-
    static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, bool interleavedDerivativeBuffers=false)
    \n-
    static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, void *deviceContext)
    Specialization to allow creation without a device context.
    \n-
    static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, STENCIL_TABLE const *stencilTable, GLXFBEvaluator const *instance, void *deviceContext=NULL)
    Generic static stencil function. This function has a same signature as other device kernels have so t...
    \n-
    static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLXFBEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, GLuint duuBuffer, BufferDescriptor const &duuDesc, GLuint duvBuffer, BufferDescriptor const &duvDesc, GLuint dvvBuffer, BufferDescriptor const &dvvDesc, GLuint sizesBuffer, GLuint offsetsBuffer, GLuint indicesBuffer, GLuint weightsBuffer, GLuint duWeightsBuffer, GLuint dvWeightsBuffer, GLuint duuWeightsBuffer, GLuint duvWeightsBuffer, GLuint dvvWeightsBuffer, int start, int end) const
    Dispatch the GLSL XFB kernel on on GPU asynchronously returns false if the kernel hasn't been compile...
    \n-
    static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLXFBEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, DEVICE_CONTEXT deviceContext)
    Generic creator template.
    \n-
    static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, DEVICE_CONTEXT deviceContext)
    Generic creator template.
    \n-
    static void Synchronize(void *kernel)
    Wait the dispatched kernel finishes.
    \n-
    static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLXFBEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel=0) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLXFBEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, GLXFBEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLXFBEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
    Generic limit eval function with derivatives. This function has a same signature as other device kern...
    \n-
    bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable) const
    Generic stencil function.
    \n-
    bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, GLuint patchCoordsBuffer, const PatchArrayVector &patchArrays, GLuint patchIndexBuffer, GLuint patchParamsBuffer) const
    \n-
    static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, void *deviceContext)
    Specialization to allow creation without a device context.
    \n-
    bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel=0) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLXFBEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, GLuint sizesBuffer, GLuint offsetsBuffer, GLuint indicesBuffer, GLuint weightsBuffer, GLuint duWeightsBuffer, GLuint dvWeightsBuffer, int start, int end) const
    Dispatch the GLSL XFB kernel on on GPU asynchronously returns false if the kernel hasn't been compile...
    \n-
    static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, GLXFBEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, GLXFBEvaluator const *instance, void *deviceContext=NULL)
    Generic static stencil function. This function has a same signature as other device kernels have so t...
    \n-
    ~GLXFBEvaluator()
    Destructor. note that the GL context must be made current.
    \n-
    bool Compile(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc=BufferDescriptor(), BufferDescriptor const &dvDesc=BufferDescriptor(), BufferDescriptor const &duuDesc=BufferDescriptor(), BufferDescriptor const &duvDesc=BufferDescriptor(), BufferDescriptor const &dvvDesc=BufferDescriptor())
    \n-
    bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel=0) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, GLXFBEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+\n+\n+\n+
    GLStencilTableSSBO(Far::LimitStencilTable const *limitStencilTable)
    \n+\n+\n+\n+\n+\n+
    GLStencilTableSSBO(Far::StencilTable const *stencilTable)
    \n+\n+\n+
    static GLStencilTableSSBO * Create(Far::LimitStencilTable const *limitStencilTable, void *deviceContext=NULL)
    \n+\n+\n+
    static GLStencilTableSSBO * Create(Far::StencilTable const *stencilTable, void *deviceContext=NULL)
    \n+\n+
    bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, GLComputeEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, STENCIL_TABLE const *stencilTable) const
    Generic stencil function.
    \n+
    static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, GLComputeEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, STENCIL_TABLE const *stencilTable) const
    Generic stencil function.
    \n+
    static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+\n+
    bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, GLuint duuBuffer, BufferDescriptor const &duuDesc, GLuint duvBuffer, BufferDescriptor const &duvDesc, GLuint dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, GLuint patchCoordsBuffer, const PatchArrayVector &patchArrays, GLuint patchIndexBuffer, GLuint patchParamsBuffer) const
    \n+
    ~GLComputeEvaluator()
    Destructor. note that the GL context must be made current.
    \n+
    bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
    Generic limit eval function with derivatives. This function has a same signature as other device kern...
    \n+
    static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, STENCIL_TABLE const *stencilTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
    Generic static stencil function. This function has a same signature as other device kernels have so t...
    \n+
    bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, GLuint duuBuffer, BufferDescriptor const &duuDesc, GLuint duvBuffer, BufferDescriptor const &duvDesc, GLuint dvvBuffer, BufferDescriptor const &dvvDesc, GLuint sizesBuffer, GLuint offsetsBuffer, GLuint indicesBuffer, GLuint weightsBuffer, GLuint duWeightsBuffer, GLuint dvWeightsBuffer, GLuint duuWeightsBuffer, GLuint duvWeightsBuffer, GLuint dvvWeightsBuffer, int start, int end) const
    Dispatch the GLSL compute kernel on GPU asynchronously returns false if the kernel hasn't been compil...
    \n+
    static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
    Generic static stencil function. This function has a same signature as other device kernels have so t...
    \n+
    static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, GLComputeEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel=0) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+\n+
    bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
    Generic limit eval function with derivatives. This function has a same signature as other device kern...
    \n+
    static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable) const
    Generic stencil function.
    \n+
    bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, GLuint patchCoordsBuffer, const PatchArrayVector &patchArrays, GLuint patchIndexBuffer, GLuint patchParamsBuffer) const
    \n+
    bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel=0) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    static GLComputeEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, void *deviceContext=NULL)
    \n+
    bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, GLuint sizesBuffer, GLuint offsetsBuffer, GLuint indicesBuffer, GLuint weightsBuffer, GLuint duWeightsBuffer, GLuint dvWeightsBuffer, int start, int end) const
    Dispatch the GLSL compute kernel on GPU asynchronously returns false if the kernel hasn't been compil...
    \n+
    static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, STENCIL_TABLE const *stencilTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
    Generic static stencil function. This function has a same signature as other device kernels have so t...
    \n+
    static void Synchronize(void *deviceContext)
    Wait the dispatched kernel finishes.
    \n+
    bool Compile(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc=BufferDescriptor(), BufferDescriptor const &dvDesc=BufferDescriptor(), BufferDescriptor const &duuDesc=BufferDescriptor(), BufferDescriptor const &duvDesc=BufferDescriptor(), BufferDescriptor const &dvvDesc=BufferDescriptor())
    \n+
    bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    static GLComputeEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, void *deviceContext=NULL)
    \n+
    bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel=0) const
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-glXFBEvaluator.h\n+glComputeEvaluator.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2015 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -24,16 +24,16 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H\n-26#define OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H\n+25#ifndef OPENSUBDIV3_OSD_GL_COMPUTE_EVALUATOR_H\n+26#define OPENSUBDIV3_OSD_GL_COMPUTE_EVALUATOR_H\n 27\n 28#include \"../version.h\"\n 29\n 30#include \"../osd/opengl.h\"\n 31#include \"../osd/types.h\"\n 32#include \"../osd/bufferDescriptor.h\"\n 33\n@@ -44,1055 +44,993 @@\n 38 class PatchTable;\n 39 class StencilTable;\n 40 class LimitStencilTable;\n 41}\n 42\n 43namespace Osd {\n 44\n-_\b5_\b2class _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO {\n-53public:\n-_\b5_\b4 static _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO *_\bC_\br_\be_\ba_\bt_\be(\n-55 _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *stencilTable, void *deviceContext = NULL) {\n-56 (void)deviceContext; // unused\n-57 return new _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO(stencilTable);\n-58 }\n-59\n-_\b6_\b0 static _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO *_\bC_\br_\be_\ba_\bt_\be(\n-61 _\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *limitStencilTable,\n-62 void *deviceContext = NULL) {\n-63 (void)deviceContext; // unused\n-64 return new _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO(limitStencilTable);\n-65 }\n-66\n-_\b6_\b7 explicit _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO(_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *stencilTable);\n-_\b6_\b8 explicit _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO(_\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *limitStencilTable);\n-_\b6_\b9 _\b~_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO();\n-70\n-71 // interfaces needed for GLSLTransformFeedbackKernel\n-_\b7_\b2 GLuint _\bG_\be_\bt_\bS_\bi_\bz_\be_\bs_\bT_\be_\bx_\bt_\bu_\br_\be() const { return _sizes; }\n-_\b7_\b3 GLuint _\bG_\be_\bt_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be() const { return _offsets; }\n-_\b7_\b4 GLuint _\bG_\be_\bt_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bT_\be_\bx_\bt_\bu_\br_\be() const { return _indices; }\n-_\b7_\b5 GLuint _\bG_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be() const { return _weights; }\n-_\b7_\b6 GLuint _\bG_\be_\bt_\bD_\bu_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be() const { return _duWeights; }\n-_\b7_\b7 GLuint _\bG_\be_\bt_\bD_\bv_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be() const { return _dvWeights; }\n-_\b7_\b8 GLuint _\bG_\be_\bt_\bD_\bu_\bu_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be() const { return _duuWeights; }\n-_\b7_\b9 GLuint _\bG_\be_\bt_\bD_\bu_\bv_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be() const { return _duvWeights; }\n-_\b8_\b0 GLuint _\bG_\be_\bt_\bD_\bv_\bv_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be() const { return _dvvWeights; }\n-_\b8_\b1 int _\bG_\be_\bt_\bN_\bu_\bm_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs() const { return _numStencils; }\n-82\n-83private:\n-84 GLuint _sizes;\n-85 GLuint _offsets;\n-86 GLuint _indices;\n-87 GLuint _weights;\n-88 GLuint _duWeights;\n-89 GLuint _dvWeights;\n-90 GLuint _duuWeights;\n-91 GLuint _duvWeights;\n-92 GLuint _dvvWeights;\n-93 int _numStencils;\n-94};\n-95\n-96// --------------------------------------------------------------------------\n+_\b5_\b1class _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO {\n+52public:\n+_\b5_\b3 static _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO *_\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *stencilTable,\n+54 void *deviceContext = NULL) {\n+55 (void)deviceContext; // unused\n+56 return new _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO(stencilTable);\n+57 }\n+_\b5_\b8 static _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO *_\bC_\br_\be_\ba_\bt_\be(\n+59 _\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *limitStencilTable,\n+60 void *deviceContext = NULL) {\n+61 (void)deviceContext; // unused\n+62 return new _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO(limitStencilTable);\n+63 }\n+64\n+_\b6_\b5 explicit _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO(_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *stencilTable);\n+_\b6_\b6 explicit _\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO(_\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const\n+*limitStencilTable);\n+_\b6_\b7 _\b~_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO();\n+68\n+69 // interfaces needed for GLSLComputeKernel\n+_\b7_\b0 GLuint _\bG_\be_\bt_\bS_\bi_\bz_\be_\bs_\bB_\bu_\bf_\bf_\be_\br() const { return _sizes; }\n+_\b7_\b1 GLuint _\bG_\be_\bt_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br() const { return _offsets; }\n+_\b7_\b2 GLuint _\bG_\be_\bt_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bB_\bu_\bf_\bf_\be_\br() const { return _indices; }\n+_\b7_\b3 GLuint _\bG_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br() const { return _weights; }\n+_\b7_\b4 GLuint _\bG_\be_\bt_\bD_\bu_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br() const { return _duWeights; }\n+_\b7_\b5 GLuint _\bG_\be_\bt_\bD_\bv_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br() const { return _dvWeights; }\n+_\b7_\b6 GLuint _\bG_\be_\bt_\bD_\bu_\bu_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br() const { return _duuWeights; }\n+_\b7_\b7 GLuint _\bG_\be_\bt_\bD_\bu_\bv_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br() const { return _duvWeights; }\n+_\b7_\b8 GLuint _\bG_\be_\bt_\bD_\bv_\bv_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br() const { return _dvvWeights; }\n+_\b7_\b9 int _\bG_\be_\bt_\bN_\bu_\bm_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs() const { return _numStencils; }\n+80\n+81private:\n+82 GLuint _sizes;\n+83 GLuint _offsets;\n+84 GLuint _indices;\n+85 GLuint _weights;\n+86 GLuint _duWeights;\n+87 GLuint _dvWeights;\n+88 GLuint _duuWeights;\n+89 GLuint _duvWeights;\n+90 GLuint _dvvWeights;\n+91 int _numStencils;\n+92};\n+93\n+94// --------------------------------------------------------------------------\n -\n-97\n-_\b9_\b8class _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br {\n-99public:\n-_\b1_\b0_\b0 typedef bool _\bI_\bn_\bs_\bt_\ba_\bn_\bt_\bi_\ba_\bt_\ba_\bb_\bl_\be;\n-101\n-103 template \n-_\b1_\b0_\b4 static _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br *_\bC_\br_\be_\ba_\bt_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-105 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-106 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-107 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-108 DEVICE_CONTEXT deviceContext) {\n-109 bool interleavedDerivativeBuffers = deviceContext\n-110 ? deviceContext->AreInterleavedDerivativeBuffers()\n-111 : false;\n-112 return _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc, duDesc, dvDesc,\n-113 interleavedDerivativeBuffers);\n-114 }\n-115\n-_\b1_\b1_\b7 static _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br *_\bC_\br_\be_\ba_\bt_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-118 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-119 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-120 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-121 void * deviceContext) {\n-122 (void)deviceContext; // not used\n-123 return _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc, duDesc, dvDesc);\n-124 }\n-125\n-_\b1_\b2_\b6 static _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br * _\bC_\br_\be_\ba_\bt_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-127 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-128 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-129 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-130 bool interleavedDerivativeBuffers = false) {\n-131 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br *instance = new _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n-(interleavedDerivativeBuffers);\n-132 if (instance->_\bC_\bo_\bm_\bp_\bi_\bl_\be(srcDesc, dstDesc, duDesc, dvDesc))\n-133 return instance;\n-134 delete instance;\n-135 return NULL;\n-136 }\n-137\n-139 template \n-_\b1_\b4_\b0 static _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br *_\bC_\br_\be_\ba_\bt_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-141 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-142 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-143 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-144 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-145 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-146 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-147 DEVICE_CONTEXT deviceContext) {\n-148 bool interleavedDerivativeBuffers = deviceContext\n-149 ? deviceContext->AreInterleavedDerivativeBuffers()\n-150 : false;\n-151 return _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc, duDesc, dvDesc,\n-152 duuDesc, duvDesc, dvvDesc,\n-153 interleavedDerivativeBuffers);\n-154 }\n-155\n-_\b1_\b5_\b7 static _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br *_\bC_\br_\be_\ba_\bt_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-158 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-159 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-160 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-161 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-162 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-163 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-164 void * deviceContext) {\n-165 (void)deviceContext; // not used\n-166 return _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc, duDesc, dvDesc,\n-167 duuDesc, duvDesc, dvvDesc);\n-168 }\n-169\n-_\b1_\b7_\b0 static _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br * _\bC_\br_\be_\ba_\bt_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-171 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-172 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-173 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-174 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-175 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-176 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-177 bool interleavedDerivativeBuffers = false) {\n-178 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br *instance = new _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n-(interleavedDerivativeBuffers);\n-179 if (instance->_\bC_\bo_\bm_\bp_\bi_\bl_\be(srcDesc, dstDesc, duDesc, dvDesc,\n-180 duuDesc, duvDesc, dvvDesc))\n-181 return instance;\n-182 delete instance;\n-183 return NULL;\n-184 }\n-185\n-_\b1_\b9_\b9 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br(bool interleavedDerivativeBuffers = false);\n-200\n-_\b2_\b0_\b2 _\b~_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br();\n-203\n-209\n-237 template \n-_\b2_\b3_\b8 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n-239 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-240 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+95\n+_\b9_\b6class _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br {\n+97public:\n+_\b9_\b8 typedef bool _\bI_\bn_\bs_\bt_\ba_\bn_\bt_\bi_\ba_\bt_\ba_\bb_\bl_\be;\n+_\b9_\b9 static _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br * _\bC_\br_\be_\ba_\bt_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+100 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+101 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+102 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+103 void * deviceContext = NULL) {\n+104 return _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc, duDesc, dvDesc,\n+105 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+106 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+107 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+108 deviceContext);\n+109 }\n+110\n+_\b1_\b1_\b1 static _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br * _\bC_\br_\be_\ba_\bt_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+112 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+113 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+114 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+115 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+116 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+117 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+118 void * deviceContext = NULL) {\n+119 (void)deviceContext; // not used\n+120 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br *instance = new _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br();\n+121 if (instance->_\bC_\bo_\bm_\bp_\bi_\bl_\be(srcDesc, dstDesc, duDesc, dvDesc,\n+122 duuDesc, duvDesc, dvvDesc))\n+123 return instance;\n+124 delete instance;\n+125 return NULL;\n+126 }\n+127\n+_\b1_\b2_\b9 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br();\n+130\n+_\b1_\b3_\b2 _\b~_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br();\n+133\n+139\n+167 template \n+_\b1_\b6_\b8 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n+169 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+170 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+171 STENCIL_TABLE const *stencilTable,\n+172 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+173 void * deviceContext = NULL) {\n+174\n+175 if (instance) {\n+176 return instance->_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer, srcDesc,\n+177 dstBuffer, dstDesc,\n+178 stencilTable);\n+179 } else {\n+180 // Create an instance on demand (slow)\n+181 (void)deviceContext; // unused\n+182 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n+183 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+184 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br());\n+185 if (instance) {\n+186 bool r = instance->_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer, srcDesc,\n+187 dstBuffer, dstDesc,\n+188 stencilTable);\n+189 delete instance;\n+190 return r;\n+191 }\n+192 return false;\n+193 }\n+194 }\n+195\n+235 template \n+_\b2_\b3_\b6 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n+237 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+238 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+239 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+240 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n 241 STENCIL_TABLE const *stencilTable,\n-242 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+242 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n 243 void * deviceContext = NULL) {\n 244\n 245 if (instance) {\n 246 return instance->_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer, srcDesc,\n 247 dstBuffer, dstDesc,\n-248 stencilTable);\n-249 } else {\n-250 // Create an instance on demand (slow)\n-251 (void)deviceContext; // unused\n-252 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n-253 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-254 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br());\n+248 duBuffer, duDesc,\n+249 dvBuffer, dvDesc,\n+250 stencilTable);\n+251 } else {\n+252 // Create an instance on demand (slow)\n+253 (void)deviceContext; // unused\n+254 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc, duDesc, dvDesc);\n 255 if (instance) {\n 256 bool r = instance->_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer, srcDesc,\n 257 dstBuffer, dstDesc,\n-258 stencilTable);\n-259 delete instance;\n-260 return r;\n-261 }\n-262 return false;\n+258 duBuffer, duDesc,\n+259 dvBuffer, dvDesc,\n+260 stencilTable);\n+261 delete instance;\n+262 return r;\n 263 }\n-264 }\n-265\n-305 template \n-_\b3_\b0_\b6 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n-307 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-308 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-309 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-310 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-311 STENCIL_TABLE const *stencilTable,\n-312 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n-313 void * deviceContext = NULL) {\n-314\n-315 if (instance) {\n-316 return instance->_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer, srcDesc,\n-317 dstBuffer, dstDesc,\n-318 duBuffer, duDesc,\n-319 dvBuffer, dvDesc,\n-320 stencilTable);\n-321 } else {\n-322 // Create an instance on demand (slow)\n-323 (void)deviceContext; // unused\n-324 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc, duDesc, dvDesc);\n-325 if (instance) {\n-326 bool r = instance->_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer, srcDesc,\n-327 dstBuffer, dstDesc,\n-328 duBuffer, duDesc,\n-329 dvBuffer, dvDesc,\n-330 stencilTable);\n-331 delete instance;\n-332 return r;\n-333 }\n-334 return false;\n-335 }\n-336 }\n+264 return false;\n+265 }\n+266 }\n+267\n+325 template \n+_\b3_\b2_\b6 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n+327 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+328 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+329 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+330 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+331 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+332 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+333 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+334 STENCIL_TABLE const *stencilTable,\n+335 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+336 void * deviceContext = NULL) {\n 337\n-395 template \n-_\b3_\b9_\b6 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n-397 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-398 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-399 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-400 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-401 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-402 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-403 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-404 STENCIL_TABLE const *stencilTable,\n-405 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n-406 void * deviceContext = NULL) {\n-407\n-408 if (instance) {\n-409 return instance->_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer, srcDesc,\n-410 dstBuffer, dstDesc,\n-411 duBuffer, duDesc,\n-412 dvBuffer, dvDesc,\n-413 duuBuffer, duuDesc,\n-414 duvBuffer, duvDesc,\n-415 dvvBuffer, dvvDesc,\n-416 stencilTable);\n-417 } else {\n-418 // Create an instance on demand (slow)\n-419 (void)deviceContext; // unused\n-420 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n-421 duDesc, dvDesc,\n-422 duuDesc, duvDesc, dvvDesc);\n-423 if (instance) {\n-424 bool r = instance->_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer, srcDesc,\n-425 dstBuffer, dstDesc,\n-426 duBuffer, duDesc,\n-427 dvBuffer, dvDesc,\n-428 duuBuffer, duuDesc,\n-429 duvBuffer, duvDesc,\n-430 dvvBuffer, dvvDesc,\n-431 stencilTable);\n-432 delete instance;\n-433 return r;\n-434 }\n-435 return false;\n-436 }\n-437 }\n-438\n-456 template \n-_\b4_\b5_\b7 bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n-458 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-459 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-460 STENCIL_TABLE const *stencilTable) const {\n-461\n-462 return _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer->BindVBO(), srcDesc,\n-463 dstBuffer->BindVBO(), dstDesc,\n-464 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-465 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-466 stencilTable->GetSizesTexture(),\n-467 stencilTable->GetOffsetsTexture(),\n-468 stencilTable->GetIndicesTexture(),\n-469 stencilTable->GetWeightsTexture(),\n-470 0,\n-471 0,\n-472 /* start = */ 0,\n-473 /* end = */ stencilTable->GetNumStencils());\n-474 }\n-475\n-505 template \n-_\b5_\b0_\b6 bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n-507 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-508 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-509 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-510 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-511 STENCIL_TABLE const *stencilTable) const {\n-512\n-513 return _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer->BindVBO(), srcDesc,\n-514 dstBuffer->BindVBO(), dstDesc,\n-515 duBuffer->BindVBO(), duDesc,\n-516 dvBuffer->BindVBO(), dvDesc,\n-517 stencilTable->GetSizesTexture(),\n-518 stencilTable->GetOffsetsTexture(),\n-519 stencilTable->GetIndicesTexture(),\n-520 stencilTable->GetWeightsTexture(),\n-521 stencilTable->GetDuWeightsTexture(),\n-522 stencilTable->GetDvWeightsTexture(),\n-523 /* start = */ 0,\n-524 /* end = */ stencilTable->GetNumStencils());\n-525 }\n-526\n-574 template \n-_\b5_\b7_\b5 bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n-576 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-577 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-578 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-579 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-580 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-581 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-582 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-583 STENCIL_TABLE const *stencilTable) const {\n-584\n-585 return _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer->BindVBO(), srcDesc,\n-586 dstBuffer->BindVBO(), dstDesc,\n-587 duBuffer->BindVBO(), duDesc,\n-588 dvBuffer->BindVBO(), dvDesc,\n-589 duuBuffer->BindVBO(), duuDesc,\n-590 duvBuffer->BindVBO(), duvDesc,\n-591 dvvBuffer->BindVBO(), dvvDesc,\n-592 stencilTable->GetSizesTexture(),\n-593 stencilTable->GetOffsetsTexture(),\n-594 stencilTable->GetIndicesTexture(),\n-595 stencilTable->GetWeightsTexture(),\n-596 stencilTable->GetDuWeightsTexture(),\n-597 stencilTable->GetDvWeightsTexture(),\n-598 stencilTable->GetDuuWeightsTexture(),\n-599 stencilTable->GetDuvWeightsTexture(),\n-600 stencilTable->GetDvvWeightsTexture(),\n-601 /* start = */ 0,\n-602 /* end = */ stencilTable->GetNumStencils());\n-603 }\n-604\n-_\b6_\b4_\b0 bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(GLuint srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-641 GLuint dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-642 GLuint duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-643 GLuint dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-644 GLuint sizesBuffer,\n-645 GLuint offsetsBuffer,\n-646 GLuint indicesBuffer,\n-647 GLuint weightsBuffer,\n-648 GLuint duWeightsBuffer,\n-649 GLuint dvWeightsBuffer,\n-650 int start,\n-651 int end) const;\n-652\n-_\b7_\b0_\b6 bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(GLuint srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-707 GLuint dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-708 GLuint duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-709 GLuint dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-710 GLuint duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-711 GLuint duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-712 GLuint dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-713 GLuint sizesBuffer,\n-714 GLuint offsetsBuffer,\n-715 GLuint indicesBuffer,\n-716 GLuint weightsBuffer,\n-717 GLuint duWeightsBuffer,\n-718 GLuint dvWeightsBuffer,\n-719 GLuint duuWeightsBuffer,\n-720 GLuint duvWeightsBuffer,\n-721 GLuint dvvWeightsBuffer,\n-722 int start,\n-723 int end) const;\n-724\n-730\n-763 template \n-_\b7_\b6_\b5 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n-766 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-767 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-768 int numPatchCoords,\n-769 PATCHCOORD_BUFFER *patchCoords,\n-770 PATCH_TABLE *patchTable,\n-771 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n-772 void * deviceContext = NULL) {\n-773\n-774 if (instance) {\n-775 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer, srcDesc,\n-776 dstBuffer, dstDesc,\n-777 numPatchCoords, patchCoords,\n-778 patchTable);\n-779 } else {\n-780 // Create an instance on demand (slow)\n-781 (void)deviceContext; // unused\n-782 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n-783 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-784 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br());\n-785 if (instance) {\n-786 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer, srcDesc,\n-787 dstBuffer, dstDesc,\n-788 numPatchCoords, patchCoords,\n-789 patchTable);\n-790 delete instance;\n-791 return r;\n-792 }\n-793 return false;\n-794 }\n-795 }\n-796\n-841 template \n-_\b8_\b4_\b3 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n-844 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-845 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-846 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-847 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-848 int numPatchCoords,\n-849 PATCHCOORD_BUFFER *patchCoords,\n-850 PATCH_TABLE *patchTable,\n-851 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n-852 void * deviceContext = NULL) {\n-853\n-854 if (instance) {\n-855 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer, srcDesc,\n-856 dstBuffer, dstDesc,\n-857 duBuffer, duDesc,\n-858 dvBuffer, dvDesc,\n-859 numPatchCoords, patchCoords,\n-860 patchTable);\n-861 } else {\n-862 // Create an instance on demand (slow)\n-863 (void)deviceContext; // unused\n-864 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc, duDesc, dvDesc);\n-865 if (instance) {\n-866 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer, srcDesc,\n-867 dstBuffer, dstDesc,\n-868 duBuffer, duDesc,\n-869 dvBuffer, dvDesc,\n-870 numPatchCoords, patchCoords,\n-871 patchTable);\n-872 delete instance;\n-873 return r;\n-874 }\n-875 return false;\n-876 }\n-877 }\n-878\n+338 if (instance) {\n+339 return instance->_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer, srcDesc,\n+340 dstBuffer, dstDesc,\n+341 duBuffer, duDesc,\n+342 dvBuffer, dvDesc,\n+343 duuBuffer, duuDesc,\n+344 duvBuffer, duvDesc,\n+345 dvvBuffer, dvvDesc,\n+346 stencilTable);\n+347 } else {\n+348 // Create an instance on demand (slow)\n+349 (void)deviceContext; // unused\n+350 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc, duDesc, dvDesc,\n+351 duuDesc, duvDesc, dvvDesc);\n+352 if (instance) {\n+353 bool r = instance->_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer, srcDesc,\n+354 dstBuffer, dstDesc,\n+355 duBuffer, duDesc,\n+356 dvBuffer, dvDesc,\n+357 duuBuffer, duuDesc,\n+358 duvBuffer, duvDesc,\n+359 dvvBuffer, dvvDesc,\n+360 stencilTable);\n+361 delete instance;\n+362 return r;\n+363 }\n+364 return false;\n+365 }\n+366 }\n+367\n+385 template \n+_\b3_\b8_\b6 bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n+387 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+388 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+389 STENCIL_TABLE const *stencilTable) const {\n+390 return _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer->BindVBO(), srcDesc,\n+391 dstBuffer->BindVBO(), dstDesc,\n+392 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+393 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+394 stencilTable->GetSizesBuffer(),\n+395 stencilTable->GetOffsetsBuffer(),\n+396 stencilTable->GetIndicesBuffer(),\n+397 stencilTable->GetWeightsBuffer(),\n+398 0,\n+399 0,\n+400 /* start = */ 0,\n+401 /* end = */ stencilTable->GetNumStencils());\n+402 }\n+403\n+433 template \n+_\b4_\b3_\b4 bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n+435 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+436 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+437 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+438 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+439 STENCIL_TABLE const *stencilTable) const {\n+440 return _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer->BindVBO(), srcDesc,\n+441 dstBuffer->BindVBO(), dstDesc,\n+442 duBuffer->BindVBO(), duDesc,\n+443 dvBuffer->BindVBO(), dvDesc,\n+444 stencilTable->GetSizesBuffer(),\n+445 stencilTable->GetOffsetsBuffer(),\n+446 stencilTable->GetIndicesBuffer(),\n+447 stencilTable->GetWeightsBuffer(),\n+448 stencilTable->GetDuWeightsBuffer(),\n+449 stencilTable->GetDvWeightsBuffer(),\n+450 /* start = */ 0,\n+451 /* end = */ stencilTable->GetNumStencils());\n+452 }\n+453\n+501 template \n+_\b5_\b0_\b2 bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n+503 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+504 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+505 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+506 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+507 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+508 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+509 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+510 STENCIL_TABLE const *stencilTable) const {\n+511 return _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer->BindVBO(), srcDesc,\n+512 dstBuffer->BindVBO(), dstDesc,\n+513 duBuffer->BindVBO(), duDesc,\n+514 dvBuffer->BindVBO(), dvDesc,\n+515 duuBuffer->BindVBO(), duuDesc,\n+516 duvBuffer->BindVBO(), duvDesc,\n+517 dvvBuffer->BindVBO(), dvvDesc,\n+518 stencilTable->GetSizesBuffer(),\n+519 stencilTable->GetOffsetsBuffer(),\n+520 stencilTable->GetIndicesBuffer(),\n+521 stencilTable->GetWeightsBuffer(),\n+522 stencilTable->GetDuWeightsBuffer(),\n+523 stencilTable->GetDvWeightsBuffer(),\n+524 stencilTable->GetDuuWeightsBuffer(),\n+525 stencilTable->GetDuvWeightsBuffer(),\n+526 stencilTable->GetDvvWeightsBuffer(),\n+527 /* start = */ 0,\n+528 /* end = */ stencilTable->GetNumStencils());\n+529 }\n+530\n+_\b5_\b6_\b6 bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(GLuint srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+567 GLuint dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+568 GLuint duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+569 GLuint dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+570 GLuint sizesBuffer,\n+571 GLuint offsetsBuffer,\n+572 GLuint indicesBuffer,\n+573 GLuint weightsBuffer,\n+574 GLuint duWeightsBuffer,\n+575 GLuint dvWeightsBuffer,\n+576 int start,\n+577 int end) const;\n+578\n+_\b6_\b3_\b2 bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(GLuint srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+633 GLuint dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+634 GLuint duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+635 GLuint dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+636 GLuint duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+637 GLuint duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+638 GLuint dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+639 GLuint sizesBuffer,\n+640 GLuint offsetsBuffer,\n+641 GLuint indicesBuffer,\n+642 GLuint weightsBuffer,\n+643 GLuint duWeightsBuffer,\n+644 GLuint dvWeightsBuffer,\n+645 GLuint duuWeightsBuffer,\n+646 GLuint duvWeightsBuffer,\n+647 GLuint dvvWeightsBuffer,\n+648 int start,\n+649 int end) const;\n+650\n+656\n+689 template \n+_\b6_\b9_\b1 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n+692 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+693 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+694 int numPatchCoords,\n+695 PATCHCOORD_BUFFER *patchCoords,\n+696 PATCH_TABLE *patchTable,\n+697 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+698 void * deviceContext = NULL) {\n+699\n+700 if (instance) {\n+701 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer, srcDesc,\n+702 dstBuffer, dstDesc,\n+703 numPatchCoords, patchCoords,\n+704 patchTable);\n+705 } else {\n+706 // Create an instance on demand (slow)\n+707 (void)deviceContext; // unused\n+708 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n+709 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+710 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br());\n+711 if (instance) {\n+712 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer, srcDesc,\n+713 dstBuffer, dstDesc,\n+714 numPatchCoords, patchCoords,\n+715 patchTable);\n+716 delete instance;\n+717 return r;\n+718 }\n+719 return false;\n+720 }\n+721 }\n+722\n+767 template \n+_\b7_\b6_\b9 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n+770 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+771 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+772 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+773 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+774 int numPatchCoords,\n+775 PATCHCOORD_BUFFER *patchCoords,\n+776 PATCH_TABLE *patchTable,\n+777 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+778 void * deviceContext = NULL) {\n+779\n+780 if (instance) {\n+781 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer, srcDesc,\n+782 dstBuffer, dstDesc,\n+783 duBuffer, duDesc,\n+784 dvBuffer, dvDesc,\n+785 numPatchCoords, patchCoords,\n+786 patchTable);\n+787 } else {\n+788 // Create an instance on demand (slow)\n+789 (void)deviceContext; // unused\n+790 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n+791 duDesc, dvDesc);\n+792 if (instance) {\n+793 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer, srcDesc,\n+794 dstBuffer, dstDesc,\n+795 duBuffer, duDesc,\n+796 dvBuffer, dvDesc,\n+797 numPatchCoords, patchCoords,\n+798 patchTable);\n+799 delete instance;\n+800 return r;\n+801 }\n+802 return false;\n+803 }\n+804 }\n+805\n+868 template \n+_\b8_\b7_\b0 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n+871 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+872 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+873 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+874 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+875 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+876 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+877 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+878 int numPatchCoords,\n+879 PATCHCOORD_BUFFER *patchCoords,\n+880 PATCH_TABLE *patchTable,\n+881 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+882 void * deviceContext = NULL) {\n+883\n+884 if (instance) {\n+885 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer, srcDesc,\n+886 dstBuffer, dstDesc,\n+887 duBuffer, duDesc,\n+888 dvBuffer, dvDesc,\n+889 duuBuffer, duuDesc,\n+890 duvBuffer, duvDesc,\n+891 dvvBuffer, dvvDesc,\n+892 numPatchCoords, patchCoords,\n+893 patchTable);\n+894 } else {\n+895 // Create an instance on demand (slow)\n+896 (void)deviceContext; // unused\n+897 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n+898 duDesc, dvDesc,\n+899 duuDesc, duvDesc, dvvDesc);\n+900 if (instance) {\n+901 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer, srcDesc,\n+902 dstBuffer, dstDesc,\n+903 duBuffer, duDesc,\n+904 dvBuffer, dvDesc,\n+905 duuBuffer, duuDesc,\n+906 duvBuffer, duvDesc,\n+907 dvvBuffer, dvvDesc,\n+908 numPatchCoords, patchCoords,\n+909 patchTable);\n+910 delete instance;\n+911 return r;\n+912 }\n+913 return false;\n+914 }\n+915 }\n+916\n 941 template \n-_\b9_\b4_\b3 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n+_\b9_\b4_\b3 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n 944 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n 945 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-946 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-947 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-948 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-949 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-950 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-951 int numPatchCoords,\n-952 PATCHCOORD_BUFFER *patchCoords,\n-953 PATCH_TABLE *patchTable,\n-954 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n-955 void * deviceContext = NULL) {\n-956\n-957 if (instance) {\n-958 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer, srcDesc,\n-959 dstBuffer, dstDesc,\n-960 duBuffer, duDesc,\n-961 dvBuffer, dvDesc,\n-962 duuBuffer, duuDesc,\n-963 duvBuffer, duvDesc,\n-964 dvvBuffer, dvvDesc,\n-965 numPatchCoords, patchCoords,\n-966 patchTable);\n-967 } else {\n-968 // Create an instance on demand (slow)\n-969 (void)deviceContext; // unused\n-970 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n-971 duDesc, dvDesc,\n-972 duuDesc, duvDesc, dvvDesc);\n-973 if (instance) {\n-974 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer, srcDesc,\n-975 dstBuffer, dstDesc,\n-976 duBuffer, duDesc,\n-977 dvBuffer, dvDesc,\n-978 duuBuffer, duuDesc,\n-979 duvBuffer, duvDesc,\n-980 dvvBuffer, dvvDesc,\n-981 numPatchCoords, patchCoords,\n-982 patchTable);\n-983 delete instance;\n-984 return r;\n-985 }\n-986 return false;\n-987 }\n-988 }\n-989\n-1014 template \n-_\b1_\b0_\b1_\b6 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n-1017 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1018 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1019 int numPatchCoords,\n-1020 PATCHCOORD_BUFFER *patchCoords,\n-1021 PATCH_TABLE *patchTable) const {\n-1022\n-1023 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n-1024 dstBuffer->BindVBO(), dstDesc,\n-1025 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-1026 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-1027 numPatchCoords,\n-1028 patchCoords->BindVBO(),\n-1029 patchTable->GetPatchArrays(),\n-1030 patchTable->GetPatchIndexTextureBuffer(),\n-1031 patchTable->GetPatchParamTextureBuffer());\n-1032 }\n-1033\n-1068 template \n-_\b1_\b0_\b7_\b0 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n-1071 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1072 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1073 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-1074 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-1075 int numPatchCoords,\n-1076 PATCHCOORD_BUFFER *patchCoords,\n-1077 PATCH_TABLE *patchTable) const {\n-1078\n-1079 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n-1080 dstBuffer->BindVBO(), dstDesc,\n-1081 duBuffer->BindVBO(), duDesc,\n-1082 dvBuffer->BindVBO(), dvDesc,\n-1083 numPatchCoords,\n-1084 patchCoords->BindVBO(),\n-1085 patchTable->GetPatchArrays(),\n-1086 patchTable->GetPatchIndexTextureBuffer(),\n-1087 patchTable->GetPatchParamTextureBuffer());\n-1088 }\n-1089\n-1142 template \n-_\b1_\b1_\b4_\b4 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n-1145 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1146 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1147 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-1148 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-1149 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-1150 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-1151 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-1152 int numPatchCoords,\n-1153 PATCHCOORD_BUFFER *patchCoords,\n-1154 PATCH_TABLE *patchTable) const {\n-1155\n-1156 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n-1157 dstBuffer->BindVBO(), dstDesc,\n-1158 duBuffer->BindVBO(), duDesc,\n-1159 dvBuffer->BindVBO(), dvDesc,\n-1160 duuBuffer->BindVBO(), duuDesc,\n-1161 duvBuffer->BindVBO(), duvDesc,\n-1162 dvvBuffer->BindVBO(), dvvDesc,\n-1163 numPatchCoords,\n-1164 patchCoords->BindVBO(),\n-1165 patchTable->GetPatchArrays(),\n-1166 patchTable->GetPatchIndexTextureBuffer(),\n-1167 patchTable->GetPatchParamTextureBuffer());\n-1168 }\n-1169\n-_\b1_\b1_\b7_\b0 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(GLuint srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1171 GLuint dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1172 GLuint duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-1173 GLuint dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-1174 int numPatchCoords,\n-1175 GLuint patchCoordsBuffer,\n-1176 const _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br &patchArrays,\n-1177 GLuint patchIndexBuffer,\n-1178 GLuint patchParamsBuffer) const;\n-1179\n-_\b1_\b1_\b8_\b0 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(GLuint srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1181 GLuint dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1182 GLuint duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-1183 GLuint dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-1184 GLuint duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-1185 GLuint duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-1186 GLuint dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-1187 int numPatchCoords,\n-1188 GLuint patchCoordsBuffer,\n-1189 const _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br &patchArrays,\n-1190 GLuint patchIndexBuffer,\n-1191 GLuint patchParamsBuffer) const;\n-1192\n-1225 template \n-_\b1_\b2_\b2_\b7 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1228 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1229 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1230 int numPatchCoords,\n-1231 PATCHCOORD_BUFFER *patchCoords,\n-1232 PATCH_TABLE *patchTable,\n-1233 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n-1234 void * deviceContext = NULL) {\n-1235\n-1236 if (instance) {\n-1237 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1238 srcBuffer, srcDesc,\n-1239 dstBuffer, dstDesc,\n-1240 numPatchCoords, patchCoords,\n-1241 patchTable);\n-1242 } else {\n-1243 // Create an instance on demand (slow)\n-1244 (void)deviceContext; // unused\n-1245 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n-1246 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-1247 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br());\n-1248 if (instance) {\n-1249 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1250 srcBuffer, srcDesc,\n-1251 dstBuffer, dstDesc,\n-1252 numPatchCoords, patchCoords,\n-1253 patchTable);\n-1254 delete instance;\n-1255 return r;\n-1256 }\n-1257 return false;\n-1258 }\n-1259 }\n-1260\n-1285 template \n-_\b1_\b2_\b8_\b7 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1288 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1289 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1290 int numPatchCoords,\n-1291 PATCHCOORD_BUFFER *patchCoords,\n-1292 PATCH_TABLE *patchTable) const {\n-1293\n-1294 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n-1295 dstBuffer->BindVBO(), dstDesc,\n-1296 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-1297 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-1298 numPatchCoords,\n-1299 patchCoords->BindVBO(),\n-1300 patchTable->GetVaryingPatchArrays(),\n-1301 patchTable->GetVaryingPatchIndexTextureBuffer(),\n-1302 patchTable->GetPatchParamTextureBuffer());\n-1303 }\n-1304\n-1349 template \n-_\b1_\b3_\b5_\b1 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1352 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1353 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1354 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-1355 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-1356 int numPatchCoords,\n-1357 PATCHCOORD_BUFFER *patchCoords,\n-1358 PATCH_TABLE *patchTable,\n-1359 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n-1360 void * deviceContext = NULL) {\n-1361\n-1362 if (instance) {\n-1363 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1364 srcBuffer, srcDesc,\n-1365 dstBuffer, dstDesc,\n-1366 duBuffer, duDesc,\n-1367 dvBuffer, dvDesc,\n-1368 numPatchCoords, patchCoords,\n-1369 patchTable);\n-1370 } else {\n-1371 // Create an instance on demand (slow)\n-1372 (void)deviceContext; // unused\n-1373 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n-1374 duDesc, dvDesc);\n-1375 if (instance) {\n-1376 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1377 srcBuffer, srcDesc,\n-1378 dstBuffer, dstDesc,\n-1379 duBuffer, duDesc,\n-1380 dvBuffer, dvDesc,\n-1381 numPatchCoords, patchCoords,\n-1382 patchTable);\n-1383 delete instance;\n-1384 return r;\n-1385 }\n-1386 return false;\n-1387 }\n-1388 }\n-1389\n-1426 template \n-_\b1_\b4_\b2_\b8 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1429 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1430 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1431 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-1432 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-1433 int numPatchCoords,\n-1434 PATCHCOORD_BUFFER *patchCoords,\n-1435 PATCH_TABLE *patchTable) const {\n-1436\n-1437 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n-1438 dstBuffer->BindVBO(), dstDesc,\n-1439 duBuffer->BindVBO(), duDesc,\n-1440 dvBuffer->BindVBO(), dvDesc,\n-1441 numPatchCoords,\n-1442 patchCoords->BindVBO(),\n-1443 patchTable->GetVaryingPatchArrays(),\n-1444 patchTable->GetVaryingPatchIndexTextureBuffer(),\n-1445 patchTable->GetPatchParamTextureBuffer());\n-1446 }\n-1447\n-1510 template \n-_\b1_\b5_\b1_\b2 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1513 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1514 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1515 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-1516 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-1517 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-1518 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-1519 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-1520 int numPatchCoords,\n-1521 PATCHCOORD_BUFFER *patchCoords,\n-1522 PATCH_TABLE *patchTable,\n-1523 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n-1524 void * deviceContext = NULL) {\n-1525\n-1526 if (instance) {\n-1527 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1528 srcBuffer, srcDesc,\n-1529 dstBuffer, dstDesc,\n-1530 duBuffer, duDesc,\n-1531 dvBuffer, dvDesc,\n-1532 duuBuffer, duuDesc,\n-1533 duvBuffer, duvDesc,\n-1534 dvvBuffer, dvvDesc,\n-1535 numPatchCoords, patchCoords,\n-1536 patchTable);\n-1537 } else {\n-1538 // Create an instance on demand (slow)\n-1539 (void)deviceContext; // unused\n-1540 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n-1541 duDesc, dvDesc,\n-1542 duuDesc, duvDesc, dvvDesc);\n-1543 if (instance) {\n-1544 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1545 srcBuffer, srcDesc,\n-1546 dstBuffer, dstDesc,\n-1547 duBuffer, duDesc,\n-1548 dvBuffer, dvDesc,\n-1549 duuBuffer, duuDesc,\n-1550 duvBuffer, duvDesc,\n-1551 dvvBuffer, dvvDesc,\n-1552 numPatchCoords, patchCoords,\n-1553 patchTable);\n-1554 delete instance;\n-1555 return r;\n-1556 }\n-1557 return false;\n-1558 }\n-1559 }\n-1560\n-1615 template \n-_\b1_\b6_\b1_\b7 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1618 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1619 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1620 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-1621 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-1622 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-1623 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-1624 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-1625 int numPatchCoords,\n-1626 PATCHCOORD_BUFFER *patchCoords,\n-1627 PATCH_TABLE *patchTable) const {\n-1628\n-1629 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n-1630 dstBuffer->BindVBO(), dstDesc,\n-1631 duBuffer->BindVBO(), duDesc,\n-1632 dvBuffer->BindVBO(), dvDesc,\n-1633 duuBuffer->BindVBO(), duuDesc,\n-1634 duvBuffer->BindVBO(), duvDesc,\n-1635 dvvBuffer->BindVBO(), dvvDesc,\n-1636 numPatchCoords,\n-1637 patchCoords->BindVBO(),\n-1638 patchTable->GetVaryingPatchArrays(),\n-1639 patchTable->GetVaryingPatchIndexTextureBuffer(),\n-1640 patchTable->GetPatchParamTextureBuffer());\n-1641 }\n-1642\n-1677 template \n-_\b1_\b6_\b7_\b9 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1680 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1681 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1682 int numPatchCoords,\n-1683 PATCHCOORD_BUFFER *patchCoords,\n-1684 PATCH_TABLE *patchTable,\n-1685 int fvarChannel,\n-1686 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n-1687 void * deviceContext = NULL) {\n-1688\n-1689 if (instance) {\n-1690 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1691 srcBuffer, srcDesc,\n-1692 dstBuffer, dstDesc,\n-1693 numPatchCoords, patchCoords,\n-1694 patchTable, fvarChannel);\n-1695 } else {\n-1696 // Create an instance on demand (slow)\n-1697 (void)deviceContext; // unused\n-1698 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n-1699 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-1700 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br());\n-1701 if (instance) {\n-1702 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1703 srcBuffer, srcDesc,\n-1704 dstBuffer, dstDesc,\n-1705 numPatchCoords, patchCoords,\n-1706 patchTable, fvarChannel);\n-1707 delete instance;\n-1708 return r;\n-1709 }\n-1710 return false;\n-1711 }\n-1712 }\n-1713\n-1740 template \n-_\b1_\b7_\b4_\b2 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1743 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1744 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1745 int numPatchCoords,\n-1746 PATCHCOORD_BUFFER *patchCoords,\n-1747 PATCH_TABLE *patchTable,\n-1748 int fvarChannel = 0) const {\n-1749\n-1750 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n-1751 dstBuffer->BindVBO(), dstDesc,\n-1752 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-1753 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-1754 numPatchCoords,\n-1755 patchCoords->BindVBO(),\n-1756 patchTable->GetFVarPatchArrays(fvarChannel),\n-1757 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),\n-1758 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));\n-1759 }\n-1760\n-1807 template \n-_\b1_\b8_\b0_\b9 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1810 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1811 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1812 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-1813 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-1814 int numPatchCoords,\n-1815 PATCHCOORD_BUFFER *patchCoords,\n-1816 PATCH_TABLE *patchTable,\n-1817 int fvarChannel,\n-1818 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n-1819 void * deviceContext = NULL) {\n-1820\n-1821 if (instance) {\n-1822 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1823 srcBuffer, srcDesc,\n-1824 dstBuffer, dstDesc,\n-1825 duBuffer, duDesc,\n-1826 dvBuffer, dvDesc,\n-1827 numPatchCoords, patchCoords,\n-1828 patchTable, fvarChannel);\n-1829 } else {\n-1830 // Create an instance on demand (slow)\n-1831 (void)deviceContext; // unused\n-1832 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n-1833 duDesc, dvDesc);\n-1834 if (instance) {\n-1835 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1836 srcBuffer, srcDesc,\n-1837 dstBuffer, dstDesc,\n-1838 duBuffer, duDesc,\n-1839 dvBuffer, dvDesc,\n-1840 numPatchCoords, patchCoords,\n-1841 patchTable, fvarChannel);\n-1842 delete instance;\n-1843 return r;\n-1844 }\n-1845 return false;\n-1846 }\n-1847 }\n-1848\n-1887 template \n-_\b1_\b8_\b8_\b9 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1890 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1891 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1892 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-1893 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-1894 int numPatchCoords,\n-1895 PATCHCOORD_BUFFER *patchCoords,\n-1896 PATCH_TABLE *patchTable,\n-1897 int fvarChannel = 0) const {\n-1898\n-1899 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n-1900 dstBuffer->BindVBO(), dstDesc,\n-1901 duBuffer->BindVBO(), duDesc,\n-1902 dvBuffer->BindVBO(), dvDesc,\n-1903 numPatchCoords,\n-1904 patchCoords->BindVBO(),\n-1905 patchTable->GetFVarPatchArrays(fvarChannel),\n-1906 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),\n-1907 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));\n-1908 }\n-1909\n-1974 template \n-_\b1_\b9_\b7_\b6 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1977 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1978 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1979 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-1980 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-1981 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-1982 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-1983 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-1984 int numPatchCoords,\n-1985 PATCHCOORD_BUFFER *patchCoords,\n-1986 PATCH_TABLE *patchTable,\n-1987 int fvarChannel,\n-1988 _\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n-1989 void * deviceContext = NULL) {\n-1990\n-1991 if (instance) {\n-1992 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1993 srcBuffer, srcDesc,\n-1994 dstBuffer, dstDesc,\n-1995 duBuffer, duDesc,\n-1996 dvBuffer, dvDesc,\n-1997 duuBuffer, duuDesc,\n-1998 duvBuffer, duvDesc,\n-1999 dvvBuffer, dvvDesc,\n-2000 numPatchCoords, patchCoords,\n-2001 patchTable, fvarChannel);\n-2002 } else {\n-2003 // Create an instance on demand (slow)\n-2004 (void)deviceContext; // unused\n-2005 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n-2006 duDesc, dvDesc,\n-2007 duuDesc, duvDesc, dvvDesc);\n-2008 if (instance) {\n-2009 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-2010 srcBuffer, srcDesc,\n-2011 dstBuffer, dstDesc,\n-2012 duBuffer, duDesc,\n-2013 dvBuffer, dvDesc,\n-2014 duuBuffer, duuDesc,\n-2015 duvBuffer, duvDesc,\n-2016 dvvBuffer, dvvDesc,\n-2017 numPatchCoords, patchCoords,\n-2018 patchTable, fvarChannel);\n-2019 delete instance;\n-2020 return r;\n-2021 }\n-2022 return false;\n-2023 }\n-2024 }\n-2025\n-2082 template \n-_\b2_\b0_\b8_\b4 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-2085 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-2086 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-2087 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-2088 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-2089 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-2090 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-2091 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-2092 int numPatchCoords,\n-2093 PATCHCOORD_BUFFER *patchCoords,\n-2094 PATCH_TABLE *patchTable,\n-2095 int fvarChannel = 0) const {\n-2096\n-2097 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n-2098 dstBuffer->BindVBO(), dstDesc,\n-2099 duBuffer->BindVBO(), duDesc,\n-2100 dvBuffer->BindVBO(), dvDesc,\n-2101 duuBuffer->BindVBO(), duuDesc,\n-2102 duvBuffer->BindVBO(), duvDesc,\n-2103 dvvBuffer->BindVBO(), dvvDesc,\n-2104 numPatchCoords,\n-2105 patchCoords->BindVBO(),\n-2106 patchTable->GetFVarPatchArrays(fvarChannel),\n-2107 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),\n-2108 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));\n-2109 }\n-2110\n-2116\n-_\b2_\b1_\b1_\b9 bool _\bC_\bo_\bm_\bp_\bi_\bl_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-2120 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-2121 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc = _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-2122 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc = _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-2123 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc = _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-2124 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc = _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-2125 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc = _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br());\n-2126\n-_\b2_\b1_\b2_\b8 static void _\bS_\by_\bn_\bc_\bh_\br_\bo_\bn_\bi_\bz_\be(void *kernel);\n-2129\n-2130private:\n-2131 GLuint _srcBufferTexture;\n-2132 GLuint _patchArraysUBO;\n-2133 bool _interleavedDerivativeBuffers;\n-2134\n-2135 struct _StencilKernel {\n-2136 _StencilKernel();\n-2137 ~_StencilKernel();\n-2138 bool Compile(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-2139 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-2140 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-2141 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-2142 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-2143 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-2144 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-2145 bool interleavedDerivativeBuffers);\n-2146 GLuint program;\n-2147 GLint uniformSrcBufferTexture;\n-2148 GLint uniformSrcOffset; // src buffer offset (in elements)\n-2149\n-2150 GLint uniformSizesTexture;\n-2151 GLint uniformOffsetsTexture;\n-2152 GLint uniformIndicesTexture;\n-2153 GLint uniformWeightsTexture;\n-2154 GLint uniformDuWeightsTexture;\n-2155 GLint uniformDvWeightsTexture;\n-2156 GLint uniformDuuWeightsTexture;\n-2157 GLint uniformDuvWeightsTexture;\n-2158 GLint uniformDvvWeightsTexture;\n-2159 GLint uniformStart; // range\n-2160 GLint uniformEnd;\n-2161 } _stencilKernel;\n-2162\n-2163 struct _PatchKernel {\n-2164 _PatchKernel();\n-2165 ~_PatchKernel();\n-2166 bool Compile(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-2167 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-2168 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-2169 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-2170 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-2171 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-2172 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-2173 bool interleavedDerivativeBuffers);\n-2174 GLuint program;\n-2175 GLint uniformSrcBufferTexture;\n-2176 GLint uniformSrcOffset; // src buffer offset (in elements)\n-2177\n-2178 GLint uniformPatchArraysUBOBinding;\n-2179 GLint uniformPatchParamTexture;\n-2180 GLint uniformPatchIndexTexture;\n-2181 } _patchKernel;\n-2182\n-2183};\n-2184\n-2185} // end namespace Osd\n-2186\n-2187} // end namespace OPENSUBDIV_VERSION\n-2188using namespace OPENSUBDIV_VERSION;\n-2189\n-2190} // end namespace OpenSubdiv\n-2191\n-2192\n-2193#endif // OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H\n+946 int numPatchCoords,\n+947 PATCHCOORD_BUFFER *patchCoords,\n+948 PATCH_TABLE *patchTable) const {\n+949\n+950 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n+951 dstBuffer->BindVBO(), dstDesc,\n+952 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+953 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+954 numPatchCoords,\n+955 patchCoords->BindVBO(),\n+956 patchTable->GetPatchArrays(),\n+957 patchTable->GetPatchIndexBuffer(),\n+958 patchTable->GetPatchParamBuffer());\n+959 }\n+960\n+995 template \n+_\b9_\b9_\b7 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n+998 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+999 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1000 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+1001 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+1002 int numPatchCoords,\n+1003 PATCHCOORD_BUFFER *patchCoords,\n+1004 PATCH_TABLE *patchTable) const {\n+1005\n+1006 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n+1007 dstBuffer->BindVBO(), dstDesc,\n+1008 duBuffer->BindVBO(), duDesc,\n+1009 dvBuffer->BindVBO(), dvDesc,\n+1010 numPatchCoords,\n+1011 patchCoords->BindVBO(),\n+1012 patchTable->GetPatchArrays(),\n+1013 patchTable->GetPatchIndexBuffer(),\n+1014 patchTable->GetPatchParamBuffer());\n+1015 }\n+1016\n+1069 template \n+_\b1_\b0_\b7_\b1 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n+1072 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1073 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1074 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+1075 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+1076 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+1077 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+1078 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+1079 int numPatchCoords,\n+1080 PATCHCOORD_BUFFER *patchCoords,\n+1081 PATCH_TABLE *patchTable) const {\n+1082\n+1083 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n+1084 dstBuffer->BindVBO(), dstDesc,\n+1085 duBuffer->BindVBO(), duDesc,\n+1086 dvBuffer->BindVBO(), dvDesc,\n+1087 duuBuffer->BindVBO(), duuDesc,\n+1088 duvBuffer->BindVBO(), duvDesc,\n+1089 dvvBuffer->BindVBO(), dvvDesc,\n+1090 numPatchCoords,\n+1091 patchCoords->BindVBO(),\n+1092 patchTable->GetPatchArrays(),\n+1093 patchTable->GetPatchIndexBuffer(),\n+1094 patchTable->GetPatchParamBuffer());\n+1095 }\n+1096\n+_\b1_\b0_\b9_\b7 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(GLuint srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1098 GLuint dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1099 GLuint duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+1100 GLuint dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+1101 int numPatchCoords,\n+1102 GLuint patchCoordsBuffer,\n+1103 const _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br &patchArrays,\n+1104 GLuint patchIndexBuffer,\n+1105 GLuint patchParamsBuffer) const;\n+1106\n+_\b1_\b1_\b0_\b7 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(GLuint srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1108 GLuint dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1109 GLuint duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+1110 GLuint dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+1111 GLuint duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+1112 GLuint duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+1113 GLuint dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+1114 int numPatchCoords,\n+1115 GLuint patchCoordsBuffer,\n+1116 const _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br &patchArrays,\n+1117 GLuint patchIndexBuffer,\n+1118 GLuint patchParamsBuffer) const;\n+1119\n+1152 template \n+_\b1_\b1_\b5_\b4 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1155 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1156 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1157 int numPatchCoords,\n+1158 PATCHCOORD_BUFFER *patchCoords,\n+1159 PATCH_TABLE *patchTable,\n+1160 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+1161 void * deviceContext = NULL) {\n+1162\n+1163 if (instance) {\n+1164 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1165 srcBuffer, srcDesc,\n+1166 dstBuffer, dstDesc,\n+1167 numPatchCoords, patchCoords,\n+1168 patchTable);\n+1169 } else {\n+1170 // Create an instance on demand (slow)\n+1171 (void)deviceContext; // unused\n+1172 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n+1173 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+1174 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br());\n+1175 if (instance) {\n+1176 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1177 srcBuffer, srcDesc,\n+1178 dstBuffer, dstDesc,\n+1179 numPatchCoords, patchCoords,\n+1180 patchTable);\n+1181 delete instance;\n+1182 return r;\n+1183 }\n+1184 return false;\n+1185 }\n+1186 }\n+1187\n+1212 template \n+_\b1_\b2_\b1_\b4 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1215 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1216 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1217 int numPatchCoords,\n+1218 PATCHCOORD_BUFFER *patchCoords,\n+1219 PATCH_TABLE *patchTable) const {\n+1220\n+1221 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n+1222 dstBuffer->BindVBO(), dstDesc,\n+1223 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+1224 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+1225 numPatchCoords,\n+1226 patchCoords->BindVBO(),\n+1227 patchTable->GetVaryingPatchArrays(),\n+1228 patchTable->GetVaryingPatchIndexBuffer(),\n+1229 patchTable->GetPatchParamBuffer());\n+1230 }\n+1231\n+1276 template \n+_\b1_\b2_\b7_\b8 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1279 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1280 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1281 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+1282 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+1283 int numPatchCoords,\n+1284 PATCHCOORD_BUFFER *patchCoords,\n+1285 PATCH_TABLE *patchTable,\n+1286 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+1287 void * deviceContext = NULL) {\n+1288\n+1289 if (instance) {\n+1290 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1291 srcBuffer, srcDesc,\n+1292 dstBuffer, dstDesc,\n+1293 duBuffer, duDesc,\n+1294 dvBuffer, dvDesc,\n+1295 numPatchCoords, patchCoords,\n+1296 patchTable);\n+1297 } else {\n+1298 // Create an instance on demand (slow)\n+1299 (void)deviceContext; // unused\n+1300 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n+1301 duDesc, dvDesc);\n+1302 if (instance) {\n+1303 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1304 srcBuffer, srcDesc,\n+1305 dstBuffer, dstDesc,\n+1306 duBuffer, duDesc,\n+1307 dvBuffer, dvDesc,\n+1308 numPatchCoords, patchCoords,\n+1309 patchTable);\n+1310 delete instance;\n+1311 return r;\n+1312 }\n+1313 return false;\n+1314 }\n+1315 }\n+1316\n+1353 template \n+_\b1_\b3_\b5_\b5 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1356 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1357 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1358 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+1359 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+1360 int numPatchCoords,\n+1361 PATCHCOORD_BUFFER *patchCoords,\n+1362 PATCH_TABLE *patchTable) const {\n+1363\n+1364 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n+1365 dstBuffer->BindVBO(), dstDesc,\n+1366 duBuffer->BindVBO(), duDesc,\n+1367 dvBuffer->BindVBO(), dvDesc,\n+1368 numPatchCoords,\n+1369 patchCoords->BindVBO(),\n+1370 patchTable->GetVaryingPatchArrays(),\n+1371 patchTable->GetVaryingPatchIndexBuffer(),\n+1372 patchTable->GetPatchParamBuffer());\n+1373 }\n+1374\n+1437 template \n+_\b1_\b4_\b3_\b9 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1440 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1441 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1442 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+1443 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+1444 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+1445 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+1446 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+1447 int numPatchCoords,\n+1448 PATCHCOORD_BUFFER *patchCoords,\n+1449 PATCH_TABLE *patchTable,\n+1450 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+1451 void * deviceContext = NULL) {\n+1452\n+1453 if (instance) {\n+1454 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1455 srcBuffer, srcDesc,\n+1456 dstBuffer, dstDesc,\n+1457 duBuffer, duDesc,\n+1458 dvBuffer, dvDesc,\n+1459 duuBuffer, duuDesc,\n+1460 duvBuffer, duvDesc,\n+1461 dvvBuffer, dvvDesc,\n+1462 numPatchCoords, patchCoords,\n+1463 patchTable);\n+1464 } else {\n+1465 // Create an instance on demand (slow)\n+1466 (void)deviceContext; // unused\n+1467 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n+1468 duDesc, dvDesc,\n+1469 duuDesc, duvDesc, dvvDesc);\n+1470 if (instance) {\n+1471 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1472 srcBuffer, srcDesc,\n+1473 dstBuffer, dstDesc,\n+1474 duBuffer, duDesc,\n+1475 dvBuffer, dvDesc,\n+1476 duuBuffer, duuDesc,\n+1477 duvBuffer, duvDesc,\n+1478 dvvBuffer, dvvDesc,\n+1479 numPatchCoords, patchCoords,\n+1480 patchTable);\n+1481 delete instance;\n+1482 return r;\n+1483 }\n+1484 return false;\n+1485 }\n+1486 }\n+1487\n+1542 template \n+_\b1_\b5_\b4_\b4 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1545 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1546 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1547 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+1548 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+1549 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+1550 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+1551 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+1552 int numPatchCoords,\n+1553 PATCHCOORD_BUFFER *patchCoords,\n+1554 PATCH_TABLE *patchTable) const {\n+1555\n+1556 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n+1557 dstBuffer->BindVBO(), dstDesc,\n+1558 duBuffer->BindVBO(), duDesc,\n+1559 dvBuffer->BindVBO(), dvDesc,\n+1560 duuBuffer->BindVBO(), duuDesc,\n+1561 duvBuffer->BindVBO(), duvDesc,\n+1562 dvvBuffer->BindVBO(), dvvDesc,\n+1563 numPatchCoords,\n+1564 patchCoords->BindVBO(),\n+1565 patchTable->GetVaryingPatchArrays(),\n+1566 patchTable->GetVaryingPatchIndexBuffer(),\n+1567 patchTable->GetPatchParamBuffer());\n+1568 }\n+1569\n+1604 template \n+_\b1_\b6_\b0_\b6 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1607 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1608 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1609 int numPatchCoords,\n+1610 PATCHCOORD_BUFFER *patchCoords,\n+1611 PATCH_TABLE *patchTable,\n+1612 int fvarChannel,\n+1613 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+1614 void * deviceContext = NULL) {\n+1615\n+1616 if (instance) {\n+1617 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1618 srcBuffer, srcDesc,\n+1619 dstBuffer, dstDesc,\n+1620 numPatchCoords, patchCoords,\n+1621 patchTable, fvarChannel);\n+1622 } else {\n+1623 // Create an instance on demand (slow)\n+1624 (void)deviceContext; // unused\n+1625 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n+1626 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+1627 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br());\n+1628 if (instance) {\n+1629 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1630 srcBuffer, srcDesc,\n+1631 dstBuffer, dstDesc,\n+1632 numPatchCoords, patchCoords,\n+1633 patchTable, fvarChannel);\n+1634 delete instance;\n+1635 return r;\n+1636 }\n+1637 return false;\n+1638 }\n+1639 }\n+1640\n+1667 template \n+_\b1_\b6_\b6_\b9 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1670 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1671 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1672 int numPatchCoords,\n+1673 PATCHCOORD_BUFFER *patchCoords,\n+1674 PATCH_TABLE *patchTable,\n+1675 int fvarChannel = 0) const {\n+1676\n+1677 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n+1678 dstBuffer->BindVBO(), dstDesc,\n+1679 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+1680 0, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+1681 numPatchCoords,\n+1682 patchCoords->BindVBO(),\n+1683 patchTable->GetFVarPatchArrays(fvarChannel),\n+1684 patchTable->GetFVarPatchIndexBuffer(fvarChannel),\n+1685 patchTable->GetFVarPatchParamBuffer(fvarChannel));\n+1686 }\n+1687\n+1734 template \n+_\b1_\b7_\b3_\b6 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1737 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1738 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1739 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+1740 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+1741 int numPatchCoords,\n+1742 PATCHCOORD_BUFFER *patchCoords,\n+1743 PATCH_TABLE *patchTable,\n+1744 int fvarChannel,\n+1745 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+1746 void * deviceContext = NULL) {\n+1747\n+1748 if (instance) {\n+1749 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1750 srcBuffer, srcDesc,\n+1751 dstBuffer, dstDesc,\n+1752 duBuffer, duDesc,\n+1753 dvBuffer, dvDesc,\n+1754 numPatchCoords, patchCoords,\n+1755 patchTable, fvarChannel);\n+1756 } else {\n+1757 // Create an instance on demand (slow)\n+1758 (void)deviceContext; // unused\n+1759 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n+1760 duDesc, dvDesc);\n+1761 if (instance) {\n+1762 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1763 srcBuffer, srcDesc,\n+1764 dstBuffer, dstDesc,\n+1765 duBuffer, duDesc,\n+1766 dvBuffer, dvDesc,\n+1767 numPatchCoords, patchCoords,\n+1768 patchTable, fvarChannel);\n+1769 delete instance;\n+1770 return r;\n+1771 }\n+1772 return false;\n+1773 }\n+1774 }\n+1775\n+1814 template \n+_\b1_\b8_\b1_\b6 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1817 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1818 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1819 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+1820 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+1821 int numPatchCoords,\n+1822 PATCHCOORD_BUFFER *patchCoords,\n+1823 PATCH_TABLE *patchTable,\n+1824 int fvarChannel = 0) const {\n+1825\n+1826 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n+1827 dstBuffer->BindVBO(), dstDesc,\n+1828 duBuffer->BindVBO(), duDesc,\n+1829 dvBuffer->BindVBO(), dvDesc,\n+1830 numPatchCoords,\n+1831 patchCoords->BindVBO(),\n+1832 patchTable->GetFVarPatchArrays(fvarChannel),\n+1833 patchTable->GetFVarPatchIndexBuffer(fvarChannel),\n+1834 patchTable->GetFVarPatchParamBuffer(fvarChannel));\n+1835 }\n+1836\n+1901 template \n+_\b1_\b9_\b0_\b3 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1904 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1905 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1906 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+1907 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+1908 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+1909 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+1910 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+1911 int numPatchCoords,\n+1912 PATCHCOORD_BUFFER *patchCoords,\n+1913 PATCH_TABLE *patchTable,\n+1914 int fvarChannel,\n+1915 _\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance,\n+1916 void * deviceContext = NULL) {\n+1917\n+1918 if (instance) {\n+1919 return instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1920 srcBuffer, srcDesc,\n+1921 dstBuffer, dstDesc,\n+1922 duBuffer, duDesc,\n+1923 dvBuffer, dvDesc,\n+1924 duuBuffer, duuDesc,\n+1925 duvBuffer, duvDesc,\n+1926 dvvBuffer, dvvDesc,\n+1927 numPatchCoords, patchCoords,\n+1928 patchTable, fvarChannel);\n+1929 } else {\n+1930 // Create an instance on demand (slow)\n+1931 (void)deviceContext; // unused\n+1932 instance = _\bC_\br_\be_\ba_\bt_\be(srcDesc, dstDesc,\n+1933 duDesc, dvDesc,\n+1934 duuDesc, duvDesc, dvvDesc);\n+1935 if (instance) {\n+1936 bool r = instance->_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1937 srcBuffer, srcDesc,\n+1938 dstBuffer, dstDesc,\n+1939 duBuffer, duDesc,\n+1940 dvBuffer, dvDesc,\n+1941 duuBuffer, duuDesc,\n+1942 duvBuffer, duvDesc,\n+1943 dvvBuffer, dvvDesc,\n+1944 numPatchCoords, patchCoords,\n+1945 patchTable, fvarChannel);\n+1946 delete instance;\n+1947 return r;\n+1948 }\n+1949 return false;\n+1950 }\n+1951 }\n+1952\n+2009 template \n+_\b2_\b0_\b1_\b1 bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+2012 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+2013 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+2014 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+2015 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+2016 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+2017 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+2018 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+2019 int numPatchCoords,\n+2020 PATCHCOORD_BUFFER *patchCoords,\n+2021 PATCH_TABLE *patchTable,\n+2022 int fvarChannel = 0) const {\n+2023\n+2024 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindVBO(), srcDesc,\n+2025 dstBuffer->BindVBO(), dstDesc,\n+2026 duBuffer->BindVBO(), duDesc,\n+2027 dvBuffer->BindVBO(), dvDesc,\n+2028 duuBuffer->BindVBO(), duuDesc,\n+2029 duvBuffer->BindVBO(), duvDesc,\n+2030 dvvBuffer->BindVBO(), dvvDesc,\n+2031 numPatchCoords,\n+2032 patchCoords->BindVBO(),\n+2033 patchTable->GetFVarPatchArrays(fvarChannel),\n+2034 patchTable->GetFVarPatchIndexBuffer(fvarChannel),\n+2035 patchTable->GetFVarPatchParamBuffer(fvarChannel));\n+2036 }\n+2037\n+2043\n+_\b2_\b0_\b4_\b6 bool _\bC_\bo_\bm_\bp_\bi_\bl_\be(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+2047 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+2048 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc = _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+2049 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc = _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+2050 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc = _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+2051 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc = _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+2052 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc = _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br());\n+2053\n+_\b2_\b0_\b5_\b5 static void _\bS_\by_\bn_\bc_\bh_\br_\bo_\bn_\bi_\bz_\be(void *deviceContext);\n+2056\n+2057private:\n+2058 struct _StencilKernel {\n+2059 _StencilKernel();\n+2060 ~_StencilKernel();\n+2061 bool Compile(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+2062 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+2063 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+2064 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+2065 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+2066 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+2067 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+2068 int workGroupSize);\n+2069 GLuint program;\n+2070 GLuint uniformStart;\n+2071 GLuint uniformEnd;\n+2072 GLuint uniformSrcOffset;\n+2073 GLuint uniformDstOffset;\n+2074 GLuint uniformDuDesc;\n+2075 GLuint uniformDvDesc;\n+2076 GLuint uniformDuuDesc;\n+2077 GLuint uniformDuvDesc;\n+2078 GLuint uniformDvvDesc;\n+2079 } _stencilKernel;\n+2080\n+2081 struct _PatchKernel {\n+2082 _PatchKernel();\n+2083 ~_PatchKernel();\n+2084 bool Compile(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+2085 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+2086 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+2087 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+2088 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+2089 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+2090 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+2091 int workGroupSize);\n+2092 GLuint program;\n+2093 GLuint uniformSrcOffset;\n+2094 GLuint uniformDstOffset;\n+2095 GLuint uniformPatchArray;\n+2096 GLuint uniformDuDesc;\n+2097 GLuint uniformDvDesc;\n+2098 GLuint uniformDuuDesc;\n+2099 GLuint uniformDuvDesc;\n+2100 GLuint uniformDvvDesc;\n+2101 } _patchKernel;\n+2102\n+2103 int _workGroupSize;\n+2104 GLuint _patchArraysSSBO;\n+2105};\n+2106\n+2107} // end namespace Osd\n+2108\n+2109} // end namespace OPENSUBDIV_VERSION\n+2110using namespace OPENSUBDIV_VERSION;\n+2111\n+2112} // end namespace OpenSubdiv\n+2113\n+2114\n+2115#endif // OPENSUBDIV3_OSD_GL_COMPUTE_EVALUATOR_H\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by_\bV_\be_\bc_\bt_\bo_\br\n std::vector< PatchArray > PatchArrayVector\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b1_\b3_\b2\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n Stencil table class wrapping the template for compatibility.\n@@ -1100,372 +1038,345 @@\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n Limit stencil table class wrapping the template for compatibility.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b8_\b3\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n BufferDescriptor is a struct which describes buffer elements in interleaved\n data buffers....\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bb_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO\n-GL TextureBuffer stencil table.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b5_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bS_\bi_\bz_\be_\bs_\bT_\be_\bx_\bt_\bu_\br_\be\n-GLuint GetSizesTexture() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static GLStencilTableTBO * Create(Far::StencilTable const *stencilTable, void\n-*deviceContext=NULL)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b5_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bD_\bv_\bv_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be\n-GLuint GetDvvWeightsTexture() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b8_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO\n+GL stencil table (Shader Storage buffer)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b5_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bD_\bu_\bv_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br\n+GLuint GetDuvWeightsBuffer() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br\n+GLuint GetWeightsBuffer() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO\n+GLStencilTableSSBO(Far::LimitStencilTable const *limitStencilTable)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bD_\bu_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br\n+GLuint GetDuWeightsBuffer() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\b~_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO\n+~GLStencilTableSSBO()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n int GetNumStencils() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b8_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bD_\bu_\bv_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be\n-GLuint GetDuvWeightsTexture() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bD_\bu_\bu_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be\n-GLuint GetDuuWeightsTexture() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bT_\be_\bx_\bt_\bu_\br_\be\n-GLuint GetIndicesTexture() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\b~_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO\n-~GLStencilTableTBO()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO\n-GLStencilTableTBO(Far::StencilTable const *stencilTable)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO\n-GLStencilTableTBO(Far::LimitStencilTable const *limitStencilTable)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be\n-GLuint GetWeightsTexture() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static GLStencilTableTBO * Create(Far::LimitStencilTable const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bI_\bn_\bd_\bi_\bc_\be_\bs_\bB_\bu_\bf_\bf_\be_\br\n+GLuint GetIndicesBuffer() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br\n+GLuint GetOffsetsBuffer() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO\n+GLStencilTableSSBO(Far::StencilTable const *stencilTable)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bD_\bv_\bv_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br\n+GLuint GetDvvWeightsBuffer() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bS_\bi_\bz_\be_\bs_\bB_\bu_\bf_\bf_\be_\br\n+GLuint GetSizesBuffer() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static GLStencilTableSSBO * Create(Far::LimitStencilTable const\n *limitStencilTable, void *deviceContext=NULL)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b6_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bD_\bv_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be\n-GLuint GetDvWeightsTexture() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bD_\bu_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be\n-GLuint GetDuWeightsTexture() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bT_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be\n-GLuint GetOffsetsTexture() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b9_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b5_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bD_\bu_\bu_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br\n+GLuint GetDuuWeightsBuffer() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bG_\be_\bt_\bD_\bv_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bB_\bu_\bf_\bf_\be_\br\n+GLuint GetDvWeightsBuffer() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bS_\bS_\bB_\bO_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static GLStencilTableSSBO * Create(Far::StencilTable const *stencilTable, void\n+*deviceContext=NULL)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b5_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b9_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords,\n PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const\n Generic limit eval function. This function has a same signature as other device\n kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b2_\b8_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc,\n-BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc,\n-BufferDescriptor const &dvDesc, bool interleavedDerivativeBuffers=false)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b2_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b2_\b1_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n+static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor\n+const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,\n+DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n+BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER\n+*patchCoords, PATCH_TABLE *patchTable, int fvarChannel, GLComputeEvaluator\n+const *instance, void *deviceContext=NULL)\n+Generic limit eval function. This function has a same signature as other device\n+kernels have so that ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b7_\b3_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer,\n BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const\n &dvDesc, STENCIL_TABLE const *stencilTable) const\n Generic stencil function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b5_\b0_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n-GLXFBEvaluator(bool interleavedDerivativeBuffers=false)\n-Constructor.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b4_\b3_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n+static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const\n+&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int\n+numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable,\n+GLComputeEvaluator const *instance, void *deviceContext=NULL)\n+Generic limit eval function. This function has a same signature as other device\n+kernels have so that ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b1_\b5_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n+static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor\n+const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int\n+numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int\n+fvarChannel, GLComputeEvaluator const *instance, void *deviceContext=NULL)\n+Generic limit eval function. This function has a same signature as other device\n+kernels have so that ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b6_\b0_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer,\n BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const\n &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER\n *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer,\n BufferDescriptor const &dvvDesc, STENCIL_TABLE const *stencilTable) const\n Generic stencil function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b5_\b7_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bI_\bn_\bs_\bt_\ba_\bn_\bt_\bi_\ba_\bt_\ba_\bb_\bl_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b5_\b0_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n+static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const\n+&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n+*duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n+BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER\n+*patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator const *instance, void\n+*deviceContext=NULL)\n+Generic limit eval function. This function has a same signature as other device\n+kernels have so that ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b2_\b7_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bI_\bn_\bs_\bt_\ba_\bn_\bt_\bi_\ba_\bt_\ba_\bb_\bl_\be\n bool Instantiatable\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b0_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b9_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint\n dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor\n const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, GLuint\n duuBuffer, BufferDescriptor const &duuDesc, GLuint duvBuffer, BufferDescriptor\n const &duvDesc, GLuint dvvBuffer, BufferDescriptor const &dvvDesc, int\n numPatchCoords, GLuint patchCoordsBuffer, const PatchArrayVector &patchArrays,\n GLuint patchIndexBuffer, GLuint patchParamsBuffer) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n-static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const\n-&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n-*duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n-BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const\n-&duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER\n-*dvvBuffer, BufferDescriptor const &dvvDesc, STENCIL_TABLE const *stencilTable,\n-GLXFBEvaluator const *instance, void *deviceContext=NULL)\n-Generic static stencil function. This function has a same signature as other\n-device kernels have so t...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b3_\b9_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\b~_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n+~GLComputeEvaluator()\n+Destructor. note that the GL context must be made current.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer,\n BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const\n &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER\n *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer,\n BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER\n *patchCoords, PATCH_TABLE *patchTable) const\n Generic limit eval function with derivatives. This function has a same\n signature as other device kern...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b1_\b4_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc,\n-BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc,\n-BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc,\n-BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, bool\n-interleavedDerivativeBuffers=false)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b7_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc,\n-BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc,\n-BufferDescriptor const &dvDesc, void *deviceContext)\n-Specialization to allow creation without a device context.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b1_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b0_\b7_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const\n &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n BufferDescriptor const &dvDesc, STENCIL_TABLE const *stencilTable,\n-GLXFBEvaluator const *instance, void *deviceContext=NULL)\n+GLComputeEvaluator const *instance, void *deviceContext=NULL)\n Generic static stencil function. This function has a same signature as other\n device kernels have so t...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b3_\b0_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n-static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const\n-&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n-*duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n-BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER\n-*patchCoords, PATCH_TABLE *patchTable, GLXFBEvaluator const *instance, void\n-*deviceContext=NULL)\n-Generic limit eval function. This function has a same signature as other device\n-kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b3_\b5_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b2_\b3_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint\n dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor\n const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, GLuint\n duuBuffer, BufferDescriptor const &duuDesc, GLuint duvBuffer, BufferDescriptor\n const &duvDesc, GLuint dvvBuffer, BufferDescriptor const &dvvDesc, GLuint\n sizesBuffer, GLuint offsetsBuffer, GLuint indicesBuffer, GLuint weightsBuffer,\n GLuint duWeightsBuffer, GLuint dvWeightsBuffer, GLuint duuWeightsBuffer, GLuint\n duvWeightsBuffer, GLuint dvvWeightsBuffer, int start, int end) const\n-Dispatch the GLSL XFB kernel on on GPU asynchronously returns false if the\n-kernel hasn't been compile...\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+Dispatch the GLSL compute kernel on GPU asynchronously returns false if the\n+kernel hasn't been compil...\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const\n+&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE\n+const *stencilTable, GLComputeEvaluator const *instance, void\n+*deviceContext=NULL)\n+Generic static stencil function. This function has a same signature as other\n+device kernels have so t...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b6_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n+static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const\n+&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n+*duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n+BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const\n+&duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER\n+*dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords,\n+PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator\n+const *instance, void *deviceContext=NULL)\n+Generic limit eval function. This function has a same signature as other device\n+kernels have so that ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b4_\b3_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer,\n BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const\n &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE\n-*patchTable, GLXFBEvaluator const *instance, void *deviceContext=NULL)\n+*patchTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)\n Generic limit eval function. This function has a same signature as other device\n kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b8_\b4_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc,\n-BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc,\n-BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc,\n-BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc,\n-DEVICE_CONTEXT deviceContext)\n-Generic creator template.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b4_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc,\n-BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc,\n-BufferDescriptor const &dvDesc, DEVICE_CONTEXT deviceContext)\n-Generic creator template.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b0_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bS_\by_\bn_\bc_\bh_\br_\bo_\bn_\bi_\bz_\be\n-static void Synchronize(void *kernel)\n-Wait the dispatched kernel finishes.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n-static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const\n-&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int\n-numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable,\n-GLXFBEvaluator const *instance, void *deviceContext=NULL)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b6_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n+static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor\n+const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,\n+DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n+BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const\n+&duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER\n+*dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords,\n+PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel,\n+GLComputeEvaluator const *instance, void *deviceContext=NULL)\n Generic limit eval function. This function has a same signature as other device\n kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b2_\b2_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b9_\b0_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer,\n BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const\n &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER\n *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer,\n BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER\n *patchCoords, PATCH_TABLE *patchTable) const\n Generic limit eval function. This function has a same signature as other device\n kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b6_\b1_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b5_\b4_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const\n &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER\n *patchCoords, PATCH_TABLE *patchTable, int fvarChannel=0) const\n Generic limit eval function. This function has a same signature as other device\n kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b8_\b8_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n-static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n-DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords,\n-PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLXFBEvaluator const\n-*instance, void *deviceContext=NULL)\n-Generic limit eval function. This function has a same signature as other device\n-kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b6_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n-static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor\n-const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,\n-DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n-BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER\n-*patchCoords, PATCH_TABLE *patchTable, int fvarChannel, GLXFBEvaluator const\n-*instance, void *deviceContext=NULL)\n-Generic limit eval function. This function has a same signature as other device\n-kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b8_\b0_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b8_\b1_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords,\n PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const\n Generic limit eval function. This function has a same signature as other device\n kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b0_\b1_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n-static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n-DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer,\n-BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const\n-&dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER\n-*duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer,\n-BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER\n-*patchCoords, PATCH_TABLE *patchTable, GLXFBEvaluator const *instance, void\n-*deviceContext=NULL)\n-Generic limit eval function. This function has a same signature as other device\n-kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b9_\b4_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b9_\b4_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n+GLComputeEvaluator()\n+Constructor.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer,\n BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const\n &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE\n *patchTable) const\n Generic limit eval function with derivatives. This function has a same\n signature as other device kern...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b0_\b7_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b9_\b9_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n+DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords,\n+PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator\n+const *instance, void *deviceContext=NULL)\n+Generic limit eval function. This function has a same signature as other device\n+kernels have so that ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b6_\b9_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const\n *stencilTable) const\n Generic stencil function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b4_\b5_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b3_\b8_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint\n dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor\n const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, int\n numPatchCoords, GLuint patchCoordsBuffer, const PatchArrayVector &patchArrays,\n GLuint patchIndexBuffer, GLuint patchParamsBuffer) const\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc,\n-BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc,\n-BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc,\n-BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, void\n-*deviceContext)\n-Specialization to allow creation without a device context.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b5_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const\n &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const\n &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER\n *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords,\n PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel=0)\n const\n Generic limit eval function. This function has a same signature as other device\n kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b2_\b0_\b8_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n-static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const\n-&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n-*duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n-BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const\n-&duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER\n-*dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords,\n-PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLXFBEvaluator const\n-*instance, void *deviceContext=NULL)\n-Generic limit eval function. This function has a same signature as other device\n-kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b5_\b1_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b2_\b0_\b1_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static GLComputeEvaluator * Create(BufferDescriptor const &srcDesc,\n+BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc,\n+BufferDescriptor const &dvDesc, void *deviceContext=NULL)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b9_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint\n dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor\n const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, GLuint\n sizesBuffer, GLuint offsetsBuffer, GLuint indicesBuffer, GLuint weightsBuffer,\n GLuint duWeightsBuffer, GLuint dvWeightsBuffer, int start, int end) const\n-Dispatch the GLSL XFB kernel on on GPU asynchronously returns false if the\n-kernel hasn't been compile...\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n-static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor\n-const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int\n-numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int\n-fvarChannel, GLXFBEvaluator const *instance, void *deviceContext=NULL)\n-Generic limit eval function. This function has a same signature as other device\n-kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b6_\b7_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+Dispatch the GLSL compute kernel on GPU asynchronously returns false if the\n+kernel hasn't been compil...\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const\n-&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE\n-const *stencilTable, GLXFBEvaluator const *instance, void *deviceContext=NULL)\n+&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n+*duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n+BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const\n+&duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER\n+*dvvBuffer, BufferDescriptor const &dvvDesc, STENCIL_TABLE const *stencilTable,\n+GLComputeEvaluator const *instance, void *deviceContext=NULL)\n Generic static stencil function. This function has a same signature as other\n device kernels have so t...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b2_\b3_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\b~_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n-~GLXFBEvaluator()\n-Destructor. note that the GL context must be made current.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bm_\bp_\bi_\bl_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b3_\b2_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bS_\by_\bn_\bc_\bh_\br_\bo_\bn_\bi_\bz_\be\n+static void Synchronize(void *deviceContext)\n+Wait the dispatched kernel finishes.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bm_\bp_\bi_\bl_\be\n bool Compile(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc,\n BufferDescriptor const &duDesc=BufferDescriptor(), BufferDescriptor const\n &dvDesc=BufferDescriptor(), BufferDescriptor const &duuDesc=BufferDescriptor(),\n BufferDescriptor const &duvDesc=BufferDescriptor(), BufferDescriptor const\n &dvvDesc=BufferDescriptor())\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer,\n BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const\n &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE\n *patchTable) const\n Generic limit eval function. This function has a same signature as other device\n kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b4_\b2_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b3_\b5_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static GLComputeEvaluator * Create(BufferDescriptor const &srcDesc,\n+BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc,\n+BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc,\n+BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, void\n+*deviceContext=NULL)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b1_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const\n &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int\n numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int\n fvarChannel=0) const\n Generic limit eval function. This function has a same signature as other device\n kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b7_\b4_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n-static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor\n-const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,\n-DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n-BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const\n-&duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER\n-*dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords,\n-PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel,\n-GLXFBEvaluator const *instance, void *deviceContext=NULL)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b6_\b6_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n+DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer,\n+BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const\n+&dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER\n+*duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer,\n+BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER\n+*patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator const *instance, void\n+*deviceContext=NULL)\n Generic limit eval function. This function has a same signature as other device\n kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b9_\b7_\b6\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b8_\b7_\b0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bg_\bl_\bX_\bF_\bB_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh\n+ * _\bg_\bl_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00854.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00854.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/glMesh.h File Reference\n+OpenSubdiv: opensubdiv/osd/glslPatchShaderSource.h File Reference\n \n \n \n \n \n \n \n@@ -88,43 +88,43 @@\n \n \n \n \n \n
    \n \n-
    glMesh.h File Reference
    \n+Classes |\n+Namespaces
    \n+
    glslPatchShaderSource.h File Reference
    \n \n
    \n
    #include "../version.h"
    \n-#include "../osd/mesh.h"
    \n-#include "../osd/glPatchTable.h"
    \n+#include <string>
    \n+#include "../far/patchDescriptor.h"
    \n
    \n

    Go to the source code of this file.

    \n \n+\n+\n+\n+

    \n+Classes

    class  GLSLPatchShaderSource
     
    \n \n \n \n \n \n \n \n-

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
     
    \n-\n-\n-\n

    \n-Typedefs

    typedef MeshInterface< GLPatchTableGLMeshInterface
     
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,24 +1,24 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-glMesh.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+glslPatchShaderSource.h File Reference\n #include \"../version.h\"\n-#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bm_\be_\bs_\bh_\b._\bh\"\n-#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bg_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\"\n+#include \n+#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bG_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-typedef _\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be< _\bG_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be >\u00a0 _\bG_\bL_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n-\u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bg_\bl_\bM_\be_\bs_\bh_\b._\bh\n+ * _\bg_\bl_\bs_\bl_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00854.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00854.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00854 = [\n- [\"GLMeshInterface\", \"a00854.html#a7f9cf2b729178bdbb847fc4afd91af9e\", null]\n+ [\"GLSLPatchShaderSource\", \"a01233.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00854_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00854_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/glMesh.h Source File\n+OpenSubdiv: opensubdiv/osd/glslPatchShaderSource.h Source File\n \n \n \n \n \n \n \n@@ -92,19 +92,19 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    glMesh.h
    \n+
    glslPatchShaderSource.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n-
    2// Copyright 2013 Pixar
    \n+
    2// Copyright 2015 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n
    6// compliance with the Apache License and the following modification to it:
    \n
    7// Section 6. Trademarks. is deleted and replaced with:
    \n
    8//
    \n
    9// 6. Trademarks. This License does not grant permission to use the trade
    \n@@ -119,45 +119,64 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_GL_MESH_H
    \n-
    26#define OPENSUBDIV3_OSD_GL_MESH_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_GLSL_PATCH_SHADER_SOURCE_H
    \n+
    26#define OPENSUBDIV3_OSD_GLSL_PATCH_SHADER_SOURCE_H
    \n
    27
    \n
    28#include "../version.h"
    \n-
    29
    \n-
    30#include "../osd/mesh.h"
    \n-
    31#include "../osd/glPatchTable.h"
    \n-
    32
    \n-
    33namespace OpenSubdiv {
    \n-
    34namespace OPENSUBDIV_VERSION {
    \n-
    35
    \n-
    36namespace Osd {
    \n-
    37
    \n-\n-
    39
    \n+
    29#include <string>
    \n+
    30#include "../far/patchDescriptor.h"
    \n+
    31
    \n+
    32namespace OpenSubdiv {
    \n+
    33namespace OPENSUBDIV_VERSION {
    \n+
    34
    \n+
    35namespace Osd {
    \n+
    36
    \n+
    \n+\n+
    38public:
    \n+
    39 static std::string GetCommonShaderSource();
    \n
    40
    \n-
    41} // end namespace Osd
    \n+
    41 static std::string GetPatchBasisShaderSource();
    \n
    42
    \n-
    43} // end namespace OPENSUBDIV_VERSION
    \n-
    44using namespace OPENSUBDIV_VERSION;
    \n+
    43 static std::string GetVertexShaderSource(
    \n+\n
    45
    \n-
    46} // end namespace OpenSubdiv
    \n-
    47
    \n-
    48#endif // OPENSUBDIV3_OSD_GL_MESH_H
    \n-\n-
    MeshInterface< GLPatchTable > GLMeshInterface
    Definition glMesh.h:38
    \n-\n+
    46 static std::string GetTessControlShaderSource(
    \n+\n+
    48
    \n+
    49 static std::string GetTessEvalShaderSource(
    \n+\n+
    51};
    \n+
    \n+
    52
    \n+
    53} // end namespace Osd
    \n+
    54
    \n+
    55} // end namespace OPENSUBDIV_VERSION
    \n+
    56using namespace OPENSUBDIV_VERSION;
    \n+
    57
    \n+
    58} // end namespace OpenSubdiv
    \n+
    59
    \n+
    60#endif // OPENSUBDIV3_OSD_GLSL_PATCH_SHADER_SOURCE
    \n+\n+\n+\n+
    static std::string GetVertexShaderSource(Far::PatchDescriptor::Type type)
    \n+
    static std::string GetTessEvalShaderSource(Far::PatchDescriptor::Type type)
    \n+\n+\n+
    static std::string GetTessControlShaderSource(Far::PatchDescriptor::Type type)
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,15 +1,15 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-glMesh.h\n+glslPatchShaderSource.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n-2// Copyright 2013 Pixar\n+2// Copyright 2015 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n 7// Section 6. Trademarks. is deleted and replaced with:\n 8//\n 9// 6. Trademarks. This License does not grant permission to use the trade\n@@ -24,42 +24,69 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_GL_MESH_H\n-26#define OPENSUBDIV3_OSD_GL_MESH_H\n+25#ifndef OPENSUBDIV3_OSD_GLSL_PATCH_SHADER_SOURCE_H\n+26#define OPENSUBDIV3_OSD_GLSL_PATCH_SHADER_SOURCE_H\n 27\n 28#include \"../version.h\"\n-29\n-30#include \"../osd/mesh.h\"\n-31#include \"../osd/glPatchTable.h\"\n-32\n-33namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-34namespace OPENSUBDIV_VERSION {\n-35\n-36namespace Osd {\n-37\n-_\b3_\b8typedef _\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b<_\bG_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b> _\bG_\bL_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be;\n-39\n+29#include \n+30#include \"../far/patchDescriptor.h\"\n+31\n+32namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+33namespace OPENSUBDIV_VERSION {\n+34\n+35namespace Osd {\n+36\n+_\b3_\b7class _\bG_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be {\n+38public:\n+_\b3_\b9 static std::string _\bG_\be_\bt_\bC_\bo_\bm_\bm_\bo_\bn_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be();\n 40\n-41} // end namespace Osd\n+_\b4_\b1 static std::string _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bB_\ba_\bs_\bi_\bs_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be();\n 42\n-43} // end namespace OPENSUBDIV_VERSION\n-44using namespace OPENSUBDIV_VERSION;\n+_\b4_\b3 static std::string _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be(\n+44 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type);\n 45\n-46} // end namespace OpenSubdiv\n-47\n-48#endif // OPENSUBDIV3_OSD_GL_MESH_H\n+_\b4_\b6 static std::string _\bG_\be_\bt_\bT_\be_\bs_\bs_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be(\n+47 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type);\n+48\n+_\b4_\b9 static std::string _\bG_\be_\bt_\bT_\be_\bs_\bs_\bE_\bv_\ba_\bl_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be(\n+50 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type);\n+51};\n+52\n+53} // end namespace Osd\n+54\n+55} // end namespace OPENSUBDIV_VERSION\n+56using namespace OPENSUBDIV_VERSION;\n+57\n+58} // end namespace OpenSubdiv\n+59\n+60#endif // OPENSUBDIV3_OSD_GLSL_PATCH_SHADER_SOURCE\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n-MeshInterface< GLPatchTable > GLMeshInterface\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bM_\be_\bs_\bh_\b._\bh_\b:_\b3_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b6_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be\n+Type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bs_\bl_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b._\bh_\b:_\b3_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n+_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n+static std::string GetVertexShaderSource(Far::PatchDescriptor::Type type)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n+_\bG_\be_\bt_\bT_\be_\bs_\bs_\bE_\bv_\ba_\bl_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n+static std::string GetTessEvalShaderSource(Far::PatchDescriptor::Type type)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n+_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bB_\ba_\bs_\bi_\bs_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n+static std::string GetPatchBasisShaderSource()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n+_\bG_\be_\bt_\bC_\bo_\bm_\bm_\bo_\bn_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n+static std::string GetCommonShaderSource()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n+_\bG_\be_\bt_\bT_\be_\bs_\bs_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n+static std::string GetTessControlShaderSource(Far::PatchDescriptor::Type type)\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bg_\bl_\bM_\be_\bs_\bh_\b._\bh\n+ * _\bg_\bl_\bs_\bl_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00857.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00857.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/glVertexBuffer.h File Reference\n+OpenSubdiv: opensubdiv/osd/glMesh.h File Reference\n \n \n \n \n \n \n \n@@ -88,44 +88,43 @@\n \n \n \n \n \n
    \n \n-
    glVertexBuffer.h File Reference
    \n+Namespaces |\n+Typedefs
    \n+
    glMesh.h File Reference
    \n \n
    \n
    #include "../version.h"
    \n-#include "../osd/opengl.h"
    \n-#include <cstddef>
    \n+#include "../osd/mesh.h"
    \n+#include "../osd/glPatchTable.h"
    \n
    \n

    Go to the source code of this file.

    \n \n-\n-\n-\n-\n-

    \n-Classes

    class  GLVertexBuffer
     Concrete vertex buffer class for GLSL subdivision and OpenGL drawing. More...
     
    \n \n \n \n \n \n \n \n+

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
     
    \n+\n+\n+\n

    \n+Typedefs

    typedef MeshInterface< GLPatchTableGLMeshInterface
     
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,26 +1,24 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-glVertexBuffer.h File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+glMesh.h File Reference\n #include \"../version.h\"\n-#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bo_\bp_\be_\bn_\bg_\bl_\b._\bh\"\n-#include \n+#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bm_\be_\bs_\bh_\b._\bh\"\n+#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bg_\bl_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-\u00a0 Concrete vertex buffer class for GLSL subdivision and OpenGL drawing.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+typedef _\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be< _\bG_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be >\u00a0 _\bG_\bL_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n+\u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bg_\bl_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\n+ * _\bg_\bl_\bM_\be_\bs_\bh_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00857.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00857.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00857 = [\n- [\"GLVertexBuffer\", \"a01237.html\", \"a01237\"]\n+ [\"GLMeshInterface\", \"a00857.html#a7f9cf2b729178bdbb847fc4afd91af9e\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00857_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00857_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/glVertexBuffer.h Source File\n+OpenSubdiv: opensubdiv/osd/glMesh.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    glVertexBuffer.h
    \n+
    glMesh.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n
    2// Copyright 2013 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n@@ -119,78 +119,45 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_GL_VERTEX_BUFFER_H
    \n-
    26#define OPENSUBDIV3_OSD_GL_VERTEX_BUFFER_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_GL_MESH_H
    \n+
    26#define OPENSUBDIV3_OSD_GL_MESH_H
    \n
    27
    \n
    28#include "../version.h"
    \n
    29
    \n-
    30#include "../osd/opengl.h"
    \n-
    31#include <cstddef>
    \n+
    30#include "../osd/mesh.h"
    \n+
    31#include "../osd/glPatchTable.h"
    \n
    32
    \n
    33namespace OpenSubdiv {
    \n
    34namespace OPENSUBDIV_VERSION {
    \n
    35
    \n
    36namespace Osd {
    \n
    37
    \n-
    \n-\n-
    45public:
    \n-
    47 static GLVertexBuffer * Create(int numElements, int numVertices,
    \n-
    48 void *deviceContext = NULL);
    \n-
    49
    \n-\n-
    52
    \n-
    55 void UpdateData(const float *src, int startVertex, int numVertices,
    \n-
    56 void *deviceContext = NULL);
    \n-
    57
    \n-
    59 int GetNumElements() const;
    \n-
    60
    \n-
    62 int GetNumVertices() const;
    \n-
    63
    \n-
    65 GLuint BindVBO(void *deviceContext = NULL);
    \n-
    66
    \n-
    67protected:
    \n-
    69 GLVertexBuffer(int numElements, int numVertices);
    \n-
    70
    \n-
    73 bool allocate();
    \n-
    74
    \n-
    75private:
    \n-
    76 int _numElements;
    \n-
    77 int _numVertices;
    \n-
    78 GLuint _vbo;
    \n-
    79};
    \n-
    \n-
    80
    \n-
    81} // end namespace Osd
    \n-
    82
    \n-
    83} // end namespace OPENSUBDIV_VERSION
    \n-
    84using namespace OPENSUBDIV_VERSION;
    \n-
    85
    \n-
    86} // end namespace OpenSubdiv
    \n-
    87
    \n-
    88#endif // OPENSUBDIV3_OSD_GL_VERTEX_BUFFER_H
    \n-\n-
    Concrete vertex buffer class for GLSL subdivision and OpenGL drawing.
    \n-\n-
    GLuint BindVBO(void *deviceContext=NULL)
    Returns the GL buffer object.
    \n-
    int GetNumElements() const
    Returns how many elements defined in this vertex buffer.
    \n-
    void UpdateData(const float *src, int startVertex, int numVertices, void *deviceContext=NULL)
    \n-
    GLVertexBuffer(int numElements, int numVertices)
    Constructor.
    \n-
    int GetNumVertices() const
    Returns how many vertices allocated in this vertex buffer.
    \n-
    static GLVertexBuffer * Create(int numElements, int numVertices, void *deviceContext=NULL)
    Creator. Returns NULL if error.
    \n-\n+\n+
    39
    \n+
    40
    \n+
    41} // end namespace Osd
    \n+
    42
    \n+
    43} // end namespace OPENSUBDIV_VERSION
    \n+
    44using namespace OPENSUBDIV_VERSION;
    \n+
    45
    \n+
    46} // end namespace OpenSubdiv
    \n+
    47
    \n+
    48#endif // OPENSUBDIV3_OSD_GL_MESH_H
    \n+\n+
    MeshInterface< GLPatchTable > GLMeshInterface
    Definition glMesh.h:38
    \n+\n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-glVertexBuffer.h\n+glMesh.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2013 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -24,88 +24,42 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_GL_VERTEX_BUFFER_H\n-26#define OPENSUBDIV3_OSD_GL_VERTEX_BUFFER_H\n+25#ifndef OPENSUBDIV3_OSD_GL_MESH_H\n+26#define OPENSUBDIV3_OSD_GL_MESH_H\n 27\n 28#include \"../version.h\"\n 29\n-30#include \"../osd/opengl.h\"\n-31#include \n+30#include \"../osd/mesh.h\"\n+31#include \"../osd/glPatchTable.h\"\n 32\n 33namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n 34namespace OPENSUBDIV_VERSION {\n 35\n 36namespace Osd {\n 37\n-_\b4_\b4class _\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br {\n-45public:\n-_\b4_\b7 static _\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br * _\bC_\br_\be_\ba_\bt_\be(int numElements, int numVertices,\n-48 void *deviceContext = NULL);\n-49\n-_\b5_\b1 _\b~_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br();\n-52\n-_\b5_\b5 void _\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba(const float *src, int startVertex, int numVertices,\n-56 void *deviceContext = NULL);\n-57\n-_\b5_\b9 int _\bG_\be_\bt_\bN_\bu_\bm_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs() const;\n-60\n-_\b6_\b2 int _\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const;\n-63\n-_\b6_\b5 GLuint _\bB_\bi_\bn_\bd_\bV_\bB_\bO(void *deviceContext = NULL);\n-66\n-67protected:\n-_\b6_\b9 _\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(int numElements, int numVertices);\n-70\n-_\b7_\b3 bool _\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be();\n-74\n-75private:\n-76 int _numElements;\n-77 int _numVertices;\n-78 GLuint _vbo;\n-79};\n-80\n-81} // end namespace Osd\n-82\n-83} // end namespace OPENSUBDIV_VERSION\n-84using namespace OPENSUBDIV_VERSION;\n-85\n-86} // end namespace OpenSubdiv\n-87\n-88#endif // OPENSUBDIV3_OSD_GL_VERTEX_BUFFER_H\n+_\b3_\b8typedef _\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b<_\bG_\bL_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b> _\bG_\bL_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be;\n+39\n+40\n+41} // end namespace Osd\n+42\n+43} // end namespace OPENSUBDIV_VERSION\n+44using namespace OPENSUBDIV_VERSION;\n+45\n+46} // end namespace OpenSubdiv\n+47\n+48#endif // OPENSUBDIV3_OSD_GL_MESH_H\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-Concrete vertex buffer class for GLSL subdivision and OpenGL drawing.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh_\b:_\b4_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\b~_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-~GLVertexBuffer()\n-Destructor.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bB_\bi_\bn_\bd_\bV_\bB_\bO\n-GLuint BindVBO(void *deviceContext=NULL)\n-Returns the GL buffer object.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n-int GetNumElements() const\n-Returns how many elements defined in this vertex buffer.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba\n-void UpdateData(const float *src, int startVertex, int numVertices, void\n-*deviceContext=NULL)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-GLVertexBuffer(int numElements, int numVertices)\n-Constructor.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-int GetNumVertices() const\n-Returns how many vertices allocated in this vertex buffer.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static GLVertexBuffer * Create(int numElements, int numVertices, void\n-*deviceContext=NULL)\n-Creator. Returns NULL if error.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be\n-bool allocate()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n+MeshInterface< GLPatchTable > GLMeshInterface\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bM_\be_\bs_\bh_\b._\bh_\b:_\b3_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b6_\b8\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bg_\bl_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\n+ * _\bg_\bl_\bM_\be_\bs_\bh_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00860.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00860.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/glslPatchShaderSource.h File Reference\n+OpenSubdiv: opensubdiv/osd/glVertexBuffer.h File Reference\n \n \n \n \n \n \n \n@@ -90,26 +90,27 @@\n \n \n \n
    \n \n-
    glslPatchShaderSource.h File Reference
    \n+
    glVertexBuffer.h File Reference
    \n
    \n
    \n
    #include "../version.h"
    \n-#include <string>
    \n-#include "../far/patchDescriptor.h"
    \n+#include "../osd/opengl.h"
    \n+#include <cstddef>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n+\n+\n \n

    \n Classes

    class  GLSLPatchShaderSource
    class  GLVertexBuffer
     Concrete vertex buffer class for GLSL subdivision and OpenGL drawing. More...
     
    \n \n \n \n \n@@ -118,13 +119,13 @@\n \n

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,24 +1,26 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-glslPatchShaderSource.h File Reference\n+glVertexBuffer.h File Reference\n #include \"../version.h\"\n-#include \n-#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\"\n+#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bo_\bp_\be_\bn_\bg_\bl_\b._\bh\"\n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bG_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n+class \u00a0 _\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+\u00a0 Concrete vertex buffer class for GLSL subdivision and OpenGL drawing.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bg_\bl_\bs_\bl_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b._\bh\n+ * _\bg_\bl_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00860.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00860.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00860 = [\n- [\"GLSLPatchShaderSource\", \"a01233.html\", null]\n+ [\"GLVertexBuffer\", \"a01237.html\", \"a01237\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00860_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00860_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/glslPatchShaderSource.h Source File\n+OpenSubdiv: opensubdiv/osd/glVertexBuffer.h Source File\n \n \n \n \n \n \n \n@@ -92,19 +92,19 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    glslPatchShaderSource.h
    \n+
    glVertexBuffer.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n-
    2// Copyright 2015 Pixar
    \n+
    2// Copyright 2013 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n
    6// compliance with the Apache License and the following modification to it:
    \n
    7// Section 6. Trademarks. is deleted and replaced with:
    \n
    8//
    \n
    9// 6. Trademarks. This License does not grant permission to use the trade
    \n@@ -119,64 +119,78 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_GLSL_PATCH_SHADER_SOURCE_H
    \n-
    26#define OPENSUBDIV3_OSD_GLSL_PATCH_SHADER_SOURCE_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_GL_VERTEX_BUFFER_H
    \n+
    26#define OPENSUBDIV3_OSD_GL_VERTEX_BUFFER_H
    \n
    27
    \n
    28#include "../version.h"
    \n-
    29#include <string>
    \n-
    30#include "../far/patchDescriptor.h"
    \n-
    31
    \n-
    32namespace OpenSubdiv {
    \n-
    33namespace OPENSUBDIV_VERSION {
    \n-
    34
    \n-
    35namespace Osd {
    \n-
    36
    \n-
    \n-\n-
    38public:
    \n-
    39 static std::string GetCommonShaderSource();
    \n-
    40
    \n-
    41 static std::string GetPatchBasisShaderSource();
    \n-
    42
    \n-
    43 static std::string GetVertexShaderSource(
    \n-\n-
    45
    \n-
    46 static std::string GetTessControlShaderSource(
    \n-\n-
    48
    \n-
    49 static std::string GetTessEvalShaderSource(
    \n-\n-
    51};
    \n-
    \n+
    29
    \n+
    30#include "../osd/opengl.h"
    \n+
    31#include <cstddef>
    \n+
    32
    \n+
    33namespace OpenSubdiv {
    \n+
    34namespace OPENSUBDIV_VERSION {
    \n+
    35
    \n+
    36namespace Osd {
    \n+
    37
    \n+
    \n+\n+
    45public:
    \n+
    47 static GLVertexBuffer * Create(int numElements, int numVertices,
    \n+
    48 void *deviceContext = NULL);
    \n+
    49
    \n+\n
    52
    \n-
    53} // end namespace Osd
    \n-
    54
    \n-
    55} // end namespace OPENSUBDIV_VERSION
    \n-
    56using namespace OPENSUBDIV_VERSION;
    \n+
    55 void UpdateData(const float *src, int startVertex, int numVertices,
    \n+
    56 void *deviceContext = NULL);
    \n
    57
    \n-
    58} // end namespace OpenSubdiv
    \n-
    59
    \n-
    60#endif // OPENSUBDIV3_OSD_GLSL_PATCH_SHADER_SOURCE
    \n-\n-\n-\n-
    static std::string GetVertexShaderSource(Far::PatchDescriptor::Type type)
    \n-
    static std::string GetTessEvalShaderSource(Far::PatchDescriptor::Type type)
    \n-\n-\n-
    static std::string GetTessControlShaderSource(Far::PatchDescriptor::Type type)
    \n+
    59 int GetNumElements() const;
    \n+
    60
    \n+
    62 int GetNumVertices() const;
    \n+
    63
    \n+
    65 GLuint BindVBO(void *deviceContext = NULL);
    \n+
    66
    \n+
    67protected:
    \n+
    69 GLVertexBuffer(int numElements, int numVertices);
    \n+
    70
    \n+
    73 bool allocate();
    \n+
    74
    \n+
    75private:
    \n+
    76 int _numElements;
    \n+
    77 int _numVertices;
    \n+
    78 GLuint _vbo;
    \n+
    79};
    \n+
    \n+
    80
    \n+
    81} // end namespace Osd
    \n+
    82
    \n+
    83} // end namespace OPENSUBDIV_VERSION
    \n+
    84using namespace OPENSUBDIV_VERSION;
    \n+
    85
    \n+
    86} // end namespace OpenSubdiv
    \n+
    87
    \n+
    88#endif // OPENSUBDIV3_OSD_GL_VERTEX_BUFFER_H
    \n+\n+
    Concrete vertex buffer class for GLSL subdivision and OpenGL drawing.
    \n+\n+
    GLuint BindVBO(void *deviceContext=NULL)
    Returns the GL buffer object.
    \n+
    int GetNumElements() const
    Returns how many elements defined in this vertex buffer.
    \n+
    void UpdateData(const float *src, int startVertex, int numVertices, void *deviceContext=NULL)
    \n+
    GLVertexBuffer(int numElements, int numVertices)
    Constructor.
    \n+
    int GetNumVertices() const
    Returns how many vertices allocated in this vertex buffer.
    \n+
    static GLVertexBuffer * Create(int numElements, int numVertices, void *deviceContext=NULL)
    Creator. Returns NULL if error.
    \n+\n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,15 +1,15 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-glslPatchShaderSource.h\n+glVertexBuffer.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n-2// Copyright 2015 Pixar\n+2// Copyright 2013 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n 7// Section 6. Trademarks. is deleted and replaced with:\n 8//\n 9// 6. Trademarks. This License does not grant permission to use the trade\n@@ -24,69 +24,88 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_GLSL_PATCH_SHADER_SOURCE_H\n-26#define OPENSUBDIV3_OSD_GLSL_PATCH_SHADER_SOURCE_H\n+25#ifndef OPENSUBDIV3_OSD_GL_VERTEX_BUFFER_H\n+26#define OPENSUBDIV3_OSD_GL_VERTEX_BUFFER_H\n 27\n 28#include \"../version.h\"\n-29#include \n-30#include \"../far/patchDescriptor.h\"\n-31\n-32namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-33namespace OPENSUBDIV_VERSION {\n-34\n-35namespace Osd {\n-36\n-_\b3_\b7class _\bG_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be {\n-38public:\n-_\b3_\b9 static std::string _\bG_\be_\bt_\bC_\bo_\bm_\bm_\bo_\bn_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be();\n-40\n-_\b4_\b1 static std::string _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bB_\ba_\bs_\bi_\bs_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be();\n-42\n-_\b4_\b3 static std::string _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be(\n-44 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type);\n-45\n-_\b4_\b6 static std::string _\bG_\be_\bt_\bT_\be_\bs_\bs_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be(\n-47 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type);\n-48\n-_\b4_\b9 static std::string _\bG_\be_\bt_\bT_\be_\bs_\bs_\bE_\bv_\ba_\bl_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be(\n-50 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type);\n-51};\n+29\n+30#include \"../osd/opengl.h\"\n+31#include \n+32\n+33namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+34namespace OPENSUBDIV_VERSION {\n+35\n+36namespace Osd {\n+37\n+_\b4_\b4class _\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br {\n+45public:\n+_\b4_\b7 static _\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br * _\bC_\br_\be_\ba_\bt_\be(int numElements, int numVertices,\n+48 void *deviceContext = NULL);\n+49\n+_\b5_\b1 _\b~_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br();\n 52\n-53} // end namespace Osd\n-54\n-55} // end namespace OPENSUBDIV_VERSION\n-56using namespace OPENSUBDIV_VERSION;\n+_\b5_\b5 void _\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba(const float *src, int startVertex, int numVertices,\n+56 void *deviceContext = NULL);\n 57\n-58} // end namespace OpenSubdiv\n-59\n-60#endif // OPENSUBDIV3_OSD_GLSL_PATCH_SHADER_SOURCE\n+_\b5_\b9 int _\bG_\be_\bt_\bN_\bu_\bm_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs() const;\n+60\n+_\b6_\b2 int _\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const;\n+63\n+_\b6_\b5 GLuint _\bB_\bi_\bn_\bd_\bV_\bB_\bO(void *deviceContext = NULL);\n+66\n+67protected:\n+_\b6_\b9 _\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(int numElements, int numVertices);\n+70\n+_\b7_\b3 bool _\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be();\n+74\n+75private:\n+76 int _numElements;\n+77 int _numVertices;\n+78 GLuint _vbo;\n+79};\n+80\n+81} // end namespace Osd\n+82\n+83} // end namespace OPENSUBDIV_VERSION\n+84using namespace OPENSUBDIV_VERSION;\n+85\n+86} // end namespace OpenSubdiv\n+87\n+88#endif // OPENSUBDIV3_OSD_GL_VERTEX_BUFFER_H\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be\n-Type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bs_\bl_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b._\bh_\b:_\b3_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n-_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n-static std::string GetVertexShaderSource(Far::PatchDescriptor::Type type)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n-_\bG_\be_\bt_\bT_\be_\bs_\bs_\bE_\bv_\ba_\bl_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n-static std::string GetTessEvalShaderSource(Far::PatchDescriptor::Type type)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n-_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bB_\ba_\bs_\bi_\bs_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n-static std::string GetPatchBasisShaderSource()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n-_\bG_\be_\bt_\bC_\bo_\bm_\bm_\bo_\bn_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n-static std::string GetCommonShaderSource()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bS_\bL_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b:_\b:\n-_\bG_\be_\bt_\bT_\be_\bs_\bs_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be\n-static std::string GetTessControlShaderSource(Far::PatchDescriptor::Type type)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+Concrete vertex buffer class for GLSL subdivision and OpenGL drawing.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh_\b:_\b4_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\b~_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+~GLVertexBuffer()\n+Destructor.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bB_\bi_\bn_\bd_\bV_\bB_\bO\n+GLuint BindVBO(void *deviceContext=NULL)\n+Returns the GL buffer object.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n+int GetNumElements() const\n+Returns how many elements defined in this vertex buffer.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba\n+void UpdateData(const float *src, int startVertex, int numVertices, void\n+*deviceContext=NULL)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+GLVertexBuffer(int numElements, int numVertices)\n+Constructor.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+int GetNumVertices() const\n+Returns how many vertices allocated in this vertex buffer.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static GLVertexBuffer * Create(int numElements, int numVertices, void\n+*deviceContext=NULL)\n+Creator. Returns NULL if error.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be\n+bool allocate()\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bg_\bl_\bs_\bl_\bP_\ba_\bt_\bc_\bh_\bS_\bh_\ba_\bd_\be_\br_\bS_\bo_\bu_\br_\bc_\be_\b._\bh\n+ * _\bg_\bl_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00863_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00863_source.html", "unified_diff": "@@ -265,17 +265,17 @@\n
    150
    \n
    151} // end namespace OPENSUBDIV_VERSION
    \n
    152using namespace OPENSUBDIV_VERSION;
    \n
    153
    \n
    154} // end namespace OpenSubdiv
    \n
    155
    \n
    156#endif // OPENSUBDIV3_OSD_GL_PATCH_TABLE_H
    \n-\n+\n
    std::vector< PatchArray > PatchArrayVector
    Definition types.h:132
    \n-
    Container for arrays of parametric patches.
    Definition patchTable.h:55
    \n+
    Container for arrays of parametric patches.
    Definition patchTable.h:55
    \n \n \n \n
    PatchArrayVector const & GetPatchArrays() const
    Returns the patch arrays for vertex index buffer data.
    \n
    GLuint GetFVarPatchIndexBuffer(int fvarChannel=0) const
    Returns the GL index buffer containing face-varying control vertices.
    \n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00866.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00866.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/cpuGLVertexBuffer.h File Reference\n+OpenSubdiv: opensubdiv/osd/glLegacyGregoryPatchTable.h File Reference\n \n \n \n \n \n \n \n@@ -90,27 +90,27 @@\n \n \n \n
    \n \n-
    cpuGLVertexBuffer.h File Reference
    \n+
    glLegacyGregoryPatchTable.h File Reference
    \n
    \n
    \n
    #include "../version.h"
    \n-#include <cstddef>
    \n+#include "../far/patchTable.h"
    \n+#include "../osd/nonCopyable.h"
    \n #include "../osd/opengl.h"
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n \n

    \n Classes

    class  CpuGLVertexBuffer
     Concrete vertex buffer class for cpu subdivision and OpenGL drawing. More...
    class  GLLegacyGregoryPatchTable
     
    \n \n \n \n \n@@ -119,13 +119,13 @@\n \n

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,26 +1,25 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-cpuGLVertexBuffer.h File Reference\n+glLegacyGregoryPatchTable.h File Reference\n #include \"../version.h\"\n-#include \n+#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\"\n+#include \"../osd/nonCopyable.h\"\n #include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bo_\bp_\be_\bn_\bg_\bl_\b._\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-\u00a0 Concrete vertex buffer class for cpu subdivision and OpenGL drawing.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bc_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\n+ * _\bg_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00866.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00866.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00866 = [\n- [\"CpuGLVertexBuffer\", \"a01161.html\", \"a01161\"]\n+ [\"GLLegacyGregoryPatchTable\", \"a01225.html\", \"a01225\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00866_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00866_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/cpuGLVertexBuffer.h Source File\n+OpenSubdiv: opensubdiv/osd/glLegacyGregoryPatchTable.h Source File\n \n \n \n \n \n \n \n@@ -92,19 +92,19 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    cpuGLVertexBuffer.h
    \n+
    glLegacyGregoryPatchTable.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n-
    2// Copyright 2013 Pixar
    \n+
    2// Copyright 2015 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n
    6// compliance with the Apache License and the following modification to it:
    \n
    7// Section 6. Trademarks. is deleted and replaced with:
    \n
    8//
    \n
    9// 6. Trademarks. This License does not grant permission to use the trade
    \n@@ -119,83 +119,103 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_CPU_GL_VERTEX_BUFFER_H
    \n-
    26#define OPENSUBDIV3_OSD_CPU_GL_VERTEX_BUFFER_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_GL_LEGACY_GREGORY_PATCH_TABLE_H
    \n+
    26#define OPENSUBDIV3_OSD_GL_LEGACY_GREGORY_PATCH_TABLE_H
    \n
    27
    \n
    28#include "../version.h"
    \n
    29
    \n-
    30#include <cstddef>
    \n-
    31#include "../osd/opengl.h"
    \n-
    32
    \n-
    33namespace OpenSubdiv {
    \n-
    34namespace OPENSUBDIV_VERSION {
    \n-
    35
    \n-
    36namespace Osd {
    \n-
    37
    \n-
    \n-\n-
    48public:
    \n-
    50 static CpuGLVertexBuffer * Create(int numElements, int numVertices,
    \n-
    51 void *deviceContext = NULL);
    \n-
    52
    \n-\n+
    30#include "../far/patchTable.h"
    \n+
    31#include "../osd/nonCopyable.h"
    \n+
    32#include "../osd/opengl.h"
    \n+
    33
    \n+
    34namespace OpenSubdiv {
    \n+
    35namespace OPENSUBDIV_VERSION {
    \n+
    36
    \n+
    37namespace Osd {
    \n+
    38
    \n+
    \n+\n+
    40 : private NonCopyable<GLLegacyGregoryPatchTable> {
    \n+
    41public:
    \n+\n+
    43
    \n+\n+
    45
    \n+
    46 void UpdateVertexBuffer(GLuint vbo);
    \n+
    47
    \n+
    \n+
    48 GLuint GetVertexTextureBuffer() const {
    \n+
    49 return _vertexTextureBuffer;
    \n+
    50 }
    \n+
    \n+
    51
    \n+
    \n+\n+
    53 return _vertexValenceTextureBuffer;
    \n+
    54 }
    \n+
    \n
    55
    \n-
    58 void UpdateData(const float *src, int startVertex, int numVertices,
    \n-
    59 void *deviceContext = NULL);
    \n-
    60
    \n-
    62 int GetNumElements() const;
    \n-
    63
    \n-
    65 int GetNumVertices() const;
    \n+
    \n+\n+
    57 return _quadOffsetsTextureBuffer;
    \n+
    58 }
    \n+
    \n+
    59
    \n+
    \n+\n+\n+
    62 return _quadOffsetsBase[1];
    \n+
    63 }
    \n+
    64 return _quadOffsetsBase[0];
    \n+
    65 }
    \n+
    \n
    66
    \n-
    69 float * BindCpuBuffer();
    \n-
    70
    \n-
    73 GLuint BindVBO(void *deviceContext = NULL);
    \n-
    74
    \n-
    75protected:
    \n-
    77 CpuGLVertexBuffer(int numElements, int numVertices);
    \n+
    67protected:
    \n+\n+
    69
    \n+
    70private:
    \n+
    71 GLuint _vertexTextureBuffer;
    \n+
    72 GLuint _vertexValenceTextureBuffer;
    \n+
    73 GLuint _quadOffsetsTextureBuffer;
    \n+
    74 GLuint _quadOffsetsBase[2]; // gregory, boundaryGregory
    \n+
    75};
    \n+
    \n+
    76
    \n+
    77
    \n
    78
    \n-
    80 bool allocate();
    \n-
    81
    \n-
    82private:
    \n-
    83 int _numElements;
    \n-
    84 int _numVertices;
    \n-
    85 GLuint _vbo;
    \n-
    86 float *_cpuBuffer;
    \n-
    87 bool _dataDirty;
    \n-
    88};
    \n-
    \n-
    89
    \n-
    90} // end namespace Osd
    \n-
    91
    \n-
    92} // end namespace OPENSUBDIV_VERSION
    \n-
    93using namespace OPENSUBDIV_VERSION;
    \n-
    94
    \n-
    95} // end namespace OpenSubdiv
    \n-
    96
    \n-
    97#endif // OPENSUBDIV3_OSD_CPU_GL_VERTEX_BUFFER_H
    \n-\n-
    Concrete vertex buffer class for cpu subdivision and OpenGL drawing.
    \n-
    CpuGLVertexBuffer(int numElements, int numVertices)
    Constructor.
    \n-\n-
    int GetNumElements() const
    Returns how many elements defined in this vertex buffer.
    \n-
    void UpdateData(const float *src, int startVertex, int numVertices, void *deviceContext=NULL)
    \n-
    int GetNumVertices() const
    Returns how many vertices allocated in this vertex buffer.
    \n-
    static CpuGLVertexBuffer * Create(int numElements, int numVertices, void *deviceContext=NULL)
    Creator. Returns NULL if error.
    \n-
    bool allocate()
    Allocates VBO for this buffer. Returns true if success.
    \n-\n-\n+
    79} // end namespace Osd
    \n+
    80
    \n+
    81} // end namespace OPENSUBDIV_VERSION
    \n+
    82using namespace OPENSUBDIV_VERSION;
    \n+
    83
    \n+
    84} // end namespace OpenSubdiv
    \n+
    85
    \n+
    86#endif // OPENSUBDIV3_OSD_GL_LEGACY_GREGORY_PATCH_TABLE_H
    \n+\n+\n+\n+
    Container for arrays of parametric patches.
    Definition patchTable.h:55
    \n+\n+\n+\n+\n+\n+\n+\n+\n+
    static GLLegacyGregoryPatchTable * Create(Far::PatchTable const *patchTable)
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,15 +1,15 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-cpuGLVertexBuffer.h\n+glLegacyGregoryPatchTable.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n-2// Copyright 2013 Pixar\n+2// Copyright 2015 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n 7// Section 6. Trademarks. is deleted and replaced with:\n 8//\n 9// 6. Trademarks. This License does not grant permission to use the trade\n@@ -24,94 +24,113 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_CPU_GL_VERTEX_BUFFER_H\n-26#define OPENSUBDIV3_OSD_CPU_GL_VERTEX_BUFFER_H\n+25#ifndef OPENSUBDIV3_OSD_GL_LEGACY_GREGORY_PATCH_TABLE_H\n+26#define OPENSUBDIV3_OSD_GL_LEGACY_GREGORY_PATCH_TABLE_H\n 27\n 28#include \"../version.h\"\n 29\n-30#include \n-31#include \"../osd/opengl.h\"\n-32\n-33namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-34namespace OPENSUBDIV_VERSION {\n-35\n-36namespace Osd {\n-37\n-_\b4_\b7class _\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br {\n-48public:\n-_\b5_\b0 static _\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br * _\bC_\br_\be_\ba_\bt_\be(int numElements, int numVertices,\n-51 void *deviceContext = NULL);\n-52\n-_\b5_\b4 _\b~_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br();\n+30#include \"../far/patchTable.h\"\n+31#include \"../osd/nonCopyable.h\"\n+32#include \"../osd/opengl.h\"\n+33\n+34namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+35namespace OPENSUBDIV_VERSION {\n+36\n+37namespace Osd {\n+38\n+_\b3_\b9class _\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+40 : private NonCopyable {\n+41public:\n+_\b4_\b2 _\b~_\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be();\n+43\n+_\b4_\b4 static _\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be *_\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *patchTable);\n+45\n+_\b4_\b6 void _\bU_\bp_\bd_\ba_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(GLuint vbo);\n+47\n+_\b4_\b8 GLuint _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bT_\be_\bx_\bt_\bu_\br_\be_\bB_\bu_\bf_\bf_\be_\br() const {\n+49 return _vertexTextureBuffer;\n+50 }\n+51\n+_\b5_\b2 GLuint _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be_\bT_\be_\bx_\bt_\bu_\br_\be_\bB_\bu_\bf_\bf_\be_\br() const {\n+53 return _vertexValenceTextureBuffer;\n+54 }\n 55\n-_\b5_\b8 void _\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba(const float *src, int startVertex, int numVertices,\n-59 void *deviceContext = NULL);\n-60\n-_\b6_\b2 int _\bG_\be_\bt_\bN_\bu_\bm_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs() const;\n-63\n-_\b6_\b5 int _\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const;\n+_\b5_\b6 GLuint _\bG_\be_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be_\bB_\bu_\bf_\bf_\be_\br() const {\n+57 return _quadOffsetsTextureBuffer;\n+58 }\n+59\n+_\b6_\b0 GLuint _\bG_\be_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bB_\ba_\bs_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type) {\n+61 if (type == _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY) {\n+62 return _quadOffsetsBase[1];\n+63 }\n+64 return _quadOffsetsBase[0];\n+65 }\n 66\n-_\b6_\b9 float * _\bB_\bi_\bn_\bd_\bC_\bp_\bu_\bB_\bu_\bf_\bf_\be_\br();\n-70\n-_\b7_\b3 GLuint _\bB_\bi_\bn_\bd_\bV_\bB_\bO(void *deviceContext = NULL);\n-74\n-75protected:\n-_\b7_\b7 _\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(int numElements, int numVertices);\n+67protected:\n+_\b6_\b8 _\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be();\n+69\n+70private:\n+71 GLuint _vertexTextureBuffer;\n+72 GLuint _vertexValenceTextureBuffer;\n+73 GLuint _quadOffsetsTextureBuffer;\n+74 GLuint _quadOffsetsBase[2]; // gregory, boundaryGregory\n+75};\n+76\n+77\n 78\n-_\b8_\b0 bool _\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be();\n-81\n-82private:\n-83 int _numElements;\n-84 int _numVertices;\n-85 GLuint _vbo;\n-86 float *_cpuBuffer;\n-87 bool _dataDirty;\n-88};\n-89\n-90} // end namespace Osd\n-91\n-92} // end namespace OPENSUBDIV_VERSION\n-93using namespace OPENSUBDIV_VERSION;\n-94\n-95} // end namespace OpenSubdiv\n-96\n-97#endif // OPENSUBDIV3_OSD_CPU_GL_VERTEX_BUFFER_H\n+79} // end namespace Osd\n+80\n+81} // end namespace OPENSUBDIV_VERSION\n+82using namespace OPENSUBDIV_VERSION;\n+83\n+84} // end namespace OpenSubdiv\n+85\n+86#endif // OPENSUBDIV3_OSD_GL_LEGACY_GREGORY_PATCH_TABLE_H\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-Concrete vertex buffer class for cpu subdivision and OpenGL drawing.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh_\b:_\b4_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-CpuGLVertexBuffer(int numElements, int numVertices)\n-Constructor.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bB_\bi_\bn_\bd_\bV_\bB_\bO\n-GLuint BindVBO(void *deviceContext=NULL)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n-int GetNumElements() const\n-Returns how many elements defined in this vertex buffer.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba\n-void UpdateData(const float *src, int startVertex, int numVertices, void\n-*deviceContext=NULL)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-int GetNumVertices() const\n-Returns how many vertices allocated in this vertex buffer.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static CpuGLVertexBuffer * Create(int numElements, int numVertices, void\n-*deviceContext=NULL)\n-Creator. Returns NULL if error.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be\n-bool allocate()\n-Allocates VBO for this buffer. Returns true if success.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bB_\bi_\bn_\bd_\bC_\bp_\bu_\bB_\bu_\bf_\bf_\be_\br\n-float * BindCpuBuffer()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\b~_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-~CpuGLVertexBuffer()\n-Destructor.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be\n+Type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY\n+@ GREGORY_BOUNDARY\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+Container for arrays of parametric patches.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b4_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be_\bT_\be_\bx_\bt_\bu_\br_\be_\bB_\bu_\bf_\bf_\be_\br\n+GLuint GetVertexValenceTextureBuffer() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\bG_\be_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be_\bB_\bu_\bf_\bf_\be_\br\n+GLuint GetQuadOffsetsTextureBuffer() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\b~_\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+~GLLegacyGregoryPatchTable()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+GLLegacyGregoryPatchTable()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\bU_\bp_\bd_\ba_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+void UpdateVertexBuffer(GLuint vbo)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\bG_\be_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bB_\ba_\bs_\be\n+GLuint GetQuadOffsetsBase(Far::PatchDescriptor::Type type)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bT_\be_\bx_\bt_\bu_\br_\be_\bB_\bu_\bf_\bf_\be_\br\n+GLuint GetVertexTextureBuffer() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b4_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static GLLegacyGregoryPatchTable * Create(Far::PatchTable const *patchTable)\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bc_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\n+ * _\bg_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00869.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00869.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/glLegacyGregoryPatchTable.h File Reference\n+OpenSubdiv: opensubdiv/osd/cpuGLVertexBuffer.h File Reference\n \n \n \n \n \n \n \n@@ -90,27 +90,27 @@\n \n \n \n
    \n \n-
    glLegacyGregoryPatchTable.h File Reference
    \n+
    cpuGLVertexBuffer.h File Reference
    \n
    \n
    \n
    #include "../version.h"
    \n-#include "../far/patchTable.h"
    \n-#include "../osd/nonCopyable.h"
    \n+#include <cstddef>
    \n #include "../osd/opengl.h"
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n+\n+\n \n

    \n Classes

    class  GLLegacyGregoryPatchTable
    class  CpuGLVertexBuffer
     Concrete vertex buffer class for cpu subdivision and OpenGL drawing. More...
     
    \n \n \n \n \n@@ -119,13 +119,13 @@\n \n

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +1,26 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-glLegacyGregoryPatchTable.h File Reference\n+cpuGLVertexBuffer.h File Reference\n #include \"../version.h\"\n-#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\"\n-#include \"../osd/nonCopyable.h\"\n+#include \n #include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bo_\bp_\be_\bn_\bg_\bl_\b._\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+class \u00a0 _\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+\u00a0 Concrete vertex buffer class for cpu subdivision and OpenGL drawing.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n \u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bg_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n+ * _\bc_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00869.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00869.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00869 = [\n- [\"GLLegacyGregoryPatchTable\", \"a01225.html\", \"a01225\"]\n+ [\"CpuGLVertexBuffer\", \"a01161.html\", \"a01161\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00869_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00869_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/glLegacyGregoryPatchTable.h Source File\n+OpenSubdiv: opensubdiv/osd/cpuGLVertexBuffer.h Source File\n \n \n \n \n \n \n \n@@ -92,19 +92,19 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    glLegacyGregoryPatchTable.h
    \n+
    cpuGLVertexBuffer.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n-
    2// Copyright 2015 Pixar
    \n+
    2// Copyright 2013 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n
    6// compliance with the Apache License and the following modification to it:
    \n
    7// Section 6. Trademarks. is deleted and replaced with:
    \n
    8//
    \n
    9// 6. Trademarks. This License does not grant permission to use the trade
    \n@@ -119,103 +119,83 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_GL_LEGACY_GREGORY_PATCH_TABLE_H
    \n-
    26#define OPENSUBDIV3_OSD_GL_LEGACY_GREGORY_PATCH_TABLE_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_CPU_GL_VERTEX_BUFFER_H
    \n+
    26#define OPENSUBDIV3_OSD_CPU_GL_VERTEX_BUFFER_H
    \n
    27
    \n
    28#include "../version.h"
    \n
    29
    \n-
    30#include "../far/patchTable.h"
    \n-
    31#include "../osd/nonCopyable.h"
    \n-
    32#include "../osd/opengl.h"
    \n-
    33
    \n-
    34namespace OpenSubdiv {
    \n-
    35namespace OPENSUBDIV_VERSION {
    \n-
    36
    \n-
    37namespace Osd {
    \n-
    38
    \n-
    \n-\n-
    40 : private NonCopyable<GLLegacyGregoryPatchTable> {
    \n-
    41public:
    \n-\n-
    43
    \n-\n-
    45
    \n-
    46 void UpdateVertexBuffer(GLuint vbo);
    \n-
    47
    \n-
    \n-
    48 GLuint GetVertexTextureBuffer() const {
    \n-
    49 return _vertexTextureBuffer;
    \n-
    50 }
    \n-
    \n-
    51
    \n-
    \n-\n-
    53 return _vertexValenceTextureBuffer;
    \n-
    54 }
    \n-
    \n+
    30#include <cstddef>
    \n+
    31#include "../osd/opengl.h"
    \n+
    32
    \n+
    33namespace OpenSubdiv {
    \n+
    34namespace OPENSUBDIV_VERSION {
    \n+
    35
    \n+
    36namespace Osd {
    \n+
    37
    \n+
    \n+\n+
    48public:
    \n+
    50 static CpuGLVertexBuffer * Create(int numElements, int numVertices,
    \n+
    51 void *deviceContext = NULL);
    \n+
    52
    \n+\n
    55
    \n-
    \n-\n-
    57 return _quadOffsetsTextureBuffer;
    \n-
    58 }
    \n-
    \n-
    59
    \n-
    \n-\n-\n-
    62 return _quadOffsetsBase[1];
    \n-
    63 }
    \n-
    64 return _quadOffsetsBase[0];
    \n-
    65 }
    \n-
    \n+
    58 void UpdateData(const float *src, int startVertex, int numVertices,
    \n+
    59 void *deviceContext = NULL);
    \n+
    60
    \n+
    62 int GetNumElements() const;
    \n+
    63
    \n+
    65 int GetNumVertices() const;
    \n
    66
    \n-
    67protected:
    \n-\n-
    69
    \n-
    70private:
    \n-
    71 GLuint _vertexTextureBuffer;
    \n-
    72 GLuint _vertexValenceTextureBuffer;
    \n-
    73 GLuint _quadOffsetsTextureBuffer;
    \n-
    74 GLuint _quadOffsetsBase[2]; // gregory, boundaryGregory
    \n-
    75};
    \n-
    \n-
    76
    \n-
    77
    \n+
    69 float * BindCpuBuffer();
    \n+
    70
    \n+
    73 GLuint BindVBO(void *deviceContext = NULL);
    \n+
    74
    \n+
    75protected:
    \n+
    77 CpuGLVertexBuffer(int numElements, int numVertices);
    \n
    78
    \n-
    79} // end namespace Osd
    \n-
    80
    \n-
    81} // end namespace OPENSUBDIV_VERSION
    \n-
    82using namespace OPENSUBDIV_VERSION;
    \n-
    83
    \n-
    84} // end namespace OpenSubdiv
    \n-
    85
    \n-
    86#endif // OPENSUBDIV3_OSD_GL_LEGACY_GREGORY_PATCH_TABLE_H
    \n-\n-\n-\n-
    Container for arrays of parametric patches.
    Definition patchTable.h:55
    \n-\n-\n-\n-\n-\n-\n-\n-\n-
    static GLLegacyGregoryPatchTable * Create(Far::PatchTable const *patchTable)
    \n+
    80 bool allocate();
    \n+
    81
    \n+
    82private:
    \n+
    83 int _numElements;
    \n+
    84 int _numVertices;
    \n+
    85 GLuint _vbo;
    \n+
    86 float *_cpuBuffer;
    \n+
    87 bool _dataDirty;
    \n+
    88};
    \n+
    \n+
    89
    \n+
    90} // end namespace Osd
    \n+
    91
    \n+
    92} // end namespace OPENSUBDIV_VERSION
    \n+
    93using namespace OPENSUBDIV_VERSION;
    \n+
    94
    \n+
    95} // end namespace OpenSubdiv
    \n+
    96
    \n+
    97#endif // OPENSUBDIV3_OSD_CPU_GL_VERTEX_BUFFER_H
    \n+\n+
    Concrete vertex buffer class for cpu subdivision and OpenGL drawing.
    \n+
    CpuGLVertexBuffer(int numElements, int numVertices)
    Constructor.
    \n+\n+
    int GetNumElements() const
    Returns how many elements defined in this vertex buffer.
    \n+
    void UpdateData(const float *src, int startVertex, int numVertices, void *deviceContext=NULL)
    \n+
    int GetNumVertices() const
    Returns how many vertices allocated in this vertex buffer.
    \n+
    static CpuGLVertexBuffer * Create(int numElements, int numVertices, void *deviceContext=NULL)
    Creator. Returns NULL if error.
    \n+
    bool allocate()
    Allocates VBO for this buffer. Returns true if success.
    \n+\n+\n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,15 +1,15 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-glLegacyGregoryPatchTable.h\n+cpuGLVertexBuffer.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n-2// Copyright 2015 Pixar\n+2// Copyright 2013 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n 7// Section 6. Trademarks. is deleted and replaced with:\n 8//\n 9// 6. Trademarks. This License does not grant permission to use the trade\n@@ -24,113 +24,94 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_GL_LEGACY_GREGORY_PATCH_TABLE_H\n-26#define OPENSUBDIV3_OSD_GL_LEGACY_GREGORY_PATCH_TABLE_H\n+25#ifndef OPENSUBDIV3_OSD_CPU_GL_VERTEX_BUFFER_H\n+26#define OPENSUBDIV3_OSD_CPU_GL_VERTEX_BUFFER_H\n 27\n 28#include \"../version.h\"\n 29\n-30#include \"../far/patchTable.h\"\n-31#include \"../osd/nonCopyable.h\"\n-32#include \"../osd/opengl.h\"\n-33\n-34namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-35namespace OPENSUBDIV_VERSION {\n-36\n-37namespace Osd {\n-38\n-_\b3_\b9class _\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-40 : private NonCopyable {\n-41public:\n-_\b4_\b2 _\b~_\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be();\n-43\n-_\b4_\b4 static _\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be *_\bC_\br_\be_\ba_\bt_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *patchTable);\n-45\n-_\b4_\b6 void _\bU_\bp_\bd_\ba_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(GLuint vbo);\n-47\n-_\b4_\b8 GLuint _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bT_\be_\bx_\bt_\bu_\br_\be_\bB_\bu_\bf_\bf_\be_\br() const {\n-49 return _vertexTextureBuffer;\n-50 }\n-51\n-_\b5_\b2 GLuint _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be_\bT_\be_\bx_\bt_\bu_\br_\be_\bB_\bu_\bf_\bf_\be_\br() const {\n-53 return _vertexValenceTextureBuffer;\n-54 }\n+30#include \n+31#include \"../osd/opengl.h\"\n+32\n+33namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+34namespace OPENSUBDIV_VERSION {\n+35\n+36namespace Osd {\n+37\n+_\b4_\b7class _\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br {\n+48public:\n+_\b5_\b0 static _\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br * _\bC_\br_\be_\ba_\bt_\be(int numElements, int numVertices,\n+51 void *deviceContext = NULL);\n+52\n+_\b5_\b4 _\b~_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br();\n 55\n-_\b5_\b6 GLuint _\bG_\be_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be_\bB_\bu_\bf_\bf_\be_\br() const {\n-57 return _quadOffsetsTextureBuffer;\n-58 }\n-59\n-_\b6_\b0 GLuint _\bG_\be_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bB_\ba_\bs_\be(_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be type) {\n-61 if (type == _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY) {\n-62 return _quadOffsetsBase[1];\n-63 }\n-64 return _quadOffsetsBase[0];\n-65 }\n+_\b5_\b8 void _\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba(const float *src, int startVertex, int numVertices,\n+59 void *deviceContext = NULL);\n+60\n+_\b6_\b2 int _\bG_\be_\bt_\bN_\bu_\bm_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs() const;\n+63\n+_\b6_\b5 int _\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const;\n 66\n-67protected:\n-_\b6_\b8 _\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be();\n-69\n-70private:\n-71 GLuint _vertexTextureBuffer;\n-72 GLuint _vertexValenceTextureBuffer;\n-73 GLuint _quadOffsetsTextureBuffer;\n-74 GLuint _quadOffsetsBase[2]; // gregory, boundaryGregory\n-75};\n-76\n-77\n+_\b6_\b9 float * _\bB_\bi_\bn_\bd_\bC_\bp_\bu_\bB_\bu_\bf_\bf_\be_\br();\n+70\n+_\b7_\b3 GLuint _\bB_\bi_\bn_\bd_\bV_\bB_\bO(void *deviceContext = NULL);\n+74\n+75protected:\n+_\b7_\b7 _\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(int numElements, int numVertices);\n 78\n-79} // end namespace Osd\n-80\n-81} // end namespace OPENSUBDIV_VERSION\n-82using namespace OPENSUBDIV_VERSION;\n-83\n-84} // end namespace OpenSubdiv\n-85\n-86#endif // OPENSUBDIV3_OSD_GL_LEGACY_GREGORY_PATCH_TABLE_H\n+_\b8_\b0 bool _\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be();\n+81\n+82private:\n+83 int _numElements;\n+84 int _numVertices;\n+85 GLuint _vbo;\n+86 float *_cpuBuffer;\n+87 bool _dataDirty;\n+88};\n+89\n+90} // end namespace Osd\n+91\n+92} // end namespace OPENSUBDIV_VERSION\n+93using namespace OPENSUBDIV_VERSION;\n+94\n+95} // end namespace OpenSubdiv\n+96\n+97#endif // OPENSUBDIV3_OSD_CPU_GL_VERTEX_BUFFER_H\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bT_\by_\bp_\be\n-Type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b4_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bO_\bU_\bN_\bD_\bA_\bR_\bY\n-@ GREGORY_BOUNDARY\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-Container for arrays of parametric patches.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b4_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be_\bT_\be_\bx_\bt_\bu_\br_\be_\bB_\bu_\bf_\bf_\be_\br\n-GLuint GetVertexValenceTextureBuffer() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\bG_\be_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bT_\be_\bx_\bt_\bu_\br_\be_\bB_\bu_\bf_\bf_\be_\br\n-GLuint GetQuadOffsetsTextureBuffer() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\b~_\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-~GLLegacyGregoryPatchTable()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-GLLegacyGregoryPatchTable()\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\bU_\bp_\bd_\ba_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-void UpdateVertexBuffer(GLuint vbo)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\bG_\be_\bt_\bQ_\bu_\ba_\bd_\bO_\bf_\bf_\bs_\be_\bt_\bs_\bB_\ba_\bs_\be\n-GLuint GetQuadOffsetsBase(Far::PatchDescriptor::Type type)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b6_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bT_\be_\bx_\bt_\bu_\br_\be_\bB_\bu_\bf_\bf_\be_\br\n-GLuint GetVertexTextureBuffer() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bg_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b4_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bG_\bL_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static GLLegacyGregoryPatchTable * Create(Far::PatchTable const *patchTable)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+Concrete vertex buffer class for cpu subdivision and OpenGL drawing.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh_\b:_\b4_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+CpuGLVertexBuffer(int numElements, int numVertices)\n+Constructor.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bB_\bi_\bn_\bd_\bV_\bB_\bO\n+GLuint BindVBO(void *deviceContext=NULL)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n+int GetNumElements() const\n+Returns how many elements defined in this vertex buffer.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba\n+void UpdateData(const float *src, int startVertex, int numVertices, void\n+*deviceContext=NULL)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+int GetNumVertices() const\n+Returns how many vertices allocated in this vertex buffer.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static CpuGLVertexBuffer * Create(int numElements, int numVertices, void\n+*deviceContext=NULL)\n+Creator. Returns NULL if error.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be\n+bool allocate()\n+Allocates VBO for this buffer. Returns true if success.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bB_\bi_\bn_\bd_\bC_\bp_\bu_\bB_\bu_\bf_\bf_\be_\br\n+float * BindCpuBuffer()\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\b~_\bC_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+~CpuGLVertexBuffer()\n+Destructor.\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bg_\bl_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh\n+ * _\bc_\bp_\bu_\bG_\bL_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00872.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00872.html", "unified_diff": "@@ -94,15 +94,15 @@\n \n
    tbbKernel.h File Reference
    \n \n
    \n
    #include "../version.h"
    \n-#include "../far/patchDescriptor.h"
    \n+#include "../far/patchDescriptor.h"
    \n #include "../far/patchParam.h"
    \n
    \n

    Go to the source code of this file.

    \n \n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00872_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00872_source.html", "unified_diff": "@@ -210,15 +210,15 @@\n
    109
    \n
    110} // end namespace OPENSUBDIV_VERSION
    \n
    111using namespace OPENSUBDIV_VERSION;
    \n
    112
    \n
    113} // end namespace OpenSubdiv
    \n
    114
    \n
    115#endif // OPENSUBDIV3_OSD_TBB_KERNEL_H
    \n-\n+\n
    void TbbEvalPatches(float const *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, float *dstDu, BufferDescriptor const &dstDuDesc, float *dstDv, BufferDescriptor const &dstDvDesc, int numPatchCoords, const PatchCoord *patchCoords, const PatchArray *patchArrayBuffer, const int *patchIndexBuffer, const PatchParam *patchParamBuffer)
    \n
    void TbbEvalStencils(float const *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, int const *sizes, int const *offsets, int const *indices, float const *weights, int start, int end)
    \n
    BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
    \n
    Coordinates set on a patch table.
    Definition types.h:42
    \n \n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00875_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00875_source.html", "unified_diff": "@@ -603,15 +603,15 @@\n
    1240} // end namespace OPENSUBDIV_VERSION
    \n
    1241using namespace OPENSUBDIV_VERSION;
    \n
    1242
    \n
    1243} // end namespace OpenSubdiv
    \n
    1244
    \n
    1245
    \n
    1246#endif // OPENSUBDIV3_OSD_TBB_EVALUATOR_H
    \n-\n+\n
    BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
    \n \n
    static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, TbbEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic static eval stencils function. This function has a same signature as other device kernels hav...
    \n
    static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, TbbEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n
    static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, STENCIL_TABLE const *stencilTable, const TbbEvaluator *instance=NULL, void *deviceContext=NULL)
    Generic static eval stencils function with derivatives. This function has a same signature as other d...
    \n
    static bool EvalStencils(const float *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, const int *sizes, const int *offsets, const int *indices, const float *weights, int start, int end)
    Static eval stencils function which takes raw CPU pointers for input and output.
    \n
    static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, TbbEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00878.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00878.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/ompKernel.h File Reference\n+OpenSubdiv: opensubdiv/osd/ompEvaluator.h File Reference\n \n \n \n \n \n \n \n@@ -88,45 +88,44 @@\n \n \n \n \n \n
    \n \n-
    ompKernel.h File Reference
    \n+Classes |\n+Namespaces
    \n+
    ompEvaluator.h File Reference
    \n \n
    \n
    #include "../version.h"
    \n+#include "../osd/bufferDescriptor.h"
    \n+#include "../osd/types.h"
    \n+#include <cstddef>
    \n
    \n

    Go to the source code of this file.

    \n

    \n Namespaces

    namespace  OpenSubdiv
    \n+\n+\n+\n+

    \n+Classes

    class  OmpEvaluator
     
    \n \n \n \n \n \n \n \n-

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
     
    \n-\n-\n-\n-\n-\n-\n-\n

    \n-Functions

    void OmpEvalStencils (float const *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, int const *sizes, int const *offsets, int const *indices, float const *weights, int start, int end)
     
    void OmpEvalStencils (float const *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, float *dstDu, BufferDescriptor const &dstDuDesc, float *dstDv, BufferDescriptor const &dstDvDesc, int const *sizes, int const *offsets, int const *indices, float const *weights, float const *duWeights, float const *dvWeights, int start, int end)
     
    void OmpEvalStencils (float const *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, float *dstDu, BufferDescriptor const &dstDuDesc, float *dstDv, BufferDescriptor const &dstDvDesc, float *dstDuu, BufferDescriptor const &dstDuuDesc, float *dstDuv, BufferDescriptor const &dstDuvDesc, float *dstDvv, BufferDescriptor const &dstDvvDesc, int const *sizes, int const *offsets, int const *indices, float const *weights, float const *duWeights, float const *dvWeights, float const *duuWeights, float const *duvWeights, float const *dvvWeights, int start, int end)
     
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,41 +1,25 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-ompKernel.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+ompEvaluator.h File Reference\n #include \"../version.h\"\n+#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bb_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\"\n+#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-void\u00a0 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs (float const *src, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc, float\n- *dst, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc, int const *sizes, int const\n- *offsets, int const *indices, float const *weights, int start, int end)\n-\u00a0\n-void\u00a0 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs (float const *src, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc, float\n- *dst, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc, float *dstDu, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n- const &dstDuDesc, float *dstDv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDvDesc, int\n- const *sizes, int const *offsets, int const *indices, float const\n- *weights, float const *duWeights, float const *dvWeights, int start, int\n- end)\n-\u00a0\n-void\u00a0 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs (float const *src, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc, float\n- *dst, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc, float *dstDu, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n- const &dstDuDesc, float *dstDv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDvDesc, float\n- *dstDuu, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDuuDesc, float *dstDuv,\n- _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDuvDesc, float *dstDvv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const\n- &dstDvvDesc, int const *sizes, int const *offsets, int const *indices,\n- float const *weights, float const *duWeights, float const *dvWeights,\n- float const *duuWeights, float const *duvWeights, float const\n- *dvvWeights, int start, int end)\n-\u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bo_\bm_\bp_\bK_\be_\br_\bn_\be_\bl_\b._\bh\n+ * _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00878.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00878.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,3 @@\n var a00878 = [\n- [\"OmpEvalStencils\", \"a00878.html#a44a05502feb5015035bc81b93cffb99c\", null],\n- [\"OmpEvalStencils\", \"a00878.html#a907dc53421460557871ddc35f77751f5\", null],\n- [\"OmpEvalStencils\", \"a00878.html#a870745ff3e883b32547d4db42b3be2bd\", null]\n+ [\"OmpEvaluator\", \"a01305.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00878_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00878_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/ompKernel.h Source File\n+OpenSubdiv: opensubdiv/osd/ompEvaluator.h Source File\n \n \n \n \n \n \n \n@@ -92,19 +92,19 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    ompKernel.h
    \n+
    ompEvaluator.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n-
    2// Copyright 2013 Pixar
    \n+
    2// Copyright 2015 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n
    6// compliance with the Apache License and the following modification to it:
    \n
    7// Section 6. Trademarks. is deleted and replaced with:
    \n
    8//
    \n
    9// 6. Trademarks. This License does not grant permission to use the trade
    \n@@ -119,82 +119,528 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_OMP_KERNEL_H
    \n-
    26#define OPENSUBDIV3_OSD_OMP_KERNEL_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_OMP_EVALUATOR_H
    \n+
    26#define OPENSUBDIV3_OSD_OMP_EVALUATOR_H
    \n
    27
    \n
    28#include "../version.h"
    \n-
    29
    \n-
    30namespace OpenSubdiv {
    \n-
    31namespace OPENSUBDIV_VERSION {
    \n-
    32
    \n-
    33namespace Osd {
    \n-
    34
    \n-
    35struct BufferDescriptor;
    \n+
    29#include "../osd/bufferDescriptor.h"
    \n+
    30#include "../osd/types.h"
    \n+
    31
    \n+
    32#include <cstddef>
    \n+
    33
    \n+
    34namespace OpenSubdiv {
    \n+
    35namespace OPENSUBDIV_VERSION {
    \n
    36
    \n-
    37void
    \n-
    38OmpEvalStencils(float const * src, BufferDescriptor const &srcDesc,
    \n-
    39 float * dst, BufferDescriptor const &dstDesc,
    \n-
    40 int const * sizes,
    \n-
    41 int const * offsets,
    \n-
    42 int const * indices,
    \n-
    43 float const * weights,
    \n-
    44 int start, int end);
    \n-
    45
    \n-
    46void
    \n-
    47OmpEvalStencils(float const * src, BufferDescriptor const &srcDesc,
    \n-
    48 float * dst, BufferDescriptor const &dstDesc,
    \n-
    49 float * dstDu, BufferDescriptor const &dstDuDesc,
    \n-
    50 float * dstDv, BufferDescriptor const &dstDvDesc,
    \n-
    51 int const * sizes,
    \n-
    52 int const * offsets,
    \n-
    53 int const * indices,
    \n-
    54 float const * weights,
    \n-
    55 float const * duWeights,
    \n-
    56 float const * dvWeights,
    \n-
    57 int start, int end);
    \n-
    58
    \n-
    59void
    \n-
    60OmpEvalStencils(float const * src, BufferDescriptor const &srcDesc,
    \n-
    61 float * dst, BufferDescriptor const &dstDesc,
    \n-
    62 float * dstDu, BufferDescriptor const &dstDuDesc,
    \n-
    63 float * dstDv, BufferDescriptor const &dstDvDesc,
    \n-
    64 float * dstDuu, BufferDescriptor const &dstDuuDesc,
    \n-
    65 float * dstDuv, BufferDescriptor const &dstDuvDesc,
    \n-
    66 float * dstDvv, BufferDescriptor const &dstDvvDesc,
    \n-
    67 int const * sizes,
    \n-
    68 int const * offsets,
    \n-
    69 int const * indices,
    \n-
    70 float const * weights,
    \n-
    71 float const * duWeights,
    \n-
    72 float const * dvWeights,
    \n-
    73 float const * duuWeights,
    \n-
    74 float const * duvWeights,
    \n-
    75 float const * dvvWeights,
    \n-
    76 int start, int end);
    \n-
    77
    \n-
    78} // end namespace Osd
    \n-
    79
    \n-
    80} // end namespace OPENSUBDIV_VERSION
    \n-
    81using namespace OPENSUBDIV_VERSION;
    \n-
    82
    \n-
    83} // end namespace OpenSubdiv
    \n+
    37namespace Osd {
    \n+
    38
    \n+
    \n+\n+
    40public:
    \n+
    46
    \n+
    71 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n+
    \n+
    72 static bool EvalStencils(
    \n+
    73 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    74 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    75 STENCIL_TABLE const *stencilTable,
    \n+
    76 const OmpEvaluator *instance = NULL,
    \n+
    77 void * deviceContext = NULL) {
    \n+
    78
    \n+
    79 (void)instance; // unused
    \n+
    80 (void)deviceContext; // unused
    \n+
    81
    \n+
    82 if (stencilTable->GetNumStencils() == 0)
    \n+
    83 return false;
    \n
    84
    \n-
    85#endif // OPENSUBDIV3_OSD_OMP_KERNEL_H
    \n-\n-
    void OmpEvalStencils(float const *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, int const *sizes, int const *offsets, int const *indices, float const *weights, int start, int end)
    \n+
    85 return EvalStencils(srcBuffer->BindCpuBuffer(), srcDesc,
    \n+
    86 dstBuffer->BindCpuBuffer(), dstDesc,
    \n+
    87 &stencilTable->GetSizes()[0],
    \n+
    88 &stencilTable->GetOffsets()[0],
    \n+
    89 &stencilTable->GetControlIndices()[0],
    \n+
    90 &stencilTable->GetWeights()[0],
    \n+
    91 /*start = */ 0,
    \n+
    92 /*end = */ stencilTable->GetNumStencils());
    \n+
    93 }
    \n+
    \n+
    94
    \n+
    121 static bool EvalStencils(
    \n+
    122 const float *src, BufferDescriptor const &srcDesc,
    \n+
    123 float *dst, BufferDescriptor const &dstDesc,
    \n+
    124 const int * sizes,
    \n+
    125 const int * offsets,
    \n+
    126 const int * indices,
    \n+
    127 const float * weights,
    \n+
    128 int start, int end);
    \n+
    129
    \n+
    167 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n+
    \n+
    168 static bool EvalStencils(
    \n+
    169 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    170 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    171 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    172 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    173 STENCIL_TABLE const *stencilTable,
    \n+
    174 const OmpEvaluator *instance = NULL,
    \n+
    175 void * deviceContext = NULL) {
    \n+
    176
    \n+
    177 (void)instance; // unused
    \n+
    178 (void)deviceContext; // unused
    \n+
    179
    \n+
    180 return EvalStencils(srcBuffer->BindCpuBuffer(), srcDesc,
    \n+
    181 dstBuffer->BindCpuBuffer(), dstDesc,
    \n+
    182 duBuffer->BindCpuBuffer(), duDesc,
    \n+
    183 dvBuffer->BindCpuBuffer(), dvDesc,
    \n+
    184 &stencilTable->GetSizes()[0],
    \n+
    185 &stencilTable->GetOffsets()[0],
    \n+
    186 &stencilTable->GetControlIndices()[0],
    \n+
    187 &stencilTable->GetWeights()[0],
    \n+
    188 &stencilTable->GetDuWeights()[0],
    \n+
    189 &stencilTable->GetDvWeights()[0],
    \n+
    190 /*start = */ 0,
    \n+
    191 /*end = */ stencilTable->GetNumStencils());
    \n+
    192 }
    \n+
    \n+
    193
    \n+
    234 static bool EvalStencils(
    \n+
    235 const float *src, BufferDescriptor const &srcDesc,
    \n+
    236 float *dst, BufferDescriptor const &dstDesc,
    \n+
    237 float *du, BufferDescriptor const &duDesc,
    \n+
    238 float *dv, BufferDescriptor const &dvDesc,
    \n+
    239 const int * sizes,
    \n+
    240 const int * offsets,
    \n+
    241 const int * indices,
    \n+
    242 const float * weights,
    \n+
    243 const float * duWeights,
    \n+
    244 const float * dvWeights,
    \n+
    245 int start, int end);
    \n+
    246
    \n+
    302 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n+
    \n+
    303 static bool EvalStencils(
    \n+
    304 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    305 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    306 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    307 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    308 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n+
    309 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n+
    310 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n+
    311 STENCIL_TABLE const *stencilTable,
    \n+
    312 const OmpEvaluator *instance = NULL,
    \n+
    313 void * deviceContext = NULL) {
    \n+
    314
    \n+
    315 (void)instance; // unused
    \n+
    316 (void)deviceContext; // unused
    \n+
    317
    \n+
    318 return EvalStencils(srcBuffer->BindCpuBuffer(), srcDesc,
    \n+
    319 dstBuffer->BindCpuBuffer(), dstDesc,
    \n+
    320 duBuffer->BindCpuBuffer(), duDesc,
    \n+
    321 dvBuffer->BindCpuBuffer(), dvDesc,
    \n+
    322 duuBuffer->BindCpuBuffer(), duuDesc,
    \n+
    323 duvBuffer->BindCpuBuffer(), duvDesc,
    \n+
    324 dvvBuffer->BindCpuBuffer(), dvvDesc,
    \n+
    325 &stencilTable->GetSizes()[0],
    \n+
    326 &stencilTable->GetOffsets()[0],
    \n+
    327 &stencilTable->GetControlIndices()[0],
    \n+
    328 &stencilTable->GetWeights()[0],
    \n+
    329 &stencilTable->GetDuWeights()[0],
    \n+
    330 &stencilTable->GetDvWeights()[0],
    \n+
    331 &stencilTable->GetDuuWeights()[0],
    \n+
    332 &stencilTable->GetDuvWeights()[0],
    \n+
    333 &stencilTable->GetDvvWeights()[0],
    \n+
    334 /*start = */ 0,
    \n+
    335 /*end = */ stencilTable->GetNumStencils());
    \n+
    336 }
    \n+
    \n+
    337
    \n+
    399 static bool EvalStencils(
    \n+
    400 const float *src, BufferDescriptor const &srcDesc,
    \n+
    401 float *dst, BufferDescriptor const &dstDesc,
    \n+
    402 float *du, BufferDescriptor const &duDesc,
    \n+
    403 float *dv, BufferDescriptor const &dvDesc,
    \n+
    404 float *duu, BufferDescriptor const &duuDesc,
    \n+
    405 float *duv, BufferDescriptor const &duvDesc,
    \n+
    406 float *dvv, BufferDescriptor const &dvvDesc,
    \n+
    407 const int * sizes,
    \n+
    408 const int * offsets,
    \n+
    409 const int * indices,
    \n+
    410 const float * weights,
    \n+
    411 const float * duWeights,
    \n+
    412 const float * dvWeights,
    \n+
    413 const float * duuWeights,
    \n+
    414 const float * duvWeights,
    \n+
    415 const float * dvvWeights,
    \n+
    416 int start, int end);
    \n+
    417
    \n+
    423
    \n+
    452 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    453 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+
    454 static bool EvalPatches(
    \n+
    455 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    456 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    457 int numPatchCoords,
    \n+
    458 PATCHCOORD_BUFFER *patchCoords,
    \n+
    459 PATCH_TABLE *patchTable,
    \n+
    460 OmpEvaluator const *instance = NULL,
    \n+
    461 void * deviceContext = NULL) {
    \n+
    462
    \n+
    463 (void)instance; // unused
    \n+
    464 (void)deviceContext; // unused
    \n+
    465
    \n+
    466 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
    \n+
    467 dstBuffer->BindCpuBuffer(), dstDesc,
    \n+
    468 numPatchCoords,
    \n+
    469 (const PatchCoord*)patchCoords->BindCpuBuffer(),
    \n+
    470 patchTable->GetPatchArrayBuffer(),
    \n+
    471 patchTable->GetPatchIndexBuffer(),
    \n+
    472 patchTable->GetPatchParamBuffer());
    \n+
    473 }
    \n+
    \n+
    474
    \n+
    515 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    516 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+
    517 static bool EvalPatches(
    \n+
    518 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    519 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    520 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    521 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    522 int numPatchCoords,
    \n+
    523 PATCHCOORD_BUFFER *patchCoords,
    \n+
    524 PATCH_TABLE *patchTable,
    \n+
    525 OmpEvaluator const *instance = NULL,
    \n+
    526 void * deviceContext = NULL) {
    \n+
    527
    \n+
    528 (void)instance; // unused
    \n+
    529 (void)deviceContext; // unused
    \n+
    530
    \n+
    531 // XXX: PatchCoords is somewhat abusing vertex primvar buffer interop.
    \n+
    532 // ideally all buffer classes should have templated by datatype
    \n+
    533 // so that downcast isn't needed there.
    \n+
    534 // (e.g. Osd::CpuBuffer<PatchCoord> )
    \n+
    535 //
    \n+
    536 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
    \n+
    537 dstBuffer->BindCpuBuffer(), dstDesc,
    \n+
    538 duBuffer->BindCpuBuffer(), duDesc,
    \n+
    539 dvBuffer->BindCpuBuffer(), dvDesc,
    \n+
    540 numPatchCoords,
    \n+
    541 (const PatchCoord*)patchCoords->BindCpuBuffer(),
    \n+
    542 patchTable->GetPatchArrayBuffer(),
    \n+
    543 patchTable->GetPatchIndexBuffer(),
    \n+
    544 patchTable->GetPatchParamBuffer());
    \n+
    545 }
    \n+
    \n+
    546
    \n+
    605 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    606 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+
    607 static bool EvalPatches(
    \n+
    608 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    609 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    610 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    611 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    612 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n+
    613 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n+
    614 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n+
    615 int numPatchCoords,
    \n+
    616 PATCHCOORD_BUFFER *patchCoords,
    \n+
    617 PATCH_TABLE *patchTable,
    \n+
    618 OmpEvaluator const *instance = NULL,
    \n+
    619 void * deviceContext = NULL) {
    \n+
    620
    \n+
    621 (void)instance; // unused
    \n+
    622 (void)deviceContext; // unused
    \n+
    623
    \n+
    624 // XXX: PatchCoords is somewhat abusing vertex primvar buffer interop.
    \n+
    625 // ideally all buffer classes should have templated by datatype
    \n+
    626 // so that downcast isn't needed there.
    \n+
    627 // (e.g. Osd::CpuBuffer<PatchCoord> )
    \n+
    628 //
    \n+
    629 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
    \n+
    630 dstBuffer->BindCpuBuffer(), dstDesc,
    \n+
    631 duBuffer->BindCpuBuffer(), duDesc,
    \n+
    632 dvBuffer->BindCpuBuffer(), dvDesc,
    \n+
    633 duuBuffer->BindCpuBuffer(), duuDesc,
    \n+
    634 duvBuffer->BindCpuBuffer(), duvDesc,
    \n+
    635 dvvBuffer->BindCpuBuffer(), dvvDesc,
    \n+
    636 numPatchCoords,
    \n+
    637 (const PatchCoord*)patchCoords->BindCpuBuffer(),
    \n+
    638 patchTable->GetPatchArrayBuffer(),
    \n+
    639 patchTable->GetPatchIndexBuffer(),
    \n+
    640 patchTable->GetPatchParamBuffer());
    \n+
    641 }
    \n+
    \n+
    642
    \n+
    670 static bool EvalPatches(
    \n+
    671 const float *src, BufferDescriptor const &srcDesc,
    \n+
    672 float *dst, BufferDescriptor const &dstDesc,
    \n+
    673 int numPatchCoords,
    \n+
    674 const PatchCoord *patchCoords,
    \n+
    675 const PatchArray *patchArrays,
    \n+
    676 const int *patchIndexBuffer,
    \n+
    677 const PatchParam *patchParamBuffer);
    \n+
    678
    \n+
    716 static bool EvalPatches(
    \n+
    717 const float *src, BufferDescriptor const &srcDesc,
    \n+
    718 float *dst, BufferDescriptor const &dstDesc,
    \n+
    719 float *du, BufferDescriptor const &duDesc,
    \n+
    720 float *dv, BufferDescriptor const &dvDesc,
    \n+
    721 int numPatchCoords,
    \n+
    722 PatchCoord const *patchCoords,
    \n+
    723 PatchArray const *patchArrays,
    \n+
    724 const int *patchIndexBuffer,
    \n+
    725 PatchParam const *patchParamBuffer);
    \n+
    726
    \n+
    779 static bool EvalPatches(
    \n+
    780 const float *src, BufferDescriptor const &srcDesc,
    \n+
    781 float *dst, BufferDescriptor const &dstDesc,
    \n+
    782 float *du, BufferDescriptor const &duDesc,
    \n+
    783 float *dv, BufferDescriptor const &dvDesc,
    \n+
    784 float *duu, BufferDescriptor const &duuDesc,
    \n+
    785 float *duv, BufferDescriptor const &duvDesc,
    \n+
    786 float *dvv, BufferDescriptor const &dvvDesc,
    \n+
    787 int numPatchCoords,
    \n+
    788 PatchCoord const *patchCoords,
    \n+
    789 PatchArray const *patchArrays,
    \n+
    790 const int *patchIndexBuffer,
    \n+
    791 PatchParam const *patchParamBuffer);
    \n+
    792
    \n+
    821 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    822 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    824 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    825 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    826 int numPatchCoords,
    \n+
    827 PATCHCOORD_BUFFER *patchCoords,
    \n+
    828 PATCH_TABLE *patchTable,
    \n+
    829 OmpEvaluator const *instance = NULL,
    \n+
    830 void * deviceContext = NULL) {
    \n+
    831
    \n+
    832 (void)instance; // unused
    \n+
    833 (void)deviceContext; // unused
    \n+
    834
    \n+
    835 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
    \n+
    836 dstBuffer->BindCpuBuffer(), dstDesc,
    \n+
    837 numPatchCoords,
    \n+
    838 (const PatchCoord*)patchCoords->BindCpuBuffer(),
    \n+
    839 patchTable->GetVaryingPatchArrayBuffer(),
    \n+
    840 patchTable->GetVaryingPatchIndexBuffer(),
    \n+
    841 patchTable->GetPatchParamBuffer());
    \n+
    842 }
    \n+
    \n+
    843
    \n+
    884 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    885 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    887 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    888 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    889 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    890 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    891 int numPatchCoords,
    \n+
    892 PATCHCOORD_BUFFER *patchCoords,
    \n+
    893 PATCH_TABLE *patchTable,
    \n+
    894 OmpEvaluator const *instance = NULL,
    \n+
    895 void * deviceContext = NULL) {
    \n+
    896
    \n+
    897 (void)instance; // unused
    \n+
    898 (void)deviceContext; // unused
    \n+
    899
    \n+
    900 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
    \n+
    901 dstBuffer->BindCpuBuffer(), dstDesc,
    \n+
    902 duBuffer->BindCpuBuffer(), duDesc,
    \n+
    903 dvBuffer->BindCpuBuffer(), dvDesc,
    \n+
    904 numPatchCoords,
    \n+
    905 (const PatchCoord*)patchCoords->BindCpuBuffer(),
    \n+
    906 patchTable->GetVaryingPatchArrayBuffer(),
    \n+
    907 patchTable->GetVaryingPatchIndexBuffer(),
    \n+
    908 patchTable->GetPatchParamBuffer());
    \n+
    909 }
    \n+
    \n+
    910
    \n+
    969 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    970 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    972 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    973 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    974 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    975 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    976 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n+
    977 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n+
    978 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n+
    979 int numPatchCoords,
    \n+
    980 PATCHCOORD_BUFFER *patchCoords,
    \n+
    981 PATCH_TABLE *patchTable,
    \n+
    982 OmpEvaluator const *instance = NULL,
    \n+
    983 void * deviceContext = NULL) {
    \n+
    984
    \n+
    985 (void)instance; // unused
    \n+
    986 (void)deviceContext; // unused
    \n+
    987
    \n+
    988 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
    \n+
    989 dstBuffer->BindCpuBuffer(), dstDesc,
    \n+
    990 duBuffer->BindCpuBuffer(), duDesc,
    \n+
    991 dvBuffer->BindCpuBuffer(), dvDesc,
    \n+
    992 duuBuffer->BindCpuBuffer(), duuDesc,
    \n+
    993 duvBuffer->BindCpuBuffer(), duvDesc,
    \n+
    994 dvvBuffer->BindCpuBuffer(), dvvDesc,
    \n+
    995 numPatchCoords,
    \n+
    996 (const PatchCoord*)patchCoords->BindCpuBuffer(),
    \n+
    997 patchTable->GetVaryingPatchArrayBuffer(),
    \n+
    998 patchTable->GetVaryingPatchIndexBuffer(),
    \n+
    999 patchTable->GetPatchParamBuffer());
    \n+
    1000 }
    \n+
    \n+
    1001
    \n+
    1032 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1033 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1035 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1036 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1037 int numPatchCoords,
    \n+
    1038 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1039 PATCH_TABLE *patchTable,
    \n+
    1040 int fvarChannel,
    \n+
    1041 OmpEvaluator const *instance = NULL,
    \n+
    1042 void * deviceContext = NULL) {
    \n+
    1043
    \n+
    1044 (void)instance; // unused
    \n+
    1045 (void)deviceContext; // unused
    \n+
    1046
    \n+
    1047 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
    \n+
    1048 dstBuffer->BindCpuBuffer(), dstDesc,
    \n+
    1049 numPatchCoords,
    \n+
    1050 (const PatchCoord*)patchCoords->BindCpuBuffer(),
    \n+
    1051 patchTable->GetFVarPatchArrayBuffer(fvarChannel),
    \n+
    1052 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
    \n+
    1053 patchTable->GetFVarPatchParamBuffer(fvarChannel));
    \n+
    1054 }
    \n+
    \n+
    1055
    \n+
    1098 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1099 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1101 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1102 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1103 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    1104 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    1105 int numPatchCoords,
    \n+
    1106 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1107 PATCH_TABLE *patchTable,
    \n+
    1108 int fvarChannel,
    \n+
    1109 OmpEvaluator const *instance = NULL,
    \n+
    1110 void * deviceContext = NULL) {
    \n+
    1111
    \n+
    1112 (void)instance; // unused
    \n+
    1113 (void)deviceContext; // unused
    \n+
    1114
    \n+
    1115 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
    \n+
    1116 dstBuffer->BindCpuBuffer(), dstDesc,
    \n+
    1117 duBuffer->BindCpuBuffer(), duDesc,
    \n+
    1118 dvBuffer->BindCpuBuffer(), dvDesc,
    \n+
    1119 numPatchCoords,
    \n+
    1120 (const PatchCoord*)patchCoords->BindCpuBuffer(),
    \n+
    1121 patchTable->GetFVarPatchArrayBuffer(fvarChannel),
    \n+
    1122 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
    \n+
    1123 patchTable->GetFVarPatchParamBuffer(fvarChannel));
    \n+
    1124 }
    \n+
    \n+
    1125
    \n+
    1186 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n+
    1187 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n+
    \n+\n+
    1189 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n+
    1190 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n+
    1191 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n+
    1192 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n+
    1193 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n+
    1194 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n+
    1195 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n+
    1196 int numPatchCoords,
    \n+
    1197 PATCHCOORD_BUFFER *patchCoords,
    \n+
    1198 PATCH_TABLE *patchTable,
    \n+
    1199 int fvarChannel,
    \n+
    1200 OmpEvaluator const *instance = NULL,
    \n+
    1201 void * deviceContext = NULL) {
    \n+
    1202
    \n+
    1203 (void)instance; // unused
    \n+
    1204 (void)deviceContext; // unused
    \n+
    1205
    \n+
    1206 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
    \n+
    1207 dstBuffer->BindCpuBuffer(), dstDesc,
    \n+
    1208 duBuffer->BindCpuBuffer(), duDesc,
    \n+
    1209 dvBuffer->BindCpuBuffer(), dvDesc,
    \n+
    1210 duuBuffer->BindCpuBuffer(), duuDesc,
    \n+
    1211 duvBuffer->BindCpuBuffer(), duvDesc,
    \n+
    1212 dvvBuffer->BindCpuBuffer(), dvvDesc,
    \n+
    1213 numPatchCoords,
    \n+
    1214 (const PatchCoord*)patchCoords->BindCpuBuffer(),
    \n+
    1215 patchTable->GetFVarPatchArrayBuffer(fvarChannel),
    \n+
    1216 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
    \n+
    1217 patchTable->GetFVarPatchParamBuffer(fvarChannel));
    \n+
    1218 }
    \n+
    \n+
    1219
    \n+
    1225
    \n+
    1226 static void Synchronize(void *deviceContext = NULL);
    \n+
    1227
    \n+
    1228 static void SetNumThreads(int numThreads);
    \n+
    1229};
    \n+
    \n+
    1230
    \n+
    1231
    \n+
    1232} // end namespace Osd
    \n+
    1233
    \n+
    1234} // end namespace OPENSUBDIV_VERSION
    \n+
    1235using namespace OPENSUBDIV_VERSION;
    \n+
    1236
    \n+
    1237} // end namespace OpenSubdiv
    \n+
    1238
    \n+
    1239
    \n+
    1240#endif // OPENSUBDIV3_OSD_OMP_EVALUATOR_H
    \n+\n
    BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
    \n+\n+
    static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, OmpEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    static bool EvalStencils(const float *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, const int *sizes, const int *offsets, const int *indices, const float *weights, int start, int end)
    Static eval stencils function which takes raw CPU pointers for input and output.
    \n+
    static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, OmpEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, STENCIL_TABLE const *stencilTable, const OmpEvaluator *instance=NULL, void *deviceContext=NULL)
    Generic static eval stencils function with derivatives. This function has a same signature as other d...
    \n+
    static bool EvalStencils(const float *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, float *du, BufferDescriptor const &duDesc, float *dv, BufferDescriptor const &dvDesc, const int *sizes, const int *offsets, const int *indices, const float *weights, const float *duWeights, const float *dvWeights, int start, int end)
    Static eval stencils function with derivatives, which takes raw CPU pointers for input and output.
    \n+
    static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, OmpEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, OmpEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    static bool EvalStencils(const float *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, float *du, BufferDescriptor const &duDesc, float *dv, BufferDescriptor const &dvDesc, float *duu, BufferDescriptor const &duuDesc, float *duv, BufferDescriptor const &duvDesc, float *dvv, BufferDescriptor const &dvvDesc, const int *sizes, const int *offsets, const int *indices, const float *weights, const float *duWeights, const float *dvWeights, const float *duuWeights, const float *duvWeights, const float *dvvWeights, int start, int end)
    Static eval stencils function with derivatives, which takes raw CPU pointers for input and output.
    \n+
    static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, const OmpEvaluator *instance=NULL, void *deviceContext=NULL)
    Generic static eval stencils function. This function has a same signature as other device kernels hav...
    \n+
    static bool EvalPatches(const float *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, float *du, BufferDescriptor const &duDesc, float *dv, BufferDescriptor const &dvDesc, float *duu, BufferDescriptor const &duuDesc, float *duv, BufferDescriptor const &duvDesc, float *dvv, BufferDescriptor const &dvvDesc, int numPatchCoords, PatchCoord const *patchCoords, PatchArray const *patchArrays, const int *patchIndexBuffer, PatchParam const *patchParamBuffer)
    Static limit eval function. It takes an array of PatchCoord and evaluate limit values on given PatchT...
    \n+
    static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, OmpEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic limit eval function with derivatives. This function has a same signature as other device kern...
    \n+
    static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, OmpEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, OmpEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic limit eval function with derivatives. This function has a same signature as other device kern...
    \n+
    static void Synchronize(void *deviceContext=NULL)
    \n+
    static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, STENCIL_TABLE const *stencilTable, const OmpEvaluator *instance=NULL, void *deviceContext=NULL)
    Generic static eval stencils function with derivatives. This function has a same signature as other d...
    \n+
    static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, OmpEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    static bool EvalPatches(const float *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, float *du, BufferDescriptor const &duDesc, float *dv, BufferDescriptor const &dvDesc, int numPatchCoords, PatchCoord const *patchCoords, PatchArray const *patchArrays, const int *patchIndexBuffer, PatchParam const *patchParamBuffer)
    Static limit eval function. It takes an array of PatchCoord and evaluate limit values on given PatchT...
    \n+\n+
    static bool EvalPatches(const float *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, int numPatchCoords, const PatchCoord *patchCoords, const PatchArray *patchArrays, const int *patchIndexBuffer, const PatchParam *patchParamBuffer)
    Static limit eval function. It takes an array of PatchCoord and evaluate limit values on given PatchT...
    \n+
    static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, OmpEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n+
    Coordinates set on a patch table.
    Definition types.h:42
    \n+\n+\n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,15 +1,15 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-ompKernel.h\n+ompEvaluator.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n-2// Copyright 2013 Pixar\n+2// Copyright 2015 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n 7// Section 6. Trademarks. is deleted and replaced with:\n 8//\n 9// 6. Trademarks. This License does not grant permission to use the trade\n@@ -24,82 +24,655 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_OMP_KERNEL_H\n-26#define OPENSUBDIV3_OSD_OMP_KERNEL_H\n+25#ifndef OPENSUBDIV3_OSD_OMP_EVALUATOR_H\n+26#define OPENSUBDIV3_OSD_OMP_EVALUATOR_H\n 27\n 28#include \"../version.h\"\n-29\n-30namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-31namespace OPENSUBDIV_VERSION {\n-32\n-33namespace Osd {\n-34\n-35struct BufferDescriptor;\n+29#include \"../osd/bufferDescriptor.h\"\n+30#include \"../osd/types.h\"\n+31\n+32#include \n+33\n+34namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+35namespace OPENSUBDIV_VERSION {\n 36\n-37void\n-_\b3_\b8_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(float const * src, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-39 float * dst, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-40 int const * sizes,\n-41 int const * offsets,\n-42 int const * indices,\n-43 float const * weights,\n-44 int start, int end);\n-45\n-46void\n-_\b4_\b7_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(float const * src, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-48 float * dst, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-49 float * dstDu, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDuDesc,\n-50 float * dstDv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDvDesc,\n-51 int const * sizes,\n-52 int const * offsets,\n-53 int const * indices,\n-54 float const * weights,\n-55 float const * duWeights,\n-56 float const * dvWeights,\n-57 int start, int end);\n-58\n-59void\n-_\b6_\b0_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(float const * src, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-61 float * dst, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-62 float * dstDu, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDuDesc,\n-63 float * dstDv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDvDesc,\n-64 float * dstDuu, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDuuDesc,\n-65 float * dstDuv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDuvDesc,\n-66 float * dstDvv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDvvDesc,\n-67 int const * sizes,\n-68 int const * offsets,\n-69 int const * indices,\n-70 float const * weights,\n-71 float const * duWeights,\n-72 float const * dvWeights,\n-73 float const * duuWeights,\n-74 float const * duvWeights,\n-75 float const * dvvWeights,\n-76 int start, int end);\n-77\n-78} // end namespace Osd\n-79\n-80} // end namespace OPENSUBDIV_VERSION\n-81using namespace OPENSUBDIV_VERSION;\n-82\n-83} // end namespace OpenSubdiv\n+37namespace Osd {\n+38\n+_\b3_\b9class _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br {\n+40public:\n+46\n+71 template \n+_\b7_\b2 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n+73 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+74 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+75 STENCIL_TABLE const *stencilTable,\n+76 const _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br *instance = NULL,\n+77 void * deviceContext = NULL) {\n+78\n+79 (void)instance; // unused\n+80 (void)deviceContext; // unused\n+81\n+82 if (stencilTable->GetNumStencils() == 0)\n+83 return false;\n 84\n-85#endif // OPENSUBDIV3_OSD_OMP_KERNEL_H\n+85 return _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer->BindCpuBuffer(), srcDesc,\n+86 dstBuffer->BindCpuBuffer(), dstDesc,\n+87 &stencilTable->GetSizes()[0],\n+88 &stencilTable->GetOffsets()[0],\n+89 &stencilTable->GetControlIndices()[0],\n+90 &stencilTable->GetWeights()[0],\n+91 /*start = */ 0,\n+92 /*end = */ stencilTable->GetNumStencils());\n+93 }\n+94\n+_\b1_\b2_\b1 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n+122 const float *src, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+123 float *dst, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+124 const int * sizes,\n+125 const int * offsets,\n+126 const int * indices,\n+127 const float * weights,\n+128 int start, int end);\n+129\n+167 template \n+_\b1_\b6_\b8 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n+169 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+170 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+171 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+172 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+173 STENCIL_TABLE const *stencilTable,\n+174 const _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br *instance = NULL,\n+175 void * deviceContext = NULL) {\n+176\n+177 (void)instance; // unused\n+178 (void)deviceContext; // unused\n+179\n+180 return _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer->BindCpuBuffer(), srcDesc,\n+181 dstBuffer->BindCpuBuffer(), dstDesc,\n+182 duBuffer->BindCpuBuffer(), duDesc,\n+183 dvBuffer->BindCpuBuffer(), dvDesc,\n+184 &stencilTable->GetSizes()[0],\n+185 &stencilTable->GetOffsets()[0],\n+186 &stencilTable->GetControlIndices()[0],\n+187 &stencilTable->GetWeights()[0],\n+188 &stencilTable->GetDuWeights()[0],\n+189 &stencilTable->GetDvWeights()[0],\n+190 /*start = */ 0,\n+191 /*end = */ stencilTable->GetNumStencils());\n+192 }\n+193\n+_\b2_\b3_\b4 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n+235 const float *src, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+236 float *dst, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+237 float *du, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+238 float *dv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+239 const int * sizes,\n+240 const int * offsets,\n+241 const int * indices,\n+242 const float * weights,\n+243 const float * duWeights,\n+244 const float * dvWeights,\n+245 int start, int end);\n+246\n+302 template \n+_\b3_\b0_\b3 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n+304 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+305 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+306 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+307 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+308 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+309 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+310 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+311 STENCIL_TABLE const *stencilTable,\n+312 const _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br *instance = NULL,\n+313 void * deviceContext = NULL) {\n+314\n+315 (void)instance; // unused\n+316 (void)deviceContext; // unused\n+317\n+318 return _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer->BindCpuBuffer(), srcDesc,\n+319 dstBuffer->BindCpuBuffer(), dstDesc,\n+320 duBuffer->BindCpuBuffer(), duDesc,\n+321 dvBuffer->BindCpuBuffer(), dvDesc,\n+322 duuBuffer->BindCpuBuffer(), duuDesc,\n+323 duvBuffer->BindCpuBuffer(), duvDesc,\n+324 dvvBuffer->BindCpuBuffer(), dvvDesc,\n+325 &stencilTable->GetSizes()[0],\n+326 &stencilTable->GetOffsets()[0],\n+327 &stencilTable->GetControlIndices()[0],\n+328 &stencilTable->GetWeights()[0],\n+329 &stencilTable->GetDuWeights()[0],\n+330 &stencilTable->GetDvWeights()[0],\n+331 &stencilTable->GetDuuWeights()[0],\n+332 &stencilTable->GetDuvWeights()[0],\n+333 &stencilTable->GetDvvWeights()[0],\n+334 /*start = */ 0,\n+335 /*end = */ stencilTable->GetNumStencils());\n+336 }\n+337\n+_\b3_\b9_\b9 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n+400 const float *src, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+401 float *dst, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+402 float *du, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+403 float *dv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+404 float *duu, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+405 float *duv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+406 float *dvv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+407 const int * sizes,\n+408 const int * offsets,\n+409 const int * indices,\n+410 const float * weights,\n+411 const float * duWeights,\n+412 const float * dvWeights,\n+413 const float * duuWeights,\n+414 const float * duvWeights,\n+415 const float * dvvWeights,\n+416 int start, int end);\n+417\n+423\n+452 template \n+_\b4_\b5_\b4 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n+455 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+456 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+457 int numPatchCoords,\n+458 PATCHCOORD_BUFFER *patchCoords,\n+459 PATCH_TABLE *patchTable,\n+460 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance = NULL,\n+461 void * deviceContext = NULL) {\n+462\n+463 (void)instance; // unused\n+464 (void)deviceContext; // unused\n+465\n+466 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindCpuBuffer(), srcDesc,\n+467 dstBuffer->BindCpuBuffer(), dstDesc,\n+468 numPatchCoords,\n+469 (const _\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd*)patchCoords->BindCpuBuffer(),\n+470 patchTable->GetPatchArrayBuffer(),\n+471 patchTable->GetPatchIndexBuffer(),\n+472 patchTable->GetPatchParamBuffer());\n+473 }\n+474\n+515 template \n+_\b5_\b1_\b7 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n+518 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+519 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+520 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+521 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+522 int numPatchCoords,\n+523 PATCHCOORD_BUFFER *patchCoords,\n+524 PATCH_TABLE *patchTable,\n+525 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance = NULL,\n+526 void * deviceContext = NULL) {\n+527\n+528 (void)instance; // unused\n+529 (void)deviceContext; // unused\n+530\n+531 // XXX: PatchCoords is somewhat abusing vertex primvar buffer interop.\n+532 // ideally all buffer classes should have templated by datatype\n+533 // so that downcast isn't needed there.\n+534 // (e.g. Osd::CpuBuffer )\n+535 //\n+536 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindCpuBuffer(), srcDesc,\n+537 dstBuffer->BindCpuBuffer(), dstDesc,\n+538 duBuffer->BindCpuBuffer(), duDesc,\n+539 dvBuffer->BindCpuBuffer(), dvDesc,\n+540 numPatchCoords,\n+541 (const _\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd*)patchCoords->BindCpuBuffer(),\n+542 patchTable->GetPatchArrayBuffer(),\n+543 patchTable->GetPatchIndexBuffer(),\n+544 patchTable->GetPatchParamBuffer());\n+545 }\n+546\n+605 template \n+_\b6_\b0_\b7 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n+608 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+609 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+610 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+611 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+612 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+613 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+614 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+615 int numPatchCoords,\n+616 PATCHCOORD_BUFFER *patchCoords,\n+617 PATCH_TABLE *patchTable,\n+618 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance = NULL,\n+619 void * deviceContext = NULL) {\n+620\n+621 (void)instance; // unused\n+622 (void)deviceContext; // unused\n+623\n+624 // XXX: PatchCoords is somewhat abusing vertex primvar buffer interop.\n+625 // ideally all buffer classes should have templated by datatype\n+626 // so that downcast isn't needed there.\n+627 // (e.g. Osd::CpuBuffer )\n+628 //\n+629 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindCpuBuffer(), srcDesc,\n+630 dstBuffer->BindCpuBuffer(), dstDesc,\n+631 duBuffer->BindCpuBuffer(), duDesc,\n+632 dvBuffer->BindCpuBuffer(), dvDesc,\n+633 duuBuffer->BindCpuBuffer(), duuDesc,\n+634 duvBuffer->BindCpuBuffer(), duvDesc,\n+635 dvvBuffer->BindCpuBuffer(), dvvDesc,\n+636 numPatchCoords,\n+637 (const _\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd*)patchCoords->BindCpuBuffer(),\n+638 patchTable->GetPatchArrayBuffer(),\n+639 patchTable->GetPatchIndexBuffer(),\n+640 patchTable->GetPatchParamBuffer());\n+641 }\n+642\n+_\b6_\b7_\b0 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n+671 const float *src, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+672 float *dst, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+673 int numPatchCoords,\n+674 const _\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd *patchCoords,\n+675 const _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by *patchArrays,\n+676 const int *patchIndexBuffer,\n+677 const _\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm *patchParamBuffer);\n+678\n+_\b7_\b1_\b6 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n+717 const float *src, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+718 float *dst, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+719 float *du, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+720 float *dv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+721 int numPatchCoords,\n+722 _\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd const *patchCoords,\n+723 _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by const *patchArrays,\n+724 const int *patchIndexBuffer,\n+725 _\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm const *patchParamBuffer);\n+726\n+_\b7_\b7_\b9 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n+780 const float *src, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+781 float *dst, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+782 float *du, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+783 float *dv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+784 float *duu, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+785 float *duv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+786 float *dvv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+787 int numPatchCoords,\n+788 _\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd const *patchCoords,\n+789 _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by const *patchArrays,\n+790 const int *patchIndexBuffer,\n+791 _\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm const *patchParamBuffer);\n+792\n+821 template \n+_\b8_\b2_\b3 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+824 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+825 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+826 int numPatchCoords,\n+827 PATCHCOORD_BUFFER *patchCoords,\n+828 PATCH_TABLE *patchTable,\n+829 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance = NULL,\n+830 void * deviceContext = NULL) {\n+831\n+832 (void)instance; // unused\n+833 (void)deviceContext; // unused\n+834\n+835 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindCpuBuffer(), srcDesc,\n+836 dstBuffer->BindCpuBuffer(), dstDesc,\n+837 numPatchCoords,\n+838 (const _\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd*)patchCoords->BindCpuBuffer(),\n+839 patchTable->GetVaryingPatchArrayBuffer(),\n+840 patchTable->GetVaryingPatchIndexBuffer(),\n+841 patchTable->GetPatchParamBuffer());\n+842 }\n+843\n+884 template \n+_\b8_\b8_\b6 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+887 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+888 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+889 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+890 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+891 int numPatchCoords,\n+892 PATCHCOORD_BUFFER *patchCoords,\n+893 PATCH_TABLE *patchTable,\n+894 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance = NULL,\n+895 void * deviceContext = NULL) {\n+896\n+897 (void)instance; // unused\n+898 (void)deviceContext; // unused\n+899\n+900 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindCpuBuffer(), srcDesc,\n+901 dstBuffer->BindCpuBuffer(), dstDesc,\n+902 duBuffer->BindCpuBuffer(), duDesc,\n+903 dvBuffer->BindCpuBuffer(), dvDesc,\n+904 numPatchCoords,\n+905 (const _\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd*)patchCoords->BindCpuBuffer(),\n+906 patchTable->GetVaryingPatchArrayBuffer(),\n+907 patchTable->GetVaryingPatchIndexBuffer(),\n+908 patchTable->GetPatchParamBuffer());\n+909 }\n+910\n+969 template \n+_\b9_\b7_\b1 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+972 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+973 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+974 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+975 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+976 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+977 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+978 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+979 int numPatchCoords,\n+980 PATCHCOORD_BUFFER *patchCoords,\n+981 PATCH_TABLE *patchTable,\n+982 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance = NULL,\n+983 void * deviceContext = NULL) {\n+984\n+985 (void)instance; // unused\n+986 (void)deviceContext; // unused\n+987\n+988 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindCpuBuffer(), srcDesc,\n+989 dstBuffer->BindCpuBuffer(), dstDesc,\n+990 duBuffer->BindCpuBuffer(), duDesc,\n+991 dvBuffer->BindCpuBuffer(), dvDesc,\n+992 duuBuffer->BindCpuBuffer(), duuDesc,\n+993 duvBuffer->BindCpuBuffer(), duvDesc,\n+994 dvvBuffer->BindCpuBuffer(), dvvDesc,\n+995 numPatchCoords,\n+996 (const _\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd*)patchCoords->BindCpuBuffer(),\n+997 patchTable->GetVaryingPatchArrayBuffer(),\n+998 patchTable->GetVaryingPatchIndexBuffer(),\n+999 patchTable->GetPatchParamBuffer());\n+1000 }\n+1001\n+1032 template \n+_\b1_\b0_\b3_\b4 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1035 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1036 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1037 int numPatchCoords,\n+1038 PATCHCOORD_BUFFER *patchCoords,\n+1039 PATCH_TABLE *patchTable,\n+1040 int fvarChannel,\n+1041 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance = NULL,\n+1042 void * deviceContext = NULL) {\n+1043\n+1044 (void)instance; // unused\n+1045 (void)deviceContext; // unused\n+1046\n+1047 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindCpuBuffer(), srcDesc,\n+1048 dstBuffer->BindCpuBuffer(), dstDesc,\n+1049 numPatchCoords,\n+1050 (const _\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd*)patchCoords->BindCpuBuffer(),\n+1051 patchTable->GetFVarPatchArrayBuffer(fvarChannel),\n+1052 patchTable->GetFVarPatchIndexBuffer(fvarChannel),\n+1053 patchTable->GetFVarPatchParamBuffer(fvarChannel));\n+1054 }\n+1055\n+1098 template \n+_\b1_\b1_\b0_\b0 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1101 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1102 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1103 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+1104 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+1105 int numPatchCoords,\n+1106 PATCHCOORD_BUFFER *patchCoords,\n+1107 PATCH_TABLE *patchTable,\n+1108 int fvarChannel,\n+1109 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance = NULL,\n+1110 void * deviceContext = NULL) {\n+1111\n+1112 (void)instance; // unused\n+1113 (void)deviceContext; // unused\n+1114\n+1115 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindCpuBuffer(), srcDesc,\n+1116 dstBuffer->BindCpuBuffer(), dstDesc,\n+1117 duBuffer->BindCpuBuffer(), duDesc,\n+1118 dvBuffer->BindCpuBuffer(), dvDesc,\n+1119 numPatchCoords,\n+1120 (const _\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd*)patchCoords->BindCpuBuffer(),\n+1121 patchTable->GetFVarPatchArrayBuffer(fvarChannel),\n+1122 patchTable->GetFVarPatchIndexBuffer(fvarChannel),\n+1123 patchTable->GetFVarPatchParamBuffer(fvarChannel));\n+1124 }\n+1125\n+1186 template \n+_\b1_\b1_\b8_\b8 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n+1189 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+1190 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+1191 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+1192 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+1193 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+1194 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+1195 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+1196 int numPatchCoords,\n+1197 PATCHCOORD_BUFFER *patchCoords,\n+1198 PATCH_TABLE *patchTable,\n+1199 int fvarChannel,\n+1200 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance = NULL,\n+1201 void * deviceContext = NULL) {\n+1202\n+1203 (void)instance; // unused\n+1204 (void)deviceContext; // unused\n+1205\n+1206 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindCpuBuffer(), srcDesc,\n+1207 dstBuffer->BindCpuBuffer(), dstDesc,\n+1208 duBuffer->BindCpuBuffer(), duDesc,\n+1209 dvBuffer->BindCpuBuffer(), dvDesc,\n+1210 duuBuffer->BindCpuBuffer(), duuDesc,\n+1211 duvBuffer->BindCpuBuffer(), duvDesc,\n+1212 dvvBuffer->BindCpuBuffer(), dvvDesc,\n+1213 numPatchCoords,\n+1214 (const _\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd*)patchCoords->BindCpuBuffer(),\n+1215 patchTable->GetFVarPatchArrayBuffer(fvarChannel),\n+1216 patchTable->GetFVarPatchIndexBuffer(fvarChannel),\n+1217 patchTable->GetFVarPatchParamBuffer(fvarChannel));\n+1218 }\n+1219\n+1225\n+_\b1_\b2_\b2_\b6 static void _\bS_\by_\bn_\bc_\bh_\br_\bo_\bn_\bi_\bz_\be(void *deviceContext = NULL);\n+1227\n+_\b1_\b2_\b2_\b8 static void _\bS_\be_\bt_\bN_\bu_\bm_\bT_\bh_\br_\be_\ba_\bd_\bs(int numThreads);\n+1229};\n+1230\n+1231\n+1232} // end namespace Osd\n+1233\n+1234} // end namespace OPENSUBDIV_VERSION\n+1235using namespace OPENSUBDIV_VERSION;\n+1236\n+1237} // end namespace OpenSubdiv\n+1238\n+1239\n+1240#endif // OPENSUBDIV3_OSD_OMP_EVALUATOR_H\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n-void OmpEvalStencils(float const *src, BufferDescriptor const &srcDesc, float\n-*dst, BufferDescriptor const &dstDesc, int const *sizes, int const *offsets,\n-int const *indices, float const *weights, int start, int end)\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n BufferDescriptor is a struct which describes buffer elements in interleaved\n data buffers....\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bb_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b3_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n+static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor\n+const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int\n+numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int\n+fvarChannel, OmpEvaluator const *instance=NULL, void *deviceContext=NULL)\n+Generic limit eval function. This function has a same signature as other device\n+kernels have so that ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b0_\b3_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+static bool EvalStencils(const float *src, BufferDescriptor const &srcDesc,\n+float *dst, BufferDescriptor const &dstDesc, const int *sizes, const int\n+*offsets, const int *indices, const float *weights, int start, int end)\n+Static eval stencils function which takes raw CPU pointers for input and\n+output.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n+static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const\n+&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n+*duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n+BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const\n+&duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER\n+*dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords,\n+PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, OmpEvaluator const\n+*instance=NULL, void *deviceContext=NULL)\n+Generic limit eval function. This function has a same signature as other device\n+kernels have so that ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b9_\b7_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const\n+&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n+*duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n+BufferDescriptor const &dvDesc, STENCIL_TABLE const *stencilTable, const\n+OmpEvaluator *instance=NULL, void *deviceContext=NULL)\n+Generic static eval stencils function with derivatives. This function has a\n+same signature as other d...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b6_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+static bool EvalStencils(const float *src, BufferDescriptor const &srcDesc,\n+float *dst, BufferDescriptor const &dstDesc, float *du, BufferDescriptor const\n+&duDesc, float *dv, BufferDescriptor const &dvDesc, const int *sizes, const int\n+*offsets, const int *indices, const float *weights, const float *duWeights,\n+const float *dvWeights, int start, int end)\n+Static eval stencils function with derivatives, which takes raw CPU pointers\n+for input and output.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n+static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const\n+&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int\n+numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable,\n+OmpEvaluator const *instance=NULL, void *deviceContext=NULL)\n+Generic limit eval function. This function has a same signature as other device\n+kernels have so that ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b8_\b2_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n+static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor\n+const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,\n+DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n+BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER\n+*patchCoords, PATCH_TABLE *patchTable, int fvarChannel, OmpEvaluator const\n+*instance=NULL, void *deviceContext=NULL)\n+Generic limit eval function. This function has a same signature as other device\n+kernels have so that ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b1_\b0_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+static bool EvalStencils(const float *src, BufferDescriptor const &srcDesc,\n+float *dst, BufferDescriptor const &dstDesc, float *du, BufferDescriptor const\n+&duDesc, float *dv, BufferDescriptor const &dvDesc, float *duu,\n+BufferDescriptor const &duuDesc, float *duv, BufferDescriptor const &duvDesc,\n+float *dvv, BufferDescriptor const &dvvDesc, const int *sizes, const int\n+*offsets, const int *indices, const float *weights, const float *duWeights,\n+const float *dvWeights, const float *duuWeights, const float *duvWeights, const\n+float *dvvWeights, int start, int end)\n+Static eval stencils function with derivatives, which takes raw CPU pointers\n+for input and output.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const\n+&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE\n+const *stencilTable, const OmpEvaluator *instance=NULL, void\n+*deviceContext=NULL)\n+Generic static eval stencils function. This function has a same signature as\n+other device kernels hav...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+static bool EvalPatches(const float *src, BufferDescriptor const &srcDesc,\n+float *dst, BufferDescriptor const &dstDesc, float *du, BufferDescriptor const\n+&duDesc, float *dv, BufferDescriptor const &dvDesc, float *duu,\n+BufferDescriptor const &duuDesc, float *duv, BufferDescriptor const &duvDesc,\n+float *dvv, BufferDescriptor const &dvvDesc, int numPatchCoords, PatchCoord\n+const *patchCoords, PatchArray const *patchArrays, const int *patchIndexBuffer,\n+PatchParam const *patchParamBuffer)\n+Static limit eval function. It takes an array of PatchCoord and evaluate limit\n+values on given PatchT...\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n+DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer,\n+BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const\n+&dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE\n+*patchTable, OmpEvaluator const *instance=NULL, void *deviceContext=NULL)\n+Generic limit eval function with derivatives. This function has a same\n+signature as other device kern...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b5_\b1_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n+static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const\n+&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n+*duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n+BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER\n+*patchCoords, PATCH_TABLE *patchTable, OmpEvaluator const *instance=NULL, void\n+*deviceContext=NULL)\n+Generic limit eval function. This function has a same signature as other device\n+kernels have so that ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b8_\b8_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n+DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer,\n+BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const\n+&dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER\n+*duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer,\n+BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER\n+*patchCoords, PATCH_TABLE *patchTable, OmpEvaluator const *instance=NULL, void\n+*deviceContext=NULL)\n+Generic limit eval function with derivatives. This function has a same\n+signature as other device kern...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b6_\b0_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bS_\by_\bn_\bc_\bh_\br_\bo_\bn_\bi_\bz_\be\n+static void Synchronize(void *deviceContext=NULL)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const\n+&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n+*duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n+BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const\n+&duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER\n+*dvvBuffer, BufferDescriptor const &dvvDesc, STENCIL_TABLE const *stencilTable,\n+const OmpEvaluator *instance=NULL, void *deviceContext=NULL)\n+Generic static eval stencils function with derivatives. This function has a\n+same signature as other d...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b3_\b0_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n+DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords,\n+PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, OmpEvaluator const\n+*instance=NULL, void *deviceContext=NULL)\n+Generic limit eval function. This function has a same signature as other device\n+kernels have so that ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b4_\b5_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+static bool EvalPatches(const float *src, BufferDescriptor const &srcDesc,\n+float *dst, BufferDescriptor const &dstDesc, float *du, BufferDescriptor const\n+&duDesc, float *dv, BufferDescriptor const &dvDesc, int numPatchCoords,\n+PatchCoord const *patchCoords, PatchArray const *patchArrays, const int\n+*patchIndexBuffer, PatchParam const *patchParamBuffer)\n+Static limit eval function. It takes an array of PatchCoord and evaluate limit\n+values on given PatchT...\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bS_\be_\bt_\bN_\bu_\bm_\bT_\bh_\br_\be_\ba_\bd_\bs\n+static void SetNumThreads(int numThreads)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n+static bool EvalPatches(const float *src, BufferDescriptor const &srcDesc,\n+float *dst, BufferDescriptor const &dstDesc, int numPatchCoords, const\n+PatchCoord *patchCoords, const PatchArray *patchArrays, const int\n+*patchIndexBuffer, const PatchParam *patchParamBuffer)\n+Static limit eval function. It takes an array of PatchCoord and evaluate limit\n+values on given PatchT...\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n+static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor\n+const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,\n+DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n+BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const\n+&duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER\n+*dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords,\n+PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel,\n+OmpEvaluator const *instance=NULL, void *deviceContext=NULL)\n+Generic limit eval function. This function has a same signature as other device\n+kernels have so that ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b1_\b8_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd\n+Coordinates set on a patch table.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b4_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b6_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b1_\b2_\b7\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bo_\bm_\bp_\bK_\be_\br_\bn_\be_\bl_\b._\bh\n+ * _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00881.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00881.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/ompEvaluator.h File Reference\n+OpenSubdiv: opensubdiv/osd/ompKernel.h File Reference\n \n \n \n \n \n \n \n@@ -88,44 +88,45 @@\n \n \n \n \n \n
    \n \n-
    ompEvaluator.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    ompKernel.h File Reference
    \n \n
    \n
    #include "../version.h"
    \n-#include "../osd/bufferDescriptor.h"
    \n-#include "../osd/types.h"
    \n-#include <cstddef>
    \n
    \n

    Go to the source code of this file.

    \n \n-\n-\n-\n-

    \n-Classes

    class  OmpEvaluator
     
    \n \n \n \n \n \n \n \n+

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
     
    \n+\n+\n+\n+\n+\n+\n+\n

    \n+Functions

    void OmpEvalStencils (float const *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, int const *sizes, int const *offsets, int const *indices, float const *weights, int start, int end)
     
    void OmpEvalStencils (float const *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, float *dstDu, BufferDescriptor const &dstDuDesc, float *dstDv, BufferDescriptor const &dstDvDesc, int const *sizes, int const *offsets, int const *indices, float const *weights, float const *duWeights, float const *dvWeights, int start, int end)
     
    void OmpEvalStencils (float const *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, float *dstDu, BufferDescriptor const &dstDuDesc, float *dstDv, BufferDescriptor const &dstDvDesc, float *dstDuu, BufferDescriptor const &dstDuuDesc, float *dstDuv, BufferDescriptor const &dstDuvDesc, float *dstDvv, BufferDescriptor const &dstDvvDesc, int const *sizes, int const *offsets, int const *indices, float const *weights, float const *duWeights, float const *dvWeights, float const *duuWeights, float const *duvWeights, float const *dvvWeights, int start, int end)
     
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +1,41 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ompEvaluator.h File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+ompKernel.h File Reference\n #include \"../version.h\"\n-#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bb_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\"\n-#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bt_\by_\bp_\be_\bs_\b._\bh\"\n-#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+void\u00a0 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs (float const *src, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc, float\n+ *dst, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc, int const *sizes, int const\n+ *offsets, int const *indices, float const *weights, int start, int end)\n+\u00a0\n+void\u00a0 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs (float const *src, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc, float\n+ *dst, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc, float *dstDu, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+ const &dstDuDesc, float *dstDv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDvDesc, int\n+ const *sizes, int const *offsets, int const *indices, float const\n+ *weights, float const *duWeights, float const *dvWeights, int start, int\n+ end)\n+\u00a0\n+void\u00a0 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs (float const *src, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc, float\n+ *dst, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc, float *dstDu, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+ const &dstDuDesc, float *dstDv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDvDesc, float\n+ *dstDuu, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDuuDesc, float *dstDuv,\n+ _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDuvDesc, float *dstDvv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const\n+ &dstDvvDesc, int const *sizes, int const *offsets, int const *indices,\n+ float const *weights, float const *duWeights, float const *dvWeights,\n+ float const *duuWeights, float const *duvWeights, float const\n+ *dvvWeights, int start, int end)\n+\u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh\n+ * _\bo_\bm_\bp_\bK_\be_\br_\bn_\be_\bl_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00881.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00881.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,5 @@\n var a00881 = [\n- [\"OmpEvaluator\", \"a01305.html\", null]\n+ [\"OmpEvalStencils\", \"a00881.html#a44a05502feb5015035bc81b93cffb99c\", null],\n+ [\"OmpEvalStencils\", \"a00881.html#a907dc53421460557871ddc35f77751f5\", null],\n+ [\"OmpEvalStencils\", \"a00881.html#a870745ff3e883b32547d4db42b3be2bd\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00881_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00881_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/ompEvaluator.h Source File\n+OpenSubdiv: opensubdiv/osd/ompKernel.h Source File\n \n \n \n \n \n \n \n@@ -92,19 +92,19 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    ompEvaluator.h
    \n+
    ompKernel.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n-
    2// Copyright 2015 Pixar
    \n+
    2// Copyright 2013 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n
    6// compliance with the Apache License and the following modification to it:
    \n
    7// Section 6. Trademarks. is deleted and replaced with:
    \n
    8//
    \n
    9// 6. Trademarks. This License does not grant permission to use the trade
    \n@@ -119,528 +119,82 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_OMP_EVALUATOR_H
    \n-
    26#define OPENSUBDIV3_OSD_OMP_EVALUATOR_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_OMP_KERNEL_H
    \n+
    26#define OPENSUBDIV3_OSD_OMP_KERNEL_H
    \n
    27
    \n
    28#include "../version.h"
    \n-
    29#include "../osd/bufferDescriptor.h"
    \n-
    30#include "../osd/types.h"
    \n-
    31
    \n-
    32#include <cstddef>
    \n-
    33
    \n-
    34namespace OpenSubdiv {
    \n-
    35namespace OPENSUBDIV_VERSION {
    \n+
    29
    \n+
    30namespace OpenSubdiv {
    \n+
    31namespace OPENSUBDIV_VERSION {
    \n+
    32
    \n+
    33namespace Osd {
    \n+
    34
    \n+
    35struct BufferDescriptor;
    \n
    36
    \n-
    37namespace Osd {
    \n-
    38
    \n-
    \n-\n-
    40public:
    \n-
    46
    \n-
    71 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n-
    \n-
    72 static bool EvalStencils(
    \n-
    73 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    74 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    75 STENCIL_TABLE const *stencilTable,
    \n-
    76 const OmpEvaluator *instance = NULL,
    \n-
    77 void * deviceContext = NULL) {
    \n-
    78
    \n-
    79 (void)instance; // unused
    \n-
    80 (void)deviceContext; // unused
    \n-
    81
    \n-
    82 if (stencilTable->GetNumStencils() == 0)
    \n-
    83 return false;
    \n+
    37void
    \n+
    38OmpEvalStencils(float const * src, BufferDescriptor const &srcDesc,
    \n+
    39 float * dst, BufferDescriptor const &dstDesc,
    \n+
    40 int const * sizes,
    \n+
    41 int const * offsets,
    \n+
    42 int const * indices,
    \n+
    43 float const * weights,
    \n+
    44 int start, int end);
    \n+
    45
    \n+
    46void
    \n+
    47OmpEvalStencils(float const * src, BufferDescriptor const &srcDesc,
    \n+
    48 float * dst, BufferDescriptor const &dstDesc,
    \n+
    49 float * dstDu, BufferDescriptor const &dstDuDesc,
    \n+
    50 float * dstDv, BufferDescriptor const &dstDvDesc,
    \n+
    51 int const * sizes,
    \n+
    52 int const * offsets,
    \n+
    53 int const * indices,
    \n+
    54 float const * weights,
    \n+
    55 float const * duWeights,
    \n+
    56 float const * dvWeights,
    \n+
    57 int start, int end);
    \n+
    58
    \n+
    59void
    \n+
    60OmpEvalStencils(float const * src, BufferDescriptor const &srcDesc,
    \n+
    61 float * dst, BufferDescriptor const &dstDesc,
    \n+
    62 float * dstDu, BufferDescriptor const &dstDuDesc,
    \n+
    63 float * dstDv, BufferDescriptor const &dstDvDesc,
    \n+
    64 float * dstDuu, BufferDescriptor const &dstDuuDesc,
    \n+
    65 float * dstDuv, BufferDescriptor const &dstDuvDesc,
    \n+
    66 float * dstDvv, BufferDescriptor const &dstDvvDesc,
    \n+
    67 int const * sizes,
    \n+
    68 int const * offsets,
    \n+
    69 int const * indices,
    \n+
    70 float const * weights,
    \n+
    71 float const * duWeights,
    \n+
    72 float const * dvWeights,
    \n+
    73 float const * duuWeights,
    \n+
    74 float const * duvWeights,
    \n+
    75 float const * dvvWeights,
    \n+
    76 int start, int end);
    \n+
    77
    \n+
    78} // end namespace Osd
    \n+
    79
    \n+
    80} // end namespace OPENSUBDIV_VERSION
    \n+
    81using namespace OPENSUBDIV_VERSION;
    \n+
    82
    \n+
    83} // end namespace OpenSubdiv
    \n
    84
    \n-
    85 return EvalStencils(srcBuffer->BindCpuBuffer(), srcDesc,
    \n-
    86 dstBuffer->BindCpuBuffer(), dstDesc,
    \n-
    87 &stencilTable->GetSizes()[0],
    \n-
    88 &stencilTable->GetOffsets()[0],
    \n-
    89 &stencilTable->GetControlIndices()[0],
    \n-
    90 &stencilTable->GetWeights()[0],
    \n-
    91 /*start = */ 0,
    \n-
    92 /*end = */ stencilTable->GetNumStencils());
    \n-
    93 }
    \n-
    \n-
    94
    \n-
    121 static bool EvalStencils(
    \n-
    122 const float *src, BufferDescriptor const &srcDesc,
    \n-
    123 float *dst, BufferDescriptor const &dstDesc,
    \n-
    124 const int * sizes,
    \n-
    125 const int * offsets,
    \n-
    126 const int * indices,
    \n-
    127 const float * weights,
    \n-
    128 int start, int end);
    \n-
    129
    \n-
    167 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n-
    \n-
    168 static bool EvalStencils(
    \n-
    169 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    170 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    171 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    172 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    173 STENCIL_TABLE const *stencilTable,
    \n-
    174 const OmpEvaluator *instance = NULL,
    \n-
    175 void * deviceContext = NULL) {
    \n-
    176
    \n-
    177 (void)instance; // unused
    \n-
    178 (void)deviceContext; // unused
    \n-
    179
    \n-
    180 return EvalStencils(srcBuffer->BindCpuBuffer(), srcDesc,
    \n-
    181 dstBuffer->BindCpuBuffer(), dstDesc,
    \n-
    182 duBuffer->BindCpuBuffer(), duDesc,
    \n-
    183 dvBuffer->BindCpuBuffer(), dvDesc,
    \n-
    184 &stencilTable->GetSizes()[0],
    \n-
    185 &stencilTable->GetOffsets()[0],
    \n-
    186 &stencilTable->GetControlIndices()[0],
    \n-
    187 &stencilTable->GetWeights()[0],
    \n-
    188 &stencilTable->GetDuWeights()[0],
    \n-
    189 &stencilTable->GetDvWeights()[0],
    \n-
    190 /*start = */ 0,
    \n-
    191 /*end = */ stencilTable->GetNumStencils());
    \n-
    192 }
    \n-
    \n-
    193
    \n-
    234 static bool EvalStencils(
    \n-
    235 const float *src, BufferDescriptor const &srcDesc,
    \n-
    236 float *dst, BufferDescriptor const &dstDesc,
    \n-
    237 float *du, BufferDescriptor const &duDesc,
    \n-
    238 float *dv, BufferDescriptor const &dvDesc,
    \n-
    239 const int * sizes,
    \n-
    240 const int * offsets,
    \n-
    241 const int * indices,
    \n-
    242 const float * weights,
    \n-
    243 const float * duWeights,
    \n-
    244 const float * dvWeights,
    \n-
    245 int start, int end);
    \n-
    246
    \n-
    302 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
    \n-
    \n-
    303 static bool EvalStencils(
    \n-
    304 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    305 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    306 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    307 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    308 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n-
    309 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n-
    310 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n-
    311 STENCIL_TABLE const *stencilTable,
    \n-
    312 const OmpEvaluator *instance = NULL,
    \n-
    313 void * deviceContext = NULL) {
    \n-
    314
    \n-
    315 (void)instance; // unused
    \n-
    316 (void)deviceContext; // unused
    \n-
    317
    \n-
    318 return EvalStencils(srcBuffer->BindCpuBuffer(), srcDesc,
    \n-
    319 dstBuffer->BindCpuBuffer(), dstDesc,
    \n-
    320 duBuffer->BindCpuBuffer(), duDesc,
    \n-
    321 dvBuffer->BindCpuBuffer(), dvDesc,
    \n-
    322 duuBuffer->BindCpuBuffer(), duuDesc,
    \n-
    323 duvBuffer->BindCpuBuffer(), duvDesc,
    \n-
    324 dvvBuffer->BindCpuBuffer(), dvvDesc,
    \n-
    325 &stencilTable->GetSizes()[0],
    \n-
    326 &stencilTable->GetOffsets()[0],
    \n-
    327 &stencilTable->GetControlIndices()[0],
    \n-
    328 &stencilTable->GetWeights()[0],
    \n-
    329 &stencilTable->GetDuWeights()[0],
    \n-
    330 &stencilTable->GetDvWeights()[0],
    \n-
    331 &stencilTable->GetDuuWeights()[0],
    \n-
    332 &stencilTable->GetDuvWeights()[0],
    \n-
    333 &stencilTable->GetDvvWeights()[0],
    \n-
    334 /*start = */ 0,
    \n-
    335 /*end = */ stencilTable->GetNumStencils());
    \n-
    336 }
    \n-
    \n-
    337
    \n-
    399 static bool EvalStencils(
    \n-
    400 const float *src, BufferDescriptor const &srcDesc,
    \n-
    401 float *dst, BufferDescriptor const &dstDesc,
    \n-
    402 float *du, BufferDescriptor const &duDesc,
    \n-
    403 float *dv, BufferDescriptor const &dvDesc,
    \n-
    404 float *duu, BufferDescriptor const &duuDesc,
    \n-
    405 float *duv, BufferDescriptor const &duvDesc,
    \n-
    406 float *dvv, BufferDescriptor const &dvvDesc,
    \n-
    407 const int * sizes,
    \n-
    408 const int * offsets,
    \n-
    409 const int * indices,
    \n-
    410 const float * weights,
    \n-
    411 const float * duWeights,
    \n-
    412 const float * dvWeights,
    \n-
    413 const float * duuWeights,
    \n-
    414 const float * duvWeights,
    \n-
    415 const float * dvvWeights,
    \n-
    416 int start, int end);
    \n-
    417
    \n-
    423
    \n-
    452 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    453 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-
    454 static bool EvalPatches(
    \n-
    455 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    456 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    457 int numPatchCoords,
    \n-
    458 PATCHCOORD_BUFFER *patchCoords,
    \n-
    459 PATCH_TABLE *patchTable,
    \n-
    460 OmpEvaluator const *instance = NULL,
    \n-
    461 void * deviceContext = NULL) {
    \n-
    462
    \n-
    463 (void)instance; // unused
    \n-
    464 (void)deviceContext; // unused
    \n-
    465
    \n-
    466 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
    \n-
    467 dstBuffer->BindCpuBuffer(), dstDesc,
    \n-
    468 numPatchCoords,
    \n-
    469 (const PatchCoord*)patchCoords->BindCpuBuffer(),
    \n-
    470 patchTable->GetPatchArrayBuffer(),
    \n-
    471 patchTable->GetPatchIndexBuffer(),
    \n-
    472 patchTable->GetPatchParamBuffer());
    \n-
    473 }
    \n-
    \n-
    474
    \n-
    515 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    516 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-
    517 static bool EvalPatches(
    \n-
    518 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    519 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    520 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    521 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    522 int numPatchCoords,
    \n-
    523 PATCHCOORD_BUFFER *patchCoords,
    \n-
    524 PATCH_TABLE *patchTable,
    \n-
    525 OmpEvaluator const *instance = NULL,
    \n-
    526 void * deviceContext = NULL) {
    \n-
    527
    \n-
    528 (void)instance; // unused
    \n-
    529 (void)deviceContext; // unused
    \n-
    530
    \n-
    531 // XXX: PatchCoords is somewhat abusing vertex primvar buffer interop.
    \n-
    532 // ideally all buffer classes should have templated by datatype
    \n-
    533 // so that downcast isn't needed there.
    \n-
    534 // (e.g. Osd::CpuBuffer<PatchCoord> )
    \n-
    535 //
    \n-
    536 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
    \n-
    537 dstBuffer->BindCpuBuffer(), dstDesc,
    \n-
    538 duBuffer->BindCpuBuffer(), duDesc,
    \n-
    539 dvBuffer->BindCpuBuffer(), dvDesc,
    \n-
    540 numPatchCoords,
    \n-
    541 (const PatchCoord*)patchCoords->BindCpuBuffer(),
    \n-
    542 patchTable->GetPatchArrayBuffer(),
    \n-
    543 patchTable->GetPatchIndexBuffer(),
    \n-
    544 patchTable->GetPatchParamBuffer());
    \n-
    545 }
    \n-
    \n-
    546
    \n-
    605 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    606 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-
    607 static bool EvalPatches(
    \n-
    608 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    609 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    610 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    611 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    612 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n-
    613 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n-
    614 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n-
    615 int numPatchCoords,
    \n-
    616 PATCHCOORD_BUFFER *patchCoords,
    \n-
    617 PATCH_TABLE *patchTable,
    \n-
    618 OmpEvaluator const *instance = NULL,
    \n-
    619 void * deviceContext = NULL) {
    \n-
    620
    \n-
    621 (void)instance; // unused
    \n-
    622 (void)deviceContext; // unused
    \n-
    623
    \n-
    624 // XXX: PatchCoords is somewhat abusing vertex primvar buffer interop.
    \n-
    625 // ideally all buffer classes should have templated by datatype
    \n-
    626 // so that downcast isn't needed there.
    \n-
    627 // (e.g. Osd::CpuBuffer<PatchCoord> )
    \n-
    628 //
    \n-
    629 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
    \n-
    630 dstBuffer->BindCpuBuffer(), dstDesc,
    \n-
    631 duBuffer->BindCpuBuffer(), duDesc,
    \n-
    632 dvBuffer->BindCpuBuffer(), dvDesc,
    \n-
    633 duuBuffer->BindCpuBuffer(), duuDesc,
    \n-
    634 duvBuffer->BindCpuBuffer(), duvDesc,
    \n-
    635 dvvBuffer->BindCpuBuffer(), dvvDesc,
    \n-
    636 numPatchCoords,
    \n-
    637 (const PatchCoord*)patchCoords->BindCpuBuffer(),
    \n-
    638 patchTable->GetPatchArrayBuffer(),
    \n-
    639 patchTable->GetPatchIndexBuffer(),
    \n-
    640 patchTable->GetPatchParamBuffer());
    \n-
    641 }
    \n-
    \n-
    642
    \n-
    670 static bool EvalPatches(
    \n-
    671 const float *src, BufferDescriptor const &srcDesc,
    \n-
    672 float *dst, BufferDescriptor const &dstDesc,
    \n-
    673 int numPatchCoords,
    \n-
    674 const PatchCoord *patchCoords,
    \n-
    675 const PatchArray *patchArrays,
    \n-
    676 const int *patchIndexBuffer,
    \n-
    677 const PatchParam *patchParamBuffer);
    \n-
    678
    \n-
    716 static bool EvalPatches(
    \n-
    717 const float *src, BufferDescriptor const &srcDesc,
    \n-
    718 float *dst, BufferDescriptor const &dstDesc,
    \n-
    719 float *du, BufferDescriptor const &duDesc,
    \n-
    720 float *dv, BufferDescriptor const &dvDesc,
    \n-
    721 int numPatchCoords,
    \n-
    722 PatchCoord const *patchCoords,
    \n-
    723 PatchArray const *patchArrays,
    \n-
    724 const int *patchIndexBuffer,
    \n-
    725 PatchParam const *patchParamBuffer);
    \n-
    726
    \n-
    779 static bool EvalPatches(
    \n-
    780 const float *src, BufferDescriptor const &srcDesc,
    \n-
    781 float *dst, BufferDescriptor const &dstDesc,
    \n-
    782 float *du, BufferDescriptor const &duDesc,
    \n-
    783 float *dv, BufferDescriptor const &dvDesc,
    \n-
    784 float *duu, BufferDescriptor const &duuDesc,
    \n-
    785 float *duv, BufferDescriptor const &duvDesc,
    \n-
    786 float *dvv, BufferDescriptor const &dvvDesc,
    \n-
    787 int numPatchCoords,
    \n-
    788 PatchCoord const *patchCoords,
    \n-
    789 PatchArray const *patchArrays,
    \n-
    790 const int *patchIndexBuffer,
    \n-
    791 PatchParam const *patchParamBuffer);
    \n-
    792
    \n-
    821 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    822 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    824 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    825 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    826 int numPatchCoords,
    \n-
    827 PATCHCOORD_BUFFER *patchCoords,
    \n-
    828 PATCH_TABLE *patchTable,
    \n-
    829 OmpEvaluator const *instance = NULL,
    \n-
    830 void * deviceContext = NULL) {
    \n-
    831
    \n-
    832 (void)instance; // unused
    \n-
    833 (void)deviceContext; // unused
    \n-
    834
    \n-
    835 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
    \n-
    836 dstBuffer->BindCpuBuffer(), dstDesc,
    \n-
    837 numPatchCoords,
    \n-
    838 (const PatchCoord*)patchCoords->BindCpuBuffer(),
    \n-
    839 patchTable->GetVaryingPatchArrayBuffer(),
    \n-
    840 patchTable->GetVaryingPatchIndexBuffer(),
    \n-
    841 patchTable->GetPatchParamBuffer());
    \n-
    842 }
    \n-
    \n-
    843
    \n-
    884 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    885 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    887 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    888 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    889 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    890 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    891 int numPatchCoords,
    \n-
    892 PATCHCOORD_BUFFER *patchCoords,
    \n-
    893 PATCH_TABLE *patchTable,
    \n-
    894 OmpEvaluator const *instance = NULL,
    \n-
    895 void * deviceContext = NULL) {
    \n-
    896
    \n-
    897 (void)instance; // unused
    \n-
    898 (void)deviceContext; // unused
    \n-
    899
    \n-
    900 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
    \n-
    901 dstBuffer->BindCpuBuffer(), dstDesc,
    \n-
    902 duBuffer->BindCpuBuffer(), duDesc,
    \n-
    903 dvBuffer->BindCpuBuffer(), dvDesc,
    \n-
    904 numPatchCoords,
    \n-
    905 (const PatchCoord*)patchCoords->BindCpuBuffer(),
    \n-
    906 patchTable->GetVaryingPatchArrayBuffer(),
    \n-
    907 patchTable->GetVaryingPatchIndexBuffer(),
    \n-
    908 patchTable->GetPatchParamBuffer());
    \n-
    909 }
    \n-
    \n-
    910
    \n-
    969 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    970 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    972 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    973 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    974 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    975 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    976 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n-
    977 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n-
    978 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n-
    979 int numPatchCoords,
    \n-
    980 PATCHCOORD_BUFFER *patchCoords,
    \n-
    981 PATCH_TABLE *patchTable,
    \n-
    982 OmpEvaluator const *instance = NULL,
    \n-
    983 void * deviceContext = NULL) {
    \n-
    984
    \n-
    985 (void)instance; // unused
    \n-
    986 (void)deviceContext; // unused
    \n-
    987
    \n-
    988 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
    \n-
    989 dstBuffer->BindCpuBuffer(), dstDesc,
    \n-
    990 duBuffer->BindCpuBuffer(), duDesc,
    \n-
    991 dvBuffer->BindCpuBuffer(), dvDesc,
    \n-
    992 duuBuffer->BindCpuBuffer(), duuDesc,
    \n-
    993 duvBuffer->BindCpuBuffer(), duvDesc,
    \n-
    994 dvvBuffer->BindCpuBuffer(), dvvDesc,
    \n-
    995 numPatchCoords,
    \n-
    996 (const PatchCoord*)patchCoords->BindCpuBuffer(),
    \n-
    997 patchTable->GetVaryingPatchArrayBuffer(),
    \n-
    998 patchTable->GetVaryingPatchIndexBuffer(),
    \n-
    999 patchTable->GetPatchParamBuffer());
    \n-
    1000 }
    \n-
    \n-
    1001
    \n-
    1032 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1033 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1035 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1036 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1037 int numPatchCoords,
    \n-
    1038 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1039 PATCH_TABLE *patchTable,
    \n-
    1040 int fvarChannel,
    \n-
    1041 OmpEvaluator const *instance = NULL,
    \n-
    1042 void * deviceContext = NULL) {
    \n-
    1043
    \n-
    1044 (void)instance; // unused
    \n-
    1045 (void)deviceContext; // unused
    \n-
    1046
    \n-
    1047 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
    \n-
    1048 dstBuffer->BindCpuBuffer(), dstDesc,
    \n-
    1049 numPatchCoords,
    \n-
    1050 (const PatchCoord*)patchCoords->BindCpuBuffer(),
    \n-
    1051 patchTable->GetFVarPatchArrayBuffer(fvarChannel),
    \n-
    1052 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
    \n-
    1053 patchTable->GetFVarPatchParamBuffer(fvarChannel));
    \n-
    1054 }
    \n-
    \n-
    1055
    \n-
    1098 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1099 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1101 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1102 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1103 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    1104 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    1105 int numPatchCoords,
    \n-
    1106 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1107 PATCH_TABLE *patchTable,
    \n-
    1108 int fvarChannel,
    \n-
    1109 OmpEvaluator const *instance = NULL,
    \n-
    1110 void * deviceContext = NULL) {
    \n-
    1111
    \n-
    1112 (void)instance; // unused
    \n-
    1113 (void)deviceContext; // unused
    \n-
    1114
    \n-
    1115 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
    \n-
    1116 dstBuffer->BindCpuBuffer(), dstDesc,
    \n-
    1117 duBuffer->BindCpuBuffer(), duDesc,
    \n-
    1118 dvBuffer->BindCpuBuffer(), dvDesc,
    \n-
    1119 numPatchCoords,
    \n-
    1120 (const PatchCoord*)patchCoords->BindCpuBuffer(),
    \n-
    1121 patchTable->GetFVarPatchArrayBuffer(fvarChannel),
    \n-
    1122 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
    \n-
    1123 patchTable->GetFVarPatchParamBuffer(fvarChannel));
    \n-
    1124 }
    \n-
    \n-
    1125
    \n-
    1186 template <typename SRC_BUFFER, typename DST_BUFFER,
    \n-
    1187 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
    \n-
    \n-\n-
    1189 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
    \n-
    1190 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
    \n-
    1191 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
    \n-
    1192 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
    \n-
    1193 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
    \n-
    1194 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
    \n-
    1195 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
    \n-
    1196 int numPatchCoords,
    \n-
    1197 PATCHCOORD_BUFFER *patchCoords,
    \n-
    1198 PATCH_TABLE *patchTable,
    \n-
    1199 int fvarChannel,
    \n-
    1200 OmpEvaluator const *instance = NULL,
    \n-
    1201 void * deviceContext = NULL) {
    \n-
    1202
    \n-
    1203 (void)instance; // unused
    \n-
    1204 (void)deviceContext; // unused
    \n-
    1205
    \n-
    1206 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
    \n-
    1207 dstBuffer->BindCpuBuffer(), dstDesc,
    \n-
    1208 duBuffer->BindCpuBuffer(), duDesc,
    \n-
    1209 dvBuffer->BindCpuBuffer(), dvDesc,
    \n-
    1210 duuBuffer->BindCpuBuffer(), duuDesc,
    \n-
    1211 duvBuffer->BindCpuBuffer(), duvDesc,
    \n-
    1212 dvvBuffer->BindCpuBuffer(), dvvDesc,
    \n-
    1213 numPatchCoords,
    \n-
    1214 (const PatchCoord*)patchCoords->BindCpuBuffer(),
    \n-
    1215 patchTable->GetFVarPatchArrayBuffer(fvarChannel),
    \n-
    1216 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
    \n-
    1217 patchTable->GetFVarPatchParamBuffer(fvarChannel));
    \n-
    1218 }
    \n-
    \n-
    1219
    \n-
    1225
    \n-
    1226 static void Synchronize(void *deviceContext = NULL);
    \n-
    1227
    \n-
    1228 static void SetNumThreads(int numThreads);
    \n-
    1229};
    \n-
    \n-
    1230
    \n-
    1231
    \n-
    1232} // end namespace Osd
    \n-
    1233
    \n-
    1234} // end namespace OPENSUBDIV_VERSION
    \n-
    1235using namespace OPENSUBDIV_VERSION;
    \n-
    1236
    \n-
    1237} // end namespace OpenSubdiv
    \n-
    1238
    \n-
    1239
    \n-
    1240#endif // OPENSUBDIV3_OSD_OMP_EVALUATOR_H
    \n-\n+
    85#endif // OPENSUBDIV3_OSD_OMP_KERNEL_H
    \n+\n+
    void OmpEvalStencils(float const *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, int const *sizes, int const *offsets, int const *indices, float const *weights, int start, int end)
    \n
    BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
    \n-\n-
    static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, OmpEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    static bool EvalStencils(const float *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, const int *sizes, const int *offsets, const int *indices, const float *weights, int start, int end)
    Static eval stencils function which takes raw CPU pointers for input and output.
    \n-
    static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, OmpEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, STENCIL_TABLE const *stencilTable, const OmpEvaluator *instance=NULL, void *deviceContext=NULL)
    Generic static eval stencils function with derivatives. This function has a same signature as other d...
    \n-
    static bool EvalStencils(const float *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, float *du, BufferDescriptor const &duDesc, float *dv, BufferDescriptor const &dvDesc, const int *sizes, const int *offsets, const int *indices, const float *weights, const float *duWeights, const float *dvWeights, int start, int end)
    Static eval stencils function with derivatives, which takes raw CPU pointers for input and output.
    \n-
    static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, OmpEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, OmpEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    static bool EvalStencils(const float *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, float *du, BufferDescriptor const &duDesc, float *dv, BufferDescriptor const &dvDesc, float *duu, BufferDescriptor const &duuDesc, float *duv, BufferDescriptor const &duvDesc, float *dvv, BufferDescriptor const &dvvDesc, const int *sizes, const int *offsets, const int *indices, const float *weights, const float *duWeights, const float *dvWeights, const float *duuWeights, const float *duvWeights, const float *dvvWeights, int start, int end)
    Static eval stencils function with derivatives, which takes raw CPU pointers for input and output.
    \n-
    static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, const OmpEvaluator *instance=NULL, void *deviceContext=NULL)
    Generic static eval stencils function. This function has a same signature as other device kernels hav...
    \n-
    static bool EvalPatches(const float *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, float *du, BufferDescriptor const &duDesc, float *dv, BufferDescriptor const &dvDesc, float *duu, BufferDescriptor const &duuDesc, float *duv, BufferDescriptor const &duvDesc, float *dvv, BufferDescriptor const &dvvDesc, int numPatchCoords, PatchCoord const *patchCoords, PatchArray const *patchArrays, const int *patchIndexBuffer, PatchParam const *patchParamBuffer)
    Static limit eval function. It takes an array of PatchCoord and evaluate limit values on given PatchT...
    \n-
    static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, OmpEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic limit eval function with derivatives. This function has a same signature as other device kern...
    \n-
    static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, OmpEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, OmpEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic limit eval function with derivatives. This function has a same signature as other device kern...
    \n-
    static void Synchronize(void *deviceContext=NULL)
    \n-
    static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, STENCIL_TABLE const *stencilTable, const OmpEvaluator *instance=NULL, void *deviceContext=NULL)
    Generic static eval stencils function with derivatives. This function has a same signature as other d...
    \n-
    static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, OmpEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    static bool EvalPatches(const float *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, float *du, BufferDescriptor const &duDesc, float *dv, BufferDescriptor const &dvDesc, int numPatchCoords, PatchCoord const *patchCoords, PatchArray const *patchArrays, const int *patchIndexBuffer, PatchParam const *patchParamBuffer)
    Static limit eval function. It takes an array of PatchCoord and evaluate limit values on given PatchT...
    \n-\n-
    static bool EvalPatches(const float *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, int numPatchCoords, const PatchCoord *patchCoords, const PatchArray *patchArrays, const int *patchIndexBuffer, const PatchParam *patchParamBuffer)
    Static limit eval function. It takes an array of PatchCoord and evaluate limit values on given PatchT...
    \n-
    static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, OmpEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n-
    Coordinates set on a patch table.
    Definition types.h:42
    \n-\n-\n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,15 +1,15 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-ompEvaluator.h\n+ompKernel.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n-2// Copyright 2015 Pixar\n+2// Copyright 2013 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n 7// Section 6. Trademarks. is deleted and replaced with:\n 8//\n 9// 6. Trademarks. This License does not grant permission to use the trade\n@@ -24,655 +24,82 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_OMP_EVALUATOR_H\n-26#define OPENSUBDIV3_OSD_OMP_EVALUATOR_H\n+25#ifndef OPENSUBDIV3_OSD_OMP_KERNEL_H\n+26#define OPENSUBDIV3_OSD_OMP_KERNEL_H\n 27\n 28#include \"../version.h\"\n-29#include \"../osd/bufferDescriptor.h\"\n-30#include \"../osd/types.h\"\n-31\n-32#include \n-33\n-34namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-35namespace OPENSUBDIV_VERSION {\n+29\n+30namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+31namespace OPENSUBDIV_VERSION {\n+32\n+33namespace Osd {\n+34\n+35struct BufferDescriptor;\n 36\n-37namespace Osd {\n-38\n-_\b3_\b9class _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br {\n-40public:\n-46\n-71 template \n-_\b7_\b2 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n-73 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-74 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-75 STENCIL_TABLE const *stencilTable,\n-76 const _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br *instance = NULL,\n-77 void * deviceContext = NULL) {\n-78\n-79 (void)instance; // unused\n-80 (void)deviceContext; // unused\n-81\n-82 if (stencilTable->GetNumStencils() == 0)\n-83 return false;\n+37void\n+_\b3_\b8_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(float const * src, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+39 float * dst, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+40 int const * sizes,\n+41 int const * offsets,\n+42 int const * indices,\n+43 float const * weights,\n+44 int start, int end);\n+45\n+46void\n+_\b4_\b7_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(float const * src, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+48 float * dst, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+49 float * dstDu, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDuDesc,\n+50 float * dstDv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDvDesc,\n+51 int const * sizes,\n+52 int const * offsets,\n+53 int const * indices,\n+54 float const * weights,\n+55 float const * duWeights,\n+56 float const * dvWeights,\n+57 int start, int end);\n+58\n+59void\n+_\b6_\b0_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(float const * src, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+61 float * dst, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+62 float * dstDu, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDuDesc,\n+63 float * dstDv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDvDesc,\n+64 float * dstDuu, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDuuDesc,\n+65 float * dstDuv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDuvDesc,\n+66 float * dstDvv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDvvDesc,\n+67 int const * sizes,\n+68 int const * offsets,\n+69 int const * indices,\n+70 float const * weights,\n+71 float const * duWeights,\n+72 float const * dvWeights,\n+73 float const * duuWeights,\n+74 float const * duvWeights,\n+75 float const * dvvWeights,\n+76 int start, int end);\n+77\n+78} // end namespace Osd\n+79\n+80} // end namespace OPENSUBDIV_VERSION\n+81using namespace OPENSUBDIV_VERSION;\n+82\n+83} // end namespace OpenSubdiv\n 84\n-85 return _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer->BindCpuBuffer(), srcDesc,\n-86 dstBuffer->BindCpuBuffer(), dstDesc,\n-87 &stencilTable->GetSizes()[0],\n-88 &stencilTable->GetOffsets()[0],\n-89 &stencilTable->GetControlIndices()[0],\n-90 &stencilTable->GetWeights()[0],\n-91 /*start = */ 0,\n-92 /*end = */ stencilTable->GetNumStencils());\n-93 }\n-94\n-_\b1_\b2_\b1 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n-122 const float *src, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-123 float *dst, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-124 const int * sizes,\n-125 const int * offsets,\n-126 const int * indices,\n-127 const float * weights,\n-128 int start, int end);\n-129\n-167 template \n-_\b1_\b6_\b8 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n-169 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-170 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-171 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-172 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-173 STENCIL_TABLE const *stencilTable,\n-174 const _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br *instance = NULL,\n-175 void * deviceContext = NULL) {\n-176\n-177 (void)instance; // unused\n-178 (void)deviceContext; // unused\n-179\n-180 return _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer->BindCpuBuffer(), srcDesc,\n-181 dstBuffer->BindCpuBuffer(), dstDesc,\n-182 duBuffer->BindCpuBuffer(), duDesc,\n-183 dvBuffer->BindCpuBuffer(), dvDesc,\n-184 &stencilTable->GetSizes()[0],\n-185 &stencilTable->GetOffsets()[0],\n-186 &stencilTable->GetControlIndices()[0],\n-187 &stencilTable->GetWeights()[0],\n-188 &stencilTable->GetDuWeights()[0],\n-189 &stencilTable->GetDvWeights()[0],\n-190 /*start = */ 0,\n-191 /*end = */ stencilTable->GetNumStencils());\n-192 }\n-193\n-_\b2_\b3_\b4 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n-235 const float *src, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-236 float *dst, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-237 float *du, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-238 float *dv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-239 const int * sizes,\n-240 const int * offsets,\n-241 const int * indices,\n-242 const float * weights,\n-243 const float * duWeights,\n-244 const float * dvWeights,\n-245 int start, int end);\n-246\n-302 template \n-_\b3_\b0_\b3 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n-304 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-305 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-306 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-307 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-308 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-309 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-310 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-311 STENCIL_TABLE const *stencilTable,\n-312 const _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br *instance = NULL,\n-313 void * deviceContext = NULL) {\n-314\n-315 (void)instance; // unused\n-316 (void)deviceContext; // unused\n-317\n-318 return _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(srcBuffer->BindCpuBuffer(), srcDesc,\n-319 dstBuffer->BindCpuBuffer(), dstDesc,\n-320 duBuffer->BindCpuBuffer(), duDesc,\n-321 dvBuffer->BindCpuBuffer(), dvDesc,\n-322 duuBuffer->BindCpuBuffer(), duuDesc,\n-323 duvBuffer->BindCpuBuffer(), duvDesc,\n-324 dvvBuffer->BindCpuBuffer(), dvvDesc,\n-325 &stencilTable->GetSizes()[0],\n-326 &stencilTable->GetOffsets()[0],\n-327 &stencilTable->GetControlIndices()[0],\n-328 &stencilTable->GetWeights()[0],\n-329 &stencilTable->GetDuWeights()[0],\n-330 &stencilTable->GetDvWeights()[0],\n-331 &stencilTable->GetDuuWeights()[0],\n-332 &stencilTable->GetDuvWeights()[0],\n-333 &stencilTable->GetDvvWeights()[0],\n-334 /*start = */ 0,\n-335 /*end = */ stencilTable->GetNumStencils());\n-336 }\n-337\n-_\b3_\b9_\b9 static bool _\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs(\n-400 const float *src, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-401 float *dst, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-402 float *du, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-403 float *dv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-404 float *duu, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-405 float *duv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-406 float *dvv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-407 const int * sizes,\n-408 const int * offsets,\n-409 const int * indices,\n-410 const float * weights,\n-411 const float * duWeights,\n-412 const float * dvWeights,\n-413 const float * duuWeights,\n-414 const float * duvWeights,\n-415 const float * dvvWeights,\n-416 int start, int end);\n-417\n-423\n-452 template \n-_\b4_\b5_\b4 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n-455 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-456 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-457 int numPatchCoords,\n-458 PATCHCOORD_BUFFER *patchCoords,\n-459 PATCH_TABLE *patchTable,\n-460 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance = NULL,\n-461 void * deviceContext = NULL) {\n-462\n-463 (void)instance; // unused\n-464 (void)deviceContext; // unused\n-465\n-466 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindCpuBuffer(), srcDesc,\n-467 dstBuffer->BindCpuBuffer(), dstDesc,\n-468 numPatchCoords,\n-469 (const _\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd*)patchCoords->BindCpuBuffer(),\n-470 patchTable->GetPatchArrayBuffer(),\n-471 patchTable->GetPatchIndexBuffer(),\n-472 patchTable->GetPatchParamBuffer());\n-473 }\n-474\n-515 template \n-_\b5_\b1_\b7 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n-518 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-519 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-520 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-521 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-522 int numPatchCoords,\n-523 PATCHCOORD_BUFFER *patchCoords,\n-524 PATCH_TABLE *patchTable,\n-525 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance = NULL,\n-526 void * deviceContext = NULL) {\n-527\n-528 (void)instance; // unused\n-529 (void)deviceContext; // unused\n-530\n-531 // XXX: PatchCoords is somewhat abusing vertex primvar buffer interop.\n-532 // ideally all buffer classes should have templated by datatype\n-533 // so that downcast isn't needed there.\n-534 // (e.g. Osd::CpuBuffer )\n-535 //\n-536 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindCpuBuffer(), srcDesc,\n-537 dstBuffer->BindCpuBuffer(), dstDesc,\n-538 duBuffer->BindCpuBuffer(), duDesc,\n-539 dvBuffer->BindCpuBuffer(), dvDesc,\n-540 numPatchCoords,\n-541 (const _\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd*)patchCoords->BindCpuBuffer(),\n-542 patchTable->GetPatchArrayBuffer(),\n-543 patchTable->GetPatchIndexBuffer(),\n-544 patchTable->GetPatchParamBuffer());\n-545 }\n-546\n-605 template \n-_\b6_\b0_\b7 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n-608 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-609 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-610 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-611 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-612 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-613 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-614 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-615 int numPatchCoords,\n-616 PATCHCOORD_BUFFER *patchCoords,\n-617 PATCH_TABLE *patchTable,\n-618 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance = NULL,\n-619 void * deviceContext = NULL) {\n-620\n-621 (void)instance; // unused\n-622 (void)deviceContext; // unused\n-623\n-624 // XXX: PatchCoords is somewhat abusing vertex primvar buffer interop.\n-625 // ideally all buffer classes should have templated by datatype\n-626 // so that downcast isn't needed there.\n-627 // (e.g. Osd::CpuBuffer )\n-628 //\n-629 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindCpuBuffer(), srcDesc,\n-630 dstBuffer->BindCpuBuffer(), dstDesc,\n-631 duBuffer->BindCpuBuffer(), duDesc,\n-632 dvBuffer->BindCpuBuffer(), dvDesc,\n-633 duuBuffer->BindCpuBuffer(), duuDesc,\n-634 duvBuffer->BindCpuBuffer(), duvDesc,\n-635 dvvBuffer->BindCpuBuffer(), dvvDesc,\n-636 numPatchCoords,\n-637 (const _\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd*)patchCoords->BindCpuBuffer(),\n-638 patchTable->GetPatchArrayBuffer(),\n-639 patchTable->GetPatchIndexBuffer(),\n-640 patchTable->GetPatchParamBuffer());\n-641 }\n-642\n-_\b6_\b7_\b0 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n-671 const float *src, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-672 float *dst, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-673 int numPatchCoords,\n-674 const _\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd *patchCoords,\n-675 const _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by *patchArrays,\n-676 const int *patchIndexBuffer,\n-677 const _\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm *patchParamBuffer);\n-678\n-_\b7_\b1_\b6 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n-717 const float *src, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-718 float *dst, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-719 float *du, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-720 float *dv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-721 int numPatchCoords,\n-722 _\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd const *patchCoords,\n-723 _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by const *patchArrays,\n-724 const int *patchIndexBuffer,\n-725 _\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm const *patchParamBuffer);\n-726\n-_\b7_\b7_\b9 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(\n-780 const float *src, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-781 float *dst, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-782 float *du, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-783 float *dv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-784 float *duu, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-785 float *duv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-786 float *dvv, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-787 int numPatchCoords,\n-788 _\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd const *patchCoords,\n-789 _\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by const *patchArrays,\n-790 const int *patchIndexBuffer,\n-791 _\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm const *patchParamBuffer);\n-792\n-821 template \n-_\b8_\b2_\b3 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-824 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-825 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-826 int numPatchCoords,\n-827 PATCHCOORD_BUFFER *patchCoords,\n-828 PATCH_TABLE *patchTable,\n-829 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance = NULL,\n-830 void * deviceContext = NULL) {\n-831\n-832 (void)instance; // unused\n-833 (void)deviceContext; // unused\n-834\n-835 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindCpuBuffer(), srcDesc,\n-836 dstBuffer->BindCpuBuffer(), dstDesc,\n-837 numPatchCoords,\n-838 (const _\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd*)patchCoords->BindCpuBuffer(),\n-839 patchTable->GetVaryingPatchArrayBuffer(),\n-840 patchTable->GetVaryingPatchIndexBuffer(),\n-841 patchTable->GetPatchParamBuffer());\n-842 }\n-843\n-884 template \n-_\b8_\b8_\b6 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-887 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-888 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-889 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-890 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-891 int numPatchCoords,\n-892 PATCHCOORD_BUFFER *patchCoords,\n-893 PATCH_TABLE *patchTable,\n-894 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance = NULL,\n-895 void * deviceContext = NULL) {\n-896\n-897 (void)instance; // unused\n-898 (void)deviceContext; // unused\n-899\n-900 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindCpuBuffer(), srcDesc,\n-901 dstBuffer->BindCpuBuffer(), dstDesc,\n-902 duBuffer->BindCpuBuffer(), duDesc,\n-903 dvBuffer->BindCpuBuffer(), dvDesc,\n-904 numPatchCoords,\n-905 (const _\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd*)patchCoords->BindCpuBuffer(),\n-906 patchTable->GetVaryingPatchArrayBuffer(),\n-907 patchTable->GetVaryingPatchIndexBuffer(),\n-908 patchTable->GetPatchParamBuffer());\n-909 }\n-910\n-969 template \n-_\b9_\b7_\b1 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-972 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-973 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-974 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-975 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-976 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-977 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-978 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-979 int numPatchCoords,\n-980 PATCHCOORD_BUFFER *patchCoords,\n-981 PATCH_TABLE *patchTable,\n-982 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance = NULL,\n-983 void * deviceContext = NULL) {\n-984\n-985 (void)instance; // unused\n-986 (void)deviceContext; // unused\n-987\n-988 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindCpuBuffer(), srcDesc,\n-989 dstBuffer->BindCpuBuffer(), dstDesc,\n-990 duBuffer->BindCpuBuffer(), duDesc,\n-991 dvBuffer->BindCpuBuffer(), dvDesc,\n-992 duuBuffer->BindCpuBuffer(), duuDesc,\n-993 duvBuffer->BindCpuBuffer(), duvDesc,\n-994 dvvBuffer->BindCpuBuffer(), dvvDesc,\n-995 numPatchCoords,\n-996 (const _\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd*)patchCoords->BindCpuBuffer(),\n-997 patchTable->GetVaryingPatchArrayBuffer(),\n-998 patchTable->GetVaryingPatchIndexBuffer(),\n-999 patchTable->GetPatchParamBuffer());\n-1000 }\n-1001\n-1032 template \n-_\b1_\b0_\b3_\b4 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1035 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1036 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1037 int numPatchCoords,\n-1038 PATCHCOORD_BUFFER *patchCoords,\n-1039 PATCH_TABLE *patchTable,\n-1040 int fvarChannel,\n-1041 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance = NULL,\n-1042 void * deviceContext = NULL) {\n-1043\n-1044 (void)instance; // unused\n-1045 (void)deviceContext; // unused\n-1046\n-1047 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindCpuBuffer(), srcDesc,\n-1048 dstBuffer->BindCpuBuffer(), dstDesc,\n-1049 numPatchCoords,\n-1050 (const _\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd*)patchCoords->BindCpuBuffer(),\n-1051 patchTable->GetFVarPatchArrayBuffer(fvarChannel),\n-1052 patchTable->GetFVarPatchIndexBuffer(fvarChannel),\n-1053 patchTable->GetFVarPatchParamBuffer(fvarChannel));\n-1054 }\n-1055\n-1098 template \n-_\b1_\b1_\b0_\b0 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1101 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1102 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1103 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-1104 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-1105 int numPatchCoords,\n-1106 PATCHCOORD_BUFFER *patchCoords,\n-1107 PATCH_TABLE *patchTable,\n-1108 int fvarChannel,\n-1109 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance = NULL,\n-1110 void * deviceContext = NULL) {\n-1111\n-1112 (void)instance; // unused\n-1113 (void)deviceContext; // unused\n-1114\n-1115 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindCpuBuffer(), srcDesc,\n-1116 dstBuffer->BindCpuBuffer(), dstDesc,\n-1117 duBuffer->BindCpuBuffer(), duDesc,\n-1118 dvBuffer->BindCpuBuffer(), dvDesc,\n-1119 numPatchCoords,\n-1120 (const _\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd*)patchCoords->BindCpuBuffer(),\n-1121 patchTable->GetFVarPatchArrayBuffer(fvarChannel),\n-1122 patchTable->GetFVarPatchIndexBuffer(fvarChannel),\n-1123 patchTable->GetFVarPatchParamBuffer(fvarChannel));\n-1124 }\n-1125\n-1186 template \n-_\b1_\b1_\b8_\b8 static bool _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg(\n-1189 SRC_BUFFER *srcBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-1190 DST_BUFFER *dstBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-1191 DST_BUFFER *duBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-1192 DST_BUFFER *dvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-1193 DST_BUFFER *duuBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-1194 DST_BUFFER *duvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-1195 DST_BUFFER *dvvBuffer, _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-1196 int numPatchCoords,\n-1197 PATCHCOORD_BUFFER *patchCoords,\n-1198 PATCH_TABLE *patchTable,\n-1199 int fvarChannel,\n-1200 _\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance = NULL,\n-1201 void * deviceContext = NULL) {\n-1202\n-1203 (void)instance; // unused\n-1204 (void)deviceContext; // unused\n-1205\n-1206 return _\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs(srcBuffer->BindCpuBuffer(), srcDesc,\n-1207 dstBuffer->BindCpuBuffer(), dstDesc,\n-1208 duBuffer->BindCpuBuffer(), duDesc,\n-1209 dvBuffer->BindCpuBuffer(), dvDesc,\n-1210 duuBuffer->BindCpuBuffer(), duuDesc,\n-1211 duvBuffer->BindCpuBuffer(), duvDesc,\n-1212 dvvBuffer->BindCpuBuffer(), dvvDesc,\n-1213 numPatchCoords,\n-1214 (const _\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd*)patchCoords->BindCpuBuffer(),\n-1215 patchTable->GetFVarPatchArrayBuffer(fvarChannel),\n-1216 patchTable->GetFVarPatchIndexBuffer(fvarChannel),\n-1217 patchTable->GetFVarPatchParamBuffer(fvarChannel));\n-1218 }\n-1219\n-1225\n-_\b1_\b2_\b2_\b6 static void _\bS_\by_\bn_\bc_\bh_\br_\bo_\bn_\bi_\bz_\be(void *deviceContext = NULL);\n-1227\n-_\b1_\b2_\b2_\b8 static void _\bS_\be_\bt_\bN_\bu_\bm_\bT_\bh_\br_\be_\ba_\bd_\bs(int numThreads);\n-1229};\n-1230\n-1231\n-1232} // end namespace Osd\n-1233\n-1234} // end namespace OPENSUBDIV_VERSION\n-1235using namespace OPENSUBDIV_VERSION;\n-1236\n-1237} // end namespace OpenSubdiv\n-1238\n-1239\n-1240#endif // OPENSUBDIV3_OSD_OMP_EVALUATOR_H\n+85#endif // OPENSUBDIV3_OSD_OMP_KERNEL_H\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+void OmpEvalStencils(float const *src, BufferDescriptor const &srcDesc, float\n+*dst, BufferDescriptor const &dstDesc, int const *sizes, int const *offsets,\n+int const *indices, float const *weights, int start, int end)\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n BufferDescriptor is a struct which describes buffer elements in interleaved\n data buffers....\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bb_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b3_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n-static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor\n-const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int\n-numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int\n-fvarChannel, OmpEvaluator const *instance=NULL, void *deviceContext=NULL)\n-Generic limit eval function. This function has a same signature as other device\n-kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b0_\b3_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n-static bool EvalStencils(const float *src, BufferDescriptor const &srcDesc,\n-float *dst, BufferDescriptor const &dstDesc, const int *sizes, const int\n-*offsets, const int *indices, const float *weights, int start, int end)\n-Static eval stencils function which takes raw CPU pointers for input and\n-output.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n-static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const\n-&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n-*duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n-BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const\n-&duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER\n-*dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords,\n-PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, OmpEvaluator const\n-*instance=NULL, void *deviceContext=NULL)\n-Generic limit eval function. This function has a same signature as other device\n-kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b9_\b7_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n-static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const\n-&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n-*duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n-BufferDescriptor const &dvDesc, STENCIL_TABLE const *stencilTable, const\n-OmpEvaluator *instance=NULL, void *deviceContext=NULL)\n-Generic static eval stencils function with derivatives. This function has a\n-same signature as other d...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b6_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n-static bool EvalStencils(const float *src, BufferDescriptor const &srcDesc,\n-float *dst, BufferDescriptor const &dstDesc, float *du, BufferDescriptor const\n-&duDesc, float *dv, BufferDescriptor const &dvDesc, const int *sizes, const int\n-*offsets, const int *indices, const float *weights, const float *duWeights,\n-const float *dvWeights, int start, int end)\n-Static eval stencils function with derivatives, which takes raw CPU pointers\n-for input and output.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n-static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const\n-&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int\n-numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable,\n-OmpEvaluator const *instance=NULL, void *deviceContext=NULL)\n-Generic limit eval function. This function has a same signature as other device\n-kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b8_\b2_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n-static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor\n-const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,\n-DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n-BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER\n-*patchCoords, PATCH_TABLE *patchTable, int fvarChannel, OmpEvaluator const\n-*instance=NULL, void *deviceContext=NULL)\n-Generic limit eval function. This function has a same signature as other device\n-kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b1_\b0_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n-static bool EvalStencils(const float *src, BufferDescriptor const &srcDesc,\n-float *dst, BufferDescriptor const &dstDesc, float *du, BufferDescriptor const\n-&duDesc, float *dv, BufferDescriptor const &dvDesc, float *duu,\n-BufferDescriptor const &duuDesc, float *duv, BufferDescriptor const &duvDesc,\n-float *dvv, BufferDescriptor const &dvvDesc, const int *sizes, const int\n-*offsets, const int *indices, const float *weights, const float *duWeights,\n-const float *dvWeights, const float *duuWeights, const float *duvWeights, const\n-float *dvvWeights, int start, int end)\n-Static eval stencils function with derivatives, which takes raw CPU pointers\n-for input and output.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n-static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const\n-&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE\n-const *stencilTable, const OmpEvaluator *instance=NULL, void\n-*deviceContext=NULL)\n-Generic static eval stencils function. This function has a same signature as\n-other device kernels hav...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b7_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n-static bool EvalPatches(const float *src, BufferDescriptor const &srcDesc,\n-float *dst, BufferDescriptor const &dstDesc, float *du, BufferDescriptor const\n-&duDesc, float *dv, BufferDescriptor const &dvDesc, float *duu,\n-BufferDescriptor const &duuDesc, float *duv, BufferDescriptor const &duvDesc,\n-float *dvv, BufferDescriptor const &dvvDesc, int numPatchCoords, PatchCoord\n-const *patchCoords, PatchArray const *patchArrays, const int *patchIndexBuffer,\n-PatchParam const *patchParamBuffer)\n-Static limit eval function. It takes an array of PatchCoord and evaluate limit\n-values on given PatchT...\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n-static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n-DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer,\n-BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const\n-&dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE\n-*patchTable, OmpEvaluator const *instance=NULL, void *deviceContext=NULL)\n-Generic limit eval function with derivatives. This function has a same\n-signature as other device kern...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b5_\b1_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bV_\ba_\br_\by_\bi_\bn_\bg\n-static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const\n-&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n-*duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n-BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER\n-*patchCoords, PATCH_TABLE *patchTable, OmpEvaluator const *instance=NULL, void\n-*deviceContext=NULL)\n-Generic limit eval function. This function has a same signature as other device\n-kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b8_\b8_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n-static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n-DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer,\n-BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const\n-&dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER\n-*duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer,\n-BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER\n-*patchCoords, PATCH_TABLE *patchTable, OmpEvaluator const *instance=NULL, void\n-*deviceContext=NULL)\n-Generic limit eval function with derivatives. This function has a same\n-signature as other device kern...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b6_\b0_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bS_\by_\bn_\bc_\bh_\br_\bo_\bn_\bi_\bz_\be\n-static void Synchronize(void *deviceContext=NULL)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n-static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const\n-&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER\n-*duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n-BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const\n-&duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER\n-*dvvBuffer, BufferDescriptor const &dvvDesc, STENCIL_TABLE const *stencilTable,\n-const OmpEvaluator *instance=NULL, void *deviceContext=NULL)\n-Generic static eval stencils function with derivatives. This function has a\n-same signature as other d...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b3_\b0_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n-static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,\n-DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords,\n-PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, OmpEvaluator const\n-*instance=NULL, void *deviceContext=NULL)\n-Generic limit eval function. This function has a same signature as other device\n-kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b4_\b5_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n-static bool EvalPatches(const float *src, BufferDescriptor const &srcDesc,\n-float *dst, BufferDescriptor const &dstDesc, float *du, BufferDescriptor const\n-&duDesc, float *dv, BufferDescriptor const &dvDesc, int numPatchCoords,\n-PatchCoord const *patchCoords, PatchArray const *patchArrays, const int\n-*patchIndexBuffer, PatchParam const *patchParamBuffer)\n-Static limit eval function. It takes an array of PatchCoord and evaluate limit\n-values on given PatchT...\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bS_\be_\bt_\bN_\bu_\bm_\bT_\bh_\br_\be_\ba_\bd_\bs\n-static void SetNumThreads(int numThreads)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs\n-static bool EvalPatches(const float *src, BufferDescriptor const &srcDesc,\n-float *dst, BufferDescriptor const &dstDesc, int numPatchCoords, const\n-PatchCoord *patchCoords, const PatchArray *patchArrays, const int\n-*patchIndexBuffer, const PatchParam *patchParamBuffer)\n-Static limit eval function. It takes an array of PatchCoord and evaluate limit\n-values on given PatchT...\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bO_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bP_\ba_\bt_\bc_\bh_\be_\bs_\bF_\ba_\bc_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n-static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor\n-const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,\n-DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer,\n-BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const\n-&duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER\n-*dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords,\n-PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel,\n-OmpEvaluator const *instance=NULL, void *deviceContext=NULL)\n-Generic limit eval function. This function has a same signature as other device\n-kernels have so that ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh_\b:_\b1_\b1_\b8_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bC_\bo_\bo_\br_\bd\n-Coordinates set on a patch table.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b4_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bA_\br_\br_\ba_\by\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b6_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bP_\ba_\br_\ba_\bm\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\by_\bp_\be_\bs_\b._\bh_\b:_\b1_\b2_\b7\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bo_\bm_\bp_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b._\bh\n+ * _\bo_\bm_\bp_\bK_\be_\br_\bn_\be_\bl_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00887.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00887.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/mesh.h File Reference\n+OpenSubdiv: opensubdiv/osd/cpuVertexBuffer.h File Reference\n \n \n \n \n \n \n \n@@ -89,108 +89,42 @@\n \n \n \n \n
    \n \n-
    mesh.h File Reference
    \n+Namespaces
    \n+
    cpuVertexBuffer.h File Reference
    \n \n
    \n
    #include "../version.h"
    \n-#include <bitset>
    \n-#include <cassert>
    \n-#include <cstring>
    \n-#include <vector>
    \n-#include "../far/topologyRefiner.h"
    \n-#include "../far/patchTableFactory.h"
    \n-#include "../far/stencilTable.h"
    \n-#include "../far/stencilTableFactory.h"
    \n-#include "../osd/bufferDescriptor.h"
    \n+#include <cstddef>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n-\n-\n-\n-\n-\n+\n+\n \n

    \n Classes

    class  MeshInterface< PATCH_TABLE >
     
    class  EvaluatorCacheT< EVALUATOR >
     
    struct  EvaluatorCacheT< EVALUATOR >::Entry
     
    class  Mesh< VERTEX_BUFFER, STENCIL_TABLE, EVALUATOR, PATCH_TABLE, DEVICE_CONTEXT >
    class  CpuVertexBuffer
     Concrete vertex buffer class for CPU subdivision. More...
     
    \n \n \n \n \n \n \n \n-

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
     
    \n-\n-\n-\n-

    \n-Typedefs

    typedef std::bitset< NUM_MESH_BITSMeshBitset
     
    \n-\n-\n-\n-

    \n-Enumerations

    enum  MeshBits {
    \n-  MeshAdaptive = 0\n-,
    \n-  MeshInterleaveVarying = 1\n-,
    \n-  MeshFVarData = 2\n-,
    \n-  MeshFVarAdaptive = 3\n-,
    \n-  MeshUseSmoothCornerPatch = 4\n-,
    \n-  MeshUseSingleCreasePatch = 5\n-,
    \n-  MeshUseInfSharpPatch = 6\n-,
    \n-  MeshEndCapBilinearBasis = 7\n-,
    \n-  MeshEndCapBSplineBasis = 8\n-,
    \n-  MeshEndCapGregoryBasis = 9\n-,
    \n-  MeshEndCapLegacyGregory = 10\n-,
    \n-  NUM_MESH_BITS = 11\n-
    \n- }
     
    \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

    \n-Functions

    template<typename STENCIL_TABLE , typename SRC_STENCIL_TABLE , typename DEVICE_CONTEXT >
    STENCIL_TABLE const * convertToCompatibleStencilTable (SRC_STENCIL_TABLE const *table, DEVICE_CONTEXT *context)
     
    template<>
    Far::StencilTable const * convertToCompatibleStencilTable< Far::StencilTable, Far::StencilTable, void > (Far::StencilTable const *table, void *)
     
    template<>
    Far::LimitStencilTable const * convertToCompatibleStencilTable< Far::LimitStencilTable, Far::LimitStencilTable, void > (Far::LimitStencilTable const *table, void *)
     
    template<>
    Far::StencilTable const * convertToCompatibleStencilTable< Far::StencilTable, Far::StencilTable, ID3D11DeviceContext > (Far::StencilTable const *table, ID3D11DeviceContext *)
     
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,80 +1,24 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bE_\bn_\bu_\bm_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-mesh.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+cpuVertexBuffer.h File Reference\n #include \"../version.h\"\n-#include \n-#include \n-#include \n-#include \n-#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh\"\n-#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh\"\n-#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b._\bh\"\n-#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh\"\n-#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bb_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\"\n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b<_\b _\bP_\bA_\bT_\bC_\bH_\b__\bT_\bA_\bB_\bL_\bE_\b _\b>\n-\u00a0\n- class \u00a0 _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b<_\b _\bE_\bV_\bA_\bL_\bU_\bA_\bT_\bO_\bR_\b _\b>\n-\u00a0\n-struct \u00a0 _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b<_\b _\bE_\bV_\bA_\bL_\bU_\bA_\bT_\bO_\bR_\b _\b>_\b:_\b:_\bE_\bn_\bt_\br_\by\n-\u00a0\n- class \u00a0 _\bM_\be_\bs_\bh_\b<_\b _\bV_\bE_\bR_\bT_\bE_\bX_\b__\bB_\bU_\bF_\bF_\bE_\bR_\b,_\b _\bS_\bT_\bE_\bN_\bC_\bI_\bL_\b__\bT_\bA_\bB_\bL_\bE_\b,_\b _\bE_\bV_\bA_\bL_\bU_\bA_\bT_\bO_\bR_\b,_\b _\bP_\bA_\bT_\bC_\bH_\b__\bT_\bA_\bB_\bL_\bE_\b,\n- _\bD_\bE_\bV_\bI_\bC_\bE_\b__\bC_\bO_\bN_\bT_\bE_\bX_\bT_\b _\b>\n+class \u00a0 _\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+\u00a0 Concrete vertex buffer class for CPU subdivision. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-typedef std::bitset< _\bN_\bU_\bM_\b__\bM_\bE_\bS_\bH_\b__\bB_\bI_\bT_\bS >\u00a0 _\bM_\be_\bs_\bh_\bB_\bi_\bt_\bs_\be_\bt\n-\u00a0\n-E\bEn\bnu\bum\bme\ber\bra\bat\bti\bio\bon\bns\bs\n-enum \u00a0 _\bM_\be_\bs_\bh_\bB_\bi_\bt_\bs {\n- \u00a0\u00a0_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be = 0 ,\n- \u00a0\u00a0_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bV_\ba_\br_\by_\bi_\bn_\bg = 1 ,\n- \u00a0\u00a0_\bM_\be_\bs_\bh_\bF_\bV_\ba_\br_\bD_\ba_\bt_\ba = 2 ,\n- \u00a0\u00a0_\bM_\be_\bs_\bh_\bF_\bV_\ba_\br_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be = 3 ,\n- \u00a0\u00a0_\bM_\be_\bs_\bh_\bU_\bs_\be_\bS_\bm_\bo_\bo_\bt_\bh_\bC_\bo_\br_\bn_\be_\br_\bP_\ba_\bt_\bc_\bh = 4 ,\n- \u00a0\u00a0_\bM_\be_\bs_\bh_\bU_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh = 5 ,\n- \u00a0\u00a0_\bM_\be_\bs_\bh_\bU_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh = 6 ,\n- \u00a0\u00a0_\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bB_\bi_\bl_\bi_\bn_\be_\ba_\br_\bB_\ba_\bs_\bi_\bs = 7 ,\n- \u00a0\u00a0_\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bB_\ba_\bs_\bi_\bs = 8 ,\n- \u00a0\u00a0_\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bG_\br_\be_\bg_\bo_\br_\by_\bB_\ba_\bs_\bi_\bs = 9 ,\n- \u00a0\u00a0_\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by = 10 ,\n- \u00a0\u00a0_\bN_\bU_\bM_\b__\bM_\bE_\bS_\bH_\b__\bB_\bI_\bT_\bS = 11\n- }\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- STENCIL_TABLE const *\u00a0 _\bc_\bo_\bn_\bv_\be_\br_\bt_\bT_\bo_\bC_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bl_\be_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n- (SRC_STENCIL_TABLE const *table, DEVICE_CONTEXT\n- *context)\n-\u00a0\n- template<>\n- _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *\u00a0 _\bc_\bo_\bn_\bv_\be_\br_\bt_\bT_\bo_\bC_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bl_\be_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b<_\b _\bF_\ba_\br_\b:_\b:\n- _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bv_\bo_\bi_\bd_\b _\b> (_\bF_\ba_\br_\b:_\b:\n- _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *table, void *)\n-\u00a0\n- template<>\n-_\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *\u00a0 _\bc_\bo_\bn_\bv_\be_\br_\bt_\bT_\bo_\bC_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bl_\be_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b<_\b _\bF_\ba_\br_\b:_\b:\n- _\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bv_\bo_\bi_\bd\n- _\b> (_\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *table, void *)\n-\u00a0\n- template<>\n- _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *\u00a0 _\bc_\bo_\bn_\bv_\be_\br_\bt_\bT_\bo_\bC_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bl_\be_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b<_\b _\bF_\ba_\br_\b:_\b:\n- _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,\n- _\bI_\bD_\b3_\bD_\b1_\b1_\bD_\be_\bv_\bi_\bc_\be_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b _\b> (_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const\n- *table, ID3D11DeviceContext *)\n-\u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bm_\be_\bs_\bh_\b._\bh\n+ * _\bc_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00887.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00887.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,25 +1,3 @@\n var a00887 = [\n- [\"MeshInterface< PATCH_TABLE >\", \"a01261.html\", \"a01261\"],\n- [\"EvaluatorCacheT< EVALUATOR >\", \"a01265.html\", \"a01265\"],\n- [\"Entry\", \"a01269.html\", \"a01269\"],\n- [\"Mesh< VERTEX_BUFFER, STENCIL_TABLE, EVALUATOR, PATCH_TABLE, DEVICE_CONTEXT >\", \"a01273.html\", \"a01273\"],\n- [\"MeshBitset\", \"a00887.html#a85ba9df501aea9af1ec9da1558c255bc\", null],\n- [\"MeshBits\", \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492\", [\n- [\"MeshAdaptive\", \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492adef344bcbdd50a1a93136eb53183c718\", null],\n- [\"MeshInterleaveVarying\", \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a9313c644b9b2a998bcb55cfcc4582b1a\", null],\n- [\"MeshFVarData\", \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492ac10e41fef659f3b3a1b730319bdedb45\", null],\n- [\"MeshFVarAdaptive\", \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a9b8a23ab039e120012bc7c622308d603\", null],\n- [\"MeshUseSmoothCornerPatch\", \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492ab32b8ef595539e14041e2fb0e619e3f9\", null],\n- [\"MeshUseSingleCreasePatch\", \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a9058d69e1089fc77f1974a76c34e2071\", null],\n- [\"MeshUseInfSharpPatch\", \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a8fab1b3018f94b5b2432c7435e795925\", null],\n- [\"MeshEndCapBilinearBasis\", \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a4124233e4f787f999c7975afceab34f3\", null],\n- [\"MeshEndCapBSplineBasis\", \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492aa2f41b6ba0393698bb3af283283737f7\", null],\n- [\"MeshEndCapGregoryBasis\", \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492aa2878e1a215530f5f6fb89f1e06f91ee\", null],\n- [\"MeshEndCapLegacyGregory\", \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492aad7b3fb2be609abdbfafaf5b1c834158\", null],\n- [\"NUM_MESH_BITS\", \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a5676712c77d29cfdd330e2802db1c464\", null]\n- ]],\n- [\"convertToCompatibleStencilTable\", \"a00887.html#a06ceddf21c024b341a5b946049cd701a\", null],\n- [\"convertToCompatibleStencilTable< Far::LimitStencilTable, Far::LimitStencilTable, void >\", \"a00887.html#a4c2520cc1a8a5a03e3f53584629d7318\", null],\n- [\"convertToCompatibleStencilTable< Far::StencilTable, Far::StencilTable, ID3D11DeviceContext >\", \"a00887.html#ab5753a2b0a0995c8e2259d2c4765f7df\", null],\n- [\"convertToCompatibleStencilTable< Far::StencilTable, Far::StencilTable, void >\", \"a00887.html#a33f9830228f847fae1c30c9dffe02b5a\", null]\n+ [\"CpuVertexBuffer\", \"a01169.html\", \"a01169\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00887_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00887_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/mesh.h Source File\n+OpenSubdiv: opensubdiv/osd/cpuVertexBuffer.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    mesh.h
    \n+
    cpuVertexBuffer.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n
    2// Copyright 2013 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n@@ -119,885 +119,75 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_MESH_H
    \n-
    26#define OPENSUBDIV3_OSD_MESH_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_CPU_VERTEX_BUFFER_H
    \n+
    26#define OPENSUBDIV3_OSD_CPU_VERTEX_BUFFER_H
    \n
    27
    \n
    28#include "../version.h"
    \n
    29
    \n-
    30#include <bitset>
    \n-
    31#include <cassert>
    \n-
    32#include <cstring>
    \n-
    33#include <vector>
    \n+
    30#include <cstddef>
    \n+
    31
    \n+
    32namespace OpenSubdiv {
    \n+
    33namespace OPENSUBDIV_VERSION {
    \n
    34
    \n-
    35#include "../far/topologyRefiner.h"
    \n-
    36#include "../far/patchTableFactory.h"
    \n-
    37#include "../far/stencilTable.h"
    \n-
    38#include "../far/stencilTableFactory.h"
    \n-
    39
    \n-
    40#include "../osd/bufferDescriptor.h"
    \n-
    41
    \n-
    42struct ID3D11DeviceContext;
    \n-
    43
    \n-
    44namespace OpenSubdiv {
    \n-
    45namespace OPENSUBDIV_VERSION {
    \n-
    46
    \n-
    47namespace Osd {
    \n-
    48
    \n-\n-
    63typedef std::bitset<NUM_MESH_BITS> MeshBitset;
    \n+
    35namespace Osd {
    \n+
    36
    \n+
    \n+\n+
    43public:
    \n+
    45 static CpuVertexBuffer * Create(int numElements, int numVertices,
    \n+
    46 void *deviceContext = NULL);
    \n+
    47
    \n+\n+
    50
    \n+
    53 void UpdateData(const float *src, int startVertex, int numVertices,
    \n+
    54 void *deviceContext = NULL);
    \n+
    55
    \n+
    57 int GetNumElements() const;
    \n+
    58
    \n+
    60 int GetNumVertices() const;
    \n+
    61
    \n+
    63 float * BindCpuBuffer();
    \n
    64
    \n-
    65// ---------------------------------------------------------------------------
    \n-
    66
    \n-
    67template <class PATCH_TABLE>
    \n-
    \n-\n-
    69public:
    \n-
    70 typedef PATCH_TABLE PatchTable;
    \n-
    71 typedef typename PatchTable::VertexBufferBinding VertexBufferBinding;
    \n-
    72
    \n-
    73public:
    \n-\n+
    65protected:
    \n+
    67 CpuVertexBuffer(int numElements, int numVertices);
    \n+
    68
    \n+
    69private:
    \n+
    70 int _numElements;
    \n+
    71 int _numVertices;
    \n+
    72 float *_cpuBuffer;
    \n+
    73};
    \n+
    \n+
    74
    \n
    75
    \n-
    76 virtual ~MeshInterface() { }
    \n+
    76} // end namespace Osd
    \n
    77
    \n-
    78 virtual int GetNumVertices() const = 0;
    \n-
    79
    \n-
    80 virtual int GetMaxValence() const = 0;
    \n-
    81
    \n-
    82 virtual void UpdateVertexBuffer(float const *vertexData,
    \n-
    83 int startVertex, int numVerts) = 0;
    \n-
    84
    \n-
    85 virtual void UpdateVaryingBuffer(float const *varyingData,
    \n-
    86 int startVertex, int numVerts) = 0;
    \n-
    87
    \n-
    88 virtual void Refine() = 0;
    \n-
    89
    \n-
    90 virtual void Synchronize() = 0;
    \n-
    91
    \n-
    92 virtual PatchTable * GetPatchTable() const = 0;
    \n-
    93
    \n-
    94 virtual Far::PatchTable const *GetFarPatchTable() const = 0;
    \n-
    95
    \n-\n-
    97
    \n-\n-
    99
    \n-
    100protected:
    \n-
    \n-
    101 static inline void refineMesh(Far::TopologyRefiner & refiner,
    \n-
    102 int level, bool adaptive,
    \n-
    103 bool singleCreasePatch) {
    \n-
    104 if (adaptive) {
    \n-\n-
    106 options.useSingleCreasePatch = singleCreasePatch;
    \n-
    107 refiner.RefineAdaptive(options);
    \n-
    108 } else {
    \n-
    109 // This dependency on FVar channels should not be necessary
    \n-
    110 bool fullTopologyInLastLevel = refiner.GetNumFVarChannels()>0;
    \n-
    111
    \n-\n-
    113 options.fullTopologyInLastLevel = fullTopologyInLastLevel;
    \n-
    114 refiner.RefineUniform(options);
    \n-
    115 }
    \n-
    116 }
    \n-
    \n-
    \n-
    117 static inline void refineMesh(Far::TopologyRefiner & refiner,
    \n-
    118 int level, MeshBitset bits) {
    \n-
    119 if (bits.test(MeshAdaptive)) {
    \n-\n-\n-
    122 options.useInfSharpPatch = bits.test(MeshUseInfSharpPatch);
    \n-
    123 options.considerFVarChannels = bits.test(MeshFVarAdaptive);
    \n-
    124 refiner.RefineAdaptive(options);
    \n-
    125 } else {
    \n-
    126 // This dependency on FVar channels should not be necessary
    \n-
    127 bool fullTopologyInLastLevel = refiner.GetNumFVarChannels()>0;
    \n-
    128
    \n-\n-
    130 options.fullTopologyInLastLevel = fullTopologyInLastLevel;
    \n-
    131 refiner.RefineUniform(options);
    \n-
    132 }
    \n-
    133 }
    \n-
    \n-
    134};
    \n-
    \n-
    135
    \n-
    136// ---------------------------------------------------------------------------
    \n-
    137
    \n-
    138template <typename STENCIL_TABLE, typename SRC_STENCIL_TABLE,
    \n-
    139 typename DEVICE_CONTEXT>
    \n-
    140STENCIL_TABLE const *
    \n-
    \n-\n-
    142 SRC_STENCIL_TABLE const *table, DEVICE_CONTEXT *context) {
    \n-
    143 if (! table) return NULL;
    \n-
    144 return STENCIL_TABLE::Create(table, context);
    \n-
    145}
    \n-
    \n-
    146
    \n-
    147template <>
    \n-
    \n-
    148inline Far::StencilTable const *
    \n-\n-
    150 Far::StencilTable const *table, void * /*context*/) {
    \n-
    151 // no need for conversion
    \n-
    152 // XXX: We don't want to even copy.
    \n-
    153 if (! table) return NULL;
    \n-
    154 return new Far::StencilTable(*table);
    \n-
    155}
    \n-
    \n-
    156
    \n-
    157template <>
    \n-
    \n-\n-\n-
    160 Far::LimitStencilTable const *table, void * /*context*/) {
    \n-
    161 // no need for conversion
    \n-
    162 // XXX: We don't want to even copy.
    \n-
    163 if (! table) return NULL;
    \n-
    164 return new Far::LimitStencilTable(*table);
    \n-
    165}
    \n-
    \n-
    166
    \n-
    167template <>
    \n-
    \n-
    168inline Far::StencilTable const *
    \n-\n-
    170 Far::StencilTable const *table, ID3D11DeviceContext * /*context*/) {
    \n-
    171 // no need for conversion
    \n-
    172 // XXX: We don't want to even copy.
    \n-
    173 if (! table) return NULL;
    \n-
    174 return new Far::StencilTable(*table);
    \n-
    175}
    \n-
    \n-
    176
    \n-
    177// ---------------------------------------------------------------------------
    \n-
    178
    \n-
    179// Osd evaluator cache: for the GPU backends require compiled instance
    \n-
    180// (GLXFB, GLCompute, CL)
    \n-
    181//
    \n-
    182// note: this is just an example usage and client applications are supposed
    \n-
    183// to implement their own structure for Evaluator instance.
    \n-
    184//
    \n-
    185template <typename EVALUATOR>
    \n-
    \n-\n-
    187public:
    \n-
    \n-\n-
    189 for(typename Evaluators::iterator it = _evaluators.begin();
    \n-
    190 it != _evaluators.end(); ++it) {
    \n-
    191 delete it->evaluator;
    \n-
    192 }
    \n-
    193 }
    \n-
    \n-
    194
    \n-
    195 // XXX: FIXME, linear search
    \n-
    \n-
    196 struct Entry {
    \n-
    \n-
    197 Entry(BufferDescriptor const &srcDescArg,
    \n-
    198 BufferDescriptor const &dstDescArg,
    \n-
    199 BufferDescriptor const &duDescArg,
    \n-
    200 BufferDescriptor const &dvDescArg,
    \n-
    201 EVALUATOR *evalArg) : srcDesc(srcDescArg), dstDesc(dstDescArg),
    \n-
    202 duDesc(duDescArg), dvDesc(dvDescArg),
    \n-\n-\n-\n-
    206 evaluator(evalArg) {}
    \n-
    \n-
    \n-
    207 Entry(BufferDescriptor const &srcDescArg,
    \n-
    208 BufferDescriptor const &dstDescArg,
    \n-
    209 BufferDescriptor const &duDescArg,
    \n-
    210 BufferDescriptor const &dvDescArg,
    \n-
    211 BufferDescriptor const &duuDescArg,
    \n-
    212 BufferDescriptor const &duvDescArg,
    \n-
    213 BufferDescriptor const &dvvDescArg,
    \n-
    214 EVALUATOR *evalArg) : srcDesc(srcDescArg), dstDesc(dstDescArg),
    \n-
    215 duDesc(duDescArg), dvDesc(dvDescArg),
    \n-
    216 duuDesc(duuDescArg),
    \n-
    217 duvDesc(duvDescArg),
    \n-
    218 dvvDesc(dvvDescArg),
    \n-
    219 evaluator(evalArg) {}
    \n-
    \n-\n-\n-\n-
    223 EVALUATOR *evaluator;
    \n-
    224 };
    \n-
    \n-
    225 typedef std::vector<Entry> Evaluators;
    \n-
    226
    \n-
    227 template <typename DEVICE_CONTEXT>
    \n-
    \n-
    228 EVALUATOR *GetEvaluator(BufferDescriptor const &srcDesc,
    \n-
    229 BufferDescriptor const &dstDesc,
    \n-
    230 DEVICE_CONTEXT *deviceContext) {
    \n-
    231 return GetEvaluator(srcDesc, dstDesc,
    \n-\n-\n-\n-\n-\n-
    237 deviceContext);
    \n-
    238 }
    \n-
    \n-
    239
    \n-
    240 template <typename DEVICE_CONTEXT>
    \n-
    \n-
    241 EVALUATOR *GetEvaluator(BufferDescriptor const &srcDesc,
    \n-
    242 BufferDescriptor const &dstDesc,
    \n-
    243 BufferDescriptor const &duDesc,
    \n-
    244 BufferDescriptor const &dvDesc,
    \n-
    245 DEVICE_CONTEXT *deviceContext) {
    \n-
    246 return GetEvaluator(srcDesc, dstDesc,
    \n-
    247 duDesc, dvDesc,
    \n-\n-\n-\n-
    251 deviceContext);
    \n-
    252 }
    \n-
    \n-
    253
    \n-
    254 template <typename DEVICE_CONTEXT>
    \n-
    \n-
    255 EVALUATOR *GetEvaluator(BufferDescriptor const &srcDesc,
    \n-
    256 BufferDescriptor const &dstDesc,
    \n-
    257 BufferDescriptor const &duDesc,
    \n-
    258 BufferDescriptor const &dvDesc,
    \n-
    259 BufferDescriptor const &duuDesc,
    \n-
    260 BufferDescriptor const &duvDesc,
    \n-
    261 BufferDescriptor const &dvvDesc,
    \n-
    262 DEVICE_CONTEXT *deviceContext) {
    \n-
    263
    \n-
    264 for(typename Evaluators::iterator it = _evaluators.begin();
    \n-
    265 it != _evaluators.end(); ++it) {
    \n-
    266 if (isEqual(srcDesc, it->srcDesc) &&
    \n-
    267 isEqual(dstDesc, it->dstDesc) &&
    \n-
    268 isEqual(duDesc, it->duDesc) &&
    \n-
    269 isEqual(dvDesc, it->dvDesc) &&
    \n-
    270 isEqual(duuDesc, it->duuDesc) &&
    \n-
    271 isEqual(duvDesc, it->duvDesc) &&
    \n-
    272 isEqual(dvvDesc, it->dvvDesc)) {
    \n-
    273 return it->evaluator;
    \n-
    274 }
    \n-
    275 }
    \n-
    276 EVALUATOR *e = EVALUATOR::Create(srcDesc, dstDesc,
    \n-
    277 duDesc, dvDesc,
    \n-
    278 duuDesc, duvDesc, dvvDesc,
    \n-
    279 deviceContext);
    \n-
    280 _evaluators.push_back(Entry(srcDesc, dstDesc,
    \n-
    281 duDesc, dvDesc,
    \n-
    282 duuDesc, duvDesc, dvvDesc, e));
    \n-
    283 return e;
    \n-
    284 }
    \n-
    \n-
    285
    \n-
    286private:
    \n-
    287 static bool isEqual(BufferDescriptor const &a,
    \n-
    288 BufferDescriptor const &b) {
    \n-
    289 int offsetA = a.stride ? (a.offset % a.stride) : 0;
    \n-
    290 int offsetB = b.stride ? (b.offset % b.stride) : 0;
    \n-
    291
    \n-
    292 // Note: XFB kernel needs to be configured with the local offset
    \n-
    293 // of the dstDesc to skip preceding primvars.
    \n-
    294 return (offsetA == offsetB &&
    \n-
    295 a.length == b.length &&
    \n-
    296 a.stride == b.stride);
    \n-
    297 }
    \n-
    298
    \n-
    299 Evaluators _evaluators;
    \n-
    300};
    \n-
    \n-
    301
    \n-
    303
    \n-
    304// template helpers to see if the evaluator is instantiatable or not.
    \n-
    305template <typename EVALUATOR>
    \n-
    306struct instantiatable
    \n-
    307{
    \n-
    308 typedef char yes[1];
    \n-
    309 typedef char no[2];
    \n-
    310 template <typename C> static yes &chk(typename C::Instantiatable *t=0);
    \n-
    311 template <typename C> static no &chk(...);
    \n-
    312 static bool const value = sizeof(chk<EVALUATOR>(0)) == sizeof(yes);
    \n-
    313};
    \n-
    314template <bool C, typename T=void>
    \n-
    315struct enable_if { typedef T type; };
    \n-
    316template <typename T>
    \n-
    317struct enable_if<false, T> { };
    \n-
    318
    \n-
    320
    \n-
    321// extract a kernel from cache if available
    \n-
    322template <typename EVALUATOR, typename DEVICE_CONTEXT>
    \n-
    323static EVALUATOR *GetEvaluator(
    \n-
    324 EvaluatorCacheT<EVALUATOR> *cache,
    \n-
    325 BufferDescriptor const &srcDesc,
    \n-
    326 BufferDescriptor const &dstDesc,
    \n-
    327 BufferDescriptor const &duDesc,
    \n-
    328 BufferDescriptor const &dvDesc,
    \n-
    329 BufferDescriptor const &duuDesc,
    \n-
    330 BufferDescriptor const &duvDesc,
    \n-
    331 BufferDescriptor const &dvvDesc,
    \n-
    332 DEVICE_CONTEXT deviceContext,
    \n-
    333 typename enable_if<instantiatable<EVALUATOR>::value, void>::type*t=0) {
    \n-
    334 (void)t;
    \n-
    335 if (cache == NULL) return NULL;
    \n-
    336 return cache->GetEvaluator(srcDesc, dstDesc,
    \n-
    337 duDesc, dvDesc, duuDesc, duvDesc, dvvDesc,
    \n-
    338 deviceContext);
    \n-
    339}
    \n-
    340
    \n-
    341template <typename EVALUATOR, typename DEVICE_CONTEXT>
    \n-
    342static EVALUATOR *GetEvaluator(
    \n-
    343 EvaluatorCacheT<EVALUATOR> *cache,
    \n-
    344 BufferDescriptor const &srcDesc,
    \n-
    345 BufferDescriptor const &dstDesc,
    \n-
    346 BufferDescriptor const &duDesc,
    \n-
    347 BufferDescriptor const &dvDesc,
    \n-
    348 DEVICE_CONTEXT deviceContext,
    \n-
    349 typename enable_if<instantiatable<EVALUATOR>::value, void>::type*t=0) {
    \n-
    350 (void)t;
    \n-
    351 if (cache == NULL) return NULL;
    \n-
    352 return cache->GetEvaluator(srcDesc, dstDesc, duDesc, dvDesc, deviceContext);
    \n-
    353}
    \n-
    354
    \n-
    355template <typename EVALUATOR, typename DEVICE_CONTEXT>
    \n-
    356static EVALUATOR *GetEvaluator(
    \n-
    357 EvaluatorCacheT<EVALUATOR> *cache,
    \n-
    358 BufferDescriptor const &srcDesc,
    \n-
    359 BufferDescriptor const &dstDesc,
    \n-
    360 DEVICE_CONTEXT deviceContext,
    \n-
    361 typename enable_if<instantiatable<EVALUATOR>::value, void>::type*t=0) {
    \n-
    362 (void)t;
    \n-
    363 if (cache == NULL) return NULL;
    \n-
    364 return cache->GetEvaluator(srcDesc, dstDesc,
    \n-
    365 BufferDescriptor(),
    \n-
    366 BufferDescriptor(),
    \n-
    367 deviceContext);
    \n-
    368}
    \n-
    369
    \n-
    370// fallback
    \n-
    371template <typename EVALUATOR, typename DEVICE_CONTEXT>
    \n-
    372static EVALUATOR *GetEvaluator(
    \n-
    373 EvaluatorCacheT<EVALUATOR> *,
    \n-
    374 BufferDescriptor const &,
    \n-
    375 BufferDescriptor const &,
    \n-
    376 BufferDescriptor const &,
    \n-
    377 BufferDescriptor const &,
    \n-
    378 BufferDescriptor const &,
    \n-
    379 BufferDescriptor const &,
    \n-
    380 BufferDescriptor const &,
    \n-
    381 DEVICE_CONTEXT,
    \n-
    382 typename enable_if<!instantiatable<EVALUATOR>::value, void>::type*t=0) {
    \n-
    383 (void)t;
    \n-
    384 return NULL;
    \n-
    385}
    \n-
    386
    \n-
    387template <typename EVALUATOR, typename DEVICE_CONTEXT>
    \n-
    388static EVALUATOR *GetEvaluator(
    \n-
    389 EvaluatorCacheT<EVALUATOR> *,
    \n-
    390 BufferDescriptor const &,
    \n-
    391 BufferDescriptor const &,
    \n-
    392 BufferDescriptor const &,
    \n-
    393 BufferDescriptor const &,
    \n-
    394 DEVICE_CONTEXT,
    \n-
    395 typename enable_if<!instantiatable<EVALUATOR>::value, void>::type*t=0) {
    \n-
    396 (void)t;
    \n-
    397 return NULL;
    \n-
    398}
    \n-
    399
    \n-
    400template <typename EVALUATOR, typename DEVICE_CONTEXT>
    \n-
    401static EVALUATOR *GetEvaluator(
    \n-
    402 EvaluatorCacheT<EVALUATOR> *,
    \n-
    403 BufferDescriptor const &,
    \n-
    404 BufferDescriptor const &,
    \n-
    405 DEVICE_CONTEXT,
    \n-
    406 typename enable_if<!instantiatable<EVALUATOR>::value, void>::type*t=0) {
    \n-
    407 (void)t;
    \n-
    408 return NULL;
    \n-
    409}
    \n-
    410
    \n-
    411// ---------------------------------------------------------------------------
    \n-
    412
    \n-
    413template <typename VERTEX_BUFFER,
    \n-
    414 typename STENCIL_TABLE,
    \n-
    415 typename EVALUATOR,
    \n-
    416 typename PATCH_TABLE,
    \n-
    417 typename DEVICE_CONTEXT = void>
    \n-
    \n-
    418class Mesh : public MeshInterface<PATCH_TABLE> {
    \n-
    419public:
    \n-
    420 typedef VERTEX_BUFFER VertexBuffer;
    \n-
    421 typedef EVALUATOR Evaluator;
    \n-
    422 typedef STENCIL_TABLE StencilTable;
    \n-
    423 typedef PATCH_TABLE PatchTable;
    \n-
    424 typedef DEVICE_CONTEXT DeviceContext;
    \n-\n-
    426 typedef typename PatchTable::VertexBufferBinding VertexBufferBinding;
    \n-
    427
    \n-
    \n-\n-
    429 int numVertexElements,
    \n-
    430 int numVaryingElements,
    \n-
    431 int level,
    \n-
    432 MeshBitset bits = MeshBitset(),
    \n-
    433 EvaluatorCache * evaluatorCache = NULL,
    \n-
    434 DeviceContext * deviceContext = NULL) :
    \n-
    435
    \n-
    436 _refiner(refiner),
    \n-
    437 _farPatchTable(NULL),
    \n-
    438 _numVertices(0),
    \n-
    439 _maxValence(0),
    \n-
    440 _vertexBuffer(NULL),
    \n-
    441 _varyingBuffer(NULL),
    \n-
    442 _vertexStencilTable(NULL),
    \n-
    443 _varyingStencilTable(NULL),
    \n-
    444 _evaluatorCache(evaluatorCache),
    \n-
    445 _patchTable(NULL),
    \n-
    446 _deviceContext(deviceContext) {
    \n-
    447
    \n-
    448 assert(_refiner);
    \n-
    449
    \n-\n-
    451 *_refiner, level, bits);
    \n-
    452
    \n-
    453 int vertexBufferStride = numVertexElements +
    \n-
    454 (bits.test(MeshInterleaveVarying) ? numVaryingElements : 0);
    \n-
    455 int varyingBufferStride =
    \n-
    456 (bits.test(MeshInterleaveVarying) ? 0 : numVaryingElements);
    \n-
    457
    \n-
    458 initializeContext(numVertexElements,
    \n-
    459 numVaryingElements,
    \n-
    460 level, bits);
    \n-
    461
    \n-
    462 initializeVertexBuffers(_numVertices,
    \n-
    463 vertexBufferStride,
    \n-
    464 varyingBufferStride);
    \n-
    465
    \n-
    466 // configure vertex buffer descriptor
    \n-
    467 _vertexDesc =
    \n-
    468 BufferDescriptor(0, numVertexElements, vertexBufferStride);
    \n-
    469 if (bits.test(MeshInterleaveVarying)) {
    \n-
    470 _varyingDesc = BufferDescriptor(
    \n-
    471 numVertexElements, numVaryingElements, vertexBufferStride);
    \n-
    472 } else {
    \n-
    473 _varyingDesc = BufferDescriptor(
    \n-
    474 0, numVaryingElements, varyingBufferStride);
    \n-
    475 }
    \n-
    476 }
    \n-
    \n-
    477
    \n-
    \n-
    478 virtual ~Mesh() {
    \n-
    479 delete _refiner;
    \n-
    480 delete _farPatchTable;
    \n-
    481 delete _vertexBuffer;
    \n-
    482 delete _varyingBuffer;
    \n-
    483 delete _vertexStencilTable;
    \n-
    484 delete _varyingStencilTable;
    \n-
    485 delete _patchTable;
    \n-
    486 // deviceContext and evaluatorCache are not owned by this class.
    \n-
    487 }
    \n-
    \n-
    488
    \n-
    \n-
    489 virtual void UpdateVertexBuffer(float const *vertexData,
    \n-
    490 int startVertex, int numVerts) {
    \n-
    491 _vertexBuffer->UpdateData(vertexData, startVertex, numVerts,
    \n-
    492 _deviceContext);
    \n-
    493 }
    \n-
    \n-
    494
    \n-
    \n-
    495 virtual void UpdateVaryingBuffer(float const *varyingData,
    \n-
    496 int startVertex, int numVerts) {
    \n-
    497 _varyingBuffer->UpdateData(varyingData, startVertex, numVerts,
    \n-
    498 _deviceContext);
    \n-
    499 }
    \n-
    \n-
    500
    \n-
    \n-
    501 virtual void Refine() {
    \n-
    502
    \n-
    503 int numControlVertices = _refiner->GetLevel(0).GetNumVertices();
    \n-
    504
    \n-
    505 BufferDescriptor srcDesc = _vertexDesc;
    \n-
    506 BufferDescriptor dstDesc(srcDesc);
    \n-
    507 dstDesc.offset += numControlVertices * dstDesc.stride;
    \n-
    508
    \n-
    509 // note that the _evaluatorCache can be NULL and thus
    \n-
    510 // the evaluatorInstance can be NULL
    \n-
    511 // (for uninstantiatable kernels CPU,TBB etc)
    \n-
    512 Evaluator const *instance = GetEvaluator<Evaluator>(
    \n-
    513 _evaluatorCache, srcDesc, dstDesc,
    \n-
    514 _deviceContext);
    \n-
    515
    \n-
    516 Evaluator::EvalStencils(_vertexBuffer, srcDesc,
    \n-
    517 _vertexBuffer, dstDesc,
    \n-
    518 _vertexStencilTable,
    \n-
    519 instance, _deviceContext);
    \n-
    520
    \n-
    521 if (_varyingDesc.length > 0) {
    \n-
    522 BufferDescriptor vSrcDesc = _varyingDesc;
    \n-
    523 BufferDescriptor vDstDesc(vSrcDesc);
    \n-
    524 vDstDesc.offset += numControlVertices * vDstDesc.stride;
    \n-
    525
    \n-
    526 instance = GetEvaluator<Evaluator>(
    \n-
    527 _evaluatorCache, vSrcDesc, vDstDesc,
    \n-
    528 _deviceContext);
    \n-
    529
    \n-
    530 if (_varyingBuffer) {
    \n-
    531 // non-interleaved
    \n-
    532 Evaluator::EvalStencils(_varyingBuffer, vSrcDesc,
    \n-
    533 _varyingBuffer, vDstDesc,
    \n-
    534 _varyingStencilTable,
    \n-
    535 instance, _deviceContext);
    \n-
    536 } else {
    \n-
    537 // interleaved
    \n-
    538 Evaluator::EvalStencils(_vertexBuffer, vSrcDesc,
    \n-
    539 _vertexBuffer, vDstDesc,
    \n-
    540 _varyingStencilTable,
    \n-
    541 instance, _deviceContext);
    \n-
    542 }
    \n-
    543 }
    \n-
    544 }
    \n-
    \n-
    545
    \n-
    \n-
    546 virtual void Synchronize() {
    \n-
    547 Evaluator::Synchronize(_deviceContext);
    \n-
    548 }
    \n-
    \n-
    549
    \n-
    \n-
    550 virtual PatchTable * GetPatchTable() const {
    \n-
    551 return _patchTable;
    \n-
    552 }
    \n-
    \n-
    553
    \n-
    \n-
    554 virtual Far::PatchTable const *GetFarPatchTable() const {
    \n-
    555 return _farPatchTable;
    \n-
    556 }
    \n-
    \n-
    557
    \n-
    558 virtual int GetNumVertices() const { return _numVertices; }
    \n-
    559
    \n-
    560 virtual int GetMaxValence() const { return _maxValence; }
    \n-
    561
    \n-
    \n-\n-
    563 return _vertexBuffer->BindVBO(_deviceContext);
    \n-
    564 }
    \n-
    \n-
    565
    \n-
    \n-\n-
    567 return _varyingBuffer->BindVBO(_deviceContext);
    \n-
    568 }
    \n-
    \n-
    569
    \n-
    \n-\n-
    571 return _vertexBuffer;
    \n-
    572 }
    \n-
    \n-
    573
    \n-
    \n-\n-
    575 return _varyingBuffer;
    \n-
    576 }
    \n-
    \n-
    577
    \n-
    \n-
    578 virtual Far::TopologyRefiner const * GetTopologyRefiner() const {
    \n-
    579 return _refiner;
    \n-
    580 }
    \n-
    \n-
    581
    \n-
    582private:
    \n-
    583 void initializeContext(int numVertexElements,
    \n-
    584 int numVaryingElements,
    \n-
    585 int level, MeshBitset bits) {
    \n-
    586 assert(_refiner);
    \n-
    587
    \n-
    588 Far::StencilTableFactory::Options options;
    \n-
    589 options.generateOffsets = true;
    \n-
    590 options.generateIntermediateLevels =
    \n-
    591 _refiner->IsUniform() ? false : true;
    \n-
    592
    \n-
    593 Far::StencilTable const * vertexStencils = NULL;
    \n-
    594 Far::StencilTable const * varyingStencils = NULL;
    \n-
    595
    \n-
    596 if (numVertexElements>0) {
    \n-
    597
    \n-
    598 vertexStencils = Far::StencilTableFactory::Create(*_refiner,
    \n-
    599 options);
    \n-
    600 }
    \n-
    601
    \n-
    602 if (numVaryingElements>0) {
    \n-
    603
    \n-
    604 options.interpolationMode =
    \n-\n-
    606
    \n-
    607 varyingStencils = Far::StencilTableFactory::Create(*_refiner,
    \n-
    608 options);
    \n-
    609 }
    \n-
    610
    \n-
    611 Far::PatchTableFactory::Options poptions(level);
    \n-
    612 poptions.generateFVarTables = bits.test(MeshFVarData);
    \n-
    613 poptions.generateFVarLegacyLinearPatches = !bits.test(MeshFVarAdaptive);
    \n-
    614 poptions.generateLegacySharpCornerPatches = !bits.test(MeshUseSmoothCornerPatch);
    \n-
    615 poptions.useSingleCreasePatch = bits.test(MeshUseSingleCreasePatch);
    \n-
    616 poptions.useInfSharpPatch = bits.test(MeshUseInfSharpPatch);
    \n-
    617
    \n-
    618 // points on bilinear and gregory basis endcap boundaries can be
    \n-
    619 // shared among adjacent patches to save some stencils.
    \n-
    620 if (bits.test(MeshEndCapBilinearBasis)) {
    \n-
    621 poptions.SetEndCapType(
    \n-\n-
    623 poptions.shareEndCapPatchPoints = true;
    \n-
    624 } else if (bits.test(MeshEndCapBSplineBasis)) {
    \n-
    625 poptions.SetEndCapType(
    \n-\n-
    627 } else if (bits.test(MeshEndCapGregoryBasis)) {
    \n-
    628 poptions.SetEndCapType(
    \n-\n-
    630 poptions.shareEndCapPatchPoints = true;
    \n-
    631 } else if (bits.test(MeshEndCapLegacyGregory)) {
    \n-
    632 poptions.SetEndCapType(
    \n-\n-
    634 }
    \n-
    635
    \n-
    636 _farPatchTable = Far::PatchTableFactory::Create(*_refiner, poptions);
    \n-
    637
    \n-
    638 // if there's endcap stencils, merge it into regular stencils.
    \n-
    639 if (_farPatchTable->GetLocalPointStencilTable()) {
    \n-
    640 // append stencils
    \n-
    641 if (Far::StencilTable const *vertexStencilsWithLocalPoints =
    \n-\n-
    643 *_refiner,
    \n-
    644 vertexStencils,
    \n-
    645 _farPatchTable->GetLocalPointStencilTable())) {
    \n-
    646 delete vertexStencils;
    \n-
    647 vertexStencils = vertexStencilsWithLocalPoints;
    \n-
    648 }
    \n-
    649 if (varyingStencils) {
    \n-
    650 if (Far::StencilTable const *varyingStencilsWithLocalPoints =
    \n-\n-
    652 *_refiner,
    \n-
    653 varyingStencils,
    \n-
    654 _farPatchTable->GetLocalPointVaryingStencilTable())) {
    \n-
    655 delete varyingStencils;
    \n-
    656 varyingStencils = varyingStencilsWithLocalPoints;
    \n-
    657 }
    \n-
    658 }
    \n-
    659 }
    \n-
    660
    \n-
    661 _maxValence = _farPatchTable->GetMaxValence();
    \n-
    662 _patchTable = PatchTable::Create(_farPatchTable, _deviceContext);
    \n-
    663
    \n-
    664 // numvertices = coarse verts + refined verts + gregory basis verts
    \n-
    665 _numVertices = vertexStencils->GetNumControlVertices()
    \n-
    666 + vertexStencils->GetNumStencils();
    \n-
    667
    \n-
    668 // convert to device stenciltable if necessary.
    \n-
    669 _vertexStencilTable =
    \n-
    670 convertToCompatibleStencilTable<StencilTable>(
    \n-
    671 vertexStencils, _deviceContext);
    \n-
    672 _varyingStencilTable =
    \n-
    673 convertToCompatibleStencilTable<StencilTable>(
    \n-
    674 varyingStencils, _deviceContext);
    \n-
    675
    \n-
    676 // FIXME: we do extra copyings for Far::Stencils.
    \n-
    677 delete vertexStencils;
    \n-
    678 delete varyingStencils;
    \n-
    679 }
    \n-
    680
    \n-
    681 void initializeVertexBuffers(int numVertices,
    \n-
    682 int numVertexElements,
    \n-
    683 int numVaryingElements) {
    \n-
    684
    \n-
    685 if (numVertexElements) {
    \n-
    686 _vertexBuffer = VertexBuffer::Create(numVertexElements,
    \n-
    687 numVertices, _deviceContext);
    \n-
    688 }
    \n-
    689
    \n-
    690 if (numVaryingElements) {
    \n-
    691 _varyingBuffer = VertexBuffer::Create(numVaryingElements,
    \n-
    692 numVertices, _deviceContext);
    \n-
    693 }
    \n-
    694 }
    \n-
    695
    \n-
    696 Far::TopologyRefiner * _refiner;
    \n-
    697 Far::PatchTable * _farPatchTable;
    \n-
    698
    \n-
    699 int _numVertices;
    \n-
    700 int _maxValence;
    \n-
    701
    \n-
    702 VertexBuffer * _vertexBuffer;
    \n-
    703 VertexBuffer * _varyingBuffer;
    \n-
    704
    \n-
    705 BufferDescriptor _vertexDesc;
    \n-
    706 BufferDescriptor _varyingDesc;
    \n-
    707
    \n-
    708 StencilTable const * _vertexStencilTable;
    \n-
    709 StencilTable const * _varyingStencilTable;
    \n-
    710 EvaluatorCache * _evaluatorCache;
    \n-
    711
    \n-
    712 PatchTable *_patchTable;
    \n-
    713 DeviceContext *_deviceContext;
    \n-
    714};
    \n-
    \n-
    715
    \n-
    716} // end namespace Osd
    \n-
    717
    \n-
    718} // end namespace OPENSUBDIV_VERSION
    \n-
    719using namespace OPENSUBDIV_VERSION;
    \n-
    720
    \n-
    721} // end namespace OpenSubdiv
    \n-
    722
    \n-
    723#endif // OPENSUBDIV3_OSD_MESH_H
    \n-\n-
    STENCIL_TABLE const * convertToCompatibleStencilTable(SRC_STENCIL_TABLE const *table, DEVICE_CONTEXT *context)
    Definition mesh.h:141
    \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-
    Far::StencilTable const * convertToCompatibleStencilTable< Far::StencilTable, Far::StencilTable, void >(Far::StencilTable const *table, void *)
    Definition mesh.h:149
    \n-
    Far::LimitStencilTable const * convertToCompatibleStencilTable< Far::LimitStencilTable, Far::LimitStencilTable, void >(Far::LimitStencilTable const *table, void *)
    Definition mesh.h:159
    \n-
    std::bitset< NUM_MESH_BITS > MeshBitset
    Definition mesh.h:63
    \n-
    Far::StencilTable const * convertToCompatibleStencilTable< Far::StencilTable, Far::StencilTable, ID3D11DeviceContext >(Far::StencilTable const *table, ID3D11DeviceContext *)
    Definition mesh.h:169
    \n-
    Container for arrays of parametric patches.
    Definition patchTable.h:55
    \n-
    int GetMaxValence() const
    Returns max vertex valence.
    Definition patchTable.h:92
    \n-
    StencilTable const * GetLocalPointStencilTable() const
    Returns the stencil table to compute local point vertex values.
    Definition patchTable.h:730
    \n-
    StencilTable const * GetLocalPointVaryingStencilTable() const
    Returns the stencil table to compute local point varying values.
    Definition patchTable.h:735
    \n-
    static PatchTable * Create(TopologyRefiner const &refiner, Options options=Options(), ConstIndexArray selectedFaces=ConstIndexArray())
    Instantiates a PatchTable from a client-provided TopologyRefiner.
    \n-\n-
    @ ENDCAP_LEGACY_GREGORY
    legacy option for 2.x style Gregory patches (Catmark only)
    \n-
    @ ENDCAP_GREGORY_BASIS
    use Gregory patches (highest quality, recommended default)
    \n-
    @ ENDCAP_BILINEAR_BASIS
    use linear patches (simple quads or tris)
    \n-
    @ ENDCAP_BSPLINE_BASIS
    use BSpline-like patches (same patch type as regular)
    \n-\n-
    int GetNumControlVertices() const
    Returns the number of control vertices indexed in the table.
    \n-
    int GetNumStencils() const
    Returns the number of stencils in the table.
    \n-
    Stencil table class wrapping the template for compatibility.
    \n-
    Limit stencil table class wrapping the template for compatibility.
    \n-
    static StencilTable const * Create(TopologyRefiner const &refiner, Options options=Options())
    \n-
    static StencilTable const * AppendLocalPointStencilTable(TopologyRefiner const &refiner, StencilTable const *baseStencilTable, StencilTable const *localPointStencilTable, bool factorize=true)
    \n-
    int GetNumVertices() const
    Return the number of vertices in this level.
    \n-
    Stores topology data for a specified set of refinement options.
    \n-
    bool IsUniform() const
    Returns true if uniform refinement has been applied.
    \n-
    int GetNumFVarChannels() const
    Returns the number of face-varying channels in the tables.
    \n-
    void RefineUniform(UniformOptions options)
    Refine the topology uniformly.
    \n-
    TopologyLevel const & GetLevel(int level) const
    Returns a handle to access data specific to a particular level.
    \n-
    void RefineAdaptive(AdaptiveOptions options, ConstIndexArray selectedFaces=ConstIndexArray())
    Feature Adaptive topology refinement.
    \n-\n-\n-\n-\n-\n-\n-
    BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
    \n-\n-\n-\n-\n-
    virtual Far::PatchTable const * GetFarPatchTable() const =0
    \n-
    static void refineMesh(Far::TopologyRefiner &refiner, int level, MeshBitset bits)
    Definition mesh.h:117
    \n-\n-\n-
    virtual void UpdateVaryingBuffer(float const *varyingData, int startVertex, int numVerts)=0
    \n-
    static void refineMesh(Far::TopologyRefiner &refiner, int level, bool adaptive, bool singleCreasePatch)
    Definition mesh.h:101
    \n-
    virtual void UpdateVertexBuffer(float const *vertexData, int startVertex, int numVerts)=0
    \n-
    virtual PatchTable * GetPatchTable() const =0
    \n-\n-\n-\n-
    PatchTable::VertexBufferBinding VertexBufferBinding
    Definition mesh.h:71
    \n-
    virtual VertexBufferBinding BindVertexBuffer()=0
    \n-
    virtual VertexBufferBinding BindVaryingBuffer()=0
    \n-\n-\n-\n-
    EVALUATOR * GetEvaluator(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, DEVICE_CONTEXT *deviceContext)
    Definition mesh.h:241
    \n-
    EVALUATOR * GetEvaluator(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, DEVICE_CONTEXT *deviceContext)
    Definition mesh.h:255
    \n-
    EVALUATOR * GetEvaluator(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, DEVICE_CONTEXT *deviceContext)
    Definition mesh.h:228
    \n-\n-\n-\n-
    Entry(BufferDescriptor const &srcDescArg, BufferDescriptor const &dstDescArg, BufferDescriptor const &duDescArg, BufferDescriptor const &dvDescArg, BufferDescriptor const &duuDescArg, BufferDescriptor const &duvDescArg, BufferDescriptor const &dvvDescArg, EVALUATOR *evalArg)
    Definition mesh.h:207
    \n-\n-\n-\n-\n-\n-\n-\n-
    Entry(BufferDescriptor const &srcDescArg, BufferDescriptor const &dstDescArg, BufferDescriptor const &duDescArg, BufferDescriptor const &dvDescArg, EVALUATOR *evalArg)
    Definition mesh.h:197
    \n-\n-\n-
    virtual Far::TopologyRefiner const * GetTopologyRefiner() const
    Definition mesh.h:578
    \n-
    virtual VertexBuffer * GetVertexBuffer()
    Definition mesh.h:570
    \n-
    virtual void UpdateVaryingBuffer(float const *varyingData, int startVertex, int numVerts)
    Definition mesh.h:495
    \n-
    virtual VertexBuffer * GetVaryingBuffer()
    Definition mesh.h:574
    \n-\n-\n-\n-
    virtual VertexBufferBinding BindVertexBuffer()
    Definition mesh.h:562
    \n-
    virtual int GetNumVertices() const
    Definition mesh.h:558
    \n-
    Mesh(Far::TopologyRefiner *refiner, int numVertexElements, int numVaryingElements, int level, MeshBitset bits=MeshBitset(), EvaluatorCache *evaluatorCache=NULL, DeviceContext *deviceContext=NULL)
    Definition mesh.h:428
    \n-\n-\n-
    EvaluatorCacheT< Evaluator > EvaluatorCache
    Definition mesh.h:425
    \n-
    virtual VertexBufferBinding BindVaryingBuffer()
    Definition mesh.h:566
    \n-\n-
    PatchTable::VertexBufferBinding VertexBufferBinding
    Definition mesh.h:426
    \n-
    virtual void UpdateVertexBuffer(float const *vertexData, int startVertex, int numVerts)
    Definition mesh.h:489
    \n-\n-
    virtual PatchTable * GetPatchTable() const
    Definition mesh.h:550
    \n-
    virtual Far::PatchTable const * GetFarPatchTable() const
    Definition mesh.h:554
    \n-\n-
    virtual int GetMaxValence() const
    Definition mesh.h:560
    \n+
    78} // end namespace OPENSUBDIV_VERSION
    \n+
    79using namespace OPENSUBDIV_VERSION;
    \n+
    80
    \n+
    81} // end namespace OpenSubdiv
    \n+
    82
    \n+
    83#endif // OPENSUBDIV3_OSD_CPU_VERTEX_BUFFER_H
    \n+\n+
    Concrete vertex buffer class for CPU subdivision.
    \n+
    int GetNumElements() const
    Returns how many elements defined in this vertex buffer.
    \n+
    static CpuVertexBuffer * Create(int numElements, int numVertices, void *deviceContext=NULL)
    Creator. Returns NULL if error.
    \n+
    void UpdateData(const float *src, int startVertex, int numVertices, void *deviceContext=NULL)
    \n+
    int GetNumVertices() const
    Returns how many vertices allocated in this vertex buffer.
    \n+\n+
    float * BindCpuBuffer()
    Returns the address of CPU buffer.
    \n+
    CpuVertexBuffer(int numElements, int numVertices)
    Constructor.
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-mesh.h\n+cpuVertexBuffer.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2013 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -24,1093 +24,84 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_MESH_H\n-26#define OPENSUBDIV3_OSD_MESH_H\n+25#ifndef OPENSUBDIV3_OSD_CPU_VERTEX_BUFFER_H\n+26#define OPENSUBDIV3_OSD_CPU_VERTEX_BUFFER_H\n 27\n 28#include \"../version.h\"\n 29\n-30#include \n-31#include \n-32#include \n-33#include \n+30#include \n+31\n+32namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+33namespace OPENSUBDIV_VERSION {\n 34\n-35#include \"../far/topologyRefiner.h\"\n-36#include \"../far/patchTableFactory.h\"\n-37#include \"../far/stencilTable.h\"\n-38#include \"../far/stencilTableFactory.h\"\n-39\n-40#include \"../osd/bufferDescriptor.h\"\n-41\n-42struct ID3D11DeviceContext;\n-43\n-44namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-45namespace OPENSUBDIV_VERSION {\n-46\n-47namespace Osd {\n-48\n-_\b4_\b9enum _\bM_\be_\bs_\bh_\bB_\bi_\bt_\bs {\n-_\b5_\b0 _\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be = 0,\n-_\b5_\b1 _\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bV_\ba_\br_\by_\bi_\bn_\bg = 1,\n-_\b5_\b2 _\bM_\be_\bs_\bh_\bF_\bV_\ba_\br_\bD_\ba_\bt_\ba = 2,\n-_\b5_\b3 _\bM_\be_\bs_\bh_\bF_\bV_\ba_\br_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be = 3,\n-_\b5_\b4 _\bM_\be_\bs_\bh_\bU_\bs_\be_\bS_\bm_\bo_\bo_\bt_\bh_\bC_\bo_\br_\bn_\be_\br_\bP_\ba_\bt_\bc_\bh = 4,\n-_\b5_\b5 _\bM_\be_\bs_\bh_\bU_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh = 5,\n-_\b5_\b6 _\bM_\be_\bs_\bh_\bU_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh = 6,\n-_\b5_\b7 _\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bB_\bi_\bl_\bi_\bn_\be_\ba_\br_\bB_\ba_\bs_\bi_\bs = 7, // exclusive\n-_\b5_\b8 _\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bB_\ba_\bs_\bi_\bs = 8, // exclusive\n-_\b5_\b9 _\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bG_\br_\be_\bg_\bo_\br_\by_\bB_\ba_\bs_\bi_\bs = 9, // exclusive\n-_\b6_\b0 _\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by = 10, // exclusive\n-_\b6_\b1 _\bN_\bU_\bM_\b__\bM_\bE_\bS_\bH_\b__\bB_\bI_\bT_\bS = 11,\n-62};\n-_\b6_\b3typedef std::bitset _\bM_\be_\bs_\bh_\bB_\bi_\bt_\bs_\be_\bt;\n+35namespace Osd {\n+36\n+_\b4_\b2class _\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br {\n+43public:\n+_\b4_\b5 static _\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br * _\bC_\br_\be_\ba_\bt_\be(int numElements, int numVertices,\n+46 void *deviceContext = NULL);\n+47\n+_\b4_\b9 _\b~_\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br();\n+50\n+_\b5_\b3 void _\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba(const float *src, int startVertex, int numVertices,\n+54 void *deviceContext = NULL);\n+55\n+_\b5_\b7 int _\bG_\be_\bt_\bN_\bu_\bm_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs() const;\n+58\n+_\b6_\b0 int _\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const;\n+61\n+_\b6_\b3 float * _\bB_\bi_\bn_\bd_\bC_\bp_\bu_\bB_\bu_\bf_\bf_\be_\br();\n 64\n-65// --------------------------------------------------------------------------\n--\n-66\n-67template \n-_\b6_\b8class _\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be {\n-69public:\n-_\b7_\b0 typedef PATCH_TABLE _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be;\n-_\b7_\b1 typedef typename PatchTable::VertexBufferBinding _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bB_\bi_\bn_\bd_\bi_\bn_\bg;\n-72\n-73public:\n-_\b7_\b4 _\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be() { }\n+65protected:\n+_\b6_\b7 _\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(int numElements, int numVertices);\n+68\n+69private:\n+70 int _numElements;\n+71 int _numVertices;\n+72 float *_cpuBuffer;\n+73};\n+74\n 75\n-_\b7_\b6 virtual _\b~_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be() { }\n+76} // end namespace Osd\n 77\n-_\b7_\b8 virtual int _\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const = 0;\n-79\n-_\b8_\b0 virtual int _\bG_\be_\bt_\bM_\ba_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be() const = 0;\n-81\n-_\b8_\b2 virtual void _\bU_\bp_\bd_\ba_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(float const *vertexData,\n-83 int startVertex, int numVerts) = 0;\n-84\n-_\b8_\b5 virtual void _\bU_\bp_\bd_\ba_\bt_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bB_\bu_\bf_\bf_\be_\br(float const *varyingData,\n-86 int startVertex, int numVerts) = 0;\n-87\n-_\b8_\b8 virtual void _\bR_\be_\bf_\bi_\bn_\be() = 0;\n-89\n-_\b9_\b0 virtual void _\bS_\by_\bn_\bc_\bh_\br_\bo_\bn_\bi_\bz_\be() = 0;\n-91\n-_\b9_\b2 virtual _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be * _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be() const = 0;\n-93\n-_\b9_\b4 virtual _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *_\bG_\be_\bt_\bF_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be() const = 0;\n-95\n-_\b9_\b6 virtual _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bB_\bi_\bn_\bd_\bi_\bn_\bg _\bB_\bi_\bn_\bd_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br() = 0;\n-97\n-_\b9_\b8 virtual _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bB_\bi_\bn_\bd_\bi_\bn_\bg _\bB_\bi_\bn_\bd_\bV_\ba_\br_\by_\bi_\bn_\bg_\bB_\bu_\bf_\bf_\be_\br() = 0;\n-99\n-100protected:\n-_\b1_\b0_\b1 static inline void _\br_\be_\bf_\bi_\bn_\be_\bM_\be_\bs_\bh(_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br & refiner,\n-102 int level, bool adaptive,\n-103 bool singleCreasePatch) {\n-104 if (adaptive) {\n-105 _\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs options(level);\n-106 options._\bu_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh = singleCreasePatch;\n-107 refiner._\bR_\be_\bf_\bi_\bn_\be_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be(options);\n-108 } else {\n-109 // This dependency on FVar channels should not be necessary\n-110 bool fullTopologyInLastLevel = refiner._\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs()>0;\n-111\n-112 _\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bO_\bp_\bt_\bi_\bo_\bn_\bs options(level);\n-113 options._\bf_\bu_\bl_\bl_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bn_\bL_\ba_\bs_\bt_\bL_\be_\bv_\be_\bl = fullTopologyInLastLevel;\n-114 refiner._\bR_\be_\bf_\bi_\bn_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm(options);\n-115 }\n-116 }\n-_\b1_\b1_\b7 static inline void _\br_\be_\bf_\bi_\bn_\be_\bM_\be_\bs_\bh(_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br & refiner,\n-118 int level, _\bM_\be_\bs_\bh_\bB_\bi_\bt_\bs_\be_\bt bits) {\n-119 if (bits.test(_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be)) {\n-120 _\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs options(level);\n-121 options._\bu_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh = bits.test(_\bM_\be_\bs_\bh_\bU_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh);\n-122 options._\bu_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh = bits.test(_\bM_\be_\bs_\bh_\bU_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh);\n-123 options._\bc_\bo_\bn_\bs_\bi_\bd_\be_\br_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs = bits.test(_\bM_\be_\bs_\bh_\bF_\bV_\ba_\br_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be);\n-124 refiner._\bR_\be_\bf_\bi_\bn_\be_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be(options);\n-125 } else {\n-126 // This dependency on FVar channels should not be necessary\n-127 bool fullTopologyInLastLevel = refiner._\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs()>0;\n-128\n-129 _\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bO_\bp_\bt_\bi_\bo_\bn_\bs options(level);\n-130 options._\bf_\bu_\bl_\bl_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bn_\bL_\ba_\bs_\bt_\bL_\be_\bv_\be_\bl = fullTopologyInLastLevel;\n-131 refiner._\bR_\be_\bf_\bi_\bn_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm(options);\n-132 }\n-133 }\n-134};\n-135\n-136// -------------------------------------------------------------------------\n---\n-137\n-138template \n-140STENCIL_TABLE const *\n-_\b1_\b4_\b1_\bc_\bo_\bn_\bv_\be_\br_\bt_\bT_\bo_\bC_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bl_\be_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(\n-142 SRC_STENCIL_TABLE const *table, DEVICE_CONTEXT *context) {\n-143 if (! table) return NULL;\n-144 return STENCIL_TABLE::Create(table, context);\n-145}\n-146\n-147template <>\n-_\b1_\b4_\b8inline _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *\n-149_\bc_\bo_\bn_\bv_\be_\br_\bt_\bT_\bo_\bC_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bl_\be_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b<_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bv_\bo_\bi_\bd_\b>(\n-150 _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *table, void * /*context*/) {\n-151 // no need for conversion\n-152 // XXX: We don't want to even copy.\n-153 if (! table) return NULL;\n-154 return new _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(*table);\n-155}\n-156\n-157template <>\n-_\b1_\b5_\b8inline _\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *\n-159_\bc_\bo_\bn_\bv_\be_\br_\bt_\bT_\bo_\bC_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bl_\be_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b<_\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bF_\ba_\br_\b:_\b:\n-_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bv_\bo_\bi_\bd_\b>(\n-160 _\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *table, void * /*context*/) {\n-161 // no need for conversion\n-162 // XXX: We don't want to even copy.\n-163 if (! table) return NULL;\n-164 return new _\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(*table);\n-165}\n-166\n-167template <>\n-_\b1_\b6_\b8inline _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *\n-169_\bc_\bo_\bn_\bv_\be_\br_\bt_\bT_\bo_\bC_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bl_\be_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b<_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,\n-_\bI_\bD_\b3_\bD_\b1_\b1_\bD_\be_\bv_\bi_\bc_\be_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b>(\n-170 _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *table, ID3D11DeviceContext * /*context*/) {\n-171 // no need for conversion\n-172 // XXX: We don't want to even copy.\n-173 if (! table) return NULL;\n-174 return new _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(*table);\n-175}\n-176\n-177// -------------------------------------------------------------------------\n---\n-178\n-179// Osd evaluator cache: for the GPU backends require compiled instance\n-180// (GLXFB, GLCompute, CL)\n-181//\n-182// note: this is just an example usage and client applications are supposed\n-183// to implement their own structure for Evaluator instance.\n-184//\n-185template \n-_\b1_\b8_\b6class _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT {\n-187public:\n-_\b1_\b8_\b8 _\b~_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT() {\n-189 for(typename Evaluators::iterator it = _evaluators.begin();\n-190 it != _evaluators.end(); ++it) {\n-191 delete it->evaluator;\n-192 }\n-193 }\n-194\n-195 // XXX: FIXME, linear search\n-_\b1_\b9_\b6 struct _\bE_\bn_\bt_\br_\by {\n-_\b1_\b9_\b7 _\bE_\bn_\bt_\br_\by(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDescArg,\n-198 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDescArg,\n-199 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDescArg,\n-200 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDescArg,\n-201 EVALUATOR *evalArg) : _\bs_\br_\bc_\bD_\be_\bs_\bc(srcDescArg), _\bd_\bs_\bt_\bD_\be_\bs_\bc(dstDescArg),\n-202 _\bd_\bu_\bD_\be_\bs_\bc(duDescArg), _\bd_\bv_\bD_\be_\bs_\bc(dvDescArg),\n-203 _\bd_\bu_\bu_\bD_\be_\bs_\bc(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br()),\n-204 _\bd_\bu_\bv_\bD_\be_\bs_\bc(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br()),\n-205 _\bd_\bv_\bv_\bD_\be_\bs_\bc(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br()),\n-206 _\be_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br(evalArg) {}\n-_\b2_\b0_\b7 _\bE_\bn_\bt_\br_\by(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDescArg,\n-208 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDescArg,\n-209 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDescArg,\n-210 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDescArg,\n-211 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDescArg,\n-212 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDescArg,\n-213 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDescArg,\n-214 EVALUATOR *evalArg) : _\bs_\br_\bc_\bD_\be_\bs_\bc(srcDescArg), _\bd_\bs_\bt_\bD_\be_\bs_\bc(dstDescArg),\n-215 _\bd_\bu_\bD_\be_\bs_\bc(duDescArg), _\bd_\bv_\bD_\be_\bs_\bc(dvDescArg),\n-216 _\bd_\bu_\bu_\bD_\be_\bs_\bc(duuDescArg),\n-217 _\bd_\bu_\bv_\bD_\be_\bs_\bc(duvDescArg),\n-218 _\bd_\bv_\bv_\bD_\be_\bs_\bc(dvvDescArg),\n-219 _\be_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br(evalArg) {}\n-_\b2_\b2_\b0 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br _\bs_\br_\bc_\bD_\be_\bs_\bc, _\bd_\bs_\bt_\bD_\be_\bs_\bc;\n-_\b2_\b2_\b1 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br _\bd_\bu_\bD_\be_\bs_\bc, _\bd_\bv_\bD_\be_\bs_\bc;\n-_\b2_\b2_\b2 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br _\bd_\bu_\bu_\bD_\be_\bs_\bc, _\bd_\bu_\bv_\bD_\be_\bs_\bc, _\bd_\bv_\bv_\bD_\be_\bs_\bc;\n-_\b2_\b2_\b3 EVALUATOR *_\be_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br;\n-224 };\n-_\b2_\b2_\b5 typedef std::vector _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bs;\n-226\n-227 template \n-_\b2_\b2_\b8 EVALUATOR *_\bG_\be_\bt_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-229 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-230 DEVICE_CONTEXT *deviceContext) {\n-231 return _\bG_\be_\bt_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br(srcDesc, dstDesc,\n-232 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-233 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-234 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-235 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-236 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-237 deviceContext);\n-238 }\n-239\n-240 template \n-_\b2_\b4_\b1 EVALUATOR *_\bG_\be_\bt_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-242 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-243 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-244 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-245 DEVICE_CONTEXT *deviceContext) {\n-246 return _\bG_\be_\bt_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br(srcDesc, dstDesc,\n-247 duDesc, dvDesc,\n-248 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-249 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-250 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n-251 deviceContext);\n-252 }\n-253\n-254 template \n-_\b2_\b5_\b5 EVALUATOR *_\bG_\be_\bt_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n-256 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n-257 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n-258 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n-259 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n-260 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n-261 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n-262 DEVICE_CONTEXT *deviceContext) {\n-263\n-264 for(typename Evaluators::iterator it = _evaluators.begin();\n-265 it != _evaluators.end(); ++it) {\n-266 if (isEqual(srcDesc, it->srcDesc) &&\n-267 isEqual(dstDesc, it->dstDesc) &&\n-268 isEqual(duDesc, it->duDesc) &&\n-269 isEqual(dvDesc, it->dvDesc) &&\n-270 isEqual(duuDesc, it->duuDesc) &&\n-271 isEqual(duvDesc, it->duvDesc) &&\n-272 isEqual(dvvDesc, it->dvvDesc)) {\n-273 return it->evaluator;\n-274 }\n-275 }\n-276 EVALUATOR *e = EVALUATOR::Create(srcDesc, dstDesc,\n-277 duDesc, dvDesc,\n-278 duuDesc, duvDesc, dvvDesc,\n-279 deviceContext);\n-280 _evaluators.push_back(_\bE_\bn_\bt_\br_\by(srcDesc, dstDesc,\n-281 duDesc, dvDesc,\n-282 duuDesc, duvDesc, dvvDesc, e));\n-283 return e;\n-284 }\n-285\n-286private:\n-287 static bool isEqual(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &a,\n-288 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &b) {\n-289 int offsetA = a._\bs_\bt_\br_\bi_\bd_\be ? (a._\bo_\bf_\bf_\bs_\be_\bt % a._\bs_\bt_\br_\bi_\bd_\be) : 0;\n-290 int offsetB = b._\bs_\bt_\br_\bi_\bd_\be ? (b._\bo_\bf_\bf_\bs_\be_\bt % b._\bs_\bt_\br_\bi_\bd_\be) : 0;\n-291\n-292 // Note: XFB kernel needs to be configured with the local offset\n-293 // of the dstDesc to skip preceding primvars.\n-294 return (offsetA == offsetB &&\n-295 a._\bl_\be_\bn_\bg_\bt_\bh == b._\bl_\be_\bn_\bg_\bt_\bh &&\n-296 a._\bs_\bt_\br_\bi_\bd_\be == b._\bs_\bt_\br_\bi_\bd_\be);\n-297 }\n-298\n-299 _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bs _evaluators;\n-300};\n-301\n-303\n-304// template helpers to see if the evaluator is instantiatable or not.\n-305template \n-306struct instantiatable\n-307{\n-308 typedef char yes[1];\n-309 typedef char no[2];\n-310 template static yes &chk(typename C::Instantiatable *t=0);\n-311 template static no &chk(...);\n-312 static bool const value = sizeof(chk(0)) == sizeof(yes);\n-313};\n-314template \n-315struct enable_if { typedef T type; };\n-316template \n-317struct enable_if { };\n-318\n-320\n-321// extract a kernel from cache if available\n-322template \n-323static EVALUATOR *GetEvaluator(\n-324 EvaluatorCacheT *cache,\n-325 BufferDescriptor const &srcDesc,\n-326 BufferDescriptor const &dstDesc,\n-327 BufferDescriptor const &duDesc,\n-328 BufferDescriptor const &dvDesc,\n-329 BufferDescriptor const &duuDesc,\n-330 BufferDescriptor const &duvDesc,\n-331 BufferDescriptor const &dvvDesc,\n-332 DEVICE_CONTEXT deviceContext,\n-333 typename enable_if::value, void>::type*t=0) {\n-334 (void)t;\n-335 if (cache == NULL) return NULL;\n-336 return cache->GetEvaluator(srcDesc, dstDesc,\n-337 duDesc, dvDesc, duuDesc, duvDesc, dvvDesc,\n-338 deviceContext);\n-339}\n-340\n-341template \n-342static EVALUATOR *GetEvaluator(\n-343 EvaluatorCacheT *cache,\n-344 BufferDescriptor const &srcDesc,\n-345 BufferDescriptor const &dstDesc,\n-346 BufferDescriptor const &duDesc,\n-347 BufferDescriptor const &dvDesc,\n-348 DEVICE_CONTEXT deviceContext,\n-349 typename enable_if::value, void>::type*t=0) {\n-350 (void)t;\n-351 if (cache == NULL) return NULL;\n-352 return cache->GetEvaluator(srcDesc, dstDesc, duDesc, dvDesc,\n-deviceContext);\n-353}\n-354\n-355template \n-356static EVALUATOR *GetEvaluator(\n-357 EvaluatorCacheT *cache,\n-358 BufferDescriptor const &srcDesc,\n-359 BufferDescriptor const &dstDesc,\n-360 DEVICE_CONTEXT deviceContext,\n-361 typename enable_if::value, void>::type*t=0) {\n-362 (void)t;\n-363 if (cache == NULL) return NULL;\n-364 return cache->GetEvaluator(srcDesc, dstDesc,\n-365 BufferDescriptor(),\n-366 BufferDescriptor(),\n-367 deviceContext);\n-368}\n-369\n-370// fallback\n-371template \n-372static EVALUATOR *GetEvaluator(\n-373 EvaluatorCacheT *,\n-374 BufferDescriptor const &,\n-375 BufferDescriptor const &,\n-376 BufferDescriptor const &,\n-377 BufferDescriptor const &,\n-378 BufferDescriptor const &,\n-379 BufferDescriptor const &,\n-380 BufferDescriptor const &,\n-381 DEVICE_CONTEXT,\n-382 typename enable_if::value, void>::type*t=0) {\n-383 (void)t;\n-384 return NULL;\n-385}\n-386\n-387template \n-388static EVALUATOR *GetEvaluator(\n-389 EvaluatorCacheT *,\n-390 BufferDescriptor const &,\n-391 BufferDescriptor const &,\n-392 BufferDescriptor const &,\n-393 BufferDescriptor const &,\n-394 DEVICE_CONTEXT,\n-395 typename enable_if::value, void>::type*t=0) {\n-396 (void)t;\n-397 return NULL;\n-398}\n-399\n-400template \n-401static EVALUATOR *GetEvaluator(\n-402 EvaluatorCacheT *,\n-403 BufferDescriptor const &,\n-404 BufferDescriptor const &,\n-405 DEVICE_CONTEXT,\n-406 typename enable_if::value, void>::type*t=0) {\n-407 (void)t;\n-408 return NULL;\n-409}\n-410\n-411// -------------------------------------------------------------------------\n---\n-412\n-413template \n-_\b4_\b1_\b8class _\bM_\be_\bs_\bh : public _\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be {\n-419public:\n-_\b4_\b2_\b0 typedef VERTEX_BUFFER _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br;\n-_\b4_\b2_\b1 typedef EVALUATOR _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br;\n-_\b4_\b2_\b2 typedef STENCIL_TABLE _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be;\n-_\b4_\b2_\b3 typedef PATCH_TABLE _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be;\n-_\b4_\b2_\b4 typedef DEVICE_CONTEXT _\bD_\be_\bv_\bi_\bc_\be_\bC_\bo_\bn_\bt_\be_\bx_\bt;\n-_\b4_\b2_\b5 typedef _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b<_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b> _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be;\n-_\b4_\b2_\b6 typedef typename PatchTable::VertexBufferBinding _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bB_\bi_\bn_\bd_\bi_\bn_\bg;\n-427\n-_\b4_\b2_\b8 _\bM_\be_\bs_\bh(_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br * refiner,\n-429 int numVertexElements,\n-430 int numVaryingElements,\n-431 int level,\n-432 _\bM_\be_\bs_\bh_\bB_\bi_\bt_\bs_\be_\bt bits = _\bM_\be_\bs_\bh_\bB_\bi_\bt_\bs_\be_\bt(),\n-433 _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be * evaluatorCache = NULL,\n-434 _\bD_\be_\bv_\bi_\bc_\be_\bC_\bo_\bn_\bt_\be_\bx_\bt * deviceContext = NULL) :\n-435\n-436 _refiner(refiner),\n-437 _farPatchTable(NULL),\n-438 _numVertices(0),\n-439 _maxValence(0),\n-440 _vertexBuffer(NULL),\n-441 _varyingBuffer(NULL),\n-442 _vertexStencilTable(NULL),\n-443 _varyingStencilTable(NULL),\n-444 _evaluatorCache(evaluatorCache),\n-445 _patchTable(NULL),\n-446 _deviceContext(deviceContext) {\n-447\n-448 assert(_refiner);\n-449\n-450 _\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b<_\bP_\bA_\bT_\bC_\bH_\b__\bT_\bA_\bB_\bL_\bE_\b>_\b:_\b:_\br_\be_\bf_\bi_\bn_\be_\bM_\be_\bs_\bh(\n-451 *_refiner, level, bits);\n-452\n-453 int vertexBufferStride = numVertexElements +\n-454 (bits.test(_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bV_\ba_\br_\by_\bi_\bn_\bg) ? numVaryingElements : 0);\n-455 int varyingBufferStride =\n-456 (bits.test(_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bV_\ba_\br_\by_\bi_\bn_\bg) ? 0 : numVaryingElements);\n-457\n-458 initializeContext(numVertexElements,\n-459 numVaryingElements,\n-460 level, bits);\n-461\n-462 initializeVertexBuffers(_numVertices,\n-463 vertexBufferStride,\n-464 varyingBufferStride);\n-465\n-466 // configure vertex buffer descriptor\n-467 _vertexDesc =\n-468 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(0, numVertexElements, vertexBufferStride);\n-469 if (bits.test(_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bV_\ba_\br_\by_\bi_\bn_\bg)) {\n-470 _varyingDesc = _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(\n-471 numVertexElements, numVaryingElements, vertexBufferStride);\n-472 } else {\n-473 _varyingDesc = _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(\n-474 0, numVaryingElements, varyingBufferStride);\n-475 }\n-476 }\n-477\n-_\b4_\b7_\b8 virtual _\b~_\bM_\be_\bs_\bh() {\n-479 delete _refiner;\n-480 delete _farPatchTable;\n-481 delete _vertexBuffer;\n-482 delete _varyingBuffer;\n-483 delete _vertexStencilTable;\n-484 delete _varyingStencilTable;\n-485 delete _patchTable;\n-486 // deviceContext and evaluatorCache are not owned by this class.\n-487 }\n-488\n-_\b4_\b8_\b9 virtual void _\bU_\bp_\bd_\ba_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(float const *vertexData,\n-490 int startVertex, int numVerts) {\n-491 _vertexBuffer->UpdateData(vertexData, startVertex, numVerts,\n-492 _deviceContext);\n-493 }\n-494\n-_\b4_\b9_\b5 virtual void _\bU_\bp_\bd_\ba_\bt_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bB_\bu_\bf_\bf_\be_\br(float const *varyingData,\n-496 int startVertex, int numVerts) {\n-497 _varyingBuffer->UpdateData(varyingData, startVertex, numVerts,\n-498 _deviceContext);\n-499 }\n-500\n-_\b5_\b0_\b1 virtual void _\bR_\be_\bf_\bi_\bn_\be() {\n-502\n-503 int numControlVertices = _refiner->_\bG_\be_\bt_\bL_\be_\bv_\be_\bl(0)._\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs();\n-504\n-505 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br srcDesc = _vertexDesc;\n-506 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br dstDesc(srcDesc);\n-507 dstDesc._\bo_\bf_\bf_\bs_\be_\bt += numControlVertices * dstDesc._\bs_\bt_\br_\bi_\bd_\be;\n-508\n-509 // note that the _evaluatorCache can be NULL and thus\n-510 // the evaluatorInstance can be NULL\n-511 // (for uninstantiatable kernels CPU,TBB etc)\n-512 _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance = GetEvaluator(\n-513 _evaluatorCache, srcDesc, dstDesc,\n-514 _deviceContext);\n-515\n-516 Evaluator::EvalStencils(_vertexBuffer, srcDesc,\n-517 _vertexBuffer, dstDesc,\n-518 _vertexStencilTable,\n-519 instance, _deviceContext);\n-520\n-521 if (_varyingDesc._\bl_\be_\bn_\bg_\bt_\bh > 0) {\n-522 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br vSrcDesc = _varyingDesc;\n-523 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br vDstDesc(vSrcDesc);\n-524 vDstDesc._\bo_\bf_\bf_\bs_\be_\bt += numControlVertices * vDstDesc._\bs_\bt_\br_\bi_\bd_\be;\n-525\n-526 instance = GetEvaluator(\n-527 _evaluatorCache, vSrcDesc, vDstDesc,\n-528 _deviceContext);\n-529\n-530 if (_varyingBuffer) {\n-531 // non-interleaved\n-532 Evaluator::EvalStencils(_varyingBuffer, vSrcDesc,\n-533 _varyingBuffer, vDstDesc,\n-534 _varyingStencilTable,\n-535 instance, _deviceContext);\n-536 } else {\n-537 // interleaved\n-538 Evaluator::EvalStencils(_vertexBuffer, vSrcDesc,\n-539 _vertexBuffer, vDstDesc,\n-540 _varyingStencilTable,\n-541 instance, _deviceContext);\n-542 }\n-543 }\n-544 }\n-545\n-_\b5_\b4_\b6 virtual void _\bS_\by_\bn_\bc_\bh_\br_\bo_\bn_\bi_\bz_\be() {\n-547 Evaluator::Synchronize(_deviceContext);\n-548 }\n-549\n-_\b5_\b5_\b0 virtual _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be * _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be() const {\n-551 return _patchTable;\n-552 }\n-553\n-_\b5_\b5_\b4 virtual _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *_\bG_\be_\bt_\bF_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be() const {\n-555 return _farPatchTable;\n-556 }\n-557\n-_\b5_\b5_\b8 virtual int _\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const { return _numVertices; }\n-559\n-_\b5_\b6_\b0 virtual int _\bG_\be_\bt_\bM_\ba_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be() const { return _maxValence; }\n-561\n-_\b5_\b6_\b2 virtual _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bB_\bi_\bn_\bd_\bi_\bn_\bg _\bB_\bi_\bn_\bd_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br() {\n-563 return _vertexBuffer->BindVBO(_deviceContext);\n-564 }\n-565\n-_\b5_\b6_\b6 virtual _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bB_\bi_\bn_\bd_\bi_\bn_\bg _\bB_\bi_\bn_\bd_\bV_\ba_\br_\by_\bi_\bn_\bg_\bB_\bu_\bf_\bf_\be_\br() {\n-567 return _varyingBuffer->BindVBO(_deviceContext);\n-568 }\n-569\n-_\b5_\b7_\b0 virtual _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br * _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br() {\n-571 return _vertexBuffer;\n-572 }\n-573\n-_\b5_\b7_\b4 virtual _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br * _\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bB_\bu_\bf_\bf_\be_\br() {\n-575 return _varyingBuffer;\n-576 }\n-577\n-_\b5_\b7_\b8 virtual _\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br const * _\bG_\be_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br() const {\n-579 return _refiner;\n-580 }\n-581\n-582private:\n-583 void initializeContext(int numVertexElements,\n-584 int numVaryingElements,\n-585 int level, _\bM_\be_\bs_\bh_\bB_\bi_\bt_\bs_\be_\bt bits) {\n-586 assert(_refiner);\n-587\n-588 Far::StencilTableFactory::Options options;\n-589 options.generateOffsets = true;\n-590 options.generateIntermediateLevels =\n-591 _refiner->_\bI_\bs_\bU_\bn_\bi_\bf_\bo_\br_\bm() ? false : true;\n-592\n-593 _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const * vertexStencils = NULL;\n-594 _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const * varyingStencils = NULL;\n-595\n-596 if (numVertexElements>0) {\n-597\n-598 vertexStencils = _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bC_\br_\be_\ba_\bt_\be(*_refiner,\n-599 options);\n-600 }\n-601\n-602 if (numVaryingElements>0) {\n-603\n-604 options.interpolationMode =\n-605 _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bI_\bN_\bT_\bE_\bR_\bP_\bO_\bL_\bA_\bT_\bE_\b__\bV_\bA_\bR_\bY_\bI_\bN_\bG;\n-606\n-607 varyingStencils = _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bC_\br_\be_\ba_\bt_\be(*_refiner,\n-608 options);\n-609 }\n-610\n-611 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs poptions(level);\n-612 poptions.generateFVarTables = bits.test(_\bM_\be_\bs_\bh_\bF_\bV_\ba_\br_\bD_\ba_\bt_\ba);\n-613 poptions.generateFVarLegacyLinearPatches = !bits.test(_\bM_\be_\bs_\bh_\bF_\bV_\ba_\br_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be);\n-614 poptions.generateLegacySharpCornerPatches = !bits.test\n-(_\bM_\be_\bs_\bh_\bU_\bs_\be_\bS_\bm_\bo_\bo_\bt_\bh_\bC_\bo_\br_\bn_\be_\br_\bP_\ba_\bt_\bc_\bh);\n-615 poptions.useSingleCreasePatch = bits.test(_\bM_\be_\bs_\bh_\bU_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh);\n-616 poptions.useInfSharpPatch = bits.test(_\bM_\be_\bs_\bh_\bU_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh);\n-617\n-618 // points on bilinear and gregory basis endcap boundaries can be\n-619 // shared among adjacent patches to save some stencils.\n-620 if (bits.test(_\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bB_\bi_\bl_\bi_\bn_\be_\ba_\br_\bB_\ba_\bs_\bi_\bs)) {\n-621 poptions.SetEndCapType(\n-622 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b__\bB_\bA_\bS_\bI_\bS);\n-623 poptions.shareEndCapPatchPoints = true;\n-624 } else if (bits.test(_\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bB_\ba_\bs_\bi_\bs)) {\n-625 poptions.SetEndCapType(\n-626 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bB_\bS_\bP_\bL_\bI_\bN_\bE_\b__\bB_\bA_\bS_\bI_\bS);\n-627 } else if (bits.test(_\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bG_\br_\be_\bg_\bo_\br_\by_\bB_\ba_\bs_\bi_\bs)) {\n-628 poptions.SetEndCapType(\n-629 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bA_\bS_\bI_\bS);\n-630 poptions.shareEndCapPatchPoints = true;\n-631 } else if (bits.test(_\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by)) {\n-632 poptions.SetEndCapType(\n-633 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bL_\bE_\bG_\bA_\bC_\bY_\b__\bG_\bR_\bE_\bG_\bO_\bR_\bY);\n-634 }\n-635\n-636 _farPatchTable = _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bC_\br_\be_\ba_\bt_\be(*_refiner, poptions);\n-637\n-638 // if there's endcap stencils, merge it into regular stencils.\n-639 if (_farPatchTable->_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be()) {\n-640 // append stencils\n-641 if (Far::StencilTable const *vertexStencilsWithLocalPoints =\n-642 _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bA_\bp_\bp_\be_\bn_\bd_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(\n-643 *_refiner,\n-644 vertexStencils,\n-645 _farPatchTable->_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be())) {\n-646 delete vertexStencils;\n-647 vertexStencils = vertexStencilsWithLocalPoints;\n-648 }\n-649 if (varyingStencils) {\n-650 if (Far::StencilTable const *varyingStencilsWithLocalPoints =\n-651 _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bA_\bp_\bp_\be_\bn_\bd_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(\n-652 *_refiner,\n-653 varyingStencils,\n-654 _farPatchTable->_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be())) {\n-655 delete varyingStencils;\n-656 varyingStencils = varyingStencilsWithLocalPoints;\n-657 }\n-658 }\n-659 }\n-660\n-661 _maxValence = _farPatchTable->_\bG_\be_\bt_\bM_\ba_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be();\n-662 _patchTable = PatchTable::Create(_farPatchTable, _deviceContext);\n-663\n-664 // numvertices = coarse verts + refined verts + gregory basis verts\n-665 _numVertices = vertexStencils->_\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs()\n-666 + vertexStencils->_\bG_\be_\bt_\bN_\bu_\bm_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs();\n-667\n-668 // convert to device stenciltable if necessary.\n-669 _vertexStencilTable =\n-670 convertToCompatibleStencilTable(\n-671 vertexStencils, _deviceContext);\n-672 _varyingStencilTable =\n-673 convertToCompatibleStencilTable(\n-674 varyingStencils, _deviceContext);\n-675\n-676 // FIXME: we do extra copyings for Far::Stencils.\n-677 delete vertexStencils;\n-678 delete varyingStencils;\n-679 }\n-680\n-681 void initializeVertexBuffers(int numVertices,\n-682 int numVertexElements,\n-683 int numVaryingElements) {\n-684\n-685 if (numVertexElements) {\n-686 _vertexBuffer = VertexBuffer::Create(numVertexElements,\n-687 numVertices, _deviceContext);\n-688 }\n-689\n-690 if (numVaryingElements) {\n-691 _varyingBuffer = VertexBuffer::Create(numVaryingElements,\n-692 numVertices, _deviceContext);\n-693 }\n-694 }\n-695\n-696 Far::TopologyRefiner * _refiner;\n-697 Far::PatchTable * _farPatchTable;\n-698\n-699 int _numVertices;\n-700 int _maxValence;\n-701\n-702 _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br * _vertexBuffer;\n-703 _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br * _varyingBuffer;\n-704\n-705 BufferDescriptor _vertexDesc;\n-706 BufferDescriptor _varyingDesc;\n-707\n-708 _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const * _vertexStencilTable;\n-709 _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const * _varyingStencilTable;\n-710 _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be * _evaluatorCache;\n-711\n-712 _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be *_patchTable;\n-713 _\bD_\be_\bv_\bi_\bc_\be_\bC_\bo_\bn_\bt_\be_\bx_\bt *_deviceContext;\n-714};\n-715\n-716} // end namespace Osd\n-717\n-718} // end namespace OPENSUBDIV_VERSION\n-719using namespace OPENSUBDIV_VERSION;\n-720\n-721} // end namespace OpenSubdiv\n-722\n-723#endif // OPENSUBDIV3_OSD_MESH_H\n+78} // end namespace OPENSUBDIV_VERSION\n+79using namespace OPENSUBDIV_VERSION;\n+80\n+81} // end namespace OpenSubdiv\n+82\n+83#endif // OPENSUBDIV3_OSD_CPU_VERTEX_BUFFER_H\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bc_\bo_\bn_\bv_\be_\br_\bt_\bT_\bo_\bC_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bl_\be_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n-STENCIL_TABLE const * convertToCompatibleStencilTable(SRC_STENCIL_TABLE const\n-*table, DEVICE_CONTEXT *context)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b1_\b4_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bB_\bi_\bt_\bs\n-MeshBits\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bB_\bi_\bl_\bi_\bn_\be_\ba_\br_\bB_\ba_\bs_\bi_\bs\n-@ MeshEndCapBilinearBasis\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bN_\bU_\bM_\b__\bM_\bE_\bS_\bH_\b__\bB_\bI_\bT_\bS\n-@ NUM_MESH_BITS\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b6_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bU_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh\n-@ MeshUseInfSharpPatch\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bU_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh\n-@ MeshUseSingleCreasePatch\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n-@ MeshInterleaveVarying\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bF_\bV_\ba_\br_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be\n-@ MeshFVarAdaptive\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bG_\br_\be_\bg_\bo_\br_\by_\bB_\ba_\bs_\bi_\bs\n-@ MeshEndCapGregoryBasis\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bB_\ba_\bs_\bi_\bs\n-@ MeshEndCapBSplineBasis\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by\n-@ MeshEndCapLegacyGregory\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b6_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bU_\bs_\be_\bS_\bm_\bo_\bo_\bt_\bh_\bC_\bo_\br_\bn_\be_\br_\bP_\ba_\bt_\bc_\bh\n-@ MeshUseSmoothCornerPatch\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bF_\bV_\ba_\br_\bD_\ba_\bt_\ba\n-@ MeshFVarData\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be\n-@ MeshAdaptive\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bc_\bo_\bn_\bv_\be_\br_\bt_\bT_\bo_\bC_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bl_\be_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b<_\b _\bF_\ba_\br_\b:_\b:\n-_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bv_\bo_\bi_\bd_\b _\b>\n-Far::StencilTable const * convertToCompatibleStencilTable< Far::StencilTable,\n-Far::StencilTable, void >(Far::StencilTable const *table, void *)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b1_\b4_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bc_\bo_\bn_\bv_\be_\br_\bt_\bT_\bo_\bC_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bl_\be_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b<_\b _\bF_\ba_\br_\b:_\b:\n-_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bv_\bo_\bi_\bd_\b _\b>\n-Far::LimitStencilTable const * convertToCompatibleStencilTable< Far::\n-LimitStencilTable, Far::LimitStencilTable, void >(Far::LimitStencilTable const\n-*table, void *)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b1_\b5_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bB_\bi_\bt_\bs_\be_\bt\n-std::bitset< NUM_MESH_BITS > MeshBitset\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b6_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bc_\bo_\bn_\bv_\be_\br_\bt_\bT_\bo_\bC_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bl_\be_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b<_\b _\bF_\ba_\br_\b:_\b:\n-_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bI_\bD_\b3_\bD_\b1_\b1_\bD_\be_\bv_\bi_\bc_\be_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b _\b>\n-Far::StencilTable const * convertToCompatibleStencilTable< Far::StencilTable,\n-Far::StencilTable, ID3D11DeviceContext >(Far::StencilTable const *table,\n-ID3D11DeviceContext *)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b1_\b6_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-Container for arrays of parametric patches.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bM_\ba_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be\n-int GetMaxValence() const\n-Returns max vertex valence.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b9_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n-StencilTable const * GetLocalPointStencilTable() const\n-Returns the stencil table to compute local point vertex values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b3_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n-_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n-StencilTable const * GetLocalPointVaryingStencilTable() const\n-Returns the stencil table to compute local point varying values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b3_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static PatchTable * Create(TopologyRefiner const &refiner, Options\n-options=Options(), ConstIndexArray selectedFaces=ConstIndexArray())\n-Instantiates a PatchTable from a client-provided TopologyRefiner.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n-Public options for the PatchTable factory.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b4_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bL_\bE_\bG_\bA_\bC_\bY_\b__\bG_\bR_\bE_\bG_\bO_\bR_\bY\n-@ ENDCAP_LEGACY_GREGORY\n-legacy option for 2.x style Gregory patches (Catmark only)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b6_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bA_\bS_\bI_\bS\n-@ ENDCAP_GREGORY_BASIS\n-use Gregory patches (highest quality, recommended default)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b5_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b__\bB_\bA_\bS_\bI_\bS\n-@ ENDCAP_BILINEAR_BASIS\n-use linear patches (simple quads or tris)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b5_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bB_\bS_\bP_\bL_\bI_\bN_\bE_\b__\bB_\bA_\bS_\bI_\bS\n-@ ENDCAP_BSPLINE_BASIS\n-use BSpline-like patches (same patch type as regular)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b5_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bR_\be_\ba_\bl_\b<_\b _\bf_\bl_\bo_\ba_\bt_\b _\b>_\b:_\b:\n-_\bI_\bN_\bT_\bE_\bR_\bP_\bO_\bL_\bA_\bT_\bE_\b__\bV_\bA_\bR_\bY_\bI_\bN_\bG\n-@ INTERPOLATE_VARYING\n-varying primvar stencils\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b5_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bR_\be_\ba_\bl_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-int GetNumControlVertices() const\n-Returns the number of control vertices indexed in the table.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b6_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bR_\be_\ba_\bl_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n-int GetNumStencils() const\n-Returns the number of stencils in the table.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b5_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n-Stencil table class wrapping the template for compatibility.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b2_\b7_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n-Limit stencil table class wrapping the template for compatibility.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b8_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static StencilTable const * Create(TopologyRefiner const &refiner, Options\n-options=Options())\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b2_\b9_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n-_\bA_\bp_\bp_\be_\bn_\bd_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n-static StencilTable const * AppendLocalPointStencilTable(TopologyRefiner const\n-&refiner, StencilTable const *baseStencilTable, StencilTable const\n-*localPointStencilTable, bool factorize=true)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b3_\b0_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+Concrete vertex buffer class for CPU subdivision.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh_\b:_\b4_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n+int GetNumElements() const\n+Returns how many elements defined in this vertex buffer.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static CpuVertexBuffer * Create(int numElements, int numVertices, void\n+*deviceContext=NULL)\n+Creator. Returns NULL if error.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba\n+void UpdateData(const float *src, int startVertex, int numVertices, void\n+*deviceContext=NULL)\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n int GetNumVertices() const\n-Return the number of vertices in this level.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b6_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br\n-Stores topology data for a specified set of refinement options.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b5_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bI_\bs_\bU_\bn_\bi_\bf_\bo_\br_\bm\n-bool IsUniform() const\n-Returns true if uniform refinement has been applied.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b6_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs\n-int GetNumFVarChannels() const\n-Returns the number of face-varying channels in the tables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b2_\b9_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm\n-void RefineUniform(UniformOptions options)\n-Refine the topology uniformly.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bG_\be_\bt_\bL_\be_\bv_\be_\bl\n-TopologyLevel const & GetLevel(int level) const\n-Returns a handle to access data specific to a particular level.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b9_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be\n-void RefineAdaptive(AdaptiveOptions options, ConstIndexArray\n-selectedFaces=ConstIndexArray())\n-Feature Adaptive topology refinement.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n-Uniform refinement options.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b1_\b1_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bf_\bu_\bl_\bl_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bn_\bL_\ba_\bs_\bt_\bL_\be_\bv_\be_\bl\n-unsigned int fullTopologyInLastLevel\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b1_\b3_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n-Adaptive refinement options.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b1_\b5_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bu_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh\n-unsigned int useSingleCreasePatch\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b1_\b7_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bu_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh\n-unsigned int useInfSharpPatch\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b1_\b7_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bc_\bo_\bn_\bs_\bi_\bd_\be_\br_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs\n-unsigned int considerFVarChannels\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b1_\b8_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-BufferDescriptor is a struct which describes buffer elements in interleaved\n-data buffers....\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bb_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bs_\bt_\br_\bi_\bd_\be\n-int stride\n-stride to the next element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bb_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b1_\b0_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bl_\be_\bn_\bg_\bt_\bh\n-int length\n-number or length of the data\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bb_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b1_\b0_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bo_\bf_\bf_\bs_\be_\bt\n-int offset\n-offset to desired element data\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bb_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b9_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b6_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bG_\be_\bt_\bF_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-virtual Far::PatchTable const * GetFarPatchTable() const =0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\br_\be_\bf_\bi_\bn_\be_\bM_\be_\bs_\bh\n-static void refineMesh(Far::TopologyRefiner &refiner, int level, MeshBitset\n-bits)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b1_\b1_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bG_\be_\bt_\bM_\ba_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be\n-virtual int GetMaxValence() const =0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-virtual int GetNumVertices() const =0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bB_\bu_\bf_\bf_\be_\br\n-virtual void UpdateVaryingBuffer(float const *varyingData, int startVertex, int\n-numVerts)=0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\br_\be_\bf_\bi_\bn_\be_\bM_\be_\bs_\bh\n-static void refineMesh(Far::TopologyRefiner &refiner, int level, bool adaptive,\n-bool singleCreasePatch)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b1_\b0_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-virtual void UpdateVertexBuffer(float const *vertexData, int startVertex, int\n-numVerts)=0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-virtual PatchTable * GetPatchTable() const =0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\b~_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n-virtual ~MeshInterface()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b7_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n-MeshInterface()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b7_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be\n-virtual void Refine()=0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bB_\bi_\bn_\bd_\bi_\bn_\bg\n-PatchTable::VertexBufferBinding VertexBufferBinding\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b7_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bB_\bi_\bn_\bd_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-virtual VertexBufferBinding BindVertexBuffer()=0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bB_\bi_\bn_\bd_\bV_\ba_\br_\by_\bi_\bn_\bg_\bB_\bu_\bf_\bf_\be_\br\n-virtual VertexBufferBinding BindVaryingBuffer()=0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-PATCH_TABLE PatchTable\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b7_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bS_\by_\bn_\bc_\bh_\br_\bo_\bn_\bi_\bz_\be\n-virtual void Synchronize()=0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b1_\b8_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bG_\be_\bt_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n-EVALUATOR * GetEvaluator(BufferDescriptor const &srcDesc, BufferDescriptor\n-const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc,\n-DEVICE_CONTEXT *deviceContext)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b4_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bG_\be_\bt_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n-EVALUATOR * GetEvaluator(BufferDescriptor const &srcDesc, BufferDescriptor\n-const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc,\n-BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc,\n-BufferDescriptor const &dvvDesc, DEVICE_CONTEXT *deviceContext)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b5_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bG_\be_\bt_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n-EVALUATOR * GetEvaluator(BufferDescriptor const &srcDesc, BufferDescriptor\n-const &dstDesc, DEVICE_CONTEXT *deviceContext)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b2_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\b~_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT\n-~EvaluatorCacheT()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b1_\b8_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bs\n-std::vector< Entry > Evaluators\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b2_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bE_\bn_\bt_\br_\by\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b1_\b9_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bE_\bn_\bt_\br_\by_\b:_\b:_\bE_\bn_\bt_\br_\by\n-Entry(BufferDescriptor const &srcDescArg, BufferDescriptor const &dstDescArg,\n-BufferDescriptor const &duDescArg, BufferDescriptor const &dvDescArg,\n-BufferDescriptor const &duuDescArg, BufferDescriptor const &duvDescArg,\n-BufferDescriptor const &dvvDescArg, EVALUATOR *evalArg)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b0_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bE_\bn_\bt_\br_\by_\b:_\b:_\bd_\bv_\bv_\bD_\be_\bs_\bc\n-BufferDescriptor dvvDesc\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b2_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bE_\bn_\bt_\br_\by_\b:_\b:_\bd_\bu_\bv_\bD_\be_\bs_\bc\n-BufferDescriptor duvDesc\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b2_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bE_\bn_\bt_\br_\by_\b:_\b:_\bd_\bs_\bt_\bD_\be_\bs_\bc\n-BufferDescriptor dstDesc\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b2_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bE_\bn_\bt_\br_\by_\b:_\b:_\bd_\bu_\bD_\be_\bs_\bc\n-BufferDescriptor duDesc\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b2_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bE_\bn_\bt_\br_\by_\b:_\b:_\bs_\br_\bc_\bD_\be_\bs_\bc\n-BufferDescriptor srcDesc\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b2_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bE_\bn_\bt_\br_\by_\b:_\b:_\bd_\bu_\bu_\bD_\be_\bs_\bc\n-BufferDescriptor duuDesc\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b2_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bE_\bn_\bt_\br_\by_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n-EVALUATOR * evaluator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b2_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bE_\bn_\bt_\br_\by_\b:_\b:_\bE_\bn_\bt_\br_\by\n-Entry(BufferDescriptor const &srcDescArg, BufferDescriptor const &dstDescArg,\n-BufferDescriptor const &duDescArg, BufferDescriptor const &dvDescArg, EVALUATOR\n-*evalArg)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b1_\b9_\b7\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bE_\bn_\bt_\br_\by_\b:_\b:_\bd_\bv_\bD_\be_\bs_\bc\n-BufferDescriptor dvDesc\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b2_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b1_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bG_\be_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br\n-virtual Far::TopologyRefiner const * GetTopologyRefiner() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b7_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-virtual VertexBuffer * GetVertexBuffer()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b7_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bB_\bu_\bf_\bf_\be_\br\n-virtual void UpdateVaryingBuffer(float const *varyingData, int startVertex, int\n-numVerts)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b9_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bB_\bu_\bf_\bf_\be_\br\n-virtual VertexBuffer * GetVaryingBuffer()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b7_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be\n-virtual void Refine()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b0_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bD_\be_\bv_\bi_\bc_\be_\bC_\bo_\bn_\bt_\be_\bx_\bt\n-DEVICE_CONTEXT DeviceContext\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b2_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n-EVALUATOR Evaluator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b2_\b1\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bB_\bi_\bn_\bd_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-virtual VertexBufferBinding BindVertexBuffer()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b6_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-virtual int GetNumVertices() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b5_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bM_\be_\bs_\bh\n-Mesh(Far::TopologyRefiner *refiner, int numVertexElements, int\n-numVaryingElements, int level, MeshBitset bits=MeshBitset(), EvaluatorCache\n-*evaluatorCache=NULL, DeviceContext *deviceContext=NULL)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b2_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n-STENCIL_TABLE StencilTable\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b2_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-VERTEX_BUFFER VertexBuffer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b2_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be\n-EvaluatorCacheT< Evaluator > EvaluatorCache\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b2_\b5\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bB_\bi_\bn_\bd_\bV_\ba_\br_\by_\bi_\bn_\bg_\bB_\bu_\bf_\bf_\be_\br\n-virtual VertexBufferBinding BindVaryingBuffer()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b6_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\b~_\bM_\be_\bs_\bh\n-virtual ~Mesh()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b7_\b8\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bB_\bi_\bn_\bd_\bi_\bn_\bg\n-PatchTable::VertexBufferBinding VertexBufferBinding\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b2_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-virtual void UpdateVertexBuffer(float const *vertexData, int startVertex, int\n-numVerts)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b8_\b9\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bS_\by_\bn_\bc_\bh_\br_\bo_\bn_\bi_\bz_\be\n-virtual void Synchronize()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b4_\b6\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-virtual PatchTable * GetPatchTable() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b5_\b0\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bG_\be_\bt_\bF_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-virtual Far::PatchTable const * GetFarPatchTable() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b5_\b4\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n-PATCH_TABLE PatchTable\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b2_\b3\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bG_\be_\bt_\bM_\ba_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be\n-virtual int GetMaxValence() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b6_\b0\n+Returns how many vertices allocated in this vertex buffer.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\b~_\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+~CpuVertexBuffer()\n+Destructor.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bB_\bi_\bn_\bd_\bC_\bp_\bu_\bB_\bu_\bf_\bf_\be_\br\n+float * BindCpuBuffer()\n+Returns the address of CPU buffer.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+CpuVertexBuffer(int numElements, int numVertices)\n+Constructor.\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bm_\be_\bs_\bh_\b._\bh\n+ * _\bc_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00890.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00890.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/cpuVertexBuffer.h File Reference\n+OpenSubdiv: opensubdiv/osd/mesh.h File Reference\n \n \n \n \n \n \n \n@@ -89,42 +89,108 @@\n \n \n \n \n
    \n \n-
    cpuVertexBuffer.h File Reference
    \n+Namespaces |\n+Typedefs |\n+Enumerations |\n+Functions
    \n+
    mesh.h File Reference
    \n \n
    \n
    #include "../version.h"
    \n-#include <cstddef>
    \n+#include <bitset>
    \n+#include <cassert>
    \n+#include <cstring>
    \n+#include <vector>
    \n+#include "../far/topologyRefiner.h"
    \n+#include "../far/patchTableFactory.h"
    \n+#include "../far/stencilTable.h"
    \n+#include "../far/stencilTableFactory.h"
    \n+#include "../osd/bufferDescriptor.h"
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n+\n+\n+\n+\n+\n \n

    \n Classes

    class  CpuVertexBuffer
     Concrete vertex buffer class for CPU subdivision. More...
    class  MeshInterface< PATCH_TABLE >
     
    class  EvaluatorCacheT< EVALUATOR >
     
    struct  EvaluatorCacheT< EVALUATOR >::Entry
     
    class  Mesh< VERTEX_BUFFER, STENCIL_TABLE, EVALUATOR, PATCH_TABLE, DEVICE_CONTEXT >
     
    \n \n \n \n \n \n \n \n+

    \n Namespaces

    namespace  OpenSubdiv
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION
     
    namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
     
    \n+\n+\n+\n+

    \n+Typedefs

    typedef std::bitset< NUM_MESH_BITSMeshBitset
     
    \n+\n+\n+\n+

    \n+Enumerations

    enum  MeshBits {
    \n+  MeshAdaptive = 0\n+,
    \n+  MeshInterleaveVarying = 1\n+,
    \n+  MeshFVarData = 2\n+,
    \n+  MeshFVarAdaptive = 3\n+,
    \n+  MeshUseSmoothCornerPatch = 4\n+,
    \n+  MeshUseSingleCreasePatch = 5\n+,
    \n+  MeshUseInfSharpPatch = 6\n+,
    \n+  MeshEndCapBilinearBasis = 7\n+,
    \n+  MeshEndCapBSplineBasis = 8\n+,
    \n+  MeshEndCapGregoryBasis = 9\n+,
    \n+  MeshEndCapLegacyGregory = 10\n+,
    \n+  NUM_MESH_BITS = 11\n+
    \n+ }
     
    \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n+Functions

    template<typename STENCIL_TABLE , typename SRC_STENCIL_TABLE , typename DEVICE_CONTEXT >
    STENCIL_TABLE const * convertToCompatibleStencilTable (SRC_STENCIL_TABLE const *table, DEVICE_CONTEXT *context)
     
    template<>
    Far::StencilTable const * convertToCompatibleStencilTable< Far::StencilTable, Far::StencilTable, void > (Far::StencilTable const *table, void *)
     
    template<>
    Far::LimitStencilTable const * convertToCompatibleStencilTable< Far::LimitStencilTable, Far::LimitStencilTable, void > (Far::LimitStencilTable const *table, void *)
     
    template<>
    Far::StencilTable const * convertToCompatibleStencilTable< Far::StencilTable, Far::StencilTable, ID3D11DeviceContext > (Far::StencilTable const *table, ID3D11DeviceContext *)
     
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,24 +1,80 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-cpuVertexBuffer.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bE_\bn_\bu_\bm_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+mesh.h File Reference\n #include \"../version.h\"\n-#include \n+#include \n+#include \n+#include \n+#include \n+#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh\"\n+#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh\"\n+#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b._\bh\"\n+#include \"_\b._\b._\b/_\bf_\ba_\br_\b/_\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh\"\n+#include \"_\b._\b._\b/_\bo_\bs_\bd_\b/_\bb_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-\u00a0 Concrete vertex buffer class for CPU subdivision. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b<_\b _\bP_\bA_\bT_\bC_\bH_\b__\bT_\bA_\bB_\bL_\bE_\b _\b>\n+\u00a0\n+ class \u00a0 _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b<_\b _\bE_\bV_\bA_\bL_\bU_\bA_\bT_\bO_\bR_\b _\b>\n+\u00a0\n+struct \u00a0 _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b<_\b _\bE_\bV_\bA_\bL_\bU_\bA_\bT_\bO_\bR_\b _\b>_\b:_\b:_\bE_\bn_\bt_\br_\by\n+\u00a0\n+ class \u00a0 _\bM_\be_\bs_\bh_\b<_\b _\bV_\bE_\bR_\bT_\bE_\bX_\b__\bB_\bU_\bF_\bF_\bE_\bR_\b,_\b _\bS_\bT_\bE_\bN_\bC_\bI_\bL_\b__\bT_\bA_\bB_\bL_\bE_\b,_\b _\bE_\bV_\bA_\bL_\bU_\bA_\bT_\bO_\bR_\b,_\b _\bP_\bA_\bT_\bC_\bH_\b__\bT_\bA_\bB_\bL_\bE_\b,\n+ _\bD_\bE_\bV_\bI_\bC_\bE_\b__\bC_\bO_\bN_\bT_\bE_\bX_\bT_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN\n \u00a0\n namespace \u00a0 _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+typedef std::bitset< _\bN_\bU_\bM_\b__\bM_\bE_\bS_\bH_\b__\bB_\bI_\bT_\bS >\u00a0 _\bM_\be_\bs_\bh_\bB_\bi_\bt_\bs_\be_\bt\n+\u00a0\n+E\bEn\bnu\bum\bme\ber\bra\bat\bti\bio\bon\bns\bs\n+enum \u00a0 _\bM_\be_\bs_\bh_\bB_\bi_\bt_\bs {\n+ \u00a0\u00a0_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be = 0 ,\n+ \u00a0\u00a0_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bV_\ba_\br_\by_\bi_\bn_\bg = 1 ,\n+ \u00a0\u00a0_\bM_\be_\bs_\bh_\bF_\bV_\ba_\br_\bD_\ba_\bt_\ba = 2 ,\n+ \u00a0\u00a0_\bM_\be_\bs_\bh_\bF_\bV_\ba_\br_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be = 3 ,\n+ \u00a0\u00a0_\bM_\be_\bs_\bh_\bU_\bs_\be_\bS_\bm_\bo_\bo_\bt_\bh_\bC_\bo_\br_\bn_\be_\br_\bP_\ba_\bt_\bc_\bh = 4 ,\n+ \u00a0\u00a0_\bM_\be_\bs_\bh_\bU_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh = 5 ,\n+ \u00a0\u00a0_\bM_\be_\bs_\bh_\bU_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh = 6 ,\n+ \u00a0\u00a0_\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bB_\bi_\bl_\bi_\bn_\be_\ba_\br_\bB_\ba_\bs_\bi_\bs = 7 ,\n+ \u00a0\u00a0_\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bB_\ba_\bs_\bi_\bs = 8 ,\n+ \u00a0\u00a0_\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bG_\br_\be_\bg_\bo_\br_\by_\bB_\ba_\bs_\bi_\bs = 9 ,\n+ \u00a0\u00a0_\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by = 10 ,\n+ \u00a0\u00a0_\bN_\bU_\bM_\b__\bM_\bE_\bS_\bH_\b__\bB_\bI_\bT_\bS = 11\n+ }\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+ STENCIL_TABLE const *\u00a0 _\bc_\bo_\bn_\bv_\be_\br_\bt_\bT_\bo_\bC_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bl_\be_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n+ (SRC_STENCIL_TABLE const *table, DEVICE_CONTEXT\n+ *context)\n+\u00a0\n+ template<>\n+ _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *\u00a0 _\bc_\bo_\bn_\bv_\be_\br_\bt_\bT_\bo_\bC_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bl_\be_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b<_\b _\bF_\ba_\br_\b:_\b:\n+ _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bv_\bo_\bi_\bd_\b _\b> (_\bF_\ba_\br_\b:_\b:\n+ _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *table, void *)\n+\u00a0\n+ template<>\n+_\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *\u00a0 _\bc_\bo_\bn_\bv_\be_\br_\bt_\bT_\bo_\bC_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bl_\be_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b<_\b _\bF_\ba_\br_\b:_\b:\n+ _\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bv_\bo_\bi_\bd\n+ _\b> (_\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *table, void *)\n+\u00a0\n+ template<>\n+ _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *\u00a0 _\bc_\bo_\bn_\bv_\be_\br_\bt_\bT_\bo_\bC_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bl_\be_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b<_\b _\bF_\ba_\br_\b:_\b:\n+ _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,\n+ _\bI_\bD_\b3_\bD_\b1_\b1_\bD_\be_\bv_\bi_\bc_\be_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b _\b> (_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const\n+ *table, ID3D11DeviceContext *)\n+\u00a0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bc_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\n+ * _\bm_\be_\bs_\bh_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00890.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00890.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,25 @@\n var a00890 = [\n- [\"CpuVertexBuffer\", \"a01169.html\", \"a01169\"]\n+ [\"MeshInterface< PATCH_TABLE >\", \"a01261.html\", \"a01261\"],\n+ [\"EvaluatorCacheT< EVALUATOR >\", \"a01265.html\", \"a01265\"],\n+ [\"Entry\", \"a01269.html\", \"a01269\"],\n+ [\"Mesh< VERTEX_BUFFER, STENCIL_TABLE, EVALUATOR, PATCH_TABLE, DEVICE_CONTEXT >\", \"a01273.html\", \"a01273\"],\n+ [\"MeshBitset\", \"a00890.html#a85ba9df501aea9af1ec9da1558c255bc\", null],\n+ [\"MeshBits\", \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492\", [\n+ [\"MeshAdaptive\", \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492adef344bcbdd50a1a93136eb53183c718\", null],\n+ [\"MeshInterleaveVarying\", \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a9313c644b9b2a998bcb55cfcc4582b1a\", null],\n+ [\"MeshFVarData\", \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492ac10e41fef659f3b3a1b730319bdedb45\", null],\n+ [\"MeshFVarAdaptive\", \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a9b8a23ab039e120012bc7c622308d603\", null],\n+ [\"MeshUseSmoothCornerPatch\", \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492ab32b8ef595539e14041e2fb0e619e3f9\", null],\n+ [\"MeshUseSingleCreasePatch\", \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a9058d69e1089fc77f1974a76c34e2071\", null],\n+ [\"MeshUseInfSharpPatch\", \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a8fab1b3018f94b5b2432c7435e795925\", null],\n+ [\"MeshEndCapBilinearBasis\", \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a4124233e4f787f999c7975afceab34f3\", null],\n+ [\"MeshEndCapBSplineBasis\", \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492aa2f41b6ba0393698bb3af283283737f7\", null],\n+ [\"MeshEndCapGregoryBasis\", \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492aa2878e1a215530f5f6fb89f1e06f91ee\", null],\n+ [\"MeshEndCapLegacyGregory\", \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492aad7b3fb2be609abdbfafaf5b1c834158\", null],\n+ [\"NUM_MESH_BITS\", \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a5676712c77d29cfdd330e2802db1c464\", null]\n+ ]],\n+ [\"convertToCompatibleStencilTable\", \"a00890.html#a06ceddf21c024b341a5b946049cd701a\", null],\n+ [\"convertToCompatibleStencilTable< Far::LimitStencilTable, Far::LimitStencilTable, void >\", \"a00890.html#a4c2520cc1a8a5a03e3f53584629d7318\", null],\n+ [\"convertToCompatibleStencilTable< Far::StencilTable, Far::StencilTable, ID3D11DeviceContext >\", \"a00890.html#ab5753a2b0a0995c8e2259d2c4765f7df\", null],\n+ [\"convertToCompatibleStencilTable< Far::StencilTable, Far::StencilTable, void >\", \"a00890.html#a33f9830228f847fae1c30c9dffe02b5a\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00890_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00890_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-OpenSubdiv: opensubdiv/osd/cpuVertexBuffer.h Source File\n+OpenSubdiv: opensubdiv/osd/mesh.h Source File\n \n \n \n \n \n \n \n@@ -92,15 +92,15 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    cpuVertexBuffer.h
    \n+
    mesh.h
    \n
    \n
    \n Go to the documentation of this file.
    1//
    \n
    2// Copyright 2013 Pixar
    \n
    3//
    \n
    4// Licensed under the Apache License, Version 2.0 (the "Apache License")
    \n
    5// with the following modification; you may not use this file except in
    \n@@ -119,75 +119,885 @@\n
    18// Unless required by applicable law or agreed to in writing, software
    \n
    19// distributed under the Apache License with the above modification is
    \n
    20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    \n
    21// KIND, either express or implied. See the Apache License for the specific
    \n
    22// language governing permissions and limitations under the Apache License.
    \n
    23//
    \n
    24
    \n-
    25#ifndef OPENSUBDIV3_OSD_CPU_VERTEX_BUFFER_H
    \n-
    26#define OPENSUBDIV3_OSD_CPU_VERTEX_BUFFER_H
    \n+
    25#ifndef OPENSUBDIV3_OSD_MESH_H
    \n+
    26#define OPENSUBDIV3_OSD_MESH_H
    \n
    27
    \n
    28#include "../version.h"
    \n
    29
    \n-
    30#include <cstddef>
    \n-
    31
    \n-
    32namespace OpenSubdiv {
    \n-
    33namespace OPENSUBDIV_VERSION {
    \n+
    30#include <bitset>
    \n+
    31#include <cassert>
    \n+
    32#include <cstring>
    \n+
    33#include <vector>
    \n
    34
    \n-
    35namespace Osd {
    \n-
    36
    \n-
    \n-\n-
    43public:
    \n-
    45 static CpuVertexBuffer * Create(int numElements, int numVertices,
    \n-
    46 void *deviceContext = NULL);
    \n-
    47
    \n-\n-
    50
    \n-
    53 void UpdateData(const float *src, int startVertex, int numVertices,
    \n-
    54 void *deviceContext = NULL);
    \n-
    55
    \n-
    57 int GetNumElements() const;
    \n-
    58
    \n-
    60 int GetNumVertices() const;
    \n-
    61
    \n-
    63 float * BindCpuBuffer();
    \n-
    64
    \n-
    65protected:
    \n-
    67 CpuVertexBuffer(int numElements, int numVertices);
    \n-
    68
    \n-
    69private:
    \n-
    70 int _numElements;
    \n-
    71 int _numVertices;
    \n-
    72 float *_cpuBuffer;
    \n-
    73};
    \n+
    35#include "../far/topologyRefiner.h"
    \n+
    36#include "../far/patchTableFactory.h"
    \n+
    37#include "../far/stencilTable.h"
    \n+
    38#include "../far/stencilTableFactory.h"
    \n+
    39
    \n+
    40#include "../osd/bufferDescriptor.h"
    \n+
    41
    \n+
    42struct ID3D11DeviceContext;
    \n+
    43
    \n+
    44namespace OpenSubdiv {
    \n+
    45namespace OPENSUBDIV_VERSION {
    \n+
    46
    \n+
    47namespace Osd {
    \n+
    48
    \n+\n-
    74
    \n+
    63typedef std::bitset<NUM_MESH_BITS> MeshBitset;
    \n+
    64
    \n+
    65// ---------------------------------------------------------------------------
    \n+
    66
    \n+
    67template <class PATCH_TABLE>
    \n+
    \n+\n+
    69public:
    \n+
    70 typedef PATCH_TABLE PatchTable;
    \n+
    71 typedef typename PatchTable::VertexBufferBinding VertexBufferBinding;
    \n+
    72
    \n+
    73public:
    \n+\n
    75
    \n-
    76} // end namespace Osd
    \n+
    76 virtual ~MeshInterface() { }
    \n
    77
    \n-
    78} // end namespace OPENSUBDIV_VERSION
    \n-
    79using namespace OPENSUBDIV_VERSION;
    \n-
    80
    \n-
    81} // end namespace OpenSubdiv
    \n-
    82
    \n-
    83#endif // OPENSUBDIV3_OSD_CPU_VERTEX_BUFFER_H
    \n-\n-
    Concrete vertex buffer class for CPU subdivision.
    \n-
    int GetNumElements() const
    Returns how many elements defined in this vertex buffer.
    \n-
    static CpuVertexBuffer * Create(int numElements, int numVertices, void *deviceContext=NULL)
    Creator. Returns NULL if error.
    \n-
    void UpdateData(const float *src, int startVertex, int numVertices, void *deviceContext=NULL)
    \n-
    int GetNumVertices() const
    Returns how many vertices allocated in this vertex buffer.
    \n-\n-
    float * BindCpuBuffer()
    Returns the address of CPU buffer.
    \n-
    CpuVertexBuffer(int numElements, int numVertices)
    Constructor.
    \n+
    78 virtual int GetNumVertices() const = 0;
    \n+
    79
    \n+
    80 virtual int GetMaxValence() const = 0;
    \n+
    81
    \n+
    82 virtual void UpdateVertexBuffer(float const *vertexData,
    \n+
    83 int startVertex, int numVerts) = 0;
    \n+
    84
    \n+
    85 virtual void UpdateVaryingBuffer(float const *varyingData,
    \n+
    86 int startVertex, int numVerts) = 0;
    \n+
    87
    \n+
    88 virtual void Refine() = 0;
    \n+
    89
    \n+
    90 virtual void Synchronize() = 0;
    \n+
    91
    \n+
    92 virtual PatchTable * GetPatchTable() const = 0;
    \n+
    93
    \n+
    94 virtual Far::PatchTable const *GetFarPatchTable() const = 0;
    \n+
    95
    \n+\n+
    97
    \n+\n+
    99
    \n+
    100protected:
    \n+
    \n+
    101 static inline void refineMesh(Far::TopologyRefiner & refiner,
    \n+
    102 int level, bool adaptive,
    \n+
    103 bool singleCreasePatch) {
    \n+
    104 if (adaptive) {
    \n+\n+
    106 options.useSingleCreasePatch = singleCreasePatch;
    \n+
    107 refiner.RefineAdaptive(options);
    \n+
    108 } else {
    \n+
    109 // This dependency on FVar channels should not be necessary
    \n+
    110 bool fullTopologyInLastLevel = refiner.GetNumFVarChannels()>0;
    \n+
    111
    \n+\n+
    113 options.fullTopologyInLastLevel = fullTopologyInLastLevel;
    \n+
    114 refiner.RefineUniform(options);
    \n+
    115 }
    \n+
    116 }
    \n+
    \n+
    \n+
    117 static inline void refineMesh(Far::TopologyRefiner & refiner,
    \n+
    118 int level, MeshBitset bits) {
    \n+
    119 if (bits.test(MeshAdaptive)) {
    \n+\n+\n+
    122 options.useInfSharpPatch = bits.test(MeshUseInfSharpPatch);
    \n+
    123 options.considerFVarChannels = bits.test(MeshFVarAdaptive);
    \n+
    124 refiner.RefineAdaptive(options);
    \n+
    125 } else {
    \n+
    126 // This dependency on FVar channels should not be necessary
    \n+
    127 bool fullTopologyInLastLevel = refiner.GetNumFVarChannels()>0;
    \n+
    128
    \n+\n+
    130 options.fullTopologyInLastLevel = fullTopologyInLastLevel;
    \n+
    131 refiner.RefineUniform(options);
    \n+
    132 }
    \n+
    133 }
    \n+
    \n+
    134};
    \n+
    \n+
    135
    \n+
    136// ---------------------------------------------------------------------------
    \n+
    137
    \n+
    138template <typename STENCIL_TABLE, typename SRC_STENCIL_TABLE,
    \n+
    139 typename DEVICE_CONTEXT>
    \n+
    140STENCIL_TABLE const *
    \n+
    \n+\n+
    142 SRC_STENCIL_TABLE const *table, DEVICE_CONTEXT *context) {
    \n+
    143 if (! table) return NULL;
    \n+
    144 return STENCIL_TABLE::Create(table, context);
    \n+
    145}
    \n+
    \n+
    146
    \n+
    147template <>
    \n+
    \n+
    148inline Far::StencilTable const *
    \n+\n+
    150 Far::StencilTable const *table, void * /*context*/) {
    \n+
    151 // no need for conversion
    \n+
    152 // XXX: We don't want to even copy.
    \n+
    153 if (! table) return NULL;
    \n+
    154 return new Far::StencilTable(*table);
    \n+
    155}
    \n+
    \n+
    156
    \n+
    157template <>
    \n+
    \n+\n+\n+
    160 Far::LimitStencilTable const *table, void * /*context*/) {
    \n+
    161 // no need for conversion
    \n+
    162 // XXX: We don't want to even copy.
    \n+
    163 if (! table) return NULL;
    \n+
    164 return new Far::LimitStencilTable(*table);
    \n+
    165}
    \n+
    \n+
    166
    \n+
    167template <>
    \n+
    \n+
    168inline Far::StencilTable const *
    \n+\n+
    170 Far::StencilTable const *table, ID3D11DeviceContext * /*context*/) {
    \n+
    171 // no need for conversion
    \n+
    172 // XXX: We don't want to even copy.
    \n+
    173 if (! table) return NULL;
    \n+
    174 return new Far::StencilTable(*table);
    \n+
    175}
    \n+
    \n+
    176
    \n+
    177// ---------------------------------------------------------------------------
    \n+
    178
    \n+
    179// Osd evaluator cache: for the GPU backends require compiled instance
    \n+
    180// (GLXFB, GLCompute, CL)
    \n+
    181//
    \n+
    182// note: this is just an example usage and client applications are supposed
    \n+
    183// to implement their own structure for Evaluator instance.
    \n+
    184//
    \n+
    185template <typename EVALUATOR>
    \n+
    \n+\n+
    187public:
    \n+
    \n+\n+
    189 for(typename Evaluators::iterator it = _evaluators.begin();
    \n+
    190 it != _evaluators.end(); ++it) {
    \n+
    191 delete it->evaluator;
    \n+
    192 }
    \n+
    193 }
    \n+
    \n+
    194
    \n+
    195 // XXX: FIXME, linear search
    \n+
    \n+
    196 struct Entry {
    \n+
    \n+
    197 Entry(BufferDescriptor const &srcDescArg,
    \n+
    198 BufferDescriptor const &dstDescArg,
    \n+
    199 BufferDescriptor const &duDescArg,
    \n+
    200 BufferDescriptor const &dvDescArg,
    \n+
    201 EVALUATOR *evalArg) : srcDesc(srcDescArg), dstDesc(dstDescArg),
    \n+
    202 duDesc(duDescArg), dvDesc(dvDescArg),
    \n+\n+\n+\n+
    206 evaluator(evalArg) {}
    \n+
    \n+
    \n+
    207 Entry(BufferDescriptor const &srcDescArg,
    \n+
    208 BufferDescriptor const &dstDescArg,
    \n+
    209 BufferDescriptor const &duDescArg,
    \n+
    210 BufferDescriptor const &dvDescArg,
    \n+
    211 BufferDescriptor const &duuDescArg,
    \n+
    212 BufferDescriptor const &duvDescArg,
    \n+
    213 BufferDescriptor const &dvvDescArg,
    \n+
    214 EVALUATOR *evalArg) : srcDesc(srcDescArg), dstDesc(dstDescArg),
    \n+
    215 duDesc(duDescArg), dvDesc(dvDescArg),
    \n+
    216 duuDesc(duuDescArg),
    \n+
    217 duvDesc(duvDescArg),
    \n+
    218 dvvDesc(dvvDescArg),
    \n+
    219 evaluator(evalArg) {}
    \n+
    \n+\n+\n+\n+
    223 EVALUATOR *evaluator;
    \n+
    224 };
    \n+
    \n+
    225 typedef std::vector<Entry> Evaluators;
    \n+
    226
    \n+
    227 template <typename DEVICE_CONTEXT>
    \n+
    \n+
    228 EVALUATOR *GetEvaluator(BufferDescriptor const &srcDesc,
    \n+
    229 BufferDescriptor const &dstDesc,
    \n+
    230 DEVICE_CONTEXT *deviceContext) {
    \n+
    231 return GetEvaluator(srcDesc, dstDesc,
    \n+\n+\n+\n+\n+\n+
    237 deviceContext);
    \n+
    238 }
    \n+
    \n+
    239
    \n+
    240 template <typename DEVICE_CONTEXT>
    \n+
    \n+
    241 EVALUATOR *GetEvaluator(BufferDescriptor const &srcDesc,
    \n+
    242 BufferDescriptor const &dstDesc,
    \n+
    243 BufferDescriptor const &duDesc,
    \n+
    244 BufferDescriptor const &dvDesc,
    \n+
    245 DEVICE_CONTEXT *deviceContext) {
    \n+
    246 return GetEvaluator(srcDesc, dstDesc,
    \n+
    247 duDesc, dvDesc,
    \n+\n+\n+\n+
    251 deviceContext);
    \n+
    252 }
    \n+
    \n+
    253
    \n+
    254 template <typename DEVICE_CONTEXT>
    \n+
    \n+
    255 EVALUATOR *GetEvaluator(BufferDescriptor const &srcDesc,
    \n+
    256 BufferDescriptor const &dstDesc,
    \n+
    257 BufferDescriptor const &duDesc,
    \n+
    258 BufferDescriptor const &dvDesc,
    \n+
    259 BufferDescriptor const &duuDesc,
    \n+
    260 BufferDescriptor const &duvDesc,
    \n+
    261 BufferDescriptor const &dvvDesc,
    \n+
    262 DEVICE_CONTEXT *deviceContext) {
    \n+
    263
    \n+
    264 for(typename Evaluators::iterator it = _evaluators.begin();
    \n+
    265 it != _evaluators.end(); ++it) {
    \n+
    266 if (isEqual(srcDesc, it->srcDesc) &&
    \n+
    267 isEqual(dstDesc, it->dstDesc) &&
    \n+
    268 isEqual(duDesc, it->duDesc) &&
    \n+
    269 isEqual(dvDesc, it->dvDesc) &&
    \n+
    270 isEqual(duuDesc, it->duuDesc) &&
    \n+
    271 isEqual(duvDesc, it->duvDesc) &&
    \n+
    272 isEqual(dvvDesc, it->dvvDesc)) {
    \n+
    273 return it->evaluator;
    \n+
    274 }
    \n+
    275 }
    \n+
    276 EVALUATOR *e = EVALUATOR::Create(srcDesc, dstDesc,
    \n+
    277 duDesc, dvDesc,
    \n+
    278 duuDesc, duvDesc, dvvDesc,
    \n+
    279 deviceContext);
    \n+
    280 _evaluators.push_back(Entry(srcDesc, dstDesc,
    \n+
    281 duDesc, dvDesc,
    \n+
    282 duuDesc, duvDesc, dvvDesc, e));
    \n+
    283 return e;
    \n+
    284 }
    \n+
    \n+
    285
    \n+
    286private:
    \n+
    287 static bool isEqual(BufferDescriptor const &a,
    \n+
    288 BufferDescriptor const &b) {
    \n+
    289 int offsetA = a.stride ? (a.offset % a.stride) : 0;
    \n+
    290 int offsetB = b.stride ? (b.offset % b.stride) : 0;
    \n+
    291
    \n+
    292 // Note: XFB kernel needs to be configured with the local offset
    \n+
    293 // of the dstDesc to skip preceding primvars.
    \n+
    294 return (offsetA == offsetB &&
    \n+
    295 a.length == b.length &&
    \n+
    296 a.stride == b.stride);
    \n+
    297 }
    \n+
    298
    \n+
    299 Evaluators _evaluators;
    \n+
    300};
    \n+
    \n+
    301
    \n+
    303
    \n+
    304// template helpers to see if the evaluator is instantiatable or not.
    \n+
    305template <typename EVALUATOR>
    \n+
    306struct instantiatable
    \n+
    307{
    \n+
    308 typedef char yes[1];
    \n+
    309 typedef char no[2];
    \n+
    310 template <typename C> static yes &chk(typename C::Instantiatable *t=0);
    \n+
    311 template <typename C> static no &chk(...);
    \n+
    312 static bool const value = sizeof(chk<EVALUATOR>(0)) == sizeof(yes);
    \n+
    313};
    \n+
    314template <bool C, typename T=void>
    \n+
    315struct enable_if { typedef T type; };
    \n+
    316template <typename T>
    \n+
    317struct enable_if<false, T> { };
    \n+
    318
    \n+
    320
    \n+
    321// extract a kernel from cache if available
    \n+
    322template <typename EVALUATOR, typename DEVICE_CONTEXT>
    \n+
    323static EVALUATOR *GetEvaluator(
    \n+
    324 EvaluatorCacheT<EVALUATOR> *cache,
    \n+
    325 BufferDescriptor const &srcDesc,
    \n+
    326 BufferDescriptor const &dstDesc,
    \n+
    327 BufferDescriptor const &duDesc,
    \n+
    328 BufferDescriptor const &dvDesc,
    \n+
    329 BufferDescriptor const &duuDesc,
    \n+
    330 BufferDescriptor const &duvDesc,
    \n+
    331 BufferDescriptor const &dvvDesc,
    \n+
    332 DEVICE_CONTEXT deviceContext,
    \n+
    333 typename enable_if<instantiatable<EVALUATOR>::value, void>::type*t=0) {
    \n+
    334 (void)t;
    \n+
    335 if (cache == NULL) return NULL;
    \n+
    336 return cache->GetEvaluator(srcDesc, dstDesc,
    \n+
    337 duDesc, dvDesc, duuDesc, duvDesc, dvvDesc,
    \n+
    338 deviceContext);
    \n+
    339}
    \n+
    340
    \n+
    341template <typename EVALUATOR, typename DEVICE_CONTEXT>
    \n+
    342static EVALUATOR *GetEvaluator(
    \n+
    343 EvaluatorCacheT<EVALUATOR> *cache,
    \n+
    344 BufferDescriptor const &srcDesc,
    \n+
    345 BufferDescriptor const &dstDesc,
    \n+
    346 BufferDescriptor const &duDesc,
    \n+
    347 BufferDescriptor const &dvDesc,
    \n+
    348 DEVICE_CONTEXT deviceContext,
    \n+
    349 typename enable_if<instantiatable<EVALUATOR>::value, void>::type*t=0) {
    \n+
    350 (void)t;
    \n+
    351 if (cache == NULL) return NULL;
    \n+
    352 return cache->GetEvaluator(srcDesc, dstDesc, duDesc, dvDesc, deviceContext);
    \n+
    353}
    \n+
    354
    \n+
    355template <typename EVALUATOR, typename DEVICE_CONTEXT>
    \n+
    356static EVALUATOR *GetEvaluator(
    \n+
    357 EvaluatorCacheT<EVALUATOR> *cache,
    \n+
    358 BufferDescriptor const &srcDesc,
    \n+
    359 BufferDescriptor const &dstDesc,
    \n+
    360 DEVICE_CONTEXT deviceContext,
    \n+
    361 typename enable_if<instantiatable<EVALUATOR>::value, void>::type*t=0) {
    \n+
    362 (void)t;
    \n+
    363 if (cache == NULL) return NULL;
    \n+
    364 return cache->GetEvaluator(srcDesc, dstDesc,
    \n+
    365 BufferDescriptor(),
    \n+
    366 BufferDescriptor(),
    \n+
    367 deviceContext);
    \n+
    368}
    \n+
    369
    \n+
    370// fallback
    \n+
    371template <typename EVALUATOR, typename DEVICE_CONTEXT>
    \n+
    372static EVALUATOR *GetEvaluator(
    \n+
    373 EvaluatorCacheT<EVALUATOR> *,
    \n+
    374 BufferDescriptor const &,
    \n+
    375 BufferDescriptor const &,
    \n+
    376 BufferDescriptor const &,
    \n+
    377 BufferDescriptor const &,
    \n+
    378 BufferDescriptor const &,
    \n+
    379 BufferDescriptor const &,
    \n+
    380 BufferDescriptor const &,
    \n+
    381 DEVICE_CONTEXT,
    \n+
    382 typename enable_if<!instantiatable<EVALUATOR>::value, void>::type*t=0) {
    \n+
    383 (void)t;
    \n+
    384 return NULL;
    \n+
    385}
    \n+
    386
    \n+
    387template <typename EVALUATOR, typename DEVICE_CONTEXT>
    \n+
    388static EVALUATOR *GetEvaluator(
    \n+
    389 EvaluatorCacheT<EVALUATOR> *,
    \n+
    390 BufferDescriptor const &,
    \n+
    391 BufferDescriptor const &,
    \n+
    392 BufferDescriptor const &,
    \n+
    393 BufferDescriptor const &,
    \n+
    394 DEVICE_CONTEXT,
    \n+
    395 typename enable_if<!instantiatable<EVALUATOR>::value, void>::type*t=0) {
    \n+
    396 (void)t;
    \n+
    397 return NULL;
    \n+
    398}
    \n+
    399
    \n+
    400template <typename EVALUATOR, typename DEVICE_CONTEXT>
    \n+
    401static EVALUATOR *GetEvaluator(
    \n+
    402 EvaluatorCacheT<EVALUATOR> *,
    \n+
    403 BufferDescriptor const &,
    \n+
    404 BufferDescriptor const &,
    \n+
    405 DEVICE_CONTEXT,
    \n+
    406 typename enable_if<!instantiatable<EVALUATOR>::value, void>::type*t=0) {
    \n+
    407 (void)t;
    \n+
    408 return NULL;
    \n+
    409}
    \n+
    410
    \n+
    411// ---------------------------------------------------------------------------
    \n+
    412
    \n+
    413template <typename VERTEX_BUFFER,
    \n+
    414 typename STENCIL_TABLE,
    \n+
    415 typename EVALUATOR,
    \n+
    416 typename PATCH_TABLE,
    \n+
    417 typename DEVICE_CONTEXT = void>
    \n+
    \n+
    418class Mesh : public MeshInterface<PATCH_TABLE> {
    \n+
    419public:
    \n+
    420 typedef VERTEX_BUFFER VertexBuffer;
    \n+
    421 typedef EVALUATOR Evaluator;
    \n+
    422 typedef STENCIL_TABLE StencilTable;
    \n+
    423 typedef PATCH_TABLE PatchTable;
    \n+
    424 typedef DEVICE_CONTEXT DeviceContext;
    \n+\n+
    426 typedef typename PatchTable::VertexBufferBinding VertexBufferBinding;
    \n+
    427
    \n+
    \n+\n+
    429 int numVertexElements,
    \n+
    430 int numVaryingElements,
    \n+
    431 int level,
    \n+
    432 MeshBitset bits = MeshBitset(),
    \n+
    433 EvaluatorCache * evaluatorCache = NULL,
    \n+
    434 DeviceContext * deviceContext = NULL) :
    \n+
    435
    \n+
    436 _refiner(refiner),
    \n+
    437 _farPatchTable(NULL),
    \n+
    438 _numVertices(0),
    \n+
    439 _maxValence(0),
    \n+
    440 _vertexBuffer(NULL),
    \n+
    441 _varyingBuffer(NULL),
    \n+
    442 _vertexStencilTable(NULL),
    \n+
    443 _varyingStencilTable(NULL),
    \n+
    444 _evaluatorCache(evaluatorCache),
    \n+
    445 _patchTable(NULL),
    \n+
    446 _deviceContext(deviceContext) {
    \n+
    447
    \n+
    448 assert(_refiner);
    \n+
    449
    \n+\n+
    451 *_refiner, level, bits);
    \n+
    452
    \n+
    453 int vertexBufferStride = numVertexElements +
    \n+
    454 (bits.test(MeshInterleaveVarying) ? numVaryingElements : 0);
    \n+
    455 int varyingBufferStride =
    \n+
    456 (bits.test(MeshInterleaveVarying) ? 0 : numVaryingElements);
    \n+
    457
    \n+
    458 initializeContext(numVertexElements,
    \n+
    459 numVaryingElements,
    \n+
    460 level, bits);
    \n+
    461
    \n+
    462 initializeVertexBuffers(_numVertices,
    \n+
    463 vertexBufferStride,
    \n+
    464 varyingBufferStride);
    \n+
    465
    \n+
    466 // configure vertex buffer descriptor
    \n+
    467 _vertexDesc =
    \n+
    468 BufferDescriptor(0, numVertexElements, vertexBufferStride);
    \n+
    469 if (bits.test(MeshInterleaveVarying)) {
    \n+
    470 _varyingDesc = BufferDescriptor(
    \n+
    471 numVertexElements, numVaryingElements, vertexBufferStride);
    \n+
    472 } else {
    \n+
    473 _varyingDesc = BufferDescriptor(
    \n+
    474 0, numVaryingElements, varyingBufferStride);
    \n+
    475 }
    \n+
    476 }
    \n+
    \n+
    477
    \n+
    \n+
    478 virtual ~Mesh() {
    \n+
    479 delete _refiner;
    \n+
    480 delete _farPatchTable;
    \n+
    481 delete _vertexBuffer;
    \n+
    482 delete _varyingBuffer;
    \n+
    483 delete _vertexStencilTable;
    \n+
    484 delete _varyingStencilTable;
    \n+
    485 delete _patchTable;
    \n+
    486 // deviceContext and evaluatorCache are not owned by this class.
    \n+
    487 }
    \n+
    \n+
    488
    \n+
    \n+
    489 virtual void UpdateVertexBuffer(float const *vertexData,
    \n+
    490 int startVertex, int numVerts) {
    \n+
    491 _vertexBuffer->UpdateData(vertexData, startVertex, numVerts,
    \n+
    492 _deviceContext);
    \n+
    493 }
    \n+
    \n+
    494
    \n+
    \n+
    495 virtual void UpdateVaryingBuffer(float const *varyingData,
    \n+
    496 int startVertex, int numVerts) {
    \n+
    497 _varyingBuffer->UpdateData(varyingData, startVertex, numVerts,
    \n+
    498 _deviceContext);
    \n+
    499 }
    \n+
    \n+
    500
    \n+
    \n+
    501 virtual void Refine() {
    \n+
    502
    \n+
    503 int numControlVertices = _refiner->GetLevel(0).GetNumVertices();
    \n+
    504
    \n+
    505 BufferDescriptor srcDesc = _vertexDesc;
    \n+
    506 BufferDescriptor dstDesc(srcDesc);
    \n+
    507 dstDesc.offset += numControlVertices * dstDesc.stride;
    \n+
    508
    \n+
    509 // note that the _evaluatorCache can be NULL and thus
    \n+
    510 // the evaluatorInstance can be NULL
    \n+
    511 // (for uninstantiatable kernels CPU,TBB etc)
    \n+
    512 Evaluator const *instance = GetEvaluator<Evaluator>(
    \n+
    513 _evaluatorCache, srcDesc, dstDesc,
    \n+
    514 _deviceContext);
    \n+
    515
    \n+
    516 Evaluator::EvalStencils(_vertexBuffer, srcDesc,
    \n+
    517 _vertexBuffer, dstDesc,
    \n+
    518 _vertexStencilTable,
    \n+
    519 instance, _deviceContext);
    \n+
    520
    \n+
    521 if (_varyingDesc.length > 0) {
    \n+
    522 BufferDescriptor vSrcDesc = _varyingDesc;
    \n+
    523 BufferDescriptor vDstDesc(vSrcDesc);
    \n+
    524 vDstDesc.offset += numControlVertices * vDstDesc.stride;
    \n+
    525
    \n+
    526 instance = GetEvaluator<Evaluator>(
    \n+
    527 _evaluatorCache, vSrcDesc, vDstDesc,
    \n+
    528 _deviceContext);
    \n+
    529
    \n+
    530 if (_varyingBuffer) {
    \n+
    531 // non-interleaved
    \n+
    532 Evaluator::EvalStencils(_varyingBuffer, vSrcDesc,
    \n+
    533 _varyingBuffer, vDstDesc,
    \n+
    534 _varyingStencilTable,
    \n+
    535 instance, _deviceContext);
    \n+
    536 } else {
    \n+
    537 // interleaved
    \n+
    538 Evaluator::EvalStencils(_vertexBuffer, vSrcDesc,
    \n+
    539 _vertexBuffer, vDstDesc,
    \n+
    540 _varyingStencilTable,
    \n+
    541 instance, _deviceContext);
    \n+
    542 }
    \n+
    543 }
    \n+
    544 }
    \n+
    \n+
    545
    \n+
    \n+
    546 virtual void Synchronize() {
    \n+
    547 Evaluator::Synchronize(_deviceContext);
    \n+
    548 }
    \n+
    \n+
    549
    \n+
    \n+
    550 virtual PatchTable * GetPatchTable() const {
    \n+
    551 return _patchTable;
    \n+
    552 }
    \n+
    \n+
    553
    \n+
    \n+
    554 virtual Far::PatchTable const *GetFarPatchTable() const {
    \n+
    555 return _farPatchTable;
    \n+
    556 }
    \n+
    \n+
    557
    \n+
    558 virtual int GetNumVertices() const { return _numVertices; }
    \n+
    559
    \n+
    560 virtual int GetMaxValence() const { return _maxValence; }
    \n+
    561
    \n+
    \n+\n+
    563 return _vertexBuffer->BindVBO(_deviceContext);
    \n+
    564 }
    \n+
    \n+
    565
    \n+
    \n+\n+
    567 return _varyingBuffer->BindVBO(_deviceContext);
    \n+
    568 }
    \n+
    \n+
    569
    \n+
    \n+\n+
    571 return _vertexBuffer;
    \n+
    572 }
    \n+
    \n+
    573
    \n+
    \n+\n+
    575 return _varyingBuffer;
    \n+
    576 }
    \n+
    \n+
    577
    \n+
    \n+
    578 virtual Far::TopologyRefiner const * GetTopologyRefiner() const {
    \n+
    579 return _refiner;
    \n+
    580 }
    \n+
    \n+
    581
    \n+
    582private:
    \n+
    583 void initializeContext(int numVertexElements,
    \n+
    584 int numVaryingElements,
    \n+
    585 int level, MeshBitset bits) {
    \n+
    586 assert(_refiner);
    \n+
    587
    \n+
    588 Far::StencilTableFactory::Options options;
    \n+
    589 options.generateOffsets = true;
    \n+
    590 options.generateIntermediateLevels =
    \n+
    591 _refiner->IsUniform() ? false : true;
    \n+
    592
    \n+
    593 Far::StencilTable const * vertexStencils = NULL;
    \n+
    594 Far::StencilTable const * varyingStencils = NULL;
    \n+
    595
    \n+
    596 if (numVertexElements>0) {
    \n+
    597
    \n+
    598 vertexStencils = Far::StencilTableFactory::Create(*_refiner,
    \n+
    599 options);
    \n+
    600 }
    \n+
    601
    \n+
    602 if (numVaryingElements>0) {
    \n+
    603
    \n+
    604 options.interpolationMode =
    \n+\n+
    606
    \n+
    607 varyingStencils = Far::StencilTableFactory::Create(*_refiner,
    \n+
    608 options);
    \n+
    609 }
    \n+
    610
    \n+
    611 Far::PatchTableFactory::Options poptions(level);
    \n+
    612 poptions.generateFVarTables = bits.test(MeshFVarData);
    \n+
    613 poptions.generateFVarLegacyLinearPatches = !bits.test(MeshFVarAdaptive);
    \n+
    614 poptions.generateLegacySharpCornerPatches = !bits.test(MeshUseSmoothCornerPatch);
    \n+
    615 poptions.useSingleCreasePatch = bits.test(MeshUseSingleCreasePatch);
    \n+
    616 poptions.useInfSharpPatch = bits.test(MeshUseInfSharpPatch);
    \n+
    617
    \n+
    618 // points on bilinear and gregory basis endcap boundaries can be
    \n+
    619 // shared among adjacent patches to save some stencils.
    \n+
    620 if (bits.test(MeshEndCapBilinearBasis)) {
    \n+
    621 poptions.SetEndCapType(
    \n+\n+
    623 poptions.shareEndCapPatchPoints = true;
    \n+
    624 } else if (bits.test(MeshEndCapBSplineBasis)) {
    \n+
    625 poptions.SetEndCapType(
    \n+\n+
    627 } else if (bits.test(MeshEndCapGregoryBasis)) {
    \n+
    628 poptions.SetEndCapType(
    \n+\n+
    630 poptions.shareEndCapPatchPoints = true;
    \n+
    631 } else if (bits.test(MeshEndCapLegacyGregory)) {
    \n+
    632 poptions.SetEndCapType(
    \n+\n+
    634 }
    \n+
    635
    \n+
    636 _farPatchTable = Far::PatchTableFactory::Create(*_refiner, poptions);
    \n+
    637
    \n+
    638 // if there's endcap stencils, merge it into regular stencils.
    \n+
    639 if (_farPatchTable->GetLocalPointStencilTable()) {
    \n+
    640 // append stencils
    \n+
    641 if (Far::StencilTable const *vertexStencilsWithLocalPoints =
    \n+\n+
    643 *_refiner,
    \n+
    644 vertexStencils,
    \n+
    645 _farPatchTable->GetLocalPointStencilTable())) {
    \n+
    646 delete vertexStencils;
    \n+
    647 vertexStencils = vertexStencilsWithLocalPoints;
    \n+
    648 }
    \n+
    649 if (varyingStencils) {
    \n+
    650 if (Far::StencilTable const *varyingStencilsWithLocalPoints =
    \n+\n+
    652 *_refiner,
    \n+
    653 varyingStencils,
    \n+
    654 _farPatchTable->GetLocalPointVaryingStencilTable())) {
    \n+
    655 delete varyingStencils;
    \n+
    656 varyingStencils = varyingStencilsWithLocalPoints;
    \n+
    657 }
    \n+
    658 }
    \n+
    659 }
    \n+
    660
    \n+
    661 _maxValence = _farPatchTable->GetMaxValence();
    \n+
    662 _patchTable = PatchTable::Create(_farPatchTable, _deviceContext);
    \n+
    663
    \n+
    664 // numvertices = coarse verts + refined verts + gregory basis verts
    \n+
    665 _numVertices = vertexStencils->GetNumControlVertices()
    \n+
    666 + vertexStencils->GetNumStencils();
    \n+
    667
    \n+
    668 // convert to device stenciltable if necessary.
    \n+
    669 _vertexStencilTable =
    \n+
    670 convertToCompatibleStencilTable<StencilTable>(
    \n+
    671 vertexStencils, _deviceContext);
    \n+
    672 _varyingStencilTable =
    \n+
    673 convertToCompatibleStencilTable<StencilTable>(
    \n+
    674 varyingStencils, _deviceContext);
    \n+
    675
    \n+
    676 // FIXME: we do extra copyings for Far::Stencils.
    \n+
    677 delete vertexStencils;
    \n+
    678 delete varyingStencils;
    \n+
    679 }
    \n+
    680
    \n+
    681 void initializeVertexBuffers(int numVertices,
    \n+
    682 int numVertexElements,
    \n+
    683 int numVaryingElements) {
    \n+
    684
    \n+
    685 if (numVertexElements) {
    \n+
    686 _vertexBuffer = VertexBuffer::Create(numVertexElements,
    \n+
    687 numVertices, _deviceContext);
    \n+
    688 }
    \n+
    689
    \n+
    690 if (numVaryingElements) {
    \n+
    691 _varyingBuffer = VertexBuffer::Create(numVaryingElements,
    \n+
    692 numVertices, _deviceContext);
    \n+
    693 }
    \n+
    694 }
    \n+
    695
    \n+
    696 Far::TopologyRefiner * _refiner;
    \n+
    697 Far::PatchTable * _farPatchTable;
    \n+
    698
    \n+
    699 int _numVertices;
    \n+
    700 int _maxValence;
    \n+
    701
    \n+
    702 VertexBuffer * _vertexBuffer;
    \n+
    703 VertexBuffer * _varyingBuffer;
    \n+
    704
    \n+
    705 BufferDescriptor _vertexDesc;
    \n+
    706 BufferDescriptor _varyingDesc;
    \n+
    707
    \n+
    708 StencilTable const * _vertexStencilTable;
    \n+
    709 StencilTable const * _varyingStencilTable;
    \n+
    710 EvaluatorCache * _evaluatorCache;
    \n+
    711
    \n+
    712 PatchTable *_patchTable;
    \n+
    713 DeviceContext *_deviceContext;
    \n+
    714};
    \n+
    \n+
    715
    \n+
    716} // end namespace Osd
    \n+
    717
    \n+
    718} // end namespace OPENSUBDIV_VERSION
    \n+
    719using namespace OPENSUBDIV_VERSION;
    \n+
    720
    \n+
    721} // end namespace OpenSubdiv
    \n+
    722
    \n+
    723#endif // OPENSUBDIV3_OSD_MESH_H
    \n+\n+
    STENCIL_TABLE const * convertToCompatibleStencilTable(SRC_STENCIL_TABLE const *table, DEVICE_CONTEXT *context)
    Definition mesh.h:141
    \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+
    Far::StencilTable const * convertToCompatibleStencilTable< Far::StencilTable, Far::StencilTable, void >(Far::StencilTable const *table, void *)
    Definition mesh.h:149
    \n+
    Far::LimitStencilTable const * convertToCompatibleStencilTable< Far::LimitStencilTable, Far::LimitStencilTable, void >(Far::LimitStencilTable const *table, void *)
    Definition mesh.h:159
    \n+
    std::bitset< NUM_MESH_BITS > MeshBitset
    Definition mesh.h:63
    \n+
    Far::StencilTable const * convertToCompatibleStencilTable< Far::StencilTable, Far::StencilTable, ID3D11DeviceContext >(Far::StencilTable const *table, ID3D11DeviceContext *)
    Definition mesh.h:169
    \n+
    Container for arrays of parametric patches.
    Definition patchTable.h:55
    \n+
    int GetMaxValence() const
    Returns max vertex valence.
    Definition patchTable.h:92
    \n+
    StencilTable const * GetLocalPointStencilTable() const
    Returns the stencil table to compute local point vertex values.
    Definition patchTable.h:730
    \n+
    StencilTable const * GetLocalPointVaryingStencilTable() const
    Returns the stencil table to compute local point varying values.
    Definition patchTable.h:735
    \n+
    static PatchTable * Create(TopologyRefiner const &refiner, Options options=Options(), ConstIndexArray selectedFaces=ConstIndexArray())
    Instantiates a PatchTable from a client-provided TopologyRefiner.
    \n+\n+
    @ ENDCAP_LEGACY_GREGORY
    legacy option for 2.x style Gregory patches (Catmark only)
    \n+
    @ ENDCAP_GREGORY_BASIS
    use Gregory patches (highest quality, recommended default)
    \n+
    @ ENDCAP_BILINEAR_BASIS
    use linear patches (simple quads or tris)
    \n+
    @ ENDCAP_BSPLINE_BASIS
    use BSpline-like patches (same patch type as regular)
    \n+\n+
    int GetNumControlVertices() const
    Returns the number of control vertices indexed in the table.
    \n+
    int GetNumStencils() const
    Returns the number of stencils in the table.
    \n+
    Stencil table class wrapping the template for compatibility.
    \n+
    Limit stencil table class wrapping the template for compatibility.
    \n+
    static StencilTable const * Create(TopologyRefiner const &refiner, Options options=Options())
    \n+
    static StencilTable const * AppendLocalPointStencilTable(TopologyRefiner const &refiner, StencilTable const *baseStencilTable, StencilTable const *localPointStencilTable, bool factorize=true)
    \n+
    int GetNumVertices() const
    Return the number of vertices in this level.
    \n+
    Stores topology data for a specified set of refinement options.
    \n+
    bool IsUniform() const
    Returns true if uniform refinement has been applied.
    \n+
    int GetNumFVarChannels() const
    Returns the number of face-varying channels in the tables.
    \n+
    void RefineUniform(UniformOptions options)
    Refine the topology uniformly.
    \n+
    TopologyLevel const & GetLevel(int level) const
    Returns a handle to access data specific to a particular level.
    \n+
    void RefineAdaptive(AdaptiveOptions options, ConstIndexArray selectedFaces=ConstIndexArray())
    Feature Adaptive topology refinement.
    \n+\n+\n+\n+\n+\n+\n+
    BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
    \n+\n+\n+\n+\n+
    virtual Far::PatchTable const * GetFarPatchTable() const =0
    \n+
    static void refineMesh(Far::TopologyRefiner &refiner, int level, MeshBitset bits)
    Definition mesh.h:117
    \n+\n+\n+
    virtual void UpdateVaryingBuffer(float const *varyingData, int startVertex, int numVerts)=0
    \n+
    static void refineMesh(Far::TopologyRefiner &refiner, int level, bool adaptive, bool singleCreasePatch)
    Definition mesh.h:101
    \n+
    virtual void UpdateVertexBuffer(float const *vertexData, int startVertex, int numVerts)=0
    \n+
    virtual PatchTable * GetPatchTable() const =0
    \n+\n+\n+\n+
    PatchTable::VertexBufferBinding VertexBufferBinding
    Definition mesh.h:71
    \n+
    virtual VertexBufferBinding BindVertexBuffer()=0
    \n+
    virtual VertexBufferBinding BindVaryingBuffer()=0
    \n+\n+\n+\n+
    EVALUATOR * GetEvaluator(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, DEVICE_CONTEXT *deviceContext)
    Definition mesh.h:241
    \n+
    EVALUATOR * GetEvaluator(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, DEVICE_CONTEXT *deviceContext)
    Definition mesh.h:255
    \n+
    EVALUATOR * GetEvaluator(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, DEVICE_CONTEXT *deviceContext)
    Definition mesh.h:228
    \n+\n+\n+\n+
    Entry(BufferDescriptor const &srcDescArg, BufferDescriptor const &dstDescArg, BufferDescriptor const &duDescArg, BufferDescriptor const &dvDescArg, BufferDescriptor const &duuDescArg, BufferDescriptor const &duvDescArg, BufferDescriptor const &dvvDescArg, EVALUATOR *evalArg)
    Definition mesh.h:207
    \n+\n+\n+\n+\n+\n+\n+\n+
    Entry(BufferDescriptor const &srcDescArg, BufferDescriptor const &dstDescArg, BufferDescriptor const &duDescArg, BufferDescriptor const &dvDescArg, EVALUATOR *evalArg)
    Definition mesh.h:197
    \n+\n+\n+
    virtual Far::TopologyRefiner const * GetTopologyRefiner() const
    Definition mesh.h:578
    \n+
    virtual VertexBuffer * GetVertexBuffer()
    Definition mesh.h:570
    \n+
    virtual void UpdateVaryingBuffer(float const *varyingData, int startVertex, int numVerts)
    Definition mesh.h:495
    \n+
    virtual VertexBuffer * GetVaryingBuffer()
    Definition mesh.h:574
    \n+\n+\n+\n+
    virtual VertexBufferBinding BindVertexBuffer()
    Definition mesh.h:562
    \n+
    virtual int GetNumVertices() const
    Definition mesh.h:558
    \n+
    Mesh(Far::TopologyRefiner *refiner, int numVertexElements, int numVaryingElements, int level, MeshBitset bits=MeshBitset(), EvaluatorCache *evaluatorCache=NULL, DeviceContext *deviceContext=NULL)
    Definition mesh.h:428
    \n+\n+\n+
    EvaluatorCacheT< Evaluator > EvaluatorCache
    Definition mesh.h:425
    \n+
    virtual VertexBufferBinding BindVaryingBuffer()
    Definition mesh.h:566
    \n+\n+
    PatchTable::VertexBufferBinding VertexBufferBinding
    Definition mesh.h:426
    \n+
    virtual void UpdateVertexBuffer(float const *vertexData, int startVertex, int numVerts)
    Definition mesh.h:489
    \n+\n+
    virtual PatchTable * GetPatchTable() const
    Definition mesh.h:550
    \n+
    virtual Far::PatchTable const * GetFarPatchTable() const
    Definition mesh.h:554
    \n+\n+
    virtual int GetMaxValence() const
    Definition mesh.h:560
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n [Logo] OpenSubdiv\n Loading...\n Searching...\n No Matches\n-cpuVertexBuffer.h\n+mesh.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1//\n 2// Copyright 2013 Pixar\n 3//\n 4// Licensed under the Apache License, Version 2.0 (the \"Apache License\")\n 5// with the following modification; you may not use this file except in\n 6// compliance with the Apache License and the following modification to it:\n@@ -24,84 +24,1093 @@\n 18// Unless required by applicable law or agreed to in writing, software\n 19// distributed under the Apache License with the above modification is\n 20// distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n 21// KIND, either express or implied. See the Apache License for the specific\n 22// language governing permissions and limitations under the Apache License.\n 23//\n 24\n-25#ifndef OPENSUBDIV3_OSD_CPU_VERTEX_BUFFER_H\n-26#define OPENSUBDIV3_OSD_CPU_VERTEX_BUFFER_H\n+25#ifndef OPENSUBDIV3_OSD_MESH_H\n+26#define OPENSUBDIV3_OSD_MESH_H\n 27\n 28#include \"../version.h\"\n 29\n-30#include \n-31\n-32namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n-33namespace OPENSUBDIV_VERSION {\n+30#include \n+31#include \n+32#include \n+33#include \n 34\n-35namespace Osd {\n-36\n-_\b4_\b2class _\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br {\n-43public:\n-_\b4_\b5 static _\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br * _\bC_\br_\be_\ba_\bt_\be(int numElements, int numVertices,\n-46 void *deviceContext = NULL);\n-47\n-_\b4_\b9 _\b~_\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br();\n-50\n-_\b5_\b3 void _\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba(const float *src, int startVertex, int numVertices,\n-54 void *deviceContext = NULL);\n-55\n-_\b5_\b7 int _\bG_\be_\bt_\bN_\bu_\bm_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs() const;\n-58\n-_\b6_\b0 int _\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const;\n-61\n-_\b6_\b3 float * _\bB_\bi_\bn_\bd_\bC_\bp_\bu_\bB_\bu_\bf_\bf_\be_\br();\n+35#include \"../far/topologyRefiner.h\"\n+36#include \"../far/patchTableFactory.h\"\n+37#include \"../far/stencilTable.h\"\n+38#include \"../far/stencilTableFactory.h\"\n+39\n+40#include \"../osd/bufferDescriptor.h\"\n+41\n+42struct ID3D11DeviceContext;\n+43\n+44namespace _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv {\n+45namespace OPENSUBDIV_VERSION {\n+46\n+47namespace Osd {\n+48\n+_\b4_\b9enum _\bM_\be_\bs_\bh_\bB_\bi_\bt_\bs {\n+_\b5_\b0 _\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be = 0,\n+_\b5_\b1 _\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bV_\ba_\br_\by_\bi_\bn_\bg = 1,\n+_\b5_\b2 _\bM_\be_\bs_\bh_\bF_\bV_\ba_\br_\bD_\ba_\bt_\ba = 2,\n+_\b5_\b3 _\bM_\be_\bs_\bh_\bF_\bV_\ba_\br_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be = 3,\n+_\b5_\b4 _\bM_\be_\bs_\bh_\bU_\bs_\be_\bS_\bm_\bo_\bo_\bt_\bh_\bC_\bo_\br_\bn_\be_\br_\bP_\ba_\bt_\bc_\bh = 4,\n+_\b5_\b5 _\bM_\be_\bs_\bh_\bU_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh = 5,\n+_\b5_\b6 _\bM_\be_\bs_\bh_\bU_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh = 6,\n+_\b5_\b7 _\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bB_\bi_\bl_\bi_\bn_\be_\ba_\br_\bB_\ba_\bs_\bi_\bs = 7, // exclusive\n+_\b5_\b8 _\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bB_\ba_\bs_\bi_\bs = 8, // exclusive\n+_\b5_\b9 _\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bG_\br_\be_\bg_\bo_\br_\by_\bB_\ba_\bs_\bi_\bs = 9, // exclusive\n+_\b6_\b0 _\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by = 10, // exclusive\n+_\b6_\b1 _\bN_\bU_\bM_\b__\bM_\bE_\bS_\bH_\b__\bB_\bI_\bT_\bS = 11,\n+62};\n+_\b6_\b3typedef std::bitset _\bM_\be_\bs_\bh_\bB_\bi_\bt_\bs_\be_\bt;\n 64\n-65protected:\n-_\b6_\b7 _\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(int numElements, int numVertices);\n-68\n-69private:\n-70 int _numElements;\n-71 int _numVertices;\n-72 float *_cpuBuffer;\n-73};\n-74\n+65// --------------------------------------------------------------------------\n+-\n+66\n+67template \n+_\b6_\b8class _\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be {\n+69public:\n+_\b7_\b0 typedef PATCH_TABLE _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be;\n+_\b7_\b1 typedef typename PatchTable::VertexBufferBinding _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bB_\bi_\bn_\bd_\bi_\bn_\bg;\n+72\n+73public:\n+_\b7_\b4 _\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be() { }\n 75\n-76} // end namespace Osd\n+_\b7_\b6 virtual _\b~_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be() { }\n 77\n-78} // end namespace OPENSUBDIV_VERSION\n-79using namespace OPENSUBDIV_VERSION;\n-80\n-81} // end namespace OpenSubdiv\n-82\n-83#endif // OPENSUBDIV3_OSD_CPU_VERTEX_BUFFER_H\n+_\b7_\b8 virtual int _\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const = 0;\n+79\n+_\b8_\b0 virtual int _\bG_\be_\bt_\bM_\ba_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be() const = 0;\n+81\n+_\b8_\b2 virtual void _\bU_\bp_\bd_\ba_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(float const *vertexData,\n+83 int startVertex, int numVerts) = 0;\n+84\n+_\b8_\b5 virtual void _\bU_\bp_\bd_\ba_\bt_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bB_\bu_\bf_\bf_\be_\br(float const *varyingData,\n+86 int startVertex, int numVerts) = 0;\n+87\n+_\b8_\b8 virtual void _\bR_\be_\bf_\bi_\bn_\be() = 0;\n+89\n+_\b9_\b0 virtual void _\bS_\by_\bn_\bc_\bh_\br_\bo_\bn_\bi_\bz_\be() = 0;\n+91\n+_\b9_\b2 virtual _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be * _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be() const = 0;\n+93\n+_\b9_\b4 virtual _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *_\bG_\be_\bt_\bF_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be() const = 0;\n+95\n+_\b9_\b6 virtual _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bB_\bi_\bn_\bd_\bi_\bn_\bg _\bB_\bi_\bn_\bd_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br() = 0;\n+97\n+_\b9_\b8 virtual _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bB_\bi_\bn_\bd_\bi_\bn_\bg _\bB_\bi_\bn_\bd_\bV_\ba_\br_\by_\bi_\bn_\bg_\bB_\bu_\bf_\bf_\be_\br() = 0;\n+99\n+100protected:\n+_\b1_\b0_\b1 static inline void _\br_\be_\bf_\bi_\bn_\be_\bM_\be_\bs_\bh(_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br & refiner,\n+102 int level, bool adaptive,\n+103 bool singleCreasePatch) {\n+104 if (adaptive) {\n+105 _\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs options(level);\n+106 options._\bu_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh = singleCreasePatch;\n+107 refiner._\bR_\be_\bf_\bi_\bn_\be_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be(options);\n+108 } else {\n+109 // This dependency on FVar channels should not be necessary\n+110 bool fullTopologyInLastLevel = refiner._\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs()>0;\n+111\n+112 _\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bO_\bp_\bt_\bi_\bo_\bn_\bs options(level);\n+113 options._\bf_\bu_\bl_\bl_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bn_\bL_\ba_\bs_\bt_\bL_\be_\bv_\be_\bl = fullTopologyInLastLevel;\n+114 refiner._\bR_\be_\bf_\bi_\bn_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm(options);\n+115 }\n+116 }\n+_\b1_\b1_\b7 static inline void _\br_\be_\bf_\bi_\bn_\be_\bM_\be_\bs_\bh(_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br & refiner,\n+118 int level, _\bM_\be_\bs_\bh_\bB_\bi_\bt_\bs_\be_\bt bits) {\n+119 if (bits.test(_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be)) {\n+120 _\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs options(level);\n+121 options._\bu_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh = bits.test(_\bM_\be_\bs_\bh_\bU_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh);\n+122 options._\bu_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh = bits.test(_\bM_\be_\bs_\bh_\bU_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh);\n+123 options._\bc_\bo_\bn_\bs_\bi_\bd_\be_\br_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs = bits.test(_\bM_\be_\bs_\bh_\bF_\bV_\ba_\br_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be);\n+124 refiner._\bR_\be_\bf_\bi_\bn_\be_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be(options);\n+125 } else {\n+126 // This dependency on FVar channels should not be necessary\n+127 bool fullTopologyInLastLevel = refiner._\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs()>0;\n+128\n+129 _\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bO_\bp_\bt_\bi_\bo_\bn_\bs options(level);\n+130 options._\bf_\bu_\bl_\bl_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bn_\bL_\ba_\bs_\bt_\bL_\be_\bv_\be_\bl = fullTopologyInLastLevel;\n+131 refiner._\bR_\be_\bf_\bi_\bn_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm(options);\n+132 }\n+133 }\n+134};\n+135\n+136// -------------------------------------------------------------------------\n+--\n+137\n+138template \n+140STENCIL_TABLE const *\n+_\b1_\b4_\b1_\bc_\bo_\bn_\bv_\be_\br_\bt_\bT_\bo_\bC_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bl_\be_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(\n+142 SRC_STENCIL_TABLE const *table, DEVICE_CONTEXT *context) {\n+143 if (! table) return NULL;\n+144 return STENCIL_TABLE::Create(table, context);\n+145}\n+146\n+147template <>\n+_\b1_\b4_\b8inline _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *\n+149_\bc_\bo_\bn_\bv_\be_\br_\bt_\bT_\bo_\bC_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bl_\be_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b<_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bv_\bo_\bi_\bd_\b>(\n+150 _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *table, void * /*context*/) {\n+151 // no need for conversion\n+152 // XXX: We don't want to even copy.\n+153 if (! table) return NULL;\n+154 return new _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(*table);\n+155}\n+156\n+157template <>\n+_\b1_\b5_\b8inline _\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *\n+159_\bc_\bo_\bn_\bv_\be_\br_\bt_\bT_\bo_\bC_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bl_\be_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b<_\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bF_\ba_\br_\b:_\b:\n+_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bv_\bo_\bi_\bd_\b>(\n+160 _\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *table, void * /*context*/) {\n+161 // no need for conversion\n+162 // XXX: We don't want to even copy.\n+163 if (! table) return NULL;\n+164 return new _\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(*table);\n+165}\n+166\n+167template <>\n+_\b1_\b6_\b8inline _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *\n+169_\bc_\bo_\bn_\bv_\be_\br_\bt_\bT_\bo_\bC_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bl_\be_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b<_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,\n+_\bI_\bD_\b3_\bD_\b1_\b1_\bD_\be_\bv_\bi_\bc_\be_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b>(\n+170 _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const *table, ID3D11DeviceContext * /*context*/) {\n+171 // no need for conversion\n+172 // XXX: We don't want to even copy.\n+173 if (! table) return NULL;\n+174 return new _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(*table);\n+175}\n+176\n+177// -------------------------------------------------------------------------\n+--\n+178\n+179// Osd evaluator cache: for the GPU backends require compiled instance\n+180// (GLXFB, GLCompute, CL)\n+181//\n+182// note: this is just an example usage and client applications are supposed\n+183// to implement their own structure for Evaluator instance.\n+184//\n+185template \n+_\b1_\b8_\b6class _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT {\n+187public:\n+_\b1_\b8_\b8 _\b~_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT() {\n+189 for(typename Evaluators::iterator it = _evaluators.begin();\n+190 it != _evaluators.end(); ++it) {\n+191 delete it->evaluator;\n+192 }\n+193 }\n+194\n+195 // XXX: FIXME, linear search\n+_\b1_\b9_\b6 struct _\bE_\bn_\bt_\br_\by {\n+_\b1_\b9_\b7 _\bE_\bn_\bt_\br_\by(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDescArg,\n+198 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDescArg,\n+199 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDescArg,\n+200 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDescArg,\n+201 EVALUATOR *evalArg) : _\bs_\br_\bc_\bD_\be_\bs_\bc(srcDescArg), _\bd_\bs_\bt_\bD_\be_\bs_\bc(dstDescArg),\n+202 _\bd_\bu_\bD_\be_\bs_\bc(duDescArg), _\bd_\bv_\bD_\be_\bs_\bc(dvDescArg),\n+203 _\bd_\bu_\bu_\bD_\be_\bs_\bc(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br()),\n+204 _\bd_\bu_\bv_\bD_\be_\bs_\bc(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br()),\n+205 _\bd_\bv_\bv_\bD_\be_\bs_\bc(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br()),\n+206 _\be_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br(evalArg) {}\n+_\b2_\b0_\b7 _\bE_\bn_\bt_\br_\by(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDescArg,\n+208 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDescArg,\n+209 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDescArg,\n+210 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDescArg,\n+211 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDescArg,\n+212 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDescArg,\n+213 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDescArg,\n+214 EVALUATOR *evalArg) : _\bs_\br_\bc_\bD_\be_\bs_\bc(srcDescArg), _\bd_\bs_\bt_\bD_\be_\bs_\bc(dstDescArg),\n+215 _\bd_\bu_\bD_\be_\bs_\bc(duDescArg), _\bd_\bv_\bD_\be_\bs_\bc(dvDescArg),\n+216 _\bd_\bu_\bu_\bD_\be_\bs_\bc(duuDescArg),\n+217 _\bd_\bu_\bv_\bD_\be_\bs_\bc(duvDescArg),\n+218 _\bd_\bv_\bv_\bD_\be_\bs_\bc(dvvDescArg),\n+219 _\be_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br(evalArg) {}\n+_\b2_\b2_\b0 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br _\bs_\br_\bc_\bD_\be_\bs_\bc, _\bd_\bs_\bt_\bD_\be_\bs_\bc;\n+_\b2_\b2_\b1 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br _\bd_\bu_\bD_\be_\bs_\bc, _\bd_\bv_\bD_\be_\bs_\bc;\n+_\b2_\b2_\b2 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br _\bd_\bu_\bu_\bD_\be_\bs_\bc, _\bd_\bu_\bv_\bD_\be_\bs_\bc, _\bd_\bv_\bv_\bD_\be_\bs_\bc;\n+_\b2_\b2_\b3 EVALUATOR *_\be_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br;\n+224 };\n+_\b2_\b2_\b5 typedef std::vector _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bs;\n+226\n+227 template \n+_\b2_\b2_\b8 EVALUATOR *_\bG_\be_\bt_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+229 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+230 DEVICE_CONTEXT *deviceContext) {\n+231 return _\bG_\be_\bt_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br(srcDesc, dstDesc,\n+232 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+233 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+234 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+235 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+236 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+237 deviceContext);\n+238 }\n+239\n+240 template \n+_\b2_\b4_\b1 EVALUATOR *_\bG_\be_\bt_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+242 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+243 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+244 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+245 DEVICE_CONTEXT *deviceContext) {\n+246 return _\bG_\be_\bt_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br(srcDesc, dstDesc,\n+247 duDesc, dvDesc,\n+248 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+249 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+250 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(),\n+251 deviceContext);\n+252 }\n+253\n+254 template \n+_\b2_\b5_\b5 EVALUATOR *_\bG_\be_\bt_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &srcDesc,\n+256 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dstDesc,\n+257 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duDesc,\n+258 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvDesc,\n+259 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duuDesc,\n+260 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &duvDesc,\n+261 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &dvvDesc,\n+262 DEVICE_CONTEXT *deviceContext) {\n+263\n+264 for(typename Evaluators::iterator it = _evaluators.begin();\n+265 it != _evaluators.end(); ++it) {\n+266 if (isEqual(srcDesc, it->srcDesc) &&\n+267 isEqual(dstDesc, it->dstDesc) &&\n+268 isEqual(duDesc, it->duDesc) &&\n+269 isEqual(dvDesc, it->dvDesc) &&\n+270 isEqual(duuDesc, it->duuDesc) &&\n+271 isEqual(duvDesc, it->duvDesc) &&\n+272 isEqual(dvvDesc, it->dvvDesc)) {\n+273 return it->evaluator;\n+274 }\n+275 }\n+276 EVALUATOR *e = EVALUATOR::Create(srcDesc, dstDesc,\n+277 duDesc, dvDesc,\n+278 duuDesc, duvDesc, dvvDesc,\n+279 deviceContext);\n+280 _evaluators.push_back(_\bE_\bn_\bt_\br_\by(srcDesc, dstDesc,\n+281 duDesc, dvDesc,\n+282 duuDesc, duvDesc, dvvDesc, e));\n+283 return e;\n+284 }\n+285\n+286private:\n+287 static bool isEqual(_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &a,\n+288 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br const &b) {\n+289 int offsetA = a._\bs_\bt_\br_\bi_\bd_\be ? (a._\bo_\bf_\bf_\bs_\be_\bt % a._\bs_\bt_\br_\bi_\bd_\be) : 0;\n+290 int offsetB = b._\bs_\bt_\br_\bi_\bd_\be ? (b._\bo_\bf_\bf_\bs_\be_\bt % b._\bs_\bt_\br_\bi_\bd_\be) : 0;\n+291\n+292 // Note: XFB kernel needs to be configured with the local offset\n+293 // of the dstDesc to skip preceding primvars.\n+294 return (offsetA == offsetB &&\n+295 a._\bl_\be_\bn_\bg_\bt_\bh == b._\bl_\be_\bn_\bg_\bt_\bh &&\n+296 a._\bs_\bt_\br_\bi_\bd_\be == b._\bs_\bt_\br_\bi_\bd_\be);\n+297 }\n+298\n+299 _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bs _evaluators;\n+300};\n+301\n+303\n+304// template helpers to see if the evaluator is instantiatable or not.\n+305template \n+306struct instantiatable\n+307{\n+308 typedef char yes[1];\n+309 typedef char no[2];\n+310 template static yes &chk(typename C::Instantiatable *t=0);\n+311 template static no &chk(...);\n+312 static bool const value = sizeof(chk(0)) == sizeof(yes);\n+313};\n+314template \n+315struct enable_if { typedef T type; };\n+316template \n+317struct enable_if { };\n+318\n+320\n+321// extract a kernel from cache if available\n+322template \n+323static EVALUATOR *GetEvaluator(\n+324 EvaluatorCacheT *cache,\n+325 BufferDescriptor const &srcDesc,\n+326 BufferDescriptor const &dstDesc,\n+327 BufferDescriptor const &duDesc,\n+328 BufferDescriptor const &dvDesc,\n+329 BufferDescriptor const &duuDesc,\n+330 BufferDescriptor const &duvDesc,\n+331 BufferDescriptor const &dvvDesc,\n+332 DEVICE_CONTEXT deviceContext,\n+333 typename enable_if::value, void>::type*t=0) {\n+334 (void)t;\n+335 if (cache == NULL) return NULL;\n+336 return cache->GetEvaluator(srcDesc, dstDesc,\n+337 duDesc, dvDesc, duuDesc, duvDesc, dvvDesc,\n+338 deviceContext);\n+339}\n+340\n+341template \n+342static EVALUATOR *GetEvaluator(\n+343 EvaluatorCacheT *cache,\n+344 BufferDescriptor const &srcDesc,\n+345 BufferDescriptor const &dstDesc,\n+346 BufferDescriptor const &duDesc,\n+347 BufferDescriptor const &dvDesc,\n+348 DEVICE_CONTEXT deviceContext,\n+349 typename enable_if::value, void>::type*t=0) {\n+350 (void)t;\n+351 if (cache == NULL) return NULL;\n+352 return cache->GetEvaluator(srcDesc, dstDesc, duDesc, dvDesc,\n+deviceContext);\n+353}\n+354\n+355template \n+356static EVALUATOR *GetEvaluator(\n+357 EvaluatorCacheT *cache,\n+358 BufferDescriptor const &srcDesc,\n+359 BufferDescriptor const &dstDesc,\n+360 DEVICE_CONTEXT deviceContext,\n+361 typename enable_if::value, void>::type*t=0) {\n+362 (void)t;\n+363 if (cache == NULL) return NULL;\n+364 return cache->GetEvaluator(srcDesc, dstDesc,\n+365 BufferDescriptor(),\n+366 BufferDescriptor(),\n+367 deviceContext);\n+368}\n+369\n+370// fallback\n+371template \n+372static EVALUATOR *GetEvaluator(\n+373 EvaluatorCacheT *,\n+374 BufferDescriptor const &,\n+375 BufferDescriptor const &,\n+376 BufferDescriptor const &,\n+377 BufferDescriptor const &,\n+378 BufferDescriptor const &,\n+379 BufferDescriptor const &,\n+380 BufferDescriptor const &,\n+381 DEVICE_CONTEXT,\n+382 typename enable_if::value, void>::type*t=0) {\n+383 (void)t;\n+384 return NULL;\n+385}\n+386\n+387template \n+388static EVALUATOR *GetEvaluator(\n+389 EvaluatorCacheT *,\n+390 BufferDescriptor const &,\n+391 BufferDescriptor const &,\n+392 BufferDescriptor const &,\n+393 BufferDescriptor const &,\n+394 DEVICE_CONTEXT,\n+395 typename enable_if::value, void>::type*t=0) {\n+396 (void)t;\n+397 return NULL;\n+398}\n+399\n+400template \n+401static EVALUATOR *GetEvaluator(\n+402 EvaluatorCacheT *,\n+403 BufferDescriptor const &,\n+404 BufferDescriptor const &,\n+405 DEVICE_CONTEXT,\n+406 typename enable_if::value, void>::type*t=0) {\n+407 (void)t;\n+408 return NULL;\n+409}\n+410\n+411// -------------------------------------------------------------------------\n+--\n+412\n+413template \n+_\b4_\b1_\b8class _\bM_\be_\bs_\bh : public _\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be {\n+419public:\n+_\b4_\b2_\b0 typedef VERTEX_BUFFER _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br;\n+_\b4_\b2_\b1 typedef EVALUATOR _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br;\n+_\b4_\b2_\b2 typedef STENCIL_TABLE _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be;\n+_\b4_\b2_\b3 typedef PATCH_TABLE _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be;\n+_\b4_\b2_\b4 typedef DEVICE_CONTEXT _\bD_\be_\bv_\bi_\bc_\be_\bC_\bo_\bn_\bt_\be_\bx_\bt;\n+_\b4_\b2_\b5 typedef _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b<_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b> _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be;\n+_\b4_\b2_\b6 typedef typename PatchTable::VertexBufferBinding _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bB_\bi_\bn_\bd_\bi_\bn_\bg;\n+427\n+_\b4_\b2_\b8 _\bM_\be_\bs_\bh(_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br * refiner,\n+429 int numVertexElements,\n+430 int numVaryingElements,\n+431 int level,\n+432 _\bM_\be_\bs_\bh_\bB_\bi_\bt_\bs_\be_\bt bits = _\bM_\be_\bs_\bh_\bB_\bi_\bt_\bs_\be_\bt(),\n+433 _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be * evaluatorCache = NULL,\n+434 _\bD_\be_\bv_\bi_\bc_\be_\bC_\bo_\bn_\bt_\be_\bx_\bt * deviceContext = NULL) :\n+435\n+436 _refiner(refiner),\n+437 _farPatchTable(NULL),\n+438 _numVertices(0),\n+439 _maxValence(0),\n+440 _vertexBuffer(NULL),\n+441 _varyingBuffer(NULL),\n+442 _vertexStencilTable(NULL),\n+443 _varyingStencilTable(NULL),\n+444 _evaluatorCache(evaluatorCache),\n+445 _patchTable(NULL),\n+446 _deviceContext(deviceContext) {\n+447\n+448 assert(_refiner);\n+449\n+450 _\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b<_\bP_\bA_\bT_\bC_\bH_\b__\bT_\bA_\bB_\bL_\bE_\b>_\b:_\b:_\br_\be_\bf_\bi_\bn_\be_\bM_\be_\bs_\bh(\n+451 *_refiner, level, bits);\n+452\n+453 int vertexBufferStride = numVertexElements +\n+454 (bits.test(_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bV_\ba_\br_\by_\bi_\bn_\bg) ? numVaryingElements : 0);\n+455 int varyingBufferStride =\n+456 (bits.test(_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bV_\ba_\br_\by_\bi_\bn_\bg) ? 0 : numVaryingElements);\n+457\n+458 initializeContext(numVertexElements,\n+459 numVaryingElements,\n+460 level, bits);\n+461\n+462 initializeVertexBuffers(_numVertices,\n+463 vertexBufferStride,\n+464 varyingBufferStride);\n+465\n+466 // configure vertex buffer descriptor\n+467 _vertexDesc =\n+468 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(0, numVertexElements, vertexBufferStride);\n+469 if (bits.test(_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bV_\ba_\br_\by_\bi_\bn_\bg)) {\n+470 _varyingDesc = _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(\n+471 numVertexElements, numVaryingElements, vertexBufferStride);\n+472 } else {\n+473 _varyingDesc = _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(\n+474 0, numVaryingElements, varyingBufferStride);\n+475 }\n+476 }\n+477\n+_\b4_\b7_\b8 virtual _\b~_\bM_\be_\bs_\bh() {\n+479 delete _refiner;\n+480 delete _farPatchTable;\n+481 delete _vertexBuffer;\n+482 delete _varyingBuffer;\n+483 delete _vertexStencilTable;\n+484 delete _varyingStencilTable;\n+485 delete _patchTable;\n+486 // deviceContext and evaluatorCache are not owned by this class.\n+487 }\n+488\n+_\b4_\b8_\b9 virtual void _\bU_\bp_\bd_\ba_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br(float const *vertexData,\n+490 int startVertex, int numVerts) {\n+491 _vertexBuffer->UpdateData(vertexData, startVertex, numVerts,\n+492 _deviceContext);\n+493 }\n+494\n+_\b4_\b9_\b5 virtual void _\bU_\bp_\bd_\ba_\bt_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bB_\bu_\bf_\bf_\be_\br(float const *varyingData,\n+496 int startVertex, int numVerts) {\n+497 _varyingBuffer->UpdateData(varyingData, startVertex, numVerts,\n+498 _deviceContext);\n+499 }\n+500\n+_\b5_\b0_\b1 virtual void _\bR_\be_\bf_\bi_\bn_\be() {\n+502\n+503 int numControlVertices = _refiner->_\bG_\be_\bt_\bL_\be_\bv_\be_\bl(0)._\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs();\n+504\n+505 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br srcDesc = _vertexDesc;\n+506 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br dstDesc(srcDesc);\n+507 dstDesc._\bo_\bf_\bf_\bs_\be_\bt += numControlVertices * dstDesc._\bs_\bt_\br_\bi_\bd_\be;\n+508\n+509 // note that the _evaluatorCache can be NULL and thus\n+510 // the evaluatorInstance can be NULL\n+511 // (for uninstantiatable kernels CPU,TBB etc)\n+512 _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br const *instance = GetEvaluator(\n+513 _evaluatorCache, srcDesc, dstDesc,\n+514 _deviceContext);\n+515\n+516 Evaluator::EvalStencils(_vertexBuffer, srcDesc,\n+517 _vertexBuffer, dstDesc,\n+518 _vertexStencilTable,\n+519 instance, _deviceContext);\n+520\n+521 if (_varyingDesc._\bl_\be_\bn_\bg_\bt_\bh > 0) {\n+522 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br vSrcDesc = _varyingDesc;\n+523 _\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br vDstDesc(vSrcDesc);\n+524 vDstDesc._\bo_\bf_\bf_\bs_\be_\bt += numControlVertices * vDstDesc._\bs_\bt_\br_\bi_\bd_\be;\n+525\n+526 instance = GetEvaluator(\n+527 _evaluatorCache, vSrcDesc, vDstDesc,\n+528 _deviceContext);\n+529\n+530 if (_varyingBuffer) {\n+531 // non-interleaved\n+532 Evaluator::EvalStencils(_varyingBuffer, vSrcDesc,\n+533 _varyingBuffer, vDstDesc,\n+534 _varyingStencilTable,\n+535 instance, _deviceContext);\n+536 } else {\n+537 // interleaved\n+538 Evaluator::EvalStencils(_vertexBuffer, vSrcDesc,\n+539 _vertexBuffer, vDstDesc,\n+540 _varyingStencilTable,\n+541 instance, _deviceContext);\n+542 }\n+543 }\n+544 }\n+545\n+_\b5_\b4_\b6 virtual void _\bS_\by_\bn_\bc_\bh_\br_\bo_\bn_\bi_\bz_\be() {\n+547 Evaluator::Synchronize(_deviceContext);\n+548 }\n+549\n+_\b5_\b5_\b0 virtual _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be * _\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be() const {\n+551 return _patchTable;\n+552 }\n+553\n+_\b5_\b5_\b4 virtual _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be const *_\bG_\be_\bt_\bF_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be() const {\n+555 return _farPatchTable;\n+556 }\n+557\n+_\b5_\b5_\b8 virtual int _\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs() const { return _numVertices; }\n+559\n+_\b5_\b6_\b0 virtual int _\bG_\be_\bt_\bM_\ba_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be() const { return _maxValence; }\n+561\n+_\b5_\b6_\b2 virtual _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bB_\bi_\bn_\bd_\bi_\bn_\bg _\bB_\bi_\bn_\bd_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br() {\n+563 return _vertexBuffer->BindVBO(_deviceContext);\n+564 }\n+565\n+_\b5_\b6_\b6 virtual _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bB_\bi_\bn_\bd_\bi_\bn_\bg _\bB_\bi_\bn_\bd_\bV_\ba_\br_\by_\bi_\bn_\bg_\bB_\bu_\bf_\bf_\be_\br() {\n+567 return _varyingBuffer->BindVBO(_deviceContext);\n+568 }\n+569\n+_\b5_\b7_\b0 virtual _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br * _\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br() {\n+571 return _vertexBuffer;\n+572 }\n+573\n+_\b5_\b7_\b4 virtual _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br * _\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bB_\bu_\bf_\bf_\be_\br() {\n+575 return _varyingBuffer;\n+576 }\n+577\n+_\b5_\b7_\b8 virtual _\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br const * _\bG_\be_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br() const {\n+579 return _refiner;\n+580 }\n+581\n+582private:\n+583 void initializeContext(int numVertexElements,\n+584 int numVaryingElements,\n+585 int level, _\bM_\be_\bs_\bh_\bB_\bi_\bt_\bs_\be_\bt bits) {\n+586 assert(_refiner);\n+587\n+588 Far::StencilTableFactory::Options options;\n+589 options.generateOffsets = true;\n+590 options.generateIntermediateLevels =\n+591 _refiner->_\bI_\bs_\bU_\bn_\bi_\bf_\bo_\br_\bm() ? false : true;\n+592\n+593 _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const * vertexStencils = NULL;\n+594 _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const * varyingStencils = NULL;\n+595\n+596 if (numVertexElements>0) {\n+597\n+598 vertexStencils = _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bC_\br_\be_\ba_\bt_\be(*_refiner,\n+599 options);\n+600 }\n+601\n+602 if (numVaryingElements>0) {\n+603\n+604 options.interpolationMode =\n+605 _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bI_\bN_\bT_\bE_\bR_\bP_\bO_\bL_\bA_\bT_\bE_\b__\bV_\bA_\bR_\bY_\bI_\bN_\bG;\n+606\n+607 varyingStencils = _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bC_\br_\be_\ba_\bt_\be(*_refiner,\n+608 options);\n+609 }\n+610\n+611 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs poptions(level);\n+612 poptions.generateFVarTables = bits.test(_\bM_\be_\bs_\bh_\bF_\bV_\ba_\br_\bD_\ba_\bt_\ba);\n+613 poptions.generateFVarLegacyLinearPatches = !bits.test(_\bM_\be_\bs_\bh_\bF_\bV_\ba_\br_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be);\n+614 poptions.generateLegacySharpCornerPatches = !bits.test\n+(_\bM_\be_\bs_\bh_\bU_\bs_\be_\bS_\bm_\bo_\bo_\bt_\bh_\bC_\bo_\br_\bn_\be_\br_\bP_\ba_\bt_\bc_\bh);\n+615 poptions.useSingleCreasePatch = bits.test(_\bM_\be_\bs_\bh_\bU_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh);\n+616 poptions.useInfSharpPatch = bits.test(_\bM_\be_\bs_\bh_\bU_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh);\n+617\n+618 // points on bilinear and gregory basis endcap boundaries can be\n+619 // shared among adjacent patches to save some stencils.\n+620 if (bits.test(_\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bB_\bi_\bl_\bi_\bn_\be_\ba_\br_\bB_\ba_\bs_\bi_\bs)) {\n+621 poptions.SetEndCapType(\n+622 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b__\bB_\bA_\bS_\bI_\bS);\n+623 poptions.shareEndCapPatchPoints = true;\n+624 } else if (bits.test(_\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bB_\ba_\bs_\bi_\bs)) {\n+625 poptions.SetEndCapType(\n+626 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bB_\bS_\bP_\bL_\bI_\bN_\bE_\b__\bB_\bA_\bS_\bI_\bS);\n+627 } else if (bits.test(_\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bG_\br_\be_\bg_\bo_\br_\by_\bB_\ba_\bs_\bi_\bs)) {\n+628 poptions.SetEndCapType(\n+629 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bA_\bS_\bI_\bS);\n+630 poptions.shareEndCapPatchPoints = true;\n+631 } else if (bits.test(_\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by)) {\n+632 poptions.SetEndCapType(\n+633 _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bL_\bE_\bG_\bA_\bC_\bY_\b__\bG_\bR_\bE_\bG_\bO_\bR_\bY);\n+634 }\n+635\n+636 _farPatchTable = _\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bC_\br_\be_\ba_\bt_\be(*_refiner, poptions);\n+637\n+638 // if there's endcap stencils, merge it into regular stencils.\n+639 if (_farPatchTable->_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be()) {\n+640 // append stencils\n+641 if (Far::StencilTable const *vertexStencilsWithLocalPoints =\n+642 _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bA_\bp_\bp_\be_\bn_\bd_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(\n+643 *_refiner,\n+644 vertexStencils,\n+645 _farPatchTable->_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be())) {\n+646 delete vertexStencils;\n+647 vertexStencils = vertexStencilsWithLocalPoints;\n+648 }\n+649 if (varyingStencils) {\n+650 if (Far::StencilTable const *varyingStencilsWithLocalPoints =\n+651 _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bA_\bp_\bp_\be_\bn_\bd_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be(\n+652 *_refiner,\n+653 varyingStencils,\n+654 _farPatchTable->_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be())) {\n+655 delete varyingStencils;\n+656 varyingStencils = varyingStencilsWithLocalPoints;\n+657 }\n+658 }\n+659 }\n+660\n+661 _maxValence = _farPatchTable->_\bG_\be_\bt_\bM_\ba_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be();\n+662 _patchTable = PatchTable::Create(_farPatchTable, _deviceContext);\n+663\n+664 // numvertices = coarse verts + refined verts + gregory basis verts\n+665 _numVertices = vertexStencils->_\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs()\n+666 + vertexStencils->_\bG_\be_\bt_\bN_\bu_\bm_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs();\n+667\n+668 // convert to device stenciltable if necessary.\n+669 _vertexStencilTable =\n+670 convertToCompatibleStencilTable(\n+671 vertexStencils, _deviceContext);\n+672 _varyingStencilTable =\n+673 convertToCompatibleStencilTable(\n+674 varyingStencils, _deviceContext);\n+675\n+676 // FIXME: we do extra copyings for Far::Stencils.\n+677 delete vertexStencils;\n+678 delete varyingStencils;\n+679 }\n+680\n+681 void initializeVertexBuffers(int numVertices,\n+682 int numVertexElements,\n+683 int numVaryingElements) {\n+684\n+685 if (numVertexElements) {\n+686 _vertexBuffer = VertexBuffer::Create(numVertexElements,\n+687 numVertices, _deviceContext);\n+688 }\n+689\n+690 if (numVaryingElements) {\n+691 _varyingBuffer = VertexBuffer::Create(numVaryingElements,\n+692 numVertices, _deviceContext);\n+693 }\n+694 }\n+695\n+696 Far::TopologyRefiner * _refiner;\n+697 Far::PatchTable * _farPatchTable;\n+698\n+699 int _numVertices;\n+700 int _maxValence;\n+701\n+702 _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br * _vertexBuffer;\n+703 _\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br * _varyingBuffer;\n+704\n+705 BufferDescriptor _vertexDesc;\n+706 BufferDescriptor _varyingDesc;\n+707\n+708 _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const * _vertexStencilTable;\n+709 _\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be const * _varyingStencilTable;\n+710 _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be * _evaluatorCache;\n+711\n+712 _\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be *_patchTable;\n+713 _\bD_\be_\bv_\bi_\bc_\be_\bC_\bo_\bn_\bt_\be_\bx_\bt *_deviceContext;\n+714};\n+715\n+716} // end namespace Osd\n+717\n+718} // end namespace OPENSUBDIV_VERSION\n+719using namespace OPENSUBDIV_VERSION;\n+720\n+721} // end namespace OpenSubdiv\n+722\n+723#endif // OPENSUBDIV3_OSD_MESH_H\n _\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bl_\bi_\bm_\bi_\bt_\bs_\b._\bh_\b:_\b3_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-Concrete vertex buffer class for CPU subdivision.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bc_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh_\b:_\b4_\b2\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n-int GetNumElements() const\n-Returns how many elements defined in this vertex buffer.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static CpuVertexBuffer * Create(int numElements, int numVertices, void\n-*deviceContext=NULL)\n-Creator. Returns NULL if error.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bD_\ba_\bt_\ba\n-void UpdateData(const float *src, int startVertex, int numVertices, void\n-*deviceContext=NULL)\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bc_\bo_\bn_\bv_\be_\br_\bt_\bT_\bo_\bC_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bl_\be_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n+STENCIL_TABLE const * convertToCompatibleStencilTable(SRC_STENCIL_TABLE const\n+*table, DEVICE_CONTEXT *context)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b1_\b4_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bB_\bi_\bt_\bs\n+MeshBits\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bB_\bi_\bl_\bi_\bn_\be_\ba_\br_\bB_\ba_\bs_\bi_\bs\n+@ MeshEndCapBilinearBasis\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bN_\bU_\bM_\b__\bM_\bE_\bS_\bH_\b__\bB_\bI_\bT_\bS\n+@ NUM_MESH_BITS\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b6_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bU_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh\n+@ MeshUseInfSharpPatch\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bU_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh\n+@ MeshUseSingleCreasePatch\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bV_\ba_\br_\by_\bi_\bn_\bg\n+@ MeshInterleaveVarying\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bF_\bV_\ba_\br_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be\n+@ MeshFVarAdaptive\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bG_\br_\be_\bg_\bo_\br_\by_\bB_\ba_\bs_\bi_\bs\n+@ MeshEndCapGregoryBasis\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bB_\ba_\bs_\bi_\bs\n+@ MeshEndCapBSplineBasis\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bE_\bn_\bd_\bC_\ba_\bp_\bL_\be_\bg_\ba_\bc_\by_\bG_\br_\be_\bg_\bo_\br_\by\n+@ MeshEndCapLegacyGregory\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b6_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bU_\bs_\be_\bS_\bm_\bo_\bo_\bt_\bh_\bC_\bo_\br_\bn_\be_\br_\bP_\ba_\bt_\bc_\bh\n+@ MeshUseSmoothCornerPatch\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bF_\bV_\ba_\br_\bD_\ba_\bt_\ba\n+@ MeshFVarData\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be\n+@ MeshAdaptive\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bc_\bo_\bn_\bv_\be_\br_\bt_\bT_\bo_\bC_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bl_\be_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b<_\b _\bF_\ba_\br_\b:_\b:\n+_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bv_\bo_\bi_\bd_\b _\b>\n+Far::StencilTable const * convertToCompatibleStencilTable< Far::StencilTable,\n+Far::StencilTable, void >(Far::StencilTable const *table, void *)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b1_\b4_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bc_\bo_\bn_\bv_\be_\br_\bt_\bT_\bo_\bC_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bl_\be_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b<_\b _\bF_\ba_\br_\b:_\b:\n+_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bv_\bo_\bi_\bd_\b _\b>\n+Far::LimitStencilTable const * convertToCompatibleStencilTable< Far::\n+LimitStencilTable, Far::LimitStencilTable, void >(Far::LimitStencilTable const\n+*table, void *)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b1_\b5_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bB_\bi_\bt_\bs_\be_\bt\n+std::bitset< NUM_MESH_BITS > MeshBitset\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b6_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bc_\bo_\bn_\bv_\be_\br_\bt_\bT_\bo_\bC_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bl_\be_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b<_\b _\bF_\ba_\br_\b:_\b:\n+_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b,_\b _\bI_\bD_\b3_\bD_\b1_\b1_\bD_\be_\bv_\bi_\bc_\be_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b _\b>\n+Far::StencilTable const * convertToCompatibleStencilTable< Far::StencilTable,\n+Far::StencilTable, ID3D11DeviceContext >(Far::StencilTable const *table,\n+ID3D11DeviceContext *)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b1_\b6_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+Container for arrays of parametric patches.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bM_\ba_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be\n+int GetMaxValence() const\n+Returns max vertex valence.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b9_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n+StencilTable const * GetLocalPointStencilTable() const\n+Returns the stencil table to compute local point vertex values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b3_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b:_\b:\n+_\bG_\be_\bt_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n+StencilTable const * GetLocalPointVaryingStencilTable() const\n+Returns the stencil table to compute local point varying values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b7_\b3_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static PatchTable * Create(TopologyRefiner const &refiner, Options\n+options=Options(), ConstIndexArray selectedFaces=ConstIndexArray())\n+Instantiates a PatchTable from a client-provided TopologyRefiner.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n+Public options for the PatchTable factory.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b4_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bL_\bE_\bG_\bA_\bC_\bY_\b__\bG_\bR_\bE_\bG_\bO_\bR_\bY\n+@ ENDCAP_LEGACY_GREGORY\n+legacy option for 2.x style Gregory patches (Catmark only)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b6_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bG_\bR_\bE_\bG_\bO_\bR_\bY_\b__\bB_\bA_\bS_\bI_\bS\n+@ ENDCAP_GREGORY_BASIS\n+use Gregory patches (highest quality, recommended default)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b5_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bB_\bI_\bL_\bI_\bN_\bE_\bA_\bR_\b__\bB_\bA_\bS_\bI_\bS\n+@ ENDCAP_BILINEAR_BASIS\n+use linear patches (simple quads or tris)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b5_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bE_\bN_\bD_\bC_\bA_\bP_\b__\bB_\bS_\bP_\bL_\bI_\bN_\bE_\b__\bB_\bA_\bS_\bI_\bS\n+@ ENDCAP_BSPLINE_BASIS\n+use BSpline-like patches (same patch type as regular)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bp_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b5_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\bR_\be_\ba_\bl_\b<_\b _\bf_\bl_\bo_\ba_\bt_\b _\b>_\b:_\b:\n+_\bI_\bN_\bT_\bE_\bR_\bP_\bO_\bL_\bA_\bT_\bE_\b__\bV_\bA_\bR_\bY_\bI_\bN_\bG\n+@ INTERPOLATE_VARYING\n+varying primvar stencils\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b5_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bR_\be_\ba_\bl_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bC_\bo_\bn_\bt_\br_\bo_\bl_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+int GetNumControlVertices() const\n+Returns the number of control vertices indexed in the table.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b6_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bR_\be_\ba_\bl_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bs\n+int GetNumStencils() const\n+Returns the number of stencils in the table.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b1_\b5_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n+Stencil table class wrapping the template for compatibility.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b2_\b7_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bL_\bi_\bm_\bi_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n+Limit stencil table class wrapping the template for compatibility.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\b._\bh_\b:_\b5_\b8_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static StencilTable const * Create(TopologyRefiner const &refiner, Options\n+options=Options())\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b2_\b9_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n+_\bA_\bp_\bp_\be_\bn_\bd_\bL_\bo_\bc_\ba_\bl_\bP_\bo_\bi_\bn_\bt_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n+static StencilTable const * AppendLocalPointStencilTable(TopologyRefiner const\n+&refiner, StencilTable const *baseStencilTable, StencilTable const\n+*localPointStencilTable, bool factorize=true)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bs_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b._\bh_\b:_\b3_\b0_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n int GetNumVertices() const\n-Returns how many vertices allocated in this vertex buffer.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\b~_\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-~CpuVertexBuffer()\n-Destructor.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bB_\bi_\bn_\bd_\bC_\bp_\bu_\bB_\bu_\bf_\bf_\be_\br\n-float * BindCpuBuffer()\n-Returns the address of CPU buffer.\n-_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b:_\b:_\bC_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n-CpuVertexBuffer(int numElements, int numVertices)\n-Constructor.\n+Return the number of vertices in this level.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bL_\be_\bv_\be_\bl_\b._\bh_\b:_\b6_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br\n+Stores topology data for a specified set of refinement options.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b5_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bI_\bs_\bU_\bn_\bi_\bf_\bo_\br_\bm\n+bool IsUniform() const\n+Returns true if uniform refinement has been applied.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b6_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs\n+int GetNumFVarChannels() const\n+Returns the number of face-varying channels in the tables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b2_\b9_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm\n+void RefineUniform(UniformOptions options)\n+Refine the topology uniformly.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bG_\be_\bt_\bL_\be_\bv_\be_\bl\n+TopologyLevel const & GetLevel(int level) const\n+Returns a handle to access data specific to a particular level.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b9_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be\n+void RefineAdaptive(AdaptiveOptions options, ConstIndexArray\n+selectedFaces=ConstIndexArray())\n+Feature Adaptive topology refinement.\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n+Uniform refinement options.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b1_\b1_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bf_\bu_\bl_\bl_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bn_\bL_\ba_\bs_\bt_\bL_\be_\bv_\be_\bl\n+unsigned int fullTopologyInLastLevel\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b1_\b3_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs\n+Adaptive refinement options.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b1_\b5_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bu_\bs_\be_\bS_\bi_\bn_\bg_\bl_\be_\bC_\br_\be_\ba_\bs_\be_\bP_\ba_\bt_\bc_\bh\n+unsigned int useSingleCreasePatch\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b1_\b7_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bu_\bs_\be_\bI_\bn_\bf_\bS_\bh_\ba_\br_\bp_\bP_\ba_\bt_\bc_\bh\n+unsigned int useInfSharpPatch\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b1_\b7_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bF_\ba_\br_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b:_\b:_\bA_\bd_\ba_\bp_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bc_\bo_\bn_\bs_\bi_\bd_\be_\br_\bF_\bV_\ba_\br_\bC_\bh_\ba_\bn_\bn_\be_\bl_\bs\n+unsigned int considerFVarChannels\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br_\b._\bh_\b:_\b1_\b8_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+BufferDescriptor is a struct which describes buffer elements in interleaved\n+data buffers....\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bb_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b6_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bs_\bt_\br_\bi_\bd_\be\n+int stride\n+stride to the next element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bb_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b1_\b0_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bl_\be_\bn_\bg_\bt_\bh\n+int length\n+number or length of the data\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bb_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b1_\b0_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bB_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b:_\b:_\bo_\bf_\bf_\bs_\be_\bt\n+int offset\n+offset to desired element data\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bb_\bu_\bf_\bf_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\b._\bh_\b:_\b9_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b6_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bG_\be_\bt_\bF_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+virtual Far::PatchTable const * GetFarPatchTable() const =0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\br_\be_\bf_\bi_\bn_\be_\bM_\be_\bs_\bh\n+static void refineMesh(Far::TopologyRefiner &refiner, int level, MeshBitset\n+bits)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b1_\b1_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bG_\be_\bt_\bM_\ba_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be\n+virtual int GetMaxValence() const =0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+virtual int GetNumVertices() const =0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bB_\bu_\bf_\bf_\be_\br\n+virtual void UpdateVaryingBuffer(float const *varyingData, int startVertex, int\n+numVerts)=0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\br_\be_\bf_\bi_\bn_\be_\bM_\be_\bs_\bh\n+static void refineMesh(Far::TopologyRefiner &refiner, int level, bool adaptive,\n+bool singleCreasePatch)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b1_\b0_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+virtual void UpdateVertexBuffer(float const *vertexData, int startVertex, int\n+numVerts)=0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+virtual PatchTable * GetPatchTable() const =0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\b~_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n+virtual ~MeshInterface()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b7_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n+MeshInterface()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b7_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be\n+virtual void Refine()=0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bB_\bi_\bn_\bd_\bi_\bn_\bg\n+PatchTable::VertexBufferBinding VertexBufferBinding\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b7_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bB_\bi_\bn_\bd_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+virtual VertexBufferBinding BindVertexBuffer()=0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bB_\bi_\bn_\bd_\bV_\ba_\br_\by_\bi_\bn_\bg_\bB_\bu_\bf_\bf_\be_\br\n+virtual VertexBufferBinding BindVaryingBuffer()=0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+PATCH_TABLE PatchTable\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b7_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b:_\b:_\bS_\by_\bn_\bc_\bh_\br_\bo_\bn_\bi_\bz_\be\n+virtual void Synchronize()=0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b1_\b8_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bG_\be_\bt_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n+EVALUATOR * GetEvaluator(BufferDescriptor const &srcDesc, BufferDescriptor\n+const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc,\n+DEVICE_CONTEXT *deviceContext)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b4_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bG_\be_\bt_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n+EVALUATOR * GetEvaluator(BufferDescriptor const &srcDesc, BufferDescriptor\n+const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc,\n+BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc,\n+BufferDescriptor const &dvvDesc, DEVICE_CONTEXT *deviceContext)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b5_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bG_\be_\bt_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n+EVALUATOR * GetEvaluator(BufferDescriptor const &srcDesc, BufferDescriptor\n+const &dstDesc, DEVICE_CONTEXT *deviceContext)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b2_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\b~_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT\n+~EvaluatorCacheT()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b1_\b8_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bs\n+std::vector< Entry > Evaluators\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b2_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bE_\bn_\bt_\br_\by\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b1_\b9_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bE_\bn_\bt_\br_\by_\b:_\b:_\bE_\bn_\bt_\br_\by\n+Entry(BufferDescriptor const &srcDescArg, BufferDescriptor const &dstDescArg,\n+BufferDescriptor const &duDescArg, BufferDescriptor const &dvDescArg,\n+BufferDescriptor const &duuDescArg, BufferDescriptor const &duvDescArg,\n+BufferDescriptor const &dvvDescArg, EVALUATOR *evalArg)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b0_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bE_\bn_\bt_\br_\by_\b:_\b:_\bd_\bv_\bv_\bD_\be_\bs_\bc\n+BufferDescriptor dvvDesc\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b2_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bE_\bn_\bt_\br_\by_\b:_\b:_\bd_\bu_\bv_\bD_\be_\bs_\bc\n+BufferDescriptor duvDesc\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b2_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bE_\bn_\bt_\br_\by_\b:_\b:_\bd_\bs_\bt_\bD_\be_\bs_\bc\n+BufferDescriptor dstDesc\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b2_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bE_\bn_\bt_\br_\by_\b:_\b:_\bd_\bu_\bD_\be_\bs_\bc\n+BufferDescriptor duDesc\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b2_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bE_\bn_\bt_\br_\by_\b:_\b:_\bs_\br_\bc_\bD_\be_\bs_\bc\n+BufferDescriptor srcDesc\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b2_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bE_\bn_\bt_\br_\by_\b:_\b:_\bd_\bu_\bu_\bD_\be_\bs_\bc\n+BufferDescriptor duuDesc\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b2_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bE_\bn_\bt_\br_\by_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n+EVALUATOR * evaluator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b2_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bE_\bn_\bt_\br_\by_\b:_\b:_\bE_\bn_\bt_\br_\by\n+Entry(BufferDescriptor const &srcDescArg, BufferDescriptor const &dstDescArg,\n+BufferDescriptor const &duDescArg, BufferDescriptor const &dvDescArg, EVALUATOR\n+*evalArg)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b1_\b9_\b7\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be_\bT_\b:_\b:_\bE_\bn_\bt_\br_\by_\b:_\b:_\bd_\bv_\bD_\be_\bs_\bc\n+BufferDescriptor dvDesc\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b2_\b2_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b1_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bG_\be_\bt_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bR_\be_\bf_\bi_\bn_\be_\br\n+virtual Far::TopologyRefiner const * GetTopologyRefiner() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b7_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bG_\be_\bt_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+virtual VertexBuffer * GetVertexBuffer()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b7_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bV_\ba_\br_\by_\bi_\bn_\bg_\bB_\bu_\bf_\bf_\be_\br\n+virtual void UpdateVaryingBuffer(float const *varyingData, int startVertex, int\n+numVerts)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b9_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bG_\be_\bt_\bV_\ba_\br_\by_\bi_\bn_\bg_\bB_\bu_\bf_\bf_\be_\br\n+virtual VertexBuffer * GetVaryingBuffer()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b7_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be\n+virtual void Refine()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b0_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bD_\be_\bv_\bi_\bc_\be_\bC_\bo_\bn_\bt_\be_\bx_\bt\n+DEVICE_CONTEXT DeviceContext\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b2_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br\n+EVALUATOR Evaluator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b2_\b1\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bB_\bi_\bn_\bd_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+virtual VertexBufferBinding BindVertexBuffer()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b6_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bG_\be_\bt_\bN_\bu_\bm_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+virtual int GetNumVertices() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b5_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bM_\be_\bs_\bh\n+Mesh(Far::TopologyRefiner *refiner, int numVertexElements, int\n+numVaryingElements, int level, MeshBitset bits=MeshBitset(), EvaluatorCache\n+*evaluatorCache=NULL, DeviceContext *deviceContext=NULL)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b2_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bS_\bt_\be_\bn_\bc_\bi_\bl_\bT_\ba_\bb_\bl_\be\n+STENCIL_TABLE StencilTable\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b2_\b2\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+VERTEX_BUFFER VertexBuffer\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b2_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\bC_\ba_\bc_\bh_\be\n+EvaluatorCacheT< Evaluator > EvaluatorCache\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b2_\b5\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bB_\bi_\bn_\bd_\bV_\ba_\br_\by_\bi_\bn_\bg_\bB_\bu_\bf_\bf_\be_\br\n+virtual VertexBufferBinding BindVaryingBuffer()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b6_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\b~_\bM_\be_\bs_\bh\n+virtual ~Mesh()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b7_\b8\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bB_\bi_\bn_\bd_\bi_\bn_\bg\n+PatchTable::VertexBufferBinding VertexBufferBinding\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b2_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br\n+virtual void UpdateVertexBuffer(float const *vertexData, int startVertex, int\n+numVerts)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b8_\b9\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bS_\by_\bn_\bc_\bh_\br_\bo_\bn_\bi_\bz_\be\n+virtual void Synchronize()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b4_\b6\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bG_\be_\bt_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+virtual PatchTable * GetPatchTable() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b5_\b0\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bG_\be_\bt_\bF_\ba_\br_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+virtual Far::PatchTable const * GetFarPatchTable() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b5_\b4\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bP_\ba_\bt_\bc_\bh_\bT_\ba_\bb_\bl_\be\n+PATCH_TABLE PatchTable\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b4_\b2_\b3\n+_\bO_\bp_\be_\bn_\bS_\bu_\bb_\bd_\bi_\bv_\b:_\b:_\bO_\bP_\bE_\bN_\bS_\bU_\bB_\bD_\bI_\bV_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b:_\b:_\bO_\bs_\bd_\b:_\b:_\bM_\be_\bs_\bh_\b:_\b:_\bG_\be_\bt_\bM_\ba_\bx_\bV_\ba_\bl_\be_\bn_\bc_\be\n+virtual int GetMaxValence() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn _\bm_\be_\bs_\bh_\b._\bh_\b:_\b5_\b6_\b0\n * _\bo_\bp_\be_\bn_\bs_\bu_\bb_\bd_\bi_\bv\n * _\bo_\bs_\bd\n- * _\bc_\bp_\bu_\bV_\be_\br_\bt_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\b._\bh\n+ * _\bm_\be_\bs_\bh_\b._\bh\n * Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00893.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00893.html", "unified_diff": "@@ -95,15 +95,15 @@\n Classes |\n Namespaces \n
    cpuPatchTable.h File Reference
    \n \n
    \n
    #include "../version.h"
    \n #include <vector>
    \n-#include "../far/patchDescriptor.h"
    \n+#include "../far/patchDescriptor.h"
    \n #include "../osd/nonCopyable.h"
    \n #include "../osd/types.h"
    \n
    \n

    Go to the source code of this file.

    \n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00893_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00893_source.html", "unified_diff": "@@ -261,18 +261,18 @@\n
    139
    \n
    140} // end namespace OPENSUBDIV_VERSION
    \n
    141using namespace OPENSUBDIV_VERSION;
    \n
    142
    \n
    143} // end namespace OpenSubdiv
    \n
    144
    \n
    145#endif // OPENSUBDIV3_OSD_CPU_PATCH_TABLE_H
    \n-\n+\n
    std::vector< PatchParam > PatchParamVector
    Definition types.h:133
    \n
    std::vector< PatchArray > PatchArrayVector
    Definition types.h:132
    \n-
    Container for arrays of parametric patches.
    Definition patchTable.h:55
    \n+
    Container for arrays of parametric patches.
    Definition patchTable.h:55
    \n \n
    const PatchArray * GetFVarPatchArrayBuffer(int fvarChannel=0) const
    \n \n \n
    size_t GetFVarPatchParamSize(int fvarChannel=0) const
    \n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00896_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00896_source.html", "unified_diff": "@@ -605,15 +605,15 @@\n
    1235} // end namespace OPENSUBDIV_VERSION
    \n
    1236using namespace OPENSUBDIV_VERSION;
    \n
    1237
    \n
    1238} // end namespace OpenSubdiv
    \n
    1239
    \n
    1240
    \n
    1241#endif // OPENSUBDIV3_OSD_CPU_EVALUATOR_H
    \n-\n+\n
    BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
    \n \n
    static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, CpuEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n
    static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, CpuEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n
    static bool EvalStencils(const float *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, const int *sizes, const int *offsets, const int *indices, const float *weights, int start, int end)
    Static eval stencils function which takes raw CPU pointers for input and output.
    \n
    static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, CpuEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n
    static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, CpuEvaluator const *instance=NULL, void *deviceContext=NULL)
    Generic limit eval function. This function has a same signature as other device kernels have so that ...
    \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00899_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00899_source.html", "unified_diff": "@@ -201,15 +201,15 @@\n
    106
    \n
    107} // end namespace OPENSUBDIV_VERSION
    \n
    108using namespace OPENSUBDIV_VERSION;
    \n
    109
    \n
    110} // end namespace OpenSubdiv
    \n
    111
    \n
    112#endif // OPENSUBDIV3_OSD_BUFFER_DESCRIPTOR_H
    \n-\n+\n
    BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
    \n \n
    void Reset()
    Resets the descriptor to default.
    \n \n \n \n
    bool operator!=(BufferDescriptor const &other) const
    True if the descriptors are not identical.
    \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00902_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00902_source.html", "unified_diff": "@@ -170,15 +170,15 @@\n
    82
    \n
    83} // end namespace OPENSUBDIV_VERSION
    \n
    84using namespace OPENSUBDIV_VERSION;
    \n
    85
    \n
    86} // end namespace OpenSubdiv
    \n
    87
    \n
    88#endif // OPENSUBDIV3_OSD_CUDA_VERTEX_BUFFER_H
    \n-\n+\n
    Concrete vertex buffer class for Cuda subdivision.
    \n \n \n
    int GetNumElements() const
    Returns how many elements defined in this vertex buffer.
    \n
    void UpdateData(const float *src, int startVertex, int numVertices, void *deviceContext=NULL)
    \n
    int GetNumVertices() const
    Returns how many vertices allocated in this vertex buffer.
    \n
    static CudaVertexBuffer * Create(int numElements, int numVertices, void *deviceContext=NULL)
    Creator. Returns NULL if error.
    \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00908.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00908.html", "unified_diff": "@@ -280,15 +280,15 @@\n

    \n Classes

    \n \n \n \n
    typedef Vtr::ConstArray<PatchDescriptor> ConstPatchDescriptorArray
    \n
    \n \n-

    Definition at line 146 of file patchDescriptor.h.

    \n+

    Definition at line 146 of file patchDescriptor.h.

    \n \n
    \n \n \n

    ◆ ConstPatchParamArray

    \n \n
    \n@@ -314,15 +314,15 @@\n

    typedef void(* ErrorCallbackFunc) (ErrorType err, const char *message)
    \n
    \n \n

    The error callback function type (default is \"printf\")

    \n \n-

    Definition at line 45 of file error.h.

    \n+

    Definition at line 45 of file error.h.

    \n \n
    \n \n \n

    ◆ Index

    \n \n
    \n@@ -428,15 +428,15 @@\n typedef void(* WarningCallbackFunc) (const char *message)\n \n \n
    \n \n

    The warning callback function type (default is \"printf\")

    \n \n-

    Definition at line 57 of file error.h.

    \n+

    Definition at line 57 of file error.h.

    \n \n
    \n \n

    Enumeration Type Documentation

    \n \n

    ◆ ErrorType

    \n \n@@ -457,15 +457,15 @@\n \n FAR_CODING_ERROR 

    Issue a generic programming error, but continue execution.

    \n \n FAR_RUNTIME_ERROR 

    Issue a generic runtime error, but continue execution.

    \n \n \n \n-

    Definition at line 35 of file error.h.

    \n+

    Definition at line 35 of file error.h.

    \n \n \n \n

    Function Documentation

    \n \n

    ◆ Error()

    \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00912.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00912.html", "unified_diff": "@@ -291,15 +291,15 @@\n \n \n \n \n
    typedef MeshInterface<D3D11PatchTable> D3D11MeshInterface
    \n
    \n \n-

    Definition at line 38 of file d3d11Mesh.h.

    \n+

    Definition at line 38 of file d3d11Mesh.h.

    \n \n
    \n \n \n

    ◆ GLMeshInterface

    \n \n
    \n@@ -307,15 +307,15 @@\n \n \n \n \n
    typedef MeshInterface<GLPatchTable> GLMeshInterface
    \n
    \n \n-

    Definition at line 38 of file glMesh.h.

    \n+

    Definition at line 38 of file glMesh.h.

    \n \n
    \n \n \n

    ◆ MeshBitset

    \n \n
    \n@@ -323,15 +323,15 @@\n \n \n \n \n
    typedef std::bitset<NUM_MESH_BITS> MeshBitset
    \n
    \n \n-

    Definition at line 63 of file mesh.h.

    \n+

    Definition at line 63 of file mesh.h.

    \n \n
    \n \n \n

    ◆ MTLMeshInterface

    \n \n
    \n@@ -339,15 +339,15 @@\n \n \n \n \n
    typedef MeshInterface<MTLPatchTable> MTLMeshInterface
    \n
    \n \n-

    Definition at line 38 of file mtlMesh.h.

    \n+

    Definition at line 38 of file mtlMesh.h.

    \n \n
    \n \n \n

    ◆ PatchArrayVector

    \n \n
    \n@@ -402,15 +402,15 @@\n MeshEndCapBilinearBasis \n MeshEndCapBSplineBasis \n MeshEndCapGregoryBasis \n MeshEndCapLegacyGregory \n NUM_MESH_BITS \n \n \n-

    Definition at line 49 of file mesh.h.

    \n+

    Definition at line 49 of file mesh.h.

    \n \n
    \n \n

    Function Documentation

    \n \n

    ◆ convertToCompatibleStencilTable()

    \n \n@@ -435,15 +435,15 @@\n \n )\n \n \n \n
    \n \n-

    Definition at line 141 of file mesh.h.

    \n+

    Definition at line 141 of file mesh.h.

    \n \n
    \n \n \n

    ◆ convertToCompatibleStencilTable< Far::LimitStencilTable, Far::LimitStencilTable, void >()

    \n \n
    \n@@ -475,15 +475,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 158 of file mesh.h.

    \n+

    Definition at line 158 of file mesh.h.

    \n \n
    \n \n \n

    ◆ convertToCompatibleStencilTable< Far::StencilTable, Far::StencilTable, ID3D11DeviceContext >()

    \n \n
    \n@@ -515,15 +515,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 168 of file mesh.h.

    \n+

    Definition at line 168 of file mesh.h.

    \n \n
    \n \n \n

    ◆ convertToCompatibleStencilTable< Far::StencilTable, Far::StencilTable, void >()

    \n \n
    \n@@ -555,15 +555,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 148 of file mesh.h.

    \n+

    Definition at line 148 of file mesh.h.

    \n \n
    \n \n \n

    ◆ OmpEvalStencils() [1/3]

    \n \n
    \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00917.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00917.html", "unified_diff": "@@ -97,29 +97,29 @@\n
    Limits Struct Reference
    \n
    \n
    \n \n

    Simple struct with limits related to topology. \n More...

    \n \n-

    #include <limits.h>

    \n+

    #include <limits.h>

    \n \n \n \n \n \n \n \n \n

    \n Static Public Member Functions

    static int MaxValence ()
     Returns the maximum allowable valence for a vertex.
     
    static int MaxFaceSize ()
     Returns the maximum allowable size for a face (number of vertices)
     
    \n

    Detailed Description

    \n

    Simple struct with limits related to topology.

    \n \n-

    Definition at line 40 of file limits.h.

    \n+

    Definition at line 40 of file limits.h.

    \n

    Member Function Documentation

    \n \n

    ◆ MaxFaceSize()

    \n \n
    \n
    \n \n@@ -138,15 +138,15 @@\n inlinestatic\n \n
    \n
    \n \n

    Returns the maximum allowable size for a face (number of vertices)

    \n \n-

    Definition at line 46 of file limits.h.

    \n+

    Definition at line 46 of file limits.h.

    \n \n
    \n
    \n \n

    ◆ MaxValence()

    \n \n
    \n@@ -167,20 +167,20 @@\n inlinestatic \n \n \n
    \n \n

    Returns the maximum allowable valence for a vertex.

    \n \n-

    Definition at line 42 of file limits.h.

    \n+

    Definition at line 42 of file limits.h.

    \n \n
    \n
    \n
    The documentation for this struct was generated from the following file:\n \n \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Bfr
    • Limits
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00921.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00921.html", "unified_diff": "@@ -97,15 +97,15 @@\n
      Parameterization Class Reference
      \n
    \n
    \n \n

    Simple class defining the 2D parameterization of a face. \n More...

    \n \n-

    #include <parameterization.h>

    \n+

    #include <parameterization.h>

    \n \n \n \n

    \n Public Types

    enum  Type {
    \n   QUAD\n ,
    \n   TRI\n@@ -192,15 +192,15 @@\n
     
    \n

    Detailed Description

    \n

    Simple class defining the 2D parameterization of a face.

    \n

    Parameterization is a simple class that provides information about the parameterization of a face in a local (u,v) coordinate system. It is defined by the size of a face (i.e. its number of vertices) and the subdivision scheme that determines its limit surface.

    \n

    As an example of how the subdivision scheme is essential in determining the Parameterization, consider the case of a triangle. A triangle is regular for the Loop scheme and so has a very simple parameterization as a triangular patch. But for the Catmull-Clark scheme, a triangle is an irregular face that must first be subdivided – making its limit surface a piecewise collection of quadrilateral patches.

    \n \n-

    Definition at line 52 of file parameterization.h.

    \n+

    Definition at line 52 of file parameterization.h.

    \n

    Member Enumeration Documentation

    \n \n

    ◆ Type

    \n \n
    \n
    \n \n@@ -217,15 +217,15 @@\n \n \n \n
    TRI 

    Triangle.

    \n
    QUAD_SUBFACES 

    Partitioned into quadrilateral sub-faces.

    \n
    \n \n-

    Definition at line 62 of file parameterization.h.

    \n+

    Definition at line 62 of file parameterization.h.

    \n \n
    \n
    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ Parameterization() [1/3]

    \n \n@@ -277,15 +277,15 @@\n inline \n \n \n
    \n \n

    Default construction produces an invalid instance.

    \n \n-

    Definition at line 84 of file parameterization.h.

    \n+

    Definition at line 84 of file parameterization.h.

    \n \n
    \n \n \n

    ◆ Parameterization() [3/3]

    \n \n
    \n@@ -371,15 +371,15 @@\n inline \n \n \n
    \n \n

    Convert (u,v) to a sub-face (return value) and its normalized (u,v) coordinate.

    \n \n-

    Definition at line 229 of file parameterization.h.

    \n+

    Definition at line 229 of file parameterization.h.

    \n \n
    \n \n \n

    ◆ ConvertCoordToSubFace()

    \n \n
    \n@@ -413,15 +413,15 @@\n inline \n \n \n
    \n \n

    Convert (u,v) to a sub-face (return value) and its local (u,v) coordinate.

    \n \n-

    Definition at line 215 of file parameterization.h.

    \n+

    Definition at line 215 of file parameterization.h.

    \n \n
    \n \n \n

    ◆ ConvertNormalizedSubFaceToCoord()

    \n \n
    \n@@ -461,15 +461,15 @@\n inline \n \n \n
    \n \n

    Convert a sub-face and its normalized (u,v) coordinate to (u,v)

    \n \n-

    Definition at line 235 of file parameterization.h.

    \n+

    Definition at line 235 of file parameterization.h.

    \n \n
    \n \n \n

    ◆ ConvertSubFaceToCoord()

    \n \n
    \n@@ -509,15 +509,15 @@\n inline \n \n \n
    \n \n

    Convert a sub-face and its local (u,v) coordinate to (u,v)

    \n \n-

    Definition at line 221 of file parameterization.h.

    \n+

    Definition at line 221 of file parameterization.h.

    \n \n
    \n \n \n

    ◆ GetCenterCoord()

    \n \n
    \n@@ -598,15 +598,15 @@\n inline \n \n \n
    \n \n

    Returns the size (number of vertices) of the corresponding face.

    \n \n-

    Definition at line 101 of file parameterization.h.

    \n+

    Definition at line 101 of file parameterization.h.

    \n \n
    \n \n \n

    ◆ GetSubFace()

    \n \n
    \n@@ -630,15 +630,15 @@\n inline \n \n \n
    \n \n

    Returns the integer sub-face containing the given (u,v)

    \n \n-

    Definition at line 202 of file parameterization.h.

    \n+

    Definition at line 202 of file parameterization.h.

    \n \n
    \n \n \n

    ◆ GetType()

    \n \n
    \n@@ -659,15 +659,15 @@\n inline \n \n \n
    \n \n

    Returns the type of parameterization assigned.

    \n \n-

    Definition at line 98 of file parameterization.h.

    \n+

    Definition at line 98 of file parameterization.h.

    \n \n
    \n \n \n

    ◆ GetVertexCoord()

    \n \n
    \n@@ -720,15 +720,15 @@\n inline \n \n \n
    \n \n

    Returns if Parameterization has been partitioned into sub-faces.

    \n \n-

    Definition at line 196 of file parameterization.h.

    \n+

    Definition at line 196 of file parameterization.h.

    \n \n
    \n \n \n

    ◆ IsValid()

    \n \n
    \n@@ -749,15 +749,15 @@\n inline \n \n \n
    \n \n

    Returns true if correctly initialized.

    \n \n-

    Definition at line 81 of file parameterization.h.

    \n+

    Definition at line 81 of file parameterization.h.

    \n \n
    \n \n \n

    ◆ operator=()

    \n \n
    \n@@ -780,15 +780,15 @@\n \n \n
    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Bfr
    • Parameterization
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00949.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00949.html", "unified_diff": "@@ -97,15 +97,15 @@\n
      SurfaceFactoryCache Class Reference
      \n
    \n
    \n \n

    Container used internally by SurfaceFactory to store reusable information. \n More...

    \n \n-

    #include <surfaceFactoryCache.h>

    \n+

    #include <surfaceFactoryCache.h>

    \n
    \n Inheritance diagram for SurfaceFactoryCache:
    \n
    \n
    \n \"\"/\n \n \"SurfaceFactoryCacheThreaded<\n@@ -124,15 +124,15 @@\n  \n \n

    Detailed Description

    \n

    Container used internally by SurfaceFactory to store reusable information.

    \n

    SurfaceFactoryCache is a container for storing/caching instances of the internal representation of complex patches used by SurfaceFactory so that they can be quickly identified and retrieved for reuse.

    \n

    It is intended for internal use by SurfaceFactory. Public access is available but limited to construction only – allowing an instance to be reused by assigning it to more than one SurfaceFactory.

    \n \n-

    Definition at line 59 of file surfaceFactoryCache.h.

    \n+

    Definition at line 59 of file surfaceFactoryCache.h.

    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ SurfaceFactoryCache() [1/2]

    \n \n
    \n
    \n \n@@ -222,15 +222,15 @@\n \n
    \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n
    \n
    \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Bfr
    • SurfaceFactoryCache
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00953.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00953.html", "unified_diff": "@@ -97,15 +97,15 @@\n
      SurfaceFactoryCacheThreaded< MUTEX_TYPE, READ_LOCK_GUARD_TYPE, WRITE_LOCK_GUARD_TYPE > Class Template Reference
      \n
    \n
    \n \n

    Template for declaring thread-safe subclasses of SurfaceFactoryCache. \n More...

    \n \n-

    #include <surfaceFactoryCache.h>

    \n+

    #include <surfaceFactoryCache.h>

    \n
    \n Inheritance diagram for SurfaceFactoryCacheThreaded< MUTEX_TYPE, READ_LOCK_GUARD_TYPE, WRITE_LOCK_GUARD_TYPE >:
    \n
    \n
    \n \"\"/\n \n \"SurfaceFactoryCache\"\n@@ -137,15 +137,15 @@\n MUTEX_TYPEA mutex type with supported lock guards \n READ_LOCK_GUARD_TYPEA scoped lock guard allowing potentially shared access for read operations. \n WRITE_LOCK_GUARD_TYPEA scoped lock guard allowing exclusive access for write operations. \n \n \n \n \n-

    Definition at line 118 of file surfaceFactoryCache.h.

    \n+

    Definition at line 118 of file surfaceFactoryCache.h.

    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ SurfaceFactoryCacheThreaded()

    \n \n
    \n
    \n
    \n@@ -164,15 +164,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 120 of file surfaceFactoryCache.h.

    \n+

    Definition at line 120 of file surfaceFactoryCache.h.

    \n \n
    \n
    \n \n

    ◆ ~SurfaceFactoryCacheThreaded()

    \n \n
    \n@@ -196,15 +196,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n
    \n
    \n \n
    \n
    \n
    \n \n

    Abstract interface adapting SurfaceFactory to a connected mesh representation. \n More...

    \n \n-

    #include <surfaceFactoryMeshAdapter.h>

    \n+

    #include <surfaceFactoryMeshAdapter.h>

    \n
    \n Inheritance diagram for SurfaceFactoryMeshAdapter:
    \n
    \n
    \n \"\"/\n \n \"SurfaceFactory\"\n@@ -171,15 +171,15 @@\n  \n virtual bool getFaceNeighborhoodFVarValueIndicesIfRegular (Index faceIndex, FVarID fvarID, Index fvarValueIndices[]) const\n  \n \n

    Detailed Description

    \n

    Abstract interface adapting SurfaceFactory to a connected mesh representation.

    \n \n-

    Definition at line 65 of file surfaceFactoryMeshAdapter.h.

    \n+

    Definition at line 65 of file surfaceFactoryMeshAdapter.h.

    \n

    Member Typedef Documentation

    \n \n

    ◆ FVarID

    \n \n
    \n
    \n \n@@ -189,15 +189,15 @@\n
    \n
    \n \n

    Type used to identify and specify face-varying primvars.

    \n

    A face-varying ID is used to specify face-varying primvars for evaluation so that they can be identified by the subclass for the mesh. It can be assigned as either a positive integer ID or pointer, with the subclass determining its interpretation.

    \n

    Often only one face-varying primvar is of interest, so a default can be assigned to the factory to avoid repeated specification.

    \n \n-

    Definition at line 80 of file surfaceFactoryMeshAdapter.h.

    \n+

    Definition at line 80 of file surfaceFactoryMeshAdapter.h.

    \n \n
    \n
    \n \n

    ◆ Index

    \n \n
    \n@@ -207,15 +207,15 @@\n typedef int Index\n \n \n
    \n \n

    Integer type representing a mesh index.

    \n \n-

    Definition at line 68 of file surfaceFactoryMeshAdapter.h.

    \n+

    Definition at line 68 of file surfaceFactoryMeshAdapter.h.

    \n \n
    \n
    \n

    Member Function Documentation

    \n \n

    ◆ getFaceFVarValueIndices()

    \n \n@@ -296,15 +296,15 @@\n \n \n inlineprotectedvirtual \n \n \n
    \n \n-

    Definition at line 224 of file surfaceFactoryMeshAdapter.h.

    \n+

    Definition at line 224 of file surfaceFactoryMeshAdapter.h.

    \n \n
    \n
    \n \n

    ◆ getFaceNeighborhoodVertexIndicesIfRegular()

    \n \n
    \n@@ -334,15 +334,15 @@\n \n \n inlineprotectedvirtual \n \n \n
    \n \n-

    Definition at line 218 of file surfaceFactoryMeshAdapter.h.

    \n+

    Definition at line 218 of file surfaceFactoryMeshAdapter.h.

    \n \n
    \n
    \n \n

    ◆ getFaceSize()

    \n \n
    \n@@ -571,15 +571,15 @@\n
    \n \n

    Describe the topology of incident faces around a face-vertex.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
    \n
    \n \n

    Encapsulates a specific tessellation pattern of a Parameterization. \n More...

    \n \n-

    #include <tessellation.h>

    \n+

    #include <tessellation.h>

    \n \n \n \n \n \n

    \n Classes

    class  Options
     Options configure a Tessellation to specify the nature of both its results and the structure of the coordinate and facet index arrays that its methods will populate. More...
     
    \n@@ -219,15 +219,15 @@\n \n
     
    \n

    Detailed Description

    \n

    Encapsulates a specific tessellation pattern of a Parameterization.

    \n

    Tessellation is a simple class that encapsulates a specified tessellation pattern for a given Parameterization. Tessellation parameters are given on construction and are fixed for its lifetime.

    \n

    Methods allow inspection of the pattern in terms of the 2D coordinates of the points comprising the pattern and the faces that connect them. The 2D coordinates are referred to both in the documentation and the interface as \"coords\" while the faces connecting them are referred to as \"facets\" (to distinguish from the faces of the mesh, to which a Tessellation is applied).

    \n \n-

    Definition at line 51 of file tessellation.h.

    \n+

    Definition at line 51 of file tessellation.h.

    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ Tessellation() [1/4]

    \n \n
    \n
    \n \n@@ -445,15 +445,15 @@\n inline\n \n
    \n
    \n \n

    Retrieve the coordinates for the entire pattern.

    \n \n-

    Definition at line 372 of file tessellation.h.

    \n+

    Definition at line 372 of file tessellation.h.

    \n \n
    \n
    \n \n

    ◆ GetCoordStride()

    \n \n
    \n@@ -474,15 +474,15 @@\n inline \n \n \n
    \n \n

    Return the number of elements between each coordinate.

    \n \n-

    Definition at line 208 of file tessellation.h.

    \n+

    Definition at line 208 of file tessellation.h.

    \n \n
    \n
    \n \n

    ◆ GetEdgeCoords()

    \n \n
    \n@@ -535,15 +535,15 @@\n inline \n \n \n
    \n \n

    Return the size of the face.

    \n \n-

    Definition at line 182 of file tessellation.h.

    \n+

    Definition at line 182 of file tessellation.h.

    \n \n
    \n \n \n

    ◆ GetFacets()

    \n \n
    \n@@ -584,15 +584,15 @@\n inline \n \n \n
    \n \n

    Return the number of indices assigned to each facet.

    \n \n-

    Definition at line 258 of file tessellation.h.

    \n+

    Definition at line 258 of file tessellation.h.

    \n \n
    \n \n \n

    ◆ GetFacetStride()

    \n \n
    \n@@ -613,15 +613,15 @@\n inline \n \n \n
    \n \n

    Return the number of elements between each facet.

    \n \n-

    Definition at line 261 of file tessellation.h.

    \n+

    Definition at line 261 of file tessellation.h.

    \n \n
    \n \n \n

    ◆ GetInteriorCoords()

    \n \n
    \n@@ -664,15 +664,15 @@\n inline \n \n \n
    \n \n

    Return the number of boundary coordinates.

    \n \n-

    Definition at line 211 of file tessellation.h.

    \n+

    Definition at line 211 of file tessellation.h.

    \n \n
    \n \n \n

    ◆ GetNumCoords()

    \n \n
    \n@@ -693,15 +693,15 @@\n inline \n \n \n
    \n \n

    Return the number of coordinates in the entire pattern.

    \n \n-

    Definition at line 205 of file tessellation.h.

    \n+

    Definition at line 205 of file tessellation.h.

    \n \n
    \n \n \n

    ◆ GetNumEdgeCoords()

    \n \n
    \n@@ -723,15 +723,15 @@\n inline \n \n \n
    \n \n

    Return the number of coordinates within a given edge (excluding those at its end vertices)

    \n \n-

    Definition at line 218 of file tessellation.h.

    \n+

    Definition at line 218 of file tessellation.h.

    \n \n
    \n \n \n

    ◆ GetNumFacets()

    \n \n
    \n@@ -752,15 +752,15 @@\n inline \n \n \n
    \n \n

    Return the number of facets in the entire pattern.

    \n \n-

    Definition at line 255 of file tessellation.h.

    \n+

    Definition at line 255 of file tessellation.h.

    \n \n
    \n \n \n

    ◆ GetNumInteriorCoords()

    \n \n
    \n@@ -781,15 +781,15 @@\n inline \n \n \n
    \n \n

    Return the number of interior coordinates.

    \n \n-

    Definition at line 214 of file tessellation.h.

    \n+

    Definition at line 214 of file tessellation.h.

    \n \n
    \n \n \n

    ◆ GetParameterization()

    \n \n
    \n@@ -810,15 +810,15 @@\n inline \n \n \n
    \n \n

    Return the Parameterization.

    \n \n-

    Definition at line 179 of file tessellation.h.

    \n+

    Definition at line 179 of file tessellation.h.

    \n \n
    \n \n \n

    ◆ GetRates()

    \n \n
    \n@@ -872,15 +872,15 @@\n inline \n \n \n
    \n \n

    Retrieve the coordinate for a given vertex of the face.

    \n \n-

    Definition at line 365 of file tessellation.h.

    \n+

    Definition at line 365 of file tessellation.h.

    \n \n
    \n \n \n

    ◆ IsUniform()

    \n \n
    \n@@ -901,15 +901,15 @@\n inline \n \n \n
    \n \n

    Return if the pattern is uniform.

    \n \n-

    Definition at line 188 of file tessellation.h.

    \n+

    Definition at line 188 of file tessellation.h.

    \n \n
    \n \n \n

    ◆ IsValid()

    \n \n
    \n@@ -930,15 +930,15 @@\n inline \n \n \n
    \n \n

    Return true if correctly initialized.

    \n \n-

    Definition at line 162 of file tessellation.h.

    \n+

    Definition at line 162 of file tessellation.h.

    \n \n
    \n \n \n

    ◆ operator=()

    \n \n
    \n@@ -1063,15 +1063,15 @@\n
    \n \n

    Reassign indices of boundary coordinates while offseting those of interior coordinates.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Bfr
    • Tessellation
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00965.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00965.html", "unified_diff": "@@ -97,15 +97,15 @@\n
      Tessellation::Options Class Reference
      \n
    \n
    \n \n

    Options configure a Tessellation to specify the nature of both its results and the structure of the coordinate and facet index arrays that its methods will populate. \n More...

    \n \n-

    #include <tessellation.h>

    \n+

    #include <tessellation.h>

    \n \n \n \n \n \n \n@@ -132,15 +132,15 @@\n \n

    \n Public Member Functions

     Options ()
     
    OptionsPreserveQuads (bool on)
     Select preservation of quads for quad-based subdivision (requires 4-sided facets, default is off)
     
    \n

    Detailed Description

    \n

    Options configure a Tessellation to specify the nature of both its results and the structure of the coordinate and facet index arrays that its methods will populate.

    \n

    The sizes and strides of the target arrays should be specified explicitly as they are not inferred by the presence of other options.

    \n

    Modifiers of Options return a reference to itself to facilitate inline usage.

    \n \n-

    Definition at line 65 of file tessellation.h.

    \n+

    Definition at line 65 of file tessellation.h.

    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ Options()

    \n \n
    \n
    \n \n@@ -157,15 +157,15 @@\n \n \n \n
    \n inline
    \n
    \n \n-

    Definition at line 67 of file tessellation.h.

    \n+

    Definition at line 67 of file tessellation.h.

    \n \n
    \n
    \n

    Member Function Documentation

    \n \n

    ◆ GetCoordStride()

    \n \n@@ -187,15 +187,15 @@\n inline \n \n \n
    \n \n

    Return the stride between (u,v) pairs.

    \n \n-

    Definition at line 90 of file tessellation.h.

    \n+

    Definition at line 90 of file tessellation.h.

    \n \n
    \n \n \n

    ◆ GetFacetSize()

    \n \n
    \n@@ -214,15 +214,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 80 of file tessellation.h.

    \n+

    Definition at line 80 of file tessellation.h.

    \n \n
    \n \n \n

    ◆ GetFacetStride()

    \n \n
    \n@@ -243,15 +243,15 @@\n inline \n \n \n
    \n \n

    Return the stride between facets.

    \n \n-

    Definition at line 85 of file tessellation.h.

    \n+

    Definition at line 85 of file tessellation.h.

    \n \n
    \n \n \n

    ◆ PreserveQuads() [1/2]

    \n \n
    \n@@ -272,15 +272,15 @@\n inline \n \n \n
    \n \n

    Return if preservation of quads is set.

    \n \n-

    Definition at line 74 of file tessellation.h.

    \n+

    Definition at line 74 of file tessellation.h.

    \n \n
    \n \n \n

    ◆ PreserveQuads() [2/2]

    \n \n
    \n@@ -302,15 +302,15 @@\n inline \n \n \n
    \n \n

    Select preservation of quads for quad-based subdivision (requires 4-sided facets, default is off)

    \n \n-

    Definition at line 343 of file tessellation.h.

    \n+

    Definition at line 343 of file tessellation.h.

    \n \n
    \n \n \n

    ◆ SetCoordStride()

    \n \n
    \n@@ -332,15 +332,15 @@\n inline \n \n \n
    \n \n

    Assign the stride between (u,v) pairs (default is 2)

    \n \n-

    Definition at line 358 of file tessellation.h.

    \n+

    Definition at line 358 of file tessellation.h.

    \n \n
    \n \n \n

    ◆ SetFacetSize()

    \n \n
    \n@@ -362,15 +362,15 @@\n inline \n \n \n
    \n \n

    Assign the number of indices per facet (must be 3 or 4, default is 3)

    \n \n-

    Definition at line 348 of file tessellation.h.

    \n+

    Definition at line 348 of file tessellation.h.

    \n \n
    \n \n \n

    ◆ SetFacetStride()

    \n \n
    \n@@ -392,20 +392,20 @@\n inline \n \n \n
    \n \n

    Assign the stride between facets (default is facet size)

    \n \n-

    Definition at line 353 of file tessellation.h.

    \n+

    Definition at line 353 of file tessellation.h.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Bfr
    • Tessellation
    • Options
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00969.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00969.html", "unified_diff": "@@ -96,15 +96,15 @@\n
      VertexDescriptor Class Reference
      \n
    \n
    \n \n

    Simple class used by subclasses of SurfaceFactory to describe a vertex. \n More...

    \n \n-

    #include <vertexDescriptor.h>

    \n+

    #include <vertexDescriptor.h>

    \n \n \n \n \n \n@@ -178,15 +178,15 @@\n \n

    \n Public Member Functions

    Methods to begin and end specification

    Partially constructed instances are populated using a set of methods between calls to Initialize() and Finalize(). Both return false to indicate failure due to invalid input, or the instance can be inspected after each to determine if valid.

    \n
    bool Initialize (int numIncidentFaces)
     
    \n

    Detailed Description

    \n

    Simple class used by subclasses of SurfaceFactory to describe a vertex.

    \n

    VertexDescriptor is a simple class used by SurfaceFactory and its subclasses to provide a complete topological description around the vertex of a face, i.e. its valence, the sizes of its incident faces, sharpness values, etc.

    \n

    Instances are created and partially initialized by SurfaceFactory before being passed to its subclasses to be fully populated. So public construction is not available (or useful).

    \n \n-

    Definition at line 131 of file vertexDescriptor.h.

    \n+

    Definition at line 131 of file vertexDescriptor.h.

    \n

    Member Function Documentation

    \n \n

    ◆ ClearEdgeSharpness()

    \n \n
    \n
    \n \n@@ -205,15 +205,15 @@\n inline\n \n
    \n
    \n \n

    Remove any sharpness assigned to the incident edges.

    \n \n-

    Definition at line 398 of file vertexDescriptor.h.

    \n+

    Definition at line 398 of file vertexDescriptor.h.

    \n \n
    \n
    \n \n

    ◆ ClearIncidentFaceSizes()

    \n \n
    \n@@ -234,15 +234,15 @@\n inline \n \n \n
    \n \n

    Remove any assigned sizes of incident faces.

    \n \n-

    Definition at line 350 of file vertexDescriptor.h.

    \n+

    Definition at line 350 of file vertexDescriptor.h.

    \n \n
    \n
    \n \n

    ◆ ClearVertexSharpness()

    \n \n
    \n@@ -263,15 +263,15 @@\n inline \n \n \n
    \n \n

    Remove any sharpness assigned to the vertex.

    \n \n-

    Definition at line 377 of file vertexDescriptor.h.

    \n+

    Definition at line 377 of file vertexDescriptor.h.

    \n \n
    \n \n \n

    ◆ Finalize()

    \n \n
    \n@@ -328,15 +328,15 @@\n inline \n \n \n
    \n \n

    Return the sharpness assigned to edges of an incident face.

    \n \n-

    Definition at line 436 of file vertexDescriptor.h.

    \n+

    Definition at line 436 of file vertexDescriptor.h.

    \n \n
    \n \n \n

    ◆ GetIncidentFaceSize()

    \n \n
    \n@@ -358,15 +358,15 @@\n inline \n \n \n
    \n \n

    Return the size of an incident face.

    \n \n-

    Definition at line 362 of file vertexDescriptor.h.

    \n+

    Definition at line 362 of file vertexDescriptor.h.

    \n \n
    \n \n \n

    ◆ GetManifoldEdgeSharpness()

    \n \n
    \n@@ -388,15 +388,15 @@\n inline \n \n \n
    \n \n

    Return the sharpness assigned to a manifold edge.

    \n \n-

    Definition at line 420 of file vertexDescriptor.h.

    \n+

    Definition at line 420 of file vertexDescriptor.h.

    \n \n
    \n \n \n

    ◆ GetVertexSharpness()

    \n \n
    \n@@ -417,15 +417,15 @@\n inline \n \n \n
    \n \n

    Return the sharpness of the vertex.

    \n \n-

    Definition at line 386 of file vertexDescriptor.h.

    \n+

    Definition at line 386 of file vertexDescriptor.h.

    \n \n
    \n \n \n

    ◆ HasEdgeSharpness()

    \n \n
    \n@@ -446,15 +446,15 @@\n inline \n \n \n
    \n \n

    Return if sharpness was assigned to the incident edges.

    \n \n-

    Definition at line 394 of file vertexDescriptor.h.

    \n+

    Definition at line 394 of file vertexDescriptor.h.

    \n \n
    \n \n \n

    ◆ HasIncidentFaceSizes()

    \n \n
    \n@@ -475,15 +475,15 @@\n inline \n \n \n
    \n \n

    Return if the sizes of incident faces are assigned.

    \n \n-

    Definition at line 346 of file vertexDescriptor.h.

    \n+

    Definition at line 346 of file vertexDescriptor.h.

    \n \n
    \n \n \n

    ◆ HasVertexSharpness()

    \n \n
    \n@@ -504,15 +504,15 @@\n inline \n \n \n
    \n \n

    Return if sharpness was assigned to the vertex.

    \n \n-

    Definition at line 373 of file vertexDescriptor.h.

    \n+

    Definition at line 373 of file vertexDescriptor.h.

    \n \n
    \n \n \n

    ◆ Initialize()

    \n \n
    \n@@ -553,15 +553,15 @@\n inline \n \n \n
    \n \n

    Return if vertex neighborhood is on a boundary.

    \n \n-

    Definition at line 338 of file vertexDescriptor.h.

    \n+

    Definition at line 338 of file vertexDescriptor.h.

    \n \n
    \n \n \n

    ◆ IsManifold()

    \n \n
    \n@@ -582,15 +582,15 @@\n inline \n \n \n
    \n \n

    Return if vertex neighborhood is manifold.

    \n \n-

    Definition at line 329 of file vertexDescriptor.h.

    \n+

    Definition at line 329 of file vertexDescriptor.h.

    \n \n
    \n \n \n

    ◆ IsValid()

    \n \n
    \n@@ -611,15 +611,15 @@\n inline \n \n \n
    \n \n

    Return if instance is valid.

    \n \n-

    Definition at line 320 of file vertexDescriptor.h.

    \n+

    Definition at line 320 of file vertexDescriptor.h.

    \n \n
    \n \n \n

    ◆ SetBoundary()

    \n \n
    \n@@ -641,15 +641,15 @@\n inline \n \n \n
    \n \n

    Declare the vertex neighborhood as being on a boundary.

    \n \n-

    Definition at line 334 of file vertexDescriptor.h.

    \n+

    Definition at line 334 of file vertexDescriptor.h.

    \n \n
    \n \n \n

    ◆ SetIncidentFaceEdgeSharpness()

    \n \n
    \n@@ -696,15 +696,15 @@\n faceIndexIndex of the incident face \n leadingEdgeSharpSharpness to assign to the leading edge of the incident face, i.e. the edge of the face following the vertex. \n trailingEdgeSharpSharpness to assign to the trailing edge of the incident face, i.e. the edge of the face preceding the vertex. \n \n \n \n \n-

    Definition at line 427 of file vertexDescriptor.h.

    \n+

    Definition at line 427 of file vertexDescriptor.h.

    \n \n
    \n \n \n

    ◆ SetIncidentFaceSize()

    \n \n
    \n@@ -736,15 +736,15 @@\n inline \n \n \n
    \n \n

    Assign the size of an incident face.

    \n \n-

    Definition at line 355 of file vertexDescriptor.h.

    \n+

    Definition at line 355 of file vertexDescriptor.h.

    \n \n
    \n \n \n

    ◆ SetManifold()

    \n \n
    \n@@ -766,15 +766,15 @@\n inline \n \n \n
    \n \n

    Declare the vertex neighborhood as manifold (ordered)

    \n \n-

    Definition at line 325 of file vertexDescriptor.h.

    \n+

    Definition at line 325 of file vertexDescriptor.h.

    \n \n
    \n \n \n

    ◆ SetManifoldEdgeSharpness()

    \n \n
    \n@@ -814,15 +814,15 @@\n \n \n \n
    edgeIndexIndex of the edge in the ordered sequence
    edgeSharpnessSharpness to be assigned to the edge
    \n \n \n \n-

    Definition at line 403 of file vertexDescriptor.h.

    \n+

    Definition at line 403 of file vertexDescriptor.h.

    \n \n
    \n \n \n

    ◆ SetVertexSharpness()

    \n \n
    \n@@ -844,20 +844,20 @@\n inline \n \n \n
    \n \n

    Assign sharpness to the vertex.

    \n \n-

    Definition at line 382 of file vertexDescriptor.h.

    \n+

    Definition at line 382 of file vertexDescriptor.h.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Bfr
    • VertexDescriptor
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00973.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00973.html", "unified_diff": "@@ -99,15 +99,15 @@\n
      PatchDescriptor Class Reference
      \n
    \n
    \n \n

    Describes the type of a patch. \n More...

    \n \n-

    #include <patchDescriptor.h>

    \n+

    #include <patchDescriptor.h>

    \n \n \n \n \n

    \n Public Types

    enum  Type {
    \n   NON_PATCH = 0\n ,
    \n   POINTS\n@@ -192,15 +192,15 @@\n
     Returns a vector of all the legal patch descriptors for the given adaptive subdivision scheme.
     
    \n

    Detailed Description

    \n

    Describes the type of a patch.

    \n

    Uniquely identifies all the different types of patches

    \n \n-

    Definition at line 44 of file patchDescriptor.h.

    \n+

    Definition at line 44 of file patchDescriptor.h.

    \n

    Member Enumeration Documentation

    \n \n

    ◆ Type

    \n \n
    \n
    \n \n@@ -226,15 +226,15 @@\n \n \n \n \n \n
    GREGORY 
    GREGORY_BOUNDARY 
    GREGORY_BASIS 
    GREGORY_TRIANGLE 
    \n \n-

    Definition at line 48 of file patchDescriptor.h.

    \n+

    Definition at line 48 of file patchDescriptor.h.

    \n \n
    \n
    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ PatchDescriptor() [1/3]

    \n \n@@ -256,15 +256,15 @@\n inline \n \n \n
    \n \n

    Default constructor.

    \n \n-

    Definition at line 69 of file patchDescriptor.h.

    \n+

    Definition at line 69 of file patchDescriptor.h.

    \n \n
    \n \n \n

    ◆ PatchDescriptor() [2/3]

    \n \n
    \n@@ -286,15 +286,15 @@\n inline \n \n \n
    \n \n

    Constructor.

    \n \n-

    Definition at line 73 of file patchDescriptor.h.

    \n+

    Definition at line 73 of file patchDescriptor.h.

    \n \n
    \n \n \n

    ◆ PatchDescriptor() [3/3]

    \n \n
    \n@@ -316,15 +316,15 @@\n inline \n \n \n
    \n \n

    Copy Constructor.

    \n \n-

    Definition at line 77 of file patchDescriptor.h.

    \n+

    Definition at line 77 of file patchDescriptor.h.

    \n \n
    \n \n

    Member Function Documentation

    \n \n

    ◆ GetAdaptivePatchDescriptors()

    \n \n@@ -374,15 +374,15 @@\n inlinestatic \n \n \n
    \n \n

    Number of control vertices of Gregory patch basis (20)

    \n \n-

    Definition at line 126 of file patchDescriptor.h.

    \n+

    Definition at line 126 of file patchDescriptor.h.

    \n \n
    \n \n \n

    ◆ GetGregoryPatchSize()

    \n \n
    \n@@ -403,15 +403,15 @@\n inlinestatic \n \n \n
    \n \n

    Number of control vertices of Gregory (and Gregory Boundary) Patches in table.

    \n \n-

    Definition at line 123 of file patchDescriptor.h.

    \n+

    Definition at line 123 of file patchDescriptor.h.

    \n \n
    \n \n \n

    ◆ GetNumControlVertices() [1/2]

    \n \n
    \n@@ -432,15 +432,15 @@\n inline \n \n \n
    \n \n

    Returns the number of control vertices expected for a patch of the type described.

    \n \n-

    Definition at line 110 of file patchDescriptor.h.

    \n+

    Definition at line 110 of file patchDescriptor.h.

    \n \n
    \n \n \n

    ◆ GetNumControlVertices() [2/2]

    \n \n
    \n@@ -462,15 +462,15 @@\n inlinestatic \n \n \n
    \n \n

    Returns the number of control vertices expected for a patch of the type described.

    \n \n-

    Definition at line 150 of file patchDescriptor.h.

    \n+

    Definition at line 150 of file patchDescriptor.h.

    \n \n
    \n \n \n

    ◆ GetNumFVarControlVertices() [1/2]

    \n \n
    \n@@ -492,15 +492,15 @@\n \n \n
    \n \n

    Deprecated.

    \n
    See also
    PatchDescriptor::GetNumControlVertices
    \n \n-

    Definition at line 115 of file patchDescriptor.h.

    \n+

    Definition at line 115 of file patchDescriptor.h.

    \n \n
    \n \n \n

    ◆ GetNumFVarControlVertices() [2/2]

    \n \n
    \n@@ -523,15 +523,15 @@\n \n \n
    \n \n

    Deprecated.

    \n
    See also
    PatchDescriptor::GetNumControlVertices
    \n \n-

    Definition at line 168 of file patchDescriptor.h.

    \n+

    Definition at line 168 of file patchDescriptor.h.

    \n \n
    \n \n \n

    ◆ GetRegularPatchSize()

    \n \n
    \n@@ -552,15 +552,15 @@\n inlinestatic \n \n \n
    \n \n

    Number of control vertices of Regular Patches in table.

    \n \n-

    Definition at line 120 of file patchDescriptor.h.

    \n+

    Definition at line 120 of file patchDescriptor.h.

    \n \n
    \n \n \n

    ◆ GetType()

    \n \n
    \n@@ -581,15 +581,15 @@\n inline \n \n \n
    \n \n

    Returns the type of the patch.

    \n \n-

    Definition at line 87 of file patchDescriptor.h.

    \n+

    Definition at line 87 of file patchDescriptor.h.

    \n \n
    \n \n \n

    ◆ IsAdaptive() [1/2]

    \n \n
    \n@@ -610,15 +610,15 @@\n inline \n \n \n
    \n \n

    Returns true if the type is an adaptive patch.

    \n \n-

    Definition at line 97 of file patchDescriptor.h.

    \n+

    Definition at line 97 of file patchDescriptor.h.

    \n \n
    \n \n \n

    ◆ IsAdaptive() [2/2]

    \n \n
    \n@@ -640,15 +640,15 @@\n inlinestatic \n \n \n
    \n \n

    Returns true if the type is an adaptive (non-linear) patch.

    \n \n-

    Definition at line 92 of file patchDescriptor.h.

    \n+

    Definition at line 92 of file patchDescriptor.h.

    \n \n
    \n \n \n

    ◆ operator<()

    \n \n
    \n@@ -670,15 +670,15 @@\n inline \n \n \n
    \n \n

    Allows ordering of patches by type.

    \n \n-

    Definition at line 173 of file patchDescriptor.h.

    \n+

    Definition at line 173 of file patchDescriptor.h.

    \n \n
    \n \n \n

    ◆ operator=()

    \n \n
    \n@@ -700,15 +700,15 @@\n inline \n \n \n
    \n \n

    Assignment operator.

    \n \n-

    Definition at line 81 of file patchDescriptor.h.

    \n+

    Definition at line 81 of file patchDescriptor.h.

    \n \n
    \n \n \n

    ◆ operator==()

    \n \n
    \n@@ -730,15 +730,15 @@\n inline \n \n \n
    \n \n

    True if the descriptors are identical.

    \n \n-

    Definition at line 180 of file patchDescriptor.h.

    \n+

    Definition at line 180 of file patchDescriptor.h.

    \n \n
    \n \n \n

    ◆ print()

    \n \n
    \n@@ -752,15 +752,15 @@\n \n \n
    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Far
    • PatchDescriptor
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00993.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00993.html", "unified_diff": "@@ -98,15 +98,15 @@\n
      PatchTable Class Reference
      \n
    \n
    \n \n

    Container for arrays of parametric patches. \n More...

    \n \n-

    #include <patchTable.h>

    \n+

    #include <patchTable.h>

    \n \n \n \n \n \n

    \n Classes

    class  PatchHandle
     Handle that can be used as unique patch identifier within PatchTable. More...
     
    \n@@ -420,15 +420,15 @@\n
    \n

    Detailed Description

    \n

    Container for arrays of parametric patches.

    \n

    PatchTable contains topology and parametric information about the patches generated by the Refinement process. Patches in the table are sorted into arrays based on their PatchDescriptor Type.

    \n

    Note : PatchTable can be accessed either using a PatchHandle or a combination of array and patch indices.

    \n

    XXXX manuelk we should add a PatchIterator that can dereference into a PatchHandle for fast linear traversal of the table

    \n \n-

    Definition at line 55 of file patchTable.h.

    \n+

    Definition at line 55 of file patchTable.h.

    \n

    Member Typedef Documentation

    \n \n

    ◆ ConstQuadOffsetsArray

    \n \n
    \n
    \n \n@@ -436,15 +436,15 @@\n \n \n
    typedef Vtr::ConstArray<unsigned int> ConstQuadOffsetsArray
    \n
    \n \n

    Accessors for the gregory patch evaluation buffers. These methods will be deprecated.

    \n \n-

    Definition at line 259 of file patchTable.h.

    \n+

    Definition at line 259 of file patchTable.h.

    \n \n
    \n
    \n \n

    ◆ PatchVertsTable

    \n \n
    \n@@ -452,15 +452,15 @@\n \n \n \n \n
    typedef std::vector<Index> PatchVertsTable
    \n
    \n \n-

    Definition at line 375 of file patchTable.h.

    \n+

    Definition at line 375 of file patchTable.h.

    \n \n
    \n
    \n \n

    ◆ QuadOffsetsTable

    \n \n
    \n@@ -468,15 +468,15 @@\n \n \n \n \n
    typedef std::vector<unsigned int> QuadOffsetsTable
    \n
    \n \n-

    Definition at line 389 of file patchTable.h.

    \n+

    Definition at line 389 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ VertexValenceTable

    \n \n
    \n@@ -484,15 +484,15 @@\n \n \n \n \n
    typedef std::vector<Index> VertexValenceTable
    \n
    \n \n-

    Definition at line 264 of file patchTable.h.

    \n+

    Definition at line 264 of file patchTable.h.

    \n \n
    \n \n

    Constructor & Destructor Documentation

    \n \n

    ◆ PatchTable() [1/2]

    \n \n@@ -601,15 +601,15 @@\n srcBuffer with primvar data for the base and refined vertex values\n dstDestination buffer for the computed local point vertex values\n \n \n \n

    For more flexibility computing local vertex points, retrieval of the local point stencil table and use of its public methods is recommended or often required.

    \n \n-

    Definition at line 778 of file patchTable.h.

    \n+

    Definition at line 778 of file patchTable.h.

    \n \n \n \n \n

    ◆ ComputeLocalPointValuesFaceVarying()

    \n \n
    \n@@ -658,15 +658,15 @@\n dstDestination buffer for the computed local point face-varying values\n channelface-varying channel\n \n \n \n

    For more flexibility computing local face-varying points, retrieval of the local point face-varying stencil table and use of its public methods is recommended or often required.

    \n \n-

    Definition at line 796 of file patchTable.h.

    \n+

    Definition at line 796 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ ComputeLocalPointValuesVarying()

    \n \n
    \n@@ -708,15 +708,15 @@\n srcBuffer with primvar data for the base and refined varying values\n dstDestination buffer for the computed local point varying values\n \n \n \n

    For more flexibility computing local varying points, retrieval of the local point varying stencil table and use of its public methods is recommended or often required.

    \n \n-

    Definition at line 787 of file patchTable.h.

    \n+

    Definition at line 787 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ EvaluateBasis() [1/3]

    \n \n
    \n@@ -790,15 +790,15 @@\n inline \n \n \n
    \n \n

    An overloaded version to assist template parameter resolution when explicitly declaring unused array arguments as 0.

    \n \n-

    Definition at line 817 of file patchTable.h.

    \n+

    Definition at line 817 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ EvaluateBasis() [2/3]

    \n \n
    \n@@ -872,15 +872,15 @@\n inline \n \n \n
    \n \n

    An overloaded version to assist template parameter resolution when explicitly declaring unused array arguments as 0.

    \n \n-

    Definition at line 810 of file patchTable.h.

    \n+

    Definition at line 810 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ EvaluateBasis() [3/3]

    \n \n
    \n@@ -1048,15 +1048,15 @@\n inline \n \n \n
    \n \n

    An overloaded version to assist template parameter resolution when explicitly declaring unused array arguments as 0.

    \n \n-

    Definition at line 847 of file patchTable.h.

    \n+

    Definition at line 847 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ EvaluateBasisFaceVarying() [2/3]

    \n \n
    \n@@ -1136,15 +1136,15 @@\n inline \n \n \n
    \n \n

    An overloaded version to assist template parameter resolution when explicitly declaring unused array arguments as 0.

    \n \n-

    Definition at line 840 of file patchTable.h.

    \n+

    Definition at line 840 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ EvaluateBasisFaceVarying() [3/3]

    \n \n
    \n@@ -1313,15 +1313,15 @@\n inline \n \n \n
    \n \n

    An overloaded version to assist template parameter resolution when explicitly declaring unused array arguments as 0.

    \n \n-

    Definition at line 832 of file patchTable.h.

    \n+

    Definition at line 832 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ EvaluateBasisVarying() [2/3]

    \n \n
    \n@@ -1395,15 +1395,15 @@\n inline \n \n \n
    \n \n

    An overloaded version to assist template parameter resolution when explicitly declaring unused array arguments as 0.

    \n \n-

    Definition at line 825 of file patchTable.h.

    \n+

    Definition at line 825 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ EvaluateBasisVarying() [3/3]

    \n \n
    \n@@ -1654,15 +1654,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 764 of file patchTable.h.

    \n+

    Definition at line 764 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ GetLocalPointFaceVaryingStencilTable() [2/3]

    \n \n
    \n@@ -1684,15 +1684,15 @@\n inline \n \n \n
    \n \n

    Returns the stencil table to compute local point face-varying values.

    \n \n-

    Definition at line 741 of file patchTable.h.

    \n+

    Definition at line 741 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ GetLocalPointFaceVaryingStencilTable() [3/3]

    \n \n
    \n@@ -1735,15 +1735,15 @@\n inline \n \n \n
    \n \n

    Returns the stencil table to compute local point vertex values.

    \n \n-

    Definition at line 730 of file patchTable.h.

    \n+

    Definition at line 730 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ GetLocalPointStencilTable() [2/3]

    \n \n
    \n@@ -1785,15 +1785,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 752 of file patchTable.h.

    \n+

    Definition at line 752 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ GetLocalPointVaryingStencilTable() [1/3]

    \n \n
    \n@@ -1814,15 +1814,15 @@\n inline \n \n \n
    \n \n

    Returns the stencil table to compute local point varying values.

    \n \n-

    Definition at line 735 of file patchTable.h.

    \n+

    Definition at line 735 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ GetLocalPointVaryingStencilTable() [2/3]

    \n \n
    \n@@ -1864,15 +1864,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 758 of file patchTable.h.

    \n+

    Definition at line 758 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ GetMaxValence()

    \n \n
    \n@@ -1893,15 +1893,15 @@\n inline \n \n \n
    \n \n

    Returns max vertex valence.

    \n \n-

    Definition at line 92 of file patchTable.h.

    \n+

    Definition at line 92 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ GetNumControlVertices()

    \n \n
    \n@@ -1942,15 +1942,15 @@\n inline \n \n \n
    \n \n

    Returns the total number of control vertex indices in the table.

    \n \n-

    Definition at line 84 of file patchTable.h.

    \n+

    Definition at line 84 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ GetNumFVarChannels()

    \n \n
    \n@@ -2106,15 +2106,15 @@\n inline \n \n \n
    \n \n

    Returns the total number of ptex faces in the mesh.

    \n \n-

    Definition at line 95 of file patchTable.h.

    \n+

    Definition at line 95 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ GetPatchArrayDescriptor()

    \n \n
    \n@@ -2255,15 +2255,15 @@\n inline \n \n \n
    \n \n

    Get the table of patch control vertices.

    \n \n-

    Definition at line 378 of file patchTable.h.

    \n+

    Definition at line 378 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ GetPatchDescriptor()

    \n \n
    \n@@ -2568,15 +2568,15 @@\n inline \n \n \n
    \n \n

    Returns the PatchParamTable (PatchParams order matches patch array sorting)

    \n \n-

    Definition at line 381 of file patchTable.h.

    \n+

    Definition at line 381 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ GetPatchQuadOffsets()

    \n \n
    \n@@ -2717,15 +2717,15 @@\n inline \n \n \n
    \n \n

    Returns the quad-offsets table.

    \n \n-

    Definition at line 392 of file patchTable.h.

    \n+

    Definition at line 392 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ GetSharpnessIndexTable()

    \n \n
    \n@@ -2746,15 +2746,15 @@\n inline \n \n \n
    \n \n

    Returns a sharpness index table for each patch (if exists)

    \n \n-

    Definition at line 384 of file patchTable.h.

    \n+

    Definition at line 384 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ getSharpnessIndices()

    \n \n
    \n@@ -2801,15 +2801,15 @@\n inline \n \n \n
    \n \n

    Returns sharpness values table.

    \n \n-

    Definition at line 387 of file patchTable.h.

    \n+

    Definition at line 387 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ getSharpnessValues()

    \n \n
    \n@@ -2944,15 +2944,15 @@\n inline \n \n \n
    \n \n

    Returns the 'VertexValences' table (vertex neighborhoods table)

    \n \n-

    Definition at line 267 of file patchTable.h.

    \n+

    Definition at line 267 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ IsFeatureAdaptive()

    \n \n
    \n@@ -3013,15 +3013,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 708 of file patchTable.h.

    \n+

    Definition at line 708 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ LocalPointFaceVaryingStencilPrecisionMatchesType() [3/3]

    \n \n
    \n@@ -3042,15 +3042,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 721 of file patchTable.h.

    \n+

    Definition at line 721 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ LocalPointStencilPrecisionMatchesType() [1/3]

    \n \n
    \n@@ -3092,15 +3092,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 700 of file patchTable.h.

    \n+

    Definition at line 700 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ LocalPointStencilPrecisionMatchesType() [3/3]

    \n \n
    \n@@ -3121,15 +3121,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 713 of file patchTable.h.

    \n+

    Definition at line 713 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ LocalPointVaryingStencilPrecisionMatchesType() [1/3]

    \n \n
    \n@@ -3171,15 +3171,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 704 of file patchTable.h.

    \n+

    Definition at line 704 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ LocalPointVaryingStencilPrecisionMatchesType() [3/3]

    \n \n
    \n@@ -3200,15 +3200,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 717 of file patchTable.h.

    \n+

    Definition at line 717 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ print()

    \n \n
    \n@@ -3244,20 +3244,20 @@\n \n \n friend \n \n \n
    \n \n-

    Definition at line 531 of file patchTable.h.

    \n+

    Definition at line 531 of file patchTable.h.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Far
    • PatchTable
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a00997.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a00997.html", "unified_diff": "@@ -98,15 +98,15 @@\n
      PatchTable::PatchHandle Class Reference
      \n
    \n
    \n \n

    Handle that can be used as unique patch identifier within PatchTable. \n More...

    \n \n-

    #include <patchTable.h>

    \n+

    #include <patchTable.h>

    \n \n \n \n \n \n \n@@ -119,15 +119,15 @@\n \n \n \n

    \n Public Attributes

    Index arrayIndex
     
    Index patchIndex
     
     
    class PatchMap
     
    \n

    Detailed Description

    \n

    Handle that can be used as unique patch identifier within PatchTable.

    \n \n-

    Definition at line 60 of file patchTable.h.

    \n+

    Definition at line 60 of file patchTable.h.

    \n

    Friends And Related Symbol Documentation

    \n \n

    ◆ PatchMap

    \n \n
    \n
    \n \n@@ -141,15 +141,15 @@\n \n \n \n
    \n friend
    \n
    \n \n-

    Definition at line 65 of file patchTable.h.

    \n+

    Definition at line 65 of file patchTable.h.

    \n \n
    \n
    \n \n

    ◆ PatchTable

    \n \n
    \n@@ -165,15 +165,15 @@\n \n \n friend \n \n \n
    \n \n-

    Definition at line 64 of file patchTable.h.

    \n+

    Definition at line 64 of file patchTable.h.

    \n \n
    \n
    \n

    Member Data Documentation

    \n \n

    ◆ arrayIndex

    \n \n@@ -182,15 +182,15 @@\n \n \n \n \n
    Index arrayIndex
    \n
    \n \n-

    Definition at line 67 of file patchTable.h.

    \n+

    Definition at line 67 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ patchIndex

    \n \n
    \n@@ -198,15 +198,15 @@\n \n \n \n \n
    Index patchIndex
    \n
    \n \n-

    Definition at line 68 of file patchTable.h.

    \n+

    Definition at line 68 of file patchTable.h.

    \n \n
    \n \n \n

    ◆ vertIndex

    \n \n
    \n@@ -214,20 +214,20 @@\n \n \n \n \n
    Index vertIndex
    \n
    \n \n-

    Definition at line 69 of file patchTable.h.

    \n+

    Definition at line 69 of file patchTable.h.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Far
    • PatchTable
    • PatchHandle
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a01009.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a01009.html", "unified_diff": "@@ -99,15 +99,15 @@\n
      PatchTableFactory Class Reference
      \n
    \n
    \n \n

    Factory for constructing a PatchTable from a TopologyRefiner. \n More...

    \n \n-

    #include <patchTableFactory.h>

    \n+

    #include <patchTableFactory.h>

    \n \n \n \n \n \n \n@@ -124,29 +124,29 @@\n \n \n \n

    \n Classes

    struct  Options
     Public options for the PatchTable factory. More...
     
    struct  PatchFaceTag
    static PatchTableCreate (TopologyRefiner const &refiner, Options options=Options(), ConstIndexArray selectedFaces=ConstIndexArray())
     Instantiates a PatchTable from a client-provided TopologyRefiner.
     
    \n

    Detailed Description

    \n

    Factory for constructing a PatchTable from a TopologyRefiner.

    \n \n-

    Definition at line 40 of file patchTableFactory.h.

    \n+

    Definition at line 40 of file patchTableFactory.h.

    \n

    Member Typedef Documentation

    \n \n

    ◆ PatchTagVector

    \n \n
    \n
    \n \n \n \n \n
    typedef std::vector<PatchFaceTag> PatchTagVector
    \n
    \n \n-

    Definition at line 208 of file patchTableFactory.h.

    \n+

    Definition at line 208 of file patchTableFactory.h.

    \n \n
    \n
    \n

    Member Function Documentation

    \n \n

    ◆ Create()

    \n \n@@ -200,15 +200,15 @@\n \n \n
    Returns
    A new instance of PatchTable
    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Far
    • PatchTableFactory
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a01013.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a01013.html", "unified_diff": "@@ -99,15 +99,15 @@\n
      PatchTableFactory::Options Struct Reference
      \n
    \n
    \n \n

    Public options for the PatchTable factory. \n More...

    \n \n-

    #include <patchTableFactory.h>

    \n+

    #include <patchTableFactory.h>

    \n \n \n \n \n \n

    \n Public Types

    enum  EndCapType {
    \n   ENDCAP_NONE = 0\n ,
    \n   ENDCAP_BILINEAR_BASIS\n@@ -208,15 +208,15 @@\n
    int const * fvarChannelIndices
     List containing the indices of the channels selected for the factory.
     
    \n

    Detailed Description

    \n

    Public options for the PatchTable factory.

    \n \n-

    Definition at line 45 of file patchTableFactory.h.

    \n+

    Definition at line 45 of file patchTableFactory.h.

    \n

    Member Enumeration Documentation

    \n \n

    ◆ EndCapType

    \n \n
    \n
    \n \n@@ -237,15 +237,15 @@\n \n \n \n
    ENDCAP_GREGORY_BASIS 

    use Gregory patches (highest quality, recommended default)

    \n
    ENDCAP_LEGACY_GREGORY 

    legacy option for 2.x style Gregory patches (Catmark only)

    \n
    \n \n-

    Definition at line 55 of file patchTableFactory.h.

    \n+

    Definition at line 55 of file patchTableFactory.h.

    \n \n
    \n
    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ Options()

    \n \n@@ -266,15 +266,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 63 of file patchTableFactory.h.

    \n+

    Definition at line 63 of file patchTableFactory.h.

    \n \n
    \n \n

    Member Function Documentation

    \n \n

    ◆ GetEndCapType()

    \n \n@@ -296,15 +296,15 @@\n inline \n \n \n
    \n \n

    Get endcap basis type.

    \n \n-

    Definition at line 85 of file patchTableFactory.h.

    \n+

    Definition at line 85 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ GetRefineAdaptiveOptions()

    \n \n
    \n@@ -325,15 +325,15 @@\n inline \n \n \n
    \n \n

    Determine adaptive refinement options to match assigned patch options.

    \n \n-

    Definition at line 100 of file patchTableFactory.h.

    \n+

    Definition at line 100 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ SetEndCapType()

    \n \n
    \n@@ -355,15 +355,15 @@\n inline \n \n \n
    \n \n

    Set endcap basis type.

    \n \n-

    Definition at line 88 of file patchTableFactory.h.

    \n+

    Definition at line 88 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ SetFVarPatchPrecision() [1/2]

    \n \n
    \n@@ -403,15 +403,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 215 of file patchTableFactory.h.

    \n+

    Definition at line 215 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ SetMaxIsolationLevel()

    \n \n
    \n@@ -433,15 +433,15 @@\n inline \n \n \n
    \n \n

    Set maximum isolation level.

    \n \n-

    Definition at line 91 of file patchTableFactory.h.

    \n+

    Definition at line 91 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ SetPatchPrecision() [1/2]

    \n \n
    \n@@ -481,15 +481,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 212 of file patchTableFactory.h.

    \n+

    Definition at line 212 of file patchTableFactory.h.

    \n \n
    \n \n

    Member Data Documentation

    \n \n

    ◆ endCapType

    \n \n@@ -500,15 +500,15 @@\n unsigned int endCapType\n \n \n
    \n \n

    EndCapType.

    \n \n-

    Definition at line 120 of file patchTableFactory.h.

    \n+

    Definition at line 120 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ fvarChannelIndices

    \n \n
    \n@@ -518,15 +518,15 @@\n int const* fvarChannelIndices\n \n \n
    \n \n

    List containing the indices of the channels selected for the factory.

    \n \n-

    Definition at line 140 of file patchTableFactory.h.

    \n+

    Definition at line 140 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ fvarPatchPrecisionDouble

    \n \n
    \n@@ -536,15 +536,15 @@\n unsigned int fvarPatchPrecisionDouble\n \n \n
    \n \n

    Generate double-precision stencils for face-varying patches.

    \n \n-

    Definition at line 133 of file patchTableFactory.h.

    \n+

    Definition at line 133 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ generateAllLevels

    \n \n
    \n@@ -554,15 +554,15 @@\n unsigned int generateAllLevels\n \n \n
    \n \n

    Generate levels from 'firstLevel' to 'maxLevel' (Uniform mode only)

    \n \n-

    Definition at line 110 of file patchTableFactory.h.

    \n+

    Definition at line 110 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ generateFVarLegacyLinearPatches

    \n \n
    \n@@ -572,15 +572,15 @@\n unsigned int generateFVarLegacyLinearPatches\n \n \n
    \n \n

    Generate all linear face-varying patches (legacy)

    \n \n-

    Definition at line 136 of file patchTableFactory.h.

    \n+

    Definition at line 136 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ generateFVarTables

    \n \n
    \n@@ -590,15 +590,15 @@\n unsigned int generateFVarTables\n \n \n
    \n \n

    Generate face-varying patch tables.

    \n \n-

    Definition at line 129 of file patchTableFactory.h.

    \n+

    Definition at line 129 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ generateLegacySharpCornerPatches

    \n \n
    \n@@ -608,15 +608,15 @@\n unsigned int generateLegacySharpCornerPatches\n \n \n
    \n \n

    Generate sharp regular patches at smooth corners (legacy)

    \n \n-

    Definition at line 137 of file patchTableFactory.h.

    \n+

    Definition at line 137 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ generateVaryingLocalPoints

    \n \n
    \n@@ -626,15 +626,15 @@\n unsigned int generateVaryingLocalPoints\n \n \n
    \n \n

    Generate local points with varying patches.

    \n \n-

    Definition at line 126 of file patchTableFactory.h.

    \n+

    Definition at line 126 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ generateVaryingTables

    \n \n
    \n@@ -644,15 +644,15 @@\n unsigned int generateVaryingTables\n \n \n
    \n \n

    Generate varying patch tables.

    \n \n-

    Definition at line 125 of file patchTableFactory.h.

    \n+

    Definition at line 125 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ includeBaseLevelIndices

    \n \n
    \n@@ -662,15 +662,15 @@\n unsigned int includeBaseLevelIndices\n \n \n
    \n \n

    Include base level in patch point indices (Uniform mode only)

    \n \n-

    Definition at line 111 of file patchTableFactory.h.

    \n+

    Definition at line 111 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ includeFVarBaseLevelIndices

    \n \n
    \n@@ -680,15 +680,15 @@\n unsigned int includeFVarBaseLevelIndices\n \n \n
    \n \n

    Include base level in face-varying patch point indices (Uniform mode only)

    \n \n-

    Definition at line 112 of file patchTableFactory.h.

    \n+

    Definition at line 112 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ maxIsolationLevel

    \n \n
    \n@@ -698,15 +698,15 @@\n unsigned int maxIsolationLevel\n \n \n
    \n \n

    Cap adaptive feature isolation to the given level (max. 10)

    \n \n-

    Definition at line 117 of file patchTableFactory.h.

    \n+

    Definition at line 117 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ numFVarChannels

    \n \n
    \n@@ -716,15 +716,15 @@\n int numFVarChannels\n \n \n
    \n \n

    Number of channel indices and interpolation modes passed.

    \n \n-

    Definition at line 139 of file patchTableFactory.h.

    \n+

    Definition at line 139 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ patchPrecisionDouble

    \n \n
    \n@@ -734,15 +734,15 @@\n unsigned int patchPrecisionDouble\n \n \n
    \n \n

    Generate double-precision stencils for vertex patches.

    \n \n-

    Definition at line 132 of file patchTableFactory.h.

    \n+

    Definition at line 132 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ shareEndCapPatchPoints

    \n \n
    \n@@ -751,15 +751,15 @@\n \n unsigned int shareEndCapPatchPoints\n \n \n
    \n

    Share endcap patch points among adjacent endcap patches. currently only work with GregoryBasis.

    \n \n-

    Definition at line 121 of file patchTableFactory.h.

    \n+

    Definition at line 121 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ triangulateQuads

    \n \n
    \n@@ -769,15 +769,15 @@\n unsigned int triangulateQuads\n \n \n
    \n \n

    Triangulate 'QUADS' primitives (Uniform mode only)

    \n \n-

    Definition at line 113 of file patchTableFactory.h.

    \n+

    Definition at line 113 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ useInfSharpPatch

    \n \n
    \n@@ -787,15 +787,15 @@\n unsigned int useInfSharpPatch\n \n \n
    \n \n

    Use infinitely-sharp patch.

    \n \n-

    Definition at line 116 of file patchTableFactory.h.

    \n+

    Definition at line 116 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ useSingleCreasePatch

    \n \n
    \n@@ -805,20 +805,20 @@\n unsigned int useSingleCreasePatch\n \n \n
    \n \n

    Use single crease patch.

    \n \n-

    Definition at line 115 of file patchTableFactory.h.

    \n+

    Definition at line 115 of file patchTableFactory.h.

    \n \n
    \n \n
    The documentation for this struct was generated from the following file:\n \n \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Far
    • PatchTableFactory
    • Options
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a01017.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a01017.html", "unified_diff": "@@ -98,15 +98,15 @@\n
      PatchTableFactory::PatchFaceTag Struct Reference
      \n
    \n
    \n \n

    Obsolete internal struct not intended for public use – due to be deprecated. \n More...

    \n \n-

    #include <patchTableFactory.h>

    \n+

    #include <patchTableFactory.h>

    \n \n \n \n \n \n \n@@ -133,15 +133,15 @@\n \n \n \n

    \n Public Member Functions

    void clear ()
     
    void assignBoundaryPropertiesFromEdgeMask (int boundaryEdgeMask)
     
     
    unsigned int _isSingleCrease: 1
     
    \n

    Detailed Description

    \n

    Obsolete internal struct not intended for public use – due to be deprecated.

    \n \n-

    Definition at line 192 of file patchTableFactory.h.

    \n+

    Definition at line 192 of file patchTableFactory.h.

    \n

    Member Function Documentation

    \n \n

    ◆ assignBoundaryPropertiesFromEdgeMask()

    \n \n
    \n
    \n \n@@ -219,15 +219,15 @@\n
    \n \n \n \n
    unsigned int _boundaryCount
    \n
    \n \n-

    Definition at line 199 of file patchTableFactory.h.

    \n+

    Definition at line 199 of file patchTableFactory.h.

    \n \n
    \n
    \n \n

    ◆ _boundaryIndex

    \n \n
    \n@@ -235,15 +235,15 @@\n \n \n \n \n
    unsigned int _boundaryIndex
    \n
    \n \n-

    Definition at line 198 of file patchTableFactory.h.

    \n+

    Definition at line 198 of file patchTableFactory.h.

    \n \n
    \n
    \n \n

    ◆ _boundaryMask

    \n \n
    \n@@ -251,15 +251,15 @@\n \n \n \n \n
    unsigned int _boundaryMask
    \n
    \n \n-

    Definition at line 197 of file patchTableFactory.h.

    \n+

    Definition at line 197 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ _hasBoundaryEdge

    \n \n
    \n@@ -267,15 +267,15 @@\n \n \n \n \n
    unsigned int _hasBoundaryEdge
    \n
    \n \n-

    Definition at line 200 of file patchTableFactory.h.

    \n+

    Definition at line 200 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ _hasPatch

    \n \n
    \n@@ -283,15 +283,15 @@\n \n \n \n \n
    unsigned int _hasPatch
    \n
    \n \n-

    Definition at line 194 of file patchTableFactory.h.

    \n+

    Definition at line 194 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ _isRegular

    \n \n
    \n@@ -299,15 +299,15 @@\n \n \n \n \n
    unsigned int _isRegular
    \n
    \n \n-

    Definition at line 195 of file patchTableFactory.h.

    \n+

    Definition at line 195 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ _isSingleCrease

    \n \n
    \n@@ -315,15 +315,15 @@\n \n \n \n \n
    unsigned int _isSingleCrease
    \n
    \n \n-

    Definition at line 201 of file patchTableFactory.h.

    \n+

    Definition at line 201 of file patchTableFactory.h.

    \n \n
    \n \n \n

    ◆ _transitionMask

    \n \n
    \n@@ -331,20 +331,20 @@\n \n \n \n \n
    unsigned int _transitionMask
    \n
    \n \n-

    Definition at line 196 of file patchTableFactory.h.

    \n+

    Definition at line 196 of file patchTableFactory.h.

    \n \n
    \n \n
    The documentation for this struct was generated from the following file:\n \n \n \n
    \n
    \n
    \n \n

    A simple reference to raw topology data for use with TopologyRefinerFactory. \n More...

    \n \n-

    #include <topologyDescriptor.h>

    \n+

    #include <topologyDescriptor.h>

    \n \n \n \n \n

    \n Classes

    struct  FVarChannel
     
    \n \n \n

    \n@@ -148,15 +148,15 @@\n

    FVarChannel const * fvarChannels
     
    \n

    Detailed Description

    \n

    A simple reference to raw topology data for use with TopologyRefinerFactory.

    \n

    TopologyDescriptor is a simple struct containing references to raw topology data used to construct a TopologyRefiner. It is not a requirement but a convenience for use with TopologyRefinerFactory when mesh topology is not available in an existing mesh data structure. It should be functionally complete and simple to use, but for more demanding situations, writing a custom Factory is usually warranted.

    \n \n-

    Definition at line 49 of file topologyDescriptor.h.

    \n+

    Definition at line 49 of file topologyDescriptor.h.

    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ TopologyDescriptor()

    \n \n
    \n
    \n \n@@ -180,15 +180,15 @@\n
    \n \n \n \n
    Index const* cornerVertexIndices
    \n
    \n \n-

    Definition at line 62 of file topologyDescriptor.h.

    \n+

    Definition at line 62 of file topologyDescriptor.h.

    \n \n
    \n
    \n \n

    ◆ cornerWeights

    \n \n
    \n@@ -196,15 +196,15 @@\n \n \n \n \n
    float const* cornerWeights
    \n
    \n \n-

    Definition at line 63 of file topologyDescriptor.h.

    \n+

    Definition at line 63 of file topologyDescriptor.h.

    \n \n
    \n
    \n \n

    ◆ creaseVertexIndexPairs

    \n \n
    \n@@ -212,15 +212,15 @@\n \n \n \n \n
    Index const* creaseVertexIndexPairs
    \n
    \n \n-

    Definition at line 58 of file topologyDescriptor.h.

    \n+

    Definition at line 58 of file topologyDescriptor.h.

    \n \n
    \n \n \n

    ◆ creaseWeights

    \n \n
    \n@@ -228,15 +228,15 @@\n \n \n \n \n
    float const* creaseWeights
    \n
    \n \n-

    Definition at line 59 of file topologyDescriptor.h.

    \n+

    Definition at line 59 of file topologyDescriptor.h.

    \n \n
    \n \n \n

    ◆ fvarChannels

    \n \n
    \n@@ -244,15 +244,15 @@\n \n \n \n \n
    FVarChannel const* fvarChannels
    \n
    \n \n-

    Definition at line 82 of file topologyDescriptor.h.

    \n+

    Definition at line 82 of file topologyDescriptor.h.

    \n \n
    \n \n \n

    ◆ holeIndices

    \n \n
    \n@@ -260,15 +260,15 @@\n \n \n \n \n
    Index const* holeIndices
    \n
    \n \n-

    Definition at line 66 of file topologyDescriptor.h.

    \n+

    Definition at line 66 of file topologyDescriptor.h.

    \n \n
    \n \n \n

    ◆ isLeftHanded

    \n \n
    \n@@ -276,15 +276,15 @@\n \n \n \n \n
    bool isLeftHanded
    \n
    \n \n-

    Definition at line 68 of file topologyDescriptor.h.

    \n+

    Definition at line 68 of file topologyDescriptor.h.

    \n \n
    \n \n \n

    ◆ numCorners

    \n \n
    \n@@ -292,15 +292,15 @@\n \n \n \n \n
    int numCorners
    \n
    \n \n-

    Definition at line 61 of file topologyDescriptor.h.

    \n+

    Definition at line 61 of file topologyDescriptor.h.

    \n \n
    \n \n \n

    ◆ numCreases

    \n \n
    \n@@ -308,15 +308,15 @@\n \n \n \n \n
    int numCreases
    \n
    \n \n-

    Definition at line 57 of file topologyDescriptor.h.

    \n+

    Definition at line 57 of file topologyDescriptor.h.

    \n \n
    \n \n \n

    ◆ numFaces

    \n \n
    \n@@ -324,15 +324,15 @@\n \n \n \n \n
    int numFaces
    \n
    \n \n-

    Definition at line 52 of file topologyDescriptor.h.

    \n+

    Definition at line 52 of file topologyDescriptor.h.

    \n \n
    \n \n \n

    ◆ numFVarChannels

    \n \n
    \n@@ -340,15 +340,15 @@\n \n \n \n \n
    int numFVarChannels
    \n
    \n \n-

    Definition at line 81 of file topologyDescriptor.h.

    \n+

    Definition at line 81 of file topologyDescriptor.h.

    \n \n
    \n \n \n

    ◆ numHoles

    \n \n
    \n@@ -356,15 +356,15 @@\n \n \n \n \n
    int numHoles
    \n
    \n \n-

    Definition at line 65 of file topologyDescriptor.h.

    \n+

    Definition at line 65 of file topologyDescriptor.h.

    \n \n
    \n \n \n

    ◆ numVertices

    \n \n
    \n@@ -372,15 +372,15 @@\n \n \n \n \n
    int numVertices
    \n
    \n \n-

    Definition at line 51 of file topologyDescriptor.h.

    \n+

    Definition at line 51 of file topologyDescriptor.h.

    \n \n
    \n \n \n

    ◆ numVertsPerFace

    \n \n
    \n@@ -388,15 +388,15 @@\n \n \n \n \n
    int const* numVertsPerFace
    \n
    \n \n-

    Definition at line 54 of file topologyDescriptor.h.

    \n+

    Definition at line 54 of file topologyDescriptor.h.

    \n \n
    \n \n \n

    ◆ vertIndicesPerFace

    \n \n
    \n@@ -404,20 +404,20 @@\n \n \n \n \n
    Index const* vertIndicesPerFace
    \n
    \n \n-

    Definition at line 55 of file topologyDescriptor.h.

    \n+

    Definition at line 55 of file topologyDescriptor.h.

    \n \n
    \n \n
    The documentation for this struct was generated from the following file:\n \n \n \n
    \n
    \n
    TopologyDescriptor::FVarChannel Struct Reference
    \n \n
    \n \n-

    #include <topologyDescriptor.h>

    \n+

    #include <topologyDescriptor.h>

    \n \n \n \n \n

    \n Public Member Functions

     FVarChannel ()
     
    \n \n \n \n \n

    \n@@ -111,15 +111,15 @@\n

    int numValues
     
    Index const * valueIndices
     
    \n

    Detailed Description

    \n
    \n-

    Definition at line 73 of file topologyDescriptor.h.

    \n+

    Definition at line 73 of file topologyDescriptor.h.

    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ FVarChannel()

    \n \n
    \n
    \n \n@@ -136,15 +136,15 @@\n \n \n \n
    \n inline
    \n
    \n \n-

    Definition at line 78 of file topologyDescriptor.h.

    \n+

    Definition at line 78 of file topologyDescriptor.h.

    \n \n
    \n
    \n

    Member Data Documentation

    \n \n

    ◆ numValues

    \n \n@@ -153,15 +153,15 @@\n \n \n \n \n
    int numValues
    \n
    \n \n-

    Definition at line 75 of file topologyDescriptor.h.

    \n+

    Definition at line 75 of file topologyDescriptor.h.

    \n \n
    \n \n \n

    ◆ valueIndices

    \n \n
    \n@@ -169,20 +169,20 @@\n \n \n \n \n
    Index const* valueIndices
    \n
    \n \n-

    Definition at line 76 of file topologyDescriptor.h.

    \n+

    Definition at line 76 of file topologyDescriptor.h.

    \n \n
    \n \n
    The documentation for this struct was generated from the following file:\n \n \n \n
    \n
    \n
    \n \n

    An interface for accessing data in a specific level of a refined topology hierarchy. \n More...

    \n \n-

    #include <topologyLevel.h>

    \n+

    #include <topologyLevel.h>

    \n \n \n \n \n \n@@ -258,15 +258,15 @@\n \n \n

    \n Public Member Functions

    Methods to inspect the overall inventory of components:

    All three main component types are indexed locally within each level. For some topological relationships – notably face-vertices, which is often the only relationship of interest – the total number of entries is also made available.

    \n
    int GetNumVertices () const
     ~TopologyLevel ()
     
    \n

    Detailed Description

    \n

    An interface for accessing data in a specific level of a refined topology hierarchy.

    \n

    TopologyLevel provides an interface to data in a specific level of a topology hierarchy. Instances of TopologyLevel are created and owned by a TopologyRefiner, which will return const-references to them. Such references are only valid during the lifetime of the TopologyRefiner that created and returned them, and only for a given refinement, i.e. if the TopologyRefiner is re-refined, any references to TopoologyLevels are invalidated.

    \n \n-

    Definition at line 49 of file topologyLevel.h.

    \n+

    Definition at line 49 of file topologyLevel.h.

    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ TopologyLevel()

    \n \n
    \n
    \n \n@@ -283,15 +283,15 @@\n \n \n \n
    \n inline
    \n
    \n \n-

    Definition at line 300 of file topologyLevel.h.

    \n+

    Definition at line 300 of file topologyLevel.h.

    \n \n
    \n
    \n \n

    ◆ ~TopologyLevel()

    \n \n
    \n@@ -310,15 +310,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 301 of file topologyLevel.h.

    \n+

    Definition at line 301 of file topologyLevel.h.

    \n \n
    \n
    \n

    Member Function Documentation

    \n \n

    ◆ DoesEdgeFVarTopologyMatch()

    \n \n@@ -351,15 +351,15 @@\n inline \n \n \n
    \n \n

    Return if face-varying topology across the edge only matches.

    \n \n-

    Definition at line 247 of file topologyLevel.h.

    \n+

    Definition at line 247 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ DoesFaceFVarTopologyMatch()

    \n \n
    \n@@ -391,15 +391,15 @@\n inline \n \n \n
    \n \n

    Return if face-varying topology around a face matches.

    \n \n-

    Definition at line 252 of file topologyLevel.h.

    \n+

    Definition at line 252 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ DoesVertexFVarTopologyMatch()

    \n \n
    \n@@ -431,15 +431,15 @@\n inline \n \n \n
    \n \n

    Return if face-varying topology around a vertex matches.

    \n \n-

    Definition at line 242 of file topologyLevel.h.

    \n+

    Definition at line 242 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ FindEdge()

    \n \n
    \n@@ -471,15 +471,15 @@\n inline \n \n \n
    \n \n

    Identify the edge matching the given vertex pair.

    \n \n-

    Definition at line 120 of file topologyLevel.h.

    \n+

    Definition at line 120 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetEdgeChildEdges()

    \n \n
    \n@@ -501,15 +501,15 @@\n inline \n \n \n
    \n \n

    Access the child edges (in the next level) of a given edge.

    \n \n-

    Definition at line 268 of file topologyLevel.h.

    \n+

    Definition at line 268 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetEdgeChildVertex()

    \n \n
    \n@@ -531,15 +531,15 @@\n inline \n \n \n
    \n \n

    Return the child vertex (in the next level) of a given edge.

    \n \n-

    Definition at line 274 of file topologyLevel.h.

    \n+

    Definition at line 274 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetEdgeFaceLocalIndices()

    \n \n
    \n@@ -561,15 +561,15 @@\n inline \n \n \n
    \n \n

    Access the local indices of an edge with respect to its incident faces.

    \n \n-

    Definition at line 117 of file topologyLevel.h.

    \n+

    Definition at line 117 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetEdgeFaces()

    \n \n
    \n@@ -591,15 +591,15 @@\n inline \n \n \n
    \n \n

    Access the faces incident a given edge.

    \n \n-

    Definition at line 102 of file topologyLevel.h.

    \n+

    Definition at line 102 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetEdgeSharpness()

    \n \n
    \n@@ -621,15 +621,15 @@\n inline \n \n \n
    \n \n

    Return the sharpness assigned a given edge.

    \n \n-

    Definition at line 173 of file topologyLevel.h.

    \n+

    Definition at line 173 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetEdgeVertices()

    \n \n
    \n@@ -651,15 +651,15 @@\n inline \n \n \n
    \n \n

    Access the vertices incident a given edge.

    \n \n-

    Definition at line 99 of file topologyLevel.h.

    \n+

    Definition at line 99 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetFaceChildEdges()

    \n \n
    \n@@ -681,15 +681,15 @@\n inline \n \n \n
    \n \n

    Access the child edges (in the next level) of a given face.

    \n \n-

    Definition at line 265 of file topologyLevel.h.

    \n+

    Definition at line 265 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetFaceChildFaces()

    \n \n
    \n@@ -711,15 +711,15 @@\n inline \n \n \n
    \n \n

    Access the child faces (in the next level) of a given face.

    \n \n-

    Definition at line 262 of file topologyLevel.h.

    \n+

    Definition at line 262 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetFaceChildVertex()

    \n \n
    \n@@ -741,15 +741,15 @@\n inline \n \n \n
    \n \n

    Return the child vertex (in the next level) of a given face.

    \n \n-

    Definition at line 271 of file topologyLevel.h.

    \n+

    Definition at line 271 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetFaceEdges()

    \n \n
    \n@@ -771,15 +771,15 @@\n inline \n \n \n
    \n \n

    Access the edges incident a given face.

    \n \n-

    Definition at line 96 of file topologyLevel.h.

    \n+

    Definition at line 96 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetFaceFVarValues()

    \n \n
    \n@@ -811,15 +811,15 @@\n inline \n \n \n
    \n \n

    Access the face-varying values associated with a particular face.

    \n \n-

    Definition at line 237 of file topologyLevel.h.

    \n+

    Definition at line 237 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetFaceParentFace()

    \n \n
    \n@@ -841,15 +841,15 @@\n inline \n \n \n
    \n \n

    Return the parent face (in the previous level) of a given face.

    \n \n-

    Definition at line 280 of file topologyLevel.h.

    \n+

    Definition at line 280 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetFaceVertices()

    \n \n
    \n@@ -871,15 +871,15 @@\n inline \n \n \n
    \n \n

    Access the vertices incident a given face.

    \n \n-

    Definition at line 93 of file topologyLevel.h.

    \n+

    Definition at line 93 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetNumEdges()

    \n \n
    \n@@ -900,15 +900,15 @@\n inline \n \n \n
    \n \n

    Return the number of edges in this level.

    \n \n-

    Definition at line 68 of file topologyLevel.h.

    \n+

    Definition at line 68 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetNumFaces()

    \n \n
    \n@@ -929,15 +929,15 @@\n inline \n \n \n
    \n \n

    Return the number of faces in this level.

    \n \n-

    Definition at line 65 of file topologyLevel.h.

    \n+

    Definition at line 65 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetNumFaceVertices()

    \n \n
    \n@@ -958,15 +958,15 @@\n inline \n \n \n
    \n \n

    Return the total number of face-vertices, i.e. the sum of all vertices for all faces.

    \n \n-

    Definition at line 71 of file topologyLevel.h.

    \n+

    Definition at line 71 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetNumFVarChannels()

    \n \n
    \n@@ -987,15 +987,15 @@\n inline \n \n \n
    \n \n

    Return the number of face-varying channels (should be same for all levels)

    \n \n-

    Definition at line 230 of file topologyLevel.h.

    \n+

    Definition at line 230 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetNumFVarValues()

    \n \n
    \n@@ -1017,15 +1017,15 @@\n inline \n \n \n
    \n \n

    Return the total number of face-varying values in a particular channel (the upper bound of a face-varying value index)

    \n \n-

    Definition at line 234 of file topologyLevel.h.

    \n+

    Definition at line 234 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetNumVertices()

    \n \n
    \n@@ -1046,15 +1046,15 @@\n inline \n \n \n
    \n \n

    Return the number of vertices in this level.

    \n \n-

    Definition at line 62 of file topologyLevel.h.

    \n+

    Definition at line 62 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetVertexChildVertex()

    \n \n
    \n@@ -1076,15 +1076,15 @@\n inline \n \n \n
    \n \n

    Return the child vertex (in the next level) of a given vertex.

    \n \n-

    Definition at line 277 of file topologyLevel.h.

    \n+

    Definition at line 277 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetVertexEdgeLocalIndices()

    \n \n
    \n@@ -1106,15 +1106,15 @@\n inline \n \n \n
    \n \n

    Access the local indices of a vertex with respect to its incident edges.

    \n \n-

    Definition at line 114 of file topologyLevel.h.

    \n+

    Definition at line 114 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetVertexEdges()

    \n \n
    \n@@ -1136,15 +1136,15 @@\n inline \n \n \n
    \n \n

    Access the edges incident a given vertex.

    \n \n-

    Definition at line 108 of file topologyLevel.h.

    \n+

    Definition at line 108 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetVertexFaceLocalIndices()

    \n \n
    \n@@ -1166,15 +1166,15 @@\n inline \n \n \n
    \n \n

    Access the local indices of a vertex with respect to its incident faces.

    \n \n-

    Definition at line 111 of file topologyLevel.h.

    \n+

    Definition at line 111 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetVertexFaces()

    \n \n
    \n@@ -1196,15 +1196,15 @@\n inline \n \n \n
    \n \n

    Access the faces incident a given vertex.

    \n \n-

    Definition at line 105 of file topologyLevel.h.

    \n+

    Definition at line 105 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetVertexRule()

    \n \n
    \n@@ -1226,15 +1226,15 @@\n inline \n \n \n
    \n \n

    Return the subdivision rule assigned a given vertex specific to this level.

    \n \n-

    Definition at line 194 of file topologyLevel.h.

    \n+

    Definition at line 194 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ GetVertexSharpness()

    \n \n
    \n@@ -1256,15 +1256,15 @@\n inline \n \n \n
    \n \n

    Return the sharpness assigned a given vertex.

    \n \n-

    Definition at line 176 of file topologyLevel.h.

    \n+

    Definition at line 176 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ IsEdgeBoundary()

    \n \n
    \n@@ -1286,15 +1286,15 @@\n inline \n \n \n
    \n \n

    Return if the edge is a boundary (only one incident face)

    \n \n-

    Definition at line 134 of file topologyLevel.h.

    \n+

    Definition at line 134 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ IsEdgeInfSharp()

    \n \n
    \n@@ -1316,15 +1316,15 @@\n inline \n \n \n
    \n \n

    Return if the edge is infinitely-sharp.

    \n \n-

    Definition at line 179 of file topologyLevel.h.

    \n+

    Definition at line 179 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ IsEdgeNonManifold()

    \n \n
    \n@@ -1346,15 +1346,15 @@\n inline \n \n \n
    \n \n

    Return if the edge is non-manifold.

    \n \n-

    Definition at line 128 of file topologyLevel.h.

    \n+

    Definition at line 128 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ IsEdgeSemiSharp()

    \n \n
    \n@@ -1376,15 +1376,15 @@\n inline \n \n \n
    \n \n

    Return if the edge is semi-sharp.

    \n \n-

    Definition at line 185 of file topologyLevel.h.

    \n+

    Definition at line 185 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ IsFaceHole()

    \n \n
    \n@@ -1406,15 +1406,15 @@\n inline \n \n \n
    \n \n

    Return if a given face has been tagged as a hole.

    \n \n-

    Definition at line 191 of file topologyLevel.h.

    \n+

    Definition at line 191 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ IsVertexBoundary()

    \n \n
    \n@@ -1436,15 +1436,15 @@\n inline \n \n \n
    \n \n

    Return if the vertex is on a boundary (at least one incident boundary edge)

    \n \n-

    Definition at line 137 of file topologyLevel.h.

    \n+

    Definition at line 137 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ IsVertexCorner()

    \n \n
    \n@@ -1466,15 +1466,15 @@\n inline \n \n \n
    \n \n

    Return if the vertex is a corner (only one incident face)

    \n \n-

    Definition at line 140 of file topologyLevel.h.

    \n+

    Definition at line 140 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ IsVertexInfSharp()

    \n \n
    \n@@ -1496,15 +1496,15 @@\n inline \n \n \n
    \n \n

    Return if the vertex is infinitely-sharp.

    \n \n-

    Definition at line 182 of file topologyLevel.h.

    \n+

    Definition at line 182 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ IsVertexNonManifold()

    \n \n
    \n@@ -1526,15 +1526,15 @@\n inline \n \n \n
    \n \n

    Return if the vertex is non-manifold.

    \n \n-

    Definition at line 131 of file topologyLevel.h.

    \n+

    Definition at line 131 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ IsVertexSemiSharp()

    \n \n
    \n@@ -1556,15 +1556,15 @@\n inline \n \n \n
    \n \n

    Return if the vertex is semi-sharp.

    \n \n-

    Definition at line 188 of file topologyLevel.h.

    \n+

    Definition at line 188 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ IsVertexValenceRegular()

    \n \n
    \n@@ -1589,15 +1589,15 @@\n
    \n \n

    Return if the valence of the vertex is regular (must be manifold)

    \n

    Note that this test only determines if the valence of the vertex is regular with respect to the assigned subdivision scheme – not if the neighborhood around the vertex is regular. The latter depends on a number of factors including the incident faces of the vertex (they must all be regular) and the presence of sharpness at the vertex itself or its incident edges.

    \n

    The regularity of the valence is a necessary but not a sufficient condition in determining the regularity of the neighborhood. For example, while the valence of an interior vertex may be regular, its neighborhood is not if the vertex was made infinitely sharp. Conversely, a corner vertex is considered regular by its valence but its neighborhood is not if the vertex was not made infinitely sharp.

    \n

    Whether the valence of the vertex is regular is also a property that remains the same for the vertex in all subdivision levels. In contrast, the regularity of the region around the vertex may change as the presence of irregular faces or semi-sharp features is reduced by subdivision.

    \n \n-

    Definition at line 162 of file topologyLevel.h.

    \n+

    Definition at line 162 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ PrintTopology()

    \n \n
    \n@@ -1617,15 +1617,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 287 of file topologyLevel.h.

    \n+

    Definition at line 287 of file topologyLevel.h.

    \n \n
    \n \n \n

    ◆ ValidateTopology()

    \n \n
    \n@@ -1644,15 +1644,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 286 of file topologyLevel.h.

    \n+

    Definition at line 286 of file topologyLevel.h.

    \n \n
    \n \n

    Friends And Related Symbol Documentation

    \n \n

    ◆ TopologyRefiner

    \n \n@@ -1669,20 +1669,20 @@\n \n \n friend \n \n \n
    \n \n-

    Definition at line 292 of file topologyLevel.h.

    \n+

    Definition at line 292 of file topologyLevel.h.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Far
    • TopologyLevel
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a01145.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a01145.html", "unified_diff": "@@ -100,15 +100,15 @@\n
      CLPatchTable Class Reference
      \n
    \n
    \n \n

    CL patch table. \n More...

    \n \n-

    #include <clPatchTable.h>

    \n+

    #include <clPatchTable.h>

    \n
    \n Inheritance diagram for CLPatchTable:
    \n
    \n
    \n \"\"/\n
    \n \n@@ -181,15 +181,15 @@\n \n
     
    \n

    Detailed Description

    \n

    CL patch table.

    \n

    This class is a CL buffer representation of Far::PatchTable.

    \n

    CLEvaluator consumes this table to evaluate on the patches.

    \n \n-

    Definition at line 52 of file clPatchTable.h.

    \n+

    Definition at line 52 of file clPatchTable.h.

    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ ~CLPatchTable()

    \n \n
    \n
    \n \n@@ -338,15 +338,15 @@\n \n \n \n
    \n inlinestatic
    \n
    \n \n-

    Definition at line 59 of file clPatchTable.h.

    \n+

    Definition at line 59 of file clPatchTable.h.

    \n \n
    \n
    \n \n

    ◆ GetFVarPatchArrayBuffer()

    \n \n
    \n@@ -368,15 +368,15 @@\n inline \n \n \n
    \n \n

    Returns the CL memory of the array of Osd::PatchArray buffer.

    \n \n-

    Definition at line 86 of file clPatchTable.h.

    \n+

    Definition at line 86 of file clPatchTable.h.

    \n \n
    \n
    \n \n

    ◆ GetFVarPatchIndexBuffer()

    \n \n
    \n@@ -398,15 +398,15 @@\n inline \n \n \n
    \n \n

    Returns the CL memory of the face-varying control vertices.

    \n \n-

    Definition at line 89 of file clPatchTable.h.

    \n+

    Definition at line 89 of file clPatchTable.h.

    \n \n
    \n \n \n

    ◆ GetFVarPatchParamBuffer()

    \n \n
    \n@@ -428,15 +428,15 @@\n inline \n \n \n
    \n \n

    Returns the CL memory of the array of Osd::PatchParam buffer.

    \n \n-

    Definition at line 92 of file clPatchTable.h.

    \n+

    Definition at line 92 of file clPatchTable.h.

    \n \n
    \n \n \n

    ◆ GetNumFVarChannels()

    \n \n
    \n@@ -457,15 +457,15 @@\n inline \n \n \n
    \n \n

    Returns the number of face-varying channel buffers.

    \n \n-

    Definition at line 83 of file clPatchTable.h.

    \n+

    Definition at line 83 of file clPatchTable.h.

    \n \n
    \n \n \n

    ◆ GetPatchArrayBuffer()

    \n \n
    \n@@ -486,15 +486,15 @@\n inline \n \n \n
    \n \n

    Returns the CL memory of the array of Osd::PatchArray buffer.

    \n \n-

    Definition at line 68 of file clPatchTable.h.

    \n+

    Definition at line 68 of file clPatchTable.h.

    \n \n
    \n \n \n

    ◆ GetPatchIndexBuffer()

    \n \n
    \n@@ -515,15 +515,15 @@\n inline \n \n \n
    \n \n

    Returns the CL memory of the patch control vertices.

    \n \n-

    Definition at line 71 of file clPatchTable.h.

    \n+

    Definition at line 71 of file clPatchTable.h.

    \n \n
    \n \n \n

    ◆ GetPatchParamBuffer()

    \n \n
    \n@@ -544,15 +544,15 @@\n inline \n \n \n
    \n \n

    Returns the CL memory of the array of Osd::PatchParam buffer.

    \n \n-

    Definition at line 74 of file clPatchTable.h.

    \n+

    Definition at line 74 of file clPatchTable.h.

    \n \n
    \n \n \n

    ◆ GetVaryingPatchArrayBuffer()

    \n \n
    \n@@ -573,15 +573,15 @@\n inline \n \n \n
    \n \n

    Returns the CL memory of the array of Osd::PatchArray buffer.

    \n \n-

    Definition at line 77 of file clPatchTable.h.

    \n+

    Definition at line 77 of file clPatchTable.h.

    \n \n
    \n \n \n

    ◆ GetVaryingPatchIndexBuffer()

    \n \n
    \n@@ -602,15 +602,15 @@\n inline \n \n \n
    \n \n

    Returns the CL memory of the varying control vertices.

    \n \n-

    Definition at line 80 of file clPatchTable.h.

    \n+

    Definition at line 80 of file clPatchTable.h.

    \n \n
    \n \n

    Member Data Documentation

    \n \n

    ◆ _fvarIndexBuffers

    \n \n@@ -627,15 +627,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 107 of file clPatchTable.h.

    \n+

    Definition at line 107 of file clPatchTable.h.

    \n \n
    \n \n \n

    ◆ _fvarParamBuffers

    \n \n
    \n@@ -651,15 +651,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 108 of file clPatchTable.h.

    \n+

    Definition at line 108 of file clPatchTable.h.

    \n \n
    \n \n \n

    ◆ _fvarPatchArrays

    \n \n
    \n@@ -675,15 +675,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 106 of file clPatchTable.h.

    \n+

    Definition at line 106 of file clPatchTable.h.

    \n \n
    \n \n \n

    ◆ _indexBuffer

    \n \n
    \n@@ -699,15 +699,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 100 of file clPatchTable.h.

    \n+

    Definition at line 100 of file clPatchTable.h.

    \n \n
    \n \n \n

    ◆ _patchArrays

    \n \n
    \n@@ -723,15 +723,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 99 of file clPatchTable.h.

    \n+

    Definition at line 99 of file clPatchTable.h.

    \n \n
    \n \n \n

    ◆ _patchParamBuffer

    \n \n
    \n@@ -747,15 +747,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 101 of file clPatchTable.h.

    \n+

    Definition at line 101 of file clPatchTable.h.

    \n \n
    \n \n \n

    ◆ _varyingIndexBuffer

    \n \n
    \n@@ -771,15 +771,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 104 of file clPatchTable.h.

    \n+

    Definition at line 104 of file clPatchTable.h.

    \n \n
    \n \n \n

    ◆ _varyingPatchArrays

    \n \n
    \n@@ -795,20 +795,20 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 103 of file clPatchTable.h.

    \n+

    Definition at line 103 of file clPatchTable.h.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Osd
    • CLPatchTable
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a01149.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a01149.html", "unified_diff": "@@ -99,15 +99,15 @@\n
      CLVertexBuffer Class Reference
      \n
    \n
    \n \n

    Concrete vertex buffer class for OpenCL subdivision. \n More...

    \n \n-

    #include <clVertexBuffer.h>

    \n+

    #include <clVertexBuffer.h>

    \n \n \n \n \n \n \n@@ -142,15 +142,15 @@\n \n \n

    \n Public Member Functions

     ~CLVertexBuffer ()
     Destructor.
     
    void UpdateData (const float *src, int startVertex, int numVertices, cl_command_queue clQueue, cl_event *startEvents=NULL, unsigned int numStartEvents=0, cl_event *endEvent=NULL)
    bool allocate (cl_context clContext)
     
    \n

    Detailed Description

    \n

    Concrete vertex buffer class for OpenCL subdivision.

    \n

    CLVertexBuffer implements CLVertexBufferInterface. An instance of this buffer class can be passed to CLEvaluator

    \n \n-

    Definition at line 42 of file clVertexBuffer.h.

    \n+

    Definition at line 42 of file clVertexBuffer.h.

    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ ~CLVertexBuffer()

    \n \n
    \n
    \n \n@@ -341,15 +341,15 @@\n \n \n \n
    \n inlinestatic
    \n
    \n \n-

    Definition at line 49 of file clVertexBuffer.h.

    \n+

    Definition at line 49 of file clVertexBuffer.h.

    \n \n
    \n
    \n \n

    ◆ GetNumElements()

    \n \n
    \n@@ -508,20 +508,20 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 63 of file clVertexBuffer.h.

    \n+

    Definition at line 63 of file clVertexBuffer.h.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Osd
    • CLVertexBuffer
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a01153.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a01153.html", "unified_diff": "@@ -99,15 +99,15 @@\n
      CpuD3D11VertexBuffer Class Reference
      \n
    \n
    \n \n

    Concrete vertex buffer class for Cpu subdivision and DirectX drawing. \n More...

    \n \n-

    #include <cpuD3D11VertexBuffer.h>

    \n+

    #include <cpuD3D11VertexBuffer.h>

    \n \n \n \n \n \n \n@@ -143,15 +143,15 @@\n \n

    \n Public Member Functions

    virtual ~CpuD3D11VertexBuffer ()
     Destructor.
     
    void UpdateData (const float *src, int startVertex, int numVertices, void *deviceContext=NULL)
     
    \n

    Detailed Description

    \n

    Concrete vertex buffer class for Cpu subdivision and DirectX drawing.

    \n

    CpuD3D11VertexBuffer implements CpuVertexBufferInterface and D3D11VertexBufferInterface.

    \n

    An instance of this buffer class can be passed to CpuEvaluator.

    \n \n-

    Definition at line 48 of file cpuD3D11VertexBuffer.h.

    \n+

    Definition at line 48 of file cpuD3D11VertexBuffer.h.

    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ ~CpuD3D11VertexBuffer()

    \n \n
    \n
    \n \n@@ -302,15 +302,15 @@\n inline\n \n
    \n
    \n \n

    Returns the D3D11 buffer object (for Osd::Mesh interface)

    \n \n-

    Definition at line 75 of file cpuD3D11VertexBuffer.h.

    \n+

    Definition at line 75 of file cpuD3D11VertexBuffer.h.

    \n \n
    \n
    \n \n

    ◆ Create()

    \n \n
    \n@@ -430,15 +430,15 @@\n \n
    \n

    This method is meant to be used in client code in order to provide coarse vertices data to Osd.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Osd
    • CpuD3D11VertexBuffer
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a01161.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a01161.html", "unified_diff": "@@ -99,15 +99,15 @@\n
      CpuGLVertexBuffer Class Reference
      \n
    \n
    \n \n

    Concrete vertex buffer class for cpu subdivision and OpenGL drawing. \n More...

    \n \n-

    #include <cpuGLVertexBuffer.h>

    \n+

    #include <cpuGLVertexBuffer.h>

    \n \n \n \n \n \n \n@@ -139,15 +139,15 @@\n \n

    \n Public Member Functions

     ~CpuGLVertexBuffer ()
     Destructor.
     
    void UpdateData (const float *src, int startVertex, int numVertices, void *deviceContext=NULL)
     
    \n

    Detailed Description

    \n

    Concrete vertex buffer class for cpu subdivision and OpenGL drawing.

    \n

    CpuGLVertexBuffer implements CpuVertexBufferInterface and GLVertexBufferInterface.

    \n

    The buffer interop between Cpu and GL is handled automatically when a client calls BindCpuBuffer and BindVBO methods.

    \n \n-

    Definition at line 47 of file cpuGLVertexBuffer.h.

    \n+

    Definition at line 47 of file cpuGLVertexBuffer.h.

    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ ~CpuGLVertexBuffer()

    \n \n
    \n
    \n \n@@ -387,15 +387,15 @@\n
    \n
    \n

    This method is meant to be used in client code in order to provide coarse vertices data to Osd.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n
    \n \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Osd
    • CpuGLVertexBuffer
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a01169.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a01169.html", "unified_diff": "@@ -99,15 +99,15 @@\n
      CpuVertexBuffer Class Reference
      \n
    \n
    \n \n

    Concrete vertex buffer class for CPU subdivision. \n More...

    \n \n-

    #include <cpuVertexBuffer.h>

    \n+

    #include <cpuVertexBuffer.h>

    \n \n \n \n \n \n \n@@ -134,15 +134,15 @@\n \n \n

    \n Public Member Functions

     ~CpuVertexBuffer ()
     Destructor.
     
    void UpdateData (const float *src, int startVertex, int numVertices, void *deviceContext=NULL)
     Constructor.
     
    \n

    Detailed Description

    \n

    Concrete vertex buffer class for CPU subdivision.

    \n

    CpuVertexBuffer implements the VertexBufferInterface. An instance of this buffer class can be passed to CpuEvaluator

    \n \n-

    Definition at line 42 of file cpuVertexBuffer.h.

    \n+

    Definition at line 42 of file cpuVertexBuffer.h.

    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ ~CpuVertexBuffer()

    \n \n
    \n
    \n \n@@ -337,15 +337,15 @@\n
    \n
    \n

    This method is meant to be used in client code in order to provide coarse vertices data to Osd.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n
    \n \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Osd
    • CpuVertexBuffer
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a01181.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a01181.html", "unified_diff": "@@ -100,15 +100,15 @@\n
      CudaPatchTable Class Reference
      \n
    \n
    \n \n

    CUDA patch table. \n More...

    \n \n-

    #include <cudaPatchTable.h>

    \n+

    #include <cudaPatchTable.h>

    \n
    \n Inheritance diagram for CudaPatchTable:
    \n
    \n
    \n \"\"/\n
    \n \n@@ -178,15 +178,15 @@\n \n
     
    \n

    Detailed Description

    \n

    CUDA patch table.

    \n

    This class is a cuda buffer representation of Far::PatchTable.

    \n

    CudaEvaluator consumes this table to evaluate on the patches.

    \n \n-

    Definition at line 51 of file cudaPatchTable.h.

    \n+

    Definition at line 51 of file cudaPatchTable.h.

    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ ~CudaPatchTable()

    \n \n
    \n
    \n \n@@ -315,15 +315,15 @@\n inline\n \n
    \n
    \n \n

    Returns the cuda memory of the array of Osd::PatchArray buffer.

    \n \n-

    Definition at line 81 of file cudaPatchTable.h.

    \n+

    Definition at line 81 of file cudaPatchTable.h.

    \n \n
    \n
    \n \n

    ◆ GetFVarPatchIndexBuffer()

    \n \n
    \n@@ -345,15 +345,15 @@\n inline \n \n \n
    \n \n

    Returns the cuda memory of the array of face-varying control vertices.

    \n \n-

    Definition at line 86 of file cudaPatchTable.h.

    \n+

    Definition at line 86 of file cudaPatchTable.h.

    \n \n
    \n
    \n \n

    ◆ GetFVarPatchParamBuffer()

    \n \n
    \n@@ -375,15 +375,15 @@\n inline \n \n \n
    \n \n

    Returns the cuda memory of the array of face-varying param.

    \n \n-

    Definition at line 91 of file cudaPatchTable.h.

    \n+

    Definition at line 91 of file cudaPatchTable.h.

    \n \n
    \n \n \n

    ◆ GetNumFVarChannels()

    \n \n
    \n@@ -404,15 +404,15 @@\n inline \n \n \n
    \n \n

    Returns the number of face-varying channels buffers.

    \n \n-

    Definition at line 78 of file cudaPatchTable.h.

    \n+

    Definition at line 78 of file cudaPatchTable.h.

    \n \n
    \n \n \n

    ◆ GetPatchArrayBuffer()

    \n \n
    \n@@ -433,15 +433,15 @@\n inline \n \n \n
    \n \n

    Returns the cuda memory of the array of Osd::PatchArray buffer.

    \n \n-

    Definition at line 60 of file cudaPatchTable.h.

    \n+

    Definition at line 60 of file cudaPatchTable.h.

    \n \n
    \n \n \n

    ◆ GetPatchIndexBuffer()

    \n \n
    \n@@ -462,15 +462,15 @@\n inline \n \n \n
    \n \n

    Returns the cuda memory of the patch control vertices.

    \n \n-

    Definition at line 63 of file cudaPatchTable.h.

    \n+

    Definition at line 63 of file cudaPatchTable.h.

    \n \n
    \n \n \n

    ◆ GetPatchParamBuffer()

    \n \n
    \n@@ -491,15 +491,15 @@\n inline \n \n \n
    \n \n

    Returns the cuda memory of the array of Osd::PatchParam buffer.

    \n \n-

    Definition at line 66 of file cudaPatchTable.h.

    \n+

    Definition at line 66 of file cudaPatchTable.h.

    \n \n
    \n \n \n

    ◆ GetVaryingPatchArrayBuffer()

    \n \n
    \n@@ -520,15 +520,15 @@\n inline \n \n \n
    \n \n

    Returns the cuda memory of the array of Osd::PatchArray buffer.

    \n \n-

    Definition at line 69 of file cudaPatchTable.h.

    \n+

    Definition at line 69 of file cudaPatchTable.h.

    \n \n
    \n \n \n

    ◆ GetVaryingPatchIndexBuffer()

    \n \n
    \n@@ -549,15 +549,15 @@\n inline \n \n \n
    \n \n

    Returns the cuda memory of the array of varying control vertices.

    \n \n-

    Definition at line 73 of file cudaPatchTable.h.

    \n+

    Definition at line 73 of file cudaPatchTable.h.

    \n \n
    \n \n

    Member Data Documentation

    \n \n

    ◆ _fvarIndexBuffers

    \n \n@@ -574,15 +574,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 108 of file cudaPatchTable.h.

    \n+

    Definition at line 108 of file cudaPatchTable.h.

    \n \n
    \n \n \n

    ◆ _fvarParamBuffers

    \n \n
    \n@@ -598,15 +598,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 109 of file cudaPatchTable.h.

    \n+

    Definition at line 109 of file cudaPatchTable.h.

    \n \n
    \n \n \n

    ◆ _fvarPatchArrays

    \n \n
    \n@@ -622,15 +622,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 107 of file cudaPatchTable.h.

    \n+

    Definition at line 107 of file cudaPatchTable.h.

    \n \n
    \n \n \n

    ◆ _indexBuffer

    \n \n
    \n@@ -646,15 +646,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 101 of file cudaPatchTable.h.

    \n+

    Definition at line 101 of file cudaPatchTable.h.

    \n \n
    \n \n \n

    ◆ _patchArrays

    \n \n
    \n@@ -670,15 +670,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 100 of file cudaPatchTable.h.

    \n+

    Definition at line 100 of file cudaPatchTable.h.

    \n \n
    \n \n \n

    ◆ _patchParamBuffer

    \n \n
    \n@@ -694,15 +694,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 102 of file cudaPatchTable.h.

    \n+

    Definition at line 102 of file cudaPatchTable.h.

    \n \n
    \n \n \n

    ◆ _varyingIndexBuffer

    \n \n
    \n@@ -718,15 +718,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 105 of file cudaPatchTable.h.

    \n+

    Definition at line 105 of file cudaPatchTable.h.

    \n \n
    \n \n \n

    ◆ _varyingPatchArrays

    \n \n
    \n@@ -742,20 +742,20 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 104 of file cudaPatchTable.h.

    \n+

    Definition at line 104 of file cudaPatchTable.h.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Osd
    • CudaPatchTable
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a01189.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a01189.html", "unified_diff": "@@ -98,15 +98,15 @@\n
      D3D11StencilTable Class Reference
      \n
    \n
    \n \n

    D3D11 stencil table. \n More...

    \n \n-

    #include <d3d11ComputeEvaluator.h>

    \n+

    #include <d3d11ComputeEvaluator.h>

    \n \n \n \n \n \n \n@@ -130,15 +130,15 @@\n \n

    \n Public Member Functions

     D3D11StencilTable (Far::StencilTable const *stencilTable, ID3D11DeviceContext *deviceContext)
     
     ~D3D11StencilTable ()
     
     
    \n

    Detailed Description

    \n

    D3D11 stencil table.

    \n

    This class is a D3D11 Shader Resource View representation of Far::StencilTable.

    \n

    D3D11ComputeEvaluator consumes this table to apply stencils

    \n \n-

    Definition at line 56 of file d3d11ComputeEvaluator.h.

    \n+

    Definition at line 56 of file d3d11ComputeEvaluator.h.

    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ D3D11StencilTable()

    \n \n
    \n
    \n \n@@ -214,15 +214,15 @@\n \n \n \n
    \n inlinestatic
    \n
    \n \n-

    Definition at line 59 of file d3d11ComputeEvaluator.h.

    \n+

    Definition at line 59 of file d3d11ComputeEvaluator.h.

    \n \n
    \n
    \n \n

    ◆ Create() [2/2]

    \n \n
    \n@@ -252,15 +252,15 @@\n \n \n inlinestatic \n \n \n
    \n \n-

    Definition at line 64 of file d3d11ComputeEvaluator.h.

    \n+

    Definition at line 64 of file d3d11ComputeEvaluator.h.

    \n \n
    \n
    \n \n

    ◆ GetIndicesSRV()

    \n \n
    \n@@ -279,15 +279,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 77 of file d3d11ComputeEvaluator.h.

    \n+

    Definition at line 77 of file d3d11ComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ GetNumStencils()

    \n \n
    \n@@ -306,15 +306,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 79 of file d3d11ComputeEvaluator.h.

    \n+

    Definition at line 79 of file d3d11ComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ GetOffsetsSRV()

    \n \n
    \n@@ -333,15 +333,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 76 of file d3d11ComputeEvaluator.h.

    \n+

    Definition at line 76 of file d3d11ComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ GetSizesSRV()

    \n \n
    \n@@ -360,15 +360,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 75 of file d3d11ComputeEvaluator.h.

    \n+

    Definition at line 75 of file d3d11ComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ GetWeightsSRV()

    \n \n
    \n@@ -387,20 +387,20 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 78 of file d3d11ComputeEvaluator.h.

    \n+

    Definition at line 78 of file d3d11ComputeEvaluator.h.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
    \n
    D3D11ComputeEvaluator Class Reference
    \n \n
    \n \n-

    #include <d3d11ComputeEvaluator.h>

    \n+

    #include <d3d11ComputeEvaluator.h>

    \n \n \n \n \n

    \n Public Types

    typedef bool Instantiatable
     
    \n \n \n \n \n

    \n@@ -136,29 +136,29 @@\n

     
    static void Synchronize (ID3D11DeviceContext *deviceContext)
     Wait the dispatched kernel finishes.
     
    \n

    Detailed Description

    \n
    \n-

    Definition at line 96 of file d3d11ComputeEvaluator.h.

    \n+

    Definition at line 96 of file d3d11ComputeEvaluator.h.

    \n

    Member Typedef Documentation

    \n \n

    ◆ Instantiatable

    \n \n
    \n
    \n \n \n \n \n
    typedef bool Instantiatable
    \n
    \n \n-

    Definition at line 98 of file d3d11ComputeEvaluator.h.

    \n+

    Definition at line 98 of file d3d11ComputeEvaluator.h.

    \n \n
    \n
    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ D3D11ComputeEvaluator()

    \n \n@@ -519,15 +519,15 @@\n stencilTablestencil table to be applied. The table must have SSBO interfaces.\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextID3D11DeviceContext. \n \n \n \n \n-

    Definition at line 148 of file d3d11ComputeEvaluator.h.

    \n+

    Definition at line 148 of file d3d11ComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalStencils() [3/3]

    \n \n
    \n@@ -584,15 +584,15 @@\n \n inline \n \n \n
    \n

    Dispatch the DX compute kernel on GPU asynchronously. returns false if the kernel hasn't been compiled yet.

    \n \n-

    Definition at line 181 of file d3d11ComputeEvaluator.h.

    \n+

    Definition at line 181 of file d3d11ComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ Synchronize()

    \n \n
    \n@@ -617,15 +617,15 @@\n
    \n \n

    Wait the dispatched kernel finishes.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
    \n
    D3D11PatchTable Class Reference
    \n \n
    \n \n-

    #include <d3d11PatchTable.h>

    \n+

    #include <d3d11PatchTable.h>

    \n
    \n Inheritance diagram for D3D11PatchTable:
    \n
    \n
    \n \"\"/\n
    \n \n@@ -152,29 +152,29 @@\n \n \n \n \n
    ID3D11Buffer * _patchParamBuffer
     
    ID3D11ShaderResourceView * _patchParamBufferSRV
     
    \n

    Detailed Description

    \n
    \n-

    Definition at line 49 of file d3d11PatchTable.h.

    \n+

    Definition at line 49 of file d3d11PatchTable.h.

    \n

    Member Typedef Documentation

    \n \n

    ◆ VertexBufferBinding

    \n \n
    \n
    \n \n \n \n \n
    typedef ID3D11Buffer* VertexBufferBinding
    \n
    \n \n-

    Definition at line 51 of file d3d11PatchTable.h.

    \n+

    Definition at line 51 of file d3d11PatchTable.h.

    \n \n
    \n
    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ D3D11PatchTable()

    \n \n@@ -278,15 +278,15 @@\n \n \n inlinestatic \n \n \n
    \n \n-

    Definition at line 57 of file d3d11PatchTable.h.

    \n+

    Definition at line 57 of file d3d11PatchTable.h.

    \n \n
    \n \n \n

    ◆ Create() [2/2]

    \n \n
    \n@@ -341,15 +341,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 65 of file d3d11PatchTable.h.

    \n+

    Definition at line 65 of file d3d11PatchTable.h.

    \n \n
    \n \n \n

    ◆ GetPatchIndexBuffer()

    \n \n
    \n@@ -370,15 +370,15 @@\n inline \n \n \n
    \n \n

    Returns the index buffer containing the patch control vertices.

    \n \n-

    Definition at line 70 of file d3d11PatchTable.h.

    \n+

    Definition at line 70 of file d3d11PatchTable.h.

    \n \n
    \n \n \n

    ◆ GetPatchParamSRV()

    \n \n
    \n@@ -399,15 +399,15 @@\n inline \n \n \n
    \n \n

    Returns the SRV containing the patch parameter.

    \n \n-

    Definition at line 75 of file d3d11PatchTable.h.

    \n+

    Definition at line 75 of file d3d11PatchTable.h.

    \n \n
    \n \n

    Member Data Documentation

    \n \n

    ◆ _indexBuffer

    \n \n@@ -424,15 +424,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 86 of file d3d11PatchTable.h.

    \n+

    Definition at line 86 of file d3d11PatchTable.h.

    \n \n
    \n \n \n

    ◆ _patchArrays

    \n \n
    \n@@ -448,15 +448,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 84 of file d3d11PatchTable.h.

    \n+

    Definition at line 84 of file d3d11PatchTable.h.

    \n \n
    \n \n \n

    ◆ _patchParamBuffer

    \n \n
    \n@@ -472,15 +472,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 87 of file d3d11PatchTable.h.

    \n+

    Definition at line 87 of file d3d11PatchTable.h.

    \n \n
    \n \n \n

    ◆ _patchParamBufferSRV

    \n \n
    \n@@ -496,20 +496,20 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 88 of file d3d11PatchTable.h.

    \n+

    Definition at line 88 of file d3d11PatchTable.h.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Osd
    • D3D11PatchTable
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a01205.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a01205.html", "unified_diff": "@@ -99,15 +99,15 @@\n
      D3D11VertexBuffer Class Reference
      \n
    \n
    \n \n

    Concrete vertex buffer class for DirectX subdivision and DirectX drawing. \n More...

    \n \n-

    #include <d3d11VertexBuffer.h>

    \n+

    #include <d3d11VertexBuffer.h>

    \n \n \n \n \n \n \n@@ -142,15 +142,15 @@\n \n \n

    \n Public Member Functions

    virtual ~D3D11VertexBuffer ()
     Destructor.
     
    void UpdateData (const float *src, int startVertex, int numVertices, ID3D11DeviceContext *deviceContext)
    bool allocate (ID3D11Device *device)
     
    \n

    Detailed Description

    \n

    Concrete vertex buffer class for DirectX subdivision and DirectX drawing.

    \n

    D3D11VertexBuffer implements D3D11VertexBufferInterface. An instance of this buffer class can be passed to D3D11ComputeEvaluator.

    \n \n-

    Definition at line 46 of file d3d11VertexBuffer.h.

    \n+

    Definition at line 46 of file d3d11VertexBuffer.h.

    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ ~D3D11VertexBuffer()

    \n \n
    \n
    \n \n@@ -302,15 +302,15 @@\n inline\n \n
    \n
    \n \n

    Returns the D3D11 buffer object (for Osd::Mesh interface)

    \n \n-

    Definition at line 70 of file d3d11VertexBuffer.h.

    \n+

    Definition at line 70 of file d3d11VertexBuffer.h.

    \n \n
    \n
    \n \n

    ◆ Create()

    \n \n
    \n@@ -430,15 +430,15 @@\n \n
    \n

    This method is meant to be used in client code in order to provide coarse vertices data to Osd.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Osd
    • D3D11VertexBuffer
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a01209.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a01209.html", "unified_diff": "@@ -98,15 +98,15 @@\n
      GLStencilTableSSBO Class Reference
      \n
    \n
    \n \n

    GL stencil table (Shader Storage buffer) \n More...

    \n \n-

    #include <glComputeEvaluator.h>

    \n+

    #include <glComputeEvaluator.h>

    \n \n \n \n \n \n \n@@ -141,15 +141,15 @@\n \n

    \n Public Member Functions

     GLStencilTableSSBO (Far::StencilTable const *stencilTable)
     
     GLStencilTableSSBO (Far::LimitStencilTable const *limitStencilTable)
     
     
    \n

    Detailed Description

    \n

    GL stencil table (Shader Storage buffer)

    \n

    This class is a GLSL SSBO representation of Far::StencilTable.

    \n

    GLSLComputeKernel consumes this table to apply stencils

    \n \n-

    Definition at line 51 of file glComputeEvaluator.h.

    \n+

    Definition at line 51 of file glComputeEvaluator.h.

    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ GLStencilTableSSBO() [1/2]

    \n \n
    \n
    \n \n@@ -247,15 +247,15 @@\n \n \n \n
    \n inlinestatic
    \n
    \n \n-

    Definition at line 58 of file glComputeEvaluator.h.

    \n+

    Definition at line 58 of file glComputeEvaluator.h.

    \n \n
    \n
    \n \n

    ◆ Create() [2/2]

    \n \n
    \n@@ -285,15 +285,15 @@\n \n \n inlinestatic \n \n \n
    \n \n-

    Definition at line 53 of file glComputeEvaluator.h.

    \n+

    Definition at line 53 of file glComputeEvaluator.h.

    \n \n
    \n
    \n \n

    ◆ GetDuuWeightsBuffer()

    \n \n
    \n@@ -312,15 +312,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 76 of file glComputeEvaluator.h.

    \n+

    Definition at line 76 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ GetDuvWeightsBuffer()

    \n \n
    \n@@ -339,15 +339,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 77 of file glComputeEvaluator.h.

    \n+

    Definition at line 77 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ GetDuWeightsBuffer()

    \n \n
    \n@@ -366,15 +366,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 74 of file glComputeEvaluator.h.

    \n+

    Definition at line 74 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ GetDvvWeightsBuffer()

    \n \n
    \n@@ -393,15 +393,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 78 of file glComputeEvaluator.h.

    \n+

    Definition at line 78 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ GetDvWeightsBuffer()

    \n \n
    \n@@ -420,15 +420,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 75 of file glComputeEvaluator.h.

    \n+

    Definition at line 75 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ GetIndicesBuffer()

    \n \n
    \n@@ -447,15 +447,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 72 of file glComputeEvaluator.h.

    \n+

    Definition at line 72 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ GetNumStencils()

    \n \n
    \n@@ -474,15 +474,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 79 of file glComputeEvaluator.h.

    \n+

    Definition at line 79 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ GetOffsetsBuffer()

    \n \n
    \n@@ -501,15 +501,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 71 of file glComputeEvaluator.h.

    \n+

    Definition at line 71 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ GetSizesBuffer()

    \n \n
    \n@@ -528,15 +528,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 70 of file glComputeEvaluator.h.

    \n+

    Definition at line 70 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ GetWeightsBuffer()

    \n \n
    \n@@ -555,20 +555,20 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 73 of file glComputeEvaluator.h.

    \n+

    Definition at line 73 of file glComputeEvaluator.h.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
    \n
    GLComputeEvaluator Class Reference
    \n \n
    \n \n-

    #include <glComputeEvaluator.h>

    \n+

    #include <glComputeEvaluator.h>

    \n \n \n \n \n

    \n Public Types

    typedef bool Instantiatable
     
    \n \n \n \n \n

    \n@@ -233,29 +233,29 @@\n

     
    static void Synchronize (void *deviceContext)
     Wait the dispatched kernel finishes.
     
    \n

    Detailed Description

    \n
    \n-

    Definition at line 96 of file glComputeEvaluator.h.

    \n+

    Definition at line 96 of file glComputeEvaluator.h.

    \n

    Member Typedef Documentation

    \n \n

    ◆ Instantiatable

    \n \n
    \n
    \n \n \n \n \n
    typedef bool Instantiatable
    \n
    \n \n-

    Definition at line 98 of file glComputeEvaluator.h.

    \n+

    Definition at line 98 of file glComputeEvaluator.h.

    \n \n
    \n
    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ GLComputeEvaluator()

    \n \n@@ -423,15 +423,15 @@\n \n \n inlinestatic \n \n \n
    \n \n-

    Definition at line 111 of file glComputeEvaluator.h.

    \n+

    Definition at line 111 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ Create() [2/2]

    \n \n
    \n@@ -479,15 +479,15 @@\n \n \n inlinestatic \n \n \n
    \n \n-

    Definition at line 99 of file glComputeEvaluator.h.

    \n+

    Definition at line 99 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatches() [1/8]

    \n \n
    \n@@ -857,15 +857,15 @@\n numPatchCoordsnumber of patchCoords.\n patchCoordsarray of locations to be evaluated.\n patchTableGLPatchTable or equivalent \n \n \n \n \n-

    Definition at line 1071 of file glComputeEvaluator.h.

    \n+

    Definition at line 1071 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatches() [4/8]

    \n \n
    \n@@ -1025,15 +1025,15 @@\n patchTableGLPatchTable or equivalent\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextnot used in the GLXFB evaluator \n \n \n \n \n-

    Definition at line 870 of file glComputeEvaluator.h.

    \n+

    Definition at line 870 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatches() [5/8]

    \n \n
    \n@@ -1137,15 +1137,15 @@\n numPatchCoordsnumber of patchCoords.\n patchCoordsarray of locations to be evaluated.\n patchTableGLPatchTable or equivalent \n \n \n \n \n-

    Definition at line 997 of file glComputeEvaluator.h.

    \n+

    Definition at line 997 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatches() [6/8]

    \n \n
    \n@@ -1263,15 +1263,15 @@\n patchTableGLPatchTable or equivalent\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextnot used in the GLXFB evaluator \n \n \n \n \n-

    Definition at line 769 of file glComputeEvaluator.h.

    \n+

    Definition at line 769 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatches() [7/8]

    \n \n
    \n@@ -1347,15 +1347,15 @@\n numPatchCoordsnumber of patchCoords.\n patchCoordsarray of locations to be evaluated. must have BindVBO() method returning an array of PatchCoord struct in VBO.\n patchTableGLPatchTable or equivalent \n \n \n \n \n-

    Definition at line 943 of file glComputeEvaluator.h.

    \n+

    Definition at line 943 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatches() [8/8]

    \n \n
    \n@@ -1448,15 +1448,15 @@\n patchTableGLPatchTable or equivalent\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextnot used in the GLXFB evaluator \n \n \n \n \n-

    Definition at line 691 of file glComputeEvaluator.h.

    \n+

    Definition at line 691 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesFaceVarying() [1/6]

    \n \n
    \n@@ -1623,15 +1623,15 @@\n fvarChannelface-varying channel\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextnot used in the GLXFB evaluator \n \n \n \n \n-

    Definition at line 1903 of file glComputeEvaluator.h.

    \n+

    Definition at line 1903 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesFaceVarying() [2/6]

    \n \n
    \n@@ -1784,15 +1784,15 @@\n patchCoordsarray of locations to be evaluated. must have BindVBO() method returning an array of PatchCoord struct in VBO.\n patchTableGLPatchTable or equivalent\n fvarChannelface-varying channel \n \n \n \n \n-

    Definition at line 2011 of file glComputeEvaluator.h.

    \n+

    Definition at line 2011 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesFaceVarying() [3/6]

    \n \n
    \n@@ -1917,15 +1917,15 @@\n fvarChannelface-varying channel\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextnot used in the GLXFB evaluator \n \n \n \n \n-

    Definition at line 1736 of file glComputeEvaluator.h.

    \n+

    Definition at line 1736 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesFaceVarying() [4/6]

    \n \n
    \n@@ -2036,15 +2036,15 @@\n patchCoordsarray of locations to be evaluated. must have BindVBO() method returning an array of PatchCoord struct in VBO.\n patchTableGLPatchTable or equivalent\n fvarChannelface-varying channel \n \n \n \n \n-

    Definition at line 1816 of file glComputeEvaluator.h.

    \n+

    Definition at line 1816 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesFaceVarying() [5/6]

    \n \n
    \n@@ -2141,15 +2141,15 @@\n fvarChannelface-varying channel\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextnot used in the GLXFB evaluator \n \n \n \n \n-

    Definition at line 1606 of file glComputeEvaluator.h.

    \n+

    Definition at line 1606 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesFaceVarying() [6/6]

    \n \n
    \n@@ -2232,15 +2232,15 @@\n patchCoordsarray of locations to be evaluated. must have BindVBO() method returning an array of PatchCoord struct in VBO.\n patchTableGLPatchTable or equivalent\n fvarChannelface-varying channel \n \n \n \n \n-

    Definition at line 1669 of file glComputeEvaluator.h.

    \n+

    Definition at line 1669 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesVarying() [1/6]

    \n \n
    \n@@ -2386,15 +2386,15 @@\n numPatchCoordsnumber of patchCoords.\n patchCoordsarray of locations to be evaluated. must have BindVBO() method returning an array of PatchCoord struct in VBO.\n patchTableGLPatchTable or equivalent \n \n \n \n \n-

    Definition at line 1544 of file glComputeEvaluator.h.

    \n+

    Definition at line 1544 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesVarying() [2/6]

    \n \n
    \n@@ -2554,15 +2554,15 @@\n patchTableGLPatchTable or equivalent\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextnot used in the GLXFB evaluator \n \n \n \n \n-

    Definition at line 1439 of file glComputeEvaluator.h.

    \n+

    Definition at line 1439 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesVarying() [3/6]

    \n \n
    \n@@ -2666,15 +2666,15 @@\n numPatchCoordsnumber of patchCoords.\n patchCoordsarray of locations to be evaluated. must have BindVBO() method returning an array of PatchCoord struct in VBO.\n patchTableGLPatchTable or equivalent \n \n \n \n \n-

    Definition at line 1355 of file glComputeEvaluator.h.

    \n+

    Definition at line 1355 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesVarying() [4/6]

    \n \n
    \n@@ -2792,15 +2792,15 @@\n patchTableGLPatchTable or equivalent\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextnot used in the GLXFB evaluator \n \n \n \n \n-

    Definition at line 1278 of file glComputeEvaluator.h.

    \n+

    Definition at line 1278 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesVarying() [5/6]

    \n \n
    \n@@ -2876,15 +2876,15 @@\n numPatchCoordsnumber of patchCoords.\n patchCoordsarray of locations to be evaluated. must have BindVBO() method returning an array of PatchCoord struct in VBO.\n patchTableGLPatchTable or equivalent \n \n \n \n \n-

    Definition at line 1214 of file glComputeEvaluator.h.

    \n+

    Definition at line 1214 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesVarying() [6/6]

    \n \n
    \n@@ -2974,15 +2974,15 @@\n patchTableGLPatchTable or equivalent\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextnot used in the GLXFB evaluator \n \n \n \n \n-

    Definition at line 1154 of file glComputeEvaluator.h.

    \n+

    Definition at line 1154 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalStencils() [1/8]

    \n \n
    \n@@ -3447,15 +3447,15 @@\n dvvBufferOutput buffer 2nd derivative wrt v must have BindVBO() method returning a GL buffer object of destination data\n dvvDescvertex buffer descriptor for the dvvBuffer\n stencilTablestencil table to be applied. The table must have SSBO interfaces. \n \n \n \n \n-

    Definition at line 502 of file glComputeEvaluator.h.

    \n+

    Definition at line 502 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalStencils() [4/8]

    \n \n
    \n@@ -3601,15 +3601,15 @@\n stencilTablestencil table to be applied. The table must have SSBO interfaces.\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextnot used in the GLSL kernel \n \n \n \n \n-

    Definition at line 326 of file glComputeEvaluator.h.

    \n+

    Definition at line 326 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalStencils() [5/8]

    \n \n
    \n@@ -3699,15 +3699,15 @@\n dvBufferOutput buffer derivative wrt v must have BindVBO() method returning a GL buffer object of destination data\n dvDescvertex buffer descriptor for the dvBuffer\n stencilTablestencil table to be applied. The table must have SSBO interfaces. \n \n \n \n \n-

    Definition at line 434 of file glComputeEvaluator.h.

    \n+

    Definition at line 434 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalStencils() [6/8]

    \n \n
    \n@@ -3811,15 +3811,15 @@\n stencilTablestencil table to be applied. The table must have SSBO interfaces.\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextnot used in the GLSL kernel \n \n \n \n \n-

    Definition at line 236 of file glComputeEvaluator.h.

    \n+

    Definition at line 236 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalStencils() [7/8]

    \n \n
    \n@@ -3881,15 +3881,15 @@\n dstBufferOutput primvar buffer must have BindVBO() method returning a GL buffer object of destination data\n dstDescvertex buffer descriptor for the output buffer\n stencilTablestencil table to be applied. The table must have SSBO interfaces. \n \n \n \n \n-

    Definition at line 386 of file glComputeEvaluator.h.

    \n+

    Definition at line 386 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalStencils() [8/8]

    \n \n
    \n@@ -3968,15 +3968,15 @@\n stencilTablestencil table to be applied. The table must have SSBO interfaces.\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextnot used in the GLSL kernel \n \n \n \n \n-

    Definition at line 168 of file glComputeEvaluator.h.

    \n+

    Definition at line 168 of file glComputeEvaluator.h.

    \n \n
    \n \n \n

    ◆ Synchronize()

    \n \n
    \n@@ -4001,15 +4001,15 @@\n
    \n \n

    Wait the dispatched kernel finishes.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
    \n
    GLLegacyGregoryPatchTable Class Reference
    \n \n
    \n \n-

    #include <glLegacyGregoryPatchTable.h>

    \n+

    #include <glLegacyGregoryPatchTable.h>

    \n
    \n Inheritance diagram for GLLegacyGregoryPatchTable:
    \n
    \n
    \n \"\"/\n
    \n \n@@ -131,15 +131,15 @@\n \n \n \n

    \n Protected Member Functions

     GLLegacyGregoryPatchTable ()
     
    \n

    Detailed Description

    \n
    \n-

    Definition at line 39 of file glLegacyGregoryPatchTable.h.

    \n+

    Definition at line 39 of file glLegacyGregoryPatchTable.h.

    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ ~GLLegacyGregoryPatchTable()

    \n \n
    \n
    \n \n@@ -226,15 +226,15 @@\n \n \n \n
    \n inline
    \n
    \n \n-

    Definition at line 60 of file glLegacyGregoryPatchTable.h.

    \n+

    Definition at line 60 of file glLegacyGregoryPatchTable.h.

    \n \n
    \n
    \n \n

    ◆ GetQuadOffsetsTextureBuffer()

    \n \n
    \n@@ -253,15 +253,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 56 of file glLegacyGregoryPatchTable.h.

    \n+

    Definition at line 56 of file glLegacyGregoryPatchTable.h.

    \n \n
    \n
    \n \n

    ◆ GetVertexTextureBuffer()

    \n \n
    \n@@ -280,15 +280,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 48 of file glLegacyGregoryPatchTable.h.

    \n+

    Definition at line 48 of file glLegacyGregoryPatchTable.h.

    \n \n
    \n \n \n

    ◆ GetVertexValenceTextureBuffer()

    \n \n
    \n@@ -307,15 +307,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 52 of file glLegacyGregoryPatchTable.h.

    \n+

    Definition at line 52 of file glLegacyGregoryPatchTable.h.

    \n \n
    \n \n \n

    ◆ UpdateVertexBuffer()

    \n \n
    \n@@ -330,15 +330,15 @@\n \n \n
    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
    \n
    \n \n-

    #include <glslPatchShaderSource.h>

    \n+

    #include <glslPatchShaderSource.h>

    \n \n \n \n \n \n \n@@ -111,15 +111,15 @@\n \n \n \n \n

    \n Static Public Member Functions

    static std::string GetCommonShaderSource ()
     
    static std::string GetPatchBasisShaderSource ()
     
    static std::string GetTessControlShaderSource (Far::PatchDescriptor::Type type)
     
    static std::string GetTessEvalShaderSource (Far::PatchDescriptor::Type type)
     
    \n

    Detailed Description

    \n
    \n-

    Definition at line 37 of file glslPatchShaderSource.h.

    \n+

    Definition at line 37 of file glslPatchShaderSource.h.

    \n

    Member Function Documentation

    \n \n

    ◆ GetCommonShaderSource()

    \n \n
    \n
    \n \n@@ -242,15 +242,15 @@\n \n
    \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n
    \n \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Osd
    • GLSLPatchShaderSource
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a01237.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a01237.html", "unified_diff": "@@ -99,15 +99,15 @@\n
      GLVertexBuffer Class Reference
      \n
    \n
    \n \n

    Concrete vertex buffer class for GLSL subdivision and OpenGL drawing. \n More...

    \n \n-

    #include <glVertexBuffer.h>

    \n+

    #include <glVertexBuffer.h>

    \n \n \n \n \n \n \n@@ -136,15 +136,15 @@\n \n \n

    \n Public Member Functions

     ~GLVertexBuffer ()
     Destructor.
     
    void UpdateData (const float *src, int startVertex, int numVertices, void *deviceContext=NULL)
    bool allocate ()
     
    \n

    Detailed Description

    \n

    Concrete vertex buffer class for GLSL subdivision and OpenGL drawing.

    \n

    GLVertexBuffer implements GLVertexBufferInterface. An instance of this buffer class can be passed to OsdGLComputeEvaluator.

    \n \n-

    Definition at line 44 of file glVertexBuffer.h.

    \n+

    Definition at line 44 of file glVertexBuffer.h.

    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ ~GLVertexBuffer()

    \n \n
    \n
    \n \n@@ -366,15 +366,15 @@\n
    \n
    \n

    This method is meant to be used in client code in order to provide coarse vertices data to Osd.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n
    \n \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Osd
    • GLVertexBuffer
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a01241.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a01241.html", "unified_diff": "@@ -98,15 +98,15 @@\n
      GLStencilTableTBO Class Reference
      \n
    \n
    \n \n

    GL TextureBuffer stencil table. \n More...

    \n \n-

    #include <glXFBEvaluator.h>

    \n+

    #include <glXFBEvaluator.h>

    \n \n \n \n \n \n \n@@ -141,15 +141,15 @@\n \n

    \n Public Member Functions

     GLStencilTableTBO (Far::StencilTable const *stencilTable)
     
     GLStencilTableTBO (Far::LimitStencilTable const *limitStencilTable)
     
     
    \n

    Detailed Description

    \n

    GL TextureBuffer stencil table.

    \n

    This class is a GL Texture Buffer representation of Far::StencilTable.

    \n

    GLSLTransformFeedback consumes this table to apply stencils

    \n \n-

    Definition at line 52 of file glXFBEvaluator.h.

    \n+

    Definition at line 52 of file glXFBEvaluator.h.

    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ GLStencilTableTBO() [1/2]

    \n \n
    \n
    \n \n@@ -247,15 +247,15 @@\n \n \n \n
    \n inlinestatic
    \n
    \n \n-

    Definition at line 60 of file glXFBEvaluator.h.

    \n+

    Definition at line 60 of file glXFBEvaluator.h.

    \n \n
    \n
    \n \n

    ◆ Create() [2/2]

    \n \n
    \n@@ -285,15 +285,15 @@\n \n \n inlinestatic \n \n \n
    \n \n-

    Definition at line 54 of file glXFBEvaluator.h.

    \n+

    Definition at line 54 of file glXFBEvaluator.h.

    \n \n
    \n
    \n \n

    ◆ GetDuuWeightsTexture()

    \n \n
    \n@@ -312,15 +312,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 78 of file glXFBEvaluator.h.

    \n+

    Definition at line 78 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ GetDuvWeightsTexture()

    \n \n
    \n@@ -339,15 +339,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 79 of file glXFBEvaluator.h.

    \n+

    Definition at line 79 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ GetDuWeightsTexture()

    \n \n
    \n@@ -366,15 +366,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 76 of file glXFBEvaluator.h.

    \n+

    Definition at line 76 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ GetDvvWeightsTexture()

    \n \n
    \n@@ -393,15 +393,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 80 of file glXFBEvaluator.h.

    \n+

    Definition at line 80 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ GetDvWeightsTexture()

    \n \n
    \n@@ -420,15 +420,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 77 of file glXFBEvaluator.h.

    \n+

    Definition at line 77 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ GetIndicesTexture()

    \n \n
    \n@@ -447,15 +447,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 74 of file glXFBEvaluator.h.

    \n+

    Definition at line 74 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ GetNumStencils()

    \n \n
    \n@@ -474,15 +474,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 81 of file glXFBEvaluator.h.

    \n+

    Definition at line 81 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ GetOffsetsTexture()

    \n \n
    \n@@ -501,15 +501,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 73 of file glXFBEvaluator.h.

    \n+

    Definition at line 73 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ GetSizesTexture()

    \n \n
    \n@@ -528,15 +528,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 72 of file glXFBEvaluator.h.

    \n+

    Definition at line 72 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ GetWeightsTexture()

    \n \n
    \n@@ -555,20 +555,20 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 75 of file glXFBEvaluator.h.

    \n+

    Definition at line 75 of file glXFBEvaluator.h.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
    \n
    GLXFBEvaluator Class Reference
    \n \n
    \n \n-

    #include <glXFBEvaluator.h>

    \n+

    #include <glXFBEvaluator.h>

    \n \n \n \n \n

    \n Public Types

    typedef bool Instantiatable
     
    \n \n \n \n \n

    \n@@ -247,29 +247,29 @@\n

     
    static void Synchronize (void *kernel)
     Wait the dispatched kernel finishes.
     
    \n

    Detailed Description

    \n
    \n-

    Definition at line 98 of file glXFBEvaluator.h.

    \n+

    Definition at line 98 of file glXFBEvaluator.h.

    \n

    Member Typedef Documentation

    \n \n

    ◆ Instantiatable

    \n \n
    \n
    \n \n \n \n \n
    typedef bool Instantiatable
    \n
    \n \n-

    Definition at line 100 of file glXFBEvaluator.h.

    \n+

    Definition at line 100 of file glXFBEvaluator.h.

    \n \n
    \n
    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ GLXFBEvaluator()

    \n \n@@ -421,15 +421,15 @@\n \n \n inlinestatic \n \n \n
    \n \n-

    Definition at line 126 of file glXFBEvaluator.h.

    \n+

    Definition at line 126 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ Create() [2/6]

    \n \n
    \n@@ -495,15 +495,15 @@\n \n \n inlinestatic \n \n \n
    \n \n-

    Definition at line 170 of file glXFBEvaluator.h.

    \n+

    Definition at line 170 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ Create() [3/6]

    \n \n
    \n@@ -573,15 +573,15 @@\n inlinestatic \n \n \n
    \n \n

    Generic creator template.

    \n \n-

    Definition at line 140 of file glXFBEvaluator.h.

    \n+

    Definition at line 140 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ Create() [4/6]

    \n \n
    \n@@ -649,15 +649,15 @@\n inlinestatic \n \n \n
    \n \n

    Specialization to allow creation without a device context.

    \n \n-

    Definition at line 157 of file glXFBEvaluator.h.

    \n+

    Definition at line 157 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ Create() [5/6]

    \n \n
    \n@@ -709,15 +709,15 @@\n inlinestatic \n \n \n
    \n \n

    Generic creator template.

    \n \n-

    Definition at line 104 of file glXFBEvaluator.h.

    \n+

    Definition at line 104 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ Create() [6/6]

    \n \n
    \n@@ -767,15 +767,15 @@\n inlinestatic \n \n \n
    \n \n

    Specialization to allow creation without a device context.

    \n \n-

    Definition at line 117 of file glXFBEvaluator.h.

    \n+

    Definition at line 117 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatches() [1/8]

    \n \n
    \n@@ -1145,15 +1145,15 @@\n numPatchCoordsnumber of patchCoords.\n patchCoordsarray of locations to be evaluated.\n patchTableGLPatchTable or equivalent \n \n \n \n \n-

    Definition at line 1144 of file glXFBEvaluator.h.

    \n+

    Definition at line 1144 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatches() [4/8]

    \n \n
    \n@@ -1313,15 +1313,15 @@\n patchTableGLPatchTable or equivalent\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextnot used in the GLXFB evaluator \n \n \n \n \n-

    Definition at line 943 of file glXFBEvaluator.h.

    \n+

    Definition at line 943 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatches() [5/8]

    \n \n
    \n@@ -1425,15 +1425,15 @@\n numPatchCoordsnumber of patchCoords.\n patchCoordsarray of locations to be evaluated.\n patchTableGLPatchTable or equivalent \n \n \n \n \n-

    Definition at line 1070 of file glXFBEvaluator.h.

    \n+

    Definition at line 1070 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatches() [6/8]

    \n \n
    \n@@ -1551,15 +1551,15 @@\n patchTableGLPatchTable or equivalent\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextnot used in the GLXFB evaluator \n \n \n \n \n-

    Definition at line 843 of file glXFBEvaluator.h.

    \n+

    Definition at line 843 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatches() [7/8]

    \n \n
    \n@@ -1635,15 +1635,15 @@\n numPatchCoordsnumber of patchCoords.\n patchCoordsarray of locations to be evaluated. must have BindVBO() method returning an array of PatchCoord struct in VBO.\n patchTableGLPatchTable or equivalent \n \n \n \n \n-

    Definition at line 1016 of file glXFBEvaluator.h.

    \n+

    Definition at line 1016 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatches() [8/8]

    \n \n
    \n@@ -1736,15 +1736,15 @@\n patchTableGLPatchTable or equivalent\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextnot used in the GLXFB evaluator \n \n \n \n \n-

    Definition at line 765 of file glXFBEvaluator.h.

    \n+

    Definition at line 765 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesFaceVarying() [1/6]

    \n \n
    \n@@ -1911,15 +1911,15 @@\n fvarChannelface-varying channel\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextnot used in the GLXFB evaluator \n \n \n \n \n-

    Definition at line 1976 of file glXFBEvaluator.h.

    \n+

    Definition at line 1976 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesFaceVarying() [2/6]

    \n \n
    \n@@ -2072,15 +2072,15 @@\n patchCoordsarray of locations to be evaluated. must have BindVBO() method returning an array of PatchCoord struct in VBO.\n patchTableGLPatchTable or equivalent\n fvarChannelface-varying channel \n \n \n \n \n-

    Definition at line 2084 of file glXFBEvaluator.h.

    \n+

    Definition at line 2084 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesFaceVarying() [3/6]

    \n \n
    \n@@ -2205,15 +2205,15 @@\n fvarChannelface-varying channel\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextnot used in the GLXFB evaluator \n \n \n \n \n-

    Definition at line 1809 of file glXFBEvaluator.h.

    \n+

    Definition at line 1809 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesFaceVarying() [4/6]

    \n \n
    \n@@ -2324,15 +2324,15 @@\n patchCoordsarray of locations to be evaluated. must have BindVBO() method returning an array of PatchCoord struct in VBO.\n patchTableGLPatchTable or equivalent\n fvarChannelface-varying channel \n \n \n \n \n-

    Definition at line 1889 of file glXFBEvaluator.h.

    \n+

    Definition at line 1889 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesFaceVarying() [5/6]

    \n \n
    \n@@ -2429,15 +2429,15 @@\n fvarChannelface-varying channel\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextnot used in the GLXFB evaluator \n \n \n \n \n-

    Definition at line 1679 of file glXFBEvaluator.h.

    \n+

    Definition at line 1679 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesFaceVarying() [6/6]

    \n \n
    \n@@ -2520,15 +2520,15 @@\n patchCoordsarray of locations to be evaluated. must have BindVBO() method returning an array of PatchCoord struct in VBO.\n patchTableGLPatchTable or equivalent\n fvarChannelface-varying channel \n \n \n \n \n-

    Definition at line 1742 of file glXFBEvaluator.h.

    \n+

    Definition at line 1742 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesVarying() [1/6]

    \n \n
    \n@@ -2674,15 +2674,15 @@\n numPatchCoordsnumber of patchCoords.\n patchCoordsarray of locations to be evaluated. must have BindVBO() method returning an array of PatchCoord struct in VBO.\n patchTableGLPatchTable or equivalent \n \n \n \n \n-

    Definition at line 1617 of file glXFBEvaluator.h.

    \n+

    Definition at line 1617 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesVarying() [2/6]

    \n \n
    \n@@ -2842,15 +2842,15 @@\n patchTableGLPatchTable or equivalent\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextnot used in the GLXFB evaluator \n \n \n \n \n-

    Definition at line 1512 of file glXFBEvaluator.h.

    \n+

    Definition at line 1512 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesVarying() [3/6]

    \n \n
    \n@@ -2954,15 +2954,15 @@\n numPatchCoordsnumber of patchCoords.\n patchCoordsarray of locations to be evaluated. must have BindVBO() method returning an array of PatchCoord struct in VBO.\n patchTableGLPatchTable or equivalent \n \n \n \n \n-

    Definition at line 1428 of file glXFBEvaluator.h.

    \n+

    Definition at line 1428 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesVarying() [4/6]

    \n \n
    \n@@ -3080,15 +3080,15 @@\n patchTableGLPatchTable or equivalent\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextnot used in the GLXFB evaluator \n \n \n \n \n-

    Definition at line 1351 of file glXFBEvaluator.h.

    \n+

    Definition at line 1351 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesVarying() [5/6]

    \n \n
    \n@@ -3164,15 +3164,15 @@\n numPatchCoordsnumber of patchCoords.\n patchCoordsarray of locations to be evaluated. must have BindVBO() method returning an array of PatchCoord struct in VBO.\n patchTableGLPatchTable or equivalent \n \n \n \n \n-

    Definition at line 1287 of file glXFBEvaluator.h.

    \n+

    Definition at line 1287 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesVarying() [6/6]

    \n \n
    \n@@ -3262,15 +3262,15 @@\n patchTableGLPatchTable or equivalent\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextnot used in the GLXFB evaluator \n \n \n \n \n-

    Definition at line 1227 of file glXFBEvaluator.h.

    \n+

    Definition at line 1227 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalStencils() [1/8]

    \n \n
    \n@@ -3735,15 +3735,15 @@\n dvvBufferOutput buffer 2nd derivative wrt v must have BindVBO() method returning a GL buffer object of destination data\n dvvDescvertex buffer descriptor for the dvvBuffer\n stencilTablestencil table to be applied. The table must have Texture Buffer Object interfaces. \n \n \n \n \n-

    Definition at line 575 of file glXFBEvaluator.h.

    \n+

    Definition at line 575 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalStencils() [4/8]

    \n \n
    \n@@ -3889,15 +3889,15 @@\n stencilTablestencil table to be applied. The table must have Texture Buffer Object interfaces.\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextnot used in the GLSLTransformFeedback kernel \n \n \n \n \n-

    Definition at line 396 of file glXFBEvaluator.h.

    \n+

    Definition at line 396 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalStencils() [5/8]

    \n \n
    \n@@ -3987,15 +3987,15 @@\n dvBufferOutput buffer derivative wrt v must have BindVBO() method returning a GL buffer object of destination data\n dvDescvertex buffer descriptor for the dvBuffer\n stencilTablestencil table to be applied. The table must have Texture Buffer Object interfaces. \n \n \n \n \n-

    Definition at line 506 of file glXFBEvaluator.h.

    \n+

    Definition at line 506 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalStencils() [6/8]

    \n \n
    \n@@ -4099,15 +4099,15 @@\n stencilTablestencil table to be applied. The table must have Texture Buffer Object interfaces.\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextnot used in the GLSLTransformFeedback kernel \n \n \n \n \n-

    Definition at line 306 of file glXFBEvaluator.h.

    \n+

    Definition at line 306 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalStencils() [7/8]

    \n \n
    \n@@ -4169,15 +4169,15 @@\n dstBufferOutput primvar buffer must have BindVBO() method returning a GL buffer object of destination data\n dstDescvertex buffer descriptor for the output buffer\n stencilTablestencil table to be applied. The table must have Texture Buffer Object interfaces. \n \n \n \n \n-

    Definition at line 457 of file glXFBEvaluator.h.

    \n+

    Definition at line 457 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalStencils() [8/8]

    \n \n
    \n@@ -4256,15 +4256,15 @@\n stencilTablestencil table to be applied. The table must have Texture Buffer Object interfaces.\n instancecached compiled instance. Clients are supposed to pre-compile an instance of this class and provide to this function. If it's null the kernel still compute by instantiating on-demand kernel although it may cause a performance problem.\n deviceContextnot used in the GLSLTransformFeedback kernel \n \n \n \n \n-

    Definition at line 238 of file glXFBEvaluator.h.

    \n+

    Definition at line 238 of file glXFBEvaluator.h.

    \n \n
    \n \n \n

    ◆ Synchronize()

    \n \n
    \n@@ -4289,15 +4289,15 @@\n
    \n \n

    Wait the dispatched kernel finishes.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
    \n
    \n \n-

    #include <hlslPatchShaderSource.h>

    \n+

    #include <hlslPatchShaderSource.h>

    \n \n \n \n \n \n \n@@ -111,15 +111,15 @@\n \n \n \n \n

    \n Static Public Member Functions

    static std::string GetCommonShaderSource ()
     
    static std::string GetPatchBasisShaderSource ()
     
    static std::string GetHullShaderSource (Far::PatchDescriptor::Type type)
     
    static std::string GetDomainShaderSource (Far::PatchDescriptor::Type type)
     
    \n

    Detailed Description

    \n
    \n-

    Definition at line 37 of file hlslPatchShaderSource.h.

    \n+

    Definition at line 37 of file hlslPatchShaderSource.h.

    \n

    Member Function Documentation

    \n \n

    ◆ GetCommonShaderSource()

    \n \n
    \n
    \n \n@@ -242,15 +242,15 @@\n \n
    \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n
    \n \n \n
    \n
    \n
    MeshInterface< PATCH_TABLE > Class Template Referenceabstract
    \n \n
    \n \n-

    #include <mesh.h>

    \n+

    #include <mesh.h>

    \n
    \n Inheritance diagram for MeshInterface< PATCH_TABLE >:
    \n
    \n
    \n \"\"/\n \n \"Mesh<\n@@ -151,15 +151,15 @@\n  \n static void refineMesh (Far::TopologyRefiner &refiner, int level, MeshBitset bits)\n  \n \n

    Detailed Description

    \n
    template<class PATCH_TABLE>
    \n class OpenSubdiv::OPENSUBDIV_VERSION::Osd::MeshInterface< PATCH_TABLE >
    \n-

    Definition at line 68 of file mesh.h.

    \n+

    Definition at line 68 of file mesh.h.

    \n

    Member Typedef Documentation

    \n \n

    ◆ PatchTable

    \n \n
    \n
    \n
    \n@@ -167,15 +167,15 @@\n \n \n \n \n
    typedef PATCH_TABLE PatchTable
    \n
    \n \n-

    Definition at line 70 of file mesh.h.

    \n+

    Definition at line 70 of file mesh.h.

    \n \n
    \n
    \n \n

    ◆ VertexBufferBinding

    \n \n
    \n@@ -185,15 +185,15 @@\n \n \n \n \n
    typedef PatchTable::VertexBufferBinding VertexBufferBinding
    \n
    \n \n-

    Definition at line 71 of file mesh.h.

    \n+

    Definition at line 71 of file mesh.h.

    \n \n
    \n
    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ MeshInterface()

    \n \n@@ -215,15 +215,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 74 of file mesh.h.

    \n+

    Definition at line 74 of file mesh.h.

    \n \n
    \n
    \n \n

    ◆ ~MeshInterface()

    \n \n
    \n@@ -244,15 +244,15 @@\n \n \n inlinevirtual \n \n \n
    \n \n-

    Definition at line 76 of file mesh.h.

    \n+

    Definition at line 76 of file mesh.h.

    \n \n
    \n
    \n

    Member Function Documentation

    \n \n

    ◆ BindVaryingBuffer()

    \n \n@@ -500,15 +500,15 @@\n \n \n inlinestaticprotected \n \n \n
    \n \n-

    Definition at line 101 of file mesh.h.

    \n+

    Definition at line 101 of file mesh.h.

    \n \n
    \n \n \n

    ◆ refineMesh() [2/2]

    \n \n
    \n@@ -546,15 +546,15 @@\n \n \n inlinestaticprotected \n \n \n
    \n \n-

    Definition at line 117 of file mesh.h.

    \n+

    Definition at line 117 of file mesh.h.

    \n \n
    \n \n \n

    ◆ Synchronize()

    \n \n
    \n@@ -672,15 +672,15 @@\n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
    \n
    EvaluatorCacheT< EVALUATOR > Class Template Reference
    \n \n
    \n \n-

    #include <mesh.h>

    \n+

    #include <mesh.h>

    \n \n \n \n \n

    \n Classes

    struct  Entry
     
    \n \n \n \n

    \n@@ -125,15 +125,15 @@\n

    template<typename DEVICE_CONTEXT >
    EVALUATOR * GetEvaluator (BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, DEVICE_CONTEXT *deviceContext)
     
    \n

    Detailed Description

    \n
    template<typename EVALUATOR>
    \n class OpenSubdiv::OPENSUBDIV_VERSION::Osd::EvaluatorCacheT< EVALUATOR >
    \n-

    Definition at line 186 of file mesh.h.

    \n+

    Definition at line 186 of file mesh.h.

    \n

    Member Typedef Documentation

    \n \n

    ◆ Evaluators

    \n \n
    \n
    \n
    \n@@ -141,15 +141,15 @@\n \n \n \n \n
    typedef std::vector<Entry> Evaluators
    \n
    \n \n-

    Definition at line 225 of file mesh.h.

    \n+

    Definition at line 225 of file mesh.h.

    \n \n
    \n
    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ ~EvaluatorCacheT()

    \n \n@@ -171,15 +171,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 188 of file mesh.h.

    \n+

    Definition at line 188 of file mesh.h.

    \n \n
    \n
    \n

    Member Function Documentation

    \n \n

    ◆ GetEvaluator() [1/3]

    \n \n@@ -250,15 +250,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 255 of file mesh.h.

    \n+

    Definition at line 255 of file mesh.h.

    \n \n
    \n \n \n

    ◆ GetEvaluator() [2/3]

    \n \n
    \n@@ -310,15 +310,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 241 of file mesh.h.

    \n+

    Definition at line 241 of file mesh.h.

    \n \n
    \n \n \n

    ◆ GetEvaluator() [3/3]

    \n \n
    \n@@ -358,20 +358,20 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 228 of file mesh.h.

    \n+

    Definition at line 228 of file mesh.h.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
    \n
    EvaluatorCacheT< EVALUATOR >::Entry Struct Reference
    \n \n
    \n \n-

    #include <mesh.h>

    \n+

    #include <mesh.h>

    \n \n \n \n \n \n \n@@ -126,15 +126,15 @@\n \n \n \n

    \n Public Member Functions

     Entry (BufferDescriptor const &srcDescArg, BufferDescriptor const &dstDescArg, BufferDescriptor const &duDescArg, BufferDescriptor const &dvDescArg, EVALUATOR *evalArg)
     
     Entry (BufferDescriptor const &srcDescArg, BufferDescriptor const &dstDescArg, BufferDescriptor const &duDescArg, BufferDescriptor const &dvDescArg, BufferDescriptor const &duuDescArg, BufferDescriptor const &duvDescArg, BufferDescriptor const &dvvDescArg, EVALUATOR *evalArg)
     
     
    EVALUATOR * evaluator
     
    \n

    Detailed Description

    \n
    template<typename EVALUATOR>
    \n struct OpenSubdiv::OPENSUBDIV_VERSION::Osd::EvaluatorCacheT< EVALUATOR >::Entry
    \n-

    Definition at line 196 of file mesh.h.

    \n+

    Definition at line 196 of file mesh.h.

    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ Entry() [1/2]

    \n \n
    \n
    \n
    \n@@ -182,15 +182,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 197 of file mesh.h.

    \n+

    Definition at line 197 of file mesh.h.

    \n \n
    \n
    \n \n

    ◆ Entry() [2/2]

    \n \n
    \n@@ -258,15 +258,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 207 of file mesh.h.

    \n+

    Definition at line 207 of file mesh.h.

    \n \n
    \n
    \n

    Member Data Documentation

    \n \n

    ◆ dstDesc

    \n \n@@ -277,15 +277,15 @@\n \n \n \n \n
    BufferDescriptor dstDesc
    \n
    \n \n-

    Definition at line 220 of file mesh.h.

    \n+

    Definition at line 220 of file mesh.h.

    \n \n
    \n \n \n

    ◆ duDesc

    \n \n
    \n@@ -295,15 +295,15 @@\n \n \n \n \n
    BufferDescriptor duDesc
    \n
    \n \n-

    Definition at line 221 of file mesh.h.

    \n+

    Definition at line 221 of file mesh.h.

    \n \n
    \n \n \n

    ◆ duuDesc

    \n \n
    \n@@ -313,15 +313,15 @@\n \n \n \n \n
    BufferDescriptor duuDesc
    \n
    \n \n-

    Definition at line 222 of file mesh.h.

    \n+

    Definition at line 222 of file mesh.h.

    \n \n
    \n \n \n

    ◆ duvDesc

    \n \n
    \n@@ -331,15 +331,15 @@\n \n \n \n \n
    BufferDescriptor duvDesc
    \n
    \n \n-

    Definition at line 222 of file mesh.h.

    \n+

    Definition at line 222 of file mesh.h.

    \n \n
    \n \n \n

    ◆ dvDesc

    \n \n
    \n@@ -349,15 +349,15 @@\n \n \n \n \n
    BufferDescriptor dvDesc
    \n
    \n \n-

    Definition at line 221 of file mesh.h.

    \n+

    Definition at line 221 of file mesh.h.

    \n \n
    \n \n \n

    ◆ dvvDesc

    \n \n
    \n@@ -367,15 +367,15 @@\n \n \n \n \n
    BufferDescriptor dvvDesc
    \n
    \n \n-

    Definition at line 222 of file mesh.h.

    \n+

    Definition at line 222 of file mesh.h.

    \n \n
    \n \n \n

    ◆ evaluator

    \n \n
    \n@@ -385,15 +385,15 @@\n \n \n \n \n
    EVALUATOR* evaluator
    \n
    \n \n-

    Definition at line 223 of file mesh.h.

    \n+

    Definition at line 223 of file mesh.h.

    \n \n
    \n \n \n

    ◆ srcDesc

    \n \n
    \n@@ -403,20 +403,20 @@\n \n \n \n \n
    BufferDescriptor srcDesc
    \n
    \n \n-

    Definition at line 220 of file mesh.h.

    \n+

    Definition at line 220 of file mesh.h.

    \n \n
    \n \n
    The documentation for this struct was generated from the following file:\n \n \n \n
    \n
    \n
    Mesh< VERTEX_BUFFER, STENCIL_TABLE, EVALUATOR, PATCH_TABLE, DEVICE_CONTEXT > Class Template Reference
    \n \n
    \n \n-

    #include <mesh.h>

    \n+

    #include <mesh.h>

    \n
    \n Inheritance diagram for Mesh< VERTEX_BUFFER, STENCIL_TABLE, EVALUATOR, PATCH_TABLE, DEVICE_CONTEXT >:
    \n
    \n
    \n \"\"/\n \n \"MeshInterface<\n@@ -177,15 +177,15 @@\n  \n static void refineMesh (Far::TopologyRefiner &refiner, int level, MeshBitset bits)\n  \n \n

    Detailed Description

    \n
    template<typename VERTEX_BUFFER, typename STENCIL_TABLE, typename EVALUATOR, typename PATCH_TABLE, typename DEVICE_CONTEXT = void>
    \n class OpenSubdiv::OPENSUBDIV_VERSION::Osd::Mesh< VERTEX_BUFFER, STENCIL_TABLE, EVALUATOR, PATCH_TABLE, DEVICE_CONTEXT >
    \n-

    Definition at line 418 of file mesh.h.

    \n+

    Definition at line 418 of file mesh.h.

    \n

    Member Typedef Documentation

    \n \n

    ◆ DeviceContext

    \n \n
    \n
    \n
    \n@@ -193,15 +193,15 @@\n \n \n \n \n
    typedef DEVICE_CONTEXT DeviceContext
    \n
    \n \n-

    Definition at line 424 of file mesh.h.

    \n+

    Definition at line 424 of file mesh.h.

    \n \n
    \n
    \n \n

    ◆ Evaluator

    \n \n
    \n@@ -211,15 +211,15 @@\n \n \n \n \n
    typedef EVALUATOR Evaluator
    \n
    \n \n-

    Definition at line 421 of file mesh.h.

    \n+

    Definition at line 421 of file mesh.h.

    \n \n
    \n
    \n \n

    ◆ EvaluatorCache

    \n \n
    \n@@ -229,15 +229,15 @@\n \n \n \n \n
    typedef EvaluatorCacheT<Evaluator> EvaluatorCache
    \n
    \n \n-

    Definition at line 425 of file mesh.h.

    \n+

    Definition at line 425 of file mesh.h.

    \n \n
    \n
    \n \n

    ◆ PatchTable

    \n \n
    \n@@ -247,15 +247,15 @@\n \n \n \n \n
    typedef PATCH_TABLE PatchTable
    \n
    \n \n-

    Definition at line 423 of file mesh.h.

    \n+

    Definition at line 423 of file mesh.h.

    \n \n
    \n
    \n \n

    ◆ StencilTable

    \n \n
    \n@@ -265,15 +265,15 @@\n \n \n \n \n
    typedef STENCIL_TABLE StencilTable
    \n
    \n \n-

    Definition at line 422 of file mesh.h.

    \n+

    Definition at line 422 of file mesh.h.

    \n \n
    \n
    \n \n

    ◆ VertexBuffer

    \n \n
    \n@@ -283,15 +283,15 @@\n \n \n \n \n
    typedef VERTEX_BUFFER VertexBuffer
    \n
    \n \n-

    Definition at line 420 of file mesh.h.

    \n+

    Definition at line 420 of file mesh.h.

    \n \n
    \n \n \n

    ◆ VertexBufferBinding

    \n \n
    \n@@ -301,15 +301,15 @@\n \n \n \n \n
    typedef PatchTable::VertexBufferBinding VertexBufferBinding
    \n
    \n \n-

    Definition at line 426 of file mesh.h.

    \n+

    Definition at line 426 of file mesh.h.

    \n \n
    \n \n

    Constructor & Destructor Documentation

    \n \n

    ◆ Mesh()

    \n \n@@ -372,15 +372,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 428 of file mesh.h.

    \n+

    Definition at line 428 of file mesh.h.

    \n \n
    \n \n \n

    ◆ ~Mesh()

    \n \n
    \n@@ -401,15 +401,15 @@\n \n \n inlinevirtual \n \n \n
    \n \n-

    Definition at line 478 of file mesh.h.

    \n+

    Definition at line 478 of file mesh.h.

    \n \n
    \n \n

    Member Function Documentation

    \n \n

    ◆ BindVaryingBuffer()

    \n \n@@ -433,15 +433,15 @@\n inlinevirtual \n \n \n
    \n \n

    Implements MeshInterface< PATCH_TABLE >.

    \n \n-

    Definition at line 566 of file mesh.h.

    \n+

    Definition at line 566 of file mesh.h.

    \n \n
    \n \n \n

    ◆ BindVertexBuffer()

    \n \n
    \n@@ -464,15 +464,15 @@\n inlinevirtual \n \n \n
    \n \n

    Implements MeshInterface< PATCH_TABLE >.

    \n \n-

    Definition at line 562 of file mesh.h.

    \n+

    Definition at line 562 of file mesh.h.

    \n \n
    \n \n \n

    ◆ GetFarPatchTable()

    \n \n
    \n@@ -495,15 +495,15 @@\n inlinevirtual \n \n \n
    \n \n

    Implements MeshInterface< PATCH_TABLE >.

    \n \n-

    Definition at line 554 of file mesh.h.

    \n+

    Definition at line 554 of file mesh.h.

    \n \n
    \n \n \n

    ◆ GetMaxValence()

    \n \n
    \n@@ -526,15 +526,15 @@\n inlinevirtual \n \n \n
    \n \n

    Implements MeshInterface< PATCH_TABLE >.

    \n \n-

    Definition at line 560 of file mesh.h.

    \n+

    Definition at line 560 of file mesh.h.

    \n \n
    \n \n \n

    ◆ GetNumVertices()

    \n \n
    \n@@ -557,15 +557,15 @@\n inlinevirtual \n \n \n
    \n \n

    Implements MeshInterface< PATCH_TABLE >.

    \n \n-

    Definition at line 558 of file mesh.h.

    \n+

    Definition at line 558 of file mesh.h.

    \n \n
    \n \n \n

    ◆ GetPatchTable()

    \n \n
    \n@@ -588,15 +588,15 @@\n inlinevirtual \n \n \n
    \n \n

    Implements MeshInterface< PATCH_TABLE >.

    \n \n-

    Definition at line 550 of file mesh.h.

    \n+

    Definition at line 550 of file mesh.h.

    \n \n
    \n \n \n

    ◆ GetTopologyRefiner()

    \n \n
    \n@@ -617,15 +617,15 @@\n \n \n inlinevirtual \n \n \n
    \n \n-

    Definition at line 578 of file mesh.h.

    \n+

    Definition at line 578 of file mesh.h.

    \n \n
    \n \n \n

    ◆ GetVaryingBuffer()

    \n \n
    \n@@ -646,15 +646,15 @@\n \n \n inlinevirtual \n \n \n
    \n \n-

    Definition at line 574 of file mesh.h.

    \n+

    Definition at line 574 of file mesh.h.

    \n \n
    \n \n \n

    ◆ GetVertexBuffer()

    \n \n
    \n@@ -675,15 +675,15 @@\n \n \n inlinevirtual \n \n \n
    \n \n-

    Definition at line 570 of file mesh.h.

    \n+

    Definition at line 570 of file mesh.h.

    \n \n
    \n \n \n

    ◆ Refine()

    \n \n
    \n@@ -706,15 +706,15 @@\n inlinevirtual \n \n \n
    \n \n

    Implements MeshInterface< PATCH_TABLE >.

    \n \n-

    Definition at line 501 of file mesh.h.

    \n+

    Definition at line 501 of file mesh.h.

    \n \n
    \n \n \n

    ◆ Synchronize()

    \n \n
    \n@@ -737,15 +737,15 @@\n inlinevirtual \n \n \n
    \n \n

    Implements MeshInterface< PATCH_TABLE >.

    \n \n-

    Definition at line 546 of file mesh.h.

    \n+

    Definition at line 546 of file mesh.h.

    \n \n
    \n \n \n

    ◆ UpdateVaryingBuffer()

    \n \n
    \n@@ -785,15 +785,15 @@\n inlinevirtual \n \n \n
    \n \n

    Implements MeshInterface< PATCH_TABLE >.

    \n \n-

    Definition at line 495 of file mesh.h.

    \n+

    Definition at line 495 of file mesh.h.

    \n \n
    \n \n \n

    ◆ UpdateVertexBuffer()

    \n \n
    \n@@ -833,20 +833,20 @@\n inlinevirtual \n \n \n
    \n \n

    Implements MeshInterface< PATCH_TABLE >.

    \n \n-

    Definition at line 489 of file mesh.h.

    \n+

    Definition at line 489 of file mesh.h.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
    \n
    \n \n-

    #include <mtlCommon.h>

    \n+

    #include <mtlCommon.h>

    \n \n \n \n \n \n \n

    \n Public Attributes

    id< MTLDevice > device = nullptr
     
    id< MTLCommandQueue > commandQueue = nullptr
     
    \n

    Detailed Description

    \n
    \n-

    Definition at line 40 of file mtlCommon.h.

    \n+

    Definition at line 40 of file mtlCommon.h.

    \n

    Member Data Documentation

    \n \n

    ◆ commandQueue

    \n \n
    \n
    \n \n \n \n \n
    id<MTLCommandQueue> commandQueue = nullptr
    \n
    \n \n-

    Definition at line 43 of file mtlCommon.h.

    \n+

    Definition at line 43 of file mtlCommon.h.

    \n \n
    \n
    \n \n

    ◆ device

    \n \n
    \n@@ -135,20 +135,20 @@\n \n \n \n \n
    id<MTLDevice> device = nullptr
    \n
    \n \n-

    Definition at line 42 of file mtlCommon.h.

    \n+

    Definition at line 42 of file mtlCommon.h.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
    \n
    MTLLegacyGregoryPatchTable Class Reference
    \n \n
    \n \n-

    #include <mtlLegacyGregoryPatchTable.h>

    \n+

    #include <mtlLegacyGregoryPatchTable.h>

    \n
    \n Inheritance diagram for MTLLegacyGregoryPatchTable:
    \n
    \n
    \n \"\"/\n
    \n \n@@ -128,15 +128,15 @@\n \n \n \n \n
    static MTLLegacyGregoryPatchTableCreate (Far::PatchTable const *farPatchTable, DEVICE_CONTEXT context)
     
    static MTLLegacyGregoryPatchTableCreate (Far::PatchTable const *farPatchTable, MTLContext *context)
     
    \n

    Detailed Description

    \n
    \n-

    Definition at line 41 of file mtlLegacyGregoryPatchTable.h.

    \n+

    Definition at line 41 of file mtlLegacyGregoryPatchTable.h.

    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ ~MTLLegacyGregoryPatchTable()

    \n \n
    \n
    \n \n@@ -184,15 +184,15 @@\n \n \n \n
    \n inlinestatic
    \n
    \n \n-

    Definition at line 48 of file mtlLegacyGregoryPatchTable.h.

    \n+

    Definition at line 48 of file mtlLegacyGregoryPatchTable.h.

    \n \n
    \n
    \n \n

    ◆ Create() [2/2]

    \n \n
    \n@@ -248,15 +248,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 71 of file mtlLegacyGregoryPatchTable.h.

    \n+

    Definition at line 71 of file mtlLegacyGregoryPatchTable.h.

    \n \n
    \n
    \n \n

    ◆ GetQuadOffsetsBuffer()

    \n \n
    \n@@ -275,15 +275,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 66 of file mtlLegacyGregoryPatchTable.h.

    \n+

    Definition at line 66 of file mtlLegacyGregoryPatchTable.h.

    \n \n
    \n \n \n

    ◆ GetVertexBuffer()

    \n \n
    \n@@ -302,15 +302,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 56 of file mtlLegacyGregoryPatchTable.h.

    \n+

    Definition at line 56 of file mtlLegacyGregoryPatchTable.h.

    \n \n
    \n \n \n

    ◆ GetVertexValenceBuffer()

    \n \n
    \n@@ -329,15 +329,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 61 of file mtlLegacyGregoryPatchTable.h.

    \n+

    Definition at line 61 of file mtlLegacyGregoryPatchTable.h.

    \n \n
    \n \n \n

    ◆ UpdateVertexBuffer()

    \n \n
    \n@@ -374,15 +374,15 @@\n \n \n
    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
    \n
    \n \n-

    #include <mtlPatchShaderSource.h>

    \n+

    #include <mtlPatchShaderSource.h>

    \n \n \n \n \n \n \n@@ -118,15 +118,15 @@\n \n \n \n \n

    \n Static Public Member Functions

    static std::string GetCommonShaderSource ()
     
    static std::string GetPatchBasisShaderSource ()
     
    static std::string GetHullShaderSource (Far::PatchDescriptor::Type type, Far::PatchDescriptor::Type fvarType)
     
    static std::string GetDomainShaderSource (Far::PatchDescriptor::Type type, Far::PatchDescriptor::Type fvarType)
     
    \n

    Detailed Description

    \n
    \n-

    Definition at line 37 of file mtlPatchShaderSource.h.

    \n+

    Definition at line 37 of file mtlPatchShaderSource.h.

    \n

    Member Function Documentation

    \n \n

    ◆ GetCommonShaderSource()

    \n \n
    \n
    \n \n@@ -360,15 +360,15 @@\n \n

    Deprecated.

    \n

    These methods are deprecated. Clients should determine the patch type of a face-varying patch by inspecting the face-varying patch array descriptors.

    \n \n \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
    \n
    MTLPatchTable Class Reference
    \n \n
    \n \n-

    #include <mtlPatchTable.h>

    \n+

    #include <mtlPatchTable.h>

    \n
    \n Inheritance diagram for MTLPatchTable:
    \n
    \n
    \n \"\"/\n
    \n
    \n@@ -170,29 +170,29 @@\n \n \n \n \n
    std::vector< id< MTLBuffer > > _fvarIndexBuffers
     
    std::vector< id< MTLBuffer > > _fvarParamBuffers
     
    \n

    Detailed Description

    \n
    \n-

    Definition at line 46 of file mtlPatchTable.h.

    \n+

    Definition at line 46 of file mtlPatchTable.h.

    \n

    Member Typedef Documentation

    \n \n

    ◆ VertexBufferBinding

    \n \n
    \n
    \n \n \n \n \n
    typedef id<MTLBuffer> VertexBufferBinding
    \n
    \n \n-

    Definition at line 48 of file mtlPatchTable.h.

    \n+

    Definition at line 48 of file mtlPatchTable.h.

    \n \n
    \n
    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ MTLPatchTable()

    \n \n@@ -296,15 +296,15 @@\n \n \n inlinestatic \n \n \n
    \n \n-

    Definition at line 54 of file mtlPatchTable.h.

    \n+

    Definition at line 54 of file mtlPatchTable.h.

    \n \n
    \n
    \n \n

    ◆ Create() [2/2]

    \n \n
    \n@@ -360,15 +360,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 69 of file mtlPatchTable.h.

    \n+

    Definition at line 69 of file mtlPatchTable.h.

    \n \n
    \n
    \n \n

    ◆ GetFVarPatchIndexBuffer()

    \n \n
    \n@@ -388,15 +388,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 70 of file mtlPatchTable.h.

    \n+

    Definition at line 70 of file mtlPatchTable.h.

    \n \n
    \n \n \n

    ◆ GetFVarPatchParamBuffer()

    \n \n
    \n@@ -416,15 +416,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 71 of file mtlPatchTable.h.

    \n+

    Definition at line 71 of file mtlPatchTable.h.

    \n \n
    \n \n \n

    ◆ GetNumFVarChannels()

    \n \n
    \n@@ -443,15 +443,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 68 of file mtlPatchTable.h.

    \n+

    Definition at line 68 of file mtlPatchTable.h.

    \n \n
    \n \n \n

    ◆ GetPatchArrays()

    \n \n
    \n@@ -470,15 +470,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 61 of file mtlPatchTable.h.

    \n+

    Definition at line 61 of file mtlPatchTable.h.

    \n \n
    \n \n \n

    ◆ GetPatchIndexBuffer()

    \n \n
    \n@@ -497,15 +497,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 62 of file mtlPatchTable.h.

    \n+

    Definition at line 62 of file mtlPatchTable.h.

    \n \n
    \n \n \n

    ◆ GetPatchParamBuffer()

    \n \n
    \n@@ -524,15 +524,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 63 of file mtlPatchTable.h.

    \n+

    Definition at line 63 of file mtlPatchTable.h.

    \n \n
    \n \n \n

    ◆ GetVaryingPatchArrays()

    \n \n
    \n@@ -551,15 +551,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 65 of file mtlPatchTable.h.

    \n+

    Definition at line 65 of file mtlPatchTable.h.

    \n \n
    \n \n \n

    ◆ GetVaryingPatchIndexBuffer()

    \n \n
    \n@@ -578,15 +578,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 66 of file mtlPatchTable.h.

    \n+

    Definition at line 66 of file mtlPatchTable.h.

    \n \n
    \n \n

    Member Data Documentation

    \n \n

    ◆ _fvarIndexBuffers

    \n \n@@ -603,15 +603,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 86 of file mtlPatchTable.h.

    \n+

    Definition at line 86 of file mtlPatchTable.h.

    \n \n
    \n \n \n

    ◆ _fvarParamBuffers

    \n \n
    \n@@ -627,15 +627,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 87 of file mtlPatchTable.h.

    \n+

    Definition at line 87 of file mtlPatchTable.h.

    \n \n
    \n \n \n

    ◆ _fvarPatchArrays

    \n \n
    \n@@ -651,15 +651,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 85 of file mtlPatchTable.h.

    \n+

    Definition at line 85 of file mtlPatchTable.h.

    \n \n
    \n \n \n

    ◆ _indexBuffer

    \n \n
    \n@@ -675,15 +675,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 78 of file mtlPatchTable.h.

    \n+

    Definition at line 78 of file mtlPatchTable.h.

    \n \n
    \n \n \n

    ◆ _patchArrays

    \n \n
    \n@@ -699,15 +699,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 76 of file mtlPatchTable.h.

    \n+

    Definition at line 76 of file mtlPatchTable.h.

    \n \n
    \n \n \n

    ◆ _patchParamBuffer

    \n \n
    \n@@ -723,15 +723,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 79 of file mtlPatchTable.h.

    \n+

    Definition at line 79 of file mtlPatchTable.h.

    \n \n
    \n \n \n

    ◆ _varyingPatchArrays

    \n \n
    \n@@ -747,15 +747,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 81 of file mtlPatchTable.h.

    \n+

    Definition at line 81 of file mtlPatchTable.h.

    \n \n
    \n \n \n

    ◆ _varyingPatchIndexBuffer

    \n \n
    \n@@ -771,20 +771,20 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 83 of file mtlPatchTable.h.

    \n+

    Definition at line 83 of file mtlPatchTable.h.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
    \n
    \n \n-

    #include <ompEvaluator.h>

    \n+

    #include <ompEvaluator.h>

    \n \n \n \n \n \n \n@@ -171,15 +171,15 @@\n \n \n \n \n

    \n Static Public Member Functions

    template<typename SRC_BUFFER , typename DST_BUFFER , typename STENCIL_TABLE >
    static bool EvalStencils (SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, const OmpEvaluator *instance=NULL, void *deviceContext=NULL)
     Generic static eval stencils function. This function has a same signature as other device kernels have so that it can be called in the same way from OsdMesh template interface.
     
    static void Synchronize (void *deviceContext=NULL)
     
    static void SetNumThreads (int numThreads)
     
    \n

    Detailed Description

    \n
    \n-

    Definition at line 39 of file ompEvaluator.h.

    \n+

    Definition at line 39 of file ompEvaluator.h.

    \n

    Member Function Documentation

    \n \n

    ◆ EvalPatches() [1/6]

    \n \n
    \n
    \n \n@@ -717,15 +717,15 @@\n \n \n \n
    patchTableCpuPatchTable or equivalent XXX: currently Far::PatchTable can't be used due to interface mismatch
    instancenot used in the omp evaluator
    deviceContextnot used in the omp evaluator
    \n \n \n \n-

    Definition at line 607 of file ompEvaluator.h.

    \n+

    Definition at line 607 of file ompEvaluator.h.

    \n \n
    \n
    \n \n

    ◆ EvalPatches() [5/6]

    \n \n
    \n@@ -843,15 +843,15 @@\n patchTableCpuPatchTable or equivalent XXX: currently Far::PatchTable can't be used due to interface mismatch\n instancenot used in the omp evaluator\n deviceContextnot used in the omp evaluator \n \n \n \n \n-

    Definition at line 517 of file ompEvaluator.h.

    \n+

    Definition at line 517 of file ompEvaluator.h.

    \n \n
    \n
    \n \n

    ◆ EvalPatches() [6/6]

    \n \n
    \n@@ -944,15 +944,15 @@\n patchTableCpuPatchTable or equivalent XXX: currently Far::PatchTable can't be used due to interface mismatch\n instancenot used in the omp evaluator\n deviceContextnot used in the omp evaluator \n \n \n \n \n-

    Definition at line 454 of file ompEvaluator.h.

    \n+

    Definition at line 454 of file ompEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesFaceVarying() [1/3]

    \n \n
    \n@@ -1119,15 +1119,15 @@\n fvarChannelface-varying channel\n instancenot used in the omp evaluator\n deviceContextnot used in the omp evaluator \n \n \n \n \n-

    Definition at line 1188 of file ompEvaluator.h.

    \n+

    Definition at line 1188 of file ompEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesFaceVarying() [2/3]

    \n \n
    \n@@ -1252,15 +1252,15 @@\n fvarChannelface-varying channel\n instancenot used in the omp evaluator\n deviceContextnot used in the omp evaluator \n \n \n \n \n-

    Definition at line 1100 of file ompEvaluator.h.

    \n+

    Definition at line 1100 of file ompEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesFaceVarying() [3/3]

    \n \n
    \n@@ -1357,15 +1357,15 @@\n fvarChannelface-varying channel\n instancenot used in the omp evaluator\n deviceContextnot used in the omp evaluator \n \n \n \n \n-

    Definition at line 1034 of file ompEvaluator.h.

    \n+

    Definition at line 1034 of file ompEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesVarying() [1/3]

    \n \n
    \n@@ -1525,15 +1525,15 @@\n patchTableCpuPatchTable or equivalent XXX: currently Far::PatchTable can't be used due to interface mismatch\n instancenot used in the omp evaluator\n deviceContextnot used in the omp evaluator \n \n \n \n \n-

    Definition at line 971 of file ompEvaluator.h.

    \n+

    Definition at line 971 of file ompEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesVarying() [2/3]

    \n \n
    \n@@ -1651,15 +1651,15 @@\n patchTableCpuPatchTable or equivalent XXX: currently Far::PatchTable can't be used due to interface mismatch\n instancenot used in the omp evaluator\n deviceContextnot used in the omp evaluator \n \n \n \n \n-

    Definition at line 886 of file ompEvaluator.h.

    \n+

    Definition at line 886 of file ompEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalPatchesVarying() [3/3]

    \n \n
    \n@@ -1749,15 +1749,15 @@\n patchTableCpuPatchTable or equivalent XXX: currently Far::PatchTable can't be used due to interface mismatch\n instancenot used in the omp evaluator\n deviceContextnot used in the omp evaluator \n \n \n \n \n-

    Definition at line 823 of file ompEvaluator.h.

    \n+

    Definition at line 823 of file ompEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalStencils() [1/6]

    \n \n
    \n@@ -2353,15 +2353,15 @@\n stencilTableFar::StencilTable or equivalent\n instancenot used in the omp kernel (declared as a typed pointer to prevent undesirable template resolution)\n deviceContextnot used in the omp kernel \n \n \n \n \n-

    Definition at line 303 of file ompEvaluator.h.

    \n+

    Definition at line 303 of file ompEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalStencils() [5/6]

    \n \n
    \n@@ -2465,15 +2465,15 @@\n stencilTableFar::StencilTable or equivalent\n instancenot used in the omp kernel (declared as a typed pointer to prevent undesirable template resolution)\n deviceContextnot used in the omp kernel \n \n \n \n \n-

    Definition at line 168 of file ompEvaluator.h.

    \n+

    Definition at line 168 of file ompEvaluator.h.

    \n \n
    \n \n \n

    ◆ EvalStencils() [6/6]

    \n \n
    \n@@ -2552,15 +2552,15 @@\n stencilTableFar::StencilTable or equivalent\n instancenot used in the omp kernel (declared as a typed pointer to prevent undesirable template resolution)\n deviceContextnot used in the omp kernel \n \n \n \n \n-

    Definition at line 72 of file ompEvaluator.h.

    \n+

    Definition at line 72 of file ompEvaluator.h.

    \n \n
    \n \n \n

    ◆ SetNumThreads()

    \n \n
    \n@@ -2612,15 +2612,15 @@\n
    \n

    Other methods

    \n
    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Osd
    • OmpEvaluator
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a01325.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a01325.html", "unified_diff": "@@ -101,15 +101,15 @@\n
      Crease Class Reference
      \n
    \n
    \n \n

    Types, constants and utilities related to semi-sharp creasing – whose implementation is independent of the subdivision scheme. \n More...

    \n \n-

    #include <crease.h>

    \n+

    #include <crease.h>

    \n \n \n

    \n Public Types

    enum  Rule {
    \n   RULE_UNKNOWN = 0\n ,
    \n   RULE_SMOOTH = (1 << 0)\n@@ -180,15 +180,15 @@\n
    \n

    Detailed Description

    \n

    Types, constants and utilities related to semi-sharp creasing – whose implementation is independent of the subdivision scheme.

    \n

    Crease is intended to be a light-weight, trivially constructed class that computes crease-related properties – typically sharpness values and associated interpolation weights. An instance of Crease is defined with a set of options that include current and future variations that will impact computations involving sharpness values.

    \n

    The Crease methods do not use topological neighborhoods as input. The methods here rely more on the sharpness values and less on the topology, so we choose to work directly with the sharpness values. We also follow the trend of using primitive arrays in the interface to encourage local gathering for re-use.

    \n

    Note on the need for and use of sharpness values: In general, mask queries rely on the sharpness values. The common case of a smooth vertex, when known, avoids the need to inspect them, but unless the rules are well understood, users will be expected to provided them – particularly when they expect the mask queries to do all of the work (just determining if a vertex is smooth will require inspection of incident edge sharpness). Mask queries will occasionally require the subdivided sharpness values around the child vertex. So users will be expected to either provide them up front when known, or to be gathered on demand. Any implementation of subdivision with creasing cannot avoid subdividing the sharpness values first, so keeping them available for re-use is a worthwhile consideration.

    \n \n-

    Definition at line 62 of file crease.h.

    \n+

    Definition at line 62 of file crease.h.

    \n

    Member Enumeration Documentation

    \n \n

    ◆ Rule

    \n \n
    \n
    \n \n@@ -202,15 +202,15 @@\n \n \n \n \n \n
    Enumerator
    RULE_UNKNOWN 
    RULE_SMOOTH 
    RULE_DART 
    RULE_CREASE 
    RULE_CORNER 
    \n \n-

    Definition at line 82 of file crease.h.

    \n+

    Definition at line 82 of file crease.h.

    \n \n
    \n
    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ Crease() [1/2]

    \n \n@@ -230,15 +230,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 91 of file crease.h.

    \n+

    Definition at line 91 of file crease.h.

    \n \n
    \n \n \n

    ◆ Crease() [2/2]

    \n \n
    \n@@ -258,15 +258,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 92 of file crease.h.

    \n+

    Definition at line 92 of file crease.h.

    \n \n
    \n \n \n

    ◆ ~Crease()

    \n \n
    \n@@ -285,15 +285,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 93 of file crease.h.

    \n+

    Definition at line 93 of file crease.h.

    \n \n
    \n \n

    Member Function Documentation

    \n \n

    ◆ ComputeFractionalWeightAtVertex()

    \n \n@@ -362,15 +362,15 @@\n \n \n inlineprotected \n \n \n
    \n \n-

    Definition at line 207 of file crease.h.

    \n+

    Definition at line 207 of file crease.h.

    \n \n
    \n \n \n

    ◆ DetermineVertexVertexRule() [1/2]

    \n \n
    \n@@ -469,15 +469,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 228 of file crease.h.

    \n+

    Definition at line 228 of file crease.h.

    \n \n
    \n \n \n

    ◆ IsInfinite()

    \n \n
    \n@@ -497,15 +497,15 @@\n \n \n inlinestatic \n \n \n
    \n \n-

    Definition at line 72 of file crease.h.

    \n+

    Definition at line 72 of file crease.h.

    \n \n
    \n \n \n

    ◆ IsSemiSharp()

    \n \n
    \n@@ -525,15 +525,15 @@\n \n \n inlinestatic \n \n \n
    \n \n-

    Definition at line 73 of file crease.h.

    \n+

    Definition at line 73 of file crease.h.

    \n \n
    \n \n \n

    ◆ IsSharp()

    \n \n
    \n@@ -553,15 +553,15 @@\n \n \n inlinestatic \n \n \n
    \n \n-

    Definition at line 71 of file crease.h.

    \n+

    Definition at line 71 of file crease.h.

    \n \n
    \n \n \n

    ◆ IsSmooth()

    \n \n
    \n@@ -581,15 +581,15 @@\n \n \n inlinestatic \n \n \n
    \n \n-

    Definition at line 70 of file crease.h.

    \n+

    Definition at line 70 of file crease.h.

    \n \n
    \n \n \n

    ◆ IsUniform()

    \n \n
    \n@@ -608,15 +608,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 95 of file crease.h.

    \n+

    Definition at line 95 of file crease.h.

    \n \n
    \n \n \n

    ◆ SharpenBoundaryEdge()

    \n \n
    \n@@ -637,15 +637,15 @@\n \n inline \n \n \n
    \n

    Optional sharp features: Since options treat certain topological features as infinitely sharp – boundaries or (in future) non-manifold features – sharpness values should be adjusted before use. The following methods will adjust (by return) specific values according to the options applied.

    \n \n-

    Definition at line 189 of file crease.h.

    \n+

    Definition at line 189 of file crease.h.

    \n \n
    \n \n \n

    ◆ SharpenBoundaryVertex()

    \n \n
    \n@@ -665,15 +665,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 200 of file crease.h.

    \n+

    Definition at line 200 of file crease.h.

    \n \n
    \n \n \n

    ◆ SubdivideEdgeSharpnessAtVertex()

    \n \n
    \n@@ -766,15 +766,15 @@\n
    \n

    Sharpness subdivision: The computation of a Uniform subdivided sharpness value is as follows:

      \n
    • Smooth edges or verts stay Smooth
    • \n
    • Sharp edges or verts stay Sharp
    • \n
    • semi-sharp edges or verts are decremented by 1.0 but for Chaikin (and potentially future non-uniform schemes that improve upon it) the computation is more involved. In the case of edges in particular, the sharpness of a child edge is determined by the sharpness in the neighborhood of the end vertex corresponding to the child. For this reason, an alternative to subdividing sharpness that computes all child edges around a vertex is given.
    • \n
    \n \n-

    Definition at line 216 of file crease.h.

    \n+

    Definition at line 216 of file crease.h.

    \n \n
    \n \n \n

    ◆ SubdivideVertexSharpness()

    \n \n
    \n@@ -794,15 +794,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 222 of file crease.h.

    \n+

    Definition at line 222 of file crease.h.

    \n \n
    \n \n

    Member Data Documentation

    \n \n

    ◆ SHARPNESS_INFINITE

    \n \n@@ -819,15 +819,15 @@\n \n \n static \n \n \n
    \n \n-

    Definition at line 68 of file crease.h.

    \n+

    Definition at line 68 of file crease.h.

    \n \n
    \n \n \n

    ◆ SHARPNESS_SMOOTH

    \n \n
    \n@@ -844,20 +844,20 @@\n \n static \n \n \n
    \n

    Constants and related queries of sharpness values:

    \n \n-

    Definition at line 67 of file crease.h.

    \n+

    Definition at line 67 of file crease.h.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Sdc
    • Crease
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a01329.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a01329.html", "unified_diff": "@@ -98,15 +98,15 @@\n
      Options Class Reference
      \n
    \n
    \n \n

    All supported options applying to subdivision scheme. \n More...

    \n \n-

    #include <options.h>

    \n+

    #include <options.h>

    \n \n \n \n

    \n Public Types

    enum  VtxBoundaryInterpolation {
    \n   VTX_BOUNDARY_NONE = 0\n ,
    \n   VTX_BOUNDARY_EDGE_ONLY\n@@ -175,15 +175,15 @@\n
     
    \n

    Detailed Description

    \n

    All supported options applying to subdivision scheme.

    \n

    The Options class contains all supported options that can be applied to a subdivision scheme to affect the shape of the limit surface. These differ from approximations that may be applied at a higher level, i.e. options to limit the level of feature adaptive subdivision, options to ignore fractional creasing, or creasing entirely, etc. These options define the shape of a particular limit surface, including the \"shape\" of primitive variable data associated with it.

    \n

    The intent is that these sets of options be defined at a high level and propagated into the lowest-level computation in support of each subdivision scheme. Ideally it remains a set of bit-fields (essentially an int) and so remains light weight and easily passed around by value.

    \n \n-

    Definition at line 51 of file options.h.

    \n+

    Definition at line 51 of file options.h.

    \n

    Member Enumeration Documentation

    \n \n

    ◆ CreasingMethod

    \n \n
    \n
    \n \n@@ -195,15 +195,15 @@\n
    \n \n \n
    Enumerator
    CREASE_UNIFORM 

    Catmark rule.

    \n
    CREASE_CHAIKIN 

    Chaikin rule.

    \n
    \n \n-

    Definition at line 68 of file options.h.

    \n+

    Definition at line 68 of file options.h.

    \n \n
    \n
    \n \n

    ◆ FVarLinearInterpolation

    \n \n
    \n@@ -225,15 +225,15 @@\n \n FVAR_LINEAR_BOUNDARIES 

    sharpen all boundaries (\"always sharp\")

    \n \n FVAR_LINEAR_ALL 

    bilinear interpolation (\"bilinear\")

    \n \n \n \n-

    Definition at line 60 of file options.h.

    \n+

    Definition at line 60 of file options.h.

    \n \n
    \n
    \n \n

    ◆ TriangleSubdivision

    \n \n
    \n@@ -247,15 +247,15 @@\n \n \n \n
    Enumerator
    TRI_SUB_CATMARK 

    Catmark weights (Catmark scheme only)

    \n
    TRI_SUB_SMOOTH 

    \"smooth triangle\" weights (Catmark scheme only)

    \n
    \n \n-

    Definition at line 72 of file options.h.

    \n+

    Definition at line 72 of file options.h.

    \n \n
    \n \n \n

    ◆ VtxBoundaryInterpolation

    \n \n
    \n@@ -271,15 +271,15 @@\n \n VTX_BOUNDARY_EDGE_ONLY 

    all boundary edges sharpened and interpolated

    \n \n VTX_BOUNDARY_EDGE_AND_CORNER 

    all boundary edges and corner vertices sharpened and interpolated

    \n \n \n \n-

    Definition at line 53 of file options.h.

    \n+

    Definition at line 53 of file options.h.

    \n \n
    \n \n

    Constructor & Destructor Documentation

    \n \n

    ◆ Options()

    \n \n@@ -299,15 +299,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 79 of file options.h.

    \n+

    Definition at line 79 of file options.h.

    \n \n
    \n \n

    Member Function Documentation

    \n \n

    ◆ GetCreasingMethod()

    \n \n@@ -329,15 +329,15 @@\n inline \n \n \n
    \n \n

    Get edge crease rule.

    \n \n-

    Definition at line 101 of file options.h.

    \n+

    Definition at line 101 of file options.h.

    \n \n
    \n \n \n

    ◆ GetFVarLinearInterpolation()

    \n \n
    \n@@ -358,15 +358,15 @@\n inline \n \n \n
    \n \n

    Get face-varying interpolation rule.

    \n \n-

    Definition at line 95 of file options.h.

    \n+

    Definition at line 95 of file options.h.

    \n \n
    \n \n \n

    ◆ GetTriangleSubdivision()

    \n \n
    \n@@ -387,15 +387,15 @@\n inline \n \n \n
    \n \n

    Get triangle subdivision weights rule (Catmark scheme only !)

    \n \n-

    Definition at line 107 of file options.h.

    \n+

    Definition at line 107 of file options.h.

    \n \n
    \n \n \n

    ◆ GetVtxBoundaryInterpolation()

    \n \n
    \n@@ -416,15 +416,15 @@\n inline \n \n \n
    \n \n

    Get vertex boundary interpolation rule.

    \n \n-

    Definition at line 89 of file options.h.

    \n+

    Definition at line 89 of file options.h.

    \n \n
    \n \n \n

    ◆ SetCreasingMethod()

    \n \n
    \n@@ -446,15 +446,15 @@\n inline \n \n \n
    \n \n

    Set edge crease rule.

    \n \n-

    Definition at line 104 of file options.h.

    \n+

    Definition at line 104 of file options.h.

    \n \n
    \n \n \n

    ◆ SetFVarLinearInterpolation()

    \n \n
    \n@@ -476,15 +476,15 @@\n inline \n \n \n
    \n \n

    Set face-varying interpolation rule.

    \n \n-

    Definition at line 98 of file options.h.

    \n+

    Definition at line 98 of file options.h.

    \n \n
    \n \n \n

    ◆ SetTriangleSubdivision()

    \n \n
    \n@@ -506,15 +506,15 @@\n inline \n \n \n
    \n \n

    Set triangle subdivision weights rule (Catmark scheme only !)

    \n \n-

    Definition at line 110 of file options.h.

    \n+

    Definition at line 110 of file options.h.

    \n \n
    \n \n \n

    ◆ SetVtxBoundaryInterpolation()

    \n \n
    \n@@ -536,20 +536,20 @@\n inline \n \n \n
    \n \n

    Set vertex boundary interpolation rule.

    \n \n-

    Definition at line 92 of file options.h.

    \n+

    Definition at line 92 of file options.h.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
      \n
    • OpenSubdiv
    • OPENSUBDIV_VERSION
    • Sdc
    • Options
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a01333.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a01333.html", "unified_diff": "@@ -101,15 +101,15 @@\n
    \n
    \n \n

    Scheme is a class template which provides all implementation for the subdivision schemes supported by OpenSubdiv through specializations of the methods of each. An instance of Scheme<SCHEME_TYPE> includes a set of Options that will dictate the variable aspects of its behavior.
    \n \n More...

    \n \n-

    #include <scheme.h>

    \n+

    #include <scheme.h>

    \n \n \n \n \n

    \n Classes

    class  LocalMask
     
    \n \n \n \n

    \n@@ -273,15 +273,15 @@\n
    template<SchemeType SCHEME_TYPE>
    \n class OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Scheme< SCHEME_TYPE >

    Scheme is a class template which provides all implementation for the subdivision schemes supported by OpenSubdiv through specializations of the methods of each. An instance of Scheme<SCHEME_TYPE> includes a set of Options that will dictate the variable aspects of its behavior.
    \n

    \n

    The primary purpose of Scheme is to provide the mask weights for vertices generated by subdivision. Methods to determine the masks are given topological neighborhoods from which to compute the appropriate weights for neighboring components. While these neighborhoods may require sharpness values for creasing, the computation of subdivided crease values is independent of the scheme type and is also made available through the Crease class.

    \n

    Mask queries are assisted by two utility classes – a Neighborhood class defining the set of relevant data in the topological neighborhood of the vertex being subdivided, and a Mask class into which the associated mask weights will be stored. Depending on where and how these queries are used, more or less information may be available. See the details of the Neighborhood classes as appropriate initialization of them is critical. It is generally best to initialize them with what data is known and accessible for immediate and efficient retrieval, but subclasses can be created to gather it lazily if desired.
    \n

    \n \n-

    Definition at line 66 of file scheme.h.

    \n+

    Definition at line 66 of file scheme.h.

    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ Scheme() [1/2]

    \n \n
    \n
    \n
    \n@@ -300,15 +300,15 @@\n
    \n inline
    \n
    \n \n-

    Definition at line 70 of file scheme.h.

    \n+

    Definition at line 70 of file scheme.h.

    \n \n
    \n \n \n

    ◆ Scheme() [2/2]

    \n \n
    \n@@ -330,15 +330,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 72 of file scheme.h.

    \n+

    Definition at line 72 of file scheme.h.

    \n \n
    \n \n

    Member Function Documentation

    \n \n

    ◆ assignCornerLimitMask() [1/4]

    \n \n@@ -369,15 +369,15 @@\n \n \n inlineprotected \n \n \n
    \n \n-

    Definition at line 84 of file bilinearScheme.h.

    \n+

    Definition at line 84 of file bilinearScheme.h.

    \n \n
    \n \n \n

    ◆ assignCornerLimitMask() [2/4]

    \n \n
    \n@@ -407,15 +407,15 @@\n \n \n inlineprotected \n \n \n
    \n \n-

    Definition at line 208 of file catmarkScheme.h.

    \n+

    Definition at line 208 of file catmarkScheme.h.

    \n \n
    \n \n \n

    ◆ assignCornerLimitMask() [3/4]

    \n \n
    \n@@ -529,15 +529,15 @@\n \n \n inlineprotected \n \n \n
    \n \n-

    Definition at line 118 of file bilinearScheme.h.

    \n+

    Definition at line 118 of file bilinearScheme.h.

    \n \n
    \n \n \n

    ◆ assignCornerLimitTangentMasks() [2/4]

    \n \n
    \n@@ -619,15 +619,15 @@\n \n \n inlineprotected \n \n \n
    \n \n-

    Definition at line 301 of file catmarkScheme.h.

    \n+

    Definition at line 301 of file catmarkScheme.h.

    \n \n
    \n \n \n

    ◆ assignCornerLimitTangentMasks() [4/4]

    \n \n
    \n@@ -743,15 +743,15 @@\n \n \n inlineprotected \n \n \n
    \n \n-

    Definition at line 331 of file scheme.h.

    \n+

    Definition at line 331 of file scheme.h.

    \n \n
    \n \n \n

    ◆ assignCreaseLimitMask() [1/4]

    \n \n
    \n@@ -833,15 +833,15 @@\n \n \n inlineprotected \n \n \n
    \n \n-

    Definition at line 221 of file catmarkScheme.h.

    \n+

    Definition at line 221 of file catmarkScheme.h.

    \n \n
    \n \n \n

    ◆ assignCreaseLimitMask() [3/4]

    \n \n
    \n@@ -921,15 +921,15 @@\n \n \n inlineprotected \n \n \n
    \n \n-

    Definition at line 97 of file bilinearScheme.h.

    \n+

    Definition at line 97 of file bilinearScheme.h.

    \n \n
    \n \n \n

    ◆ assignCreaseLimitTangentMasks() [1/4]

    \n \n
    \n@@ -1023,15 +1023,15 @@\n \n \n inlineprotected \n \n \n
    \n \n-

    Definition at line 334 of file catmarkScheme.h.

    \n+

    Definition at line 334 of file catmarkScheme.h.

    \n \n
    \n \n \n

    ◆ assignCreaseLimitTangentMasks() [3/4]

    \n \n
    \n@@ -1123,15 +1123,15 @@\n \n \n inlineprotected \n \n \n
    \n \n-

    Definition at line 143 of file bilinearScheme.h.

    \n+

    Definition at line 143 of file bilinearScheme.h.

    \n \n
    \n \n \n

    ◆ assignCreaseMaskForEdge() [1/2]

    \n \n
    \n@@ -1203,15 +1203,15 @@\n \n \n inlineprotected \n \n \n
    \n \n-

    Definition at line 317 of file scheme.h.

    \n+

    Definition at line 317 of file scheme.h.

    \n \n
    \n \n \n

    ◆ assignCreaseMaskForVertex() [1/3]

    \n \n
    \n@@ -1293,15 +1293,15 @@\n \n \n inlineprotected \n \n \n
    \n \n-

    Definition at line 148 of file catmarkScheme.h.

    \n+

    Definition at line 148 of file catmarkScheme.h.

    \n \n
    \n \n \n

    ◆ assignCreaseMaskForVertex() [3/3]

    \n \n
    \n@@ -1415,15 +1415,15 @@\n \n \n inlineprotected \n \n \n
    \n \n-

    Definition at line 106 of file bilinearScheme.h.

    \n+

    Definition at line 106 of file bilinearScheme.h.

    \n \n
    \n \n \n

    ◆ assignSmoothLimitMask() [3/4]

    \n \n
    \n@@ -1453,15 +1453,15 @@\n \n \n inlineprotected \n \n \n
    \n \n-

    Definition at line 247 of file catmarkScheme.h.

    \n+

    Definition at line 247 of file catmarkScheme.h.

    \n \n
    \n \n \n

    ◆ assignSmoothLimitMask() [4/4]

    \n \n
    \n@@ -1581,15 +1581,15 @@\n \n \n inlineprotected \n \n \n
    \n \n-

    Definition at line 152 of file bilinearScheme.h.

    \n+

    Definition at line 152 of file bilinearScheme.h.

    \n \n
    \n \n \n

    ◆ assignSmoothLimitTangentMasks() [3/4]

    \n \n
    \n@@ -1625,15 +1625,15 @@\n \n \n inlineprotected \n \n \n
    \n \n-

    Definition at line 453 of file catmarkScheme.h.

    \n+

    Definition at line 453 of file catmarkScheme.h.

    \n \n
    \n \n \n

    ◆ assignSmoothLimitTangentMasks() [4/4]

    \n \n
    \n@@ -1707,15 +1707,15 @@\n \n \n inlineprotected \n \n \n
    \n \n-

    Definition at line 71 of file catmarkScheme.h.

    \n+

    Definition at line 71 of file catmarkScheme.h.

    \n \n
    \n \n \n

    ◆ assignSmoothMaskForEdge() [2/3]

    \n \n
    \n@@ -1863,15 +1863,15 @@\n \n \n inlineprotected \n \n \n
    \n \n-

    Definition at line 173 of file catmarkScheme.h.

    \n+

    Definition at line 173 of file catmarkScheme.h.

    \n \n
    \n \n \n

    ◆ assignSmoothMaskForVertex() [3/3]

    \n \n
    \n@@ -1943,15 +1943,15 @@\n \n )\n const\n \n \n
    \n \n-

    Definition at line 62 of file bilinearScheme.h.

    \n+

    Definition at line 62 of file bilinearScheme.h.

    \n \n
    \n \n \n

    ◆ ComputeEdgeVertexMask() [2/2]

    \n \n
    \n@@ -1992,15 +1992,15 @@\n \n \n
    \n \n

    Edge-vertex masks If known, the Rule for the edge and/or the derived vertex can be specified to accelerate the computation (though the Rule for the parent is trivially determined). In particular, knowing the child rule can avoid the need to subdivide the sharpness of the edge to see if it is a transitional crease that warrants fractional blending.

    \n

    Whether to use the \"Rules\" in this interface is really debatable – the parent Rule is really based on the edge and its sharpness, while the child Rule is technically based on the neighborhood of the child vertex, but it can be deduced from the two child edges' sharpness. So the Crease methods used to compute these rules differ from those for the vertex-vertex mask. Perhaps a simple pair of new methods for Crease should be added specific to the edge-vertex case, i.e. one that takes a single sharpness (for the parent rule) and one that takes a pair (for the child).

    \n \n-

    Definition at line 392 of file scheme.h.

    \n+

    Definition at line 392 of file scheme.h.

    \n \n
    \n \n \n

    ◆ ComputeFaceVertexMask()

    \n \n
    \n@@ -2028,15 +2028,15 @@\n const\n \n \n
    \n \n

    Face-vertex masks - trivial for all current schemes.

    \n \n-

    Definition at line 348 of file scheme.h.

    \n+

    Definition at line 348 of file scheme.h.

    \n \n
    \n \n \n

    ◆ ComputeVertexLimitMask() [1/2]

    \n \n
    \n@@ -2072,15 +2072,15 @@\n \n
    \n \n

    Limit masks for vertices – position and tangents These presume that a vertex is suitably isolated for its limit to be well-defined and, unlike the refinement masks, the subdivision Rule for the vertex (presumably at its last level of refinement) is required rather than being optional. In the presence of semi-sharp creasing that has not decayed to zero, the limit is neither sharp nor smooth – in such cases the Rule specified by the caller determines the result.

    \n

    For tangent masks, the direction of the first tangent (T1) is oriented towards the leading edge of the vertex, i.e. the first incident edge of the vertex (beginning the set of incident edges in counter-clockwise order). The second tangent (T2) lies within the tangent plane such that its normal can be computed as T1 x T2. So for a boundary vertex, T1 will point along the boundary in the direction of the leading edge while T2 points inward across the limit surface.

    \n

    As for magnitude, no assumptions should be made of the magnitudes of the resulting tangent vectors. Common formulae often factor out scale factors that contribute to magnitude. While some attempt has been made to make magnitudes more consistent between regular corners, boundaries and the interior, the same has not been done at irregular vertices – at least not yet. This may be addressed in future, as having consistent magnitudes returned here can aid in the construction of patches from limit positions and tangents.

    \n \n-

    Definition at line 607 of file scheme.h.

    \n+

    Definition at line 607 of file scheme.h.

    \n \n
    \n \n \n

    ◆ ComputeVertexLimitMask() [2/2]

    \n \n
    \n@@ -2124,15 +2124,15 @@\n \n )\n const\n \n \n
    \n \n-

    Definition at line 629 of file scheme.h.

    \n+

    Definition at line 629 of file scheme.h.

    \n \n
    \n \n \n

    ◆ ComputeVertexVertexMask() [1/2]

    \n \n
    \n@@ -2166,15 +2166,15 @@\n \n )\n const\n \n \n
    \n \n-

    Definition at line 71 of file bilinearScheme.h.

    \n+

    Definition at line 71 of file bilinearScheme.h.

    \n \n
    \n \n \n

    ◆ ComputeVertexVertexMask() [2/2]

    \n \n
    \n@@ -2214,15 +2214,15 @@\n const\n \n \n
    \n \n

    Vertex-vertex masks If known, a single Rule or pair of Rules can be specified (indicating a crease transition) to accelerate the computation. Either no Rules, the first, or both should be specified. Specification of only the first Rule implies it to be true for both (wish the compiler would allow such default value specification), i.e. no transition. The case of knowing the parent Rule but deferring determination of the child Rule to this method is not supported.

    \n \n-

    Definition at line 512 of file scheme.h.

    \n+

    Definition at line 512 of file scheme.h.

    \n \n
    \n \n \n

    ◆ GetLocalNeighborhoodSize() [1/4]

    \n \n
    \n@@ -2241,15 +2241,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 53 of file bilinearScheme.h.

    \n+

    Definition at line 53 of file bilinearScheme.h.

    \n \n
    \n \n \n

    ◆ GetLocalNeighborhoodSize() [2/4]

    \n \n
    \n@@ -2268,15 +2268,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 56 of file catmarkScheme.h.

    \n+

    Definition at line 56 of file catmarkScheme.h.

    \n \n
    \n \n \n

    ◆ GetLocalNeighborhoodSize() [3/4]

    \n \n
    \n@@ -2351,15 +2351,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 74 of file scheme.h.

    \n+

    Definition at line 74 of file scheme.h.

    \n \n
    \n \n \n

    ◆ GetRegularFaceSize() [1/4]

    \n \n
    \n@@ -2378,15 +2378,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 47 of file bilinearScheme.h.

    \n+

    Definition at line 47 of file bilinearScheme.h.

    \n \n
    \n \n \n

    ◆ GetRegularFaceSize() [2/4]

    \n \n
    \n@@ -2405,15 +2405,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 50 of file catmarkScheme.h.

    \n+

    Definition at line 50 of file catmarkScheme.h.

    \n \n
    \n \n \n

    ◆ GetRegularFaceSize() [3/4]

    \n \n
    \n@@ -2486,15 +2486,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 50 of file bilinearScheme.h.

    \n+

    Definition at line 50 of file bilinearScheme.h.

    \n \n
    \n \n \n

    ◆ GetRegularVertexValence() [2/4]

    \n \n
    \n@@ -2513,15 +2513,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 53 of file catmarkScheme.h.

    \n+

    Definition at line 53 of file catmarkScheme.h.

    \n \n
    \n \n \n

    ◆ GetRegularVertexValence() [3/4]

    \n \n
    \n@@ -2594,15 +2594,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 44 of file bilinearScheme.h.

    \n+

    Definition at line 44 of file bilinearScheme.h.

    \n \n
    \n \n \n

    ◆ GetTopologicalSplitType() [2/4]

    \n \n
    \n@@ -2621,15 +2621,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 47 of file catmarkScheme.h.

    \n+

    Definition at line 47 of file catmarkScheme.h.

    \n \n
    \n \n \n

    ◆ GetTopologicalSplitType() [3/4]

    \n \n
    \n@@ -2705,20 +2705,20 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 75 of file scheme.h.

    \n+

    Definition at line 75 of file scheme.h.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
    \n
    Scheme< SCHEME_TYPE >::LocalMask< WEIGHT > Class Template Reference
    \n \n
    \n \n-

    #include <scheme.h>

    \n+

    #include <scheme.h>

    \n \n \n \n \n

    \n Public Types

    typedef WEIGHT Weight
     
    \n \n \n

    \n@@ -144,15 +144,15 @@\n

    void CombineVertexVertexMasks (Weight thisCoeff, Weight dstCoeff, USER_MASK &dst) const
     
    \n

    Detailed Description

    \n
    template<SchemeType SCHEME_TYPE>
    \n template<typename WEIGHT>
    \n class OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Scheme< SCHEME_TYPE >::LocalMask< WEIGHT >
    \n-

    Definition at line 209 of file scheme.h.

    \n+

    Definition at line 209 of file scheme.h.

    \n

    Member Typedef Documentation

    \n \n

    ◆ Weight

    \n \n
    \n
    \n
    \n@@ -162,15 +162,15 @@\n \n \n \n \n
    typedef WEIGHT Weight
    \n
    \n \n-

    Definition at line 212 of file scheme.h.

    \n+

    Definition at line 212 of file scheme.h.

    \n \n
    \n
    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ LocalMask()

    \n \n@@ -211,15 +211,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 215 of file scheme.h.

    \n+

    Definition at line 215 of file scheme.h.

    \n \n
    \n
    \n \n

    ◆ ~LocalMask()

    \n \n
    \n@@ -242,15 +242,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 216 of file scheme.h.

    \n+

    Definition at line 216 of file scheme.h.

    \n \n
    \n \n

    Member Function Documentation

    \n \n

    ◆ AreFaceWeightsForFaceCenters()

    \n \n@@ -274,15 +274,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 239 of file scheme.h.

    \n+

    Definition at line 239 of file scheme.h.

    \n \n
    \n \n \n

    ◆ CombineVertexVertexMasks()

    \n \n
    \n@@ -324,15 +324,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 249 of file scheme.h.

    \n+

    Definition at line 249 of file scheme.h.

    \n \n
    \n \n \n

    ◆ EdgeWeight() [1/2]

    \n \n
    \n@@ -356,15 +356,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 236 of file scheme.h.

    \n+

    Definition at line 236 of file scheme.h.

    \n \n
    \n \n \n

    ◆ EdgeWeight() [2/2]

    \n \n
    \n@@ -388,15 +388,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 232 of file scheme.h.

    \n+

    Definition at line 232 of file scheme.h.

    \n \n
    \n \n \n

    ◆ FaceWeight() [1/2]

    \n \n
    \n@@ -420,15 +420,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 237 of file scheme.h.

    \n+

    Definition at line 237 of file scheme.h.

    \n \n
    \n \n \n

    ◆ FaceWeight() [2/2]

    \n \n
    \n@@ -452,15 +452,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 233 of file scheme.h.

    \n+

    Definition at line 233 of file scheme.h.

    \n \n
    \n \n \n

    ◆ GetNumEdgeWeights()

    \n \n
    \n@@ -483,15 +483,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 224 of file scheme.h.

    \n+

    Definition at line 224 of file scheme.h.

    \n \n
    \n \n \n

    ◆ GetNumFaceWeights()

    \n \n
    \n@@ -514,15 +514,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 225 of file scheme.h.

    \n+

    Definition at line 225 of file scheme.h.

    \n \n
    \n \n \n

    ◆ GetNumVertexWeights()

    \n \n
    \n@@ -545,15 +545,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 223 of file scheme.h.

    \n+

    Definition at line 223 of file scheme.h.

    \n \n
    \n \n \n

    ◆ SetFaceWeightsForFaceCenters()

    \n \n
    \n@@ -577,15 +577,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 240 of file scheme.h.

    \n+

    Definition at line 240 of file scheme.h.

    \n \n
    \n \n \n

    ◆ SetNumEdgeWeights()

    \n \n
    \n@@ -609,15 +609,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 228 of file scheme.h.

    \n+

    Definition at line 228 of file scheme.h.

    \n \n
    \n \n \n

    ◆ SetNumFaceWeights()

    \n \n
    \n@@ -641,15 +641,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 229 of file scheme.h.

    \n+

    Definition at line 229 of file scheme.h.

    \n \n
    \n \n \n

    ◆ SetNumVertexWeights()

    \n \n
    \n@@ -673,15 +673,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 227 of file scheme.h.

    \n+

    Definition at line 227 of file scheme.h.

    \n \n
    \n \n \n

    ◆ VertexWeight() [1/2]

    \n \n
    \n@@ -705,15 +705,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 235 of file scheme.h.

    \n+

    Definition at line 235 of file scheme.h.

    \n \n
    \n \n \n

    ◆ VertexWeight() [2/2]

    \n \n
    \n@@ -737,20 +737,20 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 231 of file scheme.h.

    \n+

    Definition at line 231 of file scheme.h.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
    \n
    ConstArray< TYPE > Class Template Reference
    \n \n
    \n \n-

    #include <array.h>

    \n+

    #include <array.h>

    \n
    \n Inheritance diagram for ConstArray< TYPE >:
    \n
    \n
    \n \"\"/\n \n \"Array<\n@@ -153,15 +153,15 @@\n  \n size_type _size\n  \n \n

    Detailed Description

    \n
    template<typename TYPE>
    \n class OpenSubdiv::OPENSUBDIV_VERSION::Vtr::ConstArray< TYPE >
    \n-

    Definition at line 53 of file array.h.

    \n+

    Definition at line 53 of file array.h.

    \n

    Member Typedef Documentation

    \n \n

    ◆ const_iterator

    \n \n
    \n
    \n
    \n@@ -169,15 +169,15 @@\n \n \n \n \n
    typedef TYPE const* const_iterator
    \n
    \n \n-

    Definition at line 60 of file array.h.

    \n+

    Definition at line 60 of file array.h.

    \n \n
    \n
    \n \n

    ◆ const_reference

    \n \n
    \n@@ -187,15 +187,15 @@\n \n \n \n \n
    typedef TYPE const& const_reference
    \n
    \n \n-

    Definition at line 59 of file array.h.

    \n+

    Definition at line 59 of file array.h.

    \n \n
    \n
    \n \n

    ◆ iterator

    \n \n
    \n@@ -205,15 +205,15 @@\n \n \n \n \n
    typedef TYPE* iterator
    \n
    \n \n-

    Definition at line 63 of file array.h.

    \n+

    Definition at line 63 of file array.h.

    \n \n
    \n
    \n \n

    ◆ reference

    \n \n
    \n@@ -223,15 +223,15 @@\n \n \n \n \n
    typedef TYPE& reference
    \n
    \n \n-

    Definition at line 62 of file array.h.

    \n+

    Definition at line 62 of file array.h.

    \n \n
    \n
    \n \n

    ◆ size_type

    \n \n
    \n@@ -241,15 +241,15 @@\n \n \n \n \n
    typedef int size_type
    \n
    \n \n-

    Definition at line 57 of file array.h.

    \n+

    Definition at line 57 of file array.h.

    \n \n
    \n
    \n \n

    ◆ value_type

    \n \n
    \n@@ -259,15 +259,15 @@\n \n \n \n \n
    typedef TYPE value_type
    \n
    \n \n-

    Definition at line 56 of file array.h.

    \n+

    Definition at line 56 of file array.h.

    \n \n
    \n \n

    Constructor & Destructor Documentation

    \n \n

    ◆ ConstArray() [1/2]

    \n \n@@ -289,15 +289,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 67 of file array.h.

    \n+

    Definition at line 67 of file array.h.

    \n \n
    \n \n \n

    ◆ ConstArray() [2/2]

    \n \n
    \n@@ -329,15 +329,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 69 of file array.h.

    \n+

    Definition at line 69 of file array.h.

    \n \n
    \n \n

    Member Function Documentation

    \n \n

    ◆ begin()

    \n \n@@ -359,15 +359,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 77 of file array.h.

    \n+

    Definition at line 77 of file array.h.

    \n \n
    \n \n \n

    ◆ empty()

    \n \n
    \n@@ -388,15 +388,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 74 of file array.h.

    \n+

    Definition at line 74 of file array.h.

    \n \n
    \n \n \n

    ◆ end()

    \n \n
    \n@@ -417,15 +417,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 78 of file array.h.

    \n+

    Definition at line 78 of file array.h.

    \n \n
    \n \n \n

    ◆ FindIndex()

    \n \n
    \n@@ -447,15 +447,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 90 of file array.h.

    \n+

    Definition at line 90 of file array.h.

    \n \n
    \n \n \n

    ◆ FindIndexIn4Tuple()

    \n \n
    \n@@ -477,15 +477,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 80 of file array.h.

    \n+

    Definition at line 80 of file array.h.

    \n \n
    \n \n \n

    ◆ operator[]()

    \n \n
    \n@@ -507,15 +507,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 76 of file array.h.

    \n+

    Definition at line 76 of file array.h.

    \n \n
    \n \n \n

    ◆ size()

    \n \n
    \n@@ -536,15 +536,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 72 of file array.h.

    \n+

    Definition at line 72 of file array.h.

    \n \n
    \n \n

    Member Data Documentation

    \n \n

    ◆ _begin

    \n \n@@ -563,15 +563,15 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 100 of file array.h.

    \n+

    Definition at line 100 of file array.h.

    \n \n
    \n \n \n

    ◆ _size

    \n \n
    \n@@ -589,20 +589,20 @@\n \n \n protected \n \n \n
    \n \n-

    Definition at line 101 of file array.h.

    \n+

    Definition at line 101 of file array.h.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
    \n
    Array< TYPE > Class Template Reference
    \n \n
    \n \n-

    #include <array.h>

    \n+

    #include <array.h>

    \n
    \n Inheritance diagram for Array< TYPE >:
    \n
    \n
    \n \"\"/\n \n \"ConstArray<\n@@ -177,15 +177,15 @@\n  \n size_type _size\n  \n \n

    Detailed Description

    \n
    template<typename TYPE>
    \n class OpenSubdiv::OPENSUBDIV_VERSION::Vtr::Array< TYPE >
    \n-

    Definition at line 105 of file array.h.

    \n+

    Definition at line 105 of file array.h.

    \n

    Member Typedef Documentation

    \n \n

    ◆ const_reference

    \n \n
    \n
    \n
    \n@@ -193,15 +193,15 @@\n \n \n \n \n
    typedef TYPE const& const_reference
    \n
    \n \n-

    Definition at line 111 of file array.h.

    \n+

    Definition at line 111 of file array.h.

    \n \n
    \n
    \n \n

    ◆ iterator

    \n \n
    \n@@ -211,15 +211,15 @@\n \n \n \n \n
    typedef TYPE* iterator
    \n
    \n \n-

    Definition at line 114 of file array.h.

    \n+

    Definition at line 114 of file array.h.

    \n \n
    \n
    \n \n

    ◆ reference

    \n \n
    \n@@ -229,15 +229,15 @@\n \n \n \n \n
    typedef TYPE& reference
    \n
    \n \n-

    Definition at line 113 of file array.h.

    \n+

    Definition at line 113 of file array.h.

    \n \n
    \n
    \n \n

    ◆ size_type

    \n \n
    \n@@ -247,15 +247,15 @@\n \n \n \n \n
    typedef int size_type
    \n
    \n \n-

    Definition at line 109 of file array.h.

    \n+

    Definition at line 109 of file array.h.

    \n \n
    \n
    \n \n

    ◆ value_type

    \n \n
    \n@@ -265,15 +265,15 @@\n \n \n \n \n
    typedef TYPE value_type
    \n
    \n \n-

    Definition at line 108 of file array.h.

    \n+

    Definition at line 108 of file array.h.

    \n \n
    \n
    \n

    Constructor & Destructor Documentation

    \n \n

    ◆ Array() [1/2]

    \n \n@@ -295,15 +295,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 118 of file array.h.

    \n+

    Definition at line 118 of file array.h.

    \n \n
    \n \n \n

    ◆ Array() [2/2]

    \n \n
    \n@@ -335,15 +335,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 120 of file array.h.

    \n+

    Definition at line 120 of file array.h.

    \n \n
    \n \n

    Member Function Documentation

    \n \n

    ◆ begin()

    \n \n@@ -365,15 +365,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 132 of file array.h.

    \n+

    Definition at line 132 of file array.h.

    \n \n
    \n \n \n

    ◆ end()

    \n \n
    \n@@ -394,15 +394,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 136 of file array.h.

    \n+

    Definition at line 136 of file array.h.

    \n \n
    \n \n \n

    ◆ operator[]() [1/2]

    \n \n
    \n@@ -424,15 +424,15 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 128 of file array.h.

    \n+

    Definition at line 128 of file array.h.

    \n \n
    \n \n \n

    ◆ operator[]() [2/2]

    \n \n
    \n@@ -454,20 +454,20 @@\n \n \n inline \n \n \n
    \n \n-

    Definition at line 124 of file array.h.

    \n+

    Definition at line 124 of file array.h.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
    \n \n \n
    \n
      \n
    • opensubdiv
    • far
    • types.h
    • \n
    • Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by \"doxygen\"/ 1.9.8
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a01481.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a01481.html", "unified_diff": "@@ -95,15 +95,15 @@\n Classes |\n Namespaces |\n Typedefs
    \n
    types.h File Reference
    \n \n
    \n
    #include "../version.h"
    \n-#include "../far/patchTable.h"
    \n+#include "../far/patchTable.h"
    \n #include <algorithm>
    \n
    \n

    Go to the source code of this file.

    \n \n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a01481_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a01481_source.html", "unified_diff": "@@ -260,24 +260,24 @@\n
    137} // end namespace OPENSUBDIV_VERSION
    \n
    138using namespace OPENSUBDIV_VERSION;
    \n
    139
    \n
    140} // end namespace OpenSubdiv
    \n
    141
    \n
    142
    \n
    143#endif // OPENSUBDIV3_OSD_TYPES_H
    \n-\n+\n
    std::vector< PatchParam > PatchParamVector
    Definition types.h:133
    \n
    std::vector< PatchArray > PatchArrayVector
    Definition types.h:132
    \n-\n-
    Type GetType() const
    Returns the type of the patch.
    \n+\n+
    Type GetType() const
    Returns the type of the patch.
    \n \n-
    Handle that can be used as unique patch identifier within PatchTable.
    Definition patchTable.h:60
    \n-\n-\n-\n+
    Handle that can be used as unique patch identifier within PatchTable.
    Definition patchTable.h:60
    \n+\n+\n+\n
    Coordinates set on a patch table.
    Definition types.h:42
    \n
    Far::PatchTable::PatchHandle handle
    patch handle
    Definition types.h:62
    \n \n \n
    PatchCoord(Far::PatchTable::PatchHandle handleArg, float sArg, float tArg)
    Constructor.
    Definition types.h:53
    \n
    float t
    parametric location on patch
    Definition types.h:63
    \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a01484_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a01484_source.html", "unified_diff": "@@ -167,15 +167,15 @@\n
    70} // end namespace sdc
    \n
    71
    \n
    72} // end namespace OPENSUBDIV_VERSION
    \n
    73using namespace OPENSUBDIV_VERSION;
    \n
    74} // end namespace OpenSubdiv
    \n
    75
    \n
    76#endif /* OPENSUBDIV3_SDC_TYPES_H */
    \n-\n+\n
    Split
    Enumerated type for all face splitting schemes.
    Definition types.h:47
    \n \n
    @ SPLIT_TO_QUADS
    Used by Catmark and Bilinear.
    Definition types.h:48
    \n
    @ SPLIT_HYBRID
    Not currently used (potential future extension)
    Definition types.h:50
    \n
    SchemeType
    Enumerated type for all subdivision schemes supported by OpenSubdiv.
    Definition types.h:37
    \n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a01487.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a01487.html", "unified_diff": "@@ -95,15 +95,15 @@\n Namespaces |\n Typedefs |\n Functions\n
    types.h File Reference
    \n \n
    \n
    #include "../version.h"
    \n-#include "../vtr/array.h"
    \n+#include "../vtr/array.h"
    \n #include <vector>
    \n
    \n

    Go to the source code of this file.

    \n

    \n Classes

    struct  PatchCoord
    \n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/a01487_source.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/a01487_source.html", "unified_diff": "@@ -187,25 +187,25 @@\n
    86} // end namespace Vtr
    \n
    87
    \n
    88} // end namespace OPENSUBDIV_VERSION
    \n
    89using namespace OPENSUBDIV_VERSION;
    \n
    90} // end namespace OpenSubdiv
    \n
    91
    \n
    92#endif /* OPENSUBDIV3_VTR_TYPES_H */
    \n-\n+\n
    ConstArray< LocalIndex > ConstLocalIndexArray
    Definition types.h:83
    \n
    Array< LocalIndex > LocalIndexArray
    Definition types.h:82
    \n \n
    std::vector< Index > IndexVector
    Definition types.h:77
    \n
    ConstArray< Index > ConstIndexArray
    Definition types.h:80
    \n \n
    bool IndexIsValid(Index index)
    Definition types.h:58
    \n \n-\n-\n+\n+\n \n \n \n
    \n
      \n
    • opensubdiv
    • vtr
    • types.h
    • \n
    • Generated on Thu Feb 29 2024 12:58:19 for OpenSubdiv by \"doxygen\"/ 1.9.8
    • \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/dir_2483050b711c1829a6434006d0beb10c.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/dir_2483050b711c1829a6434006d0beb10c.html", "unified_diff": "@@ -97,81 +97,81 @@\n

    \n Namespaces

    namespace  OpenSubdiv
    \n \n \n \n \n \n-\n+\n \n-\n+\n \n-\n+\n \n \n \n-\n+\n \n \n \n-\n+\n \n \n \n-\n+\n \n \n \n-\n+\n \n \n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n \n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n \n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n \n \n-\n+\n \n-\n+\n \n-\n+\n \n \n \n \n \n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/dir_2483050b711c1829a6434006d0beb10c.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/dir_2483050b711c1829a6434006d0beb10c.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,42 +1,42 @@\n var dir_2483050b711c1829a6434006d0beb10c = [\n [\"bufferDescriptor.h\", \"a00899.html\", \"a00899\"],\n [\"clEvaluator.h\", \"a00803.html\", \"a00803\"],\n- [\"clPatchTable.h\", \"a00800.html\", \"a00800\"],\n- [\"clVertexBuffer.h\", \"a00788.html\", \"a00788\"],\n- [\"cpuD3D11VertexBuffer.h\", \"a00842.html\", \"a00842\"],\n+ [\"clPatchTable.h\", \"a00791.html\", \"a00791\"],\n+ [\"clVertexBuffer.h\", \"a00797.html\", \"a00797\"],\n+ [\"cpuD3D11VertexBuffer.h\", \"a00845.html\", \"a00845\"],\n [\"cpuEvaluator.h\", \"a00896.html\", \"a00896\"],\n- [\"cpuGLVertexBuffer.h\", \"a00866.html\", \"a00866\"],\n+ [\"cpuGLVertexBuffer.h\", \"a00869.html\", \"a00869\"],\n [\"cpuPatchTable.h\", \"a00893.html\", \"a00893\"],\n- [\"cpuVertexBuffer.h\", \"a00890.html\", \"a00890\"],\n+ [\"cpuVertexBuffer.h\", \"a00887.html\", \"a00887\"],\n [\"cudaEvaluator.h\", \"a00794.html\", \"a00794\"],\n- [\"cudaPatchTable.h\", \"a00791.html\", \"a00791\"],\n+ [\"cudaPatchTable.h\", \"a00788.html\", \"a00788\"],\n [\"cudaVertexBuffer.h\", \"a00902.html\", \"a00902\"],\n- [\"d3d11ComputeEvaluator.h\", \"a00845.html\", \"a00845\"],\n+ [\"d3d11ComputeEvaluator.h\", \"a00842.html\", \"a00842\"],\n [\"d3d11LegacyGregoryPatchTable.h\", \"a00839.html\", \"a00839\"],\n- [\"d3d11Mesh.h\", \"a00830.html\", \"a00830\"],\n- [\"d3d11PatchTable.h\", \"a00833.html\", \"a00833\"],\n- [\"d3d11VertexBuffer.h\", \"a00836.html\", \"a00836\"],\n- [\"glComputeEvaluator.h\", \"a00848.html\", \"a00848\"],\n- [\"glLegacyGregoryPatchTable.h\", \"a00869.html\", \"a00869\"],\n- [\"glMesh.h\", \"a00854.html\", \"a00854\"],\n+ [\"d3d11Mesh.h\", \"a00827.html\", \"a00827\"],\n+ [\"d3d11PatchTable.h\", \"a00836.html\", \"a00836\"],\n+ [\"d3d11VertexBuffer.h\", \"a00833.html\", \"a00833\"],\n+ [\"glComputeEvaluator.h\", \"a00851.html\", \"a00851\"],\n+ [\"glLegacyGregoryPatchTable.h\", \"a00866.html\", \"a00866\"],\n+ [\"glMesh.h\", \"a00857.html\", \"a00857\"],\n [\"glPatchTable.h\", \"a00863.html\", \"a00863\"],\n- [\"glslPatchShaderSource.h\", \"a00860.html\", \"a00860\"],\n- [\"glVertexBuffer.h\", \"a00857.html\", \"a00857\"],\n- [\"glXFBEvaluator.h\", \"a00851.html\", \"a00851\"],\n- [\"hlslPatchShaderSource.h\", \"a00827.html\", \"a00827\"],\n- [\"mesh.h\", \"a00887.html\", \"a00887\"],\n- [\"mtlCommon.h\", \"a00809.html\", \"a00809\"],\n+ [\"glslPatchShaderSource.h\", \"a00854.html\", \"a00854\"],\n+ [\"glVertexBuffer.h\", \"a00860.html\", \"a00860\"],\n+ [\"glXFBEvaluator.h\", \"a00848.html\", \"a00848\"],\n+ [\"hlslPatchShaderSource.h\", \"a00830.html\", \"a00830\"],\n+ [\"mesh.h\", \"a00890.html\", \"a00890\"],\n+ [\"mtlCommon.h\", \"a00806.html\", \"a00806\"],\n [\"mtlComputeEvaluator.h\", \"a00821.html\", \"a00821\"],\n- [\"mtlLegacyGregoryPatchTable.h\", \"a00815.html\", \"a00815\"],\n- [\"mtlMesh.h\", \"a00806.html\", \"a00806\"],\n- [\"mtlPatchShaderSource.h\", \"a00812.html\", \"a00812\"],\n- [\"mtlPatchTable.h\", \"a00818.html\", \"a00818\"],\n+ [\"mtlLegacyGregoryPatchTable.h\", \"a00818.html\", \"a00818\"],\n+ [\"mtlMesh.h\", \"a00812.html\", \"a00812\"],\n+ [\"mtlPatchShaderSource.h\", \"a00809.html\", \"a00809\"],\n+ [\"mtlPatchTable.h\", \"a00815.html\", \"a00815\"],\n [\"mtlVertexBuffer.h\", \"a00824.html\", \"a00824\"],\n- [\"ompEvaluator.h\", \"a00881.html\", \"a00881\"],\n- [\"ompKernel.h\", \"a00878.html\", \"a00878\"],\n- [\"opencl.h\", \"a00797.html\", null],\n+ [\"ompEvaluator.h\", \"a00878.html\", \"a00878\"],\n+ [\"ompKernel.h\", \"a00881.html\", \"a00881\"],\n+ [\"opencl.h\", \"a00800.html\", null],\n [\"opengl.h\", \"a00884.html\", null],\n [\"tbbEvaluator.h\", \"a00875.html\", \"a00875\"],\n [\"tbbKernel.h\", \"a00872.html\", \"a00872\"],\n [\"types.h\", \"a01481.html\", \"a01481\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/dir_7f420b72a822828cfa8b0561c695a5cc.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/dir_7f420b72a822828cfa8b0561c695a5cc.html", "unified_diff": "@@ -93,37 +93,37 @@\n
    \n
    far Directory Reference
    \n
    \n
    \n

    \n Files

     bufferDescriptor.h
     
     clEvaluator.h
     
     clPatchTable.h
     clPatchTable.h
     
     clVertexBuffer.h
     clVertexBuffer.h
     
     cpuD3D11VertexBuffer.h
     cpuD3D11VertexBuffer.h
     
     cpuEvaluator.h
     
     cpuGLVertexBuffer.h
     cpuGLVertexBuffer.h
     
     cpuPatchTable.h
     
     cpuVertexBuffer.h
     cpuVertexBuffer.h
     
     cudaEvaluator.h
     
     cudaPatchTable.h
     cudaPatchTable.h
     
     cudaVertexBuffer.h
     
     d3d11ComputeEvaluator.h
     d3d11ComputeEvaluator.h
     
     d3d11LegacyGregoryPatchTable.h
     
     d3d11Mesh.h
     d3d11Mesh.h
     
     d3d11PatchTable.h
     d3d11PatchTable.h
     
     d3d11VertexBuffer.h
     d3d11VertexBuffer.h
     
     glComputeEvaluator.h
     glComputeEvaluator.h
     
     glLegacyGregoryPatchTable.h
     glLegacyGregoryPatchTable.h
     
     glMesh.h
     glMesh.h
     
     glPatchTable.h
     
     glslPatchShaderSource.h
     glslPatchShaderSource.h
     
     glVertexBuffer.h
     glVertexBuffer.h
     
     glXFBEvaluator.h
     glXFBEvaluator.h
     
     hlslPatchShaderSource.h
     hlslPatchShaderSource.h
     
     mesh.h
     mesh.h
     
     mtlCommon.h
     mtlCommon.h
     
     mtlComputeEvaluator.h
     
     mtlLegacyGregoryPatchTable.h
     mtlLegacyGregoryPatchTable.h
     
     mtlMesh.h
     mtlMesh.h
     
     mtlPatchShaderSource.h
     mtlPatchShaderSource.h
     
     mtlPatchTable.h
     mtlPatchTable.h
     
     mtlVertexBuffer.h
     
     ompEvaluator.h
     ompEvaluator.h
     
     ompKernel.h
     ompKernel.h
     
     opencl.h
     opencl.h
     
     opengl.h
     
     tbbEvaluator.h
     
     tbbKernel.h
     
    \n \n-\n+\n \n-\n+\n \n \n \n \n \n-\n+\n \n-\n+\n \n \n \n \n \n \n \n \n \n-\n+\n \n-\n+\n \n \n \n \n \n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/dir_7f420b72a822828cfa8b0561c695a5cc.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/dir_7f420b72a822828cfa8b0561c695a5cc.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,17 +1,17 @@\n var dir_7f420b72a822828cfa8b0561c695a5cc = [\n- [\"error.h\", \"a00743.html\", \"a00743\"],\n- [\"patchDescriptor.h\", \"a00740.html\", \"a00740\"],\n+ [\"error.h\", \"a00740.html\", \"a00740\"],\n+ [\"patchDescriptor.h\", \"a00743.html\", \"a00743\"],\n [\"patchMap.h\", \"a00734.html\", \"a00734\"],\n [\"patchParam.h\", \"a00737.html\", \"a00737\"],\n- [\"patchTable.h\", \"a00728.html\", \"a00728\"],\n- [\"patchTableFactory.h\", \"a00731.html\", \"a00731\"],\n+ [\"patchTable.h\", \"a00731.html\", \"a00731\"],\n+ [\"patchTableFactory.h\", \"a00728.html\", \"a00728\"],\n [\"primvarRefiner.h\", \"a00725.html\", \"a00725\"],\n [\"ptexIndices.h\", \"a00722.html\", \"a00722\"],\n [\"stencilTable.h\", \"a00719.html\", \"a00719\"],\n [\"stencilTableFactory.h\", \"a00716.html\", \"a00716\"],\n- [\"topologyDescriptor.h\", \"a00710.html\", \"a00710\"],\n- [\"topologyLevel.h\", \"a00713.html\", \"a00713\"],\n+ [\"topologyDescriptor.h\", \"a00713.html\", \"a00713\"],\n+ [\"topologyLevel.h\", \"a00710.html\", \"a00710\"],\n [\"topologyRefiner.h\", \"a00707.html\", \"a00707\"],\n [\"topologyRefinerFactory.h\", \"a00704.html\", \"a00704\"],\n [\"types.h\", \"a01478.html\", \"a01478\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/dir_bd5473d7d5841d48919aaa9ad0cb1f9b.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/dir_bd5473d7d5841d48919aaa9ad0cb1f9b.html", "unified_diff": "@@ -93,21 +93,21 @@\n
    \n
    vtr Directory Reference
    \n
    \n
    \n

    \n Files

     error.h
     error.h
     
     patchDescriptor.h
     patchDescriptor.h
     
     patchMap.h
     
     patchParam.h
     
     patchTable.h
     patchTable.h
     
     patchTableFactory.h
     patchTableFactory.h
     
     primvarRefiner.h
     
     ptexIndices.h
     
     stencilTable.h
     
     stencilTableFactory.h
     
     topologyDescriptor.h
     topologyDescriptor.h
     
     topologyLevel.h
     topologyLevel.h
     
     topologyRefiner.h
     
     topologyRefinerFactory.h
     
     types.h
     
    \n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n \n \n \n \n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/dir_bd5473d7d5841d48919aaa9ad0cb1f9b.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/dir_bd5473d7d5841d48919aaa9ad0cb1f9b.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,11 +1,11 @@\n var dir_bd5473d7d5841d48919aaa9ad0cb1f9b = [\n- [\"array.h\", \"a00767.html\", \"a00767\"],\n- [\"componentInterfaces.h\", \"a00764.html\", null],\n- [\"fvarLevel.h\", \"a00758.html\", null],\n- [\"fvarRefinement.h\", \"a00761.html\", null],\n+ [\"array.h\", \"a00764.html\", \"a00764\"],\n+ [\"componentInterfaces.h\", \"a00767.html\", null],\n+ [\"fvarLevel.h\", \"a00761.html\", null],\n+ [\"fvarRefinement.h\", \"a00758.html\", null],\n [\"level.h\", \"a00755.html\", null],\n [\"refinement.h\", \"a00752.html\", null],\n [\"sparseSelector.h\", \"a00749.html\", null],\n [\"stackBuffer.h\", \"a00746.html\", null],\n [\"types.h\", \"a01487.html\", \"a01487\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/dir_f61368944c63c2c1f8c69bc232e59c39.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/dir_f61368944c63c2c1f8c69bc232e59c39.html", "unified_diff": "@@ -93,25 +93,25 @@\n
    \n
    sdc Directory Reference
    \n
    \n
    \n

    \n Files

     array.h
     array.h
     
     componentInterfaces.h
     componentInterfaces.h
     
     fvarLevel.h
     fvarLevel.h
     
     fvarRefinement.h
     fvarRefinement.h
     
     level.h
     
     refinement.h
     
     sparseSelector.h
     
    \n \n-\n+\n \n-\n+\n \n-\n+\n \n \n \n-\n+\n \n-\n+\n \n \n \n

    \n Files

     bilinearScheme.h
     bilinearScheme.h
     
     catmarkScheme.h
     catmarkScheme.h
     
     crease.h
     crease.h
     
     loopScheme.h
     
     options.h
     options.h
     
     scheme.h
     scheme.h
     
     types.h
     
    \n
    \n \n \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/dir_f61368944c63c2c1f8c69bc232e59c39.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/dir_f61368944c63c2c1f8c69bc232e59c39.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,9 +1,9 @@\n var dir_f61368944c63c2c1f8c69bc232e59c39 = [\n- [\"bilinearScheme.h\", \"a00785.html\", null],\n- [\"catmarkScheme.h\", \"a00782.html\", null],\n- [\"crease.h\", \"a00779.html\", \"a00779\"],\n+ [\"bilinearScheme.h\", \"a00779.html\", null],\n+ [\"catmarkScheme.h\", \"a00785.html\", null],\n+ [\"crease.h\", \"a00782.html\", \"a00782\"],\n [\"loopScheme.h\", \"a00776.html\", null],\n- [\"options.h\", \"a00773.html\", \"a00773\"],\n- [\"scheme.h\", \"a00770.html\", \"a00770\"],\n+ [\"options.h\", \"a00770.html\", \"a00770\"],\n+ [\"scheme.h\", \"a00773.html\", \"a00773\"],\n [\"types.h\", \"a01484.html\", \"a01484\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/dir_fa5edef2a780a73fbfb6a11f1af88ceb.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/dir_fa5edef2a780a73fbfb6a11f1af88ceb.html", "unified_diff": "@@ -93,31 +93,31 @@\n
    \n
    bfr Directory Reference
    \n
    \n \n \n \n
    \n
      \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/dir_fa5edef2a780a73fbfb6a11f1af88ceb.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/dir_fa5edef2a780a73fbfb6a11f1af88ceb.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,11 +1,11 @@\n var dir_fa5edef2a780a73fbfb6a11f1af88ceb = [\n- [\"limits.h\", \"a00698.html\", \"a00698\"],\n- [\"parameterization.h\", \"a00695.html\", \"a00695\"],\n+ [\"limits.h\", \"a00695.html\", \"a00695\"],\n+ [\"parameterization.h\", \"a00698.html\", \"a00698\"],\n [\"refinerSurfaceFactory.h\", \"a00692.html\", \"a00692\"],\n [\"surface.h\", \"a00689.html\", \"a00689\"],\n [\"surfaceFactory.h\", \"a00686.html\", \"a00686\"],\n- [\"surfaceFactoryCache.h\", \"a00683.html\", \"a00683\"],\n- [\"surfaceFactoryMeshAdapter.h\", \"a00680.html\", \"a00680\"],\n- [\"tessellation.h\", \"a00677.html\", \"a00677\"],\n- [\"vertexDescriptor.h\", \"a00674.html\", \"a00674\"]\n+ [\"surfaceFactoryCache.h\", \"a00680.html\", \"a00680\"],\n+ [\"surfaceFactoryMeshAdapter.h\", \"a00683.html\", \"a00683\"],\n+ [\"tessellation.h\", \"a00674.html\", \"a00674\"],\n+ [\"vertexDescriptor.h\", \"a00677.html\", \"a00677\"]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/files.html", "source2": "./usr/share/doc/opensubdiv/doxy_html/files.html", "unified_diff": "@@ -94,93 +94,93 @@\n
      File List
      \n
    \n
    \n
    Here is a list of all files with brief descriptions:
    \n
    [detail level 123]
    \n \n \n-\n-\n+\n+\n \n \n \n-\n-\n-\n-\n+\n+\n+\n+\n \n-\n-\n+\n+\n \n \n-\n-\n+\n+\n \n \n \n \n-\n-\n+\n+\n \n \n \n \n \n \n-\n-\n-\n+\n+\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n \n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n \n-\n-\n-\n-\n+\n+\n+\n+\n \n-\n-\n-\n+\n+\n+\n \n \n \n \n \n-\n-\n-\n+\n+\n+\n \n-\n-\n+\n+\n \n \n-\n-\n-\n-\n+\n+\n+\n+\n \n \n \n \n \n
      opensubdiv
      bfr
     limits.h
     parameterization.h
     limits.h
     parameterization.h
     refinerSurfaceFactory.h
     surface.h
     surfaceFactory.h
     surfaceFactoryCache.h
     surfaceFactoryMeshAdapter.h
     tessellation.h
     vertexDescriptor.h
     surfaceFactoryCache.h
     surfaceFactoryMeshAdapter.h
     tessellation.h
     vertexDescriptor.h
      far
     error.h
     patchDescriptor.h
     error.h
     patchDescriptor.h
     patchMap.h
     patchParam.h
     patchTable.h
     patchTableFactory.h
     patchTable.h
     patchTableFactory.h
     primvarRefiner.h
     ptexIndices.h
     stencilTable.h
     stencilTableFactory.h
     topologyDescriptor.h
     topologyLevel.h
     topologyDescriptor.h
     topologyLevel.h
     topologyRefiner.h
     topologyRefinerFactory.h
     types.h
      osd
     bufferDescriptor.h
     clEvaluator.h
     clPatchTable.h
     clVertexBuffer.h
     cpuD3D11VertexBuffer.h
     clPatchTable.h
     clVertexBuffer.h
     cpuD3D11VertexBuffer.h
     cpuEvaluator.h
     cpuGLVertexBuffer.h
     cpuGLVertexBuffer.h
     cpuPatchTable.h
     cpuVertexBuffer.h
     cpuVertexBuffer.h
     cudaEvaluator.h
     cudaPatchTable.h
     cudaPatchTable.h
     cudaVertexBuffer.h
     d3d11ComputeEvaluator.h
     d3d11ComputeEvaluator.h
     d3d11LegacyGregoryPatchTable.h
     d3d11Mesh.h
     d3d11PatchTable.h
     d3d11VertexBuffer.h
     glComputeEvaluator.h
     glLegacyGregoryPatchTable.h
     glMesh.h
     d3d11Mesh.h
     d3d11PatchTable.h
     d3d11VertexBuffer.h
     glComputeEvaluator.h
     glLegacyGregoryPatchTable.h
     glMesh.h
     glPatchTable.h
     glslPatchShaderSource.h
     glVertexBuffer.h
     glXFBEvaluator.h
     hlslPatchShaderSource.h
     mesh.h
     mtlCommon.h
     glslPatchShaderSource.h
     glVertexBuffer.h
     glXFBEvaluator.h
     hlslPatchShaderSource.h
     mesh.h
     mtlCommon.h
     mtlComputeEvaluator.h
     mtlLegacyGregoryPatchTable.h
     mtlMesh.h
     mtlPatchShaderSource.h
     mtlPatchTable.h
     mtlLegacyGregoryPatchTable.h
     mtlMesh.h
     mtlPatchShaderSource.h
     mtlPatchTable.h
     mtlVertexBuffer.h
     ompEvaluator.h
     ompKernel.h
     opencl.h
     ompEvaluator.h
     ompKernel.h
     opencl.h
     opengl.h
     tbbEvaluator.h
     tbbKernel.h
     types.h
      sdc
     bilinearScheme.h
     catmarkScheme.h
     crease.h
     bilinearScheme.h
     catmarkScheme.h
     crease.h
     loopScheme.h
     options.h
     scheme.h
     options.h
     scheme.h
     types.h
      vtr
     array.h
     componentInterfaces.h
     fvarLevel.h
     fvarRefinement.h
     array.h
     componentInterfaces.h
     fvarLevel.h
     fvarRefinement.h
     level.h
     refinement.h
     sparseSelector.h
     stackBuffer.h
     types.h
    \n
    \n"}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/navtreeindex0.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/navtreeindex0.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,197 +1,197 @@\n var NAVTREEINDEX0 = {\n- \"a00674.html\": [2, 0, 0, 0, 8],\n- \"a00674_source.html\": [2, 0, 0, 0, 8],\n- \"a00677.html\": [2, 0, 0, 0, 7],\n- \"a00677_source.html\": [2, 0, 0, 0, 7],\n- \"a00680.html\": [2, 0, 0, 0, 6],\n- \"a00680_source.html\": [2, 0, 0, 0, 6],\n- \"a00683.html\": [2, 0, 0, 0, 5],\n- \"a00683_source.html\": [2, 0, 0, 0, 5],\n+ \"a00674.html\": [2, 0, 0, 0, 7],\n+ \"a00674_source.html\": [2, 0, 0, 0, 7],\n+ \"a00677.html\": [2, 0, 0, 0, 8],\n+ \"a00677_source.html\": [2, 0, 0, 0, 8],\n+ \"a00680.html\": [2, 0, 0, 0, 5],\n+ \"a00680_source.html\": [2, 0, 0, 0, 5],\n+ \"a00683.html\": [2, 0, 0, 0, 6],\n+ \"a00683_source.html\": [2, 0, 0, 0, 6],\n \"a00686.html\": [2, 0, 0, 0, 4],\n \"a00686_source.html\": [2, 0, 0, 0, 4],\n \"a00689.html\": [2, 0, 0, 0, 3],\n \"a00689_source.html\": [2, 0, 0, 0, 3],\n \"a00692.html\": [2, 0, 0, 0, 2],\n \"a00692_source.html\": [2, 0, 0, 0, 2],\n- \"a00695.html\": [2, 0, 0, 0, 1],\n- \"a00695_source.html\": [2, 0, 0, 0, 1],\n- \"a00698.html\": [2, 0, 0, 0, 0],\n- \"a00698_source.html\": [2, 0, 0, 0, 0],\n+ \"a00695.html\": [2, 0, 0, 0, 0],\n+ \"a00695_source.html\": [2, 0, 0, 0, 0],\n+ \"a00698.html\": [2, 0, 0, 0, 1],\n+ \"a00698_source.html\": [2, 0, 0, 0, 1],\n \"a00704.html\": [2, 0, 0, 1, 13],\n \"a00704_source.html\": [2, 0, 0, 1, 13],\n \"a00707.html\": [2, 0, 0, 1, 12],\n \"a00707_source.html\": [2, 0, 0, 1, 12],\n- \"a00710.html\": [2, 0, 0, 1, 10],\n- \"a00710_source.html\": [2, 0, 0, 1, 10],\n- \"a00713.html\": [2, 0, 0, 1, 11],\n- \"a00713_source.html\": [2, 0, 0, 1, 11],\n+ \"a00710.html\": [2, 0, 0, 1, 11],\n+ \"a00710_source.html\": [2, 0, 0, 1, 11],\n+ \"a00713.html\": [2, 0, 0, 1, 10],\n+ \"a00713_source.html\": [2, 0, 0, 1, 10],\n \"a00716.html\": [2, 0, 0, 1, 9],\n \"a00716_source.html\": [2, 0, 0, 1, 9],\n \"a00719.html\": [2, 0, 0, 1, 8],\n \"a00719_source.html\": [2, 0, 0, 1, 8],\n \"a00722.html\": [2, 0, 0, 1, 7],\n \"a00722_source.html\": [2, 0, 0, 1, 7],\n \"a00725.html\": [2, 0, 0, 1, 6],\n \"a00725_source.html\": [2, 0, 0, 1, 6],\n- \"a00728.html\": [2, 0, 0, 1, 4],\n- \"a00728_source.html\": [2, 0, 0, 1, 4],\n- \"a00731.html\": [2, 0, 0, 1, 5],\n- \"a00731_source.html\": [2, 0, 0, 1, 5],\n+ \"a00728.html\": [2, 0, 0, 1, 5],\n+ \"a00728_source.html\": [2, 0, 0, 1, 5],\n+ \"a00731.html\": [2, 0, 0, 1, 4],\n+ \"a00731_source.html\": [2, 0, 0, 1, 4],\n \"a00734.html\": [2, 0, 0, 1, 2],\n \"a00734_source.html\": [2, 0, 0, 1, 2],\n \"a00737.html\": [2, 0, 0, 1, 3],\n \"a00737.html#a3139c7c52ddf26b2403e8e95ff63eeb3\": [2, 0, 0, 1, 3, 1],\n \"a00737.html#a46ea68db89cc3d55c4191ef7648281ce\": [2, 0, 0, 1, 3, 3],\n \"a00737.html#abe07210a029a01571c54276ae28b4d88\": [2, 0, 0, 1, 3, 2],\n \"a00737_source.html\": [2, 0, 0, 1, 3],\n- \"a00740.html\": [2, 0, 0, 1, 1],\n- \"a00740.html#ad258c2d8f7871bc0d40cf3a9ded6e08a\": [2, 0, 0, 1, 1, 1],\n- \"a00740_source.html\": [2, 0, 0, 1, 1],\n- \"a00743.html\": [2, 0, 0, 1, 0],\n- \"a00743.html#a25d51c3a61fb3dacded6e48d01fd2fdb\": [2, 0, 0, 1, 0, 3],\n- \"a00743.html#a2bd300390ebc686e71a3690f4a0b1726\": [2, 0, 0, 1, 0, 1],\n- \"a00743.html#a3ba4fd4ed534a5c9c32ad01fa88bb8d9\": [2, 0, 0, 1, 0, 4],\n- \"a00743.html#a73bbe6b41209e4c34234f192f0193a63\": [2, 0, 0, 1, 0, 5],\n- \"a00743.html#a97d41b6faaf421937e6b82bd1c3067db\": [2, 0, 0, 1, 0, 6],\n- \"a00743.html#aa1630f297a91dfc683dfcfddeeebb2ac\": [2, 0, 0, 1, 0, 0],\n- \"a00743.html#ab0df38968e4f03a3f1f6d6df0f31f45a\": [2, 0, 0, 1, 0, 2],\n- \"a00743.html#ab0df38968e4f03a3f1f6d6df0f31f45aa2a5bda2a3e25aa282462381f55284980\": [2, 0, 0, 1, 0, 2, 1],\n- \"a00743.html#ab0df38968e4f03a3f1f6d6df0f31f45aa3efe6cb2ec7e23769d53919dfb3291b5\": [2, 0, 0, 1, 0, 2, 2],\n- \"a00743.html#ab0df38968e4f03a3f1f6d6df0f31f45aa9b2839feb039937015e9668f601e4d32\": [2, 0, 0, 1, 0, 2, 3],\n- \"a00743.html#ab0df38968e4f03a3f1f6d6df0f31f45aabeca977bc439b451aea1325f48a52a0b\": [2, 0, 0, 1, 0, 2, 0],\n- \"a00743.html#ab0df38968e4f03a3f1f6d6df0f31f45aac565fa39d681e2766584dd87246c3bdd\": [2, 0, 0, 1, 0, 2, 4],\n- \"a00743_source.html\": [2, 0, 0, 1, 0],\n+ \"a00740.html\": [2, 0, 0, 1, 0],\n+ \"a00740.html#a25d51c3a61fb3dacded6e48d01fd2fdb\": [2, 0, 0, 1, 0, 3],\n+ \"a00740.html#a2bd300390ebc686e71a3690f4a0b1726\": [2, 0, 0, 1, 0, 1],\n+ \"a00740.html#a3ba4fd4ed534a5c9c32ad01fa88bb8d9\": [2, 0, 0, 1, 0, 4],\n+ \"a00740.html#a73bbe6b41209e4c34234f192f0193a63\": [2, 0, 0, 1, 0, 5],\n+ \"a00740.html#a97d41b6faaf421937e6b82bd1c3067db\": [2, 0, 0, 1, 0, 6],\n+ \"a00740.html#aa1630f297a91dfc683dfcfddeeebb2ac\": [2, 0, 0, 1, 0, 0],\n+ \"a00740.html#ab0df38968e4f03a3f1f6d6df0f31f45a\": [2, 0, 0, 1, 0, 2],\n+ \"a00740.html#ab0df38968e4f03a3f1f6d6df0f31f45aa2a5bda2a3e25aa282462381f55284980\": [2, 0, 0, 1, 0, 2, 1],\n+ \"a00740.html#ab0df38968e4f03a3f1f6d6df0f31f45aa3efe6cb2ec7e23769d53919dfb3291b5\": [2, 0, 0, 1, 0, 2, 2],\n+ \"a00740.html#ab0df38968e4f03a3f1f6d6df0f31f45aa9b2839feb039937015e9668f601e4d32\": [2, 0, 0, 1, 0, 2, 3],\n+ \"a00740.html#ab0df38968e4f03a3f1f6d6df0f31f45aabeca977bc439b451aea1325f48a52a0b\": [2, 0, 0, 1, 0, 2, 0],\n+ \"a00740.html#ab0df38968e4f03a3f1f6d6df0f31f45aac565fa39d681e2766584dd87246c3bdd\": [2, 0, 0, 1, 0, 2, 4],\n+ \"a00740_source.html\": [2, 0, 0, 1, 0],\n+ \"a00743.html\": [2, 0, 0, 1, 1],\n+ \"a00743.html#ad258c2d8f7871bc0d40cf3a9ded6e08a\": [2, 0, 0, 1, 1, 1],\n+ \"a00743_source.html\": [2, 0, 0, 1, 1],\n \"a00746.html\": [2, 0, 0, 4, 7],\n \"a00746_source.html\": [2, 0, 0, 4, 7],\n \"a00749.html\": [2, 0, 0, 4, 6],\n \"a00749_source.html\": [2, 0, 0, 4, 6],\n \"a00752.html\": [2, 0, 0, 4, 5],\n \"a00752_source.html\": [2, 0, 0, 4, 5],\n \"a00755.html\": [2, 0, 0, 4, 4],\n \"a00755_source.html\": [2, 0, 0, 4, 4],\n- \"a00758.html\": [2, 0, 0, 4, 2],\n- \"a00758_source.html\": [2, 0, 0, 4, 2],\n- \"a00761.html\": [2, 0, 0, 4, 3],\n- \"a00761_source.html\": [2, 0, 0, 4, 3],\n- \"a00764.html\": [2, 0, 0, 4, 1],\n- \"a00764_source.html\": [2, 0, 0, 4, 1],\n- \"a00767.html\": [2, 0, 0, 4, 0],\n- \"a00767_source.html\": [2, 0, 0, 4, 0],\n- \"a00770.html\": [2, 0, 0, 3, 5],\n- \"a00770_source.html\": [2, 0, 0, 3, 5],\n- \"a00773.html\": [2, 0, 0, 3, 4],\n- \"a00773_source.html\": [2, 0, 0, 3, 4],\n+ \"a00758.html\": [2, 0, 0, 4, 3],\n+ \"a00758_source.html\": [2, 0, 0, 4, 3],\n+ \"a00761.html\": [2, 0, 0, 4, 2],\n+ \"a00761_source.html\": [2, 0, 0, 4, 2],\n+ \"a00764.html\": [2, 0, 0, 4, 0],\n+ \"a00764_source.html\": [2, 0, 0, 4, 0],\n+ \"a00767.html\": [2, 0, 0, 4, 1],\n+ \"a00767_source.html\": [2, 0, 0, 4, 1],\n+ \"a00770.html\": [2, 0, 0, 3, 4],\n+ \"a00770_source.html\": [2, 0, 0, 3, 4],\n+ \"a00773.html\": [2, 0, 0, 3, 5],\n+ \"a00773_source.html\": [2, 0, 0, 3, 5],\n \"a00776.html\": [2, 0, 0, 3, 3],\n \"a00776_source.html\": [2, 0, 0, 3, 3],\n- \"a00779.html\": [2, 0, 0, 3, 2],\n- \"a00779_source.html\": [2, 0, 0, 3, 2],\n- \"a00782.html\": [2, 0, 0, 3, 1],\n- \"a00782_source.html\": [2, 0, 0, 3, 1],\n- \"a00785.html\": [2, 0, 0, 3, 0],\n- \"a00785_source.html\": [2, 0, 0, 3, 0],\n- \"a00788.html\": [2, 0, 0, 2, 3],\n- \"a00788_source.html\": [2, 0, 0, 2, 3],\n- \"a00791.html\": [2, 0, 0, 2, 10],\n- \"a00791_source.html\": [2, 0, 0, 2, 10],\n+ \"a00779.html\": [2, 0, 0, 3, 0],\n+ \"a00779_source.html\": [2, 0, 0, 3, 0],\n+ \"a00782.html\": [2, 0, 0, 3, 2],\n+ \"a00782_source.html\": [2, 0, 0, 3, 2],\n+ \"a00785.html\": [2, 0, 0, 3, 1],\n+ \"a00785_source.html\": [2, 0, 0, 3, 1],\n+ \"a00788.html\": [2, 0, 0, 2, 10],\n+ \"a00788_source.html\": [2, 0, 0, 2, 10],\n+ \"a00791.html\": [2, 0, 0, 2, 2],\n+ \"a00791_source.html\": [2, 0, 0, 2, 2],\n \"a00794.html\": [2, 0, 0, 2, 9],\n \"a00794_source.html\": [2, 0, 0, 2, 9],\n- \"a00797.html\": [2, 0, 0, 2, 35],\n- \"a00797_source.html\": [2, 0, 0, 2, 35],\n- \"a00800.html\": [2, 0, 0, 2, 2],\n- \"a00800_source.html\": [2, 0, 0, 2, 2],\n+ \"a00797.html\": [2, 0, 0, 2, 3],\n+ \"a00797_source.html\": [2, 0, 0, 2, 3],\n+ \"a00800.html\": [2, 0, 0, 2, 35],\n+ \"a00800_source.html\": [2, 0, 0, 2, 35],\n \"a00803.html\": [2, 0, 0, 2, 1],\n \"a00803_source.html\": [2, 0, 0, 2, 1],\n- \"a00806.html\": [2, 0, 0, 2, 29],\n- \"a00806.html#aa41e5b43fe46eeb0f97ff6ebdb1935aa\": [2, 0, 0, 2, 29, 0],\n- \"a00806_source.html\": [2, 0, 0, 2, 29],\n- \"a00809.html\": [2, 0, 0, 2, 26],\n- \"a00809_source.html\": [2, 0, 0, 2, 26],\n- \"a00812.html\": [2, 0, 0, 2, 30],\n- \"a00812_source.html\": [2, 0, 0, 2, 30],\n- \"a00815.html\": [2, 0, 0, 2, 28],\n- \"a00815_source.html\": [2, 0, 0, 2, 28],\n- \"a00818.html\": [2, 0, 0, 2, 31],\n- \"a00818_source.html\": [2, 0, 0, 2, 31],\n+ \"a00806.html\": [2, 0, 0, 2, 26],\n+ \"a00806_source.html\": [2, 0, 0, 2, 26],\n+ \"a00809.html\": [2, 0, 0, 2, 30],\n+ \"a00809_source.html\": [2, 0, 0, 2, 30],\n+ \"a00812.html\": [2, 0, 0, 2, 29],\n+ \"a00812.html#aa41e5b43fe46eeb0f97ff6ebdb1935aa\": [2, 0, 0, 2, 29, 0],\n+ \"a00812_source.html\": [2, 0, 0, 2, 29],\n+ \"a00815.html\": [2, 0, 0, 2, 31],\n+ \"a00815_source.html\": [2, 0, 0, 2, 31],\n+ \"a00818.html\": [2, 0, 0, 2, 28],\n+ \"a00818_source.html\": [2, 0, 0, 2, 28],\n \"a00821.html\": [2, 0, 0, 2, 27],\n \"a00821_source.html\": [2, 0, 0, 2, 27],\n \"a00824.html\": [2, 0, 0, 2, 32],\n \"a00824_source.html\": [2, 0, 0, 2, 32],\n- \"a00827.html\": [2, 0, 0, 2, 24],\n- \"a00827_source.html\": [2, 0, 0, 2, 24],\n- \"a00830.html\": [2, 0, 0, 2, 14],\n- \"a00830.html#ae5c8e80d05d6eaee105d8eecfa9ab609\": [2, 0, 0, 2, 14, 0],\n- \"a00830_source.html\": [2, 0, 0, 2, 14],\n- \"a00833.html\": [2, 0, 0, 2, 15],\n- \"a00833_source.html\": [2, 0, 0, 2, 15],\n- \"a00836.html\": [2, 0, 0, 2, 16],\n- \"a00836_source.html\": [2, 0, 0, 2, 16],\n+ \"a00827.html\": [2, 0, 0, 2, 14],\n+ \"a00827.html#ae5c8e80d05d6eaee105d8eecfa9ab609\": [2, 0, 0, 2, 14, 0],\n+ \"a00827_source.html\": [2, 0, 0, 2, 14],\n+ \"a00830.html\": [2, 0, 0, 2, 24],\n+ \"a00830_source.html\": [2, 0, 0, 2, 24],\n+ \"a00833.html\": [2, 0, 0, 2, 16],\n+ \"a00833_source.html\": [2, 0, 0, 2, 16],\n+ \"a00836.html\": [2, 0, 0, 2, 15],\n+ \"a00836_source.html\": [2, 0, 0, 2, 15],\n \"a00839.html\": [2, 0, 0, 2, 13],\n \"a00839_source.html\": [2, 0, 0, 2, 13],\n- \"a00842.html\": [2, 0, 0, 2, 4],\n- \"a00842_source.html\": [2, 0, 0, 2, 4],\n- \"a00845.html\": [2, 0, 0, 2, 12],\n- \"a00845_source.html\": [2, 0, 0, 2, 12],\n- \"a00848.html\": [2, 0, 0, 2, 17],\n- \"a00848_source.html\": [2, 0, 0, 2, 17],\n- \"a00851.html\": [2, 0, 0, 2, 23],\n- \"a00851_source.html\": [2, 0, 0, 2, 23],\n- \"a00854.html\": [2, 0, 0, 2, 19],\n- \"a00854.html#a7f9cf2b729178bdbb847fc4afd91af9e\": [2, 0, 0, 2, 19, 0],\n- \"a00854_source.html\": [2, 0, 0, 2, 19],\n- \"a00857.html\": [2, 0, 0, 2, 22],\n- \"a00857_source.html\": [2, 0, 0, 2, 22],\n- \"a00860.html\": [2, 0, 0, 2, 21],\n- \"a00860_source.html\": [2, 0, 0, 2, 21],\n+ \"a00842.html\": [2, 0, 0, 2, 12],\n+ \"a00842_source.html\": [2, 0, 0, 2, 12],\n+ \"a00845.html\": [2, 0, 0, 2, 4],\n+ \"a00845_source.html\": [2, 0, 0, 2, 4],\n+ \"a00848.html\": [2, 0, 0, 2, 23],\n+ \"a00848_source.html\": [2, 0, 0, 2, 23],\n+ \"a00851.html\": [2, 0, 0, 2, 17],\n+ \"a00851_source.html\": [2, 0, 0, 2, 17],\n+ \"a00854.html\": [2, 0, 0, 2, 21],\n+ \"a00854_source.html\": [2, 0, 0, 2, 21],\n+ \"a00857.html\": [2, 0, 0, 2, 19],\n+ \"a00857.html#a7f9cf2b729178bdbb847fc4afd91af9e\": [2, 0, 0, 2, 19, 0],\n+ \"a00857_source.html\": [2, 0, 0, 2, 19],\n+ \"a00860.html\": [2, 0, 0, 2, 22],\n+ \"a00860_source.html\": [2, 0, 0, 2, 22],\n \"a00863.html\": [2, 0, 0, 2, 20],\n \"a00863_source.html\": [2, 0, 0, 2, 20],\n- \"a00866.html\": [2, 0, 0, 2, 6],\n- \"a00866_source.html\": [2, 0, 0, 2, 6],\n- \"a00869.html\": [2, 0, 0, 2, 18],\n- \"a00869_source.html\": [2, 0, 0, 2, 18],\n+ \"a00866.html\": [2, 0, 0, 2, 18],\n+ \"a00866_source.html\": [2, 0, 0, 2, 18],\n+ \"a00869.html\": [2, 0, 0, 2, 6],\n+ \"a00869_source.html\": [2, 0, 0, 2, 6],\n \"a00872.html\": [2, 0, 0, 2, 38],\n \"a00872.html#a20e08be34d6183b6943ed7a1586eca4a\": [2, 0, 0, 2, 38, 1],\n \"a00872.html#a4a6a0fcc01638f2a0316b32ad158b485\": [2, 0, 0, 2, 38, 4],\n \"a00872.html#aa0c3c264a43eeddc5cb3a58b006d3d32\": [2, 0, 0, 2, 38, 0],\n \"a00872.html#aa65ed860a2fa5935d99129a898a8f0b6\": [2, 0, 0, 2, 38, 2],\n \"a00872.html#af23c35537952bfdd493441e5c42ff2ed\": [2, 0, 0, 2, 38, 3],\n \"a00872_source.html\": [2, 0, 0, 2, 38],\n \"a00875.html\": [2, 0, 0, 2, 37],\n \"a00875_source.html\": [2, 0, 0, 2, 37],\n- \"a00878.html\": [2, 0, 0, 2, 34],\n- \"a00878.html#a44a05502feb5015035bc81b93cffb99c\": [2, 0, 0, 2, 34, 0],\n- \"a00878.html#a870745ff3e883b32547d4db42b3be2bd\": [2, 0, 0, 2, 34, 2],\n- \"a00878.html#a907dc53421460557871ddc35f77751f5\": [2, 0, 0, 2, 34, 1],\n- \"a00878_source.html\": [2, 0, 0, 2, 34],\n- \"a00881.html\": [2, 0, 0, 2, 33],\n- \"a00881_source.html\": [2, 0, 0, 2, 33],\n+ \"a00878.html\": [2, 0, 0, 2, 33],\n+ \"a00878_source.html\": [2, 0, 0, 2, 33],\n+ \"a00881.html\": [2, 0, 0, 2, 34],\n+ \"a00881.html#a44a05502feb5015035bc81b93cffb99c\": [2, 0, 0, 2, 34, 0],\n+ \"a00881.html#a870745ff3e883b32547d4db42b3be2bd\": [2, 0, 0, 2, 34, 2],\n+ \"a00881.html#a907dc53421460557871ddc35f77751f5\": [2, 0, 0, 2, 34, 1],\n+ \"a00881_source.html\": [2, 0, 0, 2, 34],\n \"a00884.html\": [2, 0, 0, 2, 36],\n \"a00884_source.html\": [2, 0, 0, 2, 36],\n- \"a00887.html\": [2, 0, 0, 2, 25],\n- \"a00887.html#a06ceddf21c024b341a5b946049cd701a\": [2, 0, 0, 2, 25, 6],\n- \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492\": [2, 0, 0, 2, 25, 5],\n- \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a4124233e4f787f999c7975afceab34f3\": [2, 0, 0, 2, 25, 5, 7],\n- \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a5676712c77d29cfdd330e2802db1c464\": [2, 0, 0, 2, 25, 5, 11],\n- \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a8fab1b3018f94b5b2432c7435e795925\": [2, 0, 0, 2, 25, 5, 6],\n- \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a9058d69e1089fc77f1974a76c34e2071\": [2, 0, 0, 2, 25, 5, 5],\n- \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a9313c644b9b2a998bcb55cfcc4582b1a\": [2, 0, 0, 2, 25, 5, 1],\n- \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a9b8a23ab039e120012bc7c622308d603\": [2, 0, 0, 2, 25, 5, 3],\n- \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492aa2878e1a215530f5f6fb89f1e06f91ee\": [2, 0, 0, 2, 25, 5, 9],\n- \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492aa2f41b6ba0393698bb3af283283737f7\": [2, 0, 0, 2, 25, 5, 8],\n- \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492aad7b3fb2be609abdbfafaf5b1c834158\": [2, 0, 0, 2, 25, 5, 10],\n- \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492ab32b8ef595539e14041e2fb0e619e3f9\": [2, 0, 0, 2, 25, 5, 4],\n- \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492ac10e41fef659f3b3a1b730319bdedb45\": [2, 0, 0, 2, 25, 5, 2],\n- \"a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492adef344bcbdd50a1a93136eb53183c718\": [2, 0, 0, 2, 25, 5, 0],\n- \"a00887.html#a33f9830228f847fae1c30c9dffe02b5a\": [2, 0, 0, 2, 25, 9],\n- \"a00887.html#a4c2520cc1a8a5a03e3f53584629d7318\": [2, 0, 0, 2, 25, 7],\n- \"a00887.html#a85ba9df501aea9af1ec9da1558c255bc\": [2, 0, 0, 2, 25, 4],\n- \"a00887.html#ab5753a2b0a0995c8e2259d2c4765f7df\": [2, 0, 0, 2, 25, 8],\n- \"a00887_source.html\": [2, 0, 0, 2, 25],\n- \"a00890.html\": [2, 0, 0, 2, 8],\n- \"a00890_source.html\": [2, 0, 0, 2, 8],\n+ \"a00887.html\": [2, 0, 0, 2, 8],\n+ \"a00887_source.html\": [2, 0, 0, 2, 8],\n+ \"a00890.html\": [2, 0, 0, 2, 25],\n+ \"a00890.html#a06ceddf21c024b341a5b946049cd701a\": [2, 0, 0, 2, 25, 6],\n+ \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492\": [2, 0, 0, 2, 25, 5],\n+ \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a4124233e4f787f999c7975afceab34f3\": [2, 0, 0, 2, 25, 5, 7],\n+ \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a5676712c77d29cfdd330e2802db1c464\": [2, 0, 0, 2, 25, 5, 11],\n+ \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a8fab1b3018f94b5b2432c7435e795925\": [2, 0, 0, 2, 25, 5, 6],\n+ \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a9058d69e1089fc77f1974a76c34e2071\": [2, 0, 0, 2, 25, 5, 5],\n+ \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a9313c644b9b2a998bcb55cfcc4582b1a\": [2, 0, 0, 2, 25, 5, 1],\n+ \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a9b8a23ab039e120012bc7c622308d603\": [2, 0, 0, 2, 25, 5, 3],\n+ \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492aa2878e1a215530f5f6fb89f1e06f91ee\": [2, 0, 0, 2, 25, 5, 9],\n+ \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492aa2f41b6ba0393698bb3af283283737f7\": [2, 0, 0, 2, 25, 5, 8],\n+ \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492aad7b3fb2be609abdbfafaf5b1c834158\": [2, 0, 0, 2, 25, 5, 10],\n+ \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492ab32b8ef595539e14041e2fb0e619e3f9\": [2, 0, 0, 2, 25, 5, 4],\n+ \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492ac10e41fef659f3b3a1b730319bdedb45\": [2, 0, 0, 2, 25, 5, 2],\n+ \"a00890.html#a1af6b50e9f8ae13d3d2f9d5b03b35492adef344bcbdd50a1a93136eb53183c718\": [2, 0, 0, 2, 25, 5, 0],\n+ \"a00890.html#a33f9830228f847fae1c30c9dffe02b5a\": [2, 0, 0, 2, 25, 9],\n+ \"a00890.html#a4c2520cc1a8a5a03e3f53584629d7318\": [2, 0, 0, 2, 25, 7],\n+ \"a00890.html#a85ba9df501aea9af1ec9da1558c255bc\": [2, 0, 0, 2, 25, 4],\n+ \"a00890.html#ab5753a2b0a0995c8e2259d2c4765f7df\": [2, 0, 0, 2, 25, 8],\n+ \"a00890_source.html\": [2, 0, 0, 2, 25],\n \"a00893.html\": [2, 0, 0, 2, 7],\n \"a00893_source.html\": [2, 0, 0, 2, 7],\n \"a00896.html\": [2, 0, 0, 2, 5],\n \"a00896_source.html\": [2, 0, 0, 2, 5],\n \"a00899.html\": [2, 0, 0, 2, 0],\n \"a00899_source.html\": [2, 0, 0, 2, 0],\n \"a00902.html\": [2, 0, 0, 2, 11],\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/navtreeindex1.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/navtreeindex1.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -23,230 +23,230 @@\n \"a00913.html#aa3daa2f428c6be2b1cb394f3a525833da02558f420bac2d6bd3f8411d4b3957a0\": [0, 0, 0, 0, 3, 4, 0],\n \"a00913.html#aa3daa2f428c6be2b1cb394f3a525833da29c9704ef8a61670dfc242b6e6b82a9f\": [0, 0, 0, 0, 3, 4, 1],\n \"a00913.html#aa3daa2f428c6be2b1cb394f3a525833da529a2651a5dcfac532e933ffefc36e99\": [0, 0, 0, 0, 3, 4, 2],\n \"a00917.html\": [1, 0, 0, 0, 0, 0],\n \"a00917.html\": [0, 0, 0, 0, 0, 0],\n \"a00921.html\": [1, 0, 0, 0, 0, 1],\n \"a00921.html\": [0, 0, 0, 0, 0, 1],\n- \"a00921.html#a0381bb479d54363806267616b61c6ed3\": [1, 0, 0, 0, 0, 1, 12],\n \"a00921.html#a0381bb479d54363806267616b61c6ed3\": [0, 0, 0, 0, 0, 1, 12],\n+ \"a00921.html#a0381bb479d54363806267616b61c6ed3\": [1, 0, 0, 0, 0, 1, 12],\n \"a00921.html#a181e30653909f9d0e0afa92dd44d28ec\": [0, 0, 0, 0, 0, 1, 11],\n \"a00921.html#a181e30653909f9d0e0afa92dd44d28ec\": [1, 0, 0, 0, 0, 1, 11],\n \"a00921.html#a1d1cfd8ffb84e947f82999c682b666a7\": [0, 0, 0, 0, 0, 1, 0],\n \"a00921.html#a1d1cfd8ffb84e947f82999c682b666a7\": [1, 0, 0, 0, 0, 1, 0],\n \"a00921.html#a1d1cfd8ffb84e947f82999c682b666a7a7cbabd8b5f03feec7dda7f68118f0850\": [0, 0, 0, 0, 0, 1, 0, 2],\n \"a00921.html#a1d1cfd8ffb84e947f82999c682b666a7a7cbabd8b5f03feec7dda7f68118f0850\": [1, 0, 0, 0, 0, 1, 0, 2],\n- \"a00921.html#a1d1cfd8ffb84e947f82999c682b666a7acde3f260abb10fb9633e1ca01de9e78d\": [1, 0, 0, 0, 0, 1, 0, 1],\n \"a00921.html#a1d1cfd8ffb84e947f82999c682b666a7acde3f260abb10fb9633e1ca01de9e78d\": [0, 0, 0, 0, 0, 1, 0, 1],\n+ \"a00921.html#a1d1cfd8ffb84e947f82999c682b666a7acde3f260abb10fb9633e1ca01de9e78d\": [1, 0, 0, 0, 0, 1, 0, 1],\n \"a00921.html#a1d1cfd8ffb84e947f82999c682b666a7ae1a12d53590e4fd25c9fd9006f19ab5c\": [1, 0, 0, 0, 0, 1, 0, 0],\n \"a00921.html#a1d1cfd8ffb84e947f82999c682b666a7ae1a12d53590e4fd25c9fd9006f19ab5c\": [0, 0, 0, 0, 0, 1, 0, 0],\n- \"a00921.html#a301ad64c8ae0a3ba3af84377138a069f\": [1, 0, 0, 0, 0, 1, 1],\n \"a00921.html#a301ad64c8ae0a3ba3af84377138a069f\": [0, 0, 0, 0, 0, 1, 1],\n- \"a00921.html#a41cf5ce29cf0ef8f61e9bfe9b8c007f6\": [1, 0, 0, 0, 0, 1, 6],\n+ \"a00921.html#a301ad64c8ae0a3ba3af84377138a069f\": [1, 0, 0, 0, 0, 1, 1],\n \"a00921.html#a41cf5ce29cf0ef8f61e9bfe9b8c007f6\": [0, 0, 0, 0, 0, 1, 6],\n- \"a00921.html#a43caa8212032f3649809914cc0f57653\": [1, 0, 0, 0, 0, 1, 9],\n+ \"a00921.html#a41cf5ce29cf0ef8f61e9bfe9b8c007f6\": [1, 0, 0, 0, 0, 1, 6],\n \"a00921.html#a43caa8212032f3649809914cc0f57653\": [0, 0, 0, 0, 0, 1, 9],\n- \"a00921.html#a485decc00facb0972f8775a8a20851fa\": [1, 0, 0, 0, 0, 1, 13],\n+ \"a00921.html#a43caa8212032f3649809914cc0f57653\": [1, 0, 0, 0, 0, 1, 9],\n \"a00921.html#a485decc00facb0972f8775a8a20851fa\": [0, 0, 0, 0, 0, 1, 13],\n- \"a00921.html#a4a581bbd4a90fe89f0c9210dede62c5f\": [0, 0, 0, 0, 0, 1, 4],\n+ \"a00921.html#a485decc00facb0972f8775a8a20851fa\": [1, 0, 0, 0, 0, 1, 13],\n \"a00921.html#a4a581bbd4a90fe89f0c9210dede62c5f\": [1, 0, 0, 0, 0, 1, 4],\n- \"a00921.html#a64a4b29d36851a8d83be05af5b25f886\": [0, 0, 0, 0, 0, 1, 3],\n+ \"a00921.html#a4a581bbd4a90fe89f0c9210dede62c5f\": [0, 0, 0, 0, 0, 1, 4],\n \"a00921.html#a64a4b29d36851a8d83be05af5b25f886\": [1, 0, 0, 0, 0, 1, 3],\n+ \"a00921.html#a64a4b29d36851a8d83be05af5b25f886\": [0, 0, 0, 0, 0, 1, 3],\n \"a00921.html#a8619f1774a47cdf85d93832261fe7d54\": [1, 0, 0, 0, 0, 1, 10],\n \"a00921.html#a8619f1774a47cdf85d93832261fe7d54\": [0, 0, 0, 0, 0, 1, 10],\n \"a00921.html#a9b6878c9cfa5f864aacae60e159451c8\": [1, 0, 0, 0, 0, 1, 7],\n \"a00921.html#a9b6878c9cfa5f864aacae60e159451c8\": [0, 0, 0, 0, 0, 1, 7],\n \"a00921.html#a9cb32ed5657438f0a1b7f322b221dc75\": [1, 0, 0, 0, 0, 1, 14],\n \"a00921.html#a9cb32ed5657438f0a1b7f322b221dc75\": [0, 0, 0, 0, 0, 1, 14],\n- \"a00921.html#aa7e0b89d67d34c1dd7a37cdce95f9e2c\": [0, 0, 0, 0, 0, 1, 2],\n \"a00921.html#aa7e0b89d67d34c1dd7a37cdce95f9e2c\": [1, 0, 0, 0, 0, 1, 2],\n+ \"a00921.html#aa7e0b89d67d34c1dd7a37cdce95f9e2c\": [0, 0, 0, 0, 0, 1, 2],\n \"a00921.html#ac532c4b500b1a85ea22217f2c65a70ed\": [0, 0, 0, 0, 0, 1, 16],\n \"a00921.html#ac532c4b500b1a85ea22217f2c65a70ed\": [1, 0, 0, 0, 0, 1, 16],\n \"a00921.html#adc4cd156a8fdb843b0e233a922bb8a17\": [1, 0, 0, 0, 0, 1, 15],\n \"a00921.html#adc4cd156a8fdb843b0e233a922bb8a17\": [0, 0, 0, 0, 0, 1, 15],\n- \"a00921.html#ae7ee02ea1bb1c8b1fff7793d51013bed\": [0, 0, 0, 0, 0, 1, 5],\n \"a00921.html#ae7ee02ea1bb1c8b1fff7793d51013bed\": [1, 0, 0, 0, 0, 1, 5],\n- \"a00921.html#aed9d1936ffe46b9622ae31cb43233a2e\": [0, 0, 0, 0, 0, 1, 8],\n+ \"a00921.html#ae7ee02ea1bb1c8b1fff7793d51013bed\": [0, 0, 0, 0, 0, 1, 5],\n \"a00921.html#aed9d1936ffe46b9622ae31cb43233a2e\": [1, 0, 0, 0, 0, 1, 8],\n- \"a00921.html#af488514a0e7868dd273ebe767420c416\": [0, 0, 0, 0, 0, 1, 17],\n+ \"a00921.html#aed9d1936ffe46b9622ae31cb43233a2e\": [0, 0, 0, 0, 0, 1, 8],\n \"a00921.html#af488514a0e7868dd273ebe767420c416\": [1, 0, 0, 0, 0, 1, 17],\n+ \"a00921.html#af488514a0e7868dd273ebe767420c416\": [0, 0, 0, 0, 0, 1, 17],\n \"a00925.html\": [0, 0, 0, 0, 0, 3],\n \"a00925.html\": [1, 0, 0, 0, 0, 3],\n \"a00925.html#a9920fb01c4b75c94a953a98008a4baba\": [0, 0, 0, 0, 0, 3, 3],\n \"a00925.html#a9920fb01c4b75c94a953a98008a4baba\": [1, 0, 0, 0, 0, 3, 3],\n \"a00925.html#aa9be824a572029f3ec1e0c0d6cfecd77\": [1, 0, 0, 0, 0, 3, 4],\n \"a00925.html#aa9be824a572029f3ec1e0c0d6cfecd77\": [0, 0, 0, 0, 0, 3, 4],\n \"a00925.html#ab71a07bb9e45c564b8aabe091482414c\": [0, 0, 0, 0, 0, 3, 2],\n \"a00925.html#ab71a07bb9e45c564b8aabe091482414c\": [1, 0, 0, 0, 0, 3, 2],\n \"a00925.html#af1812d7cdae22188afec02034f1219cb\": [0, 0, 0, 0, 0, 3, 1],\n \"a00925.html#af1812d7cdae22188afec02034f1219cb\": [1, 0, 0, 0, 0, 3, 1],\n \"a00925.html#af457c931d6d611e35737454f2c483f84\": [0, 0, 0, 0, 0, 3, 0],\n \"a00925.html#af457c931d6d611e35737454f2c483f84\": [1, 0, 0, 0, 0, 3, 0],\n \"a00929.html\": [1, 0, 0, 0, 0, 2],\n \"a00929.html\": [0, 0, 0, 0, 0, 2],\n- \"a00929.html#aaeb5db4a748ed56e042ab8c003faa8e9\": [0, 0, 0, 0, 0, 2, 1],\n \"a00929.html#aaeb5db4a748ed56e042ab8c003faa8e9\": [1, 0, 0, 0, 0, 2, 1],\n+ \"a00929.html#aaeb5db4a748ed56e042ab8c003faa8e9\": [0, 0, 0, 0, 0, 2, 1],\n \"a00929.html#af74dafe122d798d4069b675c52f6665a\": [1, 0, 0, 0, 0, 2, 0],\n \"a00929.html#af74dafe122d798d4069b675c52f6665a\": [0, 0, 0, 0, 0, 2, 0],\n- \"a00933.html\": [0, 0, 0, 0, 0, 4],\n \"a00933.html\": [1, 0, 0, 0, 0, 4],\n- \"a00933.html#a133ed4fbaddeb2a8036915b14cb21cff\": [0, 0, 0, 0, 0, 4, 20],\n+ \"a00933.html\": [0, 0, 0, 0, 0, 4],\n \"a00933.html#a133ed4fbaddeb2a8036915b14cb21cff\": [1, 0, 0, 0, 0, 4, 20],\n+ \"a00933.html#a133ed4fbaddeb2a8036915b14cb21cff\": [0, 0, 0, 0, 0, 4, 20],\n \"a00933.html#a13d195e96314a82c23dc716c9500770a\": [1, 0, 0, 0, 0, 4, 12],\n \"a00933.html#a13d195e96314a82c23dc716c9500770a\": [0, 0, 0, 0, 0, 4, 12],\n- \"a00933.html#a1563dc3496644c732d9644a1f7133d0e\": [0, 0, 0, 0, 0, 4, 11],\n \"a00933.html#a1563dc3496644c732d9644a1f7133d0e\": [1, 0, 0, 0, 0, 4, 11],\n- \"a00933.html#a181e30653909f9d0e0afa92dd44d28ec\": [1, 0, 0, 0, 0, 4, 19],\n+ \"a00933.html#a1563dc3496644c732d9644a1f7133d0e\": [0, 0, 0, 0, 0, 4, 11],\n \"a00933.html#a181e30653909f9d0e0afa92dd44d28ec\": [0, 0, 0, 0, 0, 4, 19],\n- \"a00933.html#a193470573424fe6b2e91f317509b5897\": [0, 0, 0, 0, 0, 4, 24],\n+ \"a00933.html#a181e30653909f9d0e0afa92dd44d28ec\": [1, 0, 0, 0, 0, 4, 19],\n \"a00933.html#a193470573424fe6b2e91f317509b5897\": [1, 0, 0, 0, 0, 4, 24],\n+ \"a00933.html#a193470573424fe6b2e91f317509b5897\": [0, 0, 0, 0, 0, 4, 24],\n \"a00933.html#a22604a4489ed5fdedb0ef272de0fa637\": [0, 0, 0, 0, 0, 4, 7],\n \"a00933.html#a22604a4489ed5fdedb0ef272de0fa637\": [1, 0, 0, 0, 0, 4, 7],\n- \"a00933.html#a2666f2fe497e68b29337056deda176a9\": [1, 0, 0, 0, 0, 4, 18],\n \"a00933.html#a2666f2fe497e68b29337056deda176a9\": [0, 0, 0, 0, 0, 4, 18],\n- \"a00933.html#a3bdc23048cdd1242d0a429413fa89256\": [0, 0, 0, 0, 0, 4, 28],\n+ \"a00933.html#a2666f2fe497e68b29337056deda176a9\": [1, 0, 0, 0, 0, 4, 18],\n \"a00933.html#a3bdc23048cdd1242d0a429413fa89256\": [1, 0, 0, 0, 0, 4, 28],\n- \"a00933.html#a4a0e50e01fef3e431767a928c2631cab\": [1, 0, 0, 0, 0, 4, 1],\n+ \"a00933.html#a3bdc23048cdd1242d0a429413fa89256\": [0, 0, 0, 0, 0, 4, 28],\n \"a00933.html#a4a0e50e01fef3e431767a928c2631cab\": [0, 0, 0, 0, 0, 4, 1],\n+ \"a00933.html#a4a0e50e01fef3e431767a928c2631cab\": [1, 0, 0, 0, 0, 4, 1],\n \"a00933.html#a4b5e80eb39b7497712eed0009309cd3c\": [0, 0, 0, 0, 0, 4, 5],\n \"a00933.html#a4b5e80eb39b7497712eed0009309cd3c\": [1, 0, 0, 0, 0, 4, 5],\n \"a00933.html#a66515298a982aab202e1e3e537c7d324\": [0, 0, 0, 0, 0, 4, 22],\n \"a00933.html#a66515298a982aab202e1e3e537c7d324\": [1, 0, 0, 0, 0, 4, 22],\n \"a00933.html#a6e1a6ad293d9318f65c2e28c468c66ba\": [0, 0, 0, 0, 0, 4, 2],\n \"a00933.html#a6e1a6ad293d9318f65c2e28c468c66ba\": [1, 0, 0, 0, 0, 4, 2],\n \"a00933.html#a79f6ee2550666194950187ff62bc4a6d\": [1, 0, 0, 0, 0, 4, 15],\n \"a00933.html#a79f6ee2550666194950187ff62bc4a6d\": [0, 0, 0, 0, 0, 4, 15],\n- \"a00933.html#a7e06def79a1cb93ef61d58f06b3ccec1\": [0, 0, 0, 0, 0, 4, 13],\n \"a00933.html#a7e06def79a1cb93ef61d58f06b3ccec1\": [1, 0, 0, 0, 0, 4, 13],\n- \"a00933.html#a7fa4a5c3bfea7fc2ebda886f9b12eb95\": [1, 0, 0, 0, 0, 4, 6],\n+ \"a00933.html#a7e06def79a1cb93ef61d58f06b3ccec1\": [0, 0, 0, 0, 0, 4, 13],\n \"a00933.html#a7fa4a5c3bfea7fc2ebda886f9b12eb95\": [0, 0, 0, 0, 0, 4, 6],\n- \"a00933.html#a85251d7cc5b0aa5838fa1767b6e31e5d\": [1, 0, 0, 0, 0, 4, 26],\n+ \"a00933.html#a7fa4a5c3bfea7fc2ebda886f9b12eb95\": [1, 0, 0, 0, 0, 4, 6],\n \"a00933.html#a85251d7cc5b0aa5838fa1767b6e31e5d\": [0, 0, 0, 0, 0, 4, 26],\n- \"a00933.html#a8df5cf06cea51aeb6419fd698651ae3b\": [1, 0, 0, 0, 0, 4, 8],\n+ \"a00933.html#a85251d7cc5b0aa5838fa1767b6e31e5d\": [1, 0, 0, 0, 0, 4, 26],\n \"a00933.html#a8df5cf06cea51aeb6419fd698651ae3b\": [0, 0, 0, 0, 0, 4, 8],\n- \"a00933.html#a9c615b13fdbe2f618a45a22967267227\": [0, 0, 0, 0, 0, 4, 16],\n+ \"a00933.html#a8df5cf06cea51aeb6419fd698651ae3b\": [1, 0, 0, 0, 0, 4, 8],\n \"a00933.html#a9c615b13fdbe2f618a45a22967267227\": [1, 0, 0, 0, 0, 4, 16],\n+ \"a00933.html#a9c615b13fdbe2f618a45a22967267227\": [0, 0, 0, 0, 0, 4, 16],\n \"a00933.html#a9fbe10437e4a7f3c40787283a3ecd560\": [0, 0, 0, 0, 0, 4, 4],\n \"a00933.html#a9fbe10437e4a7f3c40787283a3ecd560\": [1, 0, 0, 0, 0, 4, 4],\n- \"a00933.html#aa71d36872f416feaa853788a7a7a7ef8\": [0, 0, 0, 0, 0, 4, 9],\n \"a00933.html#aa71d36872f416feaa853788a7a7a7ef8\": [1, 0, 0, 0, 0, 4, 9],\n+ \"a00933.html#aa71d36872f416feaa853788a7a7a7ef8\": [0, 0, 0, 0, 0, 4, 9],\n \"a00933.html#aa9500016cdd5cf88992541cc263a75c9\": [0, 0, 0, 0, 0, 4, 3],\n \"a00933.html#aa9500016cdd5cf88992541cc263a75c9\": [1, 0, 0, 0, 0, 4, 3],\n- \"a00933.html#ac11caa08d0e7f7ce63e6f3292b20840a\": [1, 0, 0, 0, 0, 4, 27],\n \"a00933.html#ac11caa08d0e7f7ce63e6f3292b20840a\": [0, 0, 0, 0, 0, 4, 27],\n+ \"a00933.html#ac11caa08d0e7f7ce63e6f3292b20840a\": [1, 0, 0, 0, 0, 4, 27],\n \"a00933.html#ac532c4b500b1a85ea22217f2c65a70ed\": [0, 0, 0, 0, 0, 4, 25],\n \"a00933.html#ac532c4b500b1a85ea22217f2c65a70ed\": [1, 0, 0, 0, 0, 4, 25],\n- \"a00933.html#ad24baa29c6dfff25cd17ee1269ab9f8d\": [0, 0, 0, 0, 0, 4, 17],\n \"a00933.html#ad24baa29c6dfff25cd17ee1269ab9f8d\": [1, 0, 0, 0, 0, 4, 17],\n- \"a00933.html#ad2b27352bb353eeb1f1419c2ad07385e\": [1, 0, 0, 0, 0, 4, 10],\n+ \"a00933.html#ad24baa29c6dfff25cd17ee1269ab9f8d\": [0, 0, 0, 0, 0, 4, 17],\n \"a00933.html#ad2b27352bb353eeb1f1419c2ad07385e\": [0, 0, 0, 0, 0, 4, 10],\n+ \"a00933.html#ad2b27352bb353eeb1f1419c2ad07385e\": [1, 0, 0, 0, 0, 4, 10],\n \"a00933.html#adb6e3801db80be8fef1fd0fa4673b041\": [0, 0, 0, 0, 0, 4, 23],\n \"a00933.html#adb6e3801db80be8fef1fd0fa4673b041\": [1, 0, 0, 0, 0, 4, 23],\n \"a00933.html#adff7aaf7aca5ccb158ebc202cb435e33\": [1, 0, 0, 0, 0, 4, 21],\n \"a00933.html#adff7aaf7aca5ccb158ebc202cb435e33\": [0, 0, 0, 0, 0, 4, 21],\n- \"a00933.html#afc66676db4f0e7834e8b0fa77c7c1b46\": [1, 0, 0, 0, 0, 4, 14],\n \"a00933.html#afc66676db4f0e7834e8b0fa77c7c1b46\": [0, 0, 0, 0, 0, 4, 14],\n- \"a00937.html\": [0, 0, 0, 0, 0, 4, 0],\n+ \"a00933.html#afc66676db4f0e7834e8b0fa77c7c1b46\": [1, 0, 0, 0, 0, 4, 14],\n \"a00937.html\": [1, 0, 0, 0, 0, 4, 0],\n+ \"a00937.html\": [0, 0, 0, 0, 0, 4, 0],\n \"a00937.html#a08f66a6870d87afcd5dc1b60d1019692\": [0, 0, 0, 0, 0, 4, 0, 4],\n \"a00937.html#a08f66a6870d87afcd5dc1b60d1019692\": [1, 0, 0, 0, 0, 4, 0, 4],\n \"a00937.html#a439227feff9d7f55384e8780cfc2eb82\": [0, 0, 0, 0, 0, 4, 0, 3],\n \"a00937.html#a439227feff9d7f55384e8780cfc2eb82\": [1, 0, 0, 0, 0, 4, 0, 3],\n \"a00937.html#a69d66788e741236b1176159a1d609189\": [0, 0, 0, 0, 0, 4, 0, 1],\n \"a00937.html#a69d66788e741236b1176159a1d609189\": [1, 0, 0, 0, 0, 4, 0, 1],\n \"a00937.html#a6e6069bdfef867e798fe863f40f4274a\": [0, 0, 0, 0, 0, 4, 0, 2],\n \"a00937.html#a6e6069bdfef867e798fe863f40f4274a\": [1, 0, 0, 0, 0, 4, 0, 2],\n- \"a00937.html#ac60ab7fa3966237e2de95cc60defa4de\": [0, 0, 0, 0, 0, 4, 0, 0],\n \"a00937.html#ac60ab7fa3966237e2de95cc60defa4de\": [1, 0, 0, 0, 0, 4, 0, 0],\n+ \"a00937.html#ac60ab7fa3966237e2de95cc60defa4de\": [0, 0, 0, 0, 0, 4, 0, 0],\n \"a00941.html\": [1, 0, 0, 0, 0, 5],\n \"a00941.html\": [0, 0, 0, 0, 0, 5],\n \"a00941.html#a043a7fc91f7bc29a4cbba51d9cb00ecb\": [1, 0, 0, 0, 0, 5, 18],\n \"a00941.html#a043a7fc91f7bc29a4cbba51d9cb00ecb\": [0, 0, 0, 0, 0, 5, 18],\n- \"a00941.html#a1e36434fc02ae0d7a087a8eb07577ee9\": [1, 0, 0, 0, 0, 5, 1],\n \"a00941.html#a1e36434fc02ae0d7a087a8eb07577ee9\": [0, 0, 0, 0, 0, 5, 1],\n+ \"a00941.html#a1e36434fc02ae0d7a087a8eb07577ee9\": [1, 0, 0, 0, 0, 5, 1],\n \"a00941.html#a2236306cbbc12f5a77753e269c76fe0e\": [1, 0, 0, 0, 0, 5, 12],\n \"a00941.html#a2236306cbbc12f5a77753e269c76fe0e\": [0, 0, 0, 0, 0, 5, 12],\n- \"a00941.html#a4528f38657b0c96bce6c3d7deffd7c02\": [1, 0, 0, 0, 0, 5, 10],\n \"a00941.html#a4528f38657b0c96bce6c3d7deffd7c02\": [0, 0, 0, 0, 0, 5, 10],\n- \"a00941.html#a59227e292ea63aa9641a090521cfd457\": [1, 0, 0, 0, 0, 5, 5],\n+ \"a00941.html#a4528f38657b0c96bce6c3d7deffd7c02\": [1, 0, 0, 0, 0, 5, 10],\n \"a00941.html#a59227e292ea63aa9641a090521cfd457\": [0, 0, 0, 0, 0, 5, 5],\n+ \"a00941.html#a59227e292ea63aa9641a090521cfd457\": [1, 0, 0, 0, 0, 5, 5],\n \"a00941.html#a59964d0c9ed91d83447ceacede2acc1d\": [0, 0, 0, 0, 0, 5, 9],\n \"a00941.html#a59964d0c9ed91d83447ceacede2acc1d\": [1, 0, 0, 0, 0, 5, 9],\n \"a00941.html#a5ac6bb6255796f79debe11e25b816093\": [1, 0, 0, 0, 0, 5, 3],\n \"a00941.html#a5ac6bb6255796f79debe11e25b816093\": [0, 0, 0, 0, 0, 5, 3],\n \"a00941.html#a5cab9f649e56c15a486e3878a19bedf7\": [0, 0, 0, 0, 0, 5, 8],\n \"a00941.html#a5cab9f649e56c15a486e3878a19bedf7\": [1, 0, 0, 0, 0, 5, 8],\n- \"a00941.html#a5d089ab30f0402395635d7b389710594\": [0, 0, 0, 0, 0, 5, 17],\n \"a00941.html#a5d089ab30f0402395635d7b389710594\": [1, 0, 0, 0, 0, 5, 17],\n+ \"a00941.html#a5d089ab30f0402395635d7b389710594\": [0, 0, 0, 0, 0, 5, 17],\n \"a00941.html#a676cf019574c99fa77341ac09889192d\": [0, 0, 0, 0, 0, 5, 7],\n \"a00941.html#a676cf019574c99fa77341ac09889192d\": [1, 0, 0, 0, 0, 5, 7],\n- \"a00941.html#a67a5dcab87b052d231634dd9fcf5dee2\": [1, 0, 0, 0, 0, 5, 4],\n \"a00941.html#a67a5dcab87b052d231634dd9fcf5dee2\": [0, 0, 0, 0, 0, 5, 4],\n- \"a00941.html#a6ab6508b7c2a5c259acf6b9b89688fc8\": [0, 0, 0, 0, 0, 5, 14],\n+ \"a00941.html#a67a5dcab87b052d231634dd9fcf5dee2\": [1, 0, 0, 0, 0, 5, 4],\n \"a00941.html#a6ab6508b7c2a5c259acf6b9b89688fc8\": [1, 0, 0, 0, 0, 5, 14],\n- \"a00941.html#a758e06255013d2d7393c3ac2d18f6922\": [0, 0, 0, 0, 0, 5, 11],\n+ \"a00941.html#a6ab6508b7c2a5c259acf6b9b89688fc8\": [0, 0, 0, 0, 0, 5, 14],\n \"a00941.html#a758e06255013d2d7393c3ac2d18f6922\": [1, 0, 0, 0, 0, 5, 11],\n- \"a00941.html#a81638f2ff6818fd96aa7cd1ad3ed0703\": [1, 0, 0, 0, 0, 5, 6],\n+ \"a00941.html#a758e06255013d2d7393c3ac2d18f6922\": [0, 0, 0, 0, 0, 5, 11],\n \"a00941.html#a81638f2ff6818fd96aa7cd1ad3ed0703\": [0, 0, 0, 0, 0, 5, 6],\n+ \"a00941.html#a81638f2ff6818fd96aa7cd1ad3ed0703\": [1, 0, 0, 0, 0, 5, 6],\n \"a00941.html#a9cd69d28232867bdbb5f0b0cfcea5db5\": [0, 0, 0, 0, 0, 5, 13],\n \"a00941.html#a9cd69d28232867bdbb5f0b0cfcea5db5\": [1, 0, 0, 0, 0, 5, 13],\n- \"a00941.html#abb4a2f3f7e6623ace424afc5c0315fc1\": [0, 0, 0, 0, 0, 5, 16],\n \"a00941.html#abb4a2f3f7e6623ace424afc5c0315fc1\": [1, 0, 0, 0, 0, 5, 16],\n+ \"a00941.html#abb4a2f3f7e6623ace424afc5c0315fc1\": [0, 0, 0, 0, 0, 5, 16],\n \"a00941.html#adee257f933b8440f3e1b4760c506f15f\": [1, 0, 0, 0, 0, 5, 15],\n \"a00941.html#adee257f933b8440f3e1b4760c506f15f\": [0, 0, 0, 0, 0, 5, 15],\n \"a00941.html#ae54ee5a9e2bcb2bfdf395084395a0719\": [0, 0, 0, 0, 0, 5, 2],\n \"a00941.html#ae54ee5a9e2bcb2bfdf395084395a0719\": [1, 0, 0, 0, 0, 5, 2],\n- \"a00945.html\": [0, 0, 0, 0, 0, 5, 0],\n \"a00945.html\": [1, 0, 0, 0, 0, 5, 0],\n+ \"a00945.html\": [0, 0, 0, 0, 0, 5, 0],\n \"a00945.html#a06af1ca1d903fe5110c962bec75acec7\": [0, 0, 0, 0, 0, 5, 0, 10],\n \"a00945.html#a06af1ca1d903fe5110c962bec75acec7\": [1, 0, 0, 0, 0, 5, 0, 10],\n- \"a00945.html#a14e81c17e41ad591714664008331f41e\": [1, 0, 0, 0, 0, 5, 0, 1],\n \"a00945.html#a14e81c17e41ad591714664008331f41e\": [0, 0, 0, 0, 0, 5, 0, 1],\n- \"a00945.html#a1ee6780461b18cc80b5c79b520310079\": [1, 0, 0, 0, 0, 5, 0, 8],\n+ \"a00945.html#a14e81c17e41ad591714664008331f41e\": [1, 0, 0, 0, 0, 5, 0, 1],\n \"a00945.html#a1ee6780461b18cc80b5c79b520310079\": [0, 0, 0, 0, 0, 5, 0, 8],\n- \"a00945.html#a1ff965cb913fbc4716a5985c3d3c60e3\": [0, 0, 0, 0, 0, 5, 0, 3],\n+ \"a00945.html#a1ee6780461b18cc80b5c79b520310079\": [1, 0, 0, 0, 0, 5, 0, 8],\n \"a00945.html#a1ff965cb913fbc4716a5985c3d3c60e3\": [1, 0, 0, 0, 0, 5, 0, 3],\n+ \"a00945.html#a1ff965cb913fbc4716a5985c3d3c60e3\": [0, 0, 0, 0, 0, 5, 0, 3],\n \"a00945.html#a28d39a844c3a37ab61d32ab7c6352f09\": [0, 0, 0, 0, 0, 5, 0, 0],\n \"a00945.html#a28d39a844c3a37ab61d32ab7c6352f09\": [1, 0, 0, 0, 0, 5, 0, 0],\n- \"a00945.html#a2c83835832d46536d097ae6ff32659db\": [0, 0, 0, 0, 0, 5, 0, 6],\n \"a00945.html#a2c83835832d46536d097ae6ff32659db\": [1, 0, 0, 0, 0, 5, 0, 6],\n- \"a00945.html#a2db0e8ff5143c3a69bf3772bac7bde78\": [1, 0, 0, 0, 0, 5, 0, 9],\n+ \"a00945.html#a2c83835832d46536d097ae6ff32659db\": [0, 0, 0, 0, 0, 5, 0, 6],\n \"a00945.html#a2db0e8ff5143c3a69bf3772bac7bde78\": [0, 0, 0, 0, 0, 5, 0, 9],\n+ \"a00945.html#a2db0e8ff5143c3a69bf3772bac7bde78\": [1, 0, 0, 0, 0, 5, 0, 9],\n \"a00945.html#a391dfc1d3e1d75fc0aa496717784a95e\": [0, 0, 0, 0, 0, 5, 0, 7],\n \"a00945.html#a391dfc1d3e1d75fc0aa496717784a95e\": [1, 0, 0, 0, 0, 5, 0, 7],\n- \"a00945.html#a51ba21f3605015ed597a25303143c0b1\": [1, 0, 0, 0, 0, 5, 0, 4],\n \"a00945.html#a51ba21f3605015ed597a25303143c0b1\": [0, 0, 0, 0, 0, 5, 0, 4],\n- \"a00945.html#a595df0016de04902f5954b740c7baa2c\": [1, 0, 0, 0, 0, 5, 0, 2],\n+ \"a00945.html#a51ba21f3605015ed597a25303143c0b1\": [1, 0, 0, 0, 0, 5, 0, 4],\n \"a00945.html#a595df0016de04902f5954b740c7baa2c\": [0, 0, 0, 0, 0, 5, 0, 2],\n+ \"a00945.html#a595df0016de04902f5954b740c7baa2c\": [1, 0, 0, 0, 0, 5, 0, 2],\n \"a00945.html#acd0411b6d29a6acae3826da06d86bd5b\": [0, 0, 0, 0, 0, 5, 0, 5],\n \"a00945.html#acd0411b6d29a6acae3826da06d86bd5b\": [1, 0, 0, 0, 0, 5, 0, 5],\n \"a00949.html\": [1, 0, 0, 0, 0, 6],\n \"a00949.html\": [0, 0, 0, 0, 0, 6],\n \"a00949.html#a3f63565868cb0b0871e2db37939ec0e2\": [1, 0, 0, 0, 0, 6, 0],\n \"a00949.html#a3f63565868cb0b0871e2db37939ec0e2\": [0, 0, 0, 0, 0, 6, 0],\n- \"a00949.html#a624a2bb484d2deb54dd08d3310e746b3\": [0, 0, 0, 0, 0, 6, 1],\n \"a00949.html#a624a2bb484d2deb54dd08d3310e746b3\": [1, 0, 0, 0, 0, 6, 1],\n- \"a00949.html#a704742f6a7a07e766b5320c8d6f2f745\": [0, 0, 0, 0, 0, 6, 2],\n+ \"a00949.html#a624a2bb484d2deb54dd08d3310e746b3\": [0, 0, 0, 0, 0, 6, 1],\n \"a00949.html#a704742f6a7a07e766b5320c8d6f2f745\": [1, 0, 0, 0, 0, 6, 2],\n+ \"a00949.html#a704742f6a7a07e766b5320c8d6f2f745\": [0, 0, 0, 0, 0, 6, 2],\n \"a00949.html#a736c32f5c64da3442ff1c74ef1fb9ff7\": [0, 0, 0, 0, 0, 6, 3],\n \"a00949.html#a736c32f5c64da3442ff1c74ef1fb9ff7\": [1, 0, 0, 0, 0, 6, 3],\n \"a00953.html\": [0, 0, 0, 0, 0, 7],\n \"a00953.html\": [1, 0, 0, 0, 0, 7],\n \"a00953.html#a9e84b6f045809c700d7dc53c3a350afe\": [0, 0, 0, 0, 0, 7, 0],\n \"a00953.html#a9e84b6f045809c700d7dc53c3a350afe\": [1, 0, 0, 0, 0, 7, 0],\n \"a00953.html#ac74eea23eda9dbc078678ee5d440c7b8\": [0, 0, 0, 0, 0, 7, 1],\n \"a00953.html#ac74eea23eda9dbc078678ee5d440c7b8\": [1, 0, 0, 0, 0, 7, 1],\n \"a00957.html\": [1, 0, 0, 0, 0, 8],\n \"a00957.html\": [0, 0, 0, 0, 0, 8],\n- \"a00957.html#a269c87ee7505e80e2e4db772ee73a016\": [0, 0, 0, 0, 0, 8, 6],\n \"a00957.html#a269c87ee7505e80e2e4db772ee73a016\": [1, 0, 0, 0, 0, 8, 6],\n+ \"a00957.html#a269c87ee7505e80e2e4db772ee73a016\": [0, 0, 0, 0, 0, 8, 6],\n \"a00957.html#a2bbf77d68fb983954c51bd91cfe35302\": [0, 0, 0, 0, 0, 8, 7],\n \"a00957.html#a2bbf77d68fb983954c51bd91cfe35302\": [1, 0, 0, 0, 0, 8, 7],\n- \"a00957.html#a46acc55c125fe8d843fd2b74c582abec\": [0, 0, 0, 0, 0, 8, 5],\n \"a00957.html#a46acc55c125fe8d843fd2b74c582abec\": [1, 0, 0, 0, 0, 8, 5],\n- \"a00957.html#a4a0e50e01fef3e431767a928c2631cab\": [0, 0, 0, 0, 0, 8, 1],\n+ \"a00957.html#a46acc55c125fe8d843fd2b74c582abec\": [0, 0, 0, 0, 0, 8, 5],\n \"a00957.html#a4a0e50e01fef3e431767a928c2631cab\": [1, 0, 0, 0, 0, 8, 1],\n- \"a00957.html#a6f2eece993bb137b995618881c7f9160\": [0, 0, 0, 0, 0, 8, 10],\n+ \"a00957.html#a4a0e50e01fef3e431767a928c2631cab\": [0, 0, 0, 0, 0, 8, 1],\n \"a00957.html#a6f2eece993bb137b995618881c7f9160\": [1, 0, 0, 0, 0, 8, 10],\n+ \"a00957.html#a6f2eece993bb137b995618881c7f9160\": [0, 0, 0, 0, 0, 8, 10],\n \"a00957.html#a72634fd790cc4d1f52801aa5399328b5\": [0, 0, 0, 0, 0, 8, 4],\n \"a00957.html#a72634fd790cc4d1f52801aa5399328b5\": [1, 0, 0, 0, 0, 8, 4]\n };\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/navtreeindex2.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/navtreeindex2.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,144 +1,144 @@\n var NAVTREEINDEX2 = {\n- \"a00957.html#aa7e32ce7ba896c5ddfe6521ad0022ce2\": [1, 0, 0, 0, 0, 8, 3],\n \"a00957.html#aa7e32ce7ba896c5ddfe6521ad0022ce2\": [0, 0, 0, 0, 0, 8, 3],\n- \"a00957.html#aba5c13d35cdaae43f2a1b4798868747a\": [0, 0, 0, 0, 0, 8, 2],\n+ \"a00957.html#aa7e32ce7ba896c5ddfe6521ad0022ce2\": [1, 0, 0, 0, 0, 8, 3],\n \"a00957.html#aba5c13d35cdaae43f2a1b4798868747a\": [1, 0, 0, 0, 0, 8, 2],\n+ \"a00957.html#aba5c13d35cdaae43f2a1b4798868747a\": [0, 0, 0, 0, 0, 8, 2],\n \"a00957.html#ac8c29cf2fda93d2c3408f80e8371d375\": [1, 0, 0, 0, 0, 8, 8],\n \"a00957.html#ac8c29cf2fda93d2c3408f80e8371d375\": [0, 0, 0, 0, 0, 8, 8],\n \"a00957.html#aebdd02cef87f646218eed308629e9aed\": [0, 0, 0, 0, 0, 8, 9],\n \"a00957.html#aebdd02cef87f646218eed308629e9aed\": [1, 0, 0, 0, 0, 8, 9],\n- \"a00957.html#af98288d7b5176d7295be622a10c6c64e\": [1, 0, 0, 0, 0, 8, 0],\n \"a00957.html#af98288d7b5176d7295be622a10c6c64e\": [0, 0, 0, 0, 0, 8, 0],\n+ \"a00957.html#af98288d7b5176d7295be622a10c6c64e\": [1, 0, 0, 0, 0, 8, 0],\n \"a00961.html\": [1, 0, 0, 0, 0, 9],\n \"a00961.html\": [0, 0, 0, 0, 0, 9],\n \"a00961.html#a181e30653909f9d0e0afa92dd44d28ec\": [1, 0, 0, 0, 0, 9, 10],\n \"a00961.html#a181e30653909f9d0e0afa92dd44d28ec\": [0, 0, 0, 0, 0, 9, 10],\n- \"a00961.html#a23a949704d2705159dd4fe15299f4308\": [0, 0, 0, 0, 0, 9, 15],\n \"a00961.html#a23a949704d2705159dd4fe15299f4308\": [1, 0, 0, 0, 0, 9, 15],\n+ \"a00961.html#a23a949704d2705159dd4fe15299f4308\": [0, 0, 0, 0, 0, 9, 15],\n \"a00961.html#a23cbee9f350de81b12dea4bc69ba023f\": [1, 0, 0, 0, 0, 9, 5],\n \"a00961.html#a23cbee9f350de81b12dea4bc69ba023f\": [0, 0, 0, 0, 0, 9, 5],\n- \"a00961.html#a2651a3405daf40d1ffbd47c57233d3c3\": [0, 0, 0, 0, 0, 9, 27],\n \"a00961.html#a2651a3405daf40d1ffbd47c57233d3c3\": [1, 0, 0, 0, 0, 9, 27],\n+ \"a00961.html#a2651a3405daf40d1ffbd47c57233d3c3\": [0, 0, 0, 0, 0, 9, 27],\n \"a00961.html#a3f642ed70a22d6d9d3d2fe79029653f5\": [0, 0, 0, 0, 0, 9, 8],\n \"a00961.html#a3f642ed70a22d6d9d3d2fe79029653f5\": [1, 0, 0, 0, 0, 9, 8],\n \"a00961.html#a49852dfe24985b64fe13d3ef589fb8b2\": [1, 0, 0, 0, 0, 9, 17],\n \"a00961.html#a49852dfe24985b64fe13d3ef589fb8b2\": [0, 0, 0, 0, 0, 9, 17],\n- \"a00961.html#a539f9a4fad8037e34e12ad9454f70ba1\": [1, 0, 0, 0, 0, 9, 14],\n \"a00961.html#a539f9a4fad8037e34e12ad9454f70ba1\": [0, 0, 0, 0, 0, 9, 14],\n- \"a00961.html#a54b068769e4e728e78528f9bdde25b86\": [1, 0, 0, 0, 0, 9, 13],\n+ \"a00961.html#a539f9a4fad8037e34e12ad9454f70ba1\": [1, 0, 0, 0, 0, 9, 14],\n \"a00961.html#a54b068769e4e728e78528f9bdde25b86\": [0, 0, 0, 0, 0, 9, 13],\n+ \"a00961.html#a54b068769e4e728e78528f9bdde25b86\": [1, 0, 0, 0, 0, 9, 13],\n \"a00961.html#a5dfa6810f510fac1ec621fc9e6b530c4\": [1, 0, 0, 0, 0, 9, 23],\n \"a00961.html#a5dfa6810f510fac1ec621fc9e6b530c4\": [0, 0, 0, 0, 0, 9, 23],\n- \"a00961.html#a5e16c9ef594c36629fb3fb0955101db6\": [1, 0, 0, 0, 0, 9, 16],\n \"a00961.html#a5e16c9ef594c36629fb3fb0955101db6\": [0, 0, 0, 0, 0, 9, 16],\n- \"a00961.html#a6087a536754ca9dc75010f34f55b5811\": [0, 0, 0, 0, 0, 9, 7],\n+ \"a00961.html#a5e16c9ef594c36629fb3fb0955101db6\": [1, 0, 0, 0, 0, 9, 16],\n \"a00961.html#a6087a536754ca9dc75010f34f55b5811\": [1, 0, 0, 0, 0, 9, 7],\n- \"a00961.html#a621ab2f30043ff7f4ecdad9e64a73173\": [0, 0, 0, 0, 0, 9, 26],\n+ \"a00961.html#a6087a536754ca9dc75010f34f55b5811\": [0, 0, 0, 0, 0, 9, 7],\n \"a00961.html#a621ab2f30043ff7f4ecdad9e64a73173\": [1, 0, 0, 0, 0, 9, 26],\n- \"a00961.html#a65ee652b3607c97bb2b04a64c55d7f99\": [0, 0, 0, 0, 0, 9, 2],\n+ \"a00961.html#a621ab2f30043ff7f4ecdad9e64a73173\": [0, 0, 0, 0, 0, 9, 26],\n \"a00961.html#a65ee652b3607c97bb2b04a64c55d7f99\": [1, 0, 0, 0, 0, 9, 2],\n- \"a00961.html#a66515298a982aab202e1e3e537c7d324\": [1, 0, 0, 0, 0, 9, 20],\n+ \"a00961.html#a65ee652b3607c97bb2b04a64c55d7f99\": [0, 0, 0, 0, 0, 9, 2],\n \"a00961.html#a66515298a982aab202e1e3e537c7d324\": [0, 0, 0, 0, 0, 9, 20],\n+ \"a00961.html#a66515298a982aab202e1e3e537c7d324\": [1, 0, 0, 0, 0, 9, 20],\n \"a00961.html#a666de589b64bea493b1d23446a1ddb49\": [0, 0, 0, 0, 0, 9, 28],\n \"a00961.html#a666de589b64bea493b1d23446a1ddb49\": [1, 0, 0, 0, 0, 9, 28],\n- \"a00961.html#a671621e55bfbc48db77919d5fd31744f\": [1, 0, 0, 0, 0, 9, 12],\n \"a00961.html#a671621e55bfbc48db77919d5fd31744f\": [0, 0, 0, 0, 0, 9, 12],\n+ \"a00961.html#a671621e55bfbc48db77919d5fd31744f\": [1, 0, 0, 0, 0, 9, 12],\n \"a00961.html#a7a3e89992f3cc492804ec9bc184a1674\": [1, 0, 0, 0, 0, 9, 3],\n \"a00961.html#a7a3e89992f3cc492804ec9bc184a1674\": [0, 0, 0, 0, 0, 9, 3],\n \"a00961.html#a7f0af117d53701f7ca6e3eb2368b89bb\": [1, 0, 0, 0, 0, 9, 1],\n \"a00961.html#a7f0af117d53701f7ca6e3eb2368b89bb\": [0, 0, 0, 0, 0, 9, 1],\n- \"a00961.html#a8deec91fff8094f942051dc22769402e\": [1, 0, 0, 0, 0, 9, 11],\n \"a00961.html#a8deec91fff8094f942051dc22769402e\": [0, 0, 0, 0, 0, 9, 11],\n- \"a00961.html#a8f84862ac65dcdc8cd9063b0264b711f\": [1, 0, 0, 0, 0, 9, 18],\n+ \"a00961.html#a8deec91fff8094f942051dc22769402e\": [1, 0, 0, 0, 0, 9, 11],\n \"a00961.html#a8f84862ac65dcdc8cd9063b0264b711f\": [0, 0, 0, 0, 0, 9, 18],\n- \"a00961.html#a95bd158ec25b0697574bfda5d1397c63\": [0, 0, 0, 0, 0, 9, 19],\n+ \"a00961.html#a8f84862ac65dcdc8cd9063b0264b711f\": [1, 0, 0, 0, 0, 9, 18],\n \"a00961.html#a95bd158ec25b0697574bfda5d1397c63\": [1, 0, 0, 0, 0, 9, 19],\n- \"a00961.html#a981c6b6a9293adc992ee7f899a22707d\": [1, 0, 0, 0, 0, 9, 22],\n+ \"a00961.html#a95bd158ec25b0697574bfda5d1397c63\": [0, 0, 0, 0, 0, 9, 19],\n \"a00961.html#a981c6b6a9293adc992ee7f899a22707d\": [0, 0, 0, 0, 0, 9, 22],\n- \"a00961.html#aab7f4c322b4b552c5abcf2e3496de60c\": [0, 0, 0, 0, 0, 9, 6],\n+ \"a00961.html#a981c6b6a9293adc992ee7f899a22707d\": [1, 0, 0, 0, 0, 9, 22],\n \"a00961.html#aab7f4c322b4b552c5abcf2e3496de60c\": [1, 0, 0, 0, 0, 9, 6],\n- \"a00961.html#ab03191ef31cf0d8b0bcc44f226804e87\": [1, 0, 0, 0, 0, 9, 4],\n+ \"a00961.html#aab7f4c322b4b552c5abcf2e3496de60c\": [0, 0, 0, 0, 0, 9, 6],\n \"a00961.html#ab03191ef31cf0d8b0bcc44f226804e87\": [0, 0, 0, 0, 0, 9, 4],\n+ \"a00961.html#ab03191ef31cf0d8b0bcc44f226804e87\": [1, 0, 0, 0, 0, 9, 4],\n \"a00961.html#ab08dc4952f122dc09ce7e39daa3c56f1\": [1, 0, 0, 0, 0, 9, 21],\n \"a00961.html#ab08dc4952f122dc09ce7e39daa3c56f1\": [0, 0, 0, 0, 0, 9, 21],\n \"a00961.html#ac532c4b500b1a85ea22217f2c65a70ed\": [1, 0, 0, 0, 0, 9, 24],\n \"a00961.html#ac532c4b500b1a85ea22217f2c65a70ed\": [0, 0, 0, 0, 0, 9, 24],\n- \"a00961.html#add7bb6250635b7a713a1d2f5424163de\": [0, 0, 0, 0, 0, 9, 25],\n \"a00961.html#add7bb6250635b7a713a1d2f5424163de\": [1, 0, 0, 0, 0, 9, 25],\n- \"a00961.html#aefe76150c0f45fa43a4211b9f4cb4bc2\": [0, 0, 0, 0, 0, 9, 9],\n+ \"a00961.html#add7bb6250635b7a713a1d2f5424163de\": [0, 0, 0, 0, 0, 9, 25],\n \"a00961.html#aefe76150c0f45fa43a4211b9f4cb4bc2\": [1, 0, 0, 0, 0, 9, 9],\n- \"a00965.html\": [0, 0, 0, 0, 0, 9, 0],\n+ \"a00961.html#aefe76150c0f45fa43a4211b9f4cb4bc2\": [0, 0, 0, 0, 0, 9, 9],\n \"a00965.html\": [1, 0, 0, 0, 0, 9, 0],\n- \"a00965.html#a28d39a844c3a37ab61d32ab7c6352f09\": [1, 0, 0, 0, 0, 9, 0, 0],\n+ \"a00965.html\": [0, 0, 0, 0, 0, 9, 0],\n \"a00965.html#a28d39a844c3a37ab61d32ab7c6352f09\": [0, 0, 0, 0, 0, 9, 0, 0],\n+ \"a00965.html#a28d39a844c3a37ab61d32ab7c6352f09\": [1, 0, 0, 0, 0, 9, 0, 0],\n \"a00965.html#a3f642ed70a22d6d9d3d2fe79029653f5\": [0, 0, 0, 0, 0, 9, 0, 1],\n \"a00965.html#a3f642ed70a22d6d9d3d2fe79029653f5\": [1, 0, 0, 0, 0, 9, 0, 1],\n- \"a00965.html#a50c6e039e8278312e95c1dd94b8478e0\": [0, 0, 0, 0, 0, 9, 0, 7],\n \"a00965.html#a50c6e039e8278312e95c1dd94b8478e0\": [1, 0, 0, 0, 0, 9, 0, 7],\n- \"a00965.html#a54b068769e4e728e78528f9bdde25b86\": [0, 0, 0, 0, 0, 9, 0, 3],\n+ \"a00965.html#a50c6e039e8278312e95c1dd94b8478e0\": [0, 0, 0, 0, 0, 9, 0, 7],\n \"a00965.html#a54b068769e4e728e78528f9bdde25b86\": [1, 0, 0, 0, 0, 9, 0, 3],\n- \"a00965.html#a671621e55bfbc48db77919d5fd31744f\": [0, 0, 0, 0, 0, 9, 0, 2],\n+ \"a00965.html#a54b068769e4e728e78528f9bdde25b86\": [0, 0, 0, 0, 0, 9, 0, 3],\n \"a00965.html#a671621e55bfbc48db77919d5fd31744f\": [1, 0, 0, 0, 0, 9, 0, 2],\n- \"a00965.html#a98820ec764e776bd556a9b80b872b78f\": [0, 0, 0, 0, 0, 9, 0, 5],\n+ \"a00965.html#a671621e55bfbc48db77919d5fd31744f\": [0, 0, 0, 0, 0, 9, 0, 2],\n \"a00965.html#a98820ec764e776bd556a9b80b872b78f\": [1, 0, 0, 0, 0, 9, 0, 5],\n- \"a00965.html#aa7688afdaece2c387e8963d634752aa6\": [0, 0, 0, 0, 0, 9, 0, 6],\n+ \"a00965.html#a98820ec764e776bd556a9b80b872b78f\": [0, 0, 0, 0, 0, 9, 0, 5],\n \"a00965.html#aa7688afdaece2c387e8963d634752aa6\": [1, 0, 0, 0, 0, 9, 0, 6],\n- \"a00965.html#ad6a995daa3f819edeeaf0a8c1aeb8b6a\": [1, 0, 0, 0, 0, 9, 0, 8],\n+ \"a00965.html#aa7688afdaece2c387e8963d634752aa6\": [0, 0, 0, 0, 0, 9, 0, 6],\n \"a00965.html#ad6a995daa3f819edeeaf0a8c1aeb8b6a\": [0, 0, 0, 0, 0, 9, 0, 8],\n+ \"a00965.html#ad6a995daa3f819edeeaf0a8c1aeb8b6a\": [1, 0, 0, 0, 0, 9, 0, 8],\n \"a00965.html#ae2ec197b850e8bd12878cc67a503a07a\": [0, 0, 0, 0, 0, 9, 0, 4],\n \"a00965.html#ae2ec197b850e8bd12878cc67a503a07a\": [1, 0, 0, 0, 0, 9, 0, 4],\n \"a00969.html\": [1, 0, 0, 0, 0, 10],\n \"a00969.html\": [0, 0, 0, 0, 0, 10],\n \"a00969.html#a03588bdc24a8240380aa0972ecae0ea1\": [0, 0, 0, 0, 0, 10, 7],\n \"a00969.html#a03588bdc24a8240380aa0972ecae0ea1\": [1, 0, 0, 0, 0, 10, 7],\n- \"a00969.html#a0cb0c1f4fa225637898cf1c7420bc064\": [0, 0, 0, 0, 0, 10, 3],\n \"a00969.html#a0cb0c1f4fa225637898cf1c7420bc064\": [1, 0, 0, 0, 0, 10, 3],\n+ \"a00969.html#a0cb0c1f4fa225637898cf1c7420bc064\": [0, 0, 0, 0, 0, 10, 3],\n \"a00969.html#a100c73e08e78f4378b34a3f7abd9f1be\": [1, 0, 0, 0, 0, 10, 18],\n \"a00969.html#a100c73e08e78f4378b34a3f7abd9f1be\": [0, 0, 0, 0, 0, 10, 18],\n \"a00969.html#a1d4a38a2944a3705bfbd325766bda216\": [0, 0, 0, 0, 0, 10, 11],\n \"a00969.html#a1d4a38a2944a3705bfbd325766bda216\": [1, 0, 0, 0, 0, 10, 11],\n \"a00969.html#a28f34ca6c256f1f7fa44e862540ec421\": [0, 0, 0, 0, 0, 10, 13],\n \"a00969.html#a28f34ca6c256f1f7fa44e862540ec421\": [1, 0, 0, 0, 0, 10, 13],\n- \"a00969.html#a2c6d182581c88931784f62fe2b8ae666\": [0, 0, 0, 0, 0, 10, 8],\n \"a00969.html#a2c6d182581c88931784f62fe2b8ae666\": [1, 0, 0, 0, 0, 10, 8],\n+ \"a00969.html#a2c6d182581c88931784f62fe2b8ae666\": [0, 0, 0, 0, 0, 10, 8],\n \"a00969.html#a434afb577a5e287b615364d94d124e84\": [0, 0, 0, 0, 0, 10, 5],\n \"a00969.html#a434afb577a5e287b615364d94d124e84\": [1, 0, 0, 0, 0, 10, 5],\n- \"a00969.html#a460ea7c821fd4c2522de6503f9c25866\": [1, 0, 0, 0, 0, 10, 6],\n \"a00969.html#a460ea7c821fd4c2522de6503f9c25866\": [0, 0, 0, 0, 0, 10, 6],\n- \"a00969.html#a4dacf9da42e80ca546274402a8d3b266\": [1, 0, 0, 0, 0, 10, 16],\n+ \"a00969.html#a460ea7c821fd4c2522de6503f9c25866\": [1, 0, 0, 0, 0, 10, 6],\n \"a00969.html#a4dacf9da42e80ca546274402a8d3b266\": [0, 0, 0, 0, 0, 10, 16],\n- \"a00969.html#a4f46be1cfd41b34d8808363c83e9ff56\": [1, 0, 0, 0, 0, 10, 10],\n+ \"a00969.html#a4dacf9da42e80ca546274402a8d3b266\": [1, 0, 0, 0, 0, 10, 16],\n \"a00969.html#a4f46be1cfd41b34d8808363c83e9ff56\": [0, 0, 0, 0, 0, 10, 10],\n+ \"a00969.html#a4f46be1cfd41b34d8808363c83e9ff56\": [1, 0, 0, 0, 0, 10, 10],\n \"a00969.html#a5c719e43580059139938a6ed0f851853\": [0, 0, 0, 0, 0, 10, 1],\n \"a00969.html#a5c719e43580059139938a6ed0f851853\": [1, 0, 0, 0, 0, 10, 1],\n \"a00969.html#a5f2854209dd55d5c420b1a7282da8793\": [0, 0, 0, 0, 0, 10, 20],\n \"a00969.html#a5f2854209dd55d5c420b1a7282da8793\": [1, 0, 0, 0, 0, 10, 20],\n- \"a00969.html#a68afc60df5a617f5d7e1580548b72f9b\": [0, 0, 0, 0, 0, 10, 2],\n \"a00969.html#a68afc60df5a617f5d7e1580548b72f9b\": [1, 0, 0, 0, 0, 10, 2],\n- \"a00969.html#a831025d6d817c4afb1df7d5a705af378\": [0, 0, 0, 0, 0, 10, 0],\n+ \"a00969.html#a68afc60df5a617f5d7e1580548b72f9b\": [0, 0, 0, 0, 0, 10, 2],\n \"a00969.html#a831025d6d817c4afb1df7d5a705af378\": [1, 0, 0, 0, 0, 10, 0],\n+ \"a00969.html#a831025d6d817c4afb1df7d5a705af378\": [0, 0, 0, 0, 0, 10, 0],\n \"a00969.html#aa57d6053ca61cdf53b36937812b09307\": [1, 0, 0, 0, 0, 10, 4],\n \"a00969.html#aa57d6053ca61cdf53b36937812b09307\": [0, 0, 0, 0, 0, 10, 4],\n \"a00969.html#ab744a59a71fffcff3e745c2c679aec29\": [0, 0, 0, 0, 0, 10, 12],\n \"a00969.html#ab744a59a71fffcff3e745c2c679aec29\": [1, 0, 0, 0, 0, 10, 12],\n \"a00969.html#ac532c4b500b1a85ea22217f2c65a70ed\": [0, 0, 0, 0, 0, 10, 14],\n \"a00969.html#ac532c4b500b1a85ea22217f2c65a70ed\": [1, 0, 0, 0, 0, 10, 14],\n \"a00969.html#ad56c50bc5582768806d7890c55b63141\": [1, 0, 0, 0, 0, 10, 9],\n \"a00969.html#ad56c50bc5582768806d7890c55b63141\": [0, 0, 0, 0, 0, 10, 9],\n \"a00969.html#ae228420c7ad83f58aad85b1268518df8\": [0, 0, 0, 0, 0, 10, 15],\n \"a00969.html#ae228420c7ad83f58aad85b1268518df8\": [1, 0, 0, 0, 0, 10, 15],\n- \"a00969.html#ae9fae0d6843ce883db4c377d19dd61a8\": [0, 0, 0, 0, 0, 10, 17],\n \"a00969.html#ae9fae0d6843ce883db4c377d19dd61a8\": [1, 0, 0, 0, 0, 10, 17],\n- \"a00969.html#aea91b4a9e7032d4fce2434c93ae2983a\": [0, 0, 0, 0, 0, 10, 19],\n+ \"a00969.html#ae9fae0d6843ce883db4c377d19dd61a8\": [0, 0, 0, 0, 0, 10, 17],\n \"a00969.html#aea91b4a9e7032d4fce2434c93ae2983a\": [1, 0, 0, 0, 0, 10, 19],\n- \"a00973.html\": [1, 0, 0, 0, 1, 6],\n+ \"a00969.html#aea91b4a9e7032d4fce2434c93ae2983a\": [0, 0, 0, 0, 0, 10, 19],\n \"a00973.html\": [0, 0, 0, 0, 1, 6],\n- \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7\": [0, 0, 0, 0, 1, 6, 0],\n+ \"a00973.html\": [1, 0, 0, 0, 1, 6],\n \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7\": [1, 0, 0, 0, 1, 6, 0],\n+ \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7\": [0, 0, 0, 0, 1, 6, 0],\n \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7a0b25cd15c2c168baf13ac0feb3980f40\": [0, 0, 0, 0, 1, 6, 0, 2],\n \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7a0b25cd15c2c168baf13ac0feb3980f40\": [1, 0, 0, 0, 1, 6, 0, 2],\n \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7a27f9590991016e795e40b58f0bfeaf4c\": [1, 0, 0, 0, 1, 6, 0, 3],\n \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7a27f9590991016e795e40b58f0bfeaf4c\": [0, 0, 0, 0, 1, 6, 0, 3],\n \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7a3a0c2fc8a9cab2764314c3324a8a68b2\": [1, 0, 0, 0, 1, 6, 0, 0],\n \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7a3a0c2fc8a9cab2764314c3324a8a68b2\": [0, 0, 0, 0, 1, 6, 0, 0],\n \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7a61f7f1587bd5fe978d9ff3ece8d0624c\": [1, 0, 0, 0, 1, 6, 0, 5],\n@@ -147,30 +147,30 @@\n \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7a8bf2cfb939c78155cae7549621ea73f6\": [0, 0, 0, 0, 1, 6, 0, 10],\n \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7a9113dda3d2c5d6ffce05d54a17ed5678\": [1, 0, 0, 0, 1, 6, 0, 4],\n \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7a9113dda3d2c5d6ffce05d54a17ed5678\": [0, 0, 0, 0, 1, 6, 0, 4],\n \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7ac4ae10df9c13e44880ca7be341e44f2a\": [0, 0, 0, 0, 1, 6, 0, 8],\n \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7ac4ae10df9c13e44880ca7be341e44f2a\": [1, 0, 0, 0, 1, 6, 0, 8],\n \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7ad7d1a88a40ae8938e07af7a7745054b0\": [0, 0, 0, 0, 1, 6, 0, 9],\n \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7ad7d1a88a40ae8938e07af7a7745054b0\": [1, 0, 0, 0, 1, 6, 0, 9],\n- \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7adc0f401e772f1affa81071e70631abbf\": [1, 0, 0, 0, 1, 6, 0, 1],\n \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7adc0f401e772f1affa81071e70631abbf\": [0, 0, 0, 0, 1, 6, 0, 1],\n+ \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7adc0f401e772f1affa81071e70631abbf\": [1, 0, 0, 0, 1, 6, 0, 1],\n \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7ae765e809376e5557d348d3e991a7273e\": [0, 0, 0, 0, 1, 6, 0, 7],\n \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7ae765e809376e5557d348d3e991a7273e\": [1, 0, 0, 0, 1, 6, 0, 7],\n- \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7afc488491175a6dac9e5881e363ad4c41\": [0, 0, 0, 0, 1, 6, 0, 6],\n \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7afc488491175a6dac9e5881e363ad4c41\": [1, 0, 0, 0, 1, 6, 0, 6],\n- \"a00973.html#a1d77cd9717f08d87e372cd7047d774d9\": [1, 0, 0, 0, 1, 6, 7],\n+ \"a00973.html#a1d1cfd8ffb84e947f82999c682b666a7afc488491175a6dac9e5881e363ad4c41\": [0, 0, 0, 0, 1, 6, 0, 6],\n \"a00973.html#a1d77cd9717f08d87e372cd7047d774d9\": [0, 0, 0, 0, 1, 6, 7],\n+ \"a00973.html#a1d77cd9717f08d87e372cd7047d774d9\": [1, 0, 0, 0, 1, 6, 7],\n \"a00973.html#a485decc00facb0972f8775a8a20851fa\": [0, 0, 0, 0, 1, 6, 6],\n \"a00973.html#a485decc00facb0972f8775a8a20851fa\": [1, 0, 0, 0, 1, 6, 6],\n- \"a00973.html#a65d29e074c001aa7817045e54403bfbb\": [0, 0, 0, 0, 1, 6, 4],\n \"a00973.html#a65d29e074c001aa7817045e54403bfbb\": [1, 0, 0, 0, 1, 6, 4],\n- \"a00973.html#a6c6de8b1c8212039f4702f70bb75cf02\": [0, 0, 0, 0, 1, 6, 3],\n+ \"a00973.html#a65d29e074c001aa7817045e54403bfbb\": [0, 0, 0, 0, 1, 6, 4],\n \"a00973.html#a6c6de8b1c8212039f4702f70bb75cf02\": [1, 0, 0, 0, 1, 6, 3],\n- \"a00973.html#a70f2b01ccc2adc41113279d318210005\": [0, 0, 0, 0, 1, 6, 10],\n+ \"a00973.html#a6c6de8b1c8212039f4702f70bb75cf02\": [0, 0, 0, 0, 1, 6, 3],\n \"a00973.html#a70f2b01ccc2adc41113279d318210005\": [1, 0, 0, 0, 1, 6, 10],\n+ \"a00973.html#a70f2b01ccc2adc41113279d318210005\": [0, 0, 0, 0, 1, 6, 10],\n \"a00973.html#a881bd183b2e330c490fcce5caf3ef433\": [1, 0, 0, 0, 1, 6, 5],\n \"a00973.html#a881bd183b2e330c490fcce5caf3ef433\": [0, 0, 0, 0, 1, 6, 5],\n \"a00973.html#a8e33c50700963e8dc99a5f598a32aaa3\": [0, 0, 0, 0, 1, 6, 2],\n \"a00973.html#a8e33c50700963e8dc99a5f598a32aaa3\": [1, 0, 0, 0, 1, 6, 2],\n \"a00973.html#a957e78d72208a5a9b394a2ea1d4d95d9\": [0, 0, 0, 0, 1, 6, 9],\n \"a00973.html#a957e78d72208a5a9b394a2ea1d4d95d9\": [1, 0, 0, 0, 1, 6, 9],\n \"a00973.html#abd9f5b68153db907eb7ccd0ed177dfdd\": [0, 0, 0, 0, 1, 6, 8],\n@@ -229,24 +229,24 @@\n \"a00993.html\": [1, 0, 0, 0, 1, 9],\n \"a00993.html#a012069d0bc0036c1e2bb75bc2a170c58\": [1, 0, 0, 0, 1, 9, 50],\n \"a00993.html#a012069d0bc0036c1e2bb75bc2a170c58\": [0, 0, 0, 0, 1, 9, 50],\n \"a00993.html#a02449704e384b32232b06d0d57968138\": [1, 0, 0, 0, 1, 9, 73],\n \"a00993.html#a02449704e384b32232b06d0d57968138\": [0, 0, 0, 0, 1, 9, 73],\n \"a00993.html#a02ba6ac8fc716dd7349a8a1143319079\": [0, 0, 0, 0, 1, 9, 52],\n \"a00993.html#a02ba6ac8fc716dd7349a8a1143319079\": [1, 0, 0, 0, 1, 9, 52],\n- \"a00993.html#a059c9506f9ef8ebf24a68fc298be58be\": [1, 0, 0, 0, 1, 9, 9],\n \"a00993.html#a059c9506f9ef8ebf24a68fc298be58be\": [0, 0, 0, 0, 1, 9, 9],\n+ \"a00993.html#a059c9506f9ef8ebf24a68fc298be58be\": [1, 0, 0, 0, 1, 9, 9],\n \"a00993.html#a062d31216b535f604b3bc4d69434270d\": [0, 0, 0, 0, 1, 9, 77],\n \"a00993.html#a062d31216b535f604b3bc4d69434270d\": [1, 0, 0, 0, 1, 9, 77],\n- \"a00993.html#a08ccda63d26e5b06957be5f5eec75d01\": [0, 0, 0, 0, 1, 9, 10],\n \"a00993.html#a08ccda63d26e5b06957be5f5eec75d01\": [1, 0, 0, 0, 1, 9, 10],\n+ \"a00993.html#a08ccda63d26e5b06957be5f5eec75d01\": [0, 0, 0, 0, 1, 9, 10],\n \"a00993.html#a0cb33d03729931750660ebf58b9e89ec\": [1, 0, 0, 0, 1, 9, 66],\n \"a00993.html#a0cb33d03729931750660ebf58b9e89ec\": [0, 0, 0, 0, 1, 9, 66],\n- \"a00993.html#a11c0f8be31c18b856cf9cdea511e54de\": [0, 0, 0, 0, 1, 9, 79],\n \"a00993.html#a11c0f8be31c18b856cf9cdea511e54de\": [1, 0, 0, 0, 1, 9, 79],\n- \"a00993.html#a14bf987459715b918b370247bb24a61c\": [1, 0, 0, 0, 1, 9, 36],\n+ \"a00993.html#a11c0f8be31c18b856cf9cdea511e54de\": [0, 0, 0, 0, 1, 9, 79],\n \"a00993.html#a14bf987459715b918b370247bb24a61c\": [0, 0, 0, 0, 1, 9, 36],\n- \"a00993.html#a1c85ed58e2e3362dd22fbdb815f2c5a3\": [0, 0, 0, 0, 1, 9, 31],\n- \"a00993.html#a1c85ed58e2e3362dd22fbdb815f2c5a3\": [0, 0, 0, 0, 1, 9, 32],\n+ \"a00993.html#a14bf987459715b918b370247bb24a61c\": [1, 0, 0, 0, 1, 9, 36],\n \"a00993.html#a1c85ed58e2e3362dd22fbdb815f2c5a3\": [1, 0, 0, 0, 1, 9, 31],\n- \"a00993.html#a1c85ed58e2e3362dd22fbdb815f2c5a3\": [1, 0, 0, 0, 1, 9, 32]\n+ \"a00993.html#a1c85ed58e2e3362dd22fbdb815f2c5a3\": [1, 0, 0, 0, 1, 9, 32],\n+ \"a00993.html#a1c85ed58e2e3362dd22fbdb815f2c5a3\": [0, 0, 0, 0, 1, 9, 32],\n+ \"a00993.html#a1c85ed58e2e3362dd22fbdb815f2c5a3\": [0, 0, 0, 0, 1, 9, 31]\n };\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/navtreeindex3.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/navtreeindex3.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,216 +1,216 @@\n var NAVTREEINDEX3 = {\n \"a00993.html#a1d27edb01bfb68ba50776b25aa437783\": [1, 0, 0, 0, 1, 9, 30],\n \"a00993.html#a1d27edb01bfb68ba50776b25aa437783\": [0, 0, 0, 0, 1, 9, 30],\n- \"a00993.html#a21130b3d23cd5c27045d03c601e4642d\": [1, 0, 0, 0, 1, 9, 62],\n \"a00993.html#a21130b3d23cd5c27045d03c601e4642d\": [0, 0, 0, 0, 1, 9, 62],\n- \"a00993.html#a24c2f632253c21d97fdba264ac2635a9\": [0, 0, 0, 0, 1, 9, 85],\n- \"a00993.html#a24c2f632253c21d97fdba264ac2635a9\": [0, 0, 0, 0, 1, 9, 84],\n+ \"a00993.html#a21130b3d23cd5c27045d03c601e4642d\": [1, 0, 0, 0, 1, 9, 62],\n \"a00993.html#a24c2f632253c21d97fdba264ac2635a9\": [1, 0, 0, 0, 1, 9, 84],\n+ \"a00993.html#a24c2f632253c21d97fdba264ac2635a9\": [0, 0, 0, 0, 1, 9, 85],\n \"a00993.html#a24c2f632253c21d97fdba264ac2635a9\": [1, 0, 0, 0, 1, 9, 85],\n+ \"a00993.html#a24c2f632253c21d97fdba264ac2635a9\": [0, 0, 0, 0, 1, 9, 84],\n \"a00993.html#a2a749eef1377f4f13a23c95e4038525d\": [1, 0, 0, 0, 1, 9, 49],\n \"a00993.html#a2a749eef1377f4f13a23c95e4038525d\": [0, 0, 0, 0, 1, 9, 49],\n- \"a00993.html#a2d2c7ac649a9a285741dfdc1ed3089b3\": [0, 0, 0, 0, 1, 9, 72],\n \"a00993.html#a2d2c7ac649a9a285741dfdc1ed3089b3\": [1, 0, 0, 0, 1, 9, 72],\n+ \"a00993.html#a2d2c7ac649a9a285741dfdc1ed3089b3\": [0, 0, 0, 0, 1, 9, 72],\n \"a00993.html#a2fbf111cac9d122eeaec5c0cb73fa77d\": [1, 0, 0, 0, 1, 9, 4],\n \"a00993.html#a2fbf111cac9d122eeaec5c0cb73fa77d\": [0, 0, 0, 0, 1, 9, 4],\n- \"a00993.html#a30c6cda6c630d6823cdcc718e79a99ca\": [1, 0, 0, 0, 1, 9, 18],\n \"a00993.html#a30c6cda6c630d6823cdcc718e79a99ca\": [0, 0, 0, 0, 1, 9, 18],\n+ \"a00993.html#a30c6cda6c630d6823cdcc718e79a99ca\": [1, 0, 0, 0, 1, 9, 18],\n \"a00993.html#a315fc19f788ba446560b2641186c393e\": [0, 0, 0, 0, 1, 9, 54],\n \"a00993.html#a315fc19f788ba446560b2641186c393e\": [1, 0, 0, 0, 1, 9, 54],\n- \"a00993.html#a31b548d9f8334f3c4f9341eda3479982\": [0, 0, 0, 0, 1, 9, 65],\n \"a00993.html#a31b548d9f8334f3c4f9341eda3479982\": [1, 0, 0, 0, 1, 9, 65],\n- \"a00993.html#a3419c5d57330d6787f8c14a7677b8d9b\": [1, 0, 0, 0, 1, 9, 5],\n+ \"a00993.html#a31b548d9f8334f3c4f9341eda3479982\": [0, 0, 0, 0, 1, 9, 65],\n \"a00993.html#a3419c5d57330d6787f8c14a7677b8d9b\": [0, 0, 0, 0, 1, 9, 5],\n- \"a00993.html#a3432d7022e415ef661ccd6726ed3743f\": [0, 0, 0, 0, 1, 9, 43],\n+ \"a00993.html#a3419c5d57330d6787f8c14a7677b8d9b\": [1, 0, 0, 0, 1, 9, 5],\n \"a00993.html#a3432d7022e415ef661ccd6726ed3743f\": [1, 0, 0, 0, 1, 9, 43],\n+ \"a00993.html#a3432d7022e415ef661ccd6726ed3743f\": [0, 0, 0, 0, 1, 9, 43],\n \"a00993.html#a37804f17e707ef64a7f165d15b6cf013\": [0, 0, 0, 0, 1, 9, 68],\n \"a00993.html#a37804f17e707ef64a7f165d15b6cf013\": [1, 0, 0, 0, 1, 9, 68],\n \"a00993.html#a37e24b0244219eef61cc1ab2a5a5450e\": [0, 0, 0, 0, 1, 9, 7],\n \"a00993.html#a37e24b0244219eef61cc1ab2a5a5450e\": [1, 0, 0, 0, 1, 9, 7],\n- \"a00993.html#a38d50a271b91fe5b1a9f11904d06ce49\": [1, 0, 0, 0, 1, 9, 80],\n \"a00993.html#a38d50a271b91fe5b1a9f11904d06ce49\": [0, 0, 0, 0, 1, 9, 80],\n- \"a00993.html#a39cd14c1ae309f7fc7872b7b0d03dde3\": [0, 0, 0, 0, 1, 9, 63],\n+ \"a00993.html#a38d50a271b91fe5b1a9f11904d06ce49\": [1, 0, 0, 0, 1, 9, 80],\n \"a00993.html#a39cd14c1ae309f7fc7872b7b0d03dde3\": [1, 0, 0, 0, 1, 9, 63],\n- \"a00993.html#a3c912c55ec0579d5f16fb2946a9e7f72\": [1, 0, 0, 0, 1, 9, 12],\n+ \"a00993.html#a39cd14c1ae309f7fc7872b7b0d03dde3\": [0, 0, 0, 0, 1, 9, 63],\n \"a00993.html#a3c912c55ec0579d5f16fb2946a9e7f72\": [0, 0, 0, 0, 1, 9, 12],\n- \"a00993.html#a442f93101ba3ac94d07f1d9ceb1cdcd6\": [1, 0, 0, 0, 1, 9, 78],\n+ \"a00993.html#a3c912c55ec0579d5f16fb2946a9e7f72\": [1, 0, 0, 0, 1, 9, 12],\n \"a00993.html#a442f93101ba3ac94d07f1d9ceb1cdcd6\": [0, 0, 0, 0, 1, 9, 78],\n- \"a00993.html#a4814cce8e9b999c4dbb64bcf09ab73e1\": [0, 0, 0, 0, 1, 9, 82],\n+ \"a00993.html#a442f93101ba3ac94d07f1d9ceb1cdcd6\": [1, 0, 0, 0, 1, 9, 78],\n \"a00993.html#a4814cce8e9b999c4dbb64bcf09ab73e1\": [1, 0, 0, 0, 1, 9, 81],\n \"a00993.html#a4814cce8e9b999c4dbb64bcf09ab73e1\": [1, 0, 0, 0, 1, 9, 82],\n \"a00993.html#a4814cce8e9b999c4dbb64bcf09ab73e1\": [0, 0, 0, 0, 1, 9, 81],\n- \"a00993.html#a523e2a6f899aede5166441b14efa348a\": [1, 0, 0, 0, 1, 9, 28],\n+ \"a00993.html#a4814cce8e9b999c4dbb64bcf09ab73e1\": [0, 0, 0, 0, 1, 9, 82],\n \"a00993.html#a523e2a6f899aede5166441b14efa348a\": [0, 0, 0, 0, 1, 9, 28],\n- \"a00993.html#a56a6ad825eff8823aee85348b73e70f7\": [1, 0, 0, 0, 1, 9, 27],\n+ \"a00993.html#a523e2a6f899aede5166441b14efa348a\": [1, 0, 0, 0, 1, 9, 28],\n \"a00993.html#a56a6ad825eff8823aee85348b73e70f7\": [0, 0, 0, 0, 1, 9, 27],\n- \"a00993.html#a5b32465be706d80f4fac5ea05e3e0ded\": [0, 0, 0, 0, 1, 9, 37],\n+ \"a00993.html#a56a6ad825eff8823aee85348b73e70f7\": [1, 0, 0, 0, 1, 9, 27],\n \"a00993.html#a5b32465be706d80f4fac5ea05e3e0ded\": [1, 0, 0, 0, 1, 9, 37],\n- \"a00993.html#a5cbd789bd429e35377db5f4c97701874\": [0, 0, 0, 0, 1, 9, 6],\n+ \"a00993.html#a5b32465be706d80f4fac5ea05e3e0ded\": [0, 0, 0, 0, 1, 9, 37],\n \"a00993.html#a5cbd789bd429e35377db5f4c97701874\": [1, 0, 0, 0, 1, 9, 6],\n- \"a00993.html#a64fe119d6034e4b1f39e81d39ad9dfc4\": [1, 0, 0, 0, 1, 9, 16],\n+ \"a00993.html#a5cbd789bd429e35377db5f4c97701874\": [0, 0, 0, 0, 1, 9, 6],\n \"a00993.html#a64fe119d6034e4b1f39e81d39ad9dfc4\": [0, 0, 0, 0, 1, 9, 16],\n- \"a00993.html#a68a029efbad55b2fd991d29aa37a7c28\": [0, 0, 0, 0, 1, 9, 64],\n+ \"a00993.html#a64fe119d6034e4b1f39e81d39ad9dfc4\": [1, 0, 0, 0, 1, 9, 16],\n \"a00993.html#a68a029efbad55b2fd991d29aa37a7c28\": [1, 0, 0, 0, 1, 9, 64],\n- \"a00993.html#a733ff80d6d940519b47091c58abbed34\": [1, 0, 0, 0, 1, 9, 22],\n+ \"a00993.html#a68a029efbad55b2fd991d29aa37a7c28\": [0, 0, 0, 0, 1, 9, 64],\n \"a00993.html#a733ff80d6d940519b47091c58abbed34\": [0, 0, 0, 0, 1, 9, 22],\n- \"a00993.html#a73752510551b8bda85fbc7f43e97730b\": [0, 0, 0, 0, 1, 9, 74],\n+ \"a00993.html#a733ff80d6d940519b47091c58abbed34\": [1, 0, 0, 0, 1, 9, 22],\n \"a00993.html#a73752510551b8bda85fbc7f43e97730b\": [1, 0, 0, 0, 1, 9, 74],\n- \"a00993.html#a7c1135ced687d1313ed925b8441fdf60\": [0, 0, 0, 0, 1, 9, 71],\n+ \"a00993.html#a73752510551b8bda85fbc7f43e97730b\": [0, 0, 0, 0, 1, 9, 74],\n \"a00993.html#a7c1135ced687d1313ed925b8441fdf60\": [1, 0, 0, 0, 1, 9, 71],\n- \"a00993.html#a7dcb88c32ded6c233f129d7b6fb7a159\": [0, 0, 0, 0, 1, 9, 8],\n+ \"a00993.html#a7c1135ced687d1313ed925b8441fdf60\": [0, 0, 0, 0, 1, 9, 71],\n \"a00993.html#a7dcb88c32ded6c233f129d7b6fb7a159\": [1, 0, 0, 0, 1, 9, 8],\n- \"a00993.html#a80a3dced9165fc1a8a9bdbfe6b6111a4\": [0, 0, 0, 0, 1, 9, 11],\n+ \"a00993.html#a7dcb88c32ded6c233f129d7b6fb7a159\": [0, 0, 0, 0, 1, 9, 8],\n \"a00993.html#a80a3dced9165fc1a8a9bdbfe6b6111a4\": [1, 0, 0, 0, 1, 9, 11],\n- \"a00993.html#a875abc47934c4076304f3b9c4edde3cc\": [1, 0, 0, 0, 1, 9, 75],\n+ \"a00993.html#a80a3dced9165fc1a8a9bdbfe6b6111a4\": [0, 0, 0, 0, 1, 9, 11],\n \"a00993.html#a875abc47934c4076304f3b9c4edde3cc\": [0, 0, 0, 0, 1, 9, 75],\n+ \"a00993.html#a875abc47934c4076304f3b9c4edde3cc\": [1, 0, 0, 0, 1, 9, 75],\n \"a00993.html#a8c1242bf6bffa416c2e172a02f3ee31c\": [0, 0, 0, 0, 1, 9, 59],\n \"a00993.html#a8c1242bf6bffa416c2e172a02f3ee31c\": [1, 0, 0, 0, 1, 9, 59],\n- \"a00993.html#a8cc9b6bbaaecd1facf0cfae0853e3a60\": [1, 0, 0, 0, 1, 9, 56],\n \"a00993.html#a8cc9b6bbaaecd1facf0cfae0853e3a60\": [0, 0, 0, 0, 1, 9, 56],\n- \"a00993.html#a90705c85d6b680933c93344c9804e4d6\": [0, 0, 0, 0, 1, 9, 23],\n+ \"a00993.html#a8cc9b6bbaaecd1facf0cfae0853e3a60\": [1, 0, 0, 0, 1, 9, 56],\n \"a00993.html#a90705c85d6b680933c93344c9804e4d6\": [1, 0, 0, 0, 1, 9, 23],\n+ \"a00993.html#a90705c85d6b680933c93344c9804e4d6\": [0, 0, 0, 0, 1, 9, 23],\n \"a00993.html#a9373bf15eaee019dd08099d05515e080\": [0, 0, 0, 0, 1, 9, 53],\n \"a00993.html#a9373bf15eaee019dd08099d05515e080\": [1, 0, 0, 0, 1, 9, 53],\n \"a00993.html#a9484ab8a323750c2f639ee8709b1349b\": [1, 0, 0, 0, 1, 9, 2],\n \"a00993.html#a9484ab8a323750c2f639ee8709b1349b\": [0, 0, 0, 0, 1, 9, 2],\n- \"a00993.html#a99b23eec59013306ea2f1df119a7574d\": [0, 0, 0, 0, 1, 9, 69],\n \"a00993.html#a99b23eec59013306ea2f1df119a7574d\": [1, 0, 0, 0, 1, 9, 69],\n- \"a00993.html#a9d7d8d4411b09211fbf901cb7564df4c\": [1, 0, 0, 0, 1, 9, 44],\n+ \"a00993.html#a99b23eec59013306ea2f1df119a7574d\": [0, 0, 0, 0, 1, 9, 69],\n \"a00993.html#a9d7d8d4411b09211fbf901cb7564df4c\": [0, 0, 0, 0, 1, 9, 44],\n- \"a00993.html#a9f14d69df88fa663dcfdec990ec9e3f3\": [1, 0, 0, 0, 1, 9, 76],\n+ \"a00993.html#a9d7d8d4411b09211fbf901cb7564df4c\": [1, 0, 0, 0, 1, 9, 44],\n \"a00993.html#a9f14d69df88fa663dcfdec990ec9e3f3\": [0, 0, 0, 0, 1, 9, 76],\n+ \"a00993.html#a9f14d69df88fa663dcfdec990ec9e3f3\": [1, 0, 0, 0, 1, 9, 76],\n \"a00993.html#aa09810ac68ebdc45a1e4b1a2bb657bdd\": [0, 0, 0, 0, 1, 9, 14],\n \"a00993.html#aa09810ac68ebdc45a1e4b1a2bb657bdd\": [1, 0, 0, 0, 1, 9, 14],\n \"a00993.html#aa3020b88381e6966efbe6c4febf8c04f\": [0, 0, 0, 0, 1, 9, 57],\n \"a00993.html#aa3020b88381e6966efbe6c4febf8c04f\": [1, 0, 0, 0, 1, 9, 57],\n- \"a00993.html#aa3dd3f4235b25b5feca23351835207b5\": [0, 0, 0, 0, 1, 9, 61],\n \"a00993.html#aa3dd3f4235b25b5feca23351835207b5\": [1, 0, 0, 0, 1, 9, 61],\n- \"a00993.html#aa78873a43e9f5b599cba62356882d0a5\": [0, 0, 0, 0, 1, 9, 15],\n+ \"a00993.html#aa3dd3f4235b25b5feca23351835207b5\": [0, 0, 0, 0, 1, 9, 61],\n \"a00993.html#aa78873a43e9f5b599cba62356882d0a5\": [1, 0, 0, 0, 1, 9, 15],\n- \"a00993.html#aa7d301570e6f7b39e1eaa546e2937018\": [1, 0, 0, 0, 1, 9, 38],\n+ \"a00993.html#aa78873a43e9f5b599cba62356882d0a5\": [0, 0, 0, 0, 1, 9, 15],\n \"a00993.html#aa7d301570e6f7b39e1eaa546e2937018\": [0, 0, 0, 0, 1, 9, 38],\n+ \"a00993.html#aa7d301570e6f7b39e1eaa546e2937018\": [1, 0, 0, 0, 1, 9, 38],\n \"a00993.html#aa9be824a572029f3ec1e0c0d6cfecd77\": [0, 0, 0, 0, 1, 9, 39],\n \"a00993.html#aa9be824a572029f3ec1e0c0d6cfecd77\": [1, 0, 0, 0, 1, 9, 39],\n \"a00993.html#aa9e55389ca0f7adf332423216b31134d\": [0, 0, 0, 0, 1, 9, 48],\n \"a00993.html#aa9e55389ca0f7adf332423216b31134d\": [1, 0, 0, 0, 1, 9, 48],\n- \"a00993.html#ab0adae83e2dd316f9ed297fe745dab55\": [0, 0, 0, 0, 1, 9, 58],\n \"a00993.html#ab0adae83e2dd316f9ed297fe745dab55\": [1, 0, 0, 0, 1, 9, 58],\n- \"a00993.html#ab15bba670f52d55d19967104b95b9024\": [0, 0, 0, 0, 1, 9, 40],\n+ \"a00993.html#ab0adae83e2dd316f9ed297fe745dab55\": [0, 0, 0, 0, 1, 9, 58],\n \"a00993.html#ab15bba670f52d55d19967104b95b9024\": [1, 0, 0, 0, 1, 9, 40],\n+ \"a00993.html#ab15bba670f52d55d19967104b95b9024\": [0, 0, 0, 0, 1, 9, 40],\n \"a00993.html#ab181437e35cfc57ef3efdd368bb51a69\": [1, 0, 0, 0, 1, 9, 86],\n \"a00993.html#ab181437e35cfc57ef3efdd368bb51a69\": [0, 0, 0, 0, 1, 9, 86],\n- \"a00993.html#ab3133704d2b372da1204e6650d4800ee\": [1, 0, 0, 0, 1, 9, 51],\n \"a00993.html#ab3133704d2b372da1204e6650d4800ee\": [0, 0, 0, 0, 1, 9, 51],\n- \"a00993.html#ab45dd46b44737845ca57f634f11f1bbc\": [0, 0, 0, 0, 1, 9, 46],\n+ \"a00993.html#ab3133704d2b372da1204e6650d4800ee\": [1, 0, 0, 0, 1, 9, 51],\n \"a00993.html#ab45dd46b44737845ca57f634f11f1bbc\": [1, 0, 0, 0, 1, 9, 46],\n- \"a00993.html#ab6810a0252d1c07b7459065c3dde2903\": [1, 0, 0, 0, 1, 9, 25],\n+ \"a00993.html#ab45dd46b44737845ca57f634f11f1bbc\": [0, 0, 0, 0, 1, 9, 46],\n \"a00993.html#ab6810a0252d1c07b7459065c3dde2903\": [0, 0, 0, 0, 1, 9, 25],\n+ \"a00993.html#ab6810a0252d1c07b7459065c3dde2903\": [1, 0, 0, 0, 1, 9, 25],\n \"a00993.html#ab72c4254f74c932eeb7d7b08805932c5\": [0, 0, 0, 0, 1, 9, 1],\n \"a00993.html#ab72c4254f74c932eeb7d7b08805932c5\": [1, 0, 0, 0, 1, 9, 1],\n \"a00993.html#ab8a09f15edef57b9b4aed0d0d6183b75\": [0, 0, 0, 0, 1, 9, 13],\n \"a00993.html#ab8a09f15edef57b9b4aed0d0d6183b75\": [1, 0, 0, 0, 1, 9, 13],\n- \"a00993.html#ac176593fac078b4f7dd4801d586d6c41\": [1, 0, 0, 0, 1, 9, 29],\n \"a00993.html#ac176593fac078b4f7dd4801d586d6c41\": [0, 0, 0, 0, 1, 9, 29],\n+ \"a00993.html#ac176593fac078b4f7dd4801d586d6c41\": [1, 0, 0, 0, 1, 9, 29],\n \"a00993.html#ac326c7af7f135ba41829dd20bd1c2f34\": [1, 0, 0, 0, 1, 9, 17],\n \"a00993.html#ac326c7af7f135ba41829dd20bd1c2f34\": [0, 0, 0, 0, 1, 9, 17],\n \"a00993.html#ac39a9665667b0a4fcc7ed028b7faaa47\": [1, 0, 0, 0, 1, 9, 45],\n \"a00993.html#ac39a9665667b0a4fcc7ed028b7faaa47\": [0, 0, 0, 0, 1, 9, 45],\n- \"a00993.html#ac44a6262548ebebae9bbc5b5f3c43e3a\": [1, 0, 0, 0, 1, 9, 60],\n \"a00993.html#ac44a6262548ebebae9bbc5b5f3c43e3a\": [0, 0, 0, 0, 1, 9, 60],\n- \"a00993.html#acd0f82d3c49b8a5dd436d4003c44b713\": [1, 0, 0, 0, 1, 9, 89],\n+ \"a00993.html#ac44a6262548ebebae9bbc5b5f3c43e3a\": [1, 0, 0, 0, 1, 9, 60],\n \"a00993.html#acd0f82d3c49b8a5dd436d4003c44b713\": [0, 0, 0, 0, 1, 9, 89],\n+ \"a00993.html#acd0f82d3c49b8a5dd436d4003c44b713\": [1, 0, 0, 0, 1, 9, 89],\n \"a00993.html#ad0e821181a94f5019cc79b75d3eb74b6\": [1, 0, 0, 0, 1, 9, 20],\n \"a00993.html#ad0e821181a94f5019cc79b75d3eb74b6\": [0, 0, 0, 0, 1, 9, 20],\n \"a00993.html#ad173086439fbbf0412b86b3d1262847d\": [0, 0, 0, 0, 1, 9, 70],\n \"a00993.html#ad173086439fbbf0412b86b3d1262847d\": [1, 0, 0, 0, 1, 9, 70],\n \"a00993.html#ad2744ba943362370738d6bd8448cd779\": [1, 0, 0, 0, 1, 9, 47],\n \"a00993.html#ad2744ba943362370738d6bd8448cd779\": [0, 0, 0, 0, 1, 9, 47],\n- \"a00993.html#ad452cef79832abb71eef0c3d88acc1a0\": [1, 0, 0, 0, 1, 9, 90],\n \"a00993.html#ad452cef79832abb71eef0c3d88acc1a0\": [0, 0, 0, 0, 1, 9, 90],\n+ \"a00993.html#ad452cef79832abb71eef0c3d88acc1a0\": [1, 0, 0, 0, 1, 9, 90],\n \"a00993.html#ad690cee703683b70def7a4419120cc9a\": [0, 0, 0, 0, 1, 9, 19],\n \"a00993.html#ad690cee703683b70def7a4419120cc9a\": [1, 0, 0, 0, 1, 9, 19],\n- \"a00993.html#ad6bafe91da1dcf5b8fb1f7c8cb4ed619\": [0, 0, 0, 0, 1, 9, 33],\n \"a00993.html#ad6bafe91da1dcf5b8fb1f7c8cb4ed619\": [1, 0, 0, 0, 1, 9, 33],\n- \"a00993.html#ad71e6ae07059dc39b0550c98cfcee291\": [1, 0, 0, 0, 1, 9, 3],\n+ \"a00993.html#ad6bafe91da1dcf5b8fb1f7c8cb4ed619\": [0, 0, 0, 0, 1, 9, 33],\n \"a00993.html#ad71e6ae07059dc39b0550c98cfcee291\": [0, 0, 0, 0, 1, 9, 3],\n+ \"a00993.html#ad71e6ae07059dc39b0550c98cfcee291\": [1, 0, 0, 0, 1, 9, 3],\n \"a00993.html#ad897fbe60d2921cfbf5e1bed8760d49f\": [0, 0, 0, 0, 1, 9, 67],\n \"a00993.html#ad897fbe60d2921cfbf5e1bed8760d49f\": [1, 0, 0, 0, 1, 9, 67],\n- \"a00993.html#ad9481ab788a82c6a48364fff6a8ab193\": [0, 0, 0, 0, 1, 9, 55],\n \"a00993.html#ad9481ab788a82c6a48364fff6a8ab193\": [1, 0, 0, 0, 1, 9, 55],\n+ \"a00993.html#ad9481ab788a82c6a48364fff6a8ab193\": [0, 0, 0, 0, 1, 9, 55],\n \"a00993.html#ad98dc91babcdddf20876169a70e10402\": [0, 0, 0, 0, 1, 9, 26],\n \"a00993.html#ad98dc91babcdddf20876169a70e10402\": [1, 0, 0, 0, 1, 9, 26],\n \"a00993.html#adb4260cb1d469935a32df5ad35d98bb4\": [0, 0, 0, 0, 1, 9, 24],\n \"a00993.html#adb4260cb1d469935a32df5ad35d98bb4\": [1, 0, 0, 0, 1, 9, 24],\n \"a00993.html#adccd68da8d26bb5f5c2b7f29e0a14e89\": [0, 0, 0, 0, 1, 9, 21],\n \"a00993.html#adccd68da8d26bb5f5c2b7f29e0a14e89\": [1, 0, 0, 0, 1, 9, 21],\n- \"a00993.html#adf2a870e7fccf780894d17160b7967f0\": [0, 0, 0, 0, 1, 9, 42],\n \"a00993.html#adf2a870e7fccf780894d17160b7967f0\": [1, 0, 0, 0, 1, 9, 42],\n+ \"a00993.html#adf2a870e7fccf780894d17160b7967f0\": [0, 0, 0, 0, 1, 9, 42],\n \"a00993.html#ae7d9c513e950df25aebfeed309666764\": [1, 0, 0, 0, 1, 9, 83],\n \"a00993.html#ae7d9c513e950df25aebfeed309666764\": [0, 0, 0, 0, 1, 9, 83],\n \"a00993.html#af22fd3afdc99098cc89463f530de5011\": [0, 0, 0, 0, 1, 9, 87],\n \"a00993.html#af22fd3afdc99098cc89463f530de5011\": [1, 0, 0, 0, 1, 9, 88],\n \"a00993.html#af22fd3afdc99098cc89463f530de5011\": [1, 0, 0, 0, 1, 9, 87],\n \"a00993.html#af22fd3afdc99098cc89463f530de5011\": [0, 0, 0, 0, 1, 9, 88],\n \"a00993.html#af903f44e0f0743652b5f465ff60492a2\": [0, 0, 0, 0, 1, 9, 35],\n- \"a00993.html#af903f44e0f0743652b5f465ff60492a2\": [0, 0, 0, 0, 1, 9, 34],\n \"a00993.html#af903f44e0f0743652b5f465ff60492a2\": [1, 0, 0, 0, 1, 9, 34],\n+ \"a00993.html#af903f44e0f0743652b5f465ff60492a2\": [0, 0, 0, 0, 1, 9, 34],\n \"a00993.html#af903f44e0f0743652b5f465ff60492a2\": [1, 0, 0, 0, 1, 9, 35],\n- \"a00993.html#afc91733be6989f2f18c4817fc43ab070\": [0, 0, 0, 0, 1, 9, 41],\n \"a00993.html#afc91733be6989f2f18c4817fc43ab070\": [1, 0, 0, 0, 1, 9, 41],\n+ \"a00993.html#afc91733be6989f2f18c4817fc43ab070\": [0, 0, 0, 0, 1, 9, 41],\n \"a00997.html\": [0, 0, 0, 0, 1, 9, 0],\n \"a00997.html\": [1, 0, 0, 0, 1, 9, 0],\n- \"a00997.html#a31bdf15525ab73560c2b725ff7f8ae3a\": [1, 0, 0, 0, 1, 9, 0, 3],\n \"a00997.html#a31bdf15525ab73560c2b725ff7f8ae3a\": [0, 0, 0, 0, 1, 9, 0, 3],\n+ \"a00997.html#a31bdf15525ab73560c2b725ff7f8ae3a\": [1, 0, 0, 0, 1, 9, 0, 3],\n \"a00997.html#a4430ecde7e1d784b2bef6dc4c2ff04c2\": [1, 0, 0, 0, 1, 9, 0, 2],\n \"a00997.html#a4430ecde7e1d784b2bef6dc4c2ff04c2\": [0, 0, 0, 0, 1, 9, 0, 2],\n \"a00997.html#a46d1a8129375c3ee40a33a81d44b685a\": [1, 0, 0, 0, 1, 9, 0, 4],\n \"a00997.html#a46d1a8129375c3ee40a33a81d44b685a\": [0, 0, 0, 0, 1, 9, 0, 4],\n- \"a00997.html#ad4867d502f9704b7e45a7974e8918dc3\": [1, 0, 0, 0, 1, 9, 0, 1],\n \"a00997.html#ad4867d502f9704b7e45a7974e8918dc3\": [0, 0, 0, 0, 1, 9, 0, 1],\n+ \"a00997.html#ad4867d502f9704b7e45a7974e8918dc3\": [1, 0, 0, 0, 1, 9, 0, 1],\n \"a00997.html#aff380d8d7f072959898c0a4e25150d2a\": [0, 0, 0, 0, 1, 9, 0, 0],\n \"a00997.html#aff380d8d7f072959898c0a4e25150d2a\": [1, 0, 0, 0, 1, 9, 0, 0],\n- \"a01009.html\": [1, 0, 0, 0, 1, 10],\n \"a01009.html\": [0, 0, 0, 0, 1, 10],\n+ \"a01009.html\": [1, 0, 0, 0, 1, 10],\n \"a01009.html#a37218ea13f75caee4c93cc4e94d26060\": [1, 0, 0, 0, 1, 10, 2],\n \"a01009.html#a37218ea13f75caee4c93cc4e94d26060\": [0, 0, 0, 0, 1, 10, 2],\n \"a01013.html\": [1, 0, 0, 0, 1, 10, 0],\n \"a01013.html\": [0, 0, 0, 0, 1, 10, 0],\n- \"a01013.html#a039b27c797bb2b4be4af66798787081e\": [0, 0, 0, 0, 1, 10, 0, 18],\n \"a01013.html#a039b27c797bb2b4be4af66798787081e\": [1, 0, 0, 0, 1, 10, 0, 18],\n+ \"a01013.html#a039b27c797bb2b4be4af66798787081e\": [0, 0, 0, 0, 1, 10, 0, 18],\n \"a01013.html#a0fe3eeef4b5b332c7747a940db43cd8d\": [1, 0, 0, 0, 1, 10, 0, 16],\n \"a01013.html#a0fe3eeef4b5b332c7747a940db43cd8d\": [0, 0, 0, 0, 1, 10, 0, 16],\n- \"a01013.html#a113fa8ce12150940afe0215c702cc89d\": [0, 0, 0, 0, 1, 10, 0, 24],\n \"a01013.html#a113fa8ce12150940afe0215c702cc89d\": [1, 0, 0, 0, 1, 10, 0, 24],\n- \"a01013.html#a14138864bf072e99898a8d1a0c074468\": [0, 0, 0, 0, 1, 10, 0, 3],\n+ \"a01013.html#a113fa8ce12150940afe0215c702cc89d\": [0, 0, 0, 0, 1, 10, 0, 24],\n \"a01013.html#a14138864bf072e99898a8d1a0c074468\": [1, 0, 0, 0, 1, 10, 0, 3],\n+ \"a01013.html#a14138864bf072e99898a8d1a0c074468\": [0, 0, 0, 0, 1, 10, 0, 3],\n \"a01013.html#a18b47b281350d10784fd4917be9019f1\": [0, 0, 0, 0, 1, 10, 0, 21],\n \"a01013.html#a18b47b281350d10784fd4917be9019f1\": [1, 0, 0, 0, 1, 10, 0, 21],\n \"a01013.html#a1f59869b65e626aebb332538b92759ec\": [0, 0, 0, 0, 1, 10, 0, 2],\n \"a01013.html#a1f59869b65e626aebb332538b92759ec\": [1, 0, 0, 0, 1, 10, 0, 2],\n- \"a01013.html#a2a03b250662eec5d267daf6692e4b341\": [0, 0, 0, 0, 1, 10, 0, 14],\n \"a01013.html#a2a03b250662eec5d267daf6692e4b341\": [1, 0, 0, 0, 1, 10, 0, 14],\n+ \"a01013.html#a2a03b250662eec5d267daf6692e4b341\": [0, 0, 0, 0, 1, 10, 0, 14],\n \"a01013.html#a2d5bc9d7d16144b5cdc70381843defa9\": [0, 0, 0, 0, 1, 10, 0, 8],\n \"a01013.html#a2d5bc9d7d16144b5cdc70381843defa9\": [1, 0, 0, 0, 1, 10, 0, 8],\n- \"a01013.html#a3f663e5c2b7e65976b6521c21ea59130\": [1, 0, 0, 0, 1, 10, 0, 12],\n \"a01013.html#a3f663e5c2b7e65976b6521c21ea59130\": [0, 0, 0, 0, 1, 10, 0, 12],\n- \"a01013.html#a425e9cd3218a02afffaf0289f1a9c6fd\": [1, 0, 0, 0, 1, 10, 0, 7],\n+ \"a01013.html#a3f663e5c2b7e65976b6521c21ea59130\": [1, 0, 0, 0, 1, 10, 0, 12],\n \"a01013.html#a425e9cd3218a02afffaf0289f1a9c6fd\": [0, 0, 0, 0, 1, 10, 0, 7],\n+ \"a01013.html#a425e9cd3218a02afffaf0289f1a9c6fd\": [1, 0, 0, 0, 1, 10, 0, 7],\n \"a01013.html#a497f7c6fe6944842dd54758e9ec5a8e2\": [0, 0, 0, 0, 1, 10, 0, 10],\n \"a01013.html#a497f7c6fe6944842dd54758e9ec5a8e2\": [1, 0, 0, 0, 1, 10, 0, 10],\n \"a01013.html#a4c1ba8119a16ea0682a870ee7a8282a5\": [0, 0, 0, 0, 1, 10, 0, 11],\n \"a01013.html#a4c1ba8119a16ea0682a870ee7a8282a5\": [1, 0, 0, 0, 1, 10, 0, 11],\n \"a01013.html#a5834971432c649e28d5a0186f79a60d5\": [1, 0, 0, 0, 1, 10, 0, 27],\n \"a01013.html#a5834971432c649e28d5a0186f79a60d5\": [0, 0, 0, 0, 1, 10, 0, 27],\n \"a01013.html#a5eba866952b7be15b065060b1f5a81da\": [0, 0, 0, 0, 1, 10, 0, 26],\n \"a01013.html#a5eba866952b7be15b065060b1f5a81da\": [1, 0, 0, 0, 1, 10, 0, 26],\n- \"a01013.html#a6a9e4615ca58b7206de550f249c5e37c\": [0, 0, 0, 0, 1, 10, 0, 4],\n \"a01013.html#a6a9e4615ca58b7206de550f249c5e37c\": [1, 0, 0, 0, 1, 10, 0, 4],\n- \"a01013.html#a728df1785179cd0768a4971b8c34708a\": [0, 0, 0, 0, 1, 10, 0, 17],\n+ \"a01013.html#a6a9e4615ca58b7206de550f249c5e37c\": [0, 0, 0, 0, 1, 10, 0, 4],\n \"a01013.html#a728df1785179cd0768a4971b8c34708a\": [1, 0, 0, 0, 1, 10, 0, 17],\n+ \"a01013.html#a728df1785179cd0768a4971b8c34708a\": [0, 0, 0, 0, 1, 10, 0, 17],\n \"a01013.html#a7551f187d9f4a70b27faed7597d96e4f\": [0, 0, 0, 0, 1, 10, 0, 20],\n \"a01013.html#a7551f187d9f4a70b27faed7597d96e4f\": [1, 0, 0, 0, 1, 10, 0, 20],\n \"a01013.html#a8d3c24dcc455474a3a9498c6b6378cc4\": [0, 0, 0, 0, 1, 10, 0, 13],\n \"a01013.html#a8d3c24dcc455474a3a9498c6b6378cc4\": [1, 0, 0, 0, 1, 10, 0, 13],\n \"a01013.html#a91ce5fe0ce9b9ec6c5afcfb6e1ccaa40\": [1, 0, 0, 0, 1, 10, 0, 23],\n \"a01013.html#a91ce5fe0ce9b9ec6c5afcfb6e1ccaa40\": [0, 0, 0, 0, 1, 10, 0, 23],\n \"a01013.html#a97f60d840c3d2830f0c4680783a334e8\": [1, 0, 0, 0, 1, 10, 0, 15],\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/navtreeindex4.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/navtreeindex4.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -15,134 +15,134 @@\n \"a01017.html#ac8bb3912a3ce86b15842e79d0b421204\": [0, 0, 0, 0, 1, 10, 1, 3],\n \"a01017.html#ace61bb1240f406368b44e72e58728428\": [1, 0, 0, 0, 1, 10, 1, 0],\n \"a01017.html#ace61bb1240f406368b44e72e58728428\": [0, 0, 0, 0, 1, 10, 1, 0],\n \"a01017.html#ae1df61bc00c50b927351c1e6b044f5a1\": [1, 0, 0, 0, 1, 10, 1, 4],\n \"a01017.html#ae1df61bc00c50b927351c1e6b044f5a1\": [0, 0, 0, 0, 1, 10, 1, 4],\n \"a01021.html\": [0, 0, 0, 0, 1, 12],\n \"a01021.html\": [1, 0, 0, 0, 1, 12],\n- \"a01021.html#a0357839a7fabaa02f1d6d6a3c75e1ec2\": [1, 0, 0, 0, 1, 12, 7],\n \"a01021.html#a0357839a7fabaa02f1d6d6a3c75e1ec2\": [0, 0, 0, 0, 1, 12, 7],\n+ \"a01021.html#a0357839a7fabaa02f1d6d6a3c75e1ec2\": [1, 0, 0, 0, 1, 12, 7],\n \"a01021.html#a1fe1fbda93c01c326f13929d1c3c6247\": [1, 0, 0, 0, 1, 12, 0],\n \"a01021.html#a1fe1fbda93c01c326f13929d1c3c6247\": [0, 0, 0, 0, 1, 12, 0],\n \"a01021.html#a2cf4c50a1117c44ba4d11db92b067401\": [0, 0, 0, 0, 1, 12, 8],\n \"a01021.html#a2cf4c50a1117c44ba4d11db92b067401\": [1, 0, 0, 0, 1, 12, 8],\n- \"a01021.html#a3f8bd2ef902e11aad1debbdda26bb596\": [0, 0, 0, 0, 1, 12, 4],\n \"a01021.html#a3f8bd2ef902e11aad1debbdda26bb596\": [1, 0, 0, 0, 1, 12, 4],\n+ \"a01021.html#a3f8bd2ef902e11aad1debbdda26bb596\": [0, 0, 0, 0, 1, 12, 4],\n \"a01021.html#a6f7fc8b9ce66fa57ac58ed977cc9c6f0\": [1, 0, 0, 0, 1, 12, 2],\n \"a01021.html#a6f7fc8b9ce66fa57ac58ed977cc9c6f0\": [0, 0, 0, 0, 1, 12, 2],\n \"a01021.html#aa2fd72e336a12bf454dd79ba6ce8ee56\": [1, 0, 0, 0, 1, 12, 6],\n \"a01021.html#aa2fd72e336a12bf454dd79ba6ce8ee56\": [0, 0, 0, 0, 1, 12, 6],\n \"a01021.html#ab97b75b7c0fffa06a5948bd6ba7b420d\": [1, 0, 0, 0, 1, 12, 3],\n \"a01021.html#ab97b75b7c0fffa06a5948bd6ba7b420d\": [0, 0, 0, 0, 1, 12, 3],\n \"a01021.html#ad8f74e1887299ed02e0094100f18c998\": [1, 0, 0, 0, 1, 12, 5],\n \"a01021.html#ad8f74e1887299ed02e0094100f18c998\": [0, 0, 0, 0, 1, 12, 5],\n- \"a01021.html#ade7a1750cdc922e27c561520815d8b27\": [0, 0, 0, 0, 1, 12, 1],\n \"a01021.html#ade7a1750cdc922e27c561520815d8b27\": [1, 0, 0, 0, 1, 12, 1],\n+ \"a01021.html#ade7a1750cdc922e27c561520815d8b27\": [0, 0, 0, 0, 1, 12, 1],\n \"a01021.html#afdee0e9e9c6edd34c96892efff808a87\": [1, 0, 0, 0, 1, 12, 9],\n \"a01021.html#afdee0e9e9c6edd34c96892efff808a87\": [0, 0, 0, 0, 1, 12, 9],\n- \"a01029.html\": [0, 0, 0, 0, 1, 11],\n \"a01029.html\": [1, 0, 0, 0, 1, 11],\n- \"a01029.html#a643d81a2ae20ba1897433f5af5a3697a\": [1, 0, 0, 0, 1, 11, 0],\n+ \"a01029.html\": [0, 0, 0, 0, 1, 11],\n \"a01029.html#a643d81a2ae20ba1897433f5af5a3697a\": [0, 0, 0, 0, 1, 11, 0],\n+ \"a01029.html#a643d81a2ae20ba1897433f5af5a3697a\": [1, 0, 0, 0, 1, 11, 0],\n \"a01033.html\": [1, 0, 0, 0, 1, 13],\n \"a01033.html\": [0, 0, 0, 0, 1, 13],\n- \"a01033.html#a5fbaaa1a52a6d7622b1d306bf0a16624\": [0, 0, 0, 0, 1, 13, 3],\n \"a01033.html#a5fbaaa1a52a6d7622b1d306bf0a16624\": [1, 0, 0, 0, 1, 13, 3],\n- \"a01033.html#a7b5dd5f4c76d684d924adf477eeea0a3\": [0, 0, 0, 0, 1, 13, 0],\n+ \"a01033.html#a5fbaaa1a52a6d7622b1d306bf0a16624\": [0, 0, 0, 0, 1, 13, 3],\n \"a01033.html#a7b5dd5f4c76d684d924adf477eeea0a3\": [1, 0, 0, 0, 1, 13, 0],\n- \"a01033.html#a8a146d5966d7372bdd2557e990e52adc\": [1, 0, 0, 0, 1, 13, 2],\n+ \"a01033.html#a7b5dd5f4c76d684d924adf477eeea0a3\": [0, 0, 0, 0, 1, 13, 0],\n \"a01033.html#a8a146d5966d7372bdd2557e990e52adc\": [0, 0, 0, 0, 1, 13, 2],\n+ \"a01033.html#a8a146d5966d7372bdd2557e990e52adc\": [1, 0, 0, 0, 1, 13, 2],\n \"a01033.html#a9920fb01c4b75c94a953a98008a4baba\": [0, 0, 0, 0, 1, 13, 4],\n \"a01033.html#a9920fb01c4b75c94a953a98008a4baba\": [1, 0, 0, 0, 1, 13, 4],\n \"a01033.html#af22a241c3be4bc69a948371d108e7cfa\": [1, 0, 0, 0, 1, 13, 1],\n \"a01033.html#af22a241c3be4bc69a948371d108e7cfa\": [0, 0, 0, 0, 1, 13, 1],\n- \"a01037.html\": [0, 0, 0, 0, 1, 18],\n \"a01037.html\": [1, 0, 0, 0, 1, 18],\n- \"a01037.html#a46c8a310cf4c094f8c80e1cb8dc1f911\": [1, 0, 0, 0, 1, 18, 1],\n+ \"a01037.html\": [0, 0, 0, 0, 1, 18],\n \"a01037.html#a46c8a310cf4c094f8c80e1cb8dc1f911\": [0, 0, 0, 0, 1, 18, 1],\n+ \"a01037.html#a46c8a310cf4c094f8c80e1cb8dc1f911\": [1, 0, 0, 0, 1, 18, 1],\n \"a01037.html#a46c8a310cf4c094f8c80e1cb8dc1f911a4178369e390d2596ce60676642fec077\": [1, 0, 0, 0, 1, 18, 1, 2],\n \"a01037.html#a46c8a310cf4c094f8c80e1cb8dc1f911a4178369e390d2596ce60676642fec077\": [0, 0, 0, 0, 1, 18, 1, 2],\n- \"a01037.html#a46c8a310cf4c094f8c80e1cb8dc1f911ab18c20abfc04611ab0aec5e1c81bb2ab\": [0, 0, 0, 0, 1, 18, 1, 1],\n \"a01037.html#a46c8a310cf4c094f8c80e1cb8dc1f911ab18c20abfc04611ab0aec5e1c81bb2ab\": [1, 0, 0, 0, 1, 18, 1, 1],\n+ \"a01037.html#a46c8a310cf4c094f8c80e1cb8dc1f911ab18c20abfc04611ab0aec5e1c81bb2ab\": [0, 0, 0, 0, 1, 18, 1, 1],\n \"a01037.html#a46c8a310cf4c094f8c80e1cb8dc1f911ab491ed84aea170a330914a3f88b16d50\": [1, 0, 0, 0, 1, 18, 1, 0],\n \"a01037.html#a46c8a310cf4c094f8c80e1cb8dc1f911ab491ed84aea170a330914a3f88b16d50\": [0, 0, 0, 0, 1, 18, 1, 0],\n \"a01041.html\": [1, 0, 0, 0, 1, 4],\n \"a01041.html\": [0, 0, 0, 0, 1, 4],\n \"a01041.html#a46c8a310cf4c094f8c80e1cb8dc1f911\": [1, 0, 0, 0, 1, 4, 3],\n \"a01041.html#a46c8a310cf4c094f8c80e1cb8dc1f911\": [0, 0, 0, 0, 1, 4, 3],\n- \"a01041.html#a46c8a310cf4c094f8c80e1cb8dc1f911a4178369e390d2596ce60676642fec077\": [1, 0, 0, 0, 1, 4, 3, 2],\n \"a01041.html#a46c8a310cf4c094f8c80e1cb8dc1f911a4178369e390d2596ce60676642fec077\": [0, 0, 0, 0, 1, 4, 3, 2],\n+ \"a01041.html#a46c8a310cf4c094f8c80e1cb8dc1f911a4178369e390d2596ce60676642fec077\": [1, 0, 0, 0, 1, 4, 3, 2],\n \"a01041.html#a46c8a310cf4c094f8c80e1cb8dc1f911ab18c20abfc04611ab0aec5e1c81bb2ab\": [1, 0, 0, 0, 1, 4, 3, 1],\n \"a01041.html#a46c8a310cf4c094f8c80e1cb8dc1f911ab18c20abfc04611ab0aec5e1c81bb2ab\": [0, 0, 0, 0, 1, 4, 3, 1],\n \"a01041.html#a46c8a310cf4c094f8c80e1cb8dc1f911ab491ed84aea170a330914a3f88b16d50\": [1, 0, 0, 0, 1, 4, 3, 0],\n \"a01041.html#a46c8a310cf4c094f8c80e1cb8dc1f911ab491ed84aea170a330914a3f88b16d50\": [0, 0, 0, 0, 1, 4, 3, 0],\n \"a01041.html#a940880e2d35dea72f52db5bcdc9c94b7\": [1, 0, 0, 0, 1, 4, 2],\n \"a01041.html#a940880e2d35dea72f52db5bcdc9c94b7\": [0, 0, 0, 0, 1, 4, 2],\n- \"a01045.html\": [0, 0, 0, 0, 1, 15],\n \"a01045.html\": [1, 0, 0, 0, 1, 15],\n- \"a01045.html#a19f9c49c05d967ad8e51bc2a696caf4b\": [1, 0, 0, 0, 1, 15, 8],\n+ \"a01045.html\": [0, 0, 0, 0, 1, 15],\n \"a01045.html#a19f9c49c05d967ad8e51bc2a696caf4b\": [0, 0, 0, 0, 1, 15, 8],\n+ \"a01045.html#a19f9c49c05d967ad8e51bc2a696caf4b\": [1, 0, 0, 0, 1, 15, 8],\n \"a01045.html#a1bacc5a5c4ae6f44d4f06c1dd0adf8f4\": [0, 0, 0, 0, 1, 15, 0],\n \"a01045.html#a1bacc5a5c4ae6f44d4f06c1dd0adf8f4\": [1, 0, 0, 0, 1, 15, 0],\n \"a01045.html#a52397f1270007c943b8539338a796608\": [1, 0, 0, 0, 1, 15, 11],\n \"a01045.html#a52397f1270007c943b8539338a796608\": [0, 0, 0, 0, 1, 15, 11],\n \"a01045.html#a52ca26745627f4704181d58dc919ae57\": [0, 0, 0, 0, 1, 15, 1],\n \"a01045.html#a52ca26745627f4704181d58dc919ae57\": [1, 0, 0, 0, 1, 15, 1],\n \"a01045.html#a659a293dd51073a1b9560bb80f687705\": [0, 0, 0, 0, 1, 15, 7],\n \"a01045.html#a659a293dd51073a1b9560bb80f687705\": [1, 0, 0, 0, 1, 15, 7],\n- \"a01045.html#a698f69e8409658c6afaf5ea1ff0f15b8\": [1, 0, 0, 0, 1, 15, 2],\n \"a01045.html#a698f69e8409658c6afaf5ea1ff0f15b8\": [0, 0, 0, 0, 1, 15, 2],\n- \"a01045.html#a8b387cbfb5a56ee18bf92d10f3cdad6d\": [0, 0, 0, 0, 1, 15, 10],\n+ \"a01045.html#a698f69e8409658c6afaf5ea1ff0f15b8\": [1, 0, 0, 0, 1, 15, 2],\n \"a01045.html#a8b387cbfb5a56ee18bf92d10f3cdad6d\": [1, 0, 0, 0, 1, 15, 10],\n+ \"a01045.html#a8b387cbfb5a56ee18bf92d10f3cdad6d\": [0, 0, 0, 0, 1, 15, 10],\n \"a01045.html#a8d6f065bafcef50d1f904979c794d1ce\": [0, 0, 0, 0, 1, 15, 5],\n \"a01045.html#a8d6f065bafcef50d1f904979c794d1ce\": [1, 0, 0, 0, 1, 15, 5],\n- \"a01045.html#aa4907b035ab197f57102411e48b2cfc0\": [0, 0, 0, 0, 1, 15, 3],\n \"a01045.html#aa4907b035ab197f57102411e48b2cfc0\": [1, 0, 0, 0, 1, 15, 3],\n+ \"a01045.html#aa4907b035ab197f57102411e48b2cfc0\": [0, 0, 0, 0, 1, 15, 3],\n \"a01045.html#aab5755075fff28578bfd3387c504d303\": [0, 0, 0, 0, 1, 15, 12],\n \"a01045.html#aab5755075fff28578bfd3387c504d303\": [1, 0, 0, 0, 1, 15, 12],\n \"a01045.html#ab823038f11d7c069fc63a2b992055535\": [0, 0, 0, 0, 1, 15, 4],\n \"a01045.html#ab823038f11d7c069fc63a2b992055535\": [1, 0, 0, 0, 1, 15, 4],\n- \"a01045.html#aecc2be688aecf08f7a98e49db8fed2f8\": [0, 0, 0, 0, 1, 15, 6],\n \"a01045.html#aecc2be688aecf08f7a98e49db8fed2f8\": [1, 0, 0, 0, 1, 15, 6],\n- \"a01045.html#af58f6a3f9b167c3330097c1a69ca36a8\": [1, 0, 0, 0, 1, 15, 9],\n+ \"a01045.html#aecc2be688aecf08f7a98e49db8fed2f8\": [0, 0, 0, 0, 1, 15, 6],\n \"a01045.html#af58f6a3f9b167c3330097c1a69ca36a8\": [0, 0, 0, 0, 1, 15, 9],\n- \"a01049.html\": [1, 0, 0, 0, 1, 14],\n+ \"a01045.html#af58f6a3f9b167c3330097c1a69ca36a8\": [1, 0, 0, 0, 1, 15, 9],\n \"a01049.html\": [0, 0, 0, 0, 1, 14],\n- \"a01049.html#a540bd990ac7c5770b6f1a5eb5b58d874\": [1, 0, 0, 0, 1, 14, 2],\n+ \"a01049.html\": [1, 0, 0, 0, 1, 14],\n \"a01049.html#a540bd990ac7c5770b6f1a5eb5b58d874\": [0, 0, 0, 0, 1, 14, 2],\n+ \"a01049.html#a540bd990ac7c5770b6f1a5eb5b58d874\": [1, 0, 0, 0, 1, 14, 2],\n \"a01049.html#a685b0ef36235914f7c10ff8f1169ade8\": [1, 0, 0, 0, 1, 14, 3],\n \"a01049.html#a685b0ef36235914f7c10ff8f1169ade8\": [0, 0, 0, 0, 1, 14, 3],\n \"a01049.html#a71b0ccb1e01e77608b938cb11039a34a\": [1, 0, 0, 0, 1, 14, 0],\n \"a01049.html#a71b0ccb1e01e77608b938cb11039a34a\": [0, 0, 0, 0, 1, 14, 0],\n \"a01049.html#af3b2d4f28b2b1edbb491db39b0658c2a\": [0, 0, 0, 0, 1, 14, 1],\n \"a01049.html#af3b2d4f28b2b1edbb491db39b0658c2a\": [1, 0, 0, 0, 1, 14, 1],\n \"a01053.html\": [0, 0, 0, 0, 1, 19],\n \"a01053.html\": [1, 0, 0, 0, 1, 19],\n \"a01053.html#a02e67ceab8cb5af7982ef2a31a07a2ce\": [0, 0, 0, 0, 1, 19, 8],\n \"a01053.html#a02e67ceab8cb5af7982ef2a31a07a2ce\": [1, 0, 0, 0, 1, 19, 8],\n- \"a01053.html#a11ad3846bf577760d1c829835f62b8d3\": [1, 0, 0, 0, 1, 19, 29],\n \"a01053.html#a11ad3846bf577760d1c829835f62b8d3\": [0, 0, 0, 0, 1, 19, 29],\n+ \"a01053.html#a11ad3846bf577760d1c829835f62b8d3\": [1, 0, 0, 0, 1, 19, 29],\n \"a01053.html#a15cb55501155c442dba5f0e14bf03124\": [1, 0, 0, 0, 1, 19, 24],\n \"a01053.html#a15cb55501155c442dba5f0e14bf03124\": [0, 0, 0, 0, 1, 19, 24],\n \"a01053.html#a1bcd132b8e6d40cb6ed1543f28ff998c\": [1, 0, 0, 0, 1, 19, 19],\n \"a01053.html#a1bcd132b8e6d40cb6ed1543f28ff998c\": [0, 0, 0, 0, 1, 19, 19],\n- \"a01053.html#a232ddf5a15e24e91b2ec55f83a1436b5\": [1, 0, 0, 0, 1, 19, 22],\n \"a01053.html#a232ddf5a15e24e91b2ec55f83a1436b5\": [0, 0, 0, 0, 1, 19, 22],\n- \"a01053.html#a2c225eadcb49bfb4af44bfb883516809\": [0, 0, 0, 0, 1, 19, 7],\n+ \"a01053.html#a232ddf5a15e24e91b2ec55f83a1436b5\": [1, 0, 0, 0, 1, 19, 22],\n \"a01053.html#a2c225eadcb49bfb4af44bfb883516809\": [1, 0, 0, 0, 1, 19, 7],\n+ \"a01053.html#a2c225eadcb49bfb4af44bfb883516809\": [0, 0, 0, 0, 1, 19, 7],\n \"a01053.html#a32d626626eee0bc4ade146973f6abb1c\": [1, 0, 0, 0, 1, 19, 5],\n \"a01053.html#a32d626626eee0bc4ade146973f6abb1c\": [0, 0, 0, 0, 1, 19, 5],\n- \"a01053.html#a35786984f5caa4684165da2c96fba9b3\": [1, 0, 0, 0, 1, 19, 14],\n \"a01053.html#a35786984f5caa4684165da2c96fba9b3\": [0, 0, 0, 0, 1, 19, 14],\n+ \"a01053.html#a35786984f5caa4684165da2c96fba9b3\": [1, 0, 0, 0, 1, 19, 14],\n \"a01053.html#a385a2eb32312f28d79a02461a59c0630\": [1, 0, 0, 0, 1, 19, 27],\n \"a01053.html#a385a2eb32312f28d79a02461a59c0630\": [0, 0, 0, 0, 1, 19, 27],\n \"a01053.html#a3cd3b8de1630c159f3c66dfc950210cf\": [0, 0, 0, 0, 1, 19, 18],\n \"a01053.html#a3cd3b8de1630c159f3c66dfc950210cf\": [1, 0, 0, 0, 1, 19, 18],\n- \"a01053.html#a50345bcc33c588cf49520a79396e105d\": [0, 0, 0, 0, 1, 19, 11],\n \"a01053.html#a50345bcc33c588cf49520a79396e105d\": [1, 0, 0, 0, 1, 19, 11],\n+ \"a01053.html#a50345bcc33c588cf49520a79396e105d\": [0, 0, 0, 0, 1, 19, 11],\n \"a01053.html#a65836d2070b943c8fecbad926d074de2\": [0, 0, 0, 0, 1, 19, 9],\n \"a01053.html#a65836d2070b943c8fecbad926d074de2\": [1, 0, 0, 0, 1, 19, 9],\n \"a01053.html#a680f5b6b2b873a149a997c4b5fca2be8\": [1, 0, 0, 0, 1, 19, 1],\n \"a01053.html#a680f5b6b2b873a149a997c4b5fca2be8\": [0, 0, 0, 0, 1, 19, 1],\n \"a01053.html#a82005658c7c2b4aea6222587d06ce4ef\": [1, 0, 0, 0, 1, 19, 10],\n \"a01053.html#a82005658c7c2b4aea6222587d06ce4ef\": [0, 0, 0, 0, 1, 19, 10],\n \"a01053.html#a84969a9edeae22167a83fde274f002af\": [1, 0, 0, 0, 1, 19, 12],\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/all_1.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/all_1.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -27,15 +27,15 @@\n ['applystencil_5', ['ApplyStencil', ['../a00933.html#a4b5e80eb39b7497712eed0009309cd3c', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Surface']]],\n ['applystencilfrommesh_6', ['ApplyStencilFromMesh', ['../a00933.html#a7fa4a5c3bfea7fc2ebda886f9b12eb95', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Surface']]],\n ['arefaceweightsforfacecenters_7', ['AreFaceWeightsForFaceCenters', ['../a01337.html#a3519e5e05631026fad94c7616f5e0e67', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Scheme::LocalMask']]],\n ['array_8', ['array', ['../a01349.html', 1, 'Array< TYPE >'],\n ['../a01349.html#adbe98cd78a59ce56cb45c2239136cc10', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Vtr::Array::Array(value_type *ptr, size_type sizeArg)'],\n ['../a01349.html#af9474cac29f3177edf5e8d72ea4a440c', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Vtr::Array::Array()']\n ]],\n- ['array_2eh_9', ['array.h', ['../a00767.html', 1, '']]],\n+ ['array_2eh_9', ['array.h', ['../a00764.html', 1, '']]],\n ['arrayindex_10', ['arrayIndex', ['../a00997.html#a4430ecde7e1d784b2bef6dc4c2ff04c2', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTable::PatchHandle']]],\n ['assignboundarypropertiesfromedgemask_11', ['assignBoundaryPropertiesFromEdgeMask', ['../a01017.html#ace61bb1240f406368b44e72e58728428', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTableFactory::PatchFaceTag']]],\n ['assignboundarypropertiesfromvertexmask_12', ['assignBoundaryPropertiesFromVertexMask', ['../a01017.html#a19202138f911782b5652536867d24565', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTableFactory::PatchFaceTag']]],\n ['assigncomponenttags_13', ['assignComponentTags', ['../a01109.html#a3df7295af055588a7b4f20d4da021ad1', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyRefinerFactory']]],\n ['assigncomponenttopology_14', ['assignComponentTopology', ['../a01109.html#a098784adfa428c620663baf9c2d8e41a', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyRefinerFactory']]],\n ['assigncornerlimitmask_15', ['assigncornerlimitmask', ['../a01333.html#ab38c56ce6121aed94f2796bf5df894be', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Scheme::assignCornerLimitMask(VERTEX const &, MASK &posMask) const'],\n ['../a01333.html#ab38c56ce6121aed94f2796bf5df894be', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Scheme::assignCornerLimitMask(VERTEX const &, MASK &posMask) const'],\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/all_11.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/all_11.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -2,15 +2,15 @@\n ['s_0', ['s', ['../a01313.html#a874f74a4dc1c9a0cd9c6e0d79c298f55', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::PatchCoord::s'],\n ['../a01085.html#a22a5e18d1aeafd28cdd38b543c50c688', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::LimitStencilTableFactoryReal::LocationArray::s']\n ]],\n ['scheme_1', ['scheme', ['../a01333.html#add94f921c43fa14d886adfbcdcc00211', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Scheme::Scheme()'],\n ['../a01333.html', 1, 'Scheme< SCHEME_TYPE >'],\n ['../a01333.html#a5c142c4d9c6f3be66bd018713591ffcb', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Scheme::Scheme()']\n ]],\n- ['scheme_2eh_2', ['scheme.h', ['../a00770.html', 1, '']]],\n+ ['scheme_2eh_2', ['scheme.h', ['../a00773.html', 1, '']]],\n ['scheme_5fbilinear_3', ['SCHEME_BILINEAR', ['../a00913.html#aa3daa2f428c6be2b1cb394f3a525833da02558f420bac2d6bd3f8411d4b3957a0', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc']]],\n ['scheme_5fcatmark_4', ['SCHEME_CATMARK', ['../a00913.html#aa3daa2f428c6be2b1cb394f3a525833da29c9704ef8a61670dfc242b6e6b82a9f', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc']]],\n ['scheme_5floop_5', ['SCHEME_LOOP', ['../a00913.html#aa3daa2f428c6be2b1cb394f3a525833da529a2651a5dcfac532e933ffefc36e99', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc']]],\n ['schemeoptions_6', ['schemeOptions', ['../a01129.html#a9ec2ab2b4bd49c6cf367dac80c8cbb94', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyRefinerFactory::Options']]],\n ['schemetype_7', ['schemetype', ['../a01129.html#ab4a105466e7c764e3aabaa6c44c1eeb6', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyRefinerFactory::Options::schemeType'],\n ['../a00913.html#aa3daa2f428c6be2b1cb394f3a525833d', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::SchemeType']\n ]],\n@@ -139,20 +139,20 @@\n ['../a00941.html', 1, 'SurfaceFactory']\n ]],\n ['surfacefactory_2eh_92', ['surfaceFactory.h', ['../a00686.html', 1, '']]],\n ['surfacefactorycache_93', ['surfacefactorycache', ['../a00949.html#a3f63565868cb0b0871e2db37939ec0e2', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::SurfaceFactoryCache::SurfaceFactoryCache()'],\n ['../a00949.html#a704742f6a7a07e766b5320c8d6f2f745', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::SurfaceFactoryCache::SurfaceFactoryCache(SurfaceFactoryCache const &)=delete'],\n ['../a00949.html', 1, 'SurfaceFactoryCache']\n ]],\n- ['surfacefactorycache_2eh_94', ['surfaceFactoryCache.h', ['../a00683.html', 1, '']]],\n+ ['surfacefactorycache_2eh_94', ['surfaceFactoryCache.h', ['../a00680.html', 1, '']]],\n ['surfacefactorycachethreaded_95', ['surfacefactorycachethreaded', ['../a00953.html#a9e84b6f045809c700d7dc53c3a350afe', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::SurfaceFactoryCacheThreaded::SurfaceFactoryCacheThreaded()'],\n ['../a00953.html', 1, 'SurfaceFactoryCacheThreaded< MUTEX_TYPE, READ_LOCK_GUARD_TYPE, WRITE_LOCK_GUARD_TYPE >']\n ]],\n ['surfacefactorymeshadapter_96', ['SurfaceFactoryMeshAdapter', ['../a00957.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr']]],\n- ['surfacefactorymeshadapter_2eh_97', ['surfaceFactoryMeshAdapter.h', ['../a00680.html', 1, '']]],\n+ ['surfacefactorymeshadapter_2eh_97', ['surfaceFactoryMeshAdapter.h', ['../a00683.html', 1, '']]],\n ['synchronize_98', ['synchronize', ['../a01141.html#a0529a707250f9931f945ec49d4e428d2', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CLEvaluator::Synchronize(cl_command_queue queue)'],\n ['../a01141.html#a7e77f811e9d48160701e705bb4300388', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CLEvaluator::Synchronize(DEVICE_CONTEXT deviceContext)'],\n ['../a01157.html#ae339a533e5f7a5021c5a4b40ec09c208', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CpuEvaluator::Synchronize()'],\n ['../a01309.html#a9689407af718de4263562bb3a760c1dd', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::TbbEvaluator::Synchronize()'],\n ['../a01305.html#a9689407af718de4263562bb3a760c1dd', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::OmpEvaluator::Synchronize()'],\n ['../a01285.html#a7e02041f843415c1056ea2ca3f7d0b62', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::MTLComputeEvaluator::Synchronize()'],\n ['../a01273.html#ab945364bf8cadb3d1f8285551d9d49f0', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::Mesh::Synchronize()'],\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/all_12.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/all_12.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -14,25 +14,25 @@\n ['tbbkernel_2eh_5', ['tbbKernel.h', ['../a00872.html', 1, '']]],\n ['tessellation_6', ['tessellation', ['../a00961.html', 1, 'Tessellation'],\n ['../a00961.html#ab03191ef31cf0d8b0bcc44f226804e87', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Tessellation::Tessellation(Tessellation const &)=delete'],\n ['../a00961.html#a7a3e89992f3cc492804ec9bc184a1674', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Tessellation::Tessellation()=delete'],\n ['../a00961.html#a65ee652b3607c97bb2b04a64c55d7f99', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Tessellation::Tessellation(Parameterization const &p, int numRates, int const rates[], Options const &options=Options())'],\n ['../a00961.html#a7f0af117d53701f7ca6e3eb2368b89bb', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Tessellation::Tessellation(Parameterization const &p, int uniformRate, Options const &options=Options())']\n ]],\n- ['tessellation_2eh_7', ['tessellation.h', ['../a00677.html', 1, '']]],\n+ ['tessellation_2eh_7', ['tessellation.h', ['../a00674.html', 1, '']]],\n ['topologycallback_8', ['TopologyCallback', ['../a01125.html#a896a964625491e084b3d776acd10f053', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyRefinerFactoryBase']]],\n ['topologydescriptor_9', ['topologydescriptor', ['../a01097.html', 1, 'TopologyDescriptor'],\n ['../a01097.html#a8209f1b69b0162ee2e7065d91088113d', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyDescriptor::TopologyDescriptor()']\n ]],\n- ['topologydescriptor_2eh_10', ['topologyDescriptor.h', ['../a00710.html', 1, '']]],\n+ ['topologydescriptor_2eh_10', ['topologyDescriptor.h', ['../a00713.html', 1, '']]],\n ['topologyerror_11', ['TopologyError', ['../a01109.html#a5458be6ce3f2e63c8d8555f4ab3b2b62', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyRefinerFactory']]],\n ['topologylevel_12', ['topologylevel', ['../a01105.html', 1, 'TopologyLevel'],\n ['../a01105.html#a03a8183081b34983ade155e3636ba835', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyLevel::TopologyLevel()']\n ]],\n- ['topologylevel_2eh_13', ['topologyLevel.h', ['../a00713.html', 1, '']]],\n+ ['topologylevel_2eh_13', ['topologyLevel.h', ['../a00710.html', 1, '']]],\n ['topologyrefiner_14', ['topologyrefiner', ['../a01113.html', 1, 'TopologyRefiner'],\n ['../a01105.html#a094d2e51437ecd5ecc6a0cf2c4ce1e78', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyLevel::TopologyRefiner'],\n ['../a01113.html#a91353962838bff64448014136e0e11ff', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyRefiner::TopologyRefiner(Sdc::SchemeType type, Sdc::Options options=Sdc::Options())'],\n ['../a01113.html#a13c709a24feeed80409924510e3efc5e', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyRefiner::TopologyRefiner(TopologyRefiner const &source)']\n ]],\n ['topologyrefiner_2eh_15', ['topologyRefiner.h', ['../a00707.html', 1, '']]],\n ['topologyrefinerfactory_16', ['topologyrefinerfactory', ['../a01113.html#a7efec9ae15b61001dcf6a0de284914b7', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyRefiner::TopologyRefinerFactory'],\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/all_14.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/all_14.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -9,15 +9,15 @@\n ['vertexbufferbinding_5', ['vertexbufferbinding', ['../a01201.html#a2d85a5ed6ddcef5023c9ef2e6fdd38a5', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::D3D11PatchTable::VertexBufferBinding'],\n ['../a01229.html#a02af2ea2e9328a776b5b0bb3edf88864', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLPatchTable::VertexBufferBinding'],\n ['../a01261.html#a9cf40ecf1b9b5c29507fe92a03f37a3c', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::MeshInterface::VertexBufferBinding'],\n ['../a01273.html#a9cf40ecf1b9b5c29507fe92a03f37a3c', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::Mesh::VertexBufferBinding'],\n ['../a01297.html#aa00654dc321a5c8dc370a900b0f404da', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::MTLPatchTable::VertexBufferBinding']\n ]],\n ['vertexdescriptor_6', ['VertexDescriptor', ['../a00969.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr']]],\n- ['vertexdescriptor_2eh_7', ['vertexDescriptor.h', ['../a00674.html', 1, '']]],\n+ ['vertexdescriptor_2eh_7', ['vertexDescriptor.h', ['../a00677.html', 1, '']]],\n ['vertexvalencetable_8', ['VertexValenceTable', ['../a00993.html#a2fbf111cac9d122eeaec5c0cb73fa77d', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTable']]],\n ['vertexweight_9', ['vertexweight', ['../a01337.html#aec5c2abfdfbde4dd934c061625994791', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Scheme::LocalMask::VertexWeight(int index) const'],\n ['../a01337.html#a92e98987f9a4220b9edd041401c9ed76', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Scheme::LocalMask::VertexWeight(int index)']\n ]],\n ['vertindex_10', ['vertIndex', ['../a00997.html#a46d1a8129375c3ee40a33a81d44b685a', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTable::PatchHandle']]],\n ['vertindicesperface_11', ['vertIndicesPerFace', ['../a01097.html#a3f2274c4d3dd54c4e24144e504972b34', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyDescriptor']]],\n ['vtx_5fboundary_5fedge_5fand_5fcorner_12', ['VTX_BOUNDARY_EDGE_AND_CORNER', ['../a01329.html#acbf78f1a6abfc8db080ef7fb3c3f417eac6e5f52f358d3b6d62cc2b708a5a8757', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Options']]],\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/all_2.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/all_2.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -4,15 +4,15 @@\n ]],\n ['basetable_1', ['basetable', ['../a01057.html#a54f0bb223290a17a59f51f4cbcfbc2e2', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::StencilTable::BaseTable'],\n ['../a01073.html#a13d2ee8ca9cdc9073905193ea1cefd95', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::LimitStencilTable::BaseTable']\n ]],\n ['begin_2', ['begin', ['../a01345.html#a29305669b60ca1680752e2fc3592ba99', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Vtr::ConstArray::begin()'],\n ['../a01349.html#ad69bd11391be1a1dba5c8202259664f8', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Vtr::Array::begin()']\n ]],\n- ['bilinearscheme_2eh_3', ['bilinearScheme.h', ['../a00785.html', 1, '']]],\n+ ['bilinearscheme_2eh_3', ['bilinearScheme.h', ['../a00779.html', 1, '']]],\n ['bindclbuffer_4', ['BindCLBuffer', ['../a01149.html#ad9c25d5b96f9d5e971f677d32b406ec6', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CLVertexBuffer']]],\n ['bindcpubuffer_5', ['bindcpubuffer', ['../a01153.html#adf7a9df5d3fc4d803bf5f1f374d90274', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CpuD3D11VertexBuffer::BindCpuBuffer()'],\n ['../a01161.html#adf7a9df5d3fc4d803bf5f1f374d90274', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CpuGLVertexBuffer::BindCpuBuffer()'],\n ['../a01169.html#adf7a9df5d3fc4d803bf5f1f374d90274', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CpuVertexBuffer::BindCpuBuffer()'],\n ['../a01301.html#adf7a9df5d3fc4d803bf5f1f374d90274', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CPUMTLVertexBuffer::BindCpuBuffer()']\n ]],\n ['bindcudabuffer_6', ['BindCudaBuffer', ['../a01185.html#a59eb144c23606529ba730ae15598af09', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CudaVertexBuffer']]],\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/all_3.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/all_3.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,9 +1,9 @@\n var searchData = [\n- ['catmarkscheme_2eh_0', ['catmarkScheme.h', ['../a00782.html', 1, '']]],\n+ ['catmarkscheme_2eh_0', ['catmarkScheme.h', ['../a00785.html', 1, '']]],\n ['child_1', ['Child', ['../a00985.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchMap::QuadNode']]],\n ['clear_2', ['clear', ['../a01017.html#ac8bb3912a3ce86b15842e79d0b421204', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTableFactory::PatchFaceTag::clear()'],\n ['../a01069.html#aa71d36872f416feaa853788a7a7a7ef8', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::LimitStencilTableReal::Clear()'],\n ['../a01053.html#aa71d36872f416feaa853788a7a7a7ef8', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::StencilTableReal::Clear()'],\n ['../a00989.html#aa71d36872f416feaa853788a7a7a7ef8', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchParam::Clear()'],\n ['../a00933.html#aa71d36872f416feaa853788a7a7a7ef8', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Surface::Clear()']\n ]],\n@@ -13,32 +13,32 @@\n ['clevaluator_6', ['clevaluator', ['../a01141.html', 1, 'CLEvaluator'],\n ['../a01141.html#adbb0aafb7db3284f164499e8007c4cac', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CLEvaluator::CLEvaluator()']\n ]],\n ['clevaluator_2eh_7', ['clEvaluator.h', ['../a00803.html', 1, '']]],\n ['clpatchtable_8', ['clpatchtable', ['../a01145.html', 1, 'CLPatchTable'],\n ['../a01145.html#ae69549a9493f9a51edfa7d11cec1d72f', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CLPatchTable::CLPatchTable()']\n ]],\n- ['clpatchtable_2eh_9', ['clPatchTable.h', ['../a00800.html', 1, '']]],\n+ ['clpatchtable_2eh_9', ['clPatchTable.h', ['../a00791.html', 1, '']]],\n ['clstenciltable_10', ['clstenciltable', ['../a01137.html#af2994e79cf93c872e39659321750351a', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CLStencilTable::CLStencilTable()'],\n ['../a01137.html', 1, 'CLStencilTable'],\n ['../a01137.html#a33ca6bb1dba9f8e390a58395d164431e', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CLStencilTable::CLStencilTable()']\n ]],\n ['clvertexbuffer_11', ['clvertexbuffer', ['../a01149.html#a48e2b665b557d5f3f838bc552152160b', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CLVertexBuffer::CLVertexBuffer()'],\n ['../a01149.html', 1, 'CLVertexBuffer']\n ]],\n- ['clvertexbuffer_2eh_12', ['clVertexBuffer.h', ['../a00788.html', 1, '']]],\n+ ['clvertexbuffer_2eh_12', ['clVertexBuffer.h', ['../a00797.html', 1, '']]],\n ['combinevertexvertexmasks_13', ['CombineVertexVertexMasks', ['../a01337.html#a5ed800e9d702f57ae978fe60ba2a37dc', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Scheme::LocalMask']]],\n ['commandqueue_14', ['commandQueue', ['../a01277.html#a66809eb79c7e79a491fd8c889465166b', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::MTLContext']]],\n ['compile_15', ['compile', ['../a01141.html#ade1086349c1a452f60bcf281383ceec2', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CLEvaluator::Compile()'],\n ['../a01193.html#a872e69a9fbf6f7b9f55112ecaf0c1b20', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::D3D11ComputeEvaluator::Compile()'],\n ['../a01213.html#ade1086349c1a452f60bcf281383ceec2', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLComputeEvaluator::Compile()'],\n ['../a01285.html#af6645aabc094e7549c6899915ce34f67', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::MTLComputeEvaluator::Compile()'],\n ['../a01245.html#ade1086349c1a452f60bcf281383ceec2', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLXFBEvaluator::Compile()']\n ]],\n- ['componentinterfaces_2eh_16', ['componentInterfaces.h', ['../a00764.html', 1, '']]],\n+ ['componentinterfaces_2eh_16', ['componentInterfaces.h', ['../a00767.html', 1, '']]],\n ['computeedgevertexmask_17', ['computeedgevertexmask', ['../a01333.html#a5b5a5377a01eb4ba446e174eff9e45ac', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Scheme::ComputeEdgeVertexMask(EDGE const &edgeNeighborhood, MASK &edgeVertexMask, Crease::Rule parentRule=Crease::RULE_UNKNOWN, Crease::Rule childRule=Crease::RULE_UNKNOWN) const'],\n ['../a01333.html#af9dea56e1ab2f200dd03b4e35cf754c3', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Scheme::ComputeEdgeVertexMask(EDGE const &edge, MASK &mask, Crease::Rule, Crease::Rule) const']\n ]],\n ['computefacevertexmask_18', ['ComputeFaceVertexMask', ['../a01333.html#ae8ed24b1691e65436d44e703189caf42', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Scheme']]],\n ['computefractionalweightatvertex_19', ['ComputeFractionalWeightAtVertex', ['../a01325.html#ab13f654f25ef7628396fd902291b8f96', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Crease']]],\n ['computelocalpointvalues_20', ['ComputeLocalPointValues', ['../a00993.html#a7dcb88c32ded6c233f129d7b6fb7a159', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTable']]],\n ['computelocalpointvaluesfacevarying_21', ['ComputeLocalPointValuesFaceVarying', ['../a00993.html#a059c9506f9ef8ebf24a68fc298be58be', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTable']]],\n@@ -77,37 +77,37 @@\n ['converttocompatiblestenciltable_3c_20far_3a_3astenciltable_2c_20far_3a_3astenciltable_2c_20id3d11devicecontext_20_3e_41', ['convertToCompatibleStencilTable< Far::StencilTable, Far::StencilTable, ID3D11DeviceContext >', ['../a00912.html#ab5753a2b0a0995c8e2259d2c4765f7df', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n ['converttocompatiblestenciltable_3c_20far_3a_3astenciltable_2c_20far_3a_3astenciltable_2c_20void_20_3e_42', ['convertToCompatibleStencilTable< Far::StencilTable, Far::StencilTable, void >', ['../a00912.html#a33f9830228f847fae1c30c9dffe02b5a', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n ['cornervertexindices_43', ['cornerVertexIndices', ['../a01097.html#a3bf794743edda29fbee0653b65b75ba4', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyDescriptor']]],\n ['cornerweights_44', ['cornerWeights', ['../a01097.html#a6d938f6b0a9ff0fa377ef675aa2c7fda', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyDescriptor']]],\n ['cpud3d11vertexbuffer_45', ['cpud3d11vertexbuffer', ['../a01153.html', 1, 'CpuD3D11VertexBuffer'],\n ['../a01153.html#a632143bc1ec4fbbca2148b0e9e87bc08', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CpuD3D11VertexBuffer::CpuD3D11VertexBuffer()']\n ]],\n- ['cpud3d11vertexbuffer_2eh_46', ['cpuD3D11VertexBuffer.h', ['../a00842.html', 1, '']]],\n+ ['cpud3d11vertexbuffer_2eh_46', ['cpuD3D11VertexBuffer.h', ['../a00845.html', 1, '']]],\n ['cpuevaluator_47', ['CpuEvaluator', ['../a01157.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n ['cpuevaluator_2eh_48', ['cpuEvaluator.h', ['../a00896.html', 1, '']]],\n ['cpuglvertexbuffer_49', ['cpuglvertexbuffer', ['../a01161.html', 1, 'CpuGLVertexBuffer'],\n ['../a01161.html#a32dd2317d622c1b079e3219f97c86955', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CpuGLVertexBuffer::CpuGLVertexBuffer()']\n ]],\n- ['cpuglvertexbuffer_2eh_50', ['cpuGLVertexBuffer.h', ['../a00866.html', 1, '']]],\n+ ['cpuglvertexbuffer_2eh_50', ['cpuGLVertexBuffer.h', ['../a00869.html', 1, '']]],\n ['cpumtlvertexbuffer_51', ['cpumtlvertexbuffer', ['../a01301.html', 1, 'CPUMTLVertexBuffer'],\n ['../a01301.html#a1457f342bc3007386104aa3d29277a67', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CPUMTLVertexBuffer::CPUMTLVertexBuffer()']\n ]],\n ['cpupatchtable_52', ['cpupatchtable', ['../a01165.html', 1, 'CpuPatchTable'],\n ['../a01165.html#a3c19d1748852f36ba69a6557e5069e08', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CpuPatchTable::CpuPatchTable()']\n ]],\n ['cpupatchtable_2eh_53', ['cpuPatchTable.h', ['../a00893.html', 1, '']]],\n ['cpuvertexbuffer_54', ['cpuvertexbuffer', ['../a01169.html#afa9168f4f1f046aea4ff94933ac48972', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CpuVertexBuffer::CpuVertexBuffer()'],\n ['../a01169.html', 1, 'CpuVertexBuffer']\n ]],\n- ['cpuvertexbuffer_2eh_55', ['cpuVertexBuffer.h', ['../a00890.html', 1, '']]],\n+ ['cpuvertexbuffer_2eh_55', ['cpuVertexBuffer.h', ['../a00887.html', 1, '']]],\n ['crease_56', ['crease', ['../a01325.html#a9659c3f2c73b80d9dc22763a6054079b', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Crease::Crease()'],\n ['../a01325.html#a75d5d7e54170ccf6481932916e0fa9c1', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Crease::Crease(Options const &options)'],\n ['../a01325.html', 1, 'Crease']\n ]],\n- ['crease_2eh_57', ['crease.h', ['../a00779.html', 1, '']]],\n+ ['crease_2eh_57', ['crease.h', ['../a00782.html', 1, '']]],\n ['crease_5fchaikin_58', ['CREASE_CHAIKIN', ['../a01329.html#a16ec522dc0398bf1435a912cd669ffb0a1e31a583663dd65a7b2feffeb24268b5', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Options']]],\n ['crease_5funiform_59', ['CREASE_UNIFORM', ['../a01329.html#a16ec522dc0398bf1435a912cd669ffb0a10f2956db48d2975424be2e52ebd544d', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Options']]],\n ['creasevertexindexpairs_60', ['creaseVertexIndexPairs', ['../a01097.html#a411a2a927b0270c9e4753dc219763ba5', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyDescriptor']]],\n ['creaseweights_61', ['creaseWeights', ['../a01097.html#a8cd977015d3ffffc1146c5a4e17d65e0', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyDescriptor']]],\n ['creasingmethod_62', ['CreasingMethod', ['../a01329.html#a16ec522dc0398bf1435a912cd669ffb0', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Options']]],\n ['create_63', ['create', ['../a01241.html#ae38a4728f9debae7733ab48cfadd8312', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLStencilTableTBO::Create(Far::LimitStencilTable const *limitStencilTable, void *deviceContext=NULL)'],\n ['../a01241.html#a24a8210b637a5b0fca2b258de3b8b8a6', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLStencilTableTBO::Create(Far::StencilTable const *stencilTable, void *deviceContext=NULL)'],\n@@ -178,15 +178,15 @@\n ['createvaryingsurface_66', ['CreateVaryingSurface', ['../a00941.html#a81638f2ff6818fd96aa7cd1ad3ed0703', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::SurfaceFactory']]],\n ['createvertexsurface_67', ['CreateVertexSurface', ['../a00941.html#a676cf019574c99fa77341ac09889192d', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::SurfaceFactory']]],\n ['cudaevaluator_68', ['CudaEvaluator', ['../a01177.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n ['cudaevaluator_2eh_69', ['cudaEvaluator.h', ['../a00794.html', 1, '']]],\n ['cudapatchtable_70', ['cudapatchtable', ['../a01181.html', 1, 'CudaPatchTable'],\n ['../a01181.html#aefa9c1a9175327a40e7cf46ed32ced2f', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CudaPatchTable::CudaPatchTable()']\n ]],\n- ['cudapatchtable_2eh_71', ['cudaPatchTable.h', ['../a00791.html', 1, '']]],\n+ ['cudapatchtable_2eh_71', ['cudaPatchTable.h', ['../a00788.html', 1, '']]],\n ['cudastenciltable_72', ['cudastenciltable', ['../a01173.html#a45150c630c07bbeabd4b91145cecf087', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CudaStencilTable::CudaStencilTable()'],\n ['../a01173.html', 1, 'CudaStencilTable'],\n ['../a01173.html#af872fc469b3696a745d30d22c2b89c4c', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CudaStencilTable::CudaStencilTable()']\n ]],\n ['cudavertexbuffer_73', ['cudavertexbuffer', ['../a01185.html#af6cb32d896f7815cac1969c857845ba8', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CudaVertexBuffer::CudaVertexBuffer()'],\n ['../a01185.html', 1, 'CudaVertexBuffer']\n ]],\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/all_4.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/all_4.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,29 +1,29 @@\n var searchData = [\n ['d3d11computeevaluator_0', ['d3d11computeevaluator', ['../a01193.html', 1, 'D3D11ComputeEvaluator'],\n ['../a01193.html#aa81511d3938d70d67a62217951cb8eb7', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::D3D11ComputeEvaluator::D3D11ComputeEvaluator()']\n ]],\n- ['d3d11computeevaluator_2eh_1', ['d3d11ComputeEvaluator.h', ['../a00845.html', 1, '']]],\n+ ['d3d11computeevaluator_2eh_1', ['d3d11ComputeEvaluator.h', ['../a00842.html', 1, '']]],\n ['d3d11legacygregorypatchtable_2', ['d3d11legacygregorypatchtable', ['../a01197.html', 1, 'D3D11LegacyGregoryPatchTable'],\n ['../a01197.html#af138b4535e4db5f013225c5924e0b243', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::D3D11LegacyGregoryPatchTable::D3D11LegacyGregoryPatchTable()']\n ]],\n ['d3d11legacygregorypatchtable_2eh_3', ['d3d11LegacyGregoryPatchTable.h', ['../a00839.html', 1, '']]],\n- ['d3d11mesh_2eh_4', ['d3d11Mesh.h', ['../a00830.html', 1, '']]],\n+ ['d3d11mesh_2eh_4', ['d3d11Mesh.h', ['../a00827.html', 1, '']]],\n ['d3d11meshinterface_5', ['D3D11MeshInterface', ['../a00912.html#ae5c8e80d05d6eaee105d8eecfa9ab609', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n ['d3d11patchtable_6', ['d3d11patchtable', ['../a01201.html#ac81ed5f09e3d3a2aae5a01802b343a6d', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::D3D11PatchTable::D3D11PatchTable()'],\n ['../a01201.html', 1, 'D3D11PatchTable']\n ]],\n- ['d3d11patchtable_2eh_7', ['d3d11PatchTable.h', ['../a00833.html', 1, '']]],\n+ ['d3d11patchtable_2eh_7', ['d3d11PatchTable.h', ['../a00836.html', 1, '']]],\n ['d3d11stenciltable_8', ['d3d11stenciltable', ['../a01189.html', 1, 'D3D11StencilTable'],\n ['../a01189.html#a7e3a2f5c281c55308400138222797dbc', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::D3D11StencilTable::D3D11StencilTable()']\n ]],\n ['d3d11vertexbuffer_9', ['d3d11vertexbuffer', ['../a01205.html', 1, 'D3D11VertexBuffer'],\n ['../a01205.html#aacfe93ef7f7ede21dcf7088b62467742', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::D3D11VertexBuffer::D3D11VertexBuffer()']\n ]],\n- ['d3d11vertexbuffer_2eh_10', ['d3d11VertexBuffer.h', ['../a00836.html', 1, '']]],\n+ ['d3d11vertexbuffer_2eh_10', ['d3d11VertexBuffer.h', ['../a00833.html', 1, '']]],\n ['decrementsharpness_11', ['decrementSharpness', ['../a01325.html#a453a232c0edcafd9d484197d46ed39ec', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Crease']]],\n ['desc_12', ['desc', ['../a01317.html#ac84ff682fda703f1f552a05977050f20', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::PatchArray']]],\n ['determinevertexvertexrule_13', ['determinevertexvertexrule', ['../a01325.html#a41ebb75d28c5973328e0e3883495aeba', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Crease::DetermineVertexVertexRule(float vertexSharpness, int incidentEdgeCount, float const *incidentEdgeSharpness) const'],\n ['../a01325.html#a500fadaa8cec78ab9690ad7331dba3d6', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Crease::DetermineVertexVertexRule(float vertexSharpness, int sharpEdgeCount) const']\n ]],\n ['device_14', ['device', ['../a01277.html#a7d70f5acf4efd89092645b4c44e480cf', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::MTLContext']]],\n ['devicecontext_15', ['DeviceContext', ['../a01273.html#a3e2f358c45731eceb819ae70e7c8ca6e', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::Mesh']]],\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/all_5.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/all_5.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -16,15 +16,15 @@\n ['../a01013.html#aebc767d646011ab7d5bc7d6d49adf535', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTableFactory::Options::EndCapType']\n ]],\n ['entry_10', ['entry', ['../a01269.html#ada6adfb697358377d8da9232690daae2', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::EvaluatorCacheT::Entry::Entry(BufferDescriptor const &srcDescArg, BufferDescriptor const &dstDescArg, BufferDescriptor const &duDescArg, BufferDescriptor const &dvDescArg, EVALUATOR *evalArg)'],\n ['../a01269.html#a0d596cc177157da972daa1a9911027a8', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::EvaluatorCacheT::Entry::Entry(BufferDescriptor const &srcDescArg, BufferDescriptor const &dstDescArg, BufferDescriptor const &duDescArg, BufferDescriptor const &dvDescArg, BufferDescriptor const &duuDescArg, BufferDescriptor const &duvDescArg, BufferDescriptor const &dvvDescArg, EVALUATOR *evalArg)'],\n ['../a01269.html', 1, 'EvaluatorCacheT< EVALUATOR >::Entry']\n ]],\n ['error_11', ['Error', ['../a00908.html#a25d51c3a61fb3dacded6e48d01fd2fdb', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far']]],\n- ['error_2eh_12', ['error.h', ['../a00743.html', 1, '']]],\n+ ['error_2eh_12', ['error.h', ['../a00740.html', 1, '']]],\n ['errorcallbackfunc_13', ['ErrorCallbackFunc', ['../a00908.html#aa1630f297a91dfc683dfcfddeeebb2ac', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far']]],\n ['errortype_14', ['ErrorType', ['../a00908.html#ab0df38968e4f03a3f1f6d6df0f31f45a', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far']]],\n ['evalpatches_15', ['evalpatches', ['../a01245.html#a57b0367816baf9831808847cbfe833b0', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLXFBEvaluator::EvalPatches()'],\n ['../a01305.html#a9644130ae2673ec46111cf6b466b3e90', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::OmpEvaluator::EvalPatches()'],\n ['../a01245.html#a9a52edc932f03ffa9bbf67c093a1dd65', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLXFBEvaluator::EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLXFBEvaluator const *instance, void *deviceContext=NULL)'],\n ['../a01245.html#a96616cfe920c027568e2ae931b3ba506', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLXFBEvaluator::EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const'],\n ['../a01245.html#aa28dc7f2bd31f1cdac0013ad9de8f434', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLXFBEvaluator::EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const'],\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/all_6.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/all_6.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -31,12 +31,12 @@\n ['../a01081.html#a7cd8273eef086a749ce3d40063fb4a28', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::LimitStencilTableFactoryReal::Options::fvarChannel'],\n ['../a01101.html#a029d281df9f5dc8c00b52a35f8e0dfde', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyDescriptor::FVarChannel::FVarChannel()'],\n ['../a01101.html', 1, 'TopologyDescriptor::FVarChannel']\n ]],\n ['fvarchannelindices_25', ['fvarChannelIndices', ['../a01013.html#a4c1ba8119a16ea0682a870ee7a8282a5', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTableFactory::Options']]],\n ['fvarchannels_26', ['fvarChannels', ['../a01097.html#a222697ec045f92879ae194eb2d92b526', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyDescriptor']]],\n ['fvarid_27', ['FVarID', ['../a00957.html#af98288d7b5176d7295be622a10c6c64e', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::SurfaceFactoryMeshAdapter']]],\n- ['fvarlevel_2eh_28', ['fvarLevel.h', ['../a00758.html', 1, '']]],\n+ ['fvarlevel_2eh_28', ['fvarLevel.h', ['../a00761.html', 1, '']]],\n ['fvarlinearinterpolation_29', ['FVarLinearInterpolation', ['../a01329.html#a5b87eaca6ca0833462c9d4ad84df167b', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Options']]],\n ['fvarpatchprecisiondouble_30', ['fvarPatchPrecisionDouble', ['../a01013.html#a3f663e5c2b7e65976b6521c21ea59130', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTableFactory::Options']]],\n- ['fvarrefinement_2eh_31', ['fvarRefinement.h', ['../a00761.html', 1, '']]]\n+ ['fvarrefinement_2eh_31', ['fvarRefinement.h', ['../a00758.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/all_7.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/all_7.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -521,41 +521,41 @@\n ['../a01281.html#ab22907c9cfe58b82ddfcad8241304500', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::MTLStencilTable::GetWeightsBuffer()']\n ]],\n ['getweightssrv_266', ['GetWeightsSRV', ['../a01189.html#ac3de1233503ee41bac41618702b4302c', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::D3D11StencilTable']]],\n ['getweightstexture_267', ['GetWeightsTexture', ['../a01241.html#ad5f4a852f17762c50c5d3011b11155cb', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLStencilTableTBO']]],\n ['glcomputeevaluator_268', ['glcomputeevaluator', ['../a01213.html#a9fe54ab76e32fb2dc6f7cd631ce2e678', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLComputeEvaluator::GLComputeEvaluator()'],\n ['../a01213.html', 1, 'GLComputeEvaluator']\n ]],\n- ['glcomputeevaluator_2eh_269', ['glComputeEvaluator.h', ['../a00848.html', 1, '']]],\n+ ['glcomputeevaluator_2eh_269', ['glComputeEvaluator.h', ['../a00851.html', 1, '']]],\n ['gllegacygregorypatchtable_270', ['gllegacygregorypatchtable', ['../a01225.html#a5b78188b846b316c5c0cdb42f4ee9563', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLLegacyGregoryPatchTable::GLLegacyGregoryPatchTable()'],\n ['../a01225.html', 1, 'GLLegacyGregoryPatchTable']\n ]],\n- ['gllegacygregorypatchtable_2eh_271', ['glLegacyGregoryPatchTable.h', ['../a00869.html', 1, '']]],\n- ['glmesh_2eh_272', ['glMesh.h', ['../a00854.html', 1, '']]],\n+ ['gllegacygregorypatchtable_2eh_271', ['glLegacyGregoryPatchTable.h', ['../a00866.html', 1, '']]],\n+ ['glmesh_2eh_272', ['glMesh.h', ['../a00857.html', 1, '']]],\n ['glmeshinterface_273', ['GLMeshInterface', ['../a00912.html#a7f9cf2b729178bdbb847fc4afd91af9e', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n ['glpatchtable_274', ['glpatchtable', ['../a01229.html#a88c12681f62189c398c1d2dc32111264', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLPatchTable::GLPatchTable()'],\n ['../a01229.html', 1, 'GLPatchTable']\n ]],\n ['glpatchtable_2eh_275', ['glPatchTable.h', ['../a00863.html', 1, '']]],\n ['glslpatchshadersource_276', ['GLSLPatchShaderSource', ['../a01233.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n- ['glslpatchshadersource_2eh_277', ['glslPatchShaderSource.h', ['../a00860.html', 1, '']]],\n+ ['glslpatchshadersource_2eh_277', ['glslPatchShaderSource.h', ['../a00854.html', 1, '']]],\n ['glstenciltablessbo_278', ['glstenciltablessbo', ['../a01209.html', 1, 'GLStencilTableSSBO'],\n ['../a01209.html#aaacee6173a99bb3d7bbfb0a352ef9828', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLStencilTableSSBO::GLStencilTableSSBO(Far::StencilTable const *stencilTable)'],\n ['../a01209.html#a27a911fea9736fbe935c0edc4de9b998', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLStencilTableSSBO::GLStencilTableSSBO(Far::LimitStencilTable const *limitStencilTable)']\n ]],\n ['glstenciltabletbo_279', ['glstenciltabletbo', ['../a01241.html', 1, 'GLStencilTableTBO'],\n ['../a01241.html#abbba46ba67be00a0eac751e3e731db6e', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLStencilTableTBO::GLStencilTableTBO(Far::StencilTable const *stencilTable)'],\n ['../a01241.html#ac74a769daf1fe45575a16b738bb761cd', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLStencilTableTBO::GLStencilTableTBO(Far::LimitStencilTable const *limitStencilTable)']\n ]],\n ['glvertexbuffer_280', ['glvertexbuffer', ['../a01237.html', 1, 'GLVertexBuffer'],\n ['../a01237.html#aa6f38a53fba4a64d600b9c4695477049', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLVertexBuffer::GLVertexBuffer()']\n ]],\n- ['glvertexbuffer_2eh_281', ['glVertexBuffer.h', ['../a00857.html', 1, '']]],\n+ ['glvertexbuffer_2eh_281', ['glVertexBuffer.h', ['../a00860.html', 1, '']]],\n ['glxfbevaluator_282', ['glxfbevaluator', ['../a01245.html#a1932f725b28e271ab11ca768ba3bb01e', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLXFBEvaluator::GLXFBEvaluator()'],\n ['../a01245.html', 1, 'GLXFBEvaluator']\n ]],\n- ['glxfbevaluator_2eh_283', ['glXFBEvaluator.h', ['../a00851.html', 1, '']]],\n+ ['glxfbevaluator_2eh_283', ['glXFBEvaluator.h', ['../a00848.html', 1, '']]],\n ['gregory_284', ['GREGORY', ['../a00973.html#a1d1cfd8ffb84e947f82999c682b666a7ae765e809376e5557d348d3e991a7273e', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchDescriptor']]],\n ['gregory_5fbasis_285', ['GREGORY_BASIS', ['../a00973.html#a1d1cfd8ffb84e947f82999c682b666a7ad7d1a88a40ae8938e07af7a7745054b0', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchDescriptor']]],\n ['gregory_5fboundary_286', ['GREGORY_BOUNDARY', ['../a00973.html#a1d1cfd8ffb84e947f82999c682b666a7ac4ae10df9c13e44880ca7be341e44f2a', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchDescriptor']]],\n ['gregory_5ftriangle_287', ['GREGORY_TRIANGLE', ['../a00973.html#a1d1cfd8ffb84e947f82999c682b666a7a8bf2cfb939c78155cae7549621ea73f6', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchDescriptor']]]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/all_8.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/all_8.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -4,10 +4,10 @@\n ]],\n ['hasedgesharpness_1', ['HasEdgeSharpness', ['../a00969.html#a2c6d182581c88931784f62fe2b8ae666', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::VertexDescriptor']]],\n ['hasholes_2', ['HasHoles', ['../a01113.html#a1b68f0501aabb94ba410e006181d2cc5', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyRefiner']]],\n ['hasincidentfacesizes_3', ['HasIncidentFaceSizes', ['../a00969.html#ad56c50bc5582768806d7890c55b63141', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::VertexDescriptor']]],\n ['hassubfaces_4', ['HasSubFaces', ['../a00921.html#adc4cd156a8fdb843b0e233a922bb8a17', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Parameterization']]],\n ['hasvertexsharpness_5', ['HasVertexSharpness', ['../a00969.html#a4f46be1cfd41b34d8808363c83e9ff56', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::VertexDescriptor']]],\n ['hlslpatchshadersource_6', ['HLSLPatchShaderSource', ['../a01257.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n- ['hlslpatchshadersource_2eh_7', ['hlslPatchShaderSource.h', ['../a00827.html', 1, '']]],\n+ ['hlslpatchshadersource_2eh_7', ['hlslPatchShaderSource.h', ['../a00830.html', 1, '']]],\n ['holeindices_8', ['holeIndices', ['../a01097.html#a4fcd8e9a636d89045d364607f2b035a1', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyDescriptor']]]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/all_a.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/all_a.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -2,15 +2,15 @@\n ['length_0', ['length', ['../a01133.html#a9f59b34b1f25fe00023291b678246bcc', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::BufferDescriptor']]],\n ['level_2eh_1', ['level.h', ['../a00755.html', 1, '']]],\n ['limit_2', ['limit', ['../a01021.html#a2cf4c50a1117c44ba4d11db92b067401', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PrimvarRefinerReal::Limit(T const &src, U &dstPos, U1 &dstTan1, U2 &dstTan2) const'],\n ['../a01021.html#a0357839a7fabaa02f1d6d6a3c75e1ec2', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PrimvarRefinerReal::Limit(T const &src, U &dstPos) const']\n ]],\n ['limitfacevarying_3', ['LimitFaceVarying', ['../a01021.html#afdee0e9e9c6edd34c96892efff808a87', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PrimvarRefinerReal']]],\n ['limits_4', ['Limits', ['../a00917.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr']]],\n- ['limits_2eh_5', ['limits.h', ['../a00698.html', 1, '']]],\n+ ['limits_2eh_5', ['limits.h', ['../a00695.html', 1, '']]],\n ['limitstencil_6', ['limitstencil', ['../a01065.html', 1, 'LimitStencil'],\n ['../a01065.html#a51e1d601373aa0cd9ce70b630ce22adf', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::LimitStencil::LimitStencil(int *size, Index *indices, float *weights, float *duWeights=0, float *dvWeights=0, float *duuWeights=0, float *duvWeights=0, float *dvvWeights=0)'],\n ['../a01065.html#a071ea9b75540c3d54d9bf934fc944e5a', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::LimitStencil::LimitStencil(BaseStencil const &other)']\n ]],\n ['limitstencilreal_7', ['limitstencilreal', ['../a01061.html', 1, 'LimitStencilReal< REAL >'],\n ['../a01061.html#ad6ade692f92a3bf50c813a82bd63d4c7', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::LimitStencilReal::LimitStencilReal()']\n ]],\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/all_b.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/all_b.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -2,15 +2,15 @@\n ['maxfacesize_0', ['MaxFaceSize', ['../a00917.html#a058dee146ff7dafb8d2b8cb0d09f5da8', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Limits']]],\n ['maxisolationlevel_1', ['maxIsolationLevel', ['../a01013.html#a18b47b281350d10784fd4917be9019f1', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTableFactory::Options']]],\n ['maxlevel_2', ['maxLevel', ['../a01077.html#a110477b0e61b09d8be1a472df34f6386', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::StencilTableFactoryReal::Options']]],\n ['maxvalence_3', ['MaxValence', ['../a00917.html#aca372fcd4c25aa589418934c5056b16c', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Limits']]],\n ['mesh_4', ['mesh', ['../a01273.html', 1, 'Mesh< VERTEX_BUFFER, STENCIL_TABLE, EVALUATOR, PATCH_TABLE, DEVICE_CONTEXT >'],\n ['../a01273.html#a69e70d7e23e9bd8bd8eb7b5f0589009f', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::Mesh::Mesh()']\n ]],\n- ['mesh_2eh_5', ['mesh.h', ['../a00887.html', 1, '']]],\n+ ['mesh_2eh_5', ['mesh.h', ['../a00890.html', 1, '']]],\n ['meshadaptive_6', ['MeshAdaptive', ['../a00912.html#a1af6b50e9f8ae13d3d2f9d5b03b35492adef344bcbdd50a1a93136eb53183c718', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n ['meshbits_7', ['MeshBits', ['../a00912.html#a1af6b50e9f8ae13d3d2f9d5b03b35492', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n ['meshbitset_8', ['MeshBitset', ['../a00912.html#a85ba9df501aea9af1ec9da1558c255bc', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n ['meshendcapbilinearbasis_9', ['MeshEndCapBilinearBasis', ['../a00912.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a4124233e4f787f999c7975afceab34f3', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n ['meshendcapbsplinebasis_10', ['MeshEndCapBSplineBasis', ['../a00912.html#a1af6b50e9f8ae13d3d2f9d5b03b35492aa2f41b6ba0393698bb3af283283737f7', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n ['meshendcapgregorybasis_11', ['MeshEndCapGregoryBasis', ['../a00912.html#a1af6b50e9f8ae13d3d2f9d5b03b35492aa2878e1a215530f5f6fb89f1e06f91ee', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n ['meshendcaplegacygregory_12', ['MeshEndCapLegacyGregory', ['../a00912.html#a1af6b50e9f8ae13d3d2f9d5b03b35492aad7b3fb2be609abdbfafaf5b1c834158', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n@@ -22,29 +22,29 @@\n ['meshinterleavevarying_16', ['MeshInterleaveVarying', ['../a00912.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a9313c644b9b2a998bcb55cfcc4582b1a', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n ['meshuseinfsharppatch_17', ['MeshUseInfSharpPatch', ['../a00912.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a8fab1b3018f94b5b2432c7435e795925', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n ['meshusesinglecreasepatch_18', ['MeshUseSingleCreasePatch', ['../a00912.html#a1af6b50e9f8ae13d3d2f9d5b03b35492a9058d69e1089fc77f1974a76c34e2071', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n ['meshusesmoothcornerpatch_19', ['MeshUseSmoothCornerPatch', ['../a00912.html#a1af6b50e9f8ae13d3d2f9d5b03b35492ab32b8ef595539e14041e2fb0e619e3f9', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n ['mode_20', ['mode', ['../a01037.html#a46c8a310cf4c094f8c80e1cb8dc1f911', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::StencilTableFactoryReal::Mode'],\n ['../a01041.html#a46c8a310cf4c094f8c80e1cb8dc1f911', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::LimitStencilTableFactoryReal::Mode']\n ]],\n- ['mtlcommon_2eh_21', ['mtlCommon.h', ['../a00809.html', 1, '']]],\n+ ['mtlcommon_2eh_21', ['mtlCommon.h', ['../a00806.html', 1, '']]],\n ['mtlcomputeevaluator_22', ['mtlcomputeevaluator', ['../a01285.html#a10015b2c4f90f3a11e60cc88dcbb9d6b', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::MTLComputeEvaluator::MTLComputeEvaluator()'],\n ['../a01285.html', 1, 'MTLComputeEvaluator']\n ]],\n ['mtlcomputeevaluator_2eh_23', ['mtlComputeEvaluator.h', ['../a00821.html', 1, '']]],\n ['mtlcontext_24', ['MTLContext', ['../a01277.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n ['mtllegacygregorypatchtable_25', ['MTLLegacyGregoryPatchTable', ['../a01289.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n- ['mtllegacygregorypatchtable_2eh_26', ['mtlLegacyGregoryPatchTable.h', ['../a00815.html', 1, '']]],\n- ['mtlmesh_2eh_27', ['mtlMesh.h', ['../a00806.html', 1, '']]],\n+ ['mtllegacygregorypatchtable_2eh_26', ['mtlLegacyGregoryPatchTable.h', ['../a00818.html', 1, '']]],\n+ ['mtlmesh_2eh_27', ['mtlMesh.h', ['../a00812.html', 1, '']]],\n ['mtlmeshinterface_28', ['MTLMeshInterface', ['../a00912.html#aa41e5b43fe46eeb0f97ff6ebdb1935aa', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n ['mtlpatchshadersource_29', ['MTLPatchShaderSource', ['../a01293.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n- ['mtlpatchshadersource_2eh_30', ['mtlPatchShaderSource.h', ['../a00812.html', 1, '']]],\n+ ['mtlpatchshadersource_2eh_30', ['mtlPatchShaderSource.h', ['../a00809.html', 1, '']]],\n ['mtlpatchtable_31', ['mtlpatchtable', ['../a01297.html', 1, 'MTLPatchTable'],\n ['../a01297.html#a3f197c2ae3862390d72e7443a2525187', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::MTLPatchTable::MTLPatchTable()']\n ]],\n- ['mtlpatchtable_2eh_32', ['mtlPatchTable.h', ['../a00818.html', 1, '']]],\n+ ['mtlpatchtable_2eh_32', ['mtlPatchTable.h', ['../a00815.html', 1, '']]],\n ['mtlstenciltable_33', ['mtlstenciltable', ['../a01281.html', 1, 'MTLStencilTable'],\n ['../a01281.html#a015dc72c3360b4841ee2b3feb06c106f', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::MTLStencilTable::MTLStencilTable(Far::LimitStencilTable const *stencilTable, MTLContext *context)'],\n ['../a01281.html#a45e329ffe9fe4e32a1b21bfc89a6763f', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::MTLStencilTable::MTLStencilTable(Far::StencilTable const *stencilTable, MTLContext *context)']\n ]],\n ['mtlvertexbuffer_2eh_34', ['mtlVertexBuffer.h', ['../a00824.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/all_d.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/all_d.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,17 +1,17 @@\n var searchData = [\n ['offset_0', ['offset', ['../a01133.html#aed7ea92f45bd273dde380a45ddced592', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::BufferDescriptor']]],\n ['ompevalstencils_1', ['ompevalstencils', ['../a00912.html#a44a05502feb5015035bc81b93cffb99c', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::OmpEvalStencils(float const *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, float *dstDu, BufferDescriptor const &dstDuDesc, float *dstDv, BufferDescriptor const &dstDvDesc, float *dstDuu, BufferDescriptor const &dstDuuDesc, float *dstDuv, BufferDescriptor const &dstDuvDesc, float *dstDvv, BufferDescriptor const &dstDvvDesc, int const *sizes, int const *offsets, int const *indices, float const *weights, float const *duWeights, float const *dvWeights, float const *duuWeights, float const *duvWeights, float const *dvvWeights, int start, int end)'],\n ['../a00912.html#a907dc53421460557871ddc35f77751f5', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::OmpEvalStencils(float const *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, float *dstDu, BufferDescriptor const &dstDuDesc, float *dstDv, BufferDescriptor const &dstDvDesc, int const *sizes, int const *offsets, int const *indices, float const *weights, float const *duWeights, float const *dvWeights, int start, int end)'],\n ['../a00912.html#a870745ff3e883b32547d4db42b3be2bd', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::OmpEvalStencils(float const *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, int const *sizes, int const *offsets, int const *indices, float const *weights, int start, int end)']\n ]],\n ['ompevaluator_2', ['OmpEvaluator', ['../a01305.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n- ['ompevaluator_2eh_3', ['ompEvaluator.h', ['../a00881.html', 1, '']]],\n- ['ompkernel_2eh_4', ['ompKernel.h', ['../a00878.html', 1, '']]],\n- ['opencl_2eh_5', ['opencl.h', ['../a00797.html', 1, '']]],\n+ ['ompevaluator_2eh_3', ['ompEvaluator.h', ['../a00878.html', 1, '']]],\n+ ['ompkernel_2eh_4', ['ompKernel.h', ['../a00881.html', 1, '']]],\n+ ['opencl_2eh_5', ['opencl.h', ['../a00800.html', 1, '']]],\n ['opengl_2eh_6', ['opengl.h', ['../a00884.html', 1, '']]],\n ['opensubdiv_7', ['OpenSubdiv', ['../a00905.html', 1, '']]],\n ['opensubdiv_3a_3aopensubdiv_5fversion_8', ['OPENSUBDIV_VERSION', ['../a00906.html', 1, 'OpenSubdiv']]],\n ['opensubdiv_3a_3aopensubdiv_5fversion_3a_3abfr_9', ['Bfr', ['../a00907.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION']]],\n ['opensubdiv_3a_3aopensubdiv_5fversion_3a_3afar_10', ['Far', ['../a00908.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION']]],\n ['opensubdiv_3a_3aopensubdiv_5fversion_3a_3aosd_11', ['Osd', ['../a00912.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION']]],\n ['opensubdiv_3a_3aopensubdiv_5fversion_3a_3asdc_12', ['Sdc', ['../a00913.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION']]],\n@@ -47,12 +47,12 @@\n ['../a00965.html#a28d39a844c3a37ab61d32ab7c6352f09', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Tessellation::Options::Options()'],\n ['../a00945.html#a28d39a844c3a37ab61d32ab7c6352f09', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::SurfaceFactory::Options::Options()'],\n ['../a01013.html', 1, 'PatchTableFactory::Options'],\n ['../a01077.html', 1, 'StencilTableFactoryReal< REAL >::Options'],\n ['../a01129.html', 1, 'TopologyRefinerFactory< MESH >::Options'],\n ['../a01329.html', 1, 'Options']\n ]],\n- ['options_2eh_20', ['options.h', ['../a00773.html', 1, '']]],\n+ ['options_2eh_20', ['options.h', ['../a00770.html', 1, '']]],\n ['orderverticesfromfacesfirst_21', ['orderverticesfromfacesfirst', ['../a01117.html#a3b1e47f9568213cc322ef29a84c932b6', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyRefiner::UniformOptions::orderVerticesFromFacesFirst'],\n ['../a01121.html#a3b1e47f9568213cc322ef29a84c932b6', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyRefiner::AdaptiveOptions::orderVerticesFromFacesFirst']\n ]]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/all_e.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/all_e.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,14 +1,14 @@\n var searchData = [\n ['parameterization_0', ['parameterization', ['../a00921.html#a64a4b29d36851a8d83be05af5b25f886', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Parameterization::Parameterization(Parameterization const &)=default'],\n ['../a00921.html#aa7e0b89d67d34c1dd7a37cdce95f9e2c', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Parameterization::Parameterization()'],\n ['../a00921.html#a301ad64c8ae0a3ba3af84377138a069f', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Parameterization::Parameterization(Sdc::SchemeType scheme, int faceSize)'],\n ['../a00921.html', 1, 'Parameterization']\n ]],\n- ['parameterization_2eh_1', ['parameterization.h', ['../a00695.html', 1, '']]],\n+ ['parameterization_2eh_1', ['parameterization.h', ['../a00698.html', 1, '']]],\n ['patcharray_2', ['patcharray', ['../a01317.html', 1, 'PatchArray'],\n ['../a01317.html#ad9821423935395f540ff8d37d907600a', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::PatchArray::PatchArray(Far::PatchDescriptor regDesc_in, Far::PatchDescriptor irregDesc_in, int numPatches_in, int indexBase_in, int primitiveIdBase_in)'],\n ['../a01317.html#a9c551db8af15f4a0ddf4c2a13ce2505e', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::PatchArray::PatchArray(Far::PatchDescriptor desc_in, int numPatches_in, int indexBase_in, int primitiveIdBase_in)']\n ]],\n ['patcharrayvector_3', ['PatchArrayVector', ['../a00912.html#a98098cd229f60d2397d84a76fe654a31', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]],\n ['patchbuilder_4', ['PatchBuilder', ['../a01113.html#a97612a1a955f8b65e6d7e7761ed1cef7', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyRefiner']]],\n ['patchcoord_5', ['patchcoord', ['../a01313.html#abe64006c4fe55b720f483bd7711bf216', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::PatchCoord::PatchCoord(Far::PatchTable::PatchHandle handleArg, float sArg, float tArg)'],\n@@ -16,15 +16,15 @@\n ['../a01313.html', 1, 'PatchCoord']\n ]],\n ['patchdescriptor_6', ['patchdescriptor', ['../a00973.html', 1, 'PatchDescriptor'],\n ['../a00973.html#a6c6de8b1c8212039f4702f70bb75cf02', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchDescriptor::PatchDescriptor(PatchDescriptor const &d)'],\n ['../a00973.html#a8e33c50700963e8dc99a5f598a32aaa3', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchDescriptor::PatchDescriptor(int type)'],\n ['../a00973.html#af3f91a4a134cb2e5786990ec81f30d17', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchDescriptor::PatchDescriptor()']\n ]],\n- ['patchdescriptor_2eh_7', ['patchDescriptor.h', ['../a00740.html', 1, '']]],\n+ ['patchdescriptor_2eh_7', ['patchDescriptor.h', ['../a00743.html', 1, '']]],\n ['patchfacetag_8', ['PatchFaceTag', ['../a01017.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTableFactory']]],\n ['patchhandle_9', ['PatchHandle', ['../a00997.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTable']]],\n ['patchindex_10', ['patchIndex', ['../a00997.html#a31bdf15525ab73560c2b725ff7f8ae3a', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTable::PatchHandle']]],\n ['patchmap_11', ['patchmap', ['../a00977.html#a016619de52fd79dbcdb879cc12b79200', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchMap::PatchMap()'],\n ['../a00977.html', 1, 'PatchMap'],\n ['../a00997.html#aff380d8d7f072959898c0a4e25150d2a', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTable::PatchHandle::PatchMap']\n ]],\n@@ -40,20 +40,20 @@\n ['patchtable_19', ['patchtable', ['../a00993.html', 1, 'PatchTable'],\n ['../a00993.html#a37e24b0244219eef61cc1ab2a5a5450e', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTable::PatchTable(int maxvalence)'],\n ['../a00993.html#a3419c5d57330d6787f8c14a7677b8d9b', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTable::PatchTable(PatchTable const &src)'],\n ['../a00997.html#ad4867d502f9704b7e45a7974e8918dc3', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTable::PatchHandle::PatchTable'],\n ['../a01273.html#adf9352136d44e5999629c6b4530bf4e0', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::Mesh::PatchTable'],\n ['../a01261.html#adf9352136d44e5999629c6b4530bf4e0', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::MeshInterface::PatchTable']\n ]],\n- ['patchtable_2eh_20', ['patchTable.h', ['../a00728.html', 1, '']]],\n+ ['patchtable_2eh_20', ['patchTable.h', ['../a00731.html', 1, '']]],\n ['patchtablebuilder_21', ['patchtablebuilder', ['../a00993.html#ad452cef79832abb71eef0c3d88acc1a0', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTable::PatchTableBuilder'],\n ['../a01113.html#ad452cef79832abb71eef0c3d88acc1a0', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyRefiner::PatchTableBuilder']\n ]],\n ['patchtablefactory_22', ['PatchTableFactory', ['../a01009.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far']]],\n- ['patchtablefactory_2eh_23', ['patchTableFactory.h', ['../a00731.html', 1, '']]],\n+ ['patchtablefactory_2eh_23', ['patchTableFactory.h', ['../a00728.html', 1, '']]],\n ['patchtagvector_24', ['PatchTagVector', ['../a01009.html#a37218ea13f75caee4c93cc4e94d26060', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTableFactory']]],\n ['patchvertstable_25', ['PatchVertsTable', ['../a00993.html#a9484ab8a323750c2f639ee8709b1349b', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTable']]],\n ['pointdescriptor_26', ['pointdescriptor', ['../a00937.html', 1, 'Surface< REAL >::PointDescriptor'],\n ['../a00937.html#ac60ab7fa3966237e2de95cc60defa4de', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Surface::PointDescriptor::PointDescriptor()'],\n ['../a00937.html#a69d66788e741236b1176159a1d609189', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Surface::PointDescriptor::PointDescriptor(int n)'],\n ['../a00937.html#a6e6069bdfef867e798fe863f40f4274a', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Surface::PointDescriptor::PointDescriptor(int n, int m)']\n ]],\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/files_0.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/files_0.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var searchData = [\n- ['array_2eh_0', ['array.h', ['../a00767.html', 1, '']]]\n+ ['array_2eh_0', ['array.h', ['../a00764.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/files_1.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/files_1.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var searchData = [\n- ['bilinearscheme_2eh_0', ['bilinearScheme.h', ['../a00785.html', 1, '']]],\n+ ['bilinearscheme_2eh_0', ['bilinearScheme.h', ['../a00779.html', 1, '']]],\n ['bufferdescriptor_2eh_1', ['bufferDescriptor.h', ['../a00899.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/files_2.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/files_2.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,16 +1,16 @@\n var searchData = [\n- ['catmarkscheme_2eh_0', ['catmarkScheme.h', ['../a00782.html', 1, '']]],\n+ ['catmarkscheme_2eh_0', ['catmarkScheme.h', ['../a00785.html', 1, '']]],\n ['clevaluator_2eh_1', ['clEvaluator.h', ['../a00803.html', 1, '']]],\n- ['clpatchtable_2eh_2', ['clPatchTable.h', ['../a00800.html', 1, '']]],\n- ['clvertexbuffer_2eh_3', ['clVertexBuffer.h', ['../a00788.html', 1, '']]],\n- ['componentinterfaces_2eh_4', ['componentInterfaces.h', ['../a00764.html', 1, '']]],\n- ['cpud3d11vertexbuffer_2eh_5', ['cpuD3D11VertexBuffer.h', ['../a00842.html', 1, '']]],\n+ ['clpatchtable_2eh_2', ['clPatchTable.h', ['../a00791.html', 1, '']]],\n+ ['clvertexbuffer_2eh_3', ['clVertexBuffer.h', ['../a00797.html', 1, '']]],\n+ ['componentinterfaces_2eh_4', ['componentInterfaces.h', ['../a00767.html', 1, '']]],\n+ ['cpud3d11vertexbuffer_2eh_5', ['cpuD3D11VertexBuffer.h', ['../a00845.html', 1, '']]],\n ['cpuevaluator_2eh_6', ['cpuEvaluator.h', ['../a00896.html', 1, '']]],\n- ['cpuglvertexbuffer_2eh_7', ['cpuGLVertexBuffer.h', ['../a00866.html', 1, '']]],\n+ ['cpuglvertexbuffer_2eh_7', ['cpuGLVertexBuffer.h', ['../a00869.html', 1, '']]],\n ['cpupatchtable_2eh_8', ['cpuPatchTable.h', ['../a00893.html', 1, '']]],\n- ['cpuvertexbuffer_2eh_9', ['cpuVertexBuffer.h', ['../a00890.html', 1, '']]],\n- ['crease_2eh_10', ['crease.h', ['../a00779.html', 1, '']]],\n+ ['cpuvertexbuffer_2eh_9', ['cpuVertexBuffer.h', ['../a00887.html', 1, '']]],\n+ ['crease_2eh_10', ['crease.h', ['../a00782.html', 1, '']]],\n ['cudaevaluator_2eh_11', ['cudaEvaluator.h', ['../a00794.html', 1, '']]],\n- ['cudapatchtable_2eh_12', ['cudaPatchTable.h', ['../a00791.html', 1, '']]],\n+ ['cudapatchtable_2eh_12', ['cudaPatchTable.h', ['../a00788.html', 1, '']]],\n ['cudavertexbuffer_2eh_13', ['cudaVertexBuffer.h', ['../a00902.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/files_3.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/files_3.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,7 +1,7 @@\n var searchData = [\n- ['d3d11computeevaluator_2eh_0', ['d3d11ComputeEvaluator.h', ['../a00845.html', 1, '']]],\n+ ['d3d11computeevaluator_2eh_0', ['d3d11ComputeEvaluator.h', ['../a00842.html', 1, '']]],\n ['d3d11legacygregorypatchtable_2eh_1', ['d3d11LegacyGregoryPatchTable.h', ['../a00839.html', 1, '']]],\n- ['d3d11mesh_2eh_2', ['d3d11Mesh.h', ['../a00830.html', 1, '']]],\n- ['d3d11patchtable_2eh_3', ['d3d11PatchTable.h', ['../a00833.html', 1, '']]],\n- ['d3d11vertexbuffer_2eh_4', ['d3d11VertexBuffer.h', ['../a00836.html', 1, '']]]\n+ ['d3d11mesh_2eh_2', ['d3d11Mesh.h', ['../a00827.html', 1, '']]],\n+ ['d3d11patchtable_2eh_3', ['d3d11PatchTable.h', ['../a00836.html', 1, '']]],\n+ ['d3d11vertexbuffer_2eh_4', ['d3d11VertexBuffer.h', ['../a00833.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/files_4.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/files_4.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var searchData = [\n- ['error_2eh_0', ['error.h', ['../a00743.html', 1, '']]]\n+ ['error_2eh_0', ['error.h', ['../a00740.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/files_5.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/files_5.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var searchData = [\n- ['fvarlevel_2eh_0', ['fvarLevel.h', ['../a00758.html', 1, '']]],\n- ['fvarrefinement_2eh_1', ['fvarRefinement.h', ['../a00761.html', 1, '']]]\n+ ['fvarlevel_2eh_0', ['fvarLevel.h', ['../a00761.html', 1, '']]],\n+ ['fvarrefinement_2eh_1', ['fvarRefinement.h', ['../a00758.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/files_6.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/files_6.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,9 +1,9 @@\n var searchData = [\n- ['glcomputeevaluator_2eh_0', ['glComputeEvaluator.h', ['../a00848.html', 1, '']]],\n- ['gllegacygregorypatchtable_2eh_1', ['glLegacyGregoryPatchTable.h', ['../a00869.html', 1, '']]],\n- ['glmesh_2eh_2', ['glMesh.h', ['../a00854.html', 1, '']]],\n+ ['glcomputeevaluator_2eh_0', ['glComputeEvaluator.h', ['../a00851.html', 1, '']]],\n+ ['gllegacygregorypatchtable_2eh_1', ['glLegacyGregoryPatchTable.h', ['../a00866.html', 1, '']]],\n+ ['glmesh_2eh_2', ['glMesh.h', ['../a00857.html', 1, '']]],\n ['glpatchtable_2eh_3', ['glPatchTable.h', ['../a00863.html', 1, '']]],\n- ['glslpatchshadersource_2eh_4', ['glslPatchShaderSource.h', ['../a00860.html', 1, '']]],\n- ['glvertexbuffer_2eh_5', ['glVertexBuffer.h', ['../a00857.html', 1, '']]],\n- ['glxfbevaluator_2eh_6', ['glXFBEvaluator.h', ['../a00851.html', 1, '']]]\n+ ['glslpatchshadersource_2eh_4', ['glslPatchShaderSource.h', ['../a00854.html', 1, '']]],\n+ ['glvertexbuffer_2eh_5', ['glVertexBuffer.h', ['../a00860.html', 1, '']]],\n+ ['glxfbevaluator_2eh_6', ['glXFBEvaluator.h', ['../a00848.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/files_7.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/files_7.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var searchData = [\n- ['hlslpatchshadersource_2eh_0', ['hlslPatchShaderSource.h', ['../a00827.html', 1, '']]]\n+ ['hlslpatchshadersource_2eh_0', ['hlslPatchShaderSource.h', ['../a00830.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/files_8.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/files_8.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,5 @@\n var searchData = [\n ['level_2eh_0', ['level.h', ['../a00755.html', 1, '']]],\n- ['limits_2eh_1', ['limits.h', ['../a00698.html', 1, '']]],\n+ ['limits_2eh_1', ['limits.h', ['../a00695.html', 1, '']]],\n ['loopscheme_2eh_2', ['loopScheme.h', ['../a00776.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/files_9.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/files_9.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,10 +1,10 @@\n var searchData = [\n- ['mesh_2eh_0', ['mesh.h', ['../a00887.html', 1, '']]],\n- ['mtlcommon_2eh_1', ['mtlCommon.h', ['../a00809.html', 1, '']]],\n+ ['mesh_2eh_0', ['mesh.h', ['../a00890.html', 1, '']]],\n+ ['mtlcommon_2eh_1', ['mtlCommon.h', ['../a00806.html', 1, '']]],\n ['mtlcomputeevaluator_2eh_2', ['mtlComputeEvaluator.h', ['../a00821.html', 1, '']]],\n- ['mtllegacygregorypatchtable_2eh_3', ['mtlLegacyGregoryPatchTable.h', ['../a00815.html', 1, '']]],\n- ['mtlmesh_2eh_4', ['mtlMesh.h', ['../a00806.html', 1, '']]],\n- ['mtlpatchshadersource_2eh_5', ['mtlPatchShaderSource.h', ['../a00812.html', 1, '']]],\n- ['mtlpatchtable_2eh_6', ['mtlPatchTable.h', ['../a00818.html', 1, '']]],\n+ ['mtllegacygregorypatchtable_2eh_3', ['mtlLegacyGregoryPatchTable.h', ['../a00818.html', 1, '']]],\n+ ['mtlmesh_2eh_4', ['mtlMesh.h', ['../a00812.html', 1, '']]],\n+ ['mtlpatchshadersource_2eh_5', ['mtlPatchShaderSource.h', ['../a00809.html', 1, '']]],\n+ ['mtlpatchtable_2eh_6', ['mtlPatchTable.h', ['../a00815.html', 1, '']]],\n ['mtlvertexbuffer_2eh_7', ['mtlVertexBuffer.h', ['../a00824.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/files_a.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/files_a.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,7 +1,7 @@\n var searchData = [\n- ['ompevaluator_2eh_0', ['ompEvaluator.h', ['../a00881.html', 1, '']]],\n- ['ompkernel_2eh_1', ['ompKernel.h', ['../a00878.html', 1, '']]],\n- ['opencl_2eh_2', ['opencl.h', ['../a00797.html', 1, '']]],\n+ ['ompevaluator_2eh_0', ['ompEvaluator.h', ['../a00878.html', 1, '']]],\n+ ['ompkernel_2eh_1', ['ompKernel.h', ['../a00881.html', 1, '']]],\n+ ['opencl_2eh_2', ['opencl.h', ['../a00800.html', 1, '']]],\n ['opengl_2eh_3', ['opengl.h', ['../a00884.html', 1, '']]],\n- ['options_2eh_4', ['options.h', ['../a00773.html', 1, '']]]\n+ ['options_2eh_4', ['options.h', ['../a00770.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/files_b.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/files_b.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,10 +1,10 @@\n var searchData = [\n- ['parameterization_2eh_0', ['parameterization.h', ['../a00695.html', 1, '']]],\n- ['patchdescriptor_2eh_1', ['patchDescriptor.h', ['../a00740.html', 1, '']]],\n+ ['parameterization_2eh_0', ['parameterization.h', ['../a00698.html', 1, '']]],\n+ ['patchdescriptor_2eh_1', ['patchDescriptor.h', ['../a00743.html', 1, '']]],\n ['patchmap_2eh_2', ['patchMap.h', ['../a00734.html', 1, '']]],\n ['patchparam_2eh_3', ['patchParam.h', ['../a00737.html', 1, '']]],\n- ['patchtable_2eh_4', ['patchTable.h', ['../a00728.html', 1, '']]],\n- ['patchtablefactory_2eh_5', ['patchTableFactory.h', ['../a00731.html', 1, '']]],\n+ ['patchtable_2eh_4', ['patchTable.h', ['../a00731.html', 1, '']]],\n+ ['patchtablefactory_2eh_5', ['patchTableFactory.h', ['../a00728.html', 1, '']]],\n ['primvarrefiner_2eh_6', ['primvarRefiner.h', ['../a00725.html', 1, '']]],\n ['ptexindices_2eh_7', ['ptexIndices.h', ['../a00722.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/files_d.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/files_d.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,11 +1,11 @@\n var searchData = [\n- ['scheme_2eh_0', ['scheme.h', ['../a00770.html', 1, '']]],\n+ ['scheme_2eh_0', ['scheme.h', ['../a00773.html', 1, '']]],\n ['sparseselector_2eh_1', ['sparseSelector.h', ['../a00749.html', 1, '']]],\n ['stackbuffer_2eh_2', ['stackBuffer.h', ['../a00746.html', 1, '']]],\n ['stenciltable_2eh_3', ['stencilTable.h', ['../a00719.html', 1, '']]],\n ['stenciltablefactory_2eh_4', ['stencilTableFactory.h', ['../a00716.html', 1, '']]],\n ['surface_2eh_5', ['surface.h', ['../a00689.html', 1, '']]],\n ['surfacefactory_2eh_6', ['surfaceFactory.h', ['../a00686.html', 1, '']]],\n- ['surfacefactorycache_2eh_7', ['surfaceFactoryCache.h', ['../a00683.html', 1, '']]],\n- ['surfacefactorymeshadapter_2eh_8', ['surfaceFactoryMeshAdapter.h', ['../a00680.html', 1, '']]]\n+ ['surfacefactorycache_2eh_7', ['surfaceFactoryCache.h', ['../a00680.html', 1, '']]],\n+ ['surfacefactorymeshadapter_2eh_8', ['surfaceFactoryMeshAdapter.h', ['../a00683.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/files_e.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/files_e.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,13 +1,13 @@\n var searchData = [\n ['tbbevaluator_2eh_0', ['tbbEvaluator.h', ['../a00875.html', 1, '']]],\n ['tbbkernel_2eh_1', ['tbbKernel.h', ['../a00872.html', 1, '']]],\n- ['tessellation_2eh_2', ['tessellation.h', ['../a00677.html', 1, '']]],\n- ['topologydescriptor_2eh_3', ['topologyDescriptor.h', ['../a00710.html', 1, '']]],\n- ['topologylevel_2eh_4', ['topologyLevel.h', ['../a00713.html', 1, '']]],\n+ ['tessellation_2eh_2', ['tessellation.h', ['../a00674.html', 1, '']]],\n+ ['topologydescriptor_2eh_3', ['topologyDescriptor.h', ['../a00713.html', 1, '']]],\n+ ['topologylevel_2eh_4', ['topologyLevel.h', ['../a00710.html', 1, '']]],\n ['topologyrefiner_2eh_5', ['topologyRefiner.h', ['../a00707.html', 1, '']]],\n ['topologyrefinerfactory_2eh_6', ['topologyRefinerFactory.h', ['../a00704.html', 1, '']]],\n ['types_2eh_7', ['types.h', ['../a01478.html', 1, '(Global Namespace)'],\n ['../a01481.html', 1, '(Global Namespace)'],\n ['../a01484.html', 1, '(Global Namespace)'],\n ['../a01487.html', 1, '(Global Namespace)']\n ]]\n"}]}, {"source1": "./usr/share/doc/opensubdiv/doxy_html/search/files_f.js", "source2": "./usr/share/doc/opensubdiv/doxy_html/search/files_f.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var searchData = [\n- ['vertexdescriptor_2eh_0', ['vertexDescriptor.h', ['../a00674.html', 1, '']]]\n+ ['vertexdescriptor_2eh_0', ['vertexDescriptor.h', ['../a00677.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/opensubdiv/tipuesearch/tipuesearch_content.js", "source2": "./usr/share/doc/opensubdiv/tipuesearch/tipuesearch_content.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,144 +1,144 @@\n var tipuesearch = {\n \"pages\": [{\n- \"title\": \"bfr_tutorial_3_1.cpp\",\n- \"text\": \"bfr_tutorial_3_1.cpp bfr_tutorial_3_1.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsbfrtutorial_3_1bfr_tutorial_3_1.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial illustrates the definition of a custom subclass of BfrSurfaceFactory -- providing a class with the SurfaceFactory interface adapted to a connected mesh representation. The bulk of this code is therefore identical to a previous tutorial 1.3 which illustrates simple use of a BfrSurface factory. The only difference here lies in the explicit local definition of the subclass of BfrSurfaceFactory for FarTopologyRefiner -- named CustomSurfaceFactory in this case. include .customSurfaceFactory.h include opensubdivfartopologyRefiner.h include opensubdivbfrsurface.h include opensubdivbfrtessellation.h include vector include string include cstring include cstdio Local headers with support for this tutorial in namespace tutorial include .meshLoader.h include .objWriter.h using namespace OpenSubdiv Simple command line arguments to provide input and run-time options class Args public std string inputObjFile std string outputObjFile Sdc SchemeType schemeType int tessUniformRate bool tessQuadsFlag bool uv2xyzFlag public Args int argc , char argv inputObjFile , outputObjFile , schemeType Sdc SCHEME_CATMARK , tessUniformRate 5 , tessQuadsFlag false , uv2xyzFlag false for int i 1 i argc i if strstr argv i , .obj if inputObjFile . empty inputObjFile std string argv i else fprintf stderr , Warning Extra Obj file s ignored n , argv i else if strcmp argv i , -o if i argc outputObjFile std string argv i else if strcmp argv i , -bilinear schemeType Sdc SCHEME_BILINEAR else if strcmp argv i , -catmark schemeType Sdc SCHEME_CATMARK else if strcmp argv i , -loop schemeType Sdc SCHEME_LOOP else if strcmp argv i , -res if i argc tessUniformRate atoi argv i else if strcmp argv i , -quads tessQuadsFlag true else if strcmp argv i , -uv2xyz uv2xyzFlag true else fprintf stderr , Warning Unrecognized argument s ignored n , argv i private Args The main tessellation function given a mesh and vertex positions, tessellate each face -- writing results in Obj format. void tessellateToObj Far TopologyRefiner const meshTopology , std vector float const meshVertexPositions , std vector float const meshFaceVaryingUVs , Args const options Use simpler local type names for the Surface and its factory typedef CustomSurfaceFactory SurfaceFactory typedef Bfr Surface float Surface Initialize the SurfaceFactory for the given base mesh very low cost in terms of both time and space and tessellate each face independently i.e. no shared vertices Note that the SurfaceFactory is not thread-safe by default due to use of an internal cache. Creating a separate instance of the SurfaceFactory for each thread is one way to safely parallelize this loop. Another preferred is to assign a thread-safe cache to the single instance. First declare any evaluation options when initializing When dealing with face-varying data, an identifier is necessary when constructing Surfaces in order to distinguish the different face-varying data channels. To avoid repeatedly specifying that identifier when only one is present or of interest, it can be specified via the Options. bool meshHasUVs meshTopology . GetNumFVarChannels 0 SurfaceFactory Options surfaceOptions if meshHasUVs surfaceOptions . SetDefaultFVarID 0 SurfaceFactory surfaceFactory meshTopology , surfaceOptions The Surface to be constructed and evaluated for each face -- as well as the intermediate and output data associated with it -- can be declared in the scope local to each face. But since dynamic memory is involved with these variables, it is preferred to declare them outside that loop to preserve and reuse that dynamic memory. Surface posSurface Surface uvSurface std vector float facePatchPoints std vector float outCoords std vector float outPos , outDu , outDv std vector float outUV std vector int outFacets Assign Tessellation Options applied for all faces. Tessellations allow the creating of either 3- or 4-sided faces -- both of which are supported here via a command line option int const tessFacetSize 3 options . tessQuadsFlag Bfr Tessellation Options tessOptions tessOptions . SetFacetSize tessFacetSize tessOptions . PreserveQuads options . tessQuadsFlag Process each face, writing the output of each in Obj format tutorial ObjWriter objWriter options . outputObjFile int numFaces surfaceFactory . GetNumFaces for int faceIndex 0 faceIndex numFaces faceIndex Initialize the Surfaces for position and UVs of this face. There are two ways to do this -- both illustrated here Creating Surfaces for the different data interpolation types independently is clear and convenient, but considerable work may be duplicated in the construction process in the case of non-linear face-varying Surfaces. So unless it is known that face-varying interpolation is linear, use of InitSurfaces is generally preferred. Remember also that the face-varying identifier is omitted from the initialization methods here as it was previously assigned to the SurfaceFactoryOptions. In the absence of an assignment of the default FVarID to the Options, a failure to specify the FVarID here will result in failure. The cases below are expanded for illustration purposes, and validity of the resulting Surface is tested here, rather than the return value of initialization methods. bool createSurfacesTogether true if meshHasUVs surfaceFactory . InitVertexSurface faceIndex , posSurface else if createSurfacesTogether surfaceFactory . InitSurfaces faceIndex , posSurface , uvSurface else if surfaceFactory . InitVertexSurface faceIndex , posSurface surfaceFactory . InitFaceVaryingSurface faceIndex , uvSurface if posSurface . IsValid continue Declare a simple uniform Tessellation for the Parameterization of this face and identify coordinates of the points to evaluate Bfr Tessellation tessPattern posSurface . GetParameterization , options . tessUniformRate , tessOptions int numOutCoords tessPattern . GetNumCoords outCoords . resize numOutCoords 2 tessPattern . GetCoords outCoords . data Prepare the patch points for the Surface, then use them to evaluate output points for all identified coordinates Evaluate vertex positions Resize patch point and output arrays int pointSize 3 facePatchPoints . resize posSurface . GetNumPatchPoints pointSize outPos . resize numOutCoords pointSize outDu . resize numOutCoords pointSize outDv . resize numOutCoords pointSize Populate patch point and output arrays posSurface . PreparePatchPoints meshVertexPositions . data , pointSize , facePatchPoints . data , pointSize for int i 0 , j 0 i numOutCoords i , j pointSize posSurface . Evaluate outCoords i 2 , facePatchPoints . data , pointSize , outPos j , outDu j , outDv j Evaluate face-varying UVs when present if meshHasUVs Resize patch point and output arrays - note reuse of the same patch point array as position int pointSize 2 facePatchPoints . resize uvSurface . GetNumPatchPoints pointSize outUV . resize numOutCoords pointSize Populate patch point and output arrays uvSurface . PreparePatchPoints meshFaceVaryingUVs . data , pointSize , facePatchPoints . data , pointSize for int i 0 , j 0 i numOutCoords i , j pointSize uvSurface . Evaluate outCoords i 2 , facePatchPoints . data , pointSize , outUV j Identify the faces of the Tessellation Note the need to offset vertex indices for the output faces -- using the number of vertices generated prior to this face. One of several Tessellation methods to transform the facet indices simply translates all indices by the desired offset. int objVertexIndexOffset objWriter . GetNumVertices int numFacets tessPattern . GetNumFacets outFacets . resize numFacets tessFacetSize tessPattern . GetFacets outFacets . data tessPattern . TransformFacetCoordIndices outFacets . data , objVertexIndexOffset Write the evaluated points and faces connecting them as Obj objWriter . WriteGroupName baseFace_ , faceIndex if meshHasUVs options . uv2xyzFlag objWriter . WriteVertexPositions outUV , 2 objWriter . WriteFaces outFacets , tessFacetSize , false , false else objWriter . WriteVertexPositions outPos objWriter . WriteVertexNormals outDu , outDv if meshHasUVs objWriter . WriteVertexUVs outUV objWriter . WriteFaces outFacets , tessFacetSize , true , meshHasUVs Load command line arguments, specified or default geometry and process int main int argc , char argv Args args argc , argv Far TopologyRefiner meshTopology 0 std vector float meshVtxPositions std vector float meshFVarUVs meshTopology tutorial createTopologyRefiner args . inputObjFile , args . schemeType , meshVtxPositions , meshFVarUVs if meshTopology 0 return EXIT_FAILURE tessellateToObj meshTopology , meshVtxPositions , meshFVarUVs , args delete meshTopology return EXIT_SUCCESS ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n- \"tags\": \"\",\n- \"loc\": \"bfr_tutorial_3_1.html\"\n- }, {\n- \"title\": \"bfr_tutorial_3_2.cpp\",\n- \"text\": \"bfr_tutorial_3_2.cpp bfr_tutorial_3_2.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsbfrtutorial_3_2bfr_tutorial_3_2.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial is a variation of tutorials showing simple uniform tessellation. Rather than constructing and evaluating a Surface at a time, this tutorial shows how Surfaces can be created and saved for repeated use. A simple SurfaceCache class is created that creates and stores the Surface for each face, along with the patch points associated with it. The main tessellation function remains essentially the same, but here it access the Surfaces from the SurfaceCache rather than computing them locally. Note that while this example illustrated the retention of all Surfaces for a mesh, this behavior is not recommended. It does not scale well for large meshes and undermines the memory savings that transient use of Surfaces is designed to achieve. Rather than storing Surfaces for all faces, maintaining a priority queue for a fixed number may be a reasonable compromise. include opensubdivfartopologyRefiner.h include opensubdivbfrrefinerSurfaceFactory.h include opensubdivbfrsurface.h include opensubdivbfrtessellation.h include vector include memory include string include cstring include cstdio Local headers with support for this tutorial in namespace tutorial include .meshLoader.h include .objWriter.h using namespace OpenSubdiv Simple command line arguments to provide input and run-time options class Args public std string inputObjFile std string outputObjFile Sdc SchemeType schemeType int tessUniformRate bool tessQuadsFlag public Args int argc , char argv inputObjFile , outputObjFile , schemeType Sdc SCHEME_CATMARK , tessUniformRate 5 , tessQuadsFlag false for int i 1 i argc i if strstr argv i , .obj if inputObjFile . empty inputObjFile std string argv i else fprintf stderr , Warning Extra Obj file s ignored n , argv i else if strcmp argv i , -o if i argc outputObjFile std string argv i else if strcmp argv i , -bilinear schemeType Sdc SCHEME_BILINEAR else if strcmp argv i , -catmark schemeType Sdc SCHEME_CATMARK else if strcmp argv i , -loop schemeType Sdc SCHEME_LOOP else if strcmp argv i , -res if i argc tessUniformRate atoi argv i else if strcmp argv i , -quads tessQuadsFlag true else fprintf stderr , Warning Unrecognized argument s ignored n , argv i private Args This simple class creates and dispenses Surfaces for all faces of a mesh. It consists primarily of an array of simple structs entries for each face and a single array of patch points for all Surfaces created. There are many ways to create such a cache depending on requirements. This is a simple example, but the interface presents some options that are worth considering. A SurfaceCache is constructed here given the following - a reference to the SurfaceFactory - the cache could just as easily take a reference to the mesh and construct the SurfaceFactory internally - the position data for the mesh - this is needed to compute patch points for the Surfaces - if caching UVs or any other primvar, other data needs to be provided -- along with the interpolation type for that data vertex, face-varying, etc. - option to cache patch points - the cache could store the Surfaces only or also include their patch points - storing patch points takes more memory but will eliminate any preparation time for evaluation of the Surface - option to cache all surfaces - the benefits to caching simple linear or regular surfaces are minimal -- and may even be detrimental - so only caching non-linear irregular surfaces is an option worth considering The SurfaceCache implementation here provides the options noted above. But for simplicity, the actual usage of the SurfaceCache does not deal with the permutations of additional work that is necessary when the Surfaces or their patch points are not cached. class SurfaceCache public typedef Bfr Surface float Surface typedef Bfr RefinerSurfaceFactory SurfaceFactory public SurfaceCache SurfaceFactory const surfaceFactory , std vector float const meshPoints , bool cachePatchPoints true , bool cacheAllSurfaces true SurfaceCache delete SurfaceCache default Public methods to retrieved cached Surfaces and their pre-computed patch points bool FaceHasLimitSurface int face return _entries face . hasLimit Surface const GetSurface int face return _entries face . surface . get float const GetPatchPoints int face return getPatchPoints face private Simple struct to keep track of Surface and more for each face struct FaceEntry FaceEntry surface , hasLimit false , pointOffset -1 std unique_ptr Surface const surface bool hasLimit int pointOffset Non-const version to be used internally to aide assignment float getPatchPoints int face return _entries face . surface _points . empty _points . data _entries face . pointOffset 3 0 private std vector FaceEntry _entries std vector float _points SurfaceCache SurfaceCache SurfaceFactory const surfaceFactory , std vector float const meshPoints , bool cachePatchPoints , bool cacheAllSurfaces int numFaces surfaceFactory . GetNumFaces _entries . resize numFaces int numPointsInCache 0 for int face 0 face numFaces face Surface s surfaceFactory . CreateVertexSurface float face if s FaceEntry entry _entries face entry . hasLimit true if cacheAllSurfaces s - IsRegular s - IsLinear entry . surface . reset s entry . pointOffset numPointsInCache numPointsInCache s - GetNumPatchPoints else delete s if cachePatchPoints _points . resize numPointsInCache 3 for int face 0 face numFaces face float patchPoints getPatchPoints face if patchPoints GetSurface face - PreparePatchPoints meshPoints . data , 3 , patchPoints , 3 The main tessellation function given a mesh and vertex positions, tessellate each face -- writing results in Obj format. void tessellateToObj Far TopologyRefiner const meshTopology , std vector float const meshVertexPositions , Args const options Use simpler local type names for the Surface and its factory typedef Bfr RefinerSurfaceFactory SurfaceFactory typedef Bfr Surface float Surface Initialize the SurfaceFactory for the given base mesh very low cost in terms of both time and space and tessellate each face independently i.e. no shared vertices Note that the SurfaceFactory is not thread-safe by default due to use of an internal cache. Creating a separate instance of the SurfaceFactory for each thread is one way to safely parallelize this loop. Another preferred is to assign a thread-safe cache to the single instance. First declare any evaluation options when initializing though none are used in this simple case SurfaceFactory Options surfaceOptions SurfaceFactory meshSurfaceFactory meshTopology , surfaceOptions Initialize a SurfaceCache to construct Surfaces for all faces. From this point forward the SurfaceFactory is no longer used to access Surfaces. Note also that usage below is specific to the options used to initialize the SurfaceCache bool cachePatchPoints true bool cacheAllSurfaces true SurfaceCache surfaceCache meshSurfaceFactory , meshVertexPositions , cachePatchPoints , cacheAllSurfaces As with previous tutorials, output data associated with the face can be declared in the scope local to each face. But since dynamic memory is involved with these variables, it is preferred to declare them outside that loop to preserve and reuse that dynamic memory. std vector float outCoords std vector float outPos , outDu , outDv std vector int outFacets Assign Tessellation Options applied for all faces. Tessellations allow the creating of either 3- or 4-sided faces -- both of which are supported here via a command line option int const tessFacetSize 3 options . tessQuadsFlag Bfr Tessellation Options tessOptions tessOptions . SetFacetSize tessFacetSize tessOptions . PreserveQuads options . tessQuadsFlag Process each face, writing the output of each in Obj format tutorial ObjWriter objWriter options . outputObjFile int numFaces meshSurfaceFactory . GetNumFaces for int faceIndex 0 faceIndex numFaces faceIndex Retrieve the Surface for this face when present if surfaceCache . FaceHasLimitSurface faceIndex continue Surface const faceSurface surfaceCache . GetSurface faceIndex Declare a simple uniform Tessellation for the Parameterization of this face and identify coordinates of the points to evaluate Bfr Tessellation tessPattern faceSurface . GetParameterization , options . tessUniformRate , tessOptions int numOutCoords tessPattern . GetNumCoords outCoords . resize numOutCoords 2 tessPattern . GetCoords outCoords . data Retrieve the patch points for the Surface, then use them to evaluate output points for all identified coordinates float const facePatchPoints surfaceCache . GetPatchPoints faceIndex int pointSize 3 outPos . resize numOutCoords pointSize outDu . resize numOutCoords pointSize outDv . resize numOutCoords pointSize for int i 0 , j 0 i numOutCoords i , j pointSize faceSurface . Evaluate outCoords i 2 , facePatchPoints , pointSize , outPos j , outDu j , outDv j Identify the faces of the Tessellation Note the need to offset vertex indices for the output faces -- using the number of vertices generated prior to this face. One of several Tessellation methods to transform the facet indices simply translates all indices by the desired offset. int objVertexIndexOffset objWriter . GetNumVertices int numFacets tessPattern . GetNumFacets outFacets . resize numFacets tessFacetSize tessPattern . GetFacets outFacets . data tessPattern . TransformFacetCoordIndices outFacets . data , objVertexIndexOffset Write the evaluated points and faces connecting them as Obj objWriter . WriteGroupName baseFace_ , faceIndex objWriter . WriteVertexPositions outPos objWriter . WriteVertexNormals outDu , outDv objWriter . WriteFaces outFacets , tessFacetSize , true , false Load command line arguments, specified or default geometry and process int main int argc , char argv Args args argc , argv Far TopologyRefiner meshTopology 0 std vector float meshVtxPositions std vector float meshFVarUVs meshTopology tutorial createTopologyRefiner args . inputObjFile , args . schemeType , meshVtxPositions , meshFVarUVs if meshTopology 0 return EXIT_FAILURE tessellateToObj meshTopology , meshVtxPositions , args delete meshTopology return EXIT_SUCCESS ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n- \"tags\": \"\",\n- \"loc\": \"bfr_tutorial_3_2.html\"\n- }, {\n \"title\": \"osd_tutorial_0.cpp\",\n \"text\": \"osd_tutorial_0.cpp osd_tutorial_0.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsosdtutorial_0osd_tutorial_0.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial demonstrates the manipulation of Osd Evaluator and BufferDescriptor. include opensubdivfartopologyDescriptor.h include opensubdivfarstencilTableFactory.h include opensubdivosdcpuEvaluator.h include opensubdivosdcpuVertexBuffer.h include cstdio include cstring ------------------------------------------------------------------------------ Cube geometry from catmark_cube.h static float g_verts 24 -0.5f , -0.5f , 0.5f , 0.5f , -0.5f , 0.5f , -0.5f , 0.5f , 0.5f , 0.5f , 0.5f , 0.5f , -0.5f , 0.5f , -0.5f , 0.5f , 0.5f , -0.5f , -0.5f , -0.5f , -0.5f , 0.5f , -0.5f , -0.5f static int g_nverts 8 , g_nfaces 6 static int g_vertsperface 6 4 , 4 , 4 , 4 , 4 , 4 static int g_vertIndices 24 0 , 1 , 3 , 2 , 2 , 3 , 5 , 4 , 4 , 5 , 7 , 6 , 6 , 7 , 1 , 0 , 1 , 7 , 5 , 3 , 6 , 0 , 2 , 4 using namespace OpenSubdiv static Far TopologyRefiner const createTopologyRefiner int maxlevel ------------------------------------------------------------------------------ int main int , char int maxlevel 2 , nCoarseVerts 0 , nRefinedVerts 0 Setup phase Far StencilTable const stencilTable NULL Setup FarStencilTable Far TopologyRefiner const refiner createTopologyRefiner maxlevel Setup a factory to create FarStencilTable for more details see Far tutorials Far StencilTableFactory Options options options . generateOffsets true options . generateIntermediateLevels false stencilTable Far StencilTableFactory Create refiner , options nCoarseVerts refiner - GetLevel 0 . GetNumVertices nRefinedVerts stencilTable - GetNumStencils We are done with Far cleanup table delete refiner Setup a buffer for vertex primvar data Osd CpuVertexBuffer vbuffer Osd CpuVertexBuffer Create 3 , nCoarseVerts nRefinedVerts Execution phase every frame Pack the control vertex data at the start of the vertex buffer and update every time control data changes vbuffer - UpdateData g_verts , 0 , nCoarseVerts Osd BufferDescriptor srcDesc 0 , 3 , 3 Osd BufferDescriptor dstDesc nCoarseVerts 3 , 3 , 3 Launch the computation Osd CpuEvaluator EvalStencils vbuffer , srcDesc , vbuffer , dstDesc , stencilTable Visualization with Maya print a MEL script that generates particles at the location of the refined vertices printf particle float const refinedVerts vbuffer - BindCpuBuffer 3 nCoarseVerts for int i 0 i nRefinedVerts i float const vert refinedVerts 3 i printf -p f f f n , vert 0 , vert 1 , vert 2 printf -c 1 n delete stencilTable delete vbuffer ------------------------------------------------------------------------------ static Far TopologyRefiner const createTopologyRefiner int maxlevel Populate a topology descriptor with our raw data typedef Far TopologyDescriptor Descriptor Sdc SchemeType type OpenSubdiv Sdc SCHEME_CATMARK Sdc Options options options . SetVtxBoundaryInterpolation Sdc Options VTX_BOUNDARY_EDGE_ONLY Descriptor desc desc . numVertices g_nverts desc . numFaces g_nfaces desc . numVertsPerFace g_vertsperface desc . vertIndicesPerFace g_vertIndices Instantiate a FarTopologyRefiner from the descriptor Far TopologyRefiner refiner Far TopologyRefinerFactory Descriptor Create desc , Far TopologyRefinerFactory Descriptor Options type , options Uniformly refine the topology up to maxlevel refiner - RefineUniform Far TopologyRefiner UniformOptions maxlevel return refiner ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"osd_tutorial_0.html\"\n }, {\n+ \"title\": \"bfr_tutorial_2_1.cpp\",\n+ \"text\": \"bfr_tutorial_2_1.cpp bfr_tutorial_2_1.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsbfrtutorial_2_1bfr_tutorial_2_1.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial builds on the previous tutorial that makes use of the SurfaceFactory, Surface and Tessellation classes by illustrating the use of non-uniform tessellation parameters with Tessellation. Tessellation rates for the edges of a face are determined by a length associated with each edge. That length may be computed using either the control hull or the limit surface. The length of a tessellation interval is required and will be inferred if not explicitly specified as a command line option. The tessellation rate for an edge is computed as its length divided by the length of the tessellation interval. A maximum tessellation rate is imposed to prevent accidental unbounded tessellation, but can easily be raised as needed. include opensubdivfartopologyRefiner.h include opensubdivbfrrefinerSurfaceFactory.h include opensubdivbfrsurface.h include opensubdivbfrtessellation.h include vector include string include cstring include cstdio include cmath include algorithm Local headers with support for this tutorial in namespace tutorial include .meshLoader.h include .objWriter.h using namespace OpenSubdiv Simple command line arguments to provide input and run-time options class Args public std string inputObjFile std string outputObjFile Sdc SchemeType schemeType float tessInterval int tessRateMax bool useHullFlag bool tessQuadsFlag public Args int argc , char argv inputObjFile , outputObjFile , schemeType Sdc SCHEME_CATMARK , tessInterval 0.0f , tessRateMax 10 , useHullFlag false , tessQuadsFlag false for int i 1 i argc i if strstr argv i , .obj if inputObjFile . empty inputObjFile std string argv i else fprintf stderr , Warning Extra Obj file s ignored n , argv i else if strcmp argv i , -o if i argc outputObjFile std string argv i else if strcmp argv i , -bilinear schemeType Sdc SCHEME_BILINEAR else if strcmp argv i , -catmark schemeType Sdc SCHEME_CATMARK else if strcmp argv i , -loop schemeType Sdc SCHEME_LOOP else if strcmp argv i , -length if i argc tessInterval float atof argv i else if strcmp argv i , -max if i argc tessRateMax atoi argv i else if strcmp argv i , -hull useHullFlag true else if strcmp argv i , -quads tessQuadsFlag true else fprintf stderr , Warning Unrecognized argument s ignored n , argv i private Args Local trivial functions for simple edge length calculations and the determination of associated tessellation rates inline float EdgeLength float const v0 , float const v1 float dv 3 dv 0 std abs v0 0 - v1 0 dv 1 std abs v0 1 - v1 1 dv 2 std abs v0 2 - v1 2 return std sqrt dv 0 dv 0 dv 1 dv 1 dv 2 dv 2 float FindLongestEdge Far TopologyRefiner const mesh , std vector float const vertPos , int pointSize float maxLength 0.0f int numEdges mesh . GetLevel 0 . GetNumEdges for int i 0 i numEdges i Far ConstIndexArray edgeVerts mesh . GetLevel 0 . GetEdgeVertices i float edgeLength EdgeLength vertPos edgeVerts 0 pointSize , vertPos edgeVerts 1 pointSize maxLength std max maxLength , edgeLength return maxLength void GetEdgeTessRates std vector float const vertPos , int pointSize , Args const options , int edgeRates int numEdges int vertPos . size pointSize for int i 0 i numEdges i int j i 1 numEdges float edgeLength EdgeLength vertPos i pointSize , vertPos j pointSize edgeRates i 1 int edgeLength options . tessInterval edgeRates i std min edgeRates i , options . tessRateMax The main tessellation function given a mesh and vertex positions, tessellate each face -- writing results in Obj format. void tessellateToObj Far TopologyRefiner const meshTopology , std vector float const meshVertexPositions , Args const options Use simpler local type names for the Surface and its factory typedef Bfr RefinerSurfaceFactory SurfaceFactory typedef Bfr Surface float Surface Initialize the SurfaceFactory for the given base mesh very low cost in terms of both time and space and tessellate each face independently i.e. no shared vertices Note that the SurfaceFactory is not thread-safe by default due to use of an internal cache. Creating a separate instance of the SurfaceFactory for each thread is one way to safely parallelize this loop. Another preferred is to assign a thread-safe cache to the single instance. First declare any evaluation options when initializing though none are used in this simple case SurfaceFactory Options surfaceOptions SurfaceFactory meshSurfaceFactory meshTopology , surfaceOptions The Surface to be constructed and evaluated for each face -- as well as the intermediate and output data associated with it -- can be declared in the scope local to each face. But since dynamic memory is involved with these variables, it is preferred to declare them outside that loop to preserve and reuse that dynamic memory. Surface faceSurface std vector float facePatchPoints std vector int faceTessRates std vector float outCoords std vector float outPos , outDu , outDv std vector int outFacets Assign Tessellation Options applied for all faces. Tessellations allow the creating of either 3- or 4-sided faces -- both of which are supported here via a command line option int const tessFacetSize 3 options . tessQuadsFlag Bfr Tessellation Options tessOptions tessOptions . SetFacetSize tessFacetSize tessOptions . PreserveQuads options . tessQuadsFlag Process each face, writing the output of each in Obj format tutorial ObjWriter objWriter options . outputObjFile int numFaces meshSurfaceFactory . GetNumFaces for int faceIndex 0 faceIndex numFaces faceIndex Initialize the Surface for this face -- if valid skipping holes and boundary faces in some rare cases if meshSurfaceFactory . InitVertexSurface faceIndex , faceSurface continue Prepare the Surface patch points first as it may be evaluated to determine suitable edge-rates for Tessellation int pointSize 3 facePatchPoints . resize faceSurface . GetNumPatchPoints pointSize faceSurface . PreparePatchPoints meshVertexPositions . data , pointSize , facePatchPoints . data , pointSize For each of the N edges of the face, a tessellation rate is determined to initialize a non-uniform Tessellation pattern. Many metrics are possible -- some based on the geometry itself size, curvature, others dependent on viewpoint screen space size, center of view, etc. and many more. Simple techniques are chosen here for illustration and can easily be replaced. Here two methods are shown using lengths between the corners of the face -- the first using the vertex positions of the face and the second using points evaluated at the corners of its limit surface. Use of the control hull is more efficient avoiding the evaluation but may prove less effective in some cases though both estimates have their limitations. int N faceSurface . GetFaceSize Use the output array temporarily to hold the N positions outPos . resize N pointSize if options . useHullFlag Far ConstIndexArray verts meshTopology . GetLevel 0 . GetFaceVertices faceIndex for int i 0 , j 0 i N i , j pointSize float const vPos meshVertexPositions verts i pointSize outPos j vPos 0 outPos j 1 vPos 1 outPos j 2 vPos 2 else Bfr Parameterization faceParam faceSurface . GetParameterization for int i 0 , j 0 i N i , j pointSize float uv 2 faceParam . GetVertexCoord i , uv faceSurface . Evaluate uv , facePatchPoints . data , pointSize , outPos j faceTessRates . resize N GetEdgeTessRates outPos , pointSize , options , faceTessRates . data Declare a non-uniform Tessellation using the rates for each edge and identify coordinates of the points to evaluate Additional interior rates can be optionally provided 2 for quads, 1 for others but will be inferred in their absence. Bfr Tessellation tessPattern faceSurface . GetParameterization , N , faceTessRates . data , tessOptions int numOutCoords tessPattern . GetNumCoords outCoords . resize numOutCoords 2 tessPattern . GetCoords outCoords . data Resize the output arrays and evaluate outPos . resize numOutCoords pointSize outDu . resize numOutCoords pointSize outDv . resize numOutCoords pointSize for int i 0 , j 0 i numOutCoords i , j pointSize faceSurface . Evaluate outCoords i 2 , facePatchPoints . data , pointSize , outPos j , outDu j , outDv j Identify the faces of the Tessellation Note the need to offset vertex indices for the output faces -- using the number of vertices generated prior to this face. One of several Tessellation methods to transform the facet indices simply translates all indices by the desired offset. int objVertexIndexOffset objWriter . GetNumVertices int numFacets tessPattern . GetNumFacets outFacets . resize numFacets tessFacetSize tessPattern . GetFacets outFacets . data tessPattern . TransformFacetCoordIndices outFacets . data , objVertexIndexOffset Write the evaluated points and faces connecting them as Obj objWriter . WriteGroupName baseFace_ , faceIndex objWriter . WriteVertexPositions outPos objWriter . WriteVertexNormals outDu , outDv objWriter . WriteFaces outFacets , tessFacetSize , true , false Load command line arguments, specified or default geometry and process int main int argc , char argv Args args argc , argv Far TopologyRefiner meshTopology 0 std vector float meshVtxPositions std vector float meshFVarUVs meshTopology tutorial createTopologyRefiner args . inputObjFile , args . schemeType , meshVtxPositions , meshFVarUVs if meshTopology 0 return EXIT_FAILURE If no interval length was specified, set one by finding the longest edge of the mesh and dividing it by the maximum tessellation rate if args . tessInterval 0.0f args . tessInterval FindLongestEdge meshTopology , meshVtxPositions , 3 float args . tessRateMax tessellateToObj meshTopology , meshVtxPositions , args delete meshTopology return EXIT_SUCCESS ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n+ \"tags\": \"\",\n+ \"loc\": \"bfr_tutorial_2_1.html\"\n+ }, {\n \"title\": \"bfr_tutorial_2_2.cpp\",\n \"text\": \"bfr_tutorial_2_2.cpp bfr_tutorial_2_2.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsbfrtutorial_2_2bfr_tutorial_2_2.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial builds on others using the SurfaceFactory, Surface and Tessellation classes by using more of the functionality of the Tessellation class to construct a tessellation of the mesh that is topologically watertight, i.e. resulting points evaluated along shared edges or vertices are shared and not duplicated. Since Tessellation provides points around its boundary first, the evaluated points for shared vertices and edges are identified when constructed and reused when shared later. The boundary of the tessellation of a face is therefore a collection of shared points and methods of Tessellation help to remap the faces generated to the shared set of points. include opensubdivfartopologyRefiner.h include opensubdivbfrrefinerSurfaceFactory.h include opensubdivbfrsurface.h include opensubdivbfrtessellation.h include vector include string include cstring include cstdio include cassert Local headers with support for this tutorial in namespace tutorial include .meshLoader.h include .objWriter.h using namespace OpenSubdiv using Far Index using Far IndexArray using Far ConstIndexArray Simple command line arguments to provide input and run-time options class Args public std string inputObjFile std string outputObjFile Sdc SchemeType schemeType int tessUniformRate bool tessQuadsFlag public Args int argc , char argv inputObjFile , outputObjFile , schemeType Sdc SCHEME_CATMARK , tessUniformRate 5 , tessQuadsFlag false for int i 1 i argc i if strstr argv i , .obj if inputObjFile . empty inputObjFile std string argv i else fprintf stderr , Warning Extra Obj file s ignored n , argv i else if strcmp argv i , -o if i argc outputObjFile std string argv i else if strcmp argv i , -bilinear schemeType Sdc SCHEME_BILINEAR else if strcmp argv i , -catmark schemeType Sdc SCHEME_CATMARK else if strcmp argv i , -loop schemeType Sdc SCHEME_LOOP else if strcmp argv i , -res if i argc tessUniformRate atoi argv i else if strcmp argv i , -quads tessQuadsFlag true else fprintf stderr , Warning Unrecognized argument s ignored n , argv i private Args Simple local structs supporting shared points for vertices and edges namespace struct SharedVertex SharedVertex pointIndex -1 bool IsSet const return pointIndex 0 void Set int index pointIndex index int pointIndex struct SharedEdge SharedEdge pointIndex -1 , numPoints 0 bool IsSet const return pointIndex 0 void Set int index , int n pointIndex index , numPoints n int pointIndex int numPoints end namespace The main tessellation function given a mesh and vertex positions, tessellate each face -- writing results in Obj format. This tessellation function differs from earlier tutorials in that it computes and reuses shared points at vertices and edges of the mesh. There are several ways to compute these shared points, and which is best depends on context. Dealing with shared data poses complications for threading in general, so computing all points for the vertices and edges up front may be preferred -- despite the fact that faces will be visited more than once first when generating potentially shared vertex or edge points, and later when generating any interior points. The loops for vertices and edges can be threaded and the indexing of the shared points is simpler. For the single-threaded case here, the faces are each processed in order and any shared points will be computed and used as needed. So each face is visited once and so each Surface initialized once but the bookkeeping to deal with indices of shared points becomes more complicated. void tessellateToObj Far TopologyRefiner const meshTopology , std vector float const meshVertexPositions , Args const options Use simpler local type names for the Surface and its factory typedef Bfr RefinerSurfaceFactory SurfaceFactory typedef Bfr Surface float Surface Initialize the SurfaceFactory for the given base mesh very low cost in terms of both time and space and tessellate each face independently i.e. no shared vertices Note that the SurfaceFactory is not thread-safe by default due to use of an internal cache. Creating a separate instance of the SurfaceFactory for each thread is one way to safely parallelize this loop. Another preferred is to assign a thread-safe cache to the single instance. First declare any evaluation options when initializing though none are used in this simple case SurfaceFactory Options surfaceOptions SurfaceFactory meshSurfaceFactory meshTopology , surfaceOptions The Surface to be constructed and evaluated for each face -- as well as the intermediate and output data associated with it -- can be declared in the scope local to each face. But since dynamic memory is involved with these variables, it is preferred to declare them outside that loop to preserve and reuse that dynamic memory. Surface faceSurface std vector float facePatchPoints std vector float outCoords std vector float outPos , outDu , outDv std vector int outFacets Assign Tessellation Options applied for all faces. Tessellations allow the creating of either 3- or 4-sided faces -- both of which are supported here via a command line option int const tessFacetSize 3 options . tessQuadsFlag Bfr Tessellation Options tessOptions tessOptions . SetFacetSize tessFacetSize tessOptions . PreserveQuads options . tessQuadsFlag Declare vectors to identify shared tessellation points at vertices and edges and their indices around the boundary of a face Far TopologyLevel const baseLevel meshTopology . GetLevel 0 std vector SharedVertex sharedVerts baseLevel . GetNumVertices std vector SharedEdge sharedEdges baseLevel . GetNumEdges std vector int tessBoundaryIndices Process each face, writing the output of each in Obj format tutorial ObjWriter objWriter options . outputObjFile int numMeshPointsEvaluated 0 int numFaces meshSurfaceFactory . GetNumFaces for int faceIndex 0 faceIndex numFaces faceIndex Initialize the Surface for this face -- if valid skipping holes and boundary faces in some rare cases if meshSurfaceFactory . InitVertexSurface faceIndex , faceSurface continue Declare a simple uniform Tessellation for the Parameterization of this face and identify coordinates of the points to evaluate Bfr Tessellation tessPattern faceSurface . GetParameterization , options . tessUniformRate , tessOptions int numOutCoords tessPattern . GetNumCoords outCoords . resize numOutCoords 2 tessPattern . GetCoords outCoords . data Prepare the patch points for the Surface, then use them to evaluate output points for all identified coordinates Resize patch point and output arrays int pointSize 3 facePatchPoints . resize faceSurface . GetNumPatchPoints pointSize outPos . resize numOutCoords pointSize outDu . resize numOutCoords pointSize outDv . resize numOutCoords pointSize Populate the patch point array faceSurface . PreparePatchPoints meshVertexPositions . data , pointSize , facePatchPoints . data , pointSize Evaluate the sample points of the Tessellation First traverse the boundary of the face to determine whether to evaluate or share points on vertices and edges of the face. Both pre-existing and new boundary points are identified by index in an array for later use. The interior points are all trivially computed after the boundary is dealt with. Identify the boundary and interior coords and initialize the index array for the potentially shared boundary points int numBoundaryCoords tessPattern . GetNumBoundaryCoords int numInteriorCoords numOutCoords - numBoundaryCoords float const tessBoundaryCoords outCoords 0 float const tessInteriorCoords outCoords numBoundaryCoords 2 ConstIndexArray fVerts baseLevel . GetFaceVertices faceIndex ConstIndexArray fEdges baseLevel . GetFaceEdges faceIndex tessBoundaryIndices . resize numBoundaryCoords Walk around the face, inspecting each vertex and outgoing edge, and populating the index array of boundary points float patchPointData facePatchPoints . data int boundaryIndex 0 int numFacePointsEvaluated 0 for int i 0 i fVerts . size i Index vertIndex fVerts i Index edgeIndex fEdges i int edgeRate options . tessUniformRate Evaluateassign or retrieve the shared point for the vertex SharedVertex sharedVertex sharedVerts vertIndex if sharedVertex . IsSet Identify indices of the new shared point in both the mesh and face and increment their inventory int indexInMesh numMeshPointsEvaluated int indexInFace numFacePointsEvaluated sharedVertex . Set indexInMesh Evaluate new shared point and assign index to boundary float const uv tessBoundaryCoords boundaryIndex 2 int pIndex indexInFace pointSize faceSurface . Evaluate uv , patchPointData , pointSize , outPos pIndex , outDu pIndex , outDv pIndex tessBoundaryIndices boundaryIndex indexInMesh else Assign shared vertex point index to boundary tessBoundaryIndices boundaryIndex sharedVertex . pointIndex Evaluateassign or retrieve all shared points for the edge To keep this simple, assume the edge is manifold. So the second face sharing the edge has that edge in the opposite direction in its boundary relative to the first face -- making it necessary to reverse the order of shared points for the boundary of the second face. To support a non-manifold edge, all subsequent faces that share the assigned shared edge must determine if their orientation of that edge is reversed relative to the first face for which the shared edge points were evaluated. So a little more book-keeping andor inspection is required. if edgeRate 1 int pointsPerEdge edgeRate - 1 SharedEdge sharedEdge sharedEdges edgeIndex if sharedEdge . IsSet Identify indices of the new shared points in both the mesh and face and increment their inventory int nextInMesh numMeshPointsEvaluated int nextInFace numFacePointsEvaluated numFacePointsEvaluated pointsPerEdge numMeshPointsEvaluated pointsPerEdge sharedEdge . Set nextInMesh , pointsPerEdge Evaluate shared points and assign indices to boundary float const uv tessBoundaryCoords boundaryIndex 2 for int j 0 j pointsPerEdge j , uv 2 int pIndex nextInFace pointSize faceSurface . Evaluate uv , patchPointData , pointSize , outPos pIndex , outDu pIndex , outDv pIndex tessBoundaryIndices boundaryIndex nextInMesh else See note above on simplification for manifold edges assert baseLevel . IsEdgeNonManifold edgeIndex Assign shared points to boundary in reverse order int nextInMesh sharedEdge . pointIndex pointsPerEdge - 1 for int j 0 j pointsPerEdge j tessBoundaryIndices boundaryIndex nextInMesh -- Evaluate any interior points unique to this face -- appending them to those shared points computed above for the boundary if numInteriorCoords float const uv tessInteriorCoords int iLast numFacePointsEvaluated numInteriorCoords for int i numFacePointsEvaluated i iLast i , uv 2 int pIndex i pointSize faceSurface . Evaluate uv , patchPointData , pointSize , outPos pIndex , outDu pIndex , outDv pIndex numFacePointsEvaluated numInteriorCoords numMeshPointsEvaluated numInteriorCoords Remember to trimresize the arrays storing evaluation results for new points to reflect the size actually populated. outPos . resize numFacePointsEvaluated pointSize outDu . resize numFacePointsEvaluated pointSize outDv . resize numFacePointsEvaluated pointSize Identify the faces of the Tessellation Note that the coordinate indices used by the facets are local to the face i.e. they range from 0..N-1, where N is the number of coordinates in the pattern and so need to be offset when writing to Obj format. For more advanced use, the coordinates associated with the boundary and interior of the pattern are distinguishable so that those on the boundary can be easily remapped to refer to shared edge or corner points, while those in the interior can be separately offset or similarly remapped. So transform the indices of the facets here as needed using the indices of shared boundary points assembled above and a suitable offset for the new interior points added int tessInteriorOffset numMeshPointsEvaluated - numOutCoords int numFacets tessPattern . GetNumFacets outFacets . resize numFacets tessFacetSize tessPattern . GetFacets outFacets . data tessPattern . TransformFacetCoordIndices outFacets . data , tessBoundaryIndices . data , tessInteriorOffset Write the evaluated points and faces connecting them as Obj objWriter . WriteGroupName baseFace_ , faceIndex objWriter . WriteVertexPositions outPos objWriter . WriteVertexNormals outDu , outDv objWriter . WriteFaces outFacets , tessFacetSize , true , false Load command line arguments, specified or default geometry and process int main int argc , char argv Args args argc , argv Far TopologyRefiner meshTopology 0 std vector float meshVtxPositions std vector float meshFVarUVs meshTopology tutorial createTopologyRefiner args . inputObjFile , args . schemeType , meshVtxPositions , meshFVarUVs if meshTopology 0 return EXIT_FAILURE tessellateToObj meshTopology , meshVtxPositions , args delete meshTopology return EXIT_SUCCESS ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"bfr_tutorial_2_2.html\"\n }, {\n- \"title\": \"bfr_tutorial_2_1.cpp\",\n- \"text\": \"bfr_tutorial_2_1.cpp bfr_tutorial_2_1.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsbfrtutorial_2_1bfr_tutorial_2_1.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial builds on the previous tutorial that makes use of the SurfaceFactory, Surface and Tessellation classes by illustrating the use of non-uniform tessellation parameters with Tessellation. Tessellation rates for the edges of a face are determined by a length associated with each edge. That length may be computed using either the control hull or the limit surface. The length of a tessellation interval is required and will be inferred if not explicitly specified as a command line option. The tessellation rate for an edge is computed as its length divided by the length of the tessellation interval. A maximum tessellation rate is imposed to prevent accidental unbounded tessellation, but can easily be raised as needed. include opensubdivfartopologyRefiner.h include opensubdivbfrrefinerSurfaceFactory.h include opensubdivbfrsurface.h include opensubdivbfrtessellation.h include vector include string include cstring include cstdio include cmath include algorithm Local headers with support for this tutorial in namespace tutorial include .meshLoader.h include .objWriter.h using namespace OpenSubdiv Simple command line arguments to provide input and run-time options class Args public std string inputObjFile std string outputObjFile Sdc SchemeType schemeType float tessInterval int tessRateMax bool useHullFlag bool tessQuadsFlag public Args int argc , char argv inputObjFile , outputObjFile , schemeType Sdc SCHEME_CATMARK , tessInterval 0.0f , tessRateMax 10 , useHullFlag false , tessQuadsFlag false for int i 1 i argc i if strstr argv i , .obj if inputObjFile . empty inputObjFile std string argv i else fprintf stderr , Warning Extra Obj file s ignored n , argv i else if strcmp argv i , -o if i argc outputObjFile std string argv i else if strcmp argv i , -bilinear schemeType Sdc SCHEME_BILINEAR else if strcmp argv i , -catmark schemeType Sdc SCHEME_CATMARK else if strcmp argv i , -loop schemeType Sdc SCHEME_LOOP else if strcmp argv i , -length if i argc tessInterval float atof argv i else if strcmp argv i , -max if i argc tessRateMax atoi argv i else if strcmp argv i , -hull useHullFlag true else if strcmp argv i , -quads tessQuadsFlag true else fprintf stderr , Warning Unrecognized argument s ignored n , argv i private Args Local trivial functions for simple edge length calculations and the determination of associated tessellation rates inline float EdgeLength float const v0 , float const v1 float dv 3 dv 0 std abs v0 0 - v1 0 dv 1 std abs v0 1 - v1 1 dv 2 std abs v0 2 - v1 2 return std sqrt dv 0 dv 0 dv 1 dv 1 dv 2 dv 2 float FindLongestEdge Far TopologyRefiner const mesh , std vector float const vertPos , int pointSize float maxLength 0.0f int numEdges mesh . GetLevel 0 . GetNumEdges for int i 0 i numEdges i Far ConstIndexArray edgeVerts mesh . GetLevel 0 . GetEdgeVertices i float edgeLength EdgeLength vertPos edgeVerts 0 pointSize , vertPos edgeVerts 1 pointSize maxLength std max maxLength , edgeLength return maxLength void GetEdgeTessRates std vector float const vertPos , int pointSize , Args const options , int edgeRates int numEdges int vertPos . size pointSize for int i 0 i numEdges i int j i 1 numEdges float edgeLength EdgeLength vertPos i pointSize , vertPos j pointSize edgeRates i 1 int edgeLength options . tessInterval edgeRates i std min edgeRates i , options . tessRateMax The main tessellation function given a mesh and vertex positions, tessellate each face -- writing results in Obj format. void tessellateToObj Far TopologyRefiner const meshTopology , std vector float const meshVertexPositions , Args const options Use simpler local type names for the Surface and its factory typedef Bfr RefinerSurfaceFactory SurfaceFactory typedef Bfr Surface float Surface Initialize the SurfaceFactory for the given base mesh very low cost in terms of both time and space and tessellate each face independently i.e. no shared vertices Note that the SurfaceFactory is not thread-safe by default due to use of an internal cache. Creating a separate instance of the SurfaceFactory for each thread is one way to safely parallelize this loop. Another preferred is to assign a thread-safe cache to the single instance. First declare any evaluation options when initializing though none are used in this simple case SurfaceFactory Options surfaceOptions SurfaceFactory meshSurfaceFactory meshTopology , surfaceOptions The Surface to be constructed and evaluated for each face -- as well as the intermediate and output data associated with it -- can be declared in the scope local to each face. But since dynamic memory is involved with these variables, it is preferred to declare them outside that loop to preserve and reuse that dynamic memory. Surface faceSurface std vector float facePatchPoints std vector int faceTessRates std vector float outCoords std vector float outPos , outDu , outDv std vector int outFacets Assign Tessellation Options applied for all faces. Tessellations allow the creating of either 3- or 4-sided faces -- both of which are supported here via a command line option int const tessFacetSize 3 options . tessQuadsFlag Bfr Tessellation Options tessOptions tessOptions . SetFacetSize tessFacetSize tessOptions . PreserveQuads options . tessQuadsFlag Process each face, writing the output of each in Obj format tutorial ObjWriter objWriter options . outputObjFile int numFaces meshSurfaceFactory . GetNumFaces for int faceIndex 0 faceIndex numFaces faceIndex Initialize the Surface for this face -- if valid skipping holes and boundary faces in some rare cases if meshSurfaceFactory . InitVertexSurface faceIndex , faceSurface continue Prepare the Surface patch points first as it may be evaluated to determine suitable edge-rates for Tessellation int pointSize 3 facePatchPoints . resize faceSurface . GetNumPatchPoints pointSize faceSurface . PreparePatchPoints meshVertexPositions . data , pointSize , facePatchPoints . data , pointSize For each of the N edges of the face, a tessellation rate is determined to initialize a non-uniform Tessellation pattern. Many metrics are possible -- some based on the geometry itself size, curvature, others dependent on viewpoint screen space size, center of view, etc. and many more. Simple techniques are chosen here for illustration and can easily be replaced. Here two methods are shown using lengths between the corners of the face -- the first using the vertex positions of the face and the second using points evaluated at the corners of its limit surface. Use of the control hull is more efficient avoiding the evaluation but may prove less effective in some cases though both estimates have their limitations. int N faceSurface . GetFaceSize Use the output array temporarily to hold the N positions outPos . resize N pointSize if options . useHullFlag Far ConstIndexArray verts meshTopology . GetLevel 0 . GetFaceVertices faceIndex for int i 0 , j 0 i N i , j pointSize float const vPos meshVertexPositions verts i pointSize outPos j vPos 0 outPos j 1 vPos 1 outPos j 2 vPos 2 else Bfr Parameterization faceParam faceSurface . GetParameterization for int i 0 , j 0 i N i , j pointSize float uv 2 faceParam . GetVertexCoord i , uv faceSurface . Evaluate uv , facePatchPoints . data , pointSize , outPos j faceTessRates . resize N GetEdgeTessRates outPos , pointSize , options , faceTessRates . data Declare a non-uniform Tessellation using the rates for each edge and identify coordinates of the points to evaluate Additional interior rates can be optionally provided 2 for quads, 1 for others but will be inferred in their absence. Bfr Tessellation tessPattern faceSurface . GetParameterization , N , faceTessRates . data , tessOptions int numOutCoords tessPattern . GetNumCoords outCoords . resize numOutCoords 2 tessPattern . GetCoords outCoords . data Resize the output arrays and evaluate outPos . resize numOutCoords pointSize outDu . resize numOutCoords pointSize outDv . resize numOutCoords pointSize for int i 0 , j 0 i numOutCoords i , j pointSize faceSurface . Evaluate outCoords i 2 , facePatchPoints . data , pointSize , outPos j , outDu j , outDv j Identify the faces of the Tessellation Note the need to offset vertex indices for the output faces -- using the number of vertices generated prior to this face. One of several Tessellation methods to transform the facet indices simply translates all indices by the desired offset. int objVertexIndexOffset objWriter . GetNumVertices int numFacets tessPattern . GetNumFacets outFacets . resize numFacets tessFacetSize tessPattern . GetFacets outFacets . data tessPattern . TransformFacetCoordIndices outFacets . data , objVertexIndexOffset Write the evaluated points and faces connecting them as Obj objWriter . WriteGroupName baseFace_ , faceIndex objWriter . WriteVertexPositions outPos objWriter . WriteVertexNormals outDu , outDv objWriter . WriteFaces outFacets , tessFacetSize , true , false Load command line arguments, specified or default geometry and process int main int argc , char argv Args args argc , argv Far TopologyRefiner meshTopology 0 std vector float meshVtxPositions std vector float meshFVarUVs meshTopology tutorial createTopologyRefiner args . inputObjFile , args . schemeType , meshVtxPositions , meshFVarUVs if meshTopology 0 return EXIT_FAILURE If no interval length was specified, set one by finding the longest edge of the mesh and dividing it by the maximum tessellation rate if args . tessInterval 0.0f args . tessInterval FindLongestEdge meshTopology , meshVtxPositions , 3 float args . tessRateMax tessellateToObj meshTopology , meshVtxPositions , args delete meshTopology return EXIT_SUCCESS ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n+ \"title\": \"bfr_tutorial_3_2.cpp\",\n+ \"text\": \"bfr_tutorial_3_2.cpp bfr_tutorial_3_2.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsbfrtutorial_3_2bfr_tutorial_3_2.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial is a variation of tutorials showing simple uniform tessellation. Rather than constructing and evaluating a Surface at a time, this tutorial shows how Surfaces can be created and saved for repeated use. A simple SurfaceCache class is created that creates and stores the Surface for each face, along with the patch points associated with it. The main tessellation function remains essentially the same, but here it access the Surfaces from the SurfaceCache rather than computing them locally. Note that while this example illustrated the retention of all Surfaces for a mesh, this behavior is not recommended. It does not scale well for large meshes and undermines the memory savings that transient use of Surfaces is designed to achieve. Rather than storing Surfaces for all faces, maintaining a priority queue for a fixed number may be a reasonable compromise. include opensubdivfartopologyRefiner.h include opensubdivbfrrefinerSurfaceFactory.h include opensubdivbfrsurface.h include opensubdivbfrtessellation.h include vector include memory include string include cstring include cstdio Local headers with support for this tutorial in namespace tutorial include .meshLoader.h include .objWriter.h using namespace OpenSubdiv Simple command line arguments to provide input and run-time options class Args public std string inputObjFile std string outputObjFile Sdc SchemeType schemeType int tessUniformRate bool tessQuadsFlag public Args int argc , char argv inputObjFile , outputObjFile , schemeType Sdc SCHEME_CATMARK , tessUniformRate 5 , tessQuadsFlag false for int i 1 i argc i if strstr argv i , .obj if inputObjFile . empty inputObjFile std string argv i else fprintf stderr , Warning Extra Obj file s ignored n , argv i else if strcmp argv i , -o if i argc outputObjFile std string argv i else if strcmp argv i , -bilinear schemeType Sdc SCHEME_BILINEAR else if strcmp argv i , -catmark schemeType Sdc SCHEME_CATMARK else if strcmp argv i , -loop schemeType Sdc SCHEME_LOOP else if strcmp argv i , -res if i argc tessUniformRate atoi argv i else if strcmp argv i , -quads tessQuadsFlag true else fprintf stderr , Warning Unrecognized argument s ignored n , argv i private Args This simple class creates and dispenses Surfaces for all faces of a mesh. It consists primarily of an array of simple structs entries for each face and a single array of patch points for all Surfaces created. There are many ways to create such a cache depending on requirements. This is a simple example, but the interface presents some options that are worth considering. A SurfaceCache is constructed here given the following - a reference to the SurfaceFactory - the cache could just as easily take a reference to the mesh and construct the SurfaceFactory internally - the position data for the mesh - this is needed to compute patch points for the Surfaces - if caching UVs or any other primvar, other data needs to be provided -- along with the interpolation type for that data vertex, face-varying, etc. - option to cache patch points - the cache could store the Surfaces only or also include their patch points - storing patch points takes more memory but will eliminate any preparation time for evaluation of the Surface - option to cache all surfaces - the benefits to caching simple linear or regular surfaces are minimal -- and may even be detrimental - so only caching non-linear irregular surfaces is an option worth considering The SurfaceCache implementation here provides the options noted above. But for simplicity, the actual usage of the SurfaceCache does not deal with the permutations of additional work that is necessary when the Surfaces or their patch points are not cached. class SurfaceCache public typedef Bfr Surface float Surface typedef Bfr RefinerSurfaceFactory SurfaceFactory public SurfaceCache SurfaceFactory const surfaceFactory , std vector float const meshPoints , bool cachePatchPoints true , bool cacheAllSurfaces true SurfaceCache delete SurfaceCache default Public methods to retrieved cached Surfaces and their pre-computed patch points bool FaceHasLimitSurface int face return _entries face . hasLimit Surface const GetSurface int face return _entries face . surface . get float const GetPatchPoints int face return getPatchPoints face private Simple struct to keep track of Surface and more for each face struct FaceEntry FaceEntry surface , hasLimit false , pointOffset -1 std unique_ptr Surface const surface bool hasLimit int pointOffset Non-const version to be used internally to aide assignment float getPatchPoints int face return _entries face . surface _points . empty _points . data _entries face . pointOffset 3 0 private std vector FaceEntry _entries std vector float _points SurfaceCache SurfaceCache SurfaceFactory const surfaceFactory , std vector float const meshPoints , bool cachePatchPoints , bool cacheAllSurfaces int numFaces surfaceFactory . GetNumFaces _entries . resize numFaces int numPointsInCache 0 for int face 0 face numFaces face Surface s surfaceFactory . CreateVertexSurface float face if s FaceEntry entry _entries face entry . hasLimit true if cacheAllSurfaces s - IsRegular s - IsLinear entry . surface . reset s entry . pointOffset numPointsInCache numPointsInCache s - GetNumPatchPoints else delete s if cachePatchPoints _points . resize numPointsInCache 3 for int face 0 face numFaces face float patchPoints getPatchPoints face if patchPoints GetSurface face - PreparePatchPoints meshPoints . data , 3 , patchPoints , 3 The main tessellation function given a mesh and vertex positions, tessellate each face -- writing results in Obj format. void tessellateToObj Far TopologyRefiner const meshTopology , std vector float const meshVertexPositions , Args const options Use simpler local type names for the Surface and its factory typedef Bfr RefinerSurfaceFactory SurfaceFactory typedef Bfr Surface float Surface Initialize the SurfaceFactory for the given base mesh very low cost in terms of both time and space and tessellate each face independently i.e. no shared vertices Note that the SurfaceFactory is not thread-safe by default due to use of an internal cache. Creating a separate instance of the SurfaceFactory for each thread is one way to safely parallelize this loop. Another preferred is to assign a thread-safe cache to the single instance. First declare any evaluation options when initializing though none are used in this simple case SurfaceFactory Options surfaceOptions SurfaceFactory meshSurfaceFactory meshTopology , surfaceOptions Initialize a SurfaceCache to construct Surfaces for all faces. From this point forward the SurfaceFactory is no longer used to access Surfaces. Note also that usage below is specific to the options used to initialize the SurfaceCache bool cachePatchPoints true bool cacheAllSurfaces true SurfaceCache surfaceCache meshSurfaceFactory , meshVertexPositions , cachePatchPoints , cacheAllSurfaces As with previous tutorials, output data associated with the face can be declared in the scope local to each face. But since dynamic memory is involved with these variables, it is preferred to declare them outside that loop to preserve and reuse that dynamic memory. std vector float outCoords std vector float outPos , outDu , outDv std vector int outFacets Assign Tessellation Options applied for all faces. Tessellations allow the creating of either 3- or 4-sided faces -- both of which are supported here via a command line option int const tessFacetSize 3 options . tessQuadsFlag Bfr Tessellation Options tessOptions tessOptions . SetFacetSize tessFacetSize tessOptions . PreserveQuads options . tessQuadsFlag Process each face, writing the output of each in Obj format tutorial ObjWriter objWriter options . outputObjFile int numFaces meshSurfaceFactory . GetNumFaces for int faceIndex 0 faceIndex numFaces faceIndex Retrieve the Surface for this face when present if surfaceCache . FaceHasLimitSurface faceIndex continue Surface const faceSurface surfaceCache . GetSurface faceIndex Declare a simple uniform Tessellation for the Parameterization of this face and identify coordinates of the points to evaluate Bfr Tessellation tessPattern faceSurface . GetParameterization , options . tessUniformRate , tessOptions int numOutCoords tessPattern . GetNumCoords outCoords . resize numOutCoords 2 tessPattern . GetCoords outCoords . data Retrieve the patch points for the Surface, then use them to evaluate output points for all identified coordinates float const facePatchPoints surfaceCache . GetPatchPoints faceIndex int pointSize 3 outPos . resize numOutCoords pointSize outDu . resize numOutCoords pointSize outDv . resize numOutCoords pointSize for int i 0 , j 0 i numOutCoords i , j pointSize faceSurface . Evaluate outCoords i 2 , facePatchPoints , pointSize , outPos j , outDu j , outDv j Identify the faces of the Tessellation Note the need to offset vertex indices for the output faces -- using the number of vertices generated prior to this face. One of several Tessellation methods to transform the facet indices simply translates all indices by the desired offset. int objVertexIndexOffset objWriter . GetNumVertices int numFacets tessPattern . GetNumFacets outFacets . resize numFacets tessFacetSize tessPattern . GetFacets outFacets . data tessPattern . TransformFacetCoordIndices outFacets . data , objVertexIndexOffset Write the evaluated points and faces connecting them as Obj objWriter . WriteGroupName baseFace_ , faceIndex objWriter . WriteVertexPositions outPos objWriter . WriteVertexNormals outDu , outDv objWriter . WriteFaces outFacets , tessFacetSize , true , false Load command line arguments, specified or default geometry and process int main int argc , char argv Args args argc , argv Far TopologyRefiner meshTopology 0 std vector float meshVtxPositions std vector float meshFVarUVs meshTopology tutorial createTopologyRefiner args . inputObjFile , args . schemeType , meshVtxPositions , meshFVarUVs if meshTopology 0 return EXIT_FAILURE tessellateToObj meshTopology , meshVtxPositions , args delete meshTopology return EXIT_SUCCESS ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n- \"loc\": \"bfr_tutorial_2_1.html\"\n+ \"loc\": \"bfr_tutorial_3_2.html\"\n+ }, {\n+ \"title\": \"bfr_tutorial_3_1.cpp\",\n+ \"text\": \"bfr_tutorial_3_1.cpp bfr_tutorial_3_1.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsbfrtutorial_3_1bfr_tutorial_3_1.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial illustrates the definition of a custom subclass of BfrSurfaceFactory -- providing a class with the SurfaceFactory interface adapted to a connected mesh representation. The bulk of this code is therefore identical to a previous tutorial 1.3 which illustrates simple use of a BfrSurface factory. The only difference here lies in the explicit local definition of the subclass of BfrSurfaceFactory for FarTopologyRefiner -- named CustomSurfaceFactory in this case. include .customSurfaceFactory.h include opensubdivfartopologyRefiner.h include opensubdivbfrsurface.h include opensubdivbfrtessellation.h include vector include string include cstring include cstdio Local headers with support for this tutorial in namespace tutorial include .meshLoader.h include .objWriter.h using namespace OpenSubdiv Simple command line arguments to provide input and run-time options class Args public std string inputObjFile std string outputObjFile Sdc SchemeType schemeType int tessUniformRate bool tessQuadsFlag bool uv2xyzFlag public Args int argc , char argv inputObjFile , outputObjFile , schemeType Sdc SCHEME_CATMARK , tessUniformRate 5 , tessQuadsFlag false , uv2xyzFlag false for int i 1 i argc i if strstr argv i , .obj if inputObjFile . empty inputObjFile std string argv i else fprintf stderr , Warning Extra Obj file s ignored n , argv i else if strcmp argv i , -o if i argc outputObjFile std string argv i else if strcmp argv i , -bilinear schemeType Sdc SCHEME_BILINEAR else if strcmp argv i , -catmark schemeType Sdc SCHEME_CATMARK else if strcmp argv i , -loop schemeType Sdc SCHEME_LOOP else if strcmp argv i , -res if i argc tessUniformRate atoi argv i else if strcmp argv i , -quads tessQuadsFlag true else if strcmp argv i , -uv2xyz uv2xyzFlag true else fprintf stderr , Warning Unrecognized argument s ignored n , argv i private Args The main tessellation function given a mesh and vertex positions, tessellate each face -- writing results in Obj format. void tessellateToObj Far TopologyRefiner const meshTopology , std vector float const meshVertexPositions , std vector float const meshFaceVaryingUVs , Args const options Use simpler local type names for the Surface and its factory typedef CustomSurfaceFactory SurfaceFactory typedef Bfr Surface float Surface Initialize the SurfaceFactory for the given base mesh very low cost in terms of both time and space and tessellate each face independently i.e. no shared vertices Note that the SurfaceFactory is not thread-safe by default due to use of an internal cache. Creating a separate instance of the SurfaceFactory for each thread is one way to safely parallelize this loop. Another preferred is to assign a thread-safe cache to the single instance. First declare any evaluation options when initializing When dealing with face-varying data, an identifier is necessary when constructing Surfaces in order to distinguish the different face-varying data channels. To avoid repeatedly specifying that identifier when only one is present or of interest, it can be specified via the Options. bool meshHasUVs meshTopology . GetNumFVarChannels 0 SurfaceFactory Options surfaceOptions if meshHasUVs surfaceOptions . SetDefaultFVarID 0 SurfaceFactory surfaceFactory meshTopology , surfaceOptions The Surface to be constructed and evaluated for each face -- as well as the intermediate and output data associated with it -- can be declared in the scope local to each face. But since dynamic memory is involved with these variables, it is preferred to declare them outside that loop to preserve and reuse that dynamic memory. Surface posSurface Surface uvSurface std vector float facePatchPoints std vector float outCoords std vector float outPos , outDu , outDv std vector float outUV std vector int outFacets Assign Tessellation Options applied for all faces. Tessellations allow the creating of either 3- or 4-sided faces -- both of which are supported here via a command line option int const tessFacetSize 3 options . tessQuadsFlag Bfr Tessellation Options tessOptions tessOptions . SetFacetSize tessFacetSize tessOptions . PreserveQuads options . tessQuadsFlag Process each face, writing the output of each in Obj format tutorial ObjWriter objWriter options . outputObjFile int numFaces surfaceFactory . GetNumFaces for int faceIndex 0 faceIndex numFaces faceIndex Initialize the Surfaces for position and UVs of this face. There are two ways to do this -- both illustrated here Creating Surfaces for the different data interpolation types independently is clear and convenient, but considerable work may be duplicated in the construction process in the case of non-linear face-varying Surfaces. So unless it is known that face-varying interpolation is linear, use of InitSurfaces is generally preferred. Remember also that the face-varying identifier is omitted from the initialization methods here as it was previously assigned to the SurfaceFactoryOptions. In the absence of an assignment of the default FVarID to the Options, a failure to specify the FVarID here will result in failure. The cases below are expanded for illustration purposes, and validity of the resulting Surface is tested here, rather than the return value of initialization methods. bool createSurfacesTogether true if meshHasUVs surfaceFactory . InitVertexSurface faceIndex , posSurface else if createSurfacesTogether surfaceFactory . InitSurfaces faceIndex , posSurface , uvSurface else if surfaceFactory . InitVertexSurface faceIndex , posSurface surfaceFactory . InitFaceVaryingSurface faceIndex , uvSurface if posSurface . IsValid continue Declare a simple uniform Tessellation for the Parameterization of this face and identify coordinates of the points to evaluate Bfr Tessellation tessPattern posSurface . GetParameterization , options . tessUniformRate , tessOptions int numOutCoords tessPattern . GetNumCoords outCoords . resize numOutCoords 2 tessPattern . GetCoords outCoords . data Prepare the patch points for the Surface, then use them to evaluate output points for all identified coordinates Evaluate vertex positions Resize patch point and output arrays int pointSize 3 facePatchPoints . resize posSurface . GetNumPatchPoints pointSize outPos . resize numOutCoords pointSize outDu . resize numOutCoords pointSize outDv . resize numOutCoords pointSize Populate patch point and output arrays posSurface . PreparePatchPoints meshVertexPositions . data , pointSize , facePatchPoints . data , pointSize for int i 0 , j 0 i numOutCoords i , j pointSize posSurface . Evaluate outCoords i 2 , facePatchPoints . data , pointSize , outPos j , outDu j , outDv j Evaluate face-varying UVs when present if meshHasUVs Resize patch point and output arrays - note reuse of the same patch point array as position int pointSize 2 facePatchPoints . resize uvSurface . GetNumPatchPoints pointSize outUV . resize numOutCoords pointSize Populate patch point and output arrays uvSurface . PreparePatchPoints meshFaceVaryingUVs . data , pointSize , facePatchPoints . data , pointSize for int i 0 , j 0 i numOutCoords i , j pointSize uvSurface . Evaluate outCoords i 2 , facePatchPoints . data , pointSize , outUV j Identify the faces of the Tessellation Note the need to offset vertex indices for the output faces -- using the number of vertices generated prior to this face. One of several Tessellation methods to transform the facet indices simply translates all indices by the desired offset. int objVertexIndexOffset objWriter . GetNumVertices int numFacets tessPattern . GetNumFacets outFacets . resize numFacets tessFacetSize tessPattern . GetFacets outFacets . data tessPattern . TransformFacetCoordIndices outFacets . data , objVertexIndexOffset Write the evaluated points and faces connecting them as Obj objWriter . WriteGroupName baseFace_ , faceIndex if meshHasUVs options . uv2xyzFlag objWriter . WriteVertexPositions outUV , 2 objWriter . WriteFaces outFacets , tessFacetSize , false , false else objWriter . WriteVertexPositions outPos objWriter . WriteVertexNormals outDu , outDv if meshHasUVs objWriter . WriteVertexUVs outUV objWriter . WriteFaces outFacets , tessFacetSize , true , meshHasUVs Load command line arguments, specified or default geometry and process int main int argc , char argv Args args argc , argv Far TopologyRefiner meshTopology 0 std vector float meshVtxPositions std vector float meshFVarUVs meshTopology tutorial createTopologyRefiner args . inputObjFile , args . schemeType , meshVtxPositions , meshFVarUVs if meshTopology 0 return EXIT_FAILURE tessellateToObj meshTopology , meshVtxPositions , meshFVarUVs , args delete meshTopology return EXIT_SUCCESS ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n+ \"tags\": \"\",\n+ \"loc\": \"bfr_tutorial_3_1.html\"\n }, {\n \"title\": \"bfr_tutorial_1_5.cpp\",\n \"text\": \"bfr_tutorial_1_5.cpp bfr_tutorial_1_5.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsbfrtutorial_1_5bfr_tutorial_1_5.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial is an alternative to an earlier tutorial that showed uniform tessellation. This version differs by evaluating the points of the tessellation using limit stencils instead of the standard Surface evaluation methods. Limit stencils factor the evaluation into a set of coefficients for each control point affecting the Surface. include opensubdivfartopologyRefiner.h include opensubdivbfrrefinerSurfaceFactory.h include opensubdivbfrsurface.h include opensubdivbfrtessellation.h include vector include string include cstring include cstdio Local headers with support for this tutorial in namespace tutorial include .meshLoader.h include .objWriter.h using namespace OpenSubdiv Simple command line arguments to provide input and run-time options class Args public std string inputObjFile std string outputObjFile Sdc SchemeType schemeType int tessUniformRate bool tessQuadsFlag public Args int argc , char argv inputObjFile , outputObjFile , schemeType Sdc SCHEME_CATMARK , tessUniformRate 5 , tessQuadsFlag false for int i 1 i argc i if strstr argv i , .obj if inputObjFile . empty inputObjFile std string argv i else fprintf stderr , Warning Extra Obj file s ignored n , argv i else if strcmp argv i , -o if i argc outputObjFile std string argv i else if strcmp argv i , -bilinear schemeType Sdc SCHEME_BILINEAR else if strcmp argv i , -catmark schemeType Sdc SCHEME_CATMARK else if strcmp argv i , -loop schemeType Sdc SCHEME_LOOP else if strcmp argv i , -res if i argc tessUniformRate atoi argv i else if strcmp argv i , -quads tessQuadsFlag true else fprintf stderr , Warning Unrecognized argument s ignored n , argv i private Args The main tessellation function given a mesh and vertex positions, tessellate each face -- writing results in Obj format. void tessellateToObj Far TopologyRefiner const meshTopology , std vector float const meshVertexPositions , Args const options Use simpler local type names for the Surface and its factory typedef Bfr RefinerSurfaceFactory SurfaceFactory typedef Bfr Surface float Surface Initialize the SurfaceFactory for the given base mesh very low cost in terms of both time and space and tessellate each face independently i.e. no shared vertices Note that the SurfaceFactory is not thread-safe by default due to use of an internal cache. Creating a separate instance of the SurfaceFactory for each thread is one way to safely parallelize this loop. Another preferred is to assign a thread-safe cache to the single instance. First declare any evaluation options when initializing though none are used in this simple case SurfaceFactory Options surfaceOptions SurfaceFactory meshSurfaceFactory meshTopology , surfaceOptions The Surface to be constructed and evaluated for each face -- as well as the intermediate and output data associated with it -- can be declared in the scope local to each face. But since dynamic memory is involved with these variables, it is preferred to declare them outside that loop to preserve and reuse that dynamic memory. Surface faceSurface std vector float faceControlPoints std vector float limitStencils std vector float outCoords std vector float outPos , outDu , outDv std vector int outFacets Assign Tessellation Options applied for all faces. Tessellations allow the creating of either 3- or 4-sided faces -- both of which are supported here via a command line option int const tessFacetSize 3 options . tessQuadsFlag Bfr Tessellation Options tessOptions tessOptions . SetFacetSize tessFacetSize tessOptions . PreserveQuads options . tessQuadsFlag Process each face, writing the output of each in Obj format tutorial ObjWriter objWriter options . outputObjFile int numFaces meshSurfaceFactory . GetNumFaces for int faceIndex 0 faceIndex numFaces faceIndex Initialize the Surface for this face -- if valid skipping holes and boundary faces in some rare cases if meshSurfaceFactory . InitVertexSurface faceIndex , faceSurface continue Resize stencils and control point arrays based on the number of control points for the Surface int numControlPoints faceSurface . GetNumControlPoints limitStencils . resize 3 numControlPoints float pStencil limitStencils . data float duStencil limitStencils . data numControlPoints float dvStencil limitStencils . data numControlPoints 2 Limit stencils can be applied using the control points in a local array or directy from the mesh. Both are shown here, so if using the local array, resize and populate it bool gatherControlPoints true if gatherControlPoints faceControlPoints . resize numControlPoints 3 faceSurface . GatherControlPoints meshVertexPositions . data , 3 , faceControlPoints . data , 3 Declare a simple uniform Tessellation for the Parameterization of this face and identify coordinates of the points to evaluate Bfr Tessellation tessPattern faceSurface . GetParameterization , options . tessUniformRate , tessOptions int numOutCoords tessPattern . GetNumCoords outCoords . resize numOutCoords 2 tessPattern . GetCoords outCoords . data Evaluate and apply stencils to compute points of the tessellation outPos . resize numOutCoords 3 outDu . resize numOutCoords 3 outDv . resize numOutCoords 3 for int i 0 i numOutCoords i float const uv outCoords . data i 2 faceSurface . EvaluateStencil uv , pStencil , duStencil , dvStencil float p outPos . data i 3 float du outDu . data i 3 float dv outDv . data i 3 if gatherControlPoints float const controlPoints faceControlPoints . data faceSurface . ApplyStencil pStencil , controlPoints , 3 , p faceSurface . ApplyStencil duStencil , controlPoints , 3 , du faceSurface . ApplyStencil dvStencil , controlPoints , 3 , dv else float const meshPoints meshVertexPositions . data faceSurface . ApplyStencilFromMesh pStencil , meshPoints , 3 , p faceSurface . ApplyStencilFromMesh duStencil , meshPoints , 3 , du faceSurface . ApplyStencilFromMesh dvStencil , meshPoints , 3 , dv Identify the faces of the Tessellation Note the need to offset vertex indices for the output faces -- using the number of vertices generated prior to this face. One of several Tessellation methods to transform the facet indices simply translates all indices by the desired offset. int objVertexIndexOffset objWriter . GetNumVertices int numFacets tessPattern . GetNumFacets outFacets . resize numFacets tessFacetSize tessPattern . GetFacets outFacets . data tessPattern . TransformFacetCoordIndices outFacets . data , objVertexIndexOffset Write the evaluated points and faces connecting them as Obj objWriter . WriteGroupName baseFace_ , faceIndex objWriter . WriteVertexPositions outPos objWriter . WriteVertexNormals outDu , outDv objWriter . WriteFaces outFacets , tessFacetSize , true , false Load command line arguments, specified or default geometry and process int main int argc , char argv Args args argc , argv Far TopologyRefiner meshTopology 0 std vector float meshVtxPositions std vector float meshFVarUVs meshTopology tutorial createTopologyRefiner args . inputObjFile , args . schemeType , meshVtxPositions , meshFVarUVs if meshTopology 0 return EXIT_FAILURE tessellateToObj meshTopology , meshVtxPositions , args delete meshTopology return EXIT_SUCCESS ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"bfr_tutorial_1_5.html\"\n }, {\n- \"title\": \"bfr_tutorial_1_1.cpp\",\n- \"text\": \"bfr_tutorial_1_1.cpp bfr_tutorial_1_1.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsbfrtutorial_1_1bfr_tutorial_1_1.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial illustrates the use of the SurfaceFactory, Surface and Parameterization classes for creating and evaluating the limit surface associated with each base face of a mesh. Following the creation of a connected mesh for a shape using a FarTopologyRefiner, as illustrated in Far tutorials, an instance of a SurfaceFactory is declared to process its faces. Each face of the mesh is evaluated and tessellated independently with a simple triangle fan, with results written out in Obj format for inspection. These classes make it simple to evaluate and tessellate all faces quads, tris or others while supporting the full set of subdivision options. While a triangle fan may be a trivial tessellation and so not very useful later examples using the Tessellation class provide more useful results with the same simplicity. include opensubdivfartopologyRefiner.h include opensubdivbfrrefinerSurfaceFactory.h include opensubdivbfrsurface.h include vector include string include cstring include cstdio Local headers with support for this tutorial in namespace tutorial include .meshLoader.h include .objWriter.h using namespace OpenSubdiv Simple command line arguments to provide input and run-time options class Args public std string inputObjFile std string outputObjFile Sdc SchemeType schemeType public Args int argc , char argv inputObjFile , outputObjFile , schemeType Sdc SCHEME_CATMARK for int i 1 i argc i if strstr argv i , .obj if inputObjFile . empty inputObjFile std string argv i else fprintf stderr , Warning Extra Obj file s ignored n , argv i else if strcmp argv i , -o if i argc outputObjFile std string argv i else if strcmp argv i , -bilinear schemeType Sdc SCHEME_BILINEAR else if strcmp argv i , -catmark schemeType Sdc SCHEME_CATMARK else if strcmp argv i , -loop schemeType Sdc SCHEME_LOOP else fprintf stderr , Warning Unrecognized argument s ignored n , argv i private Args The main tessellation function given a mesh and vertex positions, tessellate each face -- writing results in Obj format. void tessellateToObj Far TopologyRefiner const meshTopology , std vector float const meshVertexPositions , Args const options Use simpler local type names for the Surface and its factory typedef Bfr RefinerSurfaceFactory SurfaceFactory typedef Bfr Surface float Surface Initialize the SurfaceFactory for the given base mesh very low cost in terms of both time and space and tessellate each face independently i.e. no shared vertices Note that the SurfaceFactory is not thread-safe by default due to use of an internal cache. Creating a separate instance of the SurfaceFactory for each thread is one way to safely parallelize this loop. Another preferred is to assign a thread-safe cache to the single instance. First declare any evaluation options when initializing though none are used in this simple case SurfaceFactory Options surfaceOptions SurfaceFactory meshSurfaceFactory meshTopology , surfaceOptions The Surface to be constructed and evaluated for each face -- as well as the intermediate and output data associated with it -- can be declared in the scope local to each face. But since dynamic memory is involved with these variables, it is preferred to declare them outside that loop to preserve and reuse that dynamic memory. Surface faceSurface std vector float facePatchPoints std vector float outCoords std vector float outPos , outDu , outDv std vector int outTriangles Process each face, writing the output of each in Obj format tutorial ObjWriter objWriter options . outputObjFile int numFaces meshSurfaceFactory . GetNumFaces for int faceIndex 0 faceIndex numFaces faceIndex Initialize the Surface for this face -- if valid skipping holes and boundary faces in some rare cases if meshSurfaceFactory . InitVertexSurface faceIndex , faceSurface continue Get the Parameterization of the Surface and use it to identify coordinates for evaluation -- in this case, at the vertices and center of the face to create a fan of triangles Bfr Parameterization faceParam faceSurface . GetParameterization int faceSize faceParam . GetFaceSize int numOutCoords faceSize 1 outCoords . resize numOutCoords 2 for int i 0 i faceSize i faceParam . GetVertexCoord i , outCoords i 2 faceParam . GetCenterCoord outCoords faceSize 2 Prepare the patch points for the Surface, then use them to evaluate output points for all identified coordinates Resize patch point and output arrays int pointSize 3 facePatchPoints . resize faceSurface . GetNumPatchPoints pointSize outPos . resize numOutCoords pointSize outDu . resize numOutCoords pointSize outDv . resize numOutCoords pointSize Populate patch point and output arrays faceSurface . PreparePatchPoints meshVertexPositions . data , pointSize , facePatchPoints . data , pointSize for int i 0 , j 0 i numOutCoords i , j pointSize faceSurface . Evaluate outCoords i 2 , facePatchPoints . data , pointSize , outPos j , outDu j , outDv j Identify the faces of the tessellation, i.e. the triangle fan connecting points at the vertices to the center last point Note the need to offset vertex indices for the output faces -- using the number of vertices generated prior to this face. int objVertexIndexOffset objWriter . GetNumVertices outTriangles . resize faceSize 3 int outTriangle outTriangles . data for int i 0 i faceSize i , outTriangle 3 outTriangle 0 objVertexIndexOffset i outTriangle 1 objVertexIndexOffset i 1 faceSize outTriangle 2 objVertexIndexOffset faceSize Write the evaluated points and faces connecting them as Obj objWriter . WriteGroupName baseFace_ , faceIndex objWriter . WriteVertexPositions outPos objWriter . WriteVertexNormals outDu , outDv objWriter . WriteFaces outTriangles , 3 , true , false Load command line arguments, specified or default geometry and process int main int argc , char argv Args args argc , argv Far TopologyRefiner meshTopology 0 std vector float meshVtxPositions std vector float meshFVarUVs meshTopology tutorial createTopologyRefiner args . inputObjFile , args . schemeType , meshVtxPositions , meshFVarUVs if meshTopology 0 return EXIT_FAILURE tessellateToObj meshTopology , meshVtxPositions , args delete meshTopology return EXIT_SUCCESS ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n- \"tags\": \"\",\n- \"loc\": \"bfr_tutorial_1_1.html\"\n- }, {\n \"title\": \"bfr_tutorial_1_3.cpp\",\n \"text\": \"bfr_tutorial_1_3.cpp bfr_tutorial_1_3.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsbfrtutorial_1_3bfr_tutorial_1_3.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial builds on the previous tutorial that makes use of the SurfaceFactory, Surface and Tessellation classes for evaluating and tessellating the limit surface of faces of a mesh by adding support for the evaluation of face-varying UVs. If UVs exist in the given mesh, they will be evaluated and included with the vertex positions and normals previously illustrated as part of the tessellation written to the Obj file. include opensubdivfartopologyRefiner.h include opensubdivbfrrefinerSurfaceFactory.h include opensubdivbfrsurface.h include opensubdivbfrtessellation.h include vector include string include cstring include cstdio Local headers with support for this tutorial in namespace tutorial include .meshLoader.h include .objWriter.h using namespace OpenSubdiv Simple command line arguments to provide input and run-time options class Args public std string inputObjFile std string outputObjFile Sdc SchemeType schemeType int tessUniformRate bool tessQuadsFlag bool uv2xyzFlag public Args int argc , char argv inputObjFile , outputObjFile , schemeType Sdc SCHEME_CATMARK , tessUniformRate 5 , tessQuadsFlag false , uv2xyzFlag false for int i 1 i argc i if strstr argv i , .obj if inputObjFile . empty inputObjFile std string argv i else fprintf stderr , Warning Extra Obj file s ignored n , argv i else if strcmp argv i , -o if i argc outputObjFile std string argv i else if strcmp argv i , -bilinear schemeType Sdc SCHEME_BILINEAR else if strcmp argv i , -catmark schemeType Sdc SCHEME_CATMARK else if strcmp argv i , -loop schemeType Sdc SCHEME_LOOP else if strcmp argv i , -res if i argc tessUniformRate atoi argv i else if strcmp argv i , -quads tessQuadsFlag true else if strcmp argv i , -uv2xyz uv2xyzFlag true else fprintf stderr , Warning Unrecognized argument s ignored n , argv i private Args The main tessellation function given a mesh and vertex positions, tessellate each face -- writing results in Obj format. void tessellateToObj Far TopologyRefiner const meshTopology , std vector float const meshVertexPositions , std vector float const meshFaceVaryingUVs , Args const options Use simpler local type names for the Surface and its factory typedef Bfr RefinerSurfaceFactory SurfaceFactory typedef Bfr Surface float Surface Initialize the SurfaceFactory for the given base mesh very low cost in terms of both time and space and tessellate each face independently i.e. no shared vertices Note that the SurfaceFactory is not thread-safe by default due to use of an internal cache. Creating a separate instance of the SurfaceFactory for each thread is one way to safely parallelize this loop. Another preferred is to assign a thread-safe cache to the single instance. First declare any evaluation options when initializing When dealing with face-varying data, an identifier is necessary when constructing Surfaces in order to distinguish the different face-varying data channels. To avoid repeatedly specifying that identifier when only one is present or of interest, it can be specified via the Options. bool meshHasUVs meshTopology . GetNumFVarChannels 0 SurfaceFactory Options surfaceOptions if meshHasUVs surfaceOptions . SetDefaultFVarID 0 SurfaceFactory surfaceFactory meshTopology , surfaceOptions The Surface to be constructed and evaluated for each face -- as well as the intermediate and output data associated with it -- can be declared in the scope local to each face. But since dynamic memory is involved with these variables, it is preferred to declare them outside that loop to preserve and reuse that dynamic memory. Surface posSurface Surface uvSurface std vector float facePatchPoints std vector float outCoords std vector float outPos , outDu , outDv std vector float outUV std vector int outFacets Assign Tessellation Options applied for all faces. Tessellations allow the creating of either 3- or 4-sided faces -- both of which are supported here via a command line option int const tessFacetSize 3 options . tessQuadsFlag Bfr Tessellation Options tessOptions tessOptions . SetFacetSize tessFacetSize tessOptions . PreserveQuads options . tessQuadsFlag Process each face, writing the output of each in Obj format tutorial ObjWriter objWriter options . outputObjFile int numFaces surfaceFactory . GetNumFaces for int faceIndex 0 faceIndex numFaces faceIndex Initialize the Surfaces for position and UVs of this face. There are two ways to do this -- both illustrated here Creating Surfaces for the different data interpolation types independently is clear and convenient, but considerable work may be duplicated in the construction process in the case of non-linear face-varying Surfaces. So unless it is known that face-varying interpolation is linear, use of InitSurfaces is generally preferred. Remember also that the face-varying identifier is omitted from the initialization methods here as it was previously assigned to the SurfaceFactoryOptions. In the absence of an assignment of the default FVarID to the Options, a failure to specify the FVarID here will result in failure. The cases below are expanded for illustration purposes, and validity of the resulting Surface is tested here, rather than the return value of initialization methods. bool createSurfacesTogether true if meshHasUVs surfaceFactory . InitVertexSurface faceIndex , posSurface else if createSurfacesTogether surfaceFactory . InitSurfaces faceIndex , posSurface , uvSurface else if surfaceFactory . InitVertexSurface faceIndex , posSurface surfaceFactory . InitFaceVaryingSurface faceIndex , uvSurface if posSurface . IsValid continue Declare a simple uniform Tessellation for the Parameterization of this face and identify coordinates of the points to evaluate Bfr Tessellation tessPattern posSurface . GetParameterization , options . tessUniformRate , tessOptions int numOutCoords tessPattern . GetNumCoords outCoords . resize numOutCoords 2 tessPattern . GetCoords outCoords . data Prepare the patch points for the Surface, then use them to evaluate output points for all identified coordinates Evaluate vertex positions Resize patch point and output arrays int pointSize 3 facePatchPoints . resize posSurface . GetNumPatchPoints pointSize outPos . resize numOutCoords pointSize outDu . resize numOutCoords pointSize outDv . resize numOutCoords pointSize Populate patch point and output arrays posSurface . PreparePatchPoints meshVertexPositions . data , pointSize , facePatchPoints . data , pointSize for int i 0 , j 0 i numOutCoords i , j pointSize posSurface . Evaluate outCoords i 2 , facePatchPoints . data , pointSize , outPos j , outDu j , outDv j Evaluate face-varying UVs when present if meshHasUVs Resize patch point and output arrays - note reuse of the same patch point array as position int pointSize 2 facePatchPoints . resize uvSurface . GetNumPatchPoints pointSize outUV . resize numOutCoords pointSize Populate patch point and output arrays uvSurface . PreparePatchPoints meshFaceVaryingUVs . data , pointSize , facePatchPoints . data , pointSize for int i 0 , j 0 i numOutCoords i , j pointSize uvSurface . Evaluate outCoords i 2 , facePatchPoints . data , pointSize , outUV j Identify the faces of the Tessellation Note the need to offset vertex indices for the output faces -- using the number of vertices generated prior to this face. One of several Tessellation methods to transform the facet indices simply translates all indices by the desired offset. int objVertexIndexOffset objWriter . GetNumVertices int numFacets tessPattern . GetNumFacets outFacets . resize numFacets tessFacetSize tessPattern . GetFacets outFacets . data tessPattern . TransformFacetCoordIndices outFacets . data , objVertexIndexOffset Write the evaluated points and faces connecting them as Obj objWriter . WriteGroupName baseFace_ , faceIndex if meshHasUVs options . uv2xyzFlag objWriter . WriteVertexPositions outUV , 2 objWriter . WriteFaces outFacets , tessFacetSize , false , false else objWriter . WriteVertexPositions outPos objWriter . WriteVertexNormals outDu , outDv if meshHasUVs objWriter . WriteVertexUVs outUV objWriter . WriteFaces outFacets , tessFacetSize , true , meshHasUVs Load command line arguments, specified or default geometry and process int main int argc , char argv Args args argc , argv Far TopologyRefiner meshTopology 0 std vector float meshVtxPositions std vector float meshFVarUVs meshTopology tutorial createTopologyRefiner args . inputObjFile , args . schemeType , meshVtxPositions , meshFVarUVs if meshTopology 0 return EXIT_FAILURE tessellateToObj meshTopology , meshVtxPositions , meshFVarUVs , args delete meshTopology return EXIT_SUCCESS ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"bfr_tutorial_1_3.html\"\n }, {\n \"title\": \"bfr_tutorial_1_4.cpp\",\n \"text\": \"bfr_tutorial_1_4.cpp bfr_tutorial_1_4.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsbfrtutorial_1_4bfr_tutorial_1_4.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial builds on the previous tutorial that makes use of the SurfaceFactory, Surface and Tessellation classes for evaluating and tessellating the limit surface of faces of a mesh by illustrating how the presence of additional data in the mesh arrays is handled. As in the previous tutorial, vertex positions and face-varying UVs are provided with the mesh to be evaluated. But here an additional color is interleaved with the position in the vertex data of the mesh and a third component is added to face-varying UV data making it u,v,w. To evaluate the position and 2D UVs while avoiding the color and unused third UV coordinate, the SurfacePointDescriptor class is used to describe the size and stride of the desired data to be evaluated in the arrays of mesh data. include opensubdivfartopologyRefiner.h include opensubdivbfrrefinerSurfaceFactory.h include opensubdivbfrsurface.h include opensubdivbfrtessellation.h include vector include string include cstring include cstdio Local headers with support for this tutorial in namespace tutorial include .meshLoader.h include .objWriter.h using namespace OpenSubdiv Simple command line arguments to provide input and run-time options class Args public std string inputObjFile std string outputObjFile Sdc SchemeType schemeType int tessUniformRate bool tessQuadsFlag bool uv2xyzFlag public Args int argc , char argv inputObjFile , outputObjFile , schemeType Sdc SCHEME_CATMARK , tessUniformRate 5 , tessQuadsFlag false , uv2xyzFlag false for int i 1 i argc i if strstr argv i , .obj if inputObjFile . empty inputObjFile std string argv i else fprintf stderr , Warning Extra Obj file s ignored n , argv i else if strcmp argv i , -o if i argc outputObjFile std string argv i else if strcmp argv i , -bilinear schemeType Sdc SCHEME_BILINEAR else if strcmp argv i , -catmark schemeType Sdc SCHEME_CATMARK else if strcmp argv i , -loop schemeType Sdc SCHEME_LOOP else if strcmp argv i , -res if i argc tessUniformRate atoi argv i else if strcmp argv i , -quads tessQuadsFlag true else if strcmp argv i , -uv2xyz uv2xyzFlag true else fprintf stderr , Warning Unrecognized argument s ignored n , argv i private Args The main tessellation function given a mesh and vertex positions, tessellate each face -- writing results in Obj format. void tessellateToObj Far TopologyRefiner const meshTopology , std vector float const meshVtxData , int vtxDataSize , std vector float const meshFVarData , int fvarDataSize , Args const options Use simpler local type names for the Surface and its factory typedef Bfr RefinerSurfaceFactory SurfaceFactory typedef Bfr Surface float Surface typedef Surface PointDescriptor SurfacePoint Identify the source positions and UVs within more general data arrays for the mesh. If position andor UV are not at the start of the vtx andor fvar data, simply offset the head of the array here accordingly bool meshHasUVs meshTopology . GetNumFVarChannels 0 float const meshPosData meshVtxData . data SurfacePoint meshPosPoint 3 , vtxDataSize float const meshUVData meshHasUVs meshFVarData . data 0 SurfacePoint meshUVPoint 2 , fvarDataSize Initialize the SurfaceFactory for the given base mesh very low cost in terms of both time and space and tessellate each face independently i.e. no shared vertices Note that the SurfaceFactory is not thread-safe by default due to use of an internal cache. Creating a separate instance of the SurfaceFactory for each thread is one way to safely parallelize this loop. Another preferred is to assign a thread-safe cache to the single instance. First declare any evaluation options when initializing When dealing with face-varying data, an identifier is necessary when constructing Surfaces in order to distinguish the different face-varying data channels. To avoid repeatedly specifying that identifier when only one is present or of interest, it can be specified via the Options. SurfaceFactory Options surfaceOptions if meshHasUVs surfaceOptions . SetDefaultFVarID 0 SurfaceFactory surfaceFactory meshTopology , surfaceOptions The Surface to be constructed and evaluated for each face -- as well as the intermediate and output data associated with it -- can be declared in the scope local to each face. But since dynamic memory is involved with these variables, it is preferred to declare them outside that loop to preserve and reuse that dynamic memory. Surface posSurface Surface uvSurface std vector float facePatchPoints std vector float outCoords std vector float outPos , outDu , outDv std vector float outUV std vector int outFacets Assign Tessellation Options applied for all faces. Tessellations allow the creating of either 3- or 4-sided faces -- both of which are supported here via a command line option int const tessFacetSize 3 options . tessQuadsFlag Bfr Tessellation Options tessOptions tessOptions . SetFacetSize tessFacetSize tessOptions . PreserveQuads options . tessQuadsFlag Process each face, writing the output of each in Obj format tutorial ObjWriter objWriter options . outputObjFile int numFaces surfaceFactory . GetNumFaces for int faceIndex 0 faceIndex numFaces faceIndex Initialize the Surfaces for position and UVs of this face. There are two ways to do this -- both illustrated here Creating Surfaces for the different data interpolation types independently is clear and convenient, but considerable work may be duplicated in the construction process in the case of non-linear face-varying Surfaces. So unless it is known that face-varying interpolation is linear, use of InitSurfaces is generally preferred. Remember also that the face-varying identifier is omitted from the initialization methods here as it was previously assigned to the SurfaceFactoryOptions. In the absence of an assignment of the default FVarID to the Options, a failure to specify the FVarID here will result in failure. The cases below are expanded for illustration purposes, and validity of the resulting Surface is tested here, rather than the return value of initialization methods. bool createSurfacesTogether true if meshHasUVs surfaceFactory . InitVertexSurface faceIndex , posSurface else if createSurfacesTogether surfaceFactory . InitSurfaces faceIndex , posSurface , uvSurface else if surfaceFactory . InitVertexSurface faceIndex , posSurface surfaceFactory . InitFaceVaryingSurface faceIndex , uvSurface if posSurface . IsValid continue Declare a simple uniform Tessellation for the Parameterization of this face and identify coordinates of the points to evaluate Bfr Tessellation tessPattern posSurface . GetParameterization , options . tessUniformRate , tessOptions int numOutCoords tessPattern . GetNumCoords outCoords . resize numOutCoords 2 tessPattern . GetCoords outCoords . data Prepare the patch points for the Surface, then use them to evaluate output points for all identified coordinates Evaluate vertex positions Resize patch point and output arrays int pointSize meshPosPoint . size facePatchPoints . resize posSurface . GetNumPatchPoints pointSize outPos . resize numOutCoords pointSize outDu . resize numOutCoords pointSize outDv . resize numOutCoords pointSize Populate patch point and output arrays float patchPosData facePatchPoints . data SurfacePoint patchPosPoint pointSize posSurface . PreparePatchPoints meshPosData , meshPosPoint , patchPosData , patchPosPoint for int i 0 , j 0 i numOutCoords i , j pointSize posSurface . Evaluate outCoords i 2 , patchPosData , patchPosPoint , outPos j , outDu j , outDv j Evaluate face-varying UVs when present if meshHasUVs Resize patch point and output arrays - note reuse of the same patch point array as position int pointSize meshUVPoint . size facePatchPoints . resize uvSurface . GetNumPatchPoints pointSize outUV . resize numOutCoords pointSize Populate patch point and output arrays float patchUVData facePatchPoints . data SurfacePoint patchUVPoint pointSize uvSurface . PreparePatchPoints meshUVData , meshUVPoint , patchUVData , patchUVPoint for int i 0 , j 0 i numOutCoords i , j pointSize uvSurface . Evaluate outCoords i 2 , patchUVData , patchUVPoint , outUV j Identify the faces of the Tessellation Note the need to offset vertex indices for the output faces -- using the number of vertices generated prior to this face. One of several Tessellation methods to transform the facet indices simply translates all indices by the desired offset. int objVertexIndexOffset objWriter . GetNumVertices int numFacets tessPattern . GetNumFacets outFacets . resize numFacets tessFacetSize tessPattern . GetFacets outFacets . data tessPattern . TransformFacetCoordIndices outFacets . data , objVertexIndexOffset Write the evaluated points and faces connecting them as Obj objWriter . WriteGroupName baseFace_ , faceIndex if meshHasUVs options . uv2xyzFlag objWriter . WriteVertexPositions outUV , 2 objWriter . WriteFaces outFacets , tessFacetSize , false , false else objWriter . WriteVertexPositions outPos objWriter . WriteVertexNormals outDu , outDv if meshHasUVs objWriter . WriteVertexUVs outUV objWriter . WriteFaces outFacets , tessFacetSize , true , meshHasUVs Load command line arguments, specified or default geometry and process int main int argc , char argv Args args argc , argv Far TopologyRefiner meshTopology 0 std vector float meshVtxPositions std vector float meshFVarUVs meshTopology tutorial createTopologyRefiner args . inputObjFile , args . schemeType , meshVtxPositions , meshFVarUVs if meshTopology 0 return EXIT_FAILURE Expand the loaded position and UV arrays to include additional data initialized with -1 for distinction, e.g. add a 4-tuple for RGBA color to the vertex data and add a third field w to the face-varying data int numPos int meshVtxPositions . size 3 int vtxSize 7 std vector float vtxData numPos vtxSize , -1.0f for int i 0 i numPos i vtxData i vtxSize meshVtxPositions i 3 vtxData i vtxSize 1 meshVtxPositions i 3 1 vtxData i vtxSize 2 meshVtxPositions i 3 2 int numUVs int meshFVarUVs . size 2 int fvarSize 3 std vector float fvarData numUVs fvarSize , -1.0f for int i 0 i numUVs i fvarData i fvarSize meshFVarUVs i 2 fvarData i fvarSize 1 meshFVarUVs i 2 1 Pass the expanded data arrays along with their respective strides tessellateToObj meshTopology , vtxData , vtxSize , fvarData , fvarSize , args delete meshTopology return EXIT_SUCCESS ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"bfr_tutorial_1_4.html\"\n }, {\n- \"title\": \"far_tutorial_5_3.cpp\",\n- \"text\": \"far_tutorial_5_3.cpp far_tutorial_5_3.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsfartutorial_5_3far_tutorial_5_3.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial shows how to use a FarLimitStenciTable to repeatedly and efficiently evaluate a set of points and optionally derivatives on the limit surface. A LimitStencilTable derives from StencilTable but is specialized to factor the evaluation of limit positions and derivatives into stencils. This allows a set of limit properties to be efficiently recomputed in response to changes to the vertices of the base mesh. Constructing the different kinds of StencilTables can have a high cost, so whether that cost is worth it will depend on your usage e.g. if points are only computed once, using stencil tables is typically not worth the added cost. Any points on the limit surface can be identified for evaluation. In this example we create a crude tessellation similar to tutorial_5_2. The midpoint of each face and points near the corners of the face are evaluated and a triangle fan connects them. include ......regressioncommonarg_utils.h include ......regressioncommonfar_utils.h include opensubdivfartopologyDescriptor.h include opensubdivfarpatchTableFactory.h include opensubdivfarstencilTableFactory.h include opensubdivfarptexIndices.h include cassert include cstdio include cstring include fstream include sstream using namespace OpenSubdiv using Far Index Global utilities in this namespace are not relevant to the tutorial. They simply serve to construct some default geometry to be processed in the form of a TopologyRefiner and vector of vertex positions. namespace Simple structs for x,y,z position and a 3-tuple for the set of vertices of a triangle struct Pos Pos Pos float x , float y , float z p 0 x , p 1 y , p 2 z Pos operator Pos const op const return Pos p 0 op . p 0 , p 1 op . p 1 , p 2 op . p 2 Clear and AddWithWeight required for interpolation void Clear void 0 p 0 p 1 p 2 0.0f void AddWithWeight Pos const src , float weight p 0 weight src . p 0 p 1 weight src . p 1 p 2 weight src . p 2 float p 3 typedef std vector Pos PosVector struct Tri Tri Tri int a , int b , int c v 0 a , v 1 b , v 2 c int v 3 typedef std vector Tri TriVector Functions to populate the topology and geometry arrays a simple shape whose positions may be transformed void createCube std vector int vertsPerFace , std vector Index faceVertsPerFace , std vector Pos positionsPerVert Local topology and position of a cube centered at origin static float const cubePositions 8 3 -0.5f , -0.5f , -0.5f , -0.5f , 0.5f , -0.5f , -0.5f , 0.5f , 0.5f , -0.5f , -0.5f , 0.5f , 0.5f , -0.5f , -0.5f , 0.5f , 0.5f , -0.5f , 0.5f , 0.5f , 0.5f , 0.5f , -0.5f , 0.5f static int const cubeFaceVerts 6 4 0 , 3 , 2 , 1 , 4 , 5 , 6 , 7 , 0 , 4 , 7 , 3 , 1 , 2 , 6 , 5 , 0 , 1 , 5 , 4 , 3 , 7 , 6 , 2 Initialize verts-per-face and face-vertices for each face vertsPerFace . resize 6 faceVertsPerFace . resize 24 for int i 0 i 6 i vertsPerFace i 4 for int j 0 j 4 j faceVertsPerFace i 4 j cubeFaceVerts i j Initialize vertex positions positionsPerVert . resize 8 for int i 0 i 8 i float const p cubePositions i positionsPerVert i Pos p 0 , p 1 , p 2 Create a TopologyRefiner from default geometry created above Far TopologyRefiner createTopologyRefinerDefault PosVector posVector std vector int topVertsPerFace std vector Index topFaceVerts createCube topVertsPerFace , topFaceVerts , posVector typedef Far TopologyDescriptor Descriptor Sdc SchemeType type OpenSubdiv Sdc SCHEME_CATMARK Sdc Options options options . SetVtxBoundaryInterpolation Sdc Options VTX_BOUNDARY_EDGE_AND_CORNER Descriptor desc desc . numVertices int posVector . size desc . numFaces int topVertsPerFace . size desc . numVertsPerFace topVertsPerFace 0 desc . vertIndicesPerFace topFaceVerts 0 Instantiate a FarTopologyRefiner from the descriptor. Far TopologyRefiner refiner Far TopologyRefinerFactory Descriptor Create desc , Far TopologyRefinerFactory Descriptor Options type , options assert refiner return refiner Create a TopologyRefiner from a specified Obj file geometry created internally Far TopologyRefiner createTopologyRefinerFromObj std string const objFileName , Sdc SchemeType schemeType , PosVector posVector const char filename objFileName . c_str const Shape shape 0 std ifstream ifs filename if ifs std stringstream ss ss ifs . rdbuf ifs . close std string shapeString ss . str shape Shape parseObj shapeString . c_str , ConvertSdcTypeToShapeScheme schemeType , false if shape 0 fprintf stderr , Error Cannot create Shape from .obj file s n , filename return 0 else fprintf stderr , Error Cannot open .obj file s n , filename return 0 Sdc SchemeType sdcType GetSdcType shape Sdc Options sdcOptions GetSdcOptions shape Far TopologyRefiner refiner Far TopologyRefinerFactory Shape Create shape , Far TopologyRefinerFactory Shape Options sdcType , sdcOptions if refiner 0 fprintf stderr , Error Unable to construct TopologyRefiner from .obj file s n , filename return 0 int numVertices refiner - GetNumVerticesTotal posVector . resize numVertices std memcpy posVector 0 . p 0 , shape - verts 0 , numVertices 3 sizeof float delete shape return refiner Simple function to export an Obj file for the limit points -- which provides a simple tessllation similar to tutorial_5_2. int writeToObj Far TopologyLevel const baseLevel , std vector Pos const vertexPositions , int nextObjVertexIndex for size_t i 0 i vertexPositions . size i float const p vertexPositions i . p printf v f f f n , p 0 , p 1 , p 2 Connect the sequences of limit points center followed by corners into triangle fans for each base face for int i 0 i baseLevel . GetNumFaces i int faceSize baseLevel . GetFaceVertices i . size int vCenter nextObjVertexIndex 1 int vCorner vCenter 1 for int k 0 k faceSize k printf f d d d n , vCenter , vCorner k , vCorner k 1 faceSize nextObjVertexIndex faceSize 1 return nextObjVertexIndex end namespace Command line arguments parsed to provide run-time options class Args public std string inputObjFile Sdc SchemeType schemeType int maxPatchDepth int numPoses Pos poseOffset bool deriv1Flag bool noPatchesFlag bool noOutputFlag public Args int argc , char argv inputObjFile , schemeType Sdc SCHEME_CATMARK , maxPatchDepth 3 , numPoses 0 , poseOffset 1.0f , 0.0f , 0.0f , deriv1Flag false , noPatchesFlag false , noOutputFlag false Parse and assign standard arguments and Obj files ArgOptions args args . Parse argc , argv maxPatchDepth args . GetLevel schemeType ConvertShapeSchemeToSdcType args . GetDefaultScheme const std vector const char objFiles args . GetObjFiles if objFiles . empty for size_t i 1 i objFiles . size i fprintf stderr , Warning .obj file s ignored n , objFiles i inputObjFile std string objFiles 0 Parse remaining arguments specific to this example const std vector const char rargs args . GetRemainingArgs for size_t i 0 i rargs . size i if strcmp rargs i , -d1 deriv1Flag true else if strcmp rargs i , -nopatches noPatchesFlag true else if strcmp rargs i , -poses if i rargs . size numPoses atoi rargs i else if strcmp rargs i , -offset if i rargs . size poseOffset . p 0 float atof rargs i if i rargs . size poseOffset . p 1 float atof rargs i if i rargs . size poseOffset . p 2 float atof rargs i else if strcmp rargs i , -nooutput noOutputFlag true else fprintf stderr , Warning Argument s ignored n , rargs i private Args Assemble the set of locations for the limit points. The resulting vector of LocationArrays can contain arbitrary locations on the limit surface -- with multiple locations for the same patch grouped into a single array. In this case, for each base face, coordinates for the center and its corners are specified -- from which we will construct a triangle fan providing a crude tessellation similar to tutorial_5_2. typedef Far LimitStencilTableFactory LocationArray LocationArray int assembleLimitPointLocations Far TopologyRefiner const refiner , std vector LocationArray locations Coordinates for the center of the face and its corners slightly inset. Unlike most of the public interface for patches, the LocationArray refers to parameteric coordinates as s,t, so that convention will be followed here. Note that the s,t coordinates in a LocationArray are referred to by reference. The memory holding these s,t values must persist while the LimitStencilTable is constructed -- the arrays here are declared as static for that purpose. static float const quadSCoords 5 0.5f , 0.05f , 0.95f , 0.95f , 0.05f static float const quadTCoords 5 0.5f , 0.05f , 0.05f , 0.95f , 0.95f static float const triSCoords 4 0.33f , 0.05f , 0.95f , 0.05f static float const triTCoords 4 0.33f , 0.05f , 0.00f , 0.95f static float const irregSCoords 2 1.0f , 0.05f static float const irregTCoords 2 1.0f , 0.05f Since these are references to patches to be evaluated, we require use of the Ptex indices to identify the top-most parameterized patch, which is essential to dealing with non-quad faces in the case of Catmark. Far TopologyLevel const baseLevel refiner . GetLevel 0 Far PtexIndices basePtexIndices refiner int regFaceSize Sdc SchemeTypeTraits GetRegularFaceSize refiner . GetSchemeType For each base face, simply refer to the s,t arrays for regular quad and triangular patches with a single LocationArray. Otherwise, for irregular faces, the corners of the face come from different patches and so must be referenced in separate LocationArrays. locations . clear int numLimitPoints 0 for int i 0 i baseLevel . GetNumFaces i int baseFaceSize baseLevel . GetFaceVertices i . size int basePtexId basePtexIndices . GetFaceId i bool faceIsRegular baseFaceSize regFaceSize if faceIsRegular All coordinates are on the same top-level patch LocationArray loc loc . ptexIdx basePtexId loc . numLocations baseFaceSize 1 if baseFaceSize 4 loc . s quadSCoords loc . t quadTCoords else loc . s triSCoords loc . t triTCoords locations . push_back loc else Center coordinate is on the first sub-patch while those on near the corners are on each successive sub-patch LocationArray loc loc . numLocations 1 for int j 0 j baseFaceSize j bool isPerimeter j 0 loc . ptexIdx basePtexId isPerimeter j -1 0 loc . s irregSCoords isPerimeter loc . t irregTCoords isPerimeter locations . push_back loc numLimitPoints baseFaceSize 1 return numLimitPoints Load command line arguments and geometry, build the LimitStencilTable for a set of points on the limit surface and compute those points for several orientations of the mesh int main int argc , char argv Args args argc , argv Create or load the base geometry command line arguments allow a .obj file to be specified, providing a TopologyRefiner and a set of base vertex positions to work with std vector Pos basePositions Far TopologyRefiner refinerPtr args . inputObjFile . empty createTopologyRefinerDefault basePositions createTopologyRefinerFromObj args . inputObjFile , args . schemeType , basePositions assert refinerPtr Far TopologyRefiner refiner refinerPtr Far TopologyLevel const baseLevel refiner . GetLevel 0 Use of LimitStencilTable requires either explicit or implicit use of a PatchTable. A PatchTable is not required to construct a LimitStencilTable -- one will be constructed internally for use and discarded -- but explicit construction is recommended to control the many legacy options for PatchTable, rather than relying on internal defaults. Adaptive refinement is required in both cases to indicate the accuracy of the patches. Note that if a TopologyRefiner and PatchTable are not used for any other purpose than computing the limit points, that specifying the subset of faces containing those limit points in the adaptive refinement and PatchTable construction can avoid unnecessary overhead. Far PatchTable patchTablePtr 0 if args . noPatchesFlag refiner . RefineAdaptive Far TopologyRefiner AdaptiveOptions args . maxPatchDepth else Far PatchTableFactory Options patchOptions args . maxPatchDepth patchOptions . useInfSharpPatch true patchOptions . generateLegacySharpCornerPatches false patchOptions . generateVaryingTables false patchOptions . generateFVarTables false patchOptions . endCapType Far PatchTableFactory Options ENDCAP_GREGORY_BASIS refiner . RefineAdaptive patchOptions . GetRefineAdaptiveOptions patchTablePtr Far PatchTableFactory Create refiner , patchOptions assert patchTablePtr Assemble the set of locations for the limit points. For each base face, coordinates for the center and its corners are specified -- from which we will construct a triangle fan providing a crude tessellation similar to tutorial_5_2. std vector LocationArray locations int numLimitPoints assembleLimitPointLocations refiner , locations Construct a LimitStencilTable from the refiner, patch table optional and the collection of limit point locations. Stencils can optionally be created for computing dervatives -- the default is to compute 1st derivative stencils, so be sure to disable that if not necessary Far LimitStencilTableFactory Options limitOptions limitOptions . generate1stDerivatives args . deriv1Flag Far LimitStencilTable const limitStencilTablePtr Far LimitStencilTableFactory Create refiner , locations , 0 , optional StencilTable for the refined points patchTablePtr , optional PatchTable limitOptions assert limitStencilTablePtr Far LimitStencilTable const limitStencilTable limitStencilTablePtr Apply the constructed LimitStencilTable to compute limit positions from the base level vertex positions. This is trivial if computing all positions in one invokation. The UpdateValues method and those for derivatives are overloaded to optionally accept a subrange of indices to distribute the computation std vector Pos limitPositions numLimitPoints limitStencilTable . UpdateValues basePositions , limitPositions Call with the optional subrange limitStencilTable . UpdateValues basePositions , limitPositions , 0 , numLimitPoints 2 limitStencilTable . UpdateValues basePositions , limitPositions , numLimitPoints 2 1 , numLimitPoints Write vertices and faces in Obj format for the original limit points int objVertCount 0 if args . noOutputFlag printf g base_mesh n objVertCount writeToObj baseLevel , limitPositions , objVertCount Recompute the limit points and output faces for different poses of the original mesh -- in this case simply translated. Also optionally compute 1st derivatives though they are not used here std vector Pos posePositions basePositions std vector Pos limitDu args . deriv1Flag numLimitPoints 0 std vector Pos limitDv args . deriv1Flag numLimitPoints 0 for int i 0 i args . numPoses i Trivially transform the base vertex positions and re-compute for size_t j 0 j basePositions . size j posePositions j posePositions j args . poseOffset limitStencilTable . UpdateValues posePositions , limitPositions if args . deriv1Flag limitStencilTable . UpdateDerivs posePositions , limitDu , limitDv if args . noOutputFlag printf n g pose_d n , i objVertCount writeToObj baseLevel , limitPositions , objVertCount delete refinerPtr delete patchTablePtr delete limitStencilTablePtr return EXIT_SUCCESS Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n- \"tags\": \"\",\n- \"loc\": \"far_tutorial_5_3.html\"\n- }, {\n \"title\": \"bfr_tutorial_1_2.cpp\",\n \"text\": \"bfr_tutorial_1_2.cpp bfr_tutorial_1_2.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsbfrtutorial_1_2bfr_tutorial_1_2.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial builds on the previous tutorial that makes use of the SurfaceFactory and Surface for evaluating the limit surface of faces by using the Tessellation class to determine the points to evaluate and the faces that connect them. The Tessellation class replaces the explicit determination of points and faces for the triangle fan of the previous example. Given a uniform tessellation rate via a command line option, Tessellation returns the set of coordinates to evaluate, and separately returns the faces that connect them. include opensubdivfartopologyRefiner.h include opensubdivbfrrefinerSurfaceFactory.h include opensubdivbfrsurface.h include opensubdivbfrtessellation.h include vector include string include cstring include cstdio Local headers with support for this tutorial in namespace tutorial include .meshLoader.h include .objWriter.h using namespace OpenSubdiv Simple command line arguments to provide input and run-time options class Args public std string inputObjFile std string outputObjFile Sdc SchemeType schemeType int tessUniformRate bool tessQuadsFlag public Args int argc , char argv inputObjFile , outputObjFile , schemeType Sdc SCHEME_CATMARK , tessUniformRate 5 , tessQuadsFlag false for int i 1 i argc i if strstr argv i , .obj if inputObjFile . empty inputObjFile std string argv i else fprintf stderr , Warning Extra Obj file s ignored n , argv i else if strcmp argv i , -o if i argc outputObjFile std string argv i else if strcmp argv i , -bilinear schemeType Sdc SCHEME_BILINEAR else if strcmp argv i , -catmark schemeType Sdc SCHEME_CATMARK else if strcmp argv i , -loop schemeType Sdc SCHEME_LOOP else if strcmp argv i , -res if i argc tessUniformRate atoi argv i else if strcmp argv i , -quads tessQuadsFlag true else fprintf stderr , Warning Unrecognized argument s ignored n , argv i private Args The main tessellation function given a mesh and vertex positions, tessellate each face -- writing results in Obj format. void tessellateToObj Far TopologyRefiner const meshTopology , std vector float const meshVertexPositions , Args const options Use simpler local type names for the Surface and its factory typedef Bfr RefinerSurfaceFactory SurfaceFactory typedef Bfr Surface float Surface Initialize the SurfaceFactory for the given base mesh very low cost in terms of both time and space and tessellate each face independently i.e. no shared vertices Note that the SurfaceFactory is not thread-safe by default due to use of an internal cache. Creating a separate instance of the SurfaceFactory for each thread is one way to safely parallelize this loop. Another preferred is to assign a thread-safe cache to the single instance. First declare any evaluation options when initializing though none are used in this simple case SurfaceFactory Options surfaceOptions SurfaceFactory meshSurfaceFactory meshTopology , surfaceOptions The Surface to be constructed and evaluated for each face -- as well as the intermediate and output data associated with it -- can be declared in the scope local to each face. But since dynamic memory is involved with these variables, it is preferred to declare them outside that loop to preserve and reuse that dynamic memory. Surface faceSurface std vector float facePatchPoints std vector float outCoords std vector float outPos , outDu , outDv std vector int outFacets Assign Tessellation Options applied for all faces. Tessellations allow the creating of either 3- or 4-sided faces -- both of which are supported here via a command line option int const tessFacetSize 3 options . tessQuadsFlag Bfr Tessellation Options tessOptions tessOptions . SetFacetSize tessFacetSize tessOptions . PreserveQuads options . tessQuadsFlag Process each face, writing the output of each in Obj format tutorial ObjWriter objWriter options . outputObjFile int numFaces meshSurfaceFactory . GetNumFaces for int faceIndex 0 faceIndex numFaces faceIndex Initialize the Surface for this face -- if valid skipping holes and boundary faces in some rare cases if meshSurfaceFactory . InitVertexSurface faceIndex , faceSurface continue Declare a simple uniform Tessellation for the Parameterization of this face and identify coordinates of the points to evaluate Bfr Tessellation tessPattern faceSurface . GetParameterization , options . tessUniformRate , tessOptions int numOutCoords tessPattern . GetNumCoords outCoords . resize numOutCoords 2 tessPattern . GetCoords outCoords . data Prepare the patch points for the Surface, then use them to evaluate output points for all identified coordinates Resize patch point and output arrays int pointSize 3 facePatchPoints . resize faceSurface . GetNumPatchPoints pointSize outPos . resize numOutCoords pointSize outDu . resize numOutCoords pointSize outDv . resize numOutCoords pointSize Populate patch point and output arrays faceSurface . PreparePatchPoints meshVertexPositions . data , pointSize , facePatchPoints . data , pointSize for int i 0 , j 0 i numOutCoords i , j pointSize faceSurface . Evaluate outCoords i 2 , facePatchPoints . data , pointSize , outPos j , outDu j , outDv j Identify the faces of the Tessellation Note the need to offset vertex indices for the output faces -- using the number of vertices generated prior to this face. One of several Tessellation methods to transform the facet indices simply translates all indices by the desired offset. int objVertexIndexOffset objWriter . GetNumVertices int numFacets tessPattern . GetNumFacets outFacets . resize numFacets tessFacetSize tessPattern . GetFacets outFacets . data tessPattern . TransformFacetCoordIndices outFacets . data , objVertexIndexOffset Write the evaluated points and faces connecting them as Obj objWriter . WriteGroupName baseFace_ , faceIndex objWriter . WriteVertexPositions outPos objWriter . WriteVertexNormals outDu , outDv objWriter . WriteFaces outFacets , tessFacetSize , true , false Load command line arguments, specified or default geometry and process int main int argc , char argv Args args argc , argv Far TopologyRefiner meshTopology 0 std vector float meshVtxPositions std vector float meshFVarUVs meshTopology tutorial createTopologyRefiner args . inputObjFile , args . schemeType , meshVtxPositions , meshFVarUVs if meshTopology 0 return EXIT_FAILURE tessellateToObj meshTopology , meshVtxPositions , args delete meshTopology return EXIT_SUCCESS ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"bfr_tutorial_1_2.html\"\n }, {\n \"title\": \"far_tutorial_5_2.cpp\",\n \"text\": \"far_tutorial_5_2.cpp far_tutorial_5_2.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsfartutorial_5_2far_tutorial_5_2.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial shows how to manage the limit surface of a potentially large mesh by creating groups of patches for selected faces of the mesh. Familiarity with construction and evaluation of a PatchTable is assumed see tutorial_5_1. When the patches for a mesh do not need to be retained for further use, e.g. when simply computing points for a tessellation, the time and space required to construct a single large PatchTable can be considerable. By constructing, evaluating and discarding smaller PatchTables for subsets of the mesh, the high transient memory cost can be avoided when computed serially. When computed in parallel, there may be little memory savings, but the construction time can then be distributed. This tutorial creates simple geometry currently a lattice of cubes that can be expanded in complexity with a simple multiplier. The collection of faces are then divided into a specified number of groups from which patches will be constructed and evaluated. A simple tessellation a triangle fan around the midpoint of each face is then written in Obj format to the standard output. include ......regressioncommonarg_utils.h include ......regressioncommonfar_utils.h include opensubdivfartopologyDescriptor.h include opensubdivfarprimvarRefiner.h include opensubdivfarpatchTableFactory.h include opensubdivfarpatchMap.h include opensubdivfarptexIndices.h include cassert include cstdio include cstring include fstream include sstream using namespace OpenSubdiv using Far Index Global utilities in this namespace are not relevant to the tutorial. They simply serve to construct some default geometry to be processed in the form of a TopologyRefiner and vector of vertex positions. namespace Simple structs for x,y,z position and a 3-tuple for the set of vertices of a triangle struct Pos Pos Pos float x , float y , float z p 0 x , p 1 y , p 2 z Pos operator Pos const op const return Pos p 0 op . p 0 , p 1 op . p 1 , p 2 op . p 2 Clear and AddWithWeight required for interpolation void Clear void 0 p 0 p 1 p 2 0.0f void AddWithWeight Pos const src , float weight p 0 weight src . p 0 p 1 weight src . p 1 p 2 weight src . p 2 float p 3 typedef std vector Pos PosVector struct Tri Tri Tri int a , int b , int c v 0 a , v 1 b , v 2 c int v 3 typedef std vector Tri TriVector Functions to populate the topology and geometry arrays with simple shapes that we can multiply to increase complexity void appendDefaultPrimitive Pos const origin , std vector int vertsPerFace , std vector Index faceVerts , std vector Pos positionsPerVert Local topology and position of a cube centered at origin static float const cubePositions 8 3 -0.5f , -0.5f , -0.5f , -0.5f , 0.5f , -0.5f , -0.5f , 0.5f , 0.5f , -0.5f , -0.5f , 0.5f , 0.5f , -0.5f , -0.5f , 0.5f , 0.5f , -0.5f , 0.5f , 0.5f , 0.5f , 0.5f , -0.5f , 0.5f static int const cubeFaceVerts 6 4 0 , 3 , 2 , 1 , 4 , 5 , 6 , 7 , 0 , 4 , 7 , 3 , 1 , 2 , 6 , 5 , 0 , 1 , 5 , 4 , 3 , 7 , 6 , 2 Identify the next vertex before appending vertex positions int baseVertex int positionsPerVert . size for int i 0 i 8 i float const p cubePositions i positionsPerVert . push_back origin Pos p 0 , p 1 , p 2 Append number of verts-per-face and face-vertices for each face for int i 0 i 6 i vertsPerFace . push_back 4 for int j 0 j 4 j faceVerts . push_back baseVertex cubeFaceVerts i j void createDefaultGeometry int multiplier , std vector int vertsPerFace , std vector Index faceVerts , std vector Pos positionsPerVert Default primitive is currently a cube int const vertsPerPrimitive 8 int const facesPerPrimitive 6 int const faceVertsPerPrimitive 24 int nPrimitives multiplier multiplier multiplier positionsPerVert . reserve nPrimitives vertsPerPrimitive vertsPerFace . reserve nPrimitives facesPerPrimitive faceVerts . reserve nPrimitives faceVertsPerPrimitive for int x 0 x multiplier x for int y 0 y multiplier y for int z 0 z multiplier z appendDefaultPrimitive Pos float x 2.0f , float y 2.0f , float z 2.0f , vertsPerFace , faceVerts , positionsPerVert Create a TopologyRefiner from default geometry created above Far TopologyRefiner createTopologyRefinerDefault int multiplier , PosVector posVector std vector int topVertsPerFace std vector Index topFaceVerts createDefaultGeometry multiplier , topVertsPerFace , topFaceVerts , posVector typedef Far TopologyDescriptor Descriptor Sdc SchemeType type OpenSubdiv Sdc SCHEME_CATMARK Sdc Options options options . SetVtxBoundaryInterpolation Sdc Options VTX_BOUNDARY_EDGE_AND_CORNER Descriptor desc desc . numVertices int posVector . size desc . numFaces int topVertsPerFace . size desc . numVertsPerFace topVertsPerFace 0 desc . vertIndicesPerFace topFaceVerts 0 Instantiate a FarTopologyRefiner from the descriptor. Far TopologyRefiner refiner Far TopologyRefinerFactory Descriptor Create desc , Far TopologyRefinerFactory Descriptor Options type , options if refiner 0 exit EXIT_FAILURE bool dumpDefaultGeometryToObj false if dumpDefaultGeometryToObj int nVerts int posVector . size for int i 0 i nVerts i float const p posVector i . p printf v f f f n , p 0 , p 1 , p 2 int const fVerts topFaceVerts 0 int nFaces int topVertsPerFace . size for int i 0 i nFaces i printf f for int j 0 j topVertsPerFace i j printf d , 1 fVerts printf n exit EXIT_SUCCESS return refiner Create a TopologyRefiner from a specified Obj file geometry created internally Far TopologyRefiner createTopologyRefinerFromObj std string const objFileName , Sdc SchemeType schemeType , PosVector posVector const char filename objFileName . c_str const Shape shape 0 std ifstream ifs filename if ifs std stringstream ss ss ifs . rdbuf ifs . close std string shapeString ss . str shape Shape parseObj shapeString . c_str , ConvertSdcTypeToShapeScheme schemeType , false if shape 0 fprintf stderr , Error Cannot create Shape from .obj file s n , filename return 0 else fprintf stderr , Error Cannot open .obj file s n , filename return 0 Sdc SchemeType sdcType GetSdcType shape Sdc Options sdcOptions GetSdcOptions shape Far TopologyRefiner refiner Far TopologyRefinerFactory Shape Create shape , Far TopologyRefinerFactory Shape Options sdcType , sdcOptions if refiner 0 fprintf stderr , Error Unable to construct TopologyRefiner from .obj file s n , filename return 0 int numVertices refiner - GetNumVerticesTotal posVector . resize numVertices std memcpy posVector 0 . p 0 , shape - verts 0 , numVertices 3 sizeof float delete shape return refiner end namespace The PatchGroup bundles objects used to create and evaluate a sparse set of patches. Its construction creates a PatchTable and all other objects necessary to evaluate patches associated with the specified subset of faces provided. A simple method to tessellate a specified face is provided. Note that, since the data buffers for the base level and refined levels are separate we want to avoid copying primvar data for the base level of a potentially large mesh, that patch evaluation needs to account for the separation when combining control points. struct PatchGroup PatchGroup Far PatchTableFactory Options patchOptions , Far TopologyRefiner const baseRefinerArg , Far PtexIndices const basePtexIndicesArg , std vector Pos const basePositionsArg , std vector Index const baseFacesArg PatchGroup void TessellateBaseFace int face , PosVector tessPoints , TriVector tessTris const Const reference members Far TopologyRefiner const baseRefiner Far PtexIndices const basePtexIndices std vector Pos const basePositions std vector Index const baseFaces Members constructed to evaluate patches Far PatchTable patchTable Far PatchMap patchMap int patchFaceSize std vector Pos localPositions PatchGroup PatchGroup Far PatchTableFactory Options patchOptions , Far TopologyRefiner const baseRefinerArg , Far PtexIndices const basePtexIndicesArg , std vector Pos const basePositionsArg , std vector Index const baseFacesArg baseRefiner baseRefinerArg , basePtexIndices basePtexIndicesArg , basePositions basePositionsArg , baseFaces baseFacesArg Create a local refiner sharing the base level, apply adaptive refinement to the given subset of base faces, and construct a patch table and its associated map for the same set of faces Far ConstIndexArray groupFaces baseFaces 0 , int baseFaces . size Far TopologyRefiner localRefiner Far TopologyRefinerFactory Far TopologyDescriptor Create baseRefiner localRefiner - RefineAdaptive patchOptions . GetRefineAdaptiveOptions , groupFaces patchTable Far PatchTableFactory Create localRefiner , patchOptions , groupFaces patchMap new Far PatchMap patchTable patchFaceSize Sdc SchemeTypeTraits GetRegularFaceSize baseRefiner . GetSchemeType Compute the number of refined and local points needed to evaluate the patches, allocate and interpolate. This varies from tutorial_5_1 in that the primvar buffer for the base vertices is separate from the refined vertices and local patch points which must also be accounted for when evaluating the patches. int nBaseVertices localRefiner - GetLevel 0 . GetNumVertices int nRefinedVertices localRefiner - GetNumVerticesTotal - nBaseVertices int nLocalPoints patchTable - GetNumLocalPoints localPositions . resize nRefinedVertices nLocalPoints if nRefinedVertices Far PrimvarRefiner primvarRefiner localRefiner Pos const src basePositions 0 Pos dst localPositions 0 for int level 1 level localRefiner - GetNumLevels level primvarRefiner . Interpolate level , src , dst src dst dst localRefiner - GetLevel level . GetNumVertices if nLocalPoints patchTable - GetLocalPointStencilTable - UpdateValues basePositions 0 , nBaseVertices , localPositions 0 , localPositions nRefinedVertices delete localRefiner PatchGroup PatchGroup delete patchTable delete patchMap void PatchGroup TessellateBaseFace int face , PosVector tessPoints , TriVector tessTris const Tesselate the face with points at the midpoint of the face and at each corner, and triangles connecting the midpoint to each edge. Irregular faces require an aribrary number of corners points, but all are at the origin of the child face of the irregular base face float const quadPoints 5 2 0.5f , 0.5f , 0.0f , 0.0f , 1.0f , 0.0f , 1.0f , 1.0f , 0.0f , 1.0f float const triPoints 4 2 0.5f , 0.5f , 0.0f , 0.0f , 1.0f , 0.0f , 0.0f , 1.0f float const irregPoints 4 2 1.0f , 1.0f , 0.0f , 0.0f Determine the topology of the given base face and the resulting tessellation points and faces to generate int baseFace baseFaces face int faceSize baseRefiner . GetLevel 0 . GetFaceVertices baseFace . size bool faceIsIrregular faceSize patchFaceSize int nTessPoints faceSize 1 int nTessFaces faceSize tessPoints . resize nTessPoints tessTris . resize nTessFaces Compute the mid and corner points -- remember that for an irregular face, we must reference the individual ptex faces for each corner int ptexFace basePtexIndices . GetFaceId baseFace int numBaseVerts int basePositions . size for int i 0 i nTessPoints i Choose the s,t coordinate from the fixed tessellation float const st faceIsIrregular irregPoints i 0 faceSize 4 quadPoints i triPoints i Locate the patch corresponding to the face ptex idx and s,t and evaluate int patchFace ptexFace if faceIsIrregular i 0 patchFace i - 1 Far PatchTable PatchHandle const handle patchMap - FindPatch patchFace , st 0 , st 1 assert handle float pWeights 20 patchTable - EvaluateBasis handle , st 0 , st 1 , pWeights Identify the patch cvs and combine with the evaluated weights -- remember to distinguish cvs in the base level Far ConstIndexArray cvIndices patchTable - GetPatchVertices handle Pos pos tessPoints i pos . Clear for int cv 0 cv cvIndices . size cv int cvIndex cvIndices cv if cvIndex numBaseVerts pos . AddWithWeight basePositions cvIndex , pWeights cv else pos . AddWithWeight localPositions cvIndex - numBaseVerts , pWeights cv Assign triangles connecting the midpoint of the base face to the points computed at the ends of each of its edges for int i 0 i nTessFaces i tessTris i Tri 0 , 1 i , 1 i 1 faceSize Command line arguments parsed to provide run-time options class Args public std string inputObjFile Sdc SchemeType schemeType int geoMultiplier int maxPatchDepth int numPatchGroups bool noTessFlag bool noOutputFlag public Args int argc , char argv inputObjFile , schemeType Sdc SCHEME_CATMARK , geoMultiplier 10 , maxPatchDepth 3 , numPatchGroups 10 , noTessFlag false , noOutputFlag false Parse and assign standard arguments and Obj files ArgOptions args args . Parse argc , argv maxPatchDepth args . GetLevel schemeType ConvertShapeSchemeToSdcType args . GetDefaultScheme const std vector const char objFiles args . GetObjFiles if objFiles . empty for size_t i 1 i objFiles . size i fprintf stderr , Warning .obj file s ignored n , objFiles i inputObjFile std string objFiles 0 Parse remaining arguments specific to this example const std vector const char rargs args . GetRemainingArgs for size_t i 0 i rargs . size i if strcmp rargs i , -groups if i rargs . size numPatchGroups atoi rargs i else if strcmp rargs i , -mult if i rargs . size geoMultiplier atoi rargs i else if strcmp rargs i , -notess noTessFlag true else if strcmp rargs i , -nooutput noOutputFlag true else fprintf stderr , Warning Argument s ignored n , rargs i private Args Load command line arguments and geometry, then divide the mesh into groups of faces from which to create and tessellate patches int main int argc , char argv Args args argc , argv Create or load the base geometry command line arguments allow a .obj file to be specified. In addition to the TopologyRefiner and set of positions for the base vertices, a set of PtexIndices is also required to evaluate patches, so build it here once for use elsewhere std vector Pos basePositions Far TopologyRefiner baseRefinerPtr args . inputObjFile . empty createTopologyRefinerDefault args . geoMultiplier , basePositions createTopologyRefinerFromObj args . inputObjFile , args . schemeType , basePositions assert baseRefinerPtr Far TopologyRefiner baseRefiner baseRefinerPtr Far PtexIndices basePtexIndices baseRefiner Determine the sizes of the patch groups specified -- there will be two sizes that differ by one to account for unequal division int numBaseFaces baseRefiner . GetNumFacesTotal int numPatchGroups args . numPatchGroups if numPatchGroups numBaseFaces numPatchGroups numBaseFaces else if numPatchGroups 1 numPatchGroups 1 int lesserGroupSize numBaseFaces numPatchGroups int numLargerGroups numBaseFaces - numPatchGroups lesserGroupSize Define the options used to construct the patches for each group. Unless suppressed, a tessellation in Obj format will also be printed to standard output, so keep track of the vertex indices. Far PatchTableFactory Options patchOptions args . maxPatchDepth patchOptions . generateVaryingTables false patchOptions . shareEndCapPatchPoints false patchOptions . endCapType Far PatchTableFactory Options ENDCAP_GREGORY_BASIS int objVertCount 0 PosVector tessPoints TriVector tessFaces for int i 0 i numPatchGroups i Initialize a vector with a group of base faces from which to create and evaluate patches Index minFace i lesserGroupSize std min i , numLargerGroups Index maxFace minFace lesserGroupSize i numLargerGroups std vector Far Index baseFaces maxFace - minFace for int face minFace face maxFace face baseFaces face - minFace face Declare a PatchGroup and tessellate its base faces -- generating vertices and faces in Obj format to standard output PatchGroup patchGroup patchOptions , baseRefiner , basePtexIndices , basePositions , baseFaces if args . noTessFlag continue if args . noOutputFlag printf g patchGroup_d n , i for int j 0 j int baseFaces . size j patchGroup . TessellateBaseFace j , tessPoints , tessFaces if args . noOutputFlag int nVerts int tessPoints . size for int k 0 k nVerts k float const p tessPoints k . p printf v f f f n , p 0 , p 1 , p 2 int nTris int tessFaces . size int vBase 1 objVertCount for int k 0 k nTris k int const v tessFaces k . v printf f d d d n , vBase v 0 , vBase v 1 , vBase v 2 objVertCount nVerts delete baseRefinerPtr return EXIT_SUCCESS Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"far_tutorial_5_2.html\"\n }, {\n+ \"title\": \"far_tutorial_5_3.cpp\",\n+ \"text\": \"far_tutorial_5_3.cpp far_tutorial_5_3.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsfartutorial_5_3far_tutorial_5_3.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial shows how to use a FarLimitStenciTable to repeatedly and efficiently evaluate a set of points and optionally derivatives on the limit surface. A LimitStencilTable derives from StencilTable but is specialized to factor the evaluation of limit positions and derivatives into stencils. This allows a set of limit properties to be efficiently recomputed in response to changes to the vertices of the base mesh. Constructing the different kinds of StencilTables can have a high cost, so whether that cost is worth it will depend on your usage e.g. if points are only computed once, using stencil tables is typically not worth the added cost. Any points on the limit surface can be identified for evaluation. In this example we create a crude tessellation similar to tutorial_5_2. The midpoint of each face and points near the corners of the face are evaluated and a triangle fan connects them. include ......regressioncommonarg_utils.h include ......regressioncommonfar_utils.h include opensubdivfartopologyDescriptor.h include opensubdivfarpatchTableFactory.h include opensubdivfarstencilTableFactory.h include opensubdivfarptexIndices.h include cassert include cstdio include cstring include fstream include sstream using namespace OpenSubdiv using Far Index Global utilities in this namespace are not relevant to the tutorial. They simply serve to construct some default geometry to be processed in the form of a TopologyRefiner and vector of vertex positions. namespace Simple structs for x,y,z position and a 3-tuple for the set of vertices of a triangle struct Pos Pos Pos float x , float y , float z p 0 x , p 1 y , p 2 z Pos operator Pos const op const return Pos p 0 op . p 0 , p 1 op . p 1 , p 2 op . p 2 Clear and AddWithWeight required for interpolation void Clear void 0 p 0 p 1 p 2 0.0f void AddWithWeight Pos const src , float weight p 0 weight src . p 0 p 1 weight src . p 1 p 2 weight src . p 2 float p 3 typedef std vector Pos PosVector struct Tri Tri Tri int a , int b , int c v 0 a , v 1 b , v 2 c int v 3 typedef std vector Tri TriVector Functions to populate the topology and geometry arrays a simple shape whose positions may be transformed void createCube std vector int vertsPerFace , std vector Index faceVertsPerFace , std vector Pos positionsPerVert Local topology and position of a cube centered at origin static float const cubePositions 8 3 -0.5f , -0.5f , -0.5f , -0.5f , 0.5f , -0.5f , -0.5f , 0.5f , 0.5f , -0.5f , -0.5f , 0.5f , 0.5f , -0.5f , -0.5f , 0.5f , 0.5f , -0.5f , 0.5f , 0.5f , 0.5f , 0.5f , -0.5f , 0.5f static int const cubeFaceVerts 6 4 0 , 3 , 2 , 1 , 4 , 5 , 6 , 7 , 0 , 4 , 7 , 3 , 1 , 2 , 6 , 5 , 0 , 1 , 5 , 4 , 3 , 7 , 6 , 2 Initialize verts-per-face and face-vertices for each face vertsPerFace . resize 6 faceVertsPerFace . resize 24 for int i 0 i 6 i vertsPerFace i 4 for int j 0 j 4 j faceVertsPerFace i 4 j cubeFaceVerts i j Initialize vertex positions positionsPerVert . resize 8 for int i 0 i 8 i float const p cubePositions i positionsPerVert i Pos p 0 , p 1 , p 2 Create a TopologyRefiner from default geometry created above Far TopologyRefiner createTopologyRefinerDefault PosVector posVector std vector int topVertsPerFace std vector Index topFaceVerts createCube topVertsPerFace , topFaceVerts , posVector typedef Far TopologyDescriptor Descriptor Sdc SchemeType type OpenSubdiv Sdc SCHEME_CATMARK Sdc Options options options . SetVtxBoundaryInterpolation Sdc Options VTX_BOUNDARY_EDGE_AND_CORNER Descriptor desc desc . numVertices int posVector . size desc . numFaces int topVertsPerFace . size desc . numVertsPerFace topVertsPerFace 0 desc . vertIndicesPerFace topFaceVerts 0 Instantiate a FarTopologyRefiner from the descriptor. Far TopologyRefiner refiner Far TopologyRefinerFactory Descriptor Create desc , Far TopologyRefinerFactory Descriptor Options type , options assert refiner return refiner Create a TopologyRefiner from a specified Obj file geometry created internally Far TopologyRefiner createTopologyRefinerFromObj std string const objFileName , Sdc SchemeType schemeType , PosVector posVector const char filename objFileName . c_str const Shape shape 0 std ifstream ifs filename if ifs std stringstream ss ss ifs . rdbuf ifs . close std string shapeString ss . str shape Shape parseObj shapeString . c_str , ConvertSdcTypeToShapeScheme schemeType , false if shape 0 fprintf stderr , Error Cannot create Shape from .obj file s n , filename return 0 else fprintf stderr , Error Cannot open .obj file s n , filename return 0 Sdc SchemeType sdcType GetSdcType shape Sdc Options sdcOptions GetSdcOptions shape Far TopologyRefiner refiner Far TopologyRefinerFactory Shape Create shape , Far TopologyRefinerFactory Shape Options sdcType , sdcOptions if refiner 0 fprintf stderr , Error Unable to construct TopologyRefiner from .obj file s n , filename return 0 int numVertices refiner - GetNumVerticesTotal posVector . resize numVertices std memcpy posVector 0 . p 0 , shape - verts 0 , numVertices 3 sizeof float delete shape return refiner Simple function to export an Obj file for the limit points -- which provides a simple tessllation similar to tutorial_5_2. int writeToObj Far TopologyLevel const baseLevel , std vector Pos const vertexPositions , int nextObjVertexIndex for size_t i 0 i vertexPositions . size i float const p vertexPositions i . p printf v f f f n , p 0 , p 1 , p 2 Connect the sequences of limit points center followed by corners into triangle fans for each base face for int i 0 i baseLevel . GetNumFaces i int faceSize baseLevel . GetFaceVertices i . size int vCenter nextObjVertexIndex 1 int vCorner vCenter 1 for int k 0 k faceSize k printf f d d d n , vCenter , vCorner k , vCorner k 1 faceSize nextObjVertexIndex faceSize 1 return nextObjVertexIndex end namespace Command line arguments parsed to provide run-time options class Args public std string inputObjFile Sdc SchemeType schemeType int maxPatchDepth int numPoses Pos poseOffset bool deriv1Flag bool noPatchesFlag bool noOutputFlag public Args int argc , char argv inputObjFile , schemeType Sdc SCHEME_CATMARK , maxPatchDepth 3 , numPoses 0 , poseOffset 1.0f , 0.0f , 0.0f , deriv1Flag false , noPatchesFlag false , noOutputFlag false Parse and assign standard arguments and Obj files ArgOptions args args . Parse argc , argv maxPatchDepth args . GetLevel schemeType ConvertShapeSchemeToSdcType args . GetDefaultScheme const std vector const char objFiles args . GetObjFiles if objFiles . empty for size_t i 1 i objFiles . size i fprintf stderr , Warning .obj file s ignored n , objFiles i inputObjFile std string objFiles 0 Parse remaining arguments specific to this example const std vector const char rargs args . GetRemainingArgs for size_t i 0 i rargs . size i if strcmp rargs i , -d1 deriv1Flag true else if strcmp rargs i , -nopatches noPatchesFlag true else if strcmp rargs i , -poses if i rargs . size numPoses atoi rargs i else if strcmp rargs i , -offset if i rargs . size poseOffset . p 0 float atof rargs i if i rargs . size poseOffset . p 1 float atof rargs i if i rargs . size poseOffset . p 2 float atof rargs i else if strcmp rargs i , -nooutput noOutputFlag true else fprintf stderr , Warning Argument s ignored n , rargs i private Args Assemble the set of locations for the limit points. The resulting vector of LocationArrays can contain arbitrary locations on the limit surface -- with multiple locations for the same patch grouped into a single array. In this case, for each base face, coordinates for the center and its corners are specified -- from which we will construct a triangle fan providing a crude tessellation similar to tutorial_5_2. typedef Far LimitStencilTableFactory LocationArray LocationArray int assembleLimitPointLocations Far TopologyRefiner const refiner , std vector LocationArray locations Coordinates for the center of the face and its corners slightly inset. Unlike most of the public interface for patches, the LocationArray refers to parameteric coordinates as s,t, so that convention will be followed here. Note that the s,t coordinates in a LocationArray are referred to by reference. The memory holding these s,t values must persist while the LimitStencilTable is constructed -- the arrays here are declared as static for that purpose. static float const quadSCoords 5 0.5f , 0.05f , 0.95f , 0.95f , 0.05f static float const quadTCoords 5 0.5f , 0.05f , 0.05f , 0.95f , 0.95f static float const triSCoords 4 0.33f , 0.05f , 0.95f , 0.05f static float const triTCoords 4 0.33f , 0.05f , 0.00f , 0.95f static float const irregSCoords 2 1.0f , 0.05f static float const irregTCoords 2 1.0f , 0.05f Since these are references to patches to be evaluated, we require use of the Ptex indices to identify the top-most parameterized patch, which is essential to dealing with non-quad faces in the case of Catmark. Far TopologyLevel const baseLevel refiner . GetLevel 0 Far PtexIndices basePtexIndices refiner int regFaceSize Sdc SchemeTypeTraits GetRegularFaceSize refiner . GetSchemeType For each base face, simply refer to the s,t arrays for regular quad and triangular patches with a single LocationArray. Otherwise, for irregular faces, the corners of the face come from different patches and so must be referenced in separate LocationArrays. locations . clear int numLimitPoints 0 for int i 0 i baseLevel . GetNumFaces i int baseFaceSize baseLevel . GetFaceVertices i . size int basePtexId basePtexIndices . GetFaceId i bool faceIsRegular baseFaceSize regFaceSize if faceIsRegular All coordinates are on the same top-level patch LocationArray loc loc . ptexIdx basePtexId loc . numLocations baseFaceSize 1 if baseFaceSize 4 loc . s quadSCoords loc . t quadTCoords else loc . s triSCoords loc . t triTCoords locations . push_back loc else Center coordinate is on the first sub-patch while those on near the corners are on each successive sub-patch LocationArray loc loc . numLocations 1 for int j 0 j baseFaceSize j bool isPerimeter j 0 loc . ptexIdx basePtexId isPerimeter j -1 0 loc . s irregSCoords isPerimeter loc . t irregTCoords isPerimeter locations . push_back loc numLimitPoints baseFaceSize 1 return numLimitPoints Load command line arguments and geometry, build the LimitStencilTable for a set of points on the limit surface and compute those points for several orientations of the mesh int main int argc , char argv Args args argc , argv Create or load the base geometry command line arguments allow a .obj file to be specified, providing a TopologyRefiner and a set of base vertex positions to work with std vector Pos basePositions Far TopologyRefiner refinerPtr args . inputObjFile . empty createTopologyRefinerDefault basePositions createTopologyRefinerFromObj args . inputObjFile , args . schemeType , basePositions assert refinerPtr Far TopologyRefiner refiner refinerPtr Far TopologyLevel const baseLevel refiner . GetLevel 0 Use of LimitStencilTable requires either explicit or implicit use of a PatchTable. A PatchTable is not required to construct a LimitStencilTable -- one will be constructed internally for use and discarded -- but explicit construction is recommended to control the many legacy options for PatchTable, rather than relying on internal defaults. Adaptive refinement is required in both cases to indicate the accuracy of the patches. Note that if a TopologyRefiner and PatchTable are not used for any other purpose than computing the limit points, that specifying the subset of faces containing those limit points in the adaptive refinement and PatchTable construction can avoid unnecessary overhead. Far PatchTable patchTablePtr 0 if args . noPatchesFlag refiner . RefineAdaptive Far TopologyRefiner AdaptiveOptions args . maxPatchDepth else Far PatchTableFactory Options patchOptions args . maxPatchDepth patchOptions . useInfSharpPatch true patchOptions . generateLegacySharpCornerPatches false patchOptions . generateVaryingTables false patchOptions . generateFVarTables false patchOptions . endCapType Far PatchTableFactory Options ENDCAP_GREGORY_BASIS refiner . RefineAdaptive patchOptions . GetRefineAdaptiveOptions patchTablePtr Far PatchTableFactory Create refiner , patchOptions assert patchTablePtr Assemble the set of locations for the limit points. For each base face, coordinates for the center and its corners are specified -- from which we will construct a triangle fan providing a crude tessellation similar to tutorial_5_2. std vector LocationArray locations int numLimitPoints assembleLimitPointLocations refiner , locations Construct a LimitStencilTable from the refiner, patch table optional and the collection of limit point locations. Stencils can optionally be created for computing dervatives -- the default is to compute 1st derivative stencils, so be sure to disable that if not necessary Far LimitStencilTableFactory Options limitOptions limitOptions . generate1stDerivatives args . deriv1Flag Far LimitStencilTable const limitStencilTablePtr Far LimitStencilTableFactory Create refiner , locations , 0 , optional StencilTable for the refined points patchTablePtr , optional PatchTable limitOptions assert limitStencilTablePtr Far LimitStencilTable const limitStencilTable limitStencilTablePtr Apply the constructed LimitStencilTable to compute limit positions from the base level vertex positions. This is trivial if computing all positions in one invokation. The UpdateValues method and those for derivatives are overloaded to optionally accept a subrange of indices to distribute the computation std vector Pos limitPositions numLimitPoints limitStencilTable . UpdateValues basePositions , limitPositions Call with the optional subrange limitStencilTable . UpdateValues basePositions , limitPositions , 0 , numLimitPoints 2 limitStencilTable . UpdateValues basePositions , limitPositions , numLimitPoints 2 1 , numLimitPoints Write vertices and faces in Obj format for the original limit points int objVertCount 0 if args . noOutputFlag printf g base_mesh n objVertCount writeToObj baseLevel , limitPositions , objVertCount Recompute the limit points and output faces for different poses of the original mesh -- in this case simply translated. Also optionally compute 1st derivatives though they are not used here std vector Pos posePositions basePositions std vector Pos limitDu args . deriv1Flag numLimitPoints 0 std vector Pos limitDv args . deriv1Flag numLimitPoints 0 for int i 0 i args . numPoses i Trivially transform the base vertex positions and re-compute for size_t j 0 j basePositions . size j posePositions j posePositions j args . poseOffset limitStencilTable . UpdateValues posePositions , limitPositions if args . deriv1Flag limitStencilTable . UpdateDerivs posePositions , limitDu , limitDv if args . noOutputFlag printf n g pose_d n , i objVertCount writeToObj baseLevel , limitPositions , objVertCount delete refinerPtr delete patchTablePtr delete limitStencilTablePtr return EXIT_SUCCESS Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n+ \"tags\": \"\",\n+ \"loc\": \"far_tutorial_5_3.html\"\n+ }, {\n+ \"title\": \"bfr_tutorial_1_1.cpp\",\n+ \"text\": \"bfr_tutorial_1_1.cpp bfr_tutorial_1_1.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsbfrtutorial_1_1bfr_tutorial_1_1.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial illustrates the use of the SurfaceFactory, Surface and Parameterization classes for creating and evaluating the limit surface associated with each base face of a mesh. Following the creation of a connected mesh for a shape using a FarTopologyRefiner, as illustrated in Far tutorials, an instance of a SurfaceFactory is declared to process its faces. Each face of the mesh is evaluated and tessellated independently with a simple triangle fan, with results written out in Obj format for inspection. These classes make it simple to evaluate and tessellate all faces quads, tris or others while supporting the full set of subdivision options. While a triangle fan may be a trivial tessellation and so not very useful later examples using the Tessellation class provide more useful results with the same simplicity. include opensubdivfartopologyRefiner.h include opensubdivbfrrefinerSurfaceFactory.h include opensubdivbfrsurface.h include vector include string include cstring include cstdio Local headers with support for this tutorial in namespace tutorial include .meshLoader.h include .objWriter.h using namespace OpenSubdiv Simple command line arguments to provide input and run-time options class Args public std string inputObjFile std string outputObjFile Sdc SchemeType schemeType public Args int argc , char argv inputObjFile , outputObjFile , schemeType Sdc SCHEME_CATMARK for int i 1 i argc i if strstr argv i , .obj if inputObjFile . empty inputObjFile std string argv i else fprintf stderr , Warning Extra Obj file s ignored n , argv i else if strcmp argv i , -o if i argc outputObjFile std string argv i else if strcmp argv i , -bilinear schemeType Sdc SCHEME_BILINEAR else if strcmp argv i , -catmark schemeType Sdc SCHEME_CATMARK else if strcmp argv i , -loop schemeType Sdc SCHEME_LOOP else fprintf stderr , Warning Unrecognized argument s ignored n , argv i private Args The main tessellation function given a mesh and vertex positions, tessellate each face -- writing results in Obj format. void tessellateToObj Far TopologyRefiner const meshTopology , std vector float const meshVertexPositions , Args const options Use simpler local type names for the Surface and its factory typedef Bfr RefinerSurfaceFactory SurfaceFactory typedef Bfr Surface float Surface Initialize the SurfaceFactory for the given base mesh very low cost in terms of both time and space and tessellate each face independently i.e. no shared vertices Note that the SurfaceFactory is not thread-safe by default due to use of an internal cache. Creating a separate instance of the SurfaceFactory for each thread is one way to safely parallelize this loop. Another preferred is to assign a thread-safe cache to the single instance. First declare any evaluation options when initializing though none are used in this simple case SurfaceFactory Options surfaceOptions SurfaceFactory meshSurfaceFactory meshTopology , surfaceOptions The Surface to be constructed and evaluated for each face -- as well as the intermediate and output data associated with it -- can be declared in the scope local to each face. But since dynamic memory is involved with these variables, it is preferred to declare them outside that loop to preserve and reuse that dynamic memory. Surface faceSurface std vector float facePatchPoints std vector float outCoords std vector float outPos , outDu , outDv std vector int outTriangles Process each face, writing the output of each in Obj format tutorial ObjWriter objWriter options . outputObjFile int numFaces meshSurfaceFactory . GetNumFaces for int faceIndex 0 faceIndex numFaces faceIndex Initialize the Surface for this face -- if valid skipping holes and boundary faces in some rare cases if meshSurfaceFactory . InitVertexSurface faceIndex , faceSurface continue Get the Parameterization of the Surface and use it to identify coordinates for evaluation -- in this case, at the vertices and center of the face to create a fan of triangles Bfr Parameterization faceParam faceSurface . GetParameterization int faceSize faceParam . GetFaceSize int numOutCoords faceSize 1 outCoords . resize numOutCoords 2 for int i 0 i faceSize i faceParam . GetVertexCoord i , outCoords i 2 faceParam . GetCenterCoord outCoords faceSize 2 Prepare the patch points for the Surface, then use them to evaluate output points for all identified coordinates Resize patch point and output arrays int pointSize 3 facePatchPoints . resize faceSurface . GetNumPatchPoints pointSize outPos . resize numOutCoords pointSize outDu . resize numOutCoords pointSize outDv . resize numOutCoords pointSize Populate patch point and output arrays faceSurface . PreparePatchPoints meshVertexPositions . data , pointSize , facePatchPoints . data , pointSize for int i 0 , j 0 i numOutCoords i , j pointSize faceSurface . Evaluate outCoords i 2 , facePatchPoints . data , pointSize , outPos j , outDu j , outDv j Identify the faces of the tessellation, i.e. the triangle fan connecting points at the vertices to the center last point Note the need to offset vertex indices for the output faces -- using the number of vertices generated prior to this face. int objVertexIndexOffset objWriter . GetNumVertices outTriangles . resize faceSize 3 int outTriangle outTriangles . data for int i 0 i faceSize i , outTriangle 3 outTriangle 0 objVertexIndexOffset i outTriangle 1 objVertexIndexOffset i 1 faceSize outTriangle 2 objVertexIndexOffset faceSize Write the evaluated points and faces connecting them as Obj objWriter . WriteGroupName baseFace_ , faceIndex objWriter . WriteVertexPositions outPos objWriter . WriteVertexNormals outDu , outDv objWriter . WriteFaces outTriangles , 3 , true , false Load command line arguments, specified or default geometry and process int main int argc , char argv Args args argc , argv Far TopologyRefiner meshTopology 0 std vector float meshVtxPositions std vector float meshFVarUVs meshTopology tutorial createTopologyRefiner args . inputObjFile , args . schemeType , meshVtxPositions , meshFVarUVs if meshTopology 0 return EXIT_FAILURE tessellateToObj meshTopology , meshVtxPositions , args delete meshTopology return EXIT_SUCCESS ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n+ \"tags\": \"\",\n+ \"loc\": \"bfr_tutorial_1_1.html\"\n+ }, {\n \"title\": \"far_tutorial_5_1.cpp\",\n \"text\": \"far_tutorial_5_1.cpp far_tutorial_5_1.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsfartutorial_5_1far_tutorial_5_1.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial shows how to interpolate surface limits at arbitrary parametric locations using feature adaptive FarPatchTables. The evaluation of the limit surface at arbitrary locations requires the adaptive isolation of topological features. This process converts the input polygonal control cage into a collection of bi-cubic patches. We can then evaluate the patches at random parametric locations and obtain analytical positions and tangents on the limit surface. The results are dumped into a MEL script that draws streak particle systems that show the tangent and bi-tangent at the random samples locations. include opensubdivfartopologyDescriptor.h include opensubdivfarprimvarRefiner.h include opensubdivfarpatchTableFactory.h include opensubdivfarpatchMap.h include opensubdivfarptexIndices.h include cassert include cstdio include cstring include cfloat using namespace OpenSubdiv typedef double Real pyramid geometry from catmark_pyramid_crease0.h static int const g_nverts 5 static Real const g_verts 24 0.0f , 0.0f , 2.0f , 0.0f , -2.0f , 0.0f , 2.0f , 0.0f , 0.0f , 0.0f , 2.0f , 0.0f , -2.0f , 0.0f , 0.0f , static int const g_vertsperface 5 3 , 3 , 3 , 3 , 4 static int const g_nfaces 5 static int const g_faceverts 16 0 , 1 , 2 , 0 , 2 , 3 , 0 , 3 , 4 , 0 , 4 , 1 , 4 , 3 , 2 , 1 static int const g_ncreases 4 static int const g_creaseverts 8 4 , 3 , 3 , 2 , 2 , 1 , 1 , 4 static float const g_creaseweights 4 3.0f , 3.0f , 3.0f , 3.0f Creates a FarTopologyRefiner from the pyramid shape above static Far TopologyRefiner createTopologyRefiner ------------------------------------------------------------------------------ Vertex container implementation. struct Vertex Minimal required interface ---------------------- Vertex void Clear void 0 point 0 point 1 point 2 0.0f void AddWithWeight Vertex const src , Real weight point 0 weight src . point 0 point 1 weight src . point 1 point 2 weight src . point 2 Real point 3 ------------------------------------------------------------------------------ Limit frame container implementation -- this interface is not strictly required but follows a similar pattern to Vertex. struct LimitFrame void Clear void 0 point 0 point 1 point 2 0.0f deriv1 0 deriv1 1 deriv1 2 0.0f deriv2 0 deriv2 1 deriv2 2 0.0f void AddWithWeight Vertex const src , Real weight , Real d1Weight , Real d2Weight point 0 weight src . point 0 point 1 weight src . point 1 point 2 weight src . point 2 deriv1 0 d1Weight src . point 0 deriv1 1 d1Weight src . point 1 deriv1 2 d1Weight src . point 2 deriv2 0 d2Weight src . point 0 deriv2 1 d2Weight src . point 1 deriv2 2 d2Weight src . point 2 Real point 3 , deriv1 3 , deriv2 3 ------------------------------------------------------------------------------ int main int , char Generate a FarTopologyRefiner see tutorial_1_1 for details. Far TopologyRefiner refiner createTopologyRefiner Patches are constructed from adaptively refined faces, but the processes of constructing the PatchTable and of applying adaptive refinement have historically been separate. Adaptive refinement is applied purely to satisfy the needs of the desired PatchTable, so options associated with adaptive refinement should be derived from those specified for the PatchTable. This is not a strict requirement, but it will avoid problems arising from specifyingcoordinating the two independently especially when dealing with face-varying patches. Initialize options for the PatchTable Choose patches adaptively refined to level 3 since the sharpest crease in the shape is 3.0f in g_creaseweights, and include the inf-sharp crease option just to illustrate the need to syncronize options. int maxPatchLevel 3 Far PatchTableFactory Options patchOptions maxPatchLevel patchOptions . SetPatchPrecision Real patchOptions . useInfSharpPatch true patchOptions . generateVaryingTables false patchOptions . endCapType Far PatchTableFactory Options ENDCAP_GREGORY_BASIS Initialize corresonding options for adaptive refinement Far TopologyRefiner AdaptiveOptions adaptiveOptions maxPatchLevel bool assignAdaptiveOptionsExplicitly false if assignAdaptiveOptionsExplicitly adaptiveOptions . useInfSharpPatch true else Be sure patch options were intialized with the desired max level adaptiveOptions patchOptions . GetRefineAdaptiveOptions assert adaptiveOptions . useInfSharpPatch patchOptions . useInfSharpPatch Apply adaptive refinement and construct the associated PatchTable to evaluate the limit surface refiner - RefineAdaptive adaptiveOptions Far PatchTable const patchTable Far PatchTableFactory Create refiner , patchOptions Compute the total number of points we need to evaluate the PatchTable. Approximations at irregular or extraordinary features require the use of additional points associated with the patches that are referred to as local points i.e. local to the PatchTable. int nRefinerVertices refiner - GetNumVerticesTotal int nLocalPoints patchTable - GetNumLocalPoints Create a buffer to hold the position of the refined verts and local points, then copy the coarse positions at the beginning. std vector Vertex verts nRefinerVertices nLocalPoints std memcpy verts 0 , g_verts , g_nverts 3 sizeof Real Adaptive refinement may result in fewer levels than the max specified. int nRefinedLevels refiner - GetNumLevels Interpolate vertex primvar data they are the control vertices of the limit patches see tutorial_1_1 for details Far PrimvarRefinerReal Real primvarRefiner refiner Vertex src verts 0 for int level 1 level nRefinedLevels level Vertex dst src refiner - GetLevel level -1 . GetNumVertices primvarRefiner . Interpolate level , src , dst src dst Evaluate local points from interpolated vertex primvars. if nLocalPoints patchTable - GetLocalPointStencilTable Real - UpdateValues verts 0 , verts nRefinerVertices Create a FarPatchMap to help locating patches in the table Far PatchMap patchmap patchTable Create a FarPtexIndices to help find indices of ptex faces. Far PtexIndices ptexIndices refiner Generate random samples on each ptex face int nsamplesPerFace 200 , nfaces ptexIndices . GetNumFaces std vector LimitFrame samples nsamplesPerFace nfaces srand static_cast int 2147483647 Real pWeights 20 , dsWeights 20 , dtWeights 20 for int face 0 , count 0 face nfaces face for int sample 0 sample nsamplesPerFace sample , count Real s Real rand Real RAND_MAX , t Real rand Real RAND_MAX Locate the patch corresponding to the face ptex idx and s,t Far PatchTable PatchHandle const handle patchmap . FindPatch face , s , t assert handle Evaluate the patch weights, identify the CVs and compute the limit frame patchTable - EvaluateBasis handle , s , t , pWeights , dsWeights , dtWeights Far ConstIndexArray cvs patchTable - GetPatchVertices handle LimitFrame dst samples count dst . Clear for int cv 0 cv cvs . size cv dst . AddWithWeight verts cvs cv , pWeights cv , dsWeights cv , dtWeights cv Visualization with Maya print a MEL script that generates particles at the location of the limit vertices int nsamples int samples . size printf file -f -new n Output particle positions for the tangent printf particle -n deriv1 for int sample 0 sample nsamples sample Real const pos samples sample . point printf -p f f f n , pos 0 , pos 1 , pos 2 printf n Set per-particle direction using the limit tangent display as Streak printf setAttr deriv1.particleRenderType 6 n printf setAttr deriv1.velocity -type vectorArray d , nsamples for int sample 0 sample nsamples sample Real const tan1 samples sample . deriv1 printf f f f n , tan1 0 , tan1 1 , tan1 2 printf n Output particle positions for the bi-tangent printf particle -n deriv2 for int sample 0 sample nsamples sample Real const pos samples sample . point printf -p f f f n , pos 0 , pos 1 , pos 2 printf n printf setAttr deriv2.particleRenderType 6 n printf setAttr deriv2.velocity -type vectorArray d , nsamples for int sample 0 sample nsamples sample Real const tan2 samples sample . deriv2 printf f f f n , tan2 0 , tan2 1 , tan2 2 printf n Exercise to the reader cross tangent bi-tangent for limit surface normal... Force Maya DAG update to see the result in the viewport printf currentTime -edit currentTime -q n printf select deriv1Shape deriv2Shape n delete refiner delete patchTable return EXIT_SUCCESS ------------------------------------------------------------------------------ static Far TopologyRefiner createTopologyRefiner typedef Far TopologyDescriptor Descriptor Sdc SchemeType type OpenSubdiv Sdc SCHEME_CATMARK Sdc Options options options . SetVtxBoundaryInterpolation Sdc Options VTX_BOUNDARY_EDGE_ONLY Descriptor desc desc . numVertices g_nverts desc . numFaces g_nfaces desc . numVertsPerFace g_vertsperface desc . vertIndicesPerFace g_faceverts desc . numCreases g_ncreases desc . creaseVertexIndexPairs g_creaseverts desc . creaseWeights g_creaseweights Instantiate a FarTopologyRefiner from the descriptor. Far TopologyRefiner refiner Far TopologyRefinerFactory Descriptor Create desc , Far TopologyRefinerFactory Descriptor Options type , options return refiner Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"far_tutorial_5_1.html\"\n }, {\n- \"title\": \"far_tutorial_2_3.cpp\",\n- \"text\": \"far_tutorial_2_3.cpp far_tutorial_2_3.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsfartutorial_2_3far_tutorial_2_3.cpp ------------------------------------------------------------------------------ Tutorial description NOTE The following approaches are approximations to compute smooth normals, for highest fidelity patches should be used for positions and normals, which form the true limit surface. Building on tutorial 3, this example shows how to instantiate a simple mesh, refine it uniformly, interpolate both vertex and face-varying primvar data, and finally calculate approximated smooth normals. The resulting interpolated data is output in obj format. Currently, this tutorial supports 3 methods to approximate smooth normals CrossTriangle Calculates smooth normals accumulating per vertex using 3 verts to generate 2 vectors. This approximation has trouble when working with quads which can be non-planar since it only takes into account half of each face. CrossQuad Calculates smooth normals accumulating per vertex but this time, instead of taking into account only 3 verts it creates 2 vectors crossing the quad. This approximation builds upon CrossTriangle but takes into account the 4 verts of the face. Limit Calculates the normals at the limit for each vert at the last level of subdivision. These are the true limit normals, however, in this example they are used with verts that are not at the limit. This can lead to new visual artifacts since the normals and the positions dont match. Additionally, this approach requires extra computation to calculate the limit normals. For this reason, we strongly suggest using limit positions with limit normals. include opensubdivfartopologyDescriptor.h include opensubdivfarprimvarRefiner.h include cstdio ------------------------------------------------------------------------------ Math helpers. Returns the normalized version of the input vector inline void normalize float n float rn 1.0f sqrtf n 0 n 0 n 1 n 1 n 2 n 2 n 0 rn n 1 rn n 2 rn Returns the cross product of p v1 and p v2. void cross float const v1 , float const v2 , float vOut vOut 0 v1 1 v2 2 - v1 2 v2 1 vOut 1 v1 2 v2 0 - v1 0 v2 2 vOut 2 v1 0 v2 1 - v1 1 v2 0 ------------------------------------------------------------------------------ Face-varying implementation. struct Vertex Minimal required interface ---------------------- Vertex Clear Vertex Vertex const src position 0 src . position 0 position 1 src . position 1 position 2 src . position 2 void Clear position 0 position 1 position 2 0.0f void AddWithWeight Vertex const src , float weight position 0 weight src . position 0 position 1 weight src . position 1 position 2 weight src . position 2 Public interface ------------------------------------ void SetPosition float x , float y , float z position 0 x position 1 y position 2 z const float GetPosition const return position float position 3 ------------------------------------------------------------------------------ Face-varying container implementation. We are using a uv texture layout as a face-varying primtiive variable attribute. Because face-varying data is specified per-face-per-vertex, we cannot use the same container that we use for vertex or varying data. We specify a new container, which only carries u,v coordinates. Similarly to our Vertex container, we add a minimaliztic interpolation interface with a Clear and AddWithWeight methods. struct FVarVertexUV Minimal required interface ---------------------- void Clear u v 0.0f void AddWithWeight FVarVertexUV const src , float weight u weight src . u v weight src . v Basic uv layout channel float u , v struct FVarVertexColor Minimal required interface ---------------------- void Clear r g b a 0.0f void AddWithWeight FVarVertexColor const src , float weight r weight src . r g weight src . g b weight src . b a weight src . a Basic color layout channel float r , g , b , a ------------------------------------------------------------------------------ Cube geometry from catmark_cube.h vertex primitive variable data topology static float g_verts 8 3 -0.5f , -0.5f , 0.5f , 0.5f , -0.5f , 0.5f , -0.5f , 0.5f , 0.5f , 0.5f , 0.5f , 0.5f , -0.5f , 0.5f , -0.5f , 0.5f , 0.5f , -0.5f , -0.5f , -0.5f , -0.5f , 0.5f , -0.5f , -0.5f static int g_nverts 8 , g_nfaces 6 static int g_vertsperface 6 4 , 4 , 4 , 4 , 4 , 4 static int g_vertIndices 24 0 , 1 , 3 , 2 , 2 , 3 , 5 , 4 , 4 , 5 , 7 , 6 , 6 , 7 , 1 , 0 , 1 , 7 , 5 , 3 , 6 , 0 , 2 , 4 face-varying primitive variable data topology for UVs static float g_uvs 14 2 0.375 , 0.00 , 0.625 , 0.00 , 0.375 , 0.25 , 0.625 , 0.25 , 0.375 , 0.50 , 0.625 , 0.50 , 0.375 , 0.75 , 0.625 , 0.75 , 0.375 , 1.00 , 0.625 , 1.00 , 0.875 , 0.00 , 0.875 , 0.25 , 0.125 , 0.00 , 0.125 , 0.25 static int g_nuvs 14 static int g_uvIndices 24 0 , 1 , 3 , 2 , 2 , 3 , 5 , 4 , 4 , 5 , 7 , 6 , 6 , 7 , 9 , 8 , 1 , 10 , 11 , 3 , 12 , 0 , 2 , 13 face-varying primitive variable data topology for color static float g_colors 24 4 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 0.0 , 0.0 , 1.0 , 1.0 , 0.0 , 0.0 , 1.0 , 1.0 , 0.0 , 0.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 static int g_ncolors 24 static int g_colorIndices 24 0 , 3 , 9 , 6 , 7 , 10 , 15 , 12 , 13 , 16 , 21 , 18 , 19 , 22 , 4 , 1 , 5 , 23 , 17 , 11 , 20 , 2 , 8 , 14 using namespace OpenSubdiv Approximation methods for smooth normal computations enum NormalApproximation CrossTriangle , CrossQuad , Limit ------------------------------------------------------------------------------ int main int argc , char argv const int maxlevel 2 enum NormalApproximation normalApproximation CrossTriangle Parsing command line parameters to see if the user wants to use a specific method to calculate normals for int i 1 i argc i if strstr argv i , -limit normalApproximation Limit else if strcmp argv i , -crossquad normalApproximation CrossQuad else if strcmp argv i , -crosstriangle normalApproximation CrossTriangle else printf Parameters n printf -crosstriangle use the cross product of vectors n printf generated from 3 verts default. n printf -crossquad use the cross product of vectors n printf generated from 4 verts. n printf -limit use normals calculated from the limit. n return 0 typedef Far TopologyDescriptor Descriptor Sdc SchemeType type OpenSubdiv Sdc SCHEME_CATMARK Sdc Options options options . SetVtxBoundaryInterpolation Sdc Options VTX_BOUNDARY_EDGE_ONLY options . SetFVarLinearInterpolation Sdc Options FVAR_LINEAR_NONE Populate a topology descriptor with our raw data Descriptor desc desc . numVertices g_nverts desc . numFaces g_nfaces desc . numVertsPerFace g_vertsperface desc . vertIndicesPerFace g_vertIndices Create a face-varying channel descriptor const int numChannels 2 const int channelUV 0 const int channelColor 1 Descriptor FVarChannel channels numChannels channels channelUV . numValues g_nuvs channels channelUV . valueIndices g_uvIndices channels channelColor . numValues g_ncolors channels channelColor . valueIndices g_colorIndices Add the channel topology to the main descriptor desc . numFVarChannels numChannels desc . fvarChannels channels Instantiate a FarTopologyRefiner from the descriptor Far TopologyRefiner refiner Far TopologyRefinerFactory Descriptor Create desc , Far TopologyRefinerFactory Descriptor Options type , options Uniformly refine the topolgy up to maxlevel note fullTopologyInLastLevel must be true to work with face-varying data Far TopologyRefiner UniformOptions refineOptions maxlevel refineOptions . fullTopologyInLastLevel true refiner - RefineUniform refineOptions Allocate and initialize the vertex primvar data see tutorial 2 for more details. std vector Vertex vbuffer refiner - GetNumVerticesTotal Vertex verts vbuffer 0 for int i 0 i g_nverts i verts i . SetPosition g_verts i 0 , g_verts i 1 , g_verts i 2 Allocate initialize the first channel of face-varying primvars UVs std vector FVarVertexUV fvBufferUV refiner - GetNumFVarValuesTotal channelUV FVarVertexUV fvVertsUV fvBufferUV 0 for int i 0 i g_nuvs i fvVertsUV i . u g_uvs i 0 fvVertsUV i . v g_uvs i 1 Allocate interpolate the face-varying primvar data colors std vector FVarVertexColor fvBufferColor refiner - GetNumFVarValuesTotal channelColor FVarVertexColor fvVertsColor fvBufferColor 0 for int i 0 i g_ncolors i fvVertsColor i . r g_colors i 0 fvVertsColor i . g g_colors i 1 fvVertsColor i . b g_colors i 2 fvVertsColor i . a g_colors i 3 Interpolate both vertex and face-varying primvar data Far PrimvarRefiner primvarRefiner refiner Vertex srcVert verts FVarVertexUV srcFVarUV fvVertsUV FVarVertexColor srcFVarColor fvVertsColor for int level 1 level maxlevel level Vertex dstVert srcVert refiner - GetLevel level -1 . GetNumVertices FVarVertexUV dstFVarUV srcFVarUV refiner - GetLevel level -1 . GetNumFVarValues channelUV FVarVertexColor dstFVarColor srcFVarColor refiner - GetLevel level -1 . GetNumFVarValues channelColor primvarRefiner . Interpolate level , srcVert , dstVert primvarRefiner . InterpolateFaceVarying level , srcFVarUV , dstFVarUV , channelUV primvarRefiner . InterpolateFaceVarying level , srcFVarColor , dstFVarColor , channelColor srcVert dstVert srcFVarUV dstFVarUV srcFVarColor dstFVarColor Approximate normals Far TopologyLevel const refLastLevel refiner - GetLevel maxlevel int nverts refLastLevel . GetNumVertices int nfaces refLastLevel . GetNumFaces int firstOfLastVerts refiner - GetNumVerticesTotal - nverts std vector Vertex normals nverts Different ways to approximate smooth normals For details check the description at the beginning of the file if normalApproximation Limit Approximation using the normal at the limit with verts that are not at the limit For details check the description at the beginning of the file std vector Vertex fineLimitPos nverts std vector Vertex fineDu nverts std vector Vertex fineDv nverts primvarRefiner . Limit verts firstOfLastVerts , fineLimitPos , fineDu , fineDv for int vert 0 vert nverts vert float const du fineDu vert . GetPosition float const dv fineDv vert . GetPosition float norm 3 cross du , dv , norm normals vert . SetPosition norm 0 , norm 1 , norm 2 else if normalApproximation CrossQuad Approximate smooth normals by accumulating normal vectors computed as the cross product of two vectors generated by the 4 verts that form each quad For details check the description at the beginning of the file for int f 0 f nfaces f Far ConstIndexArray faceVertices refLastLevel . GetFaceVertices f We will use the first three verts to calculate a normal const float v0 verts firstOfLastVerts faceVertices 0 . GetPosition const float v1 verts firstOfLastVerts faceVertices 1 . GetPosition const float v2 verts firstOfLastVerts faceVertices 2 . GetPosition const float v3 verts firstOfLastVerts faceVertices 3 . GetPosition Calculate the cross product between the vectors formed by v1-v0 and v2-v0, and then normalize the result float normalCalculated 0.0 , 0.0 , 0.0 float a 3 v2 0 - v0 0 , v2 1 - v0 1 , v2 2 - v0 2 float b 3 v3 0 - v1 0 , v3 1 - v1 1 , v3 2 - v1 2 cross a , b , normalCalculated normalize normalCalculated Accumulate that normal on all verts that are part of that face for int vInFace 0 vInFace faceVertices . size vInFace int vertexIndex faceVertices vInFace normals vertexIndex . position 0 normalCalculated 0 normals vertexIndex . position 1 normalCalculated 1 normals vertexIndex . position 2 normalCalculated 2 else if normalApproximation CrossTriangle Approximate smooth normals by accumulating normal vectors computed as the cross product of two vectors generated by 3 verts of the quad For details check the description at the beginning of the file for int f 0 f nfaces f Far ConstIndexArray faceVertices refLastLevel . GetFaceVertices f We will use the first three verts to calculate a normal const float v0 verts firstOfLastVerts faceVertices 0 . GetPosition const float v1 verts firstOfLastVerts faceVertices 1 . GetPosition const float v2 verts firstOfLastVerts faceVertices 2 . GetPosition Calculate the cross product between the vectors formed by v1-v0 and v2-v0, and then normalize the result float normalCalculated 0.0 , 0.0 , 0.0 float a 3 v1 0 - v0 0 , v1 1 - v0 1 , v1 2 - v0 2 float b 3 v2 0 - v0 0 , v2 1 - v0 1 , v2 2 - v0 2 cross a , b , normalCalculated normalize normalCalculated Accumulate that normal on all verts that are part of that face for int vInFace 0 vInFace faceVertices . size vInFace int vertexIndex faceVertices vInFace normals vertexIndex . position 0 normalCalculated 0 normals vertexIndex . position 1 normalCalculated 1 normals vertexIndex . position 2 normalCalculated 2 Finally we just need to normalize the accumulated normals for int vert 0 vert nverts vert normalize normals vert . position 0 Output OBJ of the highest level refined ----------- Print vertex positions for int vert 0 vert nverts vert float const pos verts firstOfLastVerts vert . GetPosition printf v f f f n , pos 0 , pos 1 , pos 2 Print vertex normals for int vert 0 vert nverts vert float const pos normals vert . GetPosition printf vn f f f n , pos 0 , pos 1 , pos 2 Print uvs int nuvs refLastLevel . GetNumFVarValues channelUV int firstOfLastUvs refiner - GetNumFVarValuesTotal channelUV - nuvs for int fvvert 0 fvvert nuvs fvvert FVarVertexUV const uv fvVertsUV firstOfLastUvs fvvert printf vt f f n , uv . u , uv . v Print faces for int face 0 face nfaces face Far ConstIndexArray fverts refLastLevel . GetFaceVertices face Far ConstIndexArray fuvs refLastLevel . GetFaceFVarValues face , channelUV all refined Catmark faces should be quads assert fverts . size 4 fuvs . size 4 printf f for int vert 0 vert fverts . size vert OBJ uses 1-based arrays... printf ddd , fverts vert 1 , fuvs vert 1 , fverts vert 1 printf n delete refiner return EXIT_SUCCESS ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n+ \"title\": \"far_tutorial_4_3.cpp\",\n+ \"text\": \"far_tutorial_4_3.cpp far_tutorial_4_3.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsfartutorial_4_3far_tutorial_4_3.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial shows how to create and manipulate table of cascading stencils. We initialize a FarTopologyRefiner with a cube and apply uniform refinement. We then use a FarStencilTableFactory to generate a stencil table. We set the factory Options to not factorize intermediate levels, thus giving a table of cascading stencils. We then apply the stencils to the vertex position primvar data, and insert a hierarchical edit at level 1. This edit is smoothed by the application of the subsequent stencil cascades. The results are dumped into an OBJ file that shows the intermediate levels of refinement of the original cube. include opensubdivfartopologyDescriptor.h include opensubdivfarstencilTable.h include opensubdivfarstencilTableFactory.h include cstdio include cstring ------------------------------------------------------------------------------ Vertex container implementation. struct Vertex Minimal required interface ---------------------- Vertex Vertex Vertex const src _position 0 src . _position 0 _position 1 src . _position 1 _position 2 src . _position 2 void Clear void 0 _position 0 _position 1 _position 2 0.0f void AddWithWeight Vertex const src , float weight _position 0 weight src . _position 0 _position 1 weight src . _position 1 _position 2 weight src . _position 2 Public interface ------------------------------------ void SetPosition float x , float y , float z _position 0 x _position 1 y _position 2 z float const GetPosition const return _position float GetPosition return _position private float _position 3 ------------------------------------------------------------------------------ Cube geometry from catmark_cube.h static float g_verts 24 -0.5f , -0.5f , 0.5f , 0.5f , -0.5f , 0.5f , -0.5f , 0.5f , 0.5f , 0.5f , 0.5f , 0.5f , -0.5f , 0.5f , -0.5f , 0.5f , 0.5f , -0.5f , -0.5f , -0.5f , -0.5f , 0.5f , -0.5f , -0.5f static int g_nverts 8 , g_nfaces 6 static int g_vertsperface 6 4 , 4 , 4 , 4 , 4 , 4 static int g_vertIndices 24 0 , 1 , 3 , 2 , 2 , 3 , 5 , 4 , 4 , 5 , 7 , 6 , 6 , 7 , 1 , 0 , 1 , 7 , 5 , 3 , 6 , 0 , 2 , 4 using namespace OpenSubdiv static Far TopologyRefiner createTopologyRefiner ------------------------------------------------------------------------------ int main int , char Generate a FarTopologyRefiner see tutorial_1_1 for details. Far TopologyRefiner refiner createTopologyRefiner Uniformly refine the topology up to maxlevel. int maxlevel 4 refiner - RefineUniform Far TopologyRefiner UniformOptions maxlevel Use the FarStencilTable factory to create cascading stencil table note we want stencils for each refinement level cascade mode is achieved by setting factorizeIntermediateLevels to false Far StencilTableFactory Options options options . generateIntermediateLevels true options . factorizeIntermediateLevels false options . generateOffsets true Far StencilTable const stencilTable Far StencilTableFactory Create refiner , options std vector Vertex vertexBuffer refiner - GetNumVerticesTotal - g_nverts Vertex destVerts vertexBuffer 0 int start 0 , end 0 stencil batches for each level of subdivision for int level 0 level maxlevel level int nverts refiner - GetLevel level 1 . GetNumVertices Vertex const srcVerts reinterpret_cast Vertex g_verts if level 0 srcVerts vertexBuffer start start end end nverts stencilTable - UpdateValues srcVerts , destVerts , start , end apply 2 hierarchical edits on level 1 vertices if level 1 float pos destVerts start 5 . GetPosition pos 1 0.5f pos destVerts start 20 . GetPosition pos 0 0.25f Output OBJ of the highest level refined ----------- Vertex verts vertexBuffer 0 Print vertex positions for int level 1 , firstvert 0 level maxlevel level Far TopologyLevel const refLevel refiner - GetLevel level printf g level_d n , level int nverts refLevel . GetNumVertices for int vert 0 vert nverts vert float const pos verts vert . GetPosition printf v f f f n , pos 0 , pos 1 , pos 2 verts nverts Print faces for int face 0 face refLevel . GetNumFaces face Far ConstIndexArray fverts refLevel . GetFaceVertices face all refined Catmark faces should be quads assert fverts . size 4 printf f for int vert 0 vert fverts . size vert printf d , fverts vert firstvert 1 OBJ uses 1-based arrays... printf n firstvert nverts delete refiner delete stencilTable return EXIT_SUCCESS ------------------------------------------------------------------------------ static Far TopologyRefiner createTopologyRefiner Populate a topology descriptor with our raw data. typedef Far TopologyDescriptor Descriptor Sdc SchemeType type OpenSubdiv Sdc SCHEME_CATMARK Sdc Options options options . SetVtxBoundaryInterpolation Sdc Options VTX_BOUNDARY_EDGE_ONLY Descriptor desc desc . numVertices g_nverts desc . numFaces g_nfaces desc . numVertsPerFace g_vertsperface desc . vertIndicesPerFace g_vertIndices Instantiate a FarTopologyRefiner from the descriptor. return Far TopologyRefinerFactory Descriptor Create desc , Far TopologyRefinerFactory Descriptor Options type , options ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n- \"loc\": \"far_tutorial_2_3.html\"\n+ \"loc\": \"far_tutorial_4_3.html\"\n+ }, {\n+ \"title\": \"far_tutorial_3_1.cpp\",\n+ \"text\": \"far_tutorial_3_1.cpp far_tutorial_3_1.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsfartutorial_3_1far_tutorial_3_1.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial shows how to interface a high-level topology representation with Far for better efficiency. In tutorial 0, we showed how to instantiate topology from a simple face-vertex list. Here we will show how to take advantage of more complex data structures. Many client applications that manipulate geometry use advanced data structures such as half-edge, quad-edge or winged-edge in order to represent complex topological relationships beyond the usual face-vertex lists. We can take advantage of this information. Far provides an advanced interface that allows such a client application to communicate advanced component relationships directly and avoid having Far rebuilding them redundantly. include opensubdivfartopologyRefinerFactory.h include opensubdivfarprimvarRefiner.h include cstdio ------------------------------------------------------------------------------ using namespace OpenSubdiv ------------------------------------------------------------------------------ For this tutorial, we provide the complete topological representation of a simple pyramid. In our case, we store it as a simple sequence of integers, with the understanding that client-code would provide a fully implemented data-structure such as quad-edges or winged-edges. Pyramid geometry from catmark_pyramid.h - extended for this tutorial static int g_nverts 5 , g_nedges 8 , g_nfaces 5 vertex positions static float g_verts 5 3 0.0f , 0.0f , 2.0f , 0.0f , -2.0f , 0.0f , 2.0f , 0.0f , 0.0f , 0.0f , 2.0f , 0.0f , -2.0f , 0.0f , 0.0f number of vertices in each face static int g_facenverts 5 3 , 3 , 3 , 3 , 4 index of face vertices static int g_faceverts 16 0 , 1 , 2 , 0 , 2 , 3 , 0 , 3 , 4 , 0 , 4 , 1 , 4 , 3 , 2 , 1 index of edge vertices 2 per edge static int g_edgeverts 16 0 , 1 , 1 , 2 , 2 , 0 , 2 , 3 , 3 , 0 , 3 , 4 , 4 , 0 , 4 , 1 index of face edges static int g_faceedges 16 0 , 1 , 2 , 2 , 3 , 4 , 4 , 5 , 6 , 6 , 7 , 0 , 5 , 3 , 1 , 7 number of faces adjacent to each edge static int g_edgenfaces 8 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 index of faces incident to a given edge static int g_edgefaces 16 0 , 3 , 0 , 4 , 0 , 1 , 1 , 4 , 1 , 2 , 2 , 4 , 2 , 3 , 3 , 4 number of faces incident to each vertex static int g_vertexnfaces 5 4 , 3 , 3 , 3 , 3 index of faces incident to each vertex static int g_vertexfaces 25 0 , 1 , 2 , 3 , 0 , 3 , 4 , 0 , 4 , 1 , 1 , 4 , 2 , 2 , 4 , 3 number of edges incident to each vertex static int g_vertexnedges 5 4 , 3 , 3 , 3 , 3 index of edges incident to each vertex static int g_vertexedges 25 0 , 2 , 4 , 6 , 1 , 0 , 7 , 2 , 1 , 3 , 4 , 3 , 5 , 6 , 5 , 7 Edge crease sharpness static float g_edgeCreases 8 0.0f , 2.5f , 0.0f , 2.5f , 0.0f , 2.5f , 0.0f , 2.5f ------------------------------------------------------------------------------ Because existing client-code may not provide an exact match for the topological queries required by Fars interface, we can provide a converter class. This can be particularly useful for instance if the client data-structure requires additional relationships to be mapped. For instance, half-edge representations do not store unique edge indices and it can be difficult to traverse edges or faces adjacent to a given vertex. Using an intermediate wrapper class allows us to leverage existing relationships information from a mesh, and generate the missing components temporarily. For a practical example, you can look at the file hbr_to_vtr.h in the same tutorial directory. This example implements a OsdHbrConverter class as a way of interfacing PRmans half-edge representation to Far. struct Converter public Sdc SchemeType GetType const return Sdc SCHEME_CATMARK Sdc Options GetOptions const Sdc Options options options . SetVtxBoundaryInterpolation Sdc Options VTX_BOUNDARY_EDGE_ONLY return options int GetNumFaces const return g_nfaces int GetNumEdges const return g_nedges int GetNumVertices const return g_nverts Face relationships int GetNumFaceVerts int face const return g_facenverts face int const GetFaceVerts int face const return g_faceverts getCompOffset g_facenverts , face int const GetFaceEdges int face const return g_faceedges getCompOffset g_facenverts , face Edge relationships int const GetEdgeVertices int edge const return g_edgeverts edge 2 int GetNumEdgeFaces int edge const return g_edgenfaces edge int const GetEdgeFaces int edge const return g_edgefaces getCompOffset g_edgenfaces , edge Vertex relationships int GetNumVertexEdges int vert const return g_vertexnedges vert int const GetVertexEdges int vert const return g_vertexedges getCompOffset g_vertexnedges , vert int GetNumVertexFaces int vert const return g_vertexnfaces vert int const GetVertexFaces int vert const return g_vertexfaces getCompOffset g_vertexnfaces , vert private int getCompOffset int const comps , int comp const int ofs 0 for int i 0 i comp i ofs comps i return ofs ------------------------------------------------------------------------------ namespace OpenSubdiv namespace OPENSUBDIV_VERSION namespace Far template bool TopologyRefinerFactory Converter resizeComponentTopology TopologyRefiner refiner , Converter const conv Faces and face-verts int nfaces conv . GetNumFaces setNumBaseFaces refiner , nfaces for int face 0 face nfaces face int nv conv . GetNumFaceVerts face setNumBaseFaceVertices refiner , face , nv Edges and edge-faces int nedges conv . GetNumEdges setNumBaseEdges refiner , nedges for int edge 0 edge nedges edge int nf conv . GetNumEdgeFaces edge setNumBaseEdgeFaces refiner , edge , nf Vertices and vert-faces and vert-edges int nverts conv . GetNumVertices setNumBaseVertices refiner , nverts for int vert 0 vert nverts vert int ne conv . GetNumVertexEdges vert , nf conv . GetNumVertexFaces vert setNumBaseVertexEdges refiner , vert , ne setNumBaseVertexFaces refiner , vert , nf return true template bool TopologyRefinerFactory Converter assignComponentTopology TopologyRefiner refiner , Converter const conv using Far IndexArray Face relations int nfaces conv . GetNumFaces for int face 0 face nfaces face IndexArray dstFaceVerts getBaseFaceVertices refiner , face IndexArray dstFaceEdges getBaseFaceEdges refiner , face int const faceverts conv . GetFaceVerts face int const faceedges conv . GetFaceEdges face for int vert 0 vert conv . GetNumFaceVerts face vert dstFaceVerts vert faceverts vert dstFaceEdges vert faceedges vert Edge relations Note if your representation is unable to provide edge relationships ex half-edges, you can comment out this section and Far will automatically generate the missing information. int nedges conv . GetNumEdges for int edge 0 edge nedges edge Edge-vertices IndexArray dstEdgeVerts getBaseEdgeVertices refiner , edge dstEdgeVerts 0 conv . GetEdgeVertices edge 0 dstEdgeVerts 1 conv . GetEdgeVertices edge 1 Edge-faces IndexArray dstEdgeFaces getBaseEdgeFaces refiner , edge for int face 0 face conv . GetNumEdgeFaces face face dstEdgeFaces face conv . GetEdgeFaces edge face Vertex relations int nverts conv . GetNumVertices for int vert 0 vert nverts vert Vert-Faces IndexArray vertFaces getBaseVertexFaces refiner , vert LocalIndexArray vertInFaceIndices getBaseVertexFaceLocalIndicesrefiner, vert for int face 0 face conv . GetNumVertexFaces vert face vertFaces face conv . GetVertexFaces vert face Vert-Edges IndexArray vertEdges getBaseVertexEdges refiner , vert LocalIndexArray vertInEdgeIndices getBaseVertexEdgeLocalIndicesrefiner, vert for int edge 0 edge conv . GetNumVertexEdges vert edge vertEdges edge conv . GetVertexEdges vert edge populateBaseLocalIndices refiner return true template bool TopologyRefinerFactory Converter assignComponentTags TopologyRefiner refiner , Converter const conv arbitrarily sharpen the 4 bottom edges of the pyramid to 2.5f for int edge 0 edge conv . GetNumEdges edge setBaseEdgeSharpness refiner , edge , g_edgeCreases edge return true ifdef _MSC_VER template void TopologyRefinerFactory Converter reportInvalidTopology TopologyError errCode , char const msg , Converter const mesh Optional topology validation error reporting This method is called whenever the factory encounters topology validation errors. By default, nothing is reported Warning msg template bool TopologyRefinerFactory Converter assignFaceVaryingTopology TopologyRefiner refiner , Converter const conv Because of the way MSVC specializes templated functions, we had to remove the default stubs in FarTopologyRefinerFactory. In this example, no face-varying data is being added, but we still need to implement a template specialization or MSVC linker fails. return true endif namespace Far namespace OPENSUBDIV_VERSION namespace OpenSubdiv ------------------------------------------------------------------------------ Vertex container implementation. struct Vertex Minimal required interface ---------------------- Vertex Vertex Vertex const src _position 0 src . _position 0 _position 1 src . _position 1 _position 2 src . _position 2 void Clear void 0 _position 0 _position 1 _position 2 0.0f void AddWithWeight Vertex const src , float weight _position 0 weight src . _position 0 _position 1 weight src . _position 1 _position 2 weight src . _position 2 Public interface ------------------------------------ void SetPosition float x , float y , float z _position 0 x _position 1 y _position 2 z const float GetPosition const return _position private float _position 3 ------------------------------------------------------------------------------ int main int , char Converter conv Far TopologyRefiner refiner Far TopologyRefinerFactory Converter Create conv , Far TopologyRefinerFactory Converter Options conv . GetType , conv . GetOptions int maxlevel 5 Uniformly refine the topology up to maxlevel refiner - RefineUniform Far TopologyRefiner UniformOptions maxlevel Allocate a buffer for vertex primvar data. The buffer length is set to be the sum of all children vertices up to the highest level of refinement. std vector Vertex vbuffer refiner - GetNumVerticesTotal Vertex verts vbuffer 0 Initialize coarse mesh positions int nCoarseVerts g_nverts for int i 0 i nCoarseVerts i verts i . SetPosition g_verts i 0 , g_verts i 1 , g_verts i 2 Interpolate vertex primvar data Far PrimvarRefiner primvarRefiner refiner Vertex src verts for int level 1 level maxlevel level Vertex dst src refiner - GetLevel level -1 . GetNumVertices primvarRefiner . Interpolate level , src , dst src dst Output OBJ of the highest level refined ----------- Far TopologyLevel const refLastLevel refiner - GetLevel maxlevel int nverts refLastLevel . GetNumVertices int nfaces refLastLevel . GetNumFaces Print vertex positions int firstOfLastVerts refiner - GetNumVerticesTotal - nverts for int vert 0 vert nverts vert float const pos verts firstOfLastVerts vert . GetPosition printf v f f f n , pos 0 , pos 1 , pos 2 Print faces for int face 0 face nfaces face Far ConstIndexArray fverts refLastLevel . GetFaceVertices face all refined Catmark faces should be quads assert fverts . size 4 printf f for int vert 0 vert fverts . size vert printf d , fverts vert 1 OBJ uses 1-based arrays... printf n delete refiner return EXIT_SUCCESS ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n+ \"tags\": \"\",\n+ \"loc\": \"far_tutorial_3_1.html\"\n }, {\n \"title\": \"far_tutorial_4_2.cpp\",\n \"text\": \"far_tutorial_4_2.cpp far_tutorial_4_2.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsfartutorial_4_2far_tutorial_4_2.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial shows how to create and manipulate both vertex and varying FarStencilTable to interpolate 2 primvar data buffers vertex positions and vertex colors. include opensubdivfartopologyDescriptor.h include opensubdivfarstencilTable.h include opensubdivfarstencilTableFactory.h include cstdio include cstring ------------------------------------------------------------------------------ Vertex container implementation. struct Vertex Minimal required interface ---------------------- Vertex Vertex Vertex const src _data 0 src . _data 0 _data 1 src . _data 1 _data 2 src . _data 2 void Clear void 0 _data 0 _data 1 _data 2 0.0f void AddWithWeight Vertex const src , float weight _data 0 weight src . _data 0 _data 1 weight src . _data 1 _data 2 weight src . _data 2 Public interface ------------------------------------ float const GetData const return _data private float _data 3 ------------------------------------------------------------------------------ Cube geometry from catmark_cube.h static float g_verts 24 -0.5f , -0.5f , 0.5f , 0.5f , -0.5f , 0.5f , -0.5f , 0.5f , 0.5f , 0.5f , 0.5f , 0.5f , -0.5f , 0.5f , -0.5f , 0.5f , 0.5f , -0.5f , -0.5f , -0.5f , -0.5f , 0.5f , -0.5f , -0.5f Per-vertex RGB color data static float g_colors 24 1.0f , 0.0f , 0.5f , 0.0f , 1.0f , 0.0f , 0.0f , 0.0f , 1.0f , 1.0f , 1.0f , 1.0f , 1.0f , 1.0f , 0.0f , 0.0f , 1.0f , 1.0f , 1.0f , 0.0f , 1.0f , 0.0f , 0.0f , 0.0f static int g_nverts 8 , g_nfaces 6 static int g_vertsperface 6 4 , 4 , 4 , 4 , 4 , 4 static int g_vertIndices 24 0 , 1 , 3 , 2 , 2 , 3 , 5 , 4 , 4 , 5 , 7 , 6 , 6 , 7 , 1 , 0 , 1 , 7 , 5 , 3 , 6 , 0 , 2 , 4 using namespace OpenSubdiv static Far TopologyRefiner createTopologyRefiner ------------------------------------------------------------------------------ int main int , char Generate a FarTopologyRefiner see tutorial_1_1 for details. Far TopologyRefiner refiner createTopologyRefiner Uniformly refine the topology up to maxlevel. int maxlevel 4 refiner - RefineUniform Far TopologyRefiner UniformOptions maxlevel int nverts refiner - GetLevel maxlevel . GetNumVertices Use the FarStencilTable factory to create discrete stencil table Far StencilTableFactory Options options options . generateIntermediateLevels false only the highest refinement level. options . generateOffsets true Vertex primvar data Create stencils table for vertex interpolation options . interpolationMode Far StencilTableFactory INTERPOLATE_VERTEX Far StencilTable const vertexStencils Far StencilTableFactory Create refiner , options assert nverts vertexStencils - GetNumStencils Allocate vertex primvar buffer 1 stencil for each vertex std vector Vertex vertexBuffer vertexStencils - GetNumStencils Use the cube vertex positions as vertex primvar data Vertex vertexCVs reinterpret_cast Vertex g_verts Varying primvar data Create stencils table for varying interpolation options . interpolationMode Far StencilTableFactory INTERPOLATE_VARYING Far StencilTable const varyingStencils Far StencilTableFactory Create refiner , options assert nverts varyingStencils - GetNumStencils Allocate varying primvar buffer 1 stencil for each vertex std vector Vertex varyingBuffer varyingStencils - GetNumStencils Use per-vertex array of RGB colors as varying primvar data Vertex varyingCVs reinterpret_cast Vertex g_colors delete refiner Apply stencils in frame loop This section would be applied every frame after control vertices have been moved. Apply stencils on the control vertex data to update the primvar data of the refined vertices. vertexStencils - UpdateValues vertexCVs , vertexBuffer 0 varyingStencils - UpdateValues varyingCVs , varyingBuffer 0 Visualization with Maya print a MEL script that generates particles at the location of the refined vertices printf particle for int vert 0 vert int nverts vert float const pos vertexBuffer vert . GetData printf -p f f f n , pos 0 , pos 1 , pos 2 printf -c 1 n Set particle point size 20 -- very large printf addAttr -is true -ln pointSize -at long -dv 20 particleShape1 n Add per-particle color attribute rgbPP printf addAttr -ln rgbPP -dt vectorArray particleShape1 n Set per-particle color values from our varying primvar data printf setAttr particleShape1.rgbPP -type vectorArray d , nverts for int vert 0 vert nverts vert float const color varyingBuffer vert . GetData printf f f f n , color 0 , color 1 , color 2 printf n delete vertexStencils delete varyingStencils return EXIT_SUCCESS ------------------------------------------------------------------------------ static Far TopologyRefiner createTopologyRefiner Populate a topology descriptor with our raw data. typedef Far TopologyDescriptor Descriptor Sdc SchemeType type OpenSubdiv Sdc SCHEME_CATMARK Sdc Options options options . SetVtxBoundaryInterpolation Sdc Options VTX_BOUNDARY_EDGE_ONLY Descriptor desc desc . numVertices g_nverts desc . numFaces g_nfaces desc . numVertsPerFace g_vertsperface desc . vertIndicesPerFace g_vertIndices Instantiate a FarTopologyRefiner from the descriptor. Far TopologyRefiner refiner Far TopologyRefinerFactory Descriptor Create desc , Far TopologyRefinerFactory Descriptor Options type , options return refiner ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"far_tutorial_4_2.html\"\n }, {\n \"title\": \"far_tutorial_4_1.cpp\",\n \"text\": \"far_tutorial_4_1.cpp far_tutorial_4_1.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsfartutorial_4_1far_tutorial_4_1.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial shows how to create and manipulate FarStencilTable. We use the factorized stencils to interpolate vertex primvar data buffers. include opensubdivfartopologyDescriptor.h include opensubdivfarstencilTable.h include opensubdivfarstencilTableFactory.h include cstdio include cstring ------------------------------------------------------------------------------ Vertex container implementation. struct Vertex Minimal required interface ---------------------- Vertex Vertex Vertex const src _position 0 src . _position 0 _position 1 src . _position 1 _position 2 src . _position 2 void Clear void 0 _position 0 _position 1 _position 2 0.0f void AddWithWeight Vertex const src , float weight _position 0 weight src . _position 0 _position 1 weight src . _position 1 _position 2 weight src . _position 2 Public interface ------------------------------------ void SetPosition float x , float y , float z _position 0 x _position 1 y _position 2 z float const GetPosition const return _position private float _position 3 ------------------------------------------------------------------------------ Cube geometry from catmark_cube.h static float g_verts 24 -0.5f , -0.5f , 0.5f , 0.5f , -0.5f , 0.5f , -0.5f , 0.5f , 0.5f , 0.5f , 0.5f , 0.5f , -0.5f , 0.5f , -0.5f , 0.5f , 0.5f , -0.5f , -0.5f , -0.5f , -0.5f , 0.5f , -0.5f , -0.5f static int g_nverts 8 , g_nfaces 6 static int g_vertsperface 6 4 , 4 , 4 , 4 , 4 , 4 static int g_vertIndices 24 0 , 1 , 3 , 2 , 2 , 3 , 5 , 4 , 4 , 5 , 7 , 6 , 6 , 7 , 1 , 0 , 1 , 7 , 5 , 3 , 6 , 0 , 2 , 4 using namespace OpenSubdiv static Far TopologyRefiner createTopologyRefiner ------------------------------------------------------------------------------ int main int , char Generate a FarTopologyRefiner see tutorial_1_1 for details. Far TopologyRefiner refiner createTopologyRefiner Uniformly refine the topology up to maxlevel. int maxlevel 3 refiner - RefineUniform Far TopologyRefiner UniformOptions maxlevel Use the FarStencilTable factory to create discrete stencil table note we only want stencils for the highest refinement level. Far StencilTableFactory Options options options . generateIntermediateLevels false options . generateOffsets true Far StencilTable const stencilTable Far StencilTableFactory Create refiner , options Allocate vertex primvar buffer 1 stencil for each vertex int nstencils stencilTable - GetNumStencils std vector Vertex vertexBuffer nstencils Quick dirty re-cast of the primvar data from our cube this is where you would drive shape deformations every frame Vertex controlValues reinterpret_cast Vertex g_verts This section would be applied every frame after control vertices have been moved. Apply stencils on the control vertex data to update the primvar data of the refined vertices. stencilTable - UpdateValues controlValues , vertexBuffer 0 Visualization with Maya print a MEL script that generates particles at the location of the refined vertices printf particle for int i 0 i int vertexBuffer . size i float const pos vertexBuffer i . GetPosition printf -p f f f n , pos 0 , pos 1 , pos 2 printf -c 1 n delete refiner delete stencilTable return EXIT_SUCCESS ------------------------------------------------------------------------------ static Far TopologyRefiner createTopologyRefiner Populate a topology descriptor with our raw data. typedef Far TopologyDescriptor Descriptor Sdc SchemeType type OpenSubdiv Sdc SCHEME_CATMARK Sdc Options options options . SetVtxBoundaryInterpolation Sdc Options VTX_BOUNDARY_EDGE_ONLY Descriptor desc desc . numVertices g_nverts desc . numFaces g_nfaces desc . numVertsPerFace g_vertsperface desc . vertIndicesPerFace g_vertIndices Instantiate a FarTopologyRefiner from the descriptor. return Far TopologyRefinerFactory Descriptor Create desc , Far TopologyRefinerFactory Descriptor Options type , options ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"far_tutorial_4_1.html\"\n }, {\n- \"title\": \"far_tutorial_4_3.cpp\",\n- \"text\": \"far_tutorial_4_3.cpp far_tutorial_4_3.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsfartutorial_4_3far_tutorial_4_3.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial shows how to create and manipulate table of cascading stencils. We initialize a FarTopologyRefiner with a cube and apply uniform refinement. We then use a FarStencilTableFactory to generate a stencil table. We set the factory Options to not factorize intermediate levels, thus giving a table of cascading stencils. We then apply the stencils to the vertex position primvar data, and insert a hierarchical edit at level 1. This edit is smoothed by the application of the subsequent stencil cascades. The results are dumped into an OBJ file that shows the intermediate levels of refinement of the original cube. include opensubdivfartopologyDescriptor.h include opensubdivfarstencilTable.h include opensubdivfarstencilTableFactory.h include cstdio include cstring ------------------------------------------------------------------------------ Vertex container implementation. struct Vertex Minimal required interface ---------------------- Vertex Vertex Vertex const src _position 0 src . _position 0 _position 1 src . _position 1 _position 2 src . _position 2 void Clear void 0 _position 0 _position 1 _position 2 0.0f void AddWithWeight Vertex const src , float weight _position 0 weight src . _position 0 _position 1 weight src . _position 1 _position 2 weight src . _position 2 Public interface ------------------------------------ void SetPosition float x , float y , float z _position 0 x _position 1 y _position 2 z float const GetPosition const return _position float GetPosition return _position private float _position 3 ------------------------------------------------------------------------------ Cube geometry from catmark_cube.h static float g_verts 24 -0.5f , -0.5f , 0.5f , 0.5f , -0.5f , 0.5f , -0.5f , 0.5f , 0.5f , 0.5f , 0.5f , 0.5f , -0.5f , 0.5f , -0.5f , 0.5f , 0.5f , -0.5f , -0.5f , -0.5f , -0.5f , 0.5f , -0.5f , -0.5f static int g_nverts 8 , g_nfaces 6 static int g_vertsperface 6 4 , 4 , 4 , 4 , 4 , 4 static int g_vertIndices 24 0 , 1 , 3 , 2 , 2 , 3 , 5 , 4 , 4 , 5 , 7 , 6 , 6 , 7 , 1 , 0 , 1 , 7 , 5 , 3 , 6 , 0 , 2 , 4 using namespace OpenSubdiv static Far TopologyRefiner createTopologyRefiner ------------------------------------------------------------------------------ int main int , char Generate a FarTopologyRefiner see tutorial_1_1 for details. Far TopologyRefiner refiner createTopologyRefiner Uniformly refine the topology up to maxlevel. int maxlevel 4 refiner - RefineUniform Far TopologyRefiner UniformOptions maxlevel Use the FarStencilTable factory to create cascading stencil table note we want stencils for each refinement level cascade mode is achieved by setting factorizeIntermediateLevels to false Far StencilTableFactory Options options options . generateIntermediateLevels true options . factorizeIntermediateLevels false options . generateOffsets true Far StencilTable const stencilTable Far StencilTableFactory Create refiner , options std vector Vertex vertexBuffer refiner - GetNumVerticesTotal - g_nverts Vertex destVerts vertexBuffer 0 int start 0 , end 0 stencil batches for each level of subdivision for int level 0 level maxlevel level int nverts refiner - GetLevel level 1 . GetNumVertices Vertex const srcVerts reinterpret_cast Vertex g_verts if level 0 srcVerts vertexBuffer start start end end nverts stencilTable - UpdateValues srcVerts , destVerts , start , end apply 2 hierarchical edits on level 1 vertices if level 1 float pos destVerts start 5 . GetPosition pos 1 0.5f pos destVerts start 20 . GetPosition pos 0 0.25f Output OBJ of the highest level refined ----------- Vertex verts vertexBuffer 0 Print vertex positions for int level 1 , firstvert 0 level maxlevel level Far TopologyLevel const refLevel refiner - GetLevel level printf g level_d n , level int nverts refLevel . GetNumVertices for int vert 0 vert nverts vert float const pos verts vert . GetPosition printf v f f f n , pos 0 , pos 1 , pos 2 verts nverts Print faces for int face 0 face refLevel . GetNumFaces face Far ConstIndexArray fverts refLevel . GetFaceVertices face all refined Catmark faces should be quads assert fverts . size 4 printf f for int vert 0 vert fverts . size vert printf d , fverts vert firstvert 1 OBJ uses 1-based arrays... printf n firstvert nverts delete refiner delete stencilTable return EXIT_SUCCESS ------------------------------------------------------------------------------ static Far TopologyRefiner createTopologyRefiner Populate a topology descriptor with our raw data. typedef Far TopologyDescriptor Descriptor Sdc SchemeType type OpenSubdiv Sdc SCHEME_CATMARK Sdc Options options options . SetVtxBoundaryInterpolation Sdc Options VTX_BOUNDARY_EDGE_ONLY Descriptor desc desc . numVertices g_nverts desc . numFaces g_nfaces desc . numVertsPerFace g_vertsperface desc . vertIndicesPerFace g_vertIndices Instantiate a FarTopologyRefiner from the descriptor. return Far TopologyRefinerFactory Descriptor Create desc , Far TopologyRefinerFactory Descriptor Options type , options ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n+ \"title\": \"far_tutorial_2_3.cpp\",\n+ \"text\": \"far_tutorial_2_3.cpp far_tutorial_2_3.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsfartutorial_2_3far_tutorial_2_3.cpp ------------------------------------------------------------------------------ Tutorial description NOTE The following approaches are approximations to compute smooth normals, for highest fidelity patches should be used for positions and normals, which form the true limit surface. Building on tutorial 3, this example shows how to instantiate a simple mesh, refine it uniformly, interpolate both vertex and face-varying primvar data, and finally calculate approximated smooth normals. The resulting interpolated data is output in obj format. Currently, this tutorial supports 3 methods to approximate smooth normals CrossTriangle Calculates smooth normals accumulating per vertex using 3 verts to generate 2 vectors. This approximation has trouble when working with quads which can be non-planar since it only takes into account half of each face. CrossQuad Calculates smooth normals accumulating per vertex but this time, instead of taking into account only 3 verts it creates 2 vectors crossing the quad. This approximation builds upon CrossTriangle but takes into account the 4 verts of the face. Limit Calculates the normals at the limit for each vert at the last level of subdivision. These are the true limit normals, however, in this example they are used with verts that are not at the limit. This can lead to new visual artifacts since the normals and the positions dont match. Additionally, this approach requires extra computation to calculate the limit normals. For this reason, we strongly suggest using limit positions with limit normals. include opensubdivfartopologyDescriptor.h include opensubdivfarprimvarRefiner.h include cstdio ------------------------------------------------------------------------------ Math helpers. Returns the normalized version of the input vector inline void normalize float n float rn 1.0f sqrtf n 0 n 0 n 1 n 1 n 2 n 2 n 0 rn n 1 rn n 2 rn Returns the cross product of p v1 and p v2. void cross float const v1 , float const v2 , float vOut vOut 0 v1 1 v2 2 - v1 2 v2 1 vOut 1 v1 2 v2 0 - v1 0 v2 2 vOut 2 v1 0 v2 1 - v1 1 v2 0 ------------------------------------------------------------------------------ Face-varying implementation. struct Vertex Minimal required interface ---------------------- Vertex Clear Vertex Vertex const src position 0 src . position 0 position 1 src . position 1 position 2 src . position 2 void Clear position 0 position 1 position 2 0.0f void AddWithWeight Vertex const src , float weight position 0 weight src . position 0 position 1 weight src . position 1 position 2 weight src . position 2 Public interface ------------------------------------ void SetPosition float x , float y , float z position 0 x position 1 y position 2 z const float GetPosition const return position float position 3 ------------------------------------------------------------------------------ Face-varying container implementation. We are using a uv texture layout as a face-varying primtiive variable attribute. Because face-varying data is specified per-face-per-vertex, we cannot use the same container that we use for vertex or varying data. We specify a new container, which only carries u,v coordinates. Similarly to our Vertex container, we add a minimaliztic interpolation interface with a Clear and AddWithWeight methods. struct FVarVertexUV Minimal required interface ---------------------- void Clear u v 0.0f void AddWithWeight FVarVertexUV const src , float weight u weight src . u v weight src . v Basic uv layout channel float u , v struct FVarVertexColor Minimal required interface ---------------------- void Clear r g b a 0.0f void AddWithWeight FVarVertexColor const src , float weight r weight src . r g weight src . g b weight src . b a weight src . a Basic color layout channel float r , g , b , a ------------------------------------------------------------------------------ Cube geometry from catmark_cube.h vertex primitive variable data topology static float g_verts 8 3 -0.5f , -0.5f , 0.5f , 0.5f , -0.5f , 0.5f , -0.5f , 0.5f , 0.5f , 0.5f , 0.5f , 0.5f , -0.5f , 0.5f , -0.5f , 0.5f , 0.5f , -0.5f , -0.5f , -0.5f , -0.5f , 0.5f , -0.5f , -0.5f static int g_nverts 8 , g_nfaces 6 static int g_vertsperface 6 4 , 4 , 4 , 4 , 4 , 4 static int g_vertIndices 24 0 , 1 , 3 , 2 , 2 , 3 , 5 , 4 , 4 , 5 , 7 , 6 , 6 , 7 , 1 , 0 , 1 , 7 , 5 , 3 , 6 , 0 , 2 , 4 face-varying primitive variable data topology for UVs static float g_uvs 14 2 0.375 , 0.00 , 0.625 , 0.00 , 0.375 , 0.25 , 0.625 , 0.25 , 0.375 , 0.50 , 0.625 , 0.50 , 0.375 , 0.75 , 0.625 , 0.75 , 0.375 , 1.00 , 0.625 , 1.00 , 0.875 , 0.00 , 0.875 , 0.25 , 0.125 , 0.00 , 0.125 , 0.25 static int g_nuvs 14 static int g_uvIndices 24 0 , 1 , 3 , 2 , 2 , 3 , 5 , 4 , 4 , 5 , 7 , 6 , 6 , 7 , 9 , 8 , 1 , 10 , 11 , 3 , 12 , 0 , 2 , 13 face-varying primitive variable data topology for color static float g_colors 24 4 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 0.0 , 0.0 , 1.0 , 1.0 , 0.0 , 0.0 , 1.0 , 1.0 , 0.0 , 0.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 static int g_ncolors 24 static int g_colorIndices 24 0 , 3 , 9 , 6 , 7 , 10 , 15 , 12 , 13 , 16 , 21 , 18 , 19 , 22 , 4 , 1 , 5 , 23 , 17 , 11 , 20 , 2 , 8 , 14 using namespace OpenSubdiv Approximation methods for smooth normal computations enum NormalApproximation CrossTriangle , CrossQuad , Limit ------------------------------------------------------------------------------ int main int argc , char argv const int maxlevel 2 enum NormalApproximation normalApproximation CrossTriangle Parsing command line parameters to see if the user wants to use a specific method to calculate normals for int i 1 i argc i if strstr argv i , -limit normalApproximation Limit else if strcmp argv i , -crossquad normalApproximation CrossQuad else if strcmp argv i , -crosstriangle normalApproximation CrossTriangle else printf Parameters n printf -crosstriangle use the cross product of vectors n printf generated from 3 verts default. n printf -crossquad use the cross product of vectors n printf generated from 4 verts. n printf -limit use normals calculated from the limit. n return 0 typedef Far TopologyDescriptor Descriptor Sdc SchemeType type OpenSubdiv Sdc SCHEME_CATMARK Sdc Options options options . SetVtxBoundaryInterpolation Sdc Options VTX_BOUNDARY_EDGE_ONLY options . SetFVarLinearInterpolation Sdc Options FVAR_LINEAR_NONE Populate a topology descriptor with our raw data Descriptor desc desc . numVertices g_nverts desc . numFaces g_nfaces desc . numVertsPerFace g_vertsperface desc . vertIndicesPerFace g_vertIndices Create a face-varying channel descriptor const int numChannels 2 const int channelUV 0 const int channelColor 1 Descriptor FVarChannel channels numChannels channels channelUV . numValues g_nuvs channels channelUV . valueIndices g_uvIndices channels channelColor . numValues g_ncolors channels channelColor . valueIndices g_colorIndices Add the channel topology to the main descriptor desc . numFVarChannels numChannels desc . fvarChannels channels Instantiate a FarTopologyRefiner from the descriptor Far TopologyRefiner refiner Far TopologyRefinerFactory Descriptor Create desc , Far TopologyRefinerFactory Descriptor Options type , options Uniformly refine the topolgy up to maxlevel note fullTopologyInLastLevel must be true to work with face-varying data Far TopologyRefiner UniformOptions refineOptions maxlevel refineOptions . fullTopologyInLastLevel true refiner - RefineUniform refineOptions Allocate and initialize the vertex primvar data see tutorial 2 for more details. std vector Vertex vbuffer refiner - GetNumVerticesTotal Vertex verts vbuffer 0 for int i 0 i g_nverts i verts i . SetPosition g_verts i 0 , g_verts i 1 , g_verts i 2 Allocate initialize the first channel of face-varying primvars UVs std vector FVarVertexUV fvBufferUV refiner - GetNumFVarValuesTotal channelUV FVarVertexUV fvVertsUV fvBufferUV 0 for int i 0 i g_nuvs i fvVertsUV i . u g_uvs i 0 fvVertsUV i . v g_uvs i 1 Allocate interpolate the face-varying primvar data colors std vector FVarVertexColor fvBufferColor refiner - GetNumFVarValuesTotal channelColor FVarVertexColor fvVertsColor fvBufferColor 0 for int i 0 i g_ncolors i fvVertsColor i . r g_colors i 0 fvVertsColor i . g g_colors i 1 fvVertsColor i . b g_colors i 2 fvVertsColor i . a g_colors i 3 Interpolate both vertex and face-varying primvar data Far PrimvarRefiner primvarRefiner refiner Vertex srcVert verts FVarVertexUV srcFVarUV fvVertsUV FVarVertexColor srcFVarColor fvVertsColor for int level 1 level maxlevel level Vertex dstVert srcVert refiner - GetLevel level -1 . GetNumVertices FVarVertexUV dstFVarUV srcFVarUV refiner - GetLevel level -1 . GetNumFVarValues channelUV FVarVertexColor dstFVarColor srcFVarColor refiner - GetLevel level -1 . GetNumFVarValues channelColor primvarRefiner . Interpolate level , srcVert , dstVert primvarRefiner . InterpolateFaceVarying level , srcFVarUV , dstFVarUV , channelUV primvarRefiner . InterpolateFaceVarying level , srcFVarColor , dstFVarColor , channelColor srcVert dstVert srcFVarUV dstFVarUV srcFVarColor dstFVarColor Approximate normals Far TopologyLevel const refLastLevel refiner - GetLevel maxlevel int nverts refLastLevel . GetNumVertices int nfaces refLastLevel . GetNumFaces int firstOfLastVerts refiner - GetNumVerticesTotal - nverts std vector Vertex normals nverts Different ways to approximate smooth normals For details check the description at the beginning of the file if normalApproximation Limit Approximation using the normal at the limit with verts that are not at the limit For details check the description at the beginning of the file std vector Vertex fineLimitPos nverts std vector Vertex fineDu nverts std vector Vertex fineDv nverts primvarRefiner . Limit verts firstOfLastVerts , fineLimitPos , fineDu , fineDv for int vert 0 vert nverts vert float const du fineDu vert . GetPosition float const dv fineDv vert . GetPosition float norm 3 cross du , dv , norm normals vert . SetPosition norm 0 , norm 1 , norm 2 else if normalApproximation CrossQuad Approximate smooth normals by accumulating normal vectors computed as the cross product of two vectors generated by the 4 verts that form each quad For details check the description at the beginning of the file for int f 0 f nfaces f Far ConstIndexArray faceVertices refLastLevel . GetFaceVertices f We will use the first three verts to calculate a normal const float v0 verts firstOfLastVerts faceVertices 0 . GetPosition const float v1 verts firstOfLastVerts faceVertices 1 . GetPosition const float v2 verts firstOfLastVerts faceVertices 2 . GetPosition const float v3 verts firstOfLastVerts faceVertices 3 . GetPosition Calculate the cross product between the vectors formed by v1-v0 and v2-v0, and then normalize the result float normalCalculated 0.0 , 0.0 , 0.0 float a 3 v2 0 - v0 0 , v2 1 - v0 1 , v2 2 - v0 2 float b 3 v3 0 - v1 0 , v3 1 - v1 1 , v3 2 - v1 2 cross a , b , normalCalculated normalize normalCalculated Accumulate that normal on all verts that are part of that face for int vInFace 0 vInFace faceVertices . size vInFace int vertexIndex faceVertices vInFace normals vertexIndex . position 0 normalCalculated 0 normals vertexIndex . position 1 normalCalculated 1 normals vertexIndex . position 2 normalCalculated 2 else if normalApproximation CrossTriangle Approximate smooth normals by accumulating normal vectors computed as the cross product of two vectors generated by 3 verts of the quad For details check the description at the beginning of the file for int f 0 f nfaces f Far ConstIndexArray faceVertices refLastLevel . GetFaceVertices f We will use the first three verts to calculate a normal const float v0 verts firstOfLastVerts faceVertices 0 . GetPosition const float v1 verts firstOfLastVerts faceVertices 1 . GetPosition const float v2 verts firstOfLastVerts faceVertices 2 . GetPosition Calculate the cross product between the vectors formed by v1-v0 and v2-v0, and then normalize the result float normalCalculated 0.0 , 0.0 , 0.0 float a 3 v1 0 - v0 0 , v1 1 - v0 1 , v1 2 - v0 2 float b 3 v2 0 - v0 0 , v2 1 - v0 1 , v2 2 - v0 2 cross a , b , normalCalculated normalize normalCalculated Accumulate that normal on all verts that are part of that face for int vInFace 0 vInFace faceVertices . size vInFace int vertexIndex faceVertices vInFace normals vertexIndex . position 0 normalCalculated 0 normals vertexIndex . position 1 normalCalculated 1 normals vertexIndex . position 2 normalCalculated 2 Finally we just need to normalize the accumulated normals for int vert 0 vert nverts vert normalize normals vert . position 0 Output OBJ of the highest level refined ----------- Print vertex positions for int vert 0 vert nverts vert float const pos verts firstOfLastVerts vert . GetPosition printf v f f f n , pos 0 , pos 1 , pos 2 Print vertex normals for int vert 0 vert nverts vert float const pos normals vert . GetPosition printf vn f f f n , pos 0 , pos 1 , pos 2 Print uvs int nuvs refLastLevel . GetNumFVarValues channelUV int firstOfLastUvs refiner - GetNumFVarValuesTotal channelUV - nuvs for int fvvert 0 fvvert nuvs fvvert FVarVertexUV const uv fvVertsUV firstOfLastUvs fvvert printf vt f f n , uv . u , uv . v Print faces for int face 0 face nfaces face Far ConstIndexArray fverts refLastLevel . GetFaceVertices face Far ConstIndexArray fuvs refLastLevel . GetFaceFVarValues face , channelUV all refined Catmark faces should be quads assert fverts . size 4 fuvs . size 4 printf f for int vert 0 vert fverts . size vert OBJ uses 1-based arrays... printf ddd , fverts vert 1 , fuvs vert 1 , fverts vert 1 printf n delete refiner return EXIT_SUCCESS ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n- \"loc\": \"far_tutorial_4_3.html\"\n+ \"loc\": \"far_tutorial_2_3.html\"\n }, {\n- \"title\": \"far_tutorial_3_1.cpp\",\n- \"text\": \"far_tutorial_3_1.cpp far_tutorial_3_1.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsfartutorial_3_1far_tutorial_3_1.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial shows how to interface a high-level topology representation with Far for better efficiency. In tutorial 0, we showed how to instantiate topology from a simple face-vertex list. Here we will show how to take advantage of more complex data structures. Many client applications that manipulate geometry use advanced data structures such as half-edge, quad-edge or winged-edge in order to represent complex topological relationships beyond the usual face-vertex lists. We can take advantage of this information. Far provides an advanced interface that allows such a client application to communicate advanced component relationships directly and avoid having Far rebuilding them redundantly. include opensubdivfartopologyRefinerFactory.h include opensubdivfarprimvarRefiner.h include cstdio ------------------------------------------------------------------------------ using namespace OpenSubdiv ------------------------------------------------------------------------------ For this tutorial, we provide the complete topological representation of a simple pyramid. In our case, we store it as a simple sequence of integers, with the understanding that client-code would provide a fully implemented data-structure such as quad-edges or winged-edges. Pyramid geometry from catmark_pyramid.h - extended for this tutorial static int g_nverts 5 , g_nedges 8 , g_nfaces 5 vertex positions static float g_verts 5 3 0.0f , 0.0f , 2.0f , 0.0f , -2.0f , 0.0f , 2.0f , 0.0f , 0.0f , 0.0f , 2.0f , 0.0f , -2.0f , 0.0f , 0.0f number of vertices in each face static int g_facenverts 5 3 , 3 , 3 , 3 , 4 index of face vertices static int g_faceverts 16 0 , 1 , 2 , 0 , 2 , 3 , 0 , 3 , 4 , 0 , 4 , 1 , 4 , 3 , 2 , 1 index of edge vertices 2 per edge static int g_edgeverts 16 0 , 1 , 1 , 2 , 2 , 0 , 2 , 3 , 3 , 0 , 3 , 4 , 4 , 0 , 4 , 1 index of face edges static int g_faceedges 16 0 , 1 , 2 , 2 , 3 , 4 , 4 , 5 , 6 , 6 , 7 , 0 , 5 , 3 , 1 , 7 number of faces adjacent to each edge static int g_edgenfaces 8 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 index of faces incident to a given edge static int g_edgefaces 16 0 , 3 , 0 , 4 , 0 , 1 , 1 , 4 , 1 , 2 , 2 , 4 , 2 , 3 , 3 , 4 number of faces incident to each vertex static int g_vertexnfaces 5 4 , 3 , 3 , 3 , 3 index of faces incident to each vertex static int g_vertexfaces 25 0 , 1 , 2 , 3 , 0 , 3 , 4 , 0 , 4 , 1 , 1 , 4 , 2 , 2 , 4 , 3 number of edges incident to each vertex static int g_vertexnedges 5 4 , 3 , 3 , 3 , 3 index of edges incident to each vertex static int g_vertexedges 25 0 , 2 , 4 , 6 , 1 , 0 , 7 , 2 , 1 , 3 , 4 , 3 , 5 , 6 , 5 , 7 Edge crease sharpness static float g_edgeCreases 8 0.0f , 2.5f , 0.0f , 2.5f , 0.0f , 2.5f , 0.0f , 2.5f ------------------------------------------------------------------------------ Because existing client-code may not provide an exact match for the topological queries required by Fars interface, we can provide a converter class. This can be particularly useful for instance if the client data-structure requires additional relationships to be mapped. For instance, half-edge representations do not store unique edge indices and it can be difficult to traverse edges or faces adjacent to a given vertex. Using an intermediate wrapper class allows us to leverage existing relationships information from a mesh, and generate the missing components temporarily. For a practical example, you can look at the file hbr_to_vtr.h in the same tutorial directory. This example implements a OsdHbrConverter class as a way of interfacing PRmans half-edge representation to Far. struct Converter public Sdc SchemeType GetType const return Sdc SCHEME_CATMARK Sdc Options GetOptions const Sdc Options options options . SetVtxBoundaryInterpolation Sdc Options VTX_BOUNDARY_EDGE_ONLY return options int GetNumFaces const return g_nfaces int GetNumEdges const return g_nedges int GetNumVertices const return g_nverts Face relationships int GetNumFaceVerts int face const return g_facenverts face int const GetFaceVerts int face const return g_faceverts getCompOffset g_facenverts , face int const GetFaceEdges int face const return g_faceedges getCompOffset g_facenverts , face Edge relationships int const GetEdgeVertices int edge const return g_edgeverts edge 2 int GetNumEdgeFaces int edge const return g_edgenfaces edge int const GetEdgeFaces int edge const return g_edgefaces getCompOffset g_edgenfaces , edge Vertex relationships int GetNumVertexEdges int vert const return g_vertexnedges vert int const GetVertexEdges int vert const return g_vertexedges getCompOffset g_vertexnedges , vert int GetNumVertexFaces int vert const return g_vertexnfaces vert int const GetVertexFaces int vert const return g_vertexfaces getCompOffset g_vertexnfaces , vert private int getCompOffset int const comps , int comp const int ofs 0 for int i 0 i comp i ofs comps i return ofs ------------------------------------------------------------------------------ namespace OpenSubdiv namespace OPENSUBDIV_VERSION namespace Far template bool TopologyRefinerFactory Converter resizeComponentTopology TopologyRefiner refiner , Converter const conv Faces and face-verts int nfaces conv . GetNumFaces setNumBaseFaces refiner , nfaces for int face 0 face nfaces face int nv conv . GetNumFaceVerts face setNumBaseFaceVertices refiner , face , nv Edges and edge-faces int nedges conv . GetNumEdges setNumBaseEdges refiner , nedges for int edge 0 edge nedges edge int nf conv . GetNumEdgeFaces edge setNumBaseEdgeFaces refiner , edge , nf Vertices and vert-faces and vert-edges int nverts conv . GetNumVertices setNumBaseVertices refiner , nverts for int vert 0 vert nverts vert int ne conv . GetNumVertexEdges vert , nf conv . GetNumVertexFaces vert setNumBaseVertexEdges refiner , vert , ne setNumBaseVertexFaces refiner , vert , nf return true template bool TopologyRefinerFactory Converter assignComponentTopology TopologyRefiner refiner , Converter const conv using Far IndexArray Face relations int nfaces conv . GetNumFaces for int face 0 face nfaces face IndexArray dstFaceVerts getBaseFaceVertices refiner , face IndexArray dstFaceEdges getBaseFaceEdges refiner , face int const faceverts conv . GetFaceVerts face int const faceedges conv . GetFaceEdges face for int vert 0 vert conv . GetNumFaceVerts face vert dstFaceVerts vert faceverts vert dstFaceEdges vert faceedges vert Edge relations Note if your representation is unable to provide edge relationships ex half-edges, you can comment out this section and Far will automatically generate the missing information. int nedges conv . GetNumEdges for int edge 0 edge nedges edge Edge-vertices IndexArray dstEdgeVerts getBaseEdgeVertices refiner , edge dstEdgeVerts 0 conv . GetEdgeVertices edge 0 dstEdgeVerts 1 conv . GetEdgeVertices edge 1 Edge-faces IndexArray dstEdgeFaces getBaseEdgeFaces refiner , edge for int face 0 face conv . GetNumEdgeFaces face face dstEdgeFaces face conv . GetEdgeFaces edge face Vertex relations int nverts conv . GetNumVertices for int vert 0 vert nverts vert Vert-Faces IndexArray vertFaces getBaseVertexFaces refiner , vert LocalIndexArray vertInFaceIndices getBaseVertexFaceLocalIndicesrefiner, vert for int face 0 face conv . GetNumVertexFaces vert face vertFaces face conv . GetVertexFaces vert face Vert-Edges IndexArray vertEdges getBaseVertexEdges refiner , vert LocalIndexArray vertInEdgeIndices getBaseVertexEdgeLocalIndicesrefiner, vert for int edge 0 edge conv . GetNumVertexEdges vert edge vertEdges edge conv . GetVertexEdges vert edge populateBaseLocalIndices refiner return true template bool TopologyRefinerFactory Converter assignComponentTags TopologyRefiner refiner , Converter const conv arbitrarily sharpen the 4 bottom edges of the pyramid to 2.5f for int edge 0 edge conv . GetNumEdges edge setBaseEdgeSharpness refiner , edge , g_edgeCreases edge return true ifdef _MSC_VER template void TopologyRefinerFactory Converter reportInvalidTopology TopologyError errCode , char const msg , Converter const mesh Optional topology validation error reporting This method is called whenever the factory encounters topology validation errors. By default, nothing is reported Warning msg template bool TopologyRefinerFactory Converter assignFaceVaryingTopology TopologyRefiner refiner , Converter const conv Because of the way MSVC specializes templated functions, we had to remove the default stubs in FarTopologyRefinerFactory. In this example, no face-varying data is being added, but we still need to implement a template specialization or MSVC linker fails. return true endif namespace Far namespace OPENSUBDIV_VERSION namespace OpenSubdiv ------------------------------------------------------------------------------ Vertex container implementation. struct Vertex Minimal required interface ---------------------- Vertex Vertex Vertex const src _position 0 src . _position 0 _position 1 src . _position 1 _position 2 src . _position 2 void Clear void 0 _position 0 _position 1 _position 2 0.0f void AddWithWeight Vertex const src , float weight _position 0 weight src . _position 0 _position 1 weight src . _position 1 _position 2 weight src . _position 2 Public interface ------------------------------------ void SetPosition float x , float y , float z _position 0 x _position 1 y _position 2 z const float GetPosition const return _position private float _position 3 ------------------------------------------------------------------------------ int main int , char Converter conv Far TopologyRefiner refiner Far TopologyRefinerFactory Converter Create conv , Far TopologyRefinerFactory Converter Options conv . GetType , conv . GetOptions int maxlevel 5 Uniformly refine the topology up to maxlevel refiner - RefineUniform Far TopologyRefiner UniformOptions maxlevel Allocate a buffer for vertex primvar data. The buffer length is set to be the sum of all children vertices up to the highest level of refinement. std vector Vertex vbuffer refiner - GetNumVerticesTotal Vertex verts vbuffer 0 Initialize coarse mesh positions int nCoarseVerts g_nverts for int i 0 i nCoarseVerts i verts i . SetPosition g_verts i 0 , g_verts i 1 , g_verts i 2 Interpolate vertex primvar data Far PrimvarRefiner primvarRefiner refiner Vertex src verts for int level 1 level maxlevel level Vertex dst src refiner - GetLevel level -1 . GetNumVertices primvarRefiner . Interpolate level , src , dst src dst Output OBJ of the highest level refined ----------- Far TopologyLevel const refLastLevel refiner - GetLevel maxlevel int nverts refLastLevel . GetNumVertices int nfaces refLastLevel . GetNumFaces Print vertex positions int firstOfLastVerts refiner - GetNumVerticesTotal - nverts for int vert 0 vert nverts vert float const pos verts firstOfLastVerts vert . GetPosition printf v f f f n , pos 0 , pos 1 , pos 2 Print faces for int face 0 face nfaces face Far ConstIndexArray fverts refLastLevel . GetFaceVertices face all refined Catmark faces should be quads assert fverts . size 4 printf f for int vert 0 vert fverts . size vert printf d , fverts vert 1 OBJ uses 1-based arrays... printf n delete refiner return EXIT_SUCCESS ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n+ \"title\": \"far_tutorial_2_2.cpp\",\n+ \"text\": \"far_tutorial_2_2.cpp far_tutorial_2_2.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsfartutorial_2_2far_tutorial_2_2.cpp ------------------------------------------------------------------------------ Tutorial description Building on tutorial 0, this example shows how to instantiate a simple mesh, refine it uniformly and then interpolate both vertex and face-varying primvar data. The resulting interpolated data is output as an obj file, with the face-varying data recorded in the uv texture layout. include opensubdivfartopologyDescriptor.h include opensubdivfarprimvarRefiner.h include cstdio ------------------------------------------------------------------------------ Face-varying implementation. struct Vertex Minimal required interface ---------------------- Vertex Vertex Vertex const src _position 0 src . _position 0 _position 1 src . _position 1 _position 2 src . _position 2 void Clear void 0 _position 0 _position 1 _position 2 0.0f void AddWithWeight Vertex const src , float weight _position 0 weight src . _position 0 _position 1 weight src . _position 1 _position 2 weight src . _position 2 Public interface ------------------------------------ void SetPosition float x , float y , float z _position 0 x _position 1 y _position 2 z const float GetPosition const return _position private float _position 3 ------------------------------------------------------------------------------ Face-varying container implementation. We are using a uv texture layout as a face-varying primitive variable attribute. Because face-varying data is specified per-face-per-vertex, we cannot use the same container that we use for vertex or varying data. We specify a new container, which only carries u,v coordinates. Similarly to our Vertex container, we add a minimalistic interpolation interface with a Clear and AddWithWeight methods. struct FVarVertexUV Minimal required interface ---------------------- void Clear u v 0.0f void AddWithWeight FVarVertexUV const src , float weight u weight src . u v weight src . v Basic uv layout channel float u , v struct FVarVertexColor Minimal required interface ---------------------- void Clear r g b a 0.0f void AddWithWeight FVarVertexColor const src , float weight r weight src . r g weight src . g b weight src . b a weight src . a Basic color layout channel float r , g , b , a ------------------------------------------------------------------------------ Cube geometry from catmark_cube.h vertex primitive variable data topology static float g_verts 8 3 -0.5f , -0.5f , 0.5f , 0.5f , -0.5f , 0.5f , -0.5f , 0.5f , 0.5f , 0.5f , 0.5f , 0.5f , -0.5f , 0.5f , -0.5f , 0.5f , 0.5f , -0.5f , -0.5f , -0.5f , -0.5f , 0.5f , -0.5f , -0.5f static int g_nverts 8 , g_nfaces 6 static int g_vertsperface 6 4 , 4 , 4 , 4 , 4 , 4 static int g_vertIndices 24 0 , 1 , 3 , 2 , 2 , 3 , 5 , 4 , 4 , 5 , 7 , 6 , 6 , 7 , 1 , 0 , 1 , 7 , 5 , 3 , 6 , 0 , 2 , 4 face-varying primitive variable data topology for UVs static float g_uvs 14 2 0.375 , 0.00 , 0.625 , 0.00 , 0.375 , 0.25 , 0.625 , 0.25 , 0.375 , 0.50 , 0.625 , 0.50 , 0.375 , 0.75 , 0.625 , 0.75 , 0.375 , 1.00 , 0.625 , 1.00 , 0.875 , 0.00 , 0.875 , 0.25 , 0.125 , 0.00 , 0.125 , 0.25 static int g_nuvs 14 static int g_uvIndices 24 0 , 1 , 3 , 2 , 2 , 3 , 5 , 4 , 4 , 5 , 7 , 6 , 6 , 7 , 9 , 8 , 1 , 10 , 11 , 3 , 12 , 0 , 2 , 13 face-varying primitive variable data topology for color static float g_colors 24 4 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 0.0 , 0.0 , 1.0 , 1.0 , 0.0 , 0.0 , 1.0 , 1.0 , 0.0 , 0.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 static int g_ncolors 24 static int g_colorIndices 24 0 , 3 , 9 , 6 , 7 , 10 , 15 , 12 , 13 , 16 , 21 , 18 , 19 , 22 , 4 , 1 , 5 , 23 , 17 , 11 , 20 , 2 , 8 , 14 using namespace OpenSubdiv ------------------------------------------------------------------------------ int main int , char int maxlevel 3 typedef Far TopologyDescriptor Descriptor Sdc SchemeType type OpenSubdiv Sdc SCHEME_CATMARK Sdc Options options options . SetVtxBoundaryInterpolation Sdc Options VTX_BOUNDARY_EDGE_ONLY options . SetFVarLinearInterpolation Sdc Options FVAR_LINEAR_NONE Populate a topology descriptor with our raw data Descriptor desc desc . numVertices g_nverts desc . numFaces g_nfaces desc . numVertsPerFace g_vertsperface desc . vertIndicesPerFace g_vertIndices int channelUV 0 int channelColor 1 Create a face-varying channel descriptor Descriptor FVarChannel channels 2 channels channelUV . numValues g_nuvs channels channelUV . valueIndices g_uvIndices channels channelColor . numValues g_ncolors channels channelColor . valueIndices g_colorIndices Add the channel topology to the main descriptor desc . numFVarChannels 2 desc . fvarChannels channels Instantiate a FarTopologyRefiner from the descriptor Far TopologyRefiner refiner Far TopologyRefinerFactory Descriptor Create desc , Far TopologyRefinerFactory Descriptor Options type , options Uniformly refine the topology up to maxlevel note fullTopologyInLastLevel must be true to work with face-varying data Far TopologyRefiner UniformOptions refineOptions maxlevel refineOptions . fullTopologyInLastLevel true refiner - RefineUniform refineOptions Allocate and initialize the vertex primvar data see tutorial 2 for more details. std vector Vertex vbuffer refiner - GetNumVerticesTotal Vertex verts vbuffer 0 for int i 0 i g_nverts i verts i . SetPosition g_verts i 0 , g_verts i 1 , g_verts i 2 Allocate and initialize the first channel of face-varying primvar data UVs std vector FVarVertexUV fvBufferUV refiner - GetNumFVarValuesTotal channelUV FVarVertexUV fvVertsUV fvBufferUV 0 for int i 0 i g_nuvs i fvVertsUV i . u g_uvs i 0 fvVertsUV i . v g_uvs i 1 Allocate interpolate the face-varying primvar data colors std vector FVarVertexColor fvBufferColor refiner - GetNumFVarValuesTotal channelColor FVarVertexColor fvVertsColor fvBufferColor 0 for int i 0 i g_ncolors i fvVertsColor i . r g_colors i 0 fvVertsColor i . g g_colors i 1 fvVertsColor i . b g_colors i 2 fvVertsColor i . a g_colors i 3 Interpolate both vertex and face-varying primvar data Far PrimvarRefiner primvarRefiner refiner Vertex srcVert verts FVarVertexUV srcFVarUV fvVertsUV FVarVertexColor srcFVarColor fvVertsColor for int level 1 level maxlevel level Vertex dstVert srcVert refiner - GetLevel level -1 . GetNumVertices FVarVertexUV dstFVarUV srcFVarUV refiner - GetLevel level -1 . GetNumFVarValues channelUV FVarVertexColor dstFVarColor srcFVarColor refiner - GetLevel level -1 . GetNumFVarValues channelColor primvarRefiner . Interpolate level , srcVert , dstVert primvarRefiner . InterpolateFaceVarying level , srcFVarUV , dstFVarUV , channelUV primvarRefiner . InterpolateFaceVarying level , srcFVarColor , dstFVarColor , channelColor srcVert dstVert srcFVarUV dstFVarUV srcFVarColor dstFVarColor Output OBJ of the highest level refined ----------- Far TopologyLevel const refLastLevel refiner - GetLevel maxlevel int nverts refLastLevel . GetNumVertices int nuvs refLastLevel . GetNumFVarValues channelUV int ncolors refLastLevel . GetNumFVarValues channelColor int nfaces refLastLevel . GetNumFaces Print vertex positions int firstOfLastVerts refiner - GetNumVerticesTotal - nverts for int vert 0 vert nverts vert float const pos verts firstOfLastVerts vert . GetPosition printf v f f f n , pos 0 , pos 1 , pos 2 Print uvs int firstOfLastUvs refiner - GetNumFVarValuesTotal channelUV - nuvs for int fvvert 0 fvvert nuvs fvvert FVarVertexUV const uv fvVertsUV firstOfLastUvs fvvert printf vt f f n , uv . u , uv . v Print colors int firstOfLastColors refiner - GetNumFVarValuesTotal channelColor - ncolors for int fvvert 0 fvvert ncolors fvvert FVarVertexColor const c fvVertsColor firstOfLastColors fvvert printf c f f f f n , c . r , c . g , c . b , c . a Print faces for int face 0 face nfaces face Far ConstIndexArray fverts refLastLevel . GetFaceVertices face Far ConstIndexArray fuvs refLastLevel . GetFaceFVarValues face , channelUV all refined Catmark faces should be quads assert fverts . size 4 fuvs . size 4 printf f for int vert 0 vert fverts . size vert OBJ uses 1-based arrays... printf dd , fverts vert 1 , fuvs vert 1 printf n delete refiner return EXIT_SUCCESS ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n- \"loc\": \"far_tutorial_3_1.html\"\n+ \"loc\": \"far_tutorial_2_2.html\"\n }, {\n \"title\": \"far_tutorial_2_1.cpp\",\n \"text\": \"far_tutorial_2_1.cpp far_tutorial_2_1.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsfartutorial_2_1far_tutorial_2_1.cpp ------------------------------------------------------------------------------ Tutorial description Building on tutorial 0, this example shows how to instantiate a simple mesh, refine it uniformly and then interpolate additional sets of primvar data. include opensubdivfartopologyDescriptor.h include opensubdivfarprimvarRefiner.h include cstdio ------------------------------------------------------------------------------ Vertex container implementation. We are adding a per-vertex color attribute to our primvar data. While they are separate properties and exist in separate buffers as when read from an Alembic file they are both of the form float3 and so we can use the same underlying type. While color and position may be the same, well make the color a varying primvar, e.g. it is constrained to being linearly interpolated between vertices, rather than smoothly like position and other vertex data. struct Point3 Minimal required interface ---------------------- Point3 void Clear void 0 _point 0 _point 1 _point 2 0.0f void AddWithWeight Point3 const src , float weight _point 0 weight src . _point 0 _point 1 weight src . _point 1 _point 2 weight src . _point 2 Public interface ------------------------------------ void SetPoint float x , float y , float z _point 0 x _point 1 y _point 2 z const float GetPoint const return _point private float _point 3 typedef Point3 VertexPosition typedef Point3 VertexColor ------------------------------------------------------------------------------ Cube geometry from catmark_cube.h static float g_verts 8 3 -0.5f , -0.5f , 0.5f , 0.5f , -0.5f , 0.5f , -0.5f , 0.5f , 0.5f , 0.5f , 0.5f , 0.5f , -0.5f , 0.5f , -0.5f , 0.5f , 0.5f , -0.5f , -0.5f , -0.5f , -0.5f , 0.5f , -0.5f , -0.5f Per-vertex RGB color data static float g_colors 8 3 1.0f , 0.0f , 0.5f , 0.0f , 1.0f , 0.0f , 0.0f , 0.0f , 1.0f , 1.0f , 1.0f , 1.0f , 1.0f , 1.0f , 0.0f , 0.0f , 1.0f , 1.0f , 1.0f , 0.0f , 1.0f , 0.0f , 0.0f , 0.0f static int g_nverts 8 , g_nfaces 6 static int g_vertsperface 6 4 , 4 , 4 , 4 , 4 , 4 static int g_vertIndices 24 0 , 1 , 3 , 2 , 2 , 3 , 5 , 4 , 4 , 5 , 7 , 6 , 6 , 7 , 1 , 0 , 1 , 7 , 5 , 3 , 6 , 0 , 2 , 4 using namespace OpenSubdiv static Far TopologyRefiner createFarTopologyRefiner ------------------------------------------------------------------------------ int main int , char int maxlevel 5 Far TopologyRefiner refiner createFarTopologyRefiner Uniformly refine the topology up to maxlevel refiner - RefineUniform Far TopologyRefiner UniformOptions maxlevel Allocate buffers for vertex primvar data. We assume we received the coarse data for the mesh in separate buffers from some other source, e.g. an Alembic file. Meanwhile, we want buffers for the lastfinest subdivision level to persist. We have no interest in the intermediate levels. Determine the sizes for our needs int nCoarseVerts g_nverts int nFineVerts refiner - GetLevel maxlevel . GetNumVertices int nTotalVerts refiner - GetNumVerticesTotal int nTempVerts nTotalVerts - nCoarseVerts - nFineVerts Allocate and initialize the primvar data for the original coarse vertices std vector VertexPosition coarsePosBuffer nCoarseVerts std vector VertexColor coarseClrBuffer nCoarseVerts for int i 0 i nCoarseVerts i coarsePosBuffer i . SetPoint g_verts i 0 , g_verts i 1 , g_verts i 2 coarseClrBuffer i . SetPoint g_colors i 0 , g_colors i 1 , g_colors i 2 Allocate intermediate and final storage to be populated std vector VertexPosition tempPosBuffer nTempVerts std vector VertexPosition finePosBuffer nFineVerts std vector VertexColor tempClrBuffer nTempVerts std vector VertexColor fineClrBuffer nFineVerts Interpolate all primvar data -- separate buffers can be populated on separate threads if desired VertexPosition srcPos coarsePosBuffer 0 VertexPosition dstPos tempPosBuffer 0 VertexColor srcClr coarseClrBuffer 0 VertexColor dstClr tempClrBuffer 0 Far PrimvarRefiner primvarRefiner refiner for int level 1 level maxlevel level primvarRefiner . Interpolate level , srcPos , dstPos primvarRefiner . InterpolateVarying level , srcClr , dstClr srcPos dstPos , dstPos refiner - GetLevel level . GetNumVertices srcClr dstClr , dstClr refiner - GetLevel level . GetNumVertices Interpolate the last level into the separate buffers for our final data primvarRefiner . Interpolate maxlevel , srcPos , finePosBuffer primvarRefiner . InterpolateVarying maxlevel , srcClr , fineClrBuffer Visualization with Maya print a MEL script that generates colored particles at the location of the refined vertices dont forget to turn shading on in the viewport to see the colors int nverts nFineVerts Output particle positions printf particle for int vert 0 vert nverts vert float const pos finePosBuffer vert . GetPoint printf -p f f f n , pos 0 , pos 1 , pos 2 printf n Set particle point size 20 -- very large printf addAttr -is true -ln pointSize -at long -dv 20 particleShape1 n Add per-particle color attribute rgbPP printf addAttr -ln rgbPP -dt vectorArray particleShape1 n Set per-particle color values from our primvar data printf setAttr particleShape1.rgbPP -type vectorArray d , nverts for int vert 0 vert nverts vert float const color fineClrBuffer vert . GetPoint printf f f f n , color 0 , color 1 , color 2 printf n delete refiner return EXIT_SUCCESS ------------------------------------------------------------------------------ Creates FarTopologyRefiner from raw geometry see tutorial_1_1 for more details static Far TopologyRefiner createFarTopologyRefiner Populate a topology descriptor with our raw data typedef Far TopologyDescriptor Descriptor Sdc SchemeType type OpenSubdiv Sdc SCHEME_CATMARK Sdc Options options options . SetVtxBoundaryInterpolation Sdc Options VTX_BOUNDARY_EDGE_ONLY Descriptor desc desc . numVertices g_nverts desc . numFaces g_nfaces desc . numVertsPerFace g_vertsperface desc . vertIndicesPerFace g_vertIndices Instantiate a FarTopologyRefiner from the descriptor Far TopologyRefiner refiner Far TopologyRefinerFactory Descriptor Create desc , Far TopologyRefinerFactory Descriptor Options type , options return refiner ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"far_tutorial_2_1.html\"\n }, {\n- \"title\": \"far_tutorial_2_2.cpp\",\n- \"text\": \"far_tutorial_2_2.cpp far_tutorial_2_2.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsfartutorial_2_2far_tutorial_2_2.cpp ------------------------------------------------------------------------------ Tutorial description Building on tutorial 0, this example shows how to instantiate a simple mesh, refine it uniformly and then interpolate both vertex and face-varying primvar data. The resulting interpolated data is output as an obj file, with the face-varying data recorded in the uv texture layout. include opensubdivfartopologyDescriptor.h include opensubdivfarprimvarRefiner.h include cstdio ------------------------------------------------------------------------------ Face-varying implementation. struct Vertex Minimal required interface ---------------------- Vertex Vertex Vertex const src _position 0 src . _position 0 _position 1 src . _position 1 _position 2 src . _position 2 void Clear void 0 _position 0 _position 1 _position 2 0.0f void AddWithWeight Vertex const src , float weight _position 0 weight src . _position 0 _position 1 weight src . _position 1 _position 2 weight src . _position 2 Public interface ------------------------------------ void SetPosition float x , float y , float z _position 0 x _position 1 y _position 2 z const float GetPosition const return _position private float _position 3 ------------------------------------------------------------------------------ Face-varying container implementation. We are using a uv texture layout as a face-varying primitive variable attribute. Because face-varying data is specified per-face-per-vertex, we cannot use the same container that we use for vertex or varying data. We specify a new container, which only carries u,v coordinates. Similarly to our Vertex container, we add a minimalistic interpolation interface with a Clear and AddWithWeight methods. struct FVarVertexUV Minimal required interface ---------------------- void Clear u v 0.0f void AddWithWeight FVarVertexUV const src , float weight u weight src . u v weight src . v Basic uv layout channel float u , v struct FVarVertexColor Minimal required interface ---------------------- void Clear r g b a 0.0f void AddWithWeight FVarVertexColor const src , float weight r weight src . r g weight src . g b weight src . b a weight src . a Basic color layout channel float r , g , b , a ------------------------------------------------------------------------------ Cube geometry from catmark_cube.h vertex primitive variable data topology static float g_verts 8 3 -0.5f , -0.5f , 0.5f , 0.5f , -0.5f , 0.5f , -0.5f , 0.5f , 0.5f , 0.5f , 0.5f , 0.5f , -0.5f , 0.5f , -0.5f , 0.5f , 0.5f , -0.5f , -0.5f , -0.5f , -0.5f , 0.5f , -0.5f , -0.5f static int g_nverts 8 , g_nfaces 6 static int g_vertsperface 6 4 , 4 , 4 , 4 , 4 , 4 static int g_vertIndices 24 0 , 1 , 3 , 2 , 2 , 3 , 5 , 4 , 4 , 5 , 7 , 6 , 6 , 7 , 1 , 0 , 1 , 7 , 5 , 3 , 6 , 0 , 2 , 4 face-varying primitive variable data topology for UVs static float g_uvs 14 2 0.375 , 0.00 , 0.625 , 0.00 , 0.375 , 0.25 , 0.625 , 0.25 , 0.375 , 0.50 , 0.625 , 0.50 , 0.375 , 0.75 , 0.625 , 0.75 , 0.375 , 1.00 , 0.625 , 1.00 , 0.875 , 0.00 , 0.875 , 0.25 , 0.125 , 0.00 , 0.125 , 0.25 static int g_nuvs 14 static int g_uvIndices 24 0 , 1 , 3 , 2 , 2 , 3 , 5 , 4 , 4 , 5 , 7 , 6 , 6 , 7 , 9 , 8 , 1 , 10 , 11 , 3 , 12 , 0 , 2 , 13 face-varying primitive variable data topology for color static float g_colors 24 4 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 0.0 , 0.0 , 1.0 , 1.0 , 0.0 , 0.0 , 1.0 , 1.0 , 0.0 , 0.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 static int g_ncolors 24 static int g_colorIndices 24 0 , 3 , 9 , 6 , 7 , 10 , 15 , 12 , 13 , 16 , 21 , 18 , 19 , 22 , 4 , 1 , 5 , 23 , 17 , 11 , 20 , 2 , 8 , 14 using namespace OpenSubdiv ------------------------------------------------------------------------------ int main int , char int maxlevel 3 typedef Far TopologyDescriptor Descriptor Sdc SchemeType type OpenSubdiv Sdc SCHEME_CATMARK Sdc Options options options . SetVtxBoundaryInterpolation Sdc Options VTX_BOUNDARY_EDGE_ONLY options . SetFVarLinearInterpolation Sdc Options FVAR_LINEAR_NONE Populate a topology descriptor with our raw data Descriptor desc desc . numVertices g_nverts desc . numFaces g_nfaces desc . numVertsPerFace g_vertsperface desc . vertIndicesPerFace g_vertIndices int channelUV 0 int channelColor 1 Create a face-varying channel descriptor Descriptor FVarChannel channels 2 channels channelUV . numValues g_nuvs channels channelUV . valueIndices g_uvIndices channels channelColor . numValues g_ncolors channels channelColor . valueIndices g_colorIndices Add the channel topology to the main descriptor desc . numFVarChannels 2 desc . fvarChannels channels Instantiate a FarTopologyRefiner from the descriptor Far TopologyRefiner refiner Far TopologyRefinerFactory Descriptor Create desc , Far TopologyRefinerFactory Descriptor Options type , options Uniformly refine the topology up to maxlevel note fullTopologyInLastLevel must be true to work with face-varying data Far TopologyRefiner UniformOptions refineOptions maxlevel refineOptions . fullTopologyInLastLevel true refiner - RefineUniform refineOptions Allocate and initialize the vertex primvar data see tutorial 2 for more details. std vector Vertex vbuffer refiner - GetNumVerticesTotal Vertex verts vbuffer 0 for int i 0 i g_nverts i verts i . SetPosition g_verts i 0 , g_verts i 1 , g_verts i 2 Allocate and initialize the first channel of face-varying primvar data UVs std vector FVarVertexUV fvBufferUV refiner - GetNumFVarValuesTotal channelUV FVarVertexUV fvVertsUV fvBufferUV 0 for int i 0 i g_nuvs i fvVertsUV i . u g_uvs i 0 fvVertsUV i . v g_uvs i 1 Allocate interpolate the face-varying primvar data colors std vector FVarVertexColor fvBufferColor refiner - GetNumFVarValuesTotal channelColor FVarVertexColor fvVertsColor fvBufferColor 0 for int i 0 i g_ncolors i fvVertsColor i . r g_colors i 0 fvVertsColor i . g g_colors i 1 fvVertsColor i . b g_colors i 2 fvVertsColor i . a g_colors i 3 Interpolate both vertex and face-varying primvar data Far PrimvarRefiner primvarRefiner refiner Vertex srcVert verts FVarVertexUV srcFVarUV fvVertsUV FVarVertexColor srcFVarColor fvVertsColor for int level 1 level maxlevel level Vertex dstVert srcVert refiner - GetLevel level -1 . GetNumVertices FVarVertexUV dstFVarUV srcFVarUV refiner - GetLevel level -1 . GetNumFVarValues channelUV FVarVertexColor dstFVarColor srcFVarColor refiner - GetLevel level -1 . GetNumFVarValues channelColor primvarRefiner . Interpolate level , srcVert , dstVert primvarRefiner . InterpolateFaceVarying level , srcFVarUV , dstFVarUV , channelUV primvarRefiner . InterpolateFaceVarying level , srcFVarColor , dstFVarColor , channelColor srcVert dstVert srcFVarUV dstFVarUV srcFVarColor dstFVarColor Output OBJ of the highest level refined ----------- Far TopologyLevel const refLastLevel refiner - GetLevel maxlevel int nverts refLastLevel . GetNumVertices int nuvs refLastLevel . GetNumFVarValues channelUV int ncolors refLastLevel . GetNumFVarValues channelColor int nfaces refLastLevel . GetNumFaces Print vertex positions int firstOfLastVerts refiner - GetNumVerticesTotal - nverts for int vert 0 vert nverts vert float const pos verts firstOfLastVerts vert . GetPosition printf v f f f n , pos 0 , pos 1 , pos 2 Print uvs int firstOfLastUvs refiner - GetNumFVarValuesTotal channelUV - nuvs for int fvvert 0 fvvert nuvs fvvert FVarVertexUV const uv fvVertsUV firstOfLastUvs fvvert printf vt f f n , uv . u , uv . v Print colors int firstOfLastColors refiner - GetNumFVarValuesTotal channelColor - ncolors for int fvvert 0 fvvert ncolors fvvert FVarVertexColor const c fvVertsColor firstOfLastColors fvvert printf c f f f f n , c . r , c . g , c . b , c . a Print faces for int face 0 face nfaces face Far ConstIndexArray fverts refLastLevel . GetFaceVertices face Far ConstIndexArray fuvs refLastLevel . GetFaceFVarValues face , channelUV all refined Catmark faces should be quads assert fverts . size 4 fuvs . size 4 printf f for int vert 0 vert fverts . size vert OBJ uses 1-based arrays... printf dd , fverts vert 1 , fuvs vert 1 printf n delete refiner return EXIT_SUCCESS ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n+ \"title\": \"far_tutorial_1_1.cpp\",\n+ \"text\": \"far_tutorial_1_1.cpp far_tutorial_1_1.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsfartutorial_1_1far_tutorial_1_1.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial presents in a very succinct way the requisite steps to instantiate and refine a mesh with Far from simple topological data. include opensubdivfartopologyDescriptor.h include opensubdivfarprimvarRefiner.h include cstdio ------------------------------------------------------------------------------ Vertex container implementation. struct Vertex Minimal required interface ---------------------- Vertex Vertex Vertex const src _position 0 src . _position 0 _position 1 src . _position 1 _position 2 src . _position 2 void Clear void 0 _position 0 _position 1 _position 2 0.0f void AddWithWeight Vertex const src , float weight _position 0 weight src . _position 0 _position 1 weight src . _position 1 _position 2 weight src . _position 2 Public interface ------------------------------------ void SetPosition float x , float y , float z _position 0 x _position 1 y _position 2 z const float GetPosition const return _position private float _position 3 ------------------------------------------------------------------------------ Cube geometry from catmark_cube.h static float g_verts 8 3 -0.5f , -0.5f , 0.5f , 0.5f , -0.5f , 0.5f , -0.5f , 0.5f , 0.5f , 0.5f , 0.5f , 0.5f , -0.5f , 0.5f , -0.5f , 0.5f , 0.5f , -0.5f , -0.5f , -0.5f , -0.5f , 0.5f , -0.5f , -0.5f static int g_nverts 8 , g_nfaces 6 static int g_vertsperface 6 4 , 4 , 4 , 4 , 4 , 4 static int g_vertIndices 24 0 , 1 , 3 , 2 , 2 , 3 , 5 , 4 , 4 , 5 , 7 , 6 , 6 , 7 , 1 , 0 , 1 , 7 , 5 , 3 , 6 , 0 , 2 , 4 using namespace OpenSubdiv ------------------------------------------------------------------------------ int main int , char Populate a topology descriptor with our raw data typedef Far TopologyDescriptor Descriptor Sdc SchemeType type OpenSubdiv Sdc SCHEME_CATMARK Sdc Options options options . SetVtxBoundaryInterpolation Sdc Options VTX_BOUNDARY_EDGE_ONLY Descriptor desc desc . numVertices g_nverts desc . numFaces g_nfaces desc . numVertsPerFace g_vertsperface desc . vertIndicesPerFace g_vertIndices Instantiate a FarTopologyRefiner from the descriptor Far TopologyRefiner refiner Far TopologyRefinerFactory Descriptor Create desc , Far TopologyRefinerFactory Descriptor Options type , options int maxlevel 2 Uniformly refine the topology up to maxlevel refiner - RefineUniform Far TopologyRefiner UniformOptions maxlevel Allocate a buffer for vertex primvar data. The buffer length is set to be the sum of all children vertices up to the highest level of refinement. std vector Vertex vbuffer refiner - GetNumVerticesTotal Vertex verts vbuffer 0 Initialize coarse mesh positions int nCoarseVerts g_nverts for int i 0 i nCoarseVerts i verts i . SetPosition g_verts i 0 , g_verts i 1 , g_verts i 2 Interpolate vertex primvar data Far PrimvarRefiner primvarRefiner refiner Vertex src verts for int level 1 level maxlevel level Vertex dst src refiner - GetLevel level -1 . GetNumVertices primvarRefiner . Interpolate level , src , dst src dst Output OBJ of the highest level refined ----------- Far TopologyLevel const refLastLevel refiner - GetLevel maxlevel int nverts refLastLevel . GetNumVertices int nfaces refLastLevel . GetNumFaces Print vertex positions int firstOfLastVerts refiner - GetNumVerticesTotal - nverts for int vert 0 vert nverts vert float const pos verts firstOfLastVerts vert . GetPosition printf v f f f n , pos 0 , pos 1 , pos 2 Print faces for int face 0 face nfaces face Far ConstIndexArray fverts refLastLevel . GetFaceVertices face all refined Catmark faces should be quads assert fverts . size 4 printf f for int vert 0 vert fverts . size vert printf d , fverts vert 1 OBJ uses 1-based arrays... printf n delete refiner return EXIT_SUCCESS ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n- \"loc\": \"far_tutorial_2_2.html\"\n+ \"loc\": \"far_tutorial_1_1.html\"\n }, {\n \"title\": \"far_tutorial_1_2.cpp\",\n \"text\": \"far_tutorial_1_2.cpp far_tutorial_1_2.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsfartutorial_1_2far_tutorial_1_2.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial illustrates two different styles of defining classes for interpolating primvar data with the template methods in Far. The most common usage involves data of a fixed size, so the focus here is on an alternative supporting variable length data. include opensubdivfartopologyDescriptor.h include opensubdivfarprimvarRefiner.h include cstdio using namespace OpenSubdiv Vertex data containers for interpolation - Coord3 is fixed to support 3 floats - Coord2 is fixed to support 2 floats - CoordBuffer can support a specified number of floats struct Coord3 Coord3 Coord3 float x , float y , float z _xyz 0 x , _xyz 1 y , _xyz 2 z void Clear _xyz 0 _xyz 1 _xyz 2 0.0f void AddWithWeight Coord3 const src , float weight _xyz 0 weight src . _xyz 0 _xyz 1 weight src . _xyz 1 _xyz 2 weight src . _xyz 2 float const Coords const return _xyz 0 private float _xyz 3 struct Coord2 Coord2 Coord2 float u , float v _uv 0 u , _uv 1 v void Clear _uv 0 _uv 1 0.0f void AddWithWeight Coord2 const src , float weight _uv 0 weight src . _uv 0 _uv 1 weight src . _uv 1 float const Coords const return _uv 0 private float _uv 2 struct CoordBuffer The head of an external buffer and stride is specified on construction CoordBuffer float data , int size _data data , _size size CoordBuffer _data 0 , _size 0 void Clear for int i 0 i _size i _data i 0.0f void AddWithWeight CoordBuffer const src , float weight assert src . _size _size for int i 0 i _size i _data i weight src . _data i float const Coords const return _data Defining to return a location elsewhere in the buffer is the key requirement to supporting interpolatible data of varying size CoordBuffer operator int index const return CoordBuffer _data index _size , _size private float _data int _size Global cube geometry from catmark_cube.h Topology static int g_nverts 8 static int g_nfaces 6 static int g_vertsperface 6 4 , 4 , 4 , 4 , 4 , 4 static int g_vertIndices 24 0 , 1 , 3 , 2 , 2 , 3 , 5 , 4 , 4 , 5 , 7 , 6 , 6 , 7 , 1 , 0 , 1 , 7 , 5 , 3 , 6 , 0 , 2 , 4 Primvar data static float g_verts 8 3 0.0f , 0.0f , 1.0f , 1.0f , 0.0f , 1.0f , 0.0f , 1.0f , 1.0f , 1.0f , 1.0f , 1.0f , 0.0f , 1.0f , 0.0f , 1.0f , 1.0f , 0.0f , 0.0f , 0.0f , 0.0f , 1.0f , 0.0f , 0.0f Creates FarTopologyRefiner from raw geometry above see tutorial_1_1 for more details static Far TopologyRefiner createFarTopologyRefiner typedef Far TopologyDescriptor Descriptor Sdc SchemeType type OpenSubdiv Sdc SCHEME_CATMARK Sdc Options options options . SetVtxBoundaryInterpolation Sdc Options VTX_BOUNDARY_EDGE_ONLY Descriptor desc desc . numVertices g_nverts desc . numFaces g_nfaces desc . numVertsPerFace g_vertsperface desc . vertIndicesPerFace g_vertIndices Instantiate a FarTopologyRefiner from the descriptor Far TopologyRefiner refiner Far TopologyRefinerFactory Descriptor Create desc , Far TopologyRefinerFactory Descriptor Options type , options return refiner Overview of main - create a FarTopologyRefiner and uniformly refine it - allocate separate and combined data buffers for vertex positions and UVs - populate all refined data buffers and compare results - write the result in Obj format Disable warnings for exact floating point comparisons ifdef __INTEL_COMPILER pragma warning disable 1572 endif int main int , char Instantiate a FarTopologyRefiner from the global geometry Far TopologyRefiner refiner createFarTopologyRefiner Uniformly refine the topology up to maxlevel int maxlevel 2 refiner - RefineUniform Far TopologyRefiner UniformOptions maxlevel Allocate and populate data buffers for vertex primvar data -- positions and UVs. We assign UV coordiantes by simply projectingassigning XY values. The position and UV buffers use their associated data types, while the combined buffer uses 5 floats per vertex. int numBaseVertices g_nverts int numTotalVertices refiner - GetNumVerticesTotal std vector Coord3 posData numTotalVertices std vector Coord2 uvData numTotalVertices int combinedStride 3 2 std vector float combinedData numTotalVertices combinedStride for int i 0 i numBaseVertices i posData i Coord3 g_verts i 0 , g_verts i 1 , g_verts i 2 uvData i Coord2 g_verts i 0 , g_verts i 1 float coordCombined combinedData i combinedStride coordCombined 0 g_verts i 0 coordCombined 1 g_verts i 1 coordCombined 2 g_verts i 2 coordCombined 3 g_verts i 0 coordCombined 4 g_verts i 1 Interpolate vertex primvar data Far PrimvarRefiner primvarRefiner refiner Coord3 posSrc posData 0 Coord2 uvSrc uvData 0 CoordBuffer combinedSrc combinedData 0 , combinedStride for int level 1 level maxlevel level int numLevelVerts refiner - GetLevel level -1 . GetNumVertices Coord3 posDst posSrc numLevelVerts Coord2 uvDst uvSrc numLevelVerts CoordBuffer combinedDst combinedSrc numLevelVerts primvarRefiner . Interpolate level , posSrc , posDst primvarRefiner . Interpolate level , uvSrc , uvDst primvarRefiner . Interpolate level , combinedSrc , combinedDst posSrc posDst uvSrc uvDst combinedSrc combinedDst Verify that the combined coords match the separate results for int i numBaseVertices i numTotalVertices i float const posCoords posData i . Coords float const uvCoords uvData i . Coords float const combCoords combinedData combinedStride i assert combCoords 0 posCoords 0 assert combCoords 1 posCoords 1 assert combCoords 2 posCoords 2 assert combCoords 3 uvCoords 0 assert combCoords 4 uvCoords 1 Output OBJ of the highest level refined Far TopologyLevel const refLastLevel refiner - GetLevel maxlevel int firstOfLastVerts numTotalVertices - refLastLevel . GetNumVertices Print vertex positions printf Vertices n for int vert firstOfLastVerts vert numTotalVertices vert float const pos combinedData vert combinedStride printf v f f f n , pos 0 , pos 1 , pos 2 printf UV coordinates n for int vert firstOfLastVerts vert numTotalVertices vert float const uv combinedData vert combinedStride 3 printf vt f f n , uv 0 , uv 1 Print faces int numFaces refLastLevel . GetNumFaces printf Faces n for int face 0 face numFaces face Far ConstIndexArray fverts refLastLevel . GetFaceVertices face printf f for int fvert 0 fvert fverts . size fvert int objIndex 1 fverts fvert OBJ uses 1-based arrays... printf dd , objIndex , objIndex printf n delete refiner return EXIT_SUCCESS Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"far_tutorial_1_2.html\"\n }, {\n- \"title\": \"hbr_tutorial_2.cpp\",\n- \"text\": \"hbr_tutorial_2.cpp hbr_tutorial_2.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialshbrtutorial_2hbr_tutorial_2.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial shows how to subdivide uniformly a simple Hbr mesh. We are building upon previous tutorials and assuming a fully instantiated mesh we start with an HbrMesh pointer initialized from the same pyramid shape used in hbr_tutorial_0. We then apply the Refine function sequentially to all the faces in the mesh to generate several levels of uniform subdivision. The resulting data is then dumped to the terminal in Wavefront OBJ format for inspection. include opensubdivhbrmesh.h include opensubdivhbrcatmark.h include cassert include cstdio ------------------------------------------------------------------------------ For this tutorial, we have to flesh out the Vertex class further. Note that now the copy constructor, Clear and AddwithWeight methods have been implemented to interpolate our float3 position data. This vertex specialization pattern leaves client-code free to implement arbitrary vertex primvar data schemes or none at all to conserve efficiency struct Vertex Hbr minimal required interface ---------------------- Vertex Vertex int i Vertex Vertex const src _position 0 src . _position 0 _position 1 src . _position 1 _position 2 src . _position 2 void Clear void 0 _position 0 _position 1 _position 2 0.0f void AddWithWeight Vertex const src , float weight _position 0 weight src . _position 0 _position 1 weight src . _position 1 _position 2 weight src . _position 2 void AddVaryingWithWeight Vertex const , float Public interface ------------------------------------ void SetPosition float x , float y , float z _position 0 x _position 1 y _position 2 z const float GetPosition const return _position private float _position 3 typedef OpenSubdiv HbrMesh Vertex Hmesh typedef OpenSubdiv HbrFace Vertex Hface typedef OpenSubdiv HbrVertex Vertex Hvertex typedef OpenSubdiv HbrHalfedge Vertex Hhalfedge Hmesh createMesh ------------------------------------------------------------------------------ int main int , char Hmesh hmesh createMesh int maxlevel 2 , 2 levels of subdivision firstface 0 , marker to the first face index of level 2 firstvertex 0 marker to the first vertex index of level 2 Refine the mesh to maxlevel for int level 0 level maxlevel level Total number of faces in the mesh, across all levels Note this function iterates over the list of faces and can be slow int nfaces hmesh - GetNumFaces if level maxlevel -1 Save our vertex marker firstvertex hmesh - GetNumVertices Iterate over the faces of the current level of subdivision for int face firstface face nfaces face Hface f hmesh - GetFace face Note hole tags would have to be dealt with here. f - Refine Save our face index marker for the next level firstface nfaces Output OBJ of the highest level refined ----------- Print vertex positions int nverts hmesh - GetNumVertices for int vert firstvertex vert nverts vert float const pos hmesh - GetVertex vert - GetData . GetPosition printf v f f f n , pos 0 , pos 1 , pos 2 Print faces for int face firstface face hmesh - GetNumFaces face Hface f hmesh - GetFace face assert f - GetNumVertices 4 printf f for int vert 0 vert 4 vert OBJ uses 1-based arrays printf d , f - GetVertex vert - GetID - firstvertex 1 printf n ------------------------------------------------------------------------------ Creates an Hbr mesh see hbr_tutorial_0 and hbr_tutorial_1 for more details Hmesh createMesh Pyramid geometry from catmark_pyramid.h static float verts 5 3 0.0f , 0.0f , 2.0f , 0.0f , -2.0f , 0.0f , 2.0f , 0.0f , 0.0f , 0.0f , 2.0f , 0.0f , -2.0f , 0.0f , 0.0f static int nverts 5 , nfaces 5 static int facenverts 5 3 , 3 , 3 , 3 , 4 static int faceverts 16 0 , 1 , 2 , 0 , 2 , 3 , 0 , 3 , 4 , 0 , 4 , 1 , 4 , 3 , 2 , 1 OpenSubdiv HbrCatmarkSubdivision Vertex catmark new OpenSubdiv HbrCatmarkSubdivision Vertex Hmesh hmesh new Hmesh catmark Populate the vertices Vertex v for int i 0 i nverts i v . SetPosition verts i 0 , verts i 1 , verts i 2 hmesh - NewVertex i , v Create the topology int fv faceverts for int i 0 i nfaces i int nv facenverts i bool valid true for int j 0 j nv j Hvertex const origin hmesh - GetVertex fv j , destination hmesh - GetVertex fv j 1 nv Hhalfedge const opposite destination - GetEdge origin Make sure that the vertices exist in the mesh if origin NULL destination NULL printf An edge was specified that connected a nonexistent vertex n valid false break Check for a degenerate edge if origin destination printf An edge was specified that connected a vertex to itself n valid false break Check that no more than 2 faces are adjacent to the edge if opposite opposite - GetOpposite printf A non-manifold edge incident to more than 2 faces was found n valid false break Check that the edge is unique and oriented properly if origin - GetEdge destination printf An edge connecting two vertices was specified more than once. Its likely that an incident face was flipped n valid false break if valid hmesh - NewFace nv , fv , 0 else printf Skipped face d n , i fv nv hmesh - SetInterpolateBoundaryMethod Hmesh k_InterpolateBoundaryEdgeOnly hmesh - Finish return hmesh ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n- \"tags\": \"\",\n- \"loc\": \"hbr_tutorial_2.html\"\n- }, {\n- \"title\": \"far_tutorial_1_1.cpp\",\n- \"text\": \"far_tutorial_1_1.cpp far_tutorial_1_1.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialsfartutorial_1_1far_tutorial_1_1.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial presents in a very succinct way the requisite steps to instantiate and refine a mesh with Far from simple topological data. include opensubdivfartopologyDescriptor.h include opensubdivfarprimvarRefiner.h include cstdio ------------------------------------------------------------------------------ Vertex container implementation. struct Vertex Minimal required interface ---------------------- Vertex Vertex Vertex const src _position 0 src . _position 0 _position 1 src . _position 1 _position 2 src . _position 2 void Clear void 0 _position 0 _position 1 _position 2 0.0f void AddWithWeight Vertex const src , float weight _position 0 weight src . _position 0 _position 1 weight src . _position 1 _position 2 weight src . _position 2 Public interface ------------------------------------ void SetPosition float x , float y , float z _position 0 x _position 1 y _position 2 z const float GetPosition const return _position private float _position 3 ------------------------------------------------------------------------------ Cube geometry from catmark_cube.h static float g_verts 8 3 -0.5f , -0.5f , 0.5f , 0.5f , -0.5f , 0.5f , -0.5f , 0.5f , 0.5f , 0.5f , 0.5f , 0.5f , -0.5f , 0.5f , -0.5f , 0.5f , 0.5f , -0.5f , -0.5f , -0.5f , -0.5f , 0.5f , -0.5f , -0.5f static int g_nverts 8 , g_nfaces 6 static int g_vertsperface 6 4 , 4 , 4 , 4 , 4 , 4 static int g_vertIndices 24 0 , 1 , 3 , 2 , 2 , 3 , 5 , 4 , 4 , 5 , 7 , 6 , 6 , 7 , 1 , 0 , 1 , 7 , 5 , 3 , 6 , 0 , 2 , 4 using namespace OpenSubdiv ------------------------------------------------------------------------------ int main int , char Populate a topology descriptor with our raw data typedef Far TopologyDescriptor Descriptor Sdc SchemeType type OpenSubdiv Sdc SCHEME_CATMARK Sdc Options options options . SetVtxBoundaryInterpolation Sdc Options VTX_BOUNDARY_EDGE_ONLY Descriptor desc desc . numVertices g_nverts desc . numFaces g_nfaces desc . numVertsPerFace g_vertsperface desc . vertIndicesPerFace g_vertIndices Instantiate a FarTopologyRefiner from the descriptor Far TopologyRefiner refiner Far TopologyRefinerFactory Descriptor Create desc , Far TopologyRefinerFactory Descriptor Options type , options int maxlevel 2 Uniformly refine the topology up to maxlevel refiner - RefineUniform Far TopologyRefiner UniformOptions maxlevel Allocate a buffer for vertex primvar data. The buffer length is set to be the sum of all children vertices up to the highest level of refinement. std vector Vertex vbuffer refiner - GetNumVerticesTotal Vertex verts vbuffer 0 Initialize coarse mesh positions int nCoarseVerts g_nverts for int i 0 i nCoarseVerts i verts i . SetPosition g_verts i 0 , g_verts i 1 , g_verts i 2 Interpolate vertex primvar data Far PrimvarRefiner primvarRefiner refiner Vertex src verts for int level 1 level maxlevel level Vertex dst src refiner - GetLevel level -1 . GetNumVertices primvarRefiner . Interpolate level , src , dst src dst Output OBJ of the highest level refined ----------- Far TopologyLevel const refLastLevel refiner - GetLevel maxlevel int nverts refLastLevel . GetNumVertices int nfaces refLastLevel . GetNumFaces Print vertex positions int firstOfLastVerts refiner - GetNumVerticesTotal - nverts for int vert 0 vert nverts vert float const pos verts firstOfLastVerts vert . GetPosition printf v f f f n , pos 0 , pos 1 , pos 2 Print faces for int face 0 face nfaces face Far ConstIndexArray fverts refLastLevel . GetFaceVertices face all refined Catmark faces should be quads assert fverts . size 4 printf f for int vert 0 vert fverts . size vert printf d , fverts vert 1 OBJ uses 1-based arrays... printf n delete refiner return EXIT_SUCCESS ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n- \"tags\": \"\",\n- \"loc\": \"far_tutorial_1_1.html\"\n- }, {\n \"title\": \"hbr_tutorial_1.cpp\",\n \"text\": \"hbr_tutorial_1.cpp hbr_tutorial_1.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialshbrtutorial_1hbr_tutorial_1.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial shows how to safely create Hbr meshes from arbitrary topology. Because Hbr is a half-edge data structure, it cannot represent non-manifold topology. Ensuring that the geometry used is manifold is a requirement to use Hbr safely. This tutorial presents some simple tests to detect inappropriate topology. include opensubdivhbrmesh.h include opensubdivhbrcatmark.h include cstdio ------------------------------------------------------------------------------ struct Vertex Hbr minimal required interface ---------------------- Vertex Vertex int i Vertex Vertex const src _position 0 src . _position 0 _position 1 src . _position 1 _position 2 src . _position 2 void Clear void 0 void AddWithWeight Vertex const , float void AddVaryingWithWeight Vertex const , float Public interface ------------------------------------ void SetPosition float x , float y , float z _position 0 x _position 1 y _position 2 z const float GetPosition const return _position private float _position 3 typedef OpenSubdiv HbrMesh Vertex Hmesh typedef OpenSubdiv HbrFace Vertex Hface typedef OpenSubdiv HbrVertex Vertex Hvertex typedef OpenSubdiv HbrHalfedge Vertex Hhalfedge ------------------------------------------------------------------------------ Non-manifold geometry from catmark_fan.h o o f2 o------------o------------o f0 f1 o------------ o------------o The shared edge of a fan is adjacent to 3 faces, and therefore non-manifold. static float verts 8 3 -1.0 , 0.0 , -1.0 , -1.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , -1.0 , 1.0 , 0.0 , 0.0 , 1.0 , 0.0 , -1.0 , 0.0 , 1.0 , 0.0 , 0.0 , 1.0 , -1.0 static int nverts 8 , nfaces 3 static int facenverts 3 4 , 4 , 4 static int faceverts 12 0 , 1 , 2 , 3 , 3 , 2 , 4 , 5 , 3 , 2 , 6 , 7 ------------------------------------------------------------------------------ int main int , char OpenSubdiv HbrCatmarkSubdivision Vertex catmark new OpenSubdiv HbrCatmarkSubdivision Vertex Hmesh hmesh new Hmesh catmark Vertex v for int i 0 i nverts i v . SetPosition verts i 0 , verts i 1 , verts i 2 hmesh - NewVertex i , v Create the topology int fv faceverts for int i 0 i nfaces i int nv facenverts i bool valid true for int j 0 j nv j Hvertex const origin hmesh - GetVertex fv j , destination hmesh - GetVertex fv j 1 nv Hhalfedge const opposite destination - GetEdge origin Make sure that the vertices exist in the mesh if origin NULL destination NULL printf An edge was specified that connected a nonexistent vertex n valid false break Check for a degenerate edge if origin destination printf An edge was specified that connected a vertex to itself n valid false break Check that no more than 2 faces are adjacent to the edge if opposite opposite - GetOpposite printf A non-manifold edge incident to more than 2 faces was found n valid false break Check that the edge is unique and oriented properly if origin - GetEdge destination printf An edge connecting two vertices was specified more than once. Its likely that an incident face was flipped n valid false break if valid hmesh - NewFace nv , fv , 0 else printf Skipped face d n , i fv nv hmesh - SetInterpolateBoundaryMethod Hmesh k_InterpolateBoundaryEdgeOnly hmesh - Finish printf Created a fan with d faces and d vertices. n , hmesh - GetNumFaces , hmesh - GetNumVertices delete hmesh delete catmark ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"hbr_tutorial_1.html\"\n }, {\n \"title\": \"hbr_tutorial_0.cpp\",\n \"text\": \"hbr_tutorial_0.cpp hbr_tutorial_0.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialshbrtutorial_0hbr_tutorial_0.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial presents in a very succinct way the requisite steps to instantiate an Hbr mesh from simple topological data. include opensubdivhbrmesh.h include opensubdivhbrcatmark.h include cstdio ------------------------------------------------------------------------------ Vertex container implementation. The HbrMeshT class is a templated interface that expects a vertex class to perform interpolation on arbitrary vertex data. For the template specialization of the HbrMesh interface to be met, our Vertex object to implement a minimal set of constructors and member functions. Since we are not going to subdivide the mesh, the struct presented here has been left minimalistic. The only customization added to our container was to provide storage and accessors for the position of a 3D vertex. struct Vertex Hbr minimal required interface ---------------------- Vertex Vertex int i Vertex Vertex const src _position 0 src . _position 0 _position 1 src . _position 1 _position 2 src . _position 2 void Clear void 0 void AddWithWeight Vertex const , float void AddVaryingWithWeight Vertex const , float Public interface ------------------------------------ void SetPosition float x , float y , float z _position 0 x _position 1 y _position 2 z const float GetPosition const return _position private float _position 3 typedef OpenSubdiv HbrMesh Vertex Hmesh typedef OpenSubdiv HbrFace Vertex Hface typedef OpenSubdiv HbrVertex Vertex Hvertex typedef OpenSubdiv HbrHalfedge Vertex Hhalfedge ------------------------------------------------------------------------------ Pyramid geometry from catmark_pyramid.h static float verts 5 3 0.0f , 0.0f , 2.0f , 0.0f , -2.0f , 0.0f , 2.0f , 0.0f , 0.0f , 0.0f , 2.0f , 0.0f , -2.0f , 0.0f , 0.0f static int nverts 5 , nfaces 5 static int facenverts 5 3 , 3 , 3 , 3 , 4 static int faceverts 16 0 , 1 , 2 , 0 , 2 , 3 , 0 , 3 , 4 , 0 , 4 , 1 , 4 , 3 , 2 , 1 ------------------------------------------------------------------------------ int main int , char Create a subdivision scheme Catmull-Clark here OpenSubdiv HbrCatmarkSubdivision Vertex catmark new OpenSubdiv HbrCatmarkSubdivision Vertex Create an empty Hbr mesh Hmesh hmesh new Hmesh catmark Populate the vertices Vertex v for int i 0 i nverts i Primitive variable data must be set here in our case we set the 3D position of the vertex. v . SetPosition verts i 0 , verts i 1 , verts i 2 Add the vertex to the mesh. hmesh - NewVertex i , v Create the topology int fv faceverts for int i 0 i nfaces i int nv facenverts i hmesh - NewFace nv , fv , 0 fv nv Set subdivision options By default vertex interpolation is set to none on boundaries, which can produce un-expected results, so we change it to edge-only. hmesh - SetInterpolateBoundaryMethod Hmesh k_InterpolateBoundaryEdgeOnly Call Finish to finalize the data structures before using the mesh. hmesh - Finish printf Created a pyramid with d faces and d vertices. n , hmesh - GetNumFaces , hmesh - GetNumVertices delete hmesh delete catmark ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"hbr_tutorial_0.html\"\n }, {\n- \"title\": \"Vtr Overview\",\n- \"text\": \"Vtr Overview Vtr Overview 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Vectorized Topology Representation Vtr VtrLevel Topological Relationships Memory Efficiency VtrRefinement Parent-child and child-parent relationships Data flexibility Vectorized Topology Representation Vtr Vtr consists of a suite of classes that collectively provide an intermediate representation of topology that supports efficient refinement. Vtr is intended for internal use only and is currently accessed through the Far layer by the FarTopologyRefiner , which assembles these Vtr classes to meet the topological and refinement needs of the Far layer. What follows is therefore more intended to provide insite into the underlying architecture than to describe particular usage. For documentation more relevant to direct usage, proceed to the Far section previously noted. Vtr is vectorized in that its topological data is stored more as a collection of vectors of primitive elements rather than as the faces, vertices and edges that make up many other topological representations. It is essentially a structure-of-arrays SOA approach to topology in contrast to the more common array-of-structures pattern found in many other topological representations. Vtrs use of vectors allows it to be fairly efficient in its use of memory and similarly efficient to refine, but the topology is fixed once defined. Vtr classes are purely topological. They are even more independent of the representation of vertices, faces, etc. than Hbr in that they are not even parameterized by an interface to such components. So the same set of Vtr objects can eventually be used to serve more than one representation of these components. The primary requirement is that a mesh be expressable as an indexable set i.e. a vector or array of vertices, edges and faces. The index of a component uniquely identifies it and properties are retrieved by referring to it by index. Its worth qualifying the term topological here and elsewhere -- we generally refer to topology as subdivision topology rather than mesh topology. A subdivision hierarchy is impacted by the presence of semi-sharp creasing, as the subdivision rules change in response to that creasing. So subdivision topology includes the sharpness values assigned to edges and vertices that affect the semi-sharp creasing. The two primary classes in Vtr consist of VtrLevel - a class representing complete vertex topology for a level VtrRefinement - a class mapping a parent VtrLevel to a child level Others exist to represent the following selection and appropriate tagging of components for sparse refinement divergence of face-varying topology from the vertex topology mapping between face-varying topology at successive levels common low-level utilities, e.g. simple array classes VtrLevel VtrLevel is a complete topological description of a subdivision level, with the topological relations, sharpness values and component tags all stored in vectors literally stdvectors, but easily changed via typedefs. There are no classes or objects for the mesh component types i.e. faces, edges and vertices but simply an integer index to identify each. It can be viewed as a structure-of-arrays representation of the topology any property related to a particular component is stored in an array and accessible using the index identifying that component. So with no classes the for the components, its difficult to say what constitutes a vertex or a face they are each the sum of all the fields scattered amongst the many vectors included. Level represents a single level of a potential hierarchy and is capable of representing the complete base mesh. There are no members that relate data in one level to any other, either below or above. As such, any Level can be used as the base level for a new subdivision hierarchy potentially more than one. All relationships between separate levels are maintained in the VtrRefinement class. Topological Relationships Level requires the definition of and associations between a fixed set of indexable components for all three component types, i.e. an explicit edge list in addition to the expected set of vertices and faces. There are no explicit component objects in the representation, only an integer index VtrIndex identifying each component within the set and data associated with that component in the various vectors. The topology is stored as six sets of incident relations between the components two each for the two other component types incident each component type, i.e. for each face, its incident vertices and incident edges for each edge, its incident vertices and incident faces for each vertex, its incident edges and incident faces The collection of incidence relations is a vectorized variation of AIF the Adjacency and Incidence Framework. The set of these six incidence relations is not minimal only four are required, but that set excludes the most desired face-vertex relation but all six are kept and maintained to facilitate faster refinement. While the sizes of several vectors are directly proportional to the number of vertices, edges or faces to which the data is associated, the sizes of some of the vectors for these relations is more cumulative and so additional vectors of offsets is required typical of the face-vertex list commonly used as the minimal definition of mesh topology. Vectors for the sharpness values associated with crease edges and corner vertices are included and so sized according to the number of edges and vertices, along with additional tags for the components that may be helpful to refinement i.e. the type of subdivision Rule associated with each vertex. A Level is really just a container for data in a subdivision level, and so its public methods are primarily to access that data. Modification of the data is protected and only made available to classes that are intended to construct Levels currently the Far factory class that is responsible for building the base level, and the VtrRefinement class that constructs subsequent levels during refinement. Memory Efficiency One of the advantages in storing data in what is essentially a structure-of-arrays, rather than the array-of-structures more typical of topological representations, is that we can be more selective about memory usage in some cases. Particularly in the case of uniform refinement, when the data in subsequent levels is typically 4x its predecessor, we can minimize what we either generate or keep around at each level. For instance, if only a face-list is required at the finest level, we only need to generate one of the six topological relations the vertices incident each face. When we do keep Levels around in memory as is the case with the FarTopologyRefiner we do have do have the opportunity to prune what is not strictly necessary after the refinement. Just as with construction, whatever classes are privileged to construct a Level are likely those that will be privileged to prune its contents when needed. The current implementation of Level is far from optimal though -- there are opportunities for improvement. After one level of subdivision, the faces in a Level will be either all quads or tris. Having specializations for these cases and using the more general case in support of N-sided faces for the base level only is one possibility. Levels also allocate dozens of vectors in which to store all data. Since these vectors are of fixed size once created, they could be aggregated by partitioning one or a smaller number of larger block of memory into the desired pieces. The desire to make some of these improvements is part of why Vtr is not directly exposed for public use and instead exposed via Far. VtrRefinement While VtrLevel contains the topology for each subdivision level, VtrRefinement is responsible for creating a new level via refinement of an existing one, and for maintaining the relationships between the components in the parent and child levels. So a simplified view of a subdivision hierarchy with Vtr is a set of Levels with a Refinement between each successive pair. Refinement is a friend of Level and will populate a child level from a parent given a set of refinement parameters. Aside from parameters related to data or depth, there are two kinds of refinement supported uniform and sparse. The latter sparse refinement requires selection of an arbitrary set of components -- any dependent or neighboring components that are required for the limit will be automatically included. So feature-adaptive refinement is just one form of this selective sparse refinement, the criteria being the topological features of interest creases and extra-ordinary vertices. The intent is to eventually provide more flexibility to facilitate the refinement of particular regions of interest or more dynamicadaptive needs. Refinement has also been subclassed according to the type of topological split being performed, i.e. splitting all faces into quads or tris via the QuadRefinement and TriRefinement subclasses. As noted with VtrLevel , there is further room for improvement in memory andor performance here by combining more optimal specializations for both Refinement and Level -- with consideration of separating the uniform and sparse cases. Parent-child and child-parent relationships While Refinement populates a new child Level as part of its refinement operation, it also accumulates the relationships between the parent and child level and as with Level , this data is stored in vectors indexable by the components. The associations between components in the two levels was initially only uni-directional child components were associated with incident components of a parent component based on the parent components topology, so we had a parent-to-child mapping one to many. Storing the reverse child-to-parent mapping was avoided to reduce memory particularly in the case of uniform refinement as it often was not necessary, but a growing need for it, particularly in the case of sparse feature-adaptive refinement, lead to it being included. Data flexibility One of the advantages of the structure-of-arrays representation in both Level and Refinement is that we can make more dynamic choices about what type of data we choose to allocate and use based on needs. For instance, we can choose between maintaining the parent-child or child-parent mapping in Refinement , or both if needed, and we can remove one if no longer necessary. An active example of this is uniform refinement if we only require the face-vertex list at the finest subdivision level, there is no need to generate a complete topological description of that level as would be required of more traditional representations, and given that level is 4x the magnitude of its parent, the savings are considerable. Currently there is nothing specific to a subdivision scheme in the refinement other than the type of topological splitting to apply. The refinement does subdivide sharpness values for creasing, but that too is independent of scheme. Tags were added to the base level that are propagated through the refinement and these too are dependent on the scheme, but are applied externally. Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n+ \"title\": \"hbr_tutorial_2.cpp\",\n+ \"text\": \"hbr_tutorial_2.cpp hbr_tutorial_2.cpp 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE httpsgithub.comPixarAnimationStudiosOpenSubdivblobreleasetutorialshbrtutorial_2hbr_tutorial_2.cpp ------------------------------------------------------------------------------ Tutorial description This tutorial shows how to subdivide uniformly a simple Hbr mesh. We are building upon previous tutorials and assuming a fully instantiated mesh we start with an HbrMesh pointer initialized from the same pyramid shape used in hbr_tutorial_0. We then apply the Refine function sequentially to all the faces in the mesh to generate several levels of uniform subdivision. The resulting data is then dumped to the terminal in Wavefront OBJ format for inspection. include opensubdivhbrmesh.h include opensubdivhbrcatmark.h include cassert include cstdio ------------------------------------------------------------------------------ For this tutorial, we have to flesh out the Vertex class further. Note that now the copy constructor, Clear and AddwithWeight methods have been implemented to interpolate our float3 position data. This vertex specialization pattern leaves client-code free to implement arbitrary vertex primvar data schemes or none at all to conserve efficiency struct Vertex Hbr minimal required interface ---------------------- Vertex Vertex int i Vertex Vertex const src _position 0 src . _position 0 _position 1 src . _position 1 _position 2 src . _position 2 void Clear void 0 _position 0 _position 1 _position 2 0.0f void AddWithWeight Vertex const src , float weight _position 0 weight src . _position 0 _position 1 weight src . _position 1 _position 2 weight src . _position 2 void AddVaryingWithWeight Vertex const , float Public interface ------------------------------------ void SetPosition float x , float y , float z _position 0 x _position 1 y _position 2 z const float GetPosition const return _position private float _position 3 typedef OpenSubdiv HbrMesh Vertex Hmesh typedef OpenSubdiv HbrFace Vertex Hface typedef OpenSubdiv HbrVertex Vertex Hvertex typedef OpenSubdiv HbrHalfedge Vertex Hhalfedge Hmesh createMesh ------------------------------------------------------------------------------ int main int , char Hmesh hmesh createMesh int maxlevel 2 , 2 levels of subdivision firstface 0 , marker to the first face index of level 2 firstvertex 0 marker to the first vertex index of level 2 Refine the mesh to maxlevel for int level 0 level maxlevel level Total number of faces in the mesh, across all levels Note this function iterates over the list of faces and can be slow int nfaces hmesh - GetNumFaces if level maxlevel -1 Save our vertex marker firstvertex hmesh - GetNumVertices Iterate over the faces of the current level of subdivision for int face firstface face nfaces face Hface f hmesh - GetFace face Note hole tags would have to be dealt with here. f - Refine Save our face index marker for the next level firstface nfaces Output OBJ of the highest level refined ----------- Print vertex positions int nverts hmesh - GetNumVertices for int vert firstvertex vert nverts vert float const pos hmesh - GetVertex vert - GetData . GetPosition printf v f f f n , pos 0 , pos 1 , pos 2 Print faces for int face firstface face hmesh - GetNumFaces face Hface f hmesh - GetFace face assert f - GetNumVertices 4 printf f for int vert 0 vert 4 vert OBJ uses 1-based arrays printf d , f - GetVertex vert - GetID - firstvertex 1 printf n ------------------------------------------------------------------------------ Creates an Hbr mesh see hbr_tutorial_0 and hbr_tutorial_1 for more details Hmesh createMesh Pyramid geometry from catmark_pyramid.h static float verts 5 3 0.0f , 0.0f , 2.0f , 0.0f , -2.0f , 0.0f , 2.0f , 0.0f , 0.0f , 0.0f , 2.0f , 0.0f , -2.0f , 0.0f , 0.0f static int nverts 5 , nfaces 5 static int facenverts 5 3 , 3 , 3 , 3 , 4 static int faceverts 16 0 , 1 , 2 , 0 , 2 , 3 , 0 , 3 , 4 , 0 , 4 , 1 , 4 , 3 , 2 , 1 OpenSubdiv HbrCatmarkSubdivision Vertex catmark new OpenSubdiv HbrCatmarkSubdivision Vertex Hmesh hmesh new Hmesh catmark Populate the vertices Vertex v for int i 0 i nverts i v . SetPosition verts i 0 , verts i 1 , verts i 2 hmesh - NewVertex i , v Create the topology int fv faceverts for int i 0 i nfaces i int nv facenverts i bool valid true for int j 0 j nv j Hvertex const origin hmesh - GetVertex fv j , destination hmesh - GetVertex fv j 1 nv Hhalfedge const opposite destination - GetEdge origin Make sure that the vertices exist in the mesh if origin NULL destination NULL printf An edge was specified that connected a nonexistent vertex n valid false break Check for a degenerate edge if origin destination printf An edge was specified that connected a vertex to itself n valid false break Check that no more than 2 faces are adjacent to the edge if opposite opposite - GetOpposite printf A non-manifold edge incident to more than 2 faces was found n valid false break Check that the edge is unique and oriented properly if origin - GetEdge destination printf An edge connecting two vertices was specified more than once. Its likely that an incident face was flipped n valid false break if valid hmesh - NewFace nv , fv , 0 else printf Skipped face d n , i fv nv hmesh - SetInterpolateBoundaryMethod Hmesh k_InterpolateBoundaryEdgeOnly hmesh - Finish return hmesh ------------------------------------------------------------------------------ Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n- \"loc\": \"vtr_overview.html\"\n+ \"loc\": \"hbr_tutorial_2.html\"\n }, {\n \"title\": \"Using Hbr\",\n \"text\": \"Using Hbr Using Hbr 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Vertex Template API Creating a Mesh Instantiating an HbrMesh Creating Vertices Creating Faces Wrapping Things Up Boundary Interpolation Rules Adding Creases Vertex Creases Edge Creases Holes Hierarchical Edits Face-varying Data Instantiating the HbrMesh Setting the Face-Varying Data Retrieving the Face-Varying Data Valence Operators Managing Singular Vertices Note As of OpenSubdiv 3.0, all Hbr dependencies have been removed from the core APIs Sdc , Vtr , Far , Osd . The legacy source code of Hbr is provided purely for regression and legacy purposes. If your code is currently depending on Hbr functionality, we recommend migrating to the newer APIs as we cannot guarantee that this code will be maintained in future releases. For more information see the 3.0 release notes Vertex Template API The Hbr API abstracts the vertex class through templating. Client-code is expected to provide a vertex class that implements the requisite interpolation functionality. Here is an example of a simple vertex class that accounts for 3D position, but does not support arbitrary variables or varying interpolation. struct Vertex Vertex Vertex int i Vertex const Vertex src _pos 0 src . _pos 0 _pos 1 src . _pos 1 _pos 2 src . _pos 2 Vertex void AddWithWeight const Vertex src , float weight , void 0 _pos 0 weight src . _pos 0 _pos 1 weight src . _pos 1 _pos 2 weight src . _pos 2 void AddVaryingWithWeight const Vertex , float , void 0 void Clear void 0 _pos 0 _pos 1 _pos 2 0.0f void SetPosition float x , float y , float z _pos 0 x _pos 1 y _pos 2 z void ApplyVertexEdit const OpenSubdiv HbrVertexEdit Vertex edit const float src edit . GetEdit switch edit . GetOperation case OpenSubdiv HbrHierarchicalEdit Vertex Set _pos 0 src 0 _pos 1 src 1 _pos 2 src 2 break case OpenSubdiv HbrHierarchicalEdit Vertex Add _pos 0 src 0 _pos 1 src 1 _pos 2 src 2 break case OpenSubdiv HbrHierarchicalEdit Vertex Subtract _pos 0 - src 0 _pos 1 - src 1 _pos 2 - src 2 break void ApplyMovingVertexEdit const OpenSubdiv HbrMovingVertexEdit Vertex custom functions data not required by Hbr ------------------------- Vertex float x , float y , float z _pos 0 x _pos 1 y _pos 2 z const float GetPos const return _pos float _pos 3 In some cases, if only topological analysis is required, the class can be left un-implemented. Far and Osd for instance store vertex data in serialized interleaved vectors. Here is the OsdVertex class for reference class Vertex public Vertex Vertex int index Vertex Vertex const src void AddWithWeight Vertex const i , float weight , void 0 void AddVaryingWithWeight const Vertex i , float weight , void 0 void Clear void 0 void ApplyVertexEdit FarVertexEdit const Creating a Mesh The following tutorial walks through the steps of instantiating a simple Hbr mesh. The code found in regressioncommonshape_utils.h can also be used as an example. While this implementation covers many of Hbr s features, it does not provide coverage for the complete Renderman specification though. Instantiating an HbrMesh First we need to instantiate a mesh object. Hbr supports 3 subdivision schemes Catmull-Clark catmark Loop Bilinear The scheme is selected by passing an specialized instance of HbrSubdivisionT , HbrCatmarkSubdivisionT in this case. The scheme can be shared across multiple mesh objects, so we only need a single instance. static OpenSubdiv HbrCatmarkSubdivision Vertex _scheme OpenSubdiv HbrMesh Vertex mesh new OpenSubdiv HbrMesh Vertex _scheme Creating Vertices Adding vertices to the mesh is accomplished using the HbrMeshNewVertex method. Because Hbr uses a dedicated vertex allocator to help alleviate the performance impact of intensive fragmented memory allocations. This optimization results in the following design pattern Vertex vtx for int i 0 i numVerts i Vertex v mesh - NewVertex i , vtx v-SetPosition We instantiate a single default vertex object named vtx on the stack. We then recover the pointer to the actual vertex created in the mesh from the NewVertex method. Once we have recovered that pointer, we can set the data for our vertex by using any of the custom accessors. Creating Faces Once all the vertices have been registered in the mesh, we can start adding the faces with HbrMeshNewFace . Assuming we had an obj style reader, we need to know the number of vertices in the face and the indices of these vertices. for int f 0 f numFaces f int nverts obj - GetNumVertices f const int faceverts obj - GetFaceVerts f mesh - NewFace nv , fv , 0 However, Hbr is not able to handle non-manifold geometry. In order to avoid tripping asserts or causing memory violations, lets rewrite the previous loop with some some prototype code to check the validity of the topology. for int f 0 f numFaces f int nv obj - GetNumVertices f const int fv obj - GetFaceVerts f triangles only for Loop subdivision if scheme kLoop and nv 3 printf Trying to create a Loop subd with non-triangle face n continue now check the half-edges connectivity for int j 0 j nv j OpenSubdiv HbrVertex T origin mesh - GetVertex fv j OpenSubdiv HbrVertex T destination mesh - GetVertex fv j 1 nv OpenSubdiv HbrHalfedge T opposite destination - GetEdge origin if origin NULL destination NULL printf An edge was specified that connected a nonexistent vertex n continue if origin destination printf An edge was specified that connected a vertex to itself n continue if opposite opposite - GetOpposite printf A non-manifold edge incident to more than 2 faces was found n continue if origin - GetEdge destination printf An edge connecting two vertices was specified more than once. Its likely that an incident face was flipped n continue mesh - NewFace nv , fv , 0 Wrapping Things Up Once we have vertices and faces set in our mesh, we still need to wrap things up by calling HbrMeshFinish mesh - Finish Finish iterates over the mesh to apply the boundary interpolation rules and checks for singular vertices. At this point, there is one final topology check remaining to validate the mesh mesh - Finish if mesh - GetNumDisconnectedVertices printf The specified subdivmesh contains disconnected surface components. n abort or iterate over the mesh to remove the offending vertices Boundary Interpolation Rules The rule-set can be selected using the following accessors Vertex and varying data mesh - SetInterpolateBoundaryMethod OpenSubdiv HbrMesh Vertex k_InterpolateBoundaryEdgeOnly Face-varying data mesh - SetFVarInterpolateBoundaryMethod OpenSubdiv HbrMesh Vertex k_InterpolateBoundaryEdgeOnly Additional information on boundary interpolation rules can be found here Warning The boundary interpolation rules must be set before the call to HbrMeshFinish , which sets the sharpness values to boundary edges and vertices based on these rules. Adding Creases Hbr supports a sharpness attribute on both edges and vertices. Sharpness is set using the SetSharpnessfloat accessors. Vertex Creases Given an index, vertices are very easy to access in the mesh. int idx vertex index float sharp the edge sharpness OpenSubdiv HbrVertex Vertex v mesh - GetVertex idx if v v - SetSharpness std max 0.0f , sharp else printf cannot find vertex for corner tag d n , idx Edge Creases Usually, edge creases are described with a vertex indices pair. Here is some sample code to locate the matching half-edge and set a crease sharpness. int v0 , v1 vertex indices float sharp the edge sharpness OpenSubdiv HbrVertex Vertex v mesh - GetVertex v0 , w mesh - GetVertex v1 OpenSubdiv HbrHalfedge Vertex e 0 if v w if e v - GetEdge w 0 e w - GetEdge v if e e - SetSharpness std max 0.0f , sharp else printf cannot find edge for crease tag d,d n , v0 , v1 Holes Hbr faces support a hole tag. int idx the face index OpenSubdiv HbrFace Vertex f mesh - GetFace idx if f f - SetHole else printf cannot find face for hole tag d n , idx Note The hole tag is hierarchical sub-faces can also be marked as holes. See Hierarchical Edits Hierarchical Edits Hbr supports the following types of hierarchical edits Type Function Corner edits Modify vertex sharpness Crease edits Modify edge sharpness FaceEdit Modify custom face data FVarEdit Modify face-varying data VertexEdit Modify vertex and varying data HoleEdit Set hole tag Modifications are one of the following 3 operations Operation Set Add Subtract Here is a simple example that creates a hierarchical vertex edit. path 655, 2, 3, 0 int faceid 655 , nsubfaces 2 , subfaces 2 2 , 3 , vertexid 0 int offset 0 , offset to the vertex or varying data numElems 3 number of elements to apply the modifier to x,y,z 3 bool isP false shortcut to identify modifications to the vertex position P OpenSubdiv HbrHierarchicalEdit Vertex Operation op OpenSubdiv HbrHierarchicalEdit T Set float values 3 1.0f , 0.5f , 0.0f edit values OpenSubdiv HbrVertexEdit T edit new OpenSubdiv HbrVertexEdit T faceid , nsubfaces , subfaces , vertexid , offset , floatwidth , isP , op , values Face-varying Data Here is a walk-through of how to store face-varying data for a u,v pair. Unlike vertex and varying data which is accessed through the templated vertex API, face-varying data is directly aggregated as vectors of float data. Instantiating the HbrMesh The HbrMesh needs to retain some knowledge about the face-varying data that it carries in order to refine it correctly. int fvarwidth 2 total width of the fvar data static int indices 1 0 , 1 offset set to 0 widths 1 2 2 floats in a u,v pair int const fvarcount fvarwidth 0 1 0 , fvarindices fvarwidth 0 indices NULL , fvarwidths fvarwidth 0 widths NULL mesh new OpenSubdiv HbrMesh T _scheme , fvarcount , fvarindices , fvarwidths , fvarwidth Setting the Face-Varying Data After the topology has been created, Hbr is ready to accept face-varying data. Here is some sample code for int i 0 , idx 0 i numFaces i OpenSubdiv HbrFace Vertex f mesh - GetFace i int nv f - GetNumVertices note this is not the fastest way OpenSubdiv HbrHalfedge Vertex e f - GetFirstEdge for int j 0 j nv j , e e - GetNext OpenSubdiv HbrFVarData Vertex fvt e - GetOrgVertex - GetFVarData f float const fvdata GetFaceVaryingData i , j if not fvt . IsInitialized if no fvar daa exists yet on the vertex fvt . SetAllData 2 , fvdata else if not fvt . CompareAll 2 , fvdata if there already is fvar data and there is a boundary add the new data OpenSubdiv HbrFVarData T nfvt e - GetOrgVertex - NewFVarData f nfvt . SetAllData 2 , fvdata Retrieving the Face-Varying Data The HbrFVarData structures are expanded during the refinement process, with every sub-face being assigned a set of interpolated face-varying data. This data can be accessed in 2 ways From a face, passing a vertex index OpenSubdivHbrFaceVertex f OpenSubdiv HbrFVarData const fv f . GetFVarData vindex const float data fv . GetData From a vertex, passing a pointer to an incident face OpenSubdivHbrFaceVertex f OpenSubdiv HbrFVarData const fv myVertex . GetFVarData f const float data fv . GetData Valence Operators When manipulating meshes, it is often necessary to iterate over neighboring faces or vertices. Rather than gather lists of pointers and return them, Hbr exposes an operator pattern that guarantees consistent mesh traversals. The following example shows how to use an operator to count the number of neighboring vertices use HbrVertexGetValence for proper valence counts OpenSubdivHbrVertexVertex v class MyOperator public OpenSubdiv HbrVertexOperator Vertex public int count MyOperator count 0 virtual void operator OpenSubdiv HbrVertex Vertex v count MyOperator op v - ApplyOperatorSurroundingVertices op Managing Singular Vertices Certain topological configurations would force vertices to share multiple half-edge cycles. Because Hbr is a half-edge representation, these singular vertices have to be duplicated as part of the HbrMeshFinish phase of the instantiation. These duplicated vertices can cause problems for client-code that tries to populate buffers of vertex or varying data. The following sample code shows how to match the vertex data to singular vertex splits Populating an OsdCpuVertexBuffer with vertex data positions,... float const vtxData inMeshFn . getRawPoints returnStatus OpenSubdiv OsdCpuVertexBuffer vertexBuffer OpenSubdiv OsdCpuVertexBuffer Create numVertexElements , numFarVerts vertexBuffer - UpdateData vtxData , 0 , numVertices Duplicate the vertex data into the split singular vertices std vector std pair int , int const splits hbrMesh - GetSplitVertices for int i 0 i int splits . size i vertexBuffer - UpdateData vtxData splits i . second numVertexElements , splits i . first , 1 Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"using_osd_hbr.html\"\n }, {\n+ \"title\": \"Vtr Overview\",\n+ \"text\": \"Vtr Overview Vtr Overview 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Vectorized Topology Representation Vtr VtrLevel Topological Relationships Memory Efficiency VtrRefinement Parent-child and child-parent relationships Data flexibility Vectorized Topology Representation Vtr Vtr consists of a suite of classes that collectively provide an intermediate representation of topology that supports efficient refinement. Vtr is intended for internal use only and is currently accessed through the Far layer by the FarTopologyRefiner , which assembles these Vtr classes to meet the topological and refinement needs of the Far layer. What follows is therefore more intended to provide insite into the underlying architecture than to describe particular usage. For documentation more relevant to direct usage, proceed to the Far section previously noted. Vtr is vectorized in that its topological data is stored more as a collection of vectors of primitive elements rather than as the faces, vertices and edges that make up many other topological representations. It is essentially a structure-of-arrays SOA approach to topology in contrast to the more common array-of-structures pattern found in many other topological representations. Vtrs use of vectors allows it to be fairly efficient in its use of memory and similarly efficient to refine, but the topology is fixed once defined. Vtr classes are purely topological. They are even more independent of the representation of vertices, faces, etc. than Hbr in that they are not even parameterized by an interface to such components. So the same set of Vtr objects can eventually be used to serve more than one representation of these components. The primary requirement is that a mesh be expressable as an indexable set i.e. a vector or array of vertices, edges and faces. The index of a component uniquely identifies it and properties are retrieved by referring to it by index. Its worth qualifying the term topological here and elsewhere -- we generally refer to topology as subdivision topology rather than mesh topology. A subdivision hierarchy is impacted by the presence of semi-sharp creasing, as the subdivision rules change in response to that creasing. So subdivision topology includes the sharpness values assigned to edges and vertices that affect the semi-sharp creasing. The two primary classes in Vtr consist of VtrLevel - a class representing complete vertex topology for a level VtrRefinement - a class mapping a parent VtrLevel to a child level Others exist to represent the following selection and appropriate tagging of components for sparse refinement divergence of face-varying topology from the vertex topology mapping between face-varying topology at successive levels common low-level utilities, e.g. simple array classes VtrLevel VtrLevel is a complete topological description of a subdivision level, with the topological relations, sharpness values and component tags all stored in vectors literally stdvectors, but easily changed via typedefs. There are no classes or objects for the mesh component types i.e. faces, edges and vertices but simply an integer index to identify each. It can be viewed as a structure-of-arrays representation of the topology any property related to a particular component is stored in an array and accessible using the index identifying that component. So with no classes the for the components, its difficult to say what constitutes a vertex or a face they are each the sum of all the fields scattered amongst the many vectors included. Level represents a single level of a potential hierarchy and is capable of representing the complete base mesh. There are no members that relate data in one level to any other, either below or above. As such, any Level can be used as the base level for a new subdivision hierarchy potentially more than one. All relationships between separate levels are maintained in the VtrRefinement class. Topological Relationships Level requires the definition of and associations between a fixed set of indexable components for all three component types, i.e. an explicit edge list in addition to the expected set of vertices and faces. There are no explicit component objects in the representation, only an integer index VtrIndex identifying each component within the set and data associated with that component in the various vectors. The topology is stored as six sets of incident relations between the components two each for the two other component types incident each component type, i.e. for each face, its incident vertices and incident edges for each edge, its incident vertices and incident faces for each vertex, its incident edges and incident faces The collection of incidence relations is a vectorized variation of AIF the Adjacency and Incidence Framework. The set of these six incidence relations is not minimal only four are required, but that set excludes the most desired face-vertex relation but all six are kept and maintained to facilitate faster refinement. While the sizes of several vectors are directly proportional to the number of vertices, edges or faces to which the data is associated, the sizes of some of the vectors for these relations is more cumulative and so additional vectors of offsets is required typical of the face-vertex list commonly used as the minimal definition of mesh topology. Vectors for the sharpness values associated with crease edges and corner vertices are included and so sized according to the number of edges and vertices, along with additional tags for the components that may be helpful to refinement i.e. the type of subdivision Rule associated with each vertex. A Level is really just a container for data in a subdivision level, and so its public methods are primarily to access that data. Modification of the data is protected and only made available to classes that are intended to construct Levels currently the Far factory class that is responsible for building the base level, and the VtrRefinement class that constructs subsequent levels during refinement. Memory Efficiency One of the advantages in storing data in what is essentially a structure-of-arrays, rather than the array-of-structures more typical of topological representations, is that we can be more selective about memory usage in some cases. Particularly in the case of uniform refinement, when the data in subsequent levels is typically 4x its predecessor, we can minimize what we either generate or keep around at each level. For instance, if only a face-list is required at the finest level, we only need to generate one of the six topological relations the vertices incident each face. When we do keep Levels around in memory as is the case with the FarTopologyRefiner we do have do have the opportunity to prune what is not strictly necessary after the refinement. Just as with construction, whatever classes are privileged to construct a Level are likely those that will be privileged to prune its contents when needed. The current implementation of Level is far from optimal though -- there are opportunities for improvement. After one level of subdivision, the faces in a Level will be either all quads or tris. Having specializations for these cases and using the more general case in support of N-sided faces for the base level only is one possibility. Levels also allocate dozens of vectors in which to store all data. Since these vectors are of fixed size once created, they could be aggregated by partitioning one or a smaller number of larger block of memory into the desired pieces. The desire to make some of these improvements is part of why Vtr is not directly exposed for public use and instead exposed via Far. VtrRefinement While VtrLevel contains the topology for each subdivision level, VtrRefinement is responsible for creating a new level via refinement of an existing one, and for maintaining the relationships between the components in the parent and child levels. So a simplified view of a subdivision hierarchy with Vtr is a set of Levels with a Refinement between each successive pair. Refinement is a friend of Level and will populate a child level from a parent given a set of refinement parameters. Aside from parameters related to data or depth, there are two kinds of refinement supported uniform and sparse. The latter sparse refinement requires selection of an arbitrary set of components -- any dependent or neighboring components that are required for the limit will be automatically included. So feature-adaptive refinement is just one form of this selective sparse refinement, the criteria being the topological features of interest creases and extra-ordinary vertices. The intent is to eventually provide more flexibility to facilitate the refinement of particular regions of interest or more dynamicadaptive needs. Refinement has also been subclassed according to the type of topological split being performed, i.e. splitting all faces into quads or tris via the QuadRefinement and TriRefinement subclasses. As noted with VtrLevel , there is further room for improvement in memory andor performance here by combining more optimal specializations for both Refinement and Level -- with consideration of separating the uniform and sparse cases. Parent-child and child-parent relationships While Refinement populates a new child Level as part of its refinement operation, it also accumulates the relationships between the parent and child level and as with Level , this data is stored in vectors indexable by the components. The associations between components in the two levels was initially only uni-directional child components were associated with incident components of a parent component based on the parent components topology, so we had a parent-to-child mapping one to many. Storing the reverse child-to-parent mapping was avoided to reduce memory particularly in the case of uniform refinement as it often was not necessary, but a growing need for it, particularly in the case of sparse feature-adaptive refinement, lead to it being included. Data flexibility One of the advantages of the structure-of-arrays representation in both Level and Refinement is that we can make more dynamic choices about what type of data we choose to allocate and use based on needs. For instance, we can choose between maintaining the parent-child or child-parent mapping in Refinement , or both if needed, and we can remove one if no longer necessary. An active example of this is uniform refinement if we only require the face-vertex list at the finest subdivision level, there is no need to generate a complete topological description of that level as would be required of more traditional representations, and given that level is 4x the magnitude of its parent, the savings are considerable. Currently there is nothing specific to a subdivision scheme in the refinement other than the type of topological splitting to apply. The refinement does subdivide sharpness values for creasing, but that too is independent of scheme. Tags were added to the base level that are propagated through the refinement and these too are dependent on the scheme, but are applied externally. Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n+ \"tags\": \"\",\n+ \"loc\": \"vtr_overview.html\"\n+ }, {\n \"title\": \"Tutorials\",\n \"text\": \"Tutorials Tutorials 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Bfr Tutorials 1. Basic Evaluation and Tessellation Tutorial 1.1 Tutorial 1.2 Tutorial 1.3 Tutorial 1.4 Tutorial 1.5 2. More on Tessellation Tutorial 2.1 Tutorial 2.2 3. Additional Topics Tutorial 3.1 Tutorial 3.2 Far Tutorials 1. Basic Construction and Interpolation Tutorial 1.1 Tutorial 1.2 2. Uniform Refinement and Primvar Data Types Tutorial 2.1 Tutorial 2.2 Tutorial 2.3 3. Creating a Custom FarTopologyRefinerFactory Tutorial 3.1 4. Construction and Usage of FarStencilTables Tutorial 4.1 Tutorial 4.2 Tutorial 4.3 5. Construction and Usage of FarPatchTables Tutorial 5.1 Tutorial 5.2 Tutorial 5.3 Osd Tutorials Tutorial 0 Hbr Tutorials Tutorial 0 Tutorial 1 Tutorial 2 The tutorial source code can be found in the github.com repository or in your local repository roottutorials . Bfr Tutorials All tutorials for the Bfr interface follow a similar pattern without any command line arguments, a default mesh usually a cube is used and the results printed to standard output in Obj format. Command line arguments can be used to specify an alternate mesh for input, as well as directing the output to a specified Obj file. Some tutorials may offer additional command line options to trigger internal options relevant to the topic, e.g. those illustrating tessellation may support a -quads option to use the option to tessellate quad-bases subdivision meshes with quads. 1. Basic Evaluation and Tessellation Tutorial 1.1 This tutorial illustrates the use of BfrSurfaceFactory and BfrSurface to evaluate points on the limit of each face. The limit positions at all corners of the face are evaluated and connected to the limit position in the center of the face -- creating a simple triangular tessellation. code Tutorial 1.2 This tutorial shows the added use of BfrTessellation to identify the set of points and connectivity for a uniform tessellation. Both a Surface and Tessellation is identified for each face, with the Tessellation indicating which points are to be evaluated by the Surface. code Tessellation patterns for quad-based subdivision schemes can optionally preserve quads left or be fully triangulated center, while triangular schemes always yield triangles right Tutorial 1.3 This tutorial extends the previous tutorial on uniform Tessellation by adding face-varying Surfaces to compute corresponding UVs for each evaluated position. code Tutorial 1.4 This tutorial extends the previous tutorial on uniform tessellation of position and UV by illustrating how additional mesh data interleaved with the position and UV data is easily handled. code Tutorial 1.5 This tutorial is similar to the first tutorial showing uniform tessellation of position but makes use of limit stencils for its evaluation of points of the tessellation pattern. code 2. More on Tessellation Tutorial 2.1 This tutorial extends the use of Tessellation to illustrate the use of non-uniform tessellation rates per edge. A simple edge-length metric is used to determine the tessellation rate for each edge of a face. code The following contrasts uniform tessellation left with the resulting length-based tessellations -- preserving quads center and fully triangulated right Tutorial 2.2 This tutorial is a more complex extension of the use of Tessellation that illustrates how the separation and association of tessellation data with the boundary and interior of the face can be used. Limit points evaluated on the vertices and edges of a face the boundary of the Tessellation are computed once and shared with adjacent faces -- creating a topologically watertight tessellation of the mesh. code 3. Additional Topics Tutorial 3.1 This tutorial shows a basic example of the more advanced topic of creating a subclass of SurfaceFactory adapted to a connected mesh representation -- requiring an implementation of the SurfaceFactoryMeshAdapter interface for that mesh. A simplified version of the implementation of FarTopologyRefiner is provided. Note that the code imported here is that of the main program, not the separate header and source files of the custom subclass illustrated -- which current documentation scripts cannot import. Tutorial 3.2 This tutorial shows how to initialize and retain Surfaces for later use. The simple uniform tessellation tutorial is modified to first create and populate a simple caching structure that initializes and stores the Surfaces for all faces of the mesh. The loop for each face of the mesh then retrieves its Surface and associated patch points from the cache. code Far Tutorials 1. Basic Construction and Interpolation Tutorial 1.1 This tutorial presents the requisite steps to instantiate a mesh as a FarTopologyRefiner from simple topological data and to interpolate vertex data associated with the mesh. code Tutorial 1.2 This tutorial makes use of a different vertex data definition for use when vertex data is of arbitrary width. Uniform refinement is applied to data buffers of three types two of fixed but different sizes and the third a union of the two that is dynamically sized and constructed. code 2. Uniform Refinement and Primvar Data Types Tutorial 2.1 Building on the basic tutorial, this example shows how to instantiate a simple mesh, refine it uniformly and then interpolate both vertex and varying primvar data. code Tutorial 2.2 Building on the previous tutorial, this example shows how to instantiate a simple mesh, refine it uniformly and then interpolate both vertex and face-varying primvar data. The resulting interpolated data is output in Obj format, with the face-varying data recorded in the UV texture layout. code Tutorial 2.3 Building on previous tutorials, this example shows how to instantiate a simple mesh, refine it uniformly, interpolate both vertex and face-varying primvar data, and finally calculate approximated smooth normals. The resulting interpolated data is output in Obj format. code 3. Creating a Custom FarTopologyRefinerFactory Tutorial 3.1 Previous tutorials have instantiated topology from a simple face-vertex list via the FarTopologyDescriptor and its TopologyRefinerFactory. This tutorial shows how to more efficiently convert an existing high-level topology representation to a FarTopologyDescriptor with a custom factory class. code 4. Construction and Usage of FarStencilTables Tutorial 4.1 This tutorial shows how to create and manipulate a StencilTable. Factorized stencils are used to efficiently interpolate vertex primvar data buffers. code Tutorial 4.2 This tutorial shows how to create and manipulate StencilTables for both vertex and varying primvar data buffers vertex positions and varying colors. code Tutorial 4.3 This tutorial shows how to create and manipulate tables of cascading stencils to apply hierarchical vertex edits. code 5. Construction and Usage of FarPatchTables Tutorial 5.1 This tutorial shows how to compute points on the limit surface at arbitrary parametric locations using a FarPatchTable constructed from adaptive refinement. code Tutorial 5.2 Building on the previous tutorial, this example shows how to manage the limit surface of a potentially large mesh by creating and evaluating separate PatchTables for selected groups of faces of the mesh. code Tutorial 5.3 Building on the previous tutorials for both PatchTables and StencilTables, this example shows how to construct a LimitStencilTable to repeatedly evaluate an arbitrary collection of points on the limit surface. code Osd Tutorials Tutorial 0 This tutorial demonstrates the manipulation of Osd Evaluator and BufferDescriptor. code Hbr Tutorials Use of Hbr is no longer recommended -- these tutorials are included solely for historical reference. Tutorial 0 This tutorial presents, in a very succinct way, the requisite steps to instantiate an Hbr mesh from simple topological data. code Tutorial 1 This tutorial shows how to safely create Hbr meshes from arbitrary topology. Because Hbr is a half-edge data structure, it cannot represent non-manifold topology. Ensuring that the geometry used is manifold is a requirement to use Hbr safely. This tutorial presents some simple tests to detect inappropriate topology. code Tutorial 2 This tutorial shows how to subdivide uniformly a simple Hbr mesh. We are building upon previous tutorials and assuming a fully instantiated mesh we start with an HbrMesh pointer initialized from the same pyramid shape used in hbr_tutorial_0. We then apply the Refine function sequentially to all the faces in the mesh to generate several levels of uniform subdivision. The resulting data is then dumped to the terminal in Wavefront OBJ format for inspection. code Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"tutorials.html\"\n }, {\n \"title\": \"Subdivision Surfaces\",\n \"text\": \"Subdivision Surfaces Subdivision Surfaces 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Overview Piecewise Parametric Surfaces Parametric Patches Piecewise Surfaces Arbitrary Topology Regular versus Irregular Features Non-manifold Topology Subdivision versus Tessellation Subdivision Tessellation Which to Use Mesh Data and Topology Separating Data from Topology Vertex and Varying Data Face-Varying Data and Topology Schemes and Options Subdivision Schemes Boundary Interpolation Rules Face-varying Interpolation Rules Semi-Sharp Creases Other Options Chaikin Rule Triangle Subdivision Rule Overview Subdivision surfaces are a common modeling primitive that has gained popularity in animation and visual effects over the past decades. As the name suggests, subdivision surfaces are fundamentally surfaces . More specifically, subdivision surfaces are piecewise parametric surfaces defined over meshes of arbitrary topology -- both concepts that will be described in the sections that follow. Subdivision is both an operation that can be applied to a polygonal mesh to refine it, and a mathematical tool that defines the underlying smooth surface to which repeated subdivision of the mesh converges. Explicit subdivision is simple to apply some number of times to provide a smoother mesh, and that simplicity has historically lead to many tools representing the shape this way. In contrast, deriving the smooth surface that ultimately defines the shape -- its limit surface -- is considerably more complex but provides greater accuracy and flexibility. These differences have led to confusion in how some tools expose subdivision surfaces. The ultimate goal is to have all tools use subdivision surfaces as true surface primitives. The focus here is therefore less on subdivision and more on the nature of the surface that results from it. In addition to providing a consistent implementation of subdivision -- one that includes a number of widely used feature extensions -- a significant value of OpenSubdiv is that it makes the limit surface more accessible. Since its introduction, OpenSubdiv has received interest from users and developers with a wide variety of skills, interests and backgrounds. This document is intended to present subdivision surfaces from a perspective helpful in making use of OpenSubdiv. One purpose it serves is to provide a high level overview for those with less experience with the algorithms or mathematics of subdivision. The other is to provide an overview of the feature set available with OpenSubdiv, and to introduce those capabilities with the terminology used by OpenSubdiv as much of it is overloaded. Piecewise Parametric Surfaces Piecewise parametric surfaces are arguably the most widely used geometric representation in industrial design, entertainment and many other areas. Many of the objects we deal with everyday -- cars, mobile phones, laptops -- were all designed and visualized first as piecewise parametric surfaces before those designs were approved and pursued. Piecewise parametric surfaces are ultimately just collections of simpler modeling primitives referred to as patches. Patches constitute the pieces of the larger surface in much the same way as a face or polygon constitutes a piece of a polygonal mesh. Parametric Patches Patches are the building blocks of piecewise smooth surfaces, and many different kinds of patches have evolved to meet the needs of geometric modeling. Two of the more effective and common patches are illustrated below Single bicubic B-Spline patch Single bicubic Bezier patch Patches consist of a set of points or vertices that affect a rectangular piece of smooth surface triangular patches also exist. That rectangle is parameterized in its two directions, transforming a simple 2D rectangle into the 3D surface u,v 2D domain of a patch Mapping from u,v to x,y,z The points that control the shape of the surface are usually referred to as control points or control vertices, and the collection of the entire set defining a patch as the control mesh, the control hull, the control cage or simply the hull, the cage, etc. For the sake of brevity we will frequently use the term cage, which serves us more generally later. So a patch essentially consist of two entities its control points and the surface affected by them. The way the control points affect the surface is what makes the different types of patches unique. Even patches defined by the same number of points can have different behavior. Note that all 16 points of the B-Spline patch above are relatively far from the surface they define compared to the similar Bezier patch. The two patches in that example actually represent exactly the same piece of surface -- each with a set of control points having different effects on it. In mathematical terms, each control point has a basis function associated with it that affects the surface in a particular way when only that point is moved Bicubic B-Spline basis function Bicubic Bezier basis funciton It is these basis functions that often give rise to the names of the different patches. There are pros and cons to these different properties of the control points of patches, which become more apparent as we assemble patches into piecewise surfaces. Piecewise Surfaces Piecewise parametric surfaces are collections of patches. For rectangular patches, one of the simplest ways to construct a collection is to define a set of patches using a rectangular grid of control points Piecewise B-Spline surface Piecewise Bezier surface Note that we can overlap the points of adjacent B-spline patches. This overlapping means that moving one control point affects multiple patches -- but it also ensures that those patches always meet smoothly this was a design intention and not true for other patch types. Adjacent Bezier patches only share points at their boundaries and coordinating the points across those boundaries to keep the surface smooth is possible, but awkward. This makes B-splines a more favorable surface representation for interactive modeling, but Bezier patches serve many other useful purposes. A more complicated B-spline surface Part of a more complicated B-Spline surface Just as a patch consisted of a cage and a surface, the same is now true of the collection. The control cage is manipulated by a designer and the surface of each of the patches involved is displayed so they can assess its effect. Arbitrary Topology Piecewise surfaces discussed thus far have been restricted to collections of patches over regular grids of control points. There is a certain simplicity with rectangular parametric surfaces that is appealing, but a surface representation that supports arbitrary topology has many other advantages. Rectangular parametric surfaces gained widespread adoption despite their topological limitations, and their popularity continues today in some areas. Complex objects often need many such surfaces to represent them and a variety of techniques have evolved to assemble them effectively, including stitching multiple surfaces together or cutting holes into them trimming. These are complicated techniques, and while effective in some contexts e.g. industrial design they become cumbersome in others e.g. animation and visual effects. A single polygonal mesh can represent shapes with far more complexity than a single rectangular piecewise surface, but its faceted nature eventually becomes a problem. Subdivision surfaces combine the topological flexibility of polygonal meshes with the underlying smoothness of piecewise parametric surfaces. Just as rectangular piecewise parametric surfaces have a collection of control points its cage stored as a grid and an underlying surface, subdivision surfaces also have a collection of control points its cage stored as a mesh and an underlying surface often referred as its limit surface. Regular versus Irregular Features A mesh contains the vertices and faces that form the cage for the underlying surface, and the topology of that mesh can be arbitrarily complex. In areas where the faces and vertices of the mesh are connected to form rectangular grids, the limit surface becomes one of the rectangular piecewise parametric surfaces previously mentioned. These regions of the mesh are said to be regular they provide behavior familiar from the use of similar rectangular surfaces and their limit surface is relatively simple to deal with. All other areas are considered irregular they provide the desired topological flexibility and so are less familiar and less predictable in some cases and their limit surface can be much more complicated. Irregular features come in a number of forms. The most widely referred to is an extra-ordinary vertex, i.e. a vertex which, in the case of a quad subdivision scheme like Catmull-Clark, does not have four incident faces. Irregular vertex and incident faces Regular and irregular regions of the surface The presence of these irregular features makes the limit surface around them similarly irregular, i.e. it cannot be represented as simply as it can for regular regions. Its worth noting that irregular regions shrink in size and become more isolated as subdivision is applied. A face with a lot of extra-ordinary vertices around it makes for a very complicated surface, and isolating these features is a way to help deal with that complexity Two valence-5 vertices nearby Isolation subdivided once Isolation subdivided twice Its generally necessary to perform some kind of local subdivision in these areas to break these pieces of surface into smaller, more manageable pieces, and the term feature adaptive subdivision has become popular in recent years to describe this process. Whether this is done explicitly or implicitly, globally or locally, what matters most is that there is an underlying piece of limit surface for each face -- albeit a potentially complicated one at an irregular feature -- that can be evaluated in much the same way as rectangular piecewise surfaces. Patches of the regular regions Patches of the irregular region While supporting a smooth surface in these irregular areas is the main advantage of subdivision surfaces, both the complexity of the resulting surfaces and their quality are reasons to use them with care. When the topology is largely irregular, there is a higher cost associated with its surface, so minimizing irregularities is advantageous. And in some cases the surface quality, i.e. the perceived smoothness, of the irregular surfaces can lead to undesirable artefacts. An arbitrary polygonal mesh will often not make a good subdivision cage, regardless of how good that polygonal mesh appears. As with rectangular piecewise parametric surfaces, the cage should be shaped to affect the underlying surface it is intended to represent. See Modeling Tips for related recommendations. Non-manifold Topology Since the cage of a subdivision surface is stored in a mesh, and often manipulated in the same context as polygonal meshes, the topic of manifold versus non-manifold topology warrants some attention. There are many definitions or descriptions of what distinguishes a manifold mesh from one that is not. These range from concise but abstract mathematical definitions to sets of examples showing manifold and non-manifold meshes -- all have their value and an appropriate audience. The following is not a strict definition but serves well to illustrate most local topological configurations that cause a mesh to be non-manifold. Consider standing on the faces of a mesh and walking around each vertex in turn. Assuming a right-hand winding order of faces, stand on the side of the face in the positive normal direction. And when walking, step across each incident edge in a counter-clockwise direction to the next incident face. For an interior vertex start at the corner of any incident face walk around the vertex across each incident edge to the next unvisited face repeat if you arrive back where you started and any incident faces or edges were not visited, the mesh is non-manifold Similarly, for a boundary vertex start at the corner of the face containing the leading boundary edge walk around the vertex across each incident edge to the next unvisited face repeat if you arrive at another boundary edge and any incident faces or edges were not visited, the mesh is non-manifold If you can walk around all vertices this way and dont encounter any non-manifold features, the mesh is likely manifold. Obviously if a vertex has no faces, there is nothing to walk around and this test cant succeed, so it is again non-manifold. All of the faces around a vertex should also be in the same orientation, otherwise two adjacent faces have normals in opposite directions and the mesh will be considered non-manifold, so we should really include that constraint when stepping to the next face to be more strict. Consider walking around the indicated vertices of the following non-manifold meshes Edges with 2 incident faces Faces sharing a vertex but no edges As mentioned earlier, many tools do not support non-manifold meshes, and in some contexts, e.g. 3D printing, they should be strictly avoided. Sometimes a manifold mesh may be desired and enforced as an end result, but the mesh may temporarily become non-manifold due to a particular sequence of modeling operations. Rather than supporting or advocating the use of non-manifold meshes, OpenSubdiv strives to be robust in the presence of non-manifold features to simplify the usage of its clients -- sparing them the need for topological analysis to determine when OpenSubdiv can or cannot be used. Although subdivision rules are not as well standardized in areas where the mesh is not manifold, OpenSubdiv provides simple rules and a reasonable limit surface in most cases. Surface around edges with 2 incident faces Surface for faces sharing a vertex but no edges As with the case of regular versus irregular features, since every face has a corresponding piece of surface associated with it -- whether locally manifold or not -- the term arbitrary topology can be said to include non-manifold topology. Subdivision versus Tessellation The preceding sections illustrate subdivision surfaces as piecewise parametric surfaces of arbitrary topology. As piecewise parametric surfaces, they consist of a cage and the underlying surface defined by that cage. Two techniques used to display subdivision surfaces are subdivision and tessellation. Both have their legitimate uses, but there is an important distinction between them subdivision operates on a cage and produces a refined cage tessellation operates on a surface and produces a discretization of that surface The existence and relative simplicity of the subdivision algorithm makes it easy to apply repeatedly to approximate the shape of the surface, but with the result being a refined cage, that approximation is not always very accurate. When compared to a cage refined to a different level, or a tessellation that uses points evaluated directly on the limit surface, the discrepancies can be confusing. Subdivision Subdivision is the process that gives subdivision surfaces their name, but it is not unique to them. Being piecewise parametric surfaces, lets first look at subdivision in the context of the simpler parametric patches that comprise them. Subdivision is a special case of refinement , which is key to the success of some of the most widely used types of parametric patches and their aggregate surfaces. A surface can be refined when an algorithm exists such that more control points can be introduced while keeping the shape of the surface exactly the same . For interactive and design purposes, this allows a designer to introduce more resolution for finer control without introducing undesired side effects in the shape. For more analytical purposes, it allows the surface to be broken into pieces, often adaptively, while being faithful to the original shape. One reason why both B-spline and Bezier patches are so widely used is that both of them can be refined. Uniform subdivision -- the process of splitting each of the patches in one or both of its directions -- is a special case of refinement that both of these patch types support B-Spline surface and its cage Cage subdivided 1x Cage subdivided 2x In the cases illustrated above for B-Splines, the uniformly refined cages produce the same limit surface as the original granted in more pieces. So it is fair to say that both uniform B-splines and Bezier surfaces are subdivision surfaces. The limit surface remains the same with the many more control points roughly 4x with each iteration of subdivision, and those points are closer to but not on the surface. It may be tempting to use these new control points to represent the surface, but using the same number of points evaluated at corresponding uniformly spaced parametric locations on the surface is usually simpler and more effective. Note also that points of the cage typically do not have any normal vectors associated with them, though we can evaluate normals explicitly for arbitrary locations on the surface just as we do for position. So if displaying a cage as a shaded surface, normal vectors at each of the control points must be contrived. Both the positions and normals of the points on the finer cage are therefore both approximations. For more general subdivision surfaces, the same is true. Subdivision will refine a mesh of arbitrary topology, but the resulting points will not lie on the limit surface and any normal vectors contrived from and associated with these points will only be approximations to those of the limit surface. Tessellation There is little need to use subdivision to approximate a parametric surface when it can be computed directly, i.e. it can be tessellated. We can evaluate at arbitrary locations on the surface and connect the resulting points to form a tessellation -- a discretization of the limit surface -- that is far more flexible than the results achieved from uniform subdivision Uniform 3x3 tessellation of B-spline surface Curvature-adaptive tessellation of B-spline surface For a simple parametric surface, the direct evaluation of the limit surface is also simple, but for more complicated subdivision surfaces of arbitrary topology, this is less the case. The lack of a clear understanding of the relationship between the limit surface and the cage has historically lead to many applications avoiding tessellation. Its worth mentioning that subdivision can be used to generate a tessellation even when the limit surface is not available for direct evaluation. The recursive nature of subdivision does give rise to formulae that allow a point on the limit surface to be computed that corresponds to each point of the cage. This process is often referred to as snapping or pushing the points of the cage onto the limit surface. Subdivided 1x and snapped to limit surface Subdivided 2x and snapped to limit surface Since the end result is a connected set of points on the limit surface, this forms a tessellation of the limit surface, and we consider it a separate process to subdivision though it does make use of it. The fact that such a tessellation might have been achieved using subdivision is indistinguishable from the final result -- the same tessellation might just as easily have been generated by evaluating limit patches of the cage uniformly 2x, 4x, 8x, etc. along each edge. Which to Use Subdivision is undeniably useful in creating finer cages to manipulate the surface, but tessellation is preferred for displaying the surface when the patches are available for direct evaluation. There was a time when global refinement was pursued in limited circles as a way of rapidly evaluating parametric surfaces along isoparametric lines, but patch evaluation, i.e. tessellation, generally prevails. Considerable confusion has arisen due the way the two techniques have been employed and presented when displaying the shape in end-user applications. One can argue that if an application displays a representation of the surface that is satisfactory for its purposes, then it is not necessary to burden the user with additional terminology and choices. But when two representations of the same surface differ considerably between two applications, the lack of any explanation or control leads to confusion. As long as applications make different choices on how to display the surface, we seek a balance between simplicity and control. Since subdivided points do not lie on the limit surface, it is important to make it clear to users when subdivision is being used instead of tessellation. This is particularly true in applications where the cage and the surface are displayed in the same style as there is no visual cue for users to make that distinction. Mesh Data and Topology The ability of subdivision surfaces to support arbitrary topology leads to the use of meshes to store both the topology of the cage and the data values associated with its control points, i.e. its vertices. The shape of a mesh, or the subdivision surface that results from it, is a combination of the topology of the mesh and the position data associated with its vertices. When dealing with meshes there are advantages to separating the topology from the data, and this is even more important when dealing with subdivision surfaces. The shape referred to above is not just the shape of the mesh the cage in this case but could be the shape of a refined cage or the limit surface. By observing the roles that both the data and topology play in operations such as subdivision and evaluation, significant advantages can be gained by managing data, topology and the associated computations accordingly. While the main purpose of subdivision surfaces is to use position data associated with the vertices to define a smooth, continuous limit surface, there are many cases where non-positional data is associated with a mesh. That data may often be interpolated smoothly like position, but often it is preferred to interpolate it linearly or even make it discontinuous along edges of the mesh. Texture coordinates and color are common examples here. Other than position, which is assigned to and associated with vertices, there are no constraints on how arbitrary data can or should be associated or interpolated. Texture coordinates, for example, can be assigned to create a completely smooth limit surface like the position, linearly interpolated across faces, or even made discontinuous between them. There are, however, consequences to consider -- both in terms of data management and performance -- which are described below as the terminology and techniques used to achieve each are defined. Separating Data from Topology While the topology of meshes used to store subdivision surfaces is arbitrarily complex and variable, the topology of the parametric patches that make up its limit surface are simple and fixed. Bicubic B-Spline and Bezier patches are both defined by a simple 4x4 grid of control points and a set of basis functions for each point that collectively form the resulting surface. For such a patch, the position at a given parametric location is the result of the combination of position data associated with its control points and the weights of the corresponding basis functions weights being the values of basis functions evaluated at a parametric location. The topology and the basis functions remain the same, so we can make use of the weights independent of the data. If the positions of the control points change, we can simply recombine the new position data with the weights that we just used and apply the same combination. The fixed topology of a parametric patch and two shapes resulting from two sets of positions. Similarly, for a piecewise surface, the position at a given parametric location is the result of the single patch containing that parametric location evaluated at the given position. The control points involved are the subset of control points associated with that particular patch. If the topology of the surface is fixed, so too is the topology of the collection of patches that comprise that surface. If the positions of those control points change, we can recombine the new position data with the same weights for the subset of points associated with the patch. More complex but fixed topology of a surface and two shapes resulting from two sets of positions. This holds for a piecewise surface of arbitrary topology. Regardless of how complex the topology, as long as it remains fixed i.e. relationships between vertices, edges and faces does not change or anything other settings affecting subdivision rules, the same techniques apply. This is just one example of the value of separating computations involving topology from those involving the data. Both subdivision and evaluation can be factored into steps involving topology computing the weights and combining the data separately. Three shapes resulting from three sets of positions for a mesh of fixed topology. When the topology is fixed, enormous savings are possible by pre-computing information associated with the topology and organizing the data associated with the control points in a way that can be efficiently combined with it. This is key to understanding some of the techniques used to process subdivision surfaces. For a mesh of arbitrary topology, the control points of the underlying surface are the vertices, and position data associated with them is most familiar. But there is nothing that requires that the control points of a patch have to represent position -- the same techniques apply regardless of the type of data involved. Vertex and Varying Data The most typical and fundamental operation is to evaluate a position on the surface, i.e. evaluate the underlying patches of the limit surface using the x,y,z positions at the vertices of the mesh. Given a parametric u,v location on one such patch, the data-independent evaluation method first computes the weights and then combines the x,y,z vertex positions resulting in an x,y,z position at that location. But the weights and their combination can be applied to any data at the vertices, e.g. color, texture coordinates or anything else. Data associated with the vertices that is interpolated this way, including position, is said to be vertex data or to have vertex interpolation. Specifying other data as vertex data will result in it being smoothly interpolated in exactly the same way using exactly the same weights as the position. So to capture a simple 2D projection of the surface for texture coordinates, 2D values matching the x,y of the positions would be used. If linear interpolation of data associated with vertices is desired instead, the data is said to be varying data or to have varying interpolation. Here the non-linear evaluation of the patches defining the smooth limit surface is ignored and weights for simple linear interpolation are used. This is a common choice for texture coordinates as evaluation of texture without the need of bicubic patches is computationally cheaper. The linear interpolation will not capture the smoothness required of a true projection between the vertices, but both vertex and varying interpolation have their uses. Projected texture smoothly interpolated from vertex data Projected texture linearly interpolated from varying data Since both vertex and varying data is associated with vertices a unique value assigned to each, the resulting surface will be continuous -- piecewise smooth in the case of vertex data and piecewise linear in the case of varying. Face-Varying Data and Topology In order to support discontinuities in data on the surface, unlike vertex and varying data, there must be multiple values associated with vertices, edges andor faces, in order for a discontinuity to exist. Discontinuities are made possible by assigning values to the corners of faces, similar to the way in which vertices are assigned to the corners of faces when defining the topology of the mesh. Recalling the assignment of vertices to faces Vertex indices are assigned to all corners of each face as part of mesh construction and are often referred to as the face-vertices of an individual face or the mesh. All face-vertices that share the same vertex index will be connected by that vertex and share the same vertex data associated with it. By assigning a different set of indices to the face-vertices -- indices not referring to the vertices but some set of data to be associated with the corners of each face -- corners that share the same vertex no longer need to share the same data value and the data can be made discontinuous between faces This method of associating data values with the face-vertices of the mesh is said to be assigning face-varying data for face-varying interpolation. An interpolated value will vary continuously within a face i.e. the patch of the limit surface associated with the face but not necessarily across the edges or vertices shared with adjacent faces. Disjoint face-varying UV regions applied to the limit surface The combination of associating data values not with the vertices the control points but the face corners, and the resulting data-dependent discontinuities that result, make this a considerably more complicated approach than vertex or varying. The added complexity of the data alone is reason to only use it when necessary, i.e. when discontinuities are desired and present. Part of the complexity of dealing with face-varying data and interpolation is the way in which the interpolation behavior can be defined. Where the data is continuous, the interpolation can be specified to be as smooth as the underlying limit surface of vertex data or simply linear as achieved with varying data. Where the data is discontinuous -- across interior edges and around vertices -- the discontinuities create boundaries for the data, and partition the underlying surface into disjoint regions. The interpolation along these boundaries can also be specified as smooth or linear in a number of ways many of which have a historical basis. A more complete description of the different linear interpolation options with face-varying data and interpolation is given later. These options make it possible to treat the data as either vertex or varying, but with the added presence of discontinuities. An essential point to remember with face-varying interpolation is that each set of data is free to have its own discontinuities -- this leads to each data set having both unique topology and size. The topology specified for a collection of face-varying data is referred to as a channel and is unique to face-varying interpolation. Unlike vertex and varying interpolation, which both associate a data value with a vertex, the number of values in a face-varying channel is not fixed by the number of vertices or faces. The number of indices assigned to the face-corners will be the same for all channels, but the number of unique values referred to by these indices may not. We can take advantage of the common mesh topology in areas where the data is continuous, but we lose some of those advantages around the discontinuities. This results in the higher complexity and cost of a face-varying channel compared to vertex or varying data. If the topology for a channel is fixed, though, similar techniques can be applied to factor computation related to the topology so that changes to the data can be processed efficiently. Schemes and Options While previous sections have described subdivision surfaces in more general terms, this section describes a number of common variations often referred to as extensions to the subdivision algorithms and the ways that they are represented in OpenSubdiv. The number and nature of the extensions here significantly complicate what are otherwise fairly simple subdivision algorithms. Historically applications have supported either a subset or have had varying implementations of the same feature. OpenSubdiv strives to provide a consistent and efficient implementation of this feature set. Given the varying presentations of some of these features elsewhere, the naming chosen by OpenSubdiv is emphasized here. Subdivision Schemes OpenSubdiv provides two well known subdivision surface types -- Catmull-Clark often referred to more tersely as Catmark and Loop subdivision. Catmull-Clark is more widely used and suited to quad-dominant meshes, while Loop is preferred for and requires purely triangulated meshes. The many examples from previous sections have illustrated the more popular Catmull-Clark scheme. For an example of Loop Boundary Interpolation Rules Boundary interpolation rules control how subdivision and the limit surface behave for faces adjacent to boundary edges and vertices. The following choices are available via the enumeration SdcOptionsVtxBoundaryInterpolation Mode Behavior VTX_BOUNDARY_NONE No boundary edge interpolation is applied by default boundary faces are tagged as holes so that the boundary vertices continue to support the adjacent interior faces, but no surface corresponding to the boundary faces is generated boundary faces can be selectively interpolated by sharpening all boundary edges incident the vertices of the face VTX_BOUNDARY_EDGE_ONLY A sequence of boundary vertices defines a smooth curve to which the limit surface along boundary faces extends VTX_BOUNDARY_EDGE_AND_CORNER Similar to edge-only but the smooth curve resulting on the boundary is made to interpolate corner vertices vertices with exactly one incident face On a grid example In practice, it is rare to use no boundary interpolation at all -- this feature has its uses in allowing separate meshes to be seamlessly joined together by replicating the vertices along boundaries, but these uses are limited. Given the global nature of the setting, it is usually preferable to explicitly make the boundary faces holes in the areas where surfaces from separate meshes are joined, rather than sharpening edges to interpolate the desired boundaries everywhere else. The remaining edge only and edge and corner choices are then solely distinguished by whether or not the surface at corner vertices is smooth or sharp. Face-varying Interpolation Rules Face-varying interpolation rules control how face-varying data is interpolated both in the interior of face-varying regions smooth or linear and at the boundaries where it is discontinuous constrained to be linear or pinned in a number of ways. Where the topology is continuous and the interpolation chosen to be smooth, the behavior of face-varying interpolation will match that of the vertex interpolation. Choices for face-varying interpolation are most commonly available in the context of UVs for texture coordinates and a number of names for such choices have evolved in different applications over the years. The choices offered by OpenSubdiv cover a wide range of popular applications. The feature is named face-varying linear interpolation -- rather than boundary interpolation commonly used -- to emphasize that it can be applied to the entire surface not just boundaries and that the effects are to make the surface behave more linearly in various ways. The following choices are available for the SdcOptionsFVarLinearInterpolation enum -- the ordering here applying progressively more linear constraints Mode Behavior FVAR_LINEAR_NONE smooth everywhere the mesh is smooth FVAR_LINEAR_CORNERS_ONLY linearly interpolate sharpen or pin corners only FVAR_LINEAR_CORNERS_PLUS1 CORNERS_ONLY sharpening of junctions of 3 or more regions FVAR_LINEAR_CORNERS_PLUS2 CORNERS_PLUS1 sharpening of darts and concave corners FVAR_LINEAR_BOUNDARIES linear interpolation along all boundary edges and corners FVAR_LINEAR_ALL linear interpolation everywhere boundaries and interior These rules cannot make the interpolation of the face-varying data smoother than that of the vertices. The presence of sharp features of the mesh created by sharpness values, boundary interpolation rules, or the subdivision scheme itself e.g. Bilinear take precedence. All face-varying interpolation modes illustrated in UV space using a simple 4x4 grid of quads segmented into three UV regions their control point locations implied by interpolation in the FVAR_LINEAR_ALL case For those familiar, this shape and its assigned UV sets are available for inspection in the catmark_fvar_bound1 shape of OpenSubdivs example and regression shapes. Semi-Sharp Creases Just as some types of parametric surfaces support additional shaping controls to affect creasing along the boundaries between surface elements, OpenSubdiv provides additional sharpness values or weights associated with edges and vertices to achieve similar results over arbitrary topology. Setting sharpness values to a maximum value 10 in this case -- a number chosen for historical reasons effectively modifies the subdivision rules so that the boundaries between the piecewise smooth surfaces are infinitely sharp or discontinuous. But since real world surfaces never really have infinitely sharp edges, especially when viewed sufficiently close, it is often preferable to set the sharpness lower than this value, making the crease semi-sharp. A constant weight value assigned to a sequence of edges connected edges therefore enables the creation of features akin to fillets and blends without adding extra rows of vertices though that technique still has its merits Sharpness values range from 0-10, with a value of 0 or less having no effect on the surface and a value of 10 or more making the feature completely sharp. It should be noted that infinitely sharp creases are really tangent discontinuities in the surface, implying that the geometric normals are also discontinuous there. Therefore, displacing along the normal will likely tear apart the surface along the crease. If you really want to displace a surface at a crease, it may be better to make the crease semi-sharp. Other Options While the preceding options represent features available in a wide-variety of tools and modeling formats, a few others exist whose recognition and adoption is more limited. In some cases, they offer improvements to undesirable behavior of the subdivision algorithms, but their effects are less than ideal. Given both their limited effectiveness and lack of recognition, these options should be used with caution. Chaikin Rule The Chaikin Rule is a variation of the semi-sharp creasing method that attempts to improve the appearance of creases along a sequence of connected edges when the sharpness values differ. This choice modifies the subdivision of sharpness values using Chaikins curve subdivision algorithm to consider all sharpness values of edges around a common vertex when determining the sharpness of child edges. The creasing method can be set using the values defined in the enumeration SdcOptionsCreasingMethod Mode Behavior CREASE_UNIFORM Apply regular semi-sharp crease rules CREASE_CHAIKIN Apply Chaikin semi-sharp crease rules Example of contiguous semi-sharp creases interpolation Triangle Subdivision Rule The triangle subdivision rule is a rule added to the Catmull-Clark scheme that modifies the behavior at triangular faces to improve the undesirable surface artefacts that often result in such areas. Mode Behavior TRI_SUB_CATMARK Default Catmark scheme weights TRI_SUB_SMOOTH Smooth triangle weights Cylinder example This rule was empirically determined to make triangles subdivide more smoothly. However, this rule breaks the nice property that two separate meshes can be joined seamlessly by overlapping their boundaries i.e. when there are triangles at either boundary, it is impossible to join the meshes seamlessly Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n@@ -161,78 +161,78 @@\n \"loc\": \"release_notes.html\"\n }, {\n \"title\": \"Overview of Release 3.5\",\n \"text\": \"Overview of Release 3.5 Overview of Release 3.5 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE New Features Simplified Surface Evaluation Tessellation Patterns API Additions New classes in namespace Bfr Additions to FarTopologyLevel Additions to nested Options classes in Far Other Changes Deprecation Announcements Improvements Bug Fixes New Features Simplified Surface Evaluation The new Bfr interface provides an alternative to Far and Osd for evaluating the limit surface -- treating a subdivision mesh as a piecewise parameteric surface primitive . The Bfr interface is named for Base Face Representation as all concepts and classes relate to the individual faces of the original unrefined mesh, i.e. its base faces. Each base face has a piece of limit surface associated with it BfrSurface that is parameterized BfrParameterization and so can be evaluated and tessellated The limit surface for each face can be identified and evaluated independently of any other faces without any global pre-processing of a connected mesh. The resulting evaluation interface is much simpler, more flexible and more scalable than those assembled with the table-based class in Far -- providing a preferable alternative for many CPU-based use cases though not all. See the Bfr Overview documentation for more details. Tessellation Patterns In addition to evaluation, the Bfr interface includes a Tessellation class that provides tessellation patterns for all faces of a base mesh. A Tessellation does not encapsulate the entire tessellation process but simply provides topological patterns to assemble such a process. All faces of a mesh have a Parameterization which can be used to define a Tessellation with the specification of one or more tessellation rates. A single tessellation rate defines simple uniform tessellations while tessellation rates for each edge provide more complex non-uniform patterns A small set of options is also available to define the resulting patterns e.g. the preservation of quad faces with quad-based subdivision schemes above left and center and to generate its output in a more favorable form. Tessellation patterns do not support the full flexibility of typical hardware tessellation e.g. no fractional tessellation but do provide some useful alternatives to hardware tessellation e.g. the quad preservation previously noted, and more uniform triangles for triangular patches above right . The Tessellation class is also completely independent of evaluation in Bfr , and so can be used with any other evaluation interface. See the Tessellation subsection of the Bfr Overview for more details. API Additions See associated Doxygen for full details. New classes in namespace Bfr class Parameterization class Surface class SurfaceFactory class SurfaceFactoryCache class SurfaceFactoryMeshAdapter class RefinerSurfaceFactory class Tessellation Additions to FarTopologyLevel TopologyLevelIsVertexCorner TopologyLevelIsVertexRegular TopologyLevelIsVertexInfSharp TopologyLevelIsVertexSemiSharp TopologyLevelIsEdgeInfSharp TopologyLevelIsEdgeSemiSharp Additions to nested Options classes in Far PatchTableFactoryOptionsSetMaxIsolationLevel TopologyRefinerUniformOptionsSetRefinementLevel TopologyRefinerAdaptiveOptionsSetMaxIsolationLevel TopologyRefinerAdaptiveOptionsSetMaxSecondaryLevel Other Changes Deprecation Announcements Hbr is deprecated and will be removed from subsequent releases Improvements Suppression of GCC compiler warnings GitHub 1253, 1254, 1270 Additional methods for FarTopologyLevel GitHub 1227, 1255 Improved mixed partial derivative at Gregory patch corners GitHub 1252 Minor improvements to Far tutorials GitHub 1226, 1241 Added CMake config GitHub 1242 Updated CMake minimum version to 3.12 GitHub 1237, 1261 Updated documentation build scripts for Python 3 1265, 1266 Updated stringify build tool for improved cross compilation support GitHub 1267 Added NO_MACOS_FRAMEWORKS build option GitHub 1238 Updated Azure pipelines agents for Unbuntu and macOS GitHub 1247, 1256 Removed obsolete AppVeyor and Travis CI scripts GitHub 1259 Bug Fixes Cache active program for OsdGLComputeEvaluator GitHub 1244 Fixed member initialization warnings in OsdD3D11ComputeEvaluator GitHub 1239 Fixed GLSL shader source to remove storage qualifiers from struct members GitHub 1271 Fixed use of CMake variables for Apple builds GitHub 1235 Fixed build errors when using OpenGL without GLFW GitHub 1257 Fixed links to embedded videos GitHub 1231 Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"release_35.html\"\n }, {\n- \"title\": \"Overview of Release 3.3\",\n- \"text\": \"Overview of Release 3.3 Overview of Release 3.3 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE New Features Metal Compute and Tessellation API Additions OsdMTLContext OsdMTLComputeEvaluator OsdMTLStencilTable OsdMTLMeshInterface OsdMTLPatchTable OsdMTLLegacyGregoryPatchTable OsdPatchShaderSource OsdCPUMTLVertexBuffer Other Changes Improvements New Features Metal Compute and Tessellation Added support for drawing and evaluation using Apples Metal API for high performance and low-overhead GPU access. This includes the full set of Osd interfaces needed to draw using Metal graphics rendering including tessellation shaders and evaluate stencils and patch tables using Metal compute processing. Also includes an example mtlViewer that can be built to run on either macOS or iOS. Metal Graphics Rendering with Tessellation Metal Patch Evaluation using Compute Processing API Additions See associated Doxygen for full details. OsdMTLContext device and commandQueue member data OsdMTLComputeEvaluator Create EvalStencils EvalPatches EvalPatchesVarying EvalPatchesFaceVarying Compile Synchronize OsdMTLStencilTable Create GetSizesBuffer GetIndicesBuffer GetDuWeightsBuffer GetDvWeightsBuffer GetDuuWeightsBuffer GetDuvWeightsBuffer GetDvvWeightsBuffer GetNumStencils OsdMTLMeshInterface GetNumVertices GetMaxValence UpdateVertexBuffer UpdateVaryingBuffer Refine Synchronize GetPatchTable GetFarPatchTable BindVertexBuffer BindVaryingBuffer OsdMTLPatchTable Create GetPatchArrays GetPatchIndexBuffer GetPatchParamBuffer GetVaryingPatchArrays GetVaryingPatchIndexBuffer GetNumFVarChannels GetFVarPatchArrays GetFVarPatchIndexBuffer GetFVarPatchParamBuffer OsdMTLLegacyGregoryPatchTable UpdateVertexBuffer GetVertexBuffer GetVertexValenceBuffer GetQuadOffsetsBuffer OsdPatchShaderSource GetCommonShaderSource GetPatchBasisShaderSource GetVertexShaderSource GetHullShaderSource GetDomainShaderSource OsdCPUMTLVertexBuffer Create UpdateData GetNumElements GetNumVertices BindCpuBuffer BindMTLBuffer BindVBO Other Changes Improvements Fixed several instances of local variable shadowing that could cause build warnings Updated continuous-integration build scripts and added testing on macOS Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n- \"tags\": \"\",\n- \"loc\": \"release_33.html\"\n- }, {\n \"title\": \"Overview of Release 3.4\",\n \"text\": \"Overview of Release 3.4 Overview of Release 3.4 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE New Features Triangular Patches for Loop Subdivision Major Improvements to Introductory Documentation Sparse Patch Tables Support for Double Precision in Far API Additions Far extensions for triangular patches Construction and refinement of topology Construction and interface of FarPatchTable Construction and use of Far stencil tables Far class templates for double precision Far member functions converted to templates for double precision OsdMeshBits OsdPatchArray Osd extensions for patch evaluation common to all shaders Osd extensions for patch tessellation common to all shaders Other Changes Improvements Bug Fixes New Features Triangular Patches for Loop Subdivision Support for the drawing and evaluation of Loop subdivision meshes with triangular patches was added. This includes the full set of Far and Osd interfaces for both evaluation and drawing. The feature set supported for Loop subdivision now matches that of Catmark, including creases, face-varying patches, non-manifold topology, etc. The long standing requirement that Loop meshes be purely triangular remains, as Loop subdivision is not defined for non-triangular faces. And as is the case with the use of the Catmark scheme, application of Loop subdivision to dense, poorly modeled meshes may lead to unexpectedly poor performance andor surface quality. The patch representation used for Loop subdivision is intended to exactly match the underlying limit surface where regular, and so uses quartic triangular Box-splines. This is in contrast to approaches that use simpler patches to approximate the Loop limit surface everywhere. As with Catmark, Gregory patches are used to approximate irregular areas. Though other choices are available that compromise surface quality in favor of improved performance, they may be less effective with Loop than they are with Catmark. Major Improvements to Introductory Documentation A significant rewrite of the Subdivision Surfaces page is included in this release. The new documentation emphasizes the piecewise parametric surface nature of subdivision surfaces and the implications of supporting arbitary topology . As a true surface primitive, the distinction between the control points and the limit surface and the corresponding operations of subdivision and tessellation that are applied to them is made clear. Sparse Patch Tables Interfaces in Far for the construction of PatchTables and the required adaptive refinement have been extended to apply to an arbitrary subset of faces. This allows patches for either large meshes or meshes that may otherwise benefit from some kind of partioning e.g. areas of static and dynamic topology to be managed in an arbitrary number of groups. In the extreme, a PatchTable forming the tree of patches for a single base face can be constructed. Client data buffers for the base mesh do not need to be partitioned and base mesh topology can be shared by multiple instances of FarTopologyRefiner used to create corresponding instances of FarPatchTables. See the new Far tutorial 5.2 for a simple example. Support for Double Precision in Far Classes and interfaces in Far have been adapted to allow support for double precision via templates parameterized for float or double. Class templates for major classes such as FarStencilTable have been introduced and the original classes preserved for compatibility. Other classes such as FarPatchTable have had methods overloaded or replaced with template functions to support both single and double precision. Internally, all use of floating point constants and math library functions has been adapted to maximize accuracy appropriate to the precision of the template instance. Interfaces in Osd have not been extended. The extensions in Far provide the basis for extensions in Osd, but demand is limited. For those benefiting from such Osd extensions, contributions are welcomed. See the revised Far tutorial 5.1 that constructs a FarPatchTable for a simple example. API Additions See associated Doxygen for full details. Far extensions for triangular patches enum PatchDescriptorTypeGREGORY_TRIANGLE PatchParamNormalizeTriangle PatchParamUnnormalizeTriangle PatchParamIsTriangleRotated Construction and refinement of topology overloaded TopologyRefinerFactoryCreate extensions to TopologyRefinerRefineAdaptive Construction and interface of FarPatchTable overloaded PatchTableFactoryCreate PatchTableFactoryGetRefineAdaptiveOptions member PatchTableFactoryOptionsincludeBaseLevelIndices member PatchTableFactoryOptionsincludeFVarBaseLevelIndices member PatchTableFactoryOptionsgenerateVaryingTables member PatchTableFactoryOptionsgenerateVaryingLocalPoints member PatchTableFactoryOptionssetPatchPrecisionDouble member PatchTableFactoryOptionssetFVarPatchPrecisionDouble PatchTableGetFVarPatchDescriptorRegular PatchTableGetFVarPatchDescriptorIrregular PatchTableGetFVarValueStride Construction and use of Far stencil tables overloaded StencilTableUpdateValues enum LimitStencilTableFactoryMode member LimitStencilTableFactoryOptionsinterpolationMode member LimitStencilTableFactoryOptionsfvarChannel Far class templates for double precision class StencilReal class StencilTableReal class StencilTableFactoryReal class LimitStencilReal class LimitStencilTableReal class LimitStencilTableFactoryReal class PrimvarRefinerReal Far member functions converted to templates for double precision PatchParamNormalize PatchParamUnnormalize PatchTableEvaluateBasis PatchTableEvaluateBasisVarying PatchTableEvaluateBasisFaceVarying PatchTableGetLocalPointStencilTable PatchTableGetLocalPointVaryingStencilTable PatchTableGetLocalPointFaceVaryingStencilTable PatchMapFindPatch OsdMeshBits enumeration MeshEndCapBilinearBasis OsdPatchArray GetDescriptorRegular GetDescriptorIrregular GetPatchTyperRegular GetPatchTyperIrregular GetStride Osd extensions for patch evaluation common to all shaders struct OsdPatchArray and OsdPatchArrayInit struct OsdPatchCoord and OsdPatchCoordInit struct OsdPatchParam and OsdPatchParamInit OsdPatchParamGetFaceId OsdPatchParamGetU OsdPatchParamGetV OsdPatchParamGetTransition OsdPatchParamGetBoundary OsdPatchParamGetNonQuadRoot OsdPatchParamGetDepth OsdPatchParamGetParamFraction OsdPatchParamIsRegular OsdPatchParamIsTriangleRotated OsdPatchParamNormalize OsdPatchParamUnnormalize OsdPatchParamNormalizeTriangle OsdPatchParamUnnormalizeTriangle OsdEvaluatePatchBasisNormalized OsdEvaluatePatchBasis Osd extensions for patch tessellation common to all shaders OsdInterpolatePatchCoordTriangle OsdComputePerPatchVertexBoxSplineTriangle OsdEvalPatchBezierTriangle OsdEvalPatchGregoryTriangle OsdGetTessLevelsUniformTriangle OsdEvalPatchBezierTessLevels OsdEvalPatchBezierTriangleTessLevels OsdGetTessParameterizationTriangle Other Changes Improvements Added new build script GitHub 1068 Added support for newer DirectX SDKs GitHub 1066 Patch arrays extended to support combined regular and irregular types GitHub 995 FarPatchTables and adaptive refinement supported for Bilinear scheme GitHub 1035 New FarPatchTableFactory method to determine adaptive refinement options GitHub 1047 New FarPatchTableFactory options to align primvar buffers of uniform tables GitHub 986 FarStencilTableUpdateValues overloaded to support separate base buffer GitHub 1011 FarLimitStencilTableFactory updated to create face-varying tables GitHub 1012 Regular patches on boundaries no longer require additional isolation GitHub 1025 Inclusion of OpenSubdiv header files in source code now consistent GitHub 767 Re-organization of and additions to Far tutorials GitHub 1083 Examples now use common command-line conventions and parsing GitHub 1056 Bug Fixes Fixed FarPrimvarRefiner internal limitFVar prototype GitHub 979 Fixed FarStencilTable append when base StencilTable empty GitHub 982 Patches around non-manifold vertices now free of cracks GitHub 1013 Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"release_34.html\"\n }, {\n+ \"title\": \"Overview of Release 3.3\",\n+ \"text\": \"Overview of Release 3.3 Overview of Release 3.3 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE New Features Metal Compute and Tessellation API Additions OsdMTLContext OsdMTLComputeEvaluator OsdMTLStencilTable OsdMTLMeshInterface OsdMTLPatchTable OsdMTLLegacyGregoryPatchTable OsdPatchShaderSource OsdCPUMTLVertexBuffer Other Changes Improvements New Features Metal Compute and Tessellation Added support for drawing and evaluation using Apples Metal API for high performance and low-overhead GPU access. This includes the full set of Osd interfaces needed to draw using Metal graphics rendering including tessellation shaders and evaluate stencils and patch tables using Metal compute processing. Also includes an example mtlViewer that can be built to run on either macOS or iOS. Metal Graphics Rendering with Tessellation Metal Patch Evaluation using Compute Processing API Additions See associated Doxygen for full details. OsdMTLContext device and commandQueue member data OsdMTLComputeEvaluator Create EvalStencils EvalPatches EvalPatchesVarying EvalPatchesFaceVarying Compile Synchronize OsdMTLStencilTable Create GetSizesBuffer GetIndicesBuffer GetDuWeightsBuffer GetDvWeightsBuffer GetDuuWeightsBuffer GetDuvWeightsBuffer GetDvvWeightsBuffer GetNumStencils OsdMTLMeshInterface GetNumVertices GetMaxValence UpdateVertexBuffer UpdateVaryingBuffer Refine Synchronize GetPatchTable GetFarPatchTable BindVertexBuffer BindVaryingBuffer OsdMTLPatchTable Create GetPatchArrays GetPatchIndexBuffer GetPatchParamBuffer GetVaryingPatchArrays GetVaryingPatchIndexBuffer GetNumFVarChannels GetFVarPatchArrays GetFVarPatchIndexBuffer GetFVarPatchParamBuffer OsdMTLLegacyGregoryPatchTable UpdateVertexBuffer GetVertexBuffer GetVertexValenceBuffer GetQuadOffsetsBuffer OsdPatchShaderSource GetCommonShaderSource GetPatchBasisShaderSource GetVertexShaderSource GetHullShaderSource GetDomainShaderSource OsdCPUMTLVertexBuffer Create UpdateData GetNumElements GetNumVertices BindCpuBuffer BindMTLBuffer BindVBO Other Changes Improvements Fixed several instances of local variable shadowing that could cause build warnings Updated continuous-integration build scripts and added testing on macOS Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n+ \"tags\": \"\",\n+ \"loc\": \"release_33.html\"\n+ }, {\n \"title\": \"Overview of Release 3.2\",\n \"text\": \"Overview of Release 3.2 Overview of Release 3.2 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE New Features Face-Varying Stencil Evaluation 1st and 2nd Derivative Evaluation Smooth Corner Patch API Additions OsdCpuEvaluator, GLComputeEvaluator, etc OsdMesh OsdMeshBits FarPatchTableFactoryOptions FarStencilTableFactory FarStencilTableFactoryOptions Other Changes Improvements Bug Fixes New Features Face-Varying Stencil Evaluation Face-Varying primvar values may now be refined using stencil tables. The stencil table for a face-varying channel is created by specifying the desired fvarChannel and setting the FarStencilTableFactoryOption interpolationMode to INTERPOLATE_FACE_VARYING when creating the stencil table. 1st and 2nd Derivative Evaluation The Osd Evaluator API has been extended to support 1st derivative and 2nd partial derivative evaluation for stencils and patches. 1st Derivative Surface Normal 2nd Derivative Surface Curvature On the left is an example of computing a surface normal at each point using the evaluated 1st derivatives, while on the right is an example of computing surface curvature at each point using the evaluated 2nd partial derivatives. Smooth Corner Patch An option has been added to disable the legacy behavior of generating a sharp-corner patch at a smooth corner. Corners which are actually sharp will continue to generate sharp-corner patches. The differences between the two methods is most apparent at low-levels of feature isolation. This feature is controlled by the generateLegacySharpCornerPatches option added to FarPatchTableFactoryOptions. Sharp Corner Patch legacy behavior Smooth Corner Patch On the left is the legacy behavior of generating sharp corner patches at smooth corners. The image on the right shows the correct smooth corner patches generated when this legacy behavior is disabled. API Additions See associated Doxygen for full details. OsdCpuEvaluator, GLComputeEvaluator, etc Create EvalStencils EvalPatches EvalPatchesVarying EvalPatchesFaceVarying OsdMesh Create OsdMeshBits member MeshUseSmoothCornerPatch FarPatchTableFactoryOptions member generateLegacySharpCornerPatches FarStencilTableFactory enumeration ModeINTERPOLATE_FACE_VARYING AppendLocalPointStencilTableFaceVarying FarStencilTableFactoryOptions member fvarChannel Other Changes Improvements Corrected numerous spelling errors in doxygen comments Updated glFVarViewer with improved error detection and command line parsing Added option to build using MSVC with static CRT Bug Fixes Fixed a double delete of GL program in OsdGLComputeEvaluator Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"release_32.html\"\n }, {\n- \"title\": \"Overview of Release 3.1\",\n- \"text\": \"Overview of Release 3.1 Overview of Release 3.1 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE New Features Bicubic Face-Varying Patches Varying and Face-Varying Evaluation Second Order Derivative Evaluation Separate Levels of Feature Isolation Sharp Patches for Infinitely Sharp Features API Additions OsdCpuEvaluator, GLComputeEvaluator, etc OsdCpuPatchTable, GLPatchTable, etc OsdMeshBits OsdPatchParam OsdGLSLPatchShaderSource, HLSLPatchShaderSource FarLimitStencil FarLimitStencilTable FarLimitStencilTableFactoryOptions FarPatchParam FarPatchTable FarPatchTableFactoryOptions FarTopologyLevel FarTopologyRefinerAdaptiveOptions Other Changes Improvements Bug Fixes New Features Bicubic Face-Varying Patches The motivation for this feature is to improve drawing and evaluation of face-varying primvar values for all face-varying interpolation options . A common use of non-linear face-varying data is to capture a UV projection on the surface. The following example shows a simple shape with the face-varying interpolation option assigned to a non-linear choice to achieve the desired projection in this case FVAR_LINEAR_NONE Linear Face-Varying Patches Bicubic Face-Varying Patches The result on the left shows the old linearly interpolated patches, which ignores any non-linear settings. The result on the right shows the new use of bicubic face-varying patches to accurately interpolate the desired projection. Generation of a full face-varying patch representation can be enabled using a new option in FarPatchTableFactoryOptions. Additionally, topological refinement can be improved to consider fvar channel topology using a new option in FarTopologyRefinerAdaptiveOptions. See the API additions below and their associated Doxygen text for more details. Evaluation of patch basis weights for all patch types as been added to the GPU shader source provided by OsdGLSLPatchShaderSource, and OsdHLSLPatchShaderSource. Use of non-linear face-varying patches increases the storage size of the patch table and may also require additional data access and computation while drawing. Varying and Face-Varying Evaluation This feature extends existing evaluation methods to support evaluation of varying and face-varying primvar data at arbitrary limit surface locations. Varying Primvar Evaluation Face-Varying Primvar Evaluation The image on the left shows evaluation of varying primvar values and the image on the right shows evaluation of face-varying primvar values. The EvaluateBasis API of FarPatchTable has been extended as well as the OSD Evaluator API. Second Order Derivative Evaluation This feature extends the FarLimitStencilTable and FarPatchTable interfaces to support evaluation of 2nd order partial derivatives. The generation of derivative values for FarLimitStencilTable is controlled by new options that can be specified when creating the stencil table. Additionally, the implementation exposes a more accurate method to compute derivatives for Gregory basis patches. This can be enabled using the CMake configuration and compile time definition OPENSUBDIV_GREGORY_EVAL_TRUE_DERIVATIVES. Separate Levels of Feature Isolation The primary motivation for this feature is to reduce the number of patches generated by adaptive refinement when they can be adequately represented at a lower level. A single level of isolation must be as high as the greatest semi-sharp feature to properly resolve the shape of that feature. That high isolation level generates many unnecessary patches for smooth extra-ordinary vertices. In the following example, a single semi-sharp vertex is refined to level 5 Single Isolation Level 5 Primary Level 5, Secondary Level 2 Single isolation to level 5 on the left results in 312 patches. The right shows the semi-sharp feature isolated to 5, but with the new secondary level set to 2, the number of patches is reduced to 123. The second specified level of adaptive refinement is used to halt isolation for features that typically do not require the specified maximum. These include interior and boundary extra-ordinary vertices and those infinitely sharp patches that correspond to boundary extra-ordinary patches. The secondary level is available as a new option in FarTopologyRefinerAdaptiveOptions. Sharp Patches for Infinitely Sharp Features The motivation for sharp patches is to accurately represent the limit surface of infinitely sharp features, which otherwise can only be approximated by very high levels of adaptive refinement, resulting in many unnecessary patches. The true limit surface for regular faces along an infinitely sharp crease is a regular B-Spline patch -- the same as regular faces along a boundary. Similarly, the limit surface for faces around an extra-ordinary vertex on an infinitely sharp crease is the same as that of faces around an extra-ordinary vertex on a boundary. So these patches are identified and isolated to the same degree -- the regular patches as soon as possible, and the irregular patches to the depth specified. Consider the following regressionshapecatmark_cube_creases2 Level 5 without Sharp Patches Level 5 with Sharp Patches Level 2 with Sharp Patches Without use of sharp patches on the left, isolating to level 5 generates 1764 patches and does still not capture the sharp edges. With sharp patches in the center, isolating to the same degree level 5 reduces the number of patches to 96 and captures the sharp edges. The sharp features can be captured at a lower degree with comparable accuracy as illustrated on the right where isolation to level 2 further reduces the number of patches to 42. The use of infinitely sharp patches can be enabled both at a high level as an new option to OsdMesh, or more directly when adaptively refining or construction the patch tables in FarTopologyRefinerAdaptiveOptions and FarPatchTableFactoryOptions. Given the improved accuracy and reduced patches by the use of simple regular patches, we would prefer that this be the default behavior, but it was made an explicit option in order to avoid disrupting existing usage. In a future major release this feature will hopefully be the norm. API Additions See associated Doxygen for full details. OsdCpuEvaluator, GLComputeEvaluator, etc EvalPatchesVarying EvalPatchesFaceVarying OsdCpuPatchTable, GLPatchTable, etc GetFVarPatchArrayBuffer GetFVarPatchIndexBuffer GetFVarPatchIndexSize GetFVarPatchParamBuffer GetFVarPatchParamSize GetNumFVarChannels GetVaryingPatchArrayBuffer GetVaryingPatchIndexBuffer GetVaryingPatchIndexSize OsdMeshBits member MeshFVarAdaptive member MeshUseInfSharpPatch OsdPatchParam IsRegular Unnormalize extensions to Set OsdGLSLPatchShaderSource, HLSLPatchShaderSource GetPatchBasisShaderSource FarLimitStencil GetDuuWeights GetDuvWeights GetDvvWeights extensions to LimitStencil FarLimitStencilTable GetDuuWeights GetDuvWeights GetDvvWeights Update2ndDerivs extensions to LimitStencilTable FarLimitStencilTableFactoryOptions member generate1stDerivatives member generate1stDerivatives extensions to LimitTableStencilFactoryCreate FarPatchParam IsRegular Unnormalize extensions to Set FarPatchTable ComputeLocalPointValuesFaceVarying ComputeLocalPointValuesVarying GetFVarPatchDescriptor GetFVarPatchParam GetNumLocalPointsFaceVarying GetNumLocalPointsVarying GetPatchArrayVaryingVertices GetPatchArrayFVarPatchParam GetPatchArrayFVarValues GetPatchFVarPatchParam GetPatchVaryingVertices GetVaryingPatchDescriptor GetVaryingVertices EvaluateBasisFaceVarying EvaluateBasisVarying extensions to EvaluateBasis FarPatchTableFactoryOptions member useInfSharpPatch member genenerateFVarLegacyLinearPatches FarTopologyLevel DoesEdgeFVarTopologyMatch DoesFaceFVarTopologyMatch DoesVertexFVarTopologyMatch IsEdgeBoundary IsEdgeNonManifold IsVertexBoundary IsVertexNonManifold FarTopologyRefinerAdaptiveOptions member secondaryLevel member useInfSharpPatch member considerFVarChannels Other Changes Improvements Enabled the use of CMakes folder feature Removed the use of iso646 alternative keywords and, or, not, etc. to improve portability Added numerical valued preprocessor directives OPENSUBDIV_VERSION_MAJOR, etc. to opensubdivversion.h Improved documentation for FarPatchParam and added Unnormalize to complement Normalize Added additional topology queries to FarTopologyLevel Updated glFVarViewer and glEvalLimit viewer to make use of bicubic face-varying patches Updated glViewer and dxViewer to add a toggle for InfSharpPatch Updated dxPtexViewer for improved feature parity with glPtexViewer Improved far_regression to exercise shapes independent of Hbr compatibility Added support for Appveyor continuous integration testing Removed cmakeFindIlmBase Removed mayaPolySmooth example Bug Fixes Fixed Ptex version parsing and compatibility issues Fixed compatibility issues with VS2015 Fixed bug interpolating face-varying data with Bilinear scheme Fixed bug with refinement using Chaikin creasing Fixed bugs with HUD sliders in the example viewers Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n- \"tags\": \"\",\n- \"loc\": \"release_31.html\"\n- }, {\n \"title\": \"Overview of Release 3.0\",\n \"text\": \"Overview of Release 3.0 Overview of Release 3.0 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Release 3.0 Subdivision Core Sdc Topology and Refinement Limit Properties and Patches Faster Evaluation and Display Updated Source-Code Style Documentation and Tutorials Additional Resources Porting Guide Subdivision Compatibility Release 3.0 OpenSubdiv 3.0 represents a landmark release, with profound changes to the core algorithms, simplified APIs, and streamlined GPU execution. Providing faster, more efficient, and more flexible subdivision code remains our principal goal. To achieve this, OpenSubdiv 3.0 introduces many improvements that constitute a fairly radical departure from previous versions. This document highlights some of the major changes that have gone in to the 3.0 release. Subdivision Core Sdc In consideration of past, present and future topological representations, all low-level details fundamental to subdivision and the specific subdivision schemes have been factored into a new low-level layer called Sdc SubDivision Core. This layer encapsulates the full set of applicable options, the formulae required to support semi-sharp creasing, the formulae for the refinement masks of each subdivision scheme, etc. As initially conceived, its goal was often expressed as separating the math from the mesh. Sdc provides the low-level nuts and bolts to provide a subdivision implementation consistent with OpenSubdiv. It is used by OpenSubdivs libraries and may also be useful in providing an existing clients implementation with the details necessary to make that implementation consistent with OpenSubdiv. Topology and Refinement OpenSubdiv 3.0 introduces a new intermediate internal topological representation named Vtr Vectorized Topology Representation. Compared to the Hbr library used in previous versions, Vtr is much more efficient for the kinds of topological analysis required by Far and is more flexible. While Hbr is no longer used by OpenSubdiv, it will remain in the source distribution for legacy and regression purposes. Faster Subdivision A major focus of the 3.0 release is performance, and the improvement to the initial refinement of a mesh required for topological analysis is close to an order magnitude often much more for uniform, but less for adaptive. Supporting for Non-manifold Topology With topology conversion no longer constrained by Hbr, OpenSubdiv is no longer restricted to meshes of manifold topology. With one exception non-triangles with Loop subdivision, any set of faces and vertices that can be represented in common container formats such as Obj or Alembic can be represented and subdivided. With future efforts to bring the functionality for the Loop scheme up to par with Catmark, that last remaining topological restriction will be removed. Simpler Conversion of Topology Several entry-points are now available for client topology, rather than the single incremental assembly of an HbrMesh that previously existed. The new topological relationships can be populated using either a high-level interface where simplicity has been emphasized, or a more complex lower-level interface for enhanced efficiency. Face Varying Topology Previously, face-varying data was assigned by value to the vertex for each face, and whether or not the set of values around a vertex was continuous was determined by comparing these values later. In some cases this could result in two values that were not meant to be shared being welded together. Face-varying data is now specified topologically just as the vertex topology is defined from a set of vertices and integer references indices to these vertices for the corner of each face, face-varying topology is defined from a set of values and integer references indices to these values for the corner of each face. So if values are to be considered distinct around a vertex, they are given distinct indices and no comparison of any data is ever performed. Note that the number of vertices and values will typically differ, but since indices are assigned to the corners of all faces for both, the total number of indices assigned to all faces will be the same. This ensures that OpenSubdivs face-varying topology matches what is often specified in common geometry container formats like Obj, Alembic and USD. Multiple channels of face-varying data can be defined and each is topologically independent of the others. Limit Properties and Patches A fundamental goal of OpenSubdiv is to provide an accurate and reliable representation of the limit surface. Improvements have been made both to the properties positions and tangents at discrete points in the subdivision hierarchy, as well as to the representations of patches used for the continuous limit surface between them. Removed Fixed Valence Tables Limit properties of extra-ordinary vertices are computed for arbitrary valence and new patch types no longer rely on small table sizes. All tables that restricted the valence of a vertex to some relatively small table size have now been removed. The only restriction on valence that exists is within the new topology representation, which restricts it to the size of an unsigned 16-bit integer 65,535. This limit could also be removed, by recompiling with a certain size changed from 16- to 32-bits, but doing so would increase the memory cost for all common cases. We feel the 16-bit limit is a reasonable compromise. Single Crease Patch OpenSubdiv 3.0 newly implements efficient evaluation of semi-smooth creases using single crease patches. With this optimization, high-order edge sharpness tags can be handled very efficiently for both computation time and memory consumption. Niessner et al., Efficient Evaluation of Semi-Smooth Creases in Catmull-Clark Subdivision Surfaces. Eurographics Short Papers. 2012. httpresearch.microsoft.comen-usumpeoplecloopEG2012.pdf New Irregular Patch Approximations While legacy Gregory patch support is still available, we have introduced several new options for representing irregular patches Legacy Gregory, fast Gregory Basis stencils, and BSpline patches. Gregory basis stencils provide the same high quality approximation of Legacy Gregory patches, but execute considerably faster with a simpler GPU representation. While BSpline patches are not as close an approximation as Gregory patches, they enable an entire adaptively refined mesh to be drawn with screen space tessellation via a single global shader configuration Gregory Basis patches require one additional global shader configuration. The new implementations of the GregoryBasis and BSpline approximations relax the previous max valence limit. Legacy Gregory patch still has a limitation of max valence typically 24, depending on the hardware capability of GL_MAX_VARYING_VECTORS. Users are still encouraged to use models with vertices of low valence for both improved model quality and performance. Faster Evaluation and Display OpenSubdiv 3.0 also introduces new data structures and algorithms that greatly enhance performance for the common case of repeated evaluation both on the CPU and GPU. Introducing Stencil Tables OpenSubdiv 3.0 replaces the serialized subdivision tables with factorized stencil tables. The SubdivisionTables class of earlier releases contained a large number of data inter-dependencies, which incurred penalties from fences or force additional kernel launches. Most of these dependencies have now been factorized away in the pre-computation stage, yielding stencil tables FarStencilTable instead. Stencils remove all data dependencies and simplify all the computations into a single trivial kernel. This simplification results in a faster pre-computation stage, faster execution on GPU, with less driver overhead. The new stencil tables Compute back-end is supported on all the same platforms as previous releases except GCD. Faster, Simpler GPU Kernels On the GPU side, the replacement of subdivision tables with stencils greatly reduces bottlenecks in compute, yielding as much as a 4x interpolation speed-up. At the same time, stencils reduce the complexity of interpolation to a single kernel launch per primitive, a critical improvement for mobile platforms. As a result of these changes, compute batching is now trivial, which in turn enabled API simplifications in the Osd layer. Unified Adaptive Shaders Adaptive tessellation shader configurations have been greatly simplified. The number of shader configurations has been reduced from a combinatorial per-patch explosion down to a constant two global configurations. This massive improvement over the 2.x code base results in significantly faster load times and a reduced per-frame cost for adaptive drawing. Similar to compute kernel simplification, this shader simplification has resulted in additional simplifications in the Osd layer. Updated Source-Code Style OpenSubdiv 3.0 replaces naming prefixes with C namespaces for all API layers, bringing the source style more in line with contemporary specifications mostly inspired from the Google C Style Guide . The large-scale changes introduced in this release generally break compatibility with existing client-code. However, this gives us the opportunity to effect some much needed updates to our code-style guidelines and general conventions, throughout the entire OpenSubdiv code-base. We are hoping to drastically improve the quality, consistency and readability of the source code. Documentation and Tutorials The documentation has been reorganized and fleshed out. This release introduces a number of new tutorials . The tutorials provide an easier entry point for learning the API than do the programs provided in examples. The examples provide more fleshed out solutions and are a good next step after the tutorials are mastered. Additional Resources Porting Guide Please see the Porting Guide for help on how to port existing code written for OpenSubdiv 2.x to the new 3.0 release. Subdivision Compatibility The 3.0 release has made some minor changes to the subdivision specification and rules. See Subdivision Compatibility for a complete list. Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"release_30.html\"\n }, {\n- \"title\": \"References\",\n- \"text\": \"References References 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE References References Analytic Displacement Mapping using Hardware Tessellation Matthias Niessner, Charles Loop ACM Transactions on Graphics, Vol. 32 No. 3 Article 26 June 2013 httpresearch.microsoft.comen-usumpeoplecloopTOG2013.pdf httpdoi.org10.11452487228.2487234 Feature Adaptive GPU Rendering of Catmull-Clark Subdivision Surfaces Matthias Niessner, Charles Loop, Mark Meyer, and Tony DeRose ACM Transactions on Graphics, Vol. 31 No. 1 Article 6 January 2012 httpresearch.microsoft.comen-usumpeopleclooptog2012.pdf httpdoi.org10.11452077341.2077347 Efficient Evaluation of Semi-Smooth Creases in Catmull-Clark Subdivision Surfaces Matthias Niessner, Charles Loop, and Guenter Greiner. Eurographics Proceedings, Cagliari, 2012 httpresearch.microsoft.comen-usumpeoplecloopEG2012.pdf httpdoi.org10.2312confEG2012short041-044 Approximating Subdivision Surfaces with Gregory Patches for Hardware Tessellation Charles Loop, Scott Schaefer, Tianyun Ni, Ignacio Castano SIGGRAPH Asia Conference Proceedings 2009 httpwww.dgp.toronto.edupeoplestamrealityResearchpdfsig98.pdf httpdoi.org10.11451661412.1618497 GPU Smoothing of Quad Meshes T. L. Ni, Y. Yeo, A. Myles, V. Goel and J. Peters Proc. IEEE SMI 2008 httpwww.cise.ufl.eduresearchSurfLabpaperssmi08.pdf httpdoi.org10.1109SMI.2008.4547938 Fast Parallel Construction of Smooth Surfaces from Meshes with TriQuadPent Facets A. Myles and T. Ni and J. Peters Eurographics Symposium on Geometry Processing 2008 httpswww.cise.ufl.eduresearchSurfLabpapers08poly.pdf httpdoi.org10.1111j.1467-8659.2008.01276.x Approximating Catmull-Clark Subdivision Surfaces with Bicubic Patches Charles Loop, Scott Schaefer ACM Transactions on Graphics, Vol. 27 No. 1 Article 8 March 2008 httpresearch.microsoft.comen-usumpeoplecloopacctog.pdf httpdoi.org10.11451330511.1330519 Rapid Evaluation of Catmull-Clark Subdivision Surfaces Jeffrey Bolz and Peter Schroder Web3D Proceedings 2002 httpwww.multires.caltech.edupubsfastsubd.pdf httpdoi.org10.1145504502.504505 Piecewise Smooth Subdivision Surfaces with Normal Control Henning Biermann, Adi Levin and Denis Zorin SIGGRAPH 2000 Conference Proceedings httpmrl.nyu.edudzorinpapersbiermann2000pss.pdf httpdoi.org10.1145344779.344841 Subdivision for Modeling and Animation Denis Zorin, Peter Schroder Course Notes of SIGGRAPH 1999 httpwww.multires.caltech.edupubssig99notes.pdf Exact Evaluation of Catmull-Clark Subdivision Surfaces at Arbitrary Parameter Values Jos Stam SIGGRAPH 98 Conference Proceedings, Annual Conference Series, July 1998 httpwww.dgp.toronto.edupeoplestamrealityResearchpdfsig98.pdf httpdoi.org10.1145280814.280945 Subdivision Surfaces in Character Animation Tony DeRose, Michael Kass, Tien Truong Proceedings of SIGGRAPH 1998 httpgraphics.pixar.comlibraryGeripaper.pdf httpdoi.org10.1145280814.280826 Efficient, Fair Interpolation Using Catmull-Clark Surfaces Mark Halstead, Michael Kass, Tony DeRose SIGGRAPH 93 Conference Proceedings httpgraphics.pixar.comlibraryFairSubdivisionpaper.pdf httpdoi.org10.1145166117.166121 Recursively generated B-spline surfaces on arbitrary topological meshes Catmull, E. Clark, J. Computer-Aided Design 10 6 1978 httpdoi.org10.10160010-448528782990110-0 Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n+ \"title\": \"Overview of Release 3.1\",\n+ \"text\": \"Overview of Release 3.1 Overview of Release 3.1 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE New Features Bicubic Face-Varying Patches Varying and Face-Varying Evaluation Second Order Derivative Evaluation Separate Levels of Feature Isolation Sharp Patches for Infinitely Sharp Features API Additions OsdCpuEvaluator, GLComputeEvaluator, etc OsdCpuPatchTable, GLPatchTable, etc OsdMeshBits OsdPatchParam OsdGLSLPatchShaderSource, HLSLPatchShaderSource FarLimitStencil FarLimitStencilTable FarLimitStencilTableFactoryOptions FarPatchParam FarPatchTable FarPatchTableFactoryOptions FarTopologyLevel FarTopologyRefinerAdaptiveOptions Other Changes Improvements Bug Fixes New Features Bicubic Face-Varying Patches The motivation for this feature is to improve drawing and evaluation of face-varying primvar values for all face-varying interpolation options . A common use of non-linear face-varying data is to capture a UV projection on the surface. The following example shows a simple shape with the face-varying interpolation option assigned to a non-linear choice to achieve the desired projection in this case FVAR_LINEAR_NONE Linear Face-Varying Patches Bicubic Face-Varying Patches The result on the left shows the old linearly interpolated patches, which ignores any non-linear settings. The result on the right shows the new use of bicubic face-varying patches to accurately interpolate the desired projection. Generation of a full face-varying patch representation can be enabled using a new option in FarPatchTableFactoryOptions. Additionally, topological refinement can be improved to consider fvar channel topology using a new option in FarTopologyRefinerAdaptiveOptions. See the API additions below and their associated Doxygen text for more details. Evaluation of patch basis weights for all patch types as been added to the GPU shader source provided by OsdGLSLPatchShaderSource, and OsdHLSLPatchShaderSource. Use of non-linear face-varying patches increases the storage size of the patch table and may also require additional data access and computation while drawing. Varying and Face-Varying Evaluation This feature extends existing evaluation methods to support evaluation of varying and face-varying primvar data at arbitrary limit surface locations. Varying Primvar Evaluation Face-Varying Primvar Evaluation The image on the left shows evaluation of varying primvar values and the image on the right shows evaluation of face-varying primvar values. The EvaluateBasis API of FarPatchTable has been extended as well as the OSD Evaluator API. Second Order Derivative Evaluation This feature extends the FarLimitStencilTable and FarPatchTable interfaces to support evaluation of 2nd order partial derivatives. The generation of derivative values for FarLimitStencilTable is controlled by new options that can be specified when creating the stencil table. Additionally, the implementation exposes a more accurate method to compute derivatives for Gregory basis patches. This can be enabled using the CMake configuration and compile time definition OPENSUBDIV_GREGORY_EVAL_TRUE_DERIVATIVES. Separate Levels of Feature Isolation The primary motivation for this feature is to reduce the number of patches generated by adaptive refinement when they can be adequately represented at a lower level. A single level of isolation must be as high as the greatest semi-sharp feature to properly resolve the shape of that feature. That high isolation level generates many unnecessary patches for smooth extra-ordinary vertices. In the following example, a single semi-sharp vertex is refined to level 5 Single Isolation Level 5 Primary Level 5, Secondary Level 2 Single isolation to level 5 on the left results in 312 patches. The right shows the semi-sharp feature isolated to 5, but with the new secondary level set to 2, the number of patches is reduced to 123. The second specified level of adaptive refinement is used to halt isolation for features that typically do not require the specified maximum. These include interior and boundary extra-ordinary vertices and those infinitely sharp patches that correspond to boundary extra-ordinary patches. The secondary level is available as a new option in FarTopologyRefinerAdaptiveOptions. Sharp Patches for Infinitely Sharp Features The motivation for sharp patches is to accurately represent the limit surface of infinitely sharp features, which otherwise can only be approximated by very high levels of adaptive refinement, resulting in many unnecessary patches. The true limit surface for regular faces along an infinitely sharp crease is a regular B-Spline patch -- the same as regular faces along a boundary. Similarly, the limit surface for faces around an extra-ordinary vertex on an infinitely sharp crease is the same as that of faces around an extra-ordinary vertex on a boundary. So these patches are identified and isolated to the same degree -- the regular patches as soon as possible, and the irregular patches to the depth specified. Consider the following regressionshapecatmark_cube_creases2 Level 5 without Sharp Patches Level 5 with Sharp Patches Level 2 with Sharp Patches Without use of sharp patches on the left, isolating to level 5 generates 1764 patches and does still not capture the sharp edges. With sharp patches in the center, isolating to the same degree level 5 reduces the number of patches to 96 and captures the sharp edges. The sharp features can be captured at a lower degree with comparable accuracy as illustrated on the right where isolation to level 2 further reduces the number of patches to 42. The use of infinitely sharp patches can be enabled both at a high level as an new option to OsdMesh, or more directly when adaptively refining or construction the patch tables in FarTopologyRefinerAdaptiveOptions and FarPatchTableFactoryOptions. Given the improved accuracy and reduced patches by the use of simple regular patches, we would prefer that this be the default behavior, but it was made an explicit option in order to avoid disrupting existing usage. In a future major release this feature will hopefully be the norm. API Additions See associated Doxygen for full details. OsdCpuEvaluator, GLComputeEvaluator, etc EvalPatchesVarying EvalPatchesFaceVarying OsdCpuPatchTable, GLPatchTable, etc GetFVarPatchArrayBuffer GetFVarPatchIndexBuffer GetFVarPatchIndexSize GetFVarPatchParamBuffer GetFVarPatchParamSize GetNumFVarChannels GetVaryingPatchArrayBuffer GetVaryingPatchIndexBuffer GetVaryingPatchIndexSize OsdMeshBits member MeshFVarAdaptive member MeshUseInfSharpPatch OsdPatchParam IsRegular Unnormalize extensions to Set OsdGLSLPatchShaderSource, HLSLPatchShaderSource GetPatchBasisShaderSource FarLimitStencil GetDuuWeights GetDuvWeights GetDvvWeights extensions to LimitStencil FarLimitStencilTable GetDuuWeights GetDuvWeights GetDvvWeights Update2ndDerivs extensions to LimitStencilTable FarLimitStencilTableFactoryOptions member generate1stDerivatives member generate1stDerivatives extensions to LimitTableStencilFactoryCreate FarPatchParam IsRegular Unnormalize extensions to Set FarPatchTable ComputeLocalPointValuesFaceVarying ComputeLocalPointValuesVarying GetFVarPatchDescriptor GetFVarPatchParam GetNumLocalPointsFaceVarying GetNumLocalPointsVarying GetPatchArrayVaryingVertices GetPatchArrayFVarPatchParam GetPatchArrayFVarValues GetPatchFVarPatchParam GetPatchVaryingVertices GetVaryingPatchDescriptor GetVaryingVertices EvaluateBasisFaceVarying EvaluateBasisVarying extensions to EvaluateBasis FarPatchTableFactoryOptions member useInfSharpPatch member genenerateFVarLegacyLinearPatches FarTopologyLevel DoesEdgeFVarTopologyMatch DoesFaceFVarTopologyMatch DoesVertexFVarTopologyMatch IsEdgeBoundary IsEdgeNonManifold IsVertexBoundary IsVertexNonManifold FarTopologyRefinerAdaptiveOptions member secondaryLevel member useInfSharpPatch member considerFVarChannels Other Changes Improvements Enabled the use of CMakes folder feature Removed the use of iso646 alternative keywords and, or, not, etc. to improve portability Added numerical valued preprocessor directives OPENSUBDIV_VERSION_MAJOR, etc. to opensubdivversion.h Improved documentation for FarPatchParam and added Unnormalize to complement Normalize Added additional topology queries to FarTopologyLevel Updated glFVarViewer and glEvalLimit viewer to make use of bicubic face-varying patches Updated glViewer and dxViewer to add a toggle for InfSharpPatch Updated dxPtexViewer for improved feature parity with glPtexViewer Improved far_regression to exercise shapes independent of Hbr compatibility Added support for Appveyor continuous integration testing Removed cmakeFindIlmBase Removed mayaPolySmooth example Bug Fixes Fixed Ptex version parsing and compatibility issues Fixed compatibility issues with VS2015 Fixed bug interpolating face-varying data with Bilinear scheme Fixed bug with refinement using Chaikin creasing Fixed bugs with HUD sliders in the example viewers Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n- \"loc\": \"references.html\"\n+ \"loc\": \"release_31.html\"\n }, {\n \"title\": \"OSD Tessellation shader Interface\",\n \"text\": \"OSD Tessellation shader Interface OSD Tessellation shader Interface 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Basic Tessellation Control Shader Example for B-Spline patches Tessellation Evaluation Shader Example for B-Spline patches Basis Conversion B-spline Patch Gregory Basis Patch Box-spline Triangle Patch Gregory Triangle Patch Legacy Gregory Patch 2.x compatibility Tessellation levels Tessellation levels at each tessellated vertex Tessellation levels computed at each patch Uniform Screenspace Basic Starting with 3.0, Osd tessellation shaders can be used as a set of functions from client shader code. In order to tessellate Osd patches, client shader code should perform the following steps regular B-spline patch case In a tessellation control shader fetch a PatchParam for the current patch call OsdComputePerPatchVertexBSpline to compute OsdPerPatchVertexBezier. compute tessellation level. To prevent cracks on transition patches, two vec4 parameters tessOuterHi, tessOuterLo will be needed in addition to built-in gl_TessLevelInnerOuters. In a tessellation evaluation shader call OsdGetTessParameterization to remap gl_TessCoord to a patch parameter at which to evaluate. call OsdEvalPatchBezierOsdEvalPatchGregory to evaluate the current patch. The following is a minimal example of GLSL code explaining how client shader code uses OpenSubdiv shader functions to tessellate patches of a patch table. Tessellation Control Shader Example for B-Spline patches layout vertices 16 out in vec3 position patch out vec4 tessOuterLo , tessOuterHi out OsdPerPatchVertexBezier v void main Get a patch param from texture buffer. ivec3 patchParam OsdGetPatchParam gl_PrimitiveID Compute per-patch vertices. OsdComputePerPatchVertexBSpline patchParam , gl_InvocationID , position , v Compute tessellation factors. if gl_InvocationID 0 vec4 tessLevelOuter vec4 0 vec2 tessLevelInner vec2 0 OsdGetTessLevelsUniform patchParam , tessLevelOuter , tessLevelInner , tessOuterLo , tessOuterHi gl_TessLevelOuter 0 tessLevelOuter 0 gl_TessLevelOuter 1 tessLevelOuter 1 gl_TessLevelOuter 2 tessLevelOuter 2 gl_TessLevelOuter 3 tessLevelOuter 3 gl_TessLevelInner 0 tessLevelInner 0 gl_TessLevelInner 1 tessLevelInner 1 Tessellation Evaluation Shader Example for B-Spline patches layout quads in patch in vec4 tessOuterLo , tessOuterHi in OsdPerPatchVertexBezier v uniform mat4 mvpMatrix void main Compute tesscoord. vec2 UV OsdGetTessParameterization gl_TessCoord . xy , tessOuterLo , tessOuterHi vec3 P vec3 0 , dPu vec3 0 , dPv vec3 0 vec3 N vec3 0 , dNu vec3 0 , dNv vec3 0 ivec3 patchParam inpt 0 . v . patchParam Evaluate patch at the tess coord UV OsdEvalPatchBezier patchParam , UV , v , P , dPu , dPv , N , dNu , dNv Apply model-view-projection matrix. gl_Position mvpMatrix vec4 P , 1 Basis Conversion B-spline Patch The following diagram shows how the Osd shaders process b-spline patches. While regular patches are expressed as b-spline patches in FarPatchTable, the Osd shader converts them into Bezier basis patches for simplicity and efficiency. This conversion is performed in the tessellation control stage. The boundary edge evaluation and single crease matrix evaluation are also resolved during this conversion. OsdComputePerPatchVertexBSpline can be used for this process. The resulting Bezier control vertices are stored in OsdPerPatchVertexBezier struct. void OsdComputePerPatchVertexBSpline ivec3 patchParam , int ID , vec3 cv 16 , out OsdPerPatchVertexBezier result The tessellation evaluation shader takes an array of OsdPerPatchVertexBezier struct, and then evaluates the patch using the OsdEvalPatchBezier function. void OsdEvalPatchBezier ivec3 patchParam , vec2 UV , OsdPerPatchVertexBezier cv 16 , out vec3 P , out vec3 dPu , out vec3 dPv , out vec3 N , out vec3 dNu , out vec3 dNv Gregory Basis Patch In a similar way, Gregory basis patches are processed as follows OsdComputePerPatchVertexGregoryBasis can be used for the Gregory patches although no basis conversion involved for the Gregory patches and the resulting vertices are stored in a OsdPerPatchVertexGreogryBasis struct. void OsdComputePerPatchVertexGregoryBasis ivec3 patchParam , int ID , vec3 cv , out OsdPerPatchVertexGregoryBasis result The tessellation evaluation shader takes an array of OsdPerPatchVertexGregoryBasis struct, and then evaluates the patch using the OsdEvalPatchGregory function. void OsdEvalPatchGregory ivec3 patchParam , vec2 UV , vec3 cv 20 , out vec3 P , out vec3 dPu , out vec3 dPv , out vec3 N , out vec3 dNu , out vec3 dNv Box-spline Triangle Patch While regular triangle patches are expressed as triangular box-spline patches in FarPatchTable, the Osd shader converts them into triangular Bezier patches for consistency. This conversion is performed in the tessellation control stage. The boundary edge evaluation is resolved during this conversion. OsdComputePerPatchVertexBoxSplineTriangle can be used for this process. The resulting Bezier control vertices are stored in OsdPerPatchVertexBezier struct. void OsdComputePerPatchVertexBoxSplineTriangle ivec3 patchParam , int ID , vec3 cv 12 , out OsdPerPatchVertexBezier result The tessellation evaluation shader takes an array of OsdPerPatchVertexBezier struct, and then evaluates the patch using the OsdEvalPatchBezierTriangle function. void OsdEvalPatchBezierTriangle ivec3 patchParam , vec2 UV , OsdPerPatchVertexBezier cv 15 , out vec3 P , out vec3 dPu , out vec3 dPv , out vec3 N , out vec3 dNu , out vec3 dNv Gregory Triangle Patch OsdComputePerPatchVertexGregoryBasis can be used for the quartic triangular Gregory patches although no basis conversion involved for the Gregory triangle patches and the resulting vertices are stored in a OsdPerPatchVertexGreogryBasis struct. void OsdComputePerPatchVertexGregoryBasis ivec3 patchParam , int ID , vec3 cv , out OsdPerPatchVertexGregoryBasis result The tessellation evaluation shader takes an array of OsdPerPatchVertexGregoryBasis struct, and then evaluates the patch using the OsdEvalPatchGregoryTriangle function. void OsdEvalPatchGregoryTriangle ivec3 patchParam , vec2 UV , vec3 cv 18 , out vec3 P , out vec3 dPu , out vec3 dPv , out vec3 N , out vec3 dNu , out vec3 dNv Legacy Gregory Patch 2.x compatibility OpenSubdiv 3.0 also supports 2.x style Gregory patch evaluation see far_overview. In order to evaluate a legacy Gregory patch, client needs to bind extra buffers and to perform extra steps in the vertex shader as shown in the following diagram Tessellation levels Osd provides both uniform and screen-space adaptive tessellation level computation. Because of the nature of feature adaptive subdivision , we need to pay extra attention for a patchs outer tessellation level for the screen-space adaptive case so that cracks dont appear. An edge of the patch marked as a transition edge is split into two segments Hi and Lo. The Osd shaders uses these two segments to ensure the same tessellation along the edge between different levels of subdivision. In the following example, suppose the left hand side patch has determined the tessellation level of its right edge to be 5. gl_TessLevelOuter is set to 5 for the edge, and at the same time we also pass 2 and 3 to the tessellation evaluation shader as separate levels for the two segments of the edge split at the middle. Tessellation levels at each tessellated vertex The tessellation evaluation shader takes gl_TessCoord and those two values, and remaps gl_TessCoord using OsdGetTessParameterization or OsdGetTessLevelParameterizationTriangle to ensure the parameters are consistent across adjacent patches. vec2 OsdGetTessParameterization vec2 uv , vec4 tessOuterLo , vec4 tessOuterHi vec2 OsdGetTessParameterizationTriangle vec3 uvw , vec4 tessOuterLo , vec4 tessOuterHi Tessellation levels computed at each patch These tessellation levels can be computed the corresponding method in the tesselation control shader. Note that these functions potentially requires all bezier control points, you need to call barrier to ensure the conversion is done for all invocations. See osdglslPatchBSpline.glsl for more details. Uniform void OsdGetTessLevelsUniform ivec3 patchParam , out vec4 tessLevelOuter , out vec2 tessLevelInner , out vec4 tessOuterLo , out vec4 tessOuterHi void OsdGetTessLevelsUniformTriangle ivec3 patchParam , out vec4 tessLevelOuter , out vec2 tessLevelInner , out vec4 tessOuterLo , out vec4 tessOuterHi Screenspace void OsdEvalPatchBezierTessLevels OsdPerPatchVertexBezier cpBezier 16 , ivec3 patchParam , out vec4 tessLevelOuter , out vec2 tessLevelInner , out vec4 tessOuterLo , out vec4 tessOuterHi void OsdEvalPatchBezierTriangleTessLevels vec3 cv 15 , ivec3 patchParam , out vec4 tessLevelOuter , out vec2 tessLevelInner , out vec4 tessOuterLo , out vec4 tessOuterHi Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"osd_shader_interface.html\"\n }, {\n \"title\": \"Porting Guide 2.x to 3.0\",\n \"text\": \"Porting Guide 2.x to 3.0 Porting Guide 2.x to 3.0 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Porting Guide 2.x to 3.0 Source Code Organization Hbr Layer Translation Subdivision Schemes and Options in Sdc Specifying Face Varying Topology and Options Far Layer Translation Ordering of Refined Vertices Osd Layer Translation Controller Objects ComputeContext, DrawContext EvalLimitContext OsdMesh OsdKernelBatch OsdVertex Feature Adaptive Shader Changes End Cap Strategies Changes to Subdivision Build Support for Combining 2.x and 3.0 Porting Guide 2.x to 3.0 This document is a high-level description of how to port exiting OpenSubdiv 2.x code to use OpenSubdiv 3.0. NOTE If your questions are not answered here, please contact us on the OpenSubdiv forum and we will be happy to help Source Code Organization Given the scale of functional changes that were being made to the public interface, we took the opportunity in 3.0 to update the coding style and organization -- most notably making use of namespaces for each library. Subdirectory Namespace Relevance hbr NA Historical, no longer used sdc Sdc New, low-level, public options, constants, etc. vtr Vtr New, internal use, topology representation far Far Revised, similar functionality with new API osd Osd Revised, similar functionality with new API Hbr Layer Translation Client mesh topology is now translated into an instance of FarTopologyRefiner instead of HbrMesh. OpenSubdiv 2.x OpenSubdiv 3.0 HbrMeshVTX_TYPE FarTopologyRefiner The FarTopologyRefiner is now the core representation of topology from which all other major classes in Far and Osd are constructed. It was designed to support efficient refinement uniform or sparse of a base mesh of arbitrary topology no manifold restrictions. Once constructed it can be directly refined to meet some need, or passed to other contexts that will refine it to meet their needs. In contrast to directly assembling an HbrMesh, the TopologyRefiner, like other classes in Far, requires a Factory class for its construction. One of the early goals of these factories was to allow a client to convert their existing boundary representation -- with its full topological traversal abilities -- directly into the TopologyRefiners representation. While this is now possible, this also represents the most complex construction process and is only recommended for usage where this conversion process is critical. Details on how to construct a TopologyRefiner can be found in the Far overview documentation. Additionally, documentation for FarTopologyRefinerFactoryMESH outlines the requirements, and Far tutorial 3.1 tutorialsfartutorial_3_1 provides an example of a factory for directly converting HbrMeshes to TopologyRefiners. Its worth a reminder here that FarTopologyRefiner contains only topological information which does include sharpness, since that is considered relating to subdivision topology and not the positions or other data associated with a mesh. While HbrMeshT required some definition of a vertex type T and dimensions of face-varying data, TopologyRefiner is more clearly separated from the data. So the construction of the TopologyRefiner does not involve data specification at all. Subdivision Schemes and Options in Sdc The creation of a new TopologyRefiner requires specification of a subdivision scheme and a set of options that are applicable to all schemes. With HbrMesh, the scheme was specified by declaring a static instance of a specific subclass of a subdivision object, and the options were specified with a number of methods on the different classes. Such general information about the schemes has now been encapsulated in the Sdc layer for use throughout OpenSubdiv. The subdivision scheme is now a simple enumerated type SdcSchemeType and the entire set of options that can be applied to a scheme is encapsulated in a single simple struct of flags and enumerated types SdcOptions. OpenSubdiv 2.x OpenSubdiv 3.0 HbrMeshTSetInterpolateBoundaryMethod SdcOptionsSetVtxBoundaryInterpolation HbrMeshTSetFVarInterpolateBoundaryMethod SdcOptionsSetFVarLinearInterpolation HbrSubdivisionTSetCreaseSubdivisionMethod SdcOptionsSetCreasingMethod Specifying Face Varying Topology and Options Both the way in which face varying data is associated with a mesh and the options used to control its interpolation have changed. The documentation on Compatibility with OpenSubdiv 2.x details the equivalence of interpolation options between Hbr and the new SdcOptionsFVarLinearInterpolation enum, while the section on Face Varying Interpolation illustrates their effects. Face varying data is now specified by index rather than by value, or as often stated, it is specified topologically. Just as vertices for faces are specified by indices into a potential buffer of positions, face varying values are specified by indices into a potential buffer of values. Both vertices and face varying values frequently referred to as FVarValues in the API are assigned and associated with the corners of all faces. In many cases this will simplify representation as many common geometry container formats such as Obj or Alembic specify texture coordinates the same way. For other cases, where a value per face-corner is provided with no indication of which values incident each vertex should be considered shared, it will be necessary to determine shared indices for values at each vertex if any non-linear interpolation is desired. Far Layer Translation While TopologyRefiner was introduced into Far as the new intermediate topology representation, several other changes were made to classes in Far to provide more modular building blocks for use by the Osd layer or directly. OpenSubdiv 2.x OpenSubdiv 3.0 FarMeshU NA, no longer needed FarSubdivisionTables FarStencilTable FarPatchTables FarPatchTable Ordering of Refined Vertices The FarMesh was previously responsible for refining an HbrMesh -- generating new vertices and faces in successive levels of refinement in the FarSubdivisionTables. Vertices were grouped and reordered from the native ordering of HbrMesh so that vertices requiring similar processing were consecutive. Such grouping alleviated most of the idiosyncrasies of HbrMeshs native ordering but not all. FarToplogyRefiner is inherently a collection of refinement levels, and within each refined level so excluding the base level, all components are still grouped for the same reasons. There are two issues here though the ordering of these groups has changed though an option exists to preserve it the ordering of components within these groups is not guaranteed to have been preserved Vertices in a refined level are grouped according to the type of component in the parent level from which they originated, i.e. some vertices originate from the center of a face face-vertices, some from an edge edge-vertices and some from a vertex vertex-vertices. Note that there is a conflict in terminology here -- face-vertices and edge-vertices most often refer to vertices incident a face or edge -- but for the sake of this discussion, we use them to refer to the component from which a child vertex originates. The following table shows the ordering of these groups in 2.x and the two choices available in 3.0. The option is the orderVerticesFromFacesFirst flag that can be set in the Option structs passed to the uniform and adaptive refinement methods of TopologyRefiner Version and option Vertex group ordering 2.x face-vertices, edge-vertices, vertex-vertices 3.0 default vertex-vertices, face-vertices, edge-vertices 3.0 orderVerticesFromFacesFirst true face-vertices, edge-vertices, vertex-vertices The decision to change the default ordering was based on common feedback the rationale was to allow a trivial mapping from vertices in the cage to their descendants at all refinement levels. While the grouping is fundamental to the refinement process, the ordering of the groups is internally flexible, and the full set of possible orderings can be made publicly available in future if there is demand for such flexibility. The ordering of vertices within these groups was never clearly defined given the way that HbrMesh applied its refinement. For example, for the face-vertices in a level, it was never clear which face-vertices would be first as it depended on the order in which HbrMesh traversed the parent faces and generated them. Given one face, HbrMesh would often visit neighboring faces first before moving to the next intended face. The ordering with FarTopologyRefiner is much clearer and predictable. Using the face-vertices as an example, the order of the face-vertices in level N1 is identical to the order of the parent faces in level N from which they originated. So if we have face-vertices Vi , Vj and Vk at some level, originating from faces Fi , Fj and Fk in the previous level, they will be ordered in increasing order of i , j and k . For uniform refinement the ordering of face vertices Vi will therefore exactly match the ordering of the parent faces Fi . For adaptive or otherwise sparse refinement, the subset of Vi will be ordered similarly, just with components missing from those not refined. The same is true of all vertices, i.e. edge-vertices and vertex-vertices, and also for other components in refined levels, i.e. the child faces and edges. For child faces and edges, more than one will originate from the same parent face or edge. In addition to the overall ordering based on the parent faces or edges, another ordering is imposed on multiple children originating from the same face or edge. They will be ordered based on the corner or end-vertex with which they are associated. In the case of refined faces, another way to view the ordering is to consider the way that faces are originally defined -- by specifying the set of vertices for the corners of each face, often aggregated into a single large array. The ordering of the set of refined faces for each level will correspond directly to such an array of vertices per face in the previous level. Osd Layer Translation Two big changes in the 3.0 API have allowed the Osd layer to be significantly simpler, the first is the move to stencil tables from subdivision tables and the second is shader simplification. With this refactoring, the focus has been to use more meaningful names and to make the data contained within an object more apparent. Controller Objects The API-specific ComputeController has been replaced with the Evaluator . It reflects the fact that stencil compute batches are significantly simpler than subdivision table compute batches. The name Evaluator was chosen with the hope that is more meaningful than the generic ComputeController moniker the Evaluator evaluates stencil and patch tables. In the 2.x code base, subdiv level buffers were always required to be allocated contiguously, however in 3.0 with the shift to stencil tables, this strict allocation scheme is no longer required. As a result, the EvalStencils and EvalPatches methods now accept both a source and a destination descriptor. OpenSubdiv 2.x OpenSubdiv 3.0 ComputeControllerRefine Osd...EvaluatorEvalStencils ComputeControllerSynchronize Osd...EvaluatorSynchronize EvalStencilsControllerUpdateValues Osd...EvaluatorEvalStencils EvalStencilsControllerUpdateDerivs Osd...EvaluatorEvalStencils EvalLimitControllerEvalLimitSample Osd...EvaluatorEvalPatches Also note that OsdVertexDescriptor has been renamed, however its data members and semantic purpose remains the same OpenSubdiv 2.x OpenSubdiv 3.0 OsdVertexBufferDescriptor OsdBufferDescriptor ComputeContext, DrawContext ComputeContext and DrawContext have been replaced with API-specific StencilTable and PatchTable objects, for example OsdGLStencilTableSSBO. OpenSubdiv 2.x OpenSubdiv 3.0 ComputeContext Osd...StencilTable e.g. GLStencilTableTBO EvalStencilsContext Osd...StencilTable DrawContext Osd...PatchTable e.g. GLPatchTable EvalLimitContext The data stored in EvalLimitContext has been merged into the Evaluator class as well. EvalCoords have been moved into their own type, OsdPatchCoords. The primary change here is that the PTex face ID is no longer part of the data structure, rather the client can use a FarPatchMap to convert from PTex face ID to a FarPatchTablePatchHandle. OpenSubdiv 2.x OpenSubdiv 3.0 EvalLimitContext PatchTable EvalLimitContextEvalCoords OsdPatchCoords types.h OsdMesh While not strictly required, OsdMesh is still supported in 3.0 as convenience API for allocating buffers. OsdMesh serves as a simple way to allocate all required data, in the location required by the API for example, GPU buffers for OpenGL. OsdKernelBatch No translation, it is no longer part of the API. OsdVertex No translation, it is no longer part of the API. Feature Adaptive Shader Changes In 3.0, the feature adaptive screen-space tessellation shaders have been dramatically simplified, and the client-facing API has changed dramatically as well. The primary shift is to reduce the total number of shader combinations, and as a result, some of the complexity management mechanisms are no longer necessary. In the discussion below, some key changes are highlighted, but deep integrations may require additional discussion please feel free to send follow up questions to the OpenSubdiv google group. The number of feature adaptive shaders has been reduced from N to exactly 1 or 2, depending on how end-caps are handled. Osd layer no longer compiles shaders, rather it returns shader source for the client to compile. This source is obtained via OsdGLSLHLSLPatchShaderSource. The API exposed in shaders to access patch-based data has been consolidated and formalized, see osdglslPatchCommon.glsl and osdhlslPatchCommon.hlsl for details. Patches are no longer rotated and transition patches have been eliminated, simplifying PatchDescriptor to a 4 bits. Additionally, FarPatchTablesDescriptor has been moved into its own class in the Far namespace. The following table outlines the API translation between 2.x and 3.0 OpenSubdiv 2.x OpenSubdiv 3.0 OsdDrawContextPatchDescriptor NA, no longer needed. OsdDrawContextPatchArray OSdPatchArray types.h FarPatchTablesPatchDescriptor FarPatchDescriptor patchDescriptor.h FarPatchTablesPatchArray made private. End Cap Strategies By default, OpenSubdiv uses Gregory patches to approximate the patches around extraordinary vertices at the maximum isolation level, this process is referred to as end-capping. If ENDCAP_BSPLINE_BASIS is specified to PatchTableFactoryOptions, BSpline patches are used, which gives less accuracy, but it makes possible to render an entire mesh in a single draw call. Both patches require additional control points that are not part of the mesh, we refer to these as local points. In 3.0, the local points of those patches are computed by applying a stencil table to refined vertices to construct a new stencil table for the local points. Since this new stencil table is topologically compatible with the primary stencil table for refinement, it is convenient and efficient to splice those stencil tables together. This splicing can be done in the following way FarStencilTable const refineStencils FarStencilTableFactoryCreatetopologyRefiner FarPatchTable cosnt patchTable FarPatchTableFactoryCreatetopologyRefiner FarStencilTable const localPointStencils patchTable-GetLocalPointStencilTable FarStencilTable const splicedStencils FarStencilTableFactoryAppendLocalPointStencilTablestopologyRefiner, refineStencils, localPointStencils NOTE Once the spliced stencil table is created, the refined stencils can be released, but the local point stencils are owned by patchTable, it should not be released. OpenSubdiv 3.0 also supports 2.x style Gregory patches, if ENDCAP_LEGACY_GREGORY is specified to PatchTableFactoryOptions. In this case, such an extra stencil splicing isnt needed, however clients must still bind additional buffers VertexValence buffer and QuadOffsets buffer. See OsdGLLegacyGregoryPatchTable for additional details. Changes to Subdivision The refactoring of OpenSubdiv 3.0 data representations presented a unique opportunity to revisit some corners of the subdivision specification and remove or update some legacy features -- none of which was taken lightly. More details are provided in Subdivision Compatibility , while the following offers a quick overview All face-varying interpolation options have been combined into a single enum. Vertex interpolation options have been renamed or removed The naming of the standard creasing method has changed from Normal to Uniform . Unused legacy modes of the smoothtriangle option have been removed. The averaging of Chaikin creasing with infinitely sharp edges has changed. Support for Hierarchical Edits has been removed. Build Support for Combining 2.x and 3.0 Running OpenSubdiv 2.0 and 3.0 in a single process is supported, however some special care must be taken to avoid namespace collisions, both in terms of run-time symbols avoid using OpenSubdivOsd, for example and in terms of build-time search paths. To support both OpenSubdiv 2.0 and 3.0 in your build environment, you can prefix the header install directory of OpenSubdiv 3.0. Do this using the build flag CMAKE_INCDIR_BASE when configuring cmake i.e. -DCMAKE_INCDIR_BASEincludeopensubdiv3 and then including files from opensubdiv3... in client code. Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"porting.html\"\n }, {\n+ \"title\": \"References\",\n+ \"text\": \"References References 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE References References Analytic Displacement Mapping using Hardware Tessellation Matthias Niessner, Charles Loop ACM Transactions on Graphics, Vol. 32 No. 3 Article 26 June 2013 httpresearch.microsoft.comen-usumpeoplecloopTOG2013.pdf httpdoi.org10.11452487228.2487234 Feature Adaptive GPU Rendering of Catmull-Clark Subdivision Surfaces Matthias Niessner, Charles Loop, Mark Meyer, and Tony DeRose ACM Transactions on Graphics, Vol. 31 No. 1 Article 6 January 2012 httpresearch.microsoft.comen-usumpeopleclooptog2012.pdf httpdoi.org10.11452077341.2077347 Efficient Evaluation of Semi-Smooth Creases in Catmull-Clark Subdivision Surfaces Matthias Niessner, Charles Loop, and Guenter Greiner. Eurographics Proceedings, Cagliari, 2012 httpresearch.microsoft.comen-usumpeoplecloopEG2012.pdf httpdoi.org10.2312confEG2012short041-044 Approximating Subdivision Surfaces with Gregory Patches for Hardware Tessellation Charles Loop, Scott Schaefer, Tianyun Ni, Ignacio Castano SIGGRAPH Asia Conference Proceedings 2009 httpwww.dgp.toronto.edupeoplestamrealityResearchpdfsig98.pdf httpdoi.org10.11451661412.1618497 GPU Smoothing of Quad Meshes T. L. Ni, Y. Yeo, A. Myles, V. Goel and J. Peters Proc. IEEE SMI 2008 httpwww.cise.ufl.eduresearchSurfLabpaperssmi08.pdf httpdoi.org10.1109SMI.2008.4547938 Fast Parallel Construction of Smooth Surfaces from Meshes with TriQuadPent Facets A. Myles and T. Ni and J. Peters Eurographics Symposium on Geometry Processing 2008 httpswww.cise.ufl.eduresearchSurfLabpapers08poly.pdf httpdoi.org10.1111j.1467-8659.2008.01276.x Approximating Catmull-Clark Subdivision Surfaces with Bicubic Patches Charles Loop, Scott Schaefer ACM Transactions on Graphics, Vol. 27 No. 1 Article 8 March 2008 httpresearch.microsoft.comen-usumpeoplecloopacctog.pdf httpdoi.org10.11451330511.1330519 Rapid Evaluation of Catmull-Clark Subdivision Surfaces Jeffrey Bolz and Peter Schroder Web3D Proceedings 2002 httpwww.multires.caltech.edupubsfastsubd.pdf httpdoi.org10.1145504502.504505 Piecewise Smooth Subdivision Surfaces with Normal Control Henning Biermann, Adi Levin and Denis Zorin SIGGRAPH 2000 Conference Proceedings httpmrl.nyu.edudzorinpapersbiermann2000pss.pdf httpdoi.org10.1145344779.344841 Subdivision for Modeling and Animation Denis Zorin, Peter Schroder Course Notes of SIGGRAPH 1999 httpwww.multires.caltech.edupubssig99notes.pdf Exact Evaluation of Catmull-Clark Subdivision Surfaces at Arbitrary Parameter Values Jos Stam SIGGRAPH 98 Conference Proceedings, Annual Conference Series, July 1998 httpwww.dgp.toronto.edupeoplestamrealityResearchpdfsig98.pdf httpdoi.org10.1145280814.280945 Subdivision Surfaces in Character Animation Tony DeRose, Michael Kass, Tien Truong Proceedings of SIGGRAPH 1998 httpgraphics.pixar.comlibraryGeripaper.pdf httpdoi.org10.1145280814.280826 Efficient, Fair Interpolation Using Catmull-Clark Surfaces Mark Halstead, Michael Kass, Tony DeRose SIGGRAPH 93 Conference Proceedings httpgraphics.pixar.comlibraryFairSubdivisionpaper.pdf httpdoi.org10.1145166117.166121 Recursively generated B-spline surfaces on arbitrary topological meshes Catmull, E. Clark, J. Computer-Aided Design 10 6 1978 httpdoi.org10.10160010-448528782990110-0 Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n+ \"tags\": \"\",\n+ \"loc\": \"references.html\"\n+ }, {\n \"title\": \"OSD Overview\",\n \"text\": \"OSD Overview OSD Overview 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE OpenSubdiv Osd Refinement Limit Stencil Evaluation Limit Evaluation with PatchTable OpenGLDX11Metal Drawing with Hardware Tessellation InterleavedBatched Buffer Configuration Cross-Platform Implementation OpenSubdiv Osd Osd contains device dependent code that makes Far structures available on various backends such as TBB, CUDA, OpenCL, GLSL, etc. The main roles of Osd are Refinement Compute stencil-based uniformadaptive subdivision on CPUGPU backends Limit Stencil Evaluation Compute limit surfaces by limit stencils on CPUGPU backends Limit Evaluation with PatchTable Compute limit surfaces by patch evaluation on CPUGPU backends OpenGLDX11Metal Drawing with hardware tessellation Provide GLSLHLSLMetal tessellation functions for patch table InterleavedBatched buffer configuration Provide consistent buffer descriptor to deal with arbitrary buffer layout. Cross-Platform Implementation Provide convenient classes to interop between compute and draw APIs These are independently used by clients. For example, a client can use only the limit stencil evaluation, or a client can refine subdivision surfaces and draw them with the PatchTable and Osd tessellation shaders. All device specific evaluation kernels are implemented in the Evaluator classes. Since Evaluators dont own vertex buffers, clients should provide their own buffers as a source and destination. There are some interop classes defined in Osd for convenience. OpenSubdiv utilizes a series of regression tests to compare and enforce identical results across different computational devices. Refinement Osd supports both uniform and feature adaptive subdivision. Once clients create a FarStencilTable for the topology, they can convert it into device-specific stencil tables if necessary. The following table shows which evaluator classes and stencil table interfaces can be used together. Note that while Osd provides these stencil table classes which can be easily constructed from FarStencilTable, clients arent required to use these table classes. Clients may have their own entities as a stencil tables as long as EvaluatorEvalStencils can access the necessary interfaces. Backend Evaluator class compatible stencil table CPU CPU single-threaded CpuEvaluator FarStencilTable TBB CPU multi-threaded TbbEvaluator FarStencilTable OpenMP CPU multi-threaded OmpEvaluator FarStencilTable CUDA GPU CudaEvaluator CudaStencilTable OpenCL CPUGPU CLEvaluator CLStencilTable GL ComputeShader GPU GLComputeEvaluator GLStencilTableSSBO GL Transform Feedback GPU GLXFBEvaluator GLStencilTableTBO DX11 ComputeShader GPU D3D11ComputeEvaluator D3D11StencilTable Metal GPU MTLComputeEvaluator MTLStencilTable Limit Stencil Evaluation Limit stencil evaluation is quite similar to refinement in Osd . At first clients create FarLimitStencilTable for the locations to evaluate the limit surfaces, then convert it into an evaluator compatible stencil table and call EvaluatorEvalStencils. Limit Evaluation with PatchTable Another way to evaluate the limit surfaces is to use the PatchTable. Once all control vertices and local points are resolved by the stencil evaluation, Osd can evaluate the limit surfaces through the PatchTable. Backend Evaluator class compatible patch table CPU CPU single-threaded CpuEvaluator CpuPatchTable TBB CPU multi-threaded TbbEvaluator CpuPatchTable OpenMP CPU multi-threaded OmpEvaluator CpuPatchTable CUDA GPU CudaEvaluator CudaPatchTable OpenCL CPUGPU CLEvaluator CLPatchTable GL ComputeShader GPU GLComputeEvaluator GLPatchTable GL Transform Feedback GPU GLXFBEvaluator GLPatchTable DX11 ComputeShader GPU D3D11ComputeEvaluator not yet supported D3D11PatchTable Metal ComputeShader GPU MTLComputeEvaluator MTLPatchTable Release Notes 3.x Osd evaluation backends EvaluatorEvalPatches do not support evaluation of single-crease or Legacy Gregory patch types. OpenGLDX11Metal Drawing with Hardware Tessellation One of the most interesting use cases of the Osd layer is realtime drawing of subdivision surfaces using hardware tessellation. This is somewhat similar to limit evaluation with PatchTable described above. Drawing differs from limit evaluation in that Osd provides shader snippets for patch evaluation and clients will inject them into their own shader source. See shader interface for a more detailed discussion of the shader interface. InterleavedBatched Buffer Configuration All Osd layer APIs assume that each primitive variables to be computed points, colors, uvs ... are contiguous arrays of 32bit floating point values. The Osd API refers to such an array as a buffer. A buffer can exist on CPU memory or GPU memory. Osd Evaluators typically take one source buffer and one destination buffer, or three destination buffers if derivatives are being computed. Osd Evaluators also take BufferDescriptors, that are used to specify the layout of the source and destination buffers. A BufferDescriptor is a struct of 3 integers which specify an offset, length and stride. For example Vertex 0 Vertex 1 ... X Y Z X Y Z ... The layout of this buffer can be described as Osd BufferDescriptor desc offset 0 , length 3 , stride 3 BufferDescriptor can be used for an interleaved buffer too. Vertex 0 Vertex 1 ... X Y Z R G B A X Y Z R G B A ... Osd BufferDescriptor xyzDesc 0 , 3 , 7 Osd BufferDescriptor rgbaDesc 3 , 4 , 7 Although the source and destination buffers dont need to be the same buffer for EvalStencils, adaptive patch tables are constructed to first index the coarse vertices and the refined vertices immediately afterward. In this case, the BufferDescriptor for the destination should include the offset as the number of coarse vertices to be skipped. Coarse vertices n Src Refined vertices Dst Vertex 0 Vertex 1 ... Vertex n Vertex n1 X Y Z X Y Z ... X Y Z X Y Z ... Osd BufferDescriptor srcDesc 0 , 3 , 3 Osd BufferDescriptor dstDesc n 3 , 3 , 3 Also note that the source descriptor doesnt have to start with offset 0. This is useful when a client has a big buffer with multiple objects batched together. Cross-Platform Implementation One of the key goals of OpenSubdiv is to achieve as much cross-platform flexibility as possible and leverage all optimized hardware paths where available. This can be very challenging as there is a very large variety of plaftorms and APIs available, with very distinct capabilities. In Osd , Evaluators dont care about interops between those APIs. All Evaluators have two kinds of APIs for both EvalStencils and EvalPatches. Explicit signatures which directly take device-specific buffer representation e.g., pointer for CpuEvaluator, GLuint buffer for GLComputeEvaluator, etc. Generic signatures which take arbitrary buffer classes. The buffer class is required to have a certain method to return the device-specific buffer representation. The later interface is useful if the client supports multiple backends at the same time. The methods that need to be implemented for the Evaluators are Evaluator class object method CpuEvaluator TbbEvaluator OmpEvaluator pointer to cpu memory BindCpuBuffer CudaEvaluator pointer to cuda memory BindCudaBuffer CLEvaluator cl_mem BindCLBuffer GLComputeEvaluator GLXFBEvaluator GL buffer object BindVBO D3D11ComputeEvaluator D3D11 UAV BindD3D11UAV MTLComputeEvaluator MTLBuffer BindMTLBuffer The buffers can use these methods as a trigger of interop. Osd provides a default implementation of interop buffer for most of the backend combinations. For example, if the client wants to use CUDA as a computation backend and use OpenGL as the drawing API, OsdCudaGLVertexBuffer fits the case since it implements BindCudaBuffer and BindVBO. Again, clients can implement their own buffer class and pass it to the Evaluators. Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"osd_overview.html\"\n }, {\n+ \"title\": \"License\",\n+ \"text\": \"License License 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Open Source License OpenSubdiv is covered by a modified Apache 2.0 license included below, and is free to use for commercial or non-commercial use. All Pixar patents in the area of subdivision surface algorithms have also been released for public use. We welcome any involvement in the development or extension of this code in fact, we would love it. Please contact us if you are interested. For information on Apache licenses, see httpwww.apache.orglicenses The following license text describes the open source policy adopted by Pixar and is included in every source file. Copyright 2013 Pixar Licensed under the Apache License, Version 2.0 the Apache License with the following modification you may not use this file except in compliance with the Apache License and the following modification to it Section 6. Trademarks. is deleted and replaced with 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor and its affiliates, except as required to comply with Section 4c of the License and to reproduce the content of the NOTICE file. You may obtain a copy of the Apache License at httpwww.apache.orglicensesLICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the Apache License with the above modification is distributed on an AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the Apache License for the specific language governing permissions and limitations under the Apache License. Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n+ \"tags\": \"\",\n+ \"loc\": \"license.html\"\n+ }, {\n \"title\": \"mtlPtexViewer\",\n \"text\": \"mtlPtexViewer mtlPtexViewer 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE SYNOPSIS DESCRIPTION KEYBOARD CONTROLS SEE ALSO SYNOPSIS open mtlPtexViewer.app --args -yup -u -a -l isolation level ptex color file ptex displacement file DESCRIPTION mtlPtexViewer is a stand-alone application demonstrating shading with color and displacement ptex maps. Multiple controls are available to experiment with the algorithms. KEYBOARD CONTROLS q quit f fit frame - increase decrease tessellation rate SEE ALSO Other examples glViewer , glFVarViewer , glEvalLimit , glStencilViewer , glPtexViewer , glPaintTest , glShareTopology , dxViewer , dxPtexViewer , Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"mtlptexviewer.html\"\n }, {\n- \"title\": \"mtlViewer\",\n- \"text\": \"mtlViewer mtlViewer 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE SYNOPSIS DESCRIPTION KEYBOARD CONTROLS SEE ALSO SYNOPSIS open mtlViewer.app --args -yup -u -a -l refinement level objfiles -catmark -loop -bilinear DESCRIPTION mtlViewer is a stand-alone application that showcases the application of uniform and feature adaptive subdivision schemes to a collection of geometric shapes. Multiple controls are available to experiment with the algorithms. mtlViewer running on macOS mtlViewer running on iOS KEYBOARD CONTROLS q quit f fit frame - increase decrease tessellation rate SEE ALSO Other examples glViewer , glFVarViewer , glEvalLimit , glStencilViewer , glPtexViewer , glPaintTest , glShareTopology , dxViewer , dxPtexViewer , Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n- \"tags\": \"\",\n- \"loc\": \"mtlviewer.html\"\n- }, {\n \"title\": \"Modeling Tips\",\n \"text\": \"Modeling Tips Modeling Tips 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Topology Use Fewer Spans Avoid High Valence vertices Edge-Loop Transitions Practical Topology Primer Triangles and N-Gons Semi-Sharp Creases Use crease sets Additional Resources The following sections describe common techniques specific to modeling with subdivision surfaces. Note The following information contains techniques specific to the Catmull-Clark subdivision scheme. Some elements need to be adjusted for Loop surfaces. Topology Well-constructed subdivision meshes have several important properties They consist primarily of regular faces quads for Catmull-Clark, tris for Loop They contain few extraordinary vertices They efficiently describe the intended shape They are topologically manifold Use Fewer Spans While polygon models need to use a large number of spans to approximate smooth curved surfaces, subdivision models require significantly fewer control points. In most situations, 6 spans are enough to create accurate circular shapes, and 4 is often enough to approximate background objects. Avoid High Valence vertices A high valence vertex is a vertex connected to more than 4 adjacent edges. High valence vertices cause several problems when subdivided The Catmull-Clark scheme can produce wavy surfaces when a revolution vertex is surrounded by triangles see here High valence vertices incur fairly large performance hits Currently, OpenSubdiv has a hard constraint imposed by GPU shaders on the maximum valence of a vertex 27 on current hardware Instead, here are some topological strategies to cap revolution shapes Note that all these cylinders use only quad faces, and all the vertices in the caps have a valence of 4 except the bottom left example Edge-Loop Transitions It is often necessary to vary the density of control vertices over the surface mesh areas around the fingers of a hand require more CVs than the comparatively simpler region around the palm. It is important to handle the topology around these transitions efficiently. One strategy is to use extraordinary vertices, such as this example, using a valence 5 vertex to expand 3 edge loops into 5. Practical Topology Primer Some real-world examples showing how to produce detailed shapes with sparse topology, few extraordinary vertices, and no high-valence revolution poles. Triangles and N-Gons Used sparsely, non-quads can be very useful to gather 3 or more diverging edge-loops. These are often encountered in highly deforming areas with curvature saddle-points ex arm-torso connection. The strategic placement of a pentagon in one of these critical spots ensures that the surface remains smooth, while allowing for complex topology to flow around. Semi-Sharp Creases Semi-sharp creases can be a very powerful tool for hard-surface modeling. Both edges and vertices can be tagged with a sharpness value. Crease sharpness values range from 0 smooth to 10 infinitely sharp It is generally cheaper to use creases whenever possible, instead of adding extra edgesedge-loops. However... Creases introduce extra computation costs that are proportional to the sharpness value. So... Sharpness values above 5 should rarely be needed. The following sections introduce some techniques to best leverage them. Use crease sets Complex hard-surface models giant robots, vehicles, buildings... are likely to tag large number of edges it is extremely useful to organize these edgesedge loops into logical sets with descriptive names. Edges or vertices in a crease set group all share the same sharpness value. If you are modeling with Maya, the CreaseSetEditor implements this type of workflow. Additionally, for debugging purposes, it is often very helpful if the name of a set contains the sharpness value ex topDeck_2. Besides authoring convenience, one of the benefits of having many edge-loops share identical sharpness values is that it enables very powerful performance optimizations within the feature adaptive algorithm faster renders less memory. Additional Resources An excellent short tutorial from the Guerrilla CG Project that illustrates many of the common pitfalls of subdivision modeling, and the strategies to overcome them Ivo Kos, Modelling Technical Director at Pixar Animation Studios, shows some of the modeling techniques he uses when modeling props and architecture sets for feature films. Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"mod_notes.html\"\n }, {\n- \"title\": \"License\",\n- \"text\": \"License License 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Open Source License OpenSubdiv is covered by a modified Apache 2.0 license included below, and is free to use for commercial or non-commercial use. All Pixar patents in the area of subdivision surface algorithms have also been released for public use. We welcome any involvement in the development or extension of this code in fact, we would love it. Please contact us if you are interested. For information on Apache licenses, see httpwww.apache.orglicenses The following license text describes the open source policy adopted by Pixar and is included in every source file. Copyright 2013 Pixar Licensed under the Apache License, Version 2.0 the Apache License with the following modification you may not use this file except in compliance with the Apache License and the following modification to it Section 6. Trademarks. is deleted and replaced with 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor and its affiliates, except as required to comply with Section 4c of the License and to reproduce the content of the NOTICE file. You may obtain a copy of the Apache License at httpwww.apache.orglicensesLICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the Apache License with the above modification is distributed on an AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the Apache License for the specific language governing permissions and limitations under the Apache License. Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n+ \"title\": \"mtlViewer\",\n+ \"text\": \"mtlViewer mtlViewer 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE SYNOPSIS DESCRIPTION KEYBOARD CONTROLS SEE ALSO SYNOPSIS open mtlViewer.app --args -yup -u -a -l refinement level objfiles -catmark -loop -bilinear DESCRIPTION mtlViewer is a stand-alone application that showcases the application of uniform and feature adaptive subdivision schemes to a collection of geometric shapes. Multiple controls are available to experiment with the algorithms. mtlViewer running on macOS mtlViewer running on iOS KEYBOARD CONTROLS q quit f fit frame - increase decrease tessellation rate SEE ALSO Other examples glViewer , glFVarViewer , glEvalLimit , glStencilViewer , glPtexViewer , glPaintTest , glShareTopology , dxViewer , dxPtexViewer , Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n- \"loc\": \"license.html\"\n+ \"loc\": \"mtlviewer.html\"\n }, {\n \"title\": \"Introduction\",\n \"text\": \"Introduction Introduction 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Introduction Why Fast Subdivision Research Heritage Licensing Contributing External Resources Introduction OpenSubdiv is a set of open source libraries that implement high performance subdivision surface subdiv evaluation on massively parallel CPU and GPU architectures. This code path is optimized for drawing deforming surfaces with static topology at interactive framerates. OpenSubdiv is an API ready to be integrated into 3rd party digital content creation tools. It is not an application, nor a tool that can be used directly to create digital assets. Why Fast Subdivision Subdivision surfaces are commonly used for final rendering of character shapes for a smooth and controllable limit surfaces. However, subdivision surfaces in interactive apps are typically drawn as their polygonal control hulls because of performance. The polygonal control hull is an approximation that is offset from the true limit surface. Looking at an approximation in the interactive app makes it difficult to see exact contact, like fingers touching a potion bottle or hands touching a cheek. It also makes it difficult to see poke-throughs in cloth simulation if the skin and cloth are both approximations. This problem is particularly bad when one character is much larger than another and unequal subdiv face sizes cause approximation errors to be magnified. Maya and Pixars proprietary Presto animation system can take 100ms to subdivide a character of 30,000 polygons to the second level of subdivision 500,000 polygons. Being able to perform the same operation in less than 3ms allows the user to interact with the smooth, accurate limit surface at all times. Research The new GPU technology behind OpenSubdiv is the result of a joint research effort between Pixar and Microsoft. Feature Adaptive GPU Rendering of Catmull-Clark Subdivision Surfaces Matthias Niessner, Charles Loop, Mark Meyer, and Tony DeRose ACM Transactions on Graphics, Vol. 31 No. 1 Article 6 January 2012 httpgraphics.pixar.comlibraryGPUSubdivRenderingApaper.pdf Efficient Evaluation of Semi-Smooth Creases in Catmull-Clark Subdivision Surfaces Matthias Niessner, Charles Loop, and Guenter Greiner. Eurographics Proceedings, Cagliari, 2012 httpsniessnerlab.orgpapers20121semismoothniessner2012efficient.pdf Analytic Displacement Mapping using Hardware Tessellation Matthias Niessner, Charles Loop ACM Transactions on Graphics, Vol. 32 No. 3 Article 26 June 2013 httpsniessnerlab.orgpapers20133analyticniessner2013analytic.pdf Heritage This is the fifth-generation subdiv library in use by Pixars proprietary animation system in a lineage that started with code written by Tony DeRose and Tien Truong for Geris Game in 1996. Each generation has been a from-scratch rewrite that has built upon our experience using subdivision surfaces to make animated films. This code is live, so Pixars changes to OpenSubdiv for current and future films will be released as open source at the same time they are rolled out to Pixar animation production. Subdivision for Modeling and Animation Denis Zorin, Peter Schroder Course Notes of SIGGRAPH 1999 httpwww.multires.caltech.edupubssig99notes.pdf Subdivision Surfaces in Character Animation Tony DeRose, Michael Kass, Tien Truong Proceedings of SIGGRAPH 1998 httpgraphics.pixar.comlibraryGeripaper.pdf Recursively generated B-spline surfaces on arbitrary topological meshes Catmull, E. Clark, J. Computer-Aided Design 10 6 1978 Licensing OpenSubdiv is covered by the Apache License, and is free to use for commercial or non-commercial use. This is the same code that Pixar uses internally for animated film production. Our intent is to encourage a geometry standard for subdivision surfaces, by providing consistent i.e. yielding the same limit surface, high performance implementations on a variety of platforms. Why Apache We were looking for a commercial-friendly license that would convey our patents to the end users. This quickly narrowed the field to Microsoft Public License or Apache. Initially we chose MSPL because it handled trademarks better. But at the request of several companies we gave Apache another look, and decided to go with Apache with a very slight modification that simply says you cannot use any contributors trademarks. In other words, you can use OpenSubdiv to make a product, but you cannot use a Luxo Lamp or other character, etc. when marketing your product. License Header Contributing For details on how to contribute to OpenSubdiv, see the page on Contributing External Resources Pixar Research Pixar RD Portal Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"intro.html\"\n }, {\n \"title\": \"HBR Overview\",\n@@ -246,79 +246,79 @@\n \"loc\": \"hedits.html\"\n }, {\n \"title\": \"glViewer\",\n \"text\": \"glViewer glViewer 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE SYNOPSIS DESCRIPTION OPTIONS SEE ALSO SYNOPSIS glViewer -f -yup -u -a -l refinement level -c animation loops objfiles -anim -catmark -loop -bilinear DESCRIPTION glViewer is a stand-alone application that showcases the application of uniform and feature adaptive subdivision schemes to a collection of geometric shapes. Multiple controls are available to experiment with the algorithms. OPTIONS See the description of the common comand line options for the subset of common options supported here. SEE ALSO Other examples glViewer , glFVarViewer , glEvalLimit , glStencilViewer , glPtexViewer , glPaintTest , glShareTopology , dxViewer , dxPtexViewer , Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"glviewer.html\"\n }, {\n- \"title\": \"glPtexViewer\",\n- \"text\": \"glPtexViewer glPtexViewer 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE SYNOPSIS DESCRIPTION OPTIONS KEYBOARD CONTROLS SEE ALSO SYNOPSIS glPtexViewer -f -yup -u -a -l isolation level -c animation loops -e environment map -d HDR diffuse map -s HDR specular map --disp displacement scale --bump bump scale ptex color file ptex displacement file ptex occlusion file ptex specular file objfiles DESCRIPTION glPtexViewer is a stand-alone application that showcases advanced HDR shading with color, displacement, occlusion and specular ptex maps. Multiple controls are available to experiment with the algorithms. OPTIONS See the description of the common comand line options for the subset of common options supported here. -e environment map A low dynamic range spherical environment map used as a background. Ideally, a color-normalized version of the HDR light probe. -d HDR diffuse map An HDR file containing a diffuse environment map typically they are low resolution blurry hemispherical convolutions of the environment light probe. -s environment map An HDR file containing a specular environment map. --disp displacement scale A scalar multiplier for the shader displacement values. --bump displacement scale A scalar multiplier for the shader bump values. ptex color file A ptex file containing RGB channels read as material albedo color. ptex displacement file A single-channel ptex file preferably float precision containing the displacement values. ptex occlusion file A single-channel ptex file preferably 8 bits precision containing a pre-computed ambient occlusion signal. ptex specular file A single-channel ptex file preferably 8 bits precision applied to modulate the specular reflectance of the material KEYBOARD CONTROLS q quit esc hide GUI x save screenshot f fit frame - increase decrease tessellation rate r reload and re - compile the shader files e draw normals SEE ALSO Other examples glViewer , glFVarViewer , glEvalLimit , glStencilViewer , glPtexViewer , glPaintTest , glShareTopology , dxViewer , dxPtexViewer , Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n- \"tags\": \"\",\n- \"loc\": \"glptexviewer.html\"\n- }, {\n \"title\": \"glStencilViewer\",\n \"text\": \"glStencilViewer glStencilViewer 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE SYNOPSIS DESCRIPTION OPTIONS SEE ALSO SYNOPSIS glStencilViewer -f -yup -u -a -l refinement level objfiles -catmark -loop -bilinear DESCRIPTION glStencilViewer is a stand-alone application that showcases the application of pre-computed stencil tables to a collection of geometric test shapes. Multiple controls are available to experiment with the algorithms. OPTIONS See the description of the common comand line options for the subset of common options supported here. SEE ALSO Other examples glViewer , glFVarViewer , glEvalLimit , glStencilViewer , glPtexViewer , glPaintTest , glShareTopology , dxViewer , dxPtexViewer , Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"glstencilviewer.html\"\n }, {\n \"title\": \"glShareTopology\",\n \"text\": \"glShareTopology glShareTopology 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE SYNOPSIS DESCRIPTION OPTIONS SEE ALSO SYNOPSIS glShareTopology -u -a -l refinement level DESCRIPTION glShareTopology is a stand-alone application that showcases the implementation of topology instancing across Compute contexts. Multiple controls are available to experiment with the algorithms. OPTIONS See the description of the common comand line options for the subset of common options supported here. SEE ALSO Other examples glViewer , glFVarViewer , glEvalLimit , glStencilViewer , glPtexViewer , glPaintTest , glShareTopology , dxViewer , dxPtexViewer , Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"glsharetopology.html\"\n }, {\n+ \"title\": \"glPtexViewer\",\n+ \"text\": \"glPtexViewer glPtexViewer 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE SYNOPSIS DESCRIPTION OPTIONS KEYBOARD CONTROLS SEE ALSO SYNOPSIS glPtexViewer -f -yup -u -a -l isolation level -c animation loops -e environment map -d HDR diffuse map -s HDR specular map --disp displacement scale --bump bump scale ptex color file ptex displacement file ptex occlusion file ptex specular file objfiles DESCRIPTION glPtexViewer is a stand-alone application that showcases advanced HDR shading with color, displacement, occlusion and specular ptex maps. Multiple controls are available to experiment with the algorithms. OPTIONS See the description of the common comand line options for the subset of common options supported here. -e environment map A low dynamic range spherical environment map used as a background. Ideally, a color-normalized version of the HDR light probe. -d HDR diffuse map An HDR file containing a diffuse environment map typically they are low resolution blurry hemispherical convolutions of the environment light probe. -s environment map An HDR file containing a specular environment map. --disp displacement scale A scalar multiplier for the shader displacement values. --bump displacement scale A scalar multiplier for the shader bump values. ptex color file A ptex file containing RGB channels read as material albedo color. ptex displacement file A single-channel ptex file preferably float precision containing the displacement values. ptex occlusion file A single-channel ptex file preferably 8 bits precision containing a pre-computed ambient occlusion signal. ptex specular file A single-channel ptex file preferably 8 bits precision applied to modulate the specular reflectance of the material KEYBOARD CONTROLS q quit esc hide GUI x save screenshot f fit frame - increase decrease tessellation rate r reload and re - compile the shader files e draw normals SEE ALSO Other examples glViewer , glFVarViewer , glEvalLimit , glStencilViewer , glPtexViewer , glPaintTest , glShareTopology , dxViewer , dxPtexViewer , Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n+ \"tags\": \"\",\n+ \"loc\": \"glptexviewer.html\"\n+ }, {\n \"title\": \"glPaintTest\",\n \"text\": \"glPaintTest glPaintTest 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE SYNOPSIS DESCRIPTION OPTIONS KEYBOARD CONTROLS SEE ALSO SYNOPSIS glPaintTest -f -yup -l adaptive refinement level objfiles -catmark -loop DESCRIPTION glPaintTest is a small stand-alone application showing the potential of using GPU limit tessellation for painting and sculpting applications. OPTIONS See the description of the common comand line options for the subset of common options supported here. KEYBOARD CONTROLS c use texture as color d use texture as displacement SEE ALSO Other examples glViewer , glFVarViewer , glEvalLimit , glStencilViewer , glPtexViewer , glPaintTest , glShareTopology , dxViewer , dxPtexViewer , Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"glpainttest.html\"\n }, {\n+ \"title\": \"glFVarViewer\",\n+ \"text\": \"glFVarViewer glFVarViewer 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE SYNOPSIS DESCRIPTION OPTIONS SEE ALSO SYNOPSIS glFVarViewer -f -u -a -l refinement level -c animation loops objfiles -catmark -loop -bilinear DESCRIPTION glFVarViewer is a stand-alone application that allows the inspection of face-varying data interpolation. The window displays 2 views left side regular 3D view of the model, with a procedural u,v texture right side a 2D view of the face-varying u,v pair The HUD allows interactive manipulation of the various face-varying boundary interpolation rules and tags. OPTIONS See the description of the common comand line options for the subset of common options supported here. SEE ALSO Other examples glViewer , glFVarViewer , glEvalLimit , glStencilViewer , glPtexViewer , glPaintTest , glShareTopology , dxViewer , dxPtexViewer , Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n+ \"tags\": \"\",\n+ \"loc\": \"glfvarviewer.html\"\n+ }, {\n \"title\": \"glEvalLimit\",\n \"text\": \"glEvalLimit glEvalLimit 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE SYNOPSIS DESCRIPTION OPTIONS SEE ALSO SYNOPSIS glEvalLimit -f -yup -u -a -l refinement level objfiles -catmark -loop -bilinear DESCRIPTION glEvalLimit is a stand-alone application that showcases the limit surface Eval module. On the given shape, random samples are generated in local s,t space. Vertex, varying and face-varying data is then computed on the surface limit and displayed as colors. In order to emphasize the dynamic nature of the EvalLimit API, where the locations can be arbitrarily updated before each evaluation, the glEvalLimit example treats each sample as a ST particle. ST Particles are a simplified parametric-space particle dynamics simulation each particle is assigned a location on the subdivision surface limit that is composed of a unique ptex face index, with a local s,t parametric pair. The system also generates an array of parametric velocities ds, dt for each particle. An Update function then applies the velocities to the locations and moves the points along the parametric space. Face boundaries are managed using a ptex adjacency table obtained from the FarTopologyRefiner. Every time a particle moves outside of the 0.0f, 1.0f parametric range, a warp function moves it to the neighboring face, or bounces it, if the edge happens to be a boundary. Note currently the adjacency code does not handle diagonal crossings, nor crossings between quad and non-quad faces. Multiple controls are available to experiment with the algorithms. OPTIONS See the description of the common comand line options for the subset of common options supported here. SEE ALSO Other examples glViewer , glFVarViewer , glEvalLimit , glStencilViewer , glPtexViewer , glPaintTest , glShareTopology , dxViewer , dxPtexViewer , Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"glevallimit.html\"\n }, {\n- \"title\": \"glFVarViewer\",\n- \"text\": \"glFVarViewer glFVarViewer 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE SYNOPSIS DESCRIPTION OPTIONS SEE ALSO SYNOPSIS glFVarViewer -f -u -a -l refinement level -c animation loops objfiles -catmark -loop -bilinear DESCRIPTION glFVarViewer is a stand-alone application that allows the inspection of face-varying data interpolation. The window displays 2 views left side regular 3D view of the model, with a procedural u,v texture right side a 2D view of the face-varying u,v pair The HUD allows interactive manipulation of the various face-varying boundary interpolation rules and tags. OPTIONS See the description of the common comand line options for the subset of common options supported here. SEE ALSO Other examples glViewer , glFVarViewer , glEvalLimit , glStencilViewer , glPtexViewer , glPaintTest , glShareTopology , dxViewer , dxPtexViewer , Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n+ \"title\": \"FAR Overview\",\n+ \"text\": \"FAR Overview FAR Overview 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Feature Adaptive Representation Far Topology Refinement Primvar Refinement FarTopologyRefiner FarTopologyRefinerFactory FarPrimvarRefiner FarPatchTable Patch Arrays Patch Types Patch Parameterization Single-Crease Patches Local Points Legacy Gregory Patches FarStencilTable Advantages Principles Cascading Stencils Limit Stencils Sample Location On Extraordinary Faces Code example Feature Adaptive Representation Far Far is the primary API layer for processing client-supplied mesh data into subdivided surfaces. The Far interface may be used directly and also may be used to prepare mesh data for further processing by Osd . The two main aspects of the subdivision process are Topology Refinement and Primvar Refinement . Topology Refinement Topology refinement is the process of splitting the mesh topology according to the specified subdivison rules to generate new topological vertices, edges, and faces. This process is purely topological and does not depend on the speciific values of any primvar data point positions, etc. Topology refinement can be either uniform or adaptive, where extraordinary features are automatically isolated see feature adaptive subdivision . The Far topology classes present a public interface for the refinement functionality provided in Vtr , The main classes in Far related to topology refinement are TopologyRefiner A class encapsulating mesh refinement. TopologyLevel A class representing one level of refinement within a TopologyRefiner. TopologyRefinerFactoryMESH A factory class template specialized in terms of the applications mesh representation used to construct TopologyRefiner instances. Primvar Refinement Primvar refinement is the process of computing values for primvar data points, colors, normals, texture coordinates, etc by applying weights determined by the specified subdivision rules. There are many advantages gained by distinguishing between topology refinement and primvar interpolation including the ability to apply a single static topological refinement to multiple primvar instances or to different animated primvar time samples. Far supports methods to refine primvar data at the locations of topological vertices and at arbitrary locations on the subdivision limit surface. The main classes in Far related to primvar refinement are PrimvarRefiner A class implementing refinement of primvar data at the locations of topological vertices. PatchTable A representation of the refined surface topology that can be used for efficient evaluation of primvar data at arbitrary locations. StencilTable A representation of refinement weights suitable for efficient parallel processing of primvar refinement. LimitStencilTable A representation of refinement weights suitable for efficient parallel processing of primvar refinement at arbitrary limit surface locations. FarTopologyRefiner TopologyRefiner is the building block for many other useful classes in Far . It performs refinement of an arbitrary mesh and provides access to the refined mesh topology. It can be used for primvar refinement directly using PrimvarRefiner or indirectly by being used to create a stencil table , or a patch table , etc. TopologyRefiner provides the public refinement methods RefineUniform and RefineAdapative which perform refinement operations using Vtr. TopologyRefiner provides access to the refined topology via TopologyLevel instances. FarTopologyRefinerFactory Consistent with other classes in Far, instances of TopologyRefiner are created by a factory class -- in this case FarTopologyRefinerFactory. Here we outline several approaches for converting mesh topology into the required FarTopologyRefiner. Additional documentation is provided with the FarTopologyRefinerFactoryMESH class template used by all, and each has a concrete example provided in one of the tutorials or in the Far code itself. There are three ways to create TopologyRefiners use the existing TopologyRefinerFactoryTopologyDescriptor with a populated instance of TopologyDescriptor specialize TopologyRefinerFactoryclass MESH for more efficient conversion, using only face-vertex information fully specialize TopologyRefinerFactorclass MESH for most control over conversion Use the FarTopologyDescriptor FarTopologyDescriptor is a simple struct that can be initialized to refer to raw mesh topology information -- primarily a face-vertex list -- and then passed to a provided factory class to create a TopologyRefiner from each. Topologically, the minimal requirement consists of the number of vertices and faces of the mesh an array containing the number of vertices per face an array containing the vertices assigned to each face These last two define one of the six topological relations that are needed internally by Vtr, but this one relation is sufficient to construct the rest. Additional members are available to assign sharpness values per edge andor vertex, hole tags to faces, or to define multiple sets channels of face-varying data. Almost all of the Far tutorials i.e. tutorialsfartutorial_ illustrate use of the TopologyDescriptor and its factory for creating TopologyRefiners, i.e. TopologyRefinerFactoryTopologyDescriptor. For situations when users have raw mesh data and have not yet constructed a boundary representation of their own, it is hoped that this will suffice. Options have even been provided to indicate that raw topology information has been defined in a left-hand winding order and the factory will handle the conversion to right-hand counter-clockwise winding on-the-fly to avoid unnecessary data duplication. Custom Factory for Face Vertices If the nature of the TopologyDescriptors data expectations is not helpful, and so conversion to large temporary arrays would be necessary to properly make use of it, it may be worth writing a custom factory. Specialization of TopologyRefinerFactoryclass MESH should be done with care as the goal here is to maximize the performance of the conversion and so minimize overhead due to runtime validation. The template provides the high-level construction of the required topology vectors of the underlying Vtr. There are two ways to write such a factory provide only the face-vertex information for topology and let the factory infer all edges and other relationships, or provide the complete edge list and all other topological relationships directly. The latter is considerably more involved and described in a following section. The definition of TopologyRefinerFactoryTopologyDescriptor provides a clear and complete example of constructing a TopologyRefiner with minimal topology information, i.e. the face-vertex list. The class template TopologyRefinerFactoryMESH documents the needs here and the TopologyDescriptor instantiation and specialization should illustrate that. Custom Factory for Direct Conversion Fully specializing a factory for direct conversion is needed only for those requiring ultimate control and is not generally recommended. It is recommended that one of the previous two methods initially be used to convert your mesh topology into a TopologyRefiner. If the conversion performance is critical, or significant enough to warrant improvement, then it is worth writing a factory for full topological conversion. Writing a custom factory requires the specificationspecialization of two methods with the following purpose specify the sizes of topological data so that vectors can be pre-allocated assign the topological data to the newly allocated vectors As noted above, the assumption here is that the clients boundary-rep knows best how to retrieve the data that we require most efficiently. After the factory class gathers sizing information and allocates appropriate memory, the factory provides the client with locations of the appropriate tables to be populated using the same Array classes and interface used to access the tables. The client is expected to load a complete topological description along with additional optional data, i.e. the six topological relations required by Vtr, oriented when manifold sharpness values for edges andor vertices optional additional tags related to the components, e.g. holes optional values-per-face for face-varying channels optional This approach requires dealing directly with edges, unlike the other two. In order to convert edges into a TopologyRefiners representation, the edges need to be expressed as a collection of known size N -- each of which is referred to directly by indices 0,N-1. This can be awkward for representations such as half-edge or quad-edge that do not treat the instance of an edge uniquely. Particular care is also necessary when representing non-manifold features. The previous two approaches will construct non-manifold features as required from the face-vertex list -- dealing with degenerate edges and other non-manifold features as encountered. When directly translating full topology it is necessary to tag non-manifold features, and also to ensure that certain edge relationships are satisfied in their presence. More details are available with the assembly methods of the factory class template. While there is plenty of opportunity for user error here, that is no different from any other conversion process. Given that Far controls the construction process through the Factory class, we do have ample opportunity to insert runtime validation, and to vary that level of validation at any time on an instance of the Factory. The factory does provide run-time validation on the topology constructed that can be used for debugging purposes. A common base class has been created for the factory class, i.e. template class MESH class TopologyRefinerFactory public TopologyRefinerFactoryBase both to provide common code independent of MESH and also potentially to protect core code from unwanted specialization. FarPrimvarRefiner PrimvarRefiner supports refinement of arbitrary primvar data at the locations of topological vertices. A PrimvarRefiner accesses topology data directly from a TopologyRefiner. Different methods are provided to support three different classes of primvar interpolation. These methods may be used to refine primvar data to a specified refinement level. Interpolate... Interpolate using vertex weights InterpolateVarying... Interpolate using linear weights InterpolateFaceVarying... Interpolate using face-varying weights Additional methods allow primvar data to be interpolated to the final limit surface including the calculation of first derivative tangents. Limitdst Interpolate to the limit surface using vertex weights Limitdst, dstTan1, dstTan2 Interpolate including first derivatives to the limit surface using vertex weights LimitFaceVarying... Interpolate to the limit surface using face-varying weights PrimarRefiner provides a straightforward interface for refining primvar data, but depending on the application use case, it can be more efficient to create and use a StencilTable , or PatchTable , to refine primvar data. FarPatchTable PatchTable is the collection of patches derived from the refined faces of a particular mesh topology. This collection is created using FarPatchTableFactory from an instance of FarTopologyRefiner after refinement has been applied. Patch Arrays The PatchTable is organized into patch arrays. All patches in each array have the same type except for face-varying patch arrays which may have a mix of regular and irregular patch types. The PatchDescriptor provides the fundamental description of a patch, including the number of control points per patch as well as the basis for patch evaluation. Each patch in the array is associated with a PatchParam which specifies additional information about the individual patch. Patch Types The following are the different patch types that can be represented in the PatchTable Patch Type CVs Description NON_PATCH na Undefined patch type POINTS 1 Points useful for cage drawing LINES 2 Lines useful for cage drawing QUADS 4 Bi-linear quadrilaterals TRIANGLES 3 Linear triangles LOOP 12 Quartic triangular Box-spline patches REGULAR 16 Bi-cubic B-spline patches GREGORY 4 Legacy Gregory patches GREGORY_BOUNDARY 4 Legacy Gregory Boundary patches GREGORY_BASIS 20 Bi-cubic quadrilateral Gregory patches GREGORY_TRIANGLE 18 Quartic triangular Gregory patches The type of a patch dictates the number of control vertices expected in the table as well as the method used to evaluate values. Patch Parameterization Here we describe the encoding of the patch parameterization for quadrilateral patches. The encoding for triangular patches is similar, please see the API documentation of FarPatchParam for details. Each patch represents a specific portion of the parametric space of the coarse topological face identified by the PatchParam FaceId. As topological refinement progresses through successive levels, each resulting patch corresponds to a smaller and smaller subdomain of the face. The PatchParam UV origin describes the mapping from the uv domain of the patch to the uv subdomain of the topological face. We encode this uv origin using log2 integer values for compactness and efficiency. It is important to note that this uv parameterization is the intrinsic parameterization within a given patch or coarse face and is distinct from any client specified face-varying channel data. Patches which result from irregular coarse faces non-quad faces in the Catmark scheme are offset by the one additional level needed to quadrangulate the irregular face. It is the indices of these offset faces that are stored in the PatchParam and used in other classes such as the FarPatchMap. These offset indices can be identified from the coarse face using the FarPtexIndices class when needed. A patch along an interpolated boundary edge is supported by an incomplete sets of control vertices. For consistency, patches in the PatchTable always have a full set of control vertex indices and the PatchParam Boundary bitmask identifies which control vertices are incomplete the incomplete control vertex indices are assigned values which duplicate the first valid index. Each bit in the boundary bitmask corresponds to one edge of the patch starting from the edge from the first vertex and continuing around the patch. With feature adaptive refinement, regular B-spline basis patches along interpolated boundaries will fall into one of the eight cases four boundary and four corner illustrated below Transition edges occur during feature adaptive refinement where a patch at one level of refinement is adjacent to pairs of patches at the next level of refinement. These T-junctions do not pose a problem when evaluating primvar data on patches, but they must be taken into consideration when tessellating patches e.g. while drawing in order to avoid cracks. The PatchParam Transition bitmask identifies the transition edges of a patch. Each bit in the bitmask corresponds to one edge of the patch just like the encoding of boundary edges. After refining an arbitrary mesh, any of the 16 possible transition edge configurations might occur. The method of handling transition edges is delegated to patch drawing code. Single-Crease Patches Using single-crease patches allows a mesh with creases to be represented with many fewer patches than would be needed otherwise. A single-crease patch is a variation of a regular BSpline patch with one additional crease sharpness parameter. Release Notes 3.x Evaluation of single-crease patches is currently only implemented for OSD patch drawing, but we expect to implement support in all of the evaluation code paths for future releases. Local Points The control vertices represented by a PatchTable are primarily refined points, i.e. points which result from applying the subdivision scheme uniformly or adaptively to the points of the coarse mesh. However, the final patches generated from irregular faces, e.g. patches incident on an extraordinary vertex might have a representation which requires additional local points. Legacy Gregory Patches Using Gregory patches to approximate the surface at the final patches generated from irregular faces is an alternative representation which does not require any additional local points to be computed. Instead, when Legacy Gregory patches are used, the PatchTable must also have an alternative representation of the mesh topology encoded as a vertex valence table and a quad offsets table. FarStencilTable The base container for stencil data is the StencilTable class. As with most other Far entities, it has an associated StencilTableFactory that requires a TopologyRefiner Advantages Stencils are used to factorize the interpolation calculations that subdivision schema apply to vertices of smooth surfaces. If the topology being subdivided remains constant, factorizing the subdivision weights into stencils during a pre-compute pass yields substantial amortizations at run-time when re-posing the control cage. Factorizing the subdivision weights also allows to express each subdivided vertex as a weighted sum of vertices from the control cage. This step effectively removes any data inter-dependency between subdivided vertices the computations of subdivision interpolation can be applied to each vertex in parallel without any barriers or constraint. The Osd classes leverage these properties by exploiting CPU and GPU parallelism. Principles Iterative subdivision algorithms converge towards the limit surface by successively refining the vertices of the coarse control cage. Each successive iteration interpolates the new vertices by applying polynomial weights to a basis of supporting vertices . The interpolation calculations for any given vertex can be broken down into sequences of multiply-add operations applied to the supporting vertices. Stencil table encodes a factorization of these weighted sums each stencils is created by combining the list of control vertices from the 1-ring. With iterative subdivision, each refinement step is dependent upon the previous subdivision step being completed, and a substantial number of steps may be required in order approximate the limit each subdivision step incurs an O4 n growing amount of computations. Instead, once the weights of the contributing coarse control vertices for a given refined vertex have been factorized, it is possible to apply the stencil and directly obtain the interpolated vertex data without having to process the data for the intermediate refinement levels. Cascading Stencils Client-code can control the amount of factorization of the stencils the tables can be generated with contributions all the way from a basis of coarse vertices, or reduced only to contributions from vertices from the previous level of refinement. The latter mode allows client-code to access and insert modifications to the vertex data at set refinement levels -- creating what are often referred to as hierarchical edits . Once the edits have been applied by the client-code, another set of stencils can be used to smooth the vertex data to a higher level of refinement. See implementation details, see the Far cascading stencil tutorial Limit Stencils Stencil tables can be trivially extended from discrete subdivided vertices to arbitrary locations on the limit surface. Aside from extraordinary points, every location on the limit surface can be expressed as a closed-form weighted average of a set of coarse control vertices from the 1-ring surrounding the face. The weight accumulation process is similar the control cage is adaptively subdivided around extraordinary locations. A stencil is then generated for each limit location simply by factorizing the bi-cubic Bspline patch weights over those of the contributing basis of control-vertices. The use of bi-cubic patches also allows the accumulation of analytical derivatives, so limit stencils carry a set of weights for tangent vectors. Once the stencil table has been generated, limit stencils are the most direct and efficient method of evaluation of specific locations on the limit of a subdivision surface, starting from the coarse vertices of the control cage. Also just as discrete stencils, limit stencils that are factorized from coarse control vertices do not have inter-dependencies and can be evaluated in parallel. For implementation details, see the glStencilViewer code example. Sample Location On Extraordinary Faces Each stencil is associated with a singular parametric location on the coarse mesh. The parametric location is defined as face location and local 0.0 - 1.0 u,v triplet In the case of face that are not quads, a parametric sub-face quadrant needs to be identified. This can be done either explicitly or implicitly by using the unique ptex face indices for instance. Code example When the control vertices controlPoints move in space, the limit locations can be very efficiently recomputed simply by applying the blending weights to the series of coarse control vertices class StencilType public void Clear memset x , 0 , sizeof StencilType void AddWithWeight StencilType const cv , float weight x cv . x weight y cv . y weight z cv . z weight float x , y , z std vector StencilType controlPoints , points , utan , vtan Update points by applying stencils controlStencils . UpdateValues StencilType controlPoints 0 , points 0 Update tangents by applying derivative stencils controlStencils . UpdateDerivs StencilType controlPoints 0 , utan 0 , vtan 0 Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n- \"loc\": \"glfvarviewer.html\"\n+ \"loc\": \"far_overview.html\"\n }, {\n \"title\": \"Getting Started\",\n \"text\": \"Getting Started Getting Started 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Downloading the code Branches Git Flow Checking out branches API Versions Making Changes Code Overview Downloading the code The code is hosted on a Github public repository. Download and setup information for Git tools can be found here . You can access the OpenSubdiv Git repository at httpsgithub.comPixarAnimationStudiosOpenSubdiv From there, there are several ways of downloading the OpenSubdiv source code. Zip archive downloaded from here Using a GUI client you can find a list here Please refer to the documentation of your preferred application. From the GitShell, Cygwin or the CLI assuming that you have the Git tools installed, you can clone the OpenSubdiv repository directly with the following command git clone https github.comPixarAnimationStudiosOpenSubdiv.git These methods only pull static archives, which is are not under the version control system and therefore cannot pull updates or push changes back. If you intend on contributing features or fixes to the main trunk of the code, you will need to create a free Github account and clone a fork of the OpenSubdiv repository. Submissions to the main code trunk can be sent using Gits pull-request mechanisms. Please note that we are using the git flow tools so all changes should be made to our dev branch. Before we can accept submissions however, we will need a signed Contributors License Agreement . Branches Git Flow Since version 1.1.0, OpenSubdiv has adopted the Git Flow branching model . Our active development branch is named dev all new features and bug fixes should be submitted to this branch. The changes submitted to the dev branch are periodically patched to the release branch as new versions are released. Checking out branches The Git Flow tools are not a requisite for working with the OpenSubdiv code base, but new work should always be performed in the dev branch, or dedicated feature-branches. By default, a cloned repository will be pointing to the release branch. You can switch to the dev branch using the following command git checkout dev You can check that the branch has now been switched simply with git branch Which should return dev release API Versions OpenSubdiv maintains an internal API versioning system. The version number can be read from the file .opensubdivversion.h . Following the Git-Flow pattern, our releases are indexed using Gits tagging system. List of the existing tags git tag -- list Checking out version 1.2.0 git checkout v1_2_0 Making Changes Direct push access to the OpenSubdiv repository is currently limited to a small internal development team. External code should be submitted by sending Git pull-requests from forks of our dev branch. Code Overview The OpenSubdiv code base contains the following main areas Directory Contents .opensubdiv The main subdivision APIs Sdc, Vtr, Far and Osd. .examples A small collection of standalone applications that illustrate how to deploy the various features and optimizations of the OpenSubdiv APIs. The GL-based examples rely on the cross-platform GLFW API for interactive window management, while the DirectX ones are OS-native. .tutorials Tutorials showing how to manipulate the APIs of OpenSubdiv. .documentation The reStructuredText source files along with python scripts that generate the HTML documentation site. .regression Standalone regression tests and baseline data to help maintain the integrity of our APIs. If GPU SDKs are detected, some tests will attempt to run computations on those GPUs. Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"getting_started.html\"\n }, {\n \"title\": \"dxPtexViewer\",\n \"text\": \"dxPtexViewer dxPtexViewer 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE SYNOPSIS DESCRIPTION OPTIONS KEYBOARD CONTROLS SEE ALSO SYNOPSIS dxPtexViewer -f -yup -u -a -l isolation level -c animation loops -e environment map -d HDR diffuse map -s HDR specular map --disp displacement scale ptex color file ptex displacement file ptex occlusion file ptex specular file objfiles DESCRIPTION dxPtexViewer is a stand-alone application that showcases advanced HDR shading with color, displacement, occlusion and specular ptex maps. Multiple controls are available to experiment with the algorithms. OPTIONS See the description of the common comand line options for the subset of common options supported here. -y Swap Z-up geometry to Y-UP. -e environment map A low dynamic range spherical environment map used as a background. Ideally, a color-normalized version of the HDR light probe. -d HDR diffuse map An HDR file containing a diffuse environment map typically they are low resolution blurry hemispherical convolutions of the environment light probe. -s environment map An HDR file containing a specular environment map. --disp displacement scale A scalar multiplier for the shader displacement values. ptex color file A ptex file containing RGB channels read as material albedo color. ptex displacement file A single-channel ptex file preferrably float precision containing the displacement values. ptex occlusion file A single-channel ptex file preferrably 8 bits precision containing a pre-computed ambient occlusion signal. ptex specular file A single-channel ptex file preferrably 8 bits precision applied to modulate the specular reflectance of the material objfiles A sequence of obj files used as an animation loop the topology has to match the data contained in all the ptex files KEYBOARD CONTROLS q quit esc hide GUI f fit frame - increase decrese tessellation rate SEE ALSO Other examples glViewer , glFVarViewer , glEvalLimit , glStencilViewer , glPtexViewer , glPaintTest , glShareTopology , dxViewer , dxPtexViewer , Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"dxptexviewer.html\"\n }, {\n- \"title\": \"FAR Overview\",\n- \"text\": \"FAR Overview FAR Overview 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Feature Adaptive Representation Far Topology Refinement Primvar Refinement FarTopologyRefiner FarTopologyRefinerFactory FarPrimvarRefiner FarPatchTable Patch Arrays Patch Types Patch Parameterization Single-Crease Patches Local Points Legacy Gregory Patches FarStencilTable Advantages Principles Cascading Stencils Limit Stencils Sample Location On Extraordinary Faces Code example Feature Adaptive Representation Far Far is the primary API layer for processing client-supplied mesh data into subdivided surfaces. The Far interface may be used directly and also may be used to prepare mesh data for further processing by Osd . The two main aspects of the subdivision process are Topology Refinement and Primvar Refinement . Topology Refinement Topology refinement is the process of splitting the mesh topology according to the specified subdivison rules to generate new topological vertices, edges, and faces. This process is purely topological and does not depend on the speciific values of any primvar data point positions, etc. Topology refinement can be either uniform or adaptive, where extraordinary features are automatically isolated see feature adaptive subdivision . The Far topology classes present a public interface for the refinement functionality provided in Vtr , The main classes in Far related to topology refinement are TopologyRefiner A class encapsulating mesh refinement. TopologyLevel A class representing one level of refinement within a TopologyRefiner. TopologyRefinerFactoryMESH A factory class template specialized in terms of the applications mesh representation used to construct TopologyRefiner instances. Primvar Refinement Primvar refinement is the process of computing values for primvar data points, colors, normals, texture coordinates, etc by applying weights determined by the specified subdivision rules. There are many advantages gained by distinguishing between topology refinement and primvar interpolation including the ability to apply a single static topological refinement to multiple primvar instances or to different animated primvar time samples. Far supports methods to refine primvar data at the locations of topological vertices and at arbitrary locations on the subdivision limit surface. The main classes in Far related to primvar refinement are PrimvarRefiner A class implementing refinement of primvar data at the locations of topological vertices. PatchTable A representation of the refined surface topology that can be used for efficient evaluation of primvar data at arbitrary locations. StencilTable A representation of refinement weights suitable for efficient parallel processing of primvar refinement. LimitStencilTable A representation of refinement weights suitable for efficient parallel processing of primvar refinement at arbitrary limit surface locations. FarTopologyRefiner TopologyRefiner is the building block for many other useful classes in Far . It performs refinement of an arbitrary mesh and provides access to the refined mesh topology. It can be used for primvar refinement directly using PrimvarRefiner or indirectly by being used to create a stencil table , or a patch table , etc. TopologyRefiner provides the public refinement methods RefineUniform and RefineAdapative which perform refinement operations using Vtr. TopologyRefiner provides access to the refined topology via TopologyLevel instances. FarTopologyRefinerFactory Consistent with other classes in Far, instances of TopologyRefiner are created by a factory class -- in this case FarTopologyRefinerFactory. Here we outline several approaches for converting mesh topology into the required FarTopologyRefiner. Additional documentation is provided with the FarTopologyRefinerFactoryMESH class template used by all, and each has a concrete example provided in one of the tutorials or in the Far code itself. There are three ways to create TopologyRefiners use the existing TopologyRefinerFactoryTopologyDescriptor with a populated instance of TopologyDescriptor specialize TopologyRefinerFactoryclass MESH for more efficient conversion, using only face-vertex information fully specialize TopologyRefinerFactorclass MESH for most control over conversion Use the FarTopologyDescriptor FarTopologyDescriptor is a simple struct that can be initialized to refer to raw mesh topology information -- primarily a face-vertex list -- and then passed to a provided factory class to create a TopologyRefiner from each. Topologically, the minimal requirement consists of the number of vertices and faces of the mesh an array containing the number of vertices per face an array containing the vertices assigned to each face These last two define one of the six topological relations that are needed internally by Vtr, but this one relation is sufficient to construct the rest. Additional members are available to assign sharpness values per edge andor vertex, hole tags to faces, or to define multiple sets channels of face-varying data. Almost all of the Far tutorials i.e. tutorialsfartutorial_ illustrate use of the TopologyDescriptor and its factory for creating TopologyRefiners, i.e. TopologyRefinerFactoryTopologyDescriptor. For situations when users have raw mesh data and have not yet constructed a boundary representation of their own, it is hoped that this will suffice. Options have even been provided to indicate that raw topology information has been defined in a left-hand winding order and the factory will handle the conversion to right-hand counter-clockwise winding on-the-fly to avoid unnecessary data duplication. Custom Factory for Face Vertices If the nature of the TopologyDescriptors data expectations is not helpful, and so conversion to large temporary arrays would be necessary to properly make use of it, it may be worth writing a custom factory. Specialization of TopologyRefinerFactoryclass MESH should be done with care as the goal here is to maximize the performance of the conversion and so minimize overhead due to runtime validation. The template provides the high-level construction of the required topology vectors of the underlying Vtr. There are two ways to write such a factory provide only the face-vertex information for topology and let the factory infer all edges and other relationships, or provide the complete edge list and all other topological relationships directly. The latter is considerably more involved and described in a following section. The definition of TopologyRefinerFactoryTopologyDescriptor provides a clear and complete example of constructing a TopologyRefiner with minimal topology information, i.e. the face-vertex list. The class template TopologyRefinerFactoryMESH documents the needs here and the TopologyDescriptor instantiation and specialization should illustrate that. Custom Factory for Direct Conversion Fully specializing a factory for direct conversion is needed only for those requiring ultimate control and is not generally recommended. It is recommended that one of the previous two methods initially be used to convert your mesh topology into a TopologyRefiner. If the conversion performance is critical, or significant enough to warrant improvement, then it is worth writing a factory for full topological conversion. Writing a custom factory requires the specificationspecialization of two methods with the following purpose specify the sizes of topological data so that vectors can be pre-allocated assign the topological data to the newly allocated vectors As noted above, the assumption here is that the clients boundary-rep knows best how to retrieve the data that we require most efficiently. After the factory class gathers sizing information and allocates appropriate memory, the factory provides the client with locations of the appropriate tables to be populated using the same Array classes and interface used to access the tables. The client is expected to load a complete topological description along with additional optional data, i.e. the six topological relations required by Vtr, oriented when manifold sharpness values for edges andor vertices optional additional tags related to the components, e.g. holes optional values-per-face for face-varying channels optional This approach requires dealing directly with edges, unlike the other two. In order to convert edges into a TopologyRefiners representation, the edges need to be expressed as a collection of known size N -- each of which is referred to directly by indices 0,N-1. This can be awkward for representations such as half-edge or quad-edge that do not treat the instance of an edge uniquely. Particular care is also necessary when representing non-manifold features. The previous two approaches will construct non-manifold features as required from the face-vertex list -- dealing with degenerate edges and other non-manifold features as encountered. When directly translating full topology it is necessary to tag non-manifold features, and also to ensure that certain edge relationships are satisfied in their presence. More details are available with the assembly methods of the factory class template. While there is plenty of opportunity for user error here, that is no different from any other conversion process. Given that Far controls the construction process through the Factory class, we do have ample opportunity to insert runtime validation, and to vary that level of validation at any time on an instance of the Factory. The factory does provide run-time validation on the topology constructed that can be used for debugging purposes. A common base class has been created for the factory class, i.e. template class MESH class TopologyRefinerFactory public TopologyRefinerFactoryBase both to provide common code independent of MESH and also potentially to protect core code from unwanted specialization. FarPrimvarRefiner PrimvarRefiner supports refinement of arbitrary primvar data at the locations of topological vertices. A PrimvarRefiner accesses topology data directly from a TopologyRefiner. Different methods are provided to support three different classes of primvar interpolation. These methods may be used to refine primvar data to a specified refinement level. Interpolate... Interpolate using vertex weights InterpolateVarying... Interpolate using linear weights InterpolateFaceVarying... Interpolate using face-varying weights Additional methods allow primvar data to be interpolated to the final limit surface including the calculation of first derivative tangents. Limitdst Interpolate to the limit surface using vertex weights Limitdst, dstTan1, dstTan2 Interpolate including first derivatives to the limit surface using vertex weights LimitFaceVarying... Interpolate to the limit surface using face-varying weights PrimarRefiner provides a straightforward interface for refining primvar data, but depending on the application use case, it can be more efficient to create and use a StencilTable , or PatchTable , to refine primvar data. FarPatchTable PatchTable is the collection of patches derived from the refined faces of a particular mesh topology. This collection is created using FarPatchTableFactory from an instance of FarTopologyRefiner after refinement has been applied. Patch Arrays The PatchTable is organized into patch arrays. All patches in each array have the same type except for face-varying patch arrays which may have a mix of regular and irregular patch types. The PatchDescriptor provides the fundamental description of a patch, including the number of control points per patch as well as the basis for patch evaluation. Each patch in the array is associated with a PatchParam which specifies additional information about the individual patch. Patch Types The following are the different patch types that can be represented in the PatchTable Patch Type CVs Description NON_PATCH na Undefined patch type POINTS 1 Points useful for cage drawing LINES 2 Lines useful for cage drawing QUADS 4 Bi-linear quadrilaterals TRIANGLES 3 Linear triangles LOOP 12 Quartic triangular Box-spline patches REGULAR 16 Bi-cubic B-spline patches GREGORY 4 Legacy Gregory patches GREGORY_BOUNDARY 4 Legacy Gregory Boundary patches GREGORY_BASIS 20 Bi-cubic quadrilateral Gregory patches GREGORY_TRIANGLE 18 Quartic triangular Gregory patches The type of a patch dictates the number of control vertices expected in the table as well as the method used to evaluate values. Patch Parameterization Here we describe the encoding of the patch parameterization for quadrilateral patches. The encoding for triangular patches is similar, please see the API documentation of FarPatchParam for details. Each patch represents a specific portion of the parametric space of the coarse topological face identified by the PatchParam FaceId. As topological refinement progresses through successive levels, each resulting patch corresponds to a smaller and smaller subdomain of the face. The PatchParam UV origin describes the mapping from the uv domain of the patch to the uv subdomain of the topological face. We encode this uv origin using log2 integer values for compactness and efficiency. It is important to note that this uv parameterization is the intrinsic parameterization within a given patch or coarse face and is distinct from any client specified face-varying channel data. Patches which result from irregular coarse faces non-quad faces in the Catmark scheme are offset by the one additional level needed to quadrangulate the irregular face. It is the indices of these offset faces that are stored in the PatchParam and used in other classes such as the FarPatchMap. These offset indices can be identified from the coarse face using the FarPtexIndices class when needed. A patch along an interpolated boundary edge is supported by an incomplete sets of control vertices. For consistency, patches in the PatchTable always have a full set of control vertex indices and the PatchParam Boundary bitmask identifies which control vertices are incomplete the incomplete control vertex indices are assigned values which duplicate the first valid index. Each bit in the boundary bitmask corresponds to one edge of the patch starting from the edge from the first vertex and continuing around the patch. With feature adaptive refinement, regular B-spline basis patches along interpolated boundaries will fall into one of the eight cases four boundary and four corner illustrated below Transition edges occur during feature adaptive refinement where a patch at one level of refinement is adjacent to pairs of patches at the next level of refinement. These T-junctions do not pose a problem when evaluating primvar data on patches, but they must be taken into consideration when tessellating patches e.g. while drawing in order to avoid cracks. The PatchParam Transition bitmask identifies the transition edges of a patch. Each bit in the bitmask corresponds to one edge of the patch just like the encoding of boundary edges. After refining an arbitrary mesh, any of the 16 possible transition edge configurations might occur. The method of handling transition edges is delegated to patch drawing code. Single-Crease Patches Using single-crease patches allows a mesh with creases to be represented with many fewer patches than would be needed otherwise. A single-crease patch is a variation of a regular BSpline patch with one additional crease sharpness parameter. Release Notes 3.x Evaluation of single-crease patches is currently only implemented for OSD patch drawing, but we expect to implement support in all of the evaluation code paths for future releases. Local Points The control vertices represented by a PatchTable are primarily refined points, i.e. points which result from applying the subdivision scheme uniformly or adaptively to the points of the coarse mesh. However, the final patches generated from irregular faces, e.g. patches incident on an extraordinary vertex might have a representation which requires additional local points. Legacy Gregory Patches Using Gregory patches to approximate the surface at the final patches generated from irregular faces is an alternative representation which does not require any additional local points to be computed. Instead, when Legacy Gregory patches are used, the PatchTable must also have an alternative representation of the mesh topology encoded as a vertex valence table and a quad offsets table. FarStencilTable The base container for stencil data is the StencilTable class. As with most other Far entities, it has an associated StencilTableFactory that requires a TopologyRefiner Advantages Stencils are used to factorize the interpolation calculations that subdivision schema apply to vertices of smooth surfaces. If the topology being subdivided remains constant, factorizing the subdivision weights into stencils during a pre-compute pass yields substantial amortizations at run-time when re-posing the control cage. Factorizing the subdivision weights also allows to express each subdivided vertex as a weighted sum of vertices from the control cage. This step effectively removes any data inter-dependency between subdivided vertices the computations of subdivision interpolation can be applied to each vertex in parallel without any barriers or constraint. The Osd classes leverage these properties by exploiting CPU and GPU parallelism. Principles Iterative subdivision algorithms converge towards the limit surface by successively refining the vertices of the coarse control cage. Each successive iteration interpolates the new vertices by applying polynomial weights to a basis of supporting vertices . The interpolation calculations for any given vertex can be broken down into sequences of multiply-add operations applied to the supporting vertices. Stencil table encodes a factorization of these weighted sums each stencils is created by combining the list of control vertices from the 1-ring. With iterative subdivision, each refinement step is dependent upon the previous subdivision step being completed, and a substantial number of steps may be required in order approximate the limit each subdivision step incurs an O4 n growing amount of computations. Instead, once the weights of the contributing coarse control vertices for a given refined vertex have been factorized, it is possible to apply the stencil and directly obtain the interpolated vertex data without having to process the data for the intermediate refinement levels. Cascading Stencils Client-code can control the amount of factorization of the stencils the tables can be generated with contributions all the way from a basis of coarse vertices, or reduced only to contributions from vertices from the previous level of refinement. The latter mode allows client-code to access and insert modifications to the vertex data at set refinement levels -- creating what are often referred to as hierarchical edits . Once the edits have been applied by the client-code, another set of stencils can be used to smooth the vertex data to a higher level of refinement. See implementation details, see the Far cascading stencil tutorial Limit Stencils Stencil tables can be trivially extended from discrete subdivided vertices to arbitrary locations on the limit surface. Aside from extraordinary points, every location on the limit surface can be expressed as a closed-form weighted average of a set of coarse control vertices from the 1-ring surrounding the face. The weight accumulation process is similar the control cage is adaptively subdivided around extraordinary locations. A stencil is then generated for each limit location simply by factorizing the bi-cubic Bspline patch weights over those of the contributing basis of control-vertices. The use of bi-cubic patches also allows the accumulation of analytical derivatives, so limit stencils carry a set of weights for tangent vectors. Once the stencil table has been generated, limit stencils are the most direct and efficient method of evaluation of specific locations on the limit of a subdivision surface, starting from the coarse vertices of the control cage. Also just as discrete stencils, limit stencils that are factorized from coarse control vertices do not have inter-dependencies and can be evaluated in parallel. For implementation details, see the glStencilViewer code example. Sample Location On Extraordinary Faces Each stencil is associated with a singular parametric location on the coarse mesh. The parametric location is defined as face location and local 0.0 - 1.0 u,v triplet In the case of face that are not quads, a parametric sub-face quadrant needs to be identified. This can be done either explicitly or implicitly by using the unique ptex face indices for instance. Code example When the control vertices controlPoints move in space, the limit locations can be very efficiently recomputed simply by applying the blending weights to the series of coarse control vertices class StencilType public void Clear memset x , 0 , sizeof StencilType void AddWithWeight StencilType const cv , float weight x cv . x weight y cv . y weight z cv . z weight float x , y , z std vector StencilType controlPoints , points , utan , vtan Update points by applying stencils controlStencils . UpdateValues StencilType controlPoints 0 , points 0 Update tangents by applying derivative stencils controlStencils . UpdateDerivs StencilType controlPoints 0 , utan 0 , vtan 0 Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n- \"tags\": \"\",\n- \"loc\": \"far_overview.html\"\n- }, {\n \"title\": \"dxViewer\",\n \"text\": \"dxViewer dxViewer 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE SYNOPSIS DESCRIPTION OPTIONS SEE ALSO SYNOPSIS dxViewer -f -yup -u -a -l refinement level -c animation loops objfiles -catmark -loop -bilinear DESCRIPTION dxViewer is a stand-alone application that showcases the application of uniform and feature adaptive subdivision schemes to a collection of geometric shapes. Multiple controls are available to experiment with the algorithms. OPTIONS See the description of the common comand line options for the subset of common options supported here. SEE ALSO Other examples glViewer , glFVarViewer , glEvalLimit , glStencilViewer , glPtexViewer , glPaintTest , glShareTopology , dxViewer , dxPtexViewer , Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"dxviewer.html\"\n }, {\n- \"title\": \"Contributing to OpenSubdiv\",\n- \"text\": \"Contributing to OpenSubdiv Contributing to OpenSubdiv 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Contributor License Agreement Understand Git Recommended Git Workflow Sending a Pull Request Contributor License Agreement In order for us to accept code submissions merge git pull-requests, contributors need to sign the Contributor License Agreement CLA. There are two CLAs, one for individuals and one for corporations. As for the end-user license, both are based on Apache. They are found in the code repository individual form , corporate form . Please email the signed CLA to opensubdiv-clapixar.com . Understand Git First, you should familiarize yourself with the Git data model and commands. For small changes you may not need to understand Git deeply, but for larger changes or working with the codebase over a long period of time, it becomes critical to understand more of whats going on under the hood. There are many free resources on the internet, one which weve found useful is the following e-book httpsgithub.compluralsightgit-internals-pdfreleases Recommended Git Workflow Once you have a local development tree cloned and working, you can start making changes. You will need to integrate changes from the source tree as you work the following outlines the workflow used by core OpenSubdiv engineers at Pixar and DreamWorks Fork the repository into your own local copy. This can be done via the GitHub website using the fork button. Clone your fork locally git clone your_fork_url OpenSubdiv.your_name e.g. git clone httpsgithub.comyourusernameOpenSubdiv.git OpenSubdiv.yourusername Setup two remotes, origin and upstream . Origin will be setup as a result of cloning your remote repository, but upstream must be setup manually git remote add upstream httpsgithub.comPixarAnimationStudiosOpenSubdiv.git Verify your remotes are setup correctly git remote -v Which should look something like origin httpsgithub.comyourusernameOpenSubdiv.git fetch origin httpsgithub.comyourusernameOpenSubdiv.git push upstream httpsgithub.comPixarAnimationStudiosOpenSubdiv.git fetch upstream httpsgithub.comPixarAnimationStudiosOpenSubdiv.git push Finally, fetch the upstream content this is required for the next step git fetch upstream Setup a new branch for each change. Working with branches in Git is its greatest pleasure, we strongly suggest setting up a new branch for each change which you plan to pull-request. All work is done in the dev branch, so be sure to keep your change in sync with this upstream branch. To begin, start your new branch from the dev branch git checkout -b dev-feature upstreamdev As you are working on your feature, new changes will be merged into the upstream repository, to sync these changes down and preserve your local edits, you can continually rebase your local work git pull --rebase upstream dev Notice the --rebase option here. It updates the current branch to the upstreamdev branch and rebases all edits so they are at the head of your local feature branch. Alternatively, you can rebase all your work at once when your feature is complete. Sending a Pull Request First, rebase and squash your changes appropriately to produce a clean set of changes at the head of your tree. We require changes to be grouped locally to ensure that rolling back changes can be done easily. If youve followed the steps above, your pending change should already be queued up as required. If you have not, you may need to rebase and squash changes at this point. Once the change is clean, push your changes to origin and go to the GitHub website to submit your pull request. Be sure to submit your request against the dev branch. Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n- \"tags\": \"\",\n- \"loc\": \"contributing.html\"\n- }, {\n \"title\": \"Downloads\",\n \"text\": \"Downloads Downloads 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Coupe Car Coupe Car Note we can use javascripts buttons to trigger download see button-download or we can just paste regular ReST hyperlinks to the files here. Direct links probably more reliable though. Coupe car maya Download Coupe car obj Download EULA OpenSubdiv is covered by a modified Apache 2.0 license included below, and is free to use for commercial or non-commercial use. All Pixar patents in the area of subdivision surface algorithms have also been released for public use. We welcome any involvement in the development or extension of this code in fact, we would love it. Please contact us if you are interested. Copyright 2013 Pixar Licensed under the Apache License, Version 2.0 the Apache License with the following modification you may not use this file except in compliance with the Apache License and the following modification to it Section 6. Trademarks. is deleted and replaced with 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor and its affiliates, except as required to comply with Section 4c of the License and to reproduce the content of the NOTICE file. You may obtain a copy of the Apache License at httpwww.apache.orglicensesLICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the Apache License with the above modification is distributed on an AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the Apache License for the specific language governing permissions and limitations under the Apache License. Accept Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"downloads.html\"\n }, {\n \"title\": \"Subdivision Compatibility\",\n \"text\": \"Subdivision Compatibility Subdivision Compatibility 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Subdivision Compatibility Compatibility with OpenSubdiv 2.x Compatibility with RenderMan Incompatibilities Other Differences Subdivision Compatibility This document highlights areas of compatibility with other software that makes use of subdivision surfaces, including previous versions of OpenSubdiv. The compatibility here refers to the choice of subdivision rules that define the shape of the resulting surfaces. Different subdivision rules will lead to different shapes. Choices affecting shape include the types of subdivision schemes supported e.g. Catmull-Clark, Loop, etc. the basic rules applied for these schemes any extended rules to affect sharpness or creasing rules applied separately to face-varying data Ensuring all of these rules are consistent provides the basis for consistent shapes, but further approximations to the limit surface create the potential for subtle deviations. Even within OpenSubdiv, multiple approximations are possible and vary. For now we focus on the compatibility of subdivision rules and deal with the limit approximations only when noteworthy. Compatibility with OpenSubdiv 2.x The refactoring of OpenSubdiv 3.0 data representations presented a unique opportunity to revisit some corners of the subdivision specification and remove or update some legacy features. Face-varying Interpolation Options Face-varying interpolation options have been consolidated into a single enum with one additional choice new to 3.0. No functionality from 2.x has been removed -- just re-expressed in a simpler and more comprehensible form. Face-varying interpolation was previously defined by a boundary interpolation enum with four modes and an additional boolean propagate corners option, which was little understood, i.e. void HbrMeshSetFVarInterpolateBoundarMethodInterpolateBoundaryMethod const void HbrMeshSetFVarPropagateCornersbool const The latter was only used in conjunction with one of the four modes edge and corner, so it was effectively a unique fifth choice. Closer inspection of all of these modes also revealed some unexpected and undesirable behavior in some common cases -- to an extent that could not simply be changed -- and so an additional mode was added to avoid such behavior. All choices are now provided through a single linear interpolation enum, described and illustrated in more detail in the overview of Face-Varying Interpolation . The use of boundary in the name of the enum was intentionally removed as the choice also affects interior interpolation. The new use of linear is now intended to reflect the fact that interpolation is constrained to be linear where specified by the choice applied. All five of Hbrs original modes of face-varying interpolation are supported with minor modifications where Hbr was found to be incorrect in the presence of semi-sharp creasing. An additional mode corners only has also been added to avoid some of the undesired side-effects of some existing modes illustrated below. The new values for the SdcOptionsFVarLinearInterpolation enum and its equivalents for HbrMeshs InterpolateBoundaryMethod and PropagateCorners flag are as follows ordered such that the set of linear constraints applied is always increasing -- from completely smooth to completely linear Sdc FVarLinearInterpolation Hbr FVarInterpolateBoundaryMethod Hbr FVarPropogateCorners FVAR_LINEAR_NONE k_InterpolateBoundaryEdgeOnly NA ignored FVAR_LINEAR_CORNERS_ONLY NA NA FVAR_LINEAR_CORNERS_PLUS1 k_InterpolateBoundaryEdgeAndCorner false FVAR_LINEAR_CORNERS_PLUS2 k_InterpolateBoundaryEdgeAndCorner true FVAR_LINEAR_BOUNDARIES k_InterpolateBoundaryAlwaysSharp NA ignored FVAR_LINEAR_ALL k_InterpolateBoundaryNone NA ignored Aside from the two corners plus modes that preserve Hbr behavior, all other modes are designed so that the interpolation of a disjoint face-varying region is not affected by changes to other regions that may share the same vertex. So the behavior of a disjoint region should be well understood and predictable when looking at it in isolation e.g. with corners only one would expect to see linear constraints applied where there are topological corners or infinitely sharp creasing applied within the region, and nowhere else. This is not true of the plus modes, and they are named to reflect the fact that more is taken into account where disjoint regions meet. The following example illustrates some undesired effects of the plus modes, which in part motivated the addition of the new corners only mode. The example uses the catmark_fvar_bound0 and catmark_fvar_bound1 shapes from the suite of regression shapes. Both shapes are a simple regular 4x4 grid of quads with face-varying UV data partitioned into multiple disjoint regions. The bound0 shape has two disjoint UV regions -- an upper and lower region -- while the bound1 shape further splits the lower region in two. This first figure illustrates the effect of the original plus1 mode which is also the same for plus2 Note that the effect of splitting the lower UV region in two has the undesired side effect of sharpening the boundary of the upper region. This is the result of the plus1 mode making collective decisions about the sharpness of all face-varying boundaries at the vertex rather than decisions local to each region. In both the plus1 and plus2 cases, all face-varying boundaries sharing a vertex will be sharpened if there are more than two regions meeting at that vertex. The second figure illustrates the effect of the new corners only mode As expected, the splitting of the lower region does not impact the upper region. In this case the decision to sharpen a face-varying boundary is made based on the local topology of each region. Vertex Interpolation Options Since the various options are now presented through a new API Sdc rather than Hbr, based on the history of some of these options and input from interested parties, the following changes have been implemented The naming of the standard creasing method has been changed from Normal to Uniform . Values for SdcOptionsCreasingMethod are now CREASE_UNIFORM standard integer subtraction per level default CREASE_CHAIKIN Chaikin non-uniform averaging around vertices Legacy modes of the smoothtriangle rule have been removed as they were never actually enabled in the code. Values for SdcOptionsTriangleSubdivision are now TRI_SUB_CATMARK Catmull-Clark weights default TRI_SUB_SMOOTH smooth triangle weights These should have little impact since one is a simple change in terminology as part of a new API while the other was removal of an option that was never used. Change to Chaikin creasing method In the process of re-implementing the Chaikin creasing method, observations lead to a conscious choice to change the behavior of Chaikin creasing in the presence of infinitely sharp edges most noticeable at boundaries. Previously, the inclusion of infinite sharpness values in the Chaikin methods computation of edge sharpness around a vertex would prevent a semi-sharp edge from decaying to zero. Infinitely sharp edges are now excluded from the Chaikin non-uniform averaging yielding a much more predictable and desirable result. For example, where the sharpness assignment is actually uniform at such a vertex, the result will now behave the same as the Uniform method. Since this feature has received little use only recently activated in RenderMan, now seemed the best time to make the change before more widespread adoption. Hierarchical Edits While extremely powerful, Hierarchical Edits come with additional maintenance and implementation complexity. Support for them in popular interchange formats and major DCC applications has either been dropped or was never implemented. As a result, the need for Hierarchical Edits is too limited to justify the cost and support for them, and they have therefore been removed from the 3.0 release of OpenSubdiv. Dropping support for Hierarchical Edits allows for significant simplifications of many areas of the subdivision algorithms. While the 3.0 release does not offer direct support for Hierarchical Edits, the architectural changes and direction of 3.0 still facilitate the application of the most common value edits for those wishing to use them -- though not always in the same optimized context. Of course, support for Hierarchical Edits in the future will be considered based on demand and resources. Non-Manifold Topology OpenSubdiv 2.x and earlier was limited to dealing with meshes whose topology was manifold -- a limitation imposed by the use of Hbr. With 3.0 no longer using Hbr, the manifold restriction has also been removed. OpenSubdiv 3.0, therefore, supports a superset of the meshes supported by 2.x and earlier versions with one known exception noted below. Non-manifold meshes that are acceptable to 3.0 however will likely not work with 2.x or earlier. The one known case that 3.0 will not represent the same as 2.x is ironically a case that is non-manifold, and for which Hbr did make special accommodation. That case occurs at a non-manifold vertex where two or more faces meet at a common vertex, but do not share a common edge, and when the boundary interpolation mode is set for smooth corners i.e. edge only, as illustrated below The cage is on the left and is refined to level 2 on the right. On the immediate right, boundary interpolation is set to sharp corners and the results appear the same for 2.x and 3.0. The center and far right illustrate the affects of setting boundary interpolation to smooth corners with 2.x and 3.0 respectively. Note that the 2.x result allows the refined mesh and so the limit surface to split into two while the 3.0 result keeps it connected. When Hbr encounters such vertices, regardless of the boundary mode it splits the vertex -- creating a separate instance of it for each face. So when building an HbrMesh, after finalizing the mesh, it will result in having more vertices than were originally defined termed split vertices. OpenSubdiv 2.x and earlier successfully hid the presence of these extra vertices from users. This case behaves in such a way that violates certain properties of the surface that 3.0 has attempted to emphasize. One of these relates to the nature of the limit surface and becomes more significant in the context of face varying if the cage is connected then so too is its limit surface, or similarly, if the cage consists of N connected regions then the limit surface similarly consists of N connected regions. Another undesirable property here is that the vertex V at which these faces meet must have more than one child vertex V . This makes it difficult to hide split vertices -- OpenSubdiv 2.x tables had an extra level of indirection that made it possible to do this relatively easily, but 3.0 has dispensed with such indirection where possible to streamline performance. Compatibility with RenderMan Since RenderMan and OpenSubdiv versions prior to 3.0 share a common library Hbr, most differences between RenderMan and OpenSubdiv 3.0 are covered in the preceding section of compatibility with OpenSubdiv 2.x. In addition to some features between RenderMan and OpenSubdiv that are not compatible, there are also other differences that may be present due to differences in the implementations of similar features. For most use cases, OpenSubdiv 3.0 is largely compatible with RenderMan. There are however some cases where some differences can be expected. These are highlighted below for completeness. Incompatibilities OpenSubdiv and RenderMan will be incompatible when certain features are used that are not common to both. They are fully described in the 2.x compatibility section and are listed briefly here. OpenSubdiv 3.0 Features Not Supported by RenderMan Non-manifold meshes Choice of the corners only face varying interpolation option RenderMan Features Not Supported by OpenSubdiv 3.0 Hierarchical Edits Other Differences Some differences can occur due to the differing implementations of the feature sets. Additionally, OpenSubdiv 3.0s implementation fixes some issues discovered in Hbr. Smooth Face-Varying Interpolation with Creasing There have been two discrepancies noted in the way that face-varying data is interpolated smoothly in the presence of creases. Smooth face-varying interpolation is expected to match vertex interpolation in the interior and only differ along the boundaries or discontinuities where the face-varying topology is intentionally made to differ from the vertex topology. A simple and effective way to identify discrepancies is to use the X and Y coordinates of vertex positions as the U and V of texture coordinates. If these U and V coordinates are assigned to a face-varying channel, smooth interpolation of U and V is expected to exactly match interpolation of X and Y, regardless of the presence of any sharpness and creasing. Two discrepancies can be seen with Hbr when superimposing the XY vertex interpolation with the projected UV face-varying interpolation. The first discrepancy occurs with interpolation around dart vertices This example shows a simple regular XY grid on the left with an interior sharp edge creating a dart vertex in the center. With no asymmetry in the vertices, the sharpness has no asymmetric affect and the XY vertex interpolation on the immediate right shows the regular grid expected from refinement. On the far right is the UV interpolation from Hbr, which exhibits distortion around the center dart vertex. The second discrepancy occurs with interpolation involving any fractional sharpness values. Hbr effectively ignores any fractional sharpness value in its face-varying interpolation. So edges of vertices with sharpness of say 2.5, will be treated as though their sharpness is 2.0 when face-varying values are interpolated. Similarly, any non-zero sharpness value less than 1.0 is treated as zero by truncation and so is essentially ignored. This example shows an asymmetric 2x2 grid of quads on the left with the center vertex progressively sharpened from 0.5 to 1.0. The three cases of the vertex smooth and sharpened are superimposed on the immediate right to display the three distinct interpolation results. On the far right the interpolation from Hbr displays the same three cases, but only two are visibly distinct -- the sharpness of 0.5 being treated the same as if it were 0.0. Both of these cases are corrected in OpenSubdiv 3.0. Smooth face-varying interpolation in the presence of creasing should match the expected behavior of the vertex interpolation, except where the face-varying topology is explicitly made to differ. The Chaikin Creasing Method At least two discrepancies are know to exist between the implementations of Hbr in RenderMan and OpenSubdiv 3.0 Use of Chaikin creasing with boundaries or infinitely sharp edges Subtle shape differences due to Hbrs use of predictive sharpness Fortunately, this feature was only recently added to Hbr and RenderMan and is little used, so it is expected these differences will have little impact. The first discrepancy is mentioned briefly in the previous section on compatibility between OpenSubdiv 2.x and 3.0. A conscious decision was made to change the averaging of sharpness values involving infinitely sharp edges in order to make results more predictable and favorable. The effects can be seen comparing the regression shape catmark_chaikin2. The second is more subtle and results from an oversight within Hbrs implementation that is not easily corrected. When determining what subdivision rule to apply from one level to the next, the sharpness values at the next level must be known in order to determine whether or not a transition between differing rules is required. If the rule at the next level differs from the previous, a combination of the two is applied. Such a change results from the sharpness values of one or more edges or the vertex itself decaying to zero. Rather than compute the sharpness values at the next level accurately, Hbr predicts it by simply subtracting 1.0 from it, as is done with the uniform creasing method, and it bases decisions on that predicted result. This does not work for Chaikin though. A sharpness value less than 1.0 may not decay to 0 if it is averaged with neighboring sharpness values greater than 1.0, so this sharpness prediction can result in the wrong rule being chosen for the next level. A typical case would have the subdivision rules for Chaikin creasing transition from Corner to Crease at one level, then from Crease to Smooth at the next. Hbrs predictive creasing might mistakenly detect the transition as Corner to Smooth at one level, then after properly computing the sharpness values for the next level later, from Crease to Smooth for the next. One of the regression shapes catmark_chakin1 was disabled from the regression suite because of this effect. The differences in shape that trigger its regression failure were investigated and determined to be the result of this issue. From observations thus far these differences are subtle but can be noticeable. Numerical Precision Since its inception, OpenSubdiv has sought to produce results that were numerically consistent to RenderMan. A regression suite to ensure a certain level of accuracy was provided to detect any substantial deviation. At some point in the development of OpenSubdiv, the point was made that numerical accuracy of Hbr could be improved by changing the order of operations and combining the vertex with the lowest coefficient first in one of the subdivision rules. This was applied more thoroughly in the independent implementation of 3.0 there seemed no reason not to. In most cases the relative magnitudes of the coefficients of subdivision and limit masks is clear so no overhead was necessary to detect them. At a certain point though, this greater accuracy came in conflict with the regression suite. It turned out that high-valence vertices could not be computed to within the desired tolerances set within the suite. The summation of many small coefficients for the adjacent vertices first, before the addition of the much larger coefficient for the primary vertex, allowed for the accumulation of precision that was being truncated by adding the much larger coefficient first in the Hbr implementation. With extremely high valence vertices, a difference in magnitude between the most and least significant coefficients of several orders of magnitude is likely, and that has a significant impact on the single-precision floating point computations. The improved accuracy of OpenSubdiv 3.0 can reach a magnitude that will not go undetected. Whether or not this can lead to visual artifacts is unclear. Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"compatibility.html\"\n }, {\n+ \"title\": \"Contributing to OpenSubdiv\",\n+ \"text\": \"Contributing to OpenSubdiv Contributing to OpenSubdiv 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Contributor License Agreement Understand Git Recommended Git Workflow Sending a Pull Request Contributor License Agreement In order for us to accept code submissions merge git pull-requests, contributors need to sign the Contributor License Agreement CLA. There are two CLAs, one for individuals and one for corporations. As for the end-user license, both are based on Apache. They are found in the code repository individual form , corporate form . Please email the signed CLA to opensubdiv-clapixar.com . Understand Git First, you should familiarize yourself with the Git data model and commands. For small changes you may not need to understand Git deeply, but for larger changes or working with the codebase over a long period of time, it becomes critical to understand more of whats going on under the hood. There are many free resources on the internet, one which weve found useful is the following e-book httpsgithub.compluralsightgit-internals-pdfreleases Recommended Git Workflow Once you have a local development tree cloned and working, you can start making changes. You will need to integrate changes from the source tree as you work the following outlines the workflow used by core OpenSubdiv engineers at Pixar and DreamWorks Fork the repository into your own local copy. This can be done via the GitHub website using the fork button. Clone your fork locally git clone your_fork_url OpenSubdiv.your_name e.g. git clone httpsgithub.comyourusernameOpenSubdiv.git OpenSubdiv.yourusername Setup two remotes, origin and upstream . Origin will be setup as a result of cloning your remote repository, but upstream must be setup manually git remote add upstream httpsgithub.comPixarAnimationStudiosOpenSubdiv.git Verify your remotes are setup correctly git remote -v Which should look something like origin httpsgithub.comyourusernameOpenSubdiv.git fetch origin httpsgithub.comyourusernameOpenSubdiv.git push upstream httpsgithub.comPixarAnimationStudiosOpenSubdiv.git fetch upstream httpsgithub.comPixarAnimationStudiosOpenSubdiv.git push Finally, fetch the upstream content this is required for the next step git fetch upstream Setup a new branch for each change. Working with branches in Git is its greatest pleasure, we strongly suggest setting up a new branch for each change which you plan to pull-request. All work is done in the dev branch, so be sure to keep your change in sync with this upstream branch. To begin, start your new branch from the dev branch git checkout -b dev-feature upstreamdev As you are working on your feature, new changes will be merged into the upstream repository, to sync these changes down and preserve your local edits, you can continually rebase your local work git pull --rebase upstream dev Notice the --rebase option here. It updates the current branch to the upstreamdev branch and rebases all edits so they are at the head of your local feature branch. Alternatively, you can rebase all your work at once when your feature is complete. Sending a Pull Request First, rebase and squash your changes appropriately to produce a clean set of changes at the head of your tree. We require changes to be grouped locally to ensure that rolling back changes can be done easily. If youve followed the steps above, your pending change should already be queued up as required. If you have not, you may need to rebase and squash changes at this point. Once the change is clean, push your changes to origin and go to the GitHub website to submit your pull request. Be sure to submit your request against the dev branch. Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n+ \"tags\": \"\",\n+ \"loc\": \"contributing.html\"\n+ }, {\n \"title\": \"Building with CMake\",\n \"text\": \"Building with CMake Building with CMake 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Overview Step 1 Dependencies Required Optional Step 2 Configuring CMake Useful Build Options Environment Variables Automated Script Using Intels C Studio XE Using Clang Step 3 Building Build Targets Compiling Linking an OpenSubdiv Application Overview Assuming that you have cloned the source repository and selected an appropriate release branch, the following instructions will walk you through the CMake and configuration and build process. CMake is a cross-platform, open-source build system. CMake controls the compilation process using platform independent configuration files in order to generate Makefiles and workspaces that are native to the platform of choice. The process involves the following steps Locate build the requisite dependencies Configure run CMake to generate Makefiles MSVC solution XCode project Run the build from make MSVC XCode Step 1 Dependencies CMake will adapt the build based on which dependencies have been successfully discovered and will disable certain features and code examples accordingly. Please refer to the documentation of each of the dependency packages for specific build and installation instructions. Required CMake version 3.12 Optional Ptex support features for ptex textures and the ptexViewer example Zlib required for Ptex under Windows CUDA TBB OpenCL DX11 SDK GLFW required for standalone examples and some regression tests Docutils required for reST-based documentation Python Pygments required for Docutils reST styling Doxygen Step 2 Configuring CMake One way to configure CMake is to use the CMake GUI . In many cases CMake can fall back on default standard paths in order to find the packages that OpenSubdiv depends on. For non-standard installations however, a complete set of override variables is available. The following sub-section lists some of these variables. For more specific details, please consult the source of the custom CMake modules in the OpenSubdivcmake folder. Useful Build Options The following configuration arguments can be passed to the CMake command line. - DCMAKE_BUILD_TYPE Debug Release - DCMAKE_INSTALL_PREFIX base path to install OpenSubdiv default Current directory - DCMAKE_LIBDIR_BASE library directory basename default lib - DCUDA_TOOLKIT_ROOT_DIR path to CUDA - DPTEX_LOCATION path to Ptex - DGLFW_LOCATION path to GLFW - DTBB_LOCATION path to Intel s TBB - DICC_LOCATION path to Intel s C Studio XE - DNO_LIB 1 disable the opensubdiv libs build caveat emptor - DNO_EXAMPLES 1 disable examples build - DNO_TUTORIALS 1 disable tutorials build - DNO_REGRESSION 1 disable regression tests build - DNO_PTEX 1 disable PTex support - DNO_DOC 1 disable documentation build - DNO_OMP 1 disable OpenMP - DNO_TBB 1 disable TBB - DNO_CUDA 1 disable CUDA - DNO_OPENCL 1 disable OpenCL - DNO_OPENGL 1 disable OpenGL - DNO_CLEW 1 disable CLEW wrapper library Environment Variables The paths to Ptex, GLFW, other dependencies can also be specified through the following environment variables PTEX_LOCATION , GLFW_LOCATION Automated Script The GUI solution will probably become a burden for active developpers who tend to re-run the configuration step fairly often. A scripted solution can save a lot of time. Here is a typical workflow git clone https github.comPixarAnimationStudiosOpenSubdiv.git folder cd folder mkdir build cd build source .. .. cmake_setup Where cmake_setup is a configuration script. Here is an example CMake configuration script for a full typical windows-based build that can be run in GitShell bintcsh Replace the .. with a full path to the root of the OpenSubdiv source tree if necessary cProgram Files x86CMake 2.8bincmake.exe - G Visual Studio 15 2017 Win64 - D GLFW_LOCATIONstringcProgram Filesglfw-2.7.7.bin.WIN64 - D OPENCL_INCLUDE_DIRSstringcProgramDataNVIDIA CorporationNVIDIA GPU Computing SDK 4.2OpenCLcommoninc - D _OPENCL_CPP_INCLUDE_DIRSstringcProgramDataNVIDIA CorporationNVIDIA GPU Computing SDK 4.2OpenCLcommoninc - D OPENCL_LIBRARIESstringcProgramDataNVIDIA CorporationNVIDIA GPU Computing SDK 4.2OpenCLcommonlibx64OpenCL.lib - D PTEX_LOCATIONstringcUsersopensubdivdemosrcptexx64 .. copy Ptex dependencies Windows only mkdir - p bin Debug , Release cp - f c Users opensubdiv demo src zlib -1.2.7 contrib vstudio vc10 x64 ZlibDllRelease zlibwapi . dll bin Debug cp - f c Users opensubdiv demo src zlib -1.2.7 contrib vstudio vc10 x64 ZlibDllRelease zlibwapi . dll bin Release cp - f c Users opensubdiv demo src ptex x64 lib Ptex . dll bin Debug cp - f c Users opensubdiv demo src ptex x64 lib Ptex . dll bin Release Important Notice that the following scripts start by recursively removing the ..build and ..inst directories. Make sure you modify them to suit your build workflow. Here is a similar script for Nix-based platforms echo Removing build cd .. rm - rf build inst mkdir build cd build echo Running cmake cmake - DPTEX_LOCATION home opensubdiv dev opensource ptex install - DGLFW_LOCATION home opensubdiv dev opensource glfw build - DDOXYGEN_EXECUTABLE home opensubdiv dev opensource doxygen inst bin doxygen - DCMAKE_INSTALL_PREFIX .. inst - DCMAKE_BUILD_TYPE Debug .. Here is a similar script for macOS echo Removing build cd .. rm - rf build inst mkdir build cd build echo Running cmake cmake - DOPENGL_INCLUDE_DIR Applications Xcode . app Contents Developer Platforms MacOSX . platform Developer SDKs MacOSX10 .9 . sdk System Library Frameworks OpenGL . framework Headers - DGLFW_LOCATION Users opensubdiv dev opensource glfw inst - DNO_OMP 1 - DNO_REGRESSION 0 - DCMAKE_INSTALL_PREFIX .. inst - DCMAKE_BUILD_TYPE Debug .. Using Intels C Studio XE OpenSubdiv can be also be built with Intels C compiler icc. The default compiler can be overriden in CMake with the following configuration options - DCMAKE_CXX_COMPILER path to icc executable - DCMAKE_C_COMPILER path to icc executable The installation location of the C Studio XE can be overriden with - DICC_LOCATION path to Intel s C Studio XE Using Clang CMake can also be overriden to use the clang compilers by configuring the following options - DCMAKE_CXX_COMPILER clang - DCMAKE_C_COMPILER clang Step 3 Building CMake provides a cross-platform command-line build cmake -- build . -- target install -- config Release Alternatively, you can use native toolkits to launch the build. The steps differ for each OS Windows launch VC with the solution generated by CMake in your build directory. macOS launch Xcode with the xcodeproj generated by CMake in your build directory Nix run make in your build directory - use the clean target to remove previous build results - use VERBOSE1 for verbose build output Build Targets Makefile-based builds allow the use of named target. Here are some of the more useful target names osd_staticdynamic_CPUGPU The core components of the OpenSubdiv libraries example_name Builds specific code examples by name glViewer, ptexViewer... doc Builds ReST and doxygen documentation doc_html Builds ReST documentation doc_doxy Builds Doxygen documentation Compiling Linking an OpenSubdiv Application Here are example commands for building an OpenSubdiv application on several architectures Linux g -IOPENSUBDIVinclude -c myapp.cpp g myapp.o -LOPENSUBDIVlib -losdGPU -losdCPU -o myapp macOS g -IOPENSUBDIVinclude -c myapp.cpp g myapp.o -LOPENSUBDIVlib -losdGPU -losdCPU -o myapp install_name_tool -add_rpath OPENSUBDIVlib myapp On 64-bit OS-X add -m64 after each g . Windows cl nologo MT TP DWIN32 IOPENSUBDIVinclude -c myapp.cpp link nologo outmyapp.exe LIBPATHOPENSUBDIVlib libosdGPU.lib libosdCPU.lib myapp.obj Note HBR uses the offsetof macro on a templated struct, which appears to spurriously set off a warning in both gcc and Clang. It is recommended to turn the warning off with the -Wno-invalid-offsetof flag. Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n \"tags\": \"\",\n \"loc\": \"cmake_build.html\"\n }, {\n \"title\": \"Code Examples\",\n \"text\": \"Code Examples Code Examples 3.5.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Standalone Viewers OpenSubdiv builds a number of standalone viewers that demonstrate various aspects of the software. OpenGL examples glViewer glFVarViewer glEvalLimit glStencilViewer glPtexViewer glPaintTest glShareTopology DirectX examples dxViewer dxPtexViewer Metal examples mtlViewer mtlPtexViewer Common Command Line Options While the following command line options are common, not all examples support all -- in some cases, certain options are not applicable. -f launches the application in full-screen mode if supported -yup set initial view with Y-axis up Z-up is the default -u apply uniform subdivision to all meshes -a apply adaptive subdivision to create patches for the limit surface -l depth level of uniform or adaptive refinement to apply -c count number of repetitions of the animation loop when supported default of 0 is infinite -anim interpret a given set of Obj files as an animated sequence rather than a set of distinct meshes -catmark apply the Catmark scheme to all meshes in given Obj files default -loop apply the Loop scheme to all meshes in given Obj files -bilinear apply the Bilinear scheme to all meshes in given Obj files objfiles a set of one or more meshes in Obj format requiring a .obj extension that may be distinct meshes or animated versions of a single mesh Common Keyboard Controls Left mouse button drag orbit camera Middle mouse button drag pan camera Right mouse button dolly camera n, p nextprev model 1, 2, 3, ..., 9, 0 specify adaptive isolation or uniform refinement level , - increase decrease tessellation Tab toggle full-screen Esc turn on off the HUD w switch display mode q quit Generated on 2024-02-29 1258 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use\",\n"}]}]}, {"source1": "xz --list", "source2": "xz --list", "unified_diff": "@@ -1,14 +1,14 @@\n Streams: 1\n Blocks: 2\n- Compressed size: 30.0 MiB (31463524 B)\n+ Compressed size: 30.0 MiB (31463608 B)\n Uncompressed size: 47.8 MiB (50135040 B)\n Ratio: 0.628\n Check: CRC64\n Stream Padding: 0 B\n Streams:\n Stream Blocks CompOffset UncompOffset CompSize UncompSize Ratio Check Padding\n- 1 2 0 0 31463524 50135040 0.628 CRC64 0\n+ 1 2 0 0 31463608 50135040 0.628 CRC64 0\n Blocks:\n Stream Block CompOffset UncompOffset TotalSize UncompSize Ratio Check\n- 1 1 12 0 9141620 25165824 0.363 CRC64\n- 1 2 9141632 25165824 22321856 24969216 0.894 CRC64\n+ 1 1 12 0 9141772 25165824 0.363 CRC64\n+ 1 2 9141784 25165824 22321788 24969216 0.894 CRC64\n"}]}]}]}