--- /srv/reproducible-results/rbuild-debian/r-b-build.xTOaGF2T/b1/opensubdiv_3.6.0-2_arm64.changes +++ /srv/reproducible-results/rbuild-debian/r-b-build.xTOaGF2T/b2/opensubdiv_3.6.0-2_arm64.changes ├── Files │ @@ -1,9 +1,9 @@ │ │ 09b4b15bc1f97a3b3fa2befe39f490e3 153112 libdevel optional libosd-dev_3.6.0-2_arm64.deb │ - b08eeaa71e7d16c9e21c57c2ae5d0910 31492768 doc optional libosd-doc_3.6.0-2_all.deb │ + 251167f84457ef5d5352dd74a9f65ce7 31493036 doc optional libosd-doc_3.6.0-2_all.deb │ 05cd5819d23dcc16220f6cb1be1751e3 3486184 debug optional libosdcpu3.6.0-dbgsym_3.6.0-2_arm64.deb │ 1e9e36f90cb987ed82d8cba71687bdc7 304220 libs optional libosdcpu3.6.0_3.6.0-2_arm64.deb │ 3b9324bc155e53022bf32ca6a42e369e 547028 debug optional libosdgpu3.6.0-dbgsym_3.6.0-2_arm64.deb │ 8c73df10e73b219b23e00cbb8f25570e 133448 libs optional libosdgpu3.6.0_3.6.0-2_arm64.deb │ 75b159695e366db146c7c8c18cdbbb6d 12157536 debug optional opensubdiv-tools-dbgsym_3.6.0-2_arm64.deb │ 9694f79a2f45d82329756c538f28afc2 581932 graphics optional opensubdiv-tools_3.6.0-2_arm64.deb ├── libosd-doc_3.6.0-2_all.deb │ ├── file list │ │ @@ -1,3 +1,3 @@ │ │ -rw-r--r-- 0 0 0 4 2024-06-17 18:57:37.000000 debian-binary │ │ --rw-r--r-- 0 0 0 25464 2024-06-17 18:57:37.000000 control.tar.xz │ │ --rw-r--r-- 0 0 0 31467112 2024-06-17 18:57:37.000000 data.tar.xz │ │ +-rw-r--r-- 0 0 0 25436 2024-06-17 18:57:37.000000 control.tar.xz │ │ +-rw-r--r-- 0 0 0 31467408 2024-06-17 18:57:37.000000 data.tar.xz │ ├── control.tar.xz │ │ ├── control.tar │ │ │ ├── ./md5sums │ │ │ │ ├── ./md5sums │ │ │ │ │┄ Files differ │ ├── data.tar.xz │ │ ├── data.tar │ │ │ ├── file list │ │ │ │ @@ -27,20 +27,20 @@ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1660 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/css/doxy.css │ │ │ │ -rw-r--r-- 0 root (0) root (0) 27698 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/css/flavor.css │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5321 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/css/pygments.css │ │ │ │ -rw-r--r-- 0 root (0) root (0) 3011 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/css/renderman-university.css │ │ │ │ -rw-r--r-- 0 root (0) root (0) 12971 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/css/rst.css │ │ │ │ -rw-r--r-- 0 root (0) root (0) 14561 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/downloads.html │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/ │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6576 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00674.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 69 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00674.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 76687 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00674_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7385 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00677.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 109 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00677.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 65516 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00677_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7385 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00674.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 109 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00674.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 65516 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00674_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6576 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00677.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 69 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00677.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 76687 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00677_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7311 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00680.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 195 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00680.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 27167 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00680_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6558 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00683.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 78 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00683.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 35228 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00683_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7504 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00686.html │ │ │ │ @@ -63,53 +63,53 @@ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 147347 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00704_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 8007 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00707.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 171 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00707.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 74098 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00707_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6698 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00710.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 66 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00710.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 66668 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00710_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 9468 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00713.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 404 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00713.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 84414 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00713_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7136 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00716.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 119 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00716.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 38039 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00716_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6563 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00719.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 64 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00719.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 19420 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00719_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 9923 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00722.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 456 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00722.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 177059 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00722_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7136 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00713.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 119 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00713.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 38039 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00713_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 9923 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00716.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 456 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00716.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 177059 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00716_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 9468 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00719.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 404 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00719.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 84414 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00719_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6563 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00722.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 64 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00722.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 19420 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00722_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 8223 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00725.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 130 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00725.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 212261 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00725_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7336 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00728.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 111 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00728.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 167871 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00728_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7813 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00731.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 163 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00731.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 67819 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00731_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7813 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00728.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 163 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00728.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 67819 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00728_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7336 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00731.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 111 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00731.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 167871 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00731_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6745 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00734.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 103 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00734.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 42247 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00734_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 8124 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00737.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 314 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00737.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 50494 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00737_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7304 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00740.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 160 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00740.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 53848 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00740_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 11427 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00743.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1173 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00743.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 22911 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00743_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5644 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00746.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 38294 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00746_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5899 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00749.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 22113 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00749_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6082 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00752.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 85953 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00752_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6082 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00749.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 85953 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00749_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5899 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00752.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 22113 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00752_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6202 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00755.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 163473 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00755_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6289 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00758.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 24307 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00758_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6267 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00761.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 81483 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00761_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6114 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00764.html │ │ │ │ @@ -124,24 +124,24 @@ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 60 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00773.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 38674 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00773_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5827 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00776.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 100442 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00776_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6474 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00779.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 59 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00779.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 53913 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00779_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5753 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00782.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 38297 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00782_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5836 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00785.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 89790 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00785_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6807 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00788.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 67 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00788.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 33910 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00788_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7125 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00791.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 115 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00791.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 128979 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00791_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5836 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00782.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 89790 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00782_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5753 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00785.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 38297 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00785_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7125 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00788.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 115 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00788.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 128979 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00788_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6807 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00791.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 67 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00791.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 33910 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00791_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4478 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00794.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 10583 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00794_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6425 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00797.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 67 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00797.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 23841 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00797_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7174 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00800.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 115 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00800.js │ │ │ │ @@ -151,65 +151,65 @@ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 34223 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00803_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6161 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00806.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 63 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00806.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 14083 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00806_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6499 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00809.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 69 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00809.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 21925 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00809_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6818 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00812.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 66 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00812.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 35394 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00812_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6580 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00815.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 99 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00815.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12709 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00815_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6452 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00818.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 79 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00818.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 25442 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00818_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7052 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00821.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 124 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00821.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 223874 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00821_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6580 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00812.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 99 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00812.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12709 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00812_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6818 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00815.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 66 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00815.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 35394 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00815_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7052 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00818.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 124 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00818.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 223874 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00818_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6452 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00821.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 79 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00821.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 25442 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00821_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6246 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00824.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 71 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00824.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 22526 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00824_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6509 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00827.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 70 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00827.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 18296 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00827_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6592 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00830.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 101 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00830.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 12826 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00830_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6766 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00833.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 68 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00833.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 27921 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00833_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6358 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00836.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 70 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00836.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 22933 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00836_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6357 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00839.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 81 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00839.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 26984 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00839_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6358 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00833.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 70 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00833.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 22933 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00833_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6357 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00836.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 81 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00836.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 26984 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00836_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6766 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00839.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 68 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00839.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 27921 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00839_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7017 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00842.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 128 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00842.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 49761 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00842_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6410 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00845.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 73 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00845.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 22723 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00845_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7225 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00848.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 126 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00848.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 224157 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00848_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7199 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00851.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 121 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00851.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 239108 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00851_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6509 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00854.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 70 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00854.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 18618 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00854_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6486 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00857.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 67 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00857.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 19962 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00857_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6574 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00860.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 98 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00860.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12790 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00860_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6509 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00851.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 70 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00851.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 18618 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00851_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7199 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00854.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 121 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00854.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 239108 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00854_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6574 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00857.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 98 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00857.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12790 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00857_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6486 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00860.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 67 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00860.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 19962 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00860_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6745 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00863.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 65 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00863.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 47052 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00863_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6445 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00866.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 78 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00866.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 23459 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00866_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6497 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00869.html │ │ │ │ @@ -228,26 +228,26 @@ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 61 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00881.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 110976 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00881_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4474 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00884.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 12883 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00884_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 14201 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00887.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 2466 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00887.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 182425 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00887_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6370 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00890.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 68 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00890.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 19254 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00890_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6381 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00893.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 61 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00893.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 110647 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00893_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6911 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00896.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 66 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00896.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 44339 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00896_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6687 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00899.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 69 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00899.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 27492 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00899_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6911 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00890.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 66 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00890.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 44339 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00890_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6370 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00893.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 68 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00893.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 19254 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00893_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6687 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00896.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 69 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00896.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 27492 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00896_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6381 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00899.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 61 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00899.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 110647 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00899_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6375 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00902.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 69 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00902.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 20016 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00902_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4659 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00905.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 71 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00905.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5892 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00906.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 216 2024-06-17 18:57:37.000000 ./usr/share/doc/opensubdiv/doxy_html/a00906.js │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00674.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/bfr/vertexDescriptor.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/bfr/tessellation.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -90,26 +90,29 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
vertexDescriptor.h File Reference
│ │ │ │ +
tessellation.h File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include "../vtr/stackBuffer.h"
│ │ │ │ +#include "../bfr/parameterization.h"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ 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...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -118,13 +121,13 @@ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,25 +1,30 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -vertexDescriptor.h File Reference │ │ │ │ │ +tessellation.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ -#include "_._._/_v_t_r_/_s_t_a_c_k_B_u_f_f_e_r_._h" │ │ │ │ │ +#include "_._._/_b_f_r_/_p_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n_._h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ -  Simple class used by subclasses of _S_u_r_f_a_c_e_F_a_c_t_o_r_y to describe a vertex. │ │ │ │ │ +class   _T_e_s_s_e_l_l_a_t_i_o_n │ │ │ │ │ +  Encapsulates a specific tessellation pattern of a _P_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n. │ │ │ │ │ _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ +class   _T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s │ │ │ │ │ + _O_p_t_i_o_n_s configure a _T_e_s_s_e_l_l_a_t_i_o_n to specify the nature of both its │ │ │ │ │ +  results and the structure of the coordinate and facet index arrays that │ │ │ │ │ + its methods will populate. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r │ │ │ │ │   │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _b_f_r │ │ │ │ │ - * _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h │ │ │ │ │ + * _t_e_s_s_e_l_l_a_t_i_o_n_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00674.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,3 +1,4 @@ │ │ │ │ │ var a00674 = [ │ │ │ │ │ - ["VertexDescriptor", "a00969.html", "a00969"] │ │ │ │ │ + ["Tessellation", "a00961.html", "a00961"], │ │ │ │ │ + ["Options", "a00965.html", "a00965"] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00674_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/bfr/vertexDescriptor.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/bfr/tessellation.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,15 +92,15 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
vertexDescriptor.h
│ │ │ │ +
tessellation.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │
2// Copyright 2021 Pixar
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │ @@ -119,425 +119,281 @@ │ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │
24
│ │ │ │ -
25#ifndef OPENSUBDIV3_BFR_VERTEX_DESCRIPTOR_H
│ │ │ │ -
26#define OPENSUBDIV3_BFR_VERTEX_DESCRIPTOR_H
│ │ │ │ +
25#ifndef OPENSUBDIV3_BFR_TESSELLATION_H
│ │ │ │ +
26#define OPENSUBDIV3_BFR_TESSELLATION_H
│ │ │ │
27
│ │ │ │
28#include "../version.h"
│ │ │ │
29
│ │ │ │ -
30#include "../vtr/stackBuffer.h"
│ │ │ │ +
30#include "../bfr/parameterization.h"
│ │ │ │
31
│ │ │ │
32namespace OpenSubdiv {
│ │ │ │
33namespace OPENSUBDIV_VERSION {
│ │ │ │
34
│ │ │ │
35namespace Bfr {
│ │ │ │
36
│ │ │ │ -
50//
│ │ │ │ -
51// WIP - need to migrate some of these comments into Doxygen
│ │ │ │ -
52// - others will be moved to the external documentation
│ │ │ │ -
53//
│ │ │ │ -
54// It is used by subclasses of SurfaceFactory to provide a complete
│ │ │ │ -
55// topological description for each vertex of a face, i.e. invoked via
│ │ │ │ -
56// the virtual method:
│ │ │ │ -
57//
│ │ │ │ -
58// int populateFaceVertexDescriptor(Index baseFace,
│ │ │ │ -
59// int cornerVertex,
│ │ │ │ -
60// VertexDescriptor & v) const;
│ │ │ │ -
61//
│ │ │ │ -
62// Assignment of the full topology can be involved in the presence of
│ │ │ │ -
63// irregular faces, non-manifold topology or creasing around a vertex, but
│ │ │ │ -
64// many cases will be simple. For example, to specify a regular boundary
│ │ │ │ -
65// vertex of a Catmark mesh without any optional sharpness:
│ │ │ │ -
66//
│ │ │ │ -
67// int numIncidentFaces = 2;
│ │ │ │ -
68// bool vertexOnBoundary = true;
│ │ │ │ -
69//
│ │ │ │ -
70// vd.Initialize(numIncidentFaces);
│ │ │ │ -
71// vd.SetManifold(true);
│ │ │ │ -
72// vd.SetBoundary(vertexOnBoundary);
│ │ │ │ -
73// vd.ClearIncidentFaceSizes();
│ │ │ │ -
74// vd.Finalize();
│ │ │ │ -
75//
│ │ │ │ -
76// For a more general example, to assign a vertex of some valence whose
│ │ │ │ -
77// incident faces are of different sizes (e.g. required when triangles
│ │ │ │ -
78// appear around a vertex in an otherwise quad-dominant Catmark mesh):
│ │ │ │ -
79//
│ │ │ │ -
80// int numIncidentFaces = meshVertex.GetNumIncidentFaces();
│ │ │ │ -
81// bool vertexOnBoundary = meshVertex.IsBoundar();
│ │ │ │ -
82//
│ │ │ │ -
83// vd.Initialize(numIncidentFaces);
│ │ │ │ -
84// vd.SetManifold(true);
│ │ │ │ -
85// vd.SetBoundary(vertexOnBoundary);
│ │ │ │ -
86//
│ │ │ │ -
87// for (int i = 0; i < numIncidentFaces; ++i) {
│ │ │ │ -
88// vd.SetIncidentFaceSize(i, meshVertex.GetIncidentFaceSize(i));
│ │ │ │ -
89// }
│ │ │ │ -
90// vd.Finalize();
│ │ │ │ -
91//
│ │ │ │ -
92// These examples specify the incident faces as forming a manifold ring
│ │ │ │ -
93// (or half-ring) around the vertex, i.e. they can be specified as a
│ │ │ │ -
94// continuous, connected sequence in counter-clockwise order (and also
│ │ │ │ -
95// without degeneracies). In the case of a boundary vertex, the first
│ │ │ │ -
96// face must be on the leading edge of the boundary while the last is on
│ │ │ │ -
97// the trailing edge. For an interior vertex, which face is specified
│ │ │ │ -
98// first does not matter (since the set is periodic).
│ │ │ │ -
99//
│ │ │ │ -
100// In both cases, the location of the base face in this sequence -- the
│ │ │ │ -
101// face whose corner vertex is being described here -- must be specified
│ │ │ │ -
102// in the return value to populateFaceVertexDescriptor() (e.g. when a
│ │ │ │ -
103// boundary vertex has 3 incident faces, a return value of 0, 1 or 2
│ │ │ │ -
104// will indicate which is the base face).
│ │ │ │ -
105//
│ │ │ │ -
106// The corresponding methods to specify mesh control vertex indices (or
│ │ │ │ -
107// face-varying indices) complete the specification of the neighborhood:
│ │ │ │ -
108//
│ │ │ │ -
109// int getFaceCornerVertexIndices(Index baseFace, int cornerVertex,
│ │ │ │ -
110// Index vertexIndices[]) const;
│ │ │ │ -
111//
│ │ │ │ -
112// int getFaceCornerFVarValueIndices(Index baseFace, int cornerVertex,
│ │ │ │ -
113// Index fvarValueIndices[],
│ │ │ │ -
114// int fvarChannel) const;
│ │ │ │ -
115//
│ │ │ │ -
116// and are invoked by the Factory when needed.
│ │ │ │ -
117//
│ │ │ │ -
118// For each incident face, the indices for all vertices of that face are
│ │ │ │ -
119// to be specified (not the one-ring or some other subset). These indices
│ │ │ │ -
120// must also be specified in an orientation relative to the vertex, i.e.
│ │ │ │ -
121// for a vertex A and an incident face with face-vertices that may be
│ │ │ │ -
122// stored internally as {D, C, A, B}, they must be specified with A first
│ │ │ │ -
123// as {A, B, C, D}. This may seem a bit cumbersome, but it has clear
│ │ │ │ -
124// advantages when dealing with face-varying indices and unordered faces.
│ │ │ │ -
125//
│ │ │ │ -
126// More compact ways of specifying vertex indices for ordered, manifold
│ │ │ │ -
127// cases may be worth exploring in future, but face-varying indices and
│ │ │ │ -
128// non-manifold (unordered) vertices will always require such a full set,
│ │ │ │ -
129// so both methods will need to co-exist.
│ │ │ │ -
130//
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
132public:
│ │ │ │ -
133 // The full declaration must be enclosed by calls to these methods:
│ │ │ │ -
134 //
│ │ │ │ -
135 // Note that vertex valences or face sizes in excess of those defined
│ │ │ │ -
136 // in Bfr::Limits (typically 16-bits) are not valid. When specifying
│ │ │ │ -
137 // values in excess of these limits, initialization will fail and/or
│ │ │ │ -
138 // the descriptor will be marked invalid and finalization will fail.
│ │ │ │ -
139 //
│ │ │ │ -
140
│ │ │ │ -
142
│ │ │ │ -
149
│ │ │ │ -
151 bool Initialize(int numIncidentFaces);
│ │ │ │ -
152
│ │ │ │ -
154 bool Finalize();
│ │ │ │ -
155
│ │ │ │ -
157 bool IsValid() const;
│ │ │ │ -
159
│ │ │ │ -
160 //
│ │ │ │ -
161 // WIP - need to migrate these comments into Doxygen
│ │ │ │ -
162 //
│ │ │ │ -
163 // Three groups of methods describe the topology around a vertex:
│ │ │ │ -
164 // - simple properties (vertex is a boundary, manifold, etc.)
│ │ │ │ -
165 // - sizes of incident faces (constant or size for each face)
│ │ │ │ -
166 // - sharpness of the vertex and its incident edges (optional)
│ │ │ │ -
167 //
│ │ │ │ -
168
│ │ │ │ -
169 // Manifold and boundary conditions:
│ │ │ │ -
170 //
│ │ │ │ -
171 // The manifold property is a strict condition but preferred for
│ │ │ │ -
172 // efficiency and is usually available from common connected mesh
│ │ │ │ -
173 // representations. When declaring the topology as "manifold",
│ │ │ │ -
174 // the Factory assumes the following:
│ │ │ │ -
175 //
│ │ │ │ -
176 // - all incident faces are "ordered" (counter-clockwise)
│ │ │ │ -
177 // - all incident faces are consistently oriented
│ │ │ │ -
178 // - all incident edges are non-degenerate
│ │ │ │ -
179 //
│ │ │ │ -
180 // If not certain that all of these conditions are met, it is best
│ │ │ │ -
181 // to not declare manifold -- leaving the Factory to make sense of
│ │ │ │ -
182 // the set of incident faces from the face-vertex indices that are
│ │ │ │ -
183 // provided elsewhere.
│ │ │ │ -
184 //
│ │ │ │ -
185
│ │ │ │ -
187
│ │ │ │ -
191
│ │ │ │ -
193 void SetManifold(bool isManifold);
│ │ │ │ -
194
│ │ │ │ -
196 void SetBoundary(bool isOnBoundary);
│ │ │ │ -
197
│ │ │ │ -
199 void SetIncidentFaceSize(int faceIndex, int faceSize);
│ │ │ │ -
200
│ │ │ │ - │ │ │ │ +
│ │ │ │ + │ │ │ │ +
52public:
│ │ │ │ +
│ │ │ │ +
65 class Options {
│ │ │ │ +
66 public:
│ │ │ │ +
│ │ │ │ +
67 Options() : _preserveQuads(false), _facetSize4(false),
│ │ │ │ +
68 _coordStride(0), _facetStride(0) { }
│ │ │ │ +
│ │ │ │ +
69
│ │ │ │ +
72 Options & PreserveQuads(bool on);
│ │ │ │ +
74 bool PreserveQuads() const { return _preserveQuads; }
│ │ │ │ +
75
│ │ │ │ +
78 Options & SetFacetSize(int numIndices);
│ │ │ │ +
79 // @brief Return the number of indices per facet
│ │ │ │ +
80 int GetFacetSize() const { return 3 + (int)_facetSize4; }
│ │ │ │ +
81
│ │ │ │ +
83 Options & SetFacetStride(int stride);
│ │ │ │ +
85 int GetFacetStride() const { return _facetStride; }
│ │ │ │ +
86
│ │ │ │ +
88 Options & SetCoordStride(int stride);
│ │ │ │ +
90 int GetCoordStride() const { return _coordStride; }
│ │ │ │ +
91
│ │ │ │ +
92 private:
│ │ │ │ +
93 unsigned int _preserveQuads : 1;
│ │ │ │ +
94 unsigned int _facetSize4 : 1;
│ │ │ │ +
95
│ │ │ │ +
96 short _coordStride;
│ │ │ │ +
97 short _facetStride;
│ │ │ │ +
98 };
│ │ │ │ +
│ │ │ │ +
99
│ │ │ │ +
100public:
│ │ │ │ +
102
│ │ │ │ +
111
│ │ │ │ +
118 Tessellation(Parameterization const & p, int uniformRate,
│ │ │ │ +
119 Options const & options = Options());
│ │ │ │ +
120
│ │ │ │ +
158 Tessellation(Parameterization const & p, int numRates, int const rates[],
│ │ │ │ +
159 Options const & options = Options());
│ │ │ │ +
160
│ │ │ │ +
162 bool IsValid() const { return _isValid; }
│ │ │ │ +
163
│ │ │ │ +
165 Tessellation() = delete;
│ │ │ │ +
166
│ │ │ │ +
167 Tessellation(Tessellation const &) = delete;
│ │ │ │ + │ │ │ │ + │ │ │ │ +
171
│ │ │ │ +
173
│ │ │ │ +
177
│ │ │ │ +
179 Parameterization GetParameterization() const { return _param; }
│ │ │ │ +
180
│ │ │ │ +
182 int GetFaceSize() const { return _param.GetFaceSize(); }
│ │ │ │ +
183
│ │ │ │ +
185 int GetRates(int rates[]) const;
│ │ │ │ +
186
│ │ │ │ +
188 bool IsUniform() const { return _isUniform; }
│ │ │ │ +
190
│ │ │ │ +
192
│ │ │ │
203
│ │ │ │ -
205 void SetVertexSharpness(float sharpness);
│ │ │ │ +
205 int GetNumCoords() const { return _numInteriorPoints + _numBoundaryPoints; }
│ │ │ │
206
│ │ │ │ - │ │ │ │ +
208 int GetCoordStride() const { return _coordStride; }
│ │ │ │
209
│ │ │ │ -
221 void SetManifoldEdgeSharpness(int edgeIndex, float edgeSharpness);
│ │ │ │ -
222
│ │ │ │ -
238 void SetIncidentFaceEdgeSharpness(int faceIndex, float leadingEdgeSharp,
│ │ │ │ -
239 float trailingEdgeSharp);
│ │ │ │ -
240
│ │ │ │ -
242 void ClearEdgeSharpness();
│ │ │ │ -
244
│ │ │ │ -
246
│ │ │ │ -
251
│ │ │ │ -
253 bool IsManifold() const;
│ │ │ │ -
254
│ │ │ │ -
256 bool IsBoundary() const;
│ │ │ │ -
257
│ │ │ │ -
259 bool HasIncidentFaceSizes() const;
│ │ │ │ -
260
│ │ │ │ -
262 int GetIncidentFaceSize(int faceIndex) const;
│ │ │ │ -
263
│ │ │ │ -
265 bool HasVertexSharpness() const;
│ │ │ │ +
211 int GetNumBoundaryCoords() const { return _numBoundaryPoints; }
│ │ │ │ +
212
│ │ │ │ +
214 int GetNumInteriorCoords() const { return _numInteriorPoints; }
│ │ │ │ +
215
│ │ │ │ +
218 int GetNumEdgeCoords(int edge) const { return _outerRates[edge] - 1; }
│ │ │ │ +
219
│ │ │ │ +
221 template <typename REAL>
│ │ │ │ +
222 int GetCoords(REAL coordTuples[]) const;
│ │ │ │ +
223
│ │ │ │ +
225 template <typename REAL>
│ │ │ │ +
226 int GetBoundaryCoords(REAL coordTuples[]) const;
│ │ │ │ +
227
│ │ │ │ +
229 template <typename REAL>
│ │ │ │ +
230 int GetInteriorCoords(REAL coordTuples[]) const;
│ │ │ │ +
231
│ │ │ │ +
233 template <typename REAL>
│ │ │ │ +
234 int GetVertexCoord(int vertex, REAL coordTuples[]) const;
│ │ │ │ +
235
│ │ │ │ +
238 template <typename REAL>
│ │ │ │ +
239 int GetEdgeCoords(int edge, REAL coordTuples[]) const;
│ │ │ │ +
241
│ │ │ │ +
243
│ │ │ │ +
253
│ │ │ │ +
255 int GetNumFacets() const { return _numFacets; }
│ │ │ │ +
256
│ │ │ │ +
258 int GetFacetSize() const { return _facetSize; }
│ │ │ │ +
259
│ │ │ │ +
261 int GetFacetStride() const { return _facetStride; }
│ │ │ │ +
262
│ │ │ │ +
264 int GetFacets(int facetTuples[]) const;
│ │ │ │
266
│ │ │ │ -
268 float GetVertexSharpness() const;
│ │ │ │ -
269
│ │ │ │ -
271 bool HasEdgeSharpness() const;
│ │ │ │ -
272
│ │ │ │ -
274 float GetManifoldEdgeSharpness(int edgeIndex) const;
│ │ │ │ -
275
│ │ │ │ -
277 void GetIncidentFaceEdgeSharpness(int faceIndex,
│ │ │ │ -
278 float * leadingEdgeSharp, float * trailingEdgeSharp) const;
│ │ │ │ -
280
│ │ │ │ -
281protected:
│ │ │ │ -
283 friend class FaceVertex;
│ │ │ │ -
284
│ │ │ │ -
285 VertexDescriptor() { }
│ │ │ │ - │ │ │ │ -
287
│ │ │ │ -
288 typedef Vtr::internal::StackBuffer<int,8,true> IntBuffer;
│ │ │ │ -
289 typedef Vtr::internal::StackBuffer<float,16,true> FloatBuffer;
│ │ │ │ -
290
│ │ │ │ -
291 void initFaceSizes();
│ │ │ │ -
292 void initEdgeSharpness();
│ │ │ │ -
294
│ │ │ │ -
295protected:
│ │ │ │ -
297 // Member variables assigned through the above interface:
│ │ │ │ -
298 unsigned short _isValid : 1;
│ │ │ │ -
299 unsigned short _isInitialized : 1;
│ │ │ │ -
300 unsigned short _isFinalized : 1;
│ │ │ │ -
301
│ │ │ │ -
302 unsigned short _isManifold : 1;
│ │ │ │ -
303 unsigned short _isBoundary : 1;
│ │ │ │ -
304
│ │ │ │ -
305 unsigned short _hasFaceSizes : 1;
│ │ │ │ -
306 unsigned short _hasEdgeSharpness : 1;
│ │ │ │ -
307
│ │ │ │ -
308 short _numFaces;
│ │ │ │ -
309 float _vertSharpness;
│ │ │ │ -
310
│ │ │ │ -
311 FloatBuffer _faceEdgeSharpness;
│ │ │ │ -
312 IntBuffer _faceSizeOffsets;
│ │ │ │ -
314};
│ │ │ │ -
│ │ │ │ -
315
│ │ │ │ -
316//
│ │ │ │ -
317// Public inline methods for simple assignment:
│ │ │ │ -
318//
│ │ │ │ -
319inline bool
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
321 return _isValid;
│ │ │ │ -
322}
│ │ │ │ -
│ │ │ │ -
323
│ │ │ │ -
324inline void
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
326 _isManifold = isManifold;
│ │ │ │ -
327}
│ │ │ │ -
│ │ │ │ -
328inline bool
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
330 return _isManifold;
│ │ │ │ -
331}
│ │ │ │ -
│ │ │ │ -
332
│ │ │ │ -
333inline void
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
335 _isBoundary = isBoundary;
│ │ │ │ -
336}
│ │ │ │ -
│ │ │ │ -
337inline bool
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
339 return _isBoundary;
│ │ │ │ -
340}
│ │ │ │ -
│ │ │ │ -
341
│ │ │ │ -
342//
│ │ │ │ -
343// Public inline methods involving sizes of incident faces:
│ │ │ │ -
344//
│ │ │ │ -
345inline bool
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
347 return _hasFaceSizes;
│ │ │ │ -
348}
│ │ │ │ -
│ │ │ │ -
349inline void
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
351 _hasFaceSizes = false;
│ │ │ │ -
352}
│ │ │ │ -
│ │ │ │ -
353
│ │ │ │ -
354inline void
│ │ │ │ -
│ │ │ │ -
355VertexDescriptor::SetIncidentFaceSize(int incFaceIndex, int faceSize) {
│ │ │ │ -
356
│ │ │ │ -
357 if (!_hasFaceSizes) initFaceSizes();
│ │ │ │ -
358
│ │ │ │ -
359 _faceSizeOffsets[incFaceIndex] = faceSize;
│ │ │ │ -
360}
│ │ │ │ -
│ │ │ │ -
361inline int
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
363
│ │ │ │ -
364 return _isFinalized ?
│ │ │ │ -
365 (_faceSizeOffsets[incFaceIndex+1] - _faceSizeOffsets[incFaceIndex]) :
│ │ │ │ -
366 _faceSizeOffsets[incFaceIndex];
│ │ │ │ -
367}
│ │ │ │ -
│ │ │ │ -
368
│ │ │ │ -
369//
│ │ │ │ -
370// Public inline methods involving vertex sharpness:
│ │ │ │ -
371//
│ │ │ │ -
372inline bool
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
374 return _vertSharpness > 0.0f;
│ │ │ │ -
375}
│ │ │ │ -
│ │ │ │ -
376inline void
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
378 _vertSharpness = 0.0f;
│ │ │ │ -
379}
│ │ │ │ -
│ │ │ │ -
380
│ │ │ │ -
381inline void
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
383 _vertSharpness = vertSharpness;
│ │ │ │ -
384}
│ │ │ │ -
│ │ │ │ -
385inline float
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
387 return _vertSharpness;
│ │ │ │ -
388}
│ │ │ │ -
│ │ │ │ -
389
│ │ │ │ -
390//
│ │ │ │ -
391// Public inline methods involving vertex sharpness:
│ │ │ │ -
392//
│ │ │ │ -
393inline bool
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
395 return _hasEdgeSharpness;
│ │ │ │ -
396}
│ │ │ │ -
│ │ │ │ -
397inline void
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
399 _hasEdgeSharpness = false;
│ │ │ │ -
400}
│ │ │ │ -
│ │ │ │ -
401
│ │ │ │ -
402inline void
│ │ │ │ -
│ │ │ │ -
403VertexDescriptor::SetManifoldEdgeSharpness(int edgeIndex, float sharpness) {
│ │ │ │ -
404
│ │ │ │ -
405 if (!_hasEdgeSharpness) initEdgeSharpness();
│ │ │ │ -
406
│ │ │ │ -
407 // Assign the leading edge of the face after the edge (even index):
│ │ │ │ -
408 if (edgeIndex < _numFaces) {
│ │ │ │ -
409 _faceEdgeSharpness[2*edgeIndex] = sharpness;
│ │ │ │ -
410 }
│ │ │ │ -
411
│ │ │ │ -
412 // Assign the trailing edge of the face before the edge (odd index):
│ │ │ │ -
413 if (edgeIndex > 0) {
│ │ │ │ -
414 _faceEdgeSharpness[2*edgeIndex-1] = sharpness;
│ │ │ │ -
415 } else if (!IsBoundary()) {
│ │ │ │ -
416 _faceEdgeSharpness[2*_numFaces-1] = sharpness;
│ │ │ │ -
417 }
│ │ │ │ -
418}
│ │ │ │ -
│ │ │ │ -
419inline float
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
421
│ │ │ │ -
422 // All edges are first of the pair (even index) except last of boundary
│ │ │ │ -
423 return _faceEdgeSharpness[2*edgeIndex - (edgeIndex == _numFaces)];
│ │ │ │ -
424}
│ │ │ │ -
│ │ │ │ -
425
│ │ │ │ -
426inline void
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
428 float leadingEdgeSharpness, float trailingEdgeSharpness) {
│ │ │ │ -
429
│ │ │ │ -
430 if (!_hasEdgeSharpness) initEdgeSharpness();
│ │ │ │ -
431
│ │ │ │ -
432 _faceEdgeSharpness[2*faceIndex ] = leadingEdgeSharpness;
│ │ │ │ -
433 _faceEdgeSharpness[2*faceIndex+1] = trailingEdgeSharpness;
│ │ │ │ -
434}
│ │ │ │ -
│ │ │ │ -
435inline void
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
437 float * leadingEdgeSharpness, float * trailingEdgeSharpness) const {
│ │ │ │ -
438
│ │ │ │ -
439 *leadingEdgeSharpness = _faceEdgeSharpness[2*faceIndex];
│ │ │ │ -
440 *trailingEdgeSharpness = _faceEdgeSharpness[2*faceIndex+1];
│ │ │ │ -
441}
│ │ │ │ -
│ │ │ │ -
442
│ │ │ │ -
443} // end namespace Bfr
│ │ │ │ -
444
│ │ │ │ -
445} // end namespace OPENSUBDIV_VERSION
│ │ │ │ -
446using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
447} // end namespace OpenSubdiv
│ │ │ │ -
448
│ │ │ │ -
449#endif /* OPENSUBDIV3_BFR_VERTEX_DESCRIPTOR_H */
│ │ │ │ +
268
│ │ │ │ +
283
│ │ │ │ +
285 void TransformFacetCoordIndices(int facetTuples[], int commonOffset);
│ │ │ │ +
286
│ │ │ │ +
289 void TransformFacetCoordIndices(int facetTuples[],
│ │ │ │ +
290 int const boundaryIndices[],
│ │ │ │ +
291 int interiorOffset);
│ │ │ │ +
292
│ │ │ │ +
294 void TransformFacetCoordIndices(int facetTuples[],
│ │ │ │ +
295 int const boundaryIndices[],
│ │ │ │ +
296 int const interiorIndices[]);
│ │ │ │ +
298
│ │ │ │ +
299private:
│ │ │ │ +
300 // Private initialization methods:
│ │ │ │ +
301 bool validateArguments(Parameterization const & p,
│ │ │ │ +
302 int nRates, int const rates[], Options const & options);
│ │ │ │ +
303
│ │ │ │ +
304 void initialize(Parameterization const & p,
│ │ │ │ +
305 int nRates, int const rates[], Options const & options);
│ │ │ │ +
306
│ │ │ │ +
307 void initializeDefaults();
│ │ │ │ +
308 int initializeRates(int nRates, int const rates[]);
│ │ │ │ +
309 void initializeInventoryForParamTri(int sumOfOuterRates);
│ │ │ │ +
310 void initializeInventoryForParamQuad(int sumOfOuterRates);
│ │ │ │ +
311 void initializeInventoryForParamQPoly(int sumOfOuterRates);
│ │ │ │ +
312
│ │ │ │ +
313private:
│ │ │ │ +
314 // Private members:
│ │ │ │ +
315 Parameterization _param;
│ │ │ │ +
316
│ │ │ │ +
317 unsigned short _isValid : 1;
│ │ │ │ +
318 unsigned short _isUniform : 1;
│ │ │ │ +
319 unsigned short _triangulate : 1;
│ │ │ │ +
320 unsigned short _singleFace : 1;
│ │ │ │ +
321 unsigned short _segmentedFace : 1;
│ │ │ │ +
322 unsigned short _triangleFan : 1;
│ │ │ │ +
323 unsigned short _splitQuad : 1;
│ │ │ │ +
324
│ │ │ │ +
325 short _facetSize;
│ │ │ │ +
326 int _facetStride;
│ │ │ │ +
327 int _coordStride;
│ │ │ │ +
328
│ │ │ │ +
329 int _numGivenRates;
│ │ │ │ +
330 int _numBoundaryPoints;
│ │ │ │ +
331 int _numInteriorPoints;
│ │ │ │ +
332 int _numFacets;
│ │ │ │ +
333
│ │ │ │ +
334 int _innerRates[2];
│ │ │ │ +
335 int* _outerRates;
│ │ │ │ +
336 int _outerRatesLocal[4];
│ │ │ │ +
337};
│ │ │ │ +
│ │ │ │ +
338
│ │ │ │ +
339//
│ │ │ │ +
340// Inline implementations:
│ │ │ │ +
341//
│ │ │ │ + │ │ │ │ +
│ │ │ │ + │ │ │ │ +
344 _preserveQuads = on;
│ │ │ │ +
345 return *this;
│ │ │ │ +
346}
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
│ │ │ │ + │ │ │ │ +
349 _facetSize4 = (numIndices == 4);
│ │ │ │ +
350 return *this;
│ │ │ │ +
351}
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
│ │ │ │ + │ │ │ │ +
354 _facetStride = (short) stride;
│ │ │ │ +
355 return *this;
│ │ │ │ +
356}
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
│ │ │ │ + │ │ │ │ +
359 _coordStride = (short) stride;
│ │ │ │ +
360 return *this;
│ │ │ │ +
361}
│ │ │ │ +
│ │ │ │ +
362
│ │ │ │ +
363template <typename REAL>
│ │ │ │ +
364inline int
│ │ │ │ +
│ │ │ │ +
365Tessellation::GetVertexCoord(int vertex, REAL coord[]) const {
│ │ │ │ +
366 _param.GetVertexCoord(vertex, coord);
│ │ │ │ +
367 return 1;
│ │ │ │ +
368}
│ │ │ │ +
│ │ │ │ +
369
│ │ │ │ +
370template <typename REAL>
│ │ │ │ +
371inline int
│ │ │ │ +
│ │ │ │ +
372Tessellation::GetCoords(REAL coordTuples[]) const {
│ │ │ │ +
373 int nCoords = GetBoundaryCoords(coordTuples);
│ │ │ │ +
374 nCoords += GetInteriorCoords(coordTuples + nCoords * _coordStride);
│ │ │ │ +
375 return nCoords;
│ │ │ │ +
376}
│ │ │ │ +
│ │ │ │ +
377
│ │ │ │ +
378} // end namespace Bfr
│ │ │ │ +
379
│ │ │ │ +
380} // end namespace OPENSUBDIV_VERSION
│ │ │ │ +
381using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
382
│ │ │ │ +
383} // end namespace OpenSubdiv
│ │ │ │ +
384
│ │ │ │ +
385#endif /* OPENSUBDIV3_BFR_TESSELLATION */
│ │ │ │ │ │ │ │ -
Simple class used by subclasses of SurfaceFactory to describe a vertex.
│ │ │ │ -
float GetVertexSharpness() const
Return the sharpness of the vertex.
│ │ │ │ -
bool Finalize()
Terminate the sequence of specifications.
│ │ │ │ -
void SetManifold(bool isManifold)
Declare the vertex neighborhood as manifold (ordered)
│ │ │ │ -
bool Initialize(int numIncidentFaces)
Initialize specification with the number of incident faces.
│ │ │ │ -
bool IsManifold() const
Return if vertex neighborhood is manifold.
│ │ │ │ -
bool HasEdgeSharpness() const
Return if sharpness was assigned to the incident edges.
│ │ │ │ -
int GetIncidentFaceSize(int faceIndex) const
Return the size of an incident face.
│ │ │ │ -
float GetManifoldEdgeSharpness(int edgeIndex) const
Return the sharpness assigned to a manifold edge.
│ │ │ │ -
void SetIncidentFaceEdgeSharpness(int faceIndex, float leadingEdgeSharp, float trailingEdgeSharp)
Assign sharpness to the edges of an incident face.
│ │ │ │ -
bool HasVertexSharpness() const
Return if sharpness was assigned to the vertex.
│ │ │ │ -
void ClearIncidentFaceSizes()
Remove any assigned sizes of incident faces.
│ │ │ │ -
void SetVertexSharpness(float sharpness)
Assign sharpness to the vertex.
│ │ │ │ -
void ClearVertexSharpness()
Remove any sharpness assigned to the vertex.
│ │ │ │ -
void ClearEdgeSharpness()
Remove any sharpness assigned to the incident edges.
│ │ │ │ -
void GetIncidentFaceEdgeSharpness(int faceIndex, float *leadingEdgeSharp, float *trailingEdgeSharp) const
Return the sharpness assigned to edges of an incident face.
│ │ │ │ -
bool IsBoundary() const
Return if vertex neighborhood is on a boundary.
│ │ │ │ -
bool IsValid() const
Return if instance is valid.
│ │ │ │ -
bool HasIncidentFaceSizes() const
Return if the sizes of incident faces are assigned.
│ │ │ │ -
void SetBoundary(bool isOnBoundary)
Declare the vertex neighborhood as being on a boundary.
│ │ │ │ -
void SetIncidentFaceSize(int faceIndex, int faceSize)
Assign the size of an incident face.
│ │ │ │ -
void SetManifoldEdgeSharpness(int edgeIndex, float edgeSharpness)
Assign sharpness to the edge of a manifold neighborhood.
│ │ │ │ +
Simple class defining the 2D parameterization of a face.
│ │ │ │ +
int GetFaceSize() const
Returns the size (number of vertices) of the corresponding face.
│ │ │ │ +
void GetVertexCoord(int vertexIndex, REAL uvCoord[2]) const
Returns the (u,v) coordinate of a given vertex.
│ │ │ │ +
Encapsulates a specific tessellation pattern of a Parameterization.
│ │ │ │ +
int GetFaceSize() const
Return the size of the face.
│ │ │ │ +
int GetNumBoundaryCoords() const
Return the number of boundary coordinates.
│ │ │ │ + │ │ │ │ +
void TransformFacetCoordIndices(int facetTuples[], int const boundaryIndices[], int const interiorIndices[])
Reassign all facet coordinate indices.
│ │ │ │ +
int GetCoordStride() const
Return the number of elements between each coordinate.
│ │ │ │ +
int GetNumEdgeCoords(int edge) const
Return the number of coordinates within a given edge (excluding those at its end vertices)
│ │ │ │ +
int GetInteriorCoords(REAL coordTuples[]) const
Retrieve the coordinates for the boundary.
│ │ │ │ +
int GetFacetStride() const
Return the number of elements between each facet.
│ │ │ │ +
bool IsUniform() const
Return if the pattern is uniform.
│ │ │ │ +
int GetNumCoords() const
Return the number of coordinates in the entire pattern.
│ │ │ │ +
int GetCoords(REAL coordTuples[]) const
Retrieve the coordinates for the entire pattern.
│ │ │ │ +
void TransformFacetCoordIndices(int facetTuples[], int commonOffset)
Apply a common offset to all facet coordinate indices.
│ │ │ │ +
Tessellation(Parameterization const &p, int numRates, int const rates[], Options const &options=Options())
General constructor providing multiple tessellation rates for a non-uniform tessellation.
│ │ │ │ +
Parameterization GetParameterization() const
Return the Parameterization.
│ │ │ │ +
void TransformFacetCoordIndices(int facetTuples[], int const boundaryIndices[], int interiorOffset)
Reassign indices of boundary coordinates while offseting those of interior coordinates.
│ │ │ │ +
int GetFacetSize() const
Return the number of indices assigned to each facet.
│ │ │ │ +
Tessellation()=delete
Default construction is unavailable.
│ │ │ │ +
Tessellation(Parameterization const &p, int uniformRate, Options const &options=Options())
Simple constructor providing a single uniform tessellation rate.
│ │ │ │ +
int GetFacets(int facetTuples[]) const
Retrieve the facet indices for the entire pattern.
│ │ │ │ +
int GetNumFacets() const
Return the number of facets in the entire pattern.
│ │ │ │ +
int GetNumInteriorCoords() const
Return the number of interior coordinates.
│ │ │ │ +
int GetVertexCoord(int vertex, REAL coordTuples[]) const
Retrieve the coordinate for a given vertex of the face.
│ │ │ │ +
int GetBoundaryCoords(REAL coordTuples[]) const
Retrieve the coordinates for the boundary.
│ │ │ │ + │ │ │ │ +
int GetRates(int rates[]) const
Retrieve the rates assigned.
│ │ │ │ +
bool IsValid() const
Return true if correctly initialized.
│ │ │ │ +
Tessellation & operator=(Tessellation const &)=delete
│ │ │ │ +
int GetEdgeCoords(int edge, REAL coordTuples[]) const
Retrieve the coordinates for a given edge of the face (excluding those at its end vertices)
│ │ │ │ +
Options configure a Tessellation to specify the nature of both its results and the structure of the c...
│ │ │ │ + │ │ │ │ +
int GetCoordStride() const
Return the stride between (u,v) pairs.
│ │ │ │ +
Options & SetFacetSize(int numIndices)
Assign the number of indices per facet (must be 3 or 4, default is 3)
│ │ │ │ +
int GetFacetStride() const
Return the stride between facets.
│ │ │ │ + │ │ │ │ +
Options & SetCoordStride(int stride)
Assign the stride between (u,v) pairs (default is 2)
│ │ │ │ +
Options & SetFacetStride(int stride)
Assign the stride between facets (default is facet size)
│ │ │ │ +
bool PreserveQuads() const
Return if preservation of quads is set.
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,12 +1,12 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -vertexDescriptor.h │ │ │ │ │ +tessellation.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ 2// Copyright 2021 Pixar │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ @@ -24,446 +24,367 @@ │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ 24 │ │ │ │ │ -25#ifndef OPENSUBDIV3_BFR_VERTEX_DESCRIPTOR_H │ │ │ │ │ -26#define OPENSUBDIV3_BFR_VERTEX_DESCRIPTOR_H │ │ │ │ │ +25#ifndef OPENSUBDIV3_BFR_TESSELLATION_H │ │ │ │ │ +26#define OPENSUBDIV3_BFR_TESSELLATION_H │ │ │ │ │ 27 │ │ │ │ │ 28#include "../version.h" │ │ │ │ │ 29 │ │ │ │ │ -30#include "../vtr/stackBuffer.h" │ │ │ │ │ +30#include "../bfr/parameterization.h" │ │ │ │ │ 31 │ │ │ │ │ 32namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ 33namespace OPENSUBDIV_VERSION { │ │ │ │ │ 34 │ │ │ │ │ 35namespace Bfr { │ │ │ │ │ 36 │ │ │ │ │ -50// │ │ │ │ │ -51// WIP - need to migrate some of these comments into Doxygen │ │ │ │ │ -52// - others will be moved to the external documentation │ │ │ │ │ -53// │ │ │ │ │ -54// It is used by subclasses of SurfaceFactory to provide a complete │ │ │ │ │ -55// topological description for each vertex of a face, i.e. invoked via │ │ │ │ │ -56// the virtual method: │ │ │ │ │ -57// │ │ │ │ │ -58// int populateFaceVertexDescriptor(Index baseFace, │ │ │ │ │ -59// int cornerVertex, │ │ │ │ │ -60// VertexDescriptor & v) const; │ │ │ │ │ -61// │ │ │ │ │ -62// Assignment of the full topology can be involved in the presence of │ │ │ │ │ -63// irregular faces, non-manifold topology or creasing around a vertex, but │ │ │ │ │ -64// many cases will be simple. For example, to specify a regular boundary │ │ │ │ │ -65// vertex of a Catmark mesh without any optional sharpness: │ │ │ │ │ -66// │ │ │ │ │ -67// int numIncidentFaces = 2; │ │ │ │ │ -68// bool vertexOnBoundary = true; │ │ │ │ │ -69// │ │ │ │ │ -70// vd.Initialize(numIncidentFaces); │ │ │ │ │ -71// vd.SetManifold(true); │ │ │ │ │ -72// vd.SetBoundary(vertexOnBoundary); │ │ │ │ │ -73// vd.ClearIncidentFaceSizes(); │ │ │ │ │ -74// vd.Finalize(); │ │ │ │ │ -75// │ │ │ │ │ -76// For a more general example, to assign a vertex of some valence whose │ │ │ │ │ -77// incident faces are of different sizes (e.g. required when triangles │ │ │ │ │ -78// appear around a vertex in an otherwise quad-dominant Catmark mesh): │ │ │ │ │ -79// │ │ │ │ │ -80// int numIncidentFaces = meshVertex.GetNumIncidentFaces(); │ │ │ │ │ -81// bool vertexOnBoundary = meshVertex.IsBoundar(); │ │ │ │ │ -82// │ │ │ │ │ -83// vd.Initialize(numIncidentFaces); │ │ │ │ │ -84// vd.SetManifold(true); │ │ │ │ │ -85// vd.SetBoundary(vertexOnBoundary); │ │ │ │ │ -86// │ │ │ │ │ -87// for (int i = 0; i < numIncidentFaces; ++i) { │ │ │ │ │ -88// vd.SetIncidentFaceSize(i, meshVertex.GetIncidentFaceSize(i)); │ │ │ │ │ -89// } │ │ │ │ │ -90// vd.Finalize(); │ │ │ │ │ -91// │ │ │ │ │ -92// These examples specify the incident faces as forming a manifold ring │ │ │ │ │ -93// (or half-ring) around the vertex, i.e. they can be specified as a │ │ │ │ │ -94// continuous, connected sequence in counter-clockwise order (and also │ │ │ │ │ -95// without degeneracies). In the case of a boundary vertex, the first │ │ │ │ │ -96// face must be on the leading edge of the boundary while the last is on │ │ │ │ │ -97// the trailing edge. For an interior vertex, which face is specified │ │ │ │ │ -98// first does not matter (since the set is periodic). │ │ │ │ │ -99// │ │ │ │ │ -100// In both cases, the location of the base face in this sequence -- the │ │ │ │ │ -101// face whose corner vertex is being described here -- must be specified │ │ │ │ │ -102// in the return value to populateFaceVertexDescriptor() (e.g. when a │ │ │ │ │ -103// boundary vertex has 3 incident faces, a return value of 0, 1 or 2 │ │ │ │ │ -104// will indicate which is the base face). │ │ │ │ │ -105// │ │ │ │ │ -106// The corresponding methods to specify mesh control vertex indices (or │ │ │ │ │ -107// face-varying indices) complete the specification of the neighborhood: │ │ │ │ │ -108// │ │ │ │ │ -109// int getFaceCornerVertexIndices(Index baseFace, int cornerVertex, │ │ │ │ │ -110// Index vertexIndices[]) const; │ │ │ │ │ -111// │ │ │ │ │ -112// int getFaceCornerFVarValueIndices(Index baseFace, int cornerVertex, │ │ │ │ │ -113// Index fvarValueIndices[], │ │ │ │ │ -114// int fvarChannel) const; │ │ │ │ │ -115// │ │ │ │ │ -116// and are invoked by the Factory when needed. │ │ │ │ │ -117// │ │ │ │ │ -118// For each incident face, the indices for all vertices of that face are │ │ │ │ │ -119// to be specified (not the one-ring or some other subset). These indices │ │ │ │ │ -120// must also be specified in an orientation relative to the vertex, i.e. │ │ │ │ │ -121// for a vertex A and an incident face with face-vertices that may be │ │ │ │ │ -122// stored internally as {D, C, A, B}, they must be specified with A first │ │ │ │ │ -123// as {A, B, C, D}. This may seem a bit cumbersome, but it has clear │ │ │ │ │ -124// advantages when dealing with face-varying indices and unordered faces. │ │ │ │ │ -125// │ │ │ │ │ -126// More compact ways of specifying vertex indices for ordered, manifold │ │ │ │ │ -127// cases may be worth exploring in future, but face-varying indices and │ │ │ │ │ -128// non-manifold (unordered) vertices will always require such a full set, │ │ │ │ │ -129// so both methods will need to co-exist. │ │ │ │ │ -130// │ │ │ │ │ -_1_3_1class _V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r { │ │ │ │ │ -132public: │ │ │ │ │ -133 // The full declaration must be enclosed by calls to these methods: │ │ │ │ │ -134 // │ │ │ │ │ -135 // Note that vertex valences or face sizes in excess of those defined │ │ │ │ │ -136 // in Bfr::Limits (typically 16-bits) are not valid. When specifying │ │ │ │ │ -137 // values in excess of these limits, initialization will fail and/or │ │ │ │ │ -138 // the descriptor will be marked invalid and finalization will fail. │ │ │ │ │ -139 // │ │ │ │ │ -140 │ │ │ │ │ -142 │ │ │ │ │ -149 │ │ │ │ │ -_1_5_1 bool _I_n_i_t_i_a_l_i_z_e(int numIncidentFaces); │ │ │ │ │ -152 │ │ │ │ │ -_1_5_4 bool _F_i_n_a_l_i_z_e(); │ │ │ │ │ -155 │ │ │ │ │ -157 bool _I_s_V_a_l_i_d() const; │ │ │ │ │ -159 │ │ │ │ │ -160 // │ │ │ │ │ -161 // WIP - need to migrate these comments into Doxygen │ │ │ │ │ -162 // │ │ │ │ │ -163 // Three groups of methods describe the topology around a vertex: │ │ │ │ │ -164 // - simple properties (vertex is a boundary, manifold, etc.) │ │ │ │ │ -165 // - sizes of incident faces (constant or size for each face) │ │ │ │ │ -166 // - sharpness of the vertex and its incident edges (optional) │ │ │ │ │ -167 // │ │ │ │ │ -168 │ │ │ │ │ -169 // Manifold and boundary conditions: │ │ │ │ │ -170 // │ │ │ │ │ -171 // The manifold property is a strict condition but preferred for │ │ │ │ │ -172 // efficiency and is usually available from common connected mesh │ │ │ │ │ -173 // representations. When declaring the topology as "manifold", │ │ │ │ │ -174 // the Factory assumes the following: │ │ │ │ │ -175 // │ │ │ │ │ -176 // - all incident faces are "ordered" (counter-clockwise) │ │ │ │ │ -177 // - all incident faces are consistently oriented │ │ │ │ │ -178 // - all incident edges are non-degenerate │ │ │ │ │ -179 // │ │ │ │ │ -180 // If not certain that all of these conditions are met, it is best │ │ │ │ │ -181 // to not declare manifold -- leaving the Factory to make sense of │ │ │ │ │ -182 // the set of incident faces from the face-vertex indices that are │ │ │ │ │ -183 // provided elsewhere. │ │ │ │ │ -184 // │ │ │ │ │ -185 │ │ │ │ │ -187 │ │ │ │ │ -191 │ │ │ │ │ -193 void _S_e_t_M_a_n_i_f_o_l_d(bool isManifold); │ │ │ │ │ -194 │ │ │ │ │ -196 void _S_e_t_B_o_u_n_d_a_r_y(bool isOnBoundary); │ │ │ │ │ -197 │ │ │ │ │ -199 void _S_e_t_I_n_c_i_d_e_n_t_F_a_c_e_S_i_z_e(int faceIndex, int faceSize); │ │ │ │ │ -200 │ │ │ │ │ -202 void _C_l_e_a_r_I_n_c_i_d_e_n_t_F_a_c_e_S_i_z_e_s(); │ │ │ │ │ +_5_1class _T_e_s_s_e_l_l_a_t_i_o_n { │ │ │ │ │ +52public: │ │ │ │ │ +_6_5 class _O_p_t_i_o_n_s { │ │ │ │ │ +66 public: │ │ │ │ │ +_6_7 _O_p_t_i_o_n_s() : _preserveQuads(false), _facetSize4(false), │ │ │ │ │ +68 _coordStride(0), _facetStride(0) { } │ │ │ │ │ +69 │ │ │ │ │ +72 _O_p_t_i_o_n_s & _P_r_e_s_e_r_v_e_Q_u_a_d_s(bool on); │ │ │ │ │ +_7_4 bool _P_r_e_s_e_r_v_e_Q_u_a_d_s() const { return _preserveQuads; } │ │ │ │ │ +75 │ │ │ │ │ +78 _O_p_t_i_o_n_s & _S_e_t_F_a_c_e_t_S_i_z_e(int numIndices); │ │ │ │ │ +79 // @brief Return the number of indices per facet │ │ │ │ │ +_8_0 int _G_e_t_F_a_c_e_t_S_i_z_e() const { return 3 + (int)_facetSize4; } │ │ │ │ │ +81 │ │ │ │ │ +83 _O_p_t_i_o_n_s & _S_e_t_F_a_c_e_t_S_t_r_i_d_e(int stride); │ │ │ │ │ +_8_5 int _G_e_t_F_a_c_e_t_S_t_r_i_d_e() const { return _facetStride; } │ │ │ │ │ +86 │ │ │ │ │ +88 _O_p_t_i_o_n_s & _S_e_t_C_o_o_r_d_S_t_r_i_d_e(int stride); │ │ │ │ │ +_9_0 int _G_e_t_C_o_o_r_d_S_t_r_i_d_e() const { return _coordStride; } │ │ │ │ │ +91 │ │ │ │ │ +92 private: │ │ │ │ │ +93 unsigned int _preserveQuads : 1; │ │ │ │ │ +94 unsigned int _facetSize4 : 1; │ │ │ │ │ +95 │ │ │ │ │ +96 short _coordStride; │ │ │ │ │ +97 short _facetStride; │ │ │ │ │ +98 }; │ │ │ │ │ +99 │ │ │ │ │ +100public: │ │ │ │ │ +102 │ │ │ │ │ +111 │ │ │ │ │ +_1_1_8 _T_e_s_s_e_l_l_a_t_i_o_n(_P_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n const & p, int uniformRate, │ │ │ │ │ +119 _O_p_t_i_o_n_s const & options = _O_p_t_i_o_n_s()); │ │ │ │ │ +120 │ │ │ │ │ +_1_5_8 _T_e_s_s_e_l_l_a_t_i_o_n(_P_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n const & p, int numRates, int const rates[], │ │ │ │ │ +159 _O_p_t_i_o_n_s const & options = _O_p_t_i_o_n_s()); │ │ │ │ │ +160 │ │ │ │ │ +_1_6_2 bool _I_s_V_a_l_i_d() const { return _isValid; } │ │ │ │ │ +163 │ │ │ │ │ +_1_6_5 _T_e_s_s_e_l_l_a_t_i_o_n() = delete; │ │ │ │ │ +166 │ │ │ │ │ +_1_6_7 _T_e_s_s_e_l_l_a_t_i_o_n(_T_e_s_s_e_l_l_a_t_i_o_n const &) = delete; │ │ │ │ │ +_1_6_8 _T_e_s_s_e_l_l_a_t_i_o_n & _o_p_e_r_a_t_o_r_=(_T_e_s_s_e_l_l_a_t_i_o_n const &) = delete; │ │ │ │ │ +_1_6_9 _~_T_e_s_s_e_l_l_a_t_i_o_n(); │ │ │ │ │ +171 │ │ │ │ │ +173 │ │ │ │ │ +177 │ │ │ │ │ +_1_7_9 _P_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n _G_e_t_P_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n() const { return _param; } │ │ │ │ │ +180 │ │ │ │ │ +_1_8_2 int _G_e_t_F_a_c_e_S_i_z_e() const { return _param._G_e_t_F_a_c_e_S_i_z_e(); } │ │ │ │ │ +183 │ │ │ │ │ +_1_8_5 int _G_e_t_R_a_t_e_s(int rates[]) const; │ │ │ │ │ +186 │ │ │ │ │ +_1_8_8 bool _I_s_U_n_i_f_o_r_m() const { return _isUniform; } │ │ │ │ │ +190 │ │ │ │ │ +192 │ │ │ │ │ 203 │ │ │ │ │ -205 void _S_e_t_V_e_r_t_e_x_S_h_a_r_p_n_e_s_s(float sharpness); │ │ │ │ │ +_2_0_5 int _G_e_t_N_u_m_C_o_o_r_d_s() const { return _numInteriorPoints + _numBoundaryPoints; │ │ │ │ │ +} │ │ │ │ │ 206 │ │ │ │ │ -208 void _C_l_e_a_r_V_e_r_t_e_x_S_h_a_r_p_n_e_s_s(); │ │ │ │ │ +_2_0_8 int _G_e_t_C_o_o_r_d_S_t_r_i_d_e() const { return _coordStride; } │ │ │ │ │ 209 │ │ │ │ │ -221 void _S_e_t_M_a_n_i_f_o_l_d_E_d_g_e_S_h_a_r_p_n_e_s_s(int edgeIndex, float edgeSharpness); │ │ │ │ │ -222 │ │ │ │ │ -238 void _S_e_t_I_n_c_i_d_e_n_t_F_a_c_e_E_d_g_e_S_h_a_r_p_n_e_s_s(int faceIndex, float leadingEdgeSharp, │ │ │ │ │ -239 float trailingEdgeSharp); │ │ │ │ │ -240 │ │ │ │ │ -242 void _C_l_e_a_r_E_d_g_e_S_h_a_r_p_n_e_s_s(); │ │ │ │ │ -244 │ │ │ │ │ -246 │ │ │ │ │ -251 │ │ │ │ │ -253 bool _I_s_M_a_n_i_f_o_l_d() const; │ │ │ │ │ -254 │ │ │ │ │ -256 bool _I_s_B_o_u_n_d_a_r_y() const; │ │ │ │ │ -257 │ │ │ │ │ -259 bool _H_a_s_I_n_c_i_d_e_n_t_F_a_c_e_S_i_z_e_s() const; │ │ │ │ │ -260 │ │ │ │ │ -262 int _G_e_t_I_n_c_i_d_e_n_t_F_a_c_e_S_i_z_e(int faceIndex) const; │ │ │ │ │ -263 │ │ │ │ │ -265 bool _H_a_s_V_e_r_t_e_x_S_h_a_r_p_n_e_s_s() const; │ │ │ │ │ +_2_1_1 int _G_e_t_N_u_m_B_o_u_n_d_a_r_y_C_o_o_r_d_s() const { return _numBoundaryPoints; } │ │ │ │ │ +212 │ │ │ │ │ +_2_1_4 int _G_e_t_N_u_m_I_n_t_e_r_i_o_r_C_o_o_r_d_s() const { return _numInteriorPoints; } │ │ │ │ │ +215 │ │ │ │ │ +_2_1_8 int _G_e_t_N_u_m_E_d_g_e_C_o_o_r_d_s(int edge) const { return _outerRates[edge] - 1; } │ │ │ │ │ +219 │ │ │ │ │ +221 template │ │ │ │ │ +222 int _G_e_t_C_o_o_r_d_s(REAL coordTuples[]) const; │ │ │ │ │ +223 │ │ │ │ │ +225 template │ │ │ │ │ +_2_2_6 int _G_e_t_B_o_u_n_d_a_r_y_C_o_o_r_d_s(REAL coordTuples[]) const; │ │ │ │ │ +227 │ │ │ │ │ +229 template │ │ │ │ │ +_2_3_0 int _G_e_t_I_n_t_e_r_i_o_r_C_o_o_r_d_s(REAL coordTuples[]) const; │ │ │ │ │ +231 │ │ │ │ │ +233 template │ │ │ │ │ +234 int _G_e_t_V_e_r_t_e_x_C_o_o_r_d(int vertex, REAL coordTuples[]) const; │ │ │ │ │ +235 │ │ │ │ │ +238 template │ │ │ │ │ +_2_3_9 int _G_e_t_E_d_g_e_C_o_o_r_d_s(int edge, REAL coordTuples[]) const; │ │ │ │ │ +241 │ │ │ │ │ +243 │ │ │ │ │ +253 │ │ │ │ │ +_2_5_5 int _G_e_t_N_u_m_F_a_c_e_t_s() const { return _numFacets; } │ │ │ │ │ +256 │ │ │ │ │ +_2_5_8 int _G_e_t_F_a_c_e_t_S_i_z_e() const { return _facetSize; } │ │ │ │ │ +259 │ │ │ │ │ +_2_6_1 int _G_e_t_F_a_c_e_t_S_t_r_i_d_e() const { return _facetStride; } │ │ │ │ │ +262 │ │ │ │ │ +_2_6_4 int _G_e_t_F_a_c_e_t_s(int facetTuples[]) const; │ │ │ │ │ 266 │ │ │ │ │ -268 float _G_e_t_V_e_r_t_e_x_S_h_a_r_p_n_e_s_s() const; │ │ │ │ │ -269 │ │ │ │ │ -271 bool _H_a_s_E_d_g_e_S_h_a_r_p_n_e_s_s() const; │ │ │ │ │ -272 │ │ │ │ │ -274 float _G_e_t_M_a_n_i_f_o_l_d_E_d_g_e_S_h_a_r_p_n_e_s_s(int edgeIndex) const; │ │ │ │ │ -275 │ │ │ │ │ -277 void _G_e_t_I_n_c_i_d_e_n_t_F_a_c_e_E_d_g_e_S_h_a_r_p_n_e_s_s(int faceIndex, │ │ │ │ │ -278 float * leadingEdgeSharp, float * trailingEdgeSharp) const; │ │ │ │ │ -280 │ │ │ │ │ -281protected: │ │ │ │ │ -283 friend class FaceVertex; │ │ │ │ │ -284 │ │ │ │ │ -285 _V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r() { } │ │ │ │ │ -286 _~_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r() { } │ │ │ │ │ -287 │ │ │ │ │ -288 typedef Vtr::internal::StackBuffer IntBuffer; │ │ │ │ │ -289 typedef Vtr::internal::StackBuffer FloatBuffer; │ │ │ │ │ -290 │ │ │ │ │ -291 void initFaceSizes(); │ │ │ │ │ -292 void initEdgeSharpness(); │ │ │ │ │ -294 │ │ │ │ │ -295protected: │ │ │ │ │ -297 // Member variables assigned through the above interface: │ │ │ │ │ -298 unsigned short _isValid : 1; │ │ │ │ │ -299 unsigned short _isInitialized : 1; │ │ │ │ │ -300 unsigned short _isFinalized : 1; │ │ │ │ │ -301 │ │ │ │ │ -302 unsigned short _isManifold : 1; │ │ │ │ │ -303 unsigned short _isBoundary : 1; │ │ │ │ │ -304 │ │ │ │ │ -305 unsigned short _hasFaceSizes : 1; │ │ │ │ │ -306 unsigned short _hasEdgeSharpness : 1; │ │ │ │ │ -307 │ │ │ │ │ -308 short _numFaces; │ │ │ │ │ -309 float _vertSharpness; │ │ │ │ │ -310 │ │ │ │ │ -311 FloatBuffer _faceEdgeSharpness; │ │ │ │ │ -312 IntBuffer _faceSizeOffsets; │ │ │ │ │ -314}; │ │ │ │ │ -315 │ │ │ │ │ -316// │ │ │ │ │ -317// Public inline methods for simple assignment: │ │ │ │ │ -318// │ │ │ │ │ -319inline bool │ │ │ │ │ -_3_2_0_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_I_s_V_a_l_i_d() const { │ │ │ │ │ -321 return _isValid; │ │ │ │ │ -322} │ │ │ │ │ -323 │ │ │ │ │ -324inline void │ │ │ │ │ -_3_2_5_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_S_e_t_M_a_n_i_f_o_l_d(bool isManifold) { │ │ │ │ │ -326 _isManifold = isManifold; │ │ │ │ │ -327} │ │ │ │ │ -328inline bool │ │ │ │ │ -_3_2_9_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_I_s_M_a_n_i_f_o_l_d() const { │ │ │ │ │ -330 return _isManifold; │ │ │ │ │ -331} │ │ │ │ │ -332 │ │ │ │ │ -333inline void │ │ │ │ │ -_3_3_4_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_S_e_t_B_o_u_n_d_a_r_y(bool isBoundary) { │ │ │ │ │ -335 _isBoundary = isBoundary; │ │ │ │ │ -336} │ │ │ │ │ -337inline bool │ │ │ │ │ -_3_3_8_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_I_s_B_o_u_n_d_a_r_y() const { │ │ │ │ │ -339 return _isBoundary; │ │ │ │ │ -340} │ │ │ │ │ -341 │ │ │ │ │ -342// │ │ │ │ │ -343// Public inline methods involving sizes of incident faces: │ │ │ │ │ -344// │ │ │ │ │ -345inline bool │ │ │ │ │ -_3_4_6_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_H_a_s_I_n_c_i_d_e_n_t_F_a_c_e_S_i_z_e_s() const { │ │ │ │ │ -347 return _hasFaceSizes; │ │ │ │ │ -348} │ │ │ │ │ -349inline void │ │ │ │ │ -_3_5_0_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_C_l_e_a_r_I_n_c_i_d_e_n_t_F_a_c_e_S_i_z_e_s() { │ │ │ │ │ -351 _hasFaceSizes = false; │ │ │ │ │ -352} │ │ │ │ │ -353 │ │ │ │ │ -354inline void │ │ │ │ │ -_3_5_5_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_S_e_t_I_n_c_i_d_e_n_t_F_a_c_e_S_i_z_e(int incFaceIndex, int faceSize) { │ │ │ │ │ -356 │ │ │ │ │ -357 if (!_hasFaceSizes) initFaceSizes(); │ │ │ │ │ -358 │ │ │ │ │ -359 _faceSizeOffsets[incFaceIndex] = faceSize; │ │ │ │ │ -360} │ │ │ │ │ -361inline int │ │ │ │ │ -_3_6_2_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_G_e_t_I_n_c_i_d_e_n_t_F_a_c_e_S_i_z_e(int incFaceIndex) const { │ │ │ │ │ -363 │ │ │ │ │ -364 return _isFinalized ? │ │ │ │ │ -365 (_faceSizeOffsets[incFaceIndex+1] - _faceSizeOffsets[incFaceIndex]) : │ │ │ │ │ -366 _faceSizeOffsets[incFaceIndex]; │ │ │ │ │ -367} │ │ │ │ │ -368 │ │ │ │ │ -369// │ │ │ │ │ -370// Public inline methods involving vertex sharpness: │ │ │ │ │ -371// │ │ │ │ │ -372inline bool │ │ │ │ │ -_3_7_3_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_H_a_s_V_e_r_t_e_x_S_h_a_r_p_n_e_s_s() const { │ │ │ │ │ -374 return _vertSharpness > 0.0f; │ │ │ │ │ -375} │ │ │ │ │ -376inline void │ │ │ │ │ -_3_7_7_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_C_l_e_a_r_V_e_r_t_e_x_S_h_a_r_p_n_e_s_s() { │ │ │ │ │ -378 _vertSharpness = 0.0f; │ │ │ │ │ -379} │ │ │ │ │ -380 │ │ │ │ │ -381inline void │ │ │ │ │ -_3_8_2_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_S_e_t_V_e_r_t_e_x_S_h_a_r_p_n_e_s_s(float vertSharpness) { │ │ │ │ │ -383 _vertSharpness = vertSharpness; │ │ │ │ │ -384} │ │ │ │ │ -385inline float │ │ │ │ │ -_3_8_6_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_G_e_t_V_e_r_t_e_x_S_h_a_r_p_n_e_s_s() const { │ │ │ │ │ -387 return _vertSharpness; │ │ │ │ │ -388} │ │ │ │ │ -389 │ │ │ │ │ -390// │ │ │ │ │ -391// Public inline methods involving vertex sharpness: │ │ │ │ │ -392// │ │ │ │ │ -393inline bool │ │ │ │ │ -_3_9_4_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_H_a_s_E_d_g_e_S_h_a_r_p_n_e_s_s() const { │ │ │ │ │ -395 return _hasEdgeSharpness; │ │ │ │ │ -396} │ │ │ │ │ -397inline void │ │ │ │ │ -_3_9_8_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_C_l_e_a_r_E_d_g_e_S_h_a_r_p_n_e_s_s() { │ │ │ │ │ -399 _hasEdgeSharpness = false; │ │ │ │ │ -400} │ │ │ │ │ -401 │ │ │ │ │ -402inline void │ │ │ │ │ -_4_0_3_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_S_e_t_M_a_n_i_f_o_l_d_E_d_g_e_S_h_a_r_p_n_e_s_s(int edgeIndex, float sharpness) { │ │ │ │ │ -404 │ │ │ │ │ -405 if (!_hasEdgeSharpness) initEdgeSharpness(); │ │ │ │ │ -406 │ │ │ │ │ -407 // Assign the leading edge of the face after the edge (even index): │ │ │ │ │ -408 if (edgeIndex < _numFaces) { │ │ │ │ │ -409 _faceEdgeSharpness[2*edgeIndex] = sharpness; │ │ │ │ │ -410 } │ │ │ │ │ -411 │ │ │ │ │ -412 // Assign the trailing edge of the face before the edge (odd index): │ │ │ │ │ -413 if (edgeIndex > 0) { │ │ │ │ │ -414 _faceEdgeSharpness[2*edgeIndex-1] = sharpness; │ │ │ │ │ -415 } else if (!_I_s_B_o_u_n_d_a_r_y()) { │ │ │ │ │ -416 _faceEdgeSharpness[2*_numFaces-1] = sharpness; │ │ │ │ │ -417 } │ │ │ │ │ -418} │ │ │ │ │ -419inline float │ │ │ │ │ -_4_2_0_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_G_e_t_M_a_n_i_f_o_l_d_E_d_g_e_S_h_a_r_p_n_e_s_s(int edgeIndex) const { │ │ │ │ │ -421 │ │ │ │ │ -422 // All edges are first of the pair (even index) except last of boundary │ │ │ │ │ -423 return _faceEdgeSharpness[2*edgeIndex - (edgeIndex == _numFaces)]; │ │ │ │ │ -424} │ │ │ │ │ -425 │ │ │ │ │ -426inline void │ │ │ │ │ -_4_2_7_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_S_e_t_I_n_c_i_d_e_n_t_F_a_c_e_E_d_g_e_S_h_a_r_p_n_e_s_s(int faceIndex, │ │ │ │ │ -428 float leadingEdgeSharpness, float trailingEdgeSharpness) { │ │ │ │ │ -429 │ │ │ │ │ -430 if (!_hasEdgeSharpness) initEdgeSharpness(); │ │ │ │ │ -431 │ │ │ │ │ -432 _faceEdgeSharpness[2*faceIndex ] = leadingEdgeSharpness; │ │ │ │ │ -433 _faceEdgeSharpness[2*faceIndex+1] = trailingEdgeSharpness; │ │ │ │ │ -434} │ │ │ │ │ -435inline void │ │ │ │ │ -_4_3_6_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_G_e_t_I_n_c_i_d_e_n_t_F_a_c_e_E_d_g_e_S_h_a_r_p_n_e_s_s(int faceIndex, │ │ │ │ │ -437 float * leadingEdgeSharpness, float * trailingEdgeSharpness) const { │ │ │ │ │ -438 │ │ │ │ │ -439 *leadingEdgeSharpness = _faceEdgeSharpness[2*faceIndex]; │ │ │ │ │ -440 *trailingEdgeSharpness = _faceEdgeSharpness[2*faceIndex+1]; │ │ │ │ │ -441} │ │ │ │ │ -442 │ │ │ │ │ -443} // end namespace Bfr │ │ │ │ │ -444 │ │ │ │ │ -445} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ -446using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -447} // end namespace OpenSubdiv │ │ │ │ │ -448 │ │ │ │ │ -449#endif /* OPENSUBDIV3_BFR_VERTEX_DESCRIPTOR_H */ │ │ │ │ │ +268 │ │ │ │ │ +283 │ │ │ │ │ +_2_8_5 void _T_r_a_n_s_f_o_r_m_F_a_c_e_t_C_o_o_r_d_I_n_d_i_c_e_s(int facetTuples[], int commonOffset); │ │ │ │ │ +286 │ │ │ │ │ +_2_8_9 void _T_r_a_n_s_f_o_r_m_F_a_c_e_t_C_o_o_r_d_I_n_d_i_c_e_s(int facetTuples[], │ │ │ │ │ +290 int const boundaryIndices[], │ │ │ │ │ +291 int interiorOffset); │ │ │ │ │ +292 │ │ │ │ │ +_2_9_4 void _T_r_a_n_s_f_o_r_m_F_a_c_e_t_C_o_o_r_d_I_n_d_i_c_e_s(int facetTuples[], │ │ │ │ │ +295 int const boundaryIndices[], │ │ │ │ │ +296 int const interiorIndices[]); │ │ │ │ │ +298 │ │ │ │ │ +299private: │ │ │ │ │ +300 // Private initialization methods: │ │ │ │ │ +301 bool validateArguments(_P_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n const & p, │ │ │ │ │ +302 int nRates, int const rates[], _O_p_t_i_o_n_s const & options); │ │ │ │ │ +303 │ │ │ │ │ +304 void initialize(_P_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n const & p, │ │ │ │ │ +305 int nRates, int const rates[], _O_p_t_i_o_n_s const & options); │ │ │ │ │ +306 │ │ │ │ │ +307 void initializeDefaults(); │ │ │ │ │ +308 int initializeRates(int nRates, int const rates[]); │ │ │ │ │ +309 void initializeInventoryForParamTri(int sumOfOuterRates); │ │ │ │ │ +310 void initializeInventoryForParamQuad(int sumOfOuterRates); │ │ │ │ │ +311 void initializeInventoryForParamQPoly(int sumOfOuterRates); │ │ │ │ │ +312 │ │ │ │ │ +313private: │ │ │ │ │ +314 // Private members: │ │ │ │ │ +315 _P_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n _param; │ │ │ │ │ +316 │ │ │ │ │ +317 unsigned short _isValid : 1; │ │ │ │ │ +318 unsigned short _isUniform : 1; │ │ │ │ │ +319 unsigned short _triangulate : 1; │ │ │ │ │ +320 unsigned short _singleFace : 1; │ │ │ │ │ +321 unsigned short _segmentedFace : 1; │ │ │ │ │ +322 unsigned short _triangleFan : 1; │ │ │ │ │ +323 unsigned short _splitQuad : 1; │ │ │ │ │ +324 │ │ │ │ │ +325 short _facetSize; │ │ │ │ │ +326 int _facetStride; │ │ │ │ │ +327 int _coordStride; │ │ │ │ │ +328 │ │ │ │ │ +329 int _numGivenRates; │ │ │ │ │ +330 int _numBoundaryPoints; │ │ │ │ │ +331 int _numInteriorPoints; │ │ │ │ │ +332 int _numFacets; │ │ │ │ │ +333 │ │ │ │ │ +334 int _innerRates[2]; │ │ │ │ │ +335 int* _outerRates; │ │ │ │ │ +336 int _outerRatesLocal[4]; │ │ │ │ │ +337}; │ │ │ │ │ +338 │ │ │ │ │ +339// │ │ │ │ │ +340// Inline implementations: │ │ │ │ │ +341// │ │ │ │ │ +342inline _T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s & │ │ │ │ │ +_3_4_3_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s_:_:_P_r_e_s_e_r_v_e_Q_u_a_d_s(bool on) { │ │ │ │ │ +344 _preserveQuads = on; │ │ │ │ │ +345 return *this; │ │ │ │ │ +346} │ │ │ │ │ +347inline _T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s & │ │ │ │ │ +_3_4_8_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s_:_:_S_e_t_F_a_c_e_t_S_i_z_e(int numIndices) { │ │ │ │ │ +349 _facetSize4 = (numIndices == 4); │ │ │ │ │ +350 return *this; │ │ │ │ │ +351} │ │ │ │ │ +352inline _T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s & │ │ │ │ │ +_3_5_3_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s_:_:_S_e_t_F_a_c_e_t_S_t_r_i_d_e(int stride) { │ │ │ │ │ +354 _facetStride = (short) stride; │ │ │ │ │ +355 return *this; │ │ │ │ │ +356} │ │ │ │ │ +357inline _T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s & │ │ │ │ │ +_3_5_8_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s_:_:_S_e_t_C_o_o_r_d_S_t_r_i_d_e(int stride) { │ │ │ │ │ +359 _coordStride = (short) stride; │ │ │ │ │ +360 return *this; │ │ │ │ │ +361} │ │ │ │ │ +362 │ │ │ │ │ +363template │ │ │ │ │ +364inline int │ │ │ │ │ +_3_6_5_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_V_e_r_t_e_x_C_o_o_r_d(int vertex, REAL coord[]) const { │ │ │ │ │ +366 _param._G_e_t_V_e_r_t_e_x_C_o_o_r_d(vertex, coord); │ │ │ │ │ +367 return 1; │ │ │ │ │ +368} │ │ │ │ │ +369 │ │ │ │ │ +370template │ │ │ │ │ +371inline int │ │ │ │ │ +_3_7_2_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_C_o_o_r_d_s(REAL coordTuples[]) const { │ │ │ │ │ +373 int nCoords = _G_e_t_B_o_u_n_d_a_r_y_C_o_o_r_d_s(coordTuples); │ │ │ │ │ +374 nCoords += _G_e_t_I_n_t_e_r_i_o_r_C_o_o_r_d_s(coordTuples + nCoords * _coordStride); │ │ │ │ │ +375 return nCoords; │ │ │ │ │ +376} │ │ │ │ │ +377 │ │ │ │ │ +378} // end namespace Bfr │ │ │ │ │ +379 │ │ │ │ │ +380} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ +381using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +382 │ │ │ │ │ +383} // end namespace OpenSubdiv │ │ │ │ │ +384 │ │ │ │ │ +385#endif /* OPENSUBDIV3_BFR_TESSELLATION */ │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ -Simple class used by subclasses of SurfaceFactory to describe a vertex. │ │ │ │ │ -DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_1_3_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_G_e_t_V_e_r_t_e_x_S_h_a_r_p_n_e_s_s │ │ │ │ │ -float GetVertexSharpness() const │ │ │ │ │ -Return the sharpness of the vertex. │ │ │ │ │ -DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_8_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_F_i_n_a_l_i_z_e │ │ │ │ │ -bool Finalize() │ │ │ │ │ -Terminate the sequence of specifications. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_S_e_t_M_a_n_i_f_o_l_d │ │ │ │ │ -void SetManifold(bool isManifold) │ │ │ │ │ -Declare the vertex neighborhood as manifold (ordered) │ │ │ │ │ -DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_2_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_I_n_i_t_i_a_l_i_z_e │ │ │ │ │ -bool Initialize(int numIncidentFaces) │ │ │ │ │ -Initialize specification with the number of incident faces. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_I_s_M_a_n_i_f_o_l_d │ │ │ │ │ -bool IsManifold() const │ │ │ │ │ -Return if vertex neighborhood is manifold. │ │ │ │ │ -DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_2_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_H_a_s_E_d_g_e_S_h_a_r_p_n_e_s_s │ │ │ │ │ -bool HasEdgeSharpness() const │ │ │ │ │ -Return if sharpness was assigned to the incident edges. │ │ │ │ │ -DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_9_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_G_e_t_I_n_c_i_d_e_n_t_F_a_c_e_S_i_z_e │ │ │ │ │ -int GetIncidentFaceSize(int faceIndex) const │ │ │ │ │ -Return the size of an incident face. │ │ │ │ │ -DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_6_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_G_e_t_M_a_n_i_f_o_l_d_E_d_g_e_S_h_a_r_p_n_e_s_s │ │ │ │ │ -float GetManifoldEdgeSharpness(int edgeIndex) const │ │ │ │ │ -Return the sharpness assigned to a manifold edge. │ │ │ │ │ -DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_4_2_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_: │ │ │ │ │ -_S_e_t_I_n_c_i_d_e_n_t_F_a_c_e_E_d_g_e_S_h_a_r_p_n_e_s_s │ │ │ │ │ -void SetIncidentFaceEdgeSharpness(int faceIndex, float leadingEdgeSharp, float │ │ │ │ │ -trailingEdgeSharp) │ │ │ │ │ -Assign sharpness to the edges of an incident face. │ │ │ │ │ -DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_4_2_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_H_a_s_V_e_r_t_e_x_S_h_a_r_p_n_e_s_s │ │ │ │ │ -bool HasVertexSharpness() const │ │ │ │ │ -Return if sharpness was assigned to the vertex. │ │ │ │ │ -DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_7_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_C_l_e_a_r_I_n_c_i_d_e_n_t_F_a_c_e_S_i_z_e_s │ │ │ │ │ -void ClearIncidentFaceSizes() │ │ │ │ │ -Remove any assigned sizes of incident faces. │ │ │ │ │ -DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_5_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_S_e_t_V_e_r_t_e_x_S_h_a_r_p_n_e_s_s │ │ │ │ │ -void SetVertexSharpness(float sharpness) │ │ │ │ │ -Assign sharpness to the vertex. │ │ │ │ │ -DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_8_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_C_l_e_a_r_V_e_r_t_e_x_S_h_a_r_p_n_e_s_s │ │ │ │ │ -void ClearVertexSharpness() │ │ │ │ │ -Remove any sharpness assigned to the vertex. │ │ │ │ │ -DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_7_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_C_l_e_a_r_E_d_g_e_S_h_a_r_p_n_e_s_s │ │ │ │ │ -void ClearEdgeSharpness() │ │ │ │ │ -Remove any sharpness assigned to the incident edges. │ │ │ │ │ -DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_9_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_: │ │ │ │ │ -_G_e_t_I_n_c_i_d_e_n_t_F_a_c_e_E_d_g_e_S_h_a_r_p_n_e_s_s │ │ │ │ │ -void GetIncidentFaceEdgeSharpness(int faceIndex, float *leadingEdgeSharp, float │ │ │ │ │ -*trailingEdgeSharp) const │ │ │ │ │ -Return the sharpness assigned to edges of an incident face. │ │ │ │ │ -DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_4_3_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_I_s_B_o_u_n_d_a_r_y │ │ │ │ │ -bool IsBoundary() const │ │ │ │ │ -Return if vertex neighborhood is on a boundary. │ │ │ │ │ -DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_3_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_I_s_V_a_l_i_d │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_P_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n │ │ │ │ │ +Simple class defining the 2D parameterization of a face. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n_._h_:_5_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_P_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n_:_:_G_e_t_F_a_c_e_S_i_z_e │ │ │ │ │ +int GetFaceSize() const │ │ │ │ │ +Returns the size (number of vertices) of the corresponding face. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n_._h_:_1_0_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_P_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n_:_:_G_e_t_V_e_r_t_e_x_C_o_o_r_d │ │ │ │ │ +void GetVertexCoord(int vertexIndex, REAL uvCoord[2]) const │ │ │ │ │ +Returns the (u,v) coordinate of a given vertex. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n │ │ │ │ │ +Encapsulates a specific tessellation pattern of a Parameterization. │ │ │ │ │ +DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_5_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_F_a_c_e_S_i_z_e │ │ │ │ │ +int GetFaceSize() const │ │ │ │ │ +Return the size of the face. │ │ │ │ │ +DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_1_8_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_N_u_m_B_o_u_n_d_a_r_y_C_o_o_r_d_s │ │ │ │ │ +int GetNumBoundaryCoords() const │ │ │ │ │ +Return the number of boundary coordinates. │ │ │ │ │ +DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_2_1_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_~_T_e_s_s_e_l_l_a_t_i_o_n │ │ │ │ │ +~Tessellation() │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_T_r_a_n_s_f_o_r_m_F_a_c_e_t_C_o_o_r_d_I_n_d_i_c_e_s │ │ │ │ │ +void TransformFacetCoordIndices(int facetTuples[], int const boundaryIndices[], │ │ │ │ │ +int const interiorIndices[]) │ │ │ │ │ +Reassign all facet coordinate indices. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_C_o_o_r_d_S_t_r_i_d_e │ │ │ │ │ +int GetCoordStride() const │ │ │ │ │ +Return the number of elements between each coordinate. │ │ │ │ │ +DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_2_0_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_N_u_m_E_d_g_e_C_o_o_r_d_s │ │ │ │ │ +int GetNumEdgeCoords(int edge) const │ │ │ │ │ +Return the number of coordinates within a given edge (excluding those at its │ │ │ │ │ +end vertices) │ │ │ │ │ +DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_2_1_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_I_n_t_e_r_i_o_r_C_o_o_r_d_s │ │ │ │ │ +int GetInteriorCoords(REAL coordTuples[]) const │ │ │ │ │ +Retrieve the coordinates for the boundary. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_F_a_c_e_t_S_t_r_i_d_e │ │ │ │ │ +int GetFacetStride() const │ │ │ │ │ +Return the number of elements between each facet. │ │ │ │ │ +DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_2_6_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_I_s_U_n_i_f_o_r_m │ │ │ │ │ +bool IsUniform() const │ │ │ │ │ +Return if the pattern is uniform. │ │ │ │ │ +DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_1_8_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_N_u_m_C_o_o_r_d_s │ │ │ │ │ +int GetNumCoords() const │ │ │ │ │ +Return the number of coordinates in the entire pattern. │ │ │ │ │ +DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_2_0_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_C_o_o_r_d_s │ │ │ │ │ +int GetCoords(REAL coordTuples[]) const │ │ │ │ │ +Retrieve the coordinates for the entire pattern. │ │ │ │ │ +DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_3_7_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_T_r_a_n_s_f_o_r_m_F_a_c_e_t_C_o_o_r_d_I_n_d_i_c_e_s │ │ │ │ │ +void TransformFacetCoordIndices(int facetTuples[], int commonOffset) │ │ │ │ │ +Apply a common offset to all facet coordinate indices. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_T_e_s_s_e_l_l_a_t_i_o_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. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_P_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n │ │ │ │ │ +Parameterization GetParameterization() const │ │ │ │ │ +Return the Parameterization. │ │ │ │ │ +DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_1_7_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_T_r_a_n_s_f_o_r_m_F_a_c_e_t_C_o_o_r_d_I_n_d_i_c_e_s │ │ │ │ │ +void TransformFacetCoordIndices(int facetTuples[], int const boundaryIndices[], │ │ │ │ │ +int interiorOffset) │ │ │ │ │ +Reassign indices of boundary coordinates while offseting those of interior │ │ │ │ │ +coordinates. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_F_a_c_e_t_S_i_z_e │ │ │ │ │ +int GetFacetSize() const │ │ │ │ │ +Return the number of indices assigned to each facet. │ │ │ │ │ +DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_2_5_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_T_e_s_s_e_l_l_a_t_i_o_n │ │ │ │ │ +Tessellation()=delete │ │ │ │ │ +Default construction is unavailable. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_T_e_s_s_e_l_l_a_t_i_o_n │ │ │ │ │ +Tessellation(Parameterization const &p, int uniformRate, Options const │ │ │ │ │ +&options=Options()) │ │ │ │ │ +Simple constructor providing a single uniform tessellation rate. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_F_a_c_e_t_s │ │ │ │ │ +int GetFacets(int facetTuples[]) const │ │ │ │ │ +Retrieve the facet indices for the entire pattern. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_N_u_m_F_a_c_e_t_s │ │ │ │ │ +int GetNumFacets() const │ │ │ │ │ +Return the number of facets in the entire pattern. │ │ │ │ │ +DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_2_5_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_N_u_m_I_n_t_e_r_i_o_r_C_o_o_r_d_s │ │ │ │ │ +int GetNumInteriorCoords() const │ │ │ │ │ +Return the number of interior coordinates. │ │ │ │ │ +DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_2_1_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_V_e_r_t_e_x_C_o_o_r_d │ │ │ │ │ +int GetVertexCoord(int vertex, REAL coordTuples[]) const │ │ │ │ │ +Retrieve the coordinate for a given vertex of the face. │ │ │ │ │ +DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_3_6_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_B_o_u_n_d_a_r_y_C_o_o_r_d_s │ │ │ │ │ +int GetBoundaryCoords(REAL coordTuples[]) const │ │ │ │ │ +Retrieve the coordinates for the boundary. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_T_e_s_s_e_l_l_a_t_i_o_n │ │ │ │ │ +Tessellation(Tessellation const &)=delete │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_R_a_t_e_s │ │ │ │ │ +int GetRates(int rates[]) const │ │ │ │ │ +Retrieve the rates assigned. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_I_s_V_a_l_i_d │ │ │ │ │ bool IsValid() const │ │ │ │ │ -Return if instance is valid. │ │ │ │ │ -DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_2_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_H_a_s_I_n_c_i_d_e_n_t_F_a_c_e_S_i_z_e_s │ │ │ │ │ -bool HasIncidentFaceSizes() const │ │ │ │ │ -Return if the sizes of incident faces are assigned. │ │ │ │ │ -DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_4_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_S_e_t_B_o_u_n_d_a_r_y │ │ │ │ │ -void SetBoundary(bool isOnBoundary) │ │ │ │ │ -Declare the vertex neighborhood as being on a boundary. │ │ │ │ │ -DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_3_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_S_e_t_I_n_c_i_d_e_n_t_F_a_c_e_S_i_z_e │ │ │ │ │ -void SetIncidentFaceSize(int faceIndex, int faceSize) │ │ │ │ │ -Assign the size of an incident face. │ │ │ │ │ -DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_5_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_S_e_t_M_a_n_i_f_o_l_d_E_d_g_e_S_h_a_r_p_n_e_s_s │ │ │ │ │ -void SetManifoldEdgeSharpness(int edgeIndex, float edgeSharpness) │ │ │ │ │ -Assign sharpness to the edge of a manifold neighborhood. │ │ │ │ │ -DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_4_0_3 │ │ │ │ │ +Return true if correctly initialized. │ │ │ │ │ +DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_1_6_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ +Tessellation & operator=(Tessellation const &)=delete │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_E_d_g_e_C_o_o_r_d_s │ │ │ │ │ +int GetEdgeCoords(int edge, REAL coordTuples[]) const │ │ │ │ │ +Retrieve the coordinates for a given edge of the face (excluding those at its │ │ │ │ │ +end vertices) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s │ │ │ │ │ +Options configure a Tessellation to specify the nature of both its results and │ │ │ │ │ +the structure of the c... │ │ │ │ │ +DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_6_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s_:_:_O_p_t_i_o_n_s │ │ │ │ │ +Options() │ │ │ │ │ +DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_6_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s_:_:_G_e_t_C_o_o_r_d_S_t_r_i_d_e │ │ │ │ │ +int GetCoordStride() const │ │ │ │ │ +Return the stride between (u,v) pairs. │ │ │ │ │ +DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_9_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s_:_:_S_e_t_F_a_c_e_t_S_i_z_e │ │ │ │ │ +Options & SetFacetSize(int numIndices) │ │ │ │ │ +Assign the number of indices per facet (must be 3 or 4, default is 3) │ │ │ │ │ +DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_3_4_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s_:_:_G_e_t_F_a_c_e_t_S_t_r_i_d_e │ │ │ │ │ +int GetFacetStride() const │ │ │ │ │ +Return the stride between facets. │ │ │ │ │ +DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_8_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s_:_:_G_e_t_F_a_c_e_t_S_i_z_e │ │ │ │ │ +int GetFacetSize() const │ │ │ │ │ +DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_8_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s_:_:_S_e_t_C_o_o_r_d_S_t_r_i_d_e │ │ │ │ │ +Options & SetCoordStride(int stride) │ │ │ │ │ +Assign the stride between (u,v) pairs (default is 2) │ │ │ │ │ +DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_3_5_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s_:_:_S_e_t_F_a_c_e_t_S_t_r_i_d_e │ │ │ │ │ +Options & SetFacetStride(int stride) │ │ │ │ │ +Assign the stride between facets (default is facet size) │ │ │ │ │ +DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_3_5_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s_:_:_P_r_e_s_e_r_v_e_Q_u_a_d_s │ │ │ │ │ +bool PreserveQuads() const │ │ │ │ │ +Return if preservation of quads is set. │ │ │ │ │ +DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_7_4 │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _b_f_r │ │ │ │ │ - * _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h │ │ │ │ │ + * _t_e_s_s_e_l_l_a_t_i_o_n_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00677.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/bfr/tessellation.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/bfr/vertexDescriptor.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -90,29 +90,26 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
tessellation.h File Reference
│ │ │ │ +
vertexDescriptor.h File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include "../bfr/parameterization.h"
│ │ │ │ +#include "../vtr/stackBuffer.h"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ 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...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -121,13 +118,13 @@ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,30 +1,25 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -tessellation.h File Reference │ │ │ │ │ +vertexDescriptor.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ -#include "_._._/_b_f_r_/_p_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n_._h" │ │ │ │ │ +#include "_._._/_v_t_r_/_s_t_a_c_k_B_u_f_f_e_r_._h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _T_e_s_s_e_l_l_a_t_i_o_n │ │ │ │ │ -  Encapsulates a specific tessellation pattern of a _P_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n. │ │ │ │ │ +class   _V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ +  Simple class used by subclasses of _S_u_r_f_a_c_e_F_a_c_t_o_r_y to describe a vertex. │ │ │ │ │ _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ -class   _T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s │ │ │ │ │ - _O_p_t_i_o_n_s configure a _T_e_s_s_e_l_l_a_t_i_o_n to specify the nature of both its │ │ │ │ │ -  results and the structure of the coordinate and facet index arrays that │ │ │ │ │ - its methods will populate. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r │ │ │ │ │   │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _b_f_r │ │ │ │ │ - * _t_e_s_s_e_l_l_a_t_i_o_n_._h │ │ │ │ │ + * _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00677.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,4 +1,3 @@ │ │ │ │ │ var a00677 = [ │ │ │ │ │ - ["Tessellation", "a00961.html", "a00961"], │ │ │ │ │ - ["Options", "a00965.html", "a00965"] │ │ │ │ │ + ["VertexDescriptor", "a00969.html", "a00969"] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00677_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/bfr/tessellation.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/bfr/vertexDescriptor.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,15 +92,15 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
tessellation.h
│ │ │ │ +
vertexDescriptor.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │
2// Copyright 2021 Pixar
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │ @@ -119,281 +119,425 @@ │ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │
24
│ │ │ │ -
25#ifndef OPENSUBDIV3_BFR_TESSELLATION_H
│ │ │ │ -
26#define OPENSUBDIV3_BFR_TESSELLATION_H
│ │ │ │ +
25#ifndef OPENSUBDIV3_BFR_VERTEX_DESCRIPTOR_H
│ │ │ │ +
26#define OPENSUBDIV3_BFR_VERTEX_DESCRIPTOR_H
│ │ │ │
27
│ │ │ │
28#include "../version.h"
│ │ │ │
29
│ │ │ │ -
30#include "../bfr/parameterization.h"
│ │ │ │ +
30#include "../vtr/stackBuffer.h"
│ │ │ │
31
│ │ │ │
32namespace OpenSubdiv {
│ │ │ │
33namespace OPENSUBDIV_VERSION {
│ │ │ │
34
│ │ │ │
35namespace Bfr {
│ │ │ │
36
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
52public:
│ │ │ │ -
│ │ │ │ -
65 class Options {
│ │ │ │ -
66 public:
│ │ │ │ -
│ │ │ │ -
67 Options() : _preserveQuads(false), _facetSize4(false),
│ │ │ │ -
68 _coordStride(0), _facetStride(0) { }
│ │ │ │ -
│ │ │ │ -
69
│ │ │ │ -
72 Options & PreserveQuads(bool on);
│ │ │ │ -
74 bool PreserveQuads() const { return _preserveQuads; }
│ │ │ │ -
75
│ │ │ │ -
78 Options & SetFacetSize(int numIndices);
│ │ │ │ -
79 // @brief Return the number of indices per facet
│ │ │ │ -
80 int GetFacetSize() const { return 3 + (int)_facetSize4; }
│ │ │ │ -
81
│ │ │ │ -
83 Options & SetFacetStride(int stride);
│ │ │ │ -
85 int GetFacetStride() const { return _facetStride; }
│ │ │ │ -
86
│ │ │ │ -
88 Options & SetCoordStride(int stride);
│ │ │ │ -
90 int GetCoordStride() const { return _coordStride; }
│ │ │ │ -
91
│ │ │ │ -
92 private:
│ │ │ │ -
93 unsigned int _preserveQuads : 1;
│ │ │ │ -
94 unsigned int _facetSize4 : 1;
│ │ │ │ -
95
│ │ │ │ -
96 short _coordStride;
│ │ │ │ -
97 short _facetStride;
│ │ │ │ -
98 };
│ │ │ │ -
│ │ │ │ -
99
│ │ │ │ -
100public:
│ │ │ │ -
102
│ │ │ │ -
111
│ │ │ │ -
118 Tessellation(Parameterization const & p, int uniformRate,
│ │ │ │ -
119 Options const & options = Options());
│ │ │ │ -
120
│ │ │ │ -
158 Tessellation(Parameterization const & p, int numRates, int const rates[],
│ │ │ │ -
159 Options const & options = Options());
│ │ │ │ -
160
│ │ │ │ -
162 bool IsValid() const { return _isValid; }
│ │ │ │ -
163
│ │ │ │ -
165 Tessellation() = delete;
│ │ │ │ -
166
│ │ │ │ -
167 Tessellation(Tessellation const &) = delete;
│ │ │ │ - │ │ │ │ - │ │ │ │ -
171
│ │ │ │ -
173
│ │ │ │ -
177
│ │ │ │ -
179 Parameterization GetParameterization() const { return _param; }
│ │ │ │ -
180
│ │ │ │ -
182 int GetFaceSize() const { return _param.GetFaceSize(); }
│ │ │ │ -
183
│ │ │ │ -
185 int GetRates(int rates[]) const;
│ │ │ │ -
186
│ │ │ │ -
188 bool IsUniform() const { return _isUniform; }
│ │ │ │ -
190
│ │ │ │ -
192
│ │ │ │ +
50//
│ │ │ │ +
51// WIP - need to migrate some of these comments into Doxygen
│ │ │ │ +
52// - others will be moved to the external documentation
│ │ │ │ +
53//
│ │ │ │ +
54// It is used by subclasses of SurfaceFactory to provide a complete
│ │ │ │ +
55// topological description for each vertex of a face, i.e. invoked via
│ │ │ │ +
56// the virtual method:
│ │ │ │ +
57//
│ │ │ │ +
58// int populateFaceVertexDescriptor(Index baseFace,
│ │ │ │ +
59// int cornerVertex,
│ │ │ │ +
60// VertexDescriptor & v) const;
│ │ │ │ +
61//
│ │ │ │ +
62// Assignment of the full topology can be involved in the presence of
│ │ │ │ +
63// irregular faces, non-manifold topology or creasing around a vertex, but
│ │ │ │ +
64// many cases will be simple. For example, to specify a regular boundary
│ │ │ │ +
65// vertex of a Catmark mesh without any optional sharpness:
│ │ │ │ +
66//
│ │ │ │ +
67// int numIncidentFaces = 2;
│ │ │ │ +
68// bool vertexOnBoundary = true;
│ │ │ │ +
69//
│ │ │ │ +
70// vd.Initialize(numIncidentFaces);
│ │ │ │ +
71// vd.SetManifold(true);
│ │ │ │ +
72// vd.SetBoundary(vertexOnBoundary);
│ │ │ │ +
73// vd.ClearIncidentFaceSizes();
│ │ │ │ +
74// vd.Finalize();
│ │ │ │ +
75//
│ │ │ │ +
76// For a more general example, to assign a vertex of some valence whose
│ │ │ │ +
77// incident faces are of different sizes (e.g. required when triangles
│ │ │ │ +
78// appear around a vertex in an otherwise quad-dominant Catmark mesh):
│ │ │ │ +
79//
│ │ │ │ +
80// int numIncidentFaces = meshVertex.GetNumIncidentFaces();
│ │ │ │ +
81// bool vertexOnBoundary = meshVertex.IsBoundar();
│ │ │ │ +
82//
│ │ │ │ +
83// vd.Initialize(numIncidentFaces);
│ │ │ │ +
84// vd.SetManifold(true);
│ │ │ │ +
85// vd.SetBoundary(vertexOnBoundary);
│ │ │ │ +
86//
│ │ │ │ +
87// for (int i = 0; i < numIncidentFaces; ++i) {
│ │ │ │ +
88// vd.SetIncidentFaceSize(i, meshVertex.GetIncidentFaceSize(i));
│ │ │ │ +
89// }
│ │ │ │ +
90// vd.Finalize();
│ │ │ │ +
91//
│ │ │ │ +
92// These examples specify the incident faces as forming a manifold ring
│ │ │ │ +
93// (or half-ring) around the vertex, i.e. they can be specified as a
│ │ │ │ +
94// continuous, connected sequence in counter-clockwise order (and also
│ │ │ │ +
95// without degeneracies). In the case of a boundary vertex, the first
│ │ │ │ +
96// face must be on the leading edge of the boundary while the last is on
│ │ │ │ +
97// the trailing edge. For an interior vertex, which face is specified
│ │ │ │ +
98// first does not matter (since the set is periodic).
│ │ │ │ +
99//
│ │ │ │ +
100// In both cases, the location of the base face in this sequence -- the
│ │ │ │ +
101// face whose corner vertex is being described here -- must be specified
│ │ │ │ +
102// in the return value to populateFaceVertexDescriptor() (e.g. when a
│ │ │ │ +
103// boundary vertex has 3 incident faces, a return value of 0, 1 or 2
│ │ │ │ +
104// will indicate which is the base face).
│ │ │ │ +
105//
│ │ │ │ +
106// The corresponding methods to specify mesh control vertex indices (or
│ │ │ │ +
107// face-varying indices) complete the specification of the neighborhood:
│ │ │ │ +
108//
│ │ │ │ +
109// int getFaceCornerVertexIndices(Index baseFace, int cornerVertex,
│ │ │ │ +
110// Index vertexIndices[]) const;
│ │ │ │ +
111//
│ │ │ │ +
112// int getFaceCornerFVarValueIndices(Index baseFace, int cornerVertex,
│ │ │ │ +
113// Index fvarValueIndices[],
│ │ │ │ +
114// int fvarChannel) const;
│ │ │ │ +
115//
│ │ │ │ +
116// and are invoked by the Factory when needed.
│ │ │ │ +
117//
│ │ │ │ +
118// For each incident face, the indices for all vertices of that face are
│ │ │ │ +
119// to be specified (not the one-ring or some other subset). These indices
│ │ │ │ +
120// must also be specified in an orientation relative to the vertex, i.e.
│ │ │ │ +
121// for a vertex A and an incident face with face-vertices that may be
│ │ │ │ +
122// stored internally as {D, C, A, B}, they must be specified with A first
│ │ │ │ +
123// as {A, B, C, D}. This may seem a bit cumbersome, but it has clear
│ │ │ │ +
124// advantages when dealing with face-varying indices and unordered faces.
│ │ │ │ +
125//
│ │ │ │ +
126// More compact ways of specifying vertex indices for ordered, manifold
│ │ │ │ +
127// cases may be worth exploring in future, but face-varying indices and
│ │ │ │ +
128// non-manifold (unordered) vertices will always require such a full set,
│ │ │ │ +
129// so both methods will need to co-exist.
│ │ │ │ +
130//
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
132public:
│ │ │ │ +
133 // The full declaration must be enclosed by calls to these methods:
│ │ │ │ +
134 //
│ │ │ │ +
135 // Note that vertex valences or face sizes in excess of those defined
│ │ │ │ +
136 // in Bfr::Limits (typically 16-bits) are not valid. When specifying
│ │ │ │ +
137 // values in excess of these limits, initialization will fail and/or
│ │ │ │ +
138 // the descriptor will be marked invalid and finalization will fail.
│ │ │ │ +
139 //
│ │ │ │ +
140
│ │ │ │ +
142
│ │ │ │ +
149
│ │ │ │ +
151 bool Initialize(int numIncidentFaces);
│ │ │ │ +
152
│ │ │ │ +
154 bool Finalize();
│ │ │ │ +
155
│ │ │ │ +
157 bool IsValid() const;
│ │ │ │ +
159
│ │ │ │ +
160 //
│ │ │ │ +
161 // WIP - need to migrate these comments into Doxygen
│ │ │ │ +
162 //
│ │ │ │ +
163 // Three groups of methods describe the topology around a vertex:
│ │ │ │ +
164 // - simple properties (vertex is a boundary, manifold, etc.)
│ │ │ │ +
165 // - sizes of incident faces (constant or size for each face)
│ │ │ │ +
166 // - sharpness of the vertex and its incident edges (optional)
│ │ │ │ +
167 //
│ │ │ │ +
168
│ │ │ │ +
169 // Manifold and boundary conditions:
│ │ │ │ +
170 //
│ │ │ │ +
171 // The manifold property is a strict condition but preferred for
│ │ │ │ +
172 // efficiency and is usually available from common connected mesh
│ │ │ │ +
173 // representations. When declaring the topology as "manifold",
│ │ │ │ +
174 // the Factory assumes the following:
│ │ │ │ +
175 //
│ │ │ │ +
176 // - all incident faces are "ordered" (counter-clockwise)
│ │ │ │ +
177 // - all incident faces are consistently oriented
│ │ │ │ +
178 // - all incident edges are non-degenerate
│ │ │ │ +
179 //
│ │ │ │ +
180 // If not certain that all of these conditions are met, it is best
│ │ │ │ +
181 // to not declare manifold -- leaving the Factory to make sense of
│ │ │ │ +
182 // the set of incident faces from the face-vertex indices that are
│ │ │ │ +
183 // provided elsewhere.
│ │ │ │ +
184 //
│ │ │ │ +
185
│ │ │ │ +
187
│ │ │ │ +
191
│ │ │ │ +
193 void SetManifold(bool isManifold);
│ │ │ │ +
194
│ │ │ │ +
196 void SetBoundary(bool isOnBoundary);
│ │ │ │ +
197
│ │ │ │ +
199 void SetIncidentFaceSize(int faceIndex, int faceSize);
│ │ │ │ +
200
│ │ │ │ + │ │ │ │
203
│ │ │ │ -
205 int GetNumCoords() const { return _numInteriorPoints + _numBoundaryPoints; }
│ │ │ │ +
205 void SetVertexSharpness(float sharpness);
│ │ │ │
206
│ │ │ │ -
208 int GetCoordStride() const { return _coordStride; }
│ │ │ │ + │ │ │ │
209
│ │ │ │ -
211 int GetNumBoundaryCoords() const { return _numBoundaryPoints; }
│ │ │ │ -
212
│ │ │ │ -
214 int GetNumInteriorCoords() const { return _numInteriorPoints; }
│ │ │ │ -
215
│ │ │ │ -
218 int GetNumEdgeCoords(int edge) const { return _outerRates[edge] - 1; }
│ │ │ │ -
219
│ │ │ │ -
221 template <typename REAL>
│ │ │ │ -
222 int GetCoords(REAL coordTuples[]) const;
│ │ │ │ -
223
│ │ │ │ -
225 template <typename REAL>
│ │ │ │ -
226 int GetBoundaryCoords(REAL coordTuples[]) const;
│ │ │ │ -
227
│ │ │ │ -
229 template <typename REAL>
│ │ │ │ -
230 int GetInteriorCoords(REAL coordTuples[]) const;
│ │ │ │ -
231
│ │ │ │ -
233 template <typename REAL>
│ │ │ │ -
234 int GetVertexCoord(int vertex, REAL coordTuples[]) const;
│ │ │ │ -
235
│ │ │ │ -
238 template <typename REAL>
│ │ │ │ -
239 int GetEdgeCoords(int edge, REAL coordTuples[]) const;
│ │ │ │ -
241
│ │ │ │ -
243
│ │ │ │ -
253
│ │ │ │ -
255 int GetNumFacets() const { return _numFacets; }
│ │ │ │ -
256
│ │ │ │ -
258 int GetFacetSize() const { return _facetSize; }
│ │ │ │ -
259
│ │ │ │ -
261 int GetFacetStride() const { return _facetStride; }
│ │ │ │ -
262
│ │ │ │ -
264 int GetFacets(int facetTuples[]) const;
│ │ │ │ +
221 void SetManifoldEdgeSharpness(int edgeIndex, float edgeSharpness);
│ │ │ │ +
222
│ │ │ │ +
238 void SetIncidentFaceEdgeSharpness(int faceIndex, float leadingEdgeSharp,
│ │ │ │ +
239 float trailingEdgeSharp);
│ │ │ │ +
240
│ │ │ │ +
242 void ClearEdgeSharpness();
│ │ │ │ +
244
│ │ │ │ +
246
│ │ │ │ +
251
│ │ │ │ +
253 bool IsManifold() const;
│ │ │ │ +
254
│ │ │ │ +
256 bool IsBoundary() const;
│ │ │ │ +
257
│ │ │ │ +
259 bool HasIncidentFaceSizes() const;
│ │ │ │ +
260
│ │ │ │ +
262 int GetIncidentFaceSize(int faceIndex) const;
│ │ │ │ +
263
│ │ │ │ +
265 bool HasVertexSharpness() const;
│ │ │ │
266
│ │ │ │ -
268
│ │ │ │ -
283
│ │ │ │ -
285 void TransformFacetCoordIndices(int facetTuples[], int commonOffset);
│ │ │ │ -
286
│ │ │ │ -
289 void TransformFacetCoordIndices(int facetTuples[],
│ │ │ │ -
290 int const boundaryIndices[],
│ │ │ │ -
291 int interiorOffset);
│ │ │ │ -
292
│ │ │ │ -
294 void TransformFacetCoordIndices(int facetTuples[],
│ │ │ │ -
295 int const boundaryIndices[],
│ │ │ │ -
296 int const interiorIndices[]);
│ │ │ │ -
298
│ │ │ │ -
299private:
│ │ │ │ -
300 // Private initialization methods:
│ │ │ │ -
301 bool validateArguments(Parameterization const & p,
│ │ │ │ -
302 int nRates, int const rates[], Options const & options);
│ │ │ │ -
303
│ │ │ │ -
304 void initialize(Parameterization const & p,
│ │ │ │ -
305 int nRates, int const rates[], Options const & options);
│ │ │ │ -
306
│ │ │ │ -
307 void initializeDefaults();
│ │ │ │ -
308 int initializeRates(int nRates, int const rates[]);
│ │ │ │ -
309 void initializeInventoryForParamTri(int sumOfOuterRates);
│ │ │ │ -
310 void initializeInventoryForParamQuad(int sumOfOuterRates);
│ │ │ │ -
311 void initializeInventoryForParamQPoly(int sumOfOuterRates);
│ │ │ │ -
312
│ │ │ │ -
313private:
│ │ │ │ -
314 // Private members:
│ │ │ │ -
315 Parameterization _param;
│ │ │ │ -
316
│ │ │ │ -
317 unsigned short _isValid : 1;
│ │ │ │ -
318 unsigned short _isUniform : 1;
│ │ │ │ -
319 unsigned short _triangulate : 1;
│ │ │ │ -
320 unsigned short _singleFace : 1;
│ │ │ │ -
321 unsigned short _segmentedFace : 1;
│ │ │ │ -
322 unsigned short _triangleFan : 1;
│ │ │ │ -
323 unsigned short _splitQuad : 1;
│ │ │ │ -
324
│ │ │ │ -
325 short _facetSize;
│ │ │ │ -
326 int _facetStride;
│ │ │ │ -
327 int _coordStride;
│ │ │ │ -
328
│ │ │ │ -
329 int _numGivenRates;
│ │ │ │ -
330 int _numBoundaryPoints;
│ │ │ │ -
331 int _numInteriorPoints;
│ │ │ │ -
332 int _numFacets;
│ │ │ │ -
333
│ │ │ │ -
334 int _innerRates[2];
│ │ │ │ -
335 int* _outerRates;
│ │ │ │ -
336 int _outerRatesLocal[4];
│ │ │ │ -
337};
│ │ │ │ -
│ │ │ │ -
338
│ │ │ │ -
339//
│ │ │ │ -
340// Inline implementations:
│ │ │ │ -
341//
│ │ │ │ - │ │ │ │ -
│ │ │ │ - │ │ │ │ -
344 _preserveQuads = on;
│ │ │ │ -
345 return *this;
│ │ │ │ -
346}
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
│ │ │ │ - │ │ │ │ -
349 _facetSize4 = (numIndices == 4);
│ │ │ │ -
350 return *this;
│ │ │ │ -
351}
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
│ │ │ │ - │ │ │ │ -
354 _facetStride = (short) stride;
│ │ │ │ -
355 return *this;
│ │ │ │ -
356}
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
│ │ │ │ - │ │ │ │ -
359 _coordStride = (short) stride;
│ │ │ │ -
360 return *this;
│ │ │ │ -
361}
│ │ │ │ -
│ │ │ │ -
362
│ │ │ │ -
363template <typename REAL>
│ │ │ │ -
364inline int
│ │ │ │ -
│ │ │ │ -
365Tessellation::GetVertexCoord(int vertex, REAL coord[]) const {
│ │ │ │ -
366 _param.GetVertexCoord(vertex, coord);
│ │ │ │ -
367 return 1;
│ │ │ │ -
368}
│ │ │ │ -
│ │ │ │ -
369
│ │ │ │ -
370template <typename REAL>
│ │ │ │ -
371inline int
│ │ │ │ -
│ │ │ │ -
372Tessellation::GetCoords(REAL coordTuples[]) const {
│ │ │ │ -
373 int nCoords = GetBoundaryCoords(coordTuples);
│ │ │ │ -
374 nCoords += GetInteriorCoords(coordTuples + nCoords * _coordStride);
│ │ │ │ -
375 return nCoords;
│ │ │ │ -
376}
│ │ │ │ -
│ │ │ │ -
377
│ │ │ │ -
378} // end namespace Bfr
│ │ │ │ -
379
│ │ │ │ -
380} // end namespace OPENSUBDIV_VERSION
│ │ │ │ -
381using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
382
│ │ │ │ -
383} // end namespace OpenSubdiv
│ │ │ │ -
384
│ │ │ │ -
385#endif /* OPENSUBDIV3_BFR_TESSELLATION */
│ │ │ │ +
268 float GetVertexSharpness() const;
│ │ │ │ +
269
│ │ │ │ +
271 bool HasEdgeSharpness() const;
│ │ │ │ +
272
│ │ │ │ +
274 float GetManifoldEdgeSharpness(int edgeIndex) const;
│ │ │ │ +
275
│ │ │ │ +
277 void GetIncidentFaceEdgeSharpness(int faceIndex,
│ │ │ │ +
278 float * leadingEdgeSharp, float * trailingEdgeSharp) const;
│ │ │ │ +
280
│ │ │ │ +
281protected:
│ │ │ │ +
283 friend class FaceVertex;
│ │ │ │ +
284
│ │ │ │ +
285 VertexDescriptor() { }
│ │ │ │ + │ │ │ │ +
287
│ │ │ │ +
288 typedef Vtr::internal::StackBuffer<int,8,true> IntBuffer;
│ │ │ │ +
289 typedef Vtr::internal::StackBuffer<float,16,true> FloatBuffer;
│ │ │ │ +
290
│ │ │ │ +
291 void initFaceSizes();
│ │ │ │ +
292 void initEdgeSharpness();
│ │ │ │ +
294
│ │ │ │ +
295protected:
│ │ │ │ +
297 // Member variables assigned through the above interface:
│ │ │ │ +
298 unsigned short _isValid : 1;
│ │ │ │ +
299 unsigned short _isInitialized : 1;
│ │ │ │ +
300 unsigned short _isFinalized : 1;
│ │ │ │ +
301
│ │ │ │ +
302 unsigned short _isManifold : 1;
│ │ │ │ +
303 unsigned short _isBoundary : 1;
│ │ │ │ +
304
│ │ │ │ +
305 unsigned short _hasFaceSizes : 1;
│ │ │ │ +
306 unsigned short _hasEdgeSharpness : 1;
│ │ │ │ +
307
│ │ │ │ +
308 short _numFaces;
│ │ │ │ +
309 float _vertSharpness;
│ │ │ │ +
310
│ │ │ │ +
311 FloatBuffer _faceEdgeSharpness;
│ │ │ │ +
312 IntBuffer _faceSizeOffsets;
│ │ │ │ +
314};
│ │ │ │ +
│ │ │ │ +
315
│ │ │ │ +
316//
│ │ │ │ +
317// Public inline methods for simple assignment:
│ │ │ │ +
318//
│ │ │ │ +
319inline bool
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
321 return _isValid;
│ │ │ │ +
322}
│ │ │ │ +
│ │ │ │ +
323
│ │ │ │ +
324inline void
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
326 _isManifold = isManifold;
│ │ │ │ +
327}
│ │ │ │ +
│ │ │ │ +
328inline bool
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
330 return _isManifold;
│ │ │ │ +
331}
│ │ │ │ +
│ │ │ │ +
332
│ │ │ │ +
333inline void
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
335 _isBoundary = isBoundary;
│ │ │ │ +
336}
│ │ │ │ +
│ │ │ │ +
337inline bool
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
339 return _isBoundary;
│ │ │ │ +
340}
│ │ │ │ +
│ │ │ │ +
341
│ │ │ │ +
342//
│ │ │ │ +
343// Public inline methods involving sizes of incident faces:
│ │ │ │ +
344//
│ │ │ │ +
345inline bool
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
347 return _hasFaceSizes;
│ │ │ │ +
348}
│ │ │ │ +
│ │ │ │ +
349inline void
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
351 _hasFaceSizes = false;
│ │ │ │ +
352}
│ │ │ │ +
│ │ │ │ +
353
│ │ │ │ +
354inline void
│ │ │ │ +
│ │ │ │ +
355VertexDescriptor::SetIncidentFaceSize(int incFaceIndex, int faceSize) {
│ │ │ │ +
356
│ │ │ │ +
357 if (!_hasFaceSizes) initFaceSizes();
│ │ │ │ +
358
│ │ │ │ +
359 _faceSizeOffsets[incFaceIndex] = faceSize;
│ │ │ │ +
360}
│ │ │ │ +
│ │ │ │ +
361inline int
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
363
│ │ │ │ +
364 return _isFinalized ?
│ │ │ │ +
365 (_faceSizeOffsets[incFaceIndex+1] - _faceSizeOffsets[incFaceIndex]) :
│ │ │ │ +
366 _faceSizeOffsets[incFaceIndex];
│ │ │ │ +
367}
│ │ │ │ +
│ │ │ │ +
368
│ │ │ │ +
369//
│ │ │ │ +
370// Public inline methods involving vertex sharpness:
│ │ │ │ +
371//
│ │ │ │ +
372inline bool
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
374 return _vertSharpness > 0.0f;
│ │ │ │ +
375}
│ │ │ │ +
│ │ │ │ +
376inline void
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
378 _vertSharpness = 0.0f;
│ │ │ │ +
379}
│ │ │ │ +
│ │ │ │ +
380
│ │ │ │ +
381inline void
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
383 _vertSharpness = vertSharpness;
│ │ │ │ +
384}
│ │ │ │ +
│ │ │ │ +
385inline float
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
387 return _vertSharpness;
│ │ │ │ +
388}
│ │ │ │ +
│ │ │ │ +
389
│ │ │ │ +
390//
│ │ │ │ +
391// Public inline methods involving vertex sharpness:
│ │ │ │ +
392//
│ │ │ │ +
393inline bool
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
395 return _hasEdgeSharpness;
│ │ │ │ +
396}
│ │ │ │ +
│ │ │ │ +
397inline void
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
399 _hasEdgeSharpness = false;
│ │ │ │ +
400}
│ │ │ │ +
│ │ │ │ +
401
│ │ │ │ +
402inline void
│ │ │ │ +
│ │ │ │ +
403VertexDescriptor::SetManifoldEdgeSharpness(int edgeIndex, float sharpness) {
│ │ │ │ +
404
│ │ │ │ +
405 if (!_hasEdgeSharpness) initEdgeSharpness();
│ │ │ │ +
406
│ │ │ │ +
407 // Assign the leading edge of the face after the edge (even index):
│ │ │ │ +
408 if (edgeIndex < _numFaces) {
│ │ │ │ +
409 _faceEdgeSharpness[2*edgeIndex] = sharpness;
│ │ │ │ +
410 }
│ │ │ │ +
411
│ │ │ │ +
412 // Assign the trailing edge of the face before the edge (odd index):
│ │ │ │ +
413 if (edgeIndex > 0) {
│ │ │ │ +
414 _faceEdgeSharpness[2*edgeIndex-1] = sharpness;
│ │ │ │ +
415 } else if (!IsBoundary()) {
│ │ │ │ +
416 _faceEdgeSharpness[2*_numFaces-1] = sharpness;
│ │ │ │ +
417 }
│ │ │ │ +
418}
│ │ │ │ +
│ │ │ │ +
419inline float
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
421
│ │ │ │ +
422 // All edges are first of the pair (even index) except last of boundary
│ │ │ │ +
423 return _faceEdgeSharpness[2*edgeIndex - (edgeIndex == _numFaces)];
│ │ │ │ +
424}
│ │ │ │ +
│ │ │ │ +
425
│ │ │ │ +
426inline void
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
428 float leadingEdgeSharpness, float trailingEdgeSharpness) {
│ │ │ │ +
429
│ │ │ │ +
430 if (!_hasEdgeSharpness) initEdgeSharpness();
│ │ │ │ +
431
│ │ │ │ +
432 _faceEdgeSharpness[2*faceIndex ] = leadingEdgeSharpness;
│ │ │ │ +
433 _faceEdgeSharpness[2*faceIndex+1] = trailingEdgeSharpness;
│ │ │ │ +
434}
│ │ │ │ +
│ │ │ │ +
435inline void
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
437 float * leadingEdgeSharpness, float * trailingEdgeSharpness) const {
│ │ │ │ +
438
│ │ │ │ +
439 *leadingEdgeSharpness = _faceEdgeSharpness[2*faceIndex];
│ │ │ │ +
440 *trailingEdgeSharpness = _faceEdgeSharpness[2*faceIndex+1];
│ │ │ │ +
441}
│ │ │ │ +
│ │ │ │ +
442
│ │ │ │ +
443} // end namespace Bfr
│ │ │ │ +
444
│ │ │ │ +
445} // end namespace OPENSUBDIV_VERSION
│ │ │ │ +
446using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
447} // end namespace OpenSubdiv
│ │ │ │ +
448
│ │ │ │ +
449#endif /* OPENSUBDIV3_BFR_VERTEX_DESCRIPTOR_H */
│ │ │ │ │ │ │ │ -
Simple class defining the 2D parameterization of a face.
│ │ │ │ -
int GetFaceSize() const
Returns the size (number of vertices) of the corresponding face.
│ │ │ │ -
void GetVertexCoord(int vertexIndex, REAL uvCoord[2]) const
Returns the (u,v) coordinate of a given vertex.
│ │ │ │ -
Encapsulates a specific tessellation pattern of a Parameterization.
│ │ │ │ -
int GetFaceSize() const
Return the size of the face.
│ │ │ │ -
int GetNumBoundaryCoords() const
Return the number of boundary coordinates.
│ │ │ │ - │ │ │ │ -
void TransformFacetCoordIndices(int facetTuples[], int const boundaryIndices[], int const interiorIndices[])
Reassign all facet coordinate indices.
│ │ │ │ -
int GetCoordStride() const
Return the number of elements between each coordinate.
│ │ │ │ -
int GetNumEdgeCoords(int edge) const
Return the number of coordinates within a given edge (excluding those at its end vertices)
│ │ │ │ -
int GetInteriorCoords(REAL coordTuples[]) const
Retrieve the coordinates for the boundary.
│ │ │ │ -
int GetFacetStride() const
Return the number of elements between each facet.
│ │ │ │ -
bool IsUniform() const
Return if the pattern is uniform.
│ │ │ │ -
int GetNumCoords() const
Return the number of coordinates in the entire pattern.
│ │ │ │ -
int GetCoords(REAL coordTuples[]) const
Retrieve the coordinates for the entire pattern.
│ │ │ │ -
void TransformFacetCoordIndices(int facetTuples[], int commonOffset)
Apply a common offset to all facet coordinate indices.
│ │ │ │ -
Tessellation(Parameterization const &p, int numRates, int const rates[], Options const &options=Options())
General constructor providing multiple tessellation rates for a non-uniform tessellation.
│ │ │ │ -
Parameterization GetParameterization() const
Return the Parameterization.
│ │ │ │ -
void TransformFacetCoordIndices(int facetTuples[], int const boundaryIndices[], int interiorOffset)
Reassign indices of boundary coordinates while offseting those of interior coordinates.
│ │ │ │ -
int GetFacetSize() const
Return the number of indices assigned to each facet.
│ │ │ │ -
Tessellation()=delete
Default construction is unavailable.
│ │ │ │ -
Tessellation(Parameterization const &p, int uniformRate, Options const &options=Options())
Simple constructor providing a single uniform tessellation rate.
│ │ │ │ -
int GetFacets(int facetTuples[]) const
Retrieve the facet indices for the entire pattern.
│ │ │ │ -
int GetNumFacets() const
Return the number of facets in the entire pattern.
│ │ │ │ -
int GetNumInteriorCoords() const
Return the number of interior coordinates.
│ │ │ │ -
int GetVertexCoord(int vertex, REAL coordTuples[]) const
Retrieve the coordinate for a given vertex of the face.
│ │ │ │ -
int GetBoundaryCoords(REAL coordTuples[]) const
Retrieve the coordinates for the boundary.
│ │ │ │ - │ │ │ │ -
int GetRates(int rates[]) const
Retrieve the rates assigned.
│ │ │ │ -
bool IsValid() const
Return true if correctly initialized.
│ │ │ │ -
Tessellation & operator=(Tessellation const &)=delete
│ │ │ │ -
int GetEdgeCoords(int edge, REAL coordTuples[]) const
Retrieve the coordinates for a given edge of the face (excluding those at its end vertices)
│ │ │ │ -
Options configure a Tessellation to specify the nature of both its results and the structure of the c...
│ │ │ │ - │ │ │ │ -
int GetCoordStride() const
Return the stride between (u,v) pairs.
│ │ │ │ -
Options & SetFacetSize(int numIndices)
Assign the number of indices per facet (must be 3 or 4, default is 3)
│ │ │ │ -
int GetFacetStride() const
Return the stride between facets.
│ │ │ │ - │ │ │ │ -
Options & SetCoordStride(int stride)
Assign the stride between (u,v) pairs (default is 2)
│ │ │ │ -
Options & SetFacetStride(int stride)
Assign the stride between facets (default is facet size)
│ │ │ │ -
bool PreserveQuads() const
Return if preservation of quads is set.
│ │ │ │ +
Simple class used by subclasses of SurfaceFactory to describe a vertex.
│ │ │ │ +
float GetVertexSharpness() const
Return the sharpness of the vertex.
│ │ │ │ +
bool Finalize()
Terminate the sequence of specifications.
│ │ │ │ +
void SetManifold(bool isManifold)
Declare the vertex neighborhood as manifold (ordered)
│ │ │ │ +
bool Initialize(int numIncidentFaces)
Initialize specification with the number of incident faces.
│ │ │ │ +
bool IsManifold() const
Return if vertex neighborhood is manifold.
│ │ │ │ +
bool HasEdgeSharpness() const
Return if sharpness was assigned to the incident edges.
│ │ │ │ +
int GetIncidentFaceSize(int faceIndex) const
Return the size of an incident face.
│ │ │ │ +
float GetManifoldEdgeSharpness(int edgeIndex) const
Return the sharpness assigned to a manifold edge.
│ │ │ │ +
void SetIncidentFaceEdgeSharpness(int faceIndex, float leadingEdgeSharp, float trailingEdgeSharp)
Assign sharpness to the edges of an incident face.
│ │ │ │ +
bool HasVertexSharpness() const
Return if sharpness was assigned to the vertex.
│ │ │ │ +
void ClearIncidentFaceSizes()
Remove any assigned sizes of incident faces.
│ │ │ │ +
void SetVertexSharpness(float sharpness)
Assign sharpness to the vertex.
│ │ │ │ +
void ClearVertexSharpness()
Remove any sharpness assigned to the vertex.
│ │ │ │ +
void ClearEdgeSharpness()
Remove any sharpness assigned to the incident edges.
│ │ │ │ +
void GetIncidentFaceEdgeSharpness(int faceIndex, float *leadingEdgeSharp, float *trailingEdgeSharp) const
Return the sharpness assigned to edges of an incident face.
│ │ │ │ +
bool IsBoundary() const
Return if vertex neighborhood is on a boundary.
│ │ │ │ +
bool IsValid() const
Return if instance is valid.
│ │ │ │ +
bool HasIncidentFaceSizes() const
Return if the sizes of incident faces are assigned.
│ │ │ │ +
void SetBoundary(bool isOnBoundary)
Declare the vertex neighborhood as being on a boundary.
│ │ │ │ +
void SetIncidentFaceSize(int faceIndex, int faceSize)
Assign the size of an incident face.
│ │ │ │ +
void SetManifoldEdgeSharpness(int edgeIndex, float edgeSharpness)
Assign sharpness to the edge of a manifold neighborhood.
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,12 +1,12 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -tessellation.h │ │ │ │ │ +vertexDescriptor.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ 2// Copyright 2021 Pixar │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ @@ -24,367 +24,446 @@ │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ 24 │ │ │ │ │ -25#ifndef OPENSUBDIV3_BFR_TESSELLATION_H │ │ │ │ │ -26#define OPENSUBDIV3_BFR_TESSELLATION_H │ │ │ │ │ +25#ifndef OPENSUBDIV3_BFR_VERTEX_DESCRIPTOR_H │ │ │ │ │ +26#define OPENSUBDIV3_BFR_VERTEX_DESCRIPTOR_H │ │ │ │ │ 27 │ │ │ │ │ 28#include "../version.h" │ │ │ │ │ 29 │ │ │ │ │ -30#include "../bfr/parameterization.h" │ │ │ │ │ +30#include "../vtr/stackBuffer.h" │ │ │ │ │ 31 │ │ │ │ │ 32namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ 33namespace OPENSUBDIV_VERSION { │ │ │ │ │ 34 │ │ │ │ │ 35namespace Bfr { │ │ │ │ │ 36 │ │ │ │ │ -_5_1class _T_e_s_s_e_l_l_a_t_i_o_n { │ │ │ │ │ -52public: │ │ │ │ │ -_6_5 class _O_p_t_i_o_n_s { │ │ │ │ │ -66 public: │ │ │ │ │ -_6_7 _O_p_t_i_o_n_s() : _preserveQuads(false), _facetSize4(false), │ │ │ │ │ -68 _coordStride(0), _facetStride(0) { } │ │ │ │ │ -69 │ │ │ │ │ -72 _O_p_t_i_o_n_s & _P_r_e_s_e_r_v_e_Q_u_a_d_s(bool on); │ │ │ │ │ -_7_4 bool _P_r_e_s_e_r_v_e_Q_u_a_d_s() const { return _preserveQuads; } │ │ │ │ │ -75 │ │ │ │ │ -78 _O_p_t_i_o_n_s & _S_e_t_F_a_c_e_t_S_i_z_e(int numIndices); │ │ │ │ │ -79 // @brief Return the number of indices per facet │ │ │ │ │ -_8_0 int _G_e_t_F_a_c_e_t_S_i_z_e() const { return 3 + (int)_facetSize4; } │ │ │ │ │ -81 │ │ │ │ │ -83 _O_p_t_i_o_n_s & _S_e_t_F_a_c_e_t_S_t_r_i_d_e(int stride); │ │ │ │ │ -_8_5 int _G_e_t_F_a_c_e_t_S_t_r_i_d_e() const { return _facetStride; } │ │ │ │ │ -86 │ │ │ │ │ -88 _O_p_t_i_o_n_s & _S_e_t_C_o_o_r_d_S_t_r_i_d_e(int stride); │ │ │ │ │ -_9_0 int _G_e_t_C_o_o_r_d_S_t_r_i_d_e() const { return _coordStride; } │ │ │ │ │ -91 │ │ │ │ │ -92 private: │ │ │ │ │ -93 unsigned int _preserveQuads : 1; │ │ │ │ │ -94 unsigned int _facetSize4 : 1; │ │ │ │ │ -95 │ │ │ │ │ -96 short _coordStride; │ │ │ │ │ -97 short _facetStride; │ │ │ │ │ -98 }; │ │ │ │ │ -99 │ │ │ │ │ -100public: │ │ │ │ │ -102 │ │ │ │ │ -111 │ │ │ │ │ -_1_1_8 _T_e_s_s_e_l_l_a_t_i_o_n(_P_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n const & p, int uniformRate, │ │ │ │ │ -119 _O_p_t_i_o_n_s const & options = _O_p_t_i_o_n_s()); │ │ │ │ │ -120 │ │ │ │ │ -_1_5_8 _T_e_s_s_e_l_l_a_t_i_o_n(_P_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n const & p, int numRates, int const rates[], │ │ │ │ │ -159 _O_p_t_i_o_n_s const & options = _O_p_t_i_o_n_s()); │ │ │ │ │ -160 │ │ │ │ │ -_1_6_2 bool _I_s_V_a_l_i_d() const { return _isValid; } │ │ │ │ │ -163 │ │ │ │ │ -_1_6_5 _T_e_s_s_e_l_l_a_t_i_o_n() = delete; │ │ │ │ │ -166 │ │ │ │ │ -_1_6_7 _T_e_s_s_e_l_l_a_t_i_o_n(_T_e_s_s_e_l_l_a_t_i_o_n const &) = delete; │ │ │ │ │ -_1_6_8 _T_e_s_s_e_l_l_a_t_i_o_n & _o_p_e_r_a_t_o_r_=(_T_e_s_s_e_l_l_a_t_i_o_n const &) = delete; │ │ │ │ │ -_1_6_9 _~_T_e_s_s_e_l_l_a_t_i_o_n(); │ │ │ │ │ -171 │ │ │ │ │ -173 │ │ │ │ │ -177 │ │ │ │ │ -_1_7_9 _P_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n _G_e_t_P_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n() const { return _param; } │ │ │ │ │ -180 │ │ │ │ │ -_1_8_2 int _G_e_t_F_a_c_e_S_i_z_e() const { return _param._G_e_t_F_a_c_e_S_i_z_e(); } │ │ │ │ │ -183 │ │ │ │ │ -_1_8_5 int _G_e_t_R_a_t_e_s(int rates[]) const; │ │ │ │ │ -186 │ │ │ │ │ -_1_8_8 bool _I_s_U_n_i_f_o_r_m() const { return _isUniform; } │ │ │ │ │ -190 │ │ │ │ │ -192 │ │ │ │ │ +50// │ │ │ │ │ +51// WIP - need to migrate some of these comments into Doxygen │ │ │ │ │ +52// - others will be moved to the external documentation │ │ │ │ │ +53// │ │ │ │ │ +54// It is used by subclasses of SurfaceFactory to provide a complete │ │ │ │ │ +55// topological description for each vertex of a face, i.e. invoked via │ │ │ │ │ +56// the virtual method: │ │ │ │ │ +57// │ │ │ │ │ +58// int populateFaceVertexDescriptor(Index baseFace, │ │ │ │ │ +59// int cornerVertex, │ │ │ │ │ +60// VertexDescriptor & v) const; │ │ │ │ │ +61// │ │ │ │ │ +62// Assignment of the full topology can be involved in the presence of │ │ │ │ │ +63// irregular faces, non-manifold topology or creasing around a vertex, but │ │ │ │ │ +64// many cases will be simple. For example, to specify a regular boundary │ │ │ │ │ +65// vertex of a Catmark mesh without any optional sharpness: │ │ │ │ │ +66// │ │ │ │ │ +67// int numIncidentFaces = 2; │ │ │ │ │ +68// bool vertexOnBoundary = true; │ │ │ │ │ +69// │ │ │ │ │ +70// vd.Initialize(numIncidentFaces); │ │ │ │ │ +71// vd.SetManifold(true); │ │ │ │ │ +72// vd.SetBoundary(vertexOnBoundary); │ │ │ │ │ +73// vd.ClearIncidentFaceSizes(); │ │ │ │ │ +74// vd.Finalize(); │ │ │ │ │ +75// │ │ │ │ │ +76// For a more general example, to assign a vertex of some valence whose │ │ │ │ │ +77// incident faces are of different sizes (e.g. required when triangles │ │ │ │ │ +78// appear around a vertex in an otherwise quad-dominant Catmark mesh): │ │ │ │ │ +79// │ │ │ │ │ +80// int numIncidentFaces = meshVertex.GetNumIncidentFaces(); │ │ │ │ │ +81// bool vertexOnBoundary = meshVertex.IsBoundar(); │ │ │ │ │ +82// │ │ │ │ │ +83// vd.Initialize(numIncidentFaces); │ │ │ │ │ +84// vd.SetManifold(true); │ │ │ │ │ +85// vd.SetBoundary(vertexOnBoundary); │ │ │ │ │ +86// │ │ │ │ │ +87// for (int i = 0; i < numIncidentFaces; ++i) { │ │ │ │ │ +88// vd.SetIncidentFaceSize(i, meshVertex.GetIncidentFaceSize(i)); │ │ │ │ │ +89// } │ │ │ │ │ +90// vd.Finalize(); │ │ │ │ │ +91// │ │ │ │ │ +92// These examples specify the incident faces as forming a manifold ring │ │ │ │ │ +93// (or half-ring) around the vertex, i.e. they can be specified as a │ │ │ │ │ +94// continuous, connected sequence in counter-clockwise order (and also │ │ │ │ │ +95// without degeneracies). In the case of a boundary vertex, the first │ │ │ │ │ +96// face must be on the leading edge of the boundary while the last is on │ │ │ │ │ +97// the trailing edge. For an interior vertex, which face is specified │ │ │ │ │ +98// first does not matter (since the set is periodic). │ │ │ │ │ +99// │ │ │ │ │ +100// In both cases, the location of the base face in this sequence -- the │ │ │ │ │ +101// face whose corner vertex is being described here -- must be specified │ │ │ │ │ +102// in the return value to populateFaceVertexDescriptor() (e.g. when a │ │ │ │ │ +103// boundary vertex has 3 incident faces, a return value of 0, 1 or 2 │ │ │ │ │ +104// will indicate which is the base face). │ │ │ │ │ +105// │ │ │ │ │ +106// The corresponding methods to specify mesh control vertex indices (or │ │ │ │ │ +107// face-varying indices) complete the specification of the neighborhood: │ │ │ │ │ +108// │ │ │ │ │ +109// int getFaceCornerVertexIndices(Index baseFace, int cornerVertex, │ │ │ │ │ +110// Index vertexIndices[]) const; │ │ │ │ │ +111// │ │ │ │ │ +112// int getFaceCornerFVarValueIndices(Index baseFace, int cornerVertex, │ │ │ │ │ +113// Index fvarValueIndices[], │ │ │ │ │ +114// int fvarChannel) const; │ │ │ │ │ +115// │ │ │ │ │ +116// and are invoked by the Factory when needed. │ │ │ │ │ +117// │ │ │ │ │ +118// For each incident face, the indices for all vertices of that face are │ │ │ │ │ +119// to be specified (not the one-ring or some other subset). These indices │ │ │ │ │ +120// must also be specified in an orientation relative to the vertex, i.e. │ │ │ │ │ +121// for a vertex A and an incident face with face-vertices that may be │ │ │ │ │ +122// stored internally as {D, C, A, B}, they must be specified with A first │ │ │ │ │ +123// as {A, B, C, D}. This may seem a bit cumbersome, but it has clear │ │ │ │ │ +124// advantages when dealing with face-varying indices and unordered faces. │ │ │ │ │ +125// │ │ │ │ │ +126// More compact ways of specifying vertex indices for ordered, manifold │ │ │ │ │ +127// cases may be worth exploring in future, but face-varying indices and │ │ │ │ │ +128// non-manifold (unordered) vertices will always require such a full set, │ │ │ │ │ +129// so both methods will need to co-exist. │ │ │ │ │ +130// │ │ │ │ │ +_1_3_1class _V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r { │ │ │ │ │ +132public: │ │ │ │ │ +133 // The full declaration must be enclosed by calls to these methods: │ │ │ │ │ +134 // │ │ │ │ │ +135 // Note that vertex valences or face sizes in excess of those defined │ │ │ │ │ +136 // in Bfr::Limits (typically 16-bits) are not valid. When specifying │ │ │ │ │ +137 // values in excess of these limits, initialization will fail and/or │ │ │ │ │ +138 // the descriptor will be marked invalid and finalization will fail. │ │ │ │ │ +139 // │ │ │ │ │ +140 │ │ │ │ │ +142 │ │ │ │ │ +149 │ │ │ │ │ +_1_5_1 bool _I_n_i_t_i_a_l_i_z_e(int numIncidentFaces); │ │ │ │ │ +152 │ │ │ │ │ +_1_5_4 bool _F_i_n_a_l_i_z_e(); │ │ │ │ │ +155 │ │ │ │ │ +157 bool _I_s_V_a_l_i_d() const; │ │ │ │ │ +159 │ │ │ │ │ +160 // │ │ │ │ │ +161 // WIP - need to migrate these comments into Doxygen │ │ │ │ │ +162 // │ │ │ │ │ +163 // Three groups of methods describe the topology around a vertex: │ │ │ │ │ +164 // - simple properties (vertex is a boundary, manifold, etc.) │ │ │ │ │ +165 // - sizes of incident faces (constant or size for each face) │ │ │ │ │ +166 // - sharpness of the vertex and its incident edges (optional) │ │ │ │ │ +167 // │ │ │ │ │ +168 │ │ │ │ │ +169 // Manifold and boundary conditions: │ │ │ │ │ +170 // │ │ │ │ │ +171 // The manifold property is a strict condition but preferred for │ │ │ │ │ +172 // efficiency and is usually available from common connected mesh │ │ │ │ │ +173 // representations. When declaring the topology as "manifold", │ │ │ │ │ +174 // the Factory assumes the following: │ │ │ │ │ +175 // │ │ │ │ │ +176 // - all incident faces are "ordered" (counter-clockwise) │ │ │ │ │ +177 // - all incident faces are consistently oriented │ │ │ │ │ +178 // - all incident edges are non-degenerate │ │ │ │ │ +179 // │ │ │ │ │ +180 // If not certain that all of these conditions are met, it is best │ │ │ │ │ +181 // to not declare manifold -- leaving the Factory to make sense of │ │ │ │ │ +182 // the set of incident faces from the face-vertex indices that are │ │ │ │ │ +183 // provided elsewhere. │ │ │ │ │ +184 // │ │ │ │ │ +185 │ │ │ │ │ +187 │ │ │ │ │ +191 │ │ │ │ │ +193 void _S_e_t_M_a_n_i_f_o_l_d(bool isManifold); │ │ │ │ │ +194 │ │ │ │ │ +196 void _S_e_t_B_o_u_n_d_a_r_y(bool isOnBoundary); │ │ │ │ │ +197 │ │ │ │ │ +199 void _S_e_t_I_n_c_i_d_e_n_t_F_a_c_e_S_i_z_e(int faceIndex, int faceSize); │ │ │ │ │ +200 │ │ │ │ │ +202 void _C_l_e_a_r_I_n_c_i_d_e_n_t_F_a_c_e_S_i_z_e_s(); │ │ │ │ │ 203 │ │ │ │ │ -_2_0_5 int _G_e_t_N_u_m_C_o_o_r_d_s() const { return _numInteriorPoints + _numBoundaryPoints; │ │ │ │ │ -} │ │ │ │ │ +205 void _S_e_t_V_e_r_t_e_x_S_h_a_r_p_n_e_s_s(float sharpness); │ │ │ │ │ 206 │ │ │ │ │ -_2_0_8 int _G_e_t_C_o_o_r_d_S_t_r_i_d_e() const { return _coordStride; } │ │ │ │ │ +208 void _C_l_e_a_r_V_e_r_t_e_x_S_h_a_r_p_n_e_s_s(); │ │ │ │ │ 209 │ │ │ │ │ -_2_1_1 int _G_e_t_N_u_m_B_o_u_n_d_a_r_y_C_o_o_r_d_s() const { return _numBoundaryPoints; } │ │ │ │ │ -212 │ │ │ │ │ -_2_1_4 int _G_e_t_N_u_m_I_n_t_e_r_i_o_r_C_o_o_r_d_s() const { return _numInteriorPoints; } │ │ │ │ │ -215 │ │ │ │ │ -_2_1_8 int _G_e_t_N_u_m_E_d_g_e_C_o_o_r_d_s(int edge) const { return _outerRates[edge] - 1; } │ │ │ │ │ -219 │ │ │ │ │ -221 template │ │ │ │ │ -222 int _G_e_t_C_o_o_r_d_s(REAL coordTuples[]) const; │ │ │ │ │ -223 │ │ │ │ │ -225 template │ │ │ │ │ -_2_2_6 int _G_e_t_B_o_u_n_d_a_r_y_C_o_o_r_d_s(REAL coordTuples[]) const; │ │ │ │ │ -227 │ │ │ │ │ -229 template │ │ │ │ │ -_2_3_0 int _G_e_t_I_n_t_e_r_i_o_r_C_o_o_r_d_s(REAL coordTuples[]) const; │ │ │ │ │ -231 │ │ │ │ │ -233 template │ │ │ │ │ -234 int _G_e_t_V_e_r_t_e_x_C_o_o_r_d(int vertex, REAL coordTuples[]) const; │ │ │ │ │ -235 │ │ │ │ │ -238 template │ │ │ │ │ -_2_3_9 int _G_e_t_E_d_g_e_C_o_o_r_d_s(int edge, REAL coordTuples[]) const; │ │ │ │ │ -241 │ │ │ │ │ -243 │ │ │ │ │ -253 │ │ │ │ │ -_2_5_5 int _G_e_t_N_u_m_F_a_c_e_t_s() const { return _numFacets; } │ │ │ │ │ -256 │ │ │ │ │ -_2_5_8 int _G_e_t_F_a_c_e_t_S_i_z_e() const { return _facetSize; } │ │ │ │ │ -259 │ │ │ │ │ -_2_6_1 int _G_e_t_F_a_c_e_t_S_t_r_i_d_e() const { return _facetStride; } │ │ │ │ │ -262 │ │ │ │ │ -_2_6_4 int _G_e_t_F_a_c_e_t_s(int facetTuples[]) const; │ │ │ │ │ +221 void _S_e_t_M_a_n_i_f_o_l_d_E_d_g_e_S_h_a_r_p_n_e_s_s(int edgeIndex, float edgeSharpness); │ │ │ │ │ +222 │ │ │ │ │ +238 void _S_e_t_I_n_c_i_d_e_n_t_F_a_c_e_E_d_g_e_S_h_a_r_p_n_e_s_s(int faceIndex, float leadingEdgeSharp, │ │ │ │ │ +239 float trailingEdgeSharp); │ │ │ │ │ +240 │ │ │ │ │ +242 void _C_l_e_a_r_E_d_g_e_S_h_a_r_p_n_e_s_s(); │ │ │ │ │ +244 │ │ │ │ │ +246 │ │ │ │ │ +251 │ │ │ │ │ +253 bool _I_s_M_a_n_i_f_o_l_d() const; │ │ │ │ │ +254 │ │ │ │ │ +256 bool _I_s_B_o_u_n_d_a_r_y() const; │ │ │ │ │ +257 │ │ │ │ │ +259 bool _H_a_s_I_n_c_i_d_e_n_t_F_a_c_e_S_i_z_e_s() const; │ │ │ │ │ +260 │ │ │ │ │ +262 int _G_e_t_I_n_c_i_d_e_n_t_F_a_c_e_S_i_z_e(int faceIndex) const; │ │ │ │ │ +263 │ │ │ │ │ +265 bool _H_a_s_V_e_r_t_e_x_S_h_a_r_p_n_e_s_s() const; │ │ │ │ │ 266 │ │ │ │ │ -268 │ │ │ │ │ -283 │ │ │ │ │ -_2_8_5 void _T_r_a_n_s_f_o_r_m_F_a_c_e_t_C_o_o_r_d_I_n_d_i_c_e_s(int facetTuples[], int commonOffset); │ │ │ │ │ -286 │ │ │ │ │ -_2_8_9 void _T_r_a_n_s_f_o_r_m_F_a_c_e_t_C_o_o_r_d_I_n_d_i_c_e_s(int facetTuples[], │ │ │ │ │ -290 int const boundaryIndices[], │ │ │ │ │ -291 int interiorOffset); │ │ │ │ │ -292 │ │ │ │ │ -_2_9_4 void _T_r_a_n_s_f_o_r_m_F_a_c_e_t_C_o_o_r_d_I_n_d_i_c_e_s(int facetTuples[], │ │ │ │ │ -295 int const boundaryIndices[], │ │ │ │ │ -296 int const interiorIndices[]); │ │ │ │ │ -298 │ │ │ │ │ -299private: │ │ │ │ │ -300 // Private initialization methods: │ │ │ │ │ -301 bool validateArguments(_P_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n const & p, │ │ │ │ │ -302 int nRates, int const rates[], _O_p_t_i_o_n_s const & options); │ │ │ │ │ -303 │ │ │ │ │ -304 void initialize(_P_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n const & p, │ │ │ │ │ -305 int nRates, int const rates[], _O_p_t_i_o_n_s const & options); │ │ │ │ │ -306 │ │ │ │ │ -307 void initializeDefaults(); │ │ │ │ │ -308 int initializeRates(int nRates, int const rates[]); │ │ │ │ │ -309 void initializeInventoryForParamTri(int sumOfOuterRates); │ │ │ │ │ -310 void initializeInventoryForParamQuad(int sumOfOuterRates); │ │ │ │ │ -311 void initializeInventoryForParamQPoly(int sumOfOuterRates); │ │ │ │ │ -312 │ │ │ │ │ -313private: │ │ │ │ │ -314 // Private members: │ │ │ │ │ -315 _P_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n _param; │ │ │ │ │ -316 │ │ │ │ │ -317 unsigned short _isValid : 1; │ │ │ │ │ -318 unsigned short _isUniform : 1; │ │ │ │ │ -319 unsigned short _triangulate : 1; │ │ │ │ │ -320 unsigned short _singleFace : 1; │ │ │ │ │ -321 unsigned short _segmentedFace : 1; │ │ │ │ │ -322 unsigned short _triangleFan : 1; │ │ │ │ │ -323 unsigned short _splitQuad : 1; │ │ │ │ │ -324 │ │ │ │ │ -325 short _facetSize; │ │ │ │ │ -326 int _facetStride; │ │ │ │ │ -327 int _coordStride; │ │ │ │ │ -328 │ │ │ │ │ -329 int _numGivenRates; │ │ │ │ │ -330 int _numBoundaryPoints; │ │ │ │ │ -331 int _numInteriorPoints; │ │ │ │ │ -332 int _numFacets; │ │ │ │ │ -333 │ │ │ │ │ -334 int _innerRates[2]; │ │ │ │ │ -335 int* _outerRates; │ │ │ │ │ -336 int _outerRatesLocal[4]; │ │ │ │ │ -337}; │ │ │ │ │ -338 │ │ │ │ │ -339// │ │ │ │ │ -340// Inline implementations: │ │ │ │ │ -341// │ │ │ │ │ -342inline _T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s & │ │ │ │ │ -_3_4_3_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s_:_:_P_r_e_s_e_r_v_e_Q_u_a_d_s(bool on) { │ │ │ │ │ -344 _preserveQuads = on; │ │ │ │ │ -345 return *this; │ │ │ │ │ -346} │ │ │ │ │ -347inline _T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s & │ │ │ │ │ -_3_4_8_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s_:_:_S_e_t_F_a_c_e_t_S_i_z_e(int numIndices) { │ │ │ │ │ -349 _facetSize4 = (numIndices == 4); │ │ │ │ │ -350 return *this; │ │ │ │ │ -351} │ │ │ │ │ -352inline _T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s & │ │ │ │ │ -_3_5_3_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s_:_:_S_e_t_F_a_c_e_t_S_t_r_i_d_e(int stride) { │ │ │ │ │ -354 _facetStride = (short) stride; │ │ │ │ │ -355 return *this; │ │ │ │ │ -356} │ │ │ │ │ -357inline _T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s & │ │ │ │ │ -_3_5_8_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s_:_:_S_e_t_C_o_o_r_d_S_t_r_i_d_e(int stride) { │ │ │ │ │ -359 _coordStride = (short) stride; │ │ │ │ │ -360 return *this; │ │ │ │ │ -361} │ │ │ │ │ -362 │ │ │ │ │ -363template │ │ │ │ │ -364inline int │ │ │ │ │ -_3_6_5_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_V_e_r_t_e_x_C_o_o_r_d(int vertex, REAL coord[]) const { │ │ │ │ │ -366 _param._G_e_t_V_e_r_t_e_x_C_o_o_r_d(vertex, coord); │ │ │ │ │ -367 return 1; │ │ │ │ │ -368} │ │ │ │ │ -369 │ │ │ │ │ -370template │ │ │ │ │ -371inline int │ │ │ │ │ -_3_7_2_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_C_o_o_r_d_s(REAL coordTuples[]) const { │ │ │ │ │ -373 int nCoords = _G_e_t_B_o_u_n_d_a_r_y_C_o_o_r_d_s(coordTuples); │ │ │ │ │ -374 nCoords += _G_e_t_I_n_t_e_r_i_o_r_C_o_o_r_d_s(coordTuples + nCoords * _coordStride); │ │ │ │ │ -375 return nCoords; │ │ │ │ │ -376} │ │ │ │ │ -377 │ │ │ │ │ -378} // end namespace Bfr │ │ │ │ │ -379 │ │ │ │ │ -380} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ -381using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -382 │ │ │ │ │ -383} // end namespace OpenSubdiv │ │ │ │ │ -384 │ │ │ │ │ -385#endif /* OPENSUBDIV3_BFR_TESSELLATION */ │ │ │ │ │ +268 float _G_e_t_V_e_r_t_e_x_S_h_a_r_p_n_e_s_s() const; │ │ │ │ │ +269 │ │ │ │ │ +271 bool _H_a_s_E_d_g_e_S_h_a_r_p_n_e_s_s() const; │ │ │ │ │ +272 │ │ │ │ │ +274 float _G_e_t_M_a_n_i_f_o_l_d_E_d_g_e_S_h_a_r_p_n_e_s_s(int edgeIndex) const; │ │ │ │ │ +275 │ │ │ │ │ +277 void _G_e_t_I_n_c_i_d_e_n_t_F_a_c_e_E_d_g_e_S_h_a_r_p_n_e_s_s(int faceIndex, │ │ │ │ │ +278 float * leadingEdgeSharp, float * trailingEdgeSharp) const; │ │ │ │ │ +280 │ │ │ │ │ +281protected: │ │ │ │ │ +283 friend class FaceVertex; │ │ │ │ │ +284 │ │ │ │ │ +285 _V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r() { } │ │ │ │ │ +286 _~_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r() { } │ │ │ │ │ +287 │ │ │ │ │ +288 typedef Vtr::internal::StackBuffer IntBuffer; │ │ │ │ │ +289 typedef Vtr::internal::StackBuffer FloatBuffer; │ │ │ │ │ +290 │ │ │ │ │ +291 void initFaceSizes(); │ │ │ │ │ +292 void initEdgeSharpness(); │ │ │ │ │ +294 │ │ │ │ │ +295protected: │ │ │ │ │ +297 // Member variables assigned through the above interface: │ │ │ │ │ +298 unsigned short _isValid : 1; │ │ │ │ │ +299 unsigned short _isInitialized : 1; │ │ │ │ │ +300 unsigned short _isFinalized : 1; │ │ │ │ │ +301 │ │ │ │ │ +302 unsigned short _isManifold : 1; │ │ │ │ │ +303 unsigned short _isBoundary : 1; │ │ │ │ │ +304 │ │ │ │ │ +305 unsigned short _hasFaceSizes : 1; │ │ │ │ │ +306 unsigned short _hasEdgeSharpness : 1; │ │ │ │ │ +307 │ │ │ │ │ +308 short _numFaces; │ │ │ │ │ +309 float _vertSharpness; │ │ │ │ │ +310 │ │ │ │ │ +311 FloatBuffer _faceEdgeSharpness; │ │ │ │ │ +312 IntBuffer _faceSizeOffsets; │ │ │ │ │ +314}; │ │ │ │ │ +315 │ │ │ │ │ +316// │ │ │ │ │ +317// Public inline methods for simple assignment: │ │ │ │ │ +318// │ │ │ │ │ +319inline bool │ │ │ │ │ +_3_2_0_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_I_s_V_a_l_i_d() const { │ │ │ │ │ +321 return _isValid; │ │ │ │ │ +322} │ │ │ │ │ +323 │ │ │ │ │ +324inline void │ │ │ │ │ +_3_2_5_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_S_e_t_M_a_n_i_f_o_l_d(bool isManifold) { │ │ │ │ │ +326 _isManifold = isManifold; │ │ │ │ │ +327} │ │ │ │ │ +328inline bool │ │ │ │ │ +_3_2_9_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_I_s_M_a_n_i_f_o_l_d() const { │ │ │ │ │ +330 return _isManifold; │ │ │ │ │ +331} │ │ │ │ │ +332 │ │ │ │ │ +333inline void │ │ │ │ │ +_3_3_4_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_S_e_t_B_o_u_n_d_a_r_y(bool isBoundary) { │ │ │ │ │ +335 _isBoundary = isBoundary; │ │ │ │ │ +336} │ │ │ │ │ +337inline bool │ │ │ │ │ +_3_3_8_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_I_s_B_o_u_n_d_a_r_y() const { │ │ │ │ │ +339 return _isBoundary; │ │ │ │ │ +340} │ │ │ │ │ +341 │ │ │ │ │ +342// │ │ │ │ │ +343// Public inline methods involving sizes of incident faces: │ │ │ │ │ +344// │ │ │ │ │ +345inline bool │ │ │ │ │ +_3_4_6_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_H_a_s_I_n_c_i_d_e_n_t_F_a_c_e_S_i_z_e_s() const { │ │ │ │ │ +347 return _hasFaceSizes; │ │ │ │ │ +348} │ │ │ │ │ +349inline void │ │ │ │ │ +_3_5_0_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_C_l_e_a_r_I_n_c_i_d_e_n_t_F_a_c_e_S_i_z_e_s() { │ │ │ │ │ +351 _hasFaceSizes = false; │ │ │ │ │ +352} │ │ │ │ │ +353 │ │ │ │ │ +354inline void │ │ │ │ │ +_3_5_5_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_S_e_t_I_n_c_i_d_e_n_t_F_a_c_e_S_i_z_e(int incFaceIndex, int faceSize) { │ │ │ │ │ +356 │ │ │ │ │ +357 if (!_hasFaceSizes) initFaceSizes(); │ │ │ │ │ +358 │ │ │ │ │ +359 _faceSizeOffsets[incFaceIndex] = faceSize; │ │ │ │ │ +360} │ │ │ │ │ +361inline int │ │ │ │ │ +_3_6_2_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_G_e_t_I_n_c_i_d_e_n_t_F_a_c_e_S_i_z_e(int incFaceIndex) const { │ │ │ │ │ +363 │ │ │ │ │ +364 return _isFinalized ? │ │ │ │ │ +365 (_faceSizeOffsets[incFaceIndex+1] - _faceSizeOffsets[incFaceIndex]) : │ │ │ │ │ +366 _faceSizeOffsets[incFaceIndex]; │ │ │ │ │ +367} │ │ │ │ │ +368 │ │ │ │ │ +369// │ │ │ │ │ +370// Public inline methods involving vertex sharpness: │ │ │ │ │ +371// │ │ │ │ │ +372inline bool │ │ │ │ │ +_3_7_3_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_H_a_s_V_e_r_t_e_x_S_h_a_r_p_n_e_s_s() const { │ │ │ │ │ +374 return _vertSharpness > 0.0f; │ │ │ │ │ +375} │ │ │ │ │ +376inline void │ │ │ │ │ +_3_7_7_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_C_l_e_a_r_V_e_r_t_e_x_S_h_a_r_p_n_e_s_s() { │ │ │ │ │ +378 _vertSharpness = 0.0f; │ │ │ │ │ +379} │ │ │ │ │ +380 │ │ │ │ │ +381inline void │ │ │ │ │ +_3_8_2_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_S_e_t_V_e_r_t_e_x_S_h_a_r_p_n_e_s_s(float vertSharpness) { │ │ │ │ │ +383 _vertSharpness = vertSharpness; │ │ │ │ │ +384} │ │ │ │ │ +385inline float │ │ │ │ │ +_3_8_6_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_G_e_t_V_e_r_t_e_x_S_h_a_r_p_n_e_s_s() const { │ │ │ │ │ +387 return _vertSharpness; │ │ │ │ │ +388} │ │ │ │ │ +389 │ │ │ │ │ +390// │ │ │ │ │ +391// Public inline methods involving vertex sharpness: │ │ │ │ │ +392// │ │ │ │ │ +393inline bool │ │ │ │ │ +_3_9_4_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_H_a_s_E_d_g_e_S_h_a_r_p_n_e_s_s() const { │ │ │ │ │ +395 return _hasEdgeSharpness; │ │ │ │ │ +396} │ │ │ │ │ +397inline void │ │ │ │ │ +_3_9_8_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_C_l_e_a_r_E_d_g_e_S_h_a_r_p_n_e_s_s() { │ │ │ │ │ +399 _hasEdgeSharpness = false; │ │ │ │ │ +400} │ │ │ │ │ +401 │ │ │ │ │ +402inline void │ │ │ │ │ +_4_0_3_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_S_e_t_M_a_n_i_f_o_l_d_E_d_g_e_S_h_a_r_p_n_e_s_s(int edgeIndex, float sharpness) { │ │ │ │ │ +404 │ │ │ │ │ +405 if (!_hasEdgeSharpness) initEdgeSharpness(); │ │ │ │ │ +406 │ │ │ │ │ +407 // Assign the leading edge of the face after the edge (even index): │ │ │ │ │ +408 if (edgeIndex < _numFaces) { │ │ │ │ │ +409 _faceEdgeSharpness[2*edgeIndex] = sharpness; │ │ │ │ │ +410 } │ │ │ │ │ +411 │ │ │ │ │ +412 // Assign the trailing edge of the face before the edge (odd index): │ │ │ │ │ +413 if (edgeIndex > 0) { │ │ │ │ │ +414 _faceEdgeSharpness[2*edgeIndex-1] = sharpness; │ │ │ │ │ +415 } else if (!_I_s_B_o_u_n_d_a_r_y()) { │ │ │ │ │ +416 _faceEdgeSharpness[2*_numFaces-1] = sharpness; │ │ │ │ │ +417 } │ │ │ │ │ +418} │ │ │ │ │ +419inline float │ │ │ │ │ +_4_2_0_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_G_e_t_M_a_n_i_f_o_l_d_E_d_g_e_S_h_a_r_p_n_e_s_s(int edgeIndex) const { │ │ │ │ │ +421 │ │ │ │ │ +422 // All edges are first of the pair (even index) except last of boundary │ │ │ │ │ +423 return _faceEdgeSharpness[2*edgeIndex - (edgeIndex == _numFaces)]; │ │ │ │ │ +424} │ │ │ │ │ +425 │ │ │ │ │ +426inline void │ │ │ │ │ +_4_2_7_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_S_e_t_I_n_c_i_d_e_n_t_F_a_c_e_E_d_g_e_S_h_a_r_p_n_e_s_s(int faceIndex, │ │ │ │ │ +428 float leadingEdgeSharpness, float trailingEdgeSharpness) { │ │ │ │ │ +429 │ │ │ │ │ +430 if (!_hasEdgeSharpness) initEdgeSharpness(); │ │ │ │ │ +431 │ │ │ │ │ +432 _faceEdgeSharpness[2*faceIndex ] = leadingEdgeSharpness; │ │ │ │ │ +433 _faceEdgeSharpness[2*faceIndex+1] = trailingEdgeSharpness; │ │ │ │ │ +434} │ │ │ │ │ +435inline void │ │ │ │ │ +_4_3_6_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_G_e_t_I_n_c_i_d_e_n_t_F_a_c_e_E_d_g_e_S_h_a_r_p_n_e_s_s(int faceIndex, │ │ │ │ │ +437 float * leadingEdgeSharpness, float * trailingEdgeSharpness) const { │ │ │ │ │ +438 │ │ │ │ │ +439 *leadingEdgeSharpness = _faceEdgeSharpness[2*faceIndex]; │ │ │ │ │ +440 *trailingEdgeSharpness = _faceEdgeSharpness[2*faceIndex+1]; │ │ │ │ │ +441} │ │ │ │ │ +442 │ │ │ │ │ +443} // end namespace Bfr │ │ │ │ │ +444 │ │ │ │ │ +445} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ +446using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +447} // end namespace OpenSubdiv │ │ │ │ │ +448 │ │ │ │ │ +449#endif /* OPENSUBDIV3_BFR_VERTEX_DESCRIPTOR_H */ │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_P_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n │ │ │ │ │ -Simple class defining the 2D parameterization of a face. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n_._h_:_5_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_P_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n_:_:_G_e_t_F_a_c_e_S_i_z_e │ │ │ │ │ -int GetFaceSize() const │ │ │ │ │ -Returns the size (number of vertices) of the corresponding face. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n_._h_:_1_0_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_P_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n_:_:_G_e_t_V_e_r_t_e_x_C_o_o_r_d │ │ │ │ │ -void GetVertexCoord(int vertexIndex, REAL uvCoord[2]) const │ │ │ │ │ -Returns the (u,v) coordinate of a given vertex. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n │ │ │ │ │ -Encapsulates a specific tessellation pattern of a Parameterization. │ │ │ │ │ -DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_5_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_F_a_c_e_S_i_z_e │ │ │ │ │ -int GetFaceSize() const │ │ │ │ │ -Return the size of the face. │ │ │ │ │ -DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_1_8_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_N_u_m_B_o_u_n_d_a_r_y_C_o_o_r_d_s │ │ │ │ │ -int GetNumBoundaryCoords() const │ │ │ │ │ -Return the number of boundary coordinates. │ │ │ │ │ -DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_2_1_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_~_T_e_s_s_e_l_l_a_t_i_o_n │ │ │ │ │ -~Tessellation() │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_T_r_a_n_s_f_o_r_m_F_a_c_e_t_C_o_o_r_d_I_n_d_i_c_e_s │ │ │ │ │ -void TransformFacetCoordIndices(int facetTuples[], int const boundaryIndices[], │ │ │ │ │ -int const interiorIndices[]) │ │ │ │ │ -Reassign all facet coordinate indices. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_C_o_o_r_d_S_t_r_i_d_e │ │ │ │ │ -int GetCoordStride() const │ │ │ │ │ -Return the number of elements between each coordinate. │ │ │ │ │ -DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_2_0_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_N_u_m_E_d_g_e_C_o_o_r_d_s │ │ │ │ │ -int GetNumEdgeCoords(int edge) const │ │ │ │ │ -Return the number of coordinates within a given edge (excluding those at its │ │ │ │ │ -end vertices) │ │ │ │ │ -DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_2_1_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_I_n_t_e_r_i_o_r_C_o_o_r_d_s │ │ │ │ │ -int GetInteriorCoords(REAL coordTuples[]) const │ │ │ │ │ -Retrieve the coordinates for the boundary. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_F_a_c_e_t_S_t_r_i_d_e │ │ │ │ │ -int GetFacetStride() const │ │ │ │ │ -Return the number of elements between each facet. │ │ │ │ │ -DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_2_6_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_I_s_U_n_i_f_o_r_m │ │ │ │ │ -bool IsUniform() const │ │ │ │ │ -Return if the pattern is uniform. │ │ │ │ │ -DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_1_8_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_N_u_m_C_o_o_r_d_s │ │ │ │ │ -int GetNumCoords() const │ │ │ │ │ -Return the number of coordinates in the entire pattern. │ │ │ │ │ -DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_2_0_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_C_o_o_r_d_s │ │ │ │ │ -int GetCoords(REAL coordTuples[]) const │ │ │ │ │ -Retrieve the coordinates for the entire pattern. │ │ │ │ │ -DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_3_7_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_T_r_a_n_s_f_o_r_m_F_a_c_e_t_C_o_o_r_d_I_n_d_i_c_e_s │ │ │ │ │ -void TransformFacetCoordIndices(int facetTuples[], int commonOffset) │ │ │ │ │ -Apply a common offset to all facet coordinate indices. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_T_e_s_s_e_l_l_a_t_i_o_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. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_P_a_r_a_m_e_t_e_r_i_z_a_t_i_o_n │ │ │ │ │ -Parameterization GetParameterization() const │ │ │ │ │ -Return the Parameterization. │ │ │ │ │ -DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_1_7_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_T_r_a_n_s_f_o_r_m_F_a_c_e_t_C_o_o_r_d_I_n_d_i_c_e_s │ │ │ │ │ -void TransformFacetCoordIndices(int facetTuples[], int const boundaryIndices[], │ │ │ │ │ -int interiorOffset) │ │ │ │ │ -Reassign indices of boundary coordinates while offseting those of interior │ │ │ │ │ -coordinates. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_F_a_c_e_t_S_i_z_e │ │ │ │ │ -int GetFacetSize() const │ │ │ │ │ -Return the number of indices assigned to each facet. │ │ │ │ │ -DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_2_5_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_T_e_s_s_e_l_l_a_t_i_o_n │ │ │ │ │ -Tessellation()=delete │ │ │ │ │ -Default construction is unavailable. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_T_e_s_s_e_l_l_a_t_i_o_n │ │ │ │ │ -Tessellation(Parameterization const &p, int uniformRate, Options const │ │ │ │ │ -&options=Options()) │ │ │ │ │ -Simple constructor providing a single uniform tessellation rate. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_F_a_c_e_t_s │ │ │ │ │ -int GetFacets(int facetTuples[]) const │ │ │ │ │ -Retrieve the facet indices for the entire pattern. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_N_u_m_F_a_c_e_t_s │ │ │ │ │ -int GetNumFacets() const │ │ │ │ │ -Return the number of facets in the entire pattern. │ │ │ │ │ -DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_2_5_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_N_u_m_I_n_t_e_r_i_o_r_C_o_o_r_d_s │ │ │ │ │ -int GetNumInteriorCoords() const │ │ │ │ │ -Return the number of interior coordinates. │ │ │ │ │ -DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_2_1_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_V_e_r_t_e_x_C_o_o_r_d │ │ │ │ │ -int GetVertexCoord(int vertex, REAL coordTuples[]) const │ │ │ │ │ -Retrieve the coordinate for a given vertex of the face. │ │ │ │ │ -DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_3_6_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_B_o_u_n_d_a_r_y_C_o_o_r_d_s │ │ │ │ │ -int GetBoundaryCoords(REAL coordTuples[]) const │ │ │ │ │ -Retrieve the coordinates for the boundary. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_T_e_s_s_e_l_l_a_t_i_o_n │ │ │ │ │ -Tessellation(Tessellation const &)=delete │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_R_a_t_e_s │ │ │ │ │ -int GetRates(int rates[]) const │ │ │ │ │ -Retrieve the rates assigned. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_I_s_V_a_l_i_d │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ +Simple class used by subclasses of SurfaceFactory to describe a vertex. │ │ │ │ │ +DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_1_3_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_G_e_t_V_e_r_t_e_x_S_h_a_r_p_n_e_s_s │ │ │ │ │ +float GetVertexSharpness() const │ │ │ │ │ +Return the sharpness of the vertex. │ │ │ │ │ +DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_8_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_F_i_n_a_l_i_z_e │ │ │ │ │ +bool Finalize() │ │ │ │ │ +Terminate the sequence of specifications. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_S_e_t_M_a_n_i_f_o_l_d │ │ │ │ │ +void SetManifold(bool isManifold) │ │ │ │ │ +Declare the vertex neighborhood as manifold (ordered) │ │ │ │ │ +DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_2_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_I_n_i_t_i_a_l_i_z_e │ │ │ │ │ +bool Initialize(int numIncidentFaces) │ │ │ │ │ +Initialize specification with the number of incident faces. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_I_s_M_a_n_i_f_o_l_d │ │ │ │ │ +bool IsManifold() const │ │ │ │ │ +Return if vertex neighborhood is manifold. │ │ │ │ │ +DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_2_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_H_a_s_E_d_g_e_S_h_a_r_p_n_e_s_s │ │ │ │ │ +bool HasEdgeSharpness() const │ │ │ │ │ +Return if sharpness was assigned to the incident edges. │ │ │ │ │ +DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_9_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_G_e_t_I_n_c_i_d_e_n_t_F_a_c_e_S_i_z_e │ │ │ │ │ +int GetIncidentFaceSize(int faceIndex) const │ │ │ │ │ +Return the size of an incident face. │ │ │ │ │ +DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_6_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_G_e_t_M_a_n_i_f_o_l_d_E_d_g_e_S_h_a_r_p_n_e_s_s │ │ │ │ │ +float GetManifoldEdgeSharpness(int edgeIndex) const │ │ │ │ │ +Return the sharpness assigned to a manifold edge. │ │ │ │ │ +DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_4_2_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_: │ │ │ │ │ +_S_e_t_I_n_c_i_d_e_n_t_F_a_c_e_E_d_g_e_S_h_a_r_p_n_e_s_s │ │ │ │ │ +void SetIncidentFaceEdgeSharpness(int faceIndex, float leadingEdgeSharp, float │ │ │ │ │ +trailingEdgeSharp) │ │ │ │ │ +Assign sharpness to the edges of an incident face. │ │ │ │ │ +DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_4_2_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_H_a_s_V_e_r_t_e_x_S_h_a_r_p_n_e_s_s │ │ │ │ │ +bool HasVertexSharpness() const │ │ │ │ │ +Return if sharpness was assigned to the vertex. │ │ │ │ │ +DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_7_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_C_l_e_a_r_I_n_c_i_d_e_n_t_F_a_c_e_S_i_z_e_s │ │ │ │ │ +void ClearIncidentFaceSizes() │ │ │ │ │ +Remove any assigned sizes of incident faces. │ │ │ │ │ +DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_5_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_S_e_t_V_e_r_t_e_x_S_h_a_r_p_n_e_s_s │ │ │ │ │ +void SetVertexSharpness(float sharpness) │ │ │ │ │ +Assign sharpness to the vertex. │ │ │ │ │ +DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_8_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_C_l_e_a_r_V_e_r_t_e_x_S_h_a_r_p_n_e_s_s │ │ │ │ │ +void ClearVertexSharpness() │ │ │ │ │ +Remove any sharpness assigned to the vertex. │ │ │ │ │ +DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_7_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_C_l_e_a_r_E_d_g_e_S_h_a_r_p_n_e_s_s │ │ │ │ │ +void ClearEdgeSharpness() │ │ │ │ │ +Remove any sharpness assigned to the incident edges. │ │ │ │ │ +DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_9_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_: │ │ │ │ │ +_G_e_t_I_n_c_i_d_e_n_t_F_a_c_e_E_d_g_e_S_h_a_r_p_n_e_s_s │ │ │ │ │ +void GetIncidentFaceEdgeSharpness(int faceIndex, float *leadingEdgeSharp, float │ │ │ │ │ +*trailingEdgeSharp) const │ │ │ │ │ +Return the sharpness assigned to edges of an incident face. │ │ │ │ │ +DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_4_3_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_I_s_B_o_u_n_d_a_r_y │ │ │ │ │ +bool IsBoundary() const │ │ │ │ │ +Return if vertex neighborhood is on a boundary. │ │ │ │ │ +DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_3_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_I_s_V_a_l_i_d │ │ │ │ │ bool IsValid() const │ │ │ │ │ -Return true if correctly initialized. │ │ │ │ │ -DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_1_6_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ -Tessellation & operator=(Tessellation const &)=delete │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_G_e_t_E_d_g_e_C_o_o_r_d_s │ │ │ │ │ -int GetEdgeCoords(int edge, REAL coordTuples[]) const │ │ │ │ │ -Retrieve the coordinates for a given edge of the face (excluding those at its │ │ │ │ │ -end vertices) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s │ │ │ │ │ -Options configure a Tessellation to specify the nature of both its results and │ │ │ │ │ -the structure of the c... │ │ │ │ │ -DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_6_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s_:_:_O_p_t_i_o_n_s │ │ │ │ │ -Options() │ │ │ │ │ -DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_6_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s_:_:_G_e_t_C_o_o_r_d_S_t_r_i_d_e │ │ │ │ │ -int GetCoordStride() const │ │ │ │ │ -Return the stride between (u,v) pairs. │ │ │ │ │ -DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_9_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s_:_:_S_e_t_F_a_c_e_t_S_i_z_e │ │ │ │ │ -Options & SetFacetSize(int numIndices) │ │ │ │ │ -Assign the number of indices per facet (must be 3 or 4, default is 3) │ │ │ │ │ -DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_3_4_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s_:_:_G_e_t_F_a_c_e_t_S_t_r_i_d_e │ │ │ │ │ -int GetFacetStride() const │ │ │ │ │ -Return the stride between facets. │ │ │ │ │ -DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_8_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s_:_:_G_e_t_F_a_c_e_t_S_i_z_e │ │ │ │ │ -int GetFacetSize() const │ │ │ │ │ -DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_8_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s_:_:_S_e_t_C_o_o_r_d_S_t_r_i_d_e │ │ │ │ │ -Options & SetCoordStride(int stride) │ │ │ │ │ -Assign the stride between (u,v) pairs (default is 2) │ │ │ │ │ -DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_3_5_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s_:_:_S_e_t_F_a_c_e_t_S_t_r_i_d_e │ │ │ │ │ -Options & SetFacetStride(int stride) │ │ │ │ │ -Assign the stride between facets (default is facet size) │ │ │ │ │ -DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_3_5_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_T_e_s_s_e_l_l_a_t_i_o_n_:_:_O_p_t_i_o_n_s_:_:_P_r_e_s_e_r_v_e_Q_u_a_d_s │ │ │ │ │ -bool PreserveQuads() const │ │ │ │ │ -Return if preservation of quads is set. │ │ │ │ │ -DDeeffiinniittiioonn _t_e_s_s_e_l_l_a_t_i_o_n_._h_:_7_4 │ │ │ │ │ +Return if instance is valid. │ │ │ │ │ +DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_2_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_H_a_s_I_n_c_i_d_e_n_t_F_a_c_e_S_i_z_e_s │ │ │ │ │ +bool HasIncidentFaceSizes() const │ │ │ │ │ +Return if the sizes of incident faces are assigned. │ │ │ │ │ +DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_4_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_S_e_t_B_o_u_n_d_a_r_y │ │ │ │ │ +void SetBoundary(bool isOnBoundary) │ │ │ │ │ +Declare the vertex neighborhood as being on a boundary. │ │ │ │ │ +DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_3_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_S_e_t_I_n_c_i_d_e_n_t_F_a_c_e_S_i_z_e │ │ │ │ │ +void SetIncidentFaceSize(int faceIndex, int faceSize) │ │ │ │ │ +Assign the size of an incident face. │ │ │ │ │ +DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_3_5_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_B_f_r_:_:_V_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_:_:_S_e_t_M_a_n_i_f_o_l_d_E_d_g_e_S_h_a_r_p_n_e_s_s │ │ │ │ │ +void SetManifoldEdgeSharpness(int edgeIndex, float edgeSharpness) │ │ │ │ │ +Assign sharpness to the edge of a manifold neighborhood. │ │ │ │ │ +DDeeffiinniittiioonn _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h_:_4_0_3 │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _b_f_r │ │ │ │ │ - * _t_e_s_s_e_l_l_a_t_i_o_n_._h │ │ │ │ │ + * _v_e_r_t_e_x_D_e_s_c_r_i_p_t_o_r_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00683_source.html │ │ │ │ @@ -249,15 +249,15 @@ │ │ │ │
virtual int populateFaceVertexDescriptor(Index faceIndex, int faceVertex, VertexDescriptor *vertexDescriptor) const =0
Describe the topology of incident faces around a face-vertex.
│ │ │ │
virtual bool getFaceNeighborhoodVertexIndicesIfRegular(Index faceIndex, Index vertexIndices[]) const
│ │ │ │
virtual bool getFaceNeighborhoodFVarValueIndicesIfRegular(Index faceIndex, FVarID fvarID, Index fvarValueIndices[]) const
│ │ │ │
virtual int getFaceFVarValueIndices(Index faceIndex, FVarID fvarID, Index fvarValueIndices[]) const =0
Gather the face-varying indices of the face's vertices.
│ │ │ │
virtual int getFaceVertexIndices(Index faceIndex, Index vertexIndices[]) const =0
Gather the indices of the face's vertices.
│ │ │ │
virtual bool isFaceHole(Index faceIndex) const =0
Returns if a face is a hole.
│ │ │ │
std::intptr_t FVarID
Type used to identify and specify face-varying primvars.
│ │ │ │ -
Simple class used by subclasses of SurfaceFactory to describe a vertex.
│ │ │ │ +
Simple class used by subclasses of SurfaceFactory to describe a vertex.
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
topologyLevel.h File Reference
│ │ │ │ │ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ #include "../vtr/level.h"
│ │ │ │ -#include "../vtr/refinement.h"
│ │ │ │ +#include "../vtr/refinement.h"
│ │ │ │ #include "../far/types.h"
│ │ │ │ #include <vector>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00713.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/far/stencilTableFactory.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/far/topologyDescriptor.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -90,43 +90,31 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
stencilTableFactory.h File Reference
│ │ │ │ +
topologyDescriptor.h File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include "../far/patchTable.h"
│ │ │ │ -#include <vector>
│ │ │ │ +#include "../far/topologyRefiner.h"
│ │ │ │ +#include "../far/topologyRefinerFactory.h"
│ │ │ │ +#include "../far/error.h"
│ │ │ │ +#include <cassert>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │

│ │ │ │ Classes

│ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  StencilTableFactoryReal< REAL >
 A specialized factory for StencilTable. More...
struct  TopologyDescriptor
 A simple reference to raw topology data for use with TopologyRefinerFactory. More...
 
struct  StencilTableFactoryReal< REAL >::Options
 
class  LimitStencilTableFactoryReal< REAL >
 A specialized factory for LimitStencilTable. More...
 
struct  LimitStencilTableFactoryReal< REAL >::Options
 
struct  LimitStencilTableFactoryReal< REAL >::LocationArray
 Descriptor for limit surface locations. More...
 
class  StencilTableFactory
 Stencil table factory class wrapping the template for compatibility. More...
 
class  LimitStencilTableFactory
 Stencil table factory class wrapping the template for compatibility. More...
struct  TopologyDescriptor::FVarChannel
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -135,13 +123,13 @@ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,43 +1,30 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -stencilTableFactory.h File Reference │ │ │ │ │ +topologyDescriptor.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ -#include "_._._/_f_a_r_/_p_a_t_c_h_T_a_b_l_e_._h" │ │ │ │ │ -#include │ │ │ │ │ +#include "_._._/_f_a_r_/_t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_._h" │ │ │ │ │ +#include "_._._/_f_a_r_/_t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_._h" │ │ │ │ │ +#include "_._._/_f_a_r_/_e_r_r_o_r_._h" │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ - class   _S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_<_ _R_E_A_L_ _> │ │ │ │ │ -  A specialized factory for _S_t_e_n_c_i_l_T_a_b_l_e. _M_o_r_e_._._. │ │ │ │ │ +struct   _T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ +  A simple reference to raw topology data for use with │ │ │ │ │ + _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ -struct   _S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_<_ _R_E_A_L_ _>_:_:_O_p_t_i_o_n_s │ │ │ │ │ -  │ │ │ │ │ - class   _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_<_ _R_E_A_L_ _> │ │ │ │ │ -  A specialized factory for _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -struct   _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_<_ _R_E_A_L_ _>_:_:_O_p_t_i_o_n_s │ │ │ │ │ -  │ │ │ │ │ -struct   _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_<_ _R_E_A_L_ _>_:_:_L_o_c_a_t_i_o_n_A_r_r_a_y │ │ │ │ │ -  Descriptor for limit surface locations. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ - class   _S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y │ │ │ │ │ -  _S_t_e_n_c_i_l table factory class wrapping the template for compatibility. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ - class   _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y │ │ │ │ │ -  _S_t_e_n_c_i_l table factory class wrapping the template for compatibility. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ +struct   _T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_F_V_a_r_C_h_a_n_n_e_l │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r │ │ │ │ │   │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _f_a_r │ │ │ │ │ - * _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h │ │ │ │ │ + * _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00713.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,9 +1,4 @@ │ │ │ │ │ var a00713 = [ │ │ │ │ │ - ["StencilTableFactoryReal< REAL >", "a01045.html", "a01045"], │ │ │ │ │ - ["Options", "a01085.html", "a01085"], │ │ │ │ │ - ["LimitStencilTableFactoryReal< REAL >", "a01049.html", "a01049"], │ │ │ │ │ - ["Options", "a01089.html", "a01089"], │ │ │ │ │ - ["LocationArray", "a01093.html", "a01093"], │ │ │ │ │ - ["StencilTableFactory", "a01097.html", null], │ │ │ │ │ - ["LimitStencilTableFactory", "a01101.html", null] │ │ │ │ │ + ["TopologyDescriptor", "a01105.html", "a01105"], │ │ │ │ │ + ["FVarChannel", "a01109.html", "a01109"] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00713_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/far/stencilTableFactory.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/far/topologyDescriptor.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,19 +92,19 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
stencilTableFactory.h
│ │ │ │ +
topologyDescriptor.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │ -
2// Copyright 2013 Pixar
│ │ │ │ +
2// Copyright 2014 DreamWorks Animation LLC.
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │
6// compliance with the Apache License and the following modification to it:
│ │ │ │
7// Section 6. Trademarks. is deleted and replaced with:
│ │ │ │
8//
│ │ │ │
9// 6. Trademarks. This License does not grant permission to use the trade
│ │ │ │ @@ -118,358 +118,146 @@ │ │ │ │
17//
│ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │ -
24
│ │ │ │ -
25#ifndef OPENSUBDIV3_FAR_STENCILTABLE_FACTORY_H
│ │ │ │ -
26#define OPENSUBDIV3_FAR_STENCILTABLE_FACTORY_H
│ │ │ │ -
27
│ │ │ │ -
28#include "../version.h"
│ │ │ │ -
29
│ │ │ │ -
30#include "../far/patchTable.h"
│ │ │ │ -
31
│ │ │ │ -
32#include <vector>
│ │ │ │ -
33
│ │ │ │ -
34namespace OpenSubdiv {
│ │ │ │ -
35namespace OPENSUBDIV_VERSION {
│ │ │ │ -
36
│ │ │ │ -
37namespace Far {
│ │ │ │ -
38
│ │ │ │ -
39class TopologyRefiner;
│ │ │ │ -
40
│ │ │ │ -
41template <typename REAL> class StencilReal;
│ │ │ │ -
42template <typename REAL> class StencilTableReal;
│ │ │ │ -
43
│ │ │ │ -
44template <typename REAL> class LimitStencilReal;
│ │ │ │ -
45template <typename REAL> class LimitStencilTableReal;
│ │ │ │ -
46
│ │ │ │ -
47
│ │ │ │ -
50template <typename REAL>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
52
│ │ │ │ -
53public:
│ │ │ │ -
54
│ │ │ │ -
│ │ │ │ -
55 enum Mode {
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
59 };
│ │ │ │ -
│ │ │ │ +
24#ifndef OPENSUBDIV3_FAR_TOPOLOGY_DESCRIPTOR_H
│ │ │ │ +
25#define OPENSUBDIV3_FAR_TOPOLOGY_DESCRIPTOR_H
│ │ │ │ +
26
│ │ │ │ +
27#include "../version.h"
│ │ │ │ +
28
│ │ │ │ +
29#include "../far/topologyRefiner.h"
│ │ │ │ +
30#include "../far/topologyRefinerFactory.h"
│ │ │ │ +
31#include "../far/error.h"
│ │ │ │ +
32
│ │ │ │ +
33#include <cassert>
│ │ │ │ +
34
│ │ │ │ +
35namespace OpenSubdiv {
│ │ │ │ +
36namespace OPENSUBDIV_VERSION {
│ │ │ │ +
37
│ │ │ │ +
38namespace Far {
│ │ │ │ +
39
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
50
│ │ │ │ + │ │ │ │ + │ │ │ │ +
53
│ │ │ │ +
54 int const * numVertsPerFace;
│ │ │ │ + │ │ │ │ +
56
│ │ │ │ + │ │ │ │ + │ │ │ │ +
59 float const * creaseWeights;
│ │ │ │
60
│ │ │ │ -
│ │ │ │ -
61 struct Options {
│ │ │ │ -
62
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
64 generateOffsets(false),
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
68 maxLevel(10),
│ │ │ │ -
69 fvarChannel(0) { }
│ │ │ │ -
│ │ │ │ -
70
│ │ │ │ -
71 unsigned int interpolationMode : 2,
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
79 unsigned int fvarChannel;
│ │ │ │ -
81 };
│ │ │ │ -
│ │ │ │ -
82
│ │ │ │ - │ │ │ │ -
95 TopologyRefiner const & refiner, Options options = Options());
│ │ │ │ -
96
│ │ │ │ -
97
│ │ │ │ - │ │ │ │ -
111 int numTables, StencilTableReal<REAL> const ** tables);
│ │ │ │ -
112
│ │ │ │ + │ │ │ │ + │ │ │ │ +
63 float const * cornerWeights;
│ │ │ │ +
64
│ │ │ │ + │ │ │ │ + │ │ │ │ +
67
│ │ │ │ + │ │ │ │ +
69
│ │ │ │ +
70 // Face-varying data channel -- value indices correspond to vertex indices,
│ │ │ │ +
71 // i.e. one for every vertex of every face:
│ │ │ │ +
72 //
│ │ │ │ +
│ │ │ │ +
73 struct FVarChannel {
│ │ │ │ +
74
│ │ │ │ + │ │ │ │ + │ │ │ │ +
77
│ │ │ │ + │ │ │ │ +
79 };
│ │ │ │ +
│ │ │ │ +
80
│ │ │ │ + │ │ │ │ + │ │ │ │ +
83
│ │ │ │ + │ │ │ │ +
85};
│ │ │ │ +
│ │ │ │ +
86
│ │ │ │ +
87
│ │ │ │ +
88//
│ │ │ │ +
89// Forward declarations of required TopologyRefinerFactory<TopologyDescriptor>
│ │ │ │ +
90// specializations (defined internally):
│ │ │ │ +
91//
│ │ │ │ +
92// @cond EXCLUDE_DOXYGEN
│ │ │ │ +
93
│ │ │ │ +
94template <>
│ │ │ │ +
95bool
│ │ │ │ + │ │ │ │ +
97 TopologyRefiner & refiner, TopologyDescriptor const & desc);
│ │ │ │ +
98
│ │ │ │ +
99template <>
│ │ │ │ +
100bool
│ │ │ │ + │ │ │ │ +
102 TopologyRefiner & refiner, TopologyDescriptor const & desc);
│ │ │ │ +
103
│ │ │ │ +
104template <>
│ │ │ │ +
105bool
│ │ │ │ + │ │ │ │ +
107 TopologyRefiner & refiner, TopologyDescriptor const & desc);
│ │ │ │ +
108
│ │ │ │ +
109template <>
│ │ │ │ +
110bool
│ │ │ │ + │ │ │ │ +
112 TopologyRefiner & refiner, TopologyDescriptor const & desc);
│ │ │ │
113
│ │ │ │ - │ │ │ │ -
129 TopologyRefiner const &refiner,
│ │ │ │ -
130 StencilTableReal<REAL> const *baseStencilTable,
│ │ │ │ -
131 StencilTableReal<REAL> const *localPointStencilTable,
│ │ │ │ -
132 bool factorize = true);
│ │ │ │ -
133
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
149 TopologyRefiner const &refiner,
│ │ │ │ -
150 StencilTableReal<REAL> const *baseStencilTable,
│ │ │ │ -
151 StencilTableReal<REAL> const *localPointStencilTable,
│ │ │ │ -
152 bool factorize = true) {
│ │ │ │ - │ │ │ │ -
154 refiner, baseStencilTable, localPointStencilTable, factorize);
│ │ │ │ -
155 }
│ │ │ │ -
│ │ │ │ -
156
│ │ │ │ - │ │ │ │ -
175 TopologyRefiner const &refiner,
│ │ │ │ -
176 StencilTableReal<REAL> const *baseStencilTable,
│ │ │ │ -
177 StencilTableReal<REAL> const *localPointStencilTable,
│ │ │ │ -
178 int channel = 0,
│ │ │ │ -
179 bool factorize = true);
│ │ │ │ -
180
│ │ │ │ -
181private:
│ │ │ │ -
182
│ │ │ │ -
183 // Generate stencils for the coarse control-vertices (single weight = 1.0f)
│ │ │ │ -
184 static void generateControlVertStencils(
│ │ │ │ -
185 int numControlVerts,
│ │ │ │ -
186 StencilReal<REAL> & dst);
│ │ │ │ -
187
│ │ │ │ -
188 // Internal method to splice local point stencils
│ │ │ │ -
189 static StencilTableReal<REAL> const * appendLocalPointStencilTable(
│ │ │ │ -
190 TopologyRefiner const &refiner,
│ │ │ │ -
191 StencilTableReal<REAL> const * baseStencilTable,
│ │ │ │ -
192 StencilTableReal<REAL> const * localPointStencilTable,
│ │ │ │ -
193 int channel,
│ │ │ │ -
194 bool factorize);
│ │ │ │ -
195};
│ │ │ │ -
│ │ │ │ -
196
│ │ │ │ -
208template <typename REAL>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
210
│ │ │ │ -
211public:
│ │ │ │ -
212
│ │ │ │ -
│ │ │ │ -
213 enum Mode {
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
217 };
│ │ │ │ -
│ │ │ │ -
218
│ │ │ │ -
│ │ │ │ -
219 struct Options {
│ │ │ │ -
220
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
224 fvarChannel(0) { }
│ │ │ │ -
│ │ │ │ -
225
│ │ │ │ -
226 unsigned int interpolationMode : 2,
│ │ │ │ - │ │ │ │ - │ │ │ │ -
229 unsigned int fvarChannel;
│ │ │ │ -
230 };
│ │ │ │ -
│ │ │ │ -
231
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
234
│ │ │ │ -
235 LocationArray() : ptexIdx(-1), numLocations(0), s(0), t(0) { }
│ │ │ │ -
236
│ │ │ │ - │ │ │ │ - │ │ │ │ -
239
│ │ │ │ -
240 REAL const * s,
│ │ │ │ -
241 * t;
│ │ │ │ -
242 };
│ │ │ │ -
│ │ │ │ -
243
│ │ │ │ -
244 typedef std::vector<LocationArray> LocationArrayVec;
│ │ │ │ -
245
│ │ │ │ - │ │ │ │ -
270 TopologyRefiner const & refiner,
│ │ │ │ -
271 LocationArrayVec const & locationArrays,
│ │ │ │ -
272 StencilTableReal<REAL> const * cvStencils = 0,
│ │ │ │ -
273 PatchTable const * patchTable = 0,
│ │ │ │ -
274 Options options = Options());
│ │ │ │ -
275
│ │ │ │ -
276};
│ │ │ │ -
│ │ │ │ -
277
│ │ │ │ -
278
│ │ │ │ -
279//
│ │ │ │ -
280// Public wrapper classes for the templates
│ │ │ │ -
281//
│ │ │ │ -
282class Stencil;
│ │ │ │ -
283class StencilTable;
│ │ │ │ -
284
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
288private:
│ │ │ │ - │ │ │ │ - │ │ │ │ -
291
│ │ │ │ -
292public:
│ │ │ │ -
│ │ │ │ -
293 static StencilTable const * Create(
│ │ │ │ -
294 TopologyRefiner const & refiner, Options options = Options()) {
│ │ │ │ -
295
│ │ │ │ -
296 return static_cast<StencilTable const *>(
│ │ │ │ -
297 BaseFactory::Create(refiner, options));
│ │ │ │ -
298 }
│ │ │ │ -
│ │ │ │ -
299
│ │ │ │ -
│ │ │ │ -
300 static StencilTable const * Create(
│ │ │ │ -
301 int numTables, StencilTable const ** tables) {
│ │ │ │ -
302
│ │ │ │ -
303 return static_cast<StencilTable const *>(
│ │ │ │ -
304 BaseFactory::Create(numTables,
│ │ │ │ -
305 reinterpret_cast<BaseTable const **>(tables)));
│ │ │ │ -
306 }
│ │ │ │ -
│ │ │ │ -
307
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
309 TopologyRefiner const &refiner,
│ │ │ │ -
310 StencilTable const *baseStencilTable,
│ │ │ │ -
311 StencilTable const *localPointStencilTable,
│ │ │ │ -
312 bool factorize = true) {
│ │ │ │ -
313
│ │ │ │ -
314 return static_cast<StencilTable const *>(
│ │ │ │ - │ │ │ │ -
316 static_cast<BaseTable const *>(baseStencilTable),
│ │ │ │ -
317 static_cast<BaseTable const *>(localPointStencilTable),
│ │ │ │ -
318 factorize));
│ │ │ │ -
319 }
│ │ │ │ -
│ │ │ │ -
320
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
322 TopologyRefiner const &refiner,
│ │ │ │ -
323 StencilTable const *baseStencilTable,
│ │ │ │ -
324 StencilTable const *localPointStencilTable,
│ │ │ │ -
325 bool factorize = true) {
│ │ │ │ -
326
│ │ │ │ -
327 return static_cast<StencilTable const *>(
│ │ │ │ - │ │ │ │ -
329 static_cast<BaseTable const *>(baseStencilTable),
│ │ │ │ -
330 static_cast<BaseTable const *>(localPointStencilTable),
│ │ │ │ -
331 factorize));
│ │ │ │ -
332 }
│ │ │ │ -
│ │ │ │ -
333
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
335 TopologyRefiner const &refiner,
│ │ │ │ -
336 StencilTable const *baseStencilTable,
│ │ │ │ -
337 StencilTable const *localPointStencilTable,
│ │ │ │ -
338 int channel = 0,
│ │ │ │ -
339 bool factorize = true) {
│ │ │ │ -
340
│ │ │ │ -
341 return static_cast<StencilTable const *>(
│ │ │ │ - │ │ │ │ -
343 static_cast<BaseTable const *>(baseStencilTable),
│ │ │ │ -
344 static_cast<BaseTable const *>(localPointStencilTable),
│ │ │ │ -
345 channel, factorize));
│ │ │ │ -
346 }
│ │ │ │ -
│ │ │ │ -
347};
│ │ │ │ -
│ │ │ │ -
348
│ │ │ │ -
349class LimitStencil;
│ │ │ │ -
350class LimitStencilTable;
│ │ │ │ -
351
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
355private:
│ │ │ │ - │ │ │ │ - │ │ │ │ -
358
│ │ │ │ -
359public:
│ │ │ │ -
│ │ │ │ -
360 static LimitStencilTable const * Create(
│ │ │ │ -
361 TopologyRefiner const & refiner,
│ │ │ │ -
362 LocationArrayVec const & locationArrays,
│ │ │ │ -
363 StencilTable const * cvStencils = 0,
│ │ │ │ -
364 PatchTable const * patchTable = 0,
│ │ │ │ -
365 Options options = Options()) {
│ │ │ │ -
366
│ │ │ │ -
367 return static_cast<LimitStencilTable const *>(
│ │ │ │ - │ │ │ │ -
369 refiner,
│ │ │ │ -
370 locationArrays,
│ │ │ │ -
371 static_cast<BaseTable const *>(cvStencils),
│ │ │ │ -
372 patchTable,
│ │ │ │ -
373 options));
│ │ │ │ -
374 }
│ │ │ │ -
│ │ │ │ -
375};
│ │ │ │ -
│ │ │ │ -
376
│ │ │ │ -
377} // end namespace Far
│ │ │ │ -
378
│ │ │ │ -
379} // end namespace OPENSUBDIV_VERSION
│ │ │ │ -
380using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
381
│ │ │ │ -
382} // end namespace OpenSubdiv
│ │ │ │ -
383
│ │ │ │ -
384#endif // OPENSUBDIV3_FAR_STENCILTABLE_FACTORY_H
│ │ │ │ +
114template <>
│ │ │ │ +
115void
│ │ │ │ + │ │ │ │ +
117 TopologyError errCode, char const * msg, TopologyDescriptor const & desc);
│ │ │ │ +
118
│ │ │ │ +
119// @endcond
│ │ │ │ +
120
│ │ │ │ +
121} // end namespace Far
│ │ │ │ +
122
│ │ │ │ +
123} // end namespace OPENSUBDIV_VERSION
│ │ │ │ +
124using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
125} // end namespace OpenSubdiv
│ │ │ │ +
126
│ │ │ │ +
127#endif /* OPENSUBDIV3_FAR_TOPOLOGY_DESCRIPTOR_H */
│ │ │ │ │ │ │ │ -
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ - │ │ │ │ -
static StencilTableReal< REAL > const * Create(TopologyRefiner const &refiner, Options options=Options())
Instantiates StencilTable from TopologyRefiner that have been refined uniformly or adaptively.
│ │ │ │ -
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.
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
static StencilTableReal< REAL > const * AppendLocalPointStencilTableVarying(TopologyRefiner const &refiner, StencilTableReal< REAL > const *baseStencilTable, StencilTableReal< REAL > const *localPointStencilTable, bool factorize=true)
Utility function for stencil splicing for local point varying stencils.
│ │ │ │ -
static StencilTableReal< REAL > const * AppendLocalPointStencilTable(TopologyRefiner const &refiner, StencilTableReal< REAL > const *baseStencilTable, StencilTableReal< REAL > const *localPointStencilTable, bool factorize=true)
Utility function for stencil splicing for local point stencils.
│ │ │ │ -
static StencilTableReal< REAL > const * Create(int numTables, StencilTableReal< REAL > const **tables)
Instantiates StencilTable by concatenating an array of existing stencil tables.
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
static LimitStencilTableReal< REAL > const * Create(TopologyRefiner const &refiner, LocationArrayVec const &locationArrays, StencilTableReal< REAL > const *cvStencils=0, PatchTable const *patchTable=0, Options options=Options())
Instantiates LimitStencilTable from a TopologyRefiner that has been refined either uniformly or adapt...
│ │ │ │ - │ │ │ │ -
Vertex stencil class wrapping the template for compatibility.
│ │ │ │ - │ │ │ │ -
Stencil table class wrapping the template for compatibility.
│ │ │ │ - │ │ │ │ -
Limit stencil table class wrapping the template for compatibility.
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
unsigned int generateIntermediateLevels
vertices at all levels or highest only
│ │ │ │ -
unsigned int generateControlVerts
generate stencils for control-vertices
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
unsigned int generate2ndDerivatives
Generate weights for 2nd derivatives.
│ │ │ │ -
unsigned int generate1stDerivatives
Generate weights for 1st derivatives.
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
Stencil table factory class wrapping the template for compatibility.
│ │ │ │ -
static StencilTable const * AppendLocalPointStencilTableVarying(TopologyRefiner const &refiner, StencilTable const *baseStencilTable, StencilTable const *localPointStencilTable, bool factorize=true)
│ │ │ │ -
static StencilTable const * Create(TopologyRefiner const &refiner, Options options=Options())
│ │ │ │ -
static StencilTable const * AppendLocalPointStencilTableFaceVarying(TopologyRefiner const &refiner, StencilTable const *baseStencilTable, StencilTable const *localPointStencilTable, int channel=0, bool factorize=true)
│ │ │ │ -
static StencilTable const * AppendLocalPointStencilTable(TopologyRefiner const &refiner, StencilTable const *baseStencilTable, StencilTable const *localPointStencilTable, bool factorize=true)
│ │ │ │ -
static StencilTable const * Create(int numTables, StencilTable const **tables)
│ │ │ │ -
Stencil table factory class wrapping the template for compatibility.
│ │ │ │ -
static LimitStencilTable const * Create(TopologyRefiner const &refiner, LocationArrayVec const &locationArrays, StencilTable const *cvStencils=0, PatchTable const *patchTable=0, Options options=Options())
│ │ │ │ + │ │ │ │ +
A simple reference to raw topology data for use with TopologyRefinerFactory.
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
static bool assignComponentTopology(TopologyRefiner &newRefiner, MESH const &mesh)
Specify the relationships between vertices, faces, etc. ie the face-vertices, vertex-faces,...
│ │ │ │ +
static void reportInvalidTopology(TopologyError errCode, char const *msg, MESH const &mesh)
(Optional) Control run-time topology validation and error reporting
│ │ │ │ +
static bool assignComponentTags(TopologyRefiner &newRefiner, MESH const &mesh)
(Optional) Specify edge or vertex sharpness or face holes
│ │ │ │ +
static bool resizeComponentTopology(TopologyRefiner &newRefiner, MESH const &mesh)
Specify the number of vertices, faces, face-vertices, etc.
│ │ │ │ +
static bool assignFaceVaryingTopology(TopologyRefiner &newRefiner, MESH const &mesh)
(Optional) Specify face-varying data per face
│ │ │ │
Stores topology data for a specified set of refinement options.
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -stencilTableFactory.h │ │ │ │ │ +topologyDescriptor.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ -2// Copyright 2013 Pixar │ │ │ │ │ +2// Copyright 2014 DreamWorks Animation LLC. │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ 7// Section 6. Trademarks. is deleted and replaced with: │ │ │ │ │ 8// │ │ │ │ │ 9// 6. Trademarks. This License does not grant permission to use the trade │ │ │ │ │ @@ -23,498 +23,208 @@ │ │ │ │ │ 17// │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ -24 │ │ │ │ │ -25#ifndef OPENSUBDIV3_FAR_STENCILTABLE_FACTORY_H │ │ │ │ │ -26#define OPENSUBDIV3_FAR_STENCILTABLE_FACTORY_H │ │ │ │ │ -27 │ │ │ │ │ -28#include "../version.h" │ │ │ │ │ -29 │ │ │ │ │ -30#include "../far/patchTable.h" │ │ │ │ │ -31 │ │ │ │ │ -32#include │ │ │ │ │ -33 │ │ │ │ │ -34namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ -35namespace OPENSUBDIV_VERSION { │ │ │ │ │ -36 │ │ │ │ │ -37namespace Far { │ │ │ │ │ -38 │ │ │ │ │ -39class TopologyRefiner; │ │ │ │ │ -40 │ │ │ │ │ -41template class StencilReal; │ │ │ │ │ -42template class StencilTableReal; │ │ │ │ │ -43 │ │ │ │ │ -44template class LimitStencilReal; │ │ │ │ │ -45template class LimitStencilTableReal; │ │ │ │ │ -46 │ │ │ │ │ -47 │ │ │ │ │ -50template │ │ │ │ │ -_5_1class _S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l { │ │ │ │ │ -52 │ │ │ │ │ -53public: │ │ │ │ │ -54 │ │ │ │ │ -_5_5 enum _M_o_d_e { │ │ │ │ │ -_5_6 _I_N_T_E_R_P_O_L_A_T_E___V_E_R_T_E_X=0, │ │ │ │ │ -_5_7 _I_N_T_E_R_P_O_L_A_T_E___V_A_R_Y_I_N_G, │ │ │ │ │ -58 _I_N_T_E_R_P_O_L_A_T_E___F_A_C_E___V_A_R_Y_I_N_G │ │ │ │ │ -_5_9 }; │ │ │ │ │ +24#ifndef OPENSUBDIV3_FAR_TOPOLOGY_DESCRIPTOR_H │ │ │ │ │ +25#define OPENSUBDIV3_FAR_TOPOLOGY_DESCRIPTOR_H │ │ │ │ │ +26 │ │ │ │ │ +27#include "../version.h" │ │ │ │ │ +28 │ │ │ │ │ +29#include "../far/topologyRefiner.h" │ │ │ │ │ +30#include "../far/topologyRefinerFactory.h" │ │ │ │ │ +31#include "../far/error.h" │ │ │ │ │ +32 │ │ │ │ │ +33#include │ │ │ │ │ +34 │ │ │ │ │ +35namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ +36namespace OPENSUBDIV_VERSION { │ │ │ │ │ +37 │ │ │ │ │ +38namespace Far { │ │ │ │ │ +39 │ │ │ │ │ +_4_9struct _T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r { │ │ │ │ │ +50 │ │ │ │ │ +_5_1 int _n_u_m_V_e_r_t_i_c_e_s, │ │ │ │ │ +_5_2 _n_u_m_F_a_c_e_s; │ │ │ │ │ +53 │ │ │ │ │ +_5_4 int const * _n_u_m_V_e_r_t_s_P_e_r_F_a_c_e; │ │ │ │ │ +_5_5 _I_n_d_e_x const * _v_e_r_t_I_n_d_i_c_e_s_P_e_r_F_a_c_e; │ │ │ │ │ +56 │ │ │ │ │ +_5_7 int _n_u_m_C_r_e_a_s_e_s; │ │ │ │ │ +_5_8 _I_n_d_e_x const * _c_r_e_a_s_e_V_e_r_t_e_x_I_n_d_e_x_P_a_i_r_s; │ │ │ │ │ +_5_9 float const * _c_r_e_a_s_e_W_e_i_g_h_t_s; │ │ │ │ │ 60 │ │ │ │ │ -_6_1 struct _O_p_t_i_o_n_s { │ │ │ │ │ -62 │ │ │ │ │ -_6_3 _O_p_t_i_o_n_s() : _i_n_t_e_r_p_o_l_a_t_i_o_n_M_o_d_e(_I_N_T_E_R_P_O_L_A_T_E___V_E_R_T_E_X), │ │ │ │ │ -64 _g_e_n_e_r_a_t_e_O_f_f_s_e_t_s(false), │ │ │ │ │ -65 _g_e_n_e_r_a_t_e_C_o_n_t_r_o_l_V_e_r_t_s(false), │ │ │ │ │ -66 _g_e_n_e_r_a_t_e_I_n_t_e_r_m_e_d_i_a_t_e_L_e_v_e_l_s(true), │ │ │ │ │ -67 _f_a_c_t_o_r_i_z_e_I_n_t_e_r_m_e_d_i_a_t_e_L_e_v_e_l_s(true), │ │ │ │ │ -68 _m_a_x_L_e_v_e_l(10), │ │ │ │ │ -69 _f_v_a_r_C_h_a_n_n_e_l(0) { } │ │ │ │ │ -70 │ │ │ │ │ -_7_1 unsigned int _i_n_t_e_r_p_o_l_a_t_i_o_n_M_o_d_e : 2, │ │ │ │ │ -_7_2 _g_e_n_e_r_a_t_e_O_f_f_s_e_t_s : 1, │ │ │ │ │ -_7_3 _g_e_n_e_r_a_t_e_C_o_n_t_r_o_l_V_e_r_t_s : 1, │ │ │ │ │ -_7_4 _g_e_n_e_r_a_t_e_I_n_t_e_r_m_e_d_i_a_t_e_L_e_v_e_l_s : 1, │ │ │ │ │ -_7_5 _f_a_c_t_o_r_i_z_e_I_n_t_e_r_m_e_d_i_a_t_e_L_e_v_e_l_s : 1, │ │ │ │ │ -_7_8 _m_a_x_L_e_v_e_l : 4; │ │ │ │ │ -_7_9 unsigned int _f_v_a_r_C_h_a_n_n_e_l; │ │ │ │ │ -81 }; │ │ │ │ │ -82 │ │ │ │ │ -_9_4 static _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * _C_r_e_a_t_e( │ │ │ │ │ -95 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const & refiner, _O_p_t_i_o_n_s options = _O_p_t_i_o_n_s()); │ │ │ │ │ -96 │ │ │ │ │ -97 │ │ │ │ │ -_1_1_0 static _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * _C_r_e_a_t_e( │ │ │ │ │ -111 int numTables, _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const ** tables); │ │ │ │ │ -112 │ │ │ │ │ +_6_1 int _n_u_m_C_o_r_n_e_r_s; │ │ │ │ │ +_6_2 _I_n_d_e_x const * _c_o_r_n_e_r_V_e_r_t_e_x_I_n_d_i_c_e_s; │ │ │ │ │ +_6_3 float const * _c_o_r_n_e_r_W_e_i_g_h_t_s; │ │ │ │ │ +64 │ │ │ │ │ +_6_5 int _n_u_m_H_o_l_e_s; │ │ │ │ │ +_6_6 _I_n_d_e_x const * _h_o_l_e_I_n_d_i_c_e_s; │ │ │ │ │ +67 │ │ │ │ │ +_6_8 bool _i_s_L_e_f_t_H_a_n_d_e_d; │ │ │ │ │ +69 │ │ │ │ │ +70 // Face-varying data channel -- value indices correspond to vertex indices, │ │ │ │ │ +71 // i.e. one for every vertex of every face: │ │ │ │ │ +72 // │ │ │ │ │ +_7_3 struct _F_V_a_r_C_h_a_n_n_e_l { │ │ │ │ │ +74 │ │ │ │ │ +_7_5 int _n_u_m_V_a_l_u_e_s; │ │ │ │ │ +_7_6 _I_n_d_e_x const * _v_a_l_u_e_I_n_d_i_c_e_s; │ │ │ │ │ +77 │ │ │ │ │ +_7_8 _F_V_a_r_C_h_a_n_n_e_l() : _n_u_m_V_a_l_u_e_s(0), _v_a_l_u_e_I_n_d_i_c_e_s(0) { } │ │ │ │ │ +79 }; │ │ │ │ │ +80 │ │ │ │ │ +_8_1 int _n_u_m_F_V_a_r_C_h_a_n_n_e_l_s; │ │ │ │ │ +_8_2 _F_V_a_r_C_h_a_n_n_e_l const * _f_v_a_r_C_h_a_n_n_e_l_s; │ │ │ │ │ +83 │ │ │ │ │ +_8_4 _T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r(); │ │ │ │ │ +85}; │ │ │ │ │ +86 │ │ │ │ │ +87 │ │ │ │ │ +88// │ │ │ │ │ +89// Forward declarations of required │ │ │ │ │ +TopologyRefinerFactory │ │ │ │ │ +90// specializations (defined internally): │ │ │ │ │ +91// │ │ │ │ │ +92// @cond EXCLUDE_DOXYGEN │ │ │ │ │ +93 │ │ │ │ │ +94template <> │ │ │ │ │ +95bool │ │ │ │ │ +96_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_<_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_>_:_:_r_e_s_i_z_e_C_o_m_p_o_n_e_n_t_T_o_p_o_l_o_g_y( │ │ │ │ │ +97 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r & refiner, _T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r const & desc); │ │ │ │ │ +98 │ │ │ │ │ +99template <> │ │ │ │ │ +100bool │ │ │ │ │ +101_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_<_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_>_:_:_a_s_s_i_g_n_C_o_m_p_o_n_e_n_t_T_o_p_o_l_o_g_y( │ │ │ │ │ +102 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r & refiner, _T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r const & desc); │ │ │ │ │ +103 │ │ │ │ │ +104template <> │ │ │ │ │ +105bool │ │ │ │ │ +106_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_<_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_>_:_:_a_s_s_i_g_n_C_o_m_p_o_n_e_n_t_T_a_g_s( │ │ │ │ │ +107 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r & refiner, _T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r const & desc); │ │ │ │ │ +108 │ │ │ │ │ +109template <> │ │ │ │ │ +110bool │ │ │ │ │ +111_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_<_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_>_:_:_a_s_s_i_g_n_F_a_c_e_V_a_r_y_i_n_g_T_o_p_o_l_o_g_y( │ │ │ │ │ +112 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r & refiner, _T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r const & desc); │ │ │ │ │ 113 │ │ │ │ │ -_1_2_8 static _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * _A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e( │ │ │ │ │ -129 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const &refiner, │ │ │ │ │ -130 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const *baseStencilTable, │ │ │ │ │ -131 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const *localPointStencilTable, │ │ │ │ │ -132 bool factorize = true); │ │ │ │ │ -133 │ │ │ │ │ -_1_4_8 static _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * _A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e_V_a_r_y_i_n_g( │ │ │ │ │ -149 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const &refiner, │ │ │ │ │ -150 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const *baseStencilTable, │ │ │ │ │ -151 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const *localPointStencilTable, │ │ │ │ │ -152 bool factorize = true) { │ │ │ │ │ -153 return _A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e( │ │ │ │ │ -154 refiner, baseStencilTable, localPointStencilTable, factorize); │ │ │ │ │ -155 } │ │ │ │ │ -156 │ │ │ │ │ -_1_7_4 static _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * │ │ │ │ │ -_A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -175 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const &refiner, │ │ │ │ │ -176 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const *baseStencilTable, │ │ │ │ │ -177 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const *localPointStencilTable, │ │ │ │ │ -178 int channel = 0, │ │ │ │ │ -179 bool factorize = true); │ │ │ │ │ -180 │ │ │ │ │ -181private: │ │ │ │ │ -182 │ │ │ │ │ -183 // Generate stencils for the coarse control-vertices (single weight = 1.0f) │ │ │ │ │ -184 static void generateControlVertStencils( │ │ │ │ │ -185 int numControlVerts, │ │ │ │ │ -186 _S_t_e_n_c_i_l_R_e_a_l_<_R_E_A_L_> & dst); │ │ │ │ │ -187 │ │ │ │ │ -188 // Internal method to splice local point stencils │ │ │ │ │ -189 static _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * appendLocalPointStencilTable( │ │ │ │ │ -190 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const &refiner, │ │ │ │ │ -191 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * baseStencilTable, │ │ │ │ │ -192 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * localPointStencilTable, │ │ │ │ │ -193 int channel, │ │ │ │ │ -194 bool factorize); │ │ │ │ │ -195}; │ │ │ │ │ -196 │ │ │ │ │ -208template │ │ │ │ │ -_2_0_9class _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l { │ │ │ │ │ -210 │ │ │ │ │ -211public: │ │ │ │ │ -212 │ │ │ │ │ -_2_1_3 enum _M_o_d_e { │ │ │ │ │ -_2_1_4 _I_N_T_E_R_P_O_L_A_T_E___V_E_R_T_E_X=0, │ │ │ │ │ -_2_1_5 _I_N_T_E_R_P_O_L_A_T_E___V_A_R_Y_I_N_G, │ │ │ │ │ -216 _I_N_T_E_R_P_O_L_A_T_E___F_A_C_E___V_A_R_Y_I_N_G │ │ │ │ │ -_2_1_7 }; │ │ │ │ │ -218 │ │ │ │ │ -_2_1_9 struct _O_p_t_i_o_n_s { │ │ │ │ │ -220 │ │ │ │ │ -_2_2_1 _O_p_t_i_o_n_s() : _i_n_t_e_r_p_o_l_a_t_i_o_n_M_o_d_e(_I_N_T_E_R_P_O_L_A_T_E___V_E_R_T_E_X), │ │ │ │ │ -222 _g_e_n_e_r_a_t_e_1_s_t_D_e_r_i_v_a_t_i_v_e_s(true), │ │ │ │ │ -223 _g_e_n_e_r_a_t_e_2_n_d_D_e_r_i_v_a_t_i_v_e_s(false), │ │ │ │ │ -224 _f_v_a_r_C_h_a_n_n_e_l(0) { } │ │ │ │ │ -225 │ │ │ │ │ -_2_2_6 unsigned int _i_n_t_e_r_p_o_l_a_t_i_o_n_M_o_d_e : 2, │ │ │ │ │ -_2_2_7 _g_e_n_e_r_a_t_e_1_s_t_D_e_r_i_v_a_t_i_v_e_s : 1, │ │ │ │ │ -_2_2_8 _g_e_n_e_r_a_t_e_2_n_d_D_e_r_i_v_a_t_i_v_e_s : 1; │ │ │ │ │ -_2_2_9 unsigned int _f_v_a_r_C_h_a_n_n_e_l; │ │ │ │ │ -230 }; │ │ │ │ │ -231 │ │ │ │ │ -_2_3_3 struct _L_o_c_a_t_i_o_n_A_r_r_a_y { │ │ │ │ │ -234 │ │ │ │ │ -_2_3_5 _L_o_c_a_t_i_o_n_A_r_r_a_y() : _p_t_e_x_I_d_x(-1), _n_u_m_L_o_c_a_t_i_o_n_s(0), _s(0), _t(0) { } │ │ │ │ │ -236 │ │ │ │ │ -_2_3_7 int _p_t_e_x_I_d_x, │ │ │ │ │ -_2_3_8 _n_u_m_L_o_c_a_t_i_o_n_s; │ │ │ │ │ -239 │ │ │ │ │ -_2_4_0 REAL const * _s, │ │ │ │ │ -_2_4_1 * _t; │ │ │ │ │ -242 }; │ │ │ │ │ -243 │ │ │ │ │ -_2_4_4 typedef std::vector _L_o_c_a_t_i_o_n_A_r_r_a_y_V_e_c; │ │ │ │ │ -245 │ │ │ │ │ -_2_6_9 static _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * _C_r_e_a_t_e( │ │ │ │ │ -270 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const & refiner, │ │ │ │ │ -271 _L_o_c_a_t_i_o_n_A_r_r_a_y_V_e_c const & locationArrays, │ │ │ │ │ -272 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * cvStencils = 0, │ │ │ │ │ -273 _P_a_t_c_h_T_a_b_l_e const * patchTable = 0, │ │ │ │ │ -274 _O_p_t_i_o_n_s options = _O_p_t_i_o_n_s()); │ │ │ │ │ -275 │ │ │ │ │ -276}; │ │ │ │ │ -277 │ │ │ │ │ -278 │ │ │ │ │ -279// │ │ │ │ │ -280// Public wrapper classes for the templates │ │ │ │ │ -281// │ │ │ │ │ -282class _S_t_e_n_c_i_l; │ │ │ │ │ -283class _S_t_e_n_c_i_l_T_a_b_l_e; │ │ │ │ │ -284 │ │ │ │ │ -_2_8_7class _S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y : public _S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l { │ │ │ │ │ -288private: │ │ │ │ │ -289 typedef _S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_<_f_l_o_a_t_> _B_a_s_e_F_a_c_t_o_r_y; │ │ │ │ │ -290 typedef _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_f_l_o_a_t_> _B_a_s_e_T_a_b_l_e; │ │ │ │ │ -291 │ │ │ │ │ -292public: │ │ │ │ │ -_2_9_3 static _S_t_e_n_c_i_l_T_a_b_l_e const * _C_r_e_a_t_e( │ │ │ │ │ -294 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const & refiner, Options options = Options()) { │ │ │ │ │ -295 │ │ │ │ │ -296 return static_cast<_S_t_e_n_c_i_l_T_a_b_l_e const *>( │ │ │ │ │ -297 _B_a_s_e_F_a_c_t_o_r_y_:_:_C_r_e_a_t_e(refiner, options)); │ │ │ │ │ -298 } │ │ │ │ │ -299 │ │ │ │ │ -_3_0_0 static _S_t_e_n_c_i_l_T_a_b_l_e const * _C_r_e_a_t_e( │ │ │ │ │ -301 int numTables, _S_t_e_n_c_i_l_T_a_b_l_e const ** tables) { │ │ │ │ │ -302 │ │ │ │ │ -303 return static_cast<_S_t_e_n_c_i_l_T_a_b_l_e const *>( │ │ │ │ │ -304 _B_a_s_e_F_a_c_t_o_r_y_:_:_C_r_e_a_t_e(numTables, │ │ │ │ │ -305 reinterpret_cast<_B_a_s_e_T_a_b_l_e const **>(tables))); │ │ │ │ │ -306 } │ │ │ │ │ -307 │ │ │ │ │ -_3_0_8 static _S_t_e_n_c_i_l_T_a_b_l_e const * _A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e( │ │ │ │ │ -309 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const &refiner, │ │ │ │ │ -310 _S_t_e_n_c_i_l_T_a_b_l_e const *baseStencilTable, │ │ │ │ │ -311 _S_t_e_n_c_i_l_T_a_b_l_e const *localPointStencilTable, │ │ │ │ │ -312 bool factorize = true) { │ │ │ │ │ -313 │ │ │ │ │ -314 return static_cast<_S_t_e_n_c_i_l_T_a_b_l_e const *>( │ │ │ │ │ -315 _B_a_s_e_F_a_c_t_o_r_y_:_:_A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e(refiner, │ │ │ │ │ -316 static_cast<_B_a_s_e_T_a_b_l_e const *>(baseStencilTable), │ │ │ │ │ -317 static_cast<_B_a_s_e_T_a_b_l_e const *>(localPointStencilTable), │ │ │ │ │ -318 factorize)); │ │ │ │ │ -319 } │ │ │ │ │ -320 │ │ │ │ │ -_3_2_1 static _S_t_e_n_c_i_l_T_a_b_l_e const * _A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e_V_a_r_y_i_n_g( │ │ │ │ │ -322 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const &refiner, │ │ │ │ │ -323 _S_t_e_n_c_i_l_T_a_b_l_e const *baseStencilTable, │ │ │ │ │ -324 _S_t_e_n_c_i_l_T_a_b_l_e const *localPointStencilTable, │ │ │ │ │ -325 bool factorize = true) { │ │ │ │ │ -326 │ │ │ │ │ -327 return static_cast<_S_t_e_n_c_i_l_T_a_b_l_e const *>( │ │ │ │ │ -328 _B_a_s_e_F_a_c_t_o_r_y_:_:_A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e_V_a_r_y_i_n_g(refiner, │ │ │ │ │ -329 static_cast<_B_a_s_e_T_a_b_l_e const *>(baseStencilTable), │ │ │ │ │ -330 static_cast<_B_a_s_e_T_a_b_l_e const *>(localPointStencilTable), │ │ │ │ │ -331 factorize)); │ │ │ │ │ -332 } │ │ │ │ │ -333 │ │ │ │ │ -_3_3_4 static _S_t_e_n_c_i_l_T_a_b_l_e const * _A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -335 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const &refiner, │ │ │ │ │ -336 _S_t_e_n_c_i_l_T_a_b_l_e const *baseStencilTable, │ │ │ │ │ -337 _S_t_e_n_c_i_l_T_a_b_l_e const *localPointStencilTable, │ │ │ │ │ -338 int channel = 0, │ │ │ │ │ -339 bool factorize = true) { │ │ │ │ │ -340 │ │ │ │ │ -341 return static_cast<_S_t_e_n_c_i_l_T_a_b_l_e const *>( │ │ │ │ │ -342 _B_a_s_e_F_a_c_t_o_r_y_:_:_A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_e_V_a_r_y_i_n_g(refiner, │ │ │ │ │ -343 static_cast<_B_a_s_e_T_a_b_l_e const *>(baseStencilTable), │ │ │ │ │ -344 static_cast<_B_a_s_e_T_a_b_l_e const *>(localPointStencilTable), │ │ │ │ │ -345 channel, factorize)); │ │ │ │ │ -346 } │ │ │ │ │ -347}; │ │ │ │ │ -348 │ │ │ │ │ -349class LimitStencil; │ │ │ │ │ -350class LimitStencilTable; │ │ │ │ │ -351 │ │ │ │ │ -_3_5_4class _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y : public _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l │ │ │ │ │ -{ │ │ │ │ │ -355private: │ │ │ │ │ -356 typedef _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_<_f_l_o_a_t_> _B_a_s_e_F_a_c_t_o_r_y; │ │ │ │ │ -357 typedef _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_f_l_o_a_t_> _B_a_s_e_T_a_b_l_e; │ │ │ │ │ -358 │ │ │ │ │ -359public: │ │ │ │ │ -_3_6_0 static _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e const * _C_r_e_a_t_e( │ │ │ │ │ -361 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const & refiner, │ │ │ │ │ -362 _L_o_c_a_t_i_o_n_A_r_r_a_y_V_e_c const & locationArrays, │ │ │ │ │ -363 _S_t_e_n_c_i_l_T_a_b_l_e const * cvStencils = 0, │ │ │ │ │ -364 _P_a_t_c_h_T_a_b_l_e const * patchTable = 0, │ │ │ │ │ -365 Options options = Options()) { │ │ │ │ │ -366 │ │ │ │ │ -367 return static_cast<_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e const *>( │ │ │ │ │ -368 _B_a_s_e_F_a_c_t_o_r_y_:_:_C_r_e_a_t_e( │ │ │ │ │ -369 refiner, │ │ │ │ │ -370 locationArrays, │ │ │ │ │ -371 static_cast<_B_a_s_e_T_a_b_l_e const *>(cvStencils), │ │ │ │ │ -372 patchTable, │ │ │ │ │ -373 options)); │ │ │ │ │ -374 } │ │ │ │ │ -375}; │ │ │ │ │ -376 │ │ │ │ │ -377} // end namespace Far │ │ │ │ │ -378 │ │ │ │ │ -379} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ -380using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -381 │ │ │ │ │ -382} // end namespace OpenSubdiv │ │ │ │ │ -383 │ │ │ │ │ -384#endif // OPENSUBDIV3_FAR_STENCILTABLE_FACTORY_H │ │ │ │ │ +114template <> │ │ │ │ │ +115void │ │ │ │ │ +116_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_<_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_>_:_:_r_e_p_o_r_t_I_n_v_a_l_i_d_T_o_p_o_l_o_g_y( │ │ │ │ │ +117 TopologyError errCode, char const * msg, _T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r const & desc); │ │ │ │ │ +118 │ │ │ │ │ +119// @endcond │ │ │ │ │ +120 │ │ │ │ │ +121} // end namespace Far │ │ │ │ │ +122 │ │ │ │ │ +123} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ +124using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +125} // end namespace OpenSubdiv │ │ │ │ │ +126 │ │ │ │ │ +127#endif /* OPENSUBDIV3_FAR_TOPOLOGY_DESCRIPTOR_H */ │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -Container for arrays of parametric patches. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_5_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l │ │ │ │ │ -A specialized factory for StencilTable. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_5_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_C_r_e_a_t_e │ │ │ │ │ -static StencilTableReal< REAL > const * Create(TopologyRefiner const &refiner, │ │ │ │ │ -Options options=Options()) │ │ │ │ │ -Instantiates StencilTable from TopologyRefiner that have been refined uniformly │ │ │ │ │ -or adaptively. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ -_A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ -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. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_M_o_d_e │ │ │ │ │ -Mode │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_5_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ -_I_N_T_E_R_P_O_L_A_T_E___F_A_C_E___V_A_R_Y_I_N_G │ │ │ │ │ -@ INTERPOLATE_FACE_VARYING │ │ │ │ │ -face-varying primvar stencils │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_5_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ -_I_N_T_E_R_P_O_L_A_T_E___V_A_R_Y_I_N_G │ │ │ │ │ -@ INTERPOLATE_VARYING │ │ │ │ │ -varying primvar stencils │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_5_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ -_I_N_T_E_R_P_O_L_A_T_E___V_E_R_T_E_X │ │ │ │ │ -@ INTERPOLATE_VERTEX │ │ │ │ │ -vertex primvar stencils │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_5_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ -_A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e_V_a_r_y_i_n_g │ │ │ │ │ -static StencilTableReal< REAL > const * AppendLocalPointStencilTableVarying │ │ │ │ │ -(TopologyRefiner const &refiner, StencilTableReal< REAL > const │ │ │ │ │ -*baseStencilTable, StencilTableReal< REAL > const *localPointStencilTable, bool │ │ │ │ │ -factorize=true) │ │ │ │ │ -Utility function for stencil splicing for local point varying stencils. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_4_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ -_A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -static StencilTableReal< REAL > const * AppendLocalPointStencilTable │ │ │ │ │ -(TopologyRefiner const &refiner, StencilTableReal< REAL > const │ │ │ │ │ -*baseStencilTable, StencilTableReal< REAL > const *localPointStencilTable, bool │ │ │ │ │ -factorize=true) │ │ │ │ │ -Utility function for stencil splicing for local point stencils. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_C_r_e_a_t_e │ │ │ │ │ -static StencilTableReal< REAL > const * Create(int numTables, StencilTableReal< │ │ │ │ │ -REAL > const **tables) │ │ │ │ │ -Instantiates StencilTable by concatenating an array of existing stencil tables. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l │ │ │ │ │ -A specialized factory for LimitStencilTable. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_0_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_M_o_d_e │ │ │ │ │ -Mode │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_1_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ -_I_N_T_E_R_P_O_L_A_T_E___F_A_C_E___V_A_R_Y_I_N_G │ │ │ │ │ -@ INTERPOLATE_FACE_VARYING │ │ │ │ │ -face-varying primvar stencils │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_1_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ -_I_N_T_E_R_P_O_L_A_T_E___V_A_R_Y_I_N_G │ │ │ │ │ -@ INTERPOLATE_VARYING │ │ │ │ │ -varying primvar stencils │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_1_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ -_I_N_T_E_R_P_O_L_A_T_E___V_E_R_T_E_X │ │ │ │ │ -@ INTERPOLATE_VERTEX │ │ │ │ │ -vertex primvar stencils │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_1_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ -_L_o_c_a_t_i_o_n_A_r_r_a_y_V_e_c │ │ │ │ │ -std::vector< LocationArray > LocationArrayVec │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_4_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_C_r_e_a_t_e │ │ │ │ │ -static LimitStencilTableReal< REAL > const * Create(TopologyRefiner const │ │ │ │ │ -&refiner, LocationArrayVec const &locationArrays, StencilTableReal< REAL > │ │ │ │ │ -const *cvStencils=0, PatchTable const *patchTable=0, Options options=Options()) │ │ │ │ │ -Instantiates LimitStencilTable from a TopologyRefiner that has been refined │ │ │ │ │ -either uniformly or adapt... │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l │ │ │ │ │ -Vertex stencil descriptor. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l │ │ │ │ │ -Vertex stencil class wrapping the template for compatibility. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_1_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l │ │ │ │ │ -Table of subdivision stencils. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_4_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -Stencil table class wrapping the template for compatibility. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_7_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l │ │ │ │ │ -Table of limit subdivision stencils. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_4_0_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -Limit stencil table class wrapping the template for compatibility. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_8_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_6_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_f_a_c_t_o_r_i_z_e_I_n_t_e_r_m_e_d_i_a_t_e_L_e_v_e_l_s │ │ │ │ │ -unsigned int factorizeIntermediateLevels │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_7_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_:_m_a_x_L_e_v_e_l │ │ │ │ │ -unsigned int maxLevel │ │ │ │ │ -generate stencils up to 'maxLevel' │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_7_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_:_O_p_t_i_o_n_s │ │ │ │ │ -Options() │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_6_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_g_e_n_e_r_a_t_e_I_n_t_e_r_m_e_d_i_a_t_e_L_e_v_e_l_s │ │ │ │ │ -unsigned int generateIntermediateLevels │ │ │ │ │ -vertices at all levels or highest only │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_7_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_g_e_n_e_r_a_t_e_C_o_n_t_r_o_l_V_e_r_t_s │ │ │ │ │ -unsigned int generateControlVerts │ │ │ │ │ -generate stencils for control-vertices │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_7_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_g_e_n_e_r_a_t_e_O_f_f_s_e_t_s │ │ │ │ │ -unsigned int generateOffsets │ │ │ │ │ -populate optional "_offsets" field │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_7_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_f_v_a_r_C_h_a_n_n_e_l │ │ │ │ │ -unsigned int fvarChannel │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_7_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_i_n_t_e_r_p_o_l_a_t_i_o_n_M_o_d_e │ │ │ │ │ -unsigned int interpolationMode │ │ │ │ │ -interpolation mode │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_7_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_1_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_O_p_t_i_o_n_s │ │ │ │ │ -Options() │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_2_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_f_v_a_r_C_h_a_n_n_e_l │ │ │ │ │ -unsigned int fvarChannel │ │ │ │ │ -face-varying channel to use │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_2_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_i_n_t_e_r_p_o_l_a_t_i_o_n_M_o_d_e │ │ │ │ │ -unsigned int interpolationMode │ │ │ │ │ -interpolation mode │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_2_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_g_e_n_e_r_a_t_e_2_n_d_D_e_r_i_v_a_t_i_v_e_s │ │ │ │ │ -unsigned int generate2ndDerivatives │ │ │ │ │ -Generate weights for 2nd derivatives. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_2_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_g_e_n_e_r_a_t_e_1_s_t_D_e_r_i_v_a_t_i_v_e_s │ │ │ │ │ -unsigned int generate1stDerivatives │ │ │ │ │ -Generate weights for 1st derivatives. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_2_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ -_L_o_c_a_t_i_o_n_A_r_r_a_y │ │ │ │ │ -Descriptor for limit surface locations. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_3_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ -_L_o_c_a_t_i_o_n_A_r_r_a_y_:_:_t │ │ │ │ │ -REAL const * t │ │ │ │ │ -array of v coordinates │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_4_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ -_L_o_c_a_t_i_o_n_A_r_r_a_y_:_:_s │ │ │ │ │ -REAL const * s │ │ │ │ │ -array of u coordinates │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_4_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ -_L_o_c_a_t_i_o_n_A_r_r_a_y_:_:_L_o_c_a_t_i_o_n_A_r_r_a_y │ │ │ │ │ -LocationArray() │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_3_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ -_L_o_c_a_t_i_o_n_A_r_r_a_y_:_:_n_u_m_L_o_c_a_t_i_o_n_s │ │ │ │ │ -int numLocations │ │ │ │ │ -number of (u,v) coordinates in the array │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_3_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ -_L_o_c_a_t_i_o_n_A_r_r_a_y_:_:_p_t_e_x_I_d_x │ │ │ │ │ -int ptexIdx │ │ │ │ │ -ptex face index │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_3_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y │ │ │ │ │ -Stencil table factory class wrapping the template for compatibility. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_8_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_:_: │ │ │ │ │ -_A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e_V_a_r_y_i_n_g │ │ │ │ │ -static StencilTable const * AppendLocalPointStencilTableVarying(TopologyRefiner │ │ │ │ │ -const &refiner, StencilTable const *baseStencilTable, StencilTable const │ │ │ │ │ -*localPointStencilTable, bool factorize=true) │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_3_2_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_:_:_C_r_e_a_t_e │ │ │ │ │ -static StencilTable const * Create(TopologyRefiner const &refiner, Options │ │ │ │ │ -options=Options()) │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_9_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_:_: │ │ │ │ │ -_A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ -static StencilTable const * AppendLocalPointStencilTableFaceVarying │ │ │ │ │ -(TopologyRefiner const &refiner, StencilTable const *baseStencilTable, │ │ │ │ │ -StencilTable const *localPointStencilTable, int channel=0, bool factorize=true) │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_3_3_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_:_: │ │ │ │ │ -_A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -static StencilTable const * AppendLocalPointStencilTable(TopologyRefiner const │ │ │ │ │ -&refiner, StencilTable const *baseStencilTable, StencilTable const │ │ │ │ │ -*localPointStencilTable, bool factorize=true) │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_3_0_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_:_:_C_r_e_a_t_e │ │ │ │ │ -static StencilTable const * Create(int numTables, StencilTable const **tables) │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_3_0_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y │ │ │ │ │ -Stencil table factory class wrapping the template for compatibility. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_3_5_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_:_:_C_r_e_a_t_e │ │ │ │ │ -static LimitStencilTable const * Create(TopologyRefiner const &refiner, │ │ │ │ │ -LocationArrayVec const &locationArrays, StencilTable const *cvStencils=0, │ │ │ │ │ -PatchTable const *patchTable=0, Options options=Options()) │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_3_6_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_I_n_d_e_x │ │ │ │ │ +Vtr::Index Index │ │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e_s_._h_:_4_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ +A simple reference to raw topology data for use with TopologyRefinerFactory. │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_4_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_f_v_a_r_C_h_a_n_n_e_l_s │ │ │ │ │ +FVarChannel const * fvarChannels │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_8_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_n_u_m_V_e_r_t_i_c_e_s │ │ │ │ │ +int numVertices │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_5_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_c_o_r_n_e_r_V_e_r_t_e_x_I_n_d_i_c_e_s │ │ │ │ │ +Index const * cornerVertexIndices │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_6_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_v_e_r_t_I_n_d_i_c_e_s_P_e_r_F_a_c_e │ │ │ │ │ +Index const * vertIndicesPerFace │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_5_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_c_r_e_a_s_e_V_e_r_t_e_x_I_n_d_e_x_P_a_i_r_s │ │ │ │ │ +Index const * creaseVertexIndexPairs │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_5_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_h_o_l_e_I_n_d_i_c_e_s │ │ │ │ │ +Index const * holeIndices │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_6_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_n_u_m_F_a_c_e_s │ │ │ │ │ +int numFaces │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_5_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_n_u_m_C_o_r_n_e_r_s │ │ │ │ │ +int numCorners │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_6_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_c_o_r_n_e_r_W_e_i_g_h_t_s │ │ │ │ │ +float const * cornerWeights │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_6_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_i_s_L_e_f_t_H_a_n_d_e_d │ │ │ │ │ +bool isLeftHanded │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_6_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_n_u_m_V_e_r_t_s_P_e_r_F_a_c_e │ │ │ │ │ +int const * numVertsPerFace │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_5_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ +TopologyDescriptor() │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_c_r_e_a_s_e_W_e_i_g_h_t_s │ │ │ │ │ +float const * creaseWeights │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_5_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_n_u_m_C_r_e_a_s_e_s │ │ │ │ │ +int numCreases │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_5_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_n_u_m_H_o_l_e_s │ │ │ │ │ +int numHoles │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_6_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_n_u_m_F_V_a_r_C_h_a_n_n_e_l_s │ │ │ │ │ +int numFVarChannels │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_8_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_F_V_a_r_C_h_a_n_n_e_l │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_7_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_F_V_a_r_C_h_a_n_n_e_l_:_: │ │ │ │ │ +_F_V_a_r_C_h_a_n_n_e_l │ │ │ │ │ +FVarChannel() │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_7_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_F_V_a_r_C_h_a_n_n_e_l_:_: │ │ │ │ │ +_v_a_l_u_e_I_n_d_i_c_e_s │ │ │ │ │ +Index const * valueIndices │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_7_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_F_V_a_r_C_h_a_n_n_e_l_:_:_n_u_m_V_a_l_u_e_s │ │ │ │ │ +int numValues │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_7_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_:_: │ │ │ │ │ +_a_s_s_i_g_n_C_o_m_p_o_n_e_n_t_T_o_p_o_l_o_g_y │ │ │ │ │ +static bool assignComponentTopology(TopologyRefiner &newRefiner, MESH const │ │ │ │ │ +&mesh) │ │ │ │ │ +Specify the relationships between vertices, faces, etc. ie the face-vertices, │ │ │ │ │ +vertex-faces,... │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_._h_:_6_2_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_:_: │ │ │ │ │ +_r_e_p_o_r_t_I_n_v_a_l_i_d_T_o_p_o_l_o_g_y │ │ │ │ │ +static void reportInvalidTopology(TopologyError errCode, char const *msg, MESH │ │ │ │ │ +const &mesh) │ │ │ │ │ +(Optional) Control run-time topology validation and error reporting │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_._h_:_7_0_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_:_: │ │ │ │ │ +_a_s_s_i_g_n_C_o_m_p_o_n_e_n_t_T_a_g_s │ │ │ │ │ +static bool assignComponentTags(TopologyRefiner &newRefiner, MESH const &mesh) │ │ │ │ │ +(Optional) Specify edge or vertex sharpness or face holes │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_._h_:_6_9_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_:_: │ │ │ │ │ +_r_e_s_i_z_e_C_o_m_p_o_n_e_n_t_T_o_p_o_l_o_g_y │ │ │ │ │ +static bool resizeComponentTopology(TopologyRefiner &newRefiner, MESH const │ │ │ │ │ +&mesh) │ │ │ │ │ +Specify the number of vertices, faces, face-vertices, etc. │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_._h_:_5_8_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_:_: │ │ │ │ │ +_a_s_s_i_g_n_F_a_c_e_V_a_r_y_i_n_g_T_o_p_o_l_o_g_y │ │ │ │ │ +static bool assignFaceVaryingTopology(TopologyRefiner &newRefiner, MESH const │ │ │ │ │ +&mesh) │ │ │ │ │ +(Optional) Specify face-varying data per face │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_._h_:_6_7_4 │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r │ │ │ │ │ Stores topology data for a specified set of refinement options. │ │ │ │ │ DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_._h_:_5_1 │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _f_a_r │ │ │ │ │ - * _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h │ │ │ │ │ + * _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00716.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/far/topologyDescriptor.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/far/stencilTable.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -90,31 +90,51 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
topologyDescriptor.h File Reference
│ │ │ │ +
stencilTable.h File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include "../far/topologyRefiner.h"
│ │ │ │ -#include "../far/topologyRefinerFactory.h"
│ │ │ │ -#include "../far/error.h"
│ │ │ │ +#include "../far/types.h"
│ │ │ │ #include <cassert>
│ │ │ │ +#include <cstring>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <iostream>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  TopologyDescriptor
 A simple reference to raw topology data for use with TopologyRefinerFactory. More...
class  StencilReal< REAL >
 Vertex stencil descriptor. More...
 
struct  TopologyDescriptor::FVarChannel
class  Stencil
 Vertex stencil class wrapping the template for compatibility. More...
 
class  StencilTableReal< REAL >
 Table of subdivision stencils. More...
 
class  StencilTable
 Stencil table class wrapping the template for compatibility. More...
 
class  LimitStencilReal< REAL >
 Limit point stencil descriptor. More...
 
class  LimitStencil
 Limit point stencil class wrapping the template for compatibility. More...
 
class  LimitStencilTableReal< REAL >
 Table of limit subdivision stencils. More...
 
class  LimitStencilTable
 Limit stencil table class wrapping the template for compatibility. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -123,13 +143,13 @@ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,30 +1,51 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -topologyDescriptor.h File Reference │ │ │ │ │ +stencilTable.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ -#include "_._._/_f_a_r_/_t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_._h" │ │ │ │ │ -#include "_._._/_f_a_r_/_t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_._h" │ │ │ │ │ -#include "_._._/_f_a_r_/_e_r_r_o_r_._h" │ │ │ │ │ +#include "_._._/_f_a_r_/_t_y_p_e_s_._h" │ │ │ │ │ #include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ -  A simple reference to raw topology data for use with │ │ │ │ │ - _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y. _M_o_r_e_._._. │ │ │ │ │ +class   _S_t_e_n_c_i_l_R_e_a_l_<_ _R_E_A_L_ _> │ │ │ │ │ +  Vertex stencil descriptor. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ -struct   _T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_F_V_a_r_C_h_a_n_n_e_l │ │ │ │ │ +class   _S_t_e_n_c_i_l │ │ │ │ │ +  Vertex stencil class wrapping the template for compatibility. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_ _R_E_A_L_ _> │ │ │ │ │ +  Table of subdivision stencils. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +  _S_t_e_n_c_i_l table class wrapping the template for compatibility. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_<_ _R_E_A_L_ _> │ │ │ │ │ +  Limit point stencil descriptor. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _L_i_m_i_t_S_t_e_n_c_i_l │ │ │ │ │ +  Limit point stencil class wrapping the template for compatibility. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_ _R_E_A_L_ _> │ │ │ │ │ +  Table of limit subdivision stencils. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +  Limit stencil table class wrapping the template for compatibility. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r │ │ │ │ │   │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _f_a_r │ │ │ │ │ - * _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h │ │ │ │ │ + * _s_t_e_n_c_i_l_T_a_b_l_e_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00716.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,4 +1,10 @@ │ │ │ │ │ var a00716 = [ │ │ │ │ │ - ["TopologyDescriptor", "a01105.html", "a01105"], │ │ │ │ │ - ["FVarChannel", "a01109.html", "a01109"] │ │ │ │ │ + ["StencilReal< REAL >", "a01053.html", "a01053"], │ │ │ │ │ + ["Stencil", "a01057.html", "a01057"], │ │ │ │ │ + ["StencilTableReal< REAL >", "a01061.html", "a01061"], │ │ │ │ │ + ["StencilTable", "a01065.html", "a01065"], │ │ │ │ │ + ["LimitStencilReal< REAL >", "a01069.html", "a01069"], │ │ │ │ │ + ["LimitStencil", "a01073.html", "a01073"], │ │ │ │ │ + ["LimitStencilTableReal< REAL >", "a01077.html", "a01077"], │ │ │ │ │ + ["LimitStencilTable", "a01081.html", "a01081"] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00716_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/far/topologyDescriptor.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/far/stencilTable.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,19 +92,19 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
topologyDescriptor.h
│ │ │ │ +
stencilTable.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │ -
2// Copyright 2014 DreamWorks Animation LLC.
│ │ │ │ +
2// Copyright 2013 Pixar
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │
6// compliance with the Apache License and the following modification to it:
│ │ │ │
7// Section 6. Trademarks. is deleted and replaced with:
│ │ │ │
8//
│ │ │ │
9// 6. Trademarks. This License does not grant permission to use the trade
│ │ │ │ @@ -118,146 +118,893 @@ │ │ │ │
17//
│ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │ -
24#ifndef OPENSUBDIV3_FAR_TOPOLOGY_DESCRIPTOR_H
│ │ │ │ -
25#define OPENSUBDIV3_FAR_TOPOLOGY_DESCRIPTOR_H
│ │ │ │ -
26
│ │ │ │ -
27#include "../version.h"
│ │ │ │ -
28
│ │ │ │ -
29#include "../far/topologyRefiner.h"
│ │ │ │ -
30#include "../far/topologyRefinerFactory.h"
│ │ │ │ -
31#include "../far/error.h"
│ │ │ │ -
32
│ │ │ │ -
33#include <cassert>
│ │ │ │ -
34
│ │ │ │ -
35namespace OpenSubdiv {
│ │ │ │ -
36namespace OPENSUBDIV_VERSION {
│ │ │ │ -
37
│ │ │ │ -
38namespace Far {
│ │ │ │ +
24
│ │ │ │ +
25#ifndef OPENSUBDIV3_FAR_STENCILTABLE_H
│ │ │ │ +
26#define OPENSUBDIV3_FAR_STENCILTABLE_H
│ │ │ │ +
27
│ │ │ │ +
28#include "../version.h"
│ │ │ │ +
29
│ │ │ │ +
30#include "../far/types.h"
│ │ │ │ +
31
│ │ │ │ +
32#include <cassert>
│ │ │ │ +
33#include <cstring>
│ │ │ │ +
34#include <vector>
│ │ │ │ +
35#include <iostream>
│ │ │ │ +
36
│ │ │ │ +
37namespace OpenSubdiv {
│ │ │ │ +
38namespace OPENSUBDIV_VERSION {
│ │ │ │
39
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
50
│ │ │ │ - │ │ │ │ - │ │ │ │ -
53
│ │ │ │ -
54 int const * numVertsPerFace;
│ │ │ │ - │ │ │ │ -
56
│ │ │ │ - │ │ │ │ - │ │ │ │ -
59 float const * creaseWeights;
│ │ │ │ -
60
│ │ │ │ - │ │ │ │ - │ │ │ │ -
63 float const * cornerWeights;
│ │ │ │ -
64
│ │ │ │ - │ │ │ │ - │ │ │ │ -
67
│ │ │ │ - │ │ │ │ +
40namespace Far {
│ │ │ │ +
41
│ │ │ │ +
42// Forward declarations for friends:
│ │ │ │ +
43class PatchTableBuilder;
│ │ │ │ +
44
│ │ │ │ +
45template <typename REAL> class StencilTableFactoryReal;
│ │ │ │ +
46template <typename REAL> class LimitStencilTableFactoryReal;
│ │ │ │ +
47
│ │ │ │ +
52template <typename REAL>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
54public:
│ │ │ │ +
55
│ │ │ │ + │ │ │ │ +
58
│ │ │ │ +
│ │ │ │ +
67 StencilReal(int * size, Index * indices, REAL * weights)
│ │ │ │ +
68 : _size(size), _indices(indices), _weights(weights) { }
│ │ │ │ +
│ │ │ │
69
│ │ │ │ -
70 // Face-varying data channel -- value indices correspond to vertex indices,
│ │ │ │ -
71 // i.e. one for every vertex of every face:
│ │ │ │ -
72 //
│ │ │ │ -
│ │ │ │ -
73 struct FVarChannel {
│ │ │ │ -
74
│ │ │ │ - │ │ │ │ - │ │ │ │ -
77
│ │ │ │ - │ │ │ │ -
79 };
│ │ │ │ -
│ │ │ │ -
80
│ │ │ │ - │ │ │ │ - │ │ │ │ -
83
│ │ │ │ - │ │ │ │ -
85};
│ │ │ │ +
│ │ │ │ +
71 StencilReal(StencilReal const & other) {
│ │ │ │ +
72 _size = other._size;
│ │ │ │ +
73 _indices = other._indices;
│ │ │ │ +
74 _weights = other._weights;
│ │ │ │ +
75 }
│ │ │ │ +
│ │ │ │ +
76
│ │ │ │ +
│ │ │ │ +
78 int GetSize() const {
│ │ │ │ +
79 return *_size;
│ │ │ │ +
80 }
│ │ │ │ +
│ │ │ │ +
81
│ │ │ │ +
│ │ │ │ +
83 int * GetSizePtr() const {
│ │ │ │ +
84 return _size;
│ │ │ │ +
85 }
│ │ │ │
│ │ │ │
86
│ │ │ │ -
87
│ │ │ │ -
88//
│ │ │ │ -
89// Forward declarations of required TopologyRefinerFactory<TopologyDescriptor>
│ │ │ │ -
90// specializations (defined internally):
│ │ │ │ -
91//
│ │ │ │ -
92// @cond EXCLUDE_DOXYGEN
│ │ │ │ -
93
│ │ │ │ -
94template <>
│ │ │ │ -
95bool
│ │ │ │ - │ │ │ │ -
97 TopologyRefiner & refiner, TopologyDescriptor const & desc);
│ │ │ │ -
98
│ │ │ │ -
99template <>
│ │ │ │ -
100bool
│ │ │ │ - │ │ │ │ -
102 TopologyRefiner & refiner, TopologyDescriptor const & desc);
│ │ │ │ -
103
│ │ │ │ -
104template <>
│ │ │ │ -
105bool
│ │ │ │ - │ │ │ │ -
107 TopologyRefiner & refiner, TopologyDescriptor const & desc);
│ │ │ │ +
│ │ │ │ +
88 Index const * GetVertexIndices() const {
│ │ │ │ +
89 return _indices;
│ │ │ │ +
90 }
│ │ │ │ +
│ │ │ │ +
91
│ │ │ │ +
│ │ │ │ +
93 REAL const * GetWeights() const {
│ │ │ │ +
94 return _weights;
│ │ │ │ +
95 }
│ │ │ │ +
│ │ │ │ +
96
│ │ │ │ +
98 void Next() {
│ │ │ │ +
99 int stride = *_size;
│ │ │ │ +
100 ++_size;
│ │ │ │ +
101 _indices += stride;
│ │ │ │ +
102 _weights += stride;
│ │ │ │ +
103 }
│ │ │ │ +
104
│ │ │ │ +
105protected:
│ │ │ │ +
106 friend class StencilTableFactoryReal<REAL>;
│ │ │ │ +
107 friend class LimitStencilTableFactoryReal<REAL>;
│ │ │ │
108
│ │ │ │ -
109template <>
│ │ │ │ -
110bool
│ │ │ │ - │ │ │ │ -
112 TopologyRefiner & refiner, TopologyDescriptor const & desc);
│ │ │ │ +
109 int * _size;
│ │ │ │ + │ │ │ │ +
111 REAL * _weights;
│ │ │ │ +
112};
│ │ │ │ +
│ │ │ │
113
│ │ │ │ -
114template <>
│ │ │ │ -
115void
│ │ │ │ - │ │ │ │ -
117 TopologyError errCode, char const * msg, TopologyDescriptor const & desc);
│ │ │ │ -
118
│ │ │ │ -
119// @endcond
│ │ │ │ -
120
│ │ │ │ -
121} // end namespace Far
│ │ │ │ -
122
│ │ │ │ -
123} // end namespace OPENSUBDIV_VERSION
│ │ │ │ -
124using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
125} // end namespace OpenSubdiv
│ │ │ │ +
│ │ │ │ +
116class Stencil : public StencilReal<float> {
│ │ │ │ +
117protected:
│ │ │ │ + │ │ │ │ +
119
│ │ │ │ +
120public:
│ │ │ │ + │ │ │ │ +
122 Stencil(BaseStencil const & other) : BaseStencil(other) { }
│ │ │ │ +
│ │ │ │ +
123 Stencil(int * size, Index * indices, float * weights)
│ │ │ │ +
124 : BaseStencil(size, indices, weights) { }
│ │ │ │ +
│ │ │ │ +
125};
│ │ │ │ +
│ │ │ │
126
│ │ │ │ -
127#endif /* OPENSUBDIV3_FAR_TOPOLOGY_DESCRIPTOR_H */
│ │ │ │ +
127
│ │ │ │ +
140template <typename REAL>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
142protected:
│ │ │ │ +
143 StencilTableReal(int numControlVerts,
│ │ │ │ +
144 std::vector<int> const& offsets,
│ │ │ │ +
145 std::vector<int> const& sizes,
│ │ │ │ +
146 std::vector<int> const& sources,
│ │ │ │ +
147 std::vector<REAL> const& weights,
│ │ │ │ +
148 bool includeCoarseVerts,
│ │ │ │ +
149 size_t firstOffset);
│ │ │ │ +
150
│ │ │ │ +
151public:
│ │ │ │ +
152
│ │ │ │ +
153 virtual ~StencilTableReal() {};
│ │ │ │ +
154
│ │ │ │ +
│ │ │ │ +
156 int GetNumStencils() const {
│ │ │ │ +
157 return (int)_sizes.size();
│ │ │ │ +
158 }
│ │ │ │ +
│ │ │ │ +
159
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
162 return _numControlVertices;
│ │ │ │ +
163 }
│ │ │ │ +
│ │ │ │ +
164
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
167
│ │ │ │ +
│ │ │ │ +
169 std::vector<int> const & GetSizes() const {
│ │ │ │ +
170 return _sizes;
│ │ │ │ +
171 }
│ │ │ │ +
│ │ │ │ +
172
│ │ │ │ +
│ │ │ │ +
174 std::vector<Index> const & GetOffsets() const {
│ │ │ │ +
175 return _offsets;
│ │ │ │ +
176 }
│ │ │ │ +
│ │ │ │ +
177
│ │ │ │ +
│ │ │ │ +
179 std::vector<Index> const & GetControlIndices() const {
│ │ │ │ +
180 return _indices;
│ │ │ │ +
181 }
│ │ │ │ +
│ │ │ │ +
182
│ │ │ │ +
│ │ │ │ +
184 std::vector<REAL> const & GetWeights() const {
│ │ │ │ +
185 return _weights;
│ │ │ │ +
186 }
│ │ │ │ +
│ │ │ │ +
187
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
190
│ │ │ │ +
204 template <class T, class U>
│ │ │ │ +
│ │ │ │ +
205 void UpdateValues(T const &srcValues, U &dstValues, Index start=-1, Index end=-1) const {
│ │ │ │ +
206 this->update(srcValues, dstValues, _weights, start, end);
│ │ │ │ +
207 }
│ │ │ │ +
│ │ │ │ +
208
│ │ │ │ +
209 template <class T1, class T2, class U>
│ │ │ │ +
│ │ │ │ +
210 void UpdateValues(T1 const &srcBase, int numBase, T2 const &srcRef,
│ │ │ │ +
211 U &dstValues, Index start=-1, Index end=-1) const {
│ │ │ │ +
212 this->update(srcBase, numBase, srcRef, dstValues, _weights, start, end);
│ │ │ │ +
213 }
│ │ │ │ +
│ │ │ │ +
214
│ │ │ │ +
215 // Pointer interface for backward compatibility
│ │ │ │ +
216 template <class T, class U>
│ │ │ │ +
│ │ │ │ +
217 void UpdateValues(T const *src, U *dst, Index start=-1, Index end=-1) const {
│ │ │ │ +
218 this->update(src, dst, _weights, start, end);
│ │ │ │ +
219 }
│ │ │ │ +
│ │ │ │ +
220 template <class T1, class T2, class U>
│ │ │ │ +
│ │ │ │ +
221 void UpdateValues(T1 const *srcBase, int numBase, T2 const *srcRef,
│ │ │ │ +
222 U *dst, Index start=-1, Index end=-1) const {
│ │ │ │ +
223 this->update(srcBase, numBase, srcRef, dst, _weights, start, end);
│ │ │ │ +
224 }
│ │ │ │ +
│ │ │ │ +
225
│ │ │ │ +
227 void Clear();
│ │ │ │ +
228
│ │ │ │ +
229protected:
│ │ │ │ +
230
│ │ │ │ +
231 // Update values by applying cached stencil weights to new control values
│ │ │ │ +
232 template <class T, class U>
│ │ │ │ +
│ │ │ │ +
233 void update( T const &srcValues, U &dstValues,
│ │ │ │ +
234 std::vector<REAL> const & valueWeights, Index start, Index end) const;
│ │ │ │ +
235 template <class T1, class T2, class U>
│ │ │ │ +
│ │ │ │ +
236 void update( T1 const &srcBase, int numBase, T2 const &srcRef, U &dstValues,
│ │ │ │ +
237 std::vector<REAL> const & valueWeights, Index start, Index end) const;
│ │ │ │ +
238
│ │ │ │ +
239 // Populate the offsets table from the stencil sizes in _sizes (factory helper)
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
241
│ │ │ │ +
242 // Resize the table arrays (factory helper)
│ │ │ │ +
│ │ │ │ +
243 void resize(int nstencils, int nelems);
│ │ │ │ +
244
│ │ │ │ +
245 // Reserves the table arrays (factory helper)
│ │ │ │ +
│ │ │ │ +
246 void reserve(int nstencils, int nelems);
│ │ │ │ +
247
│ │ │ │ +
248 // Reallocates the table arrays to remove excess capacity (factory helper)
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
250
│ │ │ │ +
251 // Performs any final operations on internal tables (factory helper)
│ │ │ │ +
│ │ │ │ +
252 void finalize();
│ │ │ │ +
253
│ │ │ │ +
254protected:
│ │ │ │ + │ │ │ │ +
256 StencilTableReal(int numControlVerts)
│ │ │ │ +
257 : _numControlVertices(numControlVerts)
│ │ │ │ +
258 { }
│ │ │ │ +
259
│ │ │ │ +
260 friend class StencilTableFactoryReal<REAL>;
│ │ │ │ + │ │ │ │ +
262
│ │ │ │ +
263 int _numControlVertices; // number of control vertices
│ │ │ │ +
264
│ │ │ │ +
265 std::vector<int> _sizes; // number of coefficients for each stencil
│ │ │ │ +
266 std::vector<Index> _offsets, // offset to the start of each stencil
│ │ │ │ +
267 _indices; // indices of contributing coarse vertices
│ │ │ │ +
268 std::vector<REAL> _weights; // stencil weight coefficients
│ │ │ │ +
269};
│ │ │ │ +
270
│ │ │ │ +
│ │ │ │ +
273class StencilTable : public StencilTableReal<float> {
│ │ │ │ +
274protected:
│ │ │ │ + │ │ │ │ +
276
│ │ │ │ +
277public:
│ │ │ │ +
│ │ │ │ +
278 Stencil GetStencil(Index index) const {
│ │ │ │ +
279 return Stencil(BaseTable::GetStencil(index));
│ │ │ │ +
280 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
281 Stencil operator[] (Index index) const {
│ │ │ │ +
282 return Stencil(BaseTable::GetStencil(index));
│ │ │ │ +
283 }
│ │ │ │ +
│ │ │ │ +
284
│ │ │ │ +
285protected:
│ │ │ │ + │ │ │ │ +
287 StencilTable(int numControlVerts) : BaseTable(numControlVerts) { }
│ │ │ │ +
│ │ │ │ +
288 StencilTable(int numControlVerts,
│ │ │ │ +
289 std::vector<int> const& offsets,
│ │ │ │ +
290 std::vector<int> const& sizes,
│ │ │ │ +
291 std::vector<int> const& sources,
│ │ │ │ +
292 std::vector<float> const& weights,
│ │ │ │ +
293 bool includeCoarseVerts,
│ │ │ │ +
294 size_t firstOffset)
│ │ │ │ +
295 : BaseTable(numControlVerts, offsets,
│ │ │ │ +
296 sizes, sources, weights, includeCoarseVerts, firstOffset) { }
│ │ │ │ +
│ │ │ │ +
297};
│ │ │ │ +
│ │ │ │ +
298
│ │ │ │ +
299
│ │ │ │ +
302template <typename REAL>
│ │ │ │ +
│ │ │ │ +
303class LimitStencilReal : public StencilReal<REAL> {
│ │ │ │ +
304public:
│ │ │ │ +
305
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
325 Index * indices,
│ │ │ │ +
326 REAL * weights,
│ │ │ │ +
327 REAL * duWeights=0,
│ │ │ │ +
328 REAL * dvWeights=0,
│ │ │ │ +
329 REAL * duuWeights=0,
│ │ │ │ +
330 REAL * duvWeights=0,
│ │ │ │ +
331 REAL * dvvWeights=0)
│ │ │ │ +
332 : StencilReal<REAL>(size, indices, weights),
│ │ │ │ +
333 _duWeights(duWeights),
│ │ │ │ +
334 _dvWeights(dvWeights),
│ │ │ │ +
335 _duuWeights(duuWeights),
│ │ │ │ +
336 _duvWeights(duvWeights),
│ │ │ │ +
337 _dvvWeights(dvvWeights) {
│ │ │ │ +
338 }
│ │ │ │ +
│ │ │ │ +
339
│ │ │ │ +
│ │ │ │ +
341 REAL const * GetDuWeights() const {
│ │ │ │ +
342 return _duWeights;
│ │ │ │ +
343 }
│ │ │ │ +
│ │ │ │ +
344
│ │ │ │ +
│ │ │ │ +
346 REAL const * GetDvWeights() const {
│ │ │ │ +
347 return _dvWeights;
│ │ │ │ +
348 }
│ │ │ │ +
│ │ │ │ +
349
│ │ │ │ +
│ │ │ │ +
351 REAL const * GetDuuWeights() const {
│ │ │ │ +
352 return _duuWeights;
│ │ │ │ +
353 }
│ │ │ │ +
│ │ │ │ +
354
│ │ │ │ +
│ │ │ │ +
356 REAL const * GetDuvWeights() const {
│ │ │ │ +
357 return _duvWeights;
│ │ │ │ +
358 }
│ │ │ │ +
│ │ │ │ +
359
│ │ │ │ +
│ │ │ │ +
361 REAL const * GetDvvWeights() const {
│ │ │ │ +
362 return _dvvWeights;
│ │ │ │ +
363 }
│ │ │ │ +
│ │ │ │ +
364
│ │ │ │ +
366 void Next() {
│ │ │ │ +
367 int stride = *this->_size;
│ │ │ │ +
368 ++this->_size;
│ │ │ │ +
369 this->_indices += stride;
│ │ │ │ +
370 this->_weights += stride;
│ │ │ │ +
371 if (_duWeights) _duWeights += stride;
│ │ │ │ +
372 if (_dvWeights) _dvWeights += stride;
│ │ │ │ +
373 if (_duuWeights) _duuWeights += stride;
│ │ │ │ +
374 if (_duvWeights) _duvWeights += stride;
│ │ │ │ +
375 if (_dvvWeights) _dvvWeights += stride;
│ │ │ │ +
376 }
│ │ │ │ +
377
│ │ │ │ +
378private:
│ │ │ │ +
379
│ │ │ │ +
380 friend class StencilTableFactoryReal<REAL>;
│ │ │ │ +
381 friend class LimitStencilTableFactoryReal<REAL>;
│ │ │ │ +
382
│ │ │ │ +
383 REAL * _duWeights, // pointer to stencil u derivative limit weights
│ │ │ │ +
384 * _dvWeights, // pointer to stencil v derivative limit weights
│ │ │ │ +
385 * _duuWeights, // pointer to stencil uu derivative limit weights
│ │ │ │ +
386 * _duvWeights, // pointer to stencil uv derivative limit weights
│ │ │ │ +
387 * _dvvWeights; // pointer to stencil vv derivative limit weights
│ │ │ │ +
388};
│ │ │ │ +
│ │ │ │ +
389
│ │ │ │ +
│ │ │ │ +
392class LimitStencil : public LimitStencilReal<float> {
│ │ │ │ +
393protected:
│ │ │ │ + │ │ │ │ +
395
│ │ │ │ +
396public:
│ │ │ │ +
397 LimitStencil(BaseStencil const & other) : BaseStencil(other) { }
│ │ │ │ +
│ │ │ │ +
398 LimitStencil(int* size, Index * indices, float * weights,
│ │ │ │ +
399 float * duWeights=0, float * dvWeights=0,
│ │ │ │ +
400 float * duuWeights=0, float * duvWeights=0, float * dvvWeights=0)
│ │ │ │ +
401 : BaseStencil(size, indices, weights,
│ │ │ │ +
402 duWeights, dvWeights, duuWeights, duvWeights, dvvWeights) { }
│ │ │ │ +
│ │ │ │ +
403};
│ │ │ │ +
│ │ │ │ +
404
│ │ │ │ +
405
│ │ │ │ +
408template <typename REAL>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
410protected:
│ │ │ │ + │ │ │ │ +
412 int numControlVerts,
│ │ │ │ +
413 std::vector<int> const& offsets,
│ │ │ │ +
414 std::vector<int> const& sizes,
│ │ │ │ +
415 std::vector<int> const& sources,
│ │ │ │ +
416 std::vector<REAL> const& weights,
│ │ │ │ +
417 std::vector<REAL> const& duWeights,
│ │ │ │ +
418 std::vector<REAL> const& dvWeights,
│ │ │ │ +
419 std::vector<REAL> const& duuWeights,
│ │ │ │ +
420 std::vector<REAL> const& duvWeights,
│ │ │ │ +
421 std::vector<REAL> const& dvvWeights,
│ │ │ │ +
422 bool includeCoarseVerts,
│ │ │ │ +
423 size_t firstOffset);
│ │ │ │ +
424
│ │ │ │ +
425public:
│ │ │ │ +
426
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
429
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
432
│ │ │ │ +
│ │ │ │ +
434 std::vector<REAL> const & GetDuWeights() const {
│ │ │ │ +
435 return _duWeights;
│ │ │ │ +
436 }
│ │ │ │ +
│ │ │ │ +
437
│ │ │ │ +
│ │ │ │ +
439 std::vector<REAL> const & GetDvWeights() const {
│ │ │ │ +
440 return _dvWeights;
│ │ │ │ +
441 }
│ │ │ │ +
│ │ │ │ +
442
│ │ │ │ +
│ │ │ │ +
444 std::vector<REAL> const & GetDuuWeights() const {
│ │ │ │ +
445 return _duuWeights;
│ │ │ │ +
446 }
│ │ │ │ +
│ │ │ │ +
447
│ │ │ │ +
│ │ │ │ +
449 std::vector<REAL> const & GetDuvWeights() const {
│ │ │ │ +
450 return _duvWeights;
│ │ │ │ +
451 }
│ │ │ │ +
│ │ │ │ +
452
│ │ │ │ +
│ │ │ │ +
454 std::vector<REAL> const & GetDvvWeights() const {
│ │ │ │ +
455 return _dvvWeights;
│ │ │ │ +
456 }
│ │ │ │ +
│ │ │ │ +
457
│ │ │ │ +
475 template <class T, class U>
│ │ │ │ +
│ │ │ │ +
476 void UpdateDerivs(T const & srcValues, U & uderivs, U & vderivs,
│ │ │ │ +
477 int start=-1, int end=-1) const {
│ │ │ │ +
478
│ │ │ │ +
479 this->update(srcValues, uderivs, _duWeights, start, end);
│ │ │ │ +
480 this->update(srcValues, vderivs, _dvWeights, start, end);
│ │ │ │ +
481 }
│ │ │ │ +
│ │ │ │ +
482
│ │ │ │ +
483 template <class T1, class T2, class U>
│ │ │ │ +
│ │ │ │ +
484 void UpdateDerivs(T1 const & srcBase, int numBase, T2 const & srcRef,
│ │ │ │ +
485 U & uderivs, U & vderivs, int start=-1, int end=-1) const {
│ │ │ │ +
486
│ │ │ │ +
487 this->update(srcBase, numBase, srcRef, uderivs, _duWeights, start, end);
│ │ │ │ +
488 this->update(srcBase, numBase, srcRef, vderivs, _dvWeights, start, end);
│ │ │ │ +
489 }
│ │ │ │ +
│ │ │ │ +
490
│ │ │ │ +
491 // Pointer interface for backward compatibility
│ │ │ │ +
492 template <class T, class U>
│ │ │ │ +
│ │ │ │ +
493 void UpdateDerivs(T const *src, U *uderivs, U *vderivs,
│ │ │ │ +
494 int start=-1, int end=-1) const {
│ │ │ │ +
495
│ │ │ │ +
496 this->update(src, uderivs, _duWeights, start, end);
│ │ │ │ +
497 this->update(src, vderivs, _dvWeights, start, end);
│ │ │ │ +
498 }
│ │ │ │ +
│ │ │ │ +
499 template <class T1, class T2, class U>
│ │ │ │ +
│ │ │ │ +
500 void UpdateDerivs(T1 const *srcBase, int numBase, T2 const *srcRef,
│ │ │ │ +
501 U *uderivs, U *vderivs, int start=-1, int end=-1) const {
│ │ │ │ +
502
│ │ │ │ +
503 this->update(srcBase, numBase, srcRef, uderivs, _duWeights, start, end);
│ │ │ │ +
504 this->update(srcBase, numBase, srcRef, vderivs, _dvWeights, start, end);
│ │ │ │ +
505 }
│ │ │ │ +
│ │ │ │ +
506
│ │ │ │ +
527 template <class T, class U>
│ │ │ │ +
│ │ │ │ +
528 void Update2ndDerivs(T const & srcValues,
│ │ │ │ +
529 U & uuderivs, U & uvderivs, U & vvderivs,
│ │ │ │ +
530 int start=-1, int end=-1) const {
│ │ │ │ +
531
│ │ │ │ +
532 this->update(srcValues, uuderivs, _duuWeights, start, end);
│ │ │ │ +
533 this->update(srcValues, uvderivs, _duvWeights, start, end);
│ │ │ │ +
534 this->update(srcValues, vvderivs, _dvvWeights, start, end);
│ │ │ │ +
535 }
│ │ │ │ +
│ │ │ │ +
536
│ │ │ │ +
537 template <class T1, class T2, class U>
│ │ │ │ +
│ │ │ │ +
538 void Update2ndDerivs(T1 const & srcBase, int numBase, T2 const & srcRef,
│ │ │ │ +
539 U & uuderivs, U & uvderivs, U & vvderivs, int start=-1, int end=-1) const {
│ │ │ │ +
540
│ │ │ │ +
541 this->update(srcBase, numBase, srcRef, uuderivs, _duuWeights, start, end);
│ │ │ │ +
542 this->update(srcBase, numBase, srcRef, uvderivs, _duvWeights, start, end);
│ │ │ │ +
543 this->update(srcBase, numBase, srcRef, vvderivs, _dvvWeights, start, end);
│ │ │ │ +
544 }
│ │ │ │ +
│ │ │ │ +
545
│ │ │ │ +
546 // Pointer interface for backward compatibility
│ │ │ │ +
547 template <class T, class U>
│ │ │ │ +
│ │ │ │ +
548 void Update2ndDerivs(T const *src, T *uuderivs, U *uvderivs, U *vvderivs,
│ │ │ │ +
549 int start=-1, int end=-1) const {
│ │ │ │ +
550
│ │ │ │ +
551 this->update(src, uuderivs, _duuWeights, start, end);
│ │ │ │ +
552 this->update(src, uvderivs, _duvWeights, start, end);
│ │ │ │ +
553 this->update(src, vvderivs, _dvvWeights, start, end);
│ │ │ │ +
554 }
│ │ │ │ +
│ │ │ │ +
555 template <class T1, class T2, class U>
│ │ │ │ +
│ │ │ │ +
556 void Update2ndDerivs(T1 const *srcBase, int numBase, T2 const *srcRef,
│ │ │ │ +
557 U *uuderivs, U *uvderivs, U *vvderivs, int start=-1, int end=-1) const {
│ │ │ │ +
558
│ │ │ │ +
559 this->update(srcBase, numBase, srcRef, uuderivs, _duuWeights, start, end);
│ │ │ │ +
560 this->update(srcBase, numBase, srcRef, uvderivs, _duvWeights, start, end);
│ │ │ │ +
561 this->update(srcBase, numBase, srcRef, vvderivs, _dvvWeights, start, end);
│ │ │ │ +
562 }
│ │ │ │ +
│ │ │ │ +
563
│ │ │ │ +
565 void Clear();
│ │ │ │ +
566
│ │ │ │ +
567private:
│ │ │ │ +
568 friend class LimitStencilTableFactoryReal<REAL>;
│ │ │ │ +
569
│ │ │ │ +
570 // Resize the table arrays (factory helper)
│ │ │ │ +
571 void resize(int nstencils, int nelems);
│ │ │ │ +
572
│ │ │ │ +
573private:
│ │ │ │ +
574 std::vector<REAL> _duWeights, // u derivative limit stencil weights
│ │ │ │ +
575 _dvWeights, // v derivative limit stencil weights
│ │ │ │ +
576 _duuWeights, // uu derivative limit stencil weights
│ │ │ │ +
577 _duvWeights, // uv derivative limit stencil weights
│ │ │ │ +
578 _dvvWeights; // vv derivative limit stencil weights
│ │ │ │ +
579};
│ │ │ │ +
580
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
584protected:
│ │ │ │ + │ │ │ │ +
586
│ │ │ │ +
587public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
590 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
593 }
│ │ │ │ +
│ │ │ │ +
594
│ │ │ │ +
595protected:
│ │ │ │ +
│ │ │ │ +
596 LimitStencilTable(int numControlVerts,
│ │ │ │ +
597 std::vector<int> const& offsets,
│ │ │ │ +
598 std::vector<int> const& sizes,
│ │ │ │ +
599 std::vector<int> const& sources,
│ │ │ │ +
600 std::vector<float> const& weights,
│ │ │ │ +
601 std::vector<float> const& duWeights,
│ │ │ │ +
602 std::vector<float> const& dvWeights,
│ │ │ │ +
603 std::vector<float> const& duuWeights,
│ │ │ │ +
604 std::vector<float> const& duvWeights,
│ │ │ │ +
605 std::vector<float> const& dvvWeights,
│ │ │ │ +
606 bool includeCoarseVerts,
│ │ │ │ +
607 size_t firstOffset)
│ │ │ │ +
608 : BaseTable(numControlVerts,
│ │ │ │ +
609 offsets, sizes, sources, weights,
│ │ │ │ +
610 duWeights, dvWeights, duuWeights, duvWeights, dvvWeights,
│ │ │ │ +
611 includeCoarseVerts, firstOffset) { }
│ │ │ │ +
│ │ │ │ +
612};
│ │ │ │ +
│ │ │ │ +
613
│ │ │ │ +
614
│ │ │ │ +
615// Update values by applying cached stencil weights to new control values
│ │ │ │ +
616template <typename REAL>
│ │ │ │ +
617template <class T1, class T2, class U> void
│ │ │ │ +
│ │ │ │ +
618StencilTableReal<REAL>::update(T1 const &srcBase, int numBase,
│ │ │ │ +
619 T2 const &srcRef, U &dstValues,
│ │ │ │ +
620 std::vector<REAL> const &valueWeights, Index start, Index end) const {
│ │ │ │ +
621
│ │ │ │ +
622 int const * sizes = &_sizes.at(0);
│ │ │ │ +
623 Index const * indices = &_indices.at(0);
│ │ │ │ +
624 REAL const * weights = &valueWeights.at(0);
│ │ │ │ +
625
│ │ │ │ +
626 if (start > 0) {
│ │ │ │ +
627 assert(start < (Index)_offsets.size());
│ │ │ │ +
628 sizes += start;
│ │ │ │ +
629 indices += _offsets[start];
│ │ │ │ +
630 weights += _offsets[start];
│ │ │ │ +
631 } else {
│ │ │ │ +
632 start = 0;
│ │ │ │ +
633 }
│ │ │ │ +
634
│ │ │ │ +
635 int nstencils = ((end < start) ? GetNumStencils() : end) - start;
│ │ │ │ +
636
│ │ │ │ +
637 for (int i = 0; i < nstencils; ++i, ++sizes) {
│ │ │ │ +
638 dstValues[start + i].Clear();
│ │ │ │ +
639 for (int j = 0; j < *sizes; ++j, ++indices, ++weights) {
│ │ │ │ +
640 if (*indices < numBase) {
│ │ │ │ +
641 dstValues[start + i].AddWithWeight(srcBase[*indices], *weights);
│ │ │ │ +
642 } else {
│ │ │ │ +
643 dstValues[start + i].AddWithWeight(srcRef[*indices - numBase], *weights);
│ │ │ │ +
644 }
│ │ │ │ +
645 }
│ │ │ │ +
646 }
│ │ │ │ +
647}
│ │ │ │ +
│ │ │ │ +
648template <typename REAL>
│ │ │ │ +
649template <class T, class U> void
│ │ │ │ +
│ │ │ │ +
650StencilTableReal<REAL>::update(T const &srcValues, U &dstValues,
│ │ │ │ +
651 std::vector<REAL> const &valueWeights, Index start, Index end) const {
│ │ │ │ +
652
│ │ │ │ +
653 int const * sizes = &_sizes.at(0);
│ │ │ │ +
654 Index const * indices = &_indices.at(0);
│ │ │ │ +
655 REAL const * weights = &valueWeights.at(0);
│ │ │ │ +
656
│ │ │ │ +
657 if (start > 0) {
│ │ │ │ +
658 assert(start < (Index)_offsets.size());
│ │ │ │ +
659 sizes += start;
│ │ │ │ +
660 indices += _offsets[start];
│ │ │ │ +
661 weights += _offsets[start];
│ │ │ │ +
662 } else {
│ │ │ │ +
663 start = 0;
│ │ │ │ +
664 }
│ │ │ │ +
665
│ │ │ │ +
666 int nstencils = ((end < start) ? GetNumStencils() : end) - start;
│ │ │ │ +
667
│ │ │ │ +
668 for (int i = 0; i < nstencils; ++i, ++sizes) {
│ │ │ │ +
669 dstValues[start + i].Clear();
│ │ │ │ +
670 for (int j = 0; j < *sizes; ++j, ++indices, ++weights) {
│ │ │ │ +
671 dstValues[start + i].AddWithWeight(srcValues[*indices], *weights);
│ │ │ │ +
672 }
│ │ │ │ +
673 }
│ │ │ │ +
674}
│ │ │ │ +
│ │ │ │ +
675
│ │ │ │ +
676template <typename REAL>
│ │ │ │ +
677inline void
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
679 Index offset=0;
│ │ │ │ +
680 int noffsets = (int)_sizes.size();
│ │ │ │ +
681 _offsets.resize(noffsets);
│ │ │ │ +
682 for (int i=0; i<(int)_sizes.size(); ++i ) {
│ │ │ │ +
683 _offsets[i]=offset;
│ │ │ │ +
684 offset+=_sizes[i];
│ │ │ │ +
685 }
│ │ │ │ +
686}
│ │ │ │ +
│ │ │ │ +
687
│ │ │ │ +
688template <typename REAL>
│ │ │ │ +
689inline void
│ │ │ │ +
│ │ │ │ +
690StencilTableReal<REAL>::resize(int nstencils, int nelems) {
│ │ │ │ +
691 _sizes.resize(nstencils);
│ │ │ │ +
692 _indices.resize(nelems);
│ │ │ │ +
693 _weights.resize(nelems);
│ │ │ │ +
694}
│ │ │ │ +
│ │ │ │ +
695
│ │ │ │ +
696template <typename REAL>
│ │ │ │ +
697inline void
│ │ │ │ +
│ │ │ │ +
698StencilTableReal<REAL>::reserve(int nstencils, int nelems) {
│ │ │ │ +
699 _sizes.reserve(nstencils);
│ │ │ │ +
700 _indices.reserve(nelems);
│ │ │ │ +
701 _weights.reserve(nelems);
│ │ │ │ +
702}
│ │ │ │ +
│ │ │ │ +
703
│ │ │ │ +
704template <typename REAL>
│ │ │ │ +
705inline void
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
707 std::vector<int>(_sizes).swap(_sizes);
│ │ │ │ +
708 std::vector<Index>(_indices).swap(_indices);
│ │ │ │ +
709 std::vector<REAL>(_weights).swap(_weights);
│ │ │ │ +
710}
│ │ │ │ +
│ │ │ │ +
711
│ │ │ │ +
712template <typename REAL>
│ │ │ │ +
713inline void
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
715 shrinkToFit();
│ │ │ │ +
716 generateOffsets();
│ │ │ │ +
717}
│ │ │ │ +
│ │ │ │ +
718
│ │ │ │ +
719// Returns a Stencil at index i in the table
│ │ │ │ +
720template <typename REAL>
│ │ │ │ + │ │ │ │ +
│ │ │ │ + │ │ │ │ +
723 assert((! _offsets.empty()) && i<(int)_offsets.size());
│ │ │ │ +
724
│ │ │ │ +
725 Index ofs = _offsets[i];
│ │ │ │ +
726
│ │ │ │ +
727 return StencilReal<REAL>(const_cast<int*>(&_sizes[i]),
│ │ │ │ +
728 const_cast<Index*>(&_indices[ofs]),
│ │ │ │ +
729 const_cast<REAL*>(&_weights[ofs]));
│ │ │ │ +
730}
│ │ │ │ +
│ │ │ │ +
731
│ │ │ │ +
732template <typename REAL>
│ │ │ │ + │ │ │ │ +
│ │ │ │ + │ │ │ │ +
735 return GetStencil(index);
│ │ │ │ +
736}
│ │ │ │ +
│ │ │ │ +
737
│ │ │ │ +
738template <typename REAL>
│ │ │ │ +
739inline void
│ │ │ │ +
740LimitStencilTableReal<REAL>::resize(int nstencils, int nelems) {
│ │ │ │ +
741 StencilTableReal<REAL>::resize(nstencils, nelems);
│ │ │ │ +
742 _duWeights.resize(nelems);
│ │ │ │ +
743 _dvWeights.resize(nelems);
│ │ │ │ +
744}
│ │ │ │ +
745
│ │ │ │ +
746// Returns a LimitStencil at index i in the table
│ │ │ │ +
747template <typename REAL>
│ │ │ │ +
748inline LimitStencilReal<REAL>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
750 assert((! this->GetOffsets().empty()) && i<(int)this->GetOffsets().size());
│ │ │ │ +
751
│ │ │ │ +
752 Index ofs = this->GetOffsets()[i];
│ │ │ │ +
753
│ │ │ │ +
754 if (!_duWeights.empty() && !_dvWeights.empty() &&
│ │ │ │ +
755 !_duuWeights.empty() && !_duvWeights.empty() && !_dvvWeights.empty()) {
│ │ │ │ + │ │ │ │ +
757 const_cast<int *>(&this->GetSizes()[i]),
│ │ │ │ +
758 const_cast<Index *>(&this->GetControlIndices()[ofs]),
│ │ │ │ +
759 const_cast<REAL *>(&this->GetWeights()[ofs]),
│ │ │ │ +
760 const_cast<REAL *>(&GetDuWeights()[ofs]),
│ │ │ │ +
761 const_cast<REAL *>(&GetDvWeights()[ofs]),
│ │ │ │ +
762 const_cast<REAL *>(&GetDuuWeights()[ofs]),
│ │ │ │ +
763 const_cast<REAL *>(&GetDuvWeights()[ofs]),
│ │ │ │ +
764 const_cast<REAL *>(&GetDvvWeights()[ofs]) );
│ │ │ │ +
765 } else if (!_duWeights.empty() && !_dvWeights.empty()) {
│ │ │ │ + │ │ │ │ +
767 const_cast<int *>(&this->GetSizes()[i]),
│ │ │ │ +
768 const_cast<Index *>(&this->GetControlIndices()[ofs]),
│ │ │ │ +
769 const_cast<REAL *>(&this->GetWeights()[ofs]),
│ │ │ │ +
770 const_cast<REAL *>(&GetDuWeights()[ofs]),
│ │ │ │ +
771 const_cast<REAL *>(&GetDvWeights()[ofs]) );
│ │ │ │ +
772 } else {
│ │ │ │ + │ │ │ │ +
774 const_cast<int *>(&this->GetSizes()[i]),
│ │ │ │ +
775 const_cast<Index *>(&this->GetControlIndices()[ofs]),
│ │ │ │ +
776 const_cast<REAL *>(&this->GetWeights()[ofs]) );
│ │ │ │ +
777 }
│ │ │ │ +
778}
│ │ │ │ +
│ │ │ │ +
779
│ │ │ │ +
780template <typename REAL>
│ │ │ │ + │ │ │ │ +
│ │ │ │ + │ │ │ │ +
783 return GetLimitStencil(index);
│ │ │ │ +
784}
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
785
│ │ │ │ +
786} // end namespace Far
│ │ │ │ +
787
│ │ │ │ +
788} // end namespace OPENSUBDIV_VERSION
│ │ │ │ +
789using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
790
│ │ │ │ +
791} // end namespace OpenSubdiv
│ │ │ │ +
792
│ │ │ │ +
793#endif // OPENSUBDIV3_FAR_STENCILTABLE_H
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ -
A simple reference to raw topology data for use with TopologyRefinerFactory.
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
static bool assignComponentTopology(TopologyRefiner &newRefiner, MESH const &mesh)
Specify the relationships between vertices, faces, etc. ie the face-vertices, vertex-faces,...
│ │ │ │ -
static void reportInvalidTopology(TopologyError errCode, char const *msg, MESH const &mesh)
(Optional) Control run-time topology validation and error reporting
│ │ │ │ -
static bool assignComponentTags(TopologyRefiner &newRefiner, MESH const &mesh)
(Optional) Specify edge or vertex sharpness or face holes
│ │ │ │ -
static bool resizeComponentTopology(TopologyRefiner &newRefiner, MESH const &mesh)
Specify the number of vertices, faces, face-vertices, etc.
│ │ │ │ -
static bool assignFaceVaryingTopology(TopologyRefiner &newRefiner, MESH const &mesh)
(Optional) Specify face-varying data per face
│ │ │ │ -
Stores topology data for a specified set of refinement options.
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
StencilReal(int *size, Index *indices, REAL *weights)
Constructor.
│ │ │ │ +
void Next()
Advance to the next stencil in the table.
│ │ │ │ +
StencilReal(StencilReal const &other)
Copy constructor.
│ │ │ │ + │ │ │ │ +
Index const * GetVertexIndices() const
Returns the control vertices' indices.
│ │ │ │ +
int GetSize() const
Returns the size of the stencil.
│ │ │ │ + │ │ │ │ +
int * GetSizePtr() const
Returns the size of the stencil as a pointer.
│ │ │ │ +
REAL const * GetWeights() const
Returns the interpolation weights.
│ │ │ │ +
Vertex stencil class wrapping the template for compatibility.
│ │ │ │ + │ │ │ │ +
Stencil(int *size, Index *indices, float *weights)
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
int GetNumControlVertices() const
Returns the number of control vertices indexed in the table.
│ │ │ │ + │ │ │ │ + │ │ │ │ +
void update(T1 const &srcBase, int numBase, T2 const &srcRef, U &dstValues, std::vector< REAL > const &valueWeights, Index start, Index end) const
│ │ │ │ +
void UpdateValues(T1 const &srcBase, int numBase, T2 const &srcRef, U &dstValues, Index start=-1, Index end=-1) const
│ │ │ │ +
std::vector< Index > const & GetControlIndices() const
Returns the indices of the control vertices.
│ │ │ │ + │ │ │ │ +
StencilReal< REAL > operator[](Index index) const
Returns the stencil at index i in the table.
│ │ │ │ + │ │ │ │ +
void update(T const &srcValues, U &dstValues, std::vector< REAL > const &valueWeights, Index start, Index end) const
│ │ │ │ +
std::vector< int > const & GetSizes() const
Returns the number of control vertices of each stencil in the table.
│ │ │ │ +
int GetNumStencils() const
Returns the number of stencils in the table.
│ │ │ │ + │ │ │ │ +
std::vector< Index > const & GetOffsets() const
Returns the offset to a given stencil (factory may leave empty)
│ │ │ │ +
StencilReal< REAL > GetStencil(Index i) const
Returns a Stencil at index i in the table.
│ │ │ │ + │ │ │ │ + │ │ │ │ +
void Clear()
Clears the stencils from the table.
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
std::vector< REAL > const & GetWeights() const
Returns the stencil interpolation weights.
│ │ │ │ +
void UpdateValues(T1 const *srcBase, int numBase, T2 const *srcRef, U *dst, Index start=-1, Index end=-1) const
│ │ │ │ +
StencilTableReal(int numControlVerts, std::vector< int > const &offsets, std::vector< int > const &sizes, std::vector< int > const &sources, std::vector< REAL > const &weights, bool includeCoarseVerts, size_t firstOffset)
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
void UpdateValues(T const *src, U *dst, Index start=-1, Index end=-1) const
│ │ │ │ +
void UpdateValues(T const &srcValues, U &dstValues, Index start=-1, Index end=-1) const
Updates point values based on the control values.
│ │ │ │ +
Stencil table class wrapping the template for compatibility.
│ │ │ │ +
StencilTable(int numControlVerts, std::vector< int > const &offsets, std::vector< int > const &sizes, std::vector< int > const &sources, std::vector< float > const &weights, bool includeCoarseVerts, size_t firstOffset)
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
REAL const * GetDuvWeights() const
Returns the uv derivative weights.
│ │ │ │ +
REAL const * GetDvWeights() const
Returns the v derivative weights.
│ │ │ │ +
void Next()
Advance to the next stencil in the table.
│ │ │ │ +
REAL const * GetDvvWeights() const
Returns the vv derivative weights.
│ │ │ │ +
LimitStencilReal(int *size, Index *indices, REAL *weights, REAL *duWeights=0, REAL *dvWeights=0, REAL *duuWeights=0, REAL *duvWeights=0, REAL *dvvWeights=0)
Constructor.
│ │ │ │ +
REAL const * GetDuWeights() const
Returns the u derivative weights.
│ │ │ │ +
REAL const * GetDuuWeights() const
Returns the uu derivative weights.
│ │ │ │ +
Limit point stencil class wrapping the template for compatibility.
│ │ │ │ + │ │ │ │ + │ │ │ │ +
LimitStencil(int *size, Index *indices, float *weights, float *duWeights=0, float *dvWeights=0, float *duuWeights=0, float *duvWeights=0, float *dvvWeights=0)
│ │ │ │ + │ │ │ │ +
std::vector< REAL > const & GetDuuWeights() const
Returns the 'uu' derivative stencil interpolation weights.
│ │ │ │ +
LimitStencilReal< REAL > operator[](Index index) const
Returns the limit stencil at index i in the table.
│ │ │ │ +
std::vector< REAL > const & GetDvvWeights() const
Returns the 'vv' derivative stencil interpolation weights.
│ │ │ │ +
void UpdateDerivs(T const *src, U *uderivs, U *vderivs, int start=-1, int end=-1) const
│ │ │ │ +
void Update2ndDerivs(T const *src, T *uuderivs, U *uvderivs, U *vvderivs, int start=-1, int end=-1) const
│ │ │ │ +
std::vector< REAL > const & GetDvWeights() const
Returns the 'v' derivative stencil interpolation weights.
│ │ │ │ +
void Update2ndDerivs(T1 const *srcBase, int numBase, T2 const *srcRef, U *uuderivs, U *uvderivs, U *vvderivs, int start=-1, int end=-1) const
│ │ │ │ +
void UpdateDerivs(T const &srcValues, U &uderivs, U &vderivs, int start=-1, int end=-1) const
Updates derivative values based on the control values.
│ │ │ │ +
LimitStencilReal< REAL > GetLimitStencil(Index i) const
Returns a LimitStencil at index i in the table.
│ │ │ │ +
LimitStencilTableReal(int numControlVerts, std::vector< int > const &offsets, std::vector< int > const &sizes, std::vector< int > const &sources, std::vector< REAL > const &weights, std::vector< REAL > const &duWeights, std::vector< REAL > const &dvWeights, std::vector< REAL > const &duuWeights, std::vector< REAL > const &duvWeights, std::vector< REAL > const &dvvWeights, bool includeCoarseVerts, size_t firstOffset)
│ │ │ │ +
void Update2ndDerivs(T const &srcValues, U &uuderivs, U &uvderivs, U &vvderivs, int start=-1, int end=-1) const
Updates 2nd derivative values based on the control values.
│ │ │ │ +
std::vector< REAL > const & GetDuWeights() const
Returns the 'u' derivative stencil interpolation weights.
│ │ │ │ +
void Clear()
Clears the stencils from the table.
│ │ │ │ +
void Update2ndDerivs(T1 const &srcBase, int numBase, T2 const &srcRef, U &uuderivs, U &uvderivs, U &vvderivs, int start=-1, int end=-1) const
│ │ │ │ +
std::vector< REAL > const & GetDuvWeights() const
Returns the 'uv' derivative stencil interpolation weights.
│ │ │ │ +
void UpdateDerivs(T1 const &srcBase, int numBase, T2 const &srcRef, U &uderivs, U &vderivs, int start=-1, int end=-1) const
│ │ │ │ +
void UpdateDerivs(T1 const *srcBase, int numBase, T2 const *srcRef, U *uderivs, U *vderivs, int start=-1, int end=-1) const
│ │ │ │ +
Limit stencil table class wrapping the template for compatibility.
│ │ │ │ + │ │ │ │ + │ │ │ │ +
LimitStencilTable(int numControlVerts, std::vector< int > const &offsets, std::vector< int > const &sizes, std::vector< int > const &sources, std::vector< float > const &weights, std::vector< float > const &duWeights, std::vector< float > const &dvWeights, std::vector< float > const &duuWeights, std::vector< float > const &duvWeights, std::vector< float > const &dvvWeights, bool includeCoarseVerts, size_t firstOffset)
│ │ │ │ + │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -topologyDescriptor.h │ │ │ │ │ +stencilTable.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ -2// Copyright 2014 DreamWorks Animation LLC. │ │ │ │ │ +2// Copyright 2013 Pixar │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ 7// Section 6. Trademarks. is deleted and replaced with: │ │ │ │ │ 8// │ │ │ │ │ 9// 6. Trademarks. This License does not grant permission to use the trade │ │ │ │ │ @@ -23,208 +23,991 @@ │ │ │ │ │ 17// │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ -24#ifndef OPENSUBDIV3_FAR_TOPOLOGY_DESCRIPTOR_H │ │ │ │ │ -25#define OPENSUBDIV3_FAR_TOPOLOGY_DESCRIPTOR_H │ │ │ │ │ -26 │ │ │ │ │ -27#include "../version.h" │ │ │ │ │ -28 │ │ │ │ │ -29#include "../far/topologyRefiner.h" │ │ │ │ │ -30#include "../far/topologyRefinerFactory.h" │ │ │ │ │ -31#include "../far/error.h" │ │ │ │ │ -32 │ │ │ │ │ -33#include │ │ │ │ │ -34 │ │ │ │ │ -35namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ -36namespace OPENSUBDIV_VERSION { │ │ │ │ │ -37 │ │ │ │ │ -38namespace Far { │ │ │ │ │ +24 │ │ │ │ │ +25#ifndef OPENSUBDIV3_FAR_STENCILTABLE_H │ │ │ │ │ +26#define OPENSUBDIV3_FAR_STENCILTABLE_H │ │ │ │ │ +27 │ │ │ │ │ +28#include "../version.h" │ │ │ │ │ +29 │ │ │ │ │ +30#include "../far/types.h" │ │ │ │ │ +31 │ │ │ │ │ +32#include │ │ │ │ │ +33#include │ │ │ │ │ +34#include │ │ │ │ │ +35#include │ │ │ │ │ +36 │ │ │ │ │ +37namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ +38namespace OPENSUBDIV_VERSION { │ │ │ │ │ 39 │ │ │ │ │ -_4_9struct _T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r { │ │ │ │ │ -50 │ │ │ │ │ -_5_1 int _n_u_m_V_e_r_t_i_c_e_s, │ │ │ │ │ -_5_2 _n_u_m_F_a_c_e_s; │ │ │ │ │ -53 │ │ │ │ │ -_5_4 int const * _n_u_m_V_e_r_t_s_P_e_r_F_a_c_e; │ │ │ │ │ -_5_5 _I_n_d_e_x const * _v_e_r_t_I_n_d_i_c_e_s_P_e_r_F_a_c_e; │ │ │ │ │ -56 │ │ │ │ │ -_5_7 int _n_u_m_C_r_e_a_s_e_s; │ │ │ │ │ -_5_8 _I_n_d_e_x const * _c_r_e_a_s_e_V_e_r_t_e_x_I_n_d_e_x_P_a_i_r_s; │ │ │ │ │ -_5_9 float const * _c_r_e_a_s_e_W_e_i_g_h_t_s; │ │ │ │ │ -60 │ │ │ │ │ -_6_1 int _n_u_m_C_o_r_n_e_r_s; │ │ │ │ │ -_6_2 _I_n_d_e_x const * _c_o_r_n_e_r_V_e_r_t_e_x_I_n_d_i_c_e_s; │ │ │ │ │ -_6_3 float const * _c_o_r_n_e_r_W_e_i_g_h_t_s; │ │ │ │ │ -64 │ │ │ │ │ -_6_5 int _n_u_m_H_o_l_e_s; │ │ │ │ │ -_6_6 _I_n_d_e_x const * _h_o_l_e_I_n_d_i_c_e_s; │ │ │ │ │ -67 │ │ │ │ │ -_6_8 bool _i_s_L_e_f_t_H_a_n_d_e_d; │ │ │ │ │ +40namespace Far { │ │ │ │ │ +41 │ │ │ │ │ +42// Forward declarations for friends: │ │ │ │ │ +43class PatchTableBuilder; │ │ │ │ │ +44 │ │ │ │ │ +45template class StencilTableFactoryReal; │ │ │ │ │ +46template class LimitStencilTableFactoryReal; │ │ │ │ │ +47 │ │ │ │ │ +52template │ │ │ │ │ +_5_3class _S_t_e_n_c_i_l_R_e_a_l { │ │ │ │ │ +54public: │ │ │ │ │ +55 │ │ │ │ │ +_5_7 _S_t_e_n_c_i_l_R_e_a_l() {} │ │ │ │ │ +58 │ │ │ │ │ +_6_7 _S_t_e_n_c_i_l_R_e_a_l(int * size, _I_n_d_e_x * indices, REAL * weights) │ │ │ │ │ +68 : ___s_i_z_e(size), ___i_n_d_i_c_e_s(indices), ___w_e_i_g_h_t_s(weights) { } │ │ │ │ │ 69 │ │ │ │ │ -70 // Face-varying data channel -- value indices correspond to vertex indices, │ │ │ │ │ -71 // i.e. one for every vertex of every face: │ │ │ │ │ -72 // │ │ │ │ │ -_7_3 struct _F_V_a_r_C_h_a_n_n_e_l { │ │ │ │ │ -74 │ │ │ │ │ -_7_5 int _n_u_m_V_a_l_u_e_s; │ │ │ │ │ -_7_6 _I_n_d_e_x const * _v_a_l_u_e_I_n_d_i_c_e_s; │ │ │ │ │ -77 │ │ │ │ │ -_7_8 _F_V_a_r_C_h_a_n_n_e_l() : _n_u_m_V_a_l_u_e_s(0), _v_a_l_u_e_I_n_d_i_c_e_s(0) { } │ │ │ │ │ -79 }; │ │ │ │ │ -80 │ │ │ │ │ -_8_1 int _n_u_m_F_V_a_r_C_h_a_n_n_e_l_s; │ │ │ │ │ -_8_2 _F_V_a_r_C_h_a_n_n_e_l const * _f_v_a_r_C_h_a_n_n_e_l_s; │ │ │ │ │ -83 │ │ │ │ │ -_8_4 _T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r(); │ │ │ │ │ -85}; │ │ │ │ │ +_7_1 _S_t_e_n_c_i_l_R_e_a_l(_S_t_e_n_c_i_l_R_e_a_l const & other) { │ │ │ │ │ +72 ___s_i_z_e = other.___s_i_z_e; │ │ │ │ │ +73 ___i_n_d_i_c_e_s = other.___i_n_d_i_c_e_s; │ │ │ │ │ +74 ___w_e_i_g_h_t_s = other.___w_e_i_g_h_t_s; │ │ │ │ │ +75 } │ │ │ │ │ +76 │ │ │ │ │ +_7_8 int _G_e_t_S_i_z_e() const { │ │ │ │ │ +79 return *___s_i_z_e; │ │ │ │ │ +80 } │ │ │ │ │ +81 │ │ │ │ │ +_8_3 int * _G_e_t_S_i_z_e_P_t_r() const { │ │ │ │ │ +84 return ___s_i_z_e; │ │ │ │ │ +85 } │ │ │ │ │ 86 │ │ │ │ │ -87 │ │ │ │ │ -88// │ │ │ │ │ -89// Forward declarations of required │ │ │ │ │ -TopologyRefinerFactory │ │ │ │ │ -90// specializations (defined internally): │ │ │ │ │ -91// │ │ │ │ │ -92// @cond EXCLUDE_DOXYGEN │ │ │ │ │ -93 │ │ │ │ │ -94template <> │ │ │ │ │ -95bool │ │ │ │ │ -96_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_<_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_>_:_:_r_e_s_i_z_e_C_o_m_p_o_n_e_n_t_T_o_p_o_l_o_g_y( │ │ │ │ │ -97 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r & refiner, _T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r const & desc); │ │ │ │ │ -98 │ │ │ │ │ -99template <> │ │ │ │ │ -100bool │ │ │ │ │ -101_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_<_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_>_:_:_a_s_s_i_g_n_C_o_m_p_o_n_e_n_t_T_o_p_o_l_o_g_y( │ │ │ │ │ -102 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r & refiner, _T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r const & desc); │ │ │ │ │ -103 │ │ │ │ │ -104template <> │ │ │ │ │ -105bool │ │ │ │ │ -106_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_<_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_>_:_:_a_s_s_i_g_n_C_o_m_p_o_n_e_n_t_T_a_g_s( │ │ │ │ │ -107 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r & refiner, _T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r const & desc); │ │ │ │ │ +_8_8 _I_n_d_e_x const * _G_e_t_V_e_r_t_e_x_I_n_d_i_c_e_s() const { │ │ │ │ │ +89 return ___i_n_d_i_c_e_s; │ │ │ │ │ +90 } │ │ │ │ │ +91 │ │ │ │ │ +_9_3 REAL const * _G_e_t_W_e_i_g_h_t_s() const { │ │ │ │ │ +94 return ___w_e_i_g_h_t_s; │ │ │ │ │ +95 } │ │ │ │ │ +96 │ │ │ │ │ +_9_8 void _N_e_x_t() { │ │ │ │ │ +99 int stride = *___s_i_z_e; │ │ │ │ │ +100 ++___s_i_z_e; │ │ │ │ │ +101 ___i_n_d_i_c_e_s += stride; │ │ │ │ │ +102 ___w_e_i_g_h_t_s += stride; │ │ │ │ │ +103 } │ │ │ │ │ +104 │ │ │ │ │ +105protected: │ │ │ │ │ +106 friend class _S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l; │ │ │ │ │ +107 friend class _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l; │ │ │ │ │ 108 │ │ │ │ │ -109template <> │ │ │ │ │ -110bool │ │ │ │ │ -111_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_<_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_>_:_:_a_s_s_i_g_n_F_a_c_e_V_a_r_y_i_n_g_T_o_p_o_l_o_g_y( │ │ │ │ │ -112 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r & refiner, _T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r const & desc); │ │ │ │ │ +_1_0_9 int * ___s_i_z_e; │ │ │ │ │ +_1_1_0 _I_n_d_e_x * ___i_n_d_i_c_e_s; │ │ │ │ │ +_1_1_1 REAL * ___w_e_i_g_h_t_s; │ │ │ │ │ +112}; │ │ │ │ │ 113 │ │ │ │ │ -114template <> │ │ │ │ │ -115void │ │ │ │ │ -116_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_<_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_>_:_:_r_e_p_o_r_t_I_n_v_a_l_i_d_T_o_p_o_l_o_g_y( │ │ │ │ │ -117 TopologyError errCode, char const * msg, _T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r const & desc); │ │ │ │ │ -118 │ │ │ │ │ -119// @endcond │ │ │ │ │ -120 │ │ │ │ │ -121} // end namespace Far │ │ │ │ │ -122 │ │ │ │ │ -123} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ -124using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -125} // end namespace OpenSubdiv │ │ │ │ │ +_1_1_6class _S_t_e_n_c_i_l : public _S_t_e_n_c_i_l_R_e_a_l { │ │ │ │ │ +117protected: │ │ │ │ │ +_1_1_8 typedef _S_t_e_n_c_i_l_R_e_a_l_<_f_l_o_a_t_> _B_a_s_e_S_t_e_n_c_i_l; │ │ │ │ │ +119 │ │ │ │ │ +120public: │ │ │ │ │ +_1_2_1 _S_t_e_n_c_i_l() : _B_a_s_e_S_t_e_n_c_i_l() { } │ │ │ │ │ +_1_2_2 _S_t_e_n_c_i_l(_B_a_s_e_S_t_e_n_c_i_l const & other) : _B_a_s_e_S_t_e_n_c_i_l(other) { } │ │ │ │ │ +_1_2_3 _S_t_e_n_c_i_l(int * size, _I_n_d_e_x * indices, float * weights) │ │ │ │ │ +124 : _B_a_s_e_S_t_e_n_c_i_l(size, indices, weights) { } │ │ │ │ │ +125}; │ │ │ │ │ 126 │ │ │ │ │ -127#endif /* OPENSUBDIV3_FAR_TOPOLOGY_DESCRIPTOR_H */ │ │ │ │ │ +127 │ │ │ │ │ +140template │ │ │ │ │ +_1_4_1class _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l { │ │ │ │ │ +142protected: │ │ │ │ │ +_1_4_3 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l(int numControlVerts, │ │ │ │ │ +144 std::vector const& offsets, │ │ │ │ │ +145 std::vector const& sizes, │ │ │ │ │ +146 std::vector const& sources, │ │ │ │ │ +147 std::vector const& weights, │ │ │ │ │ +148 bool includeCoarseVerts, │ │ │ │ │ +149 size_t firstOffset); │ │ │ │ │ +150 │ │ │ │ │ +151public: │ │ │ │ │ +152 │ │ │ │ │ +_1_5_3 virtual _~_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l() {}; │ │ │ │ │ +154 │ │ │ │ │ +_1_5_6 int _G_e_t_N_u_m_S_t_e_n_c_i_l_s() const { │ │ │ │ │ +157 return (int)___s_i_z_e_s.size(); │ │ │ │ │ +158 } │ │ │ │ │ +159 │ │ │ │ │ +_1_6_1 int _G_e_t_N_u_m_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s() const { │ │ │ │ │ +162 return ___n_u_m_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s; │ │ │ │ │ +163 } │ │ │ │ │ +164 │ │ │ │ │ +_1_6_6 _S_t_e_n_c_i_l_R_e_a_l_<_R_E_A_L_> _G_e_t_S_t_e_n_c_i_l(_I_n_d_e_x i) const; │ │ │ │ │ +167 │ │ │ │ │ +_1_6_9 std::vector const & _G_e_t_S_i_z_e_s() const { │ │ │ │ │ +170 return ___s_i_z_e_s; │ │ │ │ │ +171 } │ │ │ │ │ +172 │ │ │ │ │ +_1_7_4 std::vector const & _G_e_t_O_f_f_s_e_t_s() const { │ │ │ │ │ +175 return ___o_f_f_s_e_t_s; │ │ │ │ │ +176 } │ │ │ │ │ +177 │ │ │ │ │ +_1_7_9 std::vector const & _G_e_t_C_o_n_t_r_o_l_I_n_d_i_c_e_s() const { │ │ │ │ │ +180 return ___i_n_d_i_c_e_s; │ │ │ │ │ +181 } │ │ │ │ │ +182 │ │ │ │ │ +_1_8_4 std::vector const & _G_e_t_W_e_i_g_h_t_s() const { │ │ │ │ │ +185 return ___w_e_i_g_h_t_s; │ │ │ │ │ +186 } │ │ │ │ │ +187 │ │ │ │ │ +_1_8_9 _S_t_e_n_c_i_l_R_e_a_l_<_R_E_A_L_> _o_p_e_r_a_t_o_r_[_]_ (_I_n_d_e_x index) const; │ │ │ │ │ +190 │ │ │ │ │ +204 template │ │ │ │ │ +_2_0_5 void _U_p_d_a_t_e_V_a_l_u_e_s(T const &srcValues, U &dstValues, _I_n_d_e_x start=-1, _I_n_d_e_x │ │ │ │ │ +end=-1) const { │ │ │ │ │ +206 this->_u_p_d_a_t_e(srcValues, dstValues, ___w_e_i_g_h_t_s, start, end); │ │ │ │ │ +207 } │ │ │ │ │ +208 │ │ │ │ │ +209 template │ │ │ │ │ +_2_1_0 void _U_p_d_a_t_e_V_a_l_u_e_s(T1 const &srcBase, int numBase, T2 const &srcRef, │ │ │ │ │ +211 U &dstValues, _I_n_d_e_x start=-1, _I_n_d_e_x end=-1) const { │ │ │ │ │ +212 this->_u_p_d_a_t_e(srcBase, numBase, srcRef, dstValues, ___w_e_i_g_h_t_s, start, end); │ │ │ │ │ +213 } │ │ │ │ │ +214 │ │ │ │ │ +215 // Pointer interface for backward compatibility │ │ │ │ │ +216 template │ │ │ │ │ +_2_1_7 void _U_p_d_a_t_e_V_a_l_u_e_s(T const *src, U *dst, _I_n_d_e_x start=-1, _I_n_d_e_x end=-1) const │ │ │ │ │ +{ │ │ │ │ │ +218 this->_u_p_d_a_t_e(src, dst, ___w_e_i_g_h_t_s, start, end); │ │ │ │ │ +219 } │ │ │ │ │ +220 template │ │ │ │ │ +_2_2_1 void _U_p_d_a_t_e_V_a_l_u_e_s(T1 const *srcBase, int numBase, T2 const *srcRef, │ │ │ │ │ +222 U *dst, _I_n_d_e_x start=-1, _I_n_d_e_x end=-1) const { │ │ │ │ │ +223 this->_u_p_d_a_t_e(srcBase, numBase, srcRef, dst, ___w_e_i_g_h_t_s, start, end); │ │ │ │ │ +224 } │ │ │ │ │ +225 │ │ │ │ │ +_2_2_7 void _C_l_e_a_r(); │ │ │ │ │ +228 │ │ │ │ │ +229protected: │ │ │ │ │ +230 │ │ │ │ │ +231 // Update values by applying cached stencil weights to new control values │ │ │ │ │ +232 template │ │ │ │ │ +_2_3_3 void _u_p_d_a_t_e( T const &srcValues, U &dstValues, │ │ │ │ │ +234 std::vector const & valueWeights, _I_n_d_e_x start, _I_n_d_e_x end) const; │ │ │ │ │ +235 template │ │ │ │ │ +_2_3_6 void _u_p_d_a_t_e( T1 const &srcBase, int numBase, T2 const &srcRef, U │ │ │ │ │ +&dstValues, │ │ │ │ │ +237 std::vector const & valueWeights, _I_n_d_e_x start, _I_n_d_e_x end) const; │ │ │ │ │ +238 │ │ │ │ │ +239 // Populate the offsets table from the stencil sizes in _sizes (factory │ │ │ │ │ +helper) │ │ │ │ │ +_2_4_0 void _g_e_n_e_r_a_t_e_O_f_f_s_e_t_s(); │ │ │ │ │ +241 │ │ │ │ │ +242 // Resize the table arrays (factory helper) │ │ │ │ │ +_2_4_3 void _r_e_s_i_z_e(int nstencils, int nelems); │ │ │ │ │ +244 │ │ │ │ │ +245 // Reserves the table arrays (factory helper) │ │ │ │ │ +_2_4_6 void _r_e_s_e_r_v_e(int nstencils, int nelems); │ │ │ │ │ +247 │ │ │ │ │ +248 // Reallocates the table arrays to remove excess capacity (factory helper) │ │ │ │ │ +_2_4_9 void _s_h_r_i_n_k_T_o_F_i_t(); │ │ │ │ │ +250 │ │ │ │ │ +251 // Performs any final operations on internal tables (factory helper) │ │ │ │ │ +_2_5_2 void _f_i_n_a_l_i_z_e(); │ │ │ │ │ +253 │ │ │ │ │ +254protected: │ │ │ │ │ +_2_5_5 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l() : ___n_u_m_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s(0) {} │ │ │ │ │ +_2_5_6 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l(int numControlVerts) │ │ │ │ │ +257 : ___n_u_m_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s(numControlVerts) │ │ │ │ │ +258 { } │ │ │ │ │ +259 │ │ │ │ │ +260 friend class _S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l; │ │ │ │ │ +_2_6_1 friend class _F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_B_u_i_l_d_e_r; │ │ │ │ │ +262 │ │ │ │ │ +_2_6_3 int ___n_u_m_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s; // number of control vertices │ │ │ │ │ +264 │ │ │ │ │ +_2_6_5 std::vector ___s_i_z_e_s; // number of coefficients for each stencil │ │ │ │ │ +_2_6_6 std::vector ___o_f_f_s_e_t_s, // offset to the start of each stencil │ │ │ │ │ +_2_6_7 ___i_n_d_i_c_e_s; // indices of contributing coarse vertices │ │ │ │ │ +_2_6_8 std::vector ___w_e_i_g_h_t_s; // stencil weight coefficients │ │ │ │ │ +269}; │ │ │ │ │ +270 │ │ │ │ │ +_2_7_3class _S_t_e_n_c_i_l_T_a_b_l_e : public _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l { │ │ │ │ │ +274protected: │ │ │ │ │ +_2_7_5 typedef _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_f_l_o_a_t_> _B_a_s_e_T_a_b_l_e; │ │ │ │ │ +276 │ │ │ │ │ +277public: │ │ │ │ │ +_2_7_8 _S_t_e_n_c_i_l _G_e_t_S_t_e_n_c_i_l(_I_n_d_e_x index) const { │ │ │ │ │ +279 return _S_t_e_n_c_i_l(_B_a_s_e_T_a_b_l_e_:_:_G_e_t_S_t_e_n_c_i_l(index)); │ │ │ │ │ +280 } │ │ │ │ │ +_2_8_1 _S_t_e_n_c_i_l _o_p_e_r_a_t_o_r_[_]_ (_I_n_d_e_x index) const { │ │ │ │ │ +282 return _S_t_e_n_c_i_l(_B_a_s_e_T_a_b_l_e_:_:_G_e_t_S_t_e_n_c_i_l(index)); │ │ │ │ │ +283 } │ │ │ │ │ +284 │ │ │ │ │ +285protected: │ │ │ │ │ +_2_8_6 _S_t_e_n_c_i_l_T_a_b_l_e() : _B_a_s_e_T_a_b_l_e() { } │ │ │ │ │ +_2_8_7 _S_t_e_n_c_i_l_T_a_b_l_e(int numControlVerts) : _B_a_s_e_T_a_b_l_e(numControlVerts) { } │ │ │ │ │ +_2_8_8 _S_t_e_n_c_i_l_T_a_b_l_e(int numControlVerts, │ │ │ │ │ +289 std::vector const& offsets, │ │ │ │ │ +290 std::vector const& sizes, │ │ │ │ │ +291 std::vector const& sources, │ │ │ │ │ +292 std::vector const& weights, │ │ │ │ │ +293 bool includeCoarseVerts, │ │ │ │ │ +294 size_t firstOffset) │ │ │ │ │ +295 : _B_a_s_e_T_a_b_l_e(numControlVerts, offsets, │ │ │ │ │ +296 sizes, sources, weights, includeCoarseVerts, firstOffset) { } │ │ │ │ │ +297}; │ │ │ │ │ +298 │ │ │ │ │ +299 │ │ │ │ │ +302template │ │ │ │ │ +_3_0_3class _L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l : public _S_t_e_n_c_i_l_R_e_a_l { │ │ │ │ │ +304public: │ │ │ │ │ +305 │ │ │ │ │ +_3_2_4 _L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l( int* size, │ │ │ │ │ +325 _I_n_d_e_x * indices, │ │ │ │ │ +326 REAL * weights, │ │ │ │ │ +327 REAL * duWeights=0, │ │ │ │ │ +328 REAL * dvWeights=0, │ │ │ │ │ +329 REAL * duuWeights=0, │ │ │ │ │ +330 REAL * duvWeights=0, │ │ │ │ │ +331 REAL * dvvWeights=0) │ │ │ │ │ +332 : _S_t_e_n_c_i_l_R_e_a_l(size, indices, weights), │ │ │ │ │ +333 _duWeights(duWeights), │ │ │ │ │ +334 _dvWeights(dvWeights), │ │ │ │ │ +335 _duuWeights(duuWeights), │ │ │ │ │ +336 _duvWeights(duvWeights), │ │ │ │ │ +337 _dvvWeights(dvvWeights) { │ │ │ │ │ +338 } │ │ │ │ │ +339 │ │ │ │ │ +_3_4_1 REAL const * _G_e_t_D_u_W_e_i_g_h_t_s() const { │ │ │ │ │ +342 return _duWeights; │ │ │ │ │ +343 } │ │ │ │ │ +344 │ │ │ │ │ +_3_4_6 REAL const * _G_e_t_D_v_W_e_i_g_h_t_s() const { │ │ │ │ │ +347 return _dvWeights; │ │ │ │ │ +348 } │ │ │ │ │ +349 │ │ │ │ │ +_3_5_1 REAL const * _G_e_t_D_u_u_W_e_i_g_h_t_s() const { │ │ │ │ │ +352 return _duuWeights; │ │ │ │ │ +353 } │ │ │ │ │ +354 │ │ │ │ │ +_3_5_6 REAL const * _G_e_t_D_u_v_W_e_i_g_h_t_s() const { │ │ │ │ │ +357 return _duvWeights; │ │ │ │ │ +358 } │ │ │ │ │ +359 │ │ │ │ │ +_3_6_1 REAL const * _G_e_t_D_v_v_W_e_i_g_h_t_s() const { │ │ │ │ │ +362 return _dvvWeights; │ │ │ │ │ +363 } │ │ │ │ │ +364 │ │ │ │ │ +_3_6_6 void _N_e_x_t() { │ │ │ │ │ +367 int stride = *this->___s_i_z_e; │ │ │ │ │ +368 ++this->___s_i_z_e; │ │ │ │ │ +369 this->___i_n_d_i_c_e_s += stride; │ │ │ │ │ +370 this->___w_e_i_g_h_t_s += stride; │ │ │ │ │ +371 if (_duWeights) _duWeights += stride; │ │ │ │ │ +372 if (_dvWeights) _dvWeights += stride; │ │ │ │ │ +373 if (_duuWeights) _duuWeights += stride; │ │ │ │ │ +374 if (_duvWeights) _duvWeights += stride; │ │ │ │ │ +375 if (_dvvWeights) _dvvWeights += stride; │ │ │ │ │ +376 } │ │ │ │ │ +377 │ │ │ │ │ +378private: │ │ │ │ │ +379 │ │ │ │ │ +380 friend class _S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l; │ │ │ │ │ +381 friend class _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l; │ │ │ │ │ +382 │ │ │ │ │ +383 REAL * _duWeights, // pointer to stencil u derivative limit weights │ │ │ │ │ +384 * _dvWeights, // pointer to stencil v derivative limit weights │ │ │ │ │ +385 * _duuWeights, // pointer to stencil uu derivative limit weights │ │ │ │ │ +386 * _duvWeights, // pointer to stencil uv derivative limit weights │ │ │ │ │ +387 * _dvvWeights; // pointer to stencil vv derivative limit weights │ │ │ │ │ +388}; │ │ │ │ │ +389 │ │ │ │ │ +_3_9_2class _L_i_m_i_t_S_t_e_n_c_i_l : public _L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l { │ │ │ │ │ +393protected: │ │ │ │ │ +_3_9_4 typedef _L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_<_f_l_o_a_t_> _B_a_s_e_S_t_e_n_c_i_l; │ │ │ │ │ +395 │ │ │ │ │ +396public: │ │ │ │ │ +_3_9_7 _L_i_m_i_t_S_t_e_n_c_i_l(_B_a_s_e_S_t_e_n_c_i_l const & other) : _B_a_s_e_S_t_e_n_c_i_l(other) { } │ │ │ │ │ +_3_9_8 _L_i_m_i_t_S_t_e_n_c_i_l(int* size, _I_n_d_e_x * indices, float * weights, │ │ │ │ │ +399 float * duWeights=0, float * dvWeights=0, │ │ │ │ │ +400 float * duuWeights=0, float * duvWeights=0, float * dvvWeights=0) │ │ │ │ │ +401 : _B_a_s_e_S_t_e_n_c_i_l(size, indices, weights, │ │ │ │ │ +402 duWeights, dvWeights, duuWeights, duvWeights, dvvWeights) { } │ │ │ │ │ +403}; │ │ │ │ │ +404 │ │ │ │ │ +405 │ │ │ │ │ +408template │ │ │ │ │ +_4_0_9class _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l : public _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l { │ │ │ │ │ +410protected: │ │ │ │ │ +_4_1_1 _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l( │ │ │ │ │ +412 int numControlVerts, │ │ │ │ │ +413 std::vector const& offsets, │ │ │ │ │ +414 std::vector const& sizes, │ │ │ │ │ +415 std::vector const& sources, │ │ │ │ │ +416 std::vector const& weights, │ │ │ │ │ +417 std::vector const& duWeights, │ │ │ │ │ +418 std::vector const& dvWeights, │ │ │ │ │ +419 std::vector const& duuWeights, │ │ │ │ │ +420 std::vector const& duvWeights, │ │ │ │ │ +421 std::vector const& dvvWeights, │ │ │ │ │ +422 bool includeCoarseVerts, │ │ │ │ │ +423 size_t firstOffset); │ │ │ │ │ +424 │ │ │ │ │ +425public: │ │ │ │ │ +426 │ │ │ │ │ +_4_2_8 _L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_<_R_E_A_L_> _G_e_t_L_i_m_i_t_S_t_e_n_c_i_l(_I_n_d_e_x i) const; │ │ │ │ │ +429 │ │ │ │ │ +_4_3_1 _L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_<_R_E_A_L_> _o_p_e_r_a_t_o_r_[_]_ (_I_n_d_e_x index) const; │ │ │ │ │ +432 │ │ │ │ │ +_4_3_4 std::vector const & _G_e_t_D_u_W_e_i_g_h_t_s() const { │ │ │ │ │ +435 return _duWeights; │ │ │ │ │ +436 } │ │ │ │ │ +437 │ │ │ │ │ +_4_3_9 std::vector const & _G_e_t_D_v_W_e_i_g_h_t_s() const { │ │ │ │ │ +440 return _dvWeights; │ │ │ │ │ +441 } │ │ │ │ │ +442 │ │ │ │ │ +_4_4_4 std::vector const & _G_e_t_D_u_u_W_e_i_g_h_t_s() const { │ │ │ │ │ +445 return _duuWeights; │ │ │ │ │ +446 } │ │ │ │ │ +447 │ │ │ │ │ +_4_4_9 std::vector const & _G_e_t_D_u_v_W_e_i_g_h_t_s() const { │ │ │ │ │ +450 return _duvWeights; │ │ │ │ │ +451 } │ │ │ │ │ +452 │ │ │ │ │ +_4_5_4 std::vector const & _G_e_t_D_v_v_W_e_i_g_h_t_s() const { │ │ │ │ │ +455 return _dvvWeights; │ │ │ │ │ +456 } │ │ │ │ │ +457 │ │ │ │ │ +475 template │ │ │ │ │ +_4_7_6 void _U_p_d_a_t_e_D_e_r_i_v_s(T const & srcValues, U & uderivs, U & vderivs, │ │ │ │ │ +477 int start=-1, int end=-1) const { │ │ │ │ │ +478 │ │ │ │ │ +479 this->_u_p_d_a_t_e(srcValues, uderivs, _duWeights, start, end); │ │ │ │ │ +480 this->_u_p_d_a_t_e(srcValues, vderivs, _dvWeights, start, end); │ │ │ │ │ +481 } │ │ │ │ │ +482 │ │ │ │ │ +483 template │ │ │ │ │ +_4_8_4 void _U_p_d_a_t_e_D_e_r_i_v_s(T1 const & srcBase, int numBase, T2 const & srcRef, │ │ │ │ │ +485 U & uderivs, U & vderivs, int start=-1, int end=-1) const { │ │ │ │ │ +486 │ │ │ │ │ +487 this->_u_p_d_a_t_e(srcBase, numBase, srcRef, uderivs, _duWeights, start, end); │ │ │ │ │ +488 this->_u_p_d_a_t_e(srcBase, numBase, srcRef, vderivs, _dvWeights, start, end); │ │ │ │ │ +489 } │ │ │ │ │ +490 │ │ │ │ │ +491 // Pointer interface for backward compatibility │ │ │ │ │ +492 template │ │ │ │ │ +_4_9_3 void _U_p_d_a_t_e_D_e_r_i_v_s(T const *src, U *uderivs, U *vderivs, │ │ │ │ │ +494 int start=-1, int end=-1) const { │ │ │ │ │ +495 │ │ │ │ │ +496 this->_u_p_d_a_t_e(src, uderivs, _duWeights, start, end); │ │ │ │ │ +497 this->_u_p_d_a_t_e(src, vderivs, _dvWeights, start, end); │ │ │ │ │ +498 } │ │ │ │ │ +499 template │ │ │ │ │ +_5_0_0 void _U_p_d_a_t_e_D_e_r_i_v_s(T1 const *srcBase, int numBase, T2 const *srcRef, │ │ │ │ │ +501 U *uderivs, U *vderivs, int start=-1, int end=-1) const { │ │ │ │ │ +502 │ │ │ │ │ +503 this->_u_p_d_a_t_e(srcBase, numBase, srcRef, uderivs, _duWeights, start, end); │ │ │ │ │ +504 this->_u_p_d_a_t_e(srcBase, numBase, srcRef, vderivs, _dvWeights, start, end); │ │ │ │ │ +505 } │ │ │ │ │ +506 │ │ │ │ │ +527 template │ │ │ │ │ +_5_2_8 void _U_p_d_a_t_e_2_n_d_D_e_r_i_v_s(T const & srcValues, │ │ │ │ │ +529 U & uuderivs, U & uvderivs, U & vvderivs, │ │ │ │ │ +530 int start=-1, int end=-1) const { │ │ │ │ │ +531 │ │ │ │ │ +532 this->_u_p_d_a_t_e(srcValues, uuderivs, _duuWeights, start, end); │ │ │ │ │ +533 this->_u_p_d_a_t_e(srcValues, uvderivs, _duvWeights, start, end); │ │ │ │ │ +534 this->_u_p_d_a_t_e(srcValues, vvderivs, _dvvWeights, start, end); │ │ │ │ │ +535 } │ │ │ │ │ +536 │ │ │ │ │ +537 template │ │ │ │ │ +_5_3_8 void _U_p_d_a_t_e_2_n_d_D_e_r_i_v_s(T1 const & srcBase, int numBase, T2 const & srcRef, │ │ │ │ │ +539 U & uuderivs, U & uvderivs, U & vvderivs, int start=-1, int end=-1) const { │ │ │ │ │ +540 │ │ │ │ │ +541 this->_u_p_d_a_t_e(srcBase, numBase, srcRef, uuderivs, _duuWeights, start, end); │ │ │ │ │ +542 this->_u_p_d_a_t_e(srcBase, numBase, srcRef, uvderivs, _duvWeights, start, end); │ │ │ │ │ +543 this->_u_p_d_a_t_e(srcBase, numBase, srcRef, vvderivs, _dvvWeights, start, end); │ │ │ │ │ +544 } │ │ │ │ │ +545 │ │ │ │ │ +546 // Pointer interface for backward compatibility │ │ │ │ │ +547 template │ │ │ │ │ +_5_4_8 void _U_p_d_a_t_e_2_n_d_D_e_r_i_v_s(T const *src, T *uuderivs, U *uvderivs, U *vvderivs, │ │ │ │ │ +549 int start=-1, int end=-1) const { │ │ │ │ │ +550 │ │ │ │ │ +551 this->_u_p_d_a_t_e(src, uuderivs, _duuWeights, start, end); │ │ │ │ │ +552 this->_u_p_d_a_t_e(src, uvderivs, _duvWeights, start, end); │ │ │ │ │ +553 this->_u_p_d_a_t_e(src, vvderivs, _dvvWeights, start, end); │ │ │ │ │ +554 } │ │ │ │ │ +555 template │ │ │ │ │ +_5_5_6 void _U_p_d_a_t_e_2_n_d_D_e_r_i_v_s(T1 const *srcBase, int numBase, T2 const *srcRef, │ │ │ │ │ +557 U *uuderivs, U *uvderivs, U *vvderivs, int start=-1, int end=-1) const { │ │ │ │ │ +558 │ │ │ │ │ +559 this->_u_p_d_a_t_e(srcBase, numBase, srcRef, uuderivs, _duuWeights, start, end); │ │ │ │ │ +560 this->_u_p_d_a_t_e(srcBase, numBase, srcRef, uvderivs, _duvWeights, start, end); │ │ │ │ │ +561 this->_u_p_d_a_t_e(srcBase, numBase, srcRef, vvderivs, _dvvWeights, start, end); │ │ │ │ │ +562 } │ │ │ │ │ +563 │ │ │ │ │ +_5_6_5 void _C_l_e_a_r(); │ │ │ │ │ +566 │ │ │ │ │ +567private: │ │ │ │ │ +568 friend class _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l; │ │ │ │ │ +569 │ │ │ │ │ +570 // Resize the table arrays (factory helper) │ │ │ │ │ +571 void resize(int nstencils, int nelems); │ │ │ │ │ +572 │ │ │ │ │ +573private: │ │ │ │ │ +574 std::vector _duWeights, // u derivative limit stencil weights │ │ │ │ │ +575 _dvWeights, // v derivative limit stencil weights │ │ │ │ │ +576 _duuWeights, // uu derivative limit stencil weights │ │ │ │ │ +577 _duvWeights, // uv derivative limit stencil weights │ │ │ │ │ +578 _dvvWeights; // vv derivative limit stencil weights │ │ │ │ │ +579}; │ │ │ │ │ +580 │ │ │ │ │ +_5_8_3class _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e : public _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l { │ │ │ │ │ +584protected: │ │ │ │ │ +_5_8_5 typedef _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_f_l_o_a_t_> _B_a_s_e_T_a_b_l_e; │ │ │ │ │ +586 │ │ │ │ │ +587public: │ │ │ │ │ +_5_8_8 _L_i_m_i_t_S_t_e_n_c_i_l _G_e_t_L_i_m_i_t_S_t_e_n_c_i_l(_I_n_d_e_x index) const { │ │ │ │ │ +589 return _L_i_m_i_t_S_t_e_n_c_i_l(_B_a_s_e_T_a_b_l_e_:_:_G_e_t_L_i_m_i_t_S_t_e_n_c_i_l(index)); │ │ │ │ │ +590 } │ │ │ │ │ +_5_9_1 _L_i_m_i_t_S_t_e_n_c_i_l _o_p_e_r_a_t_o_r_[_]_ (_I_n_d_e_x index) const { │ │ │ │ │ +592 return _L_i_m_i_t_S_t_e_n_c_i_l(_B_a_s_e_T_a_b_l_e_:_:_G_e_t_L_i_m_i_t_S_t_e_n_c_i_l(index)); │ │ │ │ │ +593 } │ │ │ │ │ +594 │ │ │ │ │ +595protected: │ │ │ │ │ +_5_9_6 _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e(int numControlVerts, │ │ │ │ │ +597 std::vector const& offsets, │ │ │ │ │ +598 std::vector const& sizes, │ │ │ │ │ +599 std::vector const& sources, │ │ │ │ │ +600 std::vector const& weights, │ │ │ │ │ +601 std::vector const& duWeights, │ │ │ │ │ +602 std::vector const& dvWeights, │ │ │ │ │ +603 std::vector const& duuWeights, │ │ │ │ │ +604 std::vector const& duvWeights, │ │ │ │ │ +605 std::vector const& dvvWeights, │ │ │ │ │ +606 bool includeCoarseVerts, │ │ │ │ │ +607 size_t firstOffset) │ │ │ │ │ +608 : _B_a_s_e_T_a_b_l_e(numControlVerts, │ │ │ │ │ +609 offsets, sizes, sources, weights, │ │ │ │ │ +610 duWeights, dvWeights, duuWeights, duvWeights, dvvWeights, │ │ │ │ │ +611 includeCoarseVerts, firstOffset) { } │ │ │ │ │ +612}; │ │ │ │ │ +613 │ │ │ │ │ +614 │ │ │ │ │ +615// Update values by applying cached stencil weights to new control values │ │ │ │ │ +616template │ │ │ │ │ +617template void │ │ │ │ │ +_6_1_8_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_u_p_d_a_t_e(T1 const &srcBase, int numBase, │ │ │ │ │ +619 T2 const &srcRef, U &dstValues, │ │ │ │ │ +620 std::vector const &valueWeights, _I_n_d_e_x start, _I_n_d_e_x end) const { │ │ │ │ │ +621 │ │ │ │ │ +622 int const * sizes = &_sizes.at(0); │ │ │ │ │ +623 _I_n_d_e_x const * indices = &_indices.at(0); │ │ │ │ │ +624 REAL const * weights = &valueWeights.at(0); │ │ │ │ │ +625 │ │ │ │ │ +626 if (start > 0) { │ │ │ │ │ +627 assert(start < (_I_n_d_e_x)_offsets.size()); │ │ │ │ │ +628 sizes += start; │ │ │ │ │ +629 indices += _offsets[start]; │ │ │ │ │ +630 weights += _offsets[start]; │ │ │ │ │ +631 } else { │ │ │ │ │ +632 start = 0; │ │ │ │ │ +633 } │ │ │ │ │ +634 │ │ │ │ │ +635 int nstencils = ((end < start) ? GetNumStencils() : end) - start; │ │ │ │ │ +636 │ │ │ │ │ +637 for (int i = 0; i < nstencils; ++i, ++sizes) { │ │ │ │ │ +638 dstValues[start + i].Clear(); │ │ │ │ │ +639 for (int j = 0; j < *sizes; ++j, ++indices, ++weights) { │ │ │ │ │ +640 if (*indices < numBase) { │ │ │ │ │ +641 dstValues[start + i].AddWithWeight(srcBase[*indices], *weights); │ │ │ │ │ +642 } else { │ │ │ │ │ +643 dstValues[start + i].AddWithWeight(srcRef[*indices - numBase], *weights); │ │ │ │ │ +644 } │ │ │ │ │ +645 } │ │ │ │ │ +646 } │ │ │ │ │ +647} │ │ │ │ │ +648template │ │ │ │ │ +649template void │ │ │ │ │ +_6_5_0_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_u_p_d_a_t_e(T const &srcValues, U &dstValues, │ │ │ │ │ +651 std::vector const &valueWeights, _I_n_d_e_x start, _I_n_d_e_x end) const { │ │ │ │ │ +652 │ │ │ │ │ +653 int const * sizes = &_sizes.at(0); │ │ │ │ │ +654 _I_n_d_e_x const * indices = &_indices.at(0); │ │ │ │ │ +655 REAL const * weights = &valueWeights.at(0); │ │ │ │ │ +656 │ │ │ │ │ +657 if (start > 0) { │ │ │ │ │ +658 assert(start < (_I_n_d_e_x)_offsets.size()); │ │ │ │ │ +659 sizes += start; │ │ │ │ │ +660 indices += _offsets[start]; │ │ │ │ │ +661 weights += _offsets[start]; │ │ │ │ │ +662 } else { │ │ │ │ │ +663 start = 0; │ │ │ │ │ +664 } │ │ │ │ │ +665 │ │ │ │ │ +666 int nstencils = ((end < start) ? GetNumStencils() : end) - start; │ │ │ │ │ +667 │ │ │ │ │ +668 for (int i = 0; i < nstencils; ++i, ++sizes) { │ │ │ │ │ +669 dstValues[start + i].Clear(); │ │ │ │ │ +670 for (int j = 0; j < *sizes; ++j, ++indices, ++weights) { │ │ │ │ │ +671 dstValues[start + i].AddWithWeight(srcValues[*indices], *weights); │ │ │ │ │ +672 } │ │ │ │ │ +673 } │ │ │ │ │ +674} │ │ │ │ │ +675 │ │ │ │ │ +676template │ │ │ │ │ +677inline void │ │ │ │ │ +_6_7_8_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_g_e_n_e_r_a_t_e_O_f_f_s_e_t_s() { │ │ │ │ │ +679 _I_n_d_e_x offset=0; │ │ │ │ │ +680 int noffsets = (int)_sizes.size(); │ │ │ │ │ +681 _offsets.resize(noffsets); │ │ │ │ │ +682 for (int i=0; i<(int)_sizes.size(); ++i ) { │ │ │ │ │ +683 _offsets[i]=offset; │ │ │ │ │ +684 offset+=_sizes[i]; │ │ │ │ │ +685 } │ │ │ │ │ +686} │ │ │ │ │ +687 │ │ │ │ │ +688template │ │ │ │ │ +689inline void │ │ │ │ │ +_6_9_0_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_r_e_s_i_z_e(int nstencils, int nelems) { │ │ │ │ │ +691 _sizes.resize(nstencils); │ │ │ │ │ +692 _indices.resize(nelems); │ │ │ │ │ +693 _weights.resize(nelems); │ │ │ │ │ +694} │ │ │ │ │ +695 │ │ │ │ │ +696template │ │ │ │ │ +697inline void │ │ │ │ │ +_6_9_8_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_r_e_s_e_r_v_e(int nstencils, int nelems) { │ │ │ │ │ +699 _sizes.reserve(nstencils); │ │ │ │ │ +700 _indices.reserve(nelems); │ │ │ │ │ +701 _weights.reserve(nelems); │ │ │ │ │ +702} │ │ │ │ │ +703 │ │ │ │ │ +704template │ │ │ │ │ +705inline void │ │ │ │ │ +_7_0_6_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_s_h_r_i_n_k_T_o_F_i_t() { │ │ │ │ │ +707 std::vector(_sizes).swap(_sizes); │ │ │ │ │ +708 std::vector(_indices).swap(_indices); │ │ │ │ │ +709 std::vector(_weights).swap(_weights); │ │ │ │ │ +710} │ │ │ │ │ +711 │ │ │ │ │ +712template │ │ │ │ │ +713inline void │ │ │ │ │ +_7_1_4_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_f_i_n_a_l_i_z_e() { │ │ │ │ │ +715 shrinkToFit(); │ │ │ │ │ +716 generateOffsets(); │ │ │ │ │ +717} │ │ │ │ │ +718 │ │ │ │ │ +719// Returns a Stencil at index i in the table │ │ │ │ │ +720template │ │ │ │ │ +721inline _S_t_e_n_c_i_l_R_e_a_l_<_R_E_A_L_> │ │ │ │ │ +_7_2_2_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_G_e_t_S_t_e_n_c_i_l(_I_n_d_e_x i) const { │ │ │ │ │ +723 assert((! _offsets.empty()) && i<(int)_offsets.size()); │ │ │ │ │ +724 │ │ │ │ │ +725 _I_n_d_e_x ofs = _offsets[i]; │ │ │ │ │ +726 │ │ │ │ │ +727 return _S_t_e_n_c_i_l_R_e_a_l_<_R_E_A_L_>(const_cast(&_sizes[i]), │ │ │ │ │ +728 const_cast<_I_n_d_e_x*>(&_indices[ofs]), │ │ │ │ │ +729 const_cast(&_weights[ofs])); │ │ │ │ │ +730} │ │ │ │ │ +731 │ │ │ │ │ +732template │ │ │ │ │ +733inline _S_t_e_n_c_i_l_R_e_a_l_<_R_E_A_L_> │ │ │ │ │ +_7_3_4_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_o_p_e_r_a_t_o_r_[_]_ (_I_n_d_e_x index) const { │ │ │ │ │ +735 return GetStencil(index); │ │ │ │ │ +736} │ │ │ │ │ +737 │ │ │ │ │ +738template │ │ │ │ │ +739inline void │ │ │ │ │ +740_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_r_e_s_i_z_e(int nstencils, int nelems) { │ │ │ │ │ +741 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_r_e_s_i_z_e(nstencils, nelems); │ │ │ │ │ +742 _duWeights.resize(nelems); │ │ │ │ │ +743 _dvWeights.resize(nelems); │ │ │ │ │ +744} │ │ │ │ │ +745 │ │ │ │ │ +746// Returns a LimitStencil at index i in the table │ │ │ │ │ +747template │ │ │ │ │ +748inline LimitStencilReal │ │ │ │ │ +_7_4_9_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_G_e_t_L_i_m_i_t_S_t_e_n_c_i_l(_I_n_d_e_x i) const { │ │ │ │ │ +750 assert((! this->GetOffsets().empty()) && i<(int)this->GetOffsets().size()); │ │ │ │ │ +751 │ │ │ │ │ +752 _I_n_d_e_x ofs = this->GetOffsets()[i]; │ │ │ │ │ +753 │ │ │ │ │ +754 if (!_duWeights.empty() && !_dvWeights.empty() && │ │ │ │ │ +755 !_duuWeights.empty() && !_duvWeights.empty() && !_dvvWeights.empty()) { │ │ │ │ │ +756 return _L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_<_R_E_A_L_>( │ │ │ │ │ +757 const_cast(&this->GetSizes()[i]), │ │ │ │ │ +758 const_cast<_I_n_d_e_x *>(&this->GetControlIndices()[ofs]), │ │ │ │ │ +759 const_cast(&this->GetWeights()[ofs]), │ │ │ │ │ +760 const_cast(&GetDuWeights()[ofs]), │ │ │ │ │ +761 const_cast(&GetDvWeights()[ofs]), │ │ │ │ │ +762 const_cast(&GetDuuWeights()[ofs]), │ │ │ │ │ +763 const_cast(&GetDuvWeights()[ofs]), │ │ │ │ │ +764 const_cast(&GetDvvWeights()[ofs]) ); │ │ │ │ │ +765 } else if (!_duWeights.empty() && !_dvWeights.empty()) { │ │ │ │ │ +766 return _L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_<_R_E_A_L_>( │ │ │ │ │ +767 const_cast(&this->GetSizes()[i]), │ │ │ │ │ +768 const_cast<_I_n_d_e_x *>(&this->GetControlIndices()[ofs]), │ │ │ │ │ +769 const_cast(&this->GetWeights()[ofs]), │ │ │ │ │ +770 const_cast(&GetDuWeights()[ofs]), │ │ │ │ │ +771 const_cast(&GetDvWeights()[ofs]) ); │ │ │ │ │ +772 } else { │ │ │ │ │ +773 return _L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_<_R_E_A_L_>( │ │ │ │ │ +774 const_cast(&this->GetSizes()[i]), │ │ │ │ │ +775 const_cast<_I_n_d_e_x *>(&this->GetControlIndices()[ofs]), │ │ │ │ │ +776 const_cast(&this->GetWeights()[ofs]) ); │ │ │ │ │ +777 } │ │ │ │ │ +778} │ │ │ │ │ +779 │ │ │ │ │ +780template │ │ │ │ │ +781inline _L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_<_R_E_A_L_> │ │ │ │ │ +_7_8_2_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_o_p_e_r_a_t_o_r_[_]_ (_I_n_d_e_x index) const { │ │ │ │ │ +783 return GetLimitStencil(index); │ │ │ │ │ +784} │ │ │ │ │ +785 │ │ │ │ │ +786} // end namespace Far │ │ │ │ │ +787 │ │ │ │ │ +788} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ +789using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +790 │ │ │ │ │ +791} // end namespace OpenSubdiv │ │ │ │ │ +792 │ │ │ │ │ +793#endif // OPENSUBDIV3_FAR_STENCILTABLE_H │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_I_n_d_e_x │ │ │ │ │ Vtr::Index Index │ │ │ │ │ DDeeffiinniittiioonn _t_y_p_e_s_._h_:_4_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ -A simple reference to raw topology data for use with TopologyRefinerFactory. │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_4_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_f_v_a_r_C_h_a_n_n_e_l_s │ │ │ │ │ -FVarChannel const * fvarChannels │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_8_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_n_u_m_V_e_r_t_i_c_e_s │ │ │ │ │ -int numVertices │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_5_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_c_o_r_n_e_r_V_e_r_t_e_x_I_n_d_i_c_e_s │ │ │ │ │ -Index const * cornerVertexIndices │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_6_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_v_e_r_t_I_n_d_i_c_e_s_P_e_r_F_a_c_e │ │ │ │ │ -Index const * vertIndicesPerFace │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_5_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_c_r_e_a_s_e_V_e_r_t_e_x_I_n_d_e_x_P_a_i_r_s │ │ │ │ │ -Index const * creaseVertexIndexPairs │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_5_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_h_o_l_e_I_n_d_i_c_e_s │ │ │ │ │ -Index const * holeIndices │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_6_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_n_u_m_F_a_c_e_s │ │ │ │ │ -int numFaces │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_5_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_n_u_m_C_o_r_n_e_r_s │ │ │ │ │ -int numCorners │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_6_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_c_o_r_n_e_r_W_e_i_g_h_t_s │ │ │ │ │ -float const * cornerWeights │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_6_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_i_s_L_e_f_t_H_a_n_d_e_d │ │ │ │ │ -bool isLeftHanded │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_6_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_n_u_m_V_e_r_t_s_P_e_r_F_a_c_e │ │ │ │ │ -int const * numVertsPerFace │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_5_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ -TopologyDescriptor() │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_c_r_e_a_s_e_W_e_i_g_h_t_s │ │ │ │ │ -float const * creaseWeights │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_5_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_n_u_m_C_r_e_a_s_e_s │ │ │ │ │ -int numCreases │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_5_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_n_u_m_H_o_l_e_s │ │ │ │ │ -int numHoles │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_6_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_n_u_m_F_V_a_r_C_h_a_n_n_e_l_s │ │ │ │ │ -int numFVarChannels │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_8_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_F_V_a_r_C_h_a_n_n_e_l │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_7_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_F_V_a_r_C_h_a_n_n_e_l_:_: │ │ │ │ │ -_F_V_a_r_C_h_a_n_n_e_l │ │ │ │ │ -FVarChannel() │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_7_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_F_V_a_r_C_h_a_n_n_e_l_:_: │ │ │ │ │ -_v_a_l_u_e_I_n_d_i_c_e_s │ │ │ │ │ -Index const * valueIndices │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_7_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_:_:_F_V_a_r_C_h_a_n_n_e_l_:_:_n_u_m_V_a_l_u_e_s │ │ │ │ │ -int numValues │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h_:_7_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_:_: │ │ │ │ │ -_a_s_s_i_g_n_C_o_m_p_o_n_e_n_t_T_o_p_o_l_o_g_y │ │ │ │ │ -static bool assignComponentTopology(TopologyRefiner &newRefiner, MESH const │ │ │ │ │ -&mesh) │ │ │ │ │ -Specify the relationships between vertices, faces, etc. ie the face-vertices, │ │ │ │ │ -vertex-faces,... │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_._h_:_6_2_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_:_: │ │ │ │ │ -_r_e_p_o_r_t_I_n_v_a_l_i_d_T_o_p_o_l_o_g_y │ │ │ │ │ -static void reportInvalidTopology(TopologyError errCode, char const *msg, MESH │ │ │ │ │ -const &mesh) │ │ │ │ │ -(Optional) Control run-time topology validation and error reporting │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_._h_:_7_0_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_:_: │ │ │ │ │ -_a_s_s_i_g_n_C_o_m_p_o_n_e_n_t_T_a_g_s │ │ │ │ │ -static bool assignComponentTags(TopologyRefiner &newRefiner, MESH const &mesh) │ │ │ │ │ -(Optional) Specify edge or vertex sharpness or face holes │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_._h_:_6_9_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_:_: │ │ │ │ │ -_r_e_s_i_z_e_C_o_m_p_o_n_e_n_t_T_o_p_o_l_o_g_y │ │ │ │ │ -static bool resizeComponentTopology(TopologyRefiner &newRefiner, MESH const │ │ │ │ │ -&mesh) │ │ │ │ │ -Specify the number of vertices, faces, face-vertices, etc. │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_._h_:_5_8_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_:_: │ │ │ │ │ -_a_s_s_i_g_n_F_a_c_e_V_a_r_y_i_n_g_T_o_p_o_l_o_g_y │ │ │ │ │ -static bool assignFaceVaryingTopology(TopologyRefiner &newRefiner, MESH const │ │ │ │ │ -&mesh) │ │ │ │ │ -(Optional) Specify face-varying data per face │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_F_a_c_t_o_r_y_._h_:_6_7_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r │ │ │ │ │ -Stores topology data for a specified set of refinement options. │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_._h_:_5_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l │ │ │ │ │ +A specialized factory for StencilTable. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_5_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l │ │ │ │ │ +A specialized factory for LimitStencilTable. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_0_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l │ │ │ │ │ +Vertex stencil descriptor. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l_:_:_S_t_e_n_c_i_l_R_e_a_l │ │ │ │ │ +StencilReal() │ │ │ │ │ +Default constructor. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l_:_:___s_i_z_e │ │ │ │ │ +int * _size │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_0_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l_:_:_S_t_e_n_c_i_l_R_e_a_l │ │ │ │ │ +StencilReal(int *size, Index *indices, REAL *weights) │ │ │ │ │ +Constructor. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_6_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l_:_:_N_e_x_t │ │ │ │ │ +void Next() │ │ │ │ │ +Advance to the next stencil in the table. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_9_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l_:_:_S_t_e_n_c_i_l_R_e_a_l │ │ │ │ │ +StencilReal(StencilReal const &other) │ │ │ │ │ +Copy constructor. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_7_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l_:_:___i_n_d_i_c_e_s │ │ │ │ │ +Index * _indices │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_1_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l_:_:_G_e_t_V_e_r_t_e_x_I_n_d_i_c_e_s │ │ │ │ │ +Index const * GetVertexIndices() const │ │ │ │ │ +Returns the control vertices' indices. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_8_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l_:_:_G_e_t_S_i_z_e │ │ │ │ │ +int GetSize() const │ │ │ │ │ +Returns the size of the stencil. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_7_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l_:_:___w_e_i_g_h_t_s │ │ │ │ │ +REAL * _weights │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_1_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l_:_:_G_e_t_S_i_z_e_P_t_r │ │ │ │ │ +int * GetSizePtr() const │ │ │ │ │ +Returns the size of the stencil as a pointer. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_8_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l_:_:_G_e_t_W_e_i_g_h_t_s │ │ │ │ │ +REAL const * GetWeights() const │ │ │ │ │ +Returns the interpolation weights. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_9_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l │ │ │ │ │ +Vertex stencil class wrapping the template for compatibility. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_1_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_:_:_S_t_e_n_c_i_l │ │ │ │ │ +Stencil(BaseStencil const &other) │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_2_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_:_:_S_t_e_n_c_i_l │ │ │ │ │ +Stencil(int *size, Index *indices, float *weights) │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_2_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_:_:_B_a_s_e_S_t_e_n_c_i_l │ │ │ │ │ +StencilReal< float > BaseStencil │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_1_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_:_:_S_t_e_n_c_i_l │ │ │ │ │ +Stencil() │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_2_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l │ │ │ │ │ +Table of subdivision stencils. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_4_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_N_u_m_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s │ │ │ │ │ +int GetNumControlVertices() const │ │ │ │ │ +Returns the number of control vertices indexed in the table. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_6_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:___s_i_z_e_s │ │ │ │ │ +std::vector< int > _sizes │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_6_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_P_a_t_c_h_T_a_b_l_e_B_u_i_l_d_e_r │ │ │ │ │ +friend class Far::PatchTableBuilder │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_6_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_u_p_d_a_t_e │ │ │ │ │ +void update(T1 const &srcBase, int numBase, T2 const &srcRef, U &dstValues, │ │ │ │ │ +std::vector< REAL > const &valueWeights, Index start, Index end) const │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_6_1_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_U_p_d_a_t_e_V_a_l_u_e_s │ │ │ │ │ +void UpdateValues(T1 const &srcBase, int numBase, T2 const &srcRef, U │ │ │ │ │ +&dstValues, Index start=-1, Index end=-1) const │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_1_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_C_o_n_t_r_o_l_I_n_d_i_c_e_s │ │ │ │ │ +std::vector< Index > const & GetControlIndices() const │ │ │ │ │ +Returns the indices of the control vertices. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_7_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_f_i_n_a_l_i_z_e │ │ │ │ │ +void finalize() │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_7_1_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ │ +StencilReal< REAL > operator[](Index index) const │ │ │ │ │ +Returns the stencil at index i in the table. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_7_3_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:___n_u_m_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s │ │ │ │ │ +int _numControlVertices │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_6_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_u_p_d_a_t_e │ │ │ │ │ +void update(T const &srcValues, U &dstValues, std::vector< REAL > const │ │ │ │ │ +&valueWeights, Index start, Index end) const │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_6_5_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_S_i_z_e_s │ │ │ │ │ +std::vector< int > const & GetSizes() const │ │ │ │ │ +Returns the number of control vertices of each stencil in the table. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_6_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_N_u_m_S_t_e_n_c_i_l_s │ │ │ │ │ +int GetNumStencils() const │ │ │ │ │ +Returns the number of stencils in the table. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_5_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_~_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l │ │ │ │ │ +virtual ~StencilTableReal() │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_5_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_O_f_f_s_e_t_s │ │ │ │ │ +std::vector< Index > const & GetOffsets() const │ │ │ │ │ +Returns the offset to a given stencil (factory may leave empty) │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_7_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_S_t_e_n_c_i_l │ │ │ │ │ +StencilReal< REAL > GetStencil(Index i) const │ │ │ │ │ +Returns a Stencil at index i in the table. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_7_2_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_s_h_r_i_n_k_T_o_F_i_t │ │ │ │ │ +void shrinkToFit() │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_7_0_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_g_e_n_e_r_a_t_e_O_f_f_s_e_t_s │ │ │ │ │ +void generateOffsets() │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_6_7_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_C_l_e_a_r │ │ │ │ │ +void Clear() │ │ │ │ │ +Clears the stencils from the table. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:___o_f_f_s_e_t_s │ │ │ │ │ +std::vector< Index > _offsets │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_6_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:___w_e_i_g_h_t_s │ │ │ │ │ +std::vector< REAL > _weights │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_6_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_r_e_s_i_z_e │ │ │ │ │ +void resize(int nstencils, int nelems) │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_6_9_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_W_e_i_g_h_t_s │ │ │ │ │ +std::vector< REAL > const & GetWeights() const │ │ │ │ │ +Returns the stencil interpolation weights. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_8_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_U_p_d_a_t_e_V_a_l_u_e_s │ │ │ │ │ +void UpdateValues(T1 const *srcBase, int numBase, T2 const *srcRef, U *dst, │ │ │ │ │ +Index start=-1, Index end=-1) const │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_2_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l │ │ │ │ │ +StencilTableReal(int numControlVerts, std::vector< int > const &offsets, std:: │ │ │ │ │ +vector< int > const &sizes, std::vector< int > const &sources, std::vector< │ │ │ │ │ +REAL > const &weights, bool includeCoarseVerts, size_t firstOffset) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:___i_n_d_i_c_e_s │ │ │ │ │ +std::vector< Index > _indices │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_6_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l │ │ │ │ │ +StencilTableReal() │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_5_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_r_e_s_e_r_v_e │ │ │ │ │ +void reserve(int nstencils, int nelems) │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_6_9_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_U_p_d_a_t_e_V_a_l_u_e_s │ │ │ │ │ +void UpdateValues(T const *src, U *dst, Index start=-1, Index end=-1) const │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_1_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_U_p_d_a_t_e_V_a_l_u_e_s │ │ │ │ │ +void UpdateValues(T const &srcValues, U &dstValues, Index start=-1, Index end=- │ │ │ │ │ +1) const │ │ │ │ │ +Updates point values based on the control values. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_0_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +Stencil table class wrapping the template for compatibility. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_7_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_:_:_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +StencilTable(int numControlVerts, std::vector< int > const &offsets, std:: │ │ │ │ │ +vector< int > const &sizes, std::vector< int > const &sources, std::vector< │ │ │ │ │ +float > const &weights, bool includeCoarseVerts, size_t firstOffset) │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_8_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_:_:_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +StencilTable(int numControlVerts) │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_8_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_:_:_B_a_s_e_T_a_b_l_e │ │ │ │ │ +StencilTableReal< float > BaseTable │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_7_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_S_t_e_n_c_i_l │ │ │ │ │ +Stencil GetStencil(Index index) const │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_7_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ │ +Stencil operator[](Index index) const │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_8_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_:_:_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +StencilTable() │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_8_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l │ │ │ │ │ +Limit point stencil descriptor. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_3_0_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_:_:_G_e_t_D_u_v_W_e_i_g_h_t_s │ │ │ │ │ +REAL const * GetDuvWeights() const │ │ │ │ │ +Returns the uv derivative weights. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_3_5_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_:_:_G_e_t_D_v_W_e_i_g_h_t_s │ │ │ │ │ +REAL const * GetDvWeights() const │ │ │ │ │ +Returns the v derivative weights. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_3_4_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_:_:_N_e_x_t │ │ │ │ │ +void Next() │ │ │ │ │ +Advance to the next stencil in the table. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_3_6_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_:_:_G_e_t_D_v_v_W_e_i_g_h_t_s │ │ │ │ │ +REAL const * GetDvvWeights() const │ │ │ │ │ +Returns the vv derivative weights. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_3_6_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_:_:_L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l │ │ │ │ │ +LimitStencilReal(int *size, Index *indices, REAL *weights, REAL *duWeights=0, │ │ │ │ │ +REAL *dvWeights=0, REAL *duuWeights=0, REAL *duvWeights=0, REAL *dvvWeights=0) │ │ │ │ │ +Constructor. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_3_2_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_:_:_G_e_t_D_u_W_e_i_g_h_t_s │ │ │ │ │ +REAL const * GetDuWeights() const │ │ │ │ │ +Returns the u derivative weights. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_3_4_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_:_:_G_e_t_D_u_u_W_e_i_g_h_t_s │ │ │ │ │ +REAL const * GetDuuWeights() const │ │ │ │ │ +Returns the uu derivative weights. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_3_5_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l │ │ │ │ │ +Limit point stencil class wrapping the template for compatibility. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_3_9_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_:_:_L_i_m_i_t_S_t_e_n_c_i_l │ │ │ │ │ +LimitStencil(BaseStencil const &other) │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_3_9_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_:_:_B_a_s_e_S_t_e_n_c_i_l │ │ │ │ │ +LimitStencilReal< float > BaseStencil │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_3_9_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_:_:_L_i_m_i_t_S_t_e_n_c_i_l │ │ │ │ │ +LimitStencil(int *size, Index *indices, float *weights, float *duWeights=0, │ │ │ │ │ +float *dvWeights=0, float *duuWeights=0, float *duvWeights=0, float │ │ │ │ │ +*dvvWeights=0) │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_3_9_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l │ │ │ │ │ +Table of limit subdivision stencils. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_4_0_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_D_u_u_W_e_i_g_h_t_s │ │ │ │ │ +std::vector< REAL > const & GetDuuWeights() const │ │ │ │ │ +Returns the 'uu' derivative stencil interpolation weights. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_4_4_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ │ +LimitStencilReal< REAL > operator[](Index index) const │ │ │ │ │ +Returns the limit stencil at index i in the table. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_7_8_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_D_v_v_W_e_i_g_h_t_s │ │ │ │ │ +std::vector< REAL > const & GetDvvWeights() const │ │ │ │ │ +Returns the 'vv' derivative stencil interpolation weights. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_4_5_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_U_p_d_a_t_e_D_e_r_i_v_s │ │ │ │ │ +void UpdateDerivs(T const *src, U *uderivs, U *vderivs, int start=-1, int end=- │ │ │ │ │ +1) const │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_4_9_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_U_p_d_a_t_e_2_n_d_D_e_r_i_v_s │ │ │ │ │ +void Update2ndDerivs(T const *src, T *uuderivs, U *uvderivs, U *vvderivs, int │ │ │ │ │ +start=-1, int end=-1) const │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_4_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_D_v_W_e_i_g_h_t_s │ │ │ │ │ +std::vector< REAL > const & GetDvWeights() const │ │ │ │ │ +Returns the 'v' derivative stencil interpolation weights. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_4_3_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_U_p_d_a_t_e_2_n_d_D_e_r_i_v_s │ │ │ │ │ +void Update2ndDerivs(T1 const *srcBase, int numBase, T2 const *srcRef, U │ │ │ │ │ +*uuderivs, U *uvderivs, U *vvderivs, int start=-1, int end=-1) const │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_5_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_U_p_d_a_t_e_D_e_r_i_v_s │ │ │ │ │ +void UpdateDerivs(T const &srcValues, U &uderivs, U &vderivs, int start=-1, int │ │ │ │ │ +end=-1) const │ │ │ │ │ +Updates derivative values based on the control values. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_4_7_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_L_i_m_i_t_S_t_e_n_c_i_l │ │ │ │ │ +LimitStencilReal< REAL > GetLimitStencil(Index i) const │ │ │ │ │ +Returns a LimitStencil at index i in the table. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_7_4_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_: │ │ │ │ │ +_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l │ │ │ │ │ +LimitStencilTableReal(int numControlVerts, std::vector< int > const &offsets, │ │ │ │ │ +std::vector< int > const &sizes, std::vector< int > const &sources, std:: │ │ │ │ │ +vector< REAL > const &weights, std::vector< REAL > const &duWeights, std:: │ │ │ │ │ +vector< REAL > const &dvWeights, std::vector< REAL > const &duuWeights, std:: │ │ │ │ │ +vector< REAL > const &duvWeights, std::vector< REAL > const &dvvWeights, bool │ │ │ │ │ +includeCoarseVerts, size_t firstOffset) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_U_p_d_a_t_e_2_n_d_D_e_r_i_v_s │ │ │ │ │ +void Update2ndDerivs(T const &srcValues, U &uuderivs, U &uvderivs, U &vvderivs, │ │ │ │ │ +int start=-1, int end=-1) const │ │ │ │ │ +Updates 2nd derivative values based on the control values. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_2_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_D_u_W_e_i_g_h_t_s │ │ │ │ │ +std::vector< REAL > const & GetDuWeights() const │ │ │ │ │ +Returns the 'u' derivative stencil interpolation weights. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_4_3_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_C_l_e_a_r │ │ │ │ │ +void Clear() │ │ │ │ │ +Clears the stencils from the table. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_U_p_d_a_t_e_2_n_d_D_e_r_i_v_s │ │ │ │ │ +void Update2ndDerivs(T1 const &srcBase, int numBase, T2 const &srcRef, U │ │ │ │ │ +&uuderivs, U &uvderivs, U &vvderivs, int start=-1, int end=-1) const │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_3_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_D_u_v_W_e_i_g_h_t_s │ │ │ │ │ +std::vector< REAL > const & GetDuvWeights() const │ │ │ │ │ +Returns the 'uv' derivative stencil interpolation weights. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_4_4_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_U_p_d_a_t_e_D_e_r_i_v_s │ │ │ │ │ +void UpdateDerivs(T1 const &srcBase, int numBase, T2 const &srcRef, U &uderivs, │ │ │ │ │ +U &vderivs, int start=-1, int end=-1) const │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_4_8_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_U_p_d_a_t_e_D_e_r_i_v_s │ │ │ │ │ +void UpdateDerivs(T1 const *srcBase, int numBase, T2 const *srcRef, U *uderivs, │ │ │ │ │ +U *vderivs, int start=-1, int end=-1) const │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_0_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +Limit stencil table class wrapping the template for compatibility. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_8_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_:_:_B_a_s_e_T_a_b_l_e │ │ │ │ │ +LimitStencilTableReal< float > BaseTable │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_8_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_L_i_m_i_t_S_t_e_n_c_i_l │ │ │ │ │ +LimitStencil GetLimitStencil(Index index) const │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_8_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +LimitStencilTable(int numControlVerts, std::vector< int > const &offsets, std:: │ │ │ │ │ +vector< int > const &sizes, std::vector< int > const &sources, std::vector< │ │ │ │ │ +float > const &weights, std::vector< float > const &duWeights, std::vector< │ │ │ │ │ +float > const &dvWeights, std::vector< float > const &duuWeights, std::vector< │ │ │ │ │ +float > const &duvWeights, std::vector< float > const &dvvWeights, bool │ │ │ │ │ +includeCoarseVerts, size_t firstOffset) │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_9_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ │ +LimitStencil operator[](Index index) const │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_9_1 │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _f_a_r │ │ │ │ │ - * _t_o_p_o_l_o_g_y_D_e_s_c_r_i_p_t_o_r_._h │ │ │ │ │ + * _s_t_e_n_c_i_l_T_a_b_l_e_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00719.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/far/ptexIndices.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/far/stencilTableFactory.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -90,28 +90,43 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
ptexIndices.h File Reference
│ │ │ │ +
stencilTableFactory.h File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include "../far/topologyRefiner.h"
│ │ │ │ -#include "../far/types.h"
│ │ │ │ +#include "../far/patchTable.h"
│ │ │ │ #include <vector>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  PtexIndices
 Object used to compute and query ptex face indices. More...
class  StencilTableFactoryReal< REAL >
 A specialized factory for StencilTable. More...
 
struct  StencilTableFactoryReal< REAL >::Options
 
class  LimitStencilTableFactoryReal< REAL >
 A specialized factory for LimitStencilTable. More...
 
struct  LimitStencilTableFactoryReal< REAL >::Options
 
struct  LimitStencilTableFactoryReal< REAL >::LocationArray
 Descriptor for limit surface locations. More...
 
class  StencilTableFactory
 Stencil table factory class wrapping the template for compatibility. More...
 
class  LimitStencilTableFactory
 Stencil table factory class wrapping the template for compatibility. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -120,13 +135,13 @@ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,26 +1,43 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -ptexIndices.h File Reference │ │ │ │ │ +stencilTableFactory.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ -#include "_._._/_f_a_r_/_t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_._h" │ │ │ │ │ -#include "_._._/_f_a_r_/_t_y_p_e_s_._h" │ │ │ │ │ +#include "_._._/_f_a_r_/_p_a_t_c_h_T_a_b_l_e_._h" │ │ │ │ │ #include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _P_t_e_x_I_n_d_i_c_e_s │ │ │ │ │ -  Object used to compute and query ptex face indices. _M_o_r_e_._._. │ │ │ │ │ + class   _S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_<_ _R_E_A_L_ _> │ │ │ │ │ +  A specialized factory for _S_t_e_n_c_i_l_T_a_b_l_e. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +struct   _S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_<_ _R_E_A_L_ _>_:_:_O_p_t_i_o_n_s │ │ │ │ │ +  │ │ │ │ │ + class   _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_<_ _R_E_A_L_ _> │ │ │ │ │ +  A specialized factory for _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +struct   _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_<_ _R_E_A_L_ _>_:_:_O_p_t_i_o_n_s │ │ │ │ │ +  │ │ │ │ │ +struct   _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_<_ _R_E_A_L_ _>_:_:_L_o_c_a_t_i_o_n_A_r_r_a_y │ │ │ │ │ +  Descriptor for limit surface locations. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ + class   _S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y │ │ │ │ │ +  _S_t_e_n_c_i_l table factory class wrapping the template for compatibility. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ + class   _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y │ │ │ │ │ +  _S_t_e_n_c_i_l table factory class wrapping the template for compatibility. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r │ │ │ │ │   │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _f_a_r │ │ │ │ │ - * _p_t_e_x_I_n_d_i_c_e_s_._h │ │ │ │ │ + * _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00719.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,3 +1,9 @@ │ │ │ │ │ var a00719 = [ │ │ │ │ │ - ["PtexIndices", "a01041.html", "a01041"] │ │ │ │ │ + ["StencilTableFactoryReal< REAL >", "a01045.html", "a01045"], │ │ │ │ │ + ["Options", "a01085.html", "a01085"], │ │ │ │ │ + ["LimitStencilTableFactoryReal< REAL >", "a01049.html", "a01049"], │ │ │ │ │ + ["Options", "a01089.html", "a01089"], │ │ │ │ │ + ["LocationArray", "a01093.html", "a01093"], │ │ │ │ │ + ["StencilTableFactory", "a01097.html", null], │ │ │ │ │ + ["LimitStencilTableFactory", "a01101.html", null] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00719_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/far/ptexIndices.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/far/stencilTableFactory.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,19 +92,19 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
ptexIndices.h
│ │ │ │ +
stencilTableFactory.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │ -
2// Copyright 2015 Pixar
│ │ │ │ +
2// Copyright 2013 Pixar
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │
6// compliance with the Apache License and the following modification to it:
│ │ │ │
7// Section 6. Trademarks. is deleted and replaced with:
│ │ │ │
8//
│ │ │ │
9// 6. Trademarks. This License does not grant permission to use the trade
│ │ │ │ @@ -118,81 +118,358 @@ │ │ │ │
17//
│ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │ -
24#ifndef OPENSUBDIV3_FAR_PTEX_INDICES_H
│ │ │ │ -
25#define OPENSUBDIV3_FAR_PTEX_INDICES_H
│ │ │ │ -
26
│ │ │ │ -
27#include "../version.h"
│ │ │ │ -
28
│ │ │ │ -
29#include "../far/topologyRefiner.h"
│ │ │ │ -
30#include "../far/types.h"
│ │ │ │ +
24
│ │ │ │ +
25#ifndef OPENSUBDIV3_FAR_STENCILTABLE_FACTORY_H
│ │ │ │ +
26#define OPENSUBDIV3_FAR_STENCILTABLE_FACTORY_H
│ │ │ │ +
27
│ │ │ │ +
28#include "../version.h"
│ │ │ │ +
29
│ │ │ │ +
30#include "../far/patchTable.h"
│ │ │ │
31
│ │ │ │
32#include <vector>
│ │ │ │
33
│ │ │ │
34namespace OpenSubdiv {
│ │ │ │
35namespace OPENSUBDIV_VERSION {
│ │ │ │
36
│ │ │ │
37namespace Far {
│ │ │ │
38
│ │ │ │ -
│ │ │ │ - │ │ │ │ +
39class TopologyRefiner;
│ │ │ │ +
40
│ │ │ │ +
41template <typename REAL> class StencilReal;
│ │ │ │ +
42template <typename REAL> class StencilTableReal;
│ │ │ │ +
43
│ │ │ │ +
44template <typename REAL> class LimitStencilReal;
│ │ │ │ +
45template <typename REAL> class LimitStencilTableReal;
│ │ │ │ +
46
│ │ │ │
47
│ │ │ │ -
48public:
│ │ │ │ -
49
│ │ │ │ - │ │ │ │ +
50template <typename REAL>
│ │ │ │ +
│ │ │ │ + │ │ │ │
52
│ │ │ │ - │ │ │ │ -
55
│ │ │ │ -
57
│ │ │ │ +
53public:
│ │ │ │ +
54
│ │ │ │ +
│ │ │ │ +
55 enum Mode {
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
59 };
│ │ │ │ +
│ │ │ │
60
│ │ │ │ -
63 int GetNumFaces() const;
│ │ │ │ -
64
│ │ │ │ -
67 int GetFaceId(Index f) const;
│ │ │ │ -
68
│ │ │ │ - │ │ │ │ -
84 TopologyRefiner const &refiner,
│ │ │ │ -
85 int face, int quadrant,
│ │ │ │ -
86 int adjFaces[4], int adjEdges[4]) const;
│ │ │ │ -
87
│ │ │ │ -
89
│ │ │ │ -
90private:
│ │ │ │ -
91
│ │ │ │ -
92 void initializePtexIndices(TopologyRefiner const &refiner);
│ │ │ │ -
93
│ │ │ │ -
94private:
│ │ │ │ -
95
│ │ │ │ -
96 std::vector<Index> _ptexIndices;
│ │ │ │ -
97};
│ │ │ │ -
│ │ │ │ -
98
│ │ │ │ -
99
│ │ │ │ -
100} // end namespace Far
│ │ │ │ -
101
│ │ │ │ -
102} // end namespace OPENSUBDIV_VERSION
│ │ │ │ -
103using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
104} // end namespace OpenSubdiv
│ │ │ │ -
105
│ │ │ │ -
106#endif /* OPENSUBDIV3_FAR_PTEX_INDICES_H */
│ │ │ │ +
│ │ │ │ +
61 struct Options {
│ │ │ │ +
62
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
64 generateOffsets(false),
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
68 maxLevel(10),
│ │ │ │ +
69 fvarChannel(0) { }
│ │ │ │ +
│ │ │ │ +
70
│ │ │ │ +
71 unsigned int interpolationMode : 2,
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
79 unsigned int fvarChannel;
│ │ │ │ +
81 };
│ │ │ │ +
│ │ │ │ +
82
│ │ │ │ + │ │ │ │ +
95 TopologyRefiner const & refiner, Options options = Options());
│ │ │ │ +
96
│ │ │ │ +
97
│ │ │ │ + │ │ │ │ +
111 int numTables, StencilTableReal<REAL> const ** tables);
│ │ │ │ +
112
│ │ │ │ +
113
│ │ │ │ + │ │ │ │ +
129 TopologyRefiner const &refiner,
│ │ │ │ +
130 StencilTableReal<REAL> const *baseStencilTable,
│ │ │ │ +
131 StencilTableReal<REAL> const *localPointStencilTable,
│ │ │ │ +
132 bool factorize = true);
│ │ │ │ +
133
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
149 TopologyRefiner const &refiner,
│ │ │ │ +
150 StencilTableReal<REAL> const *baseStencilTable,
│ │ │ │ +
151 StencilTableReal<REAL> const *localPointStencilTable,
│ │ │ │ +
152 bool factorize = true) {
│ │ │ │ + │ │ │ │ +
154 refiner, baseStencilTable, localPointStencilTable, factorize);
│ │ │ │ +
155 }
│ │ │ │ +
│ │ │ │ +
156
│ │ │ │ + │ │ │ │ +
175 TopologyRefiner const &refiner,
│ │ │ │ +
176 StencilTableReal<REAL> const *baseStencilTable,
│ │ │ │ +
177 StencilTableReal<REAL> const *localPointStencilTable,
│ │ │ │ +
178 int channel = 0,
│ │ │ │ +
179 bool factorize = true);
│ │ │ │ +
180
│ │ │ │ +
181private:
│ │ │ │ +
182
│ │ │ │ +
183 // Generate stencils for the coarse control-vertices (single weight = 1.0f)
│ │ │ │ +
184 static void generateControlVertStencils(
│ │ │ │ +
185 int numControlVerts,
│ │ │ │ +
186 StencilReal<REAL> & dst);
│ │ │ │ +
187
│ │ │ │ +
188 // Internal method to splice local point stencils
│ │ │ │ +
189 static StencilTableReal<REAL> const * appendLocalPointStencilTable(
│ │ │ │ +
190 TopologyRefiner const &refiner,
│ │ │ │ +
191 StencilTableReal<REAL> const * baseStencilTable,
│ │ │ │ +
192 StencilTableReal<REAL> const * localPointStencilTable,
│ │ │ │ +
193 int channel,
│ │ │ │ +
194 bool factorize);
│ │ │ │ +
195};
│ │ │ │ +
│ │ │ │ +
196
│ │ │ │ +
208template <typename REAL>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
210
│ │ │ │ +
211public:
│ │ │ │ +
212
│ │ │ │ +
│ │ │ │ +
213 enum Mode {
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
217 };
│ │ │ │ +
│ │ │ │ +
218
│ │ │ │ +
│ │ │ │ +
219 struct Options {
│ │ │ │ +
220
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
224 fvarChannel(0) { }
│ │ │ │ +
│ │ │ │ +
225
│ │ │ │ +
226 unsigned int interpolationMode : 2,
│ │ │ │ + │ │ │ │ + │ │ │ │ +
229 unsigned int fvarChannel;
│ │ │ │ +
230 };
│ │ │ │ +
│ │ │ │ +
231
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
234
│ │ │ │ +
235 LocationArray() : ptexIdx(-1), numLocations(0), s(0), t(0) { }
│ │ │ │ +
236
│ │ │ │ + │ │ │ │ + │ │ │ │ +
239
│ │ │ │ +
240 REAL const * s,
│ │ │ │ +
241 * t;
│ │ │ │ +
242 };
│ │ │ │ +
│ │ │ │ +
243
│ │ │ │ +
244 typedef std::vector<LocationArray> LocationArrayVec;
│ │ │ │ +
245
│ │ │ │ + │ │ │ │ +
270 TopologyRefiner const & refiner,
│ │ │ │ +
271 LocationArrayVec const & locationArrays,
│ │ │ │ +
272 StencilTableReal<REAL> const * cvStencils = 0,
│ │ │ │ +
273 PatchTable const * patchTable = 0,
│ │ │ │ +
274 Options options = Options());
│ │ │ │ +
275
│ │ │ │ +
276};
│ │ │ │ +
│ │ │ │ +
277
│ │ │ │ +
278
│ │ │ │ +
279//
│ │ │ │ +
280// Public wrapper classes for the templates
│ │ │ │ +
281//
│ │ │ │ +
282class Stencil;
│ │ │ │ +
283class StencilTable;
│ │ │ │ +
284
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
288private:
│ │ │ │ + │ │ │ │ + │ │ │ │ +
291
│ │ │ │ +
292public:
│ │ │ │ +
│ │ │ │ +
293 static StencilTable const * Create(
│ │ │ │ +
294 TopologyRefiner const & refiner, Options options = Options()) {
│ │ │ │ +
295
│ │ │ │ +
296 return static_cast<StencilTable const *>(
│ │ │ │ +
297 BaseFactory::Create(refiner, options));
│ │ │ │ +
298 }
│ │ │ │ +
│ │ │ │ +
299
│ │ │ │ +
│ │ │ │ +
300 static StencilTable const * Create(
│ │ │ │ +
301 int numTables, StencilTable const ** tables) {
│ │ │ │ +
302
│ │ │ │ +
303 return static_cast<StencilTable const *>(
│ │ │ │ +
304 BaseFactory::Create(numTables,
│ │ │ │ +
305 reinterpret_cast<BaseTable const **>(tables)));
│ │ │ │ +
306 }
│ │ │ │ +
│ │ │ │ +
307
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
309 TopologyRefiner const &refiner,
│ │ │ │ +
310 StencilTable const *baseStencilTable,
│ │ │ │ +
311 StencilTable const *localPointStencilTable,
│ │ │ │ +
312 bool factorize = true) {
│ │ │ │ +
313
│ │ │ │ +
314 return static_cast<StencilTable const *>(
│ │ │ │ + │ │ │ │ +
316 static_cast<BaseTable const *>(baseStencilTable),
│ │ │ │ +
317 static_cast<BaseTable const *>(localPointStencilTable),
│ │ │ │ +
318 factorize));
│ │ │ │ +
319 }
│ │ │ │ +
│ │ │ │ +
320
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
322 TopologyRefiner const &refiner,
│ │ │ │ +
323 StencilTable const *baseStencilTable,
│ │ │ │ +
324 StencilTable const *localPointStencilTable,
│ │ │ │ +
325 bool factorize = true) {
│ │ │ │ +
326
│ │ │ │ +
327 return static_cast<StencilTable const *>(
│ │ │ │ + │ │ │ │ +
329 static_cast<BaseTable const *>(baseStencilTable),
│ │ │ │ +
330 static_cast<BaseTable const *>(localPointStencilTable),
│ │ │ │ +
331 factorize));
│ │ │ │ +
332 }
│ │ │ │ +
│ │ │ │ +
333
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
335 TopologyRefiner const &refiner,
│ │ │ │ +
336 StencilTable const *baseStencilTable,
│ │ │ │ +
337 StencilTable const *localPointStencilTable,
│ │ │ │ +
338 int channel = 0,
│ │ │ │ +
339 bool factorize = true) {
│ │ │ │ +
340
│ │ │ │ +
341 return static_cast<StencilTable const *>(
│ │ │ │ + │ │ │ │ +
343 static_cast<BaseTable const *>(baseStencilTable),
│ │ │ │ +
344 static_cast<BaseTable const *>(localPointStencilTable),
│ │ │ │ +
345 channel, factorize));
│ │ │ │ +
346 }
│ │ │ │ +
│ │ │ │ +
347};
│ │ │ │ +
│ │ │ │ +
348
│ │ │ │ +
349class LimitStencil;
│ │ │ │ +
350class LimitStencilTable;
│ │ │ │ +
351
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
355private:
│ │ │ │ + │ │ │ │ + │ │ │ │ +
358
│ │ │ │ +
359public:
│ │ │ │ +
│ │ │ │ +
360 static LimitStencilTable const * Create(
│ │ │ │ +
361 TopologyRefiner const & refiner,
│ │ │ │ +
362 LocationArrayVec const & locationArrays,
│ │ │ │ +
363 StencilTable const * cvStencils = 0,
│ │ │ │ +
364 PatchTable const * patchTable = 0,
│ │ │ │ +
365 Options options = Options()) {
│ │ │ │ +
366
│ │ │ │ +
367 return static_cast<LimitStencilTable const *>(
│ │ │ │ + │ │ │ │ +
369 refiner,
│ │ │ │ +
370 locationArrays,
│ │ │ │ +
371 static_cast<BaseTable const *>(cvStencils),
│ │ │ │ +
372 patchTable,
│ │ │ │ +
373 options));
│ │ │ │ +
374 }
│ │ │ │ +
│ │ │ │ +
375};
│ │ │ │ +
│ │ │ │ +
376
│ │ │ │ +
377} // end namespace Far
│ │ │ │ +
378
│ │ │ │ +
379} // end namespace OPENSUBDIV_VERSION
│ │ │ │ +
380using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
381
│ │ │ │ +
382} // end namespace OpenSubdiv
│ │ │ │ +
383
│ │ │ │ +
384#endif // OPENSUBDIV3_FAR_STENCILTABLE_FACTORY_H
│ │ │ │ │ │ │ │ - │ │ │ │ -
Object used to compute and query ptex face indices.
Definition ptexIndices.h:46
│ │ │ │ -
int GetFaceId(Index f) const
Returns the ptex face index given a coarse face 'f' or -1.
│ │ │ │ -
PtexIndices(TopologyRefiner const &refiner)
Constructor.
│ │ │ │ -
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.
│ │ │ │ -
int GetNumFaces() const
Returns the number of ptex faces in the mesh.
│ │ │ │ - │ │ │ │ +
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ + │ │ │ │ +
static StencilTableReal< REAL > const * Create(TopologyRefiner const &refiner, Options options=Options())
Instantiates StencilTable from TopologyRefiner that have been refined uniformly or adaptively.
│ │ │ │ +
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.
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
static StencilTableReal< REAL > const * AppendLocalPointStencilTableVarying(TopologyRefiner const &refiner, StencilTableReal< REAL > const *baseStencilTable, StencilTableReal< REAL > const *localPointStencilTable, bool factorize=true)
Utility function for stencil splicing for local point varying stencils.
│ │ │ │ +
static StencilTableReal< REAL > const * AppendLocalPointStencilTable(TopologyRefiner const &refiner, StencilTableReal< REAL > const *baseStencilTable, StencilTableReal< REAL > const *localPointStencilTable, bool factorize=true)
Utility function for stencil splicing for local point stencils.
│ │ │ │ +
static StencilTableReal< REAL > const * Create(int numTables, StencilTableReal< REAL > const **tables)
Instantiates StencilTable by concatenating an array of existing stencil tables.
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
static LimitStencilTableReal< REAL > const * Create(TopologyRefiner const &refiner, LocationArrayVec const &locationArrays, StencilTableReal< REAL > const *cvStencils=0, PatchTable const *patchTable=0, Options options=Options())
Instantiates LimitStencilTable from a TopologyRefiner that has been refined either uniformly or adapt...
│ │ │ │ + │ │ │ │ +
Vertex stencil class wrapping the template for compatibility.
│ │ │ │ + │ │ │ │ +
Stencil table class wrapping the template for compatibility.
│ │ │ │ + │ │ │ │ +
Limit stencil table class wrapping the template for compatibility.
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
unsigned int generateIntermediateLevels
vertices at all levels or highest only
│ │ │ │ +
unsigned int generateControlVerts
generate stencils for control-vertices
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
unsigned int generate2ndDerivatives
Generate weights for 2nd derivatives.
│ │ │ │ +
unsigned int generate1stDerivatives
Generate weights for 1st derivatives.
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
Stencil table factory class wrapping the template for compatibility.
│ │ │ │ +
static StencilTable const * AppendLocalPointStencilTableVarying(TopologyRefiner const &refiner, StencilTable const *baseStencilTable, StencilTable const *localPointStencilTable, bool factorize=true)
│ │ │ │ +
static StencilTable const * Create(TopologyRefiner const &refiner, Options options=Options())
│ │ │ │ +
static StencilTable const * AppendLocalPointStencilTableFaceVarying(TopologyRefiner const &refiner, StencilTable const *baseStencilTable, StencilTable const *localPointStencilTable, int channel=0, bool factorize=true)
│ │ │ │ +
static StencilTable const * AppendLocalPointStencilTable(TopologyRefiner const &refiner, StencilTable const *baseStencilTable, StencilTable const *localPointStencilTable, bool factorize=true)
│ │ │ │ +
static StencilTable const * Create(int numTables, StencilTable const **tables)
│ │ │ │ +
Stencil table factory class wrapping the template for compatibility.
│ │ │ │ +
static LimitStencilTable const * Create(TopologyRefiner const &refiner, LocationArrayVec const &locationArrays, StencilTable const *cvStencils=0, PatchTable const *patchTable=0, Options options=Options())
│ │ │ │
Stores topology data for a specified set of refinement options.
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -ptexIndices.h │ │ │ │ │ +stencilTableFactory.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ -2// Copyright 2015 Pixar │ │ │ │ │ +2// Copyright 2013 Pixar │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ 7// Section 6. Trademarks. is deleted and replaced with: │ │ │ │ │ 8// │ │ │ │ │ 9// 6. Trademarks. This License does not grant permission to use the trade │ │ │ │ │ @@ -23,90 +23,498 @@ │ │ │ │ │ 17// │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ -24#ifndef OPENSUBDIV3_FAR_PTEX_INDICES_H │ │ │ │ │ -25#define OPENSUBDIV3_FAR_PTEX_INDICES_H │ │ │ │ │ -26 │ │ │ │ │ -27#include "../version.h" │ │ │ │ │ -28 │ │ │ │ │ -29#include "../far/topologyRefiner.h" │ │ │ │ │ -30#include "../far/types.h" │ │ │ │ │ +24 │ │ │ │ │ +25#ifndef OPENSUBDIV3_FAR_STENCILTABLE_FACTORY_H │ │ │ │ │ +26#define OPENSUBDIV3_FAR_STENCILTABLE_FACTORY_H │ │ │ │ │ +27 │ │ │ │ │ +28#include "../version.h" │ │ │ │ │ +29 │ │ │ │ │ +30#include "../far/patchTable.h" │ │ │ │ │ 31 │ │ │ │ │ 32#include │ │ │ │ │ 33 │ │ │ │ │ 34namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ 35namespace OPENSUBDIV_VERSION { │ │ │ │ │ 36 │ │ │ │ │ 37namespace Far { │ │ │ │ │ 38 │ │ │ │ │ -_4_6class _P_t_e_x_I_n_d_i_c_e_s { │ │ │ │ │ +39class TopologyRefiner; │ │ │ │ │ +40 │ │ │ │ │ +41template class StencilReal; │ │ │ │ │ +42template class StencilTableReal; │ │ │ │ │ +43 │ │ │ │ │ +44template class LimitStencilReal; │ │ │ │ │ +45template class LimitStencilTableReal; │ │ │ │ │ +46 │ │ │ │ │ 47 │ │ │ │ │ -48public: │ │ │ │ │ -49 │ │ │ │ │ -_5_1 _P_t_e_x_I_n_d_i_c_e_s(_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const &refiner); │ │ │ │ │ +50template │ │ │ │ │ +_5_1class _S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l { │ │ │ │ │ 52 │ │ │ │ │ -_5_4 _~_P_t_e_x_I_n_d_i_c_e_s(); │ │ │ │ │ -55 │ │ │ │ │ -57 │ │ │ │ │ +53public: │ │ │ │ │ +54 │ │ │ │ │ +_5_5 enum _M_o_d_e { │ │ │ │ │ +_5_6 _I_N_T_E_R_P_O_L_A_T_E___V_E_R_T_E_X=0, │ │ │ │ │ +_5_7 _I_N_T_E_R_P_O_L_A_T_E___V_A_R_Y_I_N_G, │ │ │ │ │ +58 _I_N_T_E_R_P_O_L_A_T_E___F_A_C_E___V_A_R_Y_I_N_G │ │ │ │ │ +_5_9 }; │ │ │ │ │ 60 │ │ │ │ │ -_6_3 int _G_e_t_N_u_m_F_a_c_e_s() const; │ │ │ │ │ -64 │ │ │ │ │ -_6_7 int _G_e_t_F_a_c_e_I_d(_I_n_d_e_x f) const; │ │ │ │ │ -68 │ │ │ │ │ -_8_3 void _G_e_t_A_d_j_a_c_e_n_c_y( │ │ │ │ │ -84 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const &refiner, │ │ │ │ │ -85 int face, int quadrant, │ │ │ │ │ -86 int adjFaces[4], int adjEdges[4]) const; │ │ │ │ │ -87 │ │ │ │ │ -89 │ │ │ │ │ -90private: │ │ │ │ │ -91 │ │ │ │ │ -92 void initializePtexIndices(_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const &refiner); │ │ │ │ │ -93 │ │ │ │ │ -94private: │ │ │ │ │ -95 │ │ │ │ │ -96 std::vector _ptexIndices; │ │ │ │ │ -97}; │ │ │ │ │ -98 │ │ │ │ │ -99 │ │ │ │ │ -100} // end namespace Far │ │ │ │ │ -101 │ │ │ │ │ -102} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ -103using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -104} // end namespace OpenSubdiv │ │ │ │ │ -105 │ │ │ │ │ -106#endif /* OPENSUBDIV3_FAR_PTEX_INDICES_H */ │ │ │ │ │ +_6_1 struct _O_p_t_i_o_n_s { │ │ │ │ │ +62 │ │ │ │ │ +_6_3 _O_p_t_i_o_n_s() : _i_n_t_e_r_p_o_l_a_t_i_o_n_M_o_d_e(_I_N_T_E_R_P_O_L_A_T_E___V_E_R_T_E_X), │ │ │ │ │ +64 _g_e_n_e_r_a_t_e_O_f_f_s_e_t_s(false), │ │ │ │ │ +65 _g_e_n_e_r_a_t_e_C_o_n_t_r_o_l_V_e_r_t_s(false), │ │ │ │ │ +66 _g_e_n_e_r_a_t_e_I_n_t_e_r_m_e_d_i_a_t_e_L_e_v_e_l_s(true), │ │ │ │ │ +67 _f_a_c_t_o_r_i_z_e_I_n_t_e_r_m_e_d_i_a_t_e_L_e_v_e_l_s(true), │ │ │ │ │ +68 _m_a_x_L_e_v_e_l(10), │ │ │ │ │ +69 _f_v_a_r_C_h_a_n_n_e_l(0) { } │ │ │ │ │ +70 │ │ │ │ │ +_7_1 unsigned int _i_n_t_e_r_p_o_l_a_t_i_o_n_M_o_d_e : 2, │ │ │ │ │ +_7_2 _g_e_n_e_r_a_t_e_O_f_f_s_e_t_s : 1, │ │ │ │ │ +_7_3 _g_e_n_e_r_a_t_e_C_o_n_t_r_o_l_V_e_r_t_s : 1, │ │ │ │ │ +_7_4 _g_e_n_e_r_a_t_e_I_n_t_e_r_m_e_d_i_a_t_e_L_e_v_e_l_s : 1, │ │ │ │ │ +_7_5 _f_a_c_t_o_r_i_z_e_I_n_t_e_r_m_e_d_i_a_t_e_L_e_v_e_l_s : 1, │ │ │ │ │ +_7_8 _m_a_x_L_e_v_e_l : 4; │ │ │ │ │ +_7_9 unsigned int _f_v_a_r_C_h_a_n_n_e_l; │ │ │ │ │ +81 }; │ │ │ │ │ +82 │ │ │ │ │ +_9_4 static _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * _C_r_e_a_t_e( │ │ │ │ │ +95 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const & refiner, _O_p_t_i_o_n_s options = _O_p_t_i_o_n_s()); │ │ │ │ │ +96 │ │ │ │ │ +97 │ │ │ │ │ +_1_1_0 static _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * _C_r_e_a_t_e( │ │ │ │ │ +111 int numTables, _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const ** tables); │ │ │ │ │ +112 │ │ │ │ │ +113 │ │ │ │ │ +_1_2_8 static _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * _A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e( │ │ │ │ │ +129 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const &refiner, │ │ │ │ │ +130 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const *baseStencilTable, │ │ │ │ │ +131 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const *localPointStencilTable, │ │ │ │ │ +132 bool factorize = true); │ │ │ │ │ +133 │ │ │ │ │ +_1_4_8 static _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * _A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e_V_a_r_y_i_n_g( │ │ │ │ │ +149 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const &refiner, │ │ │ │ │ +150 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const *baseStencilTable, │ │ │ │ │ +151 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const *localPointStencilTable, │ │ │ │ │ +152 bool factorize = true) { │ │ │ │ │ +153 return _A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e( │ │ │ │ │ +154 refiner, baseStencilTable, localPointStencilTable, factorize); │ │ │ │ │ +155 } │ │ │ │ │ +156 │ │ │ │ │ +_1_7_4 static _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * │ │ │ │ │ +_A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +175 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const &refiner, │ │ │ │ │ +176 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const *baseStencilTable, │ │ │ │ │ +177 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const *localPointStencilTable, │ │ │ │ │ +178 int channel = 0, │ │ │ │ │ +179 bool factorize = true); │ │ │ │ │ +180 │ │ │ │ │ +181private: │ │ │ │ │ +182 │ │ │ │ │ +183 // Generate stencils for the coarse control-vertices (single weight = 1.0f) │ │ │ │ │ +184 static void generateControlVertStencils( │ │ │ │ │ +185 int numControlVerts, │ │ │ │ │ +186 _S_t_e_n_c_i_l_R_e_a_l_<_R_E_A_L_> & dst); │ │ │ │ │ +187 │ │ │ │ │ +188 // Internal method to splice local point stencils │ │ │ │ │ +189 static _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * appendLocalPointStencilTable( │ │ │ │ │ +190 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const &refiner, │ │ │ │ │ +191 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * baseStencilTable, │ │ │ │ │ +192 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * localPointStencilTable, │ │ │ │ │ +193 int channel, │ │ │ │ │ +194 bool factorize); │ │ │ │ │ +195}; │ │ │ │ │ +196 │ │ │ │ │ +208template │ │ │ │ │ +_2_0_9class _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l { │ │ │ │ │ +210 │ │ │ │ │ +211public: │ │ │ │ │ +212 │ │ │ │ │ +_2_1_3 enum _M_o_d_e { │ │ │ │ │ +_2_1_4 _I_N_T_E_R_P_O_L_A_T_E___V_E_R_T_E_X=0, │ │ │ │ │ +_2_1_5 _I_N_T_E_R_P_O_L_A_T_E___V_A_R_Y_I_N_G, │ │ │ │ │ +216 _I_N_T_E_R_P_O_L_A_T_E___F_A_C_E___V_A_R_Y_I_N_G │ │ │ │ │ +_2_1_7 }; │ │ │ │ │ +218 │ │ │ │ │ +_2_1_9 struct _O_p_t_i_o_n_s { │ │ │ │ │ +220 │ │ │ │ │ +_2_2_1 _O_p_t_i_o_n_s() : _i_n_t_e_r_p_o_l_a_t_i_o_n_M_o_d_e(_I_N_T_E_R_P_O_L_A_T_E___V_E_R_T_E_X), │ │ │ │ │ +222 _g_e_n_e_r_a_t_e_1_s_t_D_e_r_i_v_a_t_i_v_e_s(true), │ │ │ │ │ +223 _g_e_n_e_r_a_t_e_2_n_d_D_e_r_i_v_a_t_i_v_e_s(false), │ │ │ │ │ +224 _f_v_a_r_C_h_a_n_n_e_l(0) { } │ │ │ │ │ +225 │ │ │ │ │ +_2_2_6 unsigned int _i_n_t_e_r_p_o_l_a_t_i_o_n_M_o_d_e : 2, │ │ │ │ │ +_2_2_7 _g_e_n_e_r_a_t_e_1_s_t_D_e_r_i_v_a_t_i_v_e_s : 1, │ │ │ │ │ +_2_2_8 _g_e_n_e_r_a_t_e_2_n_d_D_e_r_i_v_a_t_i_v_e_s : 1; │ │ │ │ │ +_2_2_9 unsigned int _f_v_a_r_C_h_a_n_n_e_l; │ │ │ │ │ +230 }; │ │ │ │ │ +231 │ │ │ │ │ +_2_3_3 struct _L_o_c_a_t_i_o_n_A_r_r_a_y { │ │ │ │ │ +234 │ │ │ │ │ +_2_3_5 _L_o_c_a_t_i_o_n_A_r_r_a_y() : _p_t_e_x_I_d_x(-1), _n_u_m_L_o_c_a_t_i_o_n_s(0), _s(0), _t(0) { } │ │ │ │ │ +236 │ │ │ │ │ +_2_3_7 int _p_t_e_x_I_d_x, │ │ │ │ │ +_2_3_8 _n_u_m_L_o_c_a_t_i_o_n_s; │ │ │ │ │ +239 │ │ │ │ │ +_2_4_0 REAL const * _s, │ │ │ │ │ +_2_4_1 * _t; │ │ │ │ │ +242 }; │ │ │ │ │ +243 │ │ │ │ │ +_2_4_4 typedef std::vector _L_o_c_a_t_i_o_n_A_r_r_a_y_V_e_c; │ │ │ │ │ +245 │ │ │ │ │ +_2_6_9 static _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * _C_r_e_a_t_e( │ │ │ │ │ +270 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const & refiner, │ │ │ │ │ +271 _L_o_c_a_t_i_o_n_A_r_r_a_y_V_e_c const & locationArrays, │ │ │ │ │ +272 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * cvStencils = 0, │ │ │ │ │ +273 _P_a_t_c_h_T_a_b_l_e const * patchTable = 0, │ │ │ │ │ +274 _O_p_t_i_o_n_s options = _O_p_t_i_o_n_s()); │ │ │ │ │ +275 │ │ │ │ │ +276}; │ │ │ │ │ +277 │ │ │ │ │ +278 │ │ │ │ │ +279// │ │ │ │ │ +280// Public wrapper classes for the templates │ │ │ │ │ +281// │ │ │ │ │ +282class _S_t_e_n_c_i_l; │ │ │ │ │ +283class _S_t_e_n_c_i_l_T_a_b_l_e; │ │ │ │ │ +284 │ │ │ │ │ +_2_8_7class _S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y : public _S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l { │ │ │ │ │ +288private: │ │ │ │ │ +289 typedef _S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_<_f_l_o_a_t_> _B_a_s_e_F_a_c_t_o_r_y; │ │ │ │ │ +290 typedef _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_f_l_o_a_t_> _B_a_s_e_T_a_b_l_e; │ │ │ │ │ +291 │ │ │ │ │ +292public: │ │ │ │ │ +_2_9_3 static _S_t_e_n_c_i_l_T_a_b_l_e const * _C_r_e_a_t_e( │ │ │ │ │ +294 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const & refiner, Options options = Options()) { │ │ │ │ │ +295 │ │ │ │ │ +296 return static_cast<_S_t_e_n_c_i_l_T_a_b_l_e const *>( │ │ │ │ │ +297 _B_a_s_e_F_a_c_t_o_r_y_:_:_C_r_e_a_t_e(refiner, options)); │ │ │ │ │ +298 } │ │ │ │ │ +299 │ │ │ │ │ +_3_0_0 static _S_t_e_n_c_i_l_T_a_b_l_e const * _C_r_e_a_t_e( │ │ │ │ │ +301 int numTables, _S_t_e_n_c_i_l_T_a_b_l_e const ** tables) { │ │ │ │ │ +302 │ │ │ │ │ +303 return static_cast<_S_t_e_n_c_i_l_T_a_b_l_e const *>( │ │ │ │ │ +304 _B_a_s_e_F_a_c_t_o_r_y_:_:_C_r_e_a_t_e(numTables, │ │ │ │ │ +305 reinterpret_cast<_B_a_s_e_T_a_b_l_e const **>(tables))); │ │ │ │ │ +306 } │ │ │ │ │ +307 │ │ │ │ │ +_3_0_8 static _S_t_e_n_c_i_l_T_a_b_l_e const * _A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e( │ │ │ │ │ +309 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const &refiner, │ │ │ │ │ +310 _S_t_e_n_c_i_l_T_a_b_l_e const *baseStencilTable, │ │ │ │ │ +311 _S_t_e_n_c_i_l_T_a_b_l_e const *localPointStencilTable, │ │ │ │ │ +312 bool factorize = true) { │ │ │ │ │ +313 │ │ │ │ │ +314 return static_cast<_S_t_e_n_c_i_l_T_a_b_l_e const *>( │ │ │ │ │ +315 _B_a_s_e_F_a_c_t_o_r_y_:_:_A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e(refiner, │ │ │ │ │ +316 static_cast<_B_a_s_e_T_a_b_l_e const *>(baseStencilTable), │ │ │ │ │ +317 static_cast<_B_a_s_e_T_a_b_l_e const *>(localPointStencilTable), │ │ │ │ │ +318 factorize)); │ │ │ │ │ +319 } │ │ │ │ │ +320 │ │ │ │ │ +_3_2_1 static _S_t_e_n_c_i_l_T_a_b_l_e const * _A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e_V_a_r_y_i_n_g( │ │ │ │ │ +322 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const &refiner, │ │ │ │ │ +323 _S_t_e_n_c_i_l_T_a_b_l_e const *baseStencilTable, │ │ │ │ │ +324 _S_t_e_n_c_i_l_T_a_b_l_e const *localPointStencilTable, │ │ │ │ │ +325 bool factorize = true) { │ │ │ │ │ +326 │ │ │ │ │ +327 return static_cast<_S_t_e_n_c_i_l_T_a_b_l_e const *>( │ │ │ │ │ +328 _B_a_s_e_F_a_c_t_o_r_y_:_:_A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e_V_a_r_y_i_n_g(refiner, │ │ │ │ │ +329 static_cast<_B_a_s_e_T_a_b_l_e const *>(baseStencilTable), │ │ │ │ │ +330 static_cast<_B_a_s_e_T_a_b_l_e const *>(localPointStencilTable), │ │ │ │ │ +331 factorize)); │ │ │ │ │ +332 } │ │ │ │ │ +333 │ │ │ │ │ +_3_3_4 static _S_t_e_n_c_i_l_T_a_b_l_e const * _A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +335 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const &refiner, │ │ │ │ │ +336 _S_t_e_n_c_i_l_T_a_b_l_e const *baseStencilTable, │ │ │ │ │ +337 _S_t_e_n_c_i_l_T_a_b_l_e const *localPointStencilTable, │ │ │ │ │ +338 int channel = 0, │ │ │ │ │ +339 bool factorize = true) { │ │ │ │ │ +340 │ │ │ │ │ +341 return static_cast<_S_t_e_n_c_i_l_T_a_b_l_e const *>( │ │ │ │ │ +342 _B_a_s_e_F_a_c_t_o_r_y_:_:_A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_e_V_a_r_y_i_n_g(refiner, │ │ │ │ │ +343 static_cast<_B_a_s_e_T_a_b_l_e const *>(baseStencilTable), │ │ │ │ │ +344 static_cast<_B_a_s_e_T_a_b_l_e const *>(localPointStencilTable), │ │ │ │ │ +345 channel, factorize)); │ │ │ │ │ +346 } │ │ │ │ │ +347}; │ │ │ │ │ +348 │ │ │ │ │ +349class LimitStencil; │ │ │ │ │ +350class LimitStencilTable; │ │ │ │ │ +351 │ │ │ │ │ +_3_5_4class _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y : public _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l │ │ │ │ │ +{ │ │ │ │ │ +355private: │ │ │ │ │ +356 typedef _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_<_f_l_o_a_t_> _B_a_s_e_F_a_c_t_o_r_y; │ │ │ │ │ +357 typedef _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_f_l_o_a_t_> _B_a_s_e_T_a_b_l_e; │ │ │ │ │ +358 │ │ │ │ │ +359public: │ │ │ │ │ +_3_6_0 static _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e const * _C_r_e_a_t_e( │ │ │ │ │ +361 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const & refiner, │ │ │ │ │ +362 _L_o_c_a_t_i_o_n_A_r_r_a_y_V_e_c const & locationArrays, │ │ │ │ │ +363 _S_t_e_n_c_i_l_T_a_b_l_e const * cvStencils = 0, │ │ │ │ │ +364 _P_a_t_c_h_T_a_b_l_e const * patchTable = 0, │ │ │ │ │ +365 Options options = Options()) { │ │ │ │ │ +366 │ │ │ │ │ +367 return static_cast<_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e const *>( │ │ │ │ │ +368 _B_a_s_e_F_a_c_t_o_r_y_:_:_C_r_e_a_t_e( │ │ │ │ │ +369 refiner, │ │ │ │ │ +370 locationArrays, │ │ │ │ │ +371 static_cast<_B_a_s_e_T_a_b_l_e const *>(cvStencils), │ │ │ │ │ +372 patchTable, │ │ │ │ │ +373 options)); │ │ │ │ │ +374 } │ │ │ │ │ +375}; │ │ │ │ │ +376 │ │ │ │ │ +377} // end namespace Far │ │ │ │ │ +378 │ │ │ │ │ +379} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ +380using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +381 │ │ │ │ │ +382} // end namespace OpenSubdiv │ │ │ │ │ +383 │ │ │ │ │ +384#endif // OPENSUBDIV3_FAR_STENCILTABLE_FACTORY_H │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_I_n_d_e_x │ │ │ │ │ -Vtr::Index Index │ │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e_s_._h_:_4_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_t_e_x_I_n_d_i_c_e_s │ │ │ │ │ -Object used to compute and query ptex face indices. │ │ │ │ │ -DDeeffiinniittiioonn _p_t_e_x_I_n_d_i_c_e_s_._h_:_4_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_t_e_x_I_n_d_i_c_e_s_:_:_G_e_t_F_a_c_e_I_d │ │ │ │ │ -int GetFaceId(Index f) const │ │ │ │ │ -Returns the ptex face index given a coarse face 'f' or -1. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_t_e_x_I_n_d_i_c_e_s_:_:_P_t_e_x_I_n_d_i_c_e_s │ │ │ │ │ -PtexIndices(TopologyRefiner const &refiner) │ │ │ │ │ -Constructor. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_t_e_x_I_n_d_i_c_e_s_:_:_G_e_t_A_d_j_a_c_e_n_c_y │ │ │ │ │ -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. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_t_e_x_I_n_d_i_c_e_s_:_:_G_e_t_N_u_m_F_a_c_e_s │ │ │ │ │ -int GetNumFaces() const │ │ │ │ │ -Returns the number of ptex faces in the mesh. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_t_e_x_I_n_d_i_c_e_s_:_:_~_P_t_e_x_I_n_d_i_c_e_s │ │ │ │ │ -~PtexIndices() │ │ │ │ │ -Destructor. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +Container for arrays of parametric patches. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_5_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l │ │ │ │ │ +A specialized factory for StencilTable. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_5_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_C_r_e_a_t_e │ │ │ │ │ +static StencilTableReal< REAL > const * Create(TopologyRefiner const &refiner, │ │ │ │ │ +Options options=Options()) │ │ │ │ │ +Instantiates StencilTable from TopologyRefiner that have been refined uniformly │ │ │ │ │ +or adaptively. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ +_A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ +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. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_M_o_d_e │ │ │ │ │ +Mode │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_5_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ +_I_N_T_E_R_P_O_L_A_T_E___F_A_C_E___V_A_R_Y_I_N_G │ │ │ │ │ +@ INTERPOLATE_FACE_VARYING │ │ │ │ │ +face-varying primvar stencils │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_5_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ +_I_N_T_E_R_P_O_L_A_T_E___V_A_R_Y_I_N_G │ │ │ │ │ +@ INTERPOLATE_VARYING │ │ │ │ │ +varying primvar stencils │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_5_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ +_I_N_T_E_R_P_O_L_A_T_E___V_E_R_T_E_X │ │ │ │ │ +@ INTERPOLATE_VERTEX │ │ │ │ │ +vertex primvar stencils │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_5_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ +_A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e_V_a_r_y_i_n_g │ │ │ │ │ +static StencilTableReal< REAL > const * AppendLocalPointStencilTableVarying │ │ │ │ │ +(TopologyRefiner const &refiner, StencilTableReal< REAL > const │ │ │ │ │ +*baseStencilTable, StencilTableReal< REAL > const *localPointStencilTable, bool │ │ │ │ │ +factorize=true) │ │ │ │ │ +Utility function for stencil splicing for local point varying stencils. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_4_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ +_A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +static StencilTableReal< REAL > const * AppendLocalPointStencilTable │ │ │ │ │ +(TopologyRefiner const &refiner, StencilTableReal< REAL > const │ │ │ │ │ +*baseStencilTable, StencilTableReal< REAL > const *localPointStencilTable, bool │ │ │ │ │ +factorize=true) │ │ │ │ │ +Utility function for stencil splicing for local point stencils. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_C_r_e_a_t_e │ │ │ │ │ +static StencilTableReal< REAL > const * Create(int numTables, StencilTableReal< │ │ │ │ │ +REAL > const **tables) │ │ │ │ │ +Instantiates StencilTable by concatenating an array of existing stencil tables. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l │ │ │ │ │ +A specialized factory for LimitStencilTable. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_0_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_M_o_d_e │ │ │ │ │ +Mode │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_1_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ +_I_N_T_E_R_P_O_L_A_T_E___F_A_C_E___V_A_R_Y_I_N_G │ │ │ │ │ +@ INTERPOLATE_FACE_VARYING │ │ │ │ │ +face-varying primvar stencils │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_1_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ +_I_N_T_E_R_P_O_L_A_T_E___V_A_R_Y_I_N_G │ │ │ │ │ +@ INTERPOLATE_VARYING │ │ │ │ │ +varying primvar stencils │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_1_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ +_I_N_T_E_R_P_O_L_A_T_E___V_E_R_T_E_X │ │ │ │ │ +@ INTERPOLATE_VERTEX │ │ │ │ │ +vertex primvar stencils │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_1_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ +_L_o_c_a_t_i_o_n_A_r_r_a_y_V_e_c │ │ │ │ │ +std::vector< LocationArray > LocationArrayVec │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_4_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_C_r_e_a_t_e │ │ │ │ │ +static LimitStencilTableReal< REAL > const * Create(TopologyRefiner const │ │ │ │ │ +&refiner, LocationArrayVec const &locationArrays, StencilTableReal< REAL > │ │ │ │ │ +const *cvStencils=0, PatchTable const *patchTable=0, Options options=Options()) │ │ │ │ │ +Instantiates LimitStencilTable from a TopologyRefiner that has been refined │ │ │ │ │ +either uniformly or adapt... │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l │ │ │ │ │ +Vertex stencil descriptor. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l │ │ │ │ │ +Vertex stencil class wrapping the template for compatibility. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_1_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l │ │ │ │ │ +Table of subdivision stencils. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_4_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +Stencil table class wrapping the template for compatibility. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_7_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l │ │ │ │ │ +Table of limit subdivision stencils. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_4_0_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +Limit stencil table class wrapping the template for compatibility. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_8_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_6_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_f_a_c_t_o_r_i_z_e_I_n_t_e_r_m_e_d_i_a_t_e_L_e_v_e_l_s │ │ │ │ │ +unsigned int factorizeIntermediateLevels │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_7_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_:_m_a_x_L_e_v_e_l │ │ │ │ │ +unsigned int maxLevel │ │ │ │ │ +generate stencils up to 'maxLevel' │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_7_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_:_O_p_t_i_o_n_s │ │ │ │ │ +Options() │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_6_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_g_e_n_e_r_a_t_e_I_n_t_e_r_m_e_d_i_a_t_e_L_e_v_e_l_s │ │ │ │ │ +unsigned int generateIntermediateLevels │ │ │ │ │ +vertices at all levels or highest only │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_7_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_g_e_n_e_r_a_t_e_C_o_n_t_r_o_l_V_e_r_t_s │ │ │ │ │ +unsigned int generateControlVerts │ │ │ │ │ +generate stencils for control-vertices │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_7_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_g_e_n_e_r_a_t_e_O_f_f_s_e_t_s │ │ │ │ │ +unsigned int generateOffsets │ │ │ │ │ +populate optional "_offsets" field │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_7_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_f_v_a_r_C_h_a_n_n_e_l │ │ │ │ │ +unsigned int fvarChannel │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_7_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_i_n_t_e_r_p_o_l_a_t_i_o_n_M_o_d_e │ │ │ │ │ +unsigned int interpolationMode │ │ │ │ │ +interpolation mode │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_7_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_1_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_O_p_t_i_o_n_s │ │ │ │ │ +Options() │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_2_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_f_v_a_r_C_h_a_n_n_e_l │ │ │ │ │ +unsigned int fvarChannel │ │ │ │ │ +face-varying channel to use │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_2_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_i_n_t_e_r_p_o_l_a_t_i_o_n_M_o_d_e │ │ │ │ │ +unsigned int interpolationMode │ │ │ │ │ +interpolation mode │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_2_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_g_e_n_e_r_a_t_e_2_n_d_D_e_r_i_v_a_t_i_v_e_s │ │ │ │ │ +unsigned int generate2ndDerivatives │ │ │ │ │ +Generate weights for 2nd derivatives. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_2_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_g_e_n_e_r_a_t_e_1_s_t_D_e_r_i_v_a_t_i_v_e_s │ │ │ │ │ +unsigned int generate1stDerivatives │ │ │ │ │ +Generate weights for 1st derivatives. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_2_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ +_L_o_c_a_t_i_o_n_A_r_r_a_y │ │ │ │ │ +Descriptor for limit surface locations. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_3_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ +_L_o_c_a_t_i_o_n_A_r_r_a_y_:_:_t │ │ │ │ │ +REAL const * t │ │ │ │ │ +array of v coordinates │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_4_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ +_L_o_c_a_t_i_o_n_A_r_r_a_y_:_:_s │ │ │ │ │ +REAL const * s │ │ │ │ │ +array of u coordinates │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_4_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ +_L_o_c_a_t_i_o_n_A_r_r_a_y_:_:_L_o_c_a_t_i_o_n_A_r_r_a_y │ │ │ │ │ +LocationArray() │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_3_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ +_L_o_c_a_t_i_o_n_A_r_r_a_y_:_:_n_u_m_L_o_c_a_t_i_o_n_s │ │ │ │ │ +int numLocations │ │ │ │ │ +number of (u,v) coordinates in the array │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_3_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l_:_: │ │ │ │ │ +_L_o_c_a_t_i_o_n_A_r_r_a_y_:_:_p_t_e_x_I_d_x │ │ │ │ │ +int ptexIdx │ │ │ │ │ +ptex face index │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_3_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y │ │ │ │ │ +Stencil table factory class wrapping the template for compatibility. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_8_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_:_: │ │ │ │ │ +_A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e_V_a_r_y_i_n_g │ │ │ │ │ +static StencilTable const * AppendLocalPointStencilTableVarying(TopologyRefiner │ │ │ │ │ +const &refiner, StencilTable const *baseStencilTable, StencilTable const │ │ │ │ │ +*localPointStencilTable, bool factorize=true) │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_3_2_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_:_:_C_r_e_a_t_e │ │ │ │ │ +static StencilTable const * Create(TopologyRefiner const &refiner, Options │ │ │ │ │ +options=Options()) │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_9_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_:_: │ │ │ │ │ +_A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ +static StencilTable const * AppendLocalPointStencilTableFaceVarying │ │ │ │ │ +(TopologyRefiner const &refiner, StencilTable const *baseStencilTable, │ │ │ │ │ +StencilTable const *localPointStencilTable, int channel=0, bool factorize=true) │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_3_3_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_:_: │ │ │ │ │ +_A_p_p_e_n_d_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +static StencilTable const * AppendLocalPointStencilTable(TopologyRefiner const │ │ │ │ │ +&refiner, StencilTable const *baseStencilTable, StencilTable const │ │ │ │ │ +*localPointStencilTable, bool factorize=true) │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_3_0_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_:_:_C_r_e_a_t_e │ │ │ │ │ +static StencilTable const * Create(int numTables, StencilTable const **tables) │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_3_0_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y │ │ │ │ │ +Stencil table factory class wrapping the template for compatibility. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_3_5_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_:_:_C_r_e_a_t_e │ │ │ │ │ +static LimitStencilTable const * Create(TopologyRefiner const &refiner, │ │ │ │ │ +LocationArrayVec const &locationArrays, StencilTable const *cvStencils=0, │ │ │ │ │ +PatchTable const *patchTable=0, Options options=Options()) │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_3_6_0 │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r │ │ │ │ │ Stores topology data for a specified set of refinement options. │ │ │ │ │ DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_._h_:_5_1 │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _f_a_r │ │ │ │ │ - * _p_t_e_x_I_n_d_i_c_e_s_._h │ │ │ │ │ + * _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00722.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/far/stencilTable.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/far/ptexIndices.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -90,51 +90,28 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
stencilTable.h File Reference
│ │ │ │ +
ptexIndices.h File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ +#include "../far/topologyRefiner.h"
│ │ │ │ #include "../far/types.h"
│ │ │ │ -#include <cassert>
│ │ │ │ -#include <cstring>
│ │ │ │ #include <vector>
│ │ │ │ -#include <iostream>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  StencilReal< REAL >
 Vertex stencil descriptor. More...
 
class  Stencil
 Vertex stencil class wrapping the template for compatibility. More...
 
class  StencilTableReal< REAL >
 Table of subdivision stencils. More...
 
class  StencilTable
 Stencil table class wrapping the template for compatibility. More...
 
class  LimitStencilReal< REAL >
 Limit point stencil descriptor. More...
 
class  LimitStencil
 Limit point stencil class wrapping the template for compatibility. More...
 
class  LimitStencilTableReal< REAL >
 Table of limit subdivision stencils. More...
 
class  LimitStencilTable
 Limit stencil table class wrapping the template for compatibility. More...
class  PtexIndices
 Object used to compute and query ptex face indices. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -143,13 +120,13 @@ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,51 +1,26 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -stencilTable.h File Reference │ │ │ │ │ +ptexIndices.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ +#include "_._._/_f_a_r_/_t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_._h" │ │ │ │ │ #include "_._._/_f_a_r_/_t_y_p_e_s_._h" │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _S_t_e_n_c_i_l_R_e_a_l_<_ _R_E_A_L_ _> │ │ │ │ │ -  Vertex stencil descriptor. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _S_t_e_n_c_i_l │ │ │ │ │ -  Vertex stencil class wrapping the template for compatibility. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_ _R_E_A_L_ _> │ │ │ │ │ -  Table of subdivision stencils. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -  _S_t_e_n_c_i_l table class wrapping the template for compatibility. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_<_ _R_E_A_L_ _> │ │ │ │ │ -  Limit point stencil descriptor. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _L_i_m_i_t_S_t_e_n_c_i_l │ │ │ │ │ -  Limit point stencil class wrapping the template for compatibility. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_ _R_E_A_L_ _> │ │ │ │ │ -  Table of limit subdivision stencils. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -  Limit stencil table class wrapping the template for compatibility. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ +class   _P_t_e_x_I_n_d_i_c_e_s │ │ │ │ │ +  Object used to compute and query ptex face indices. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r │ │ │ │ │   │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _f_a_r │ │ │ │ │ - * _s_t_e_n_c_i_l_T_a_b_l_e_._h │ │ │ │ │ + * _p_t_e_x_I_n_d_i_c_e_s_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00722.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,10 +1,3 @@ │ │ │ │ │ var a00722 = [ │ │ │ │ │ - ["StencilReal< REAL >", "a01053.html", "a01053"], │ │ │ │ │ - ["Stencil", "a01057.html", "a01057"], │ │ │ │ │ - ["StencilTableReal< REAL >", "a01061.html", "a01061"], │ │ │ │ │ - ["StencilTable", "a01065.html", "a01065"], │ │ │ │ │ - ["LimitStencilReal< REAL >", "a01069.html", "a01069"], │ │ │ │ │ - ["LimitStencil", "a01073.html", "a01073"], │ │ │ │ │ - ["LimitStencilTableReal< REAL >", "a01077.html", "a01077"], │ │ │ │ │ - ["LimitStencilTable", "a01081.html", "a01081"] │ │ │ │ │ + ["PtexIndices", "a01041.html", "a01041"] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00722_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/far/stencilTable.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/far/ptexIndices.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,19 +92,19 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
stencilTable.h
│ │ │ │ +
ptexIndices.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │ -
2// Copyright 2013 Pixar
│ │ │ │ +
2// Copyright 2015 Pixar
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │
6// compliance with the Apache License and the following modification to it:
│ │ │ │
7// Section 6. Trademarks. is deleted and replaced with:
│ │ │ │
8//
│ │ │ │
9// 6. Trademarks. This License does not grant permission to use the trade
│ │ │ │ @@ -118,893 +118,81 @@ │ │ │ │
17//
│ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │ -
24
│ │ │ │ -
25#ifndef OPENSUBDIV3_FAR_STENCILTABLE_H
│ │ │ │ -
26#define OPENSUBDIV3_FAR_STENCILTABLE_H
│ │ │ │ -
27
│ │ │ │ -
28#include "../version.h"
│ │ │ │ -
29
│ │ │ │ +
24#ifndef OPENSUBDIV3_FAR_PTEX_INDICES_H
│ │ │ │ +
25#define OPENSUBDIV3_FAR_PTEX_INDICES_H
│ │ │ │ +
26
│ │ │ │ +
27#include "../version.h"
│ │ │ │ +
28
│ │ │ │ +
29#include "../far/topologyRefiner.h"
│ │ │ │
30#include "../far/types.h"
│ │ │ │
31
│ │ │ │ -
32#include <cassert>
│ │ │ │ -
33#include <cstring>
│ │ │ │ -
34#include <vector>
│ │ │ │ -
35#include <iostream>
│ │ │ │ +
32#include <vector>
│ │ │ │ +
33
│ │ │ │ +
34namespace OpenSubdiv {
│ │ │ │ +
35namespace OPENSUBDIV_VERSION {
│ │ │ │
36
│ │ │ │ -
37namespace OpenSubdiv {
│ │ │ │ -
38namespace OPENSUBDIV_VERSION {
│ │ │ │ -
39
│ │ │ │ -
40namespace Far {
│ │ │ │ -
41
│ │ │ │ -
42// Forward declarations for friends:
│ │ │ │ -
43class PatchTableBuilder;
│ │ │ │ -
44
│ │ │ │ -
45template <typename REAL> class StencilTableFactoryReal;
│ │ │ │ -
46template <typename REAL> class LimitStencilTableFactoryReal;
│ │ │ │ +
37namespace Far {
│ │ │ │ +
38
│ │ │ │ +
│ │ │ │ + │ │ │ │
47
│ │ │ │ -
52template <typename REAL>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
54public:
│ │ │ │ +
48public:
│ │ │ │ +
49
│ │ │ │ + │ │ │ │ +
52
│ │ │ │ + │ │ │ │
55
│ │ │ │ - │ │ │ │ -
58
│ │ │ │ -
│ │ │ │ -
67 StencilReal(int * size, Index * indices, REAL * weights)
│ │ │ │ -
68 : _size(size), _indices(indices), _weights(weights) { }
│ │ │ │ -
│ │ │ │ -
69
│ │ │ │ -
│ │ │ │ -
71 StencilReal(StencilReal const & other) {
│ │ │ │ -
72 _size = other._size;
│ │ │ │ -
73 _indices = other._indices;
│ │ │ │ -
74 _weights = other._weights;
│ │ │ │ -
75 }
│ │ │ │ -
│ │ │ │ -
76
│ │ │ │ -
│ │ │ │ -
78 int GetSize() const {
│ │ │ │ -
79 return *_size;
│ │ │ │ -
80 }
│ │ │ │ -
│ │ │ │ -
81
│ │ │ │ -
│ │ │ │ -
83 int * GetSizePtr() const {
│ │ │ │ -
84 return _size;
│ │ │ │ -
85 }
│ │ │ │ -
│ │ │ │ -
86
│ │ │ │ -
│ │ │ │ -
88 Index const * GetVertexIndices() const {
│ │ │ │ -
89 return _indices;
│ │ │ │ -
90 }
│ │ │ │ -
│ │ │ │ +
57
│ │ │ │ +
60
│ │ │ │ +
63 int GetNumFaces() const;
│ │ │ │ +
64
│ │ │ │ +
67 int GetFaceId(Index f) const;
│ │ │ │ +
68
│ │ │ │ + │ │ │ │ +
84 TopologyRefiner const &refiner,
│ │ │ │ +
85 int face, int quadrant,
│ │ │ │ +
86 int adjFaces[4], int adjEdges[4]) const;
│ │ │ │ +
87
│ │ │ │ +
89
│ │ │ │ +
90private:
│ │ │ │
91
│ │ │ │ -
│ │ │ │ -
93 REAL const * GetWeights() const {
│ │ │ │ -
94 return _weights;
│ │ │ │ -
95 }
│ │ │ │ -
│ │ │ │ -
96
│ │ │ │ -
98 void Next() {
│ │ │ │ -
99 int stride = *_size;
│ │ │ │ -
100 ++_size;
│ │ │ │ -
101 _indices += stride;
│ │ │ │ -
102 _weights += stride;
│ │ │ │ -
103 }
│ │ │ │ -
104
│ │ │ │ -
105protected:
│ │ │ │ -
106 friend class StencilTableFactoryReal<REAL>;
│ │ │ │ -
107 friend class LimitStencilTableFactoryReal<REAL>;
│ │ │ │ -
108
│ │ │ │ -
109 int * _size;
│ │ │ │ - │ │ │ │ -
111 REAL * _weights;
│ │ │ │ -
112};
│ │ │ │ -
│ │ │ │ -
113
│ │ │ │ -
│ │ │ │ -
116class Stencil : public StencilReal<float> {
│ │ │ │ -
117protected:
│ │ │ │ - │ │ │ │ -
119
│ │ │ │ -
120public:
│ │ │ │ - │ │ │ │ -
122 Stencil(BaseStencil const & other) : BaseStencil(other) { }
│ │ │ │ -
│ │ │ │ -
123 Stencil(int * size, Index * indices, float * weights)
│ │ │ │ -
124 : BaseStencil(size, indices, weights) { }
│ │ │ │ -
│ │ │ │ -
125};
│ │ │ │ -
│ │ │ │ -
126
│ │ │ │ -
127
│ │ │ │ -
140template <typename REAL>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
142protected:
│ │ │ │ -
143 StencilTableReal(int numControlVerts,
│ │ │ │ -
144 std::vector<int> const& offsets,
│ │ │ │ -
145 std::vector<int> const& sizes,
│ │ │ │ -
146 std::vector<int> const& sources,
│ │ │ │ -
147 std::vector<REAL> const& weights,
│ │ │ │ -
148 bool includeCoarseVerts,
│ │ │ │ -
149 size_t firstOffset);
│ │ │ │ -
150
│ │ │ │ -
151public:
│ │ │ │ -
152
│ │ │ │ -
153 virtual ~StencilTableReal() {};
│ │ │ │ -
154
│ │ │ │ -
│ │ │ │ -
156 int GetNumStencils() const {
│ │ │ │ -
157 return (int)_sizes.size();
│ │ │ │ -
158 }
│ │ │ │ -
│ │ │ │ -
159
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
162 return _numControlVertices;
│ │ │ │ -
163 }
│ │ │ │ -
│ │ │ │ -
164
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
167
│ │ │ │ -
│ │ │ │ -
169 std::vector<int> const & GetSizes() const {
│ │ │ │ -
170 return _sizes;
│ │ │ │ -
171 }
│ │ │ │ -
│ │ │ │ -
172
│ │ │ │ -
│ │ │ │ -
174 std::vector<Index> const & GetOffsets() const {
│ │ │ │ -
175 return _offsets;
│ │ │ │ -
176 }
│ │ │ │ -
│ │ │ │ -
177
│ │ │ │ -
│ │ │ │ -
179 std::vector<Index> const & GetControlIndices() const {
│ │ │ │ -
180 return _indices;
│ │ │ │ -
181 }
│ │ │ │ -
│ │ │ │ -
182
│ │ │ │ -
│ │ │ │ -
184 std::vector<REAL> const & GetWeights() const {
│ │ │ │ -
185 return _weights;
│ │ │ │ -
186 }
│ │ │ │ -
│ │ │ │ -
187
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
190
│ │ │ │ -
204 template <class T, class U>
│ │ │ │ -
│ │ │ │ -
205 void UpdateValues(T const &srcValues, U &dstValues, Index start=-1, Index end=-1) const {
│ │ │ │ -
206 this->update(srcValues, dstValues, _weights, start, end);
│ │ │ │ -
207 }
│ │ │ │ -
│ │ │ │ -
208
│ │ │ │ -
209 template <class T1, class T2, class U>
│ │ │ │ -
│ │ │ │ -
210 void UpdateValues(T1 const &srcBase, int numBase, T2 const &srcRef,
│ │ │ │ -
211 U &dstValues, Index start=-1, Index end=-1) const {
│ │ │ │ -
212 this->update(srcBase, numBase, srcRef, dstValues, _weights, start, end);
│ │ │ │ -
213 }
│ │ │ │ -
│ │ │ │ -
214
│ │ │ │ -
215 // Pointer interface for backward compatibility
│ │ │ │ -
216 template <class T, class U>
│ │ │ │ -
│ │ │ │ -
217 void UpdateValues(T const *src, U *dst, Index start=-1, Index end=-1) const {
│ │ │ │ -
218 this->update(src, dst, _weights, start, end);
│ │ │ │ -
219 }
│ │ │ │ -
│ │ │ │ -
220 template <class T1, class T2, class U>
│ │ │ │ -
│ │ │ │ -
221 void UpdateValues(T1 const *srcBase, int numBase, T2 const *srcRef,
│ │ │ │ -
222 U *dst, Index start=-1, Index end=-1) const {
│ │ │ │ -
223 this->update(srcBase, numBase, srcRef, dst, _weights, start, end);
│ │ │ │ -
224 }
│ │ │ │ -
│ │ │ │ -
225
│ │ │ │ -
227 void Clear();
│ │ │ │ -
228
│ │ │ │ -
229protected:
│ │ │ │ -
230
│ │ │ │ -
231 // Update values by applying cached stencil weights to new control values
│ │ │ │ -
232 template <class T, class U>
│ │ │ │ -
│ │ │ │ -
233 void update( T const &srcValues, U &dstValues,
│ │ │ │ -
234 std::vector<REAL> const & valueWeights, Index start, Index end) const;
│ │ │ │ -
235 template <class T1, class T2, class U>
│ │ │ │ -
│ │ │ │ -
236 void update( T1 const &srcBase, int numBase, T2 const &srcRef, U &dstValues,
│ │ │ │ -
237 std::vector<REAL> const & valueWeights, Index start, Index end) const;
│ │ │ │ -
238
│ │ │ │ -
239 // Populate the offsets table from the stencil sizes in _sizes (factory helper)
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
241
│ │ │ │ -
242 // Resize the table arrays (factory helper)
│ │ │ │ -
│ │ │ │ -
243 void resize(int nstencils, int nelems);
│ │ │ │ -
244
│ │ │ │ -
245 // Reserves the table arrays (factory helper)
│ │ │ │ -
│ │ │ │ -
246 void reserve(int nstencils, int nelems);
│ │ │ │ -
247
│ │ │ │ -
248 // Reallocates the table arrays to remove excess capacity (factory helper)
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
250
│ │ │ │ -
251 // Performs any final operations on internal tables (factory helper)
│ │ │ │ -
│ │ │ │ -
252 void finalize();
│ │ │ │ -
253
│ │ │ │ -
254protected:
│ │ │ │ - │ │ │ │ -
256 StencilTableReal(int numControlVerts)
│ │ │ │ -
257 : _numControlVertices(numControlVerts)
│ │ │ │ -
258 { }
│ │ │ │ -
259
│ │ │ │ -
260 friend class StencilTableFactoryReal<REAL>;
│ │ │ │ - │ │ │ │ -
262
│ │ │ │ -
263 int _numControlVertices; // number of control vertices
│ │ │ │ -
264
│ │ │ │ -
265 std::vector<int> _sizes; // number of coefficients for each stencil
│ │ │ │ -
266 std::vector<Index> _offsets, // offset to the start of each stencil
│ │ │ │ -
267 _indices; // indices of contributing coarse vertices
│ │ │ │ -
268 std::vector<REAL> _weights; // stencil weight coefficients
│ │ │ │ -
269};
│ │ │ │ -
270
│ │ │ │ -
│ │ │ │ -
273class StencilTable : public StencilTableReal<float> {
│ │ │ │ -
274protected:
│ │ │ │ - │ │ │ │ -
276
│ │ │ │ -
277public:
│ │ │ │ -
│ │ │ │ -
278 Stencil GetStencil(Index index) const {
│ │ │ │ -
279 return Stencil(BaseTable::GetStencil(index));
│ │ │ │ -
280 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
281 Stencil operator[] (Index index) const {
│ │ │ │ -
282 return Stencil(BaseTable::GetStencil(index));
│ │ │ │ -
283 }
│ │ │ │ -
│ │ │ │ -
284
│ │ │ │ -
285protected:
│ │ │ │ - │ │ │ │ -
287 StencilTable(int numControlVerts) : BaseTable(numControlVerts) { }
│ │ │ │ -
│ │ │ │ -
288 StencilTable(int numControlVerts,
│ │ │ │ -
289 std::vector<int> const& offsets,
│ │ │ │ -
290 std::vector<int> const& sizes,
│ │ │ │ -
291 std::vector<int> const& sources,
│ │ │ │ -
292 std::vector<float> const& weights,
│ │ │ │ -
293 bool includeCoarseVerts,
│ │ │ │ -
294 size_t firstOffset)
│ │ │ │ -
295 : BaseTable(numControlVerts, offsets,
│ │ │ │ -
296 sizes, sources, weights, includeCoarseVerts, firstOffset) { }
│ │ │ │ -
│ │ │ │ -
297};
│ │ │ │ -
│ │ │ │ -
298
│ │ │ │ -
299
│ │ │ │ -
302template <typename REAL>
│ │ │ │ -
│ │ │ │ -
303class LimitStencilReal : public StencilReal<REAL> {
│ │ │ │ -
304public:
│ │ │ │ -
305
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
325 Index * indices,
│ │ │ │ -
326 REAL * weights,
│ │ │ │ -
327 REAL * duWeights=0,
│ │ │ │ -
328 REAL * dvWeights=0,
│ │ │ │ -
329 REAL * duuWeights=0,
│ │ │ │ -
330 REAL * duvWeights=0,
│ │ │ │ -
331 REAL * dvvWeights=0)
│ │ │ │ -
332 : StencilReal<REAL>(size, indices, weights),
│ │ │ │ -
333 _duWeights(duWeights),
│ │ │ │ -
334 _dvWeights(dvWeights),
│ │ │ │ -
335 _duuWeights(duuWeights),
│ │ │ │ -
336 _duvWeights(duvWeights),
│ │ │ │ -
337 _dvvWeights(dvvWeights) {
│ │ │ │ -
338 }
│ │ │ │ -
│ │ │ │ -
339
│ │ │ │ -
│ │ │ │ -
341 REAL const * GetDuWeights() const {
│ │ │ │ -
342 return _duWeights;
│ │ │ │ -
343 }
│ │ │ │ -
│ │ │ │ -
344
│ │ │ │ -
│ │ │ │ -
346 REAL const * GetDvWeights() const {
│ │ │ │ -
347 return _dvWeights;
│ │ │ │ -
348 }
│ │ │ │ -
│ │ │ │ -
349
│ │ │ │ -
│ │ │ │ -
351 REAL const * GetDuuWeights() const {
│ │ │ │ -
352 return _duuWeights;
│ │ │ │ -
353 }
│ │ │ │ -
│ │ │ │ -
354
│ │ │ │ -
│ │ │ │ -
356 REAL const * GetDuvWeights() const {
│ │ │ │ -
357 return _duvWeights;
│ │ │ │ -
358 }
│ │ │ │ -
│ │ │ │ -
359
│ │ │ │ -
│ │ │ │ -
361 REAL const * GetDvvWeights() const {
│ │ │ │ -
362 return _dvvWeights;
│ │ │ │ -
363 }
│ │ │ │ -
│ │ │ │ -
364
│ │ │ │ -
366 void Next() {
│ │ │ │ -
367 int stride = *this->_size;
│ │ │ │ -
368 ++this->_size;
│ │ │ │ -
369 this->_indices += stride;
│ │ │ │ -
370 this->_weights += stride;
│ │ │ │ -
371 if (_duWeights) _duWeights += stride;
│ │ │ │ -
372 if (_dvWeights) _dvWeights += stride;
│ │ │ │ -
373 if (_duuWeights) _duuWeights += stride;
│ │ │ │ -
374 if (_duvWeights) _duvWeights += stride;
│ │ │ │ -
375 if (_dvvWeights) _dvvWeights += stride;
│ │ │ │ -
376 }
│ │ │ │ -
377
│ │ │ │ -
378private:
│ │ │ │ -
379
│ │ │ │ -
380 friend class StencilTableFactoryReal<REAL>;
│ │ │ │ -
381 friend class LimitStencilTableFactoryReal<REAL>;
│ │ │ │ -
382
│ │ │ │ -
383 REAL * _duWeights, // pointer to stencil u derivative limit weights
│ │ │ │ -
384 * _dvWeights, // pointer to stencil v derivative limit weights
│ │ │ │ -
385 * _duuWeights, // pointer to stencil uu derivative limit weights
│ │ │ │ -
386 * _duvWeights, // pointer to stencil uv derivative limit weights
│ │ │ │ -
387 * _dvvWeights; // pointer to stencil vv derivative limit weights
│ │ │ │ -
388};
│ │ │ │ -
│ │ │ │ -
389
│ │ │ │ -
│ │ │ │ -
392class LimitStencil : public LimitStencilReal<float> {
│ │ │ │ -
393protected:
│ │ │ │ - │ │ │ │ -
395
│ │ │ │ -
396public:
│ │ │ │ -
397 LimitStencil(BaseStencil const & other) : BaseStencil(other) { }
│ │ │ │ -
│ │ │ │ -
398 LimitStencil(int* size, Index * indices, float * weights,
│ │ │ │ -
399 float * duWeights=0, float * dvWeights=0,
│ │ │ │ -
400 float * duuWeights=0, float * duvWeights=0, float * dvvWeights=0)
│ │ │ │ -
401 : BaseStencil(size, indices, weights,
│ │ │ │ -
402 duWeights, dvWeights, duuWeights, duvWeights, dvvWeights) { }
│ │ │ │ -
│ │ │ │ -
403};
│ │ │ │ -
│ │ │ │ -
404
│ │ │ │ -
405
│ │ │ │ -
408template <typename REAL>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
410protected:
│ │ │ │ - │ │ │ │ -
412 int numControlVerts,
│ │ │ │ -
413 std::vector<int> const& offsets,
│ │ │ │ -
414 std::vector<int> const& sizes,
│ │ │ │ -
415 std::vector<int> const& sources,
│ │ │ │ -
416 std::vector<REAL> const& weights,
│ │ │ │ -
417 std::vector<REAL> const& duWeights,
│ │ │ │ -
418 std::vector<REAL> const& dvWeights,
│ │ │ │ -
419 std::vector<REAL> const& duuWeights,
│ │ │ │ -
420 std::vector<REAL> const& duvWeights,
│ │ │ │ -
421 std::vector<REAL> const& dvvWeights,
│ │ │ │ -
422 bool includeCoarseVerts,
│ │ │ │ -
423 size_t firstOffset);
│ │ │ │ -
424
│ │ │ │ -
425public:
│ │ │ │ -
426
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
429
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
432
│ │ │ │ -
│ │ │ │ -
434 std::vector<REAL> const & GetDuWeights() const {
│ │ │ │ -
435 return _duWeights;
│ │ │ │ -
436 }
│ │ │ │ -
│ │ │ │ -
437
│ │ │ │ -
│ │ │ │ -
439 std::vector<REAL> const & GetDvWeights() const {
│ │ │ │ -
440 return _dvWeights;
│ │ │ │ -
441 }
│ │ │ │ -
│ │ │ │ -
442
│ │ │ │ -
│ │ │ │ -
444 std::vector<REAL> const & GetDuuWeights() const {
│ │ │ │ -
445 return _duuWeights;
│ │ │ │ -
446 }
│ │ │ │ -
│ │ │ │ -
447
│ │ │ │ -
│ │ │ │ -
449 std::vector<REAL> const & GetDuvWeights() const {
│ │ │ │ -
450 return _duvWeights;
│ │ │ │ -
451 }
│ │ │ │ -
│ │ │ │ -
452
│ │ │ │ -
│ │ │ │ -
454 std::vector<REAL> const & GetDvvWeights() const {
│ │ │ │ -
455 return _dvvWeights;
│ │ │ │ -
456 }
│ │ │ │ -
│ │ │ │ -
457
│ │ │ │ -
475 template <class T, class U>
│ │ │ │ -
│ │ │ │ -
476 void UpdateDerivs(T const & srcValues, U & uderivs, U & vderivs,
│ │ │ │ -
477 int start=-1, int end=-1) const {
│ │ │ │ -
478
│ │ │ │ -
479 this->update(srcValues, uderivs, _duWeights, start, end);
│ │ │ │ -
480 this->update(srcValues, vderivs, _dvWeights, start, end);
│ │ │ │ -
481 }
│ │ │ │ -
│ │ │ │ -
482
│ │ │ │ -
483 template <class T1, class T2, class U>
│ │ │ │ -
│ │ │ │ -
484 void UpdateDerivs(T1 const & srcBase, int numBase, T2 const & srcRef,
│ │ │ │ -
485 U & uderivs, U & vderivs, int start=-1, int end=-1) const {
│ │ │ │ -
486
│ │ │ │ -
487 this->update(srcBase, numBase, srcRef, uderivs, _duWeights, start, end);
│ │ │ │ -
488 this->update(srcBase, numBase, srcRef, vderivs, _dvWeights, start, end);
│ │ │ │ -
489 }
│ │ │ │ -
│ │ │ │ -
490
│ │ │ │ -
491 // Pointer interface for backward compatibility
│ │ │ │ -
492 template <class T, class U>
│ │ │ │ -
│ │ │ │ -
493 void UpdateDerivs(T const *src, U *uderivs, U *vderivs,
│ │ │ │ -
494 int start=-1, int end=-1) const {
│ │ │ │ -
495
│ │ │ │ -
496 this->update(src, uderivs, _duWeights, start, end);
│ │ │ │ -
497 this->update(src, vderivs, _dvWeights, start, end);
│ │ │ │ -
498 }
│ │ │ │ -
│ │ │ │ -
499 template <class T1, class T2, class U>
│ │ │ │ -
│ │ │ │ -
500 void UpdateDerivs(T1 const *srcBase, int numBase, T2 const *srcRef,
│ │ │ │ -
501 U *uderivs, U *vderivs, int start=-1, int end=-1) const {
│ │ │ │ -
502
│ │ │ │ -
503 this->update(srcBase, numBase, srcRef, uderivs, _duWeights, start, end);
│ │ │ │ -
504 this->update(srcBase, numBase, srcRef, vderivs, _dvWeights, start, end);
│ │ │ │ -
505 }
│ │ │ │ -
│ │ │ │ -
506
│ │ │ │ -
527 template <class T, class U>
│ │ │ │ -
│ │ │ │ -
528 void Update2ndDerivs(T const & srcValues,
│ │ │ │ -
529 U & uuderivs, U & uvderivs, U & vvderivs,
│ │ │ │ -
530 int start=-1, int end=-1) const {
│ │ │ │ -
531
│ │ │ │ -
532 this->update(srcValues, uuderivs, _duuWeights, start, end);
│ │ │ │ -
533 this->update(srcValues, uvderivs, _duvWeights, start, end);
│ │ │ │ -
534 this->update(srcValues, vvderivs, _dvvWeights, start, end);
│ │ │ │ -
535 }
│ │ │ │ -
│ │ │ │ -
536
│ │ │ │ -
537 template <class T1, class T2, class U>
│ │ │ │ -
│ │ │ │ -
538 void Update2ndDerivs(T1 const & srcBase, int numBase, T2 const & srcRef,
│ │ │ │ -
539 U & uuderivs, U & uvderivs, U & vvderivs, int start=-1, int end=-1) const {
│ │ │ │ -
540
│ │ │ │ -
541 this->update(srcBase, numBase, srcRef, uuderivs, _duuWeights, start, end);
│ │ │ │ -
542 this->update(srcBase, numBase, srcRef, uvderivs, _duvWeights, start, end);
│ │ │ │ -
543 this->update(srcBase, numBase, srcRef, vvderivs, _dvvWeights, start, end);
│ │ │ │ -
544 }
│ │ │ │ -
│ │ │ │ -
545
│ │ │ │ -
546 // Pointer interface for backward compatibility
│ │ │ │ -
547 template <class T, class U>
│ │ │ │ -
│ │ │ │ -
548 void Update2ndDerivs(T const *src, T *uuderivs, U *uvderivs, U *vvderivs,
│ │ │ │ -
549 int start=-1, int end=-1) const {
│ │ │ │ -
550
│ │ │ │ -
551 this->update(src, uuderivs, _duuWeights, start, end);
│ │ │ │ -
552 this->update(src, uvderivs, _duvWeights, start, end);
│ │ │ │ -
553 this->update(src, vvderivs, _dvvWeights, start, end);
│ │ │ │ -
554 }
│ │ │ │ -
│ │ │ │ -
555 template <class T1, class T2, class U>
│ │ │ │ -
│ │ │ │ -
556 void Update2ndDerivs(T1 const *srcBase, int numBase, T2 const *srcRef,
│ │ │ │ -
557 U *uuderivs, U *uvderivs, U *vvderivs, int start=-1, int end=-1) const {
│ │ │ │ -
558
│ │ │ │ -
559 this->update(srcBase, numBase, srcRef, uuderivs, _duuWeights, start, end);
│ │ │ │ -
560 this->update(srcBase, numBase, srcRef, uvderivs, _duvWeights, start, end);
│ │ │ │ -
561 this->update(srcBase, numBase, srcRef, vvderivs, _dvvWeights, start, end);
│ │ │ │ -
562 }
│ │ │ │ -
│ │ │ │ -
563
│ │ │ │ -
565 void Clear();
│ │ │ │ -
566
│ │ │ │ -
567private:
│ │ │ │ -
568 friend class LimitStencilTableFactoryReal<REAL>;
│ │ │ │ -
569
│ │ │ │ -
570 // Resize the table arrays (factory helper)
│ │ │ │ -
571 void resize(int nstencils, int nelems);
│ │ │ │ -
572
│ │ │ │ -
573private:
│ │ │ │ -
574 std::vector<REAL> _duWeights, // u derivative limit stencil weights
│ │ │ │ -
575 _dvWeights, // v derivative limit stencil weights
│ │ │ │ -
576 _duuWeights, // uu derivative limit stencil weights
│ │ │ │ -
577 _duvWeights, // uv derivative limit stencil weights
│ │ │ │ -
578 _dvvWeights; // vv derivative limit stencil weights
│ │ │ │ -
579};
│ │ │ │ -
580
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
584protected:
│ │ │ │ - │ │ │ │ -
586
│ │ │ │ -
587public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
590 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
593 }
│ │ │ │ -
│ │ │ │ -
594
│ │ │ │ -
595protected:
│ │ │ │ -
│ │ │ │ -
596 LimitStencilTable(int numControlVerts,
│ │ │ │ -
597 std::vector<int> const& offsets,
│ │ │ │ -
598 std::vector<int> const& sizes,
│ │ │ │ -
599 std::vector<int> const& sources,
│ │ │ │ -
600 std::vector<float> const& weights,
│ │ │ │ -
601 std::vector<float> const& duWeights,
│ │ │ │ -
602 std::vector<float> const& dvWeights,
│ │ │ │ -
603 std::vector<float> const& duuWeights,
│ │ │ │ -
604 std::vector<float> const& duvWeights,
│ │ │ │ -
605 std::vector<float> const& dvvWeights,
│ │ │ │ -
606 bool includeCoarseVerts,
│ │ │ │ -
607 size_t firstOffset)
│ │ │ │ -
608 : BaseTable(numControlVerts,
│ │ │ │ -
609 offsets, sizes, sources, weights,
│ │ │ │ -
610 duWeights, dvWeights, duuWeights, duvWeights, dvvWeights,
│ │ │ │ -
611 includeCoarseVerts, firstOffset) { }
│ │ │ │ -
│ │ │ │ -
612};
│ │ │ │ -
│ │ │ │ -
613
│ │ │ │ -
614
│ │ │ │ -
615// Update values by applying cached stencil weights to new control values
│ │ │ │ -
616template <typename REAL>
│ │ │ │ -
617template <class T1, class T2, class U> void
│ │ │ │ -
│ │ │ │ -
618StencilTableReal<REAL>::update(T1 const &srcBase, int numBase,
│ │ │ │ -
619 T2 const &srcRef, U &dstValues,
│ │ │ │ -
620 std::vector<REAL> const &valueWeights, Index start, Index end) const {
│ │ │ │ -
621
│ │ │ │ -
622 int const * sizes = &_sizes.at(0);
│ │ │ │ -
623 Index const * indices = &_indices.at(0);
│ │ │ │ -
624 REAL const * weights = &valueWeights.at(0);
│ │ │ │ -
625
│ │ │ │ -
626 if (start > 0) {
│ │ │ │ -
627 assert(start < (Index)_offsets.size());
│ │ │ │ -
628 sizes += start;
│ │ │ │ -
629 indices += _offsets[start];
│ │ │ │ -
630 weights += _offsets[start];
│ │ │ │ -
631 } else {
│ │ │ │ -
632 start = 0;
│ │ │ │ -
633 }
│ │ │ │ -
634
│ │ │ │ -
635 int nstencils = ((end < start) ? GetNumStencils() : end) - start;
│ │ │ │ -
636
│ │ │ │ -
637 for (int i = 0; i < nstencils; ++i, ++sizes) {
│ │ │ │ -
638 dstValues[start + i].Clear();
│ │ │ │ -
639 for (int j = 0; j < *sizes; ++j, ++indices, ++weights) {
│ │ │ │ -
640 if (*indices < numBase) {
│ │ │ │ -
641 dstValues[start + i].AddWithWeight(srcBase[*indices], *weights);
│ │ │ │ -
642 } else {
│ │ │ │ -
643 dstValues[start + i].AddWithWeight(srcRef[*indices - numBase], *weights);
│ │ │ │ -
644 }
│ │ │ │ -
645 }
│ │ │ │ -
646 }
│ │ │ │ -
647}
│ │ │ │ -
│ │ │ │ -
648template <typename REAL>
│ │ │ │ -
649template <class T, class U> void
│ │ │ │ -
│ │ │ │ -
650StencilTableReal<REAL>::update(T const &srcValues, U &dstValues,
│ │ │ │ -
651 std::vector<REAL> const &valueWeights, Index start, Index end) const {
│ │ │ │ -
652
│ │ │ │ -
653 int const * sizes = &_sizes.at(0);
│ │ │ │ -
654 Index const * indices = &_indices.at(0);
│ │ │ │ -
655 REAL const * weights = &valueWeights.at(0);
│ │ │ │ -
656
│ │ │ │ -
657 if (start > 0) {
│ │ │ │ -
658 assert(start < (Index)_offsets.size());
│ │ │ │ -
659 sizes += start;
│ │ │ │ -
660 indices += _offsets[start];
│ │ │ │ -
661 weights += _offsets[start];
│ │ │ │ -
662 } else {
│ │ │ │ -
663 start = 0;
│ │ │ │ -
664 }
│ │ │ │ -
665
│ │ │ │ -
666 int nstencils = ((end < start) ? GetNumStencils() : end) - start;
│ │ │ │ -
667
│ │ │ │ -
668 for (int i = 0; i < nstencils; ++i, ++sizes) {
│ │ │ │ -
669 dstValues[start + i].Clear();
│ │ │ │ -
670 for (int j = 0; j < *sizes; ++j, ++indices, ++weights) {
│ │ │ │ -
671 dstValues[start + i].AddWithWeight(srcValues[*indices], *weights);
│ │ │ │ -
672 }
│ │ │ │ -
673 }
│ │ │ │ -
674}
│ │ │ │ -
│ │ │ │ -
675
│ │ │ │ -
676template <typename REAL>
│ │ │ │ -
677inline void
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
679 Index offset=0;
│ │ │ │ -
680 int noffsets = (int)_sizes.size();
│ │ │ │ -
681 _offsets.resize(noffsets);
│ │ │ │ -
682 for (int i=0; i<(int)_sizes.size(); ++i ) {
│ │ │ │ -
683 _offsets[i]=offset;
│ │ │ │ -
684 offset+=_sizes[i];
│ │ │ │ -
685 }
│ │ │ │ -
686}
│ │ │ │ -
│ │ │ │ -
687
│ │ │ │ -
688template <typename REAL>
│ │ │ │ -
689inline void
│ │ │ │ -
│ │ │ │ -
690StencilTableReal<REAL>::resize(int nstencils, int nelems) {
│ │ │ │ -
691 _sizes.resize(nstencils);
│ │ │ │ -
692 _indices.resize(nelems);
│ │ │ │ -
693 _weights.resize(nelems);
│ │ │ │ -
694}
│ │ │ │ -
│ │ │ │ -
695
│ │ │ │ -
696template <typename REAL>
│ │ │ │ -
697inline void
│ │ │ │ -
│ │ │ │ -
698StencilTableReal<REAL>::reserve(int nstencils, int nelems) {
│ │ │ │ -
699 _sizes.reserve(nstencils);
│ │ │ │ -
700 _indices.reserve(nelems);
│ │ │ │ -
701 _weights.reserve(nelems);
│ │ │ │ -
702}
│ │ │ │ -
│ │ │ │ -
703
│ │ │ │ -
704template <typename REAL>
│ │ │ │ -
705inline void
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
707 std::vector<int>(_sizes).swap(_sizes);
│ │ │ │ -
708 std::vector<Index>(_indices).swap(_indices);
│ │ │ │ -
709 std::vector<REAL>(_weights).swap(_weights);
│ │ │ │ -
710}
│ │ │ │ -
│ │ │ │ -
711
│ │ │ │ -
712template <typename REAL>
│ │ │ │ -
713inline void
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
715 shrinkToFit();
│ │ │ │ -
716 generateOffsets();
│ │ │ │ -
717}
│ │ │ │ -
│ │ │ │ -
718
│ │ │ │ -
719// Returns a Stencil at index i in the table
│ │ │ │ -
720template <typename REAL>
│ │ │ │ - │ │ │ │ -
│ │ │ │ - │ │ │ │ -
723 assert((! _offsets.empty()) && i<(int)_offsets.size());
│ │ │ │ -
724
│ │ │ │ -
725 Index ofs = _offsets[i];
│ │ │ │ -
726
│ │ │ │ -
727 return StencilReal<REAL>(const_cast<int*>(&_sizes[i]),
│ │ │ │ -
728 const_cast<Index*>(&_indices[ofs]),
│ │ │ │ -
729 const_cast<REAL*>(&_weights[ofs]));
│ │ │ │ -
730}
│ │ │ │ -
│ │ │ │ -
731
│ │ │ │ -
732template <typename REAL>
│ │ │ │ - │ │ │ │ -
│ │ │ │ - │ │ │ │ -
735 return GetStencil(index);
│ │ │ │ -
736}
│ │ │ │ -
│ │ │ │ -
737
│ │ │ │ -
738template <typename REAL>
│ │ │ │ -
739inline void
│ │ │ │ -
740LimitStencilTableReal<REAL>::resize(int nstencils, int nelems) {
│ │ │ │ -
741 StencilTableReal<REAL>::resize(nstencils, nelems);
│ │ │ │ -
742 _duWeights.resize(nelems);
│ │ │ │ -
743 _dvWeights.resize(nelems);
│ │ │ │ -
744}
│ │ │ │ -
745
│ │ │ │ -
746// Returns a LimitStencil at index i in the table
│ │ │ │ -
747template <typename REAL>
│ │ │ │ -
748inline LimitStencilReal<REAL>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
750 assert((! this->GetOffsets().empty()) && i<(int)this->GetOffsets().size());
│ │ │ │ -
751
│ │ │ │ -
752 Index ofs = this->GetOffsets()[i];
│ │ │ │ -
753
│ │ │ │ -
754 if (!_duWeights.empty() && !_dvWeights.empty() &&
│ │ │ │ -
755 !_duuWeights.empty() && !_duvWeights.empty() && !_dvvWeights.empty()) {
│ │ │ │ - │ │ │ │ -
757 const_cast<int *>(&this->GetSizes()[i]),
│ │ │ │ -
758 const_cast<Index *>(&this->GetControlIndices()[ofs]),
│ │ │ │ -
759 const_cast<REAL *>(&this->GetWeights()[ofs]),
│ │ │ │ -
760 const_cast<REAL *>(&GetDuWeights()[ofs]),
│ │ │ │ -
761 const_cast<REAL *>(&GetDvWeights()[ofs]),
│ │ │ │ -
762 const_cast<REAL *>(&GetDuuWeights()[ofs]),
│ │ │ │ -
763 const_cast<REAL *>(&GetDuvWeights()[ofs]),
│ │ │ │ -
764 const_cast<REAL *>(&GetDvvWeights()[ofs]) );
│ │ │ │ -
765 } else if (!_duWeights.empty() && !_dvWeights.empty()) {
│ │ │ │ - │ │ │ │ -
767 const_cast<int *>(&this->GetSizes()[i]),
│ │ │ │ -
768 const_cast<Index *>(&this->GetControlIndices()[ofs]),
│ │ │ │ -
769 const_cast<REAL *>(&this->GetWeights()[ofs]),
│ │ │ │ -
770 const_cast<REAL *>(&GetDuWeights()[ofs]),
│ │ │ │ -
771 const_cast<REAL *>(&GetDvWeights()[ofs]) );
│ │ │ │ -
772 } else {
│ │ │ │ - │ │ │ │ -
774 const_cast<int *>(&this->GetSizes()[i]),
│ │ │ │ -
775 const_cast<Index *>(&this->GetControlIndices()[ofs]),
│ │ │ │ -
776 const_cast<REAL *>(&this->GetWeights()[ofs]) );
│ │ │ │ -
777 }
│ │ │ │ -
778}
│ │ │ │ -
│ │ │ │ -
779
│ │ │ │ -
780template <typename REAL>
│ │ │ │ - │ │ │ │ -
│ │ │ │ - │ │ │ │ -
783 return GetLimitStencil(index);
│ │ │ │ -
784}
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
785
│ │ │ │ -
786} // end namespace Far
│ │ │ │ -
787
│ │ │ │ -
788} // end namespace OPENSUBDIV_VERSION
│ │ │ │ -
789using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
790
│ │ │ │ -
791} // end namespace OpenSubdiv
│ │ │ │ -
792
│ │ │ │ -
793#endif // OPENSUBDIV3_FAR_STENCILTABLE_H
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
│ │ │ │ +
92 void initializePtexIndices(TopologyRefiner const &refiner);
│ │ │ │ +
93
│ │ │ │ +
94private:
│ │ │ │ +
95
│ │ │ │ +
96 std::vector<Index> _ptexIndices;
│ │ │ │ +
97};
│ │ │ │ +
│ │ │ │ +
98
│ │ │ │ +
99
│ │ │ │ +
100} // end namespace Far
│ │ │ │ +
101
│ │ │ │ +
102} // end namespace OPENSUBDIV_VERSION
│ │ │ │ +
103using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
104} // end namespace OpenSubdiv
│ │ │ │ +
105
│ │ │ │ +
106#endif /* OPENSUBDIV3_FAR_PTEX_INDICES_H */
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
StencilReal(int *size, Index *indices, REAL *weights)
Constructor.
│ │ │ │ -
void Next()
Advance to the next stencil in the table.
│ │ │ │ -
StencilReal(StencilReal const &other)
Copy constructor.
│ │ │ │ - │ │ │ │ -
Index const * GetVertexIndices() const
Returns the control vertices' indices.
│ │ │ │ -
int GetSize() const
Returns the size of the stencil.
│ │ │ │ - │ │ │ │ -
int * GetSizePtr() const
Returns the size of the stencil as a pointer.
│ │ │ │ -
REAL const * GetWeights() const
Returns the interpolation weights.
│ │ │ │ -
Vertex stencil class wrapping the template for compatibility.
│ │ │ │ - │ │ │ │ -
Stencil(int *size, Index *indices, float *weights)
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
int GetNumControlVertices() const
Returns the number of control vertices indexed in the table.
│ │ │ │ - │ │ │ │ - │ │ │ │ -
void update(T1 const &srcBase, int numBase, T2 const &srcRef, U &dstValues, std::vector< REAL > const &valueWeights, Index start, Index end) const
│ │ │ │ -
void UpdateValues(T1 const &srcBase, int numBase, T2 const &srcRef, U &dstValues, Index start=-1, Index end=-1) const
│ │ │ │ -
std::vector< Index > const & GetControlIndices() const
Returns the indices of the control vertices.
│ │ │ │ - │ │ │ │ -
StencilReal< REAL > operator[](Index index) const
Returns the stencil at index i in the table.
│ │ │ │ - │ │ │ │ -
void update(T const &srcValues, U &dstValues, std::vector< REAL > const &valueWeights, Index start, Index end) const
│ │ │ │ -
std::vector< int > const & GetSizes() const
Returns the number of control vertices of each stencil in the table.
│ │ │ │ -
int GetNumStencils() const
Returns the number of stencils in the table.
│ │ │ │ - │ │ │ │ -
std::vector< Index > const & GetOffsets() const
Returns the offset to a given stencil (factory may leave empty)
│ │ │ │ -
StencilReal< REAL > GetStencil(Index i) const
Returns a Stencil at index i in the table.
│ │ │ │ - │ │ │ │ - │ │ │ │ -
void Clear()
Clears the stencils from the table.
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
std::vector< REAL > const & GetWeights() const
Returns the stencil interpolation weights.
│ │ │ │ -
void UpdateValues(T1 const *srcBase, int numBase, T2 const *srcRef, U *dst, Index start=-1, Index end=-1) const
│ │ │ │ -
StencilTableReal(int numControlVerts, std::vector< int > const &offsets, std::vector< int > const &sizes, std::vector< int > const &sources, std::vector< REAL > const &weights, bool includeCoarseVerts, size_t firstOffset)
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
void UpdateValues(T const *src, U *dst, Index start=-1, Index end=-1) const
│ │ │ │ -
void UpdateValues(T const &srcValues, U &dstValues, Index start=-1, Index end=-1) const
Updates point values based on the control values.
│ │ │ │ -
Stencil table class wrapping the template for compatibility.
│ │ │ │ -
StencilTable(int numControlVerts, std::vector< int > const &offsets, std::vector< int > const &sizes, std::vector< int > const &sources, std::vector< float > const &weights, bool includeCoarseVerts, size_t firstOffset)
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
REAL const * GetDuvWeights() const
Returns the uv derivative weights.
│ │ │ │ -
REAL const * GetDvWeights() const
Returns the v derivative weights.
│ │ │ │ -
void Next()
Advance to the next stencil in the table.
│ │ │ │ -
REAL const * GetDvvWeights() const
Returns the vv derivative weights.
│ │ │ │ -
LimitStencilReal(int *size, Index *indices, REAL *weights, REAL *duWeights=0, REAL *dvWeights=0, REAL *duuWeights=0, REAL *duvWeights=0, REAL *dvvWeights=0)
Constructor.
│ │ │ │ -
REAL const * GetDuWeights() const
Returns the u derivative weights.
│ │ │ │ -
REAL const * GetDuuWeights() const
Returns the uu derivative weights.
│ │ │ │ -
Limit point stencil class wrapping the template for compatibility.
│ │ │ │ - │ │ │ │ - │ │ │ │ -
LimitStencil(int *size, Index *indices, float *weights, float *duWeights=0, float *dvWeights=0, float *duuWeights=0, float *duvWeights=0, float *dvvWeights=0)
│ │ │ │ - │ │ │ │ -
std::vector< REAL > const & GetDuuWeights() const
Returns the 'uu' derivative stencil interpolation weights.
│ │ │ │ -
LimitStencilReal< REAL > operator[](Index index) const
Returns the limit stencil at index i in the table.
│ │ │ │ -
std::vector< REAL > const & GetDvvWeights() const
Returns the 'vv' derivative stencil interpolation weights.
│ │ │ │ -
void UpdateDerivs(T const *src, U *uderivs, U *vderivs, int start=-1, int end=-1) const
│ │ │ │ -
void Update2ndDerivs(T const *src, T *uuderivs, U *uvderivs, U *vvderivs, int start=-1, int end=-1) const
│ │ │ │ -
std::vector< REAL > const & GetDvWeights() const
Returns the 'v' derivative stencil interpolation weights.
│ │ │ │ -
void Update2ndDerivs(T1 const *srcBase, int numBase, T2 const *srcRef, U *uuderivs, U *uvderivs, U *vvderivs, int start=-1, int end=-1) const
│ │ │ │ -
void UpdateDerivs(T const &srcValues, U &uderivs, U &vderivs, int start=-1, int end=-1) const
Updates derivative values based on the control values.
│ │ │ │ -
LimitStencilReal< REAL > GetLimitStencil(Index i) const
Returns a LimitStencil at index i in the table.
│ │ │ │ -
LimitStencilTableReal(int numControlVerts, std::vector< int > const &offsets, std::vector< int > const &sizes, std::vector< int > const &sources, std::vector< REAL > const &weights, std::vector< REAL > const &duWeights, std::vector< REAL > const &dvWeights, std::vector< REAL > const &duuWeights, std::vector< REAL > const &duvWeights, std::vector< REAL > const &dvvWeights, bool includeCoarseVerts, size_t firstOffset)
│ │ │ │ -
void Update2ndDerivs(T const &srcValues, U &uuderivs, U &uvderivs, U &vvderivs, int start=-1, int end=-1) const
Updates 2nd derivative values based on the control values.
│ │ │ │ -
std::vector< REAL > const & GetDuWeights() const
Returns the 'u' derivative stencil interpolation weights.
│ │ │ │ -
void Clear()
Clears the stencils from the table.
│ │ │ │ -
void Update2ndDerivs(T1 const &srcBase, int numBase, T2 const &srcRef, U &uuderivs, U &uvderivs, U &vvderivs, int start=-1, int end=-1) const
│ │ │ │ -
std::vector< REAL > const & GetDuvWeights() const
Returns the 'uv' derivative stencil interpolation weights.
│ │ │ │ -
void UpdateDerivs(T1 const &srcBase, int numBase, T2 const &srcRef, U &uderivs, U &vderivs, int start=-1, int end=-1) const
│ │ │ │ -
void UpdateDerivs(T1 const *srcBase, int numBase, T2 const *srcRef, U *uderivs, U *vderivs, int start=-1, int end=-1) const
│ │ │ │ -
Limit stencil table class wrapping the template for compatibility.
│ │ │ │ - │ │ │ │ - │ │ │ │ -
LimitStencilTable(int numControlVerts, std::vector< int > const &offsets, std::vector< int > const &sizes, std::vector< int > const &sources, std::vector< float > const &weights, std::vector< float > const &duWeights, std::vector< float > const &dvWeights, std::vector< float > const &duuWeights, std::vector< float > const &duvWeights, std::vector< float > const &dvvWeights, bool includeCoarseVerts, size_t firstOffset)
│ │ │ │ - │ │ │ │ +
Object used to compute and query ptex face indices.
Definition ptexIndices.h:46
│ │ │ │ +
int GetFaceId(Index f) const
Returns the ptex face index given a coarse face 'f' or -1.
│ │ │ │ +
PtexIndices(TopologyRefiner const &refiner)
Constructor.
│ │ │ │ +
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.
│ │ │ │ +
int GetNumFaces() const
Returns the number of ptex faces in the mesh.
│ │ │ │ + │ │ │ │ +
Stores topology data for a specified set of refinement options.
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -stencilTable.h │ │ │ │ │ +ptexIndices.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ -2// Copyright 2013 Pixar │ │ │ │ │ +2// Copyright 2015 Pixar │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ 7// Section 6. Trademarks. is deleted and replaced with: │ │ │ │ │ 8// │ │ │ │ │ 9// 6. Trademarks. This License does not grant permission to use the trade │ │ │ │ │ @@ -23,991 +23,90 @@ │ │ │ │ │ 17// │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ -24 │ │ │ │ │ -25#ifndef OPENSUBDIV3_FAR_STENCILTABLE_H │ │ │ │ │ -26#define OPENSUBDIV3_FAR_STENCILTABLE_H │ │ │ │ │ -27 │ │ │ │ │ -28#include "../version.h" │ │ │ │ │ -29 │ │ │ │ │ +24#ifndef OPENSUBDIV3_FAR_PTEX_INDICES_H │ │ │ │ │ +25#define OPENSUBDIV3_FAR_PTEX_INDICES_H │ │ │ │ │ +26 │ │ │ │ │ +27#include "../version.h" │ │ │ │ │ +28 │ │ │ │ │ +29#include "../far/topologyRefiner.h" │ │ │ │ │ 30#include "../far/types.h" │ │ │ │ │ 31 │ │ │ │ │ -32#include │ │ │ │ │ -33#include │ │ │ │ │ -34#include │ │ │ │ │ -35#include │ │ │ │ │ +32#include │ │ │ │ │ +33 │ │ │ │ │ +34namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ +35namespace OPENSUBDIV_VERSION { │ │ │ │ │ 36 │ │ │ │ │ -37namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ -38namespace OPENSUBDIV_VERSION { │ │ │ │ │ -39 │ │ │ │ │ -40namespace Far { │ │ │ │ │ -41 │ │ │ │ │ -42// Forward declarations for friends: │ │ │ │ │ -43class PatchTableBuilder; │ │ │ │ │ -44 │ │ │ │ │ -45template class StencilTableFactoryReal; │ │ │ │ │ -46template class LimitStencilTableFactoryReal; │ │ │ │ │ +37namespace Far { │ │ │ │ │ +38 │ │ │ │ │ +_4_6class _P_t_e_x_I_n_d_i_c_e_s { │ │ │ │ │ 47 │ │ │ │ │ -52template │ │ │ │ │ -_5_3class _S_t_e_n_c_i_l_R_e_a_l { │ │ │ │ │ -54public: │ │ │ │ │ +48public: │ │ │ │ │ +49 │ │ │ │ │ +_5_1 _P_t_e_x_I_n_d_i_c_e_s(_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const &refiner); │ │ │ │ │ +52 │ │ │ │ │ +_5_4 _~_P_t_e_x_I_n_d_i_c_e_s(); │ │ │ │ │ 55 │ │ │ │ │ -_5_7 _S_t_e_n_c_i_l_R_e_a_l() {} │ │ │ │ │ -58 │ │ │ │ │ -_6_7 _S_t_e_n_c_i_l_R_e_a_l(int * size, _I_n_d_e_x * indices, REAL * weights) │ │ │ │ │ -68 : ___s_i_z_e(size), ___i_n_d_i_c_e_s(indices), ___w_e_i_g_h_t_s(weights) { } │ │ │ │ │ -69 │ │ │ │ │ -_7_1 _S_t_e_n_c_i_l_R_e_a_l(_S_t_e_n_c_i_l_R_e_a_l const & other) { │ │ │ │ │ -72 ___s_i_z_e = other.___s_i_z_e; │ │ │ │ │ -73 ___i_n_d_i_c_e_s = other.___i_n_d_i_c_e_s; │ │ │ │ │ -74 ___w_e_i_g_h_t_s = other.___w_e_i_g_h_t_s; │ │ │ │ │ -75 } │ │ │ │ │ -76 │ │ │ │ │ -_7_8 int _G_e_t_S_i_z_e() const { │ │ │ │ │ -79 return *___s_i_z_e; │ │ │ │ │ -80 } │ │ │ │ │ -81 │ │ │ │ │ -_8_3 int * _G_e_t_S_i_z_e_P_t_r() const { │ │ │ │ │ -84 return ___s_i_z_e; │ │ │ │ │ -85 } │ │ │ │ │ -86 │ │ │ │ │ -_8_8 _I_n_d_e_x const * _G_e_t_V_e_r_t_e_x_I_n_d_i_c_e_s() const { │ │ │ │ │ -89 return ___i_n_d_i_c_e_s; │ │ │ │ │ -90 } │ │ │ │ │ +57 │ │ │ │ │ +60 │ │ │ │ │ +_6_3 int _G_e_t_N_u_m_F_a_c_e_s() const; │ │ │ │ │ +64 │ │ │ │ │ +_6_7 int _G_e_t_F_a_c_e_I_d(_I_n_d_e_x f) const; │ │ │ │ │ +68 │ │ │ │ │ +_8_3 void _G_e_t_A_d_j_a_c_e_n_c_y( │ │ │ │ │ +84 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const &refiner, │ │ │ │ │ +85 int face, int quadrant, │ │ │ │ │ +86 int adjFaces[4], int adjEdges[4]) const; │ │ │ │ │ +87 │ │ │ │ │ +89 │ │ │ │ │ +90private: │ │ │ │ │ 91 │ │ │ │ │ -_9_3 REAL const * _G_e_t_W_e_i_g_h_t_s() const { │ │ │ │ │ -94 return ___w_e_i_g_h_t_s; │ │ │ │ │ -95 } │ │ │ │ │ -96 │ │ │ │ │ -_9_8 void _N_e_x_t() { │ │ │ │ │ -99 int stride = *___s_i_z_e; │ │ │ │ │ -100 ++___s_i_z_e; │ │ │ │ │ -101 ___i_n_d_i_c_e_s += stride; │ │ │ │ │ -102 ___w_e_i_g_h_t_s += stride; │ │ │ │ │ -103 } │ │ │ │ │ -104 │ │ │ │ │ -105protected: │ │ │ │ │ -106 friend class _S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l; │ │ │ │ │ -107 friend class _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l; │ │ │ │ │ -108 │ │ │ │ │ -_1_0_9 int * ___s_i_z_e; │ │ │ │ │ -_1_1_0 _I_n_d_e_x * ___i_n_d_i_c_e_s; │ │ │ │ │ -_1_1_1 REAL * ___w_e_i_g_h_t_s; │ │ │ │ │ -112}; │ │ │ │ │ -113 │ │ │ │ │ -_1_1_6class _S_t_e_n_c_i_l : public _S_t_e_n_c_i_l_R_e_a_l { │ │ │ │ │ -117protected: │ │ │ │ │ -_1_1_8 typedef _S_t_e_n_c_i_l_R_e_a_l_<_f_l_o_a_t_> _B_a_s_e_S_t_e_n_c_i_l; │ │ │ │ │ -119 │ │ │ │ │ -120public: │ │ │ │ │ -_1_2_1 _S_t_e_n_c_i_l() : _B_a_s_e_S_t_e_n_c_i_l() { } │ │ │ │ │ -_1_2_2 _S_t_e_n_c_i_l(_B_a_s_e_S_t_e_n_c_i_l const & other) : _B_a_s_e_S_t_e_n_c_i_l(other) { } │ │ │ │ │ -_1_2_3 _S_t_e_n_c_i_l(int * size, _I_n_d_e_x * indices, float * weights) │ │ │ │ │ -124 : _B_a_s_e_S_t_e_n_c_i_l(size, indices, weights) { } │ │ │ │ │ -125}; │ │ │ │ │ -126 │ │ │ │ │ -127 │ │ │ │ │ -140template │ │ │ │ │ -_1_4_1class _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l { │ │ │ │ │ -142protected: │ │ │ │ │ -_1_4_3 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l(int numControlVerts, │ │ │ │ │ -144 std::vector const& offsets, │ │ │ │ │ -145 std::vector const& sizes, │ │ │ │ │ -146 std::vector const& sources, │ │ │ │ │ -147 std::vector const& weights, │ │ │ │ │ -148 bool includeCoarseVerts, │ │ │ │ │ -149 size_t firstOffset); │ │ │ │ │ -150 │ │ │ │ │ -151public: │ │ │ │ │ -152 │ │ │ │ │ -_1_5_3 virtual _~_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l() {}; │ │ │ │ │ -154 │ │ │ │ │ -_1_5_6 int _G_e_t_N_u_m_S_t_e_n_c_i_l_s() const { │ │ │ │ │ -157 return (int)___s_i_z_e_s.size(); │ │ │ │ │ -158 } │ │ │ │ │ -159 │ │ │ │ │ -_1_6_1 int _G_e_t_N_u_m_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s() const { │ │ │ │ │ -162 return ___n_u_m_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s; │ │ │ │ │ -163 } │ │ │ │ │ -164 │ │ │ │ │ -_1_6_6 _S_t_e_n_c_i_l_R_e_a_l_<_R_E_A_L_> _G_e_t_S_t_e_n_c_i_l(_I_n_d_e_x i) const; │ │ │ │ │ -167 │ │ │ │ │ -_1_6_9 std::vector const & _G_e_t_S_i_z_e_s() const { │ │ │ │ │ -170 return ___s_i_z_e_s; │ │ │ │ │ -171 } │ │ │ │ │ -172 │ │ │ │ │ -_1_7_4 std::vector const & _G_e_t_O_f_f_s_e_t_s() const { │ │ │ │ │ -175 return ___o_f_f_s_e_t_s; │ │ │ │ │ -176 } │ │ │ │ │ -177 │ │ │ │ │ -_1_7_9 std::vector const & _G_e_t_C_o_n_t_r_o_l_I_n_d_i_c_e_s() const { │ │ │ │ │ -180 return ___i_n_d_i_c_e_s; │ │ │ │ │ -181 } │ │ │ │ │ -182 │ │ │ │ │ -_1_8_4 std::vector const & _G_e_t_W_e_i_g_h_t_s() const { │ │ │ │ │ -185 return ___w_e_i_g_h_t_s; │ │ │ │ │ -186 } │ │ │ │ │ -187 │ │ │ │ │ -_1_8_9 _S_t_e_n_c_i_l_R_e_a_l_<_R_E_A_L_> _o_p_e_r_a_t_o_r_[_]_ (_I_n_d_e_x index) const; │ │ │ │ │ -190 │ │ │ │ │ -204 template │ │ │ │ │ -_2_0_5 void _U_p_d_a_t_e_V_a_l_u_e_s(T const &srcValues, U &dstValues, _I_n_d_e_x start=-1, _I_n_d_e_x │ │ │ │ │ -end=-1) const { │ │ │ │ │ -206 this->_u_p_d_a_t_e(srcValues, dstValues, ___w_e_i_g_h_t_s, start, end); │ │ │ │ │ -207 } │ │ │ │ │ -208 │ │ │ │ │ -209 template │ │ │ │ │ -_2_1_0 void _U_p_d_a_t_e_V_a_l_u_e_s(T1 const &srcBase, int numBase, T2 const &srcRef, │ │ │ │ │ -211 U &dstValues, _I_n_d_e_x start=-1, _I_n_d_e_x end=-1) const { │ │ │ │ │ -212 this->_u_p_d_a_t_e(srcBase, numBase, srcRef, dstValues, ___w_e_i_g_h_t_s, start, end); │ │ │ │ │ -213 } │ │ │ │ │ -214 │ │ │ │ │ -215 // Pointer interface for backward compatibility │ │ │ │ │ -216 template │ │ │ │ │ -_2_1_7 void _U_p_d_a_t_e_V_a_l_u_e_s(T const *src, U *dst, _I_n_d_e_x start=-1, _I_n_d_e_x end=-1) const │ │ │ │ │ -{ │ │ │ │ │ -218 this->_u_p_d_a_t_e(src, dst, ___w_e_i_g_h_t_s, start, end); │ │ │ │ │ -219 } │ │ │ │ │ -220 template │ │ │ │ │ -_2_2_1 void _U_p_d_a_t_e_V_a_l_u_e_s(T1 const *srcBase, int numBase, T2 const *srcRef, │ │ │ │ │ -222 U *dst, _I_n_d_e_x start=-1, _I_n_d_e_x end=-1) const { │ │ │ │ │ -223 this->_u_p_d_a_t_e(srcBase, numBase, srcRef, dst, ___w_e_i_g_h_t_s, start, end); │ │ │ │ │ -224 } │ │ │ │ │ -225 │ │ │ │ │ -_2_2_7 void _C_l_e_a_r(); │ │ │ │ │ -228 │ │ │ │ │ -229protected: │ │ │ │ │ -230 │ │ │ │ │ -231 // Update values by applying cached stencil weights to new control values │ │ │ │ │ -232 template │ │ │ │ │ -_2_3_3 void _u_p_d_a_t_e( T const &srcValues, U &dstValues, │ │ │ │ │ -234 std::vector const & valueWeights, _I_n_d_e_x start, _I_n_d_e_x end) const; │ │ │ │ │ -235 template │ │ │ │ │ -_2_3_6 void _u_p_d_a_t_e( T1 const &srcBase, int numBase, T2 const &srcRef, U │ │ │ │ │ -&dstValues, │ │ │ │ │ -237 std::vector const & valueWeights, _I_n_d_e_x start, _I_n_d_e_x end) const; │ │ │ │ │ -238 │ │ │ │ │ -239 // Populate the offsets table from the stencil sizes in _sizes (factory │ │ │ │ │ -helper) │ │ │ │ │ -_2_4_0 void _g_e_n_e_r_a_t_e_O_f_f_s_e_t_s(); │ │ │ │ │ -241 │ │ │ │ │ -242 // Resize the table arrays (factory helper) │ │ │ │ │ -_2_4_3 void _r_e_s_i_z_e(int nstencils, int nelems); │ │ │ │ │ -244 │ │ │ │ │ -245 // Reserves the table arrays (factory helper) │ │ │ │ │ -_2_4_6 void _r_e_s_e_r_v_e(int nstencils, int nelems); │ │ │ │ │ -247 │ │ │ │ │ -248 // Reallocates the table arrays to remove excess capacity (factory helper) │ │ │ │ │ -_2_4_9 void _s_h_r_i_n_k_T_o_F_i_t(); │ │ │ │ │ -250 │ │ │ │ │ -251 // Performs any final operations on internal tables (factory helper) │ │ │ │ │ -_2_5_2 void _f_i_n_a_l_i_z_e(); │ │ │ │ │ -253 │ │ │ │ │ -254protected: │ │ │ │ │ -_2_5_5 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l() : ___n_u_m_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s(0) {} │ │ │ │ │ -_2_5_6 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l(int numControlVerts) │ │ │ │ │ -257 : ___n_u_m_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s(numControlVerts) │ │ │ │ │ -258 { } │ │ │ │ │ -259 │ │ │ │ │ -260 friend class _S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l; │ │ │ │ │ -_2_6_1 friend class _F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_B_u_i_l_d_e_r; │ │ │ │ │ -262 │ │ │ │ │ -_2_6_3 int ___n_u_m_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s; // number of control vertices │ │ │ │ │ -264 │ │ │ │ │ -_2_6_5 std::vector ___s_i_z_e_s; // number of coefficients for each stencil │ │ │ │ │ -_2_6_6 std::vector ___o_f_f_s_e_t_s, // offset to the start of each stencil │ │ │ │ │ -_2_6_7 ___i_n_d_i_c_e_s; // indices of contributing coarse vertices │ │ │ │ │ -_2_6_8 std::vector ___w_e_i_g_h_t_s; // stencil weight coefficients │ │ │ │ │ -269}; │ │ │ │ │ -270 │ │ │ │ │ -_2_7_3class _S_t_e_n_c_i_l_T_a_b_l_e : public _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l { │ │ │ │ │ -274protected: │ │ │ │ │ -_2_7_5 typedef _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_f_l_o_a_t_> _B_a_s_e_T_a_b_l_e; │ │ │ │ │ -276 │ │ │ │ │ -277public: │ │ │ │ │ -_2_7_8 _S_t_e_n_c_i_l _G_e_t_S_t_e_n_c_i_l(_I_n_d_e_x index) const { │ │ │ │ │ -279 return _S_t_e_n_c_i_l(_B_a_s_e_T_a_b_l_e_:_:_G_e_t_S_t_e_n_c_i_l(index)); │ │ │ │ │ -280 } │ │ │ │ │ -_2_8_1 _S_t_e_n_c_i_l _o_p_e_r_a_t_o_r_[_]_ (_I_n_d_e_x index) const { │ │ │ │ │ -282 return _S_t_e_n_c_i_l(_B_a_s_e_T_a_b_l_e_:_:_G_e_t_S_t_e_n_c_i_l(index)); │ │ │ │ │ -283 } │ │ │ │ │ -284 │ │ │ │ │ -285protected: │ │ │ │ │ -_2_8_6 _S_t_e_n_c_i_l_T_a_b_l_e() : _B_a_s_e_T_a_b_l_e() { } │ │ │ │ │ -_2_8_7 _S_t_e_n_c_i_l_T_a_b_l_e(int numControlVerts) : _B_a_s_e_T_a_b_l_e(numControlVerts) { } │ │ │ │ │ -_2_8_8 _S_t_e_n_c_i_l_T_a_b_l_e(int numControlVerts, │ │ │ │ │ -289 std::vector const& offsets, │ │ │ │ │ -290 std::vector const& sizes, │ │ │ │ │ -291 std::vector const& sources, │ │ │ │ │ -292 std::vector const& weights, │ │ │ │ │ -293 bool includeCoarseVerts, │ │ │ │ │ -294 size_t firstOffset) │ │ │ │ │ -295 : _B_a_s_e_T_a_b_l_e(numControlVerts, offsets, │ │ │ │ │ -296 sizes, sources, weights, includeCoarseVerts, firstOffset) { } │ │ │ │ │ -297}; │ │ │ │ │ -298 │ │ │ │ │ -299 │ │ │ │ │ -302template │ │ │ │ │ -_3_0_3class _L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l : public _S_t_e_n_c_i_l_R_e_a_l { │ │ │ │ │ -304public: │ │ │ │ │ -305 │ │ │ │ │ -_3_2_4 _L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l( int* size, │ │ │ │ │ -325 _I_n_d_e_x * indices, │ │ │ │ │ -326 REAL * weights, │ │ │ │ │ -327 REAL * duWeights=0, │ │ │ │ │ -328 REAL * dvWeights=0, │ │ │ │ │ -329 REAL * duuWeights=0, │ │ │ │ │ -330 REAL * duvWeights=0, │ │ │ │ │ -331 REAL * dvvWeights=0) │ │ │ │ │ -332 : _S_t_e_n_c_i_l_R_e_a_l(size, indices, weights), │ │ │ │ │ -333 _duWeights(duWeights), │ │ │ │ │ -334 _dvWeights(dvWeights), │ │ │ │ │ -335 _duuWeights(duuWeights), │ │ │ │ │ -336 _duvWeights(duvWeights), │ │ │ │ │ -337 _dvvWeights(dvvWeights) { │ │ │ │ │ -338 } │ │ │ │ │ -339 │ │ │ │ │ -_3_4_1 REAL const * _G_e_t_D_u_W_e_i_g_h_t_s() const { │ │ │ │ │ -342 return _duWeights; │ │ │ │ │ -343 } │ │ │ │ │ -344 │ │ │ │ │ -_3_4_6 REAL const * _G_e_t_D_v_W_e_i_g_h_t_s() const { │ │ │ │ │ -347 return _dvWeights; │ │ │ │ │ -348 } │ │ │ │ │ -349 │ │ │ │ │ -_3_5_1 REAL const * _G_e_t_D_u_u_W_e_i_g_h_t_s() const { │ │ │ │ │ -352 return _duuWeights; │ │ │ │ │ -353 } │ │ │ │ │ -354 │ │ │ │ │ -_3_5_6 REAL const * _G_e_t_D_u_v_W_e_i_g_h_t_s() const { │ │ │ │ │ -357 return _duvWeights; │ │ │ │ │ -358 } │ │ │ │ │ -359 │ │ │ │ │ -_3_6_1 REAL const * _G_e_t_D_v_v_W_e_i_g_h_t_s() const { │ │ │ │ │ -362 return _dvvWeights; │ │ │ │ │ -363 } │ │ │ │ │ -364 │ │ │ │ │ -_3_6_6 void _N_e_x_t() { │ │ │ │ │ -367 int stride = *this->___s_i_z_e; │ │ │ │ │ -368 ++this->___s_i_z_e; │ │ │ │ │ -369 this->___i_n_d_i_c_e_s += stride; │ │ │ │ │ -370 this->___w_e_i_g_h_t_s += stride; │ │ │ │ │ -371 if (_duWeights) _duWeights += stride; │ │ │ │ │ -372 if (_dvWeights) _dvWeights += stride; │ │ │ │ │ -373 if (_duuWeights) _duuWeights += stride; │ │ │ │ │ -374 if (_duvWeights) _duvWeights += stride; │ │ │ │ │ -375 if (_dvvWeights) _dvvWeights += stride; │ │ │ │ │ -376 } │ │ │ │ │ -377 │ │ │ │ │ -378private: │ │ │ │ │ -379 │ │ │ │ │ -380 friend class _S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l; │ │ │ │ │ -381 friend class _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l; │ │ │ │ │ -382 │ │ │ │ │ -383 REAL * _duWeights, // pointer to stencil u derivative limit weights │ │ │ │ │ -384 * _dvWeights, // pointer to stencil v derivative limit weights │ │ │ │ │ -385 * _duuWeights, // pointer to stencil uu derivative limit weights │ │ │ │ │ -386 * _duvWeights, // pointer to stencil uv derivative limit weights │ │ │ │ │ -387 * _dvvWeights; // pointer to stencil vv derivative limit weights │ │ │ │ │ -388}; │ │ │ │ │ -389 │ │ │ │ │ -_3_9_2class _L_i_m_i_t_S_t_e_n_c_i_l : public _L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l { │ │ │ │ │ -393protected: │ │ │ │ │ -_3_9_4 typedef _L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_<_f_l_o_a_t_> _B_a_s_e_S_t_e_n_c_i_l; │ │ │ │ │ -395 │ │ │ │ │ -396public: │ │ │ │ │ -_3_9_7 _L_i_m_i_t_S_t_e_n_c_i_l(_B_a_s_e_S_t_e_n_c_i_l const & other) : _B_a_s_e_S_t_e_n_c_i_l(other) { } │ │ │ │ │ -_3_9_8 _L_i_m_i_t_S_t_e_n_c_i_l(int* size, _I_n_d_e_x * indices, float * weights, │ │ │ │ │ -399 float * duWeights=0, float * dvWeights=0, │ │ │ │ │ -400 float * duuWeights=0, float * duvWeights=0, float * dvvWeights=0) │ │ │ │ │ -401 : _B_a_s_e_S_t_e_n_c_i_l(size, indices, weights, │ │ │ │ │ -402 duWeights, dvWeights, duuWeights, duvWeights, dvvWeights) { } │ │ │ │ │ -403}; │ │ │ │ │ -404 │ │ │ │ │ -405 │ │ │ │ │ -408template │ │ │ │ │ -_4_0_9class _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l : public _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l { │ │ │ │ │ -410protected: │ │ │ │ │ -_4_1_1 _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l( │ │ │ │ │ -412 int numControlVerts, │ │ │ │ │ -413 std::vector const& offsets, │ │ │ │ │ -414 std::vector const& sizes, │ │ │ │ │ -415 std::vector const& sources, │ │ │ │ │ -416 std::vector const& weights, │ │ │ │ │ -417 std::vector const& duWeights, │ │ │ │ │ -418 std::vector const& dvWeights, │ │ │ │ │ -419 std::vector const& duuWeights, │ │ │ │ │ -420 std::vector const& duvWeights, │ │ │ │ │ -421 std::vector const& dvvWeights, │ │ │ │ │ -422 bool includeCoarseVerts, │ │ │ │ │ -423 size_t firstOffset); │ │ │ │ │ -424 │ │ │ │ │ -425public: │ │ │ │ │ -426 │ │ │ │ │ -_4_2_8 _L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_<_R_E_A_L_> _G_e_t_L_i_m_i_t_S_t_e_n_c_i_l(_I_n_d_e_x i) const; │ │ │ │ │ -429 │ │ │ │ │ -_4_3_1 _L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_<_R_E_A_L_> _o_p_e_r_a_t_o_r_[_]_ (_I_n_d_e_x index) const; │ │ │ │ │ -432 │ │ │ │ │ -_4_3_4 std::vector const & _G_e_t_D_u_W_e_i_g_h_t_s() const { │ │ │ │ │ -435 return _duWeights; │ │ │ │ │ -436 } │ │ │ │ │ -437 │ │ │ │ │ -_4_3_9 std::vector const & _G_e_t_D_v_W_e_i_g_h_t_s() const { │ │ │ │ │ -440 return _dvWeights; │ │ │ │ │ -441 } │ │ │ │ │ -442 │ │ │ │ │ -_4_4_4 std::vector const & _G_e_t_D_u_u_W_e_i_g_h_t_s() const { │ │ │ │ │ -445 return _duuWeights; │ │ │ │ │ -446 } │ │ │ │ │ -447 │ │ │ │ │ -_4_4_9 std::vector const & _G_e_t_D_u_v_W_e_i_g_h_t_s() const { │ │ │ │ │ -450 return _duvWeights; │ │ │ │ │ -451 } │ │ │ │ │ -452 │ │ │ │ │ -_4_5_4 std::vector const & _G_e_t_D_v_v_W_e_i_g_h_t_s() const { │ │ │ │ │ -455 return _dvvWeights; │ │ │ │ │ -456 } │ │ │ │ │ -457 │ │ │ │ │ -475 template │ │ │ │ │ -_4_7_6 void _U_p_d_a_t_e_D_e_r_i_v_s(T const & srcValues, U & uderivs, U & vderivs, │ │ │ │ │ -477 int start=-1, int end=-1) const { │ │ │ │ │ -478 │ │ │ │ │ -479 this->_u_p_d_a_t_e(srcValues, uderivs, _duWeights, start, end); │ │ │ │ │ -480 this->_u_p_d_a_t_e(srcValues, vderivs, _dvWeights, start, end); │ │ │ │ │ -481 } │ │ │ │ │ -482 │ │ │ │ │ -483 template │ │ │ │ │ -_4_8_4 void _U_p_d_a_t_e_D_e_r_i_v_s(T1 const & srcBase, int numBase, T2 const & srcRef, │ │ │ │ │ -485 U & uderivs, U & vderivs, int start=-1, int end=-1) const { │ │ │ │ │ -486 │ │ │ │ │ -487 this->_u_p_d_a_t_e(srcBase, numBase, srcRef, uderivs, _duWeights, start, end); │ │ │ │ │ -488 this->_u_p_d_a_t_e(srcBase, numBase, srcRef, vderivs, _dvWeights, start, end); │ │ │ │ │ -489 } │ │ │ │ │ -490 │ │ │ │ │ -491 // Pointer interface for backward compatibility │ │ │ │ │ -492 template │ │ │ │ │ -_4_9_3 void _U_p_d_a_t_e_D_e_r_i_v_s(T const *src, U *uderivs, U *vderivs, │ │ │ │ │ -494 int start=-1, int end=-1) const { │ │ │ │ │ -495 │ │ │ │ │ -496 this->_u_p_d_a_t_e(src, uderivs, _duWeights, start, end); │ │ │ │ │ -497 this->_u_p_d_a_t_e(src, vderivs, _dvWeights, start, end); │ │ │ │ │ -498 } │ │ │ │ │ -499 template │ │ │ │ │ -_5_0_0 void _U_p_d_a_t_e_D_e_r_i_v_s(T1 const *srcBase, int numBase, T2 const *srcRef, │ │ │ │ │ -501 U *uderivs, U *vderivs, int start=-1, int end=-1) const { │ │ │ │ │ -502 │ │ │ │ │ -503 this->_u_p_d_a_t_e(srcBase, numBase, srcRef, uderivs, _duWeights, start, end); │ │ │ │ │ -504 this->_u_p_d_a_t_e(srcBase, numBase, srcRef, vderivs, _dvWeights, start, end); │ │ │ │ │ -505 } │ │ │ │ │ -506 │ │ │ │ │ -527 template │ │ │ │ │ -_5_2_8 void _U_p_d_a_t_e_2_n_d_D_e_r_i_v_s(T const & srcValues, │ │ │ │ │ -529 U & uuderivs, U & uvderivs, U & vvderivs, │ │ │ │ │ -530 int start=-1, int end=-1) const { │ │ │ │ │ -531 │ │ │ │ │ -532 this->_u_p_d_a_t_e(srcValues, uuderivs, _duuWeights, start, end); │ │ │ │ │ -533 this->_u_p_d_a_t_e(srcValues, uvderivs, _duvWeights, start, end); │ │ │ │ │ -534 this->_u_p_d_a_t_e(srcValues, vvderivs, _dvvWeights, start, end); │ │ │ │ │ -535 } │ │ │ │ │ -536 │ │ │ │ │ -537 template │ │ │ │ │ -_5_3_8 void _U_p_d_a_t_e_2_n_d_D_e_r_i_v_s(T1 const & srcBase, int numBase, T2 const & srcRef, │ │ │ │ │ -539 U & uuderivs, U & uvderivs, U & vvderivs, int start=-1, int end=-1) const { │ │ │ │ │ -540 │ │ │ │ │ -541 this->_u_p_d_a_t_e(srcBase, numBase, srcRef, uuderivs, _duuWeights, start, end); │ │ │ │ │ -542 this->_u_p_d_a_t_e(srcBase, numBase, srcRef, uvderivs, _duvWeights, start, end); │ │ │ │ │ -543 this->_u_p_d_a_t_e(srcBase, numBase, srcRef, vvderivs, _dvvWeights, start, end); │ │ │ │ │ -544 } │ │ │ │ │ -545 │ │ │ │ │ -546 // Pointer interface for backward compatibility │ │ │ │ │ -547 template │ │ │ │ │ -_5_4_8 void _U_p_d_a_t_e_2_n_d_D_e_r_i_v_s(T const *src, T *uuderivs, U *uvderivs, U *vvderivs, │ │ │ │ │ -549 int start=-1, int end=-1) const { │ │ │ │ │ -550 │ │ │ │ │ -551 this->_u_p_d_a_t_e(src, uuderivs, _duuWeights, start, end); │ │ │ │ │ -552 this->_u_p_d_a_t_e(src, uvderivs, _duvWeights, start, end); │ │ │ │ │ -553 this->_u_p_d_a_t_e(src, vvderivs, _dvvWeights, start, end); │ │ │ │ │ -554 } │ │ │ │ │ -555 template │ │ │ │ │ -_5_5_6 void _U_p_d_a_t_e_2_n_d_D_e_r_i_v_s(T1 const *srcBase, int numBase, T2 const *srcRef, │ │ │ │ │ -557 U *uuderivs, U *uvderivs, U *vvderivs, int start=-1, int end=-1) const { │ │ │ │ │ -558 │ │ │ │ │ -559 this->_u_p_d_a_t_e(srcBase, numBase, srcRef, uuderivs, _duuWeights, start, end); │ │ │ │ │ -560 this->_u_p_d_a_t_e(srcBase, numBase, srcRef, uvderivs, _duvWeights, start, end); │ │ │ │ │ -561 this->_u_p_d_a_t_e(srcBase, numBase, srcRef, vvderivs, _dvvWeights, start, end); │ │ │ │ │ -562 } │ │ │ │ │ -563 │ │ │ │ │ -_5_6_5 void _C_l_e_a_r(); │ │ │ │ │ -566 │ │ │ │ │ -567private: │ │ │ │ │ -568 friend class _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l; │ │ │ │ │ -569 │ │ │ │ │ -570 // Resize the table arrays (factory helper) │ │ │ │ │ -571 void resize(int nstencils, int nelems); │ │ │ │ │ -572 │ │ │ │ │ -573private: │ │ │ │ │ -574 std::vector _duWeights, // u derivative limit stencil weights │ │ │ │ │ -575 _dvWeights, // v derivative limit stencil weights │ │ │ │ │ -576 _duuWeights, // uu derivative limit stencil weights │ │ │ │ │ -577 _duvWeights, // uv derivative limit stencil weights │ │ │ │ │ -578 _dvvWeights; // vv derivative limit stencil weights │ │ │ │ │ -579}; │ │ │ │ │ -580 │ │ │ │ │ -_5_8_3class _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e : public _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l { │ │ │ │ │ -584protected: │ │ │ │ │ -_5_8_5 typedef _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_f_l_o_a_t_> _B_a_s_e_T_a_b_l_e; │ │ │ │ │ -586 │ │ │ │ │ -587public: │ │ │ │ │ -_5_8_8 _L_i_m_i_t_S_t_e_n_c_i_l _G_e_t_L_i_m_i_t_S_t_e_n_c_i_l(_I_n_d_e_x index) const { │ │ │ │ │ -589 return _L_i_m_i_t_S_t_e_n_c_i_l(_B_a_s_e_T_a_b_l_e_:_:_G_e_t_L_i_m_i_t_S_t_e_n_c_i_l(index)); │ │ │ │ │ -590 } │ │ │ │ │ -_5_9_1 _L_i_m_i_t_S_t_e_n_c_i_l _o_p_e_r_a_t_o_r_[_]_ (_I_n_d_e_x index) const { │ │ │ │ │ -592 return _L_i_m_i_t_S_t_e_n_c_i_l(_B_a_s_e_T_a_b_l_e_:_:_G_e_t_L_i_m_i_t_S_t_e_n_c_i_l(index)); │ │ │ │ │ -593 } │ │ │ │ │ -594 │ │ │ │ │ -595protected: │ │ │ │ │ -_5_9_6 _L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e(int numControlVerts, │ │ │ │ │ -597 std::vector const& offsets, │ │ │ │ │ -598 std::vector const& sizes, │ │ │ │ │ -599 std::vector const& sources, │ │ │ │ │ -600 std::vector const& weights, │ │ │ │ │ -601 std::vector const& duWeights, │ │ │ │ │ -602 std::vector const& dvWeights, │ │ │ │ │ -603 std::vector const& duuWeights, │ │ │ │ │ -604 std::vector const& duvWeights, │ │ │ │ │ -605 std::vector const& dvvWeights, │ │ │ │ │ -606 bool includeCoarseVerts, │ │ │ │ │ -607 size_t firstOffset) │ │ │ │ │ -608 : _B_a_s_e_T_a_b_l_e(numControlVerts, │ │ │ │ │ -609 offsets, sizes, sources, weights, │ │ │ │ │ -610 duWeights, dvWeights, duuWeights, duvWeights, dvvWeights, │ │ │ │ │ -611 includeCoarseVerts, firstOffset) { } │ │ │ │ │ -612}; │ │ │ │ │ -613 │ │ │ │ │ -614 │ │ │ │ │ -615// Update values by applying cached stencil weights to new control values │ │ │ │ │ -616template │ │ │ │ │ -617template void │ │ │ │ │ -_6_1_8_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_u_p_d_a_t_e(T1 const &srcBase, int numBase, │ │ │ │ │ -619 T2 const &srcRef, U &dstValues, │ │ │ │ │ -620 std::vector const &valueWeights, _I_n_d_e_x start, _I_n_d_e_x end) const { │ │ │ │ │ -621 │ │ │ │ │ -622 int const * sizes = &_sizes.at(0); │ │ │ │ │ -623 _I_n_d_e_x const * indices = &_indices.at(0); │ │ │ │ │ -624 REAL const * weights = &valueWeights.at(0); │ │ │ │ │ -625 │ │ │ │ │ -626 if (start > 0) { │ │ │ │ │ -627 assert(start < (_I_n_d_e_x)_offsets.size()); │ │ │ │ │ -628 sizes += start; │ │ │ │ │ -629 indices += _offsets[start]; │ │ │ │ │ -630 weights += _offsets[start]; │ │ │ │ │ -631 } else { │ │ │ │ │ -632 start = 0; │ │ │ │ │ -633 } │ │ │ │ │ -634 │ │ │ │ │ -635 int nstencils = ((end < start) ? GetNumStencils() : end) - start; │ │ │ │ │ -636 │ │ │ │ │ -637 for (int i = 0; i < nstencils; ++i, ++sizes) { │ │ │ │ │ -638 dstValues[start + i].Clear(); │ │ │ │ │ -639 for (int j = 0; j < *sizes; ++j, ++indices, ++weights) { │ │ │ │ │ -640 if (*indices < numBase) { │ │ │ │ │ -641 dstValues[start + i].AddWithWeight(srcBase[*indices], *weights); │ │ │ │ │ -642 } else { │ │ │ │ │ -643 dstValues[start + i].AddWithWeight(srcRef[*indices - numBase], *weights); │ │ │ │ │ -644 } │ │ │ │ │ -645 } │ │ │ │ │ -646 } │ │ │ │ │ -647} │ │ │ │ │ -648template │ │ │ │ │ -649template void │ │ │ │ │ -_6_5_0_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_u_p_d_a_t_e(T const &srcValues, U &dstValues, │ │ │ │ │ -651 std::vector const &valueWeights, _I_n_d_e_x start, _I_n_d_e_x end) const { │ │ │ │ │ -652 │ │ │ │ │ -653 int const * sizes = &_sizes.at(0); │ │ │ │ │ -654 _I_n_d_e_x const * indices = &_indices.at(0); │ │ │ │ │ -655 REAL const * weights = &valueWeights.at(0); │ │ │ │ │ -656 │ │ │ │ │ -657 if (start > 0) { │ │ │ │ │ -658 assert(start < (_I_n_d_e_x)_offsets.size()); │ │ │ │ │ -659 sizes += start; │ │ │ │ │ -660 indices += _offsets[start]; │ │ │ │ │ -661 weights += _offsets[start]; │ │ │ │ │ -662 } else { │ │ │ │ │ -663 start = 0; │ │ │ │ │ -664 } │ │ │ │ │ -665 │ │ │ │ │ -666 int nstencils = ((end < start) ? GetNumStencils() : end) - start; │ │ │ │ │ -667 │ │ │ │ │ -668 for (int i = 0; i < nstencils; ++i, ++sizes) { │ │ │ │ │ -669 dstValues[start + i].Clear(); │ │ │ │ │ -670 for (int j = 0; j < *sizes; ++j, ++indices, ++weights) { │ │ │ │ │ -671 dstValues[start + i].AddWithWeight(srcValues[*indices], *weights); │ │ │ │ │ -672 } │ │ │ │ │ -673 } │ │ │ │ │ -674} │ │ │ │ │ -675 │ │ │ │ │ -676template │ │ │ │ │ -677inline void │ │ │ │ │ -_6_7_8_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_g_e_n_e_r_a_t_e_O_f_f_s_e_t_s() { │ │ │ │ │ -679 _I_n_d_e_x offset=0; │ │ │ │ │ -680 int noffsets = (int)_sizes.size(); │ │ │ │ │ -681 _offsets.resize(noffsets); │ │ │ │ │ -682 for (int i=0; i<(int)_sizes.size(); ++i ) { │ │ │ │ │ -683 _offsets[i]=offset; │ │ │ │ │ -684 offset+=_sizes[i]; │ │ │ │ │ -685 } │ │ │ │ │ -686} │ │ │ │ │ -687 │ │ │ │ │ -688template │ │ │ │ │ -689inline void │ │ │ │ │ -_6_9_0_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_r_e_s_i_z_e(int nstencils, int nelems) { │ │ │ │ │ -691 _sizes.resize(nstencils); │ │ │ │ │ -692 _indices.resize(nelems); │ │ │ │ │ -693 _weights.resize(nelems); │ │ │ │ │ -694} │ │ │ │ │ -695 │ │ │ │ │ -696template │ │ │ │ │ -697inline void │ │ │ │ │ -_6_9_8_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_r_e_s_e_r_v_e(int nstencils, int nelems) { │ │ │ │ │ -699 _sizes.reserve(nstencils); │ │ │ │ │ -700 _indices.reserve(nelems); │ │ │ │ │ -701 _weights.reserve(nelems); │ │ │ │ │ -702} │ │ │ │ │ -703 │ │ │ │ │ -704template │ │ │ │ │ -705inline void │ │ │ │ │ -_7_0_6_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_s_h_r_i_n_k_T_o_F_i_t() { │ │ │ │ │ -707 std::vector(_sizes).swap(_sizes); │ │ │ │ │ -708 std::vector(_indices).swap(_indices); │ │ │ │ │ -709 std::vector(_weights).swap(_weights); │ │ │ │ │ -710} │ │ │ │ │ -711 │ │ │ │ │ -712template │ │ │ │ │ -713inline void │ │ │ │ │ -_7_1_4_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_f_i_n_a_l_i_z_e() { │ │ │ │ │ -715 shrinkToFit(); │ │ │ │ │ -716 generateOffsets(); │ │ │ │ │ -717} │ │ │ │ │ -718 │ │ │ │ │ -719// Returns a Stencil at index i in the table │ │ │ │ │ -720template │ │ │ │ │ -721inline _S_t_e_n_c_i_l_R_e_a_l_<_R_E_A_L_> │ │ │ │ │ -_7_2_2_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_G_e_t_S_t_e_n_c_i_l(_I_n_d_e_x i) const { │ │ │ │ │ -723 assert((! _offsets.empty()) && i<(int)_offsets.size()); │ │ │ │ │ -724 │ │ │ │ │ -725 _I_n_d_e_x ofs = _offsets[i]; │ │ │ │ │ -726 │ │ │ │ │ -727 return _S_t_e_n_c_i_l_R_e_a_l_<_R_E_A_L_>(const_cast(&_sizes[i]), │ │ │ │ │ -728 const_cast<_I_n_d_e_x*>(&_indices[ofs]), │ │ │ │ │ -729 const_cast(&_weights[ofs])); │ │ │ │ │ -730} │ │ │ │ │ -731 │ │ │ │ │ -732template │ │ │ │ │ -733inline _S_t_e_n_c_i_l_R_e_a_l_<_R_E_A_L_> │ │ │ │ │ -_7_3_4_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_o_p_e_r_a_t_o_r_[_]_ (_I_n_d_e_x index) const { │ │ │ │ │ -735 return GetStencil(index); │ │ │ │ │ -736} │ │ │ │ │ -737 │ │ │ │ │ -738template │ │ │ │ │ -739inline void │ │ │ │ │ -740_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_r_e_s_i_z_e(int nstencils, int nelems) { │ │ │ │ │ -741 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_r_e_s_i_z_e(nstencils, nelems); │ │ │ │ │ -742 _duWeights.resize(nelems); │ │ │ │ │ -743 _dvWeights.resize(nelems); │ │ │ │ │ -744} │ │ │ │ │ -745 │ │ │ │ │ -746// Returns a LimitStencil at index i in the table │ │ │ │ │ -747template │ │ │ │ │ -748inline LimitStencilReal │ │ │ │ │ -_7_4_9_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_G_e_t_L_i_m_i_t_S_t_e_n_c_i_l(_I_n_d_e_x i) const { │ │ │ │ │ -750 assert((! this->GetOffsets().empty()) && i<(int)this->GetOffsets().size()); │ │ │ │ │ -751 │ │ │ │ │ -752 _I_n_d_e_x ofs = this->GetOffsets()[i]; │ │ │ │ │ -753 │ │ │ │ │ -754 if (!_duWeights.empty() && !_dvWeights.empty() && │ │ │ │ │ -755 !_duuWeights.empty() && !_duvWeights.empty() && !_dvvWeights.empty()) { │ │ │ │ │ -756 return _L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_<_R_E_A_L_>( │ │ │ │ │ -757 const_cast(&this->GetSizes()[i]), │ │ │ │ │ -758 const_cast<_I_n_d_e_x *>(&this->GetControlIndices()[ofs]), │ │ │ │ │ -759 const_cast(&this->GetWeights()[ofs]), │ │ │ │ │ -760 const_cast(&GetDuWeights()[ofs]), │ │ │ │ │ -761 const_cast(&GetDvWeights()[ofs]), │ │ │ │ │ -762 const_cast(&GetDuuWeights()[ofs]), │ │ │ │ │ -763 const_cast(&GetDuvWeights()[ofs]), │ │ │ │ │ -764 const_cast(&GetDvvWeights()[ofs]) ); │ │ │ │ │ -765 } else if (!_duWeights.empty() && !_dvWeights.empty()) { │ │ │ │ │ -766 return _L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_<_R_E_A_L_>( │ │ │ │ │ -767 const_cast(&this->GetSizes()[i]), │ │ │ │ │ -768 const_cast<_I_n_d_e_x *>(&this->GetControlIndices()[ofs]), │ │ │ │ │ -769 const_cast(&this->GetWeights()[ofs]), │ │ │ │ │ -770 const_cast(&GetDuWeights()[ofs]), │ │ │ │ │ -771 const_cast(&GetDvWeights()[ofs]) ); │ │ │ │ │ -772 } else { │ │ │ │ │ -773 return _L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_<_R_E_A_L_>( │ │ │ │ │ -774 const_cast(&this->GetSizes()[i]), │ │ │ │ │ -775 const_cast<_I_n_d_e_x *>(&this->GetControlIndices()[ofs]), │ │ │ │ │ -776 const_cast(&this->GetWeights()[ofs]) ); │ │ │ │ │ -777 } │ │ │ │ │ -778} │ │ │ │ │ -779 │ │ │ │ │ -780template │ │ │ │ │ -781inline _L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_<_R_E_A_L_> │ │ │ │ │ -_7_8_2_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_>_:_:_o_p_e_r_a_t_o_r_[_]_ (_I_n_d_e_x index) const { │ │ │ │ │ -783 return GetLimitStencil(index); │ │ │ │ │ -784} │ │ │ │ │ -785 │ │ │ │ │ -786} // end namespace Far │ │ │ │ │ -787 │ │ │ │ │ -788} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ -789using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -790 │ │ │ │ │ -791} // end namespace OpenSubdiv │ │ │ │ │ -792 │ │ │ │ │ -793#endif // OPENSUBDIV3_FAR_STENCILTABLE_H │ │ │ │ │ +92 void initializePtexIndices(_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const &refiner); │ │ │ │ │ +93 │ │ │ │ │ +94private: │ │ │ │ │ +95 │ │ │ │ │ +96 std::vector _ptexIndices; │ │ │ │ │ +97}; │ │ │ │ │ +98 │ │ │ │ │ +99 │ │ │ │ │ +100} // end namespace Far │ │ │ │ │ +101 │ │ │ │ │ +102} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ +103using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +104} // end namespace OpenSubdiv │ │ │ │ │ +105 │ │ │ │ │ +106#endif /* OPENSUBDIV3_FAR_PTEX_INDICES_H */ │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_I_n_d_e_x │ │ │ │ │ Vtr::Index Index │ │ │ │ │ DDeeffiinniittiioonn _t_y_p_e_s_._h_:_4_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l │ │ │ │ │ -A specialized factory for StencilTable. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_5_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_R_e_a_l │ │ │ │ │ -A specialized factory for LimitStencilTable. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_0_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l │ │ │ │ │ -Vertex stencil descriptor. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l_:_:_S_t_e_n_c_i_l_R_e_a_l │ │ │ │ │ -StencilReal() │ │ │ │ │ -Default constructor. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l_:_:___s_i_z_e │ │ │ │ │ -int * _size │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_0_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l_:_:_S_t_e_n_c_i_l_R_e_a_l │ │ │ │ │ -StencilReal(int *size, Index *indices, REAL *weights) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_t_e_x_I_n_d_i_c_e_s │ │ │ │ │ +Object used to compute and query ptex face indices. │ │ │ │ │ +DDeeffiinniittiioonn _p_t_e_x_I_n_d_i_c_e_s_._h_:_4_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_t_e_x_I_n_d_i_c_e_s_:_:_G_e_t_F_a_c_e_I_d │ │ │ │ │ +int GetFaceId(Index f) const │ │ │ │ │ +Returns the ptex face index given a coarse face 'f' or -1. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_t_e_x_I_n_d_i_c_e_s_:_:_P_t_e_x_I_n_d_i_c_e_s │ │ │ │ │ +PtexIndices(TopologyRefiner const &refiner) │ │ │ │ │ Constructor. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_6_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l_:_:_N_e_x_t │ │ │ │ │ -void Next() │ │ │ │ │ -Advance to the next stencil in the table. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_9_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l_:_:_S_t_e_n_c_i_l_R_e_a_l │ │ │ │ │ -StencilReal(StencilReal const &other) │ │ │ │ │ -Copy constructor. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_7_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l_:_:___i_n_d_i_c_e_s │ │ │ │ │ -Index * _indices │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_1_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l_:_:_G_e_t_V_e_r_t_e_x_I_n_d_i_c_e_s │ │ │ │ │ -Index const * GetVertexIndices() const │ │ │ │ │ -Returns the control vertices' indices. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_8_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l_:_:_G_e_t_S_i_z_e │ │ │ │ │ -int GetSize() const │ │ │ │ │ -Returns the size of the stencil. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_7_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l_:_:___w_e_i_g_h_t_s │ │ │ │ │ -REAL * _weights │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_1_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l_:_:_G_e_t_S_i_z_e_P_t_r │ │ │ │ │ -int * GetSizePtr() const │ │ │ │ │ -Returns the size of the stencil as a pointer. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_8_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_R_e_a_l_:_:_G_e_t_W_e_i_g_h_t_s │ │ │ │ │ -REAL const * GetWeights() const │ │ │ │ │ -Returns the interpolation weights. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_9_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l │ │ │ │ │ -Vertex stencil class wrapping the template for compatibility. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_1_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_:_:_S_t_e_n_c_i_l │ │ │ │ │ -Stencil(BaseStencil const &other) │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_2_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_:_:_S_t_e_n_c_i_l │ │ │ │ │ -Stencil(int *size, Index *indices, float *weights) │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_2_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_:_:_B_a_s_e_S_t_e_n_c_i_l │ │ │ │ │ -StencilReal< float > BaseStencil │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_1_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_:_:_S_t_e_n_c_i_l │ │ │ │ │ -Stencil() │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_2_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l │ │ │ │ │ -Table of subdivision stencils. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_4_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_N_u_m_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s │ │ │ │ │ -int GetNumControlVertices() const │ │ │ │ │ -Returns the number of control vertices indexed in the table. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_6_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:___s_i_z_e_s │ │ │ │ │ -std::vector< int > _sizes │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_6_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_P_a_t_c_h_T_a_b_l_e_B_u_i_l_d_e_r │ │ │ │ │ -friend class Far::PatchTableBuilder │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_6_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_u_p_d_a_t_e │ │ │ │ │ -void update(T1 const &srcBase, int numBase, T2 const &srcRef, U &dstValues, │ │ │ │ │ -std::vector< REAL > const &valueWeights, Index start, Index end) const │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_6_1_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_U_p_d_a_t_e_V_a_l_u_e_s │ │ │ │ │ -void UpdateValues(T1 const &srcBase, int numBase, T2 const &srcRef, U │ │ │ │ │ -&dstValues, Index start=-1, Index end=-1) const │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_1_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_C_o_n_t_r_o_l_I_n_d_i_c_e_s │ │ │ │ │ -std::vector< Index > const & GetControlIndices() const │ │ │ │ │ -Returns the indices of the control vertices. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_7_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_f_i_n_a_l_i_z_e │ │ │ │ │ -void finalize() │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_7_1_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ │ -StencilReal< REAL > operator[](Index index) const │ │ │ │ │ -Returns the stencil at index i in the table. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_7_3_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:___n_u_m_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s │ │ │ │ │ -int _numControlVertices │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_6_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_u_p_d_a_t_e │ │ │ │ │ -void update(T const &srcValues, U &dstValues, std::vector< REAL > const │ │ │ │ │ -&valueWeights, Index start, Index end) const │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_6_5_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_S_i_z_e_s │ │ │ │ │ -std::vector< int > const & GetSizes() const │ │ │ │ │ -Returns the number of control vertices of each stencil in the table. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_6_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_N_u_m_S_t_e_n_c_i_l_s │ │ │ │ │ -int GetNumStencils() const │ │ │ │ │ -Returns the number of stencils in the table. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_5_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_~_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l │ │ │ │ │ -virtual ~StencilTableReal() │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_5_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_O_f_f_s_e_t_s │ │ │ │ │ -std::vector< Index > const & GetOffsets() const │ │ │ │ │ -Returns the offset to a given stencil (factory may leave empty) │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_7_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_S_t_e_n_c_i_l │ │ │ │ │ -StencilReal< REAL > GetStencil(Index i) const │ │ │ │ │ -Returns a Stencil at index i in the table. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_7_2_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_s_h_r_i_n_k_T_o_F_i_t │ │ │ │ │ -void shrinkToFit() │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_7_0_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_g_e_n_e_r_a_t_e_O_f_f_s_e_t_s │ │ │ │ │ -void generateOffsets() │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_6_7_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_C_l_e_a_r │ │ │ │ │ -void Clear() │ │ │ │ │ -Clears the stencils from the table. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:___o_f_f_s_e_t_s │ │ │ │ │ -std::vector< Index > _offsets │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_6_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:___w_e_i_g_h_t_s │ │ │ │ │ -std::vector< REAL > _weights │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_6_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_r_e_s_i_z_e │ │ │ │ │ -void resize(int nstencils, int nelems) │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_6_9_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_W_e_i_g_h_t_s │ │ │ │ │ -std::vector< REAL > const & GetWeights() const │ │ │ │ │ -Returns the stencil interpolation weights. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_8_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_U_p_d_a_t_e_V_a_l_u_e_s │ │ │ │ │ -void UpdateValues(T1 const *srcBase, int numBase, T2 const *srcRef, U *dst, │ │ │ │ │ -Index start=-1, Index end=-1) const │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_2_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l │ │ │ │ │ -StencilTableReal(int numControlVerts, std::vector< int > const &offsets, std:: │ │ │ │ │ -vector< int > const &sizes, std::vector< int > const &sources, std::vector< │ │ │ │ │ -REAL > const &weights, bool includeCoarseVerts, size_t firstOffset) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:___i_n_d_i_c_e_s │ │ │ │ │ -std::vector< Index > _indices │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_6_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l │ │ │ │ │ -StencilTableReal() │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_5_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_r_e_s_e_r_v_e │ │ │ │ │ -void reserve(int nstencils, int nelems) │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_6_9_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_U_p_d_a_t_e_V_a_l_u_e_s │ │ │ │ │ -void UpdateValues(T const *src, U *dst, Index start=-1, Index end=-1) const │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_1_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_U_p_d_a_t_e_V_a_l_u_e_s │ │ │ │ │ -void UpdateValues(T const &srcValues, U &dstValues, Index start=-1, Index end=- │ │ │ │ │ -1) const │ │ │ │ │ -Updates point values based on the control values. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_0_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -Stencil table class wrapping the template for compatibility. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_7_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_:_:_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -StencilTable(int numControlVerts, std::vector< int > const &offsets, std:: │ │ │ │ │ -vector< int > const &sizes, std::vector< int > const &sources, std::vector< │ │ │ │ │ -float > const &weights, bool includeCoarseVerts, size_t firstOffset) │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_8_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_:_:_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -StencilTable(int numControlVerts) │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_8_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_:_:_B_a_s_e_T_a_b_l_e │ │ │ │ │ -StencilTableReal< float > BaseTable │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_7_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_S_t_e_n_c_i_l │ │ │ │ │ -Stencil GetStencil(Index index) const │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_7_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ │ -Stencil operator[](Index index) const │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_8_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_:_:_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -StencilTable() │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_8_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l │ │ │ │ │ -Limit point stencil descriptor. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_3_0_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_:_:_G_e_t_D_u_v_W_e_i_g_h_t_s │ │ │ │ │ -REAL const * GetDuvWeights() const │ │ │ │ │ -Returns the uv derivative weights. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_3_5_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_:_:_G_e_t_D_v_W_e_i_g_h_t_s │ │ │ │ │ -REAL const * GetDvWeights() const │ │ │ │ │ -Returns the v derivative weights. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_3_4_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_:_:_N_e_x_t │ │ │ │ │ -void Next() │ │ │ │ │ -Advance to the next stencil in the table. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_3_6_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_:_:_G_e_t_D_v_v_W_e_i_g_h_t_s │ │ │ │ │ -REAL const * GetDvvWeights() const │ │ │ │ │ -Returns the vv derivative weights. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_3_6_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_:_:_L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l │ │ │ │ │ -LimitStencilReal(int *size, Index *indices, REAL *weights, REAL *duWeights=0, │ │ │ │ │ -REAL *dvWeights=0, REAL *duuWeights=0, REAL *duvWeights=0, REAL *dvvWeights=0) │ │ │ │ │ -Constructor. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_3_2_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_:_:_G_e_t_D_u_W_e_i_g_h_t_s │ │ │ │ │ -REAL const * GetDuWeights() const │ │ │ │ │ -Returns the u derivative weights. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_3_4_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_R_e_a_l_:_:_G_e_t_D_u_u_W_e_i_g_h_t_s │ │ │ │ │ -REAL const * GetDuuWeights() const │ │ │ │ │ -Returns the uu derivative weights. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_3_5_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l │ │ │ │ │ -Limit point stencil class wrapping the template for compatibility. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_3_9_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_:_:_L_i_m_i_t_S_t_e_n_c_i_l │ │ │ │ │ -LimitStencil(BaseStencil const &other) │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_3_9_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_:_:_B_a_s_e_S_t_e_n_c_i_l │ │ │ │ │ -LimitStencilReal< float > BaseStencil │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_3_9_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_:_:_L_i_m_i_t_S_t_e_n_c_i_l │ │ │ │ │ -LimitStencil(int *size, Index *indices, float *weights, float *duWeights=0, │ │ │ │ │ -float *dvWeights=0, float *duuWeights=0, float *duvWeights=0, float │ │ │ │ │ -*dvvWeights=0) │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_3_9_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l │ │ │ │ │ -Table of limit subdivision stencils. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_4_0_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_D_u_u_W_e_i_g_h_t_s │ │ │ │ │ -std::vector< REAL > const & GetDuuWeights() const │ │ │ │ │ -Returns the 'uu' derivative stencil interpolation weights. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_4_4_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ │ -LimitStencilReal< REAL > operator[](Index index) const │ │ │ │ │ -Returns the limit stencil at index i in the table. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_7_8_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_D_v_v_W_e_i_g_h_t_s │ │ │ │ │ -std::vector< REAL > const & GetDvvWeights() const │ │ │ │ │ -Returns the 'vv' derivative stencil interpolation weights. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_4_5_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_U_p_d_a_t_e_D_e_r_i_v_s │ │ │ │ │ -void UpdateDerivs(T const *src, U *uderivs, U *vderivs, int start=-1, int end=- │ │ │ │ │ -1) const │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_4_9_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_U_p_d_a_t_e_2_n_d_D_e_r_i_v_s │ │ │ │ │ -void Update2ndDerivs(T const *src, T *uuderivs, U *uvderivs, U *vvderivs, int │ │ │ │ │ -start=-1, int end=-1) const │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_4_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_D_v_W_e_i_g_h_t_s │ │ │ │ │ -std::vector< REAL > const & GetDvWeights() const │ │ │ │ │ -Returns the 'v' derivative stencil interpolation weights. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_4_3_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_U_p_d_a_t_e_2_n_d_D_e_r_i_v_s │ │ │ │ │ -void Update2ndDerivs(T1 const *srcBase, int numBase, T2 const *srcRef, U │ │ │ │ │ -*uuderivs, U *uvderivs, U *vvderivs, int start=-1, int end=-1) const │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_5_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_U_p_d_a_t_e_D_e_r_i_v_s │ │ │ │ │ -void UpdateDerivs(T const &srcValues, U &uderivs, U &vderivs, int start=-1, int │ │ │ │ │ -end=-1) const │ │ │ │ │ -Updates derivative values based on the control values. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_4_7_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_L_i_m_i_t_S_t_e_n_c_i_l │ │ │ │ │ -LimitStencilReal< REAL > GetLimitStencil(Index i) const │ │ │ │ │ -Returns a LimitStencil at index i in the table. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_7_4_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_: │ │ │ │ │ -_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l │ │ │ │ │ -LimitStencilTableReal(int numControlVerts, std::vector< int > const &offsets, │ │ │ │ │ -std::vector< int > const &sizes, std::vector< int > const &sources, std:: │ │ │ │ │ -vector< REAL > const &weights, std::vector< REAL > const &duWeights, std:: │ │ │ │ │ -vector< REAL > const &dvWeights, std::vector< REAL > const &duuWeights, std:: │ │ │ │ │ -vector< REAL > const &duvWeights, std::vector< REAL > const &dvvWeights, bool │ │ │ │ │ -includeCoarseVerts, size_t firstOffset) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_U_p_d_a_t_e_2_n_d_D_e_r_i_v_s │ │ │ │ │ -void Update2ndDerivs(T const &srcValues, U &uuderivs, U &uvderivs, U &vvderivs, │ │ │ │ │ -int start=-1, int end=-1) const │ │ │ │ │ -Updates 2nd derivative values based on the control values. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_2_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_D_u_W_e_i_g_h_t_s │ │ │ │ │ -std::vector< REAL > const & GetDuWeights() const │ │ │ │ │ -Returns the 'u' derivative stencil interpolation weights. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_4_3_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_C_l_e_a_r │ │ │ │ │ -void Clear() │ │ │ │ │ -Clears the stencils from the table. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_U_p_d_a_t_e_2_n_d_D_e_r_i_v_s │ │ │ │ │ -void Update2ndDerivs(T1 const &srcBase, int numBase, T2 const &srcRef, U │ │ │ │ │ -&uuderivs, U &uvderivs, U &vvderivs, int start=-1, int end=-1) const │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_3_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_G_e_t_D_u_v_W_e_i_g_h_t_s │ │ │ │ │ -std::vector< REAL > const & GetDuvWeights() const │ │ │ │ │ -Returns the 'uv' derivative stencil interpolation weights. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_4_4_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_U_p_d_a_t_e_D_e_r_i_v_s │ │ │ │ │ -void UpdateDerivs(T1 const &srcBase, int numBase, T2 const &srcRef, U &uderivs, │ │ │ │ │ -U &vderivs, int start=-1, int end=-1) const │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_4_8_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_:_:_U_p_d_a_t_e_D_e_r_i_v_s │ │ │ │ │ -void UpdateDerivs(T1 const *srcBase, int numBase, T2 const *srcRef, U *uderivs, │ │ │ │ │ -U *vderivs, int start=-1, int end=-1) const │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_0_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -Limit stencil table class wrapping the template for compatibility. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_8_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_:_:_B_a_s_e_T_a_b_l_e │ │ │ │ │ -LimitStencilTableReal< float > BaseTable │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_8_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_L_i_m_i_t_S_t_e_n_c_i_l │ │ │ │ │ -LimitStencil GetLimitStencil(Index index) const │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_8_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -LimitStencilTable(int numControlVerts, std::vector< int > const &offsets, std:: │ │ │ │ │ -vector< int > const &sizes, std::vector< int > const &sources, std::vector< │ │ │ │ │ -float > const &weights, std::vector< float > const &duWeights, std::vector< │ │ │ │ │ -float > const &dvWeights, std::vector< float > const &duuWeights, std::vector< │ │ │ │ │ -float > const &duvWeights, std::vector< float > const &dvvWeights, bool │ │ │ │ │ -includeCoarseVerts, size_t firstOffset) │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_9_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ │ -LimitStencil operator[](Index index) const │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_9_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_t_e_x_I_n_d_i_c_e_s_:_:_G_e_t_A_d_j_a_c_e_n_c_y │ │ │ │ │ +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. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_t_e_x_I_n_d_i_c_e_s_:_:_G_e_t_N_u_m_F_a_c_e_s │ │ │ │ │ +int GetNumFaces() const │ │ │ │ │ +Returns the number of ptex faces in the mesh. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_t_e_x_I_n_d_i_c_e_s_:_:_~_P_t_e_x_I_n_d_i_c_e_s │ │ │ │ │ +~PtexIndices() │ │ │ │ │ +Destructor. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r │ │ │ │ │ +Stores topology data for a specified set of refinement options. │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_._h_:_5_1 │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _f_a_r │ │ │ │ │ - * _s_t_e_n_c_i_l_T_a_b_l_e_._h │ │ │ │ │ + * _p_t_e_x_I_n_d_i_c_e_s_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00725.html │ │ │ │ @@ -96,20 +96,20 @@ │ │ │ │ Namespaces │ │ │ │
primvarRefiner.h File Reference
│ │ │ │ │ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ #include "../sdc/types.h"
│ │ │ │ #include "../sdc/options.h"
│ │ │ │ -#include "../sdc/bilinearScheme.h"
│ │ │ │ -#include "../sdc/catmarkScheme.h"
│ │ │ │ +#include "../sdc/bilinearScheme.h"
│ │ │ │ +#include "../sdc/catmarkScheme.h"
│ │ │ │ #include "../sdc/loopScheme.h"
│ │ │ │ #include "../vtr/level.h"
│ │ │ │ #include "../vtr/fvarLevel.h"
│ │ │ │ -#include "../vtr/refinement.h"
│ │ │ │ +#include "../vtr/refinement.h"
│ │ │ │ #include "../vtr/fvarRefinement.h"
│ │ │ │ #include "../vtr/stackBuffer.h"
│ │ │ │ #include "../vtr/componentInterfaces.h"
│ │ │ │ #include "../far/types.h"
│ │ │ │ #include "../far/error.h"
│ │ │ │ #include "../far/topologyLevel.h"
│ │ │ │ #include "../far/topologyRefiner.h"
│ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00728.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/far/patchTable.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/far/patchTableFactory.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -90,33 +90,33 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
patchTable.h File Reference
│ │ │ │ +
patchTableFactory.h File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include "../far/patchDescriptor.h"
│ │ │ │ -#include "../far/patchParam.h"
│ │ │ │ -#include "../far/stencilTable.h"
│ │ │ │ -#include "../sdc/options.h"
│ │ │ │ -#include <vector>
│ │ │ │ +#include "../far/topologyRefiner.h"
│ │ │ │ +#include "../far/patchTable.h"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ 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...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -125,13 +125,13 @@ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,32 +1,32 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -patchTable.h File Reference │ │ │ │ │ +patchTableFactory.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ -#include "_._._/_f_a_r_/_p_a_t_c_h_D_e_s_c_r_i_p_t_o_r_._h" │ │ │ │ │ -#include "_._._/_f_a_r_/_p_a_t_c_h_P_a_r_a_m_._h" │ │ │ │ │ -#include "_._._/_f_a_r_/_s_t_e_n_c_i_l_T_a_b_l_e_._h" │ │ │ │ │ -#include "_._._/_s_d_c_/_o_p_t_i_o_n_s_._h" │ │ │ │ │ -#include │ │ │ │ │ +#include "_._._/_f_a_r_/_t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_._h" │ │ │ │ │ +#include "_._._/_f_a_r_/_p_a_t_c_h_T_a_b_l_e_._h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -  Container for arrays of parametric patches. _M_o_r_e_._._. │ │ │ │ │ + class   _P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y │ │ │ │ │ +  Factory for constructing a _P_a_t_c_h_T_a_b_l_e from a _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ -class   _P_a_t_c_h_T_a_b_l_e_:_:_P_a_t_c_h_H_a_n_d_l_e │ │ │ │ │ -  Handle that can be used as unique patch identifier within _P_a_t_c_h_T_a_b_l_e. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ +struct   _P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s │ │ │ │ │ +  Public options for the _P_a_t_c_h_T_a_b_l_e factory. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +struct   _P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g │ │ │ │ │ +  Obsolete internal struct not intended for public use – due to be │ │ │ │ │ + deprecated. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r │ │ │ │ │   │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _f_a_r │ │ │ │ │ - * _p_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ + * _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00728.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,4 +1,5 @@ │ │ │ │ │ var a00728 = [ │ │ │ │ │ - ["PatchTable", "a00993.html", "a00993"], │ │ │ │ │ - ["PatchHandle", "a00997.html", "a00997"] │ │ │ │ │ + ["PatchTableFactory", "a01017.html", "a01017"], │ │ │ │ │ + ["Options", "a01021.html", "a01021"], │ │ │ │ │ + ["PatchFaceTag", "a01025.html", "a01025"] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00728_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/far/patchTable.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/far/patchTableFactory.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,15 +92,15 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
patchTable.h
│ │ │ │ +
patchTableFactory.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │
2// Copyright 2013 Pixar
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │ @@ -119,798 +119,249 @@ │ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │
24
│ │ │ │ -
25#ifndef OPENSUBDIV3_FAR_PATCH_TABLE_H
│ │ │ │ -
26#define OPENSUBDIV3_FAR_PATCH_TABLE_H
│ │ │ │ +
25#ifndef OPENSUBDIV3_FAR_PATCH_TABLE_FACTORY_H
│ │ │ │ +
26#define OPENSUBDIV3_FAR_PATCH_TABLE_FACTORY_H
│ │ │ │
27
│ │ │ │
28#include "../version.h"
│ │ │ │
29
│ │ │ │ -
30#include "../far/patchDescriptor.h"
│ │ │ │ -
31#include "../far/patchParam.h"
│ │ │ │ -
32#include "../far/stencilTable.h"
│ │ │ │ -
33
│ │ │ │ -
34#include "../sdc/options.h"
│ │ │ │ +
30#include "../far/topologyRefiner.h"
│ │ │ │ +
31#include "../far/patchTable.h"
│ │ │ │ +
32
│ │ │ │ +
33namespace OpenSubdiv {
│ │ │ │ +
34namespace OPENSUBDIV_VERSION {
│ │ │ │
35
│ │ │ │ -
36#include <vector>
│ │ │ │ +
36namespace Far {
│ │ │ │
37
│ │ │ │ -
38namespace OpenSubdiv {
│ │ │ │ -
39namespace OPENSUBDIV_VERSION {
│ │ │ │ -
40
│ │ │ │ -
41namespace Far {
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
41public:
│ │ │ │
42
│ │ │ │ +
│ │ │ │ +
45 struct Options {
│ │ │ │ +
46
│ │ │ │
│ │ │ │ - │ │ │ │ -
56
│ │ │ │ -
57public:
│ │ │ │ -
58
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
61 // XXXX manuelk members will eventually be made private
│ │ │ │ -
62 public:
│ │ │ │ -
63
│ │ │ │ -
64 friend class PatchTable;
│ │ │ │ -
65 friend class PatchMap;
│ │ │ │ -
66
│ │ │ │ -
67 Index arrayIndex, // Array index of the patch
│ │ │ │ -
68 patchIndex, // Absolute Index of the patch
│ │ │ │ -
69 vertIndex; // Relative offset to the first CV of the patch in array
│ │ │ │ -
70 };
│ │ │ │ -
│ │ │ │ -
71
│ │ │ │ -
72public:
│ │ │ │ -
73
│ │ │ │ -
75 PatchTable(PatchTable const & src);
│ │ │ │ -
76
│ │ │ │ - │ │ │ │ -
79
│ │ │ │ -
81 bool IsFeatureAdaptive() const;
│ │ │ │ -
82
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
85 return (int)_patchVerts.size();
│ │ │ │ -
86 }
│ │ │ │ -
│ │ │ │ -
87
│ │ │ │ -
89 int GetNumPatchesTotal() const;
│ │ │ │ -
90
│ │ │ │ -
92 int GetMaxValence() const { return _maxValence; }
│ │ │ │ -
93
│ │ │ │ -
95 int GetNumPtexFaces() const { return _numPtexFaces; }
│ │ │ │ -
96
│ │ │ │ -
97
│ │ │ │ -
99
│ │ │ │ -
105
│ │ │ │ - │ │ │ │ -
108
│ │ │ │ - │ │ │ │ -
111
│ │ │ │ -
113 PatchParam GetPatchParam(PatchHandle const & handle) const;
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
61 };
│ │ │ │ +
│ │ │ │ +
62
│ │ │ │ +
│ │ │ │ +
63 Options(unsigned int maxIsolation=10) :
│ │ │ │ +
64 generateAllLevels(false),
│ │ │ │ + │ │ │ │ + │ │ │ │ +
67 triangulateQuads(false),
│ │ │ │ + │ │ │ │ +
69 useInfSharpPatch(false),
│ │ │ │ +
70 maxIsolationLevel(maxIsolation & 0xf),
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
75 generateFVarTables(false),
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
82 { }
│ │ │ │ +
│ │ │ │ +
83
│ │ │ │ + │ │ │ │ +
86
│ │ │ │ +
88 void SetEndCapType(EndCapType e) { endCapType = e & 0x7; }
│ │ │ │ +
89
│ │ │ │ +
91 void SetMaxIsolationLevel(unsigned int level) { maxIsolationLevel = level & 0xf; }
│ │ │ │ +
92
│ │ │ │ +
94 template <typename REAL> void SetPatchPrecision();
│ │ │ │ +
95
│ │ │ │ +
97 template <typename REAL> void SetFVarPatchPrecision();
│ │ │ │ +
98
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
102
│ │ │ │ +
103 adaptiveOptions.useInfSharpPatch = useInfSharpPatch;
│ │ │ │ + │ │ │ │ +
105 adaptiveOptions.considerFVarChannels = generateFVarTables &&
│ │ │ │ + │ │ │ │ +
107 return adaptiveOptions;
│ │ │ │ +
108 }
│ │ │ │ +
│ │ │ │ +
109
│ │ │ │ +
110 unsigned int generateAllLevels : 1,
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
114
│ │ │ │ -
116 ConstIndexArray GetPatchVertices(int array, int patch) const;
│ │ │ │ -
117
│ │ │ │ -
119 PatchParam GetPatchParam(int array, int patch) const;
│ │ │ │ -
121
│ │ │ │ -
122
│ │ │ │ -
124
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
118
│ │ │ │ +
119 // end-capping
│ │ │ │ + │ │ │ │ + │ │ │ │ +
123
│ │ │ │ +
124 // varying
│ │ │ │ + │ │ │ │ + │ │ │ │ +
127
│ │ │ │ +
128 // face-varying
│ │ │ │ + │ │ │ │
130
│ │ │ │ -
132 int GetNumPatchArrays() const;
│ │ │ │ -
133
│ │ │ │ -
135 int GetNumPatches(int array) const;
│ │ │ │ -
136
│ │ │ │ -
138 int GetNumControlVertices(int array) const;
│ │ │ │ -
139
│ │ │ │ - │ │ │ │ +
131 // precision
│ │ │ │ + │ │ │ │ + │ │ │ │ +
134
│ │ │ │ +
135 // legacy behaviors (default to true)
│ │ │ │ + │ │ │ │ + │ │ │ │ +
138
│ │ │ │ + │ │ │ │ +
140 int const * fvarChannelIndices;
│ │ │ │ +
141 };
│ │ │ │ +
│ │ │ │
142
│ │ │ │ - │ │ │ │ -
145
│ │ │ │ -
147 ConstPatchParamArray const GetPatchParams(int array) const;
│ │ │ │ -
149
│ │ │ │ -
150
│ │ │ │ -
152
│ │ │ │ -
159
│ │ │ │ -
161 int GetNumLocalPoints() const;
│ │ │ │ -
162
│ │ │ │ - │ │ │ │ -
165
│ │ │ │ -
167 template <typename REAL>
│ │ │ │ - │ │ │ │ -
169
│ │ │ │ -
172 template <typename REAL> bool LocalPointStencilPrecisionMatchesType() const;
│ │ │ │ -
173
│ │ │ │ -
186 template <class T> void
│ │ │ │ -
187 ComputeLocalPointValues(T const *src, T *dst) const;
│ │ │ │ -
188
│ │ │ │ -
189
│ │ │ │ - │ │ │ │ -
192
│ │ │ │ - │ │ │ │ -
195
│ │ │ │ -
197 template <typename REAL>
│ │ │ │ - │ │ │ │ -
199
│ │ │ │ -
202 template <typename REAL> bool LocalPointVaryingStencilPrecisionMatchesType() const;
│ │ │ │ -
203
│ │ │ │ -
216 template <class T> void
│ │ │ │ -
217 ComputeLocalPointValuesVarying(T const *src, T *dst) const;
│ │ │ │ +
175 static PatchTable * Create(TopologyRefiner const & refiner,
│ │ │ │ +
176 Options options = Options(),
│ │ │ │ +
177 ConstIndexArray selectedFaces = ConstIndexArray());
│ │ │ │ +
178
│ │ │ │ +
179public:
│ │ │ │ +
180 // PatchFaceTag
│ │ │ │ +
181 //
│ │ │ │ +
182 // This simple struct was previously used within the factory to take inventory of
│ │ │ │ +
183 // various kinds of patches to fully allocate buffers prior to populating them. It
│ │ │ │ +
184 // was not intended to be exposed as part of the public interface.
│ │ │ │ +
185 //
│ │ │ │ +
186 // It is no longer used internally and is being kept here to respect preservation
│ │ │ │ +
187 // of the public interface, but it will be deprecated at the earliest opportunity.
│ │ │ │ +
188 //
│ │ │ │ +
191 //
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
193 public:
│ │ │ │ +
194 unsigned int _hasPatch : 1;
│ │ │ │ +
195 unsigned int _isRegular : 1;
│ │ │ │ +
196 unsigned int _transitionMask : 4;
│ │ │ │ +
197 unsigned int _boundaryMask : 4;
│ │ │ │ +
198 unsigned int _boundaryIndex : 2;
│ │ │ │ +
199 unsigned int _boundaryCount : 3;
│ │ │ │ +
200 unsigned int _hasBoundaryEdge : 3;
│ │ │ │ +
201 unsigned int _isSingleCrease : 1;
│ │ │ │ +
202
│ │ │ │ +
203 void clear();
│ │ │ │ +
204 void assignBoundaryPropertiesFromEdgeMask(int boundaryEdgeMask);
│ │ │ │ +
205 void assignBoundaryPropertiesFromVertexMask(int boundaryVertexMask);
│ │ │ │ +
206 void assignTransitionPropertiesFromEdgeMask(int boundaryVertexMask);
│ │ │ │ +
207 };
│ │ │ │ +
│ │ │ │ +
208 typedef std::vector<PatchFaceTag> PatchTagVector;
│ │ │ │ +
209};
│ │ │ │ +
│ │ │ │ +
210
│ │ │ │ +
211
│ │ │ │ +
│ │ │ │ +
212template <> inline void PatchTableFactory::Options::SetPatchPrecision<float>() {
│ │ │ │ +
213 patchPrecisionDouble = false;
│ │ │ │ +
214}
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
215template <> inline void PatchTableFactory::Options::SetFVarPatchPrecision<float>() {
│ │ │ │ +
216 fvarPatchPrecisionDouble = false;
│ │ │ │ +
217}
│ │ │ │ +
│ │ │ │
218
│ │ │ │ -
219
│ │ │ │ -
221 int GetNumLocalPointsFaceVarying(int channel = 0) const;
│ │ │ │ -
222
│ │ │ │ -
224 StencilTable const *GetLocalPointFaceVaryingStencilTable(int channel = 0) const;
│ │ │ │ +
219template <> inline void PatchTableFactory::Options::SetPatchPrecision<double>() {
│ │ │ │ +
220 patchPrecisionDouble = true;
│ │ │ │ +
221}
│ │ │ │ +
222template <> inline void PatchTableFactory::Options::SetFVarPatchPrecision<double>() {
│ │ │ │ +
223 fvarPatchPrecisionDouble = true;
│ │ │ │ +
224}
│ │ │ │
225
│ │ │ │ -
227 template <typename REAL>
│ │ │ │ - │ │ │ │ -
229
│ │ │ │ -
232 template <typename REAL> bool LocalPointFaceVaryingStencilPrecisionMatchesType() const;
│ │ │ │ +
226
│ │ │ │ +
227} // end namespace Far
│ │ │ │ +
228
│ │ │ │ +
229} // end namespace OPENSUBDIV_VERSION
│ │ │ │ +
230using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
231
│ │ │ │ +
232} // end namespace OpenSubdiv
│ │ │ │
233
│ │ │ │ -
248 template <class T> void
│ │ │ │ -
249 ComputeLocalPointValuesFaceVarying(T const *src, T *dst, int channel = 0) const;
│ │ │ │ -
251
│ │ │ │ -
252
│ │ │ │ -
254
│ │ │ │ -
255
│ │ │ │ - │ │ │ │ -
260
│ │ │ │ - │ │ │ │ -
263
│ │ │ │ -
264 typedef std::vector<Index> VertexValenceTable;
│ │ │ │ -
265
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
268 return _vertexValenceTable;
│ │ │ │ -
269 }
│ │ │ │ -
│ │ │ │ -
271
│ │ │ │ -
272
│ │ │ │ -
274
│ │ │ │ -
280
│ │ │ │ - │ │ │ │ -
284
│ │ │ │ -
287 float GetSingleCreasePatchSharpnessValue(int array, int patch) const;
│ │ │ │ -
289
│ │ │ │ -
290
│ │ │ │ -
292
│ │ │ │ -
298
│ │ │ │ - │ │ │ │ -
301
│ │ │ │ - │ │ │ │ -
304
│ │ │ │ -
306 ConstIndexArray GetPatchVaryingVertices(int array, int patch) const;
│ │ │ │ -
307
│ │ │ │ - │ │ │ │ -
310
│ │ │ │ - │ │ │ │ -
314
│ │ │ │ -
315
│ │ │ │ -
317
│ │ │ │ -
323
│ │ │ │ - │ │ │ │ -
326
│ │ │ │ - │ │ │ │ -
329
│ │ │ │ - │ │ │ │ -
332
│ │ │ │ - │ │ │ │ -
335
│ │ │ │ -
337 ConstIndexArray GetPatchFVarValues(PatchHandle const & handle, int channel = 0) const;
│ │ │ │ -
338
│ │ │ │ -
340 ConstIndexArray GetPatchFVarValues(int array, int patch, int channel = 0) const;
│ │ │ │ -
341
│ │ │ │ -
343 ConstIndexArray GetPatchArrayFVarValues(int array, int channel = 0) const;
│ │ │ │ -
344
│ │ │ │ -
346 ConstIndexArray GetFVarValues(int channel = 0) const;
│ │ │ │ -
347
│ │ │ │ -
349 int GetFVarValueStride(int channel = 0) const;
│ │ │ │ -
350
│ │ │ │ -
352 PatchParam GetPatchFVarPatchParam(PatchHandle const & handle, int channel = 0) const;
│ │ │ │ -
353
│ │ │ │ -
355 PatchParam GetPatchFVarPatchParam(int array, int patch, int channel = 0) const;
│ │ │ │ -
356
│ │ │ │ -
358 ConstPatchParamArray GetPatchArrayFVarPatchParams(int array, int channel = 0) const;
│ │ │ │ -
359
│ │ │ │ - │ │ │ │ -
362
│ │ │ │ - │ │ │ │ -
366
│ │ │ │ -
367
│ │ │ │ -
369
│ │ │ │ -
374
│ │ │ │ -
375 typedef std::vector<Index> PatchVertsTable;
│ │ │ │ -
376
│ │ │ │ -
378 PatchVertsTable const & GetPatchControlVerticesTable() const { return _patchVerts; }
│ │ │ │ -
379
│ │ │ │ -
381 PatchParamTable const & GetPatchParamTable() const { return _paramTable; }
│ │ │ │ -
382
│ │ │ │ -
384 std::vector<Index> const &GetSharpnessIndexTable() const { return _sharpnessIndices; }
│ │ │ │ -
385
│ │ │ │ -
387 std::vector<float> const &GetSharpnessValues() const { return _sharpnessValues; }
│ │ │ │ -
388
│ │ │ │ -
389 typedef std::vector<unsigned int> QuadOffsetsTable;
│ │ │ │ -
390
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
393 return _quadOffsetsTable;
│ │ │ │ -
394 }
│ │ │ │ -
│ │ │ │ -
396
│ │ │ │ -
398 void print() const;
│ │ │ │ -
399
│ │ │ │ -
400public:
│ │ │ │ -
401
│ │ │ │ -
403
│ │ │ │ -
405
│ │ │ │ -
428 template <typename REAL>
│ │ │ │ -
429 void EvaluateBasis(PatchHandle const & handle, REAL u, REAL v,
│ │ │ │ -
430 REAL wP[], REAL wDu[] = 0, REAL wDv[] = 0,
│ │ │ │ -
431 REAL wDuu[] = 0, REAL wDuv[] = 0, REAL wDvv[] = 0) const;
│ │ │ │ -
432
│ │ │ │ -
435 void EvaluateBasis(PatchHandle const & handle, float u, float v,
│ │ │ │ -
436 float wP[], float wDu[] = 0, float wDv[] = 0,
│ │ │ │ -
437 float wDuu[] = 0, float wDuv[] = 0, float wDvv[] = 0) const;
│ │ │ │ -
438
│ │ │ │ -
441 void EvaluateBasis(PatchHandle const & handle, double u, double v,
│ │ │ │ -
442 double wP[], double wDu[] = 0, double wDv[] = 0,
│ │ │ │ -
443 double wDuu[] = 0, double wDuv[] = 0, double wDvv[] = 0) const;
│ │ │ │ -
444
│ │ │ │ -
467 template <typename REAL>
│ │ │ │ -
468 void EvaluateBasisVarying(PatchHandle const & handle, REAL u, REAL v,
│ │ │ │ -
469 REAL wP[], REAL wDu[] = 0, REAL wDv[] = 0,
│ │ │ │ -
470 REAL wDuu[] = 0, REAL wDuv[] = 0, REAL wDvv[] = 0) const;
│ │ │ │ -
471
│ │ │ │ -
474 void EvaluateBasisVarying(PatchHandle const & handle, float u, float v,
│ │ │ │ -
475 float wP[], float wDu[] = 0, float wDv[] = 0,
│ │ │ │ -
476 float wDuu[] = 0, float wDuv[] = 0, float wDvv[] = 0) const;
│ │ │ │ -
477
│ │ │ │ -
480 void EvaluateBasisVarying(PatchHandle const & handle, double u, double v,
│ │ │ │ -
481 double wP[], double wDu[] = 0, double wDv[] = 0,
│ │ │ │ -
482 double wDuu[] = 0, double wDuv[] = 0, double wDvv[] = 0) const;
│ │ │ │ -
483
│ │ │ │ -
508 template <typename REAL>
│ │ │ │ -
509 void EvaluateBasisFaceVarying(PatchHandle const & handle, REAL u, REAL v,
│ │ │ │ -
510 REAL wP[], REAL wDu[] = 0, REAL wDv[] = 0,
│ │ │ │ -
511 REAL wDuu[] = 0, REAL wDuv[] = 0, REAL wDvv[] = 0,
│ │ │ │ -
512 int channel = 0) const;
│ │ │ │ -
513
│ │ │ │ -
516 void EvaluateBasisFaceVarying(PatchHandle const & handle, float u, float v,
│ │ │ │ -
517 float wP[], float wDu[] = 0, float wDv[] = 0,
│ │ │ │ -
518 float wDuu[] = 0, float wDuv[] = 0, float wDvv[] = 0,
│ │ │ │ -
519 int channel = 0) const;
│ │ │ │ -
520
│ │ │ │ -
523 void EvaluateBasisFaceVarying(PatchHandle const & handle, double u, double v,
│ │ │ │ -
524 double wP[], double wDu[] = 0, double wDv[] = 0,
│ │ │ │ -
525 double wDuu[] = 0, double wDuv[] = 0, double wDvv[] = 0,
│ │ │ │ -
526 int channel = 0) const;
│ │ │ │ -
528
│ │ │ │ -
529protected:
│ │ │ │ -
530
│ │ │ │ -
531 friend class PatchTableBuilder;
│ │ │ │ -
532
│ │ │ │ -
533 // Factory constructor
│ │ │ │ -
534 PatchTable(int maxvalence);
│ │ │ │ -
535
│ │ │ │ -
536 Index getPatchIndex(int array, int patch) const;
│ │ │ │ -
537
│ │ │ │ - │ │ │ │ -
539
│ │ │ │ - │ │ │ │ -
541 float * getSharpnessValues(Index arrayIndex);
│ │ │ │ -
542
│ │ │ │ -
543private:
│ │ │ │ -
544
│ │ │ │ -
545 //
│ │ │ │ -
546 // Patch arrays
│ │ │ │ -
547 //
│ │ │ │ -
548 struct PatchArray {
│ │ │ │ -
549 PatchArray(PatchDescriptor d, int np, Index v, Index p, Index qo) :
│ │ │ │ -
550 desc(d), numPatches(np), vertIndex(v),
│ │ │ │ -
551 patchIndex(p), quadOffsetIndex (qo) { }
│ │ │ │ -
552
│ │ │ │ -
553 void print() const;
│ │ │ │ -
554
│ │ │ │ -
555 PatchDescriptor desc; // type of patches in the array
│ │ │ │ -
556
│ │ │ │ -
557 int numPatches; // number of patches in the array
│ │ │ │ -
558
│ │ │ │ -
559 Index vertIndex, // index to the first control vertex
│ │ │ │ -
560 patchIndex, // absolute index of the first patch in the array
│ │ │ │ -
561 quadOffsetIndex; // index of the first quad offset entry
│ │ │ │ -
562 };
│ │ │ │ -
563
│ │ │ │ -
564 typedef std::vector<PatchArray> PatchArrayVector;
│ │ │ │ -
565
│ │ │ │ -
566 PatchArray & getPatchArray(Index arrayIndex);
│ │ │ │ -
567 PatchArray const & getPatchArray(Index arrayIndex) const;
│ │ │ │ -
568
│ │ │ │ -
569 void reservePatchArrays(int numPatchArrays);
│ │ │ │ -
570 void pushPatchArray(PatchDescriptor desc, int npatches,
│ │ │ │ -
571 Index * vidx, Index * pidx, Index * qoidx=0);
│ │ │ │ -
572
│ │ │ │ -
573 IndexArray getPatchArrayVertices(int arrayIndex);
│ │ │ │ -
574
│ │ │ │ -
575 Index findPatchArray(PatchDescriptor desc);
│ │ │ │ -
576
│ │ │ │ -
577
│ │ │ │ -
578 //
│ │ │ │ -
579 // Varying patch arrays
│ │ │ │ -
580 //
│ │ │ │ -
581 IndexArray getPatchArrayVaryingVertices(int arrayIndex);
│ │ │ │ -
582
│ │ │ │ -
583 void allocateVaryingVertices(
│ │ │ │ -
584 PatchDescriptor desc, int numPatches);
│ │ │ │ -
585 void populateVaryingVertices();
│ │ │ │ -
586
│ │ │ │ -
587 //
│ │ │ │ -
588 // Face-varying patch channels
│ │ │ │ -
589 //
│ │ │ │ -
590
│ │ │ │ -
591 //
│ │ │ │ -
592 // FVarPatchChannel
│ │ │ │ -
593 //
│ │ │ │ -
594 // Stores a record for each patch in the primitive :
│ │ │ │ -
595 //
│ │ │ │ -
596 // - Each patch in the PatchTable has a corresponding patch in each
│ │ │ │ -
597 // face-varying patch channel. Patch vertex indices are sorted in the same
│ │ │ │ -
598 // patch-type order as PatchTable::PTables. Face-varying data for a patch
│ │ │ │ -
599 // can therefore be quickly accessed by using the patch primitive ID as
│ │ │ │ -
600 // index into patchValueOffsets to locate the face-varying control vertex
│ │ │ │ -
601 // indices.
│ │ │ │ -
602 //
│ │ │ │ -
603 // - Face-varying channels can have a different interpolation modes
│ │ │ │ -
604 //
│ │ │ │ -
605 // - Unlike "vertex" patches, there are no transition masks required
│ │ │ │ -
606 // for face-varying patches.
│ │ │ │ -
607 //
│ │ │ │ -
608 // - Face-varying patches still require boundary edge masks.
│ │ │ │ -
609 //
│ │ │ │ -
610 // - currently most patches with sharp boundaries but smooth interiors have
│ │ │ │ -
611 // to be isolated to level 10 : we need a special type of bicubic patch
│ │ │ │ -
612 // similar to single-crease to resolve this condition without requiring
│ │ │ │ -
613 // isolation if possible
│ │ │ │ -
614 //
│ │ │ │ -
615 struct FVarPatchChannel {
│ │ │ │ - │ │ │ │ -
617
│ │ │ │ -
618 PatchDescriptor regDesc;
│ │ │ │ -
619 PatchDescriptor irregDesc;
│ │ │ │ -
620
│ │ │ │ -
621 int stride;
│ │ │ │ -
622
│ │ │ │ -
623 std::vector<Index> patchValues;
│ │ │ │ -
624 std::vector<PatchParam> patchParam;
│ │ │ │ -
625 };
│ │ │ │ -
626 typedef std::vector<FVarPatchChannel> FVarPatchChannelVector;
│ │ │ │ -
627
│ │ │ │ -
628 FVarPatchChannel & getFVarPatchChannel(int channel);
│ │ │ │ -
629 FVarPatchChannel const & getFVarPatchChannel(int channel) const;
│ │ │ │ -
630
│ │ │ │ -
631 void allocateFVarPatchChannels(int numChannels);
│ │ │ │ -
632 void allocateFVarPatchChannelValues(
│ │ │ │ -
633 PatchDescriptor regDesc, PatchDescriptor irregDesc,
│ │ │ │ -
634 int numPatches, int channel);
│ │ │ │ -
635
│ │ │ │ -
636 // deprecated
│ │ │ │ -
637 void setFVarPatchChannelLinearInterpolation(
│ │ │ │ -
638 Sdc::Options::FVarLinearInterpolation interpolation, int channel);
│ │ │ │ -
639
│ │ │ │ -
640 IndexArray getFVarValues(int channel);
│ │ │ │ -
641 ConstIndexArray getPatchFVarValues(int patch, int channel) const;
│ │ │ │ -
642
│ │ │ │ -
643 PatchParamArray getFVarPatchParams(int channel);
│ │ │ │ -
644 PatchParam getPatchFVarPatchParam(int patch, int channel) const;
│ │ │ │ -
645
│ │ │ │ -
646private:
│ │ │ │ -
647 //
│ │ │ │ -
648 // Simple private class to hold stencil table pointers of varying precision,
│ │ │ │ -
649 // where the discriminant of the precision is external.
│ │ │ │ -
650 //
│ │ │ │ -
651 // NOTE that this is a simple pointer container and NOT a smart pointer that
│ │ │ │ -
652 // manages the ownership of the object referred to by it.
│ │ │ │ -
653 //
│ │ │ │ -
654 class StencilTablePtr {
│ │ │ │ -
655 private:
│ │ │ │ -
656 typedef StencilTableReal<float> float_type;
│ │ │ │ -
657 typedef StencilTableReal<double> double_type;
│ │ │ │ -
658
│ │ │ │ -
659 union {
│ │ │ │ -
660 float_type * _fPtr;
│ │ │ │ -
661 double_type * _dPtr;
│ │ │ │ -
662 };
│ │ │ │ -
663
│ │ │ │ -
664 public:
│ │ │ │ -
665 StencilTablePtr() { _fPtr = 0; }
│ │ │ │ -
666 StencilTablePtr(float_type * ptr) { _fPtr = ptr; }
│ │ │ │ -
667 StencilTablePtr(double_type * ptr) { _dPtr = ptr; }
│ │ │ │ -
668
│ │ │ │ -
669 operator bool() const { return _fPtr != 0; }
│ │ │ │ -
670
│ │ │ │ -
671 void Set() { _fPtr = 0; }
│ │ │ │ -
672 void Set(float_type * ptr) { _fPtr = ptr; }
│ │ │ │ -
673 void Set(double_type * ptr) { _dPtr = ptr; }
│ │ │ │ -
674
│ │ │ │ -
675 template <typename REAL> StencilTableReal<REAL> * Get() const;
│ │ │ │ -
676 };
│ │ │ │ -
677
│ │ │ │ -
678private:
│ │ │ │ -
679
│ │ │ │ -
680 //
│ │ │ │ -
681 // Topology
│ │ │ │ -
682 //
│ │ │ │ -
683
│ │ │ │ -
684 int _maxValence, // highest vertex valence found in the mesh
│ │ │ │ -
685 _numPtexFaces; // total number of ptex faces
│ │ │ │ -
686
│ │ │ │ -
687 PatchArrayVector _patchArrays; // Vector of descriptors for arrays of patches
│ │ │ │ -
688
│ │ │ │ -
689 std::vector<Index> _patchVerts; // Indices of the control vertices of the patches
│ │ │ │ -
690
│ │ │ │ -
691 PatchParamTable _paramTable; // PatchParam bitfields (one per patch)
│ │ │ │ -
692
│ │ │ │ -
693 //
│ │ │ │ -
694 // Extraordinary vertex closed-form evaluation / endcap basis conversion
│ │ │ │ -
695 //
│ │ │ │ -
696 // XXXtakahito: these data will probably be replaced with mask coefficient or something
│ │ │ │ -
697 // SchemeWorker populates.
│ │ │ │ -
698 //
│ │ │ │ -
699 QuadOffsetsTable _quadOffsetsTable; // Quad offsets (for Gregory patches)
│ │ │ │ -
700 VertexValenceTable _vertexValenceTable; // Vertex valence table (for Gregory patches)
│ │ │ │ -
701
│ │ │ │ -
702 StencilTablePtr _localPointStencils; // local point conversion stencils
│ │ │ │ -
703 StencilTablePtr _localPointVaryingStencils; // local point varying stencils
│ │ │ │ -
704
│ │ │ │ -
705 //
│ │ │ │ -
706 // Varying data
│ │ │ │ -
707 //
│ │ │ │ -
708 PatchDescriptor _varyingDesc;
│ │ │ │ -
709
│ │ │ │ -
710 std::vector<Index> _varyingVerts;
│ │ │ │ -
711
│ │ │ │ -
712 //
│ │ │ │ -
713 // Face-varying data
│ │ │ │ -
714 //
│ │ │ │ -
715 FVarPatchChannelVector _fvarChannels;
│ │ │ │ -
716
│ │ │ │ -
717 std::vector<StencilTablePtr> _localPointFaceVaryingStencils;
│ │ │ │ -
718
│ │ │ │ -
719 //
│ │ │ │ -
720 // 'single-crease' patch sharpness tables
│ │ │ │ -
721 //
│ │ │ │ -
722 std::vector<Index> _sharpnessIndices; // Indices of single-crease sharpness (one per patch)
│ │ │ │ -
723 std::vector<float> _sharpnessValues; // Sharpness values.
│ │ │ │ -
724
│ │ │ │ -
725 //
│ │ │ │ -
726 // Construction history -- relevant to at least one public query:
│ │ │ │ -
727 //
│ │ │ │ -
728 unsigned int _isUniformLinear : 1;
│ │ │ │ -
729
│ │ │ │ -
730 //
│ │ │ │ -
731 // Precision -- only applies to local-point stencil tables
│ │ │ │ -
732 //
│ │ │ │ -
733 unsigned int _vertexPrecisionIsDouble : 1;
│ │ │ │ -
734 unsigned int _varyingPrecisionIsDouble : 1;
│ │ │ │ -
735 unsigned int _faceVaryingPrecisionIsDouble : 1;
│ │ │ │ -
736};
│ │ │ │ -
│ │ │ │ -
737
│ │ │ │ -
738
│ │ │ │ -
739//
│ │ │ │ -
740// Template specializations for float/double -- to be defined before used:
│ │ │ │ -
741//
│ │ │ │ -
742template <> inline StencilTableReal<float> *
│ │ │ │ -
743PatchTable::StencilTablePtr::Get<float>() const { return _fPtr; }
│ │ │ │ -
744
│ │ │ │ -
745template <> inline StencilTableReal<double> *
│ │ │ │ -
746PatchTable::StencilTablePtr::Get<double>() const { return _dPtr; }
│ │ │ │ -
747
│ │ │ │ -
│ │ │ │ -
748template <> inline bool
│ │ │ │ -
749PatchTable::LocalPointStencilPrecisionMatchesType<float>() const {
│ │ │ │ -
750 return !_vertexPrecisionIsDouble;
│ │ │ │ -
751}
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
752template <> inline bool
│ │ │ │ -
753PatchTable::LocalPointVaryingStencilPrecisionMatchesType<float>() const {
│ │ │ │ -
754 return !_varyingPrecisionIsDouble;
│ │ │ │ -
755}
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
756template <> inline bool
│ │ │ │ -
757PatchTable::LocalPointFaceVaryingStencilPrecisionMatchesType<float>() const {
│ │ │ │ -
758 return !_faceVaryingPrecisionIsDouble;
│ │ │ │ -
759}
│ │ │ │ -
│ │ │ │ -
760
│ │ │ │ -
│ │ │ │ -
761template <> inline bool
│ │ │ │ -
762PatchTable::LocalPointStencilPrecisionMatchesType<double>() const {
│ │ │ │ -
763 return _vertexPrecisionIsDouble;
│ │ │ │ -
764}
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
765template <> inline bool
│ │ │ │ -
766PatchTable::LocalPointVaryingStencilPrecisionMatchesType<double>() const {
│ │ │ │ -
767 return _varyingPrecisionIsDouble;
│ │ │ │ -
768}
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
769template <> inline bool
│ │ │ │ -
770PatchTable::LocalPointFaceVaryingStencilPrecisionMatchesType<double>() const {
│ │ │ │ -
771 return _faceVaryingPrecisionIsDouble;
│ │ │ │ -
772}
│ │ │ │ -
│ │ │ │ -
773
│ │ │ │ -
774//
│ │ │ │ -
775// StencilTable access -- backward compatible and generic:
│ │ │ │ -
776//
│ │ │ │ -
777inline StencilTable const *
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
779 assert(LocalPointStencilPrecisionMatchesType<float>());
│ │ │ │ -
780 return static_cast<StencilTable const *>(_localPointStencils.Get<float>());
│ │ │ │ -
781}
│ │ │ │ -
│ │ │ │ -
782inline StencilTable const *
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
784 assert(LocalPointVaryingStencilPrecisionMatchesType<float>());
│ │ │ │ -
785 return static_cast<StencilTable const *>(
│ │ │ │ -
786 _localPointVaryingStencils.Get<float>());
│ │ │ │ -
787}
│ │ │ │ -
│ │ │ │ -
788inline StencilTable const *
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
790 assert(LocalPointFaceVaryingStencilPrecisionMatchesType<float>());
│ │ │ │ -
791 if (channel >= 0 && channel < (int)_localPointFaceVaryingStencils.size()) {
│ │ │ │ -
792 return static_cast<StencilTable const *>(
│ │ │ │ -
793 _localPointFaceVaryingStencils[channel].Get<float>());
│ │ │ │ -
794 }
│ │ │ │ -
795 return NULL;
│ │ │ │ -
796}
│ │ │ │ -
│ │ │ │ -
797
│ │ │ │ -
798template <typename REAL>
│ │ │ │ -
799inline StencilTableReal<REAL> const *
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
801 assert(LocalPointStencilPrecisionMatchesType<REAL>());
│ │ │ │ -
802 return _localPointStencils.Get<REAL>();
│ │ │ │ -
803}
│ │ │ │ -
│ │ │ │ -
804template <typename REAL>
│ │ │ │ -
805inline StencilTableReal<REAL> const *
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
807 assert(LocalPointVaryingStencilPrecisionMatchesType<REAL>());
│ │ │ │ -
808 return _localPointVaryingStencils.Get<REAL>();
│ │ │ │ -
809}
│ │ │ │ -
│ │ │ │ -
810template <typename REAL>
│ │ │ │ -
811inline StencilTableReal<REAL> const *
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
813 assert(LocalPointFaceVaryingStencilPrecisionMatchesType<REAL>());
│ │ │ │ -
814 if (channel >= 0 && channel < (int)_localPointFaceVaryingStencils.size()) {
│ │ │ │ -
815 return _localPointFaceVaryingStencils[channel].Get<REAL>();
│ │ │ │ -
816 }
│ │ │ │ -
817 return NULL;
│ │ │ │ -
818}
│ │ │ │ -
│ │ │ │ -
819
│ │ │ │ -
820
│ │ │ │ -
821//
│ │ │ │ -
822// Computation of local point values:
│ │ │ │ -
823//
│ │ │ │ -
824template <class T>
│ │ │ │ -
825inline void
│ │ │ │ -
│ │ │ │ -
826PatchTable::ComputeLocalPointValues(T const *src, T *dst) const {
│ │ │ │ -
827 assert(LocalPointStencilPrecisionMatchesType<float>());
│ │ │ │ -
828 if (_localPointStencils) {
│ │ │ │ -
829 _localPointStencils.Get<float>()->UpdateValues(src, dst);
│ │ │ │ -
830 }
│ │ │ │ -
831}
│ │ │ │ -
│ │ │ │ -
832
│ │ │ │ -
833template <class T>
│ │ │ │ -
834inline void
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
836 assert(LocalPointVaryingStencilPrecisionMatchesType<float>());
│ │ │ │ -
837 if (_localPointVaryingStencils) {
│ │ │ │ -
838 _localPointVaryingStencils.Get<float>()->UpdateValues(src, dst);
│ │ │ │ -
839 }
│ │ │ │ -
840}
│ │ │ │ -
│ │ │ │ -
841
│ │ │ │ -
842template <class T>
│ │ │ │ -
843inline void
│ │ │ │ -
│ │ │ │ -
844PatchTable::ComputeLocalPointValuesFaceVarying(T const *src, T *dst, int channel) const {
│ │ │ │ -
845 assert(LocalPointFaceVaryingStencilPrecisionMatchesType<float>());
│ │ │ │ -
846 if (channel >= 0 && channel < (int)_localPointFaceVaryingStencils.size()) {
│ │ │ │ -
847 if (_localPointFaceVaryingStencils[channel]) {
│ │ │ │ -
848 _localPointFaceVaryingStencils[channel].Get<float>()->UpdateValues(src, dst);
│ │ │ │ -
849 }
│ │ │ │ -
850 }
│ │ │ │ -
851}
│ │ │ │ -
│ │ │ │ -
852
│ │ │ │ -
853
│ │ │ │ -
854//
│ │ │ │ -
855// Basis evaluation overloads
│ │ │ │ -
856//
│ │ │ │ -
857inline void
│ │ │ │ -
│ │ │ │ -
858PatchTable::EvaluateBasis(PatchHandle const & handle, float u, float v,
│ │ │ │ -
859 float wP[], float wDu[], float wDv[],
│ │ │ │ -
860 float wDuu[], float wDuv[], float wDvv[]) const {
│ │ │ │ -
861
│ │ │ │ -
862 EvaluateBasis<float>(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv);
│ │ │ │ -
863}
│ │ │ │ -
│ │ │ │ -
864inline void
│ │ │ │ -
│ │ │ │ -
865PatchTable::EvaluateBasis(PatchHandle const & handle, double u, double v,
│ │ │ │ -
866 double wP[], double wDu[], double wDv[],
│ │ │ │ -
867 double wDuu[], double wDuv[], double wDvv[]) const {
│ │ │ │ -
868
│ │ │ │ -
869 EvaluateBasis<double>(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv);
│ │ │ │ -
870}
│ │ │ │ -
│ │ │ │ -
871
│ │ │ │ -
872inline void
│ │ │ │ -
│ │ │ │ -
873PatchTable::EvaluateBasisVarying(PatchHandle const & handle, float u, float v,
│ │ │ │ -
874 float wP[], float wDu[], float wDv[],
│ │ │ │ -
875 float wDuu[], float wDuv[], float wDvv[]) const {
│ │ │ │ -
876
│ │ │ │ -
877 EvaluateBasisVarying<float>(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv);
│ │ │ │ -
878}
│ │ │ │ -
│ │ │ │ -
879inline void
│ │ │ │ -
│ │ │ │ -
880PatchTable::EvaluateBasisVarying(PatchHandle const & handle, double u, double v,
│ │ │ │ -
881 double wP[], double wDu[], double wDv[],
│ │ │ │ -
882 double wDuu[], double wDuv[], double wDvv[]) const {
│ │ │ │ -
883
│ │ │ │ -
884 EvaluateBasisVarying<double>(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv);
│ │ │ │ -
885}
│ │ │ │ -
│ │ │ │ -
886
│ │ │ │ -
887inline void
│ │ │ │ -
│ │ │ │ -
888PatchTable::EvaluateBasisFaceVarying(PatchHandle const & handle, float u, float v,
│ │ │ │ -
889 float wP[], float wDu[], float wDv[],
│ │ │ │ -
890 float wDuu[], float wDuv[], float wDvv[], int channel) const {
│ │ │ │ -
891
│ │ │ │ -
892 EvaluateBasisFaceVarying<float>(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv, channel);
│ │ │ │ -
893}
│ │ │ │ -
│ │ │ │ -
894inline void
│ │ │ │ -
│ │ │ │ -
895PatchTable::EvaluateBasisFaceVarying(PatchHandle const & handle, double u, double v,
│ │ │ │ -
896 double wP[], double wDu[], double wDv[],
│ │ │ │ -
897 double wDuu[], double wDuv[], double wDvv[], int channel) const {
│ │ │ │ -
898
│ │ │ │ -
899 EvaluateBasisFaceVarying<double>(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv, channel);
│ │ │ │ -
900}
│ │ │ │ -
│ │ │ │ -
901
│ │ │ │ -
902} // end namespace Far
│ │ │ │ -
903
│ │ │ │ -
904} // end namespace OPENSUBDIV_VERSION
│ │ │ │ -
905using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
906
│ │ │ │ -
907} // end namespace OpenSubdiv
│ │ │ │ -
908
│ │ │ │ -
909#endif /* OPENSUBDIV3_FAR_PATCH_TABLE */
│ │ │ │ +
234
│ │ │ │ +
235#endif /* OPENSUBDIV3_FAR_PATCH_TABLE_FACTORY_H */
│ │ │ │ │ │ │ │
Vtr::ConstIndexArray ConstIndexArray
Definition types.h:47
│ │ │ │ -
std::vector< PatchParam > PatchParamTable
Definition patchParam.h:243
│ │ │ │ - │ │ │ │ - │ │ │ │ -
Vtr::Array< PatchParam > PatchParamArray
Definition patchParam.h:245
│ │ │ │ -
std::vector< PatchArray > PatchArrayVector
Definition types.h:132
│ │ │ │ - │ │ │ │ -
An quadtree-based map connecting coarse faces to their sub-patches.
Definition patchMap.h:49
│ │ │ │ - │ │ │ │ -
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ -
ConstIndexArray GetPatchArrayVaryingVertices(int array) const
Returns the varying vertex indices for the patches in array.
│ │ │ │ - │ │ │ │ -
PatchVertsTable const & GetPatchControlVerticesTable() const
Get the table of patch control vertices.
Definition patchTable.h:378
│ │ │ │ -
void ComputeLocalPointValuesFaceVarying(T const *src, T *dst, int channel=0) const
Updates local point face-varying values.
Definition patchTable.h:844
│ │ │ │ -
ConstIndexArray GetVaryingVertices() const
Returns an array of varying vertex indices for the patches.
│ │ │ │ -
void ComputeLocalPointValuesVarying(T const *src, T *dst) const
Updates local point varying values.
Definition patchTable.h:835
│ │ │ │ -
ConstIndexArray GetPatchVaryingVertices(PatchHandle const &handle) const
Returns the varying vertex indices for a given patch.
│ │ │ │ -
bool IsFeatureAdaptive() const
True if the patches are of feature adaptive types.
│ │ │ │ -
int GetMaxValence() const
Returns max vertex valence.
Definition patchTable.h:92
│ │ │ │ -
StencilTableReal< REAL > const * GetLocalPointStencilTable() const
Returns the stencil table to compute local point vertex values.
│ │ │ │ -
StencilTable const * GetLocalPointStencilTable() const
Returns the stencil table to compute local point vertex values.
Definition patchTable.h:778
│ │ │ │ -
PatchParamArray getPatchParams(int arrayIndex)
│ │ │ │ -
ConstIndexArray GetPatchArrayFVarValues(int array, int channel=0) const
Returns the value indices for the patches in array in channel.
│ │ │ │ -
std::vector< float > const & GetSharpnessValues() const
Returns sharpness values table.
Definition patchTable.h:387
│ │ │ │ - │ │ │ │ -
PatchParam GetPatchFVarPatchParam(int array, int patch, int channel=0) const
Returns the face-varying params for a given patch channel.
│ │ │ │ -
ConstIndexArray GetPatchVaryingVertices(int array, int patch) const
Returns the varying vertex indices for a given patch.
│ │ │ │ -
PatchTable(PatchTable const &src)
Copy constructor.
│ │ │ │ -
int GetNumPatchArrays() const
Returns the number of patch arrays in the table.
│ │ │ │ -
ConstIndexArray GetPatchVertices(PatchHandle const &handle) const
Returns the control vertex indices for the patch identified by handle.
│ │ │ │ - │ │ │ │ -
bool LocalPointFaceVaryingStencilPrecisionMatchesType() const
Tests if the precision of the stencil table to compute local point face-varying values matches the gi...
│ │ │ │ -
PatchParamTable const & GetPatchParamTable() const
Returns the PatchParamTable (PatchParams order matches patch array sorting)
Definition patchTable.h:381
│ │ │ │ -
VertexValenceTable const & GetVertexValenceTable() const
Returns the 'VertexValences' table (vertex neighborhoods table)
Definition patchTable.h:267
│ │ │ │ -
StencilTable const * GetLocalPointFaceVaryingStencilTable(int channel=0) const
Returns the stencil table to compute local point face-varying values.
Definition patchTable.h:789
│ │ │ │ -
int GetNumControlVertices(int array) const
Returns the number of control vertices in array.
│ │ │ │ - │ │ │ │ -
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...
│ │ │ │ -
ConstQuadOffsetsArray GetPatchQuadOffsets(PatchHandle const &handle) const
Returns the 'QuadOffsets' for the Gregory patch identified by handle.
│ │ │ │ -
PatchDescriptor GetFVarPatchDescriptorIrregular(int channel=0) const
Returns the irregular patch descriptor for channel.
│ │ │ │ -
float GetSingleCreasePatchSharpnessValue(int array, int patch) const
Returns the crease sharpness for the patch in array if it is a single-crease patch,...
│ │ │ │ - │ │ │ │ -
void ComputeLocalPointValues(T const *src, T *dst) const
Updates local point vertex values.
Definition patchTable.h:826
│ │ │ │ -
float GetSingleCreasePatchSharpnessValue(PatchHandle const &handle) const
Returns the crease sharpness for the patch identified by handle if it is a single-crease patch,...
│ │ │ │ -
PatchParam GetPatchParam(int array, int patch) const
Returns the PatchParam for patch in array.
│ │ │ │ -
ConstIndexArray GetPatchFVarValues(int array, int patch, int channel=0) const
Returns the value indices for a given patch in channel.
│ │ │ │ -
PatchDescriptor GetFVarPatchDescriptorRegular(int channel=0) const
Returns the regular patch descriptor for channel.
│ │ │ │ -
PatchDescriptor GetPatchDescriptor(PatchHandle const &handle) const
Returns the PatchDescriptor for the patch identified by handle.
│ │ │ │ - │ │ │ │ -
QuadOffsetsTable const & GetQuadOffsetsTable() const
Returns the quad-offsets table.
Definition patchTable.h:392
│ │ │ │ -
int GetNumPatches(int array) const
Returns the number of patches in array.
│ │ │ │ -
PatchDescriptor GetVaryingPatchDescriptor() const
Returns the varying patch descriptor.
│ │ │ │ -
ConstIndexArray GetPatchFVarValues(PatchHandle const &handle, int channel=0) const
Returns the value indices for a given patch in channel.
│ │ │ │ -
ConstPatchParamArray const GetPatchParams(int array) const
Returns the PatchParams for the patches in array.
│ │ │ │ -
int GetNumControlVerticesTotal() const
Returns the total number of control vertex indices in the table.
Definition patchTable.h:84
│ │ │ │ -
int GetNumFVarChannels() const
Returns the number of face-varying channels.
│ │ │ │ -
ConstPatchParamArray GetPatchArrayFVarPatchParams(int array, int channel=0) const
Returns the face-varying for a given patch in array in channel.
│ │ │ │ -
Index getPatchIndex(int array, int patch) const
│ │ │ │ -
int GetNumLocalPoints() const
Returns the number of local vertex points.
│ │ │ │ -
bool LocalPointVaryingStencilPrecisionMatchesType() const
Tests if the precision of the stencil table to compute local point varying values matches the given f...
│ │ │ │ -
ConstIndexArray GetPatchArrayVertices(int array) const
Returns the control vertex indices for the patches in array.
│ │ │ │ -
int GetNumPtexFaces() const
Returns the total number of ptex faces in the mesh.
Definition patchTable.h:95
│ │ │ │ -
ConstIndexArray GetFVarValues(int channel=0) const
Returns an array of value indices for the patches in channel.
│ │ │ │ -
Vtr::ConstArray< unsigned int > ConstQuadOffsetsArray
Accessors for the gregory patch evaluation buffers. These methods will be deprecated.
Definition patchTable.h:259
│ │ │ │ -
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...
│ │ │ │ -
StencilTableReal< REAL > const * GetLocalPointFaceVaryingStencilTable(int channel=0) const
Returns the stencil table to compute local point face-varying values.
│ │ │ │ -
int GetNumPatchesTotal() const
Returns the total number of patches stored in the table.
│ │ │ │ -
PatchParam GetPatchParam(PatchHandle const &handle) const
Returns a PatchParam for the patch identified by handle.
│ │ │ │ - │ │ │ │ -
Sdc::Options::FVarLinearInterpolation GetFVarChannelLinearInterpolation(int channel=0) const
Deprecated.
│ │ │ │ -
std::vector< Index > const & GetSharpnessIndexTable() const
Returns a sharpness index table for each patch (if exists)
Definition patchTable.h:384
│ │ │ │ -
PatchDescriptor GetPatchArrayDescriptor(int array) const
Returns the PatchDescriptor for the patches in array.
│ │ │ │ - │ │ │ │ -
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 ...
│ │ │ │ -
StencilTable const * GetLocalPointVaryingStencilTable() const
Returns the stencil table to compute local point varying values.
Definition patchTable.h:783
│ │ │ │ -
std::vector< unsigned int > QuadOffsetsTable
Definition patchTable.h:389
│ │ │ │ -
ConstIndexArray GetPatchVertices(int array, int patch) const
Returns the control vertex indices for patch in array.
│ │ │ │ -
PatchParam GetPatchFVarPatchParam(PatchHandle const &handle, int channel=0) const
Returns the value indices for a given patch in channel.
│ │ │ │ -
int GetFVarValueStride(int channel=0) const
Returns the stride between patches in the value index array of channel.
│ │ │ │ -
ConstPatchParamArray GetFVarPatchParams(int channel=0) const
Returns an array of face-varying patch param for channel.
│ │ │ │ -
PatchDescriptor GetFVarPatchDescriptor(int channel=0) const
Returns the default/irregular patch descriptor for channel.
│ │ │ │ -
int GetNumLocalPointsVarying() const
Returns the number of local varying points.
│ │ │ │ -
bool LocalPointStencilPrecisionMatchesType() const
Tests if the precision of the stencil table to compute local point vertex values matches the given fl...
│ │ │ │ -
StencilTableReal< REAL > const * GetLocalPointVaryingStencilTable() const
Returns the stencil table to compute local point varying values.
│ │ │ │ -
int GetNumLocalPointsFaceVarying(int channel=0) const
Returns the number of local face-varying points for channel.
│ │ │ │ -
Handle that can be used as unique patch identifier within PatchTable.
Definition patchTable.h:60
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
Stencil table class wrapping the template for compatibility.
│ │ │ │ - │ │ │ │ +
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ +
Factory for constructing a PatchTable from a TopologyRefiner.
│ │ │ │ + │ │ │ │ +
static PatchTable * Create(TopologyRefiner const &refiner, Options options=Options(), ConstIndexArray selectedFaces=ConstIndexArray())
Instantiates a PatchTable from a client-provided TopologyRefiner.
│ │ │ │ + │ │ │ │ +
unsigned int generateVaryingTables
Generate varying patch tables.
│ │ │ │ +
unsigned int generateLegacySharpCornerPatches
Generate sharp regular patches at smooth corners (legacy)
│ │ │ │ + │ │ │ │ +
TopologyRefiner::AdaptiveOptions GetRefineAdaptiveOptions() const
Determine adaptive refinement options to match assigned patch options.
│ │ │ │ +
unsigned int maxIsolationLevel
Cap adaptive feature isolation to the given level (max. 10)
│ │ │ │ + │ │ │ │ +
unsigned int generateFVarLegacyLinearPatches
Generate all linear face-varying patches (legacy)
│ │ │ │ +
void SetPatchPrecision()
Set precision of vertex patches.
│ │ │ │ +
unsigned int fvarPatchPrecisionDouble
Generate double-precision stencils for face-varying patches.
│ │ │ │ +
void SetMaxIsolationLevel(unsigned int level)
Set maximum isolation level.
│ │ │ │ + │ │ │ │ +
int const * fvarChannelIndices
List containing the indices of the channels selected for the factory.
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
unsigned int generateVaryingLocalPoints
Generate local points with varying patches.
│ │ │ │ +
unsigned int includeFVarBaseLevelIndices
Include base level in face-varying patch point indices (Uniform mode only)
│ │ │ │ +
unsigned int generateAllLevels
Generate levels from 'firstLevel' to 'maxLevel' (Uniform mode only)
│ │ │ │ +
unsigned int patchPrecisionDouble
Generate double-precision stencils for vertex patches.
│ │ │ │ +
unsigned int generateFVarTables
Generate face-varying patch tables.
│ │ │ │ +
unsigned int includeBaseLevelIndices
Include base level in patch point indices (Uniform mode only)
│ │ │ │ +
void SetFVarPatchPrecision()
Set precision of face-varying patches.
│ │ │ │ +
int numFVarChannels
Number of channel indices and interpolation modes passed.
│ │ │ │ +
unsigned int triangulateQuads
Triangulate 'QUADS' primitives (Uniform mode only)
│ │ │ │ +
EndCapType
Choice for approximating irregular patches (end-caps)
│ │ │ │ +
@ ENDCAP_LEGACY_GREGORY
legacy option for 2.x style Gregory patches (Catmark only)
│ │ │ │ +
@ ENDCAP_GREGORY_BASIS
use Gregory patches (highest quality, recommended default)
│ │ │ │ + │ │ │ │ +
@ ENDCAP_BILINEAR_BASIS
use linear patches (simple quads or tris)
│ │ │ │ +
@ ENDCAP_BSPLINE_BASIS
use BSpline-like patches (same patch type as regular)
│ │ │ │ + │ │ │ │ +
Obsolete internal struct not intended for public use – due to be deprecated.
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
Stores topology data for a specified set of refinement options.
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── encoding │ │ │ │ │ @@ -1 +1 @@ │ │ │ │ │ -us-ascii │ │ │ │ │ +utf-8 │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,12 +1,12 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -patchTable.h │ │ │ │ │ +patchTableFactory.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ 2// Copyright 2013 Pixar │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ @@ -24,1002 +24,409 @@ │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ 24 │ │ │ │ │ -25#ifndef OPENSUBDIV3_FAR_PATCH_TABLE_H │ │ │ │ │ -26#define OPENSUBDIV3_FAR_PATCH_TABLE_H │ │ │ │ │ +25#ifndef OPENSUBDIV3_FAR_PATCH_TABLE_FACTORY_H │ │ │ │ │ +26#define OPENSUBDIV3_FAR_PATCH_TABLE_FACTORY_H │ │ │ │ │ 27 │ │ │ │ │ 28#include "../version.h" │ │ │ │ │ 29 │ │ │ │ │ -30#include "../far/patchDescriptor.h" │ │ │ │ │ -31#include "../far/patchParam.h" │ │ │ │ │ -32#include "../far/stencilTable.h" │ │ │ │ │ -33 │ │ │ │ │ -34#include "../sdc/options.h" │ │ │ │ │ +30#include "../far/topologyRefiner.h" │ │ │ │ │ +31#include "../far/patchTable.h" │ │ │ │ │ +32 │ │ │ │ │ +33namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ +34namespace OPENSUBDIV_VERSION { │ │ │ │ │ 35 │ │ │ │ │ -36#include │ │ │ │ │ +36namespace Far { │ │ │ │ │ 37 │ │ │ │ │ -38namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ -39namespace OPENSUBDIV_VERSION { │ │ │ │ │ -40 │ │ │ │ │ -41namespace Far { │ │ │ │ │ +_4_0class _P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y { │ │ │ │ │ +41public: │ │ │ │ │ 42 │ │ │ │ │ -_5_5class _P_a_t_c_h_T_a_b_l_e { │ │ │ │ │ -56 │ │ │ │ │ -57public: │ │ │ │ │ -58 │ │ │ │ │ -_6_0 class _P_a_t_c_h_H_a_n_d_l_e { │ │ │ │ │ -61 // XXXX manuelk members will eventually be made private │ │ │ │ │ -62 public: │ │ │ │ │ -63 │ │ │ │ │ -_6_4 friend class _P_a_t_c_h_T_a_b_l_e; │ │ │ │ │ -_6_5 friend class _P_a_t_c_h_M_a_p; │ │ │ │ │ -66 │ │ │ │ │ -_6_7 _I_n_d_e_x _a_r_r_a_y_I_n_d_e_x, // Array index of the patch │ │ │ │ │ -_6_8 _p_a_t_c_h_I_n_d_e_x, // Absolute Index of the patch │ │ │ │ │ -_6_9 _v_e_r_t_I_n_d_e_x; // Relative offset to the first CV of the patch in array │ │ │ │ │ -70 }; │ │ │ │ │ -71 │ │ │ │ │ -72public: │ │ │ │ │ -73 │ │ │ │ │ -_7_5 _P_a_t_c_h_T_a_b_l_e(_P_a_t_c_h_T_a_b_l_e const & src); │ │ │ │ │ -76 │ │ │ │ │ -_7_8 _~_P_a_t_c_h_T_a_b_l_e(); │ │ │ │ │ -79 │ │ │ │ │ -_8_1 bool _I_s_F_e_a_t_u_r_e_A_d_a_p_t_i_v_e() const; │ │ │ │ │ -82 │ │ │ │ │ -_8_4 int _G_e_t_N_u_m_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s_T_o_t_a_l() const { │ │ │ │ │ -85 return (int)_patchVerts.size(); │ │ │ │ │ -86 } │ │ │ │ │ -87 │ │ │ │ │ -_8_9 int _G_e_t_N_u_m_P_a_t_c_h_e_s_T_o_t_a_l() const; │ │ │ │ │ -90 │ │ │ │ │ -_9_2 int _G_e_t_M_a_x_V_a_l_e_n_c_e() const { return _maxValence; } │ │ │ │ │ -93 │ │ │ │ │ -_9_5 int _G_e_t_N_u_m_P_t_e_x_F_a_c_e_s() const { return _numPtexFaces; } │ │ │ │ │ -96 │ │ │ │ │ -97 │ │ │ │ │ -99 │ │ │ │ │ -105 │ │ │ │ │ -_1_0_7 _P_a_t_c_h_D_e_s_c_r_i_p_t_o_r _G_e_t_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r(_P_a_t_c_h_H_a_n_d_l_e const & handle) const; │ │ │ │ │ -108 │ │ │ │ │ -_1_1_0 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y _G_e_t_P_a_t_c_h_V_e_r_t_i_c_e_s(_P_a_t_c_h_H_a_n_d_l_e const & handle) const; │ │ │ │ │ -111 │ │ │ │ │ -_1_1_3 _P_a_t_c_h_P_a_r_a_m _G_e_t_P_a_t_c_h_P_a_r_a_m(_P_a_t_c_h_H_a_n_d_l_e const & handle) const; │ │ │ │ │ +_4_5 struct _O_p_t_i_o_n_s { │ │ │ │ │ +46 │ │ │ │ │ +_5_5 enum _E_n_d_C_a_p_T_y_p_e { │ │ │ │ │ +_5_6 _E_N_D_C_A_P___N_O_N_E = 0, │ │ │ │ │ +_5_7 _E_N_D_C_A_P___B_I_L_I_N_E_A_R___B_A_S_I_S, │ │ │ │ │ +_5_8 _E_N_D_C_A_P___B_S_P_L_I_N_E___B_A_S_I_S, │ │ │ │ │ +_5_9 _E_N_D_C_A_P___G_R_E_G_O_R_Y___B_A_S_I_S, │ │ │ │ │ +60 _E_N_D_C_A_P___L_E_G_A_C_Y___G_R_E_G_O_R_Y │ │ │ │ │ +_6_1 }; │ │ │ │ │ +62 │ │ │ │ │ +_6_3 _O_p_t_i_o_n_s(unsigned int maxIsolation=10) : │ │ │ │ │ +64 _g_e_n_e_r_a_t_e_A_l_l_L_e_v_e_l_s(false), │ │ │ │ │ +65 _i_n_c_l_u_d_e_B_a_s_e_L_e_v_e_l_I_n_d_i_c_e_s(true), │ │ │ │ │ +66 _i_n_c_l_u_d_e_F_V_a_r_B_a_s_e_L_e_v_e_l_I_n_d_i_c_e_s(false), │ │ │ │ │ +67 _t_r_i_a_n_g_u_l_a_t_e_Q_u_a_d_s(false), │ │ │ │ │ +68 _u_s_e_S_i_n_g_l_e_C_r_e_a_s_e_P_a_t_c_h(false), │ │ │ │ │ +69 _u_s_e_I_n_f_S_h_a_r_p_P_a_t_c_h(false), │ │ │ │ │ +70 _m_a_x_I_s_o_l_a_t_i_o_n_L_e_v_e_l(maxIsolation & 0xf), │ │ │ │ │ +71 _e_n_d_C_a_p_T_y_p_e(_E_N_D_C_A_P___G_R_E_G_O_R_Y___B_A_S_I_S), │ │ │ │ │ +72 _s_h_a_r_e_E_n_d_C_a_p_P_a_t_c_h_P_o_i_n_t_s(true), │ │ │ │ │ +73 _g_e_n_e_r_a_t_e_V_a_r_y_i_n_g_T_a_b_l_e_s(true), │ │ │ │ │ +74 _g_e_n_e_r_a_t_e_V_a_r_y_i_n_g_L_o_c_a_l_P_o_i_n_t_s(true), │ │ │ │ │ +75 _g_e_n_e_r_a_t_e_F_V_a_r_T_a_b_l_e_s(false), │ │ │ │ │ +76 _p_a_t_c_h_P_r_e_c_i_s_i_o_n_D_o_u_b_l_e(false), │ │ │ │ │ +77 _f_v_a_r_P_a_t_c_h_P_r_e_c_i_s_i_o_n_D_o_u_b_l_e(false), │ │ │ │ │ +78 _g_e_n_e_r_a_t_e_F_V_a_r_L_e_g_a_c_y_L_i_n_e_a_r_P_a_t_c_h_e_s(true), │ │ │ │ │ +79 _g_e_n_e_r_a_t_e_L_e_g_a_c_y_S_h_a_r_p_C_o_r_n_e_r_P_a_t_c_h_e_s(true), │ │ │ │ │ +80 _n_u_m_F_V_a_r_C_h_a_n_n_e_l_s(-1), │ │ │ │ │ +81 _f_v_a_r_C_h_a_n_n_e_l_I_n_d_i_c_e_s(0) │ │ │ │ │ +82 { } │ │ │ │ │ +83 │ │ │ │ │ +_8_5 _E_n_d_C_a_p_T_y_p_e _G_e_t_E_n_d_C_a_p_T_y_p_e() const { return (_E_n_d_C_a_p_T_y_p_e)_e_n_d_C_a_p_T_y_p_e; } │ │ │ │ │ +86 │ │ │ │ │ +_8_8 void _S_e_t_E_n_d_C_a_p_T_y_p_e(_E_n_d_C_a_p_T_y_p_e e) { _e_n_d_C_a_p_T_y_p_e = e & 0x7; } │ │ │ │ │ +89 │ │ │ │ │ +_9_1 void _S_e_t_M_a_x_I_s_o_l_a_t_i_o_n_L_e_v_e_l(unsigned int level) { _m_a_x_I_s_o_l_a_t_i_o_n_L_e_v_e_l = level & │ │ │ │ │ +0xf; } │ │ │ │ │ +92 │ │ │ │ │ +_9_4 template void _S_e_t_P_a_t_c_h_P_r_e_c_i_s_i_o_n(); │ │ │ │ │ +95 │ │ │ │ │ +_9_7 template void _S_e_t_F_V_a_r_P_a_t_c_h_P_r_e_c_i_s_i_o_n(); │ │ │ │ │ +98 │ │ │ │ │ +_1_0_0 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_:_:_A_d_a_p_t_i_v_e_O_p_t_i_o_n_s _G_e_t_R_e_f_i_n_e_A_d_a_p_t_i_v_e_O_p_t_i_o_n_s() const { │ │ │ │ │ +101 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_:_:_A_d_a_p_t_i_v_e_O_p_t_i_o_n_s adaptiveOptions(_m_a_x_I_s_o_l_a_t_i_o_n_L_e_v_e_l); │ │ │ │ │ +102 │ │ │ │ │ +103 adaptiveOptions._u_s_e_I_n_f_S_h_a_r_p_P_a_t_c_h = _u_s_e_I_n_f_S_h_a_r_p_P_a_t_c_h; │ │ │ │ │ +104 adaptiveOptions._u_s_e_S_i_n_g_l_e_C_r_e_a_s_e_P_a_t_c_h = _u_s_e_S_i_n_g_l_e_C_r_e_a_s_e_P_a_t_c_h; │ │ │ │ │ +105 adaptiveOptions._c_o_n_s_i_d_e_r_F_V_a_r_C_h_a_n_n_e_l_s = _g_e_n_e_r_a_t_e_F_V_a_r_T_a_b_l_e_s && │ │ │ │ │ +106 !_g_e_n_e_r_a_t_e_F_V_a_r_L_e_g_a_c_y_L_i_n_e_a_r_P_a_t_c_h_e_s; │ │ │ │ │ +107 return adaptiveOptions; │ │ │ │ │ +108 } │ │ │ │ │ +109 │ │ │ │ │ +_1_1_0 unsigned int _g_e_n_e_r_a_t_e_A_l_l_L_e_v_e_l_s : 1, │ │ │ │ │ +_1_1_1 _i_n_c_l_u_d_e_B_a_s_e_L_e_v_e_l_I_n_d_i_c_e_s : 1, │ │ │ │ │ +_1_1_2 _i_n_c_l_u_d_e_F_V_a_r_B_a_s_e_L_e_v_e_l_I_n_d_i_c_e_s : 1, │ │ │ │ │ +_1_1_3 _t_r_i_a_n_g_u_l_a_t_e_Q_u_a_d_s : 1, │ │ │ │ │ 114 │ │ │ │ │ -_1_1_6 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y _G_e_t_P_a_t_c_h_V_e_r_t_i_c_e_s(int array, int patch) const; │ │ │ │ │ -117 │ │ │ │ │ -_1_1_9 _P_a_t_c_h_P_a_r_a_m _G_e_t_P_a_t_c_h_P_a_r_a_m(int array, int patch) const; │ │ │ │ │ -121 │ │ │ │ │ -122 │ │ │ │ │ -124 │ │ │ │ │ +_1_1_5 _u_s_e_S_i_n_g_l_e_C_r_e_a_s_e_P_a_t_c_h : 1, │ │ │ │ │ +_1_1_6 _u_s_e_I_n_f_S_h_a_r_p_P_a_t_c_h : 1, │ │ │ │ │ +_1_1_7 _m_a_x_I_s_o_l_a_t_i_o_n_L_e_v_e_l : 4, │ │ │ │ │ +118 │ │ │ │ │ +119 // end-capping │ │ │ │ │ +_1_2_0 _e_n_d_C_a_p_T_y_p_e : 3, │ │ │ │ │ +_1_2_1 _s_h_a_r_e_E_n_d_C_a_p_P_a_t_c_h_P_o_i_n_t_s : 1, │ │ │ │ │ +123 │ │ │ │ │ +124 // varying │ │ │ │ │ +_1_2_5 _g_e_n_e_r_a_t_e_V_a_r_y_i_n_g_T_a_b_l_e_s : 1, │ │ │ │ │ +_1_2_6 _g_e_n_e_r_a_t_e_V_a_r_y_i_n_g_L_o_c_a_l_P_o_i_n_t_s : 1, │ │ │ │ │ +127 │ │ │ │ │ +128 // face-varying │ │ │ │ │ +_1_2_9 _g_e_n_e_r_a_t_e_F_V_a_r_T_a_b_l_e_s : 1, │ │ │ │ │ 130 │ │ │ │ │ -_1_3_2 int _G_e_t_N_u_m_P_a_t_c_h_A_r_r_a_y_s() const; │ │ │ │ │ -133 │ │ │ │ │ -_1_3_5 int _G_e_t_N_u_m_P_a_t_c_h_e_s(int array) const; │ │ │ │ │ -136 │ │ │ │ │ -_1_3_8 int _G_e_t_N_u_m_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s(int array) const; │ │ │ │ │ -139 │ │ │ │ │ -_1_4_1 _P_a_t_c_h_D_e_s_c_r_i_p_t_o_r _G_e_t_P_a_t_c_h_A_r_r_a_y_D_e_s_c_r_i_p_t_o_r(int array) const; │ │ │ │ │ +131 // precision │ │ │ │ │ +_1_3_2 _p_a_t_c_h_P_r_e_c_i_s_i_o_n_D_o_u_b_l_e : 1, │ │ │ │ │ +_1_3_3 _f_v_a_r_P_a_t_c_h_P_r_e_c_i_s_i_o_n_D_o_u_b_l_e : 1, │ │ │ │ │ +134 │ │ │ │ │ +135 // legacy behaviors (default to true) │ │ │ │ │ +_1_3_6 _g_e_n_e_r_a_t_e_F_V_a_r_L_e_g_a_c_y_L_i_n_e_a_r_P_a_t_c_h_e_s : 1, │ │ │ │ │ +_1_3_7 _g_e_n_e_r_a_t_e_L_e_g_a_c_y_S_h_a_r_p_C_o_r_n_e_r_P_a_t_c_h_e_s : 1; │ │ │ │ │ +138 │ │ │ │ │ +_1_3_9 int _n_u_m_F_V_a_r_C_h_a_n_n_e_l_s; │ │ │ │ │ +_1_4_0 int const * _f_v_a_r_C_h_a_n_n_e_l_I_n_d_i_c_e_s; │ │ │ │ │ +141 }; │ │ │ │ │ 142 │ │ │ │ │ -_1_4_4 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y _G_e_t_P_a_t_c_h_A_r_r_a_y_V_e_r_t_i_c_e_s(int array) const; │ │ │ │ │ -145 │ │ │ │ │ -_1_4_7 _C_o_n_s_t_P_a_t_c_h_P_a_r_a_m_A_r_r_a_y const _G_e_t_P_a_t_c_h_P_a_r_a_m_s(int array) const; │ │ │ │ │ -149 │ │ │ │ │ -150 │ │ │ │ │ -152 │ │ │ │ │ -159 │ │ │ │ │ -_1_6_1 int _G_e_t_N_u_m_L_o_c_a_l_P_o_i_n_t_s() const; │ │ │ │ │ -162 │ │ │ │ │ -164 _S_t_e_n_c_i_l_T_a_b_l_e const *_G_e_t_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e() const; │ │ │ │ │ -165 │ │ │ │ │ -167 template │ │ │ │ │ -_1_6_8 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const *_G_e_t_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e() const; │ │ │ │ │ -169 │ │ │ │ │ -_1_7_2 template bool _L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_P_r_e_c_i_s_i_o_n_M_a_t_c_h_e_s_T_y_p_e() │ │ │ │ │ -const; │ │ │ │ │ -173 │ │ │ │ │ -186 template void │ │ │ │ │ -187 _C_o_m_p_u_t_e_L_o_c_a_l_P_o_i_n_t_V_a_l_u_e_s(T const *src, T *dst) const; │ │ │ │ │ -188 │ │ │ │ │ -189 │ │ │ │ │ -_1_9_1 int _G_e_t_N_u_m_L_o_c_a_l_P_o_i_n_t_s_V_a_r_y_i_n_g() const; │ │ │ │ │ -192 │ │ │ │ │ -194 _S_t_e_n_c_i_l_T_a_b_l_e const *_G_e_t_L_o_c_a_l_P_o_i_n_t_V_a_r_y_i_n_g_S_t_e_n_c_i_l_T_a_b_l_e() const; │ │ │ │ │ -195 │ │ │ │ │ -197 template │ │ │ │ │ -_1_9_8 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const *_G_e_t_L_o_c_a_l_P_o_i_n_t_V_a_r_y_i_n_g_S_t_e_n_c_i_l_T_a_b_l_e() const; │ │ │ │ │ -199 │ │ │ │ │ -_2_0_2 template bool _L_o_c_a_l_P_o_i_n_t_V_a_r_y_i_n_g_S_t_e_n_c_i_l_P_r_e_c_i_s_i_o_n_M_a_t_c_h_e_s_T_y_p_e │ │ │ │ │ -() const; │ │ │ │ │ -203 │ │ │ │ │ -216 template void │ │ │ │ │ -217 _C_o_m_p_u_t_e_L_o_c_a_l_P_o_i_n_t_V_a_l_u_e_s_V_a_r_y_i_n_g(T const *src, T *dst) const; │ │ │ │ │ +_1_7_5 static _P_a_t_c_h_T_a_b_l_e * _C_r_e_a_t_e(_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const & refiner, │ │ │ │ │ +176 _O_p_t_i_o_n_s options = _O_p_t_i_o_n_s(), │ │ │ │ │ +177 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y selectedFaces = _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y()); │ │ │ │ │ +178 │ │ │ │ │ +179public: │ │ │ │ │ +180 // PatchFaceTag │ │ │ │ │ +181 // │ │ │ │ │ +182 // This simple struct was previously used within the factory to take │ │ │ │ │ +inventory of │ │ │ │ │ +183 // various kinds of patches to fully allocate buffers prior to populating │ │ │ │ │ +them. It │ │ │ │ │ +184 // was not intended to be exposed as part of the public interface. │ │ │ │ │ +185 // │ │ │ │ │ +186 // It is no longer used internally and is being kept here to respect │ │ │ │ │ +preservation │ │ │ │ │ +187 // of the public interface, but it will be deprecated at the earliest │ │ │ │ │ +opportunity. │ │ │ │ │ +188 // │ │ │ │ │ +191 // │ │ │ │ │ +_1_9_2 struct _P_a_t_c_h_F_a_c_e_T_a_g { │ │ │ │ │ +193 public: │ │ │ │ │ +_1_9_4 unsigned int ___h_a_s_P_a_t_c_h : 1; │ │ │ │ │ +_1_9_5 unsigned int ___i_s_R_e_g_u_l_a_r : 1; │ │ │ │ │ +_1_9_6 unsigned int ___t_r_a_n_s_i_t_i_o_n_M_a_s_k : 4; │ │ │ │ │ +_1_9_7 unsigned int ___b_o_u_n_d_a_r_y_M_a_s_k : 4; │ │ │ │ │ +_1_9_8 unsigned int ___b_o_u_n_d_a_r_y_I_n_d_e_x : 2; │ │ │ │ │ +_1_9_9 unsigned int ___b_o_u_n_d_a_r_y_C_o_u_n_t : 3; │ │ │ │ │ +_2_0_0 unsigned int ___h_a_s_B_o_u_n_d_a_r_y_E_d_g_e : 3; │ │ │ │ │ +_2_0_1 unsigned int ___i_s_S_i_n_g_l_e_C_r_e_a_s_e : 1; │ │ │ │ │ +202 │ │ │ │ │ +_2_0_3 void _c_l_e_a_r(); │ │ │ │ │ +_2_0_4 void _a_s_s_i_g_n_B_o_u_n_d_a_r_y_P_r_o_p_e_r_t_i_e_s_F_r_o_m_E_d_g_e_M_a_s_k(int boundaryEdgeMask); │ │ │ │ │ +_2_0_5 void _a_s_s_i_g_n_B_o_u_n_d_a_r_y_P_r_o_p_e_r_t_i_e_s_F_r_o_m_V_e_r_t_e_x_M_a_s_k(int boundaryVertexMask); │ │ │ │ │ +_2_0_6 void _a_s_s_i_g_n_T_r_a_n_s_i_t_i_o_n_P_r_o_p_e_r_t_i_e_s_F_r_o_m_E_d_g_e_M_a_s_k(int boundaryVertexMask); │ │ │ │ │ +207 }; │ │ │ │ │ +_2_0_8 typedef std::vector _P_a_t_c_h_T_a_g_V_e_c_t_o_r; │ │ │ │ │ +209}; │ │ │ │ │ +210 │ │ │ │ │ +211 │ │ │ │ │ +_2_1_2template <> inline void PatchTableFactory::Options::SetPatchPrecision │ │ │ │ │ +() { │ │ │ │ │ +213 _p_a_t_c_h_P_r_e_c_i_s_i_o_n_D_o_u_b_l_e = false; │ │ │ │ │ +214} │ │ │ │ │ +_2_1_5template <> inline void PatchTableFactory::Options:: │ │ │ │ │ +SetFVarPatchPrecision() { │ │ │ │ │ +216 fvarPatchPrecisionDouble = false; │ │ │ │ │ +217} │ │ │ │ │ 218 │ │ │ │ │ -219 │ │ │ │ │ -_2_2_1 int _G_e_t_N_u_m_L_o_c_a_l_P_o_i_n_t_s_F_a_c_e_V_a_r_y_i_n_g(int channel = 0) const; │ │ │ │ │ -222 │ │ │ │ │ -224 _S_t_e_n_c_i_l_T_a_b_l_e const *_G_e_t_L_o_c_a_l_P_o_i_n_t_F_a_c_e_V_a_r_y_i_n_g_S_t_e_n_c_i_l_T_a_b_l_e(int channel = 0) │ │ │ │ │ -const; │ │ │ │ │ +219template <> inline void PatchTableFactory::Options:: │ │ │ │ │ +SetPatchPrecision() { │ │ │ │ │ +220 patchPrecisionDouble = true; │ │ │ │ │ +221} │ │ │ │ │ +222template <> inline void PatchTableFactory::Options:: │ │ │ │ │ +SetFVarPatchPrecision() { │ │ │ │ │ +223 fvarPatchPrecisionDouble = true; │ │ │ │ │ +224} │ │ │ │ │ 225 │ │ │ │ │ -227 template │ │ │ │ │ -_2_2_8 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * _G_e_t_L_o_c_a_l_P_o_i_n_t_F_a_c_e_V_a_r_y_i_n_g_S_t_e_n_c_i_l_T_a_b_l_e(int │ │ │ │ │ -channel = 0) const; │ │ │ │ │ -229 │ │ │ │ │ -_2_3_2 template bool │ │ │ │ │ -_L_o_c_a_l_P_o_i_n_t_F_a_c_e_V_a_r_y_i_n_g_S_t_e_n_c_i_l_P_r_e_c_i_s_i_o_n_M_a_t_c_h_e_s_T_y_p_e() const; │ │ │ │ │ +226 │ │ │ │ │ +227} // end namespace Far │ │ │ │ │ +228 │ │ │ │ │ +229} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ +230using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +231 │ │ │ │ │ +232} // end namespace OpenSubdiv │ │ │ │ │ 233 │ │ │ │ │ -248 template void │ │ │ │ │ -249 _C_o_m_p_u_t_e_L_o_c_a_l_P_o_i_n_t_V_a_l_u_e_s_F_a_c_e_V_a_r_y_i_n_g(T const *src, T *dst, int channel = 0) │ │ │ │ │ -const; │ │ │ │ │ -251 │ │ │ │ │ -252 │ │ │ │ │ -254 │ │ │ │ │ -255 │ │ │ │ │ -_2_5_9 typedef _V_t_r_:_:_C_o_n_s_t_A_r_r_a_y_<_u_n_s_i_g_n_e_d_ _i_n_t_> _C_o_n_s_t_Q_u_a_d_O_f_f_s_e_t_s_A_r_r_a_y; │ │ │ │ │ -260 │ │ │ │ │ -_2_6_2 _C_o_n_s_t_Q_u_a_d_O_f_f_s_e_t_s_A_r_r_a_y _G_e_t_P_a_t_c_h_Q_u_a_d_O_f_f_s_e_t_s(_P_a_t_c_h_H_a_n_d_l_e const & handle) │ │ │ │ │ -const; │ │ │ │ │ -263 │ │ │ │ │ -_2_6_4 typedef std::vector _V_e_r_t_e_x_V_a_l_e_n_c_e_T_a_b_l_e; │ │ │ │ │ -265 │ │ │ │ │ -_2_6_7 _V_e_r_t_e_x_V_a_l_e_n_c_e_T_a_b_l_e const & _G_e_t_V_e_r_t_e_x_V_a_l_e_n_c_e_T_a_b_l_e() const { │ │ │ │ │ -268 return _vertexValenceTable; │ │ │ │ │ -269 } │ │ │ │ │ -271 │ │ │ │ │ -272 │ │ │ │ │ -274 │ │ │ │ │ -280 │ │ │ │ │ -_2_8_3 float _G_e_t_S_i_n_g_l_e_C_r_e_a_s_e_P_a_t_c_h_S_h_a_r_p_n_e_s_s_V_a_l_u_e(_P_a_t_c_h_H_a_n_d_l_e const & handle) const; │ │ │ │ │ -284 │ │ │ │ │ -_2_8_7 float _G_e_t_S_i_n_g_l_e_C_r_e_a_s_e_P_a_t_c_h_S_h_a_r_p_n_e_s_s_V_a_l_u_e(int array, int patch) const; │ │ │ │ │ -289 │ │ │ │ │ -290 │ │ │ │ │ -292 │ │ │ │ │ -298 │ │ │ │ │ -_3_0_0 _P_a_t_c_h_D_e_s_c_r_i_p_t_o_r _G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r() const; │ │ │ │ │ -301 │ │ │ │ │ -_3_0_3 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y _G_e_t_P_a_t_c_h_V_a_r_y_i_n_g_V_e_r_t_i_c_e_s(_P_a_t_c_h_H_a_n_d_l_e const & handle) const; │ │ │ │ │ -304 │ │ │ │ │ -_3_0_6 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y _G_e_t_P_a_t_c_h_V_a_r_y_i_n_g_V_e_r_t_i_c_e_s(int array, int patch) const; │ │ │ │ │ -307 │ │ │ │ │ -_3_0_9 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y _G_e_t_P_a_t_c_h_A_r_r_a_y_V_a_r_y_i_n_g_V_e_r_t_i_c_e_s(int array) const; │ │ │ │ │ -310 │ │ │ │ │ -_3_1_2 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y _G_e_t_V_a_r_y_i_n_g_V_e_r_t_i_c_e_s() const; │ │ │ │ │ -314 │ │ │ │ │ -315 │ │ │ │ │ -317 │ │ │ │ │ -323 │ │ │ │ │ -_3_2_5 int _G_e_t_N_u_m_F_V_a_r_C_h_a_n_n_e_l_s() const; │ │ │ │ │ -326 │ │ │ │ │ -_3_2_8 _P_a_t_c_h_D_e_s_c_r_i_p_t_o_r _G_e_t_F_V_a_r_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_R_e_g_u_l_a_r(int channel = 0) const; │ │ │ │ │ -329 │ │ │ │ │ -_3_3_1 _P_a_t_c_h_D_e_s_c_r_i_p_t_o_r _G_e_t_F_V_a_r_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_I_r_r_e_g_u_l_a_r(int channel = 0) const; │ │ │ │ │ -332 │ │ │ │ │ -_3_3_4 _P_a_t_c_h_D_e_s_c_r_i_p_t_o_r _G_e_t_F_V_a_r_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r(int channel = 0) const; │ │ │ │ │ -335 │ │ │ │ │ -_3_3_7 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y _G_e_t_P_a_t_c_h_F_V_a_r_V_a_l_u_e_s(_P_a_t_c_h_H_a_n_d_l_e const & handle, int channel │ │ │ │ │ -= 0) const; │ │ │ │ │ -338 │ │ │ │ │ -_3_4_0 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y _G_e_t_P_a_t_c_h_F_V_a_r_V_a_l_u_e_s(int array, int patch, int channel = 0) │ │ │ │ │ -const; │ │ │ │ │ -341 │ │ │ │ │ -_3_4_3 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y _G_e_t_P_a_t_c_h_A_r_r_a_y_F_V_a_r_V_a_l_u_e_s(int array, int channel = 0) const; │ │ │ │ │ -344 │ │ │ │ │ -_3_4_6 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y _G_e_t_F_V_a_r_V_a_l_u_e_s(int channel = 0) const; │ │ │ │ │ -347 │ │ │ │ │ -_3_4_9 int _G_e_t_F_V_a_r_V_a_l_u_e_S_t_r_i_d_e(int channel = 0) const; │ │ │ │ │ -350 │ │ │ │ │ -_3_5_2 _P_a_t_c_h_P_a_r_a_m _G_e_t_P_a_t_c_h_F_V_a_r_P_a_t_c_h_P_a_r_a_m(_P_a_t_c_h_H_a_n_d_l_e const & handle, int channel = │ │ │ │ │ -0) const; │ │ │ │ │ -353 │ │ │ │ │ -_3_5_5 _P_a_t_c_h_P_a_r_a_m _G_e_t_P_a_t_c_h_F_V_a_r_P_a_t_c_h_P_a_r_a_m(int array, int patch, int channel = 0) │ │ │ │ │ -const; │ │ │ │ │ -356 │ │ │ │ │ -_3_5_8 _C_o_n_s_t_P_a_t_c_h_P_a_r_a_m_A_r_r_a_y _G_e_t_P_a_t_c_h_A_r_r_a_y_F_V_a_r_P_a_t_c_h_P_a_r_a_m_s(int array, int channel = │ │ │ │ │ -0) const; │ │ │ │ │ -359 │ │ │ │ │ -_3_6_1 _C_o_n_s_t_P_a_t_c_h_P_a_r_a_m_A_r_r_a_y _G_e_t_F_V_a_r_P_a_t_c_h_P_a_r_a_m_s(int channel = 0) const; │ │ │ │ │ -362 │ │ │ │ │ -_3_6_4 _S_d_c_:_:_O_p_t_i_o_n_s_:_:_F_V_a_r_L_i_n_e_a_r_I_n_t_e_r_p_o_l_a_t_i_o_n _G_e_t_F_V_a_r_C_h_a_n_n_e_l_L_i_n_e_a_r_I_n_t_e_r_p_o_l_a_t_i_o_n(int │ │ │ │ │ -channel = 0) const; │ │ │ │ │ -366 │ │ │ │ │ -367 │ │ │ │ │ -369 │ │ │ │ │ -374 │ │ │ │ │ -_3_7_5 typedef std::vector _P_a_t_c_h_V_e_r_t_s_T_a_b_l_e; │ │ │ │ │ -376 │ │ │ │ │ -_3_7_8 _P_a_t_c_h_V_e_r_t_s_T_a_b_l_e const & _G_e_t_P_a_t_c_h_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s_T_a_b_l_e() const { return │ │ │ │ │ -_patchVerts; } │ │ │ │ │ -379 │ │ │ │ │ -_3_8_1 _P_a_t_c_h_P_a_r_a_m_T_a_b_l_e const & _G_e_t_P_a_t_c_h_P_a_r_a_m_T_a_b_l_e() const { return _paramTable; } │ │ │ │ │ -382 │ │ │ │ │ -_3_8_4 std::vector const &_G_e_t_S_h_a_r_p_n_e_s_s_I_n_d_e_x_T_a_b_l_e() const { return │ │ │ │ │ -_sharpnessIndices; } │ │ │ │ │ -385 │ │ │ │ │ -_3_8_7 std::vector const &_G_e_t_S_h_a_r_p_n_e_s_s_V_a_l_u_e_s() const { return │ │ │ │ │ -_sharpnessValues; } │ │ │ │ │ -388 │ │ │ │ │ -_3_8_9 typedef std::vector _Q_u_a_d_O_f_f_s_e_t_s_T_a_b_l_e; │ │ │ │ │ -390 │ │ │ │ │ -_3_9_2 _Q_u_a_d_O_f_f_s_e_t_s_T_a_b_l_e const & _G_e_t_Q_u_a_d_O_f_f_s_e_t_s_T_a_b_l_e() const { │ │ │ │ │ -393 return _quadOffsetsTable; │ │ │ │ │ -394 } │ │ │ │ │ -396 │ │ │ │ │ -_3_9_8 void _p_r_i_n_t() const; │ │ │ │ │ -399 │ │ │ │ │ -400public: │ │ │ │ │ -401 │ │ │ │ │ -403 │ │ │ │ │ -405 │ │ │ │ │ -428 template │ │ │ │ │ -_4_2_9 void _E_v_a_l_u_a_t_e_B_a_s_i_s(_P_a_t_c_h_H_a_n_d_l_e const & handle, REAL u, REAL v, │ │ │ │ │ -430 REAL wP[], REAL wDu[] = 0, REAL wDv[] = 0, │ │ │ │ │ -431 REAL wDuu[] = 0, REAL wDuv[] = 0, REAL wDvv[] = 0) const; │ │ │ │ │ -432 │ │ │ │ │ -435 void _E_v_a_l_u_a_t_e_B_a_s_i_s(_P_a_t_c_h_H_a_n_d_l_e const & handle, float u, float v, │ │ │ │ │ -436 float wP[], float wDu[] = 0, float wDv[] = 0, │ │ │ │ │ -437 float wDuu[] = 0, float wDuv[] = 0, float wDvv[] = 0) const; │ │ │ │ │ -438 │ │ │ │ │ -441 void _E_v_a_l_u_a_t_e_B_a_s_i_s(_P_a_t_c_h_H_a_n_d_l_e const & handle, double u, double v, │ │ │ │ │ -442 double wP[], double wDu[] = 0, double wDv[] = 0, │ │ │ │ │ -443 double wDuu[] = 0, double wDuv[] = 0, double wDvv[] = 0) const; │ │ │ │ │ -444 │ │ │ │ │ -467 template │ │ │ │ │ -_4_6_8 void _E_v_a_l_u_a_t_e_B_a_s_i_s_V_a_r_y_i_n_g(_P_a_t_c_h_H_a_n_d_l_e const & handle, REAL u, REAL v, │ │ │ │ │ -469 REAL wP[], REAL wDu[] = 0, REAL wDv[] = 0, │ │ │ │ │ -470 REAL wDuu[] = 0, REAL wDuv[] = 0, REAL wDvv[] = 0) const; │ │ │ │ │ -471 │ │ │ │ │ -474 void _E_v_a_l_u_a_t_e_B_a_s_i_s_V_a_r_y_i_n_g(_P_a_t_c_h_H_a_n_d_l_e const & handle, float u, float v, │ │ │ │ │ -475 float wP[], float wDu[] = 0, float wDv[] = 0, │ │ │ │ │ -476 float wDuu[] = 0, float wDuv[] = 0, float wDvv[] = 0) const; │ │ │ │ │ -477 │ │ │ │ │ -480 void _E_v_a_l_u_a_t_e_B_a_s_i_s_V_a_r_y_i_n_g(_P_a_t_c_h_H_a_n_d_l_e const & handle, double u, double v, │ │ │ │ │ -481 double wP[], double wDu[] = 0, double wDv[] = 0, │ │ │ │ │ -482 double wDuu[] = 0, double wDuv[] = 0, double wDvv[] = 0) const; │ │ │ │ │ -483 │ │ │ │ │ -508 template │ │ │ │ │ -_5_0_9 void _E_v_a_l_u_a_t_e_B_a_s_i_s_F_a_c_e_V_a_r_y_i_n_g(_P_a_t_c_h_H_a_n_d_l_e const & handle, REAL u, REAL v, │ │ │ │ │ -510 REAL wP[], REAL wDu[] = 0, REAL wDv[] = 0, │ │ │ │ │ -511 REAL wDuu[] = 0, REAL wDuv[] = 0, REAL wDvv[] = 0, │ │ │ │ │ -512 int channel = 0) const; │ │ │ │ │ -513 │ │ │ │ │ -516 void _E_v_a_l_u_a_t_e_B_a_s_i_s_F_a_c_e_V_a_r_y_i_n_g(_P_a_t_c_h_H_a_n_d_l_e const & handle, float u, float v, │ │ │ │ │ -517 float wP[], float wDu[] = 0, float wDv[] = 0, │ │ │ │ │ -518 float wDuu[] = 0, float wDuv[] = 0, float wDvv[] = 0, │ │ │ │ │ -519 int channel = 0) const; │ │ │ │ │ -520 │ │ │ │ │ -523 void _E_v_a_l_u_a_t_e_B_a_s_i_s_F_a_c_e_V_a_r_y_i_n_g(_P_a_t_c_h_H_a_n_d_l_e const & handle, double u, double │ │ │ │ │ -v, │ │ │ │ │ -524 double wP[], double wDu[] = 0, double wDv[] = 0, │ │ │ │ │ -525 double wDuu[] = 0, double wDuv[] = 0, double wDvv[] = 0, │ │ │ │ │ -526 int channel = 0) const; │ │ │ │ │ -528 │ │ │ │ │ -529protected: │ │ │ │ │ -530 │ │ │ │ │ -_5_3_1 friend class _P_a_t_c_h_T_a_b_l_e_B_u_i_l_d_e_r; │ │ │ │ │ -532 │ │ │ │ │ -533 // Factory constructor │ │ │ │ │ -_5_3_4 _P_a_t_c_h_T_a_b_l_e(int maxvalence); │ │ │ │ │ -535 │ │ │ │ │ -_5_3_6 _I_n_d_e_x _g_e_t_P_a_t_c_h_I_n_d_e_x(int array, int patch) const; │ │ │ │ │ -537 │ │ │ │ │ -_5_3_8 _P_a_t_c_h_P_a_r_a_m_A_r_r_a_y _g_e_t_P_a_t_c_h_P_a_r_a_m_s(int arrayIndex); │ │ │ │ │ -539 │ │ │ │ │ -_5_4_0 _I_n_d_e_x * _g_e_t_S_h_a_r_p_n_e_s_s_I_n_d_i_c_e_s(_I_n_d_e_x arrayIndex); │ │ │ │ │ -_5_4_1 float * _g_e_t_S_h_a_r_p_n_e_s_s_V_a_l_u_e_s(_I_n_d_e_x arrayIndex); │ │ │ │ │ -542 │ │ │ │ │ -543private: │ │ │ │ │ -544 │ │ │ │ │ -545 // │ │ │ │ │ -546 // Patch arrays │ │ │ │ │ -547 // │ │ │ │ │ -548 struct PatchArray { │ │ │ │ │ -549 PatchArray(_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r d, int np, _I_n_d_e_x v, _I_n_d_e_x p, _I_n_d_e_x qo) : │ │ │ │ │ -550 desc(d), numPatches(np), vertIndex(v), │ │ │ │ │ -551 patchIndex(p), quadOffsetIndex (qo) { } │ │ │ │ │ -552 │ │ │ │ │ -553 void print() const; │ │ │ │ │ -554 │ │ │ │ │ -555 _P_a_t_c_h_D_e_s_c_r_i_p_t_o_r desc; // type of patches in the array │ │ │ │ │ -556 │ │ │ │ │ -557 int numPatches; // number of patches in the array │ │ │ │ │ -558 │ │ │ │ │ -559 _I_n_d_e_x vertIndex, // index to the first control vertex │ │ │ │ │ -560 patchIndex, // absolute index of the first patch in the array │ │ │ │ │ -561 quadOffsetIndex; // index of the first quad offset entry │ │ │ │ │ -562 }; │ │ │ │ │ -563 │ │ │ │ │ -564 typedef std::vector PatchArrayVector; │ │ │ │ │ -565 │ │ │ │ │ -566 PatchArray & getPatchArray(_I_n_d_e_x arrayIndex); │ │ │ │ │ -567 PatchArray const & getPatchArray(_I_n_d_e_x arrayIndex) const; │ │ │ │ │ -568 │ │ │ │ │ -569 void reservePatchArrays(int numPatchArrays); │ │ │ │ │ -570 void pushPatchArray(PatchDescriptor desc, int npatches, │ │ │ │ │ -571 _I_n_d_e_x * vidx, _I_n_d_e_x * pidx, _I_n_d_e_x * qoidx=0); │ │ │ │ │ -572 │ │ │ │ │ -573 _I_n_d_e_x_A_r_r_a_y getPatchArrayVertices(int arrayIndex); │ │ │ │ │ -574 │ │ │ │ │ -575 _I_n_d_e_x findPatchArray(PatchDescriptor desc); │ │ │ │ │ -576 │ │ │ │ │ -577 │ │ │ │ │ -578 // │ │ │ │ │ -579 // Varying patch arrays │ │ │ │ │ -580 // │ │ │ │ │ -581 _I_n_d_e_x_A_r_r_a_y getPatchArrayVaryingVertices(int arrayIndex); │ │ │ │ │ -582 │ │ │ │ │ -583 void allocateVaryingVertices( │ │ │ │ │ -584 PatchDescriptor desc, int numPatches); │ │ │ │ │ -585 void populateVaryingVertices(); │ │ │ │ │ -586 │ │ │ │ │ -587 // │ │ │ │ │ -588 // Face-varying patch channels │ │ │ │ │ -589 // │ │ │ │ │ -590 │ │ │ │ │ -591 // │ │ │ │ │ -592 // FVarPatchChannel │ │ │ │ │ -593 // │ │ │ │ │ -594 // Stores a record for each patch in the primitive : │ │ │ │ │ -595 // │ │ │ │ │ -596 // - Each patch in the PatchTable has a corresponding patch in each │ │ │ │ │ -597 // face-varying patch channel. Patch vertex indices are sorted in the same │ │ │ │ │ -598 // patch-type order as PatchTable::PTables. Face-varying data for a patch │ │ │ │ │ -599 // can therefore be quickly accessed by using the patch primitive ID as │ │ │ │ │ -600 // index into patchValueOffsets to locate the face-varying control vertex │ │ │ │ │ -601 // indices. │ │ │ │ │ -602 // │ │ │ │ │ -603 // - Face-varying channels can have a different interpolation modes │ │ │ │ │ -604 // │ │ │ │ │ -605 // - Unlike "vertex" patches, there are no transition masks required │ │ │ │ │ -606 // for face-varying patches. │ │ │ │ │ -607 // │ │ │ │ │ -608 // - Face-varying patches still require boundary edge masks. │ │ │ │ │ -609 // │ │ │ │ │ -610 // - currently most patches with sharp boundaries but smooth interiors have │ │ │ │ │ -611 // to be isolated to level 10 : we need a special type of bicubic patch │ │ │ │ │ -612 // similar to single-crease to resolve this condition without requiring │ │ │ │ │ -613 // isolation if possible │ │ │ │ │ -614 // │ │ │ │ │ -615 struct FVarPatchChannel { │ │ │ │ │ -616 _S_d_c_:_:_O_p_t_i_o_n_s_:_:_F_V_a_r_L_i_n_e_a_r_I_n_t_e_r_p_o_l_a_t_i_o_n interpolation; │ │ │ │ │ -617 │ │ │ │ │ -618 PatchDescriptor regDesc; │ │ │ │ │ -619 PatchDescriptor irregDesc; │ │ │ │ │ -620 │ │ │ │ │ -621 int stride; │ │ │ │ │ -622 │ │ │ │ │ -623 std::vector patchValues; │ │ │ │ │ -624 std::vector patchParam; │ │ │ │ │ -625 }; │ │ │ │ │ -626 typedef std::vector FVarPatchChannelVector; │ │ │ │ │ -627 │ │ │ │ │ -628 FVarPatchChannel & getFVarPatchChannel(int channel); │ │ │ │ │ -629 FVarPatchChannel const & getFVarPatchChannel(int channel) const; │ │ │ │ │ -630 │ │ │ │ │ -631 void allocateFVarPatchChannels(int numChannels); │ │ │ │ │ -632 void allocateFVarPatchChannelValues( │ │ │ │ │ -633 PatchDescriptor regDesc, PatchDescriptor irregDesc, │ │ │ │ │ -634 int numPatches, int channel); │ │ │ │ │ -635 │ │ │ │ │ -636 // deprecated │ │ │ │ │ -637 void setFVarPatchChannelLinearInterpolation( │ │ │ │ │ -638 _S_d_c_:_:_O_p_t_i_o_n_s_:_:_F_V_a_r_L_i_n_e_a_r_I_n_t_e_r_p_o_l_a_t_i_o_n interpolation, int channel); │ │ │ │ │ -639 │ │ │ │ │ -640 _I_n_d_e_x_A_r_r_a_y getFVarValues(int channel); │ │ │ │ │ -641 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y getPatchFVarValues(int patch, int channel) const; │ │ │ │ │ -642 │ │ │ │ │ -643 _P_a_t_c_h_P_a_r_a_m_A_r_r_a_y getFVarPatchParams(int channel); │ │ │ │ │ -644 PatchParam getPatchFVarPatchParam(int patch, int channel) const; │ │ │ │ │ -645 │ │ │ │ │ -646private: │ │ │ │ │ -647 // │ │ │ │ │ -648 // Simple private class to hold stencil table pointers of varying │ │ │ │ │ -precision, │ │ │ │ │ -649 // where the discriminant of the precision is external. │ │ │ │ │ -650 // │ │ │ │ │ -651 // NOTE that this is a simple pointer container and NOT a smart pointer │ │ │ │ │ -that │ │ │ │ │ -652 // manages the ownership of the object referred to by it. │ │ │ │ │ -653 // │ │ │ │ │ -654 class StencilTablePtr { │ │ │ │ │ -655 private: │ │ │ │ │ -656 typedef StencilTableReal float_type; │ │ │ │ │ -657 typedef StencilTableReal double_type; │ │ │ │ │ -658 │ │ │ │ │ -659 union { │ │ │ │ │ -660 float_type * _fPtr; │ │ │ │ │ -661 double_type * _dPtr; │ │ │ │ │ -662 }; │ │ │ │ │ -663 │ │ │ │ │ -664 public: │ │ │ │ │ -665 StencilTablePtr() { _fPtr = 0; } │ │ │ │ │ -666 StencilTablePtr(float_type * ptr) { _fPtr = ptr; } │ │ │ │ │ -667 StencilTablePtr(double_type * ptr) { _dPtr = ptr; } │ │ │ │ │ -668 │ │ │ │ │ -669 operator bool() const { return _fPtr != 0; } │ │ │ │ │ -670 │ │ │ │ │ -671 void Set() { _fPtr = 0; } │ │ │ │ │ -672 void Set(float_type * ptr) { _fPtr = ptr; } │ │ │ │ │ -673 void Set(double_type * ptr) { _dPtr = ptr; } │ │ │ │ │ -674 │ │ │ │ │ -675 template StencilTableReal * Get() const; │ │ │ │ │ -676 }; │ │ │ │ │ -677 │ │ │ │ │ -678private: │ │ │ │ │ -679 │ │ │ │ │ -680 // │ │ │ │ │ -681 // Topology │ │ │ │ │ -682 // │ │ │ │ │ -683 │ │ │ │ │ -684 int _maxValence, // highest vertex valence found in the mesh │ │ │ │ │ -685 _numPtexFaces; // total number of ptex faces │ │ │ │ │ -686 │ │ │ │ │ -687 _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r _patchArrays; // Vector of descriptors for arrays of │ │ │ │ │ -patches │ │ │ │ │ -688 │ │ │ │ │ -689 std::vector _patchVerts; // Indices of the control vertices of the │ │ │ │ │ -patches │ │ │ │ │ -690 │ │ │ │ │ -691 _P_a_t_c_h_P_a_r_a_m_T_a_b_l_e _paramTable; // PatchParam bitfields (one per patch) │ │ │ │ │ -692 │ │ │ │ │ -693 // │ │ │ │ │ -694 // Extraordinary vertex closed-form evaluation / endcap basis conversion │ │ │ │ │ -695 // │ │ │ │ │ -696 // XXXtakahito: these data will probably be replaced with mask coefficient │ │ │ │ │ -or something │ │ │ │ │ -697 // SchemeWorker populates. │ │ │ │ │ -698 // │ │ │ │ │ -699 _Q_u_a_d_O_f_f_s_e_t_s_T_a_b_l_e _quadOffsetsTable; // Quad offsets (for Gregory patches) │ │ │ │ │ -700 _V_e_r_t_e_x_V_a_l_e_n_c_e_T_a_b_l_e _vertexValenceTable; // Vertex valence table (for │ │ │ │ │ -Gregory patches) │ │ │ │ │ -701 │ │ │ │ │ -702 StencilTablePtr _localPointStencils; // local point conversion stencils │ │ │ │ │ -703 StencilTablePtr _localPointVaryingStencils; // local point varying stencils │ │ │ │ │ -704 │ │ │ │ │ -705 // │ │ │ │ │ -706 // Varying data │ │ │ │ │ -707 // │ │ │ │ │ -708 PatchDescriptor _varyingDesc; │ │ │ │ │ -709 │ │ │ │ │ -710 std::vector _varyingVerts; │ │ │ │ │ -711 │ │ │ │ │ -712 // │ │ │ │ │ -713 // Face-varying data │ │ │ │ │ -714 // │ │ │ │ │ -715 FVarPatchChannelVector _fvarChannels; │ │ │ │ │ -716 │ │ │ │ │ -717 std::vector _localPointFaceVaryingStencils; │ │ │ │ │ -718 │ │ │ │ │ -719 // │ │ │ │ │ -720 // 'single-crease' patch sharpness tables │ │ │ │ │ -721 // │ │ │ │ │ -722 std::vector _sharpnessIndices; // Indices of single-crease sharpness │ │ │ │ │ -(one per patch) │ │ │ │ │ -723 std::vector _sharpnessValues; // Sharpness values. │ │ │ │ │ -724 │ │ │ │ │ -725 // │ │ │ │ │ -726 // Construction history -- relevant to at least one public query: │ │ │ │ │ -727 // │ │ │ │ │ -728 unsigned int _isUniformLinear : 1; │ │ │ │ │ -729 │ │ │ │ │ -730 // │ │ │ │ │ -731 // Precision -- only applies to local-point stencil tables │ │ │ │ │ -732 // │ │ │ │ │ -733 unsigned int _vertexPrecisionIsDouble : 1; │ │ │ │ │ -734 unsigned int _varyingPrecisionIsDouble : 1; │ │ │ │ │ -735 unsigned int _faceVaryingPrecisionIsDouble : 1; │ │ │ │ │ -736}; │ │ │ │ │ -737 │ │ │ │ │ -738 │ │ │ │ │ -739// │ │ │ │ │ -740// Template specializations for float/double -- to be defined before used: │ │ │ │ │ -741// │ │ │ │ │ -742template <> inline StencilTableReal * │ │ │ │ │ -743PatchTable::StencilTablePtr::Get() const { return _fPtr; } │ │ │ │ │ -744 │ │ │ │ │ -745template <> inline StencilTableReal * │ │ │ │ │ -746PatchTable::StencilTablePtr::Get() const { return _dPtr; } │ │ │ │ │ -747 │ │ │ │ │ -_7_4_8template <> inline bool │ │ │ │ │ -749PatchTable::LocalPointStencilPrecisionMatchesType() const { │ │ │ │ │ -750 return !_vertexPrecisionIsDouble; │ │ │ │ │ -751} │ │ │ │ │ -_7_5_2template <> inline bool │ │ │ │ │ -753PatchTable::LocalPointVaryingStencilPrecisionMatchesType() const { │ │ │ │ │ -754 return !_varyingPrecisionIsDouble; │ │ │ │ │ -755} │ │ │ │ │ -_7_5_6template <> inline bool │ │ │ │ │ -757PatchTable::LocalPointFaceVaryingStencilPrecisionMatchesType() const │ │ │ │ │ -{ │ │ │ │ │ -758 return !_faceVaryingPrecisionIsDouble; │ │ │ │ │ -759} │ │ │ │ │ -760 │ │ │ │ │ -_7_6_1template <> inline bool │ │ │ │ │ -762PatchTable::LocalPointStencilPrecisionMatchesType() const { │ │ │ │ │ -763 return _vertexPrecisionIsDouble; │ │ │ │ │ -764} │ │ │ │ │ -_7_6_5template <> inline bool │ │ │ │ │ -766PatchTable::LocalPointVaryingStencilPrecisionMatchesType() const { │ │ │ │ │ -767 return _varyingPrecisionIsDouble; │ │ │ │ │ -768} │ │ │ │ │ -_7_6_9template <> inline bool │ │ │ │ │ -770PatchTable::LocalPointFaceVaryingStencilPrecisionMatchesType() const │ │ │ │ │ -{ │ │ │ │ │ -771 return _faceVaryingPrecisionIsDouble; │ │ │ │ │ -772} │ │ │ │ │ -773 │ │ │ │ │ -774// │ │ │ │ │ -775// StencilTable access -- backward compatible and generic: │ │ │ │ │ -776// │ │ │ │ │ -777inline _S_t_e_n_c_i_l_T_a_b_l_e const * │ │ │ │ │ -_7_7_8_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e() const { │ │ │ │ │ -779 assert(LocalPointStencilPrecisionMatchesType()); │ │ │ │ │ -780 return static_cast<_S_t_e_n_c_i_l_T_a_b_l_e const *>(_localPointStencils.Get()); │ │ │ │ │ -781} │ │ │ │ │ -782inline _S_t_e_n_c_i_l_T_a_b_l_e const * │ │ │ │ │ -_7_8_3_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_L_o_c_a_l_P_o_i_n_t_V_a_r_y_i_n_g_S_t_e_n_c_i_l_T_a_b_l_e() const { │ │ │ │ │ -784 assert(LocalPointVaryingStencilPrecisionMatchesType()); │ │ │ │ │ -785 return static_cast<_S_t_e_n_c_i_l_T_a_b_l_e const *>( │ │ │ │ │ -786 _localPointVaryingStencils.Get()); │ │ │ │ │ -787} │ │ │ │ │ -788inline _S_t_e_n_c_i_l_T_a_b_l_e const * │ │ │ │ │ -_7_8_9_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_L_o_c_a_l_P_o_i_n_t_F_a_c_e_V_a_r_y_i_n_g_S_t_e_n_c_i_l_T_a_b_l_e(int channel) const { │ │ │ │ │ -790 assert(LocalPointFaceVaryingStencilPrecisionMatchesType()); │ │ │ │ │ -791 if (channel >= 0 && channel < (int)_localPointFaceVaryingStencils.size()) { │ │ │ │ │ -792 return static_cast<_S_t_e_n_c_i_l_T_a_b_l_e const *>( │ │ │ │ │ -793 _localPointFaceVaryingStencils[channel].Get()); │ │ │ │ │ -794 } │ │ │ │ │ -795 return NULL; │ │ │ │ │ -796} │ │ │ │ │ -797 │ │ │ │ │ -798template │ │ │ │ │ -799inline _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * │ │ │ │ │ -_8_0_0_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e() const { │ │ │ │ │ -801 assert(LocalPointStencilPrecisionMatchesType()); │ │ │ │ │ -802 return _localPointStencils.Get(); │ │ │ │ │ -803} │ │ │ │ │ -804template │ │ │ │ │ -805inline _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * │ │ │ │ │ -_8_0_6_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_L_o_c_a_l_P_o_i_n_t_V_a_r_y_i_n_g_S_t_e_n_c_i_l_T_a_b_l_e() const { │ │ │ │ │ -807 assert(LocalPointVaryingStencilPrecisionMatchesType()); │ │ │ │ │ -808 return _localPointVaryingStencils.Get(); │ │ │ │ │ -809} │ │ │ │ │ -810template │ │ │ │ │ -811inline _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * │ │ │ │ │ -_8_1_2_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_L_o_c_a_l_P_o_i_n_t_F_a_c_e_V_a_r_y_i_n_g_S_t_e_n_c_i_l_T_a_b_l_e(int channel) const { │ │ │ │ │ -813 assert(LocalPointFaceVaryingStencilPrecisionMatchesType()); │ │ │ │ │ -814 if (channel >= 0 && channel < (int)_localPointFaceVaryingStencils.size()) { │ │ │ │ │ -815 return _localPointFaceVaryingStencils[channel].Get(); │ │ │ │ │ -816 } │ │ │ │ │ -817 return NULL; │ │ │ │ │ -818} │ │ │ │ │ -819 │ │ │ │ │ -820 │ │ │ │ │ -821// │ │ │ │ │ -822// Computation of local point values: │ │ │ │ │ -823// │ │ │ │ │ -824template │ │ │ │ │ -825inline void │ │ │ │ │ -_8_2_6_P_a_t_c_h_T_a_b_l_e_:_:_C_o_m_p_u_t_e_L_o_c_a_l_P_o_i_n_t_V_a_l_u_e_s(T const *src, T *dst) const { │ │ │ │ │ -827 assert(LocalPointStencilPrecisionMatchesType()); │ │ │ │ │ -828 if (_localPointStencils) { │ │ │ │ │ -829 _localPointStencils.Get()->UpdateValues(src, dst); │ │ │ │ │ -830 } │ │ │ │ │ -831} │ │ │ │ │ -832 │ │ │ │ │ -833template │ │ │ │ │ -834inline void │ │ │ │ │ -_8_3_5_P_a_t_c_h_T_a_b_l_e_:_:_C_o_m_p_u_t_e_L_o_c_a_l_P_o_i_n_t_V_a_l_u_e_s_V_a_r_y_i_n_g(T const *src, T *dst) const { │ │ │ │ │ -836 assert(LocalPointVaryingStencilPrecisionMatchesType()); │ │ │ │ │ -837 if (_localPointVaryingStencils) { │ │ │ │ │ -838 _localPointVaryingStencils.Get()->UpdateValues(src, dst); │ │ │ │ │ -839 } │ │ │ │ │ -840} │ │ │ │ │ -841 │ │ │ │ │ -842template │ │ │ │ │ -843inline void │ │ │ │ │ -_8_4_4_P_a_t_c_h_T_a_b_l_e_:_:_C_o_m_p_u_t_e_L_o_c_a_l_P_o_i_n_t_V_a_l_u_e_s_F_a_c_e_V_a_r_y_i_n_g(T const *src, T *dst, int │ │ │ │ │ -channel) const { │ │ │ │ │ -845 assert(LocalPointFaceVaryingStencilPrecisionMatchesType()); │ │ │ │ │ -846 if (channel >= 0 && channel < (int)_localPointFaceVaryingStencils.size()) { │ │ │ │ │ -847 if (_localPointFaceVaryingStencils[channel]) { │ │ │ │ │ -848 _localPointFaceVaryingStencils[channel].Get()->UpdateValues(src, │ │ │ │ │ -dst); │ │ │ │ │ -849 } │ │ │ │ │ -850 } │ │ │ │ │ -851} │ │ │ │ │ -852 │ │ │ │ │ -853 │ │ │ │ │ -854// │ │ │ │ │ -855// Basis evaluation overloads │ │ │ │ │ -856// │ │ │ │ │ -857inline void │ │ │ │ │ -_8_5_8_P_a_t_c_h_T_a_b_l_e_:_:_E_v_a_l_u_a_t_e_B_a_s_i_s(_P_a_t_c_h_H_a_n_d_l_e const & handle, float u, float v, │ │ │ │ │ -859 float wP[], float wDu[], float wDv[], │ │ │ │ │ -860 float wDuu[], float wDuv[], float wDvv[]) const { │ │ │ │ │ -861 │ │ │ │ │ -862 EvaluateBasis(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv); │ │ │ │ │ -863} │ │ │ │ │ -864inline void │ │ │ │ │ -_8_6_5_P_a_t_c_h_T_a_b_l_e_:_:_E_v_a_l_u_a_t_e_B_a_s_i_s(_P_a_t_c_h_H_a_n_d_l_e const & handle, double u, double v, │ │ │ │ │ -866 double wP[], double wDu[], double wDv[], │ │ │ │ │ -867 double wDuu[], double wDuv[], double wDvv[]) const { │ │ │ │ │ -868 │ │ │ │ │ -869 EvaluateBasis(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv); │ │ │ │ │ -870} │ │ │ │ │ -871 │ │ │ │ │ -872inline void │ │ │ │ │ -_8_7_3_P_a_t_c_h_T_a_b_l_e_:_:_E_v_a_l_u_a_t_e_B_a_s_i_s_V_a_r_y_i_n_g(_P_a_t_c_h_H_a_n_d_l_e const & handle, float u, float │ │ │ │ │ -v, │ │ │ │ │ -874 float wP[], float wDu[], float wDv[], │ │ │ │ │ -875 float wDuu[], float wDuv[], float wDvv[]) const { │ │ │ │ │ -876 │ │ │ │ │ -877 EvaluateBasisVarying(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv); │ │ │ │ │ -878} │ │ │ │ │ -879inline void │ │ │ │ │ -_8_8_0_P_a_t_c_h_T_a_b_l_e_:_:_E_v_a_l_u_a_t_e_B_a_s_i_s_V_a_r_y_i_n_g(_P_a_t_c_h_H_a_n_d_l_e const & handle, double u, │ │ │ │ │ -double v, │ │ │ │ │ -881 double wP[], double wDu[], double wDv[], │ │ │ │ │ -882 double wDuu[], double wDuv[], double wDvv[]) const { │ │ │ │ │ -883 │ │ │ │ │ -884 EvaluateBasisVarying(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv); │ │ │ │ │ -885} │ │ │ │ │ -886 │ │ │ │ │ -887inline void │ │ │ │ │ -_8_8_8_P_a_t_c_h_T_a_b_l_e_:_:_E_v_a_l_u_a_t_e_B_a_s_i_s_F_a_c_e_V_a_r_y_i_n_g(_P_a_t_c_h_H_a_n_d_l_e const & handle, float u, │ │ │ │ │ -float v, │ │ │ │ │ -889 float wP[], float wDu[], float wDv[], │ │ │ │ │ -890 float wDuu[], float wDuv[], float wDvv[], int channel) const { │ │ │ │ │ -891 │ │ │ │ │ -892 EvaluateBasisFaceVarying(handle, u, v, wP, wDu, wDv, wDuu, wDuv, │ │ │ │ │ -wDvv, channel); │ │ │ │ │ -893} │ │ │ │ │ -894inline void │ │ │ │ │ -_8_9_5_P_a_t_c_h_T_a_b_l_e_:_:_E_v_a_l_u_a_t_e_B_a_s_i_s_F_a_c_e_V_a_r_y_i_n_g(_P_a_t_c_h_H_a_n_d_l_e const & handle, double u, │ │ │ │ │ -double v, │ │ │ │ │ -896 double wP[], double wDu[], double wDv[], │ │ │ │ │ -897 double wDuu[], double wDuv[], double wDvv[], int channel) const { │ │ │ │ │ -898 │ │ │ │ │ -899 EvaluateBasisFaceVarying(handle, u, v, wP, wDu, wDv, wDuu, wDuv, │ │ │ │ │ -wDvv, channel); │ │ │ │ │ -900} │ │ │ │ │ -901 │ │ │ │ │ -902} // end namespace Far │ │ │ │ │ -903 │ │ │ │ │ -904} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ -905using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -906 │ │ │ │ │ -907} // end namespace OpenSubdiv │ │ │ │ │ -908 │ │ │ │ │ -909#endif /* OPENSUBDIV3_FAR_PATCH_TABLE */ │ │ │ │ │ +234 │ │ │ │ │ +235#endif /* OPENSUBDIV3_FAR_PATCH_TABLE_FACTORY_H */ │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_C_o_n_s_t_I_n_d_e_x_A_r_r_a_y │ │ │ │ │ Vtr::ConstIndexArray ConstIndexArray │ │ │ │ │ DDeeffiinniittiioonn _t_y_p_e_s_._h_:_4_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_P_a_r_a_m_T_a_b_l_e │ │ │ │ │ -std::vector< PatchParam > PatchParamTable │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_P_a_r_a_m_._h_:_2_4_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_I_n_d_e_x_A_r_r_a_y │ │ │ │ │ -Vtr::IndexArray IndexArray │ │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e_s_._h_:_4_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_I_n_d_e_x │ │ │ │ │ -Vtr::Index Index │ │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e_s_._h_:_4_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_P_a_r_a_m_A_r_r_a_y │ │ │ │ │ -Vtr::Array< PatchParam > PatchParamArray │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_P_a_r_a_m_._h_:_2_4_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r │ │ │ │ │ -std::vector< PatchArray > PatchArrayVector │ │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e_s_._h_:_1_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ -Describes the type of a patch. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_D_e_s_c_r_i_p_t_o_r_._h_:_4_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_M_a_p │ │ │ │ │ -An quadtree-based map connecting coarse faces to their sub-patches. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_M_a_p_._h_:_4_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_P_a_r_a_m │ │ │ │ │ -Patch parameterization. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_P_a_r_a_m_._h_:_1_5_2 │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ Container for arrays of parametric patches. │ │ │ │ │ DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_5_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_A_r_r_a_y_V_a_r_y_i_n_g_V_e_r_t_i_c_e_s │ │ │ │ │ -ConstIndexArray GetPatchArrayVaryingVertices(int array) const │ │ │ │ │ -Returns the varying vertex indices for the patches in array. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_g_e_t_S_h_a_r_p_n_e_s_s_V_a_l_u_e_s │ │ │ │ │ -float * getSharpnessValues(Index arrayIndex) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s_T_a_b_l_e │ │ │ │ │ -PatchVertsTable const & GetPatchControlVerticesTable() const │ │ │ │ │ -Get the table of patch control vertices. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_3_7_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ -_C_o_m_p_u_t_e_L_o_c_a_l_P_o_i_n_t_V_a_l_u_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ -void ComputeLocalPointValuesFaceVarying(T const *src, T *dst, int channel=0) │ │ │ │ │ -const │ │ │ │ │ -Updates local point face-varying values. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_8_4_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_V_a_r_y_i_n_g_V_e_r_t_i_c_e_s │ │ │ │ │ -ConstIndexArray GetVaryingVertices() const │ │ │ │ │ -Returns an array of varying vertex indices for the patches. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_C_o_m_p_u_t_e_L_o_c_a_l_P_o_i_n_t_V_a_l_u_e_s_V_a_r_y_i_n_g │ │ │ │ │ -void ComputeLocalPointValuesVarying(T const *src, T *dst) const │ │ │ │ │ -Updates local point varying values. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_8_3_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_V_a_r_y_i_n_g_V_e_r_t_i_c_e_s │ │ │ │ │ -ConstIndexArray GetPatchVaryingVertices(PatchHandle const &handle) const │ │ │ │ │ -Returns the varying vertex indices for a given patch. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_I_s_F_e_a_t_u_r_e_A_d_a_p_t_i_v_e │ │ │ │ │ -bool IsFeatureAdaptive() const │ │ │ │ │ -True if the patches are of feature adaptive types. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_M_a_x_V_a_l_e_n_c_e │ │ │ │ │ -int GetMaxValence() const │ │ │ │ │ -Returns max vertex valence. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_9_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -StencilTableReal< REAL > const * GetLocalPointStencilTable() const │ │ │ │ │ -Returns the stencil table to compute local point vertex values. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -StencilTable const * GetLocalPointStencilTable() const │ │ │ │ │ -Returns the stencil table to compute local point vertex values. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_7_7_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_g_e_t_P_a_t_c_h_P_a_r_a_m_s │ │ │ │ │ -PatchParamArray getPatchParams(int arrayIndex) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_A_r_r_a_y_F_V_a_r_V_a_l_u_e_s │ │ │ │ │ -ConstIndexArray GetPatchArrayFVarValues(int array, int channel=0) const │ │ │ │ │ -Returns the value indices for the patches in array in channel. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_S_h_a_r_p_n_e_s_s_V_a_l_u_e_s │ │ │ │ │ -std::vector< float > const & GetSharpnessValues() const │ │ │ │ │ -Returns sharpness values table. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_3_8_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_V_e_r_t_e_x_V_a_l_e_n_c_e_T_a_b_l_e │ │ │ │ │ -std::vector< Index > VertexValenceTable │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_2_6_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_F_V_a_r_P_a_t_c_h_P_a_r_a_m │ │ │ │ │ -PatchParam GetPatchFVarPatchParam(int array, int patch, int channel=0) const │ │ │ │ │ -Returns the face-varying params for a given patch channel. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_V_a_r_y_i_n_g_V_e_r_t_i_c_e_s │ │ │ │ │ -ConstIndexArray GetPatchVaryingVertices(int array, int patch) const │ │ │ │ │ -Returns the varying vertex indices for a given patch. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -PatchTable(PatchTable const &src) │ │ │ │ │ -Copy constructor. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_P_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ -int GetNumPatchArrays() const │ │ │ │ │ -Returns the number of patch arrays in the table. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_V_e_r_t_i_c_e_s │ │ │ │ │ -ConstIndexArray GetPatchVertices(PatchHandle const &handle) const │ │ │ │ │ -Returns the control vertex indices for the patch identified by handle. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -PatchTable(int maxvalence) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ -_L_o_c_a_l_P_o_i_n_t_F_a_c_e_V_a_r_y_i_n_g_S_t_e_n_c_i_l_P_r_e_c_i_s_i_o_n_M_a_t_c_h_e_s_T_y_p_e │ │ │ │ │ -bool LocalPointFaceVaryingStencilPrecisionMatchesType() const │ │ │ │ │ -Tests if the precision of the stencil table to compute local point face-varying │ │ │ │ │ -values matches the gi... │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_P_a_r_a_m_T_a_b_l_e │ │ │ │ │ -PatchParamTable const & GetPatchParamTable() const │ │ │ │ │ -Returns the PatchParamTable (PatchParams order matches patch array sorting) │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_3_8_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_V_e_r_t_e_x_V_a_l_e_n_c_e_T_a_b_l_e │ │ │ │ │ -VertexValenceTable const & GetVertexValenceTable() const │ │ │ │ │ -Returns the 'VertexValences' table (vertex neighborhoods table) │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_2_6_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ -_G_e_t_L_o_c_a_l_P_o_i_n_t_F_a_c_e_V_a_r_y_i_n_g_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -StencilTable const * GetLocalPointFaceVaryingStencilTable(int channel=0) const │ │ │ │ │ -Returns the stencil table to compute local point face-varying values. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_7_8_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s │ │ │ │ │ -int GetNumControlVertices(int array) const │ │ │ │ │ -Returns the number of control vertices in array. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_~_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -~PatchTable() │ │ │ │ │ -Destructor. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_E_v_a_l_u_a_t_e_B_a_s_i_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ -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... │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_Q_u_a_d_O_f_f_s_e_t_s │ │ │ │ │ -ConstQuadOffsetsArray GetPatchQuadOffsets(PatchHandle const &handle) const │ │ │ │ │ -Returns the 'QuadOffsets' for the Gregory patch identified by handle. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ -_G_e_t_F_V_a_r_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_I_r_r_e_g_u_l_a_r │ │ │ │ │ -PatchDescriptor GetFVarPatchDescriptorIrregular(int channel=0) const │ │ │ │ │ -Returns the irregular patch descriptor for channel. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ -_G_e_t_S_i_n_g_l_e_C_r_e_a_s_e_P_a_t_c_h_S_h_a_r_p_n_e_s_s_V_a_l_u_e │ │ │ │ │ -float GetSingleCreasePatchSharpnessValue(int array, int patch) const │ │ │ │ │ -Returns the crease sharpness for the patch in array if it is a single-crease │ │ │ │ │ -patch,... │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_g_e_t_S_h_a_r_p_n_e_s_s_I_n_d_i_c_e_s │ │ │ │ │ -Index * getSharpnessIndices(Index arrayIndex) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_C_o_m_p_u_t_e_L_o_c_a_l_P_o_i_n_t_V_a_l_u_e_s │ │ │ │ │ -void ComputeLocalPointValues(T const *src, T *dst) const │ │ │ │ │ -Updates local point vertex values. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_8_2_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ -_G_e_t_S_i_n_g_l_e_C_r_e_a_s_e_P_a_t_c_h_S_h_a_r_p_n_e_s_s_V_a_l_u_e │ │ │ │ │ -float GetSingleCreasePatchSharpnessValue(PatchHandle const &handle) const │ │ │ │ │ -Returns the crease sharpness for the patch identified by handle if it is a │ │ │ │ │ -single-crease patch,... │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_P_a_r_a_m │ │ │ │ │ -PatchParam GetPatchParam(int array, int patch) const │ │ │ │ │ -Returns the PatchParam for patch in array. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_F_V_a_r_V_a_l_u_e_s │ │ │ │ │ -ConstIndexArray GetPatchFVarValues(int array, int patch, int channel=0) const │ │ │ │ │ -Returns the value indices for a given patch in channel. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_R_e_g_u_l_a_r │ │ │ │ │ -PatchDescriptor GetFVarPatchDescriptorRegular(int channel=0) const │ │ │ │ │ -Returns the regular patch descriptor for channel. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ -PatchDescriptor GetPatchDescriptor(PatchHandle const &handle) const │ │ │ │ │ -Returns the PatchDescriptor for the patch identified by handle. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_P_a_t_c_h_V_e_r_t_s_T_a_b_l_e │ │ │ │ │ -std::vector< Index > PatchVertsTable │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_3_7_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_Q_u_a_d_O_f_f_s_e_t_s_T_a_b_l_e │ │ │ │ │ -QuadOffsetsTable const & GetQuadOffsetsTable() const │ │ │ │ │ -Returns the quad-offsets table. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_3_9_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_P_a_t_c_h_e_s │ │ │ │ │ -int GetNumPatches(int array) const │ │ │ │ │ -Returns the number of patches in array. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ -PatchDescriptor GetVaryingPatchDescriptor() const │ │ │ │ │ -Returns the varying patch descriptor. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_F_V_a_r_V_a_l_u_e_s │ │ │ │ │ -ConstIndexArray GetPatchFVarValues(PatchHandle const &handle, int channel=0) │ │ │ │ │ -const │ │ │ │ │ -Returns the value indices for a given patch in channel. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_P_a_r_a_m_s │ │ │ │ │ -ConstPatchParamArray const GetPatchParams(int array) const │ │ │ │ │ -Returns the PatchParams for the patches in array. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s_T_o_t_a_l │ │ │ │ │ -int GetNumControlVerticesTotal() const │ │ │ │ │ -Returns the total number of control vertex indices in the table. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_8_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_F_V_a_r_C_h_a_n_n_e_l_s │ │ │ │ │ -int GetNumFVarChannels() const │ │ │ │ │ -Returns the number of face-varying channels. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_A_r_r_a_y_F_V_a_r_P_a_t_c_h_P_a_r_a_m_s │ │ │ │ │ -ConstPatchParamArray GetPatchArrayFVarPatchParams(int array, int channel=0) │ │ │ │ │ -const │ │ │ │ │ -Returns the face-varying for a given patch in array in channel. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_g_e_t_P_a_t_c_h_I_n_d_e_x │ │ │ │ │ -Index getPatchIndex(int array, int patch) const │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_L_o_c_a_l_P_o_i_n_t_s │ │ │ │ │ -int GetNumLocalPoints() const │ │ │ │ │ -Returns the number of local vertex points. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ -_L_o_c_a_l_P_o_i_n_t_V_a_r_y_i_n_g_S_t_e_n_c_i_l_P_r_e_c_i_s_i_o_n_M_a_t_c_h_e_s_T_y_p_e │ │ │ │ │ -bool LocalPointVaryingStencilPrecisionMatchesType() const │ │ │ │ │ -Tests if the precision of the stencil table to compute local point varying │ │ │ │ │ -values matches the given f... │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_A_r_r_a_y_V_e_r_t_i_c_e_s │ │ │ │ │ -ConstIndexArray GetPatchArrayVertices(int array) const │ │ │ │ │ -Returns the control vertex indices for the patches in array. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_P_t_e_x_F_a_c_e_s │ │ │ │ │ -int GetNumPtexFaces() const │ │ │ │ │ -Returns the total number of ptex faces in the mesh. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_9_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_V_a_l_u_e_s │ │ │ │ │ -ConstIndexArray GetFVarValues(int channel=0) const │ │ │ │ │ -Returns an array of value indices for the patches in channel. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_C_o_n_s_t_Q_u_a_d_O_f_f_s_e_t_s_A_r_r_a_y │ │ │ │ │ -Vtr::ConstArray< unsigned int > ConstQuadOffsetsArray │ │ │ │ │ -Accessors for the gregory patch evaluation buffers. These methods will be │ │ │ │ │ -deprecated. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_2_5_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_E_v_a_l_u_a_t_e_B_a_s_i_s │ │ │ │ │ -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... │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ -_G_e_t_L_o_c_a_l_P_o_i_n_t_F_a_c_e_V_a_r_y_i_n_g_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -StencilTableReal< REAL > const * GetLocalPointFaceVaryingStencilTable(int │ │ │ │ │ -channel=0) const │ │ │ │ │ -Returns the stencil table to compute local point face-varying values. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_P_a_t_c_h_e_s_T_o_t_a_l │ │ │ │ │ -int GetNumPatchesTotal() const │ │ │ │ │ -Returns the total number of patches stored in the table. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_P_a_r_a_m │ │ │ │ │ -PatchParam GetPatchParam(PatchHandle const &handle) const │ │ │ │ │ -Returns a PatchParam for the patch identified by handle. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_p_r_i_n_t │ │ │ │ │ -void print() const │ │ │ │ │ -debug helper │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ -_G_e_t_F_V_a_r_C_h_a_n_n_e_l_L_i_n_e_a_r_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -Sdc::Options::FVarLinearInterpolation GetFVarChannelLinearInterpolation(int │ │ │ │ │ -channel=0) const │ │ │ │ │ -Deprecated. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_S_h_a_r_p_n_e_s_s_I_n_d_e_x_T_a_b_l_e │ │ │ │ │ -std::vector< Index > const & GetSharpnessIndexTable() const │ │ │ │ │ -Returns a sharpness index table for each patch (if exists) │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_3_8_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_A_r_r_a_y_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ -PatchDescriptor GetPatchArrayDescriptor(int array) const │ │ │ │ │ -Returns the PatchDescriptor for the patches in array. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_P_a_t_c_h_T_a_b_l_e_B_u_i_l_d_e_r │ │ │ │ │ -friend class PatchTableBuilder │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_5_3_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_E_v_a_l_u_a_t_e_B_a_s_i_s_V_a_r_y_i_n_g │ │ │ │ │ -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 ... │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ -_G_e_t_L_o_c_a_l_P_o_i_n_t_V_a_r_y_i_n_g_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -StencilTable const * GetLocalPointVaryingStencilTable() const │ │ │ │ │ -Returns the stencil table to compute local point varying values. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_7_8_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_Q_u_a_d_O_f_f_s_e_t_s_T_a_b_l_e │ │ │ │ │ -std::vector< unsigned int > QuadOffsetsTable │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_3_8_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_V_e_r_t_i_c_e_s │ │ │ │ │ -ConstIndexArray GetPatchVertices(int array, int patch) const │ │ │ │ │ -Returns the control vertex indices for patch in array. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_F_V_a_r_P_a_t_c_h_P_a_r_a_m │ │ │ │ │ -PatchParam GetPatchFVarPatchParam(PatchHandle const &handle, int channel=0) │ │ │ │ │ -const │ │ │ │ │ -Returns the value indices for a given patch in channel. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_V_a_l_u_e_S_t_r_i_d_e │ │ │ │ │ -int GetFVarValueStride(int channel=0) const │ │ │ │ │ -Returns the stride between patches in the value index array of channel. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_P_a_r_a_m_s │ │ │ │ │ -ConstPatchParamArray GetFVarPatchParams(int channel=0) const │ │ │ │ │ -Returns an array of face-varying patch param for channel. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ -PatchDescriptor GetFVarPatchDescriptor(int channel=0) const │ │ │ │ │ -Returns the default/irregular patch descriptor for channel. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_L_o_c_a_l_P_o_i_n_t_s_V_a_r_y_i_n_g │ │ │ │ │ -int GetNumLocalPointsVarying() const │ │ │ │ │ -Returns the number of local varying points. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ -_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_P_r_e_c_i_s_i_o_n_M_a_t_c_h_e_s_T_y_p_e │ │ │ │ │ -bool LocalPointStencilPrecisionMatchesType() const │ │ │ │ │ -Tests if the precision of the stencil table to compute local point vertex │ │ │ │ │ -values matches the given fl... │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ -_G_e_t_L_o_c_a_l_P_o_i_n_t_V_a_r_y_i_n_g_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -StencilTableReal< REAL > const * GetLocalPointVaryingStencilTable() const │ │ │ │ │ -Returns the stencil table to compute local point varying values. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_L_o_c_a_l_P_o_i_n_t_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ -int GetNumLocalPointsFaceVarying(int channel=0) const │ │ │ │ │ -Returns the number of local face-varying points for channel. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_P_a_t_c_h_H_a_n_d_l_e │ │ │ │ │ -Handle that can be used as unique patch identifier within PatchTable. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_6_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_P_a_t_c_h_H_a_n_d_l_e_:_:_p_a_t_c_h_I_n_d_e_x │ │ │ │ │ -Index patchIndex │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_6_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_P_a_t_c_h_H_a_n_d_l_e_:_:_a_r_r_a_y_I_n_d_e_x │ │ │ │ │ -Index arrayIndex │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_6_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_P_a_t_c_h_H_a_n_d_l_e_:_:_v_e_r_t_I_n_d_e_x │ │ │ │ │ -Index vertIndex │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_6_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l │ │ │ │ │ -Table of subdivision stencils. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_4_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -Stencil table class wrapping the template for compatibility. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_7_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_S_d_c_:_:_O_p_t_i_o_n_s_:_:_F_V_a_r_L_i_n_e_a_r_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -FVarLinearInterpolation │ │ │ │ │ -DDeeffiinniittiioonn _o_p_t_i_o_n_s_._h_:_6_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y │ │ │ │ │ +Factory for constructing a PatchTable from a TopologyRefiner. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_4_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_T_a_g_V_e_c_t_o_r │ │ │ │ │ +std::vector< PatchFaceTag > PatchTagVector │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_0_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_C_r_e_a_t_e │ │ │ │ │ +static PatchTable * Create(TopologyRefiner const &refiner, Options │ │ │ │ │ +options=Options(), ConstIndexArray selectedFaces=ConstIndexArray()) │ │ │ │ │ +Instantiates a PatchTable from a client-provided TopologyRefiner. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s │ │ │ │ │ +Public options for the PatchTable factory. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_4_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_g_e_n_e_r_a_t_e_V_a_r_y_i_n_g_T_a_b_l_e_s │ │ │ │ │ +unsigned int generateVaryingTables │ │ │ │ │ +Generate varying patch tables. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_2_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_g_e_n_e_r_a_t_e_L_e_g_a_c_y_S_h_a_r_p_C_o_r_n_e_r_P_a_t_c_h_e_s │ │ │ │ │ +unsigned int generateLegacySharpCornerPatches │ │ │ │ │ +Generate sharp regular patches at smooth corners (legacy) │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_3_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_s_h_a_r_e_E_n_d_C_a_p_P_a_t_c_h_P_o_i_n_t_s │ │ │ │ │ +unsigned int shareEndCapPatchPoints │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_2_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_G_e_t_R_e_f_i_n_e_A_d_a_p_t_i_v_e_O_p_t_i_o_n_s │ │ │ │ │ +TopologyRefiner::AdaptiveOptions GetRefineAdaptiveOptions() const │ │ │ │ │ +Determine adaptive refinement options to match assigned patch options. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_0_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_m_a_x_I_s_o_l_a_t_i_o_n_L_e_v_e_l │ │ │ │ │ +unsigned int maxIsolationLevel │ │ │ │ │ +Cap adaptive feature isolation to the given level (max. 10) │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_1_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_:_G_e_t_E_n_d_C_a_p_T_y_p_e │ │ │ │ │ +EndCapType GetEndCapType() const │ │ │ │ │ +Get endcap basis type. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_8_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_g_e_n_e_r_a_t_e_F_V_a_r_L_e_g_a_c_y_L_i_n_e_a_r_P_a_t_c_h_e_s │ │ │ │ │ +unsigned int generateFVarLegacyLinearPatches │ │ │ │ │ +Generate all linear face-varying patches (legacy) │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_3_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_S_e_t_P_a_t_c_h_P_r_e_c_i_s_i_o_n │ │ │ │ │ +void SetPatchPrecision() │ │ │ │ │ +Set precision of vertex patches. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_f_v_a_r_P_a_t_c_h_P_r_e_c_i_s_i_o_n_D_o_u_b_l_e │ │ │ │ │ +unsigned int fvarPatchPrecisionDouble │ │ │ │ │ +Generate double-precision stencils for face-varying patches. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_3_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_S_e_t_M_a_x_I_s_o_l_a_t_i_o_n_L_e_v_e_l │ │ │ │ │ +void SetMaxIsolationLevel(unsigned int level) │ │ │ │ │ +Set maximum isolation level. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_9_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_:_e_n_d_C_a_p_T_y_p_e │ │ │ │ │ +unsigned int endCapType │ │ │ │ │ +EndCapType. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_2_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_f_v_a_r_C_h_a_n_n_e_l_I_n_d_i_c_e_s │ │ │ │ │ +int const * fvarChannelIndices │ │ │ │ │ +List containing the indices of the channels selected for the factory. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_4_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_u_s_e_S_i_n_g_l_e_C_r_e_a_s_e_P_a_t_c_h │ │ │ │ │ +unsigned int useSingleCreasePatch │ │ │ │ │ +Use single crease patch. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_1_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_u_s_e_I_n_f_S_h_a_r_p_P_a_t_c_h │ │ │ │ │ +unsigned int useInfSharpPatch │ │ │ │ │ +Use infinitely-sharp patch. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_1_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_:_S_e_t_E_n_d_C_a_p_T_y_p_e │ │ │ │ │ +void SetEndCapType(EndCapType e) │ │ │ │ │ +Set endcap basis type. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_8_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_g_e_n_e_r_a_t_e_V_a_r_y_i_n_g_L_o_c_a_l_P_o_i_n_t_s │ │ │ │ │ +unsigned int generateVaryingLocalPoints │ │ │ │ │ +Generate local points with varying patches. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_2_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_i_n_c_l_u_d_e_F_V_a_r_B_a_s_e_L_e_v_e_l_I_n_d_i_c_e_s │ │ │ │ │ +unsigned int includeFVarBaseLevelIndices │ │ │ │ │ +Include base level in face-varying patch point indices (Uniform mode only) │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_1_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_g_e_n_e_r_a_t_e_A_l_l_L_e_v_e_l_s │ │ │ │ │ +unsigned int generateAllLevels │ │ │ │ │ +Generate levels from 'firstLevel' to 'maxLevel' (Uniform mode only) │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_1_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_p_a_t_c_h_P_r_e_c_i_s_i_o_n_D_o_u_b_l_e │ │ │ │ │ +unsigned int patchPrecisionDouble │ │ │ │ │ +Generate double-precision stencils for vertex patches. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_3_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_g_e_n_e_r_a_t_e_F_V_a_r_T_a_b_l_e_s │ │ │ │ │ +unsigned int generateFVarTables │ │ │ │ │ +Generate face-varying patch tables. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_2_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_i_n_c_l_u_d_e_B_a_s_e_L_e_v_e_l_I_n_d_i_c_e_s │ │ │ │ │ +unsigned int includeBaseLevelIndices │ │ │ │ │ +Include base level in patch point indices (Uniform mode only) │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_1_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_S_e_t_F_V_a_r_P_a_t_c_h_P_r_e_c_i_s_i_o_n │ │ │ │ │ +void SetFVarPatchPrecision() │ │ │ │ │ +Set precision of face-varying patches. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_n_u_m_F_V_a_r_C_h_a_n_n_e_l_s │ │ │ │ │ +int numFVarChannels │ │ │ │ │ +Number of channel indices and interpolation modes passed. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_3_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_t_r_i_a_n_g_u_l_a_t_e_Q_u_a_d_s │ │ │ │ │ +unsigned int triangulateQuads │ │ │ │ │ +Triangulate 'QUADS' primitives (Uniform mode only) │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_1_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_:_E_n_d_C_a_p_T_y_p_e │ │ │ │ │ +EndCapType │ │ │ │ │ +Choice for approximating irregular patches (end-caps) │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_5_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_E_N_D_C_A_P___L_E_G_A_C_Y___G_R_E_G_O_R_Y │ │ │ │ │ +@ ENDCAP_LEGACY_GREGORY │ │ │ │ │ +legacy option for 2.x style Gregory patches (Catmark only) │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_6_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_E_N_D_C_A_P___G_R_E_G_O_R_Y___B_A_S_I_S │ │ │ │ │ +@ ENDCAP_GREGORY_BASIS │ │ │ │ │ +use Gregory patches (highest quality, recommended default) │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_5_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_:_E_N_D_C_A_P___N_O_N_E │ │ │ │ │ +@ ENDCAP_NONE │ │ │ │ │ +unspecified │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_5_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_E_N_D_C_A_P___B_I_L_I_N_E_A_R___B_A_S_I_S │ │ │ │ │ +@ ENDCAP_BILINEAR_BASIS │ │ │ │ │ +use linear patches (simple quads or tris) │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_5_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_E_N_D_C_A_P___B_S_P_L_I_N_E___B_A_S_I_S │ │ │ │ │ +@ ENDCAP_BSPLINE_BASIS │ │ │ │ │ +use BSpline-like patches (same patch type as regular) │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_5_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_:_O_p_t_i_o_n_s │ │ │ │ │ +Options(unsigned int maxIsolation=10) │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_6_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g │ │ │ │ │ +Obsolete internal struct not intended for public use – due to be deprecated. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_9_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g_:_: │ │ │ │ │ +___i_s_S_i_n_g_l_e_C_r_e_a_s_e │ │ │ │ │ +unsigned int _isSingleCrease │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_0_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g_:_: │ │ │ │ │ +___i_s_R_e_g_u_l_a_r │ │ │ │ │ +unsigned int _isRegular │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_9_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g_:_: │ │ │ │ │ +___b_o_u_n_d_a_r_y_I_n_d_e_x │ │ │ │ │ +unsigned int _boundaryIndex │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_9_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g_:_: │ │ │ │ │ +_a_s_s_i_g_n_B_o_u_n_d_a_r_y_P_r_o_p_e_r_t_i_e_s_F_r_o_m_V_e_r_t_e_x_M_a_s_k │ │ │ │ │ +void assignBoundaryPropertiesFromVertexMask(int boundaryVertexMask) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g_:_: │ │ │ │ │ +___t_r_a_n_s_i_t_i_o_n_M_a_s_k │ │ │ │ │ +unsigned int _transitionMask │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_9_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g_:_: │ │ │ │ │ +___h_a_s_B_o_u_n_d_a_r_y_E_d_g_e │ │ │ │ │ +unsigned int _hasBoundaryEdge │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_0_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g_:_: │ │ │ │ │ +___b_o_u_n_d_a_r_y_M_a_s_k │ │ │ │ │ +unsigned int _boundaryMask │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_9_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g_:_:___h_a_s_P_a_t_c_h │ │ │ │ │ +unsigned int _hasPatch │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_9_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g_:_: │ │ │ │ │ +_a_s_s_i_g_n_T_r_a_n_s_i_t_i_o_n_P_r_o_p_e_r_t_i_e_s_F_r_o_m_E_d_g_e_M_a_s_k │ │ │ │ │ +void assignTransitionPropertiesFromEdgeMask(int boundaryVertexMask) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g_:_:_c_l_e_a_r │ │ │ │ │ +void clear() │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g_:_: │ │ │ │ │ +_a_s_s_i_g_n_B_o_u_n_d_a_r_y_P_r_o_p_e_r_t_i_e_s_F_r_o_m_E_d_g_e_M_a_s_k │ │ │ │ │ +void assignBoundaryPropertiesFromEdgeMask(int boundaryEdgeMask) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g_:_: │ │ │ │ │ +___b_o_u_n_d_a_r_y_C_o_u_n_t │ │ │ │ │ +unsigned int _boundaryCount │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_9_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r │ │ │ │ │ +Stores topology data for a specified set of refinement options. │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_._h_:_5_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_:_:_A_d_a_p_t_i_v_e_O_p_t_i_o_n_s │ │ │ │ │ +Adaptive refinement options. │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_._h_:_1_5_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_:_:_A_d_a_p_t_i_v_e_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_u_s_e_S_i_n_g_l_e_C_r_e_a_s_e_P_a_t_c_h │ │ │ │ │ +unsigned int useSingleCreasePatch │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_._h_:_1_7_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_:_:_A_d_a_p_t_i_v_e_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_u_s_e_I_n_f_S_h_a_r_p_P_a_t_c_h │ │ │ │ │ +unsigned int useInfSharpPatch │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_._h_:_1_7_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_:_:_A_d_a_p_t_i_v_e_O_p_t_i_o_n_s_:_: │ │ │ │ │ +_c_o_n_s_i_d_e_r_F_V_a_r_C_h_a_n_n_e_l_s │ │ │ │ │ +unsigned int considerFVarChannels │ │ │ │ │ +DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_._h_:_1_8_0 │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_V_t_r_:_:_C_o_n_s_t_A_r_r_a_y │ │ │ │ │ DDeeffiinniittiioonn _a_r_r_a_y_._h_:_5_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_V_t_r_:_:_A_r_r_a_y │ │ │ │ │ -DDeeffiinniittiioonn _a_r_r_a_y_._h_:_1_0_5 │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _f_a_r │ │ │ │ │ - * _p_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ + * _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00731.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/far/patchTableFactory.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/far/patchTable.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -90,33 +90,33 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
patchTableFactory.h File Reference
│ │ │ │ +
patchTable.h File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include "../far/topologyRefiner.h"
│ │ │ │ -#include "../far/patchTable.h"
│ │ │ │ +#include "../far/patchDescriptor.h"
│ │ │ │ +#include "../far/patchParam.h"
│ │ │ │ +#include "../far/stencilTable.h"
│ │ │ │ +#include "../sdc/options.h"
│ │ │ │ +#include <vector>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ 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...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -125,13 +125,13 @@ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,32 +1,32 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -patchTableFactory.h File Reference │ │ │ │ │ +patchTable.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ -#include "_._._/_f_a_r_/_t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_._h" │ │ │ │ │ -#include "_._._/_f_a_r_/_p_a_t_c_h_T_a_b_l_e_._h" │ │ │ │ │ +#include "_._._/_f_a_r_/_p_a_t_c_h_D_e_s_c_r_i_p_t_o_r_._h" │ │ │ │ │ +#include "_._._/_f_a_r_/_p_a_t_c_h_P_a_r_a_m_._h" │ │ │ │ │ +#include "_._._/_f_a_r_/_s_t_e_n_c_i_l_T_a_b_l_e_._h" │ │ │ │ │ +#include "_._._/_s_d_c_/_o_p_t_i_o_n_s_._h" │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ - class   _P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y │ │ │ │ │ -  Factory for constructing a _P_a_t_c_h_T_a_b_l_e from a _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r. _M_o_r_e_._._. │ │ │ │ │ +class   _P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +  Container for arrays of parametric patches. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ -struct   _P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s │ │ │ │ │ -  Public options for the _P_a_t_c_h_T_a_b_l_e factory. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -struct   _P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g │ │ │ │ │ -  Obsolete internal struct not intended for public use – due to be │ │ │ │ │ - deprecated. _M_o_r_e_._._. │ │ │ │ │ +class   _P_a_t_c_h_T_a_b_l_e_:_:_P_a_t_c_h_H_a_n_d_l_e │ │ │ │ │ +  Handle that can be used as unique patch identifier within _P_a_t_c_h_T_a_b_l_e. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r │ │ │ │ │   │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _f_a_r │ │ │ │ │ - * _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h │ │ │ │ │ + * _p_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00731.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,5 +1,4 @@ │ │ │ │ │ var a00731 = [ │ │ │ │ │ - ["PatchTableFactory", "a01017.html", "a01017"], │ │ │ │ │ - ["Options", "a01021.html", "a01021"], │ │ │ │ │ - ["PatchFaceTag", "a01025.html", "a01025"] │ │ │ │ │ + ["PatchTable", "a00993.html", "a00993"], │ │ │ │ │ + ["PatchHandle", "a00997.html", "a00997"] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00731_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/far/patchTableFactory.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/far/patchTable.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,15 +92,15 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
patchTableFactory.h
│ │ │ │ +
patchTable.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │
2// Copyright 2013 Pixar
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │ @@ -119,249 +119,798 @@ │ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │
24
│ │ │ │ -
25#ifndef OPENSUBDIV3_FAR_PATCH_TABLE_FACTORY_H
│ │ │ │ -
26#define OPENSUBDIV3_FAR_PATCH_TABLE_FACTORY_H
│ │ │ │ +
25#ifndef OPENSUBDIV3_FAR_PATCH_TABLE_H
│ │ │ │ +
26#define OPENSUBDIV3_FAR_PATCH_TABLE_H
│ │ │ │
27
│ │ │ │
28#include "../version.h"
│ │ │ │
29
│ │ │ │ -
30#include "../far/topologyRefiner.h"
│ │ │ │ -
31#include "../far/patchTable.h"
│ │ │ │ -
32
│ │ │ │ -
33namespace OpenSubdiv {
│ │ │ │ -
34namespace OPENSUBDIV_VERSION {
│ │ │ │ +
30#include "../far/patchDescriptor.h"
│ │ │ │ +
31#include "../far/patchParam.h"
│ │ │ │ +
32#include "../far/stencilTable.h"
│ │ │ │ +
33
│ │ │ │ +
34#include "../sdc/options.h"
│ │ │ │
35
│ │ │ │ -
36namespace Far {
│ │ │ │ +
36#include <vector>
│ │ │ │
37
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
41public:
│ │ │ │ +
38namespace OpenSubdiv {
│ │ │ │ +
39namespace OPENSUBDIV_VERSION {
│ │ │ │ +
40
│ │ │ │ +
41namespace Far {
│ │ │ │
42
│ │ │ │ -
│ │ │ │ -
45 struct Options {
│ │ │ │ -
46
│ │ │ │
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
61 };
│ │ │ │ -
│ │ │ │ -
62
│ │ │ │ -
│ │ │ │ -
63 Options(unsigned int maxIsolation=10) :
│ │ │ │ -
64 generateAllLevels(false),
│ │ │ │ - │ │ │ │ - │ │ │ │ -
67 triangulateQuads(false),
│ │ │ │ - │ │ │ │ -
69 useInfSharpPatch(false),
│ │ │ │ -
70 maxIsolationLevel(maxIsolation & 0xf),
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
75 generateFVarTables(false),
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
82 { }
│ │ │ │ -
│ │ │ │ -
83
│ │ │ │ - │ │ │ │ -
86
│ │ │ │ -
88 void SetEndCapType(EndCapType e) { endCapType = e & 0x7; }
│ │ │ │ -
89
│ │ │ │ -
91 void SetMaxIsolationLevel(unsigned int level) { maxIsolationLevel = level & 0xf; }
│ │ │ │ -
92
│ │ │ │ -
94 template <typename REAL> void SetPatchPrecision();
│ │ │ │ -
95
│ │ │ │ -
97 template <typename REAL> void SetFVarPatchPrecision();
│ │ │ │ -
98
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
102
│ │ │ │ -
103 adaptiveOptions.useInfSharpPatch = useInfSharpPatch;
│ │ │ │ - │ │ │ │ -
105 adaptiveOptions.considerFVarChannels = generateFVarTables &&
│ │ │ │ - │ │ │ │ -
107 return adaptiveOptions;
│ │ │ │ -
108 }
│ │ │ │ -
│ │ │ │ -
109
│ │ │ │ -
110 unsigned int generateAllLevels : 1,
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ +
56
│ │ │ │ +
57public:
│ │ │ │ +
58
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
61 // XXXX manuelk members will eventually be made private
│ │ │ │ +
62 public:
│ │ │ │ +
63
│ │ │ │ +
64 friend class PatchTable;
│ │ │ │ +
65 friend class PatchMap;
│ │ │ │ +
66
│ │ │ │ +
67 Index arrayIndex, // Array index of the patch
│ │ │ │ +
68 patchIndex, // Absolute Index of the patch
│ │ │ │ +
69 vertIndex; // Relative offset to the first CV of the patch in array
│ │ │ │ +
70 };
│ │ │ │ +
│ │ │ │ +
71
│ │ │ │ +
72public:
│ │ │ │ +
73
│ │ │ │ +
75 PatchTable(PatchTable const & src);
│ │ │ │ +
76
│ │ │ │ + │ │ │ │ +
79
│ │ │ │ +
81 bool IsFeatureAdaptive() const;
│ │ │ │ +
82
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
85 return (int)_patchVerts.size();
│ │ │ │ +
86 }
│ │ │ │ +
│ │ │ │ +
87
│ │ │ │ +
89 int GetNumPatchesTotal() const;
│ │ │ │ +
90
│ │ │ │ +
92 int GetMaxValence() const { return _maxValence; }
│ │ │ │ +
93
│ │ │ │ +
95 int GetNumPtexFaces() const { return _numPtexFaces; }
│ │ │ │ +
96
│ │ │ │ +
97
│ │ │ │ +
99
│ │ │ │ +
105
│ │ │ │ + │ │ │ │ +
108
│ │ │ │ + │ │ │ │ +
111
│ │ │ │ +
113 PatchParam GetPatchParam(PatchHandle const & handle) const;
│ │ │ │
114
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
118
│ │ │ │ -
119 // end-capping
│ │ │ │ - │ │ │ │ - │ │ │ │ -
123
│ │ │ │ -
124 // varying
│ │ │ │ - │ │ │ │ - │ │ │ │ -
127
│ │ │ │ -
128 // face-varying
│ │ │ │ - │ │ │ │ +
116 ConstIndexArray GetPatchVertices(int array, int patch) const;
│ │ │ │ +
117
│ │ │ │ +
119 PatchParam GetPatchParam(int array, int patch) const;
│ │ │ │ +
121
│ │ │ │ +
122
│ │ │ │ +
124
│ │ │ │
130
│ │ │ │ -
131 // precision
│ │ │ │ - │ │ │ │ - │ │ │ │ -
134
│ │ │ │ -
135 // legacy behaviors (default to true)
│ │ │ │ - │ │ │ │ - │ │ │ │ -
138
│ │ │ │ - │ │ │ │ -
140 int const * fvarChannelIndices;
│ │ │ │ -
141 };
│ │ │ │ -
│ │ │ │ +
132 int GetNumPatchArrays() const;
│ │ │ │ +
133
│ │ │ │ +
135 int GetNumPatches(int array) const;
│ │ │ │ +
136
│ │ │ │ +
138 int GetNumControlVertices(int array) const;
│ │ │ │ +
139
│ │ │ │ + │ │ │ │
142
│ │ │ │ -
175 static PatchTable * Create(TopologyRefiner const & refiner,
│ │ │ │ -
176 Options options = Options(),
│ │ │ │ -
177 ConstIndexArray selectedFaces = ConstIndexArray());
│ │ │ │ -
178
│ │ │ │ -
179public:
│ │ │ │ -
180 // PatchFaceTag
│ │ │ │ -
181 //
│ │ │ │ -
182 // This simple struct was previously used within the factory to take inventory of
│ │ │ │ -
183 // various kinds of patches to fully allocate buffers prior to populating them. It
│ │ │ │ -
184 // was not intended to be exposed as part of the public interface.
│ │ │ │ -
185 //
│ │ │ │ -
186 // It is no longer used internally and is being kept here to respect preservation
│ │ │ │ -
187 // of the public interface, but it will be deprecated at the earliest opportunity.
│ │ │ │ -
188 //
│ │ │ │ -
191 //
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
193 public:
│ │ │ │ -
194 unsigned int _hasPatch : 1;
│ │ │ │ -
195 unsigned int _isRegular : 1;
│ │ │ │ -
196 unsigned int _transitionMask : 4;
│ │ │ │ -
197 unsigned int _boundaryMask : 4;
│ │ │ │ -
198 unsigned int _boundaryIndex : 2;
│ │ │ │ -
199 unsigned int _boundaryCount : 3;
│ │ │ │ -
200 unsigned int _hasBoundaryEdge : 3;
│ │ │ │ -
201 unsigned int _isSingleCrease : 1;
│ │ │ │ -
202
│ │ │ │ -
203 void clear();
│ │ │ │ -
204 void assignBoundaryPropertiesFromEdgeMask(int boundaryEdgeMask);
│ │ │ │ -
205 void assignBoundaryPropertiesFromVertexMask(int boundaryVertexMask);
│ │ │ │ -
206 void assignTransitionPropertiesFromEdgeMask(int boundaryVertexMask);
│ │ │ │ -
207 };
│ │ │ │ -
│ │ │ │ -
208 typedef std::vector<PatchFaceTag> PatchTagVector;
│ │ │ │ -
209};
│ │ │ │ -
│ │ │ │ -
210
│ │ │ │ -
211
│ │ │ │ -
│ │ │ │ -
212template <> inline void PatchTableFactory::Options::SetPatchPrecision<float>() {
│ │ │ │ -
213 patchPrecisionDouble = false;
│ │ │ │ -
214}
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
215template <> inline void PatchTableFactory::Options::SetFVarPatchPrecision<float>() {
│ │ │ │ -
216 fvarPatchPrecisionDouble = false;
│ │ │ │ -
217}
│ │ │ │ -
│ │ │ │ + │ │ │ │ +
145
│ │ │ │ +
147 ConstPatchParamArray const GetPatchParams(int array) const;
│ │ │ │ +
149
│ │ │ │ +
150
│ │ │ │ +
152
│ │ │ │ +
159
│ │ │ │ +
161 int GetNumLocalPoints() const;
│ │ │ │ +
162
│ │ │ │ + │ │ │ │ +
165
│ │ │ │ +
167 template <typename REAL>
│ │ │ │ + │ │ │ │ +
169
│ │ │ │ +
172 template <typename REAL> bool LocalPointStencilPrecisionMatchesType() const;
│ │ │ │ +
173
│ │ │ │ +
186 template <class T> void
│ │ │ │ +
187 ComputeLocalPointValues(T const *src, T *dst) const;
│ │ │ │ +
188
│ │ │ │ +
189
│ │ │ │ + │ │ │ │ +
192
│ │ │ │ + │ │ │ │ +
195
│ │ │ │ +
197 template <typename REAL>
│ │ │ │ + │ │ │ │ +
199
│ │ │ │ +
202 template <typename REAL> bool LocalPointVaryingStencilPrecisionMatchesType() const;
│ │ │ │ +
203
│ │ │ │ +
216 template <class T> void
│ │ │ │ +
217 ComputeLocalPointValuesVarying(T const *src, T *dst) const;
│ │ │ │
218
│ │ │ │ -
219template <> inline void PatchTableFactory::Options::SetPatchPrecision<double>() {
│ │ │ │ -
220 patchPrecisionDouble = true;
│ │ │ │ -
221}
│ │ │ │ -
222template <> inline void PatchTableFactory::Options::SetFVarPatchPrecision<double>() {
│ │ │ │ -
223 fvarPatchPrecisionDouble = true;
│ │ │ │ -
224}
│ │ │ │ +
219
│ │ │ │ +
221 int GetNumLocalPointsFaceVarying(int channel = 0) const;
│ │ │ │ +
222
│ │ │ │ +
224 StencilTable const *GetLocalPointFaceVaryingStencilTable(int channel = 0) const;
│ │ │ │
225
│ │ │ │ -
226
│ │ │ │ -
227} // end namespace Far
│ │ │ │ -
228
│ │ │ │ -
229} // end namespace OPENSUBDIV_VERSION
│ │ │ │ -
230using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
231
│ │ │ │ -
232} // end namespace OpenSubdiv
│ │ │ │ +
227 template <typename REAL>
│ │ │ │ + │ │ │ │ +
229
│ │ │ │ +
232 template <typename REAL> bool LocalPointFaceVaryingStencilPrecisionMatchesType() const;
│ │ │ │
233
│ │ │ │ -
234
│ │ │ │ -
235#endif /* OPENSUBDIV3_FAR_PATCH_TABLE_FACTORY_H */
│ │ │ │ +
248 template <class T> void
│ │ │ │ +
249 ComputeLocalPointValuesFaceVarying(T const *src, T *dst, int channel = 0) const;
│ │ │ │ +
251
│ │ │ │ +
252
│ │ │ │ +
254
│ │ │ │ +
255
│ │ │ │ + │ │ │ │ +
260
│ │ │ │ + │ │ │ │ +
263
│ │ │ │ +
264 typedef std::vector<Index> VertexValenceTable;
│ │ │ │ +
265
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
268 return _vertexValenceTable;
│ │ │ │ +
269 }
│ │ │ │ +
│ │ │ │ +
271
│ │ │ │ +
272
│ │ │ │ +
274
│ │ │ │ +
280
│ │ │ │ + │ │ │ │ +
284
│ │ │ │ +
287 float GetSingleCreasePatchSharpnessValue(int array, int patch) const;
│ │ │ │ +
289
│ │ │ │ +
290
│ │ │ │ +
292
│ │ │ │ +
298
│ │ │ │ + │ │ │ │ +
301
│ │ │ │ + │ │ │ │ +
304
│ │ │ │ +
306 ConstIndexArray GetPatchVaryingVertices(int array, int patch) const;
│ │ │ │ +
307
│ │ │ │ + │ │ │ │ +
310
│ │ │ │ + │ │ │ │ +
314
│ │ │ │ +
315
│ │ │ │ +
317
│ │ │ │ +
323
│ │ │ │ + │ │ │ │ +
326
│ │ │ │ + │ │ │ │ +
329
│ │ │ │ + │ │ │ │ +
332
│ │ │ │ + │ │ │ │ +
335
│ │ │ │ +
337 ConstIndexArray GetPatchFVarValues(PatchHandle const & handle, int channel = 0) const;
│ │ │ │ +
338
│ │ │ │ +
340 ConstIndexArray GetPatchFVarValues(int array, int patch, int channel = 0) const;
│ │ │ │ +
341
│ │ │ │ +
343 ConstIndexArray GetPatchArrayFVarValues(int array, int channel = 0) const;
│ │ │ │ +
344
│ │ │ │ +
346 ConstIndexArray GetFVarValues(int channel = 0) const;
│ │ │ │ +
347
│ │ │ │ +
349 int GetFVarValueStride(int channel = 0) const;
│ │ │ │ +
350
│ │ │ │ +
352 PatchParam GetPatchFVarPatchParam(PatchHandle const & handle, int channel = 0) const;
│ │ │ │ +
353
│ │ │ │ +
355 PatchParam GetPatchFVarPatchParam(int array, int patch, int channel = 0) const;
│ │ │ │ +
356
│ │ │ │ +
358 ConstPatchParamArray GetPatchArrayFVarPatchParams(int array, int channel = 0) const;
│ │ │ │ +
359
│ │ │ │ + │ │ │ │ +
362
│ │ │ │ + │ │ │ │ +
366
│ │ │ │ +
367
│ │ │ │ +
369
│ │ │ │ +
374
│ │ │ │ +
375 typedef std::vector<Index> PatchVertsTable;
│ │ │ │ +
376
│ │ │ │ +
378 PatchVertsTable const & GetPatchControlVerticesTable() const { return _patchVerts; }
│ │ │ │ +
379
│ │ │ │ +
381 PatchParamTable const & GetPatchParamTable() const { return _paramTable; }
│ │ │ │ +
382
│ │ │ │ +
384 std::vector<Index> const &GetSharpnessIndexTable() const { return _sharpnessIndices; }
│ │ │ │ +
385
│ │ │ │ +
387 std::vector<float> const &GetSharpnessValues() const { return _sharpnessValues; }
│ │ │ │ +
388
│ │ │ │ +
389 typedef std::vector<unsigned int> QuadOffsetsTable;
│ │ │ │ +
390
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
393 return _quadOffsetsTable;
│ │ │ │ +
394 }
│ │ │ │ +
│ │ │ │ +
396
│ │ │ │ +
398 void print() const;
│ │ │ │ +
399
│ │ │ │ +
400public:
│ │ │ │ +
401
│ │ │ │ +
403
│ │ │ │ +
405
│ │ │ │ +
428 template <typename REAL>
│ │ │ │ +
429 void EvaluateBasis(PatchHandle const & handle, REAL u, REAL v,
│ │ │ │ +
430 REAL wP[], REAL wDu[] = 0, REAL wDv[] = 0,
│ │ │ │ +
431 REAL wDuu[] = 0, REAL wDuv[] = 0, REAL wDvv[] = 0) const;
│ │ │ │ +
432
│ │ │ │ +
435 void EvaluateBasis(PatchHandle const & handle, float u, float v,
│ │ │ │ +
436 float wP[], float wDu[] = 0, float wDv[] = 0,
│ │ │ │ +
437 float wDuu[] = 0, float wDuv[] = 0, float wDvv[] = 0) const;
│ │ │ │ +
438
│ │ │ │ +
441 void EvaluateBasis(PatchHandle const & handle, double u, double v,
│ │ │ │ +
442 double wP[], double wDu[] = 0, double wDv[] = 0,
│ │ │ │ +
443 double wDuu[] = 0, double wDuv[] = 0, double wDvv[] = 0) const;
│ │ │ │ +
444
│ │ │ │ +
467 template <typename REAL>
│ │ │ │ +
468 void EvaluateBasisVarying(PatchHandle const & handle, REAL u, REAL v,
│ │ │ │ +
469 REAL wP[], REAL wDu[] = 0, REAL wDv[] = 0,
│ │ │ │ +
470 REAL wDuu[] = 0, REAL wDuv[] = 0, REAL wDvv[] = 0) const;
│ │ │ │ +
471
│ │ │ │ +
474 void EvaluateBasisVarying(PatchHandle const & handle, float u, float v,
│ │ │ │ +
475 float wP[], float wDu[] = 0, float wDv[] = 0,
│ │ │ │ +
476 float wDuu[] = 0, float wDuv[] = 0, float wDvv[] = 0) const;
│ │ │ │ +
477
│ │ │ │ +
480 void EvaluateBasisVarying(PatchHandle const & handle, double u, double v,
│ │ │ │ +
481 double wP[], double wDu[] = 0, double wDv[] = 0,
│ │ │ │ +
482 double wDuu[] = 0, double wDuv[] = 0, double wDvv[] = 0) const;
│ │ │ │ +
483
│ │ │ │ +
508 template <typename REAL>
│ │ │ │ +
509 void EvaluateBasisFaceVarying(PatchHandle const & handle, REAL u, REAL v,
│ │ │ │ +
510 REAL wP[], REAL wDu[] = 0, REAL wDv[] = 0,
│ │ │ │ +
511 REAL wDuu[] = 0, REAL wDuv[] = 0, REAL wDvv[] = 0,
│ │ │ │ +
512 int channel = 0) const;
│ │ │ │ +
513
│ │ │ │ +
516 void EvaluateBasisFaceVarying(PatchHandle const & handle, float u, float v,
│ │ │ │ +
517 float wP[], float wDu[] = 0, float wDv[] = 0,
│ │ │ │ +
518 float wDuu[] = 0, float wDuv[] = 0, float wDvv[] = 0,
│ │ │ │ +
519 int channel = 0) const;
│ │ │ │ +
520
│ │ │ │ +
523 void EvaluateBasisFaceVarying(PatchHandle const & handle, double u, double v,
│ │ │ │ +
524 double wP[], double wDu[] = 0, double wDv[] = 0,
│ │ │ │ +
525 double wDuu[] = 0, double wDuv[] = 0, double wDvv[] = 0,
│ │ │ │ +
526 int channel = 0) const;
│ │ │ │ +
528
│ │ │ │ +
529protected:
│ │ │ │ +
530
│ │ │ │ +
531 friend class PatchTableBuilder;
│ │ │ │ +
532
│ │ │ │ +
533 // Factory constructor
│ │ │ │ +
534 PatchTable(int maxvalence);
│ │ │ │ +
535
│ │ │ │ +
536 Index getPatchIndex(int array, int patch) const;
│ │ │ │ +
537
│ │ │ │ + │ │ │ │ +
539
│ │ │ │ + │ │ │ │ +
541 float * getSharpnessValues(Index arrayIndex);
│ │ │ │ +
542
│ │ │ │ +
543private:
│ │ │ │ +
544
│ │ │ │ +
545 //
│ │ │ │ +
546 // Patch arrays
│ │ │ │ +
547 //
│ │ │ │ +
548 struct PatchArray {
│ │ │ │ +
549 PatchArray(PatchDescriptor d, int np, Index v, Index p, Index qo) :
│ │ │ │ +
550 desc(d), numPatches(np), vertIndex(v),
│ │ │ │ +
551 patchIndex(p), quadOffsetIndex (qo) { }
│ │ │ │ +
552
│ │ │ │ +
553 void print() const;
│ │ │ │ +
554
│ │ │ │ +
555 PatchDescriptor desc; // type of patches in the array
│ │ │ │ +
556
│ │ │ │ +
557 int numPatches; // number of patches in the array
│ │ │ │ +
558
│ │ │ │ +
559 Index vertIndex, // index to the first control vertex
│ │ │ │ +
560 patchIndex, // absolute index of the first patch in the array
│ │ │ │ +
561 quadOffsetIndex; // index of the first quad offset entry
│ │ │ │ +
562 };
│ │ │ │ +
563
│ │ │ │ +
564 typedef std::vector<PatchArray> PatchArrayVector;
│ │ │ │ +
565
│ │ │ │ +
566 PatchArray & getPatchArray(Index arrayIndex);
│ │ │ │ +
567 PatchArray const & getPatchArray(Index arrayIndex) const;
│ │ │ │ +
568
│ │ │ │ +
569 void reservePatchArrays(int numPatchArrays);
│ │ │ │ +
570 void pushPatchArray(PatchDescriptor desc, int npatches,
│ │ │ │ +
571 Index * vidx, Index * pidx, Index * qoidx=0);
│ │ │ │ +
572
│ │ │ │ +
573 IndexArray getPatchArrayVertices(int arrayIndex);
│ │ │ │ +
574
│ │ │ │ +
575 Index findPatchArray(PatchDescriptor desc);
│ │ │ │ +
576
│ │ │ │ +
577
│ │ │ │ +
578 //
│ │ │ │ +
579 // Varying patch arrays
│ │ │ │ +
580 //
│ │ │ │ +
581 IndexArray getPatchArrayVaryingVertices(int arrayIndex);
│ │ │ │ +
582
│ │ │ │ +
583 void allocateVaryingVertices(
│ │ │ │ +
584 PatchDescriptor desc, int numPatches);
│ │ │ │ +
585 void populateVaryingVertices();
│ │ │ │ +
586
│ │ │ │ +
587 //
│ │ │ │ +
588 // Face-varying patch channels
│ │ │ │ +
589 //
│ │ │ │ +
590
│ │ │ │ +
591 //
│ │ │ │ +
592 // FVarPatchChannel
│ │ │ │ +
593 //
│ │ │ │ +
594 // Stores a record for each patch in the primitive :
│ │ │ │ +
595 //
│ │ │ │ +
596 // - Each patch in the PatchTable has a corresponding patch in each
│ │ │ │ +
597 // face-varying patch channel. Patch vertex indices are sorted in the same
│ │ │ │ +
598 // patch-type order as PatchTable::PTables. Face-varying data for a patch
│ │ │ │ +
599 // can therefore be quickly accessed by using the patch primitive ID as
│ │ │ │ +
600 // index into patchValueOffsets to locate the face-varying control vertex
│ │ │ │ +
601 // indices.
│ │ │ │ +
602 //
│ │ │ │ +
603 // - Face-varying channels can have a different interpolation modes
│ │ │ │ +
604 //
│ │ │ │ +
605 // - Unlike "vertex" patches, there are no transition masks required
│ │ │ │ +
606 // for face-varying patches.
│ │ │ │ +
607 //
│ │ │ │ +
608 // - Face-varying patches still require boundary edge masks.
│ │ │ │ +
609 //
│ │ │ │ +
610 // - currently most patches with sharp boundaries but smooth interiors have
│ │ │ │ +
611 // to be isolated to level 10 : we need a special type of bicubic patch
│ │ │ │ +
612 // similar to single-crease to resolve this condition without requiring
│ │ │ │ +
613 // isolation if possible
│ │ │ │ +
614 //
│ │ │ │ +
615 struct FVarPatchChannel {
│ │ │ │ + │ │ │ │ +
617
│ │ │ │ +
618 PatchDescriptor regDesc;
│ │ │ │ +
619 PatchDescriptor irregDesc;
│ │ │ │ +
620
│ │ │ │ +
621 int stride;
│ │ │ │ +
622
│ │ │ │ +
623 std::vector<Index> patchValues;
│ │ │ │ +
624 std::vector<PatchParam> patchParam;
│ │ │ │ +
625 };
│ │ │ │ +
626 typedef std::vector<FVarPatchChannel> FVarPatchChannelVector;
│ │ │ │ +
627
│ │ │ │ +
628 FVarPatchChannel & getFVarPatchChannel(int channel);
│ │ │ │ +
629 FVarPatchChannel const & getFVarPatchChannel(int channel) const;
│ │ │ │ +
630
│ │ │ │ +
631 void allocateFVarPatchChannels(int numChannels);
│ │ │ │ +
632 void allocateFVarPatchChannelValues(
│ │ │ │ +
633 PatchDescriptor regDesc, PatchDescriptor irregDesc,
│ │ │ │ +
634 int numPatches, int channel);
│ │ │ │ +
635
│ │ │ │ +
636 // deprecated
│ │ │ │ +
637 void setFVarPatchChannelLinearInterpolation(
│ │ │ │ +
638 Sdc::Options::FVarLinearInterpolation interpolation, int channel);
│ │ │ │ +
639
│ │ │ │ +
640 IndexArray getFVarValues(int channel);
│ │ │ │ +
641 ConstIndexArray getPatchFVarValues(int patch, int channel) const;
│ │ │ │ +
642
│ │ │ │ +
643 PatchParamArray getFVarPatchParams(int channel);
│ │ │ │ +
644 PatchParam getPatchFVarPatchParam(int patch, int channel) const;
│ │ │ │ +
645
│ │ │ │ +
646private:
│ │ │ │ +
647 //
│ │ │ │ +
648 // Simple private class to hold stencil table pointers of varying precision,
│ │ │ │ +
649 // where the discriminant of the precision is external.
│ │ │ │ +
650 //
│ │ │ │ +
651 // NOTE that this is a simple pointer container and NOT a smart pointer that
│ │ │ │ +
652 // manages the ownership of the object referred to by it.
│ │ │ │ +
653 //
│ │ │ │ +
654 class StencilTablePtr {
│ │ │ │ +
655 private:
│ │ │ │ +
656 typedef StencilTableReal<float> float_type;
│ │ │ │ +
657 typedef StencilTableReal<double> double_type;
│ │ │ │ +
658
│ │ │ │ +
659 union {
│ │ │ │ +
660 float_type * _fPtr;
│ │ │ │ +
661 double_type * _dPtr;
│ │ │ │ +
662 };
│ │ │ │ +
663
│ │ │ │ +
664 public:
│ │ │ │ +
665 StencilTablePtr() { _fPtr = 0; }
│ │ │ │ +
666 StencilTablePtr(float_type * ptr) { _fPtr = ptr; }
│ │ │ │ +
667 StencilTablePtr(double_type * ptr) { _dPtr = ptr; }
│ │ │ │ +
668
│ │ │ │ +
669 operator bool() const { return _fPtr != 0; }
│ │ │ │ +
670
│ │ │ │ +
671 void Set() { _fPtr = 0; }
│ │ │ │ +
672 void Set(float_type * ptr) { _fPtr = ptr; }
│ │ │ │ +
673 void Set(double_type * ptr) { _dPtr = ptr; }
│ │ │ │ +
674
│ │ │ │ +
675 template <typename REAL> StencilTableReal<REAL> * Get() const;
│ │ │ │ +
676 };
│ │ │ │ +
677
│ │ │ │ +
678private:
│ │ │ │ +
679
│ │ │ │ +
680 //
│ │ │ │ +
681 // Topology
│ │ │ │ +
682 //
│ │ │ │ +
683
│ │ │ │ +
684 int _maxValence, // highest vertex valence found in the mesh
│ │ │ │ +
685 _numPtexFaces; // total number of ptex faces
│ │ │ │ +
686
│ │ │ │ +
687 PatchArrayVector _patchArrays; // Vector of descriptors for arrays of patches
│ │ │ │ +
688
│ │ │ │ +
689 std::vector<Index> _patchVerts; // Indices of the control vertices of the patches
│ │ │ │ +
690
│ │ │ │ +
691 PatchParamTable _paramTable; // PatchParam bitfields (one per patch)
│ │ │ │ +
692
│ │ │ │ +
693 //
│ │ │ │ +
694 // Extraordinary vertex closed-form evaluation / endcap basis conversion
│ │ │ │ +
695 //
│ │ │ │ +
696 // XXXtakahito: these data will probably be replaced with mask coefficient or something
│ │ │ │ +
697 // SchemeWorker populates.
│ │ │ │ +
698 //
│ │ │ │ +
699 QuadOffsetsTable _quadOffsetsTable; // Quad offsets (for Gregory patches)
│ │ │ │ +
700 VertexValenceTable _vertexValenceTable; // Vertex valence table (for Gregory patches)
│ │ │ │ +
701
│ │ │ │ +
702 StencilTablePtr _localPointStencils; // local point conversion stencils
│ │ │ │ +
703 StencilTablePtr _localPointVaryingStencils; // local point varying stencils
│ │ │ │ +
704
│ │ │ │ +
705 //
│ │ │ │ +
706 // Varying data
│ │ │ │ +
707 //
│ │ │ │ +
708 PatchDescriptor _varyingDesc;
│ │ │ │ +
709
│ │ │ │ +
710 std::vector<Index> _varyingVerts;
│ │ │ │ +
711
│ │ │ │ +
712 //
│ │ │ │ +
713 // Face-varying data
│ │ │ │ +
714 //
│ │ │ │ +
715 FVarPatchChannelVector _fvarChannels;
│ │ │ │ +
716
│ │ │ │ +
717 std::vector<StencilTablePtr> _localPointFaceVaryingStencils;
│ │ │ │ +
718
│ │ │ │ +
719 //
│ │ │ │ +
720 // 'single-crease' patch sharpness tables
│ │ │ │ +
721 //
│ │ │ │ +
722 std::vector<Index> _sharpnessIndices; // Indices of single-crease sharpness (one per patch)
│ │ │ │ +
723 std::vector<float> _sharpnessValues; // Sharpness values.
│ │ │ │ +
724
│ │ │ │ +
725 //
│ │ │ │ +
726 // Construction history -- relevant to at least one public query:
│ │ │ │ +
727 //
│ │ │ │ +
728 unsigned int _isUniformLinear : 1;
│ │ │ │ +
729
│ │ │ │ +
730 //
│ │ │ │ +
731 // Precision -- only applies to local-point stencil tables
│ │ │ │ +
732 //
│ │ │ │ +
733 unsigned int _vertexPrecisionIsDouble : 1;
│ │ │ │ +
734 unsigned int _varyingPrecisionIsDouble : 1;
│ │ │ │ +
735 unsigned int _faceVaryingPrecisionIsDouble : 1;
│ │ │ │ +
736};
│ │ │ │ +
│ │ │ │ +
737
│ │ │ │ +
738
│ │ │ │ +
739//
│ │ │ │ +
740// Template specializations for float/double -- to be defined before used:
│ │ │ │ +
741//
│ │ │ │ +
742template <> inline StencilTableReal<float> *
│ │ │ │ +
743PatchTable::StencilTablePtr::Get<float>() const { return _fPtr; }
│ │ │ │ +
744
│ │ │ │ +
745template <> inline StencilTableReal<double> *
│ │ │ │ +
746PatchTable::StencilTablePtr::Get<double>() const { return _dPtr; }
│ │ │ │ +
747
│ │ │ │ +
│ │ │ │ +
748template <> inline bool
│ │ │ │ +
749PatchTable::LocalPointStencilPrecisionMatchesType<float>() const {
│ │ │ │ +
750 return !_vertexPrecisionIsDouble;
│ │ │ │ +
751}
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
752template <> inline bool
│ │ │ │ +
753PatchTable::LocalPointVaryingStencilPrecisionMatchesType<float>() const {
│ │ │ │ +
754 return !_varyingPrecisionIsDouble;
│ │ │ │ +
755}
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
756template <> inline bool
│ │ │ │ +
757PatchTable::LocalPointFaceVaryingStencilPrecisionMatchesType<float>() const {
│ │ │ │ +
758 return !_faceVaryingPrecisionIsDouble;
│ │ │ │ +
759}
│ │ │ │ +
│ │ │ │ +
760
│ │ │ │ +
│ │ │ │ +
761template <> inline bool
│ │ │ │ +
762PatchTable::LocalPointStencilPrecisionMatchesType<double>() const {
│ │ │ │ +
763 return _vertexPrecisionIsDouble;
│ │ │ │ +
764}
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
765template <> inline bool
│ │ │ │ +
766PatchTable::LocalPointVaryingStencilPrecisionMatchesType<double>() const {
│ │ │ │ +
767 return _varyingPrecisionIsDouble;
│ │ │ │ +
768}
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
769template <> inline bool
│ │ │ │ +
770PatchTable::LocalPointFaceVaryingStencilPrecisionMatchesType<double>() const {
│ │ │ │ +
771 return _faceVaryingPrecisionIsDouble;
│ │ │ │ +
772}
│ │ │ │ +
│ │ │ │ +
773
│ │ │ │ +
774//
│ │ │ │ +
775// StencilTable access -- backward compatible and generic:
│ │ │ │ +
776//
│ │ │ │ +
777inline StencilTable const *
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
779 assert(LocalPointStencilPrecisionMatchesType<float>());
│ │ │ │ +
780 return static_cast<StencilTable const *>(_localPointStencils.Get<float>());
│ │ │ │ +
781}
│ │ │ │ +
│ │ │ │ +
782inline StencilTable const *
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
784 assert(LocalPointVaryingStencilPrecisionMatchesType<float>());
│ │ │ │ +
785 return static_cast<StencilTable const *>(
│ │ │ │ +
786 _localPointVaryingStencils.Get<float>());
│ │ │ │ +
787}
│ │ │ │ +
│ │ │ │ +
788inline StencilTable const *
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
790 assert(LocalPointFaceVaryingStencilPrecisionMatchesType<float>());
│ │ │ │ +
791 if (channel >= 0 && channel < (int)_localPointFaceVaryingStencils.size()) {
│ │ │ │ +
792 return static_cast<StencilTable const *>(
│ │ │ │ +
793 _localPointFaceVaryingStencils[channel].Get<float>());
│ │ │ │ +
794 }
│ │ │ │ +
795 return NULL;
│ │ │ │ +
796}
│ │ │ │ +
│ │ │ │ +
797
│ │ │ │ +
798template <typename REAL>
│ │ │ │ +
799inline StencilTableReal<REAL> const *
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
801 assert(LocalPointStencilPrecisionMatchesType<REAL>());
│ │ │ │ +
802 return _localPointStencils.Get<REAL>();
│ │ │ │ +
803}
│ │ │ │ +
│ │ │ │ +
804template <typename REAL>
│ │ │ │ +
805inline StencilTableReal<REAL> const *
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
807 assert(LocalPointVaryingStencilPrecisionMatchesType<REAL>());
│ │ │ │ +
808 return _localPointVaryingStencils.Get<REAL>();
│ │ │ │ +
809}
│ │ │ │ +
│ │ │ │ +
810template <typename REAL>
│ │ │ │ +
811inline StencilTableReal<REAL> const *
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
813 assert(LocalPointFaceVaryingStencilPrecisionMatchesType<REAL>());
│ │ │ │ +
814 if (channel >= 0 && channel < (int)_localPointFaceVaryingStencils.size()) {
│ │ │ │ +
815 return _localPointFaceVaryingStencils[channel].Get<REAL>();
│ │ │ │ +
816 }
│ │ │ │ +
817 return NULL;
│ │ │ │ +
818}
│ │ │ │ +
│ │ │ │ +
819
│ │ │ │ +
820
│ │ │ │ +
821//
│ │ │ │ +
822// Computation of local point values:
│ │ │ │ +
823//
│ │ │ │ +
824template <class T>
│ │ │ │ +
825inline void
│ │ │ │ +
│ │ │ │ +
826PatchTable::ComputeLocalPointValues(T const *src, T *dst) const {
│ │ │ │ +
827 assert(LocalPointStencilPrecisionMatchesType<float>());
│ │ │ │ +
828 if (_localPointStencils) {
│ │ │ │ +
829 _localPointStencils.Get<float>()->UpdateValues(src, dst);
│ │ │ │ +
830 }
│ │ │ │ +
831}
│ │ │ │ +
│ │ │ │ +
832
│ │ │ │ +
833template <class T>
│ │ │ │ +
834inline void
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
836 assert(LocalPointVaryingStencilPrecisionMatchesType<float>());
│ │ │ │ +
837 if (_localPointVaryingStencils) {
│ │ │ │ +
838 _localPointVaryingStencils.Get<float>()->UpdateValues(src, dst);
│ │ │ │ +
839 }
│ │ │ │ +
840}
│ │ │ │ +
│ │ │ │ +
841
│ │ │ │ +
842template <class T>
│ │ │ │ +
843inline void
│ │ │ │ +
│ │ │ │ +
844PatchTable::ComputeLocalPointValuesFaceVarying(T const *src, T *dst, int channel) const {
│ │ │ │ +
845 assert(LocalPointFaceVaryingStencilPrecisionMatchesType<float>());
│ │ │ │ +
846 if (channel >= 0 && channel < (int)_localPointFaceVaryingStencils.size()) {
│ │ │ │ +
847 if (_localPointFaceVaryingStencils[channel]) {
│ │ │ │ +
848 _localPointFaceVaryingStencils[channel].Get<float>()->UpdateValues(src, dst);
│ │ │ │ +
849 }
│ │ │ │ +
850 }
│ │ │ │ +
851}
│ │ │ │ +
│ │ │ │ +
852
│ │ │ │ +
853
│ │ │ │ +
854//
│ │ │ │ +
855// Basis evaluation overloads
│ │ │ │ +
856//
│ │ │ │ +
857inline void
│ │ │ │ +
│ │ │ │ +
858PatchTable::EvaluateBasis(PatchHandle const & handle, float u, float v,
│ │ │ │ +
859 float wP[], float wDu[], float wDv[],
│ │ │ │ +
860 float wDuu[], float wDuv[], float wDvv[]) const {
│ │ │ │ +
861
│ │ │ │ +
862 EvaluateBasis<float>(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv);
│ │ │ │ +
863}
│ │ │ │ +
│ │ │ │ +
864inline void
│ │ │ │ +
│ │ │ │ +
865PatchTable::EvaluateBasis(PatchHandle const & handle, double u, double v,
│ │ │ │ +
866 double wP[], double wDu[], double wDv[],
│ │ │ │ +
867 double wDuu[], double wDuv[], double wDvv[]) const {
│ │ │ │ +
868
│ │ │ │ +
869 EvaluateBasis<double>(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv);
│ │ │ │ +
870}
│ │ │ │ +
│ │ │ │ +
871
│ │ │ │ +
872inline void
│ │ │ │ +
│ │ │ │ +
873PatchTable::EvaluateBasisVarying(PatchHandle const & handle, float u, float v,
│ │ │ │ +
874 float wP[], float wDu[], float wDv[],
│ │ │ │ +
875 float wDuu[], float wDuv[], float wDvv[]) const {
│ │ │ │ +
876
│ │ │ │ +
877 EvaluateBasisVarying<float>(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv);
│ │ │ │ +
878}
│ │ │ │ +
│ │ │ │ +
879inline void
│ │ │ │ +
│ │ │ │ +
880PatchTable::EvaluateBasisVarying(PatchHandle const & handle, double u, double v,
│ │ │ │ +
881 double wP[], double wDu[], double wDv[],
│ │ │ │ +
882 double wDuu[], double wDuv[], double wDvv[]) const {
│ │ │ │ +
883
│ │ │ │ +
884 EvaluateBasisVarying<double>(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv);
│ │ │ │ +
885}
│ │ │ │ +
│ │ │ │ +
886
│ │ │ │ +
887inline void
│ │ │ │ +
│ │ │ │ +
888PatchTable::EvaluateBasisFaceVarying(PatchHandle const & handle, float u, float v,
│ │ │ │ +
889 float wP[], float wDu[], float wDv[],
│ │ │ │ +
890 float wDuu[], float wDuv[], float wDvv[], int channel) const {
│ │ │ │ +
891
│ │ │ │ +
892 EvaluateBasisFaceVarying<float>(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv, channel);
│ │ │ │ +
893}
│ │ │ │ +
│ │ │ │ +
894inline void
│ │ │ │ +
│ │ │ │ +
895PatchTable::EvaluateBasisFaceVarying(PatchHandle const & handle, double u, double v,
│ │ │ │ +
896 double wP[], double wDu[], double wDv[],
│ │ │ │ +
897 double wDuu[], double wDuv[], double wDvv[], int channel) const {
│ │ │ │ +
898
│ │ │ │ +
899 EvaluateBasisFaceVarying<double>(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv, channel);
│ │ │ │ +
900}
│ │ │ │ +
│ │ │ │ +
901
│ │ │ │ +
902} // end namespace Far
│ │ │ │ +
903
│ │ │ │ +
904} // end namespace OPENSUBDIV_VERSION
│ │ │ │ +
905using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
906
│ │ │ │ +
907} // end namespace OpenSubdiv
│ │ │ │ +
908
│ │ │ │ +
909#endif /* OPENSUBDIV3_FAR_PATCH_TABLE */
│ │ │ │ │ │ │ │
Vtr::ConstIndexArray ConstIndexArray
Definition types.h:47
│ │ │ │ -
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ -
Factory for constructing a PatchTable from a TopologyRefiner.
│ │ │ │ - │ │ │ │ -
static PatchTable * Create(TopologyRefiner const &refiner, Options options=Options(), ConstIndexArray selectedFaces=ConstIndexArray())
Instantiates a PatchTable from a client-provided TopologyRefiner.
│ │ │ │ - │ │ │ │ -
unsigned int generateVaryingTables
Generate varying patch tables.
│ │ │ │ -
unsigned int generateLegacySharpCornerPatches
Generate sharp regular patches at smooth corners (legacy)
│ │ │ │ - │ │ │ │ -
TopologyRefiner::AdaptiveOptions GetRefineAdaptiveOptions() const
Determine adaptive refinement options to match assigned patch options.
│ │ │ │ -
unsigned int maxIsolationLevel
Cap adaptive feature isolation to the given level (max. 10)
│ │ │ │ - │ │ │ │ -
unsigned int generateFVarLegacyLinearPatches
Generate all linear face-varying patches (legacy)
│ │ │ │ -
void SetPatchPrecision()
Set precision of vertex patches.
│ │ │ │ -
unsigned int fvarPatchPrecisionDouble
Generate double-precision stencils for face-varying patches.
│ │ │ │ -
void SetMaxIsolationLevel(unsigned int level)
Set maximum isolation level.
│ │ │ │ - │ │ │ │ -
int const * fvarChannelIndices
List containing the indices of the channels selected for the factory.
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
unsigned int generateVaryingLocalPoints
Generate local points with varying patches.
│ │ │ │ -
unsigned int includeFVarBaseLevelIndices
Include base level in face-varying patch point indices (Uniform mode only)
│ │ │ │ -
unsigned int generateAllLevels
Generate levels from 'firstLevel' to 'maxLevel' (Uniform mode only)
│ │ │ │ -
unsigned int patchPrecisionDouble
Generate double-precision stencils for vertex patches.
│ │ │ │ -
unsigned int generateFVarTables
Generate face-varying patch tables.
│ │ │ │ -
unsigned int includeBaseLevelIndices
Include base level in patch point indices (Uniform mode only)
│ │ │ │ -
void SetFVarPatchPrecision()
Set precision of face-varying patches.
│ │ │ │ -
int numFVarChannels
Number of channel indices and interpolation modes passed.
│ │ │ │ -
unsigned int triangulateQuads
Triangulate 'QUADS' primitives (Uniform mode only)
│ │ │ │ -
EndCapType
Choice for approximating irregular patches (end-caps)
│ │ │ │ -
@ ENDCAP_LEGACY_GREGORY
legacy option for 2.x style Gregory patches (Catmark only)
│ │ │ │ -
@ ENDCAP_GREGORY_BASIS
use Gregory patches (highest quality, recommended default)
│ │ │ │ - │ │ │ │ -
@ ENDCAP_BILINEAR_BASIS
use linear patches (simple quads or tris)
│ │ │ │ -
@ ENDCAP_BSPLINE_BASIS
use BSpline-like patches (same patch type as regular)
│ │ │ │ - │ │ │ │ -
Obsolete internal struct not intended for public use – due to be deprecated.
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
Stores topology data for a specified set of refinement options.
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
std::vector< PatchParam > PatchParamTable
Definition patchParam.h:243
│ │ │ │ + │ │ │ │ + │ │ │ │ +
Vtr::Array< PatchParam > PatchParamArray
Definition patchParam.h:245
│ │ │ │ +
std::vector< PatchArray > PatchArrayVector
Definition types.h:132
│ │ │ │ + │ │ │ │ +
An quadtree-based map connecting coarse faces to their sub-patches.
Definition patchMap.h:49
│ │ │ │ + │ │ │ │ +
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ +
ConstIndexArray GetPatchArrayVaryingVertices(int array) const
Returns the varying vertex indices for the patches in array.
│ │ │ │ + │ │ │ │ +
PatchVertsTable const & GetPatchControlVerticesTable() const
Get the table of patch control vertices.
Definition patchTable.h:378
│ │ │ │ +
void ComputeLocalPointValuesFaceVarying(T const *src, T *dst, int channel=0) const
Updates local point face-varying values.
Definition patchTable.h:844
│ │ │ │ +
ConstIndexArray GetVaryingVertices() const
Returns an array of varying vertex indices for the patches.
│ │ │ │ +
void ComputeLocalPointValuesVarying(T const *src, T *dst) const
Updates local point varying values.
Definition patchTable.h:835
│ │ │ │ +
ConstIndexArray GetPatchVaryingVertices(PatchHandle const &handle) const
Returns the varying vertex indices for a given patch.
│ │ │ │ +
bool IsFeatureAdaptive() const
True if the patches are of feature adaptive types.
│ │ │ │ +
int GetMaxValence() const
Returns max vertex valence.
Definition patchTable.h:92
│ │ │ │ +
StencilTableReal< REAL > const * GetLocalPointStencilTable() const
Returns the stencil table to compute local point vertex values.
│ │ │ │ +
StencilTable const * GetLocalPointStencilTable() const
Returns the stencil table to compute local point vertex values.
Definition patchTable.h:778
│ │ │ │ +
PatchParamArray getPatchParams(int arrayIndex)
│ │ │ │ +
ConstIndexArray GetPatchArrayFVarValues(int array, int channel=0) const
Returns the value indices for the patches in array in channel.
│ │ │ │ +
std::vector< float > const & GetSharpnessValues() const
Returns sharpness values table.
Definition patchTable.h:387
│ │ │ │ + │ │ │ │ +
PatchParam GetPatchFVarPatchParam(int array, int patch, int channel=0) const
Returns the face-varying params for a given patch channel.
│ │ │ │ +
ConstIndexArray GetPatchVaryingVertices(int array, int patch) const
Returns the varying vertex indices for a given patch.
│ │ │ │ +
PatchTable(PatchTable const &src)
Copy constructor.
│ │ │ │ +
int GetNumPatchArrays() const
Returns the number of patch arrays in the table.
│ │ │ │ +
ConstIndexArray GetPatchVertices(PatchHandle const &handle) const
Returns the control vertex indices for the patch identified by handle.
│ │ │ │ + │ │ │ │ +
bool LocalPointFaceVaryingStencilPrecisionMatchesType() const
Tests if the precision of the stencil table to compute local point face-varying values matches the gi...
│ │ │ │ +
PatchParamTable const & GetPatchParamTable() const
Returns the PatchParamTable (PatchParams order matches patch array sorting)
Definition patchTable.h:381
│ │ │ │ +
VertexValenceTable const & GetVertexValenceTable() const
Returns the 'VertexValences' table (vertex neighborhoods table)
Definition patchTable.h:267
│ │ │ │ +
StencilTable const * GetLocalPointFaceVaryingStencilTable(int channel=0) const
Returns the stencil table to compute local point face-varying values.
Definition patchTable.h:789
│ │ │ │ +
int GetNumControlVertices(int array) const
Returns the number of control vertices in array.
│ │ │ │ + │ │ │ │ +
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...
│ │ │ │ +
ConstQuadOffsetsArray GetPatchQuadOffsets(PatchHandle const &handle) const
Returns the 'QuadOffsets' for the Gregory patch identified by handle.
│ │ │ │ +
PatchDescriptor GetFVarPatchDescriptorIrregular(int channel=0) const
Returns the irregular patch descriptor for channel.
│ │ │ │ +
float GetSingleCreasePatchSharpnessValue(int array, int patch) const
Returns the crease sharpness for the patch in array if it is a single-crease patch,...
│ │ │ │ + │ │ │ │ +
void ComputeLocalPointValues(T const *src, T *dst) const
Updates local point vertex values.
Definition patchTable.h:826
│ │ │ │ +
float GetSingleCreasePatchSharpnessValue(PatchHandle const &handle) const
Returns the crease sharpness for the patch identified by handle if it is a single-crease patch,...
│ │ │ │ +
PatchParam GetPatchParam(int array, int patch) const
Returns the PatchParam for patch in array.
│ │ │ │ +
ConstIndexArray GetPatchFVarValues(int array, int patch, int channel=0) const
Returns the value indices for a given patch in channel.
│ │ │ │ +
PatchDescriptor GetFVarPatchDescriptorRegular(int channel=0) const
Returns the regular patch descriptor for channel.
│ │ │ │ +
PatchDescriptor GetPatchDescriptor(PatchHandle const &handle) const
Returns the PatchDescriptor for the patch identified by handle.
│ │ │ │ + │ │ │ │ +
QuadOffsetsTable const & GetQuadOffsetsTable() const
Returns the quad-offsets table.
Definition patchTable.h:392
│ │ │ │ +
int GetNumPatches(int array) const
Returns the number of patches in array.
│ │ │ │ +
PatchDescriptor GetVaryingPatchDescriptor() const
Returns the varying patch descriptor.
│ │ │ │ +
ConstIndexArray GetPatchFVarValues(PatchHandle const &handle, int channel=0) const
Returns the value indices for a given patch in channel.
│ │ │ │ +
ConstPatchParamArray const GetPatchParams(int array) const
Returns the PatchParams for the patches in array.
│ │ │ │ +
int GetNumControlVerticesTotal() const
Returns the total number of control vertex indices in the table.
Definition patchTable.h:84
│ │ │ │ +
int GetNumFVarChannels() const
Returns the number of face-varying channels.
│ │ │ │ +
ConstPatchParamArray GetPatchArrayFVarPatchParams(int array, int channel=0) const
Returns the face-varying for a given patch in array in channel.
│ │ │ │ +
Index getPatchIndex(int array, int patch) const
│ │ │ │ +
int GetNumLocalPoints() const
Returns the number of local vertex points.
│ │ │ │ +
bool LocalPointVaryingStencilPrecisionMatchesType() const
Tests if the precision of the stencil table to compute local point varying values matches the given f...
│ │ │ │ +
ConstIndexArray GetPatchArrayVertices(int array) const
Returns the control vertex indices for the patches in array.
│ │ │ │ +
int GetNumPtexFaces() const
Returns the total number of ptex faces in the mesh.
Definition patchTable.h:95
│ │ │ │ +
ConstIndexArray GetFVarValues(int channel=0) const
Returns an array of value indices for the patches in channel.
│ │ │ │ +
Vtr::ConstArray< unsigned int > ConstQuadOffsetsArray
Accessors for the gregory patch evaluation buffers. These methods will be deprecated.
Definition patchTable.h:259
│ │ │ │ +
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...
│ │ │ │ +
StencilTableReal< REAL > const * GetLocalPointFaceVaryingStencilTable(int channel=0) const
Returns the stencil table to compute local point face-varying values.
│ │ │ │ +
int GetNumPatchesTotal() const
Returns the total number of patches stored in the table.
│ │ │ │ +
PatchParam GetPatchParam(PatchHandle const &handle) const
Returns a PatchParam for the patch identified by handle.
│ │ │ │ + │ │ │ │ +
Sdc::Options::FVarLinearInterpolation GetFVarChannelLinearInterpolation(int channel=0) const
Deprecated.
│ │ │ │ +
std::vector< Index > const & GetSharpnessIndexTable() const
Returns a sharpness index table for each patch (if exists)
Definition patchTable.h:384
│ │ │ │ +
PatchDescriptor GetPatchArrayDescriptor(int array) const
Returns the PatchDescriptor for the patches in array.
│ │ │ │ + │ │ │ │ +
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 ...
│ │ │ │ +
StencilTable const * GetLocalPointVaryingStencilTable() const
Returns the stencil table to compute local point varying values.
Definition patchTable.h:783
│ │ │ │ +
std::vector< unsigned int > QuadOffsetsTable
Definition patchTable.h:389
│ │ │ │ +
ConstIndexArray GetPatchVertices(int array, int patch) const
Returns the control vertex indices for patch in array.
│ │ │ │ +
PatchParam GetPatchFVarPatchParam(PatchHandle const &handle, int channel=0) const
Returns the value indices for a given patch in channel.
│ │ │ │ +
int GetFVarValueStride(int channel=0) const
Returns the stride between patches in the value index array of channel.
│ │ │ │ +
ConstPatchParamArray GetFVarPatchParams(int channel=0) const
Returns an array of face-varying patch param for channel.
│ │ │ │ +
PatchDescriptor GetFVarPatchDescriptor(int channel=0) const
Returns the default/irregular patch descriptor for channel.
│ │ │ │ +
int GetNumLocalPointsVarying() const
Returns the number of local varying points.
│ │ │ │ +
bool LocalPointStencilPrecisionMatchesType() const
Tests if the precision of the stencil table to compute local point vertex values matches the given fl...
│ │ │ │ +
StencilTableReal< REAL > const * GetLocalPointVaryingStencilTable() const
Returns the stencil table to compute local point varying values.
│ │ │ │ +
int GetNumLocalPointsFaceVarying(int channel=0) const
Returns the number of local face-varying points for channel.
│ │ │ │ +
Handle that can be used as unique patch identifier within PatchTable.
Definition patchTable.h:60
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
Stencil table class wrapping the template for compatibility.
│ │ │ │ + │ │ │ │ │ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── encoding │ │ │ │ │ @@ -1 +1 @@ │ │ │ │ │ -utf-8 │ │ │ │ │ +us-ascii │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,12 +1,12 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -patchTableFactory.h │ │ │ │ │ +patchTable.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ 2// Copyright 2013 Pixar │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ @@ -24,409 +24,1002 @@ │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ 24 │ │ │ │ │ -25#ifndef OPENSUBDIV3_FAR_PATCH_TABLE_FACTORY_H │ │ │ │ │ -26#define OPENSUBDIV3_FAR_PATCH_TABLE_FACTORY_H │ │ │ │ │ +25#ifndef OPENSUBDIV3_FAR_PATCH_TABLE_H │ │ │ │ │ +26#define OPENSUBDIV3_FAR_PATCH_TABLE_H │ │ │ │ │ 27 │ │ │ │ │ 28#include "../version.h" │ │ │ │ │ 29 │ │ │ │ │ -30#include "../far/topologyRefiner.h" │ │ │ │ │ -31#include "../far/patchTable.h" │ │ │ │ │ -32 │ │ │ │ │ -33namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ -34namespace OPENSUBDIV_VERSION { │ │ │ │ │ +30#include "../far/patchDescriptor.h" │ │ │ │ │ +31#include "../far/patchParam.h" │ │ │ │ │ +32#include "../far/stencilTable.h" │ │ │ │ │ +33 │ │ │ │ │ +34#include "../sdc/options.h" │ │ │ │ │ 35 │ │ │ │ │ -36namespace Far { │ │ │ │ │ +36#include │ │ │ │ │ 37 │ │ │ │ │ -_4_0class _P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y { │ │ │ │ │ -41public: │ │ │ │ │ +38namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ +39namespace OPENSUBDIV_VERSION { │ │ │ │ │ +40 │ │ │ │ │ +41namespace Far { │ │ │ │ │ 42 │ │ │ │ │ -_4_5 struct _O_p_t_i_o_n_s { │ │ │ │ │ -46 │ │ │ │ │ -_5_5 enum _E_n_d_C_a_p_T_y_p_e { │ │ │ │ │ -_5_6 _E_N_D_C_A_P___N_O_N_E = 0, │ │ │ │ │ -_5_7 _E_N_D_C_A_P___B_I_L_I_N_E_A_R___B_A_S_I_S, │ │ │ │ │ -_5_8 _E_N_D_C_A_P___B_S_P_L_I_N_E___B_A_S_I_S, │ │ │ │ │ -_5_9 _E_N_D_C_A_P___G_R_E_G_O_R_Y___B_A_S_I_S, │ │ │ │ │ -60 _E_N_D_C_A_P___L_E_G_A_C_Y___G_R_E_G_O_R_Y │ │ │ │ │ -_6_1 }; │ │ │ │ │ -62 │ │ │ │ │ -_6_3 _O_p_t_i_o_n_s(unsigned int maxIsolation=10) : │ │ │ │ │ -64 _g_e_n_e_r_a_t_e_A_l_l_L_e_v_e_l_s(false), │ │ │ │ │ -65 _i_n_c_l_u_d_e_B_a_s_e_L_e_v_e_l_I_n_d_i_c_e_s(true), │ │ │ │ │ -66 _i_n_c_l_u_d_e_F_V_a_r_B_a_s_e_L_e_v_e_l_I_n_d_i_c_e_s(false), │ │ │ │ │ -67 _t_r_i_a_n_g_u_l_a_t_e_Q_u_a_d_s(false), │ │ │ │ │ -68 _u_s_e_S_i_n_g_l_e_C_r_e_a_s_e_P_a_t_c_h(false), │ │ │ │ │ -69 _u_s_e_I_n_f_S_h_a_r_p_P_a_t_c_h(false), │ │ │ │ │ -70 _m_a_x_I_s_o_l_a_t_i_o_n_L_e_v_e_l(maxIsolation & 0xf), │ │ │ │ │ -71 _e_n_d_C_a_p_T_y_p_e(_E_N_D_C_A_P___G_R_E_G_O_R_Y___B_A_S_I_S), │ │ │ │ │ -72 _s_h_a_r_e_E_n_d_C_a_p_P_a_t_c_h_P_o_i_n_t_s(true), │ │ │ │ │ -73 _g_e_n_e_r_a_t_e_V_a_r_y_i_n_g_T_a_b_l_e_s(true), │ │ │ │ │ -74 _g_e_n_e_r_a_t_e_V_a_r_y_i_n_g_L_o_c_a_l_P_o_i_n_t_s(true), │ │ │ │ │ -75 _g_e_n_e_r_a_t_e_F_V_a_r_T_a_b_l_e_s(false), │ │ │ │ │ -76 _p_a_t_c_h_P_r_e_c_i_s_i_o_n_D_o_u_b_l_e(false), │ │ │ │ │ -77 _f_v_a_r_P_a_t_c_h_P_r_e_c_i_s_i_o_n_D_o_u_b_l_e(false), │ │ │ │ │ -78 _g_e_n_e_r_a_t_e_F_V_a_r_L_e_g_a_c_y_L_i_n_e_a_r_P_a_t_c_h_e_s(true), │ │ │ │ │ -79 _g_e_n_e_r_a_t_e_L_e_g_a_c_y_S_h_a_r_p_C_o_r_n_e_r_P_a_t_c_h_e_s(true), │ │ │ │ │ -80 _n_u_m_F_V_a_r_C_h_a_n_n_e_l_s(-1), │ │ │ │ │ -81 _f_v_a_r_C_h_a_n_n_e_l_I_n_d_i_c_e_s(0) │ │ │ │ │ -82 { } │ │ │ │ │ -83 │ │ │ │ │ -_8_5 _E_n_d_C_a_p_T_y_p_e _G_e_t_E_n_d_C_a_p_T_y_p_e() const { return (_E_n_d_C_a_p_T_y_p_e)_e_n_d_C_a_p_T_y_p_e; } │ │ │ │ │ -86 │ │ │ │ │ -_8_8 void _S_e_t_E_n_d_C_a_p_T_y_p_e(_E_n_d_C_a_p_T_y_p_e e) { _e_n_d_C_a_p_T_y_p_e = e & 0x7; } │ │ │ │ │ -89 │ │ │ │ │ -_9_1 void _S_e_t_M_a_x_I_s_o_l_a_t_i_o_n_L_e_v_e_l(unsigned int level) { _m_a_x_I_s_o_l_a_t_i_o_n_L_e_v_e_l = level & │ │ │ │ │ -0xf; } │ │ │ │ │ -92 │ │ │ │ │ -_9_4 template void _S_e_t_P_a_t_c_h_P_r_e_c_i_s_i_o_n(); │ │ │ │ │ -95 │ │ │ │ │ -_9_7 template void _S_e_t_F_V_a_r_P_a_t_c_h_P_r_e_c_i_s_i_o_n(); │ │ │ │ │ -98 │ │ │ │ │ -_1_0_0 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_:_:_A_d_a_p_t_i_v_e_O_p_t_i_o_n_s _G_e_t_R_e_f_i_n_e_A_d_a_p_t_i_v_e_O_p_t_i_o_n_s() const { │ │ │ │ │ -101 _T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_:_:_A_d_a_p_t_i_v_e_O_p_t_i_o_n_s adaptiveOptions(_m_a_x_I_s_o_l_a_t_i_o_n_L_e_v_e_l); │ │ │ │ │ -102 │ │ │ │ │ -103 adaptiveOptions._u_s_e_I_n_f_S_h_a_r_p_P_a_t_c_h = _u_s_e_I_n_f_S_h_a_r_p_P_a_t_c_h; │ │ │ │ │ -104 adaptiveOptions._u_s_e_S_i_n_g_l_e_C_r_e_a_s_e_P_a_t_c_h = _u_s_e_S_i_n_g_l_e_C_r_e_a_s_e_P_a_t_c_h; │ │ │ │ │ -105 adaptiveOptions._c_o_n_s_i_d_e_r_F_V_a_r_C_h_a_n_n_e_l_s = _g_e_n_e_r_a_t_e_F_V_a_r_T_a_b_l_e_s && │ │ │ │ │ -106 !_g_e_n_e_r_a_t_e_F_V_a_r_L_e_g_a_c_y_L_i_n_e_a_r_P_a_t_c_h_e_s; │ │ │ │ │ -107 return adaptiveOptions; │ │ │ │ │ -108 } │ │ │ │ │ -109 │ │ │ │ │ -_1_1_0 unsigned int _g_e_n_e_r_a_t_e_A_l_l_L_e_v_e_l_s : 1, │ │ │ │ │ -_1_1_1 _i_n_c_l_u_d_e_B_a_s_e_L_e_v_e_l_I_n_d_i_c_e_s : 1, │ │ │ │ │ -_1_1_2 _i_n_c_l_u_d_e_F_V_a_r_B_a_s_e_L_e_v_e_l_I_n_d_i_c_e_s : 1, │ │ │ │ │ -_1_1_3 _t_r_i_a_n_g_u_l_a_t_e_Q_u_a_d_s : 1, │ │ │ │ │ +_5_5class _P_a_t_c_h_T_a_b_l_e { │ │ │ │ │ +56 │ │ │ │ │ +57public: │ │ │ │ │ +58 │ │ │ │ │ +_6_0 class _P_a_t_c_h_H_a_n_d_l_e { │ │ │ │ │ +61 // XXXX manuelk members will eventually be made private │ │ │ │ │ +62 public: │ │ │ │ │ +63 │ │ │ │ │ +_6_4 friend class _P_a_t_c_h_T_a_b_l_e; │ │ │ │ │ +_6_5 friend class _P_a_t_c_h_M_a_p; │ │ │ │ │ +66 │ │ │ │ │ +_6_7 _I_n_d_e_x _a_r_r_a_y_I_n_d_e_x, // Array index of the patch │ │ │ │ │ +_6_8 _p_a_t_c_h_I_n_d_e_x, // Absolute Index of the patch │ │ │ │ │ +_6_9 _v_e_r_t_I_n_d_e_x; // Relative offset to the first CV of the patch in array │ │ │ │ │ +70 }; │ │ │ │ │ +71 │ │ │ │ │ +72public: │ │ │ │ │ +73 │ │ │ │ │ +_7_5 _P_a_t_c_h_T_a_b_l_e(_P_a_t_c_h_T_a_b_l_e const & src); │ │ │ │ │ +76 │ │ │ │ │ +_7_8 _~_P_a_t_c_h_T_a_b_l_e(); │ │ │ │ │ +79 │ │ │ │ │ +_8_1 bool _I_s_F_e_a_t_u_r_e_A_d_a_p_t_i_v_e() const; │ │ │ │ │ +82 │ │ │ │ │ +_8_4 int _G_e_t_N_u_m_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s_T_o_t_a_l() const { │ │ │ │ │ +85 return (int)_patchVerts.size(); │ │ │ │ │ +86 } │ │ │ │ │ +87 │ │ │ │ │ +_8_9 int _G_e_t_N_u_m_P_a_t_c_h_e_s_T_o_t_a_l() const; │ │ │ │ │ +90 │ │ │ │ │ +_9_2 int _G_e_t_M_a_x_V_a_l_e_n_c_e() const { return _maxValence; } │ │ │ │ │ +93 │ │ │ │ │ +_9_5 int _G_e_t_N_u_m_P_t_e_x_F_a_c_e_s() const { return _numPtexFaces; } │ │ │ │ │ +96 │ │ │ │ │ +97 │ │ │ │ │ +99 │ │ │ │ │ +105 │ │ │ │ │ +_1_0_7 _P_a_t_c_h_D_e_s_c_r_i_p_t_o_r _G_e_t_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r(_P_a_t_c_h_H_a_n_d_l_e const & handle) const; │ │ │ │ │ +108 │ │ │ │ │ +_1_1_0 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y _G_e_t_P_a_t_c_h_V_e_r_t_i_c_e_s(_P_a_t_c_h_H_a_n_d_l_e const & handle) const; │ │ │ │ │ +111 │ │ │ │ │ +_1_1_3 _P_a_t_c_h_P_a_r_a_m _G_e_t_P_a_t_c_h_P_a_r_a_m(_P_a_t_c_h_H_a_n_d_l_e const & handle) const; │ │ │ │ │ 114 │ │ │ │ │ -_1_1_5 _u_s_e_S_i_n_g_l_e_C_r_e_a_s_e_P_a_t_c_h : 1, │ │ │ │ │ -_1_1_6 _u_s_e_I_n_f_S_h_a_r_p_P_a_t_c_h : 1, │ │ │ │ │ -_1_1_7 _m_a_x_I_s_o_l_a_t_i_o_n_L_e_v_e_l : 4, │ │ │ │ │ -118 │ │ │ │ │ -119 // end-capping │ │ │ │ │ -_1_2_0 _e_n_d_C_a_p_T_y_p_e : 3, │ │ │ │ │ -_1_2_1 _s_h_a_r_e_E_n_d_C_a_p_P_a_t_c_h_P_o_i_n_t_s : 1, │ │ │ │ │ -123 │ │ │ │ │ -124 // varying │ │ │ │ │ -_1_2_5 _g_e_n_e_r_a_t_e_V_a_r_y_i_n_g_T_a_b_l_e_s : 1, │ │ │ │ │ -_1_2_6 _g_e_n_e_r_a_t_e_V_a_r_y_i_n_g_L_o_c_a_l_P_o_i_n_t_s : 1, │ │ │ │ │ -127 │ │ │ │ │ -128 // face-varying │ │ │ │ │ -_1_2_9 _g_e_n_e_r_a_t_e_F_V_a_r_T_a_b_l_e_s : 1, │ │ │ │ │ +_1_1_6 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y _G_e_t_P_a_t_c_h_V_e_r_t_i_c_e_s(int array, int patch) const; │ │ │ │ │ +117 │ │ │ │ │ +_1_1_9 _P_a_t_c_h_P_a_r_a_m _G_e_t_P_a_t_c_h_P_a_r_a_m(int array, int patch) const; │ │ │ │ │ +121 │ │ │ │ │ +122 │ │ │ │ │ +124 │ │ │ │ │ 130 │ │ │ │ │ -131 // precision │ │ │ │ │ -_1_3_2 _p_a_t_c_h_P_r_e_c_i_s_i_o_n_D_o_u_b_l_e : 1, │ │ │ │ │ -_1_3_3 _f_v_a_r_P_a_t_c_h_P_r_e_c_i_s_i_o_n_D_o_u_b_l_e : 1, │ │ │ │ │ -134 │ │ │ │ │ -135 // legacy behaviors (default to true) │ │ │ │ │ -_1_3_6 _g_e_n_e_r_a_t_e_F_V_a_r_L_e_g_a_c_y_L_i_n_e_a_r_P_a_t_c_h_e_s : 1, │ │ │ │ │ -_1_3_7 _g_e_n_e_r_a_t_e_L_e_g_a_c_y_S_h_a_r_p_C_o_r_n_e_r_P_a_t_c_h_e_s : 1; │ │ │ │ │ -138 │ │ │ │ │ -_1_3_9 int _n_u_m_F_V_a_r_C_h_a_n_n_e_l_s; │ │ │ │ │ -_1_4_0 int const * _f_v_a_r_C_h_a_n_n_e_l_I_n_d_i_c_e_s; │ │ │ │ │ -141 }; │ │ │ │ │ +_1_3_2 int _G_e_t_N_u_m_P_a_t_c_h_A_r_r_a_y_s() const; │ │ │ │ │ +133 │ │ │ │ │ +_1_3_5 int _G_e_t_N_u_m_P_a_t_c_h_e_s(int array) const; │ │ │ │ │ +136 │ │ │ │ │ +_1_3_8 int _G_e_t_N_u_m_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s(int array) const; │ │ │ │ │ +139 │ │ │ │ │ +_1_4_1 _P_a_t_c_h_D_e_s_c_r_i_p_t_o_r _G_e_t_P_a_t_c_h_A_r_r_a_y_D_e_s_c_r_i_p_t_o_r(int array) const; │ │ │ │ │ 142 │ │ │ │ │ -_1_7_5 static _P_a_t_c_h_T_a_b_l_e * _C_r_e_a_t_e(_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r const & refiner, │ │ │ │ │ -176 _O_p_t_i_o_n_s options = _O_p_t_i_o_n_s(), │ │ │ │ │ -177 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y selectedFaces = _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y()); │ │ │ │ │ -178 │ │ │ │ │ -179public: │ │ │ │ │ -180 // PatchFaceTag │ │ │ │ │ -181 // │ │ │ │ │ -182 // This simple struct was previously used within the factory to take │ │ │ │ │ -inventory of │ │ │ │ │ -183 // various kinds of patches to fully allocate buffers prior to populating │ │ │ │ │ -them. It │ │ │ │ │ -184 // was not intended to be exposed as part of the public interface. │ │ │ │ │ -185 // │ │ │ │ │ -186 // It is no longer used internally and is being kept here to respect │ │ │ │ │ -preservation │ │ │ │ │ -187 // of the public interface, but it will be deprecated at the earliest │ │ │ │ │ -opportunity. │ │ │ │ │ -188 // │ │ │ │ │ -191 // │ │ │ │ │ -_1_9_2 struct _P_a_t_c_h_F_a_c_e_T_a_g { │ │ │ │ │ -193 public: │ │ │ │ │ -_1_9_4 unsigned int ___h_a_s_P_a_t_c_h : 1; │ │ │ │ │ -_1_9_5 unsigned int ___i_s_R_e_g_u_l_a_r : 1; │ │ │ │ │ -_1_9_6 unsigned int ___t_r_a_n_s_i_t_i_o_n_M_a_s_k : 4; │ │ │ │ │ -_1_9_7 unsigned int ___b_o_u_n_d_a_r_y_M_a_s_k : 4; │ │ │ │ │ -_1_9_8 unsigned int ___b_o_u_n_d_a_r_y_I_n_d_e_x : 2; │ │ │ │ │ -_1_9_9 unsigned int ___b_o_u_n_d_a_r_y_C_o_u_n_t : 3; │ │ │ │ │ -_2_0_0 unsigned int ___h_a_s_B_o_u_n_d_a_r_y_E_d_g_e : 3; │ │ │ │ │ -_2_0_1 unsigned int ___i_s_S_i_n_g_l_e_C_r_e_a_s_e : 1; │ │ │ │ │ -202 │ │ │ │ │ -_2_0_3 void _c_l_e_a_r(); │ │ │ │ │ -_2_0_4 void _a_s_s_i_g_n_B_o_u_n_d_a_r_y_P_r_o_p_e_r_t_i_e_s_F_r_o_m_E_d_g_e_M_a_s_k(int boundaryEdgeMask); │ │ │ │ │ -_2_0_5 void _a_s_s_i_g_n_B_o_u_n_d_a_r_y_P_r_o_p_e_r_t_i_e_s_F_r_o_m_V_e_r_t_e_x_M_a_s_k(int boundaryVertexMask); │ │ │ │ │ -_2_0_6 void _a_s_s_i_g_n_T_r_a_n_s_i_t_i_o_n_P_r_o_p_e_r_t_i_e_s_F_r_o_m_E_d_g_e_M_a_s_k(int boundaryVertexMask); │ │ │ │ │ -207 }; │ │ │ │ │ -_2_0_8 typedef std::vector _P_a_t_c_h_T_a_g_V_e_c_t_o_r; │ │ │ │ │ -209}; │ │ │ │ │ -210 │ │ │ │ │ -211 │ │ │ │ │ -_2_1_2template <> inline void PatchTableFactory::Options::SetPatchPrecision │ │ │ │ │ -() { │ │ │ │ │ -213 _p_a_t_c_h_P_r_e_c_i_s_i_o_n_D_o_u_b_l_e = false; │ │ │ │ │ -214} │ │ │ │ │ -_2_1_5template <> inline void PatchTableFactory::Options:: │ │ │ │ │ -SetFVarPatchPrecision() { │ │ │ │ │ -216 fvarPatchPrecisionDouble = false; │ │ │ │ │ -217} │ │ │ │ │ +_1_4_4 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y _G_e_t_P_a_t_c_h_A_r_r_a_y_V_e_r_t_i_c_e_s(int array) const; │ │ │ │ │ +145 │ │ │ │ │ +_1_4_7 _C_o_n_s_t_P_a_t_c_h_P_a_r_a_m_A_r_r_a_y const _G_e_t_P_a_t_c_h_P_a_r_a_m_s(int array) const; │ │ │ │ │ +149 │ │ │ │ │ +150 │ │ │ │ │ +152 │ │ │ │ │ +159 │ │ │ │ │ +_1_6_1 int _G_e_t_N_u_m_L_o_c_a_l_P_o_i_n_t_s() const; │ │ │ │ │ +162 │ │ │ │ │ +164 _S_t_e_n_c_i_l_T_a_b_l_e const *_G_e_t_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e() const; │ │ │ │ │ +165 │ │ │ │ │ +167 template │ │ │ │ │ +_1_6_8 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const *_G_e_t_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e() const; │ │ │ │ │ +169 │ │ │ │ │ +_1_7_2 template bool _L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_P_r_e_c_i_s_i_o_n_M_a_t_c_h_e_s_T_y_p_e() │ │ │ │ │ +const; │ │ │ │ │ +173 │ │ │ │ │ +186 template void │ │ │ │ │ +187 _C_o_m_p_u_t_e_L_o_c_a_l_P_o_i_n_t_V_a_l_u_e_s(T const *src, T *dst) const; │ │ │ │ │ +188 │ │ │ │ │ +189 │ │ │ │ │ +_1_9_1 int _G_e_t_N_u_m_L_o_c_a_l_P_o_i_n_t_s_V_a_r_y_i_n_g() const; │ │ │ │ │ +192 │ │ │ │ │ +194 _S_t_e_n_c_i_l_T_a_b_l_e const *_G_e_t_L_o_c_a_l_P_o_i_n_t_V_a_r_y_i_n_g_S_t_e_n_c_i_l_T_a_b_l_e() const; │ │ │ │ │ +195 │ │ │ │ │ +197 template │ │ │ │ │ +_1_9_8 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const *_G_e_t_L_o_c_a_l_P_o_i_n_t_V_a_r_y_i_n_g_S_t_e_n_c_i_l_T_a_b_l_e() const; │ │ │ │ │ +199 │ │ │ │ │ +_2_0_2 template bool _L_o_c_a_l_P_o_i_n_t_V_a_r_y_i_n_g_S_t_e_n_c_i_l_P_r_e_c_i_s_i_o_n_M_a_t_c_h_e_s_T_y_p_e │ │ │ │ │ +() const; │ │ │ │ │ +203 │ │ │ │ │ +216 template void │ │ │ │ │ +217 _C_o_m_p_u_t_e_L_o_c_a_l_P_o_i_n_t_V_a_l_u_e_s_V_a_r_y_i_n_g(T const *src, T *dst) const; │ │ │ │ │ 218 │ │ │ │ │ -219template <> inline void PatchTableFactory::Options:: │ │ │ │ │ -SetPatchPrecision() { │ │ │ │ │ -220 patchPrecisionDouble = true; │ │ │ │ │ -221} │ │ │ │ │ -222template <> inline void PatchTableFactory::Options:: │ │ │ │ │ -SetFVarPatchPrecision() { │ │ │ │ │ -223 fvarPatchPrecisionDouble = true; │ │ │ │ │ -224} │ │ │ │ │ +219 │ │ │ │ │ +_2_2_1 int _G_e_t_N_u_m_L_o_c_a_l_P_o_i_n_t_s_F_a_c_e_V_a_r_y_i_n_g(int channel = 0) const; │ │ │ │ │ +222 │ │ │ │ │ +224 _S_t_e_n_c_i_l_T_a_b_l_e const *_G_e_t_L_o_c_a_l_P_o_i_n_t_F_a_c_e_V_a_r_y_i_n_g_S_t_e_n_c_i_l_T_a_b_l_e(int channel = 0) │ │ │ │ │ +const; │ │ │ │ │ 225 │ │ │ │ │ -226 │ │ │ │ │ -227} // end namespace Far │ │ │ │ │ -228 │ │ │ │ │ -229} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ -230using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -231 │ │ │ │ │ -232} // end namespace OpenSubdiv │ │ │ │ │ +227 template │ │ │ │ │ +_2_2_8 _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * _G_e_t_L_o_c_a_l_P_o_i_n_t_F_a_c_e_V_a_r_y_i_n_g_S_t_e_n_c_i_l_T_a_b_l_e(int │ │ │ │ │ +channel = 0) const; │ │ │ │ │ +229 │ │ │ │ │ +_2_3_2 template bool │ │ │ │ │ +_L_o_c_a_l_P_o_i_n_t_F_a_c_e_V_a_r_y_i_n_g_S_t_e_n_c_i_l_P_r_e_c_i_s_i_o_n_M_a_t_c_h_e_s_T_y_p_e() const; │ │ │ │ │ 233 │ │ │ │ │ -234 │ │ │ │ │ -235#endif /* OPENSUBDIV3_FAR_PATCH_TABLE_FACTORY_H */ │ │ │ │ │ +248 template void │ │ │ │ │ +249 _C_o_m_p_u_t_e_L_o_c_a_l_P_o_i_n_t_V_a_l_u_e_s_F_a_c_e_V_a_r_y_i_n_g(T const *src, T *dst, int channel = 0) │ │ │ │ │ +const; │ │ │ │ │ +251 │ │ │ │ │ +252 │ │ │ │ │ +254 │ │ │ │ │ +255 │ │ │ │ │ +_2_5_9 typedef _V_t_r_:_:_C_o_n_s_t_A_r_r_a_y_<_u_n_s_i_g_n_e_d_ _i_n_t_> _C_o_n_s_t_Q_u_a_d_O_f_f_s_e_t_s_A_r_r_a_y; │ │ │ │ │ +260 │ │ │ │ │ +_2_6_2 _C_o_n_s_t_Q_u_a_d_O_f_f_s_e_t_s_A_r_r_a_y _G_e_t_P_a_t_c_h_Q_u_a_d_O_f_f_s_e_t_s(_P_a_t_c_h_H_a_n_d_l_e const & handle) │ │ │ │ │ +const; │ │ │ │ │ +263 │ │ │ │ │ +_2_6_4 typedef std::vector _V_e_r_t_e_x_V_a_l_e_n_c_e_T_a_b_l_e; │ │ │ │ │ +265 │ │ │ │ │ +_2_6_7 _V_e_r_t_e_x_V_a_l_e_n_c_e_T_a_b_l_e const & _G_e_t_V_e_r_t_e_x_V_a_l_e_n_c_e_T_a_b_l_e() const { │ │ │ │ │ +268 return _vertexValenceTable; │ │ │ │ │ +269 } │ │ │ │ │ +271 │ │ │ │ │ +272 │ │ │ │ │ +274 │ │ │ │ │ +280 │ │ │ │ │ +_2_8_3 float _G_e_t_S_i_n_g_l_e_C_r_e_a_s_e_P_a_t_c_h_S_h_a_r_p_n_e_s_s_V_a_l_u_e(_P_a_t_c_h_H_a_n_d_l_e const & handle) const; │ │ │ │ │ +284 │ │ │ │ │ +_2_8_7 float _G_e_t_S_i_n_g_l_e_C_r_e_a_s_e_P_a_t_c_h_S_h_a_r_p_n_e_s_s_V_a_l_u_e(int array, int patch) const; │ │ │ │ │ +289 │ │ │ │ │ +290 │ │ │ │ │ +292 │ │ │ │ │ +298 │ │ │ │ │ +_3_0_0 _P_a_t_c_h_D_e_s_c_r_i_p_t_o_r _G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r() const; │ │ │ │ │ +301 │ │ │ │ │ +_3_0_3 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y _G_e_t_P_a_t_c_h_V_a_r_y_i_n_g_V_e_r_t_i_c_e_s(_P_a_t_c_h_H_a_n_d_l_e const & handle) const; │ │ │ │ │ +304 │ │ │ │ │ +_3_0_6 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y _G_e_t_P_a_t_c_h_V_a_r_y_i_n_g_V_e_r_t_i_c_e_s(int array, int patch) const; │ │ │ │ │ +307 │ │ │ │ │ +_3_0_9 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y _G_e_t_P_a_t_c_h_A_r_r_a_y_V_a_r_y_i_n_g_V_e_r_t_i_c_e_s(int array) const; │ │ │ │ │ +310 │ │ │ │ │ +_3_1_2 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y _G_e_t_V_a_r_y_i_n_g_V_e_r_t_i_c_e_s() const; │ │ │ │ │ +314 │ │ │ │ │ +315 │ │ │ │ │ +317 │ │ │ │ │ +323 │ │ │ │ │ +_3_2_5 int _G_e_t_N_u_m_F_V_a_r_C_h_a_n_n_e_l_s() const; │ │ │ │ │ +326 │ │ │ │ │ +_3_2_8 _P_a_t_c_h_D_e_s_c_r_i_p_t_o_r _G_e_t_F_V_a_r_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_R_e_g_u_l_a_r(int channel = 0) const; │ │ │ │ │ +329 │ │ │ │ │ +_3_3_1 _P_a_t_c_h_D_e_s_c_r_i_p_t_o_r _G_e_t_F_V_a_r_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_I_r_r_e_g_u_l_a_r(int channel = 0) const; │ │ │ │ │ +332 │ │ │ │ │ +_3_3_4 _P_a_t_c_h_D_e_s_c_r_i_p_t_o_r _G_e_t_F_V_a_r_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r(int channel = 0) const; │ │ │ │ │ +335 │ │ │ │ │ +_3_3_7 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y _G_e_t_P_a_t_c_h_F_V_a_r_V_a_l_u_e_s(_P_a_t_c_h_H_a_n_d_l_e const & handle, int channel │ │ │ │ │ += 0) const; │ │ │ │ │ +338 │ │ │ │ │ +_3_4_0 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y _G_e_t_P_a_t_c_h_F_V_a_r_V_a_l_u_e_s(int array, int patch, int channel = 0) │ │ │ │ │ +const; │ │ │ │ │ +341 │ │ │ │ │ +_3_4_3 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y _G_e_t_P_a_t_c_h_A_r_r_a_y_F_V_a_r_V_a_l_u_e_s(int array, int channel = 0) const; │ │ │ │ │ +344 │ │ │ │ │ +_3_4_6 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y _G_e_t_F_V_a_r_V_a_l_u_e_s(int channel = 0) const; │ │ │ │ │ +347 │ │ │ │ │ +_3_4_9 int _G_e_t_F_V_a_r_V_a_l_u_e_S_t_r_i_d_e(int channel = 0) const; │ │ │ │ │ +350 │ │ │ │ │ +_3_5_2 _P_a_t_c_h_P_a_r_a_m _G_e_t_P_a_t_c_h_F_V_a_r_P_a_t_c_h_P_a_r_a_m(_P_a_t_c_h_H_a_n_d_l_e const & handle, int channel = │ │ │ │ │ +0) const; │ │ │ │ │ +353 │ │ │ │ │ +_3_5_5 _P_a_t_c_h_P_a_r_a_m _G_e_t_P_a_t_c_h_F_V_a_r_P_a_t_c_h_P_a_r_a_m(int array, int patch, int channel = 0) │ │ │ │ │ +const; │ │ │ │ │ +356 │ │ │ │ │ +_3_5_8 _C_o_n_s_t_P_a_t_c_h_P_a_r_a_m_A_r_r_a_y _G_e_t_P_a_t_c_h_A_r_r_a_y_F_V_a_r_P_a_t_c_h_P_a_r_a_m_s(int array, int channel = │ │ │ │ │ +0) const; │ │ │ │ │ +359 │ │ │ │ │ +_3_6_1 _C_o_n_s_t_P_a_t_c_h_P_a_r_a_m_A_r_r_a_y _G_e_t_F_V_a_r_P_a_t_c_h_P_a_r_a_m_s(int channel = 0) const; │ │ │ │ │ +362 │ │ │ │ │ +_3_6_4 _S_d_c_:_:_O_p_t_i_o_n_s_:_:_F_V_a_r_L_i_n_e_a_r_I_n_t_e_r_p_o_l_a_t_i_o_n _G_e_t_F_V_a_r_C_h_a_n_n_e_l_L_i_n_e_a_r_I_n_t_e_r_p_o_l_a_t_i_o_n(int │ │ │ │ │ +channel = 0) const; │ │ │ │ │ +366 │ │ │ │ │ +367 │ │ │ │ │ +369 │ │ │ │ │ +374 │ │ │ │ │ +_3_7_5 typedef std::vector _P_a_t_c_h_V_e_r_t_s_T_a_b_l_e; │ │ │ │ │ +376 │ │ │ │ │ +_3_7_8 _P_a_t_c_h_V_e_r_t_s_T_a_b_l_e const & _G_e_t_P_a_t_c_h_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s_T_a_b_l_e() const { return │ │ │ │ │ +_patchVerts; } │ │ │ │ │ +379 │ │ │ │ │ +_3_8_1 _P_a_t_c_h_P_a_r_a_m_T_a_b_l_e const & _G_e_t_P_a_t_c_h_P_a_r_a_m_T_a_b_l_e() const { return _paramTable; } │ │ │ │ │ +382 │ │ │ │ │ +_3_8_4 std::vector const &_G_e_t_S_h_a_r_p_n_e_s_s_I_n_d_e_x_T_a_b_l_e() const { return │ │ │ │ │ +_sharpnessIndices; } │ │ │ │ │ +385 │ │ │ │ │ +_3_8_7 std::vector const &_G_e_t_S_h_a_r_p_n_e_s_s_V_a_l_u_e_s() const { return │ │ │ │ │ +_sharpnessValues; } │ │ │ │ │ +388 │ │ │ │ │ +_3_8_9 typedef std::vector _Q_u_a_d_O_f_f_s_e_t_s_T_a_b_l_e; │ │ │ │ │ +390 │ │ │ │ │ +_3_9_2 _Q_u_a_d_O_f_f_s_e_t_s_T_a_b_l_e const & _G_e_t_Q_u_a_d_O_f_f_s_e_t_s_T_a_b_l_e() const { │ │ │ │ │ +393 return _quadOffsetsTable; │ │ │ │ │ +394 } │ │ │ │ │ +396 │ │ │ │ │ +_3_9_8 void _p_r_i_n_t() const; │ │ │ │ │ +399 │ │ │ │ │ +400public: │ │ │ │ │ +401 │ │ │ │ │ +403 │ │ │ │ │ +405 │ │ │ │ │ +428 template │ │ │ │ │ +_4_2_9 void _E_v_a_l_u_a_t_e_B_a_s_i_s(_P_a_t_c_h_H_a_n_d_l_e const & handle, REAL u, REAL v, │ │ │ │ │ +430 REAL wP[], REAL wDu[] = 0, REAL wDv[] = 0, │ │ │ │ │ +431 REAL wDuu[] = 0, REAL wDuv[] = 0, REAL wDvv[] = 0) const; │ │ │ │ │ +432 │ │ │ │ │ +435 void _E_v_a_l_u_a_t_e_B_a_s_i_s(_P_a_t_c_h_H_a_n_d_l_e const & handle, float u, float v, │ │ │ │ │ +436 float wP[], float wDu[] = 0, float wDv[] = 0, │ │ │ │ │ +437 float wDuu[] = 0, float wDuv[] = 0, float wDvv[] = 0) const; │ │ │ │ │ +438 │ │ │ │ │ +441 void _E_v_a_l_u_a_t_e_B_a_s_i_s(_P_a_t_c_h_H_a_n_d_l_e const & handle, double u, double v, │ │ │ │ │ +442 double wP[], double wDu[] = 0, double wDv[] = 0, │ │ │ │ │ +443 double wDuu[] = 0, double wDuv[] = 0, double wDvv[] = 0) const; │ │ │ │ │ +444 │ │ │ │ │ +467 template │ │ │ │ │ +_4_6_8 void _E_v_a_l_u_a_t_e_B_a_s_i_s_V_a_r_y_i_n_g(_P_a_t_c_h_H_a_n_d_l_e const & handle, REAL u, REAL v, │ │ │ │ │ +469 REAL wP[], REAL wDu[] = 0, REAL wDv[] = 0, │ │ │ │ │ +470 REAL wDuu[] = 0, REAL wDuv[] = 0, REAL wDvv[] = 0) const; │ │ │ │ │ +471 │ │ │ │ │ +474 void _E_v_a_l_u_a_t_e_B_a_s_i_s_V_a_r_y_i_n_g(_P_a_t_c_h_H_a_n_d_l_e const & handle, float u, float v, │ │ │ │ │ +475 float wP[], float wDu[] = 0, float wDv[] = 0, │ │ │ │ │ +476 float wDuu[] = 0, float wDuv[] = 0, float wDvv[] = 0) const; │ │ │ │ │ +477 │ │ │ │ │ +480 void _E_v_a_l_u_a_t_e_B_a_s_i_s_V_a_r_y_i_n_g(_P_a_t_c_h_H_a_n_d_l_e const & handle, double u, double v, │ │ │ │ │ +481 double wP[], double wDu[] = 0, double wDv[] = 0, │ │ │ │ │ +482 double wDuu[] = 0, double wDuv[] = 0, double wDvv[] = 0) const; │ │ │ │ │ +483 │ │ │ │ │ +508 template │ │ │ │ │ +_5_0_9 void _E_v_a_l_u_a_t_e_B_a_s_i_s_F_a_c_e_V_a_r_y_i_n_g(_P_a_t_c_h_H_a_n_d_l_e const & handle, REAL u, REAL v, │ │ │ │ │ +510 REAL wP[], REAL wDu[] = 0, REAL wDv[] = 0, │ │ │ │ │ +511 REAL wDuu[] = 0, REAL wDuv[] = 0, REAL wDvv[] = 0, │ │ │ │ │ +512 int channel = 0) const; │ │ │ │ │ +513 │ │ │ │ │ +516 void _E_v_a_l_u_a_t_e_B_a_s_i_s_F_a_c_e_V_a_r_y_i_n_g(_P_a_t_c_h_H_a_n_d_l_e const & handle, float u, float v, │ │ │ │ │ +517 float wP[], float wDu[] = 0, float wDv[] = 0, │ │ │ │ │ +518 float wDuu[] = 0, float wDuv[] = 0, float wDvv[] = 0, │ │ │ │ │ +519 int channel = 0) const; │ │ │ │ │ +520 │ │ │ │ │ +523 void _E_v_a_l_u_a_t_e_B_a_s_i_s_F_a_c_e_V_a_r_y_i_n_g(_P_a_t_c_h_H_a_n_d_l_e const & handle, double u, double │ │ │ │ │ +v, │ │ │ │ │ +524 double wP[], double wDu[] = 0, double wDv[] = 0, │ │ │ │ │ +525 double wDuu[] = 0, double wDuv[] = 0, double wDvv[] = 0, │ │ │ │ │ +526 int channel = 0) const; │ │ │ │ │ +528 │ │ │ │ │ +529protected: │ │ │ │ │ +530 │ │ │ │ │ +_5_3_1 friend class _P_a_t_c_h_T_a_b_l_e_B_u_i_l_d_e_r; │ │ │ │ │ +532 │ │ │ │ │ +533 // Factory constructor │ │ │ │ │ +_5_3_4 _P_a_t_c_h_T_a_b_l_e(int maxvalence); │ │ │ │ │ +535 │ │ │ │ │ +_5_3_6 _I_n_d_e_x _g_e_t_P_a_t_c_h_I_n_d_e_x(int array, int patch) const; │ │ │ │ │ +537 │ │ │ │ │ +_5_3_8 _P_a_t_c_h_P_a_r_a_m_A_r_r_a_y _g_e_t_P_a_t_c_h_P_a_r_a_m_s(int arrayIndex); │ │ │ │ │ +539 │ │ │ │ │ +_5_4_0 _I_n_d_e_x * _g_e_t_S_h_a_r_p_n_e_s_s_I_n_d_i_c_e_s(_I_n_d_e_x arrayIndex); │ │ │ │ │ +_5_4_1 float * _g_e_t_S_h_a_r_p_n_e_s_s_V_a_l_u_e_s(_I_n_d_e_x arrayIndex); │ │ │ │ │ +542 │ │ │ │ │ +543private: │ │ │ │ │ +544 │ │ │ │ │ +545 // │ │ │ │ │ +546 // Patch arrays │ │ │ │ │ +547 // │ │ │ │ │ +548 struct PatchArray { │ │ │ │ │ +549 PatchArray(_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r d, int np, _I_n_d_e_x v, _I_n_d_e_x p, _I_n_d_e_x qo) : │ │ │ │ │ +550 desc(d), numPatches(np), vertIndex(v), │ │ │ │ │ +551 patchIndex(p), quadOffsetIndex (qo) { } │ │ │ │ │ +552 │ │ │ │ │ +553 void print() const; │ │ │ │ │ +554 │ │ │ │ │ +555 _P_a_t_c_h_D_e_s_c_r_i_p_t_o_r desc; // type of patches in the array │ │ │ │ │ +556 │ │ │ │ │ +557 int numPatches; // number of patches in the array │ │ │ │ │ +558 │ │ │ │ │ +559 _I_n_d_e_x vertIndex, // index to the first control vertex │ │ │ │ │ +560 patchIndex, // absolute index of the first patch in the array │ │ │ │ │ +561 quadOffsetIndex; // index of the first quad offset entry │ │ │ │ │ +562 }; │ │ │ │ │ +563 │ │ │ │ │ +564 typedef std::vector PatchArrayVector; │ │ │ │ │ +565 │ │ │ │ │ +566 PatchArray & getPatchArray(_I_n_d_e_x arrayIndex); │ │ │ │ │ +567 PatchArray const & getPatchArray(_I_n_d_e_x arrayIndex) const; │ │ │ │ │ +568 │ │ │ │ │ +569 void reservePatchArrays(int numPatchArrays); │ │ │ │ │ +570 void pushPatchArray(PatchDescriptor desc, int npatches, │ │ │ │ │ +571 _I_n_d_e_x * vidx, _I_n_d_e_x * pidx, _I_n_d_e_x * qoidx=0); │ │ │ │ │ +572 │ │ │ │ │ +573 _I_n_d_e_x_A_r_r_a_y getPatchArrayVertices(int arrayIndex); │ │ │ │ │ +574 │ │ │ │ │ +575 _I_n_d_e_x findPatchArray(PatchDescriptor desc); │ │ │ │ │ +576 │ │ │ │ │ +577 │ │ │ │ │ +578 // │ │ │ │ │ +579 // Varying patch arrays │ │ │ │ │ +580 // │ │ │ │ │ +581 _I_n_d_e_x_A_r_r_a_y getPatchArrayVaryingVertices(int arrayIndex); │ │ │ │ │ +582 │ │ │ │ │ +583 void allocateVaryingVertices( │ │ │ │ │ +584 PatchDescriptor desc, int numPatches); │ │ │ │ │ +585 void populateVaryingVertices(); │ │ │ │ │ +586 │ │ │ │ │ +587 // │ │ │ │ │ +588 // Face-varying patch channels │ │ │ │ │ +589 // │ │ │ │ │ +590 │ │ │ │ │ +591 // │ │ │ │ │ +592 // FVarPatchChannel │ │ │ │ │ +593 // │ │ │ │ │ +594 // Stores a record for each patch in the primitive : │ │ │ │ │ +595 // │ │ │ │ │ +596 // - Each patch in the PatchTable has a corresponding patch in each │ │ │ │ │ +597 // face-varying patch channel. Patch vertex indices are sorted in the same │ │ │ │ │ +598 // patch-type order as PatchTable::PTables. Face-varying data for a patch │ │ │ │ │ +599 // can therefore be quickly accessed by using the patch primitive ID as │ │ │ │ │ +600 // index into patchValueOffsets to locate the face-varying control vertex │ │ │ │ │ +601 // indices. │ │ │ │ │ +602 // │ │ │ │ │ +603 // - Face-varying channels can have a different interpolation modes │ │ │ │ │ +604 // │ │ │ │ │ +605 // - Unlike "vertex" patches, there are no transition masks required │ │ │ │ │ +606 // for face-varying patches. │ │ │ │ │ +607 // │ │ │ │ │ +608 // - Face-varying patches still require boundary edge masks. │ │ │ │ │ +609 // │ │ │ │ │ +610 // - currently most patches with sharp boundaries but smooth interiors have │ │ │ │ │ +611 // to be isolated to level 10 : we need a special type of bicubic patch │ │ │ │ │ +612 // similar to single-crease to resolve this condition without requiring │ │ │ │ │ +613 // isolation if possible │ │ │ │ │ +614 // │ │ │ │ │ +615 struct FVarPatchChannel { │ │ │ │ │ +616 _S_d_c_:_:_O_p_t_i_o_n_s_:_:_F_V_a_r_L_i_n_e_a_r_I_n_t_e_r_p_o_l_a_t_i_o_n interpolation; │ │ │ │ │ +617 │ │ │ │ │ +618 PatchDescriptor regDesc; │ │ │ │ │ +619 PatchDescriptor irregDesc; │ │ │ │ │ +620 │ │ │ │ │ +621 int stride; │ │ │ │ │ +622 │ │ │ │ │ +623 std::vector patchValues; │ │ │ │ │ +624 std::vector patchParam; │ │ │ │ │ +625 }; │ │ │ │ │ +626 typedef std::vector FVarPatchChannelVector; │ │ │ │ │ +627 │ │ │ │ │ +628 FVarPatchChannel & getFVarPatchChannel(int channel); │ │ │ │ │ +629 FVarPatchChannel const & getFVarPatchChannel(int channel) const; │ │ │ │ │ +630 │ │ │ │ │ +631 void allocateFVarPatchChannels(int numChannels); │ │ │ │ │ +632 void allocateFVarPatchChannelValues( │ │ │ │ │ +633 PatchDescriptor regDesc, PatchDescriptor irregDesc, │ │ │ │ │ +634 int numPatches, int channel); │ │ │ │ │ +635 │ │ │ │ │ +636 // deprecated │ │ │ │ │ +637 void setFVarPatchChannelLinearInterpolation( │ │ │ │ │ +638 _S_d_c_:_:_O_p_t_i_o_n_s_:_:_F_V_a_r_L_i_n_e_a_r_I_n_t_e_r_p_o_l_a_t_i_o_n interpolation, int channel); │ │ │ │ │ +639 │ │ │ │ │ +640 _I_n_d_e_x_A_r_r_a_y getFVarValues(int channel); │ │ │ │ │ +641 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y getPatchFVarValues(int patch, int channel) const; │ │ │ │ │ +642 │ │ │ │ │ +643 _P_a_t_c_h_P_a_r_a_m_A_r_r_a_y getFVarPatchParams(int channel); │ │ │ │ │ +644 PatchParam getPatchFVarPatchParam(int patch, int channel) const; │ │ │ │ │ +645 │ │ │ │ │ +646private: │ │ │ │ │ +647 // │ │ │ │ │ +648 // Simple private class to hold stencil table pointers of varying │ │ │ │ │ +precision, │ │ │ │ │ +649 // where the discriminant of the precision is external. │ │ │ │ │ +650 // │ │ │ │ │ +651 // NOTE that this is a simple pointer container and NOT a smart pointer │ │ │ │ │ +that │ │ │ │ │ +652 // manages the ownership of the object referred to by it. │ │ │ │ │ +653 // │ │ │ │ │ +654 class StencilTablePtr { │ │ │ │ │ +655 private: │ │ │ │ │ +656 typedef StencilTableReal float_type; │ │ │ │ │ +657 typedef StencilTableReal double_type; │ │ │ │ │ +658 │ │ │ │ │ +659 union { │ │ │ │ │ +660 float_type * _fPtr; │ │ │ │ │ +661 double_type * _dPtr; │ │ │ │ │ +662 }; │ │ │ │ │ +663 │ │ │ │ │ +664 public: │ │ │ │ │ +665 StencilTablePtr() { _fPtr = 0; } │ │ │ │ │ +666 StencilTablePtr(float_type * ptr) { _fPtr = ptr; } │ │ │ │ │ +667 StencilTablePtr(double_type * ptr) { _dPtr = ptr; } │ │ │ │ │ +668 │ │ │ │ │ +669 operator bool() const { return _fPtr != 0; } │ │ │ │ │ +670 │ │ │ │ │ +671 void Set() { _fPtr = 0; } │ │ │ │ │ +672 void Set(float_type * ptr) { _fPtr = ptr; } │ │ │ │ │ +673 void Set(double_type * ptr) { _dPtr = ptr; } │ │ │ │ │ +674 │ │ │ │ │ +675 template StencilTableReal * Get() const; │ │ │ │ │ +676 }; │ │ │ │ │ +677 │ │ │ │ │ +678private: │ │ │ │ │ +679 │ │ │ │ │ +680 // │ │ │ │ │ +681 // Topology │ │ │ │ │ +682 // │ │ │ │ │ +683 │ │ │ │ │ +684 int _maxValence, // highest vertex valence found in the mesh │ │ │ │ │ +685 _numPtexFaces; // total number of ptex faces │ │ │ │ │ +686 │ │ │ │ │ +687 _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r _patchArrays; // Vector of descriptors for arrays of │ │ │ │ │ +patches │ │ │ │ │ +688 │ │ │ │ │ +689 std::vector _patchVerts; // Indices of the control vertices of the │ │ │ │ │ +patches │ │ │ │ │ +690 │ │ │ │ │ +691 _P_a_t_c_h_P_a_r_a_m_T_a_b_l_e _paramTable; // PatchParam bitfields (one per patch) │ │ │ │ │ +692 │ │ │ │ │ +693 // │ │ │ │ │ +694 // Extraordinary vertex closed-form evaluation / endcap basis conversion │ │ │ │ │ +695 // │ │ │ │ │ +696 // XXXtakahito: these data will probably be replaced with mask coefficient │ │ │ │ │ +or something │ │ │ │ │ +697 // SchemeWorker populates. │ │ │ │ │ +698 // │ │ │ │ │ +699 _Q_u_a_d_O_f_f_s_e_t_s_T_a_b_l_e _quadOffsetsTable; // Quad offsets (for Gregory patches) │ │ │ │ │ +700 _V_e_r_t_e_x_V_a_l_e_n_c_e_T_a_b_l_e _vertexValenceTable; // Vertex valence table (for │ │ │ │ │ +Gregory patches) │ │ │ │ │ +701 │ │ │ │ │ +702 StencilTablePtr _localPointStencils; // local point conversion stencils │ │ │ │ │ +703 StencilTablePtr _localPointVaryingStencils; // local point varying stencils │ │ │ │ │ +704 │ │ │ │ │ +705 // │ │ │ │ │ +706 // Varying data │ │ │ │ │ +707 // │ │ │ │ │ +708 PatchDescriptor _varyingDesc; │ │ │ │ │ +709 │ │ │ │ │ +710 std::vector _varyingVerts; │ │ │ │ │ +711 │ │ │ │ │ +712 // │ │ │ │ │ +713 // Face-varying data │ │ │ │ │ +714 // │ │ │ │ │ +715 FVarPatchChannelVector _fvarChannels; │ │ │ │ │ +716 │ │ │ │ │ +717 std::vector _localPointFaceVaryingStencils; │ │ │ │ │ +718 │ │ │ │ │ +719 // │ │ │ │ │ +720 // 'single-crease' patch sharpness tables │ │ │ │ │ +721 // │ │ │ │ │ +722 std::vector _sharpnessIndices; // Indices of single-crease sharpness │ │ │ │ │ +(one per patch) │ │ │ │ │ +723 std::vector _sharpnessValues; // Sharpness values. │ │ │ │ │ +724 │ │ │ │ │ +725 // │ │ │ │ │ +726 // Construction history -- relevant to at least one public query: │ │ │ │ │ +727 // │ │ │ │ │ +728 unsigned int _isUniformLinear : 1; │ │ │ │ │ +729 │ │ │ │ │ +730 // │ │ │ │ │ +731 // Precision -- only applies to local-point stencil tables │ │ │ │ │ +732 // │ │ │ │ │ +733 unsigned int _vertexPrecisionIsDouble : 1; │ │ │ │ │ +734 unsigned int _varyingPrecisionIsDouble : 1; │ │ │ │ │ +735 unsigned int _faceVaryingPrecisionIsDouble : 1; │ │ │ │ │ +736}; │ │ │ │ │ +737 │ │ │ │ │ +738 │ │ │ │ │ +739// │ │ │ │ │ +740// Template specializations for float/double -- to be defined before used: │ │ │ │ │ +741// │ │ │ │ │ +742template <> inline StencilTableReal * │ │ │ │ │ +743PatchTable::StencilTablePtr::Get() const { return _fPtr; } │ │ │ │ │ +744 │ │ │ │ │ +745template <> inline StencilTableReal * │ │ │ │ │ +746PatchTable::StencilTablePtr::Get() const { return _dPtr; } │ │ │ │ │ +747 │ │ │ │ │ +_7_4_8template <> inline bool │ │ │ │ │ +749PatchTable::LocalPointStencilPrecisionMatchesType() const { │ │ │ │ │ +750 return !_vertexPrecisionIsDouble; │ │ │ │ │ +751} │ │ │ │ │ +_7_5_2template <> inline bool │ │ │ │ │ +753PatchTable::LocalPointVaryingStencilPrecisionMatchesType() const { │ │ │ │ │ +754 return !_varyingPrecisionIsDouble; │ │ │ │ │ +755} │ │ │ │ │ +_7_5_6template <> inline bool │ │ │ │ │ +757PatchTable::LocalPointFaceVaryingStencilPrecisionMatchesType() const │ │ │ │ │ +{ │ │ │ │ │ +758 return !_faceVaryingPrecisionIsDouble; │ │ │ │ │ +759} │ │ │ │ │ +760 │ │ │ │ │ +_7_6_1template <> inline bool │ │ │ │ │ +762PatchTable::LocalPointStencilPrecisionMatchesType() const { │ │ │ │ │ +763 return _vertexPrecisionIsDouble; │ │ │ │ │ +764} │ │ │ │ │ +_7_6_5template <> inline bool │ │ │ │ │ +766PatchTable::LocalPointVaryingStencilPrecisionMatchesType() const { │ │ │ │ │ +767 return _varyingPrecisionIsDouble; │ │ │ │ │ +768} │ │ │ │ │ +_7_6_9template <> inline bool │ │ │ │ │ +770PatchTable::LocalPointFaceVaryingStencilPrecisionMatchesType() const │ │ │ │ │ +{ │ │ │ │ │ +771 return _faceVaryingPrecisionIsDouble; │ │ │ │ │ +772} │ │ │ │ │ +773 │ │ │ │ │ +774// │ │ │ │ │ +775// StencilTable access -- backward compatible and generic: │ │ │ │ │ +776// │ │ │ │ │ +777inline _S_t_e_n_c_i_l_T_a_b_l_e const * │ │ │ │ │ +_7_7_8_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e() const { │ │ │ │ │ +779 assert(LocalPointStencilPrecisionMatchesType()); │ │ │ │ │ +780 return static_cast<_S_t_e_n_c_i_l_T_a_b_l_e const *>(_localPointStencils.Get()); │ │ │ │ │ +781} │ │ │ │ │ +782inline _S_t_e_n_c_i_l_T_a_b_l_e const * │ │ │ │ │ +_7_8_3_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_L_o_c_a_l_P_o_i_n_t_V_a_r_y_i_n_g_S_t_e_n_c_i_l_T_a_b_l_e() const { │ │ │ │ │ +784 assert(LocalPointVaryingStencilPrecisionMatchesType()); │ │ │ │ │ +785 return static_cast<_S_t_e_n_c_i_l_T_a_b_l_e const *>( │ │ │ │ │ +786 _localPointVaryingStencils.Get()); │ │ │ │ │ +787} │ │ │ │ │ +788inline _S_t_e_n_c_i_l_T_a_b_l_e const * │ │ │ │ │ +_7_8_9_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_L_o_c_a_l_P_o_i_n_t_F_a_c_e_V_a_r_y_i_n_g_S_t_e_n_c_i_l_T_a_b_l_e(int channel) const { │ │ │ │ │ +790 assert(LocalPointFaceVaryingStencilPrecisionMatchesType()); │ │ │ │ │ +791 if (channel >= 0 && channel < (int)_localPointFaceVaryingStencils.size()) { │ │ │ │ │ +792 return static_cast<_S_t_e_n_c_i_l_T_a_b_l_e const *>( │ │ │ │ │ +793 _localPointFaceVaryingStencils[channel].Get()); │ │ │ │ │ +794 } │ │ │ │ │ +795 return NULL; │ │ │ │ │ +796} │ │ │ │ │ +797 │ │ │ │ │ +798template │ │ │ │ │ +799inline _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * │ │ │ │ │ +_8_0_0_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e() const { │ │ │ │ │ +801 assert(LocalPointStencilPrecisionMatchesType()); │ │ │ │ │ +802 return _localPointStencils.Get(); │ │ │ │ │ +803} │ │ │ │ │ +804template │ │ │ │ │ +805inline _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * │ │ │ │ │ +_8_0_6_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_L_o_c_a_l_P_o_i_n_t_V_a_r_y_i_n_g_S_t_e_n_c_i_l_T_a_b_l_e() const { │ │ │ │ │ +807 assert(LocalPointVaryingStencilPrecisionMatchesType()); │ │ │ │ │ +808 return _localPointVaryingStencils.Get(); │ │ │ │ │ +809} │ │ │ │ │ +810template │ │ │ │ │ +811inline _S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l_<_R_E_A_L_> const * │ │ │ │ │ +_8_1_2_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_L_o_c_a_l_P_o_i_n_t_F_a_c_e_V_a_r_y_i_n_g_S_t_e_n_c_i_l_T_a_b_l_e(int channel) const { │ │ │ │ │ +813 assert(LocalPointFaceVaryingStencilPrecisionMatchesType()); │ │ │ │ │ +814 if (channel >= 0 && channel < (int)_localPointFaceVaryingStencils.size()) { │ │ │ │ │ +815 return _localPointFaceVaryingStencils[channel].Get(); │ │ │ │ │ +816 } │ │ │ │ │ +817 return NULL; │ │ │ │ │ +818} │ │ │ │ │ +819 │ │ │ │ │ +820 │ │ │ │ │ +821// │ │ │ │ │ +822// Computation of local point values: │ │ │ │ │ +823// │ │ │ │ │ +824template │ │ │ │ │ +825inline void │ │ │ │ │ +_8_2_6_P_a_t_c_h_T_a_b_l_e_:_:_C_o_m_p_u_t_e_L_o_c_a_l_P_o_i_n_t_V_a_l_u_e_s(T const *src, T *dst) const { │ │ │ │ │ +827 assert(LocalPointStencilPrecisionMatchesType()); │ │ │ │ │ +828 if (_localPointStencils) { │ │ │ │ │ +829 _localPointStencils.Get()->UpdateValues(src, dst); │ │ │ │ │ +830 } │ │ │ │ │ +831} │ │ │ │ │ +832 │ │ │ │ │ +833template │ │ │ │ │ +834inline void │ │ │ │ │ +_8_3_5_P_a_t_c_h_T_a_b_l_e_:_:_C_o_m_p_u_t_e_L_o_c_a_l_P_o_i_n_t_V_a_l_u_e_s_V_a_r_y_i_n_g(T const *src, T *dst) const { │ │ │ │ │ +836 assert(LocalPointVaryingStencilPrecisionMatchesType()); │ │ │ │ │ +837 if (_localPointVaryingStencils) { │ │ │ │ │ +838 _localPointVaryingStencils.Get()->UpdateValues(src, dst); │ │ │ │ │ +839 } │ │ │ │ │ +840} │ │ │ │ │ +841 │ │ │ │ │ +842template │ │ │ │ │ +843inline void │ │ │ │ │ +_8_4_4_P_a_t_c_h_T_a_b_l_e_:_:_C_o_m_p_u_t_e_L_o_c_a_l_P_o_i_n_t_V_a_l_u_e_s_F_a_c_e_V_a_r_y_i_n_g(T const *src, T *dst, int │ │ │ │ │ +channel) const { │ │ │ │ │ +845 assert(LocalPointFaceVaryingStencilPrecisionMatchesType()); │ │ │ │ │ +846 if (channel >= 0 && channel < (int)_localPointFaceVaryingStencils.size()) { │ │ │ │ │ +847 if (_localPointFaceVaryingStencils[channel]) { │ │ │ │ │ +848 _localPointFaceVaryingStencils[channel].Get()->UpdateValues(src, │ │ │ │ │ +dst); │ │ │ │ │ +849 } │ │ │ │ │ +850 } │ │ │ │ │ +851} │ │ │ │ │ +852 │ │ │ │ │ +853 │ │ │ │ │ +854// │ │ │ │ │ +855// Basis evaluation overloads │ │ │ │ │ +856// │ │ │ │ │ +857inline void │ │ │ │ │ +_8_5_8_P_a_t_c_h_T_a_b_l_e_:_:_E_v_a_l_u_a_t_e_B_a_s_i_s(_P_a_t_c_h_H_a_n_d_l_e const & handle, float u, float v, │ │ │ │ │ +859 float wP[], float wDu[], float wDv[], │ │ │ │ │ +860 float wDuu[], float wDuv[], float wDvv[]) const { │ │ │ │ │ +861 │ │ │ │ │ +862 EvaluateBasis(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv); │ │ │ │ │ +863} │ │ │ │ │ +864inline void │ │ │ │ │ +_8_6_5_P_a_t_c_h_T_a_b_l_e_:_:_E_v_a_l_u_a_t_e_B_a_s_i_s(_P_a_t_c_h_H_a_n_d_l_e const & handle, double u, double v, │ │ │ │ │ +866 double wP[], double wDu[], double wDv[], │ │ │ │ │ +867 double wDuu[], double wDuv[], double wDvv[]) const { │ │ │ │ │ +868 │ │ │ │ │ +869 EvaluateBasis(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv); │ │ │ │ │ +870} │ │ │ │ │ +871 │ │ │ │ │ +872inline void │ │ │ │ │ +_8_7_3_P_a_t_c_h_T_a_b_l_e_:_:_E_v_a_l_u_a_t_e_B_a_s_i_s_V_a_r_y_i_n_g(_P_a_t_c_h_H_a_n_d_l_e const & handle, float u, float │ │ │ │ │ +v, │ │ │ │ │ +874 float wP[], float wDu[], float wDv[], │ │ │ │ │ +875 float wDuu[], float wDuv[], float wDvv[]) const { │ │ │ │ │ +876 │ │ │ │ │ +877 EvaluateBasisVarying(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv); │ │ │ │ │ +878} │ │ │ │ │ +879inline void │ │ │ │ │ +_8_8_0_P_a_t_c_h_T_a_b_l_e_:_:_E_v_a_l_u_a_t_e_B_a_s_i_s_V_a_r_y_i_n_g(_P_a_t_c_h_H_a_n_d_l_e const & handle, double u, │ │ │ │ │ +double v, │ │ │ │ │ +881 double wP[], double wDu[], double wDv[], │ │ │ │ │ +882 double wDuu[], double wDuv[], double wDvv[]) const { │ │ │ │ │ +883 │ │ │ │ │ +884 EvaluateBasisVarying(handle, u, v, wP, wDu, wDv, wDuu, wDuv, wDvv); │ │ │ │ │ +885} │ │ │ │ │ +886 │ │ │ │ │ +887inline void │ │ │ │ │ +_8_8_8_P_a_t_c_h_T_a_b_l_e_:_:_E_v_a_l_u_a_t_e_B_a_s_i_s_F_a_c_e_V_a_r_y_i_n_g(_P_a_t_c_h_H_a_n_d_l_e const & handle, float u, │ │ │ │ │ +float v, │ │ │ │ │ +889 float wP[], float wDu[], float wDv[], │ │ │ │ │ +890 float wDuu[], float wDuv[], float wDvv[], int channel) const { │ │ │ │ │ +891 │ │ │ │ │ +892 EvaluateBasisFaceVarying(handle, u, v, wP, wDu, wDv, wDuu, wDuv, │ │ │ │ │ +wDvv, channel); │ │ │ │ │ +893} │ │ │ │ │ +894inline void │ │ │ │ │ +_8_9_5_P_a_t_c_h_T_a_b_l_e_:_:_E_v_a_l_u_a_t_e_B_a_s_i_s_F_a_c_e_V_a_r_y_i_n_g(_P_a_t_c_h_H_a_n_d_l_e const & handle, double u, │ │ │ │ │ +double v, │ │ │ │ │ +896 double wP[], double wDu[], double wDv[], │ │ │ │ │ +897 double wDuu[], double wDuv[], double wDvv[], int channel) const { │ │ │ │ │ +898 │ │ │ │ │ +899 EvaluateBasisFaceVarying(handle, u, v, wP, wDu, wDv, wDuu, wDuv, │ │ │ │ │ +wDvv, channel); │ │ │ │ │ +900} │ │ │ │ │ +901 │ │ │ │ │ +902} // end namespace Far │ │ │ │ │ +903 │ │ │ │ │ +904} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ +905using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +906 │ │ │ │ │ +907} // end namespace OpenSubdiv │ │ │ │ │ +908 │ │ │ │ │ +909#endif /* OPENSUBDIV3_FAR_PATCH_TABLE */ │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_C_o_n_s_t_I_n_d_e_x_A_r_r_a_y │ │ │ │ │ Vtr::ConstIndexArray ConstIndexArray │ │ │ │ │ DDeeffiinniittiioonn _t_y_p_e_s_._h_:_4_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_P_a_r_a_m_T_a_b_l_e │ │ │ │ │ +std::vector< PatchParam > PatchParamTable │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_P_a_r_a_m_._h_:_2_4_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_I_n_d_e_x_A_r_r_a_y │ │ │ │ │ +Vtr::IndexArray IndexArray │ │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e_s_._h_:_4_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_I_n_d_e_x │ │ │ │ │ +Vtr::Index Index │ │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e_s_._h_:_4_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_P_a_r_a_m_A_r_r_a_y │ │ │ │ │ +Vtr::Array< PatchParam > PatchParamArray │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_P_a_r_a_m_._h_:_2_4_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r │ │ │ │ │ +std::vector< PatchArray > PatchArrayVector │ │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e_s_._h_:_1_3_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ +Describes the type of a patch. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_D_e_s_c_r_i_p_t_o_r_._h_:_4_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_M_a_p │ │ │ │ │ +An quadtree-based map connecting coarse faces to their sub-patches. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_M_a_p_._h_:_4_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_P_a_r_a_m │ │ │ │ │ +Patch parameterization. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_P_a_r_a_m_._h_:_1_5_2 │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ Container for arrays of parametric patches. │ │ │ │ │ DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_5_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y │ │ │ │ │ -Factory for constructing a PatchTable from a TopologyRefiner. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_4_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_T_a_g_V_e_c_t_o_r │ │ │ │ │ -std::vector< PatchFaceTag > PatchTagVector │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_0_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_C_r_e_a_t_e │ │ │ │ │ -static PatchTable * Create(TopologyRefiner const &refiner, Options │ │ │ │ │ -options=Options(), ConstIndexArray selectedFaces=ConstIndexArray()) │ │ │ │ │ -Instantiates a PatchTable from a client-provided TopologyRefiner. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s │ │ │ │ │ -Public options for the PatchTable factory. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_4_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_g_e_n_e_r_a_t_e_V_a_r_y_i_n_g_T_a_b_l_e_s │ │ │ │ │ -unsigned int generateVaryingTables │ │ │ │ │ -Generate varying patch tables. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_2_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_g_e_n_e_r_a_t_e_L_e_g_a_c_y_S_h_a_r_p_C_o_r_n_e_r_P_a_t_c_h_e_s │ │ │ │ │ -unsigned int generateLegacySharpCornerPatches │ │ │ │ │ -Generate sharp regular patches at smooth corners (legacy) │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_3_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_s_h_a_r_e_E_n_d_C_a_p_P_a_t_c_h_P_o_i_n_t_s │ │ │ │ │ -unsigned int shareEndCapPatchPoints │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_2_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_G_e_t_R_e_f_i_n_e_A_d_a_p_t_i_v_e_O_p_t_i_o_n_s │ │ │ │ │ -TopologyRefiner::AdaptiveOptions GetRefineAdaptiveOptions() const │ │ │ │ │ -Determine adaptive refinement options to match assigned patch options. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_0_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_m_a_x_I_s_o_l_a_t_i_o_n_L_e_v_e_l │ │ │ │ │ -unsigned int maxIsolationLevel │ │ │ │ │ -Cap adaptive feature isolation to the given level (max. 10) │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_1_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_:_G_e_t_E_n_d_C_a_p_T_y_p_e │ │ │ │ │ -EndCapType GetEndCapType() const │ │ │ │ │ -Get endcap basis type. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_8_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_g_e_n_e_r_a_t_e_F_V_a_r_L_e_g_a_c_y_L_i_n_e_a_r_P_a_t_c_h_e_s │ │ │ │ │ -unsigned int generateFVarLegacyLinearPatches │ │ │ │ │ -Generate all linear face-varying patches (legacy) │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_3_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_S_e_t_P_a_t_c_h_P_r_e_c_i_s_i_o_n │ │ │ │ │ -void SetPatchPrecision() │ │ │ │ │ -Set precision of vertex patches. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_f_v_a_r_P_a_t_c_h_P_r_e_c_i_s_i_o_n_D_o_u_b_l_e │ │ │ │ │ -unsigned int fvarPatchPrecisionDouble │ │ │ │ │ -Generate double-precision stencils for face-varying patches. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_3_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_S_e_t_M_a_x_I_s_o_l_a_t_i_o_n_L_e_v_e_l │ │ │ │ │ -void SetMaxIsolationLevel(unsigned int level) │ │ │ │ │ -Set maximum isolation level. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_9_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_:_e_n_d_C_a_p_T_y_p_e │ │ │ │ │ -unsigned int endCapType │ │ │ │ │ -EndCapType. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_2_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_f_v_a_r_C_h_a_n_n_e_l_I_n_d_i_c_e_s │ │ │ │ │ -int const * fvarChannelIndices │ │ │ │ │ -List containing the indices of the channels selected for the factory. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_4_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_u_s_e_S_i_n_g_l_e_C_r_e_a_s_e_P_a_t_c_h │ │ │ │ │ -unsigned int useSingleCreasePatch │ │ │ │ │ -Use single crease patch. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_1_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_u_s_e_I_n_f_S_h_a_r_p_P_a_t_c_h │ │ │ │ │ -unsigned int useInfSharpPatch │ │ │ │ │ -Use infinitely-sharp patch. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_1_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_:_S_e_t_E_n_d_C_a_p_T_y_p_e │ │ │ │ │ -void SetEndCapType(EndCapType e) │ │ │ │ │ -Set endcap basis type. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_8_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_g_e_n_e_r_a_t_e_V_a_r_y_i_n_g_L_o_c_a_l_P_o_i_n_t_s │ │ │ │ │ -unsigned int generateVaryingLocalPoints │ │ │ │ │ -Generate local points with varying patches. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_2_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_i_n_c_l_u_d_e_F_V_a_r_B_a_s_e_L_e_v_e_l_I_n_d_i_c_e_s │ │ │ │ │ -unsigned int includeFVarBaseLevelIndices │ │ │ │ │ -Include base level in face-varying patch point indices (Uniform mode only) │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_1_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_g_e_n_e_r_a_t_e_A_l_l_L_e_v_e_l_s │ │ │ │ │ -unsigned int generateAllLevels │ │ │ │ │ -Generate levels from 'firstLevel' to 'maxLevel' (Uniform mode only) │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_1_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_p_a_t_c_h_P_r_e_c_i_s_i_o_n_D_o_u_b_l_e │ │ │ │ │ -unsigned int patchPrecisionDouble │ │ │ │ │ -Generate double-precision stencils for vertex patches. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_g_e_n_e_r_a_t_e_F_V_a_r_T_a_b_l_e_s │ │ │ │ │ -unsigned int generateFVarTables │ │ │ │ │ -Generate face-varying patch tables. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_2_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_i_n_c_l_u_d_e_B_a_s_e_L_e_v_e_l_I_n_d_i_c_e_s │ │ │ │ │ -unsigned int includeBaseLevelIndices │ │ │ │ │ -Include base level in patch point indices (Uniform mode only) │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_1_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_S_e_t_F_V_a_r_P_a_t_c_h_P_r_e_c_i_s_i_o_n │ │ │ │ │ -void SetFVarPatchPrecision() │ │ │ │ │ -Set precision of face-varying patches. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_n_u_m_F_V_a_r_C_h_a_n_n_e_l_s │ │ │ │ │ -int numFVarChannels │ │ │ │ │ -Number of channel indices and interpolation modes passed. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_3_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_t_r_i_a_n_g_u_l_a_t_e_Q_u_a_d_s │ │ │ │ │ -unsigned int triangulateQuads │ │ │ │ │ -Triangulate 'QUADS' primitives (Uniform mode only) │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_1_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_:_E_n_d_C_a_p_T_y_p_e │ │ │ │ │ -EndCapType │ │ │ │ │ -Choice for approximating irregular patches (end-caps) │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_5_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_E_N_D_C_A_P___L_E_G_A_C_Y___G_R_E_G_O_R_Y │ │ │ │ │ -@ ENDCAP_LEGACY_GREGORY │ │ │ │ │ -legacy option for 2.x style Gregory patches (Catmark only) │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_6_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_E_N_D_C_A_P___G_R_E_G_O_R_Y___B_A_S_I_S │ │ │ │ │ -@ ENDCAP_GREGORY_BASIS │ │ │ │ │ -use Gregory patches (highest quality, recommended default) │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_5_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_:_E_N_D_C_A_P___N_O_N_E │ │ │ │ │ -@ ENDCAP_NONE │ │ │ │ │ -unspecified │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_5_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_E_N_D_C_A_P___B_I_L_I_N_E_A_R___B_A_S_I_S │ │ │ │ │ -@ ENDCAP_BILINEAR_BASIS │ │ │ │ │ -use linear patches (simple quads or tris) │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_5_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_E_N_D_C_A_P___B_S_P_L_I_N_E___B_A_S_I_S │ │ │ │ │ -@ ENDCAP_BSPLINE_BASIS │ │ │ │ │ -use BSpline-like patches (same patch type as regular) │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_5_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_O_p_t_i_o_n_s_:_:_O_p_t_i_o_n_s │ │ │ │ │ -Options(unsigned int maxIsolation=10) │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_6_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g │ │ │ │ │ -Obsolete internal struct not intended for public use – due to be deprecated. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_9_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g_:_: │ │ │ │ │ -___i_s_S_i_n_g_l_e_C_r_e_a_s_e │ │ │ │ │ -unsigned int _isSingleCrease │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_0_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g_:_: │ │ │ │ │ -___i_s_R_e_g_u_l_a_r │ │ │ │ │ -unsigned int _isRegular │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_9_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g_:_: │ │ │ │ │ -___b_o_u_n_d_a_r_y_I_n_d_e_x │ │ │ │ │ -unsigned int _boundaryIndex │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_9_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g_:_: │ │ │ │ │ -_a_s_s_i_g_n_B_o_u_n_d_a_r_y_P_r_o_p_e_r_t_i_e_s_F_r_o_m_V_e_r_t_e_x_M_a_s_k │ │ │ │ │ -void assignBoundaryPropertiesFromVertexMask(int boundaryVertexMask) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g_:_: │ │ │ │ │ -___t_r_a_n_s_i_t_i_o_n_M_a_s_k │ │ │ │ │ -unsigned int _transitionMask │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_9_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g_:_: │ │ │ │ │ -___h_a_s_B_o_u_n_d_a_r_y_E_d_g_e │ │ │ │ │ -unsigned int _hasBoundaryEdge │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_2_0_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g_:_: │ │ │ │ │ -___b_o_u_n_d_a_r_y_M_a_s_k │ │ │ │ │ -unsigned int _boundaryMask │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_9_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g_:_:___h_a_s_P_a_t_c_h │ │ │ │ │ -unsigned int _hasPatch │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_9_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g_:_: │ │ │ │ │ -_a_s_s_i_g_n_T_r_a_n_s_i_t_i_o_n_P_r_o_p_e_r_t_i_e_s_F_r_o_m_E_d_g_e_M_a_s_k │ │ │ │ │ -void assignTransitionPropertiesFromEdgeMask(int boundaryVertexMask) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g_:_:_c_l_e_a_r │ │ │ │ │ -void clear() │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g_:_: │ │ │ │ │ -_a_s_s_i_g_n_B_o_u_n_d_a_r_y_P_r_o_p_e_r_t_i_e_s_F_r_o_m_E_d_g_e_M_a_s_k │ │ │ │ │ -void assignBoundaryPropertiesFromEdgeMask(int boundaryEdgeMask) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_:_:_P_a_t_c_h_F_a_c_e_T_a_g_:_: │ │ │ │ │ -___b_o_u_n_d_a_r_y_C_o_u_n_t │ │ │ │ │ -unsigned int _boundaryCount │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h_:_1_9_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r │ │ │ │ │ -Stores topology data for a specified set of refinement options. │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_._h_:_5_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_:_:_A_d_a_p_t_i_v_e_O_p_t_i_o_n_s │ │ │ │ │ -Adaptive refinement options. │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_._h_:_1_5_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_:_:_A_d_a_p_t_i_v_e_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_u_s_e_S_i_n_g_l_e_C_r_e_a_s_e_P_a_t_c_h │ │ │ │ │ -unsigned int useSingleCreasePatch │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_._h_:_1_7_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_:_:_A_d_a_p_t_i_v_e_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_u_s_e_I_n_f_S_h_a_r_p_P_a_t_c_h │ │ │ │ │ -unsigned int useInfSharpPatch │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_._h_:_1_7_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_T_o_p_o_l_o_g_y_R_e_f_i_n_e_r_:_:_A_d_a_p_t_i_v_e_O_p_t_i_o_n_s_:_: │ │ │ │ │ -_c_o_n_s_i_d_e_r_F_V_a_r_C_h_a_n_n_e_l_s │ │ │ │ │ -unsigned int considerFVarChannels │ │ │ │ │ -DDeeffiinniittiioonn _t_o_p_o_l_o_g_y_R_e_f_i_n_e_r_._h_:_1_8_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_A_r_r_a_y_V_a_r_y_i_n_g_V_e_r_t_i_c_e_s │ │ │ │ │ +ConstIndexArray GetPatchArrayVaryingVertices(int array) const │ │ │ │ │ +Returns the varying vertex indices for the patches in array. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_g_e_t_S_h_a_r_p_n_e_s_s_V_a_l_u_e_s │ │ │ │ │ +float * getSharpnessValues(Index arrayIndex) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s_T_a_b_l_e │ │ │ │ │ +PatchVertsTable const & GetPatchControlVerticesTable() const │ │ │ │ │ +Get the table of patch control vertices. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_3_7_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ +_C_o_m_p_u_t_e_L_o_c_a_l_P_o_i_n_t_V_a_l_u_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ +void ComputeLocalPointValuesFaceVarying(T const *src, T *dst, int channel=0) │ │ │ │ │ +const │ │ │ │ │ +Updates local point face-varying values. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_8_4_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_V_a_r_y_i_n_g_V_e_r_t_i_c_e_s │ │ │ │ │ +ConstIndexArray GetVaryingVertices() const │ │ │ │ │ +Returns an array of varying vertex indices for the patches. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_C_o_m_p_u_t_e_L_o_c_a_l_P_o_i_n_t_V_a_l_u_e_s_V_a_r_y_i_n_g │ │ │ │ │ +void ComputeLocalPointValuesVarying(T const *src, T *dst) const │ │ │ │ │ +Updates local point varying values. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_8_3_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_V_a_r_y_i_n_g_V_e_r_t_i_c_e_s │ │ │ │ │ +ConstIndexArray GetPatchVaryingVertices(PatchHandle const &handle) const │ │ │ │ │ +Returns the varying vertex indices for a given patch. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_I_s_F_e_a_t_u_r_e_A_d_a_p_t_i_v_e │ │ │ │ │ +bool IsFeatureAdaptive() const │ │ │ │ │ +True if the patches are of feature adaptive types. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_M_a_x_V_a_l_e_n_c_e │ │ │ │ │ +int GetMaxValence() const │ │ │ │ │ +Returns max vertex valence. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_9_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +StencilTableReal< REAL > const * GetLocalPointStencilTable() const │ │ │ │ │ +Returns the stencil table to compute local point vertex values. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +StencilTable const * GetLocalPointStencilTable() const │ │ │ │ │ +Returns the stencil table to compute local point vertex values. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_7_7_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_g_e_t_P_a_t_c_h_P_a_r_a_m_s │ │ │ │ │ +PatchParamArray getPatchParams(int arrayIndex) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_A_r_r_a_y_F_V_a_r_V_a_l_u_e_s │ │ │ │ │ +ConstIndexArray GetPatchArrayFVarValues(int array, int channel=0) const │ │ │ │ │ +Returns the value indices for the patches in array in channel. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_S_h_a_r_p_n_e_s_s_V_a_l_u_e_s │ │ │ │ │ +std::vector< float > const & GetSharpnessValues() const │ │ │ │ │ +Returns sharpness values table. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_3_8_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_V_e_r_t_e_x_V_a_l_e_n_c_e_T_a_b_l_e │ │ │ │ │ +std::vector< Index > VertexValenceTable │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_2_6_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_F_V_a_r_P_a_t_c_h_P_a_r_a_m │ │ │ │ │ +PatchParam GetPatchFVarPatchParam(int array, int patch, int channel=0) const │ │ │ │ │ +Returns the face-varying params for a given patch channel. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_V_a_r_y_i_n_g_V_e_r_t_i_c_e_s │ │ │ │ │ +ConstIndexArray GetPatchVaryingVertices(int array, int patch) const │ │ │ │ │ +Returns the varying vertex indices for a given patch. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +PatchTable(PatchTable const &src) │ │ │ │ │ +Copy constructor. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_P_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ +int GetNumPatchArrays() const │ │ │ │ │ +Returns the number of patch arrays in the table. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_V_e_r_t_i_c_e_s │ │ │ │ │ +ConstIndexArray GetPatchVertices(PatchHandle const &handle) const │ │ │ │ │ +Returns the control vertex indices for the patch identified by handle. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +PatchTable(int maxvalence) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ +_L_o_c_a_l_P_o_i_n_t_F_a_c_e_V_a_r_y_i_n_g_S_t_e_n_c_i_l_P_r_e_c_i_s_i_o_n_M_a_t_c_h_e_s_T_y_p_e │ │ │ │ │ +bool LocalPointFaceVaryingStencilPrecisionMatchesType() const │ │ │ │ │ +Tests if the precision of the stencil table to compute local point face-varying │ │ │ │ │ +values matches the gi... │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_P_a_r_a_m_T_a_b_l_e │ │ │ │ │ +PatchParamTable const & GetPatchParamTable() const │ │ │ │ │ +Returns the PatchParamTable (PatchParams order matches patch array sorting) │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_3_8_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_V_e_r_t_e_x_V_a_l_e_n_c_e_T_a_b_l_e │ │ │ │ │ +VertexValenceTable const & GetVertexValenceTable() const │ │ │ │ │ +Returns the 'VertexValences' table (vertex neighborhoods table) │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_2_6_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ +_G_e_t_L_o_c_a_l_P_o_i_n_t_F_a_c_e_V_a_r_y_i_n_g_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +StencilTable const * GetLocalPointFaceVaryingStencilTable(int channel=0) const │ │ │ │ │ +Returns the stencil table to compute local point face-varying values. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_7_8_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s │ │ │ │ │ +int GetNumControlVertices(int array) const │ │ │ │ │ +Returns the number of control vertices in array. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_~_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +~PatchTable() │ │ │ │ │ +Destructor. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_E_v_a_l_u_a_t_e_B_a_s_i_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ +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... │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_Q_u_a_d_O_f_f_s_e_t_s │ │ │ │ │ +ConstQuadOffsetsArray GetPatchQuadOffsets(PatchHandle const &handle) const │ │ │ │ │ +Returns the 'QuadOffsets' for the Gregory patch identified by handle. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ +_G_e_t_F_V_a_r_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_I_r_r_e_g_u_l_a_r │ │ │ │ │ +PatchDescriptor GetFVarPatchDescriptorIrregular(int channel=0) const │ │ │ │ │ +Returns the irregular patch descriptor for channel. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ +_G_e_t_S_i_n_g_l_e_C_r_e_a_s_e_P_a_t_c_h_S_h_a_r_p_n_e_s_s_V_a_l_u_e │ │ │ │ │ +float GetSingleCreasePatchSharpnessValue(int array, int patch) const │ │ │ │ │ +Returns the crease sharpness for the patch in array if it is a single-crease │ │ │ │ │ +patch,... │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_g_e_t_S_h_a_r_p_n_e_s_s_I_n_d_i_c_e_s │ │ │ │ │ +Index * getSharpnessIndices(Index arrayIndex) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_C_o_m_p_u_t_e_L_o_c_a_l_P_o_i_n_t_V_a_l_u_e_s │ │ │ │ │ +void ComputeLocalPointValues(T const *src, T *dst) const │ │ │ │ │ +Updates local point vertex values. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_8_2_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ +_G_e_t_S_i_n_g_l_e_C_r_e_a_s_e_P_a_t_c_h_S_h_a_r_p_n_e_s_s_V_a_l_u_e │ │ │ │ │ +float GetSingleCreasePatchSharpnessValue(PatchHandle const &handle) const │ │ │ │ │ +Returns the crease sharpness for the patch identified by handle if it is a │ │ │ │ │ +single-crease patch,... │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_P_a_r_a_m │ │ │ │ │ +PatchParam GetPatchParam(int array, int patch) const │ │ │ │ │ +Returns the PatchParam for patch in array. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_F_V_a_r_V_a_l_u_e_s │ │ │ │ │ +ConstIndexArray GetPatchFVarValues(int array, int patch, int channel=0) const │ │ │ │ │ +Returns the value indices for a given patch in channel. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_R_e_g_u_l_a_r │ │ │ │ │ +PatchDescriptor GetFVarPatchDescriptorRegular(int channel=0) const │ │ │ │ │ +Returns the regular patch descriptor for channel. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ +PatchDescriptor GetPatchDescriptor(PatchHandle const &handle) const │ │ │ │ │ +Returns the PatchDescriptor for the patch identified by handle. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_P_a_t_c_h_V_e_r_t_s_T_a_b_l_e │ │ │ │ │ +std::vector< Index > PatchVertsTable │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_3_7_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_Q_u_a_d_O_f_f_s_e_t_s_T_a_b_l_e │ │ │ │ │ +QuadOffsetsTable const & GetQuadOffsetsTable() const │ │ │ │ │ +Returns the quad-offsets table. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_3_9_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_P_a_t_c_h_e_s │ │ │ │ │ +int GetNumPatches(int array) const │ │ │ │ │ +Returns the number of patches in array. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ +PatchDescriptor GetVaryingPatchDescriptor() const │ │ │ │ │ +Returns the varying patch descriptor. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_F_V_a_r_V_a_l_u_e_s │ │ │ │ │ +ConstIndexArray GetPatchFVarValues(PatchHandle const &handle, int channel=0) │ │ │ │ │ +const │ │ │ │ │ +Returns the value indices for a given patch in channel. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_P_a_r_a_m_s │ │ │ │ │ +ConstPatchParamArray const GetPatchParams(int array) const │ │ │ │ │ +Returns the PatchParams for the patches in array. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_C_o_n_t_r_o_l_V_e_r_t_i_c_e_s_T_o_t_a_l │ │ │ │ │ +int GetNumControlVerticesTotal() const │ │ │ │ │ +Returns the total number of control vertex indices in the table. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_8_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_F_V_a_r_C_h_a_n_n_e_l_s │ │ │ │ │ +int GetNumFVarChannels() const │ │ │ │ │ +Returns the number of face-varying channels. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_A_r_r_a_y_F_V_a_r_P_a_t_c_h_P_a_r_a_m_s │ │ │ │ │ +ConstPatchParamArray GetPatchArrayFVarPatchParams(int array, int channel=0) │ │ │ │ │ +const │ │ │ │ │ +Returns the face-varying for a given patch in array in channel. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_g_e_t_P_a_t_c_h_I_n_d_e_x │ │ │ │ │ +Index getPatchIndex(int array, int patch) const │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_L_o_c_a_l_P_o_i_n_t_s │ │ │ │ │ +int GetNumLocalPoints() const │ │ │ │ │ +Returns the number of local vertex points. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ +_L_o_c_a_l_P_o_i_n_t_V_a_r_y_i_n_g_S_t_e_n_c_i_l_P_r_e_c_i_s_i_o_n_M_a_t_c_h_e_s_T_y_p_e │ │ │ │ │ +bool LocalPointVaryingStencilPrecisionMatchesType() const │ │ │ │ │ +Tests if the precision of the stencil table to compute local point varying │ │ │ │ │ +values matches the given f... │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_A_r_r_a_y_V_e_r_t_i_c_e_s │ │ │ │ │ +ConstIndexArray GetPatchArrayVertices(int array) const │ │ │ │ │ +Returns the control vertex indices for the patches in array. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_P_t_e_x_F_a_c_e_s │ │ │ │ │ +int GetNumPtexFaces() const │ │ │ │ │ +Returns the total number of ptex faces in the mesh. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_9_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_V_a_l_u_e_s │ │ │ │ │ +ConstIndexArray GetFVarValues(int channel=0) const │ │ │ │ │ +Returns an array of value indices for the patches in channel. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_C_o_n_s_t_Q_u_a_d_O_f_f_s_e_t_s_A_r_r_a_y │ │ │ │ │ +Vtr::ConstArray< unsigned int > ConstQuadOffsetsArray │ │ │ │ │ +Accessors for the gregory patch evaluation buffers. These methods will be │ │ │ │ │ +deprecated. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_2_5_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_E_v_a_l_u_a_t_e_B_a_s_i_s │ │ │ │ │ +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... │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ +_G_e_t_L_o_c_a_l_P_o_i_n_t_F_a_c_e_V_a_r_y_i_n_g_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +StencilTableReal< REAL > const * GetLocalPointFaceVaryingStencilTable(int │ │ │ │ │ +channel=0) const │ │ │ │ │ +Returns the stencil table to compute local point face-varying values. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_P_a_t_c_h_e_s_T_o_t_a_l │ │ │ │ │ +int GetNumPatchesTotal() const │ │ │ │ │ +Returns the total number of patches stored in the table. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_P_a_r_a_m │ │ │ │ │ +PatchParam GetPatchParam(PatchHandle const &handle) const │ │ │ │ │ +Returns a PatchParam for the patch identified by handle. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_p_r_i_n_t │ │ │ │ │ +void print() const │ │ │ │ │ +debug helper │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ +_G_e_t_F_V_a_r_C_h_a_n_n_e_l_L_i_n_e_a_r_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +Sdc::Options::FVarLinearInterpolation GetFVarChannelLinearInterpolation(int │ │ │ │ │ +channel=0) const │ │ │ │ │ +Deprecated. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_S_h_a_r_p_n_e_s_s_I_n_d_e_x_T_a_b_l_e │ │ │ │ │ +std::vector< Index > const & GetSharpnessIndexTable() const │ │ │ │ │ +Returns a sharpness index table for each patch (if exists) │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_3_8_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_A_r_r_a_y_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ +PatchDescriptor GetPatchArrayDescriptor(int array) const │ │ │ │ │ +Returns the PatchDescriptor for the patches in array. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_P_a_t_c_h_T_a_b_l_e_B_u_i_l_d_e_r │ │ │ │ │ +friend class PatchTableBuilder │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_5_3_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_E_v_a_l_u_a_t_e_B_a_s_i_s_V_a_r_y_i_n_g │ │ │ │ │ +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 ... │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ +_G_e_t_L_o_c_a_l_P_o_i_n_t_V_a_r_y_i_n_g_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +StencilTable const * GetLocalPointVaryingStencilTable() const │ │ │ │ │ +Returns the stencil table to compute local point varying values. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_7_8_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_Q_u_a_d_O_f_f_s_e_t_s_T_a_b_l_e │ │ │ │ │ +std::vector< unsigned int > QuadOffsetsTable │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_3_8_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_V_e_r_t_i_c_e_s │ │ │ │ │ +ConstIndexArray GetPatchVertices(int array, int patch) const │ │ │ │ │ +Returns the control vertex indices for patch in array. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_F_V_a_r_P_a_t_c_h_P_a_r_a_m │ │ │ │ │ +PatchParam GetPatchFVarPatchParam(PatchHandle const &handle, int channel=0) │ │ │ │ │ +const │ │ │ │ │ +Returns the value indices for a given patch in channel. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_V_a_l_u_e_S_t_r_i_d_e │ │ │ │ │ +int GetFVarValueStride(int channel=0) const │ │ │ │ │ +Returns the stride between patches in the value index array of channel. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_P_a_r_a_m_s │ │ │ │ │ +ConstPatchParamArray GetFVarPatchParams(int channel=0) const │ │ │ │ │ +Returns an array of face-varying patch param for channel. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ +PatchDescriptor GetFVarPatchDescriptor(int channel=0) const │ │ │ │ │ +Returns the default/irregular patch descriptor for channel. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_L_o_c_a_l_P_o_i_n_t_s_V_a_r_y_i_n_g │ │ │ │ │ +int GetNumLocalPointsVarying() const │ │ │ │ │ +Returns the number of local varying points. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ +_L_o_c_a_l_P_o_i_n_t_S_t_e_n_c_i_l_P_r_e_c_i_s_i_o_n_M_a_t_c_h_e_s_T_y_p_e │ │ │ │ │ +bool LocalPointStencilPrecisionMatchesType() const │ │ │ │ │ +Tests if the precision of the stencil table to compute local point vertex │ │ │ │ │ +values matches the given fl... │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ +_G_e_t_L_o_c_a_l_P_o_i_n_t_V_a_r_y_i_n_g_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +StencilTableReal< REAL > const * GetLocalPointVaryingStencilTable() const │ │ │ │ │ +Returns the stencil table to compute local point varying values. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_L_o_c_a_l_P_o_i_n_t_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ +int GetNumLocalPointsFaceVarying(int channel=0) const │ │ │ │ │ +Returns the number of local face-varying points for channel. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_P_a_t_c_h_H_a_n_d_l_e │ │ │ │ │ +Handle that can be used as unique patch identifier within PatchTable. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_6_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_P_a_t_c_h_H_a_n_d_l_e_:_:_p_a_t_c_h_I_n_d_e_x │ │ │ │ │ +Index patchIndex │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_6_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_P_a_t_c_h_H_a_n_d_l_e_:_:_a_r_r_a_y_I_n_d_e_x │ │ │ │ │ +Index arrayIndex │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_6_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e_:_:_P_a_t_c_h_H_a_n_d_l_e_:_:_v_e_r_t_I_n_d_e_x │ │ │ │ │ +Index vertIndex │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_6_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e_R_e_a_l │ │ │ │ │ +Table of subdivision stencils. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_1_4_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +Stencil table class wrapping the template for compatibility. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_7_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_S_d_c_:_:_O_p_t_i_o_n_s_:_:_F_V_a_r_L_i_n_e_a_r_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +FVarLinearInterpolation │ │ │ │ │ +DDeeffiinniittiioonn _o_p_t_i_o_n_s_._h_:_6_0 │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_V_t_r_:_:_C_o_n_s_t_A_r_r_a_y │ │ │ │ │ DDeeffiinniittiioonn _a_r_r_a_y_._h_:_5_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_V_t_r_:_:_A_r_r_a_y │ │ │ │ │ +DDeeffiinniittiioonn _a_r_r_a_y_._h_:_1_0_5 │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _f_a_r │ │ │ │ │ - * _p_a_t_c_h_T_a_b_l_e_F_a_c_t_o_r_y_._h │ │ │ │ │ + * _p_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00734.html │ │ │ │ @@ -94,15 +94,15 @@ │ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │
patchMap.h File Reference
│ │ │ │ │ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include "../far/patchTable.h"
│ │ │ │ +#include "../far/patchTable.h"
│ │ │ │ #include <cassert>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00734_source.html │ │ │ │ @@ -321,16 +321,16 @@ │ │ │ │
PatchMap(PatchTable const &patchTable)
Constructor.
│ │ │ │
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
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ -
Handle that can be used as unique patch identifier within PatchTable.
Definition patchTable.h:60
│ │ │ │ +
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ +
Handle that can be used as unique patch identifier within PatchTable.
Definition patchTable.h:60
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Namespaces
│ │ │ │ -
sparseSelector.h File Reference
│ │ │ │ +
refinement.h File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ +#include "../sdc/types.h"
│ │ │ │ +#include "../sdc/options.h"
│ │ │ │ #include "../vtr/types.h"
│ │ │ │ -#include "../vtr/refinement.h"
│ │ │ │ +#include "../vtr/level.h"
│ │ │ │ #include <vector>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │

│ │ │ │ Classes

class  PatchMap
│ │ │ │ │ │ │ │ │ │ │ │ @@ -113,13 +115,13 @@ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,22 +1,24 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -sparseSelector.h File Reference │ │ │ │ │ +refinement.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ +#include "_._._/_s_d_c_/_t_y_p_e_s_._h" │ │ │ │ │ +#include "_._._/_s_d_c_/_o_p_t_i_o_n_s_._h" │ │ │ │ │ #include "_._._/_v_t_r_/_t_y_p_e_s_._h" │ │ │ │ │ -#include "_._._/_v_t_r_/_r_e_f_i_n_e_m_e_n_t_._h" │ │ │ │ │ +#include "_._._/_v_t_r_/_l_e_v_e_l_._h" │ │ │ │ │ #include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_V_t_r │ │ │ │ │   │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _v_t_r │ │ │ │ │ - * _s_p_a_r_s_e_S_e_l_e_c_t_o_r_._h │ │ │ │ │ + * _r_e_f_i_n_e_m_e_n_t_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00749_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/vtr/sparseSelector.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/vtr/refinement.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,15 +92,15 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
sparseSelector.h
│ │ │ │ +
refinement.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │
2// Copyright 2014 DreamWorks Animation LLC.
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │ @@ -118,98 +118,457 @@ │ │ │ │
17//
│ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │ -
24#ifndef OPENSUBDIV3_VTR_SPARSE_SELECTOR_H
│ │ │ │ -
25#define OPENSUBDIV3_VTR_SPARSE_SELECTOR_H
│ │ │ │ +
24#ifndef OPENSUBDIV3_VTR_REFINEMENT_H
│ │ │ │ +
25#define OPENSUBDIV3_VTR_REFINEMENT_H
│ │ │ │
26
│ │ │ │
27#include "../version.h"
│ │ │ │
28
│ │ │ │ -
29#include "../vtr/types.h"
│ │ │ │ -
30#include "../vtr/refinement.h"
│ │ │ │ -
31
│ │ │ │ -
32#include <vector>
│ │ │ │ +
29#include "../sdc/types.h"
│ │ │ │ +
30#include "../sdc/options.h"
│ │ │ │ +
31#include "../vtr/types.h"
│ │ │ │ +
32#include "../vtr/level.h"
│ │ │ │
33
│ │ │ │ -
34namespace OpenSubdiv {
│ │ │ │ -
35namespace OPENSUBDIV_VERSION {
│ │ │ │ -
36
│ │ │ │ -
37namespace Vtr {
│ │ │ │ -
38namespace internal {
│ │ │ │ -
39
│ │ │ │ -
40//
│ │ │ │ -
41// SparseSelector:
│ │ │ │ -
42// Class supporting "selection" of components in a Level for sparse Refinement.
│ │ │ │ -
43// The term "selection" here implies interest in the limit for that component, i.e.
│ │ │ │ -
44// the limit point for a selected vertex, the limit patch for a face, etc. So this
│ │ │ │ -
45// class is responsible for ensuring that all neighboring components required to
│ │ │ │ -
46// support the limit of those selected are included in the refinement.
│ │ │ │ +
34#include <vector>
│ │ │ │ +
35
│ │ │ │ +
36//
│ │ │ │ +
37// Declaration for the main refinement class (Refinement) and its pre-requisites:
│ │ │ │ +
38//
│ │ │ │ +
39namespace OpenSubdiv {
│ │ │ │ +
40namespace OPENSUBDIV_VERSION {
│ │ │ │ +
41
│ │ │ │ +
42namespace Vtr {
│ │ │ │ +
43namespace internal {
│ │ │ │ +
44
│ │ │ │ +
45class FVarRefinement;
│ │ │ │ +
46
│ │ │ │
47//
│ │ │ │ -
48// This class is associated with (and constructed given) a Refinement and its role
│ │ │ │ -
49// is to initialize that Refinement instance for eventual sparse refinement. So it
│ │ │ │ -
50// is a friend of and expected to modify the Refinement as part of the selection.
│ │ │ │ -
51// Given its simplicity and scope it may be worth nesting it in Vtr::Refinement.
│ │ │ │ -
52//
│ │ │ │ -
53// While all three component types -- vertices, edges and faces -- can be selected,
│ │ │ │ -
54// only selection of faces is currently used and actively supported as part of the
│ │ │ │ -
55// feature-adaptive refinement.
│ │ │ │ -
56//
│ │ │ │ -
57class SparseSelector {
│ │ │ │ -
58
│ │ │ │ -
59public:
│ │ │ │ -
60 SparseSelector(Refinement& refine) : _refine(&refine), _selected(false) { }
│ │ │ │ -
61 ~SparseSelector() { }
│ │ │ │ -
62
│ │ │ │ -
63 void setRefinement(Refinement& refine) { _refine = &refine; }
│ │ │ │ -
64 Refinement& getRefinement() const { return *_refine; }
│ │ │ │ -
65
│ │ │ │ -
66 bool isSelectionEmpty() const { return !_selected; }
│ │ │ │ -
67
│ │ │ │ -
68 //
│ │ │ │ -
69 // Methods for selecting (and marking) components for refinement. All component indices
│ │ │ │ -
70 // refer to components in the parent:
│ │ │ │ -
71 //
│ │ │ │ -
72 void selectVertex(Index pVertex);
│ │ │ │ -
73 void selectEdge( Index pEdge);
│ │ │ │ -
74 void selectFace( Index pFace);
│ │ │ │ -
75
│ │ │ │ -
76private:
│ │ │ │ -
77 SparseSelector() : _refine(0), _selected(false) { }
│ │ │ │ +
48// Refinement:
│ │ │ │ +
49// A refinement is a mapping between two levels -- relating the components in the original
│ │ │ │ +
50// (parent) level to the one refined (child). The refinement may be complete (uniform) or sparse
│ │ │ │ +
51// (adaptive or otherwise selective), so not all components in the parent level will spawn
│ │ │ │ +
52// components in the child level.
│ │ │ │ +
53//
│ │ │ │ +
54// Refinement is an abstract class and expects subclasses corresponding to the different types
│ │ │ │ +
55// of topological splits that the supported subdivision schemes collectively require, i.e. those
│ │ │ │ +
56// listed in Sdc::SplitType. Note the virtual requirements expected of the subclasses in the list
│ │ │ │ +
57// of protected methods -- they differ mainly in the topology that is created in the child Level
│ │ │ │ +
58// and not the propagation of tags through refinement, subdivision of sharpness values or the
│ │ │ │ +
59// treatment of face-varying data. The primary subclasses are QuadRefinement and TriRefinement.
│ │ │ │ +
60//
│ │ │ │ +
61// At a high level, all that is necessary in terms of interface is to construct, initialize
│ │ │ │ +
62// (linking the two levels), optionally select components for sparse refinement (via use of the
│ │ │ │ +
63// SparseSelector) and call the refine() method. This usage is expected of Far::TopologyRefiner.
│ │ │ │ +
64//
│ │ │ │ +
65// Since we really want this class to be restricted from public access eventually, all methods
│ │ │ │ +
66// begin with lower case (as is the convention for protected methods) and the list of friends
│ │ │ │ +
67// will be maintained more strictly.
│ │ │ │ +
68//
│ │ │ │ +
69class Refinement {
│ │ │ │ +
70
│ │ │ │ +
71public:
│ │ │ │ +
72 Refinement(Level const & parent, Level & child, Sdc::Options const& schemeOptions);
│ │ │ │ +
73 virtual ~Refinement();
│ │ │ │ +
74
│ │ │ │ +
75 Level const& parent() const { return *_parent; }
│ │ │ │ +
76 Level const& child() const { return *_child; }
│ │ │ │ +
77 Level& child() { return *_child; }
│ │ │ │
78
│ │ │ │ -
79 bool wasVertexSelected(Index pVertex) const { return _refine->getParentVertexSparseTag(pVertex)._selected; }
│ │ │ │ -
80 bool wasEdgeSelected( Index pEdge) const { return _refine->getParentEdgeSparseTag(pEdge)._selected; }
│ │ │ │ -
81 bool wasFaceSelected( Index pFace) const { return _refine->getParentFaceSparseTag(pFace)._selected; }
│ │ │ │ +
79 Sdc::Split getSplitType() const { return _splitType; }
│ │ │ │ +
80 int getRegularFaceSize() const { return _regFaceSize; }
│ │ │ │ +
81 Sdc::Options getOptions() const { return _options; }
│ │ │ │
82
│ │ │ │ -
83 void markVertexSelected(Index pVertex) const { _refine->getParentVertexSparseTag(pVertex)._selected = true; }
│ │ │ │ -
84 void markEdgeSelected( Index pEdge) const { _refine->getParentEdgeSparseTag(pEdge)._selected = true; }
│ │ │ │ -
85 void markFaceSelected( Index pFace) const { _refine->getParentFaceSparseTag(pFace)._selected = true; }
│ │ │ │ -
86
│ │ │ │ -
87 void initializeSelection();
│ │ │ │ -
88
│ │ │ │ -
89private:
│ │ │ │ -
90 Refinement* _refine;
│ │ │ │ -
91 bool _selected;
│ │ │ │ -
92};
│ │ │ │ -
93
│ │ │ │ -
94} // end namespace internal
│ │ │ │ -
95} // end namespace Vtr
│ │ │ │ -
96
│ │ │ │ -
97} // end namespace OPENSUBDIV_VERSION
│ │ │ │ -
98using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
99} // end namespace OpenSubdiv
│ │ │ │ -
100
│ │ │ │ -
101#endif /* OPENSUBDIV3_VTR_SPARSE_SELECTOR_H */
│ │ │ │ +
83 // Face-varying:
│ │ │ │ +
84 int getNumFVarChannels() const { return (int) _fvarChannels.size(); }
│ │ │ │ +
85
│ │ │ │ +
86 FVarRefinement const & getFVarRefinement(int c) const { return *_fvarChannels[c]; }
│ │ │ │ +
87
│ │ │ │ +
88 //
│ │ │ │ +
89 // Options associated with the actual refinement operation, which may end up
│ │ │ │ +
90 // quite involved if we want to allow for the refinement of data that is not
│ │ │ │ +
91 // of interest to be suppressed. For now we have:
│ │ │ │ +
92 //
│ │ │ │ +
93 // "sparse": the alternative to uniform refinement, which requires that
│ │ │ │ +
94 // components be previously selected/marked to be included.
│ │ │ │ +
95 //
│ │ │ │ +
96 // "minimal topology": this is one that may get broken down into a finer
│ │ │ │ +
97 // set of options. It suppresses "full topology" in the child level
│ │ │ │ +
98 // and only generates what is minimally necessary for interpolation --
│ │ │ │ +
99 // which requires at least the face-vertices for faces, but also the
│ │ │ │ +
100 // vertex-faces for any face-varying channels present. So it will
│ │ │ │ +
101 // generate one or two of the six possible topological relations.
│ │ │ │ +
102 //
│ │ │ │ +
103 // These are strictly controlled right now, e.g. for sparse refinement, we
│ │ │ │ +
104 // currently enforce full topology at the finest level to allow for subsequent
│ │ │ │ +
105 // patch construction.
│ │ │ │ +
106 //
│ │ │ │ +
107 struct Options {
│ │ │ │ +
108 Options() : _sparse(false),
│ │ │ │ +
109 _faceVertsFirst(false),
│ │ │ │ +
110 _minimalTopology(false)
│ │ │ │ +
111 { }
│ │ │ │ +
112
│ │ │ │ +
113 unsigned int _sparse : 1;
│ │ │ │ +
114 unsigned int _faceVertsFirst : 1;
│ │ │ │ +
115 unsigned int _minimalTopology : 1;
│ │ │ │ +
116
│ │ │ │ +
117 // Still under consideration:
│ │ │ │ +
118 //unsigned int _childToParentMap : 1;
│ │ │ │ +
119 };
│ │ │ │ +
120
│ │ │ │ +
121 void refine(Options options = Options());
│ │ │ │ +
122
│ │ │ │ +
123 bool hasFaceVerticesFirst() const { return _faceVertsFirst; }
│ │ │ │ +
124
│ │ │ │ +
125public:
│ │ │ │ +
126 //
│ │ │ │ +
127 // Access to members -- some testing classes (involving vertex interpolation)
│ │ │ │ +
128 // currently make use of these:
│ │ │ │ +
129 //
│ │ │ │ +
130 int getNumChildFacesFromFaces() const { return _childFaceFromFaceCount; }
│ │ │ │ +
131 int getNumChildEdgesFromFaces() const { return _childEdgeFromFaceCount; }
│ │ │ │ +
132 int getNumChildEdgesFromEdges() const { return _childEdgeFromEdgeCount; }
│ │ │ │ +
133 int getNumChildVerticesFromFaces() const { return _childVertFromFaceCount; }
│ │ │ │ +
134 int getNumChildVerticesFromEdges() const { return _childVertFromEdgeCount; }
│ │ │ │ +
135 int getNumChildVerticesFromVertices() const { return _childVertFromVertCount; }
│ │ │ │ +
136
│ │ │ │ +
137 Index getFirstChildFaceFromFaces() const { return _firstChildFaceFromFace; }
│ │ │ │ +
138 Index getFirstChildEdgeFromFaces() const { return _firstChildEdgeFromFace; }
│ │ │ │ +
139 Index getFirstChildEdgeFromEdges() const { return _firstChildEdgeFromEdge; }
│ │ │ │ +
140 Index getFirstChildVertexFromFaces() const { return _firstChildVertFromFace; }
│ │ │ │ +
141 Index getFirstChildVertexFromEdges() const { return _firstChildVertFromEdge; }
│ │ │ │ +
142 Index getFirstChildVertexFromVertices() const { return _firstChildVertFromVert; }
│ │ │ │ +
143
│ │ │ │ +
144 Index getFaceChildVertex(Index f) const { return _faceChildVertIndex[f]; }
│ │ │ │ +
145 Index getEdgeChildVertex(Index e) const { return _edgeChildVertIndex[e]; }
│ │ │ │ +
146 Index getVertexChildVertex(Index v) const { return _vertChildVertIndex[v]; }
│ │ │ │ +
147
│ │ │ │ +
148 ConstIndexArray getFaceChildFaces(Index parentFace) const;
│ │ │ │ +
149 ConstIndexArray getFaceChildEdges(Index parentFace) const;
│ │ │ │ +
150 ConstIndexArray getEdgeChildEdges(Index parentEdge) const;
│ │ │ │ +
151
│ │ │ │ +
152 // Child-to-parent relationships
│ │ │ │ +
153 bool isChildVertexComplete(Index v) const { return ! _childVertexTag[v]._incomplete; }
│ │ │ │ +
154
│ │ │ │ +
155 Index getChildFaceParentFace(Index f) const { return _childFaceParentIndex[f]; }
│ │ │ │ +
156 int getChildFaceInParentFace(Index f) const { return _childFaceTag[f]._indexInParent; }
│ │ │ │ +
157
│ │ │ │ +
158 Index getChildEdgeParentIndex(Index e) const { return _childEdgeParentIndex[e]; }
│ │ │ │ +
159
│ │ │ │ +
160 Index getChildVertexParentIndex(Index v) const { return _childVertexParentIndex[v]; }
│ │ │ │ +
161
│ │ │ │ +
162//
│ │ │ │ +
163// Modifiers intended for internal/protected use:
│ │ │ │ +
164//
│ │ │ │ +
165public:
│ │ │ │ +
166
│ │ │ │ +
167 IndexArray getFaceChildFaces(Index parentFace);
│ │ │ │ +
168 IndexArray getFaceChildEdges(Index parentFace);
│ │ │ │ +
169 IndexArray getEdgeChildEdges(Index parentEdge);
│ │ │ │ +
170
│ │ │ │ +
171public:
│ │ │ │ +
172 //
│ │ │ │ +
173 // Tags have now been added per-component in Level, but there is additional need to tag
│ │ │ │ +
174 // components within Refinement -- we can't tag the parent level components for any
│ │ │ │ +
175 // refinement (in order to keep it const) and tags associated with children that are
│ │ │ │ +
176 // specific to the child-to-parent mapping may not be warranted in the child level.
│ │ │ │ +
177 //
│ │ │ │ +
178 // Parent tags are only required for sparse refinement. The main property to tag is
│ │ │ │ +
179 // whether a component was selected, and so a single SparseTag is used for all three
│ │ │ │ +
180 // component types. Tagging if a component is "transitional" is also useful. This may
│ │ │ │ +
181 // only be necessary for edges but is currently packed into a mask per-edge for faces,
│ │ │ │ +
182 // which could be deferred, in which case "transitional" could be a single bit.
│ │ │ │ +
183 //
│ │ │ │ +
184 // Child tags are part of the child-to-parent mapping, which consists of the parent
│ │ │ │ +
185 // component index for each child component, plus a tag for the child indicating more
│ │ │ │ +
186 // about its relationship to its parent, e.g. is it completely defined, what the parent
│ │ │ │ +
187 // component type is, what is the index of the child within its parent, etc.
│ │ │ │ +
188 //
│ │ │ │ +
189 struct SparseTag {
│ │ │ │ +
190 SparseTag() : _selected(0), _transitional(0) { }
│ │ │ │ +
191
│ │ │ │ +
192 unsigned char _selected : 1; // component specifically selected for refinement
│ │ │ │ +
193 unsigned char _transitional : 4; // adjacent to a refined component (4-bits for face)
│ │ │ │ +
194 };
│ │ │ │ +
195
│ │ │ │ +
196 struct ChildTag {
│ │ │ │ +
197 ChildTag() { }
│ │ │ │ +
198
│ │ │ │ +
199 unsigned char _incomplete : 1; // incomplete neighborhood to represent limit of parent
│ │ │ │ +
200 unsigned char _parentType : 2; // type of parent component: vertex, edge or face
│ │ │ │ +
201 unsigned char _indexInParent : 2; // index of child wrt parent: 0-3, or iterative if N > 4
│ │ │ │ +
202 };
│ │ │ │ +
203
│ │ │ │ +
204 // Methods to access and modify tags:
│ │ │ │ +
205 SparseTag const & getParentFaceSparseTag( Index f) const { return _parentFaceTag[f]; }
│ │ │ │ +
206 SparseTag const & getParentEdgeSparseTag( Index e) const { return _parentEdgeTag[e]; }
│ │ │ │ +
207 SparseTag const & getParentVertexSparseTag(Index v) const { return _parentVertexTag[v]; }
│ │ │ │ +
208
│ │ │ │ +
209 SparseTag & getParentFaceSparseTag( Index f) { return _parentFaceTag[f]; }
│ │ │ │ +
210 SparseTag & getParentEdgeSparseTag( Index e) { return _parentEdgeTag[e]; }
│ │ │ │ +
211 SparseTag & getParentVertexSparseTag(Index v) { return _parentVertexTag[v]; }
│ │ │ │ +
212
│ │ │ │ +
213 ChildTag const & getChildFaceTag( Index f) const { return _childFaceTag[f]; }
│ │ │ │ +
214 ChildTag const & getChildEdgeTag( Index e) const { return _childEdgeTag[e]; }
│ │ │ │ +
215 ChildTag const & getChildVertexTag(Index v) const { return _childVertexTag[v]; }
│ │ │ │ +
216
│ │ │ │ +
217 ChildTag & getChildFaceTag( Index f) { return _childFaceTag[f]; }
│ │ │ │ +
218 ChildTag & getChildEdgeTag( Index e) { return _childEdgeTag[e]; }
│ │ │ │ +
219 ChildTag & getChildVertexTag(Index v) { return _childVertexTag[v]; }
│ │ │ │ +
220
│ │ │ │ +
221// Remaining methods should really be protected -- for use by subclasses...
│ │ │ │ +
222public:
│ │ │ │ +
223 //
│ │ │ │ +
224 // Methods involved in constructing the parent-to-child mapping -- when the
│ │ │ │ +
225 // refinement is sparse, additional methods are needed to identify the selection:
│ │ │ │ +
226 //
│ │ │ │ +
227 void populateParentToChildMapping();
│ │ │ │ +
228 void populateParentChildIndices();
│ │ │ │ +
229 void printParentToChildMapping() const;
│ │ │ │ +
230
│ │ │ │ +
231 virtual void allocateParentChildIndices() = 0;
│ │ │ │ +
232
│ │ │ │ +
233 // Supporting method for sparse refinement:
│ │ │ │ +
234 void initializeSparseSelectionTags();
│ │ │ │ +
235 void markSparseChildComponentIndices();
│ │ │ │ +
236 void markSparseVertexChildren();
│ │ │ │ +
237 void markSparseEdgeChildren();
│ │ │ │ +
238
│ │ │ │ +
239 virtual void markSparseFaceChildren() = 0;
│ │ │ │ +
240
│ │ │ │ +
241 void initializeChildComponentCounts();
│ │ │ │ +
242
│ │ │ │ +
243 //
│ │ │ │ +
244 // Methods involved in constructing the child-to-parent mapping:
│ │ │ │ +
245 //
│ │ │ │ +
246 void populateChildToParentMapping();
│ │ │ │ +
247
│ │ │ │ +
248 void populateFaceParentVectors(ChildTag const initialChildTags[2][4]);
│ │ │ │ +
249 void populateFaceParentFromParentFaces(ChildTag const initialChildTags[2][4]);
│ │ │ │ +
250
│ │ │ │ +
251 void populateEdgeParentVectors(ChildTag const initialChildTags[2][4]);
│ │ │ │ +
252 void populateEdgeParentFromParentFaces(ChildTag const initialChildTags[2][4]);
│ │ │ │ +
253 void populateEdgeParentFromParentEdges(ChildTag const initialChildTags[2][4]);
│ │ │ │ +
254
│ │ │ │ +
255 void populateVertexParentVectors(ChildTag const initialChildTags[2][4]);
│ │ │ │ +
256 void populateVertexParentFromParentFaces(ChildTag const initialChildTags[2][4]);
│ │ │ │ +
257 void populateVertexParentFromParentEdges(ChildTag const initialChildTags[2][4]);
│ │ │ │ +
258 void populateVertexParentFromParentVertices(ChildTag const initialChildTags[2][4]);
│ │ │ │ +
259
│ │ │ │ +
260 //
│ │ │ │ +
261 // Methods involved in propagating component tags from parent to child:
│ │ │ │ +
262 //
│ │ │ │ +
263 void propagateComponentTags();
│ │ │ │ +
264
│ │ │ │ +
265 void populateFaceTagVectors();
│ │ │ │ +
266 void populateFaceTagsFromParentFaces();
│ │ │ │ +
267
│ │ │ │ +
268 void populateEdgeTagVectors();
│ │ │ │ +
269 void populateEdgeTagsFromParentFaces();
│ │ │ │ +
270 void populateEdgeTagsFromParentEdges();
│ │ │ │ +
271
│ │ │ │ +
272 void populateVertexTagVectors();
│ │ │ │ +
273 void populateVertexTagsFromParentFaces();
│ │ │ │ +
274 void populateVertexTagsFromParentEdges();
│ │ │ │ +
275 void populateVertexTagsFromParentVertices();
│ │ │ │ +
276
│ │ │ │ +
277 //
│ │ │ │ +
278 // Methods (and types) involved in subdividing the topology -- though not
│ │ │ │ +
279 // fully exploited, any subset of the 6 relations can be generated:
│ │ │ │ +
280 //
│ │ │ │ +
281 struct Relations {
│ │ │ │ +
282 unsigned int _faceVertices : 1;
│ │ │ │ +
283 unsigned int _faceEdges : 1;
│ │ │ │ +
284 unsigned int _edgeVertices : 1;
│ │ │ │ +
285 unsigned int _edgeFaces : 1;
│ │ │ │ +
286 unsigned int _vertexFaces : 1;
│ │ │ │ +
287 unsigned int _vertexEdges : 1;
│ │ │ │ +
288
│ │ │ │ +
289 void setAll(bool enable) {
│ │ │ │ +
290 _faceVertices = enable;
│ │ │ │ +
291 _faceEdges = enable;
│ │ │ │ +
292 _edgeVertices = enable;
│ │ │ │ +
293 _edgeFaces = enable;
│ │ │ │ +
294 _vertexFaces = enable;
│ │ │ │ +
295 _vertexEdges = enable;
│ │ │ │ +
296 }
│ │ │ │ +
297 };
│ │ │ │ +
298
│ │ │ │ +
299 void subdivideTopology(Relations const& relationsToSubdivide);
│ │ │ │ +
300
│ │ │ │ +
301 virtual void populateFaceVertexRelation() = 0;
│ │ │ │ +
302 virtual void populateFaceEdgeRelation() = 0;
│ │ │ │ +
303 virtual void populateEdgeVertexRelation() = 0;
│ │ │ │ +
304 virtual void populateEdgeFaceRelation() = 0;
│ │ │ │ +
305 virtual void populateVertexFaceRelation() = 0;
│ │ │ │ +
306 virtual void populateVertexEdgeRelation() = 0;
│ │ │ │ +
307
│ │ │ │ +
308 //
│ │ │ │ +
309 // Methods involved in subdividing and inspecting sharpness values:
│ │ │ │ +
310 //
│ │ │ │ +
311 void subdivideSharpnessValues();
│ │ │ │ +
312
│ │ │ │ +
313 void subdivideVertexSharpness();
│ │ │ │ +
314 void subdivideEdgeSharpness();
│ │ │ │ +
315 void reclassifySemisharpVertices();
│ │ │ │ +
316
│ │ │ │ +
317 //
│ │ │ │ +
318 // Methods involved in subdividing face-varying topology:
│ │ │ │ +
319 //
│ │ │ │ +
320 void subdivideFVarChannels();
│ │ │ │ +
321
│ │ │ │ +
322protected:
│ │ │ │ +
323 // A debug method of Level prints a Refinement (should really change this)
│ │ │ │ +
324 friend void Level::print(const Refinement *) const;
│ │ │ │ +
325
│ │ │ │ +
326 //
│ │ │ │ +
327 // Data members -- the logical grouping of some of these (and methods that make use
│ │ │ │ +
328 // of them) may lead to grouping them into a few utility classes or structs...
│ │ │ │ +
329 //
│ │ │ │ +
330
│ │ │ │ +
331 // Defined on construction:
│ │ │ │ +
332 Level const * _parent;
│ │ │ │ +
333 Level * _child;
│ │ │ │ +
334 Sdc::Options _options;
│ │ │ │ +
335
│ │ │ │ +
336 // Defined by the subclass:
│ │ │ │ +
337 Sdc::Split _splitType;
│ │ │ │ +
338 int _regFaceSize;
│ │ │ │ +
339
│ │ │ │ +
340 // Determined by the refinement options:
│ │ │ │ +
341 bool _uniform;
│ │ │ │ +
342 bool _faceVertsFirst;
│ │ │ │ +
343
│ │ │ │ +
344 //
│ │ │ │ +
345 // Inventory and ordering of the types of child components:
│ │ │ │ +
346 //
│ │ │ │ +
347 int _childFaceFromFaceCount; // arguably redundant (all faces originate from faces)
│ │ │ │ +
348 int _childEdgeFromFaceCount;
│ │ │ │ +
349 int _childEdgeFromEdgeCount;
│ │ │ │ +
350 int _childVertFromFaceCount;
│ │ │ │ +
351 int _childVertFromEdgeCount;
│ │ │ │ +
352 int _childVertFromVertCount;
│ │ │ │ +
353
│ │ │ │ +
354 int _firstChildFaceFromFace; // arguably redundant (all faces originate from faces)
│ │ │ │ +
355 int _firstChildEdgeFromFace;
│ │ │ │ +
356 int _firstChildEdgeFromEdge;
│ │ │ │ +
357 int _firstChildVertFromFace;
│ │ │ │ +
358 int _firstChildVertFromEdge;
│ │ │ │ +
359 int _firstChildVertFromVert;
│ │ │ │ +
360
│ │ │ │ +
361 //
│ │ │ │ +
362 // The parent-to-child mapping:
│ │ │ │ +
363 // These are vectors sized according to the number of parent components (and
│ │ │ │ +
364 // their topology) that contain references/indices to the child components that
│ │ │ │ +
365 // result from them by refinement. When refinement is sparse, parent components
│ │ │ │ +
366 // that have not spawned all child components will have their missing children
│ │ │ │ +
367 // marked as invalid.
│ │ │ │ +
368 //
│ │ │ │ +
369 // NOTE the "Array" members here. Often vectors within the Level can be shared
│ │ │ │ +
370 // with the Refinement, and an Array instance is used to do so. If not shared
│ │ │ │ +
371 // the subclass just initializes the Array members after allocating its own local
│ │ │ │ +
372 // vector members.
│ │ │ │ +
373 //
│ │ │ │ +
374 IndexArray _faceChildFaceCountsAndOffsets;
│ │ │ │ +
375 IndexArray _faceChildEdgeCountsAndOffsets;
│ │ │ │ +
376
│ │ │ │ +
377 IndexVector _faceChildFaceIndices; // *cannot* always use face-vert counts/offsets
│ │ │ │ +
378 IndexVector _faceChildEdgeIndices; // can use face-vert counts/offsets
│ │ │ │ +
379 IndexVector _faceChildVertIndex;
│ │ │ │ +
380
│ │ │ │ +
381 IndexVector _edgeChildEdgeIndices; // trivial/corresponding pair for each
│ │ │ │ +
382 IndexVector _edgeChildVertIndex;
│ │ │ │ +
383
│ │ │ │ +
384 IndexVector _vertChildVertIndex;
│ │ │ │ +
385
│ │ │ │ +
386 //
│ │ │ │ +
387 // The child-to-parent mapping:
│ │ │ │ +
388 //
│ │ │ │ +
389 IndexVector _childFaceParentIndex;
│ │ │ │ +
390 IndexVector _childEdgeParentIndex;
│ │ │ │ +
391 IndexVector _childVertexParentIndex;
│ │ │ │ +
392
│ │ │ │ +
393 std::vector<ChildTag> _childFaceTag;
│ │ │ │ +
394 std::vector<ChildTag> _childEdgeTag;
│ │ │ │ +
395 std::vector<ChildTag> _childVertexTag;
│ │ │ │ +
396
│ │ │ │ +
397 //
│ │ │ │ +
398 // Tags for sparse selection of components:
│ │ │ │ +
399 //
│ │ │ │ +
400 std::vector<SparseTag> _parentFaceTag;
│ │ │ │ +
401 std::vector<SparseTag> _parentEdgeTag;
│ │ │ │ +
402 std::vector<SparseTag> _parentVertexTag;
│ │ │ │ +
403
│ │ │ │ +
404 //
│ │ │ │ +
405 // Refinement data for face-varying channels present in the Levels being refined:
│ │ │ │ +
406 //
│ │ │ │ +
407 std::vector<FVarRefinement*> _fvarChannels;
│ │ │ │ +
408};
│ │ │ │ +
409
│ │ │ │ +
410inline ConstIndexArray
│ │ │ │ +
411Refinement::getFaceChildFaces(Index parentFace) const {
│ │ │ │ +
412
│ │ │ │ +
413 return ConstIndexArray(&_faceChildFaceIndices[_faceChildFaceCountsAndOffsets[2*parentFace+1]],
│ │ │ │ +
414 _faceChildFaceCountsAndOffsets[2*parentFace]);
│ │ │ │ +
415}
│ │ │ │ +
416
│ │ │ │ +
417inline IndexArray
│ │ │ │ +
418Refinement::getFaceChildFaces(Index parentFace) {
│ │ │ │ +
419
│ │ │ │ +
420 return IndexArray(&_faceChildFaceIndices[_faceChildFaceCountsAndOffsets[2*parentFace+1]],
│ │ │ │ +
421 _faceChildFaceCountsAndOffsets[2*parentFace]);
│ │ │ │ +
422}
│ │ │ │ +
423
│ │ │ │ +
424inline ConstIndexArray
│ │ │ │ +
425Refinement::getFaceChildEdges(Index parentFace) const {
│ │ │ │ +
426
│ │ │ │ +
427 return ConstIndexArray(&_faceChildEdgeIndices[_faceChildEdgeCountsAndOffsets[2*parentFace+1]],
│ │ │ │ +
428 _faceChildEdgeCountsAndOffsets[2*parentFace]);
│ │ │ │ +
429}
│ │ │ │ +
430inline IndexArray
│ │ │ │ +
431Refinement::getFaceChildEdges(Index parentFace) {
│ │ │ │ +
432
│ │ │ │ +
433 return IndexArray(&_faceChildEdgeIndices[_faceChildEdgeCountsAndOffsets[2*parentFace+1]],
│ │ │ │ +
434 _faceChildEdgeCountsAndOffsets[2*parentFace]);
│ │ │ │ +
435}
│ │ │ │ +
436
│ │ │ │ +
437inline ConstIndexArray
│ │ │ │ +
438Refinement::getEdgeChildEdges(Index parentEdge) const {
│ │ │ │ +
439
│ │ │ │ +
440 return ConstIndexArray(&_edgeChildEdgeIndices[parentEdge*2], 2);
│ │ │ │ +
441}
│ │ │ │ +
442
│ │ │ │ +
443inline IndexArray
│ │ │ │ +
444Refinement::getEdgeChildEdges(Index parentEdge) {
│ │ │ │ +
445
│ │ │ │ +
446 return IndexArray(&_edgeChildEdgeIndices[parentEdge*2], 2);
│ │ │ │ +
447}
│ │ │ │ +
448
│ │ │ │ +
449} // end namespace internal
│ │ │ │ +
450} // end namespace Vtr
│ │ │ │ +
451
│ │ │ │ +
452} // end namespace OPENSUBDIV_VERSION
│ │ │ │ +
453using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
454} // end namespace OpenSubdiv
│ │ │ │ +
455
│ │ │ │ +
456#endif /* OPENSUBDIV3_VTR_REFINEMENT_H */
│ │ │ │ │ │ │ │ │ │ │ │ +
std::vector< Index > IndexVector
Definition types.h:77
│ │ │ │ +
ConstArray< Index > ConstIndexArray
Definition types.h:80
│ │ │ │ + │ │ │ │ +
Split
Enumerated type for all face splitting schemes.
Definition types.h:47
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,12 +1,12 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -sparseSelector.h │ │ │ │ │ +refinement.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ 2// Copyright 2014 DreamWorks Animation LLC. │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ @@ -23,111 +23,545 @@ │ │ │ │ │ 17// │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ -24#ifndef OPENSUBDIV3_VTR_SPARSE_SELECTOR_H │ │ │ │ │ -25#define OPENSUBDIV3_VTR_SPARSE_SELECTOR_H │ │ │ │ │ +24#ifndef OPENSUBDIV3_VTR_REFINEMENT_H │ │ │ │ │ +25#define OPENSUBDIV3_VTR_REFINEMENT_H │ │ │ │ │ 26 │ │ │ │ │ 27#include "../version.h" │ │ │ │ │ 28 │ │ │ │ │ -29#include "../vtr/types.h" │ │ │ │ │ -30#include "../vtr/refinement.h" │ │ │ │ │ -31 │ │ │ │ │ -32#include │ │ │ │ │ +29#include "../sdc/types.h" │ │ │ │ │ +30#include "../sdc/options.h" │ │ │ │ │ +31#include "../vtr/types.h" │ │ │ │ │ +32#include "../vtr/level.h" │ │ │ │ │ 33 │ │ │ │ │ -34namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ -35namespace OPENSUBDIV_VERSION { │ │ │ │ │ -36 │ │ │ │ │ -37namespace Vtr { │ │ │ │ │ -38namespace internal { │ │ │ │ │ -39 │ │ │ │ │ -40// │ │ │ │ │ -41// SparseSelector: │ │ │ │ │ -42// Class supporting "selection" of components in a Level for sparse │ │ │ │ │ -Refinement. │ │ │ │ │ -43// The term "selection" here implies interest in the limit for that │ │ │ │ │ -component, i.e. │ │ │ │ │ -44// the limit point for a selected vertex, the limit patch for a face, etc. So │ │ │ │ │ -this │ │ │ │ │ -45// class is responsible for ensuring that all neighboring components required │ │ │ │ │ -to │ │ │ │ │ -46// support the limit of those selected are included in the refinement. │ │ │ │ │ +34#include │ │ │ │ │ +35 │ │ │ │ │ +36// │ │ │ │ │ +37// Declaration for the main refinement class (Refinement) and its pre- │ │ │ │ │ +requisites: │ │ │ │ │ +38// │ │ │ │ │ +39namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ +40namespace OPENSUBDIV_VERSION { │ │ │ │ │ +41 │ │ │ │ │ +42namespace Vtr { │ │ │ │ │ +43namespace internal { │ │ │ │ │ +44 │ │ │ │ │ +45class FVarRefinement; │ │ │ │ │ +46 │ │ │ │ │ 47// │ │ │ │ │ -48// This class is associated with (and constructed given) a Refinement and its │ │ │ │ │ -role │ │ │ │ │ -49// is to initialize that Refinement instance for eventual sparse refinement. │ │ │ │ │ -So it │ │ │ │ │ -50// is a friend of and expected to modify the Refinement as part of the │ │ │ │ │ -selection. │ │ │ │ │ -51// Given its simplicity and scope it may be worth nesting it in Vtr:: │ │ │ │ │ -Refinement. │ │ │ │ │ -52// │ │ │ │ │ -53// While all three component types -- vertices, edges and faces -- can be │ │ │ │ │ -selected, │ │ │ │ │ -54// only selection of faces is currently used and actively supported as part │ │ │ │ │ -of the │ │ │ │ │ -55// feature-adaptive refinement. │ │ │ │ │ -56// │ │ │ │ │ -57class SparseSelector { │ │ │ │ │ -58 │ │ │ │ │ -59public: │ │ │ │ │ -60 SparseSelector(Refinement& refine) : _refine(&refine), _selected(false) { } │ │ │ │ │ -61 ~SparseSelector() { } │ │ │ │ │ -62 │ │ │ │ │ -63 void setRefinement(Refinement& refine) { _refine = &refine; } │ │ │ │ │ -64 Refinement& getRefinement() const { return *_refine; } │ │ │ │ │ -65 │ │ │ │ │ -66 bool isSelectionEmpty() const { return !_selected; } │ │ │ │ │ -67 │ │ │ │ │ -68 // │ │ │ │ │ -69 // Methods for selecting (and marking) components for refinement. All │ │ │ │ │ -component indices │ │ │ │ │ -70 // refer to components in the parent: │ │ │ │ │ -71 // │ │ │ │ │ -72 void selectVertex(_I_n_d_e_x pVertex); │ │ │ │ │ -73 void selectEdge( _I_n_d_e_x pEdge); │ │ │ │ │ -74 void selectFace( _I_n_d_e_x pFace); │ │ │ │ │ -75 │ │ │ │ │ -76private: │ │ │ │ │ -77 SparseSelector() : _refine(0), _selected(false) { } │ │ │ │ │ +48// Refinement: │ │ │ │ │ +49// A refinement is a mapping between two levels -- relating the components in │ │ │ │ │ +the original │ │ │ │ │ +50// (parent) level to the one refined (child). The refinement may be complete │ │ │ │ │ +(uniform) or sparse │ │ │ │ │ +51// (adaptive or otherwise selective), so not all components in the parent │ │ │ │ │ +level will spawn │ │ │ │ │ +52// components in the child level. │ │ │ │ │ +53// │ │ │ │ │ +54// Refinement is an abstract class and expects subclasses corresponding to │ │ │ │ │ +the different types │ │ │ │ │ +55// of topological splits that the supported subdivision schemes collectively │ │ │ │ │ +require, i.e. those │ │ │ │ │ +56// listed in Sdc::SplitType. Note the virtual requirements expected of the │ │ │ │ │ +subclasses in the list │ │ │ │ │ +57// of protected methods -- they differ mainly in the topology that is created │ │ │ │ │ +in the child Level │ │ │ │ │ +58// and not the propagation of tags through refinement, subdivision of │ │ │ │ │ +sharpness values or the │ │ │ │ │ +59// treatment of face-varying data. The primary subclasses are QuadRefinement │ │ │ │ │ +and TriRefinement. │ │ │ │ │ +60// │ │ │ │ │ +61// At a high level, all that is necessary in terms of interface is to │ │ │ │ │ +construct, initialize │ │ │ │ │ +62// (linking the two levels), optionally select components for sparse │ │ │ │ │ +refinement (via use of the │ │ │ │ │ +63// SparseSelector) and call the refine() method. This usage is expected of │ │ │ │ │ +Far::TopologyRefiner. │ │ │ │ │ +64// │ │ │ │ │ +65// Since we really want this class to be restricted from public access │ │ │ │ │ +eventually, all methods │ │ │ │ │ +66// begin with lower case (as is the convention for protected methods) and the │ │ │ │ │ +list of friends │ │ │ │ │ +67// will be maintained more strictly. │ │ │ │ │ +68// │ │ │ │ │ +69class Refinement { │ │ │ │ │ +70 │ │ │ │ │ +71public: │ │ │ │ │ +72 Refinement(Level const & parent, Level & child, Sdc::Options const& │ │ │ │ │ +schemeOptions); │ │ │ │ │ +73 virtual ~Refinement(); │ │ │ │ │ +74 │ │ │ │ │ +75 Level const& parent() const { return *_parent; } │ │ │ │ │ +76 Level const& child() const { return *_child; } │ │ │ │ │ +77 Level& child() { return *_child; } │ │ │ │ │ 78 │ │ │ │ │ -79 bool wasVertexSelected(_I_n_d_e_x pVertex) const { return _refine- │ │ │ │ │ ->getParentVertexSparseTag(pVertex)._selected; } │ │ │ │ │ -80 bool wasEdgeSelected( _I_n_d_e_x pEdge) const { return _refine- │ │ │ │ │ ->getParentEdgeSparseTag(pEdge)._selected; } │ │ │ │ │ -81 bool wasFaceSelected( _I_n_d_e_x pFace) const { return _refine- │ │ │ │ │ ->getParentFaceSparseTag(pFace)._selected; } │ │ │ │ │ +79 _S_d_c_:_:_S_p_l_i_t getSplitType() const { return _splitType; } │ │ │ │ │ +80 int getRegularFaceSize() const { return _regFaceSize; } │ │ │ │ │ +81 Sdc::Options getOptions() const { return _options; } │ │ │ │ │ 82 │ │ │ │ │ -83 void markVertexSelected(_I_n_d_e_x pVertex) const { _refine- │ │ │ │ │ ->getParentVertexSparseTag(pVertex)._selected = true; } │ │ │ │ │ -84 void markEdgeSelected( _I_n_d_e_x pEdge) const { _refine->getParentEdgeSparseTag │ │ │ │ │ -(pEdge)._selected = true; } │ │ │ │ │ -85 void markFaceSelected( _I_n_d_e_x pFace) const { _refine->getParentFaceSparseTag │ │ │ │ │ -(pFace)._selected = true; } │ │ │ │ │ -86 │ │ │ │ │ -87 void initializeSelection(); │ │ │ │ │ -88 │ │ │ │ │ -89private: │ │ │ │ │ -90 Refinement* _refine; │ │ │ │ │ -91 bool _selected; │ │ │ │ │ -92}; │ │ │ │ │ -93 │ │ │ │ │ -94} // end namespace internal │ │ │ │ │ -95} // end namespace Vtr │ │ │ │ │ -96 │ │ │ │ │ -97} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ -98using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -99} // end namespace OpenSubdiv │ │ │ │ │ -100 │ │ │ │ │ -101#endif /* OPENSUBDIV3_VTR_SPARSE_SELECTOR_H */ │ │ │ │ │ +83 // Face-varying: │ │ │ │ │ +84 int getNumFVarChannels() const { return (int) _fvarChannels.size(); } │ │ │ │ │ +85 │ │ │ │ │ +86 FVarRefinement const & getFVarRefinement(int c) const { return │ │ │ │ │ +*_fvarChannels[c]; } │ │ │ │ │ +87 │ │ │ │ │ +88 // │ │ │ │ │ +89 // Options associated with the actual refinement operation, which may end up │ │ │ │ │ +90 // quite involved if we want to allow for the refinement of data that is not │ │ │ │ │ +91 // of interest to be suppressed. For now we have: │ │ │ │ │ +92 // │ │ │ │ │ +93 // "sparse": the alternative to uniform refinement, which requires that │ │ │ │ │ +94 // components be previously selected/marked to be included. │ │ │ │ │ +95 // │ │ │ │ │ +96 // "minimal topology": this is one that may get broken down into a finer │ │ │ │ │ +97 // set of options. It suppresses "full topology" in the child level │ │ │ │ │ +98 // and only generates what is minimally necessary for interpolation -- │ │ │ │ │ +99 // which requires at least the face-vertices for faces, but also the │ │ │ │ │ +100 // vertex-faces for any face-varying channels present. So it will │ │ │ │ │ +101 // generate one or two of the six possible topological relations. │ │ │ │ │ +102 // │ │ │ │ │ +103 // These are strictly controlled right now, e.g. for sparse refinement, we │ │ │ │ │ +104 // currently enforce full topology at the finest level to allow for │ │ │ │ │ +subsequent │ │ │ │ │ +105 // patch construction. │ │ │ │ │ +106 // │ │ │ │ │ +107 struct Options { │ │ │ │ │ +108 Options() : _sparse(false), │ │ │ │ │ +109 _faceVertsFirst(false), │ │ │ │ │ +110 _minimalTopology(false) │ │ │ │ │ +111 { } │ │ │ │ │ +112 │ │ │ │ │ +113 unsigned int _sparse : 1; │ │ │ │ │ +114 unsigned int _faceVertsFirst : 1; │ │ │ │ │ +115 unsigned int _minimalTopology : 1; │ │ │ │ │ +116 │ │ │ │ │ +117 // Still under consideration: │ │ │ │ │ +118 //unsigned int _childToParentMap : 1; │ │ │ │ │ +119 }; │ │ │ │ │ +120 │ │ │ │ │ +121 void refine(Options options = Options()); │ │ │ │ │ +122 │ │ │ │ │ +123 bool hasFaceVerticesFirst() const { return _faceVertsFirst; } │ │ │ │ │ +124 │ │ │ │ │ +125public: │ │ │ │ │ +126 // │ │ │ │ │ +127 // Access to members -- some testing classes (involving vertex │ │ │ │ │ +interpolation) │ │ │ │ │ +128 // currently make use of these: │ │ │ │ │ +129 // │ │ │ │ │ +130 int getNumChildFacesFromFaces() const { return _childFaceFromFaceCount; } │ │ │ │ │ +131 int getNumChildEdgesFromFaces() const { return _childEdgeFromFaceCount; } │ │ │ │ │ +132 int getNumChildEdgesFromEdges() const { return _childEdgeFromEdgeCount; } │ │ │ │ │ +133 int getNumChildVerticesFromFaces() const { return _childVertFromFaceCount; │ │ │ │ │ +} │ │ │ │ │ +134 int getNumChildVerticesFromEdges() const { return _childVertFromEdgeCount; │ │ │ │ │ +} │ │ │ │ │ +135 int getNumChildVerticesFromVertices() const { return │ │ │ │ │ +_childVertFromVertCount; } │ │ │ │ │ +136 │ │ │ │ │ +137 _I_n_d_e_x getFirstChildFaceFromFaces() const { return _firstChildFaceFromFace; │ │ │ │ │ +} │ │ │ │ │ +138 _I_n_d_e_x getFirstChildEdgeFromFaces() const { return _firstChildEdgeFromFace; │ │ │ │ │ +} │ │ │ │ │ +139 _I_n_d_e_x getFirstChildEdgeFromEdges() const { return _firstChildEdgeFromEdge; │ │ │ │ │ +} │ │ │ │ │ +140 _I_n_d_e_x getFirstChildVertexFromFaces() const { return │ │ │ │ │ +_firstChildVertFromFace; } │ │ │ │ │ +141 _I_n_d_e_x getFirstChildVertexFromEdges() const { return │ │ │ │ │ +_firstChildVertFromEdge; } │ │ │ │ │ +142 _I_n_d_e_x getFirstChildVertexFromVertices() const { return │ │ │ │ │ +_firstChildVertFromVert; } │ │ │ │ │ +143 │ │ │ │ │ +144 _I_n_d_e_x getFaceChildVertex(_I_n_d_e_x f) const { return _faceChildVertIndex[f]; } │ │ │ │ │ +145 _I_n_d_e_x getEdgeChildVertex(_I_n_d_e_x e) const { return _edgeChildVertIndex[e]; } │ │ │ │ │ +146 _I_n_d_e_x getVertexChildVertex(_I_n_d_e_x v) const { return _vertChildVertIndex[v]; │ │ │ │ │ +} │ │ │ │ │ +147 │ │ │ │ │ +148 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y getFaceChildFaces(_I_n_d_e_x parentFace) const; │ │ │ │ │ +149 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y getFaceChildEdges(_I_n_d_e_x parentFace) const; │ │ │ │ │ +150 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y getEdgeChildEdges(_I_n_d_e_x parentEdge) const; │ │ │ │ │ +151 │ │ │ │ │ +152 // Child-to-parent relationships │ │ │ │ │ +153 bool isChildVertexComplete(_I_n_d_e_x v) const { return ! _childVertexTag │ │ │ │ │ +[v]._incomplete; } │ │ │ │ │ +154 │ │ │ │ │ +155 _I_n_d_e_x getChildFaceParentFace(_I_n_d_e_x f) const { return _childFaceParentIndex │ │ │ │ │ +[f]; } │ │ │ │ │ +156 int getChildFaceInParentFace(_I_n_d_e_x f) const { return _childFaceTag │ │ │ │ │ +[f]._indexInParent; } │ │ │ │ │ +157 │ │ │ │ │ +158 _I_n_d_e_x getChildEdgeParentIndex(_I_n_d_e_x e) const { return _childEdgeParentIndex │ │ │ │ │ +[e]; } │ │ │ │ │ +159 │ │ │ │ │ +160 _I_n_d_e_x getChildVertexParentIndex(_I_n_d_e_x v) const { return │ │ │ │ │ +_childVertexParentIndex[v]; } │ │ │ │ │ +161 │ │ │ │ │ +162// │ │ │ │ │ +163// Modifiers intended for internal/protected use: │ │ │ │ │ +164// │ │ │ │ │ +165public: │ │ │ │ │ +166 │ │ │ │ │ +167 _I_n_d_e_x_A_r_r_a_y getFaceChildFaces(_I_n_d_e_x parentFace); │ │ │ │ │ +168 _I_n_d_e_x_A_r_r_a_y getFaceChildEdges(_I_n_d_e_x parentFace); │ │ │ │ │ +169 _I_n_d_e_x_A_r_r_a_y getEdgeChildEdges(_I_n_d_e_x parentEdge); │ │ │ │ │ +170 │ │ │ │ │ +171public: │ │ │ │ │ +172 // │ │ │ │ │ +173 // Tags have now been added per-component in Level, but there is additional │ │ │ │ │ +need to tag │ │ │ │ │ +174 // components within Refinement -- we can't tag the parent level components │ │ │ │ │ +for any │ │ │ │ │ +175 // refinement (in order to keep it const) and tags associated with children │ │ │ │ │ +that are │ │ │ │ │ +176 // specific to the child-to-parent mapping may not be warranted in the │ │ │ │ │ +child level. │ │ │ │ │ +177 // │ │ │ │ │ +178 // Parent tags are only required for sparse refinement. The main property │ │ │ │ │ +to tag is │ │ │ │ │ +179 // whether a component was selected, and so a single SparseTag is used for │ │ │ │ │ +all three │ │ │ │ │ +180 // component types. Tagging if a component is "transitional" is also │ │ │ │ │ +useful. This may │ │ │ │ │ +181 // only be necessary for edges but is currently packed into a mask per-edge │ │ │ │ │ +for faces, │ │ │ │ │ +182 // which could be deferred, in which case "transitional" could be a single │ │ │ │ │ +bit. │ │ │ │ │ +183 // │ │ │ │ │ +184 // Child tags are part of the child-to-parent mapping, which consists of │ │ │ │ │ +the parent │ │ │ │ │ +185 // component index for each child component, plus a tag for the child │ │ │ │ │ +indicating more │ │ │ │ │ +186 // about its relationship to its parent, e.g. is it completely defined, │ │ │ │ │ +what the parent │ │ │ │ │ +187 // component type is, what is the index of the child within its parent, │ │ │ │ │ +etc. │ │ │ │ │ +188 // │ │ │ │ │ +189 struct SparseTag { │ │ │ │ │ +190 SparseTag() : _selected(0), _transitional(0) { } │ │ │ │ │ +191 │ │ │ │ │ +192 unsigned char _selected : 1; // component specifically selected for │ │ │ │ │ +refinement │ │ │ │ │ +193 unsigned char _transitional : 4; // adjacent to a refined component (4-bits │ │ │ │ │ +for face) │ │ │ │ │ +194 }; │ │ │ │ │ +195 │ │ │ │ │ +196 struct ChildTag { │ │ │ │ │ +197 ChildTag() { } │ │ │ │ │ +198 │ │ │ │ │ +199 unsigned char _incomplete : 1; // incomplete neighborhood to represent │ │ │ │ │ +limit of parent │ │ │ │ │ +200 unsigned char _parentType : 2; // type of parent component: vertex, edge or │ │ │ │ │ +face │ │ │ │ │ +201 unsigned char _indexInParent : 2; // index of child wrt parent: 0-3, or │ │ │ │ │ +iterative if N > 4 │ │ │ │ │ +202 }; │ │ │ │ │ +203 │ │ │ │ │ +204 // Methods to access and modify tags: │ │ │ │ │ +205 SparseTag const & getParentFaceSparseTag( _I_n_d_e_x f) const { return │ │ │ │ │ +_parentFaceTag[f]; } │ │ │ │ │ +206 SparseTag const & getParentEdgeSparseTag( _I_n_d_e_x e) const { return │ │ │ │ │ +_parentEdgeTag[e]; } │ │ │ │ │ +207 SparseTag const & getParentVertexSparseTag(_I_n_d_e_x v) const { return │ │ │ │ │ +_parentVertexTag[v]; } │ │ │ │ │ +208 │ │ │ │ │ +209 SparseTag & getParentFaceSparseTag( _I_n_d_e_x f) { return _parentFaceTag[f]; } │ │ │ │ │ +210 SparseTag & getParentEdgeSparseTag( _I_n_d_e_x e) { return _parentEdgeTag[e]; } │ │ │ │ │ +211 SparseTag & getParentVertexSparseTag(_I_n_d_e_x v) { return _parentVertexTag[v]; │ │ │ │ │ +} │ │ │ │ │ +212 │ │ │ │ │ +213 ChildTag const & getChildFaceTag( _I_n_d_e_x f) const { return _childFaceTag[f]; │ │ │ │ │ +} │ │ │ │ │ +214 ChildTag const & getChildEdgeTag( _I_n_d_e_x e) const { return _childEdgeTag[e]; │ │ │ │ │ +} │ │ │ │ │ +215 ChildTag const & getChildVertexTag(_I_n_d_e_x v) const { return _childVertexTag │ │ │ │ │ +[v]; } │ │ │ │ │ +216 │ │ │ │ │ +217 ChildTag & getChildFaceTag( _I_n_d_e_x f) { return _childFaceTag[f]; } │ │ │ │ │ +218 ChildTag & getChildEdgeTag( _I_n_d_e_x e) { return _childEdgeTag[e]; } │ │ │ │ │ +219 ChildTag & getChildVertexTag(_I_n_d_e_x v) { return _childVertexTag[v]; } │ │ │ │ │ +220 │ │ │ │ │ +221// Remaining methods should really be protected -- for use by subclasses... │ │ │ │ │ +222public: │ │ │ │ │ +223 // │ │ │ │ │ +224 // Methods involved in constructing the parent-to-child mapping -- when the │ │ │ │ │ +225 // refinement is sparse, additional methods are needed to identify the │ │ │ │ │ +selection: │ │ │ │ │ +226 // │ │ │ │ │ +227 void populateParentToChildMapping(); │ │ │ │ │ +228 void populateParentChildIndices(); │ │ │ │ │ +229 void printParentToChildMapping() const; │ │ │ │ │ +230 │ │ │ │ │ +231 virtual void allocateParentChildIndices() = 0; │ │ │ │ │ +232 │ │ │ │ │ +233 // Supporting method for sparse refinement: │ │ │ │ │ +234 void initializeSparseSelectionTags(); │ │ │ │ │ +235 void markSparseChildComponentIndices(); │ │ │ │ │ +236 void markSparseVertexChildren(); │ │ │ │ │ +237 void markSparseEdgeChildren(); │ │ │ │ │ +238 │ │ │ │ │ +239 virtual void markSparseFaceChildren() = 0; │ │ │ │ │ +240 │ │ │ │ │ +241 void initializeChildComponentCounts(); │ │ │ │ │ +242 │ │ │ │ │ +243 // │ │ │ │ │ +244 // Methods involved in constructing the child-to-parent mapping: │ │ │ │ │ +245 // │ │ │ │ │ +246 void populateChildToParentMapping(); │ │ │ │ │ +247 │ │ │ │ │ +248 void populateFaceParentVectors(ChildTag const initialChildTags[2][4]); │ │ │ │ │ +249 void populateFaceParentFromParentFaces(ChildTag const initialChildTags[2] │ │ │ │ │ +[4]); │ │ │ │ │ +250 │ │ │ │ │ +251 void populateEdgeParentVectors(ChildTag const initialChildTags[2][4]); │ │ │ │ │ +252 void populateEdgeParentFromParentFaces(ChildTag const initialChildTags[2] │ │ │ │ │ +[4]); │ │ │ │ │ +253 void populateEdgeParentFromParentEdges(ChildTag const initialChildTags[2] │ │ │ │ │ +[4]); │ │ │ │ │ +254 │ │ │ │ │ +255 void populateVertexParentVectors(ChildTag const initialChildTags[2][4]); │ │ │ │ │ +256 void populateVertexParentFromParentFaces(ChildTag const initialChildTags[2] │ │ │ │ │ +[4]); │ │ │ │ │ +257 void populateVertexParentFromParentEdges(ChildTag const initialChildTags[2] │ │ │ │ │ +[4]); │ │ │ │ │ +258 void populateVertexParentFromParentVertices(ChildTag const initialChildTags │ │ │ │ │ +[2][4]); │ │ │ │ │ +259 │ │ │ │ │ +260 // │ │ │ │ │ +261 // Methods involved in propagating component tags from parent to child: │ │ │ │ │ +262 // │ │ │ │ │ +263 void propagateComponentTags(); │ │ │ │ │ +264 │ │ │ │ │ +265 void populateFaceTagVectors(); │ │ │ │ │ +266 void populateFaceTagsFromParentFaces(); │ │ │ │ │ +267 │ │ │ │ │ +268 void populateEdgeTagVectors(); │ │ │ │ │ +269 void populateEdgeTagsFromParentFaces(); │ │ │ │ │ +270 void populateEdgeTagsFromParentEdges(); │ │ │ │ │ +271 │ │ │ │ │ +272 void populateVertexTagVectors(); │ │ │ │ │ +273 void populateVertexTagsFromParentFaces(); │ │ │ │ │ +274 void populateVertexTagsFromParentEdges(); │ │ │ │ │ +275 void populateVertexTagsFromParentVertices(); │ │ │ │ │ +276 │ │ │ │ │ +277 // │ │ │ │ │ +278 // Methods (and types) involved in subdividing the topology -- though not │ │ │ │ │ +279 // fully exploited, any subset of the 6 relations can be generated: │ │ │ │ │ +280 // │ │ │ │ │ +281 struct Relations { │ │ │ │ │ +282 unsigned int _faceVertices : 1; │ │ │ │ │ +283 unsigned int _faceEdges : 1; │ │ │ │ │ +284 unsigned int _edgeVertices : 1; │ │ │ │ │ +285 unsigned int _edgeFaces : 1; │ │ │ │ │ +286 unsigned int _vertexFaces : 1; │ │ │ │ │ +287 unsigned int _vertexEdges : 1; │ │ │ │ │ +288 │ │ │ │ │ +289 void setAll(bool enable) { │ │ │ │ │ +290 _faceVertices = enable; │ │ │ │ │ +291 _faceEdges = enable; │ │ │ │ │ +292 _edgeVertices = enable; │ │ │ │ │ +293 _edgeFaces = enable; │ │ │ │ │ +294 _vertexFaces = enable; │ │ │ │ │ +295 _vertexEdges = enable; │ │ │ │ │ +296 } │ │ │ │ │ +297 }; │ │ │ │ │ +298 │ │ │ │ │ +299 void subdivideTopology(Relations const& relationsToSubdivide); │ │ │ │ │ +300 │ │ │ │ │ +301 virtual void populateFaceVertexRelation() = 0; │ │ │ │ │ +302 virtual void populateFaceEdgeRelation() = 0; │ │ │ │ │ +303 virtual void populateEdgeVertexRelation() = 0; │ │ │ │ │ +304 virtual void populateEdgeFaceRelation() = 0; │ │ │ │ │ +305 virtual void populateVertexFaceRelation() = 0; │ │ │ │ │ +306 virtual void populateVertexEdgeRelation() = 0; │ │ │ │ │ +307 │ │ │ │ │ +308 // │ │ │ │ │ +309 // Methods involved in subdividing and inspecting sharpness values: │ │ │ │ │ +310 // │ │ │ │ │ +311 void subdivideSharpnessValues(); │ │ │ │ │ +312 │ │ │ │ │ +313 void subdivideVertexSharpness(); │ │ │ │ │ +314 void subdivideEdgeSharpness(); │ │ │ │ │ +315 void reclassifySemisharpVertices(); │ │ │ │ │ +316 │ │ │ │ │ +317 // │ │ │ │ │ +318 // Methods involved in subdividing face-varying topology: │ │ │ │ │ +319 // │ │ │ │ │ +320 void subdivideFVarChannels(); │ │ │ │ │ +321 │ │ │ │ │ +322protected: │ │ │ │ │ +323 // A debug method of Level prints a Refinement (should really change this) │ │ │ │ │ +324 friend void Level::print(const Refinement *) const; │ │ │ │ │ +325 │ │ │ │ │ +326 // │ │ │ │ │ +327 // Data members -- the logical grouping of some of these (and methods that │ │ │ │ │ +make use │ │ │ │ │ +328 // of them) may lead to grouping them into a few utility classes or │ │ │ │ │ +structs... │ │ │ │ │ +329 // │ │ │ │ │ +330 │ │ │ │ │ +331 // Defined on construction: │ │ │ │ │ +332 Level const * _parent; │ │ │ │ │ +333 Level * _child; │ │ │ │ │ +334 Sdc::Options _options; │ │ │ │ │ +335 │ │ │ │ │ +336 // Defined by the subclass: │ │ │ │ │ +337 _S_d_c_:_:_S_p_l_i_t _splitType; │ │ │ │ │ +338 int _regFaceSize; │ │ │ │ │ +339 │ │ │ │ │ +340 // Determined by the refinement options: │ │ │ │ │ +341 bool _uniform; │ │ │ │ │ +342 bool _faceVertsFirst; │ │ │ │ │ +343 │ │ │ │ │ +344 // │ │ │ │ │ +345 // Inventory and ordering of the types of child components: │ │ │ │ │ +346 // │ │ │ │ │ +347 int _childFaceFromFaceCount; // arguably redundant (all faces originate │ │ │ │ │ +from faces) │ │ │ │ │ +348 int _childEdgeFromFaceCount; │ │ │ │ │ +349 int _childEdgeFromEdgeCount; │ │ │ │ │ +350 int _childVertFromFaceCount; │ │ │ │ │ +351 int _childVertFromEdgeCount; │ │ │ │ │ +352 int _childVertFromVertCount; │ │ │ │ │ +353 │ │ │ │ │ +354 int _firstChildFaceFromFace; // arguably redundant (all faces originate │ │ │ │ │ +from faces) │ │ │ │ │ +355 int _firstChildEdgeFromFace; │ │ │ │ │ +356 int _firstChildEdgeFromEdge; │ │ │ │ │ +357 int _firstChildVertFromFace; │ │ │ │ │ +358 int _firstChildVertFromEdge; │ │ │ │ │ +359 int _firstChildVertFromVert; │ │ │ │ │ +360 │ │ │ │ │ +361 // │ │ │ │ │ +362 // The parent-to-child mapping: │ │ │ │ │ +363 // These are vectors sized according to the number of parent components │ │ │ │ │ +(and │ │ │ │ │ +364 // their topology) that contain references/indices to the child components │ │ │ │ │ +that │ │ │ │ │ +365 // result from them by refinement. When refinement is sparse, parent │ │ │ │ │ +components │ │ │ │ │ +366 // that have not spawned all child components will have their missing │ │ │ │ │ +children │ │ │ │ │ +367 // marked as invalid. │ │ │ │ │ +368 // │ │ │ │ │ +369 // NOTE the "Array" members here. Often vectors within the Level can be │ │ │ │ │ +shared │ │ │ │ │ +370 // with the Refinement, and an Array instance is used to do so. If not │ │ │ │ │ +shared │ │ │ │ │ +371 // the subclass just initializes the Array members after allocating its own │ │ │ │ │ +local │ │ │ │ │ +372 // vector members. │ │ │ │ │ +373 // │ │ │ │ │ +374 _I_n_d_e_x_A_r_r_a_y _faceChildFaceCountsAndOffsets; │ │ │ │ │ +375 _I_n_d_e_x_A_r_r_a_y _faceChildEdgeCountsAndOffsets; │ │ │ │ │ +376 │ │ │ │ │ +377 _I_n_d_e_x_V_e_c_t_o_r _faceChildFaceIndices; // *cannot* always use face-vert counts/ │ │ │ │ │ +offsets │ │ │ │ │ +378 _I_n_d_e_x_V_e_c_t_o_r _faceChildEdgeIndices; // can use face-vert counts/offsets │ │ │ │ │ +379 _I_n_d_e_x_V_e_c_t_o_r _faceChildVertIndex; │ │ │ │ │ +380 │ │ │ │ │ +381 _I_n_d_e_x_V_e_c_t_o_r _edgeChildEdgeIndices; // trivial/corresponding pair for each │ │ │ │ │ +382 _I_n_d_e_x_V_e_c_t_o_r _edgeChildVertIndex; │ │ │ │ │ +383 │ │ │ │ │ +384 _I_n_d_e_x_V_e_c_t_o_r _vertChildVertIndex; │ │ │ │ │ +385 │ │ │ │ │ +386 // │ │ │ │ │ +387 // The child-to-parent mapping: │ │ │ │ │ +388 // │ │ │ │ │ +389 _I_n_d_e_x_V_e_c_t_o_r _childFaceParentIndex; │ │ │ │ │ +390 _I_n_d_e_x_V_e_c_t_o_r _childEdgeParentIndex; │ │ │ │ │ +391 _I_n_d_e_x_V_e_c_t_o_r _childVertexParentIndex; │ │ │ │ │ +392 │ │ │ │ │ +393 std::vector _childFaceTag; │ │ │ │ │ +394 std::vector _childEdgeTag; │ │ │ │ │ +395 std::vector _childVertexTag; │ │ │ │ │ +396 │ │ │ │ │ +397 // │ │ │ │ │ +398 // Tags for sparse selection of components: │ │ │ │ │ +399 // │ │ │ │ │ +400 std::vector _parentFaceTag; │ │ │ │ │ +401 std::vector _parentEdgeTag; │ │ │ │ │ +402 std::vector _parentVertexTag; │ │ │ │ │ +403 │ │ │ │ │ +404 // │ │ │ │ │ +405 // Refinement data for face-varying channels present in the Levels being │ │ │ │ │ +refined: │ │ │ │ │ +406 // │ │ │ │ │ +407 std::vector _fvarChannels; │ │ │ │ │ +408}; │ │ │ │ │ +409 │ │ │ │ │ +410inline _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y │ │ │ │ │ +411Refinement::getFaceChildFaces(_I_n_d_e_x parentFace) const { │ │ │ │ │ +412 │ │ │ │ │ +413 return _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y(&_faceChildFaceIndices │ │ │ │ │ +[_faceChildFaceCountsAndOffsets[2*parentFace+1]], │ │ │ │ │ +414 _faceChildFaceCountsAndOffsets[2*parentFace]); │ │ │ │ │ +415} │ │ │ │ │ +416 │ │ │ │ │ +417inline _I_n_d_e_x_A_r_r_a_y │ │ │ │ │ +418Refinement::getFaceChildFaces(_I_n_d_e_x parentFace) { │ │ │ │ │ +419 │ │ │ │ │ +420 return _I_n_d_e_x_A_r_r_a_y(&_faceChildFaceIndices[_faceChildFaceCountsAndOffsets │ │ │ │ │ +[2*parentFace+1]], │ │ │ │ │ +421 _faceChildFaceCountsAndOffsets[2*parentFace]); │ │ │ │ │ +422} │ │ │ │ │ +423 │ │ │ │ │ +424inline _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y │ │ │ │ │ +425Refinement::getFaceChildEdges(_I_n_d_e_x parentFace) const { │ │ │ │ │ +426 │ │ │ │ │ +427 return _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y(&_faceChildEdgeIndices │ │ │ │ │ +[_faceChildEdgeCountsAndOffsets[2*parentFace+1]], │ │ │ │ │ +428 _faceChildEdgeCountsAndOffsets[2*parentFace]); │ │ │ │ │ +429} │ │ │ │ │ +430inline _I_n_d_e_x_A_r_r_a_y │ │ │ │ │ +431Refinement::getFaceChildEdges(_I_n_d_e_x parentFace) { │ │ │ │ │ +432 │ │ │ │ │ +433 return _I_n_d_e_x_A_r_r_a_y(&_faceChildEdgeIndices[_faceChildEdgeCountsAndOffsets │ │ │ │ │ +[2*parentFace+1]], │ │ │ │ │ +434 _faceChildEdgeCountsAndOffsets[2*parentFace]); │ │ │ │ │ +435} │ │ │ │ │ +436 │ │ │ │ │ +437inline _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y │ │ │ │ │ +438Refinement::getEdgeChildEdges(_I_n_d_e_x parentEdge) const { │ │ │ │ │ +439 │ │ │ │ │ +440 return _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y(&_edgeChildEdgeIndices[parentEdge*2], 2); │ │ │ │ │ +441} │ │ │ │ │ +442 │ │ │ │ │ +443inline _I_n_d_e_x_A_r_r_a_y │ │ │ │ │ +444Refinement::getEdgeChildEdges(_I_n_d_e_x parentEdge) { │ │ │ │ │ +445 │ │ │ │ │ +446 return _I_n_d_e_x_A_r_r_a_y(&_edgeChildEdgeIndices[parentEdge*2], 2); │ │ │ │ │ +447} │ │ │ │ │ +448 │ │ │ │ │ +449} // end namespace internal │ │ │ │ │ +450} // end namespace Vtr │ │ │ │ │ +451 │ │ │ │ │ +452} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ +453using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +454} // end namespace OpenSubdiv │ │ │ │ │ +455 │ │ │ │ │ +456#endif /* OPENSUBDIV3_VTR_REFINEMENT_H */ │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_V_t_r_:_:_I_n_d_e_x │ │ │ │ │ int Index │ │ │ │ │ DDeeffiinniittiioonn _t_y_p_e_s_._h_:_5_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_V_t_r_:_:_I_n_d_e_x_V_e_c_t_o_r │ │ │ │ │ +std::vector< Index > IndexVector │ │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e_s_._h_:_7_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_V_t_r_:_:_C_o_n_s_t_I_n_d_e_x_A_r_r_a_y │ │ │ │ │ +ConstArray< Index > ConstIndexArray │ │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e_s_._h_:_8_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_V_t_r_:_:_I_n_d_e_x_A_r_r_a_y │ │ │ │ │ +Array< Index > IndexArray │ │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e_s_._h_:_7_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_S_d_c_:_:_S_p_l_i_t │ │ │ │ │ +Split │ │ │ │ │ +Enumerated type for all face splitting schemes. │ │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e_s_._h_:_4_7 │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _v_t_r │ │ │ │ │ - * _s_p_a_r_s_e_S_e_l_e_c_t_o_r_._h │ │ │ │ │ + * _r_e_f_i_n_e_m_e_n_t_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00752.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/vtr/refinement.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/vtr/sparseSelector.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -89,22 +89,20 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Namespaces
│ │ │ │ -
refinement.h File Reference
│ │ │ │ +
sparseSelector.h File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include "../sdc/types.h"
│ │ │ │ -#include "../sdc/options.h"
│ │ │ │ #include "../vtr/types.h"
│ │ │ │ -#include "../vtr/level.h"
│ │ │ │ +#include "../vtr/refinement.h"
│ │ │ │ #include <vector>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -115,13 +113,13 @@ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,22 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -refinement.h File Reference │ │ │ │ │ +sparseSelector.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ -#include "_._._/_s_d_c_/_t_y_p_e_s_._h" │ │ │ │ │ -#include "_._._/_s_d_c_/_o_p_t_i_o_n_s_._h" │ │ │ │ │ #include "_._._/_v_t_r_/_t_y_p_e_s_._h" │ │ │ │ │ -#include "_._._/_v_t_r_/_l_e_v_e_l_._h" │ │ │ │ │ +#include "_._._/_v_t_r_/_r_e_f_i_n_e_m_e_n_t_._h" │ │ │ │ │ #include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_V_t_r │ │ │ │ │   │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _v_t_r │ │ │ │ │ - * _r_e_f_i_n_e_m_e_n_t_._h │ │ │ │ │ + * _s_p_a_r_s_e_S_e_l_e_c_t_o_r_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00752_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/vtr/refinement.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/vtr/sparseSelector.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,15 +92,15 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
refinement.h
│ │ │ │ +
sparseSelector.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │
2// Copyright 2014 DreamWorks Animation LLC.
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │ @@ -118,457 +118,98 @@ │ │ │ │
17//
│ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │ -
24#ifndef OPENSUBDIV3_VTR_REFINEMENT_H
│ │ │ │ -
25#define OPENSUBDIV3_VTR_REFINEMENT_H
│ │ │ │ +
24#ifndef OPENSUBDIV3_VTR_SPARSE_SELECTOR_H
│ │ │ │ +
25#define OPENSUBDIV3_VTR_SPARSE_SELECTOR_H
│ │ │ │
26
│ │ │ │
27#include "../version.h"
│ │ │ │
28
│ │ │ │ -
29#include "../sdc/types.h"
│ │ │ │ -
30#include "../sdc/options.h"
│ │ │ │ -
31#include "../vtr/types.h"
│ │ │ │ -
32#include "../vtr/level.h"
│ │ │ │ +
29#include "../vtr/types.h"
│ │ │ │ +
30#include "../vtr/refinement.h"
│ │ │ │ +
31
│ │ │ │ +
32#include <vector>
│ │ │ │
33
│ │ │ │ -
34#include <vector>
│ │ │ │ -
35
│ │ │ │ -
36//
│ │ │ │ -
37// Declaration for the main refinement class (Refinement) and its pre-requisites:
│ │ │ │ -
38//
│ │ │ │ -
39namespace OpenSubdiv {
│ │ │ │ -
40namespace OPENSUBDIV_VERSION {
│ │ │ │ -
41
│ │ │ │ -
42namespace Vtr {
│ │ │ │ -
43namespace internal {
│ │ │ │ -
44
│ │ │ │ -
45class FVarRefinement;
│ │ │ │ -
46
│ │ │ │ +
34namespace OpenSubdiv {
│ │ │ │ +
35namespace OPENSUBDIV_VERSION {
│ │ │ │ +
36
│ │ │ │ +
37namespace Vtr {
│ │ │ │ +
38namespace internal {
│ │ │ │ +
39
│ │ │ │ +
40//
│ │ │ │ +
41// SparseSelector:
│ │ │ │ +
42// Class supporting "selection" of components in a Level for sparse Refinement.
│ │ │ │ +
43// The term "selection" here implies interest in the limit for that component, i.e.
│ │ │ │ +
44// the limit point for a selected vertex, the limit patch for a face, etc. So this
│ │ │ │ +
45// class is responsible for ensuring that all neighboring components required to
│ │ │ │ +
46// support the limit of those selected are included in the refinement.
│ │ │ │
47//
│ │ │ │ -
48// Refinement:
│ │ │ │ -
49// A refinement is a mapping between two levels -- relating the components in the original
│ │ │ │ -
50// (parent) level to the one refined (child). The refinement may be complete (uniform) or sparse
│ │ │ │ -
51// (adaptive or otherwise selective), so not all components in the parent level will spawn
│ │ │ │ -
52// components in the child level.
│ │ │ │ -
53//
│ │ │ │ -
54// Refinement is an abstract class and expects subclasses corresponding to the different types
│ │ │ │ -
55// of topological splits that the supported subdivision schemes collectively require, i.e. those
│ │ │ │ -
56// listed in Sdc::SplitType. Note the virtual requirements expected of the subclasses in the list
│ │ │ │ -
57// of protected methods -- they differ mainly in the topology that is created in the child Level
│ │ │ │ -
58// and not the propagation of tags through refinement, subdivision of sharpness values or the
│ │ │ │ -
59// treatment of face-varying data. The primary subclasses are QuadRefinement and TriRefinement.
│ │ │ │ -
60//
│ │ │ │ -
61// At a high level, all that is necessary in terms of interface is to construct, initialize
│ │ │ │ -
62// (linking the two levels), optionally select components for sparse refinement (via use of the
│ │ │ │ -
63// SparseSelector) and call the refine() method. This usage is expected of Far::TopologyRefiner.
│ │ │ │ -
64//
│ │ │ │ -
65// Since we really want this class to be restricted from public access eventually, all methods
│ │ │ │ -
66// begin with lower case (as is the convention for protected methods) and the list of friends
│ │ │ │ -
67// will be maintained more strictly.
│ │ │ │ -
68//
│ │ │ │ -
69class Refinement {
│ │ │ │ -
70
│ │ │ │ -
71public:
│ │ │ │ -
72 Refinement(Level const & parent, Level & child, Sdc::Options const& schemeOptions);
│ │ │ │ -
73 virtual ~Refinement();
│ │ │ │ -
74
│ │ │ │ -
75 Level const& parent() const { return *_parent; }
│ │ │ │ -
76 Level const& child() const { return *_child; }
│ │ │ │ -
77 Level& child() { return *_child; }
│ │ │ │ +
48// This class is associated with (and constructed given) a Refinement and its role
│ │ │ │ +
49// is to initialize that Refinement instance for eventual sparse refinement. So it
│ │ │ │ +
50// is a friend of and expected to modify the Refinement as part of the selection.
│ │ │ │ +
51// Given its simplicity and scope it may be worth nesting it in Vtr::Refinement.
│ │ │ │ +
52//
│ │ │ │ +
53// While all three component types -- vertices, edges and faces -- can be selected,
│ │ │ │ +
54// only selection of faces is currently used and actively supported as part of the
│ │ │ │ +
55// feature-adaptive refinement.
│ │ │ │ +
56//
│ │ │ │ +
57class SparseSelector {
│ │ │ │ +
58
│ │ │ │ +
59public:
│ │ │ │ +
60 SparseSelector(Refinement& refine) : _refine(&refine), _selected(false) { }
│ │ │ │ +
61 ~SparseSelector() { }
│ │ │ │ +
62
│ │ │ │ +
63 void setRefinement(Refinement& refine) { _refine = &refine; }
│ │ │ │ +
64 Refinement& getRefinement() const { return *_refine; }
│ │ │ │ +
65
│ │ │ │ +
66 bool isSelectionEmpty() const { return !_selected; }
│ │ │ │ +
67
│ │ │ │ +
68 //
│ │ │ │ +
69 // Methods for selecting (and marking) components for refinement. All component indices
│ │ │ │ +
70 // refer to components in the parent:
│ │ │ │ +
71 //
│ │ │ │ +
72 void selectVertex(Index pVertex);
│ │ │ │ +
73 void selectEdge( Index pEdge);
│ │ │ │ +
74 void selectFace( Index pFace);
│ │ │ │ +
75
│ │ │ │ +
76private:
│ │ │ │ +
77 SparseSelector() : _refine(0), _selected(false) { }
│ │ │ │
78
│ │ │ │ -
79 Sdc::Split getSplitType() const { return _splitType; }
│ │ │ │ -
80 int getRegularFaceSize() const { return _regFaceSize; }
│ │ │ │ -
81 Sdc::Options getOptions() const { return _options; }
│ │ │ │ +
79 bool wasVertexSelected(Index pVertex) const { return _refine->getParentVertexSparseTag(pVertex)._selected; }
│ │ │ │ +
80 bool wasEdgeSelected( Index pEdge) const { return _refine->getParentEdgeSparseTag(pEdge)._selected; }
│ │ │ │ +
81 bool wasFaceSelected( Index pFace) const { return _refine->getParentFaceSparseTag(pFace)._selected; }
│ │ │ │
82
│ │ │ │ -
83 // Face-varying:
│ │ │ │ -
84 int getNumFVarChannels() const { return (int) _fvarChannels.size(); }
│ │ │ │ -
85
│ │ │ │ -
86 FVarRefinement const & getFVarRefinement(int c) const { return *_fvarChannels[c]; }
│ │ │ │ -
87
│ │ │ │ -
88 //
│ │ │ │ -
89 // Options associated with the actual refinement operation, which may end up
│ │ │ │ -
90 // quite involved if we want to allow for the refinement of data that is not
│ │ │ │ -
91 // of interest to be suppressed. For now we have:
│ │ │ │ -
92 //
│ │ │ │ -
93 // "sparse": the alternative to uniform refinement, which requires that
│ │ │ │ -
94 // components be previously selected/marked to be included.
│ │ │ │ -
95 //
│ │ │ │ -
96 // "minimal topology": this is one that may get broken down into a finer
│ │ │ │ -
97 // set of options. It suppresses "full topology" in the child level
│ │ │ │ -
98 // and only generates what is minimally necessary for interpolation --
│ │ │ │ -
99 // which requires at least the face-vertices for faces, but also the
│ │ │ │ -
100 // vertex-faces for any face-varying channels present. So it will
│ │ │ │ -
101 // generate one or two of the six possible topological relations.
│ │ │ │ -
102 //
│ │ │ │ -
103 // These are strictly controlled right now, e.g. for sparse refinement, we
│ │ │ │ -
104 // currently enforce full topology at the finest level to allow for subsequent
│ │ │ │ -
105 // patch construction.
│ │ │ │ -
106 //
│ │ │ │ -
107 struct Options {
│ │ │ │ -
108 Options() : _sparse(false),
│ │ │ │ -
109 _faceVertsFirst(false),
│ │ │ │ -
110 _minimalTopology(false)
│ │ │ │ -
111 { }
│ │ │ │ -
112
│ │ │ │ -
113 unsigned int _sparse : 1;
│ │ │ │ -
114 unsigned int _faceVertsFirst : 1;
│ │ │ │ -
115 unsigned int _minimalTopology : 1;
│ │ │ │ -
116
│ │ │ │ -
117 // Still under consideration:
│ │ │ │ -
118 //unsigned int _childToParentMap : 1;
│ │ │ │ -
119 };
│ │ │ │ -
120
│ │ │ │ -
121 void refine(Options options = Options());
│ │ │ │ -
122
│ │ │ │ -
123 bool hasFaceVerticesFirst() const { return _faceVertsFirst; }
│ │ │ │ -
124
│ │ │ │ -
125public:
│ │ │ │ -
126 //
│ │ │ │ -
127 // Access to members -- some testing classes (involving vertex interpolation)
│ │ │ │ -
128 // currently make use of these:
│ │ │ │ -
129 //
│ │ │ │ -
130 int getNumChildFacesFromFaces() const { return _childFaceFromFaceCount; }
│ │ │ │ -
131 int getNumChildEdgesFromFaces() const { return _childEdgeFromFaceCount; }
│ │ │ │ -
132 int getNumChildEdgesFromEdges() const { return _childEdgeFromEdgeCount; }
│ │ │ │ -
133 int getNumChildVerticesFromFaces() const { return _childVertFromFaceCount; }
│ │ │ │ -
134 int getNumChildVerticesFromEdges() const { return _childVertFromEdgeCount; }
│ │ │ │ -
135 int getNumChildVerticesFromVertices() const { return _childVertFromVertCount; }
│ │ │ │ -
136
│ │ │ │ -
137 Index getFirstChildFaceFromFaces() const { return _firstChildFaceFromFace; }
│ │ │ │ -
138 Index getFirstChildEdgeFromFaces() const { return _firstChildEdgeFromFace; }
│ │ │ │ -
139 Index getFirstChildEdgeFromEdges() const { return _firstChildEdgeFromEdge; }
│ │ │ │ -
140 Index getFirstChildVertexFromFaces() const { return _firstChildVertFromFace; }
│ │ │ │ -
141 Index getFirstChildVertexFromEdges() const { return _firstChildVertFromEdge; }
│ │ │ │ -
142 Index getFirstChildVertexFromVertices() const { return _firstChildVertFromVert; }
│ │ │ │ -
143
│ │ │ │ -
144 Index getFaceChildVertex(Index f) const { return _faceChildVertIndex[f]; }
│ │ │ │ -
145 Index getEdgeChildVertex(Index e) const { return _edgeChildVertIndex[e]; }
│ │ │ │ -
146 Index getVertexChildVertex(Index v) const { return _vertChildVertIndex[v]; }
│ │ │ │ -
147
│ │ │ │ -
148 ConstIndexArray getFaceChildFaces(Index parentFace) const;
│ │ │ │ -
149 ConstIndexArray getFaceChildEdges(Index parentFace) const;
│ │ │ │ -
150 ConstIndexArray getEdgeChildEdges(Index parentEdge) const;
│ │ │ │ -
151
│ │ │ │ -
152 // Child-to-parent relationships
│ │ │ │ -
153 bool isChildVertexComplete(Index v) const { return ! _childVertexTag[v]._incomplete; }
│ │ │ │ -
154
│ │ │ │ -
155 Index getChildFaceParentFace(Index f) const { return _childFaceParentIndex[f]; }
│ │ │ │ -
156 int getChildFaceInParentFace(Index f) const { return _childFaceTag[f]._indexInParent; }
│ │ │ │ -
157
│ │ │ │ -
158 Index getChildEdgeParentIndex(Index e) const { return _childEdgeParentIndex[e]; }
│ │ │ │ -
159
│ │ │ │ -
160 Index getChildVertexParentIndex(Index v) const { return _childVertexParentIndex[v]; }
│ │ │ │ -
161
│ │ │ │ -
162//
│ │ │ │ -
163// Modifiers intended for internal/protected use:
│ │ │ │ -
164//
│ │ │ │ -
165public:
│ │ │ │ -
166
│ │ │ │ -
167 IndexArray getFaceChildFaces(Index parentFace);
│ │ │ │ -
168 IndexArray getFaceChildEdges(Index parentFace);
│ │ │ │ -
169 IndexArray getEdgeChildEdges(Index parentEdge);
│ │ │ │ -
170
│ │ │ │ -
171public:
│ │ │ │ -
172 //
│ │ │ │ -
173 // Tags have now been added per-component in Level, but there is additional need to tag
│ │ │ │ -
174 // components within Refinement -- we can't tag the parent level components for any
│ │ │ │ -
175 // refinement (in order to keep it const) and tags associated with children that are
│ │ │ │ -
176 // specific to the child-to-parent mapping may not be warranted in the child level.
│ │ │ │ -
177 //
│ │ │ │ -
178 // Parent tags are only required for sparse refinement. The main property to tag is
│ │ │ │ -
179 // whether a component was selected, and so a single SparseTag is used for all three
│ │ │ │ -
180 // component types. Tagging if a component is "transitional" is also useful. This may
│ │ │ │ -
181 // only be necessary for edges but is currently packed into a mask per-edge for faces,
│ │ │ │ -
182 // which could be deferred, in which case "transitional" could be a single bit.
│ │ │ │ -
183 //
│ │ │ │ -
184 // Child tags are part of the child-to-parent mapping, which consists of the parent
│ │ │ │ -
185 // component index for each child component, plus a tag for the child indicating more
│ │ │ │ -
186 // about its relationship to its parent, e.g. is it completely defined, what the parent
│ │ │ │ -
187 // component type is, what is the index of the child within its parent, etc.
│ │ │ │ -
188 //
│ │ │ │ -
189 struct SparseTag {
│ │ │ │ -
190 SparseTag() : _selected(0), _transitional(0) { }
│ │ │ │ -
191
│ │ │ │ -
192 unsigned char _selected : 1; // component specifically selected for refinement
│ │ │ │ -
193 unsigned char _transitional : 4; // adjacent to a refined component (4-bits for face)
│ │ │ │ -
194 };
│ │ │ │ -
195
│ │ │ │ -
196 struct ChildTag {
│ │ │ │ -
197 ChildTag() { }
│ │ │ │ -
198
│ │ │ │ -
199 unsigned char _incomplete : 1; // incomplete neighborhood to represent limit of parent
│ │ │ │ -
200 unsigned char _parentType : 2; // type of parent component: vertex, edge or face
│ │ │ │ -
201 unsigned char _indexInParent : 2; // index of child wrt parent: 0-3, or iterative if N > 4
│ │ │ │ -
202 };
│ │ │ │ -
203
│ │ │ │ -
204 // Methods to access and modify tags:
│ │ │ │ -
205 SparseTag const & getParentFaceSparseTag( Index f) const { return _parentFaceTag[f]; }
│ │ │ │ -
206 SparseTag const & getParentEdgeSparseTag( Index e) const { return _parentEdgeTag[e]; }
│ │ │ │ -
207 SparseTag const & getParentVertexSparseTag(Index v) const { return _parentVertexTag[v]; }
│ │ │ │ -
208
│ │ │ │ -
209 SparseTag & getParentFaceSparseTag( Index f) { return _parentFaceTag[f]; }
│ │ │ │ -
210 SparseTag & getParentEdgeSparseTag( Index e) { return _parentEdgeTag[e]; }
│ │ │ │ -
211 SparseTag & getParentVertexSparseTag(Index v) { return _parentVertexTag[v]; }
│ │ │ │ -
212
│ │ │ │ -
213 ChildTag const & getChildFaceTag( Index f) const { return _childFaceTag[f]; }
│ │ │ │ -
214 ChildTag const & getChildEdgeTag( Index e) const { return _childEdgeTag[e]; }
│ │ │ │ -
215 ChildTag const & getChildVertexTag(Index v) const { return _childVertexTag[v]; }
│ │ │ │ -
216
│ │ │ │ -
217 ChildTag & getChildFaceTag( Index f) { return _childFaceTag[f]; }
│ │ │ │ -
218 ChildTag & getChildEdgeTag( Index e) { return _childEdgeTag[e]; }
│ │ │ │ -
219 ChildTag & getChildVertexTag(Index v) { return _childVertexTag[v]; }
│ │ │ │ -
220
│ │ │ │ -
221// Remaining methods should really be protected -- for use by subclasses...
│ │ │ │ -
222public:
│ │ │ │ -
223 //
│ │ │ │ -
224 // Methods involved in constructing the parent-to-child mapping -- when the
│ │ │ │ -
225 // refinement is sparse, additional methods are needed to identify the selection:
│ │ │ │ -
226 //
│ │ │ │ -
227 void populateParentToChildMapping();
│ │ │ │ -
228 void populateParentChildIndices();
│ │ │ │ -
229 void printParentToChildMapping() const;
│ │ │ │ -
230
│ │ │ │ -
231 virtual void allocateParentChildIndices() = 0;
│ │ │ │ -
232
│ │ │ │ -
233 // Supporting method for sparse refinement:
│ │ │ │ -
234 void initializeSparseSelectionTags();
│ │ │ │ -
235 void markSparseChildComponentIndices();
│ │ │ │ -
236 void markSparseVertexChildren();
│ │ │ │ -
237 void markSparseEdgeChildren();
│ │ │ │ -
238
│ │ │ │ -
239 virtual void markSparseFaceChildren() = 0;
│ │ │ │ -
240
│ │ │ │ -
241 void initializeChildComponentCounts();
│ │ │ │ -
242
│ │ │ │ -
243 //
│ │ │ │ -
244 // Methods involved in constructing the child-to-parent mapping:
│ │ │ │ -
245 //
│ │ │ │ -
246 void populateChildToParentMapping();
│ │ │ │ -
247
│ │ │ │ -
248 void populateFaceParentVectors(ChildTag const initialChildTags[2][4]);
│ │ │ │ -
249 void populateFaceParentFromParentFaces(ChildTag const initialChildTags[2][4]);
│ │ │ │ -
250
│ │ │ │ -
251 void populateEdgeParentVectors(ChildTag const initialChildTags[2][4]);
│ │ │ │ -
252 void populateEdgeParentFromParentFaces(ChildTag const initialChildTags[2][4]);
│ │ │ │ -
253 void populateEdgeParentFromParentEdges(ChildTag const initialChildTags[2][4]);
│ │ │ │ -
254
│ │ │ │ -
255 void populateVertexParentVectors(ChildTag const initialChildTags[2][4]);
│ │ │ │ -
256 void populateVertexParentFromParentFaces(ChildTag const initialChildTags[2][4]);
│ │ │ │ -
257 void populateVertexParentFromParentEdges(ChildTag const initialChildTags[2][4]);
│ │ │ │ -
258 void populateVertexParentFromParentVertices(ChildTag const initialChildTags[2][4]);
│ │ │ │ -
259
│ │ │ │ -
260 //
│ │ │ │ -
261 // Methods involved in propagating component tags from parent to child:
│ │ │ │ -
262 //
│ │ │ │ -
263 void propagateComponentTags();
│ │ │ │ -
264
│ │ │ │ -
265 void populateFaceTagVectors();
│ │ │ │ -
266 void populateFaceTagsFromParentFaces();
│ │ │ │ -
267
│ │ │ │ -
268 void populateEdgeTagVectors();
│ │ │ │ -
269 void populateEdgeTagsFromParentFaces();
│ │ │ │ -
270 void populateEdgeTagsFromParentEdges();
│ │ │ │ -
271
│ │ │ │ -
272 void populateVertexTagVectors();
│ │ │ │ -
273 void populateVertexTagsFromParentFaces();
│ │ │ │ -
274 void populateVertexTagsFromParentEdges();
│ │ │ │ -
275 void populateVertexTagsFromParentVertices();
│ │ │ │ -
276
│ │ │ │ -
277 //
│ │ │ │ -
278 // Methods (and types) involved in subdividing the topology -- though not
│ │ │ │ -
279 // fully exploited, any subset of the 6 relations can be generated:
│ │ │ │ -
280 //
│ │ │ │ -
281 struct Relations {
│ │ │ │ -
282 unsigned int _faceVertices : 1;
│ │ │ │ -
283 unsigned int _faceEdges : 1;
│ │ │ │ -
284 unsigned int _edgeVertices : 1;
│ │ │ │ -
285 unsigned int _edgeFaces : 1;
│ │ │ │ -
286 unsigned int _vertexFaces : 1;
│ │ │ │ -
287 unsigned int _vertexEdges : 1;
│ │ │ │ -
288
│ │ │ │ -
289 void setAll(bool enable) {
│ │ │ │ -
290 _faceVertices = enable;
│ │ │ │ -
291 _faceEdges = enable;
│ │ │ │ -
292 _edgeVertices = enable;
│ │ │ │ -
293 _edgeFaces = enable;
│ │ │ │ -
294 _vertexFaces = enable;
│ │ │ │ -
295 _vertexEdges = enable;
│ │ │ │ -
296 }
│ │ │ │ -
297 };
│ │ │ │ -
298
│ │ │ │ -
299 void subdivideTopology(Relations const& relationsToSubdivide);
│ │ │ │ -
300
│ │ │ │ -
301 virtual void populateFaceVertexRelation() = 0;
│ │ │ │ -
302 virtual void populateFaceEdgeRelation() = 0;
│ │ │ │ -
303 virtual void populateEdgeVertexRelation() = 0;
│ │ │ │ -
304 virtual void populateEdgeFaceRelation() = 0;
│ │ │ │ -
305 virtual void populateVertexFaceRelation() = 0;
│ │ │ │ -
306 virtual void populateVertexEdgeRelation() = 0;
│ │ │ │ -
307
│ │ │ │ -
308 //
│ │ │ │ -
309 // Methods involved in subdividing and inspecting sharpness values:
│ │ │ │ -
310 //
│ │ │ │ -
311 void subdivideSharpnessValues();
│ │ │ │ -
312
│ │ │ │ -
313 void subdivideVertexSharpness();
│ │ │ │ -
314 void subdivideEdgeSharpness();
│ │ │ │ -
315 void reclassifySemisharpVertices();
│ │ │ │ -
316
│ │ │ │ -
317 //
│ │ │ │ -
318 // Methods involved in subdividing face-varying topology:
│ │ │ │ -
319 //
│ │ │ │ -
320 void subdivideFVarChannels();
│ │ │ │ -
321
│ │ │ │ -
322protected:
│ │ │ │ -
323 // A debug method of Level prints a Refinement (should really change this)
│ │ │ │ -
324 friend void Level::print(const Refinement *) const;
│ │ │ │ -
325
│ │ │ │ -
326 //
│ │ │ │ -
327 // Data members -- the logical grouping of some of these (and methods that make use
│ │ │ │ -
328 // of them) may lead to grouping them into a few utility classes or structs...
│ │ │ │ -
329 //
│ │ │ │ -
330
│ │ │ │ -
331 // Defined on construction:
│ │ │ │ -
332 Level const * _parent;
│ │ │ │ -
333 Level * _child;
│ │ │ │ -
334 Sdc::Options _options;
│ │ │ │ -
335
│ │ │ │ -
336 // Defined by the subclass:
│ │ │ │ -
337 Sdc::Split _splitType;
│ │ │ │ -
338 int _regFaceSize;
│ │ │ │ -
339
│ │ │ │ -
340 // Determined by the refinement options:
│ │ │ │ -
341 bool _uniform;
│ │ │ │ -
342 bool _faceVertsFirst;
│ │ │ │ -
343
│ │ │ │ -
344 //
│ │ │ │ -
345 // Inventory and ordering of the types of child components:
│ │ │ │ -
346 //
│ │ │ │ -
347 int _childFaceFromFaceCount; // arguably redundant (all faces originate from faces)
│ │ │ │ -
348 int _childEdgeFromFaceCount;
│ │ │ │ -
349 int _childEdgeFromEdgeCount;
│ │ │ │ -
350 int _childVertFromFaceCount;
│ │ │ │ -
351 int _childVertFromEdgeCount;
│ │ │ │ -
352 int _childVertFromVertCount;
│ │ │ │ -
353
│ │ │ │ -
354 int _firstChildFaceFromFace; // arguably redundant (all faces originate from faces)
│ │ │ │ -
355 int _firstChildEdgeFromFace;
│ │ │ │ -
356 int _firstChildEdgeFromEdge;
│ │ │ │ -
357 int _firstChildVertFromFace;
│ │ │ │ -
358 int _firstChildVertFromEdge;
│ │ │ │ -
359 int _firstChildVertFromVert;
│ │ │ │ -
360
│ │ │ │ -
361 //
│ │ │ │ -
362 // The parent-to-child mapping:
│ │ │ │ -
363 // These are vectors sized according to the number of parent components (and
│ │ │ │ -
364 // their topology) that contain references/indices to the child components that
│ │ │ │ -
365 // result from them by refinement. When refinement is sparse, parent components
│ │ │ │ -
366 // that have not spawned all child components will have their missing children
│ │ │ │ -
367 // marked as invalid.
│ │ │ │ -
368 //
│ │ │ │ -
369 // NOTE the "Array" members here. Often vectors within the Level can be shared
│ │ │ │ -
370 // with the Refinement, and an Array instance is used to do so. If not shared
│ │ │ │ -
371 // the subclass just initializes the Array members after allocating its own local
│ │ │ │ -
372 // vector members.
│ │ │ │ -
373 //
│ │ │ │ -
374 IndexArray _faceChildFaceCountsAndOffsets;
│ │ │ │ -
375 IndexArray _faceChildEdgeCountsAndOffsets;
│ │ │ │ -
376
│ │ │ │ -
377 IndexVector _faceChildFaceIndices; // *cannot* always use face-vert counts/offsets
│ │ │ │ -
378 IndexVector _faceChildEdgeIndices; // can use face-vert counts/offsets
│ │ │ │ -
379 IndexVector _faceChildVertIndex;
│ │ │ │ -
380
│ │ │ │ -
381 IndexVector _edgeChildEdgeIndices; // trivial/corresponding pair for each
│ │ │ │ -
382 IndexVector _edgeChildVertIndex;
│ │ │ │ -
383
│ │ │ │ -
384 IndexVector _vertChildVertIndex;
│ │ │ │ -
385
│ │ │ │ -
386 //
│ │ │ │ -
387 // The child-to-parent mapping:
│ │ │ │ -
388 //
│ │ │ │ -
389 IndexVector _childFaceParentIndex;
│ │ │ │ -
390 IndexVector _childEdgeParentIndex;
│ │ │ │ -
391 IndexVector _childVertexParentIndex;
│ │ │ │ -
392
│ │ │ │ -
393 std::vector<ChildTag> _childFaceTag;
│ │ │ │ -
394 std::vector<ChildTag> _childEdgeTag;
│ │ │ │ -
395 std::vector<ChildTag> _childVertexTag;
│ │ │ │ -
396
│ │ │ │ -
397 //
│ │ │ │ -
398 // Tags for sparse selection of components:
│ │ │ │ -
399 //
│ │ │ │ -
400 std::vector<SparseTag> _parentFaceTag;
│ │ │ │ -
401 std::vector<SparseTag> _parentEdgeTag;
│ │ │ │ -
402 std::vector<SparseTag> _parentVertexTag;
│ │ │ │ -
403
│ │ │ │ -
404 //
│ │ │ │ -
405 // Refinement data for face-varying channels present in the Levels being refined:
│ │ │ │ -
406 //
│ │ │ │ -
407 std::vector<FVarRefinement*> _fvarChannels;
│ │ │ │ -
408};
│ │ │ │ -
409
│ │ │ │ -
410inline ConstIndexArray
│ │ │ │ -
411Refinement::getFaceChildFaces(Index parentFace) const {
│ │ │ │ -
412
│ │ │ │ -
413 return ConstIndexArray(&_faceChildFaceIndices[_faceChildFaceCountsAndOffsets[2*parentFace+1]],
│ │ │ │ -
414 _faceChildFaceCountsAndOffsets[2*parentFace]);
│ │ │ │ -
415}
│ │ │ │ -
416
│ │ │ │ -
417inline IndexArray
│ │ │ │ -
418Refinement::getFaceChildFaces(Index parentFace) {
│ │ │ │ -
419
│ │ │ │ -
420 return IndexArray(&_faceChildFaceIndices[_faceChildFaceCountsAndOffsets[2*parentFace+1]],
│ │ │ │ -
421 _faceChildFaceCountsAndOffsets[2*parentFace]);
│ │ │ │ -
422}
│ │ │ │ -
423
│ │ │ │ -
424inline ConstIndexArray
│ │ │ │ -
425Refinement::getFaceChildEdges(Index parentFace) const {
│ │ │ │ -
426
│ │ │ │ -
427 return ConstIndexArray(&_faceChildEdgeIndices[_faceChildEdgeCountsAndOffsets[2*parentFace+1]],
│ │ │ │ -
428 _faceChildEdgeCountsAndOffsets[2*parentFace]);
│ │ │ │ -
429}
│ │ │ │ -
430inline IndexArray
│ │ │ │ -
431Refinement::getFaceChildEdges(Index parentFace) {
│ │ │ │ -
432
│ │ │ │ -
433 return IndexArray(&_faceChildEdgeIndices[_faceChildEdgeCountsAndOffsets[2*parentFace+1]],
│ │ │ │ -
434 _faceChildEdgeCountsAndOffsets[2*parentFace]);
│ │ │ │ -
435}
│ │ │ │ -
436
│ │ │ │ -
437inline ConstIndexArray
│ │ │ │ -
438Refinement::getEdgeChildEdges(Index parentEdge) const {
│ │ │ │ -
439
│ │ │ │ -
440 return ConstIndexArray(&_edgeChildEdgeIndices[parentEdge*2], 2);
│ │ │ │ -
441}
│ │ │ │ -
442
│ │ │ │ -
443inline IndexArray
│ │ │ │ -
444Refinement::getEdgeChildEdges(Index parentEdge) {
│ │ │ │ -
445
│ │ │ │ -
446 return IndexArray(&_edgeChildEdgeIndices[parentEdge*2], 2);
│ │ │ │ -
447}
│ │ │ │ -
448
│ │ │ │ -
449} // end namespace internal
│ │ │ │ -
450} // end namespace Vtr
│ │ │ │ -
451
│ │ │ │ -
452} // end namespace OPENSUBDIV_VERSION
│ │ │ │ -
453using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
454} // end namespace OpenSubdiv
│ │ │ │ -
455
│ │ │ │ -
456#endif /* OPENSUBDIV3_VTR_REFINEMENT_H */
│ │ │ │ +
83 void markVertexSelected(Index pVertex) const { _refine->getParentVertexSparseTag(pVertex)._selected = true; }
│ │ │ │ +
84 void markEdgeSelected( Index pEdge) const { _refine->getParentEdgeSparseTag(pEdge)._selected = true; }
│ │ │ │ +
85 void markFaceSelected( Index pFace) const { _refine->getParentFaceSparseTag(pFace)._selected = true; }
│ │ │ │ +
86
│ │ │ │ +
87 void initializeSelection();
│ │ │ │ +
88
│ │ │ │ +
89private:
│ │ │ │ +
90 Refinement* _refine;
│ │ │ │ +
91 bool _selected;
│ │ │ │ +
92};
│ │ │ │ +
93
│ │ │ │ +
94} // end namespace internal
│ │ │ │ +
95} // end namespace Vtr
│ │ │ │ +
96
│ │ │ │ +
97} // end namespace OPENSUBDIV_VERSION
│ │ │ │ +
98using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
99} // end namespace OpenSubdiv
│ │ │ │ +
100
│ │ │ │ +
101#endif /* OPENSUBDIV3_VTR_SPARSE_SELECTOR_H */
│ │ │ │ │ │ │ │ │ │ │ │ -
std::vector< Index > IndexVector
Definition types.h:77
│ │ │ │ -
ConstArray< Index > ConstIndexArray
Definition types.h:80
│ │ │ │ - │ │ │ │ -
Split
Enumerated type for all face splitting schemes.
Definition types.h:47
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,12 +1,12 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -refinement.h │ │ │ │ │ +sparseSelector.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ 2// Copyright 2014 DreamWorks Animation LLC. │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ @@ -23,545 +23,111 @@ │ │ │ │ │ 17// │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ -24#ifndef OPENSUBDIV3_VTR_REFINEMENT_H │ │ │ │ │ -25#define OPENSUBDIV3_VTR_REFINEMENT_H │ │ │ │ │ +24#ifndef OPENSUBDIV3_VTR_SPARSE_SELECTOR_H │ │ │ │ │ +25#define OPENSUBDIV3_VTR_SPARSE_SELECTOR_H │ │ │ │ │ 26 │ │ │ │ │ 27#include "../version.h" │ │ │ │ │ 28 │ │ │ │ │ -29#include "../sdc/types.h" │ │ │ │ │ -30#include "../sdc/options.h" │ │ │ │ │ -31#include "../vtr/types.h" │ │ │ │ │ -32#include "../vtr/level.h" │ │ │ │ │ +29#include "../vtr/types.h" │ │ │ │ │ +30#include "../vtr/refinement.h" │ │ │ │ │ +31 │ │ │ │ │ +32#include │ │ │ │ │ 33 │ │ │ │ │ -34#include │ │ │ │ │ -35 │ │ │ │ │ -36// │ │ │ │ │ -37// Declaration for the main refinement class (Refinement) and its pre- │ │ │ │ │ -requisites: │ │ │ │ │ -38// │ │ │ │ │ -39namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ -40namespace OPENSUBDIV_VERSION { │ │ │ │ │ -41 │ │ │ │ │ -42namespace Vtr { │ │ │ │ │ -43namespace internal { │ │ │ │ │ -44 │ │ │ │ │ -45class FVarRefinement; │ │ │ │ │ -46 │ │ │ │ │ +34namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ +35namespace OPENSUBDIV_VERSION { │ │ │ │ │ +36 │ │ │ │ │ +37namespace Vtr { │ │ │ │ │ +38namespace internal { │ │ │ │ │ +39 │ │ │ │ │ +40// │ │ │ │ │ +41// SparseSelector: │ │ │ │ │ +42// Class supporting "selection" of components in a Level for sparse │ │ │ │ │ +Refinement. │ │ │ │ │ +43// The term "selection" here implies interest in the limit for that │ │ │ │ │ +component, i.e. │ │ │ │ │ +44// the limit point for a selected vertex, the limit patch for a face, etc. So │ │ │ │ │ +this │ │ │ │ │ +45// class is responsible for ensuring that all neighboring components required │ │ │ │ │ +to │ │ │ │ │ +46// support the limit of those selected are included in the refinement. │ │ │ │ │ 47// │ │ │ │ │ -48// Refinement: │ │ │ │ │ -49// A refinement is a mapping between two levels -- relating the components in │ │ │ │ │ -the original │ │ │ │ │ -50// (parent) level to the one refined (child). The refinement may be complete │ │ │ │ │ -(uniform) or sparse │ │ │ │ │ -51// (adaptive or otherwise selective), so not all components in the parent │ │ │ │ │ -level will spawn │ │ │ │ │ -52// components in the child level. │ │ │ │ │ -53// │ │ │ │ │ -54// Refinement is an abstract class and expects subclasses corresponding to │ │ │ │ │ -the different types │ │ │ │ │ -55// of topological splits that the supported subdivision schemes collectively │ │ │ │ │ -require, i.e. those │ │ │ │ │ -56// listed in Sdc::SplitType. Note the virtual requirements expected of the │ │ │ │ │ -subclasses in the list │ │ │ │ │ -57// of protected methods -- they differ mainly in the topology that is created │ │ │ │ │ -in the child Level │ │ │ │ │ -58// and not the propagation of tags through refinement, subdivision of │ │ │ │ │ -sharpness values or the │ │ │ │ │ -59// treatment of face-varying data. The primary subclasses are QuadRefinement │ │ │ │ │ -and TriRefinement. │ │ │ │ │ -60// │ │ │ │ │ -61// At a high level, all that is necessary in terms of interface is to │ │ │ │ │ -construct, initialize │ │ │ │ │ -62// (linking the two levels), optionally select components for sparse │ │ │ │ │ -refinement (via use of the │ │ │ │ │ -63// SparseSelector) and call the refine() method. This usage is expected of │ │ │ │ │ -Far::TopologyRefiner. │ │ │ │ │ -64// │ │ │ │ │ -65// Since we really want this class to be restricted from public access │ │ │ │ │ -eventually, all methods │ │ │ │ │ -66// begin with lower case (as is the convention for protected methods) and the │ │ │ │ │ -list of friends │ │ │ │ │ -67// will be maintained more strictly. │ │ │ │ │ -68// │ │ │ │ │ -69class Refinement { │ │ │ │ │ -70 │ │ │ │ │ -71public: │ │ │ │ │ -72 Refinement(Level const & parent, Level & child, Sdc::Options const& │ │ │ │ │ -schemeOptions); │ │ │ │ │ -73 virtual ~Refinement(); │ │ │ │ │ -74 │ │ │ │ │ -75 Level const& parent() const { return *_parent; } │ │ │ │ │ -76 Level const& child() const { return *_child; } │ │ │ │ │ -77 Level& child() { return *_child; } │ │ │ │ │ +48// This class is associated with (and constructed given) a Refinement and its │ │ │ │ │ +role │ │ │ │ │ +49// is to initialize that Refinement instance for eventual sparse refinement. │ │ │ │ │ +So it │ │ │ │ │ +50// is a friend of and expected to modify the Refinement as part of the │ │ │ │ │ +selection. │ │ │ │ │ +51// Given its simplicity and scope it may be worth nesting it in Vtr:: │ │ │ │ │ +Refinement. │ │ │ │ │ +52// │ │ │ │ │ +53// While all three component types -- vertices, edges and faces -- can be │ │ │ │ │ +selected, │ │ │ │ │ +54// only selection of faces is currently used and actively supported as part │ │ │ │ │ +of the │ │ │ │ │ +55// feature-adaptive refinement. │ │ │ │ │ +56// │ │ │ │ │ +57class SparseSelector { │ │ │ │ │ +58 │ │ │ │ │ +59public: │ │ │ │ │ +60 SparseSelector(Refinement& refine) : _refine(&refine), _selected(false) { } │ │ │ │ │ +61 ~SparseSelector() { } │ │ │ │ │ +62 │ │ │ │ │ +63 void setRefinement(Refinement& refine) { _refine = &refine; } │ │ │ │ │ +64 Refinement& getRefinement() const { return *_refine; } │ │ │ │ │ +65 │ │ │ │ │ +66 bool isSelectionEmpty() const { return !_selected; } │ │ │ │ │ +67 │ │ │ │ │ +68 // │ │ │ │ │ +69 // Methods for selecting (and marking) components for refinement. All │ │ │ │ │ +component indices │ │ │ │ │ +70 // refer to components in the parent: │ │ │ │ │ +71 // │ │ │ │ │ +72 void selectVertex(_I_n_d_e_x pVertex); │ │ │ │ │ +73 void selectEdge( _I_n_d_e_x pEdge); │ │ │ │ │ +74 void selectFace( _I_n_d_e_x pFace); │ │ │ │ │ +75 │ │ │ │ │ +76private: │ │ │ │ │ +77 SparseSelector() : _refine(0), _selected(false) { } │ │ │ │ │ 78 │ │ │ │ │ -79 _S_d_c_:_:_S_p_l_i_t getSplitType() const { return _splitType; } │ │ │ │ │ -80 int getRegularFaceSize() const { return _regFaceSize; } │ │ │ │ │ -81 Sdc::Options getOptions() const { return _options; } │ │ │ │ │ +79 bool wasVertexSelected(_I_n_d_e_x pVertex) const { return _refine- │ │ │ │ │ +>getParentVertexSparseTag(pVertex)._selected; } │ │ │ │ │ +80 bool wasEdgeSelected( _I_n_d_e_x pEdge) const { return _refine- │ │ │ │ │ +>getParentEdgeSparseTag(pEdge)._selected; } │ │ │ │ │ +81 bool wasFaceSelected( _I_n_d_e_x pFace) const { return _refine- │ │ │ │ │ +>getParentFaceSparseTag(pFace)._selected; } │ │ │ │ │ 82 │ │ │ │ │ -83 // Face-varying: │ │ │ │ │ -84 int getNumFVarChannels() const { return (int) _fvarChannels.size(); } │ │ │ │ │ -85 │ │ │ │ │ -86 FVarRefinement const & getFVarRefinement(int c) const { return │ │ │ │ │ -*_fvarChannels[c]; } │ │ │ │ │ -87 │ │ │ │ │ -88 // │ │ │ │ │ -89 // Options associated with the actual refinement operation, which may end up │ │ │ │ │ -90 // quite involved if we want to allow for the refinement of data that is not │ │ │ │ │ -91 // of interest to be suppressed. For now we have: │ │ │ │ │ -92 // │ │ │ │ │ -93 // "sparse": the alternative to uniform refinement, which requires that │ │ │ │ │ -94 // components be previously selected/marked to be included. │ │ │ │ │ -95 // │ │ │ │ │ -96 // "minimal topology": this is one that may get broken down into a finer │ │ │ │ │ -97 // set of options. It suppresses "full topology" in the child level │ │ │ │ │ -98 // and only generates what is minimally necessary for interpolation -- │ │ │ │ │ -99 // which requires at least the face-vertices for faces, but also the │ │ │ │ │ -100 // vertex-faces for any face-varying channels present. So it will │ │ │ │ │ -101 // generate one or two of the six possible topological relations. │ │ │ │ │ -102 // │ │ │ │ │ -103 // These are strictly controlled right now, e.g. for sparse refinement, we │ │ │ │ │ -104 // currently enforce full topology at the finest level to allow for │ │ │ │ │ -subsequent │ │ │ │ │ -105 // patch construction. │ │ │ │ │ -106 // │ │ │ │ │ -107 struct Options { │ │ │ │ │ -108 Options() : _sparse(false), │ │ │ │ │ -109 _faceVertsFirst(false), │ │ │ │ │ -110 _minimalTopology(false) │ │ │ │ │ -111 { } │ │ │ │ │ -112 │ │ │ │ │ -113 unsigned int _sparse : 1; │ │ │ │ │ -114 unsigned int _faceVertsFirst : 1; │ │ │ │ │ -115 unsigned int _minimalTopology : 1; │ │ │ │ │ -116 │ │ │ │ │ -117 // Still under consideration: │ │ │ │ │ -118 //unsigned int _childToParentMap : 1; │ │ │ │ │ -119 }; │ │ │ │ │ -120 │ │ │ │ │ -121 void refine(Options options = Options()); │ │ │ │ │ -122 │ │ │ │ │ -123 bool hasFaceVerticesFirst() const { return _faceVertsFirst; } │ │ │ │ │ -124 │ │ │ │ │ -125public: │ │ │ │ │ -126 // │ │ │ │ │ -127 // Access to members -- some testing classes (involving vertex │ │ │ │ │ -interpolation) │ │ │ │ │ -128 // currently make use of these: │ │ │ │ │ -129 // │ │ │ │ │ -130 int getNumChildFacesFromFaces() const { return _childFaceFromFaceCount; } │ │ │ │ │ -131 int getNumChildEdgesFromFaces() const { return _childEdgeFromFaceCount; } │ │ │ │ │ -132 int getNumChildEdgesFromEdges() const { return _childEdgeFromEdgeCount; } │ │ │ │ │ -133 int getNumChildVerticesFromFaces() const { return _childVertFromFaceCount; │ │ │ │ │ -} │ │ │ │ │ -134 int getNumChildVerticesFromEdges() const { return _childVertFromEdgeCount; │ │ │ │ │ -} │ │ │ │ │ -135 int getNumChildVerticesFromVertices() const { return │ │ │ │ │ -_childVertFromVertCount; } │ │ │ │ │ -136 │ │ │ │ │ -137 _I_n_d_e_x getFirstChildFaceFromFaces() const { return _firstChildFaceFromFace; │ │ │ │ │ -} │ │ │ │ │ -138 _I_n_d_e_x getFirstChildEdgeFromFaces() const { return _firstChildEdgeFromFace; │ │ │ │ │ -} │ │ │ │ │ -139 _I_n_d_e_x getFirstChildEdgeFromEdges() const { return _firstChildEdgeFromEdge; │ │ │ │ │ -} │ │ │ │ │ -140 _I_n_d_e_x getFirstChildVertexFromFaces() const { return │ │ │ │ │ -_firstChildVertFromFace; } │ │ │ │ │ -141 _I_n_d_e_x getFirstChildVertexFromEdges() const { return │ │ │ │ │ -_firstChildVertFromEdge; } │ │ │ │ │ -142 _I_n_d_e_x getFirstChildVertexFromVertices() const { return │ │ │ │ │ -_firstChildVertFromVert; } │ │ │ │ │ -143 │ │ │ │ │ -144 _I_n_d_e_x getFaceChildVertex(_I_n_d_e_x f) const { return _faceChildVertIndex[f]; } │ │ │ │ │ -145 _I_n_d_e_x getEdgeChildVertex(_I_n_d_e_x e) const { return _edgeChildVertIndex[e]; } │ │ │ │ │ -146 _I_n_d_e_x getVertexChildVertex(_I_n_d_e_x v) const { return _vertChildVertIndex[v]; │ │ │ │ │ -} │ │ │ │ │ -147 │ │ │ │ │ -148 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y getFaceChildFaces(_I_n_d_e_x parentFace) const; │ │ │ │ │ -149 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y getFaceChildEdges(_I_n_d_e_x parentFace) const; │ │ │ │ │ -150 _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y getEdgeChildEdges(_I_n_d_e_x parentEdge) const; │ │ │ │ │ -151 │ │ │ │ │ -152 // Child-to-parent relationships │ │ │ │ │ -153 bool isChildVertexComplete(_I_n_d_e_x v) const { return ! _childVertexTag │ │ │ │ │ -[v]._incomplete; } │ │ │ │ │ -154 │ │ │ │ │ -155 _I_n_d_e_x getChildFaceParentFace(_I_n_d_e_x f) const { return _childFaceParentIndex │ │ │ │ │ -[f]; } │ │ │ │ │ -156 int getChildFaceInParentFace(_I_n_d_e_x f) const { return _childFaceTag │ │ │ │ │ -[f]._indexInParent; } │ │ │ │ │ -157 │ │ │ │ │ -158 _I_n_d_e_x getChildEdgeParentIndex(_I_n_d_e_x e) const { return _childEdgeParentIndex │ │ │ │ │ -[e]; } │ │ │ │ │ -159 │ │ │ │ │ -160 _I_n_d_e_x getChildVertexParentIndex(_I_n_d_e_x v) const { return │ │ │ │ │ -_childVertexParentIndex[v]; } │ │ │ │ │ -161 │ │ │ │ │ -162// │ │ │ │ │ -163// Modifiers intended for internal/protected use: │ │ │ │ │ -164// │ │ │ │ │ -165public: │ │ │ │ │ -166 │ │ │ │ │ -167 _I_n_d_e_x_A_r_r_a_y getFaceChildFaces(_I_n_d_e_x parentFace); │ │ │ │ │ -168 _I_n_d_e_x_A_r_r_a_y getFaceChildEdges(_I_n_d_e_x parentFace); │ │ │ │ │ -169 _I_n_d_e_x_A_r_r_a_y getEdgeChildEdges(_I_n_d_e_x parentEdge); │ │ │ │ │ -170 │ │ │ │ │ -171public: │ │ │ │ │ -172 // │ │ │ │ │ -173 // Tags have now been added per-component in Level, but there is additional │ │ │ │ │ -need to tag │ │ │ │ │ -174 // components within Refinement -- we can't tag the parent level components │ │ │ │ │ -for any │ │ │ │ │ -175 // refinement (in order to keep it const) and tags associated with children │ │ │ │ │ -that are │ │ │ │ │ -176 // specific to the child-to-parent mapping may not be warranted in the │ │ │ │ │ -child level. │ │ │ │ │ -177 // │ │ │ │ │ -178 // Parent tags are only required for sparse refinement. The main property │ │ │ │ │ -to tag is │ │ │ │ │ -179 // whether a component was selected, and so a single SparseTag is used for │ │ │ │ │ -all three │ │ │ │ │ -180 // component types. Tagging if a component is "transitional" is also │ │ │ │ │ -useful. This may │ │ │ │ │ -181 // only be necessary for edges but is currently packed into a mask per-edge │ │ │ │ │ -for faces, │ │ │ │ │ -182 // which could be deferred, in which case "transitional" could be a single │ │ │ │ │ -bit. │ │ │ │ │ -183 // │ │ │ │ │ -184 // Child tags are part of the child-to-parent mapping, which consists of │ │ │ │ │ -the parent │ │ │ │ │ -185 // component index for each child component, plus a tag for the child │ │ │ │ │ -indicating more │ │ │ │ │ -186 // about its relationship to its parent, e.g. is it completely defined, │ │ │ │ │ -what the parent │ │ │ │ │ -187 // component type is, what is the index of the child within its parent, │ │ │ │ │ -etc. │ │ │ │ │ -188 // │ │ │ │ │ -189 struct SparseTag { │ │ │ │ │ -190 SparseTag() : _selected(0), _transitional(0) { } │ │ │ │ │ -191 │ │ │ │ │ -192 unsigned char _selected : 1; // component specifically selected for │ │ │ │ │ -refinement │ │ │ │ │ -193 unsigned char _transitional : 4; // adjacent to a refined component (4-bits │ │ │ │ │ -for face) │ │ │ │ │ -194 }; │ │ │ │ │ -195 │ │ │ │ │ -196 struct ChildTag { │ │ │ │ │ -197 ChildTag() { } │ │ │ │ │ -198 │ │ │ │ │ -199 unsigned char _incomplete : 1; // incomplete neighborhood to represent │ │ │ │ │ -limit of parent │ │ │ │ │ -200 unsigned char _parentType : 2; // type of parent component: vertex, edge or │ │ │ │ │ -face │ │ │ │ │ -201 unsigned char _indexInParent : 2; // index of child wrt parent: 0-3, or │ │ │ │ │ -iterative if N > 4 │ │ │ │ │ -202 }; │ │ │ │ │ -203 │ │ │ │ │ -204 // Methods to access and modify tags: │ │ │ │ │ -205 SparseTag const & getParentFaceSparseTag( _I_n_d_e_x f) const { return │ │ │ │ │ -_parentFaceTag[f]; } │ │ │ │ │ -206 SparseTag const & getParentEdgeSparseTag( _I_n_d_e_x e) const { return │ │ │ │ │ -_parentEdgeTag[e]; } │ │ │ │ │ -207 SparseTag const & getParentVertexSparseTag(_I_n_d_e_x v) const { return │ │ │ │ │ -_parentVertexTag[v]; } │ │ │ │ │ -208 │ │ │ │ │ -209 SparseTag & getParentFaceSparseTag( _I_n_d_e_x f) { return _parentFaceTag[f]; } │ │ │ │ │ -210 SparseTag & getParentEdgeSparseTag( _I_n_d_e_x e) { return _parentEdgeTag[e]; } │ │ │ │ │ -211 SparseTag & getParentVertexSparseTag(_I_n_d_e_x v) { return _parentVertexTag[v]; │ │ │ │ │ -} │ │ │ │ │ -212 │ │ │ │ │ -213 ChildTag const & getChildFaceTag( _I_n_d_e_x f) const { return _childFaceTag[f]; │ │ │ │ │ -} │ │ │ │ │ -214 ChildTag const & getChildEdgeTag( _I_n_d_e_x e) const { return _childEdgeTag[e]; │ │ │ │ │ -} │ │ │ │ │ -215 ChildTag const & getChildVertexTag(_I_n_d_e_x v) const { return _childVertexTag │ │ │ │ │ -[v]; } │ │ │ │ │ -216 │ │ │ │ │ -217 ChildTag & getChildFaceTag( _I_n_d_e_x f) { return _childFaceTag[f]; } │ │ │ │ │ -218 ChildTag & getChildEdgeTag( _I_n_d_e_x e) { return _childEdgeTag[e]; } │ │ │ │ │ -219 ChildTag & getChildVertexTag(_I_n_d_e_x v) { return _childVertexTag[v]; } │ │ │ │ │ -220 │ │ │ │ │ -221// Remaining methods should really be protected -- for use by subclasses... │ │ │ │ │ -222public: │ │ │ │ │ -223 // │ │ │ │ │ -224 // Methods involved in constructing the parent-to-child mapping -- when the │ │ │ │ │ -225 // refinement is sparse, additional methods are needed to identify the │ │ │ │ │ -selection: │ │ │ │ │ -226 // │ │ │ │ │ -227 void populateParentToChildMapping(); │ │ │ │ │ -228 void populateParentChildIndices(); │ │ │ │ │ -229 void printParentToChildMapping() const; │ │ │ │ │ -230 │ │ │ │ │ -231 virtual void allocateParentChildIndices() = 0; │ │ │ │ │ -232 │ │ │ │ │ -233 // Supporting method for sparse refinement: │ │ │ │ │ -234 void initializeSparseSelectionTags(); │ │ │ │ │ -235 void markSparseChildComponentIndices(); │ │ │ │ │ -236 void markSparseVertexChildren(); │ │ │ │ │ -237 void markSparseEdgeChildren(); │ │ │ │ │ -238 │ │ │ │ │ -239 virtual void markSparseFaceChildren() = 0; │ │ │ │ │ -240 │ │ │ │ │ -241 void initializeChildComponentCounts(); │ │ │ │ │ -242 │ │ │ │ │ -243 // │ │ │ │ │ -244 // Methods involved in constructing the child-to-parent mapping: │ │ │ │ │ -245 // │ │ │ │ │ -246 void populateChildToParentMapping(); │ │ │ │ │ -247 │ │ │ │ │ -248 void populateFaceParentVectors(ChildTag const initialChildTags[2][4]); │ │ │ │ │ -249 void populateFaceParentFromParentFaces(ChildTag const initialChildTags[2] │ │ │ │ │ -[4]); │ │ │ │ │ -250 │ │ │ │ │ -251 void populateEdgeParentVectors(ChildTag const initialChildTags[2][4]); │ │ │ │ │ -252 void populateEdgeParentFromParentFaces(ChildTag const initialChildTags[2] │ │ │ │ │ -[4]); │ │ │ │ │ -253 void populateEdgeParentFromParentEdges(ChildTag const initialChildTags[2] │ │ │ │ │ -[4]); │ │ │ │ │ -254 │ │ │ │ │ -255 void populateVertexParentVectors(ChildTag const initialChildTags[2][4]); │ │ │ │ │ -256 void populateVertexParentFromParentFaces(ChildTag const initialChildTags[2] │ │ │ │ │ -[4]); │ │ │ │ │ -257 void populateVertexParentFromParentEdges(ChildTag const initialChildTags[2] │ │ │ │ │ -[4]); │ │ │ │ │ -258 void populateVertexParentFromParentVertices(ChildTag const initialChildTags │ │ │ │ │ -[2][4]); │ │ │ │ │ -259 │ │ │ │ │ -260 // │ │ │ │ │ -261 // Methods involved in propagating component tags from parent to child: │ │ │ │ │ -262 // │ │ │ │ │ -263 void propagateComponentTags(); │ │ │ │ │ -264 │ │ │ │ │ -265 void populateFaceTagVectors(); │ │ │ │ │ -266 void populateFaceTagsFromParentFaces(); │ │ │ │ │ -267 │ │ │ │ │ -268 void populateEdgeTagVectors(); │ │ │ │ │ -269 void populateEdgeTagsFromParentFaces(); │ │ │ │ │ -270 void populateEdgeTagsFromParentEdges(); │ │ │ │ │ -271 │ │ │ │ │ -272 void populateVertexTagVectors(); │ │ │ │ │ -273 void populateVertexTagsFromParentFaces(); │ │ │ │ │ -274 void populateVertexTagsFromParentEdges(); │ │ │ │ │ -275 void populateVertexTagsFromParentVertices(); │ │ │ │ │ -276 │ │ │ │ │ -277 // │ │ │ │ │ -278 // Methods (and types) involved in subdividing the topology -- though not │ │ │ │ │ -279 // fully exploited, any subset of the 6 relations can be generated: │ │ │ │ │ -280 // │ │ │ │ │ -281 struct Relations { │ │ │ │ │ -282 unsigned int _faceVertices : 1; │ │ │ │ │ -283 unsigned int _faceEdges : 1; │ │ │ │ │ -284 unsigned int _edgeVertices : 1; │ │ │ │ │ -285 unsigned int _edgeFaces : 1; │ │ │ │ │ -286 unsigned int _vertexFaces : 1; │ │ │ │ │ -287 unsigned int _vertexEdges : 1; │ │ │ │ │ -288 │ │ │ │ │ -289 void setAll(bool enable) { │ │ │ │ │ -290 _faceVertices = enable; │ │ │ │ │ -291 _faceEdges = enable; │ │ │ │ │ -292 _edgeVertices = enable; │ │ │ │ │ -293 _edgeFaces = enable; │ │ │ │ │ -294 _vertexFaces = enable; │ │ │ │ │ -295 _vertexEdges = enable; │ │ │ │ │ -296 } │ │ │ │ │ -297 }; │ │ │ │ │ -298 │ │ │ │ │ -299 void subdivideTopology(Relations const& relationsToSubdivide); │ │ │ │ │ -300 │ │ │ │ │ -301 virtual void populateFaceVertexRelation() = 0; │ │ │ │ │ -302 virtual void populateFaceEdgeRelation() = 0; │ │ │ │ │ -303 virtual void populateEdgeVertexRelation() = 0; │ │ │ │ │ -304 virtual void populateEdgeFaceRelation() = 0; │ │ │ │ │ -305 virtual void populateVertexFaceRelation() = 0; │ │ │ │ │ -306 virtual void populateVertexEdgeRelation() = 0; │ │ │ │ │ -307 │ │ │ │ │ -308 // │ │ │ │ │ -309 // Methods involved in subdividing and inspecting sharpness values: │ │ │ │ │ -310 // │ │ │ │ │ -311 void subdivideSharpnessValues(); │ │ │ │ │ -312 │ │ │ │ │ -313 void subdivideVertexSharpness(); │ │ │ │ │ -314 void subdivideEdgeSharpness(); │ │ │ │ │ -315 void reclassifySemisharpVertices(); │ │ │ │ │ -316 │ │ │ │ │ -317 // │ │ │ │ │ -318 // Methods involved in subdividing face-varying topology: │ │ │ │ │ -319 // │ │ │ │ │ -320 void subdivideFVarChannels(); │ │ │ │ │ -321 │ │ │ │ │ -322protected: │ │ │ │ │ -323 // A debug method of Level prints a Refinement (should really change this) │ │ │ │ │ -324 friend void Level::print(const Refinement *) const; │ │ │ │ │ -325 │ │ │ │ │ -326 // │ │ │ │ │ -327 // Data members -- the logical grouping of some of these (and methods that │ │ │ │ │ -make use │ │ │ │ │ -328 // of them) may lead to grouping them into a few utility classes or │ │ │ │ │ -structs... │ │ │ │ │ -329 // │ │ │ │ │ -330 │ │ │ │ │ -331 // Defined on construction: │ │ │ │ │ -332 Level const * _parent; │ │ │ │ │ -333 Level * _child; │ │ │ │ │ -334 Sdc::Options _options; │ │ │ │ │ -335 │ │ │ │ │ -336 // Defined by the subclass: │ │ │ │ │ -337 _S_d_c_:_:_S_p_l_i_t _splitType; │ │ │ │ │ -338 int _regFaceSize; │ │ │ │ │ -339 │ │ │ │ │ -340 // Determined by the refinement options: │ │ │ │ │ -341 bool _uniform; │ │ │ │ │ -342 bool _faceVertsFirst; │ │ │ │ │ -343 │ │ │ │ │ -344 // │ │ │ │ │ -345 // Inventory and ordering of the types of child components: │ │ │ │ │ -346 // │ │ │ │ │ -347 int _childFaceFromFaceCount; // arguably redundant (all faces originate │ │ │ │ │ -from faces) │ │ │ │ │ -348 int _childEdgeFromFaceCount; │ │ │ │ │ -349 int _childEdgeFromEdgeCount; │ │ │ │ │ -350 int _childVertFromFaceCount; │ │ │ │ │ -351 int _childVertFromEdgeCount; │ │ │ │ │ -352 int _childVertFromVertCount; │ │ │ │ │ -353 │ │ │ │ │ -354 int _firstChildFaceFromFace; // arguably redundant (all faces originate │ │ │ │ │ -from faces) │ │ │ │ │ -355 int _firstChildEdgeFromFace; │ │ │ │ │ -356 int _firstChildEdgeFromEdge; │ │ │ │ │ -357 int _firstChildVertFromFace; │ │ │ │ │ -358 int _firstChildVertFromEdge; │ │ │ │ │ -359 int _firstChildVertFromVert; │ │ │ │ │ -360 │ │ │ │ │ -361 // │ │ │ │ │ -362 // The parent-to-child mapping: │ │ │ │ │ -363 // These are vectors sized according to the number of parent components │ │ │ │ │ -(and │ │ │ │ │ -364 // their topology) that contain references/indices to the child components │ │ │ │ │ -that │ │ │ │ │ -365 // result from them by refinement. When refinement is sparse, parent │ │ │ │ │ -components │ │ │ │ │ -366 // that have not spawned all child components will have their missing │ │ │ │ │ -children │ │ │ │ │ -367 // marked as invalid. │ │ │ │ │ -368 // │ │ │ │ │ -369 // NOTE the "Array" members here. Often vectors within the Level can be │ │ │ │ │ -shared │ │ │ │ │ -370 // with the Refinement, and an Array instance is used to do so. If not │ │ │ │ │ -shared │ │ │ │ │ -371 // the subclass just initializes the Array members after allocating its own │ │ │ │ │ -local │ │ │ │ │ -372 // vector members. │ │ │ │ │ -373 // │ │ │ │ │ -374 _I_n_d_e_x_A_r_r_a_y _faceChildFaceCountsAndOffsets; │ │ │ │ │ -375 _I_n_d_e_x_A_r_r_a_y _faceChildEdgeCountsAndOffsets; │ │ │ │ │ -376 │ │ │ │ │ -377 _I_n_d_e_x_V_e_c_t_o_r _faceChildFaceIndices; // *cannot* always use face-vert counts/ │ │ │ │ │ -offsets │ │ │ │ │ -378 _I_n_d_e_x_V_e_c_t_o_r _faceChildEdgeIndices; // can use face-vert counts/offsets │ │ │ │ │ -379 _I_n_d_e_x_V_e_c_t_o_r _faceChildVertIndex; │ │ │ │ │ -380 │ │ │ │ │ -381 _I_n_d_e_x_V_e_c_t_o_r _edgeChildEdgeIndices; // trivial/corresponding pair for each │ │ │ │ │ -382 _I_n_d_e_x_V_e_c_t_o_r _edgeChildVertIndex; │ │ │ │ │ -383 │ │ │ │ │ -384 _I_n_d_e_x_V_e_c_t_o_r _vertChildVertIndex; │ │ │ │ │ -385 │ │ │ │ │ -386 // │ │ │ │ │ -387 // The child-to-parent mapping: │ │ │ │ │ -388 // │ │ │ │ │ -389 _I_n_d_e_x_V_e_c_t_o_r _childFaceParentIndex; │ │ │ │ │ -390 _I_n_d_e_x_V_e_c_t_o_r _childEdgeParentIndex; │ │ │ │ │ -391 _I_n_d_e_x_V_e_c_t_o_r _childVertexParentIndex; │ │ │ │ │ -392 │ │ │ │ │ -393 std::vector _childFaceTag; │ │ │ │ │ -394 std::vector _childEdgeTag; │ │ │ │ │ -395 std::vector _childVertexTag; │ │ │ │ │ -396 │ │ │ │ │ -397 // │ │ │ │ │ -398 // Tags for sparse selection of components: │ │ │ │ │ -399 // │ │ │ │ │ -400 std::vector _parentFaceTag; │ │ │ │ │ -401 std::vector _parentEdgeTag; │ │ │ │ │ -402 std::vector _parentVertexTag; │ │ │ │ │ -403 │ │ │ │ │ -404 // │ │ │ │ │ -405 // Refinement data for face-varying channels present in the Levels being │ │ │ │ │ -refined: │ │ │ │ │ -406 // │ │ │ │ │ -407 std::vector _fvarChannels; │ │ │ │ │ -408}; │ │ │ │ │ -409 │ │ │ │ │ -410inline _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y │ │ │ │ │ -411Refinement::getFaceChildFaces(_I_n_d_e_x parentFace) const { │ │ │ │ │ -412 │ │ │ │ │ -413 return _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y(&_faceChildFaceIndices │ │ │ │ │ -[_faceChildFaceCountsAndOffsets[2*parentFace+1]], │ │ │ │ │ -414 _faceChildFaceCountsAndOffsets[2*parentFace]); │ │ │ │ │ -415} │ │ │ │ │ -416 │ │ │ │ │ -417inline _I_n_d_e_x_A_r_r_a_y │ │ │ │ │ -418Refinement::getFaceChildFaces(_I_n_d_e_x parentFace) { │ │ │ │ │ -419 │ │ │ │ │ -420 return _I_n_d_e_x_A_r_r_a_y(&_faceChildFaceIndices[_faceChildFaceCountsAndOffsets │ │ │ │ │ -[2*parentFace+1]], │ │ │ │ │ -421 _faceChildFaceCountsAndOffsets[2*parentFace]); │ │ │ │ │ -422} │ │ │ │ │ -423 │ │ │ │ │ -424inline _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y │ │ │ │ │ -425Refinement::getFaceChildEdges(_I_n_d_e_x parentFace) const { │ │ │ │ │ -426 │ │ │ │ │ -427 return _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y(&_faceChildEdgeIndices │ │ │ │ │ -[_faceChildEdgeCountsAndOffsets[2*parentFace+1]], │ │ │ │ │ -428 _faceChildEdgeCountsAndOffsets[2*parentFace]); │ │ │ │ │ -429} │ │ │ │ │ -430inline _I_n_d_e_x_A_r_r_a_y │ │ │ │ │ -431Refinement::getFaceChildEdges(_I_n_d_e_x parentFace) { │ │ │ │ │ -432 │ │ │ │ │ -433 return _I_n_d_e_x_A_r_r_a_y(&_faceChildEdgeIndices[_faceChildEdgeCountsAndOffsets │ │ │ │ │ -[2*parentFace+1]], │ │ │ │ │ -434 _faceChildEdgeCountsAndOffsets[2*parentFace]); │ │ │ │ │ -435} │ │ │ │ │ -436 │ │ │ │ │ -437inline _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y │ │ │ │ │ -438Refinement::getEdgeChildEdges(_I_n_d_e_x parentEdge) const { │ │ │ │ │ -439 │ │ │ │ │ -440 return _C_o_n_s_t_I_n_d_e_x_A_r_r_a_y(&_edgeChildEdgeIndices[parentEdge*2], 2); │ │ │ │ │ -441} │ │ │ │ │ -442 │ │ │ │ │ -443inline _I_n_d_e_x_A_r_r_a_y │ │ │ │ │ -444Refinement::getEdgeChildEdges(_I_n_d_e_x parentEdge) { │ │ │ │ │ -445 │ │ │ │ │ -446 return _I_n_d_e_x_A_r_r_a_y(&_edgeChildEdgeIndices[parentEdge*2], 2); │ │ │ │ │ -447} │ │ │ │ │ -448 │ │ │ │ │ -449} // end namespace internal │ │ │ │ │ -450} // end namespace Vtr │ │ │ │ │ -451 │ │ │ │ │ -452} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ -453using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -454} // end namespace OpenSubdiv │ │ │ │ │ -455 │ │ │ │ │ -456#endif /* OPENSUBDIV3_VTR_REFINEMENT_H */ │ │ │ │ │ +83 void markVertexSelected(_I_n_d_e_x pVertex) const { _refine- │ │ │ │ │ +>getParentVertexSparseTag(pVertex)._selected = true; } │ │ │ │ │ +84 void markEdgeSelected( _I_n_d_e_x pEdge) const { _refine->getParentEdgeSparseTag │ │ │ │ │ +(pEdge)._selected = true; } │ │ │ │ │ +85 void markFaceSelected( _I_n_d_e_x pFace) const { _refine->getParentFaceSparseTag │ │ │ │ │ +(pFace)._selected = true; } │ │ │ │ │ +86 │ │ │ │ │ +87 void initializeSelection(); │ │ │ │ │ +88 │ │ │ │ │ +89private: │ │ │ │ │ +90 Refinement* _refine; │ │ │ │ │ +91 bool _selected; │ │ │ │ │ +92}; │ │ │ │ │ +93 │ │ │ │ │ +94} // end namespace internal │ │ │ │ │ +95} // end namespace Vtr │ │ │ │ │ +96 │ │ │ │ │ +97} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ +98using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +99} // end namespace OpenSubdiv │ │ │ │ │ +100 │ │ │ │ │ +101#endif /* OPENSUBDIV3_VTR_SPARSE_SELECTOR_H */ │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_V_t_r_:_:_I_n_d_e_x │ │ │ │ │ int Index │ │ │ │ │ DDeeffiinniittiioonn _t_y_p_e_s_._h_:_5_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_V_t_r_:_:_I_n_d_e_x_V_e_c_t_o_r │ │ │ │ │ -std::vector< Index > IndexVector │ │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e_s_._h_:_7_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_V_t_r_:_:_C_o_n_s_t_I_n_d_e_x_A_r_r_a_y │ │ │ │ │ -ConstArray< Index > ConstIndexArray │ │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e_s_._h_:_8_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_V_t_r_:_:_I_n_d_e_x_A_r_r_a_y │ │ │ │ │ -Array< Index > IndexArray │ │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e_s_._h_:_7_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_S_d_c_:_:_S_p_l_i_t │ │ │ │ │ -Split │ │ │ │ │ -Enumerated type for all face splitting schemes. │ │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e_s_._h_:_4_7 │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _v_t_r │ │ │ │ │ - * _r_e_f_i_n_e_m_e_n_t_._h │ │ │ │ │ + * _s_p_a_r_s_e_S_e_l_e_c_t_o_r_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00758.html │ │ │ │ @@ -96,15 +96,15 @@ │ │ │ │
fvarRefinement.h File Reference
│ │ │ │ │ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ #include "../sdc/types.h"
│ │ │ │ #include "../sdc/crease.h"
│ │ │ │ #include "../vtr/types.h"
│ │ │ │ -#include "../vtr/refinement.h"
│ │ │ │ +#include "../vtr/refinement.h"
│ │ │ │ #include "../vtr/fvarLevel.h"
│ │ │ │ #include <vector>
│ │ │ │ #include <cassert>
│ │ │ │ #include <cstring>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00782.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/sdc/bilinearScheme.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/sdc/catmarkScheme.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -89,19 +89,21 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Namespaces
│ │ │ │ -
bilinearScheme.h File Reference
│ │ │ │ +
catmarkScheme.h File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ #include "../sdc/scheme.h"
│ │ │ │ +#include <cassert>
│ │ │ │ +#include <cmath>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -111,13 +113,13 @@ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

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

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -113,13 +111,13 @@ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

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

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  CudaPatchTable
 CUDA patch table. More...
class  CudaStencilTable
 CUDA stencil table. More...
 
class  CudaEvaluator
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -122,13 +124,13 @@ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,28 +1,30 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -cudaPatchTable.h File Reference │ │ │ │ │ +cudaEvaluator.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ -#include "../osd/nonCopyable.h" │ │ │ │ │ -#include "_._._/_o_s_d_/_t_y_p_e_s_._h" │ │ │ │ │ #include │ │ │ │ │ +#include "_._._/_o_s_d_/_b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h" │ │ │ │ │ +#include "_._._/_o_s_d_/_t_y_p_e_s_._h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _C_u_d_a_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -  CUDA patch table. _M_o_r_e_._._. │ │ │ │ │ +class   _C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +  CUDA stencil table. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _C_u_d_a_E_v_a_l_u_a_t_o_r │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d │ │ │ │ │   │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ + * _c_u_d_a_E_v_a_l_u_a_t_o_r_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00788.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,3 +1,4 @@ │ │ │ │ │ var a00788 = [ │ │ │ │ │ - ["CudaPatchTable", "a01189.html", "a01189"] │ │ │ │ │ + ["CudaStencilTable", "a01181.html", "a01181"], │ │ │ │ │ + ["CudaEvaluator", "a01185.html", null] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00788_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/cudaPatchTable.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/osd/cudaEvaluator.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,15 +92,15 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
cudaPatchTable.h
│ │ │ │ +
cudaEvaluator.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │
2// Copyright 2015 Pixar
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │ @@ -119,131 +119,582 @@ │ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │
24
│ │ │ │ -
25#ifndef OPENSUBDIV3_OSD_CUDA_PATCH_TABLE_H
│ │ │ │ -
26#define OPENSUBDIV3_OSD_CUDA_PATCH_TABLE_H
│ │ │ │ +
25#ifndef OPENSUBDIV3_OSD_CUDA_EVALUATOR_H
│ │ │ │ +
26#define OPENSUBDIV3_OSD_CUDA_EVALUATOR_H
│ │ │ │
27
│ │ │ │
28#include "../version.h"
│ │ │ │
29
│ │ │ │ -
30#include "../osd/nonCopyable.h"
│ │ │ │ -
31#include "../osd/types.h"
│ │ │ │ -
32
│ │ │ │ -
33#include <vector>
│ │ │ │ -
34
│ │ │ │ -
35namespace OpenSubdiv {
│ │ │ │ -
36namespace OPENSUBDIV_VERSION {
│ │ │ │ -
37
│ │ │ │ -
38namespace Far{
│ │ │ │ -
39 class PatchTable;
│ │ │ │ -
40};
│ │ │ │ -
41
│ │ │ │ -
42namespace Osd {
│ │ │ │ -
43
│ │ │ │ -
│ │ │ │ -
51class CudaPatchTable : private NonCopyable<CudaPatchTable> {
│ │ │ │ -
52public:
│ │ │ │ -
54 static CudaPatchTable *Create(Far::PatchTable const *patchTable,
│ │ │ │ -
55 void *deviceContext = NULL);
│ │ │ │ - │ │ │ │ -
58
│ │ │ │ -
60 void *GetPatchArrayBuffer() const { return _patchArrays; }
│ │ │ │ -
61
│ │ │ │ -
63 void *GetPatchIndexBuffer() const { return _indexBuffer; }
│ │ │ │ +
30#include <vector>
│ │ │ │ +
31#include "../osd/bufferDescriptor.h"
│ │ │ │ +
32#include "../osd/types.h"
│ │ │ │ +
33
│ │ │ │ +
34namespace OpenSubdiv {
│ │ │ │ +
35namespace OPENSUBDIV_VERSION {
│ │ │ │ +
36
│ │ │ │ +
37namespace Far {
│ │ │ │ +
38 class PatchTable;
│ │ │ │ +
39 class StencilTable;
│ │ │ │ +
40 class LimitStencilTable;
│ │ │ │ +
41}
│ │ │ │ +
42
│ │ │ │ +
43namespace Osd {
│ │ │ │ +
44
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
53public:
│ │ │ │ +
│ │ │ │ +
54 static CudaStencilTable *Create(Far::StencilTable const *stencilTable,
│ │ │ │ +
55 void *deviceContext = NULL) {
│ │ │ │ +
56 (void)deviceContext; // unused
│ │ │ │ +
57 return new CudaStencilTable(stencilTable);
│ │ │ │ +
58 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
59 static CudaStencilTable *Create(Far::LimitStencilTable const *limitStencilTable,
│ │ │ │ +
60 void *deviceContext = NULL) {
│ │ │ │ +
61 (void)deviceContext; // unused
│ │ │ │ +
62 return new CudaStencilTable(limitStencilTable);
│ │ │ │ +
63 }
│ │ │ │ +
│ │ │ │
64
│ │ │ │ -
66 void *GetPatchParamBuffer() const { return _patchParamBuffer; }
│ │ │ │ -
67
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
71 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
75 }
│ │ │ │ -
│ │ │ │ -
76
│ │ │ │ -
78 int GetNumFVarChannels() const { return (int)_fvarPatchArrays.size(); }
│ │ │ │ -
79
│ │ │ │ -
│ │ │ │ -
81 void *GetFVarPatchArrayBuffer(int fvarChannel) const {
│ │ │ │ -
82 return _fvarPatchArrays[fvarChannel];
│ │ │ │ -
83 }
│ │ │ │ -
│ │ │ │ -
84
│ │ │ │ -
│ │ │ │ -
86 void *GetFVarPatchIndexBuffer(int fvarChannel = 0) const {
│ │ │ │ -
87 return _fvarIndexBuffers[fvarChannel];
│ │ │ │ -
88 }
│ │ │ │ -
│ │ │ │ -
89
│ │ │ │ -
│ │ │ │ -
91 void *GetFVarPatchParamBuffer(int fvarChannel = 0) const {
│ │ │ │ -
92 return _fvarParamBuffers[fvarChannel];
│ │ │ │ -
93 }
│ │ │ │ -
│ │ │ │ -
94
│ │ │ │ -
95protected:
│ │ │ │ - │ │ │ │ -
97
│ │ │ │ -
98 bool allocate(Far::PatchTable const *patchTable);
│ │ │ │ -
99
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
103
│ │ │ │ - │ │ │ │ - │ │ │ │ -
106
│ │ │ │ -
107 std::vector<void *> _fvarPatchArrays;
│ │ │ │ -
108 std::vector<void *> _fvarIndexBuffers;
│ │ │ │ -
109 std::vector<void *> _fvarParamBuffers;
│ │ │ │ -
110};
│ │ │ │ -
│ │ │ │ -
111
│ │ │ │ -
112} // end namespace Osd
│ │ │ │ -
113
│ │ │ │ -
114} // end namespace OPENSUBDIV_VERSION
│ │ │ │ -
115using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
116
│ │ │ │ -
117} // end namespace OpenSubdiv
│ │ │ │ -
118
│ │ │ │ -
119#endif // OPENSUBDIV3_OSD_CUDA_PATCH_TABLE_H
│ │ │ │ +
65 explicit CudaStencilTable(Far::StencilTable const *stencilTable);
│ │ │ │ +
66 explicit CudaStencilTable(Far::LimitStencilTable const *limitStencilTable);
│ │ │ │ + │ │ │ │ +
68
│ │ │ │ +
69 // interfaces needed for CudaCompute
│ │ │ │ +
70 void *GetSizesBuffer() const { return _sizes; }
│ │ │ │ +
71 void *GetOffsetsBuffer() const { return _offsets; }
│ │ │ │ +
72 void *GetIndicesBuffer() const { return _indices; }
│ │ │ │ +
73 void *GetWeightsBuffer() const { return _weights; }
│ │ │ │ +
74 void *GetDuWeightsBuffer() const { return _duWeights; }
│ │ │ │ +
75 void *GetDvWeightsBuffer() const { return _dvWeights; }
│ │ │ │ +
76 void *GetDuuWeightsBuffer() const { return _duuWeights; }
│ │ │ │ +
77 void *GetDuvWeightsBuffer() const { return _duvWeights; }
│ │ │ │ +
78 void *GetDvvWeightsBuffer() const { return _dvvWeights; }
│ │ │ │ +
79 int GetNumStencils() const { return _numStencils; }
│ │ │ │ +
80
│ │ │ │ +
81private:
│ │ │ │ +
82 void * _sizes,
│ │ │ │ +
83 * _offsets,
│ │ │ │ +
84 * _indices,
│ │ │ │ +
85 * _weights,
│ │ │ │ +
86 * _duWeights,
│ │ │ │ +
87 * _dvWeights,
│ │ │ │ +
88 * _duuWeights,
│ │ │ │ +
89 * _duvWeights,
│ │ │ │ +
90 * _dvvWeights;
│ │ │ │ +
91 int _numStencils;
│ │ │ │ +
92};
│ │ │ │ +
│ │ │ │ +
93
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
95public:
│ │ │ │ +
101
│ │ │ │ +
125 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ +
│ │ │ │ +
126 static bool EvalStencils(
│ │ │ │ +
127 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
128 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
129 STENCIL_TABLE const *stencilTable,
│ │ │ │ +
130 const void *instance = NULL,
│ │ │ │ +
131 void * deviceContext = NULL) {
│ │ │ │ +
132
│ │ │ │ +
133 (void)instance; // unused
│ │ │ │ +
134 (void)deviceContext; // unused
│ │ │ │ +
135 return EvalStencils(srcBuffer->BindCudaBuffer(), srcDesc,
│ │ │ │ +
136 dstBuffer->BindCudaBuffer(), dstDesc,
│ │ │ │ +
137 (int const *)stencilTable->GetSizesBuffer(),
│ │ │ │ +
138 (int const *)stencilTable->GetOffsetsBuffer(),
│ │ │ │ +
139 (int const *)stencilTable->GetIndicesBuffer(),
│ │ │ │ +
140 (float const *)stencilTable->GetWeightsBuffer(),
│ │ │ │ +
141 /*start = */ 0,
│ │ │ │ +
142 /*end = */ stencilTable->GetNumStencils());
│ │ │ │ +
143 }
│ │ │ │ +
│ │ │ │ +
144
│ │ │ │ +
171 static bool EvalStencils(
│ │ │ │ +
172 const float *src, BufferDescriptor const &srcDesc,
│ │ │ │ +
173 float *dst, BufferDescriptor const &dstDesc,
│ │ │ │ +
174 const int * sizes,
│ │ │ │ +
175 const int * offsets,
│ │ │ │ +
176 const int * indices,
│ │ │ │ +
177 const float * weights,
│ │ │ │ +
178 int start, int end);
│ │ │ │ +
179
│ │ │ │ +
217 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ +
│ │ │ │ +
218 static bool EvalStencils(
│ │ │ │ +
219 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
220 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
221 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
222 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
223 STENCIL_TABLE const *stencilTable,
│ │ │ │ +
224 const CudaEvaluator *instance = NULL,
│ │ │ │ +
225 void * deviceContext = NULL) {
│ │ │ │ +
226
│ │ │ │ +
227 (void)instance; // unused
│ │ │ │ +
228 (void)deviceContext; // unused
│ │ │ │ +
229
│ │ │ │ +
230 return EvalStencils(srcBuffer->BindCudaBuffer(), srcDesc,
│ │ │ │ +
231 dstBuffer->BindCudaBuffer(), dstDesc,
│ │ │ │ +
232 duBuffer->BindCudaBuffer(), duDesc,
│ │ │ │ +
233 dvBuffer->BindCudaBuffer(), dvDesc,
│ │ │ │ +
234 (int const *)stencilTable->GetSizesBuffer(),
│ │ │ │ +
235 (int const *)stencilTable->GetOffsetsBuffer(),
│ │ │ │ +
236 (int const *)stencilTable->GetIndicesBuffer(),
│ │ │ │ +
237 (float const *)stencilTable->GetWeightsBuffer(),
│ │ │ │ +
238 (float const *)stencilTable->GetDuWeightsBuffer(),
│ │ │ │ +
239 (float const *)stencilTable->GetDvWeightsBuffer(),
│ │ │ │ +
240 /*start = */ 0,
│ │ │ │ +
241 /*end = */ stencilTable->GetNumStencils());
│ │ │ │ +
242 }
│ │ │ │ +
│ │ │ │ +
243
│ │ │ │ +
284 static bool EvalStencils(
│ │ │ │ +
285 const float *src, BufferDescriptor const &srcDesc,
│ │ │ │ +
286 float *dst, BufferDescriptor const &dstDesc,
│ │ │ │ +
287 float *du, BufferDescriptor const &duDesc,
│ │ │ │ +
288 float *dv, BufferDescriptor const &dvDesc,
│ │ │ │ +
289 const int * sizes,
│ │ │ │ +
290 const int * offsets,
│ │ │ │ +
291 const int * indices,
│ │ │ │ +
292 const float * weights,
│ │ │ │ +
293 const float * duWeights,
│ │ │ │ +
294 const float * dvWeights,
│ │ │ │ +
295 int start, int end);
│ │ │ │ +
296
│ │ │ │ +
352 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ +
│ │ │ │ +
353 static bool EvalStencils(
│ │ │ │ +
354 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
355 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
356 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
357 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
358 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
359 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
360 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
361 STENCIL_TABLE const *stencilTable,
│ │ │ │ +
362 const CudaEvaluator *instance = NULL,
│ │ │ │ +
363 void * deviceContext = NULL) {
│ │ │ │ +
364
│ │ │ │ +
365 (void)instance; // unused
│ │ │ │ +
366 (void)deviceContext; // unused
│ │ │ │ +
367
│ │ │ │ +
368 return EvalStencils(srcBuffer->BindCudaBuffer(), srcDesc,
│ │ │ │ +
369 dstBuffer->BindCudaBuffer(), dstDesc,
│ │ │ │ +
370 duBuffer->BindCudaBuffer(), duDesc,
│ │ │ │ +
371 dvBuffer->BindCudaBuffer(), dvDesc,
│ │ │ │ +
372 duuBuffer->BindCudaBuffer(), duuDesc,
│ │ │ │ +
373 duvBuffer->BindCudaBuffer(), duvDesc,
│ │ │ │ +
374 dvvBuffer->BindCudaBuffer(), dvvDesc,
│ │ │ │ +
375 (int const *)stencilTable->GetSizesBuffer(),
│ │ │ │ +
376 (int const *)stencilTable->GetOffsetsBuffer(),
│ │ │ │ +
377 (int const *)stencilTable->GetIndicesBuffer(),
│ │ │ │ +
378 (float const *)stencilTable->GetWeightsBuffer(),
│ │ │ │ +
379 (float const *)stencilTable->GetDuWeightsBuffer(),
│ │ │ │ +
380 (float const *)stencilTable->GetDvWeightsBuffer(),
│ │ │ │ +
381 (float const *)stencilTable->GetDuuWeightsBuffer(),
│ │ │ │ +
382 (float const *)stencilTable->GetDuvWeightsBuffer(),
│ │ │ │ +
383 (float const *)stencilTable->GetDvvWeightsBuffer(),
│ │ │ │ +
384 /*start = */ 0,
│ │ │ │ +
385 /*end = */ stencilTable->GetNumStencils());
│ │ │ │ +
386 }
│ │ │ │ +
│ │ │ │ +
387
│ │ │ │ +
449 static bool EvalStencils(
│ │ │ │ +
450 const float *src, BufferDescriptor const &srcDesc,
│ │ │ │ +
451 float *dst, BufferDescriptor const &dstDesc,
│ │ │ │ +
452 float *du, BufferDescriptor const &duDesc,
│ │ │ │ +
453 float *dv, BufferDescriptor const &dvDesc,
│ │ │ │ +
454 float *duu, BufferDescriptor const &duuDesc,
│ │ │ │ +
455 float *duv, BufferDescriptor const &duvDesc,
│ │ │ │ +
456 float *dvv, BufferDescriptor const &dvvDesc,
│ │ │ │ +
457 const int * sizes,
│ │ │ │ +
458 const int * offsets,
│ │ │ │ +
459 const int * indices,
│ │ │ │ +
460 const float * weights,
│ │ │ │ +
461 const float * duWeights,
│ │ │ │ +
462 const float * dvWeights,
│ │ │ │ +
463 const float * duuWeights,
│ │ │ │ +
464 const float * duvWeights,
│ │ │ │ +
465 const float * dvvWeights,
│ │ │ │ +
466 int start, int end);
│ │ │ │ +
467
│ │ │ │ +
473
│ │ │ │ +
502 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
503 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ +
504 static bool EvalPatches(
│ │ │ │ +
505 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
506 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
507 int numPatchCoords,
│ │ │ │ +
508 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
509 PATCH_TABLE *patchTable,
│ │ │ │ +
510 CudaEvaluator const *instance,
│ │ │ │ +
511 void * deviceContext = NULL) {
│ │ │ │ +
512
│ │ │ │ +
513 (void)instance; // unused
│ │ │ │ +
514 (void)deviceContext; // unused
│ │ │ │ +
515
│ │ │ │ +
516 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
│ │ │ │ +
517 dstBuffer->BindCudaBuffer(), dstDesc,
│ │ │ │ +
518 numPatchCoords,
│ │ │ │ +
519 (const PatchCoord *)patchCoords->BindCudaBuffer(),
│ │ │ │ +
520 (const PatchArray *)patchTable->GetPatchArrayBuffer(),
│ │ │ │ +
521 (const int *)patchTable->GetPatchIndexBuffer(),
│ │ │ │ +
522 (const PatchParam *)patchTable->GetPatchParamBuffer());
│ │ │ │ +
523 }
│ │ │ │ +
│ │ │ │ +
524
│ │ │ │ +
563 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
564 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ +
565 static bool EvalPatches(
│ │ │ │ +
566 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
567 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
568 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
569 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
570 int numPatchCoords,
│ │ │ │ +
571 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
572 PATCH_TABLE *patchTable,
│ │ │ │ +
573 CudaEvaluator const *instance,
│ │ │ │ +
574 void * deviceContext = NULL) {
│ │ │ │ +
575
│ │ │ │ +
576 (void)instance; // unused
│ │ │ │ +
577 (void)deviceContext; // unused
│ │ │ │ +
578
│ │ │ │ +
579 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
│ │ │ │ +
580 dstBuffer->BindCudaBuffer(), dstDesc,
│ │ │ │ +
581 duBuffer->BindCudaBuffer(), duDesc,
│ │ │ │ +
582 dvBuffer->BindCudaBuffer(), dvDesc,
│ │ │ │ +
583 numPatchCoords,
│ │ │ │ +
584 (const PatchCoord *)patchCoords->BindCudaBuffer(),
│ │ │ │ +
585 (const PatchArray *)patchTable->GetPatchArrayBuffer(),
│ │ │ │ +
586 (const int *)patchTable->GetPatchIndexBuffer(),
│ │ │ │ +
587 (const PatchParam *)patchTable->GetPatchParamBuffer());
│ │ │ │ +
588 }
│ │ │ │ +
│ │ │ │ +
589
│ │ │ │ +
646 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
647 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ +
648 static bool EvalPatches(
│ │ │ │ +
649 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
650 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
651 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
652 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
653 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
654 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
655 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
656 int numPatchCoords,
│ │ │ │ +
657 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
658 PATCH_TABLE *patchTable,
│ │ │ │ +
659 CudaEvaluator const *instance,
│ │ │ │ +
660 void * deviceContext = NULL) {
│ │ │ │ +
661
│ │ │ │ +
662 (void)instance; // unused
│ │ │ │ +
663 (void)deviceContext; // unused
│ │ │ │ +
664
│ │ │ │ +
665 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
│ │ │ │ +
666 dstBuffer->BindCudaBuffer(), dstDesc,
│ │ │ │ +
667 duBuffer->BindCudaBuffer(), duDesc,
│ │ │ │ +
668 dvBuffer->BindCudaBuffer(), dvDesc,
│ │ │ │ +
669 duuBuffer->BindCudaBuffer(), duuDesc,
│ │ │ │ +
670 duvBuffer->BindCudaBuffer(), duvDesc,
│ │ │ │ +
671 dvvBuffer->BindCudaBuffer(), dvvDesc,
│ │ │ │ +
672 numPatchCoords,
│ │ │ │ +
673 (const PatchCoord *)patchCoords->BindCudaBuffer(),
│ │ │ │ +
674 (const PatchArray *)patchTable->GetPatchArrayBuffer(),
│ │ │ │ +
675 (const int *)patchTable->GetPatchIndexBuffer(),
│ │ │ │ +
676 (const PatchParam *)patchTable->GetPatchParamBuffer());
│ │ │ │ +
677 }
│ │ │ │ +
│ │ │ │ +
678
│ │ │ │ +
706 static bool EvalPatches(
│ │ │ │ +
707 const float *src, BufferDescriptor const &srcDesc,
│ │ │ │ +
708 float *dst, BufferDescriptor const &dstDesc,
│ │ │ │ +
709 int numPatchCoords,
│ │ │ │ +
710 const PatchCoord *patchCoords,
│ │ │ │ +
711 const PatchArray *patchArrays,
│ │ │ │ +
712 const int *patchIndices,
│ │ │ │ +
713 const PatchParam *patchParams);
│ │ │ │ +
714
│ │ │ │ +
752 static bool EvalPatches(
│ │ │ │ +
753 const float *src, BufferDescriptor const &srcDesc,
│ │ │ │ +
754 float *dst, BufferDescriptor const &dstDesc,
│ │ │ │ +
755 float *du, BufferDescriptor const &duDesc,
│ │ │ │ +
756 float *dv, BufferDescriptor const &dvDesc,
│ │ │ │ +
757 int numPatchCoords,
│ │ │ │ +
758 PatchCoord const *patchCoords,
│ │ │ │ +
759 PatchArray const *patchArrays,
│ │ │ │ +
760 const int *patchIndices,
│ │ │ │ +
761 PatchParam const *patchParams);
│ │ │ │ +
762
│ │ │ │ +
815 static bool EvalPatches(
│ │ │ │ +
816 const float *src, BufferDescriptor const &srcDesc,
│ │ │ │ +
817 float *dst, BufferDescriptor const &dstDesc,
│ │ │ │ +
818 float *du, BufferDescriptor const &duDesc,
│ │ │ │ +
819 float *dv, BufferDescriptor const &dvDesc,
│ │ │ │ +
820 float *duu, BufferDescriptor const &duuDesc,
│ │ │ │ +
821 float *duv, BufferDescriptor const &duvDesc,
│ │ │ │ +
822 float *dvv, BufferDescriptor const &dvvDesc,
│ │ │ │ +
823 int numPatchCoords,
│ │ │ │ +
824 PatchCoord const *patchCoords,
│ │ │ │ +
825 PatchArray const *patchArrays,
│ │ │ │ +
826 const int *patchIndices,
│ │ │ │ +
827 PatchParam const *patchParams);
│ │ │ │ +
828
│ │ │ │ +
857 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
858 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
860 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
861 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
862 int numPatchCoords,
│ │ │ │ +
863 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
864 PATCH_TABLE *patchTable,
│ │ │ │ +
865 CudaEvaluator const *instance,
│ │ │ │ +
866 void * deviceContext = NULL) {
│ │ │ │ +
867
│ │ │ │ +
868 (void)instance; // unused
│ │ │ │ +
869 (void)deviceContext; // unused
│ │ │ │ +
870
│ │ │ │ +
871 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
│ │ │ │ +
872 dstBuffer->BindCudaBuffer(), dstDesc,
│ │ │ │ +
873 numPatchCoords,
│ │ │ │ +
874 (const PatchCoord *)patchCoords->BindCudaBuffer(),
│ │ │ │ +
875 (const PatchArray *)patchTable->GetVaryingPatchArrayBuffer(),
│ │ │ │ +
876 (const int *)patchTable->GetVaryingPatchIndexBuffer(),
│ │ │ │ +
877 (const PatchParam *)patchTable->GetPatchParamBuffer());
│ │ │ │ +
878 }
│ │ │ │ +
│ │ │ │ +
879
│ │ │ │ +
920 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
921 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
923 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
924 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
925 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
926 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
927 int numPatchCoords,
│ │ │ │ +
928 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
929 PATCH_TABLE *patchTable,
│ │ │ │ +
930 CudaEvaluator const *instance,
│ │ │ │ +
931 void * deviceContext = NULL) {
│ │ │ │ +
932
│ │ │ │ +
933 (void)instance; // unused
│ │ │ │ +
934 (void)deviceContext; // unused
│ │ │ │ +
935
│ │ │ │ +
936 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
│ │ │ │ +
937 dstBuffer->BindCudaBuffer(), dstDesc,
│ │ │ │ +
938 duBuffer->BindCudaBuffer(), duDesc,
│ │ │ │ +
939 dvBuffer->BindCudaBuffer(), dvDesc,
│ │ │ │ +
940 numPatchCoords,
│ │ │ │ +
941 (const PatchCoord *)patchCoords->BindCudaBuffer(),
│ │ │ │ +
942 (const PatchArray *)patchTable->GetVaryingPatchArrayBuffer(),
│ │ │ │ +
943 (const int *)patchTable->GetVaryingPatchIndexBuffer(),
│ │ │ │ +
944 (const PatchParam *)patchTable->GetPatchParamBuffer());
│ │ │ │ +
945 }
│ │ │ │ +
│ │ │ │ +
946
│ │ │ │ +
1005 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1006 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1008 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1009 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1010 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1011 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1012 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
1013 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
1014 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
1015 int numPatchCoords,
│ │ │ │ +
1016 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1017 PATCH_TABLE *patchTable,
│ │ │ │ +
1018 CudaEvaluator const *instance,
│ │ │ │ +
1019 void * deviceContext = NULL) {
│ │ │ │ +
1020
│ │ │ │ +
1021 (void)instance; // unused
│ │ │ │ +
1022 (void)deviceContext; // unused
│ │ │ │ +
1023
│ │ │ │ +
1024 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
│ │ │ │ +
1025 dstBuffer->BindCudaBuffer(), dstDesc,
│ │ │ │ +
1026 duBuffer->BindCudaBuffer(), duDesc,
│ │ │ │ +
1027 dvBuffer->BindCudaBuffer(), dvDesc,
│ │ │ │ +
1028 duuBuffer->BindCudaBuffer(), duuDesc,
│ │ │ │ +
1029 duvBuffer->BindCudaBuffer(), duvDesc,
│ │ │ │ +
1030 dvvBuffer->BindCudaBuffer(), dvvDesc,
│ │ │ │ +
1031 numPatchCoords,
│ │ │ │ +
1032 (const PatchCoord *)patchCoords->BindCudaBuffer(),
│ │ │ │ +
1033 (const PatchArray *)patchTable->GetVaryingPatchArrayBuffer(),
│ │ │ │ +
1034 (const int *)patchTable->GetVaryingPatchIndexBuffer(),
│ │ │ │ +
1035 (const PatchParam *)patchTable->GetPatchParamBuffer());
│ │ │ │ +
1036 }
│ │ │ │ +
│ │ │ │ +
1037
│ │ │ │ +
1068 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1069 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1071 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1072 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1073 int numPatchCoords,
│ │ │ │ +
1074 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1075 PATCH_TABLE *patchTable,
│ │ │ │ +
1076 int fvarChannel,
│ │ │ │ +
1077 CudaEvaluator const *instance,
│ │ │ │ +
1078 void * deviceContext = NULL) {
│ │ │ │ +
1079
│ │ │ │ +
1080 (void)instance; // unused
│ │ │ │ +
1081 (void)deviceContext; // unused
│ │ │ │ +
1082
│ │ │ │ +
1083 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
│ │ │ │ +
1084 dstBuffer->BindCudaBuffer(), dstDesc,
│ │ │ │ +
1085 numPatchCoords,
│ │ │ │ +
1086 (const PatchCoord *)patchCoords->BindCudaBuffer(),
│ │ │ │ +
1087 (const PatchArray *)patchTable->GetFVarPatchArrayBuffer(fvarChannel),
│ │ │ │ +
1088 (const int *)patchTable->GetFVarPatchIndexBuffer(fvarChannel),
│ │ │ │ +
1089 (const PatchParam *)patchTable->GetFVarPatchParamBuffer(fvarChannel));
│ │ │ │ +
1090 }
│ │ │ │ +
│ │ │ │ +
1091
│ │ │ │ +
1134 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1135 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1137 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1138 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1139 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1140 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1141 int numPatchCoords,
│ │ │ │ +
1142 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1143 PATCH_TABLE *patchTable,
│ │ │ │ +
1144 int fvarChannel,
│ │ │ │ +
1145 CudaEvaluator const *instance,
│ │ │ │ +
1146 void * deviceContext = NULL) {
│ │ │ │ +
1147
│ │ │ │ +
1148 (void)instance; // unused
│ │ │ │ +
1149 (void)deviceContext; // unused
│ │ │ │ +
1150
│ │ │ │ +
1151 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
│ │ │ │ +
1152 dstBuffer->BindCudaBuffer(), dstDesc,
│ │ │ │ +
1153 duBuffer->BindCudaBuffer(), duDesc,
│ │ │ │ +
1154 dvBuffer->BindCudaBuffer(), dvDesc,
│ │ │ │ +
1155 numPatchCoords,
│ │ │ │ +
1156 (const PatchCoord *)patchCoords->BindCudaBuffer(),
│ │ │ │ +
1157 (const PatchArray *)patchTable->GetFVarPatchArrayBuffer(fvarChannel),
│ │ │ │ +
1158 (const int *)patchTable->GetFVarPatchIndexBuffer(fvarChannel),
│ │ │ │ +
1159 (const PatchParam *)patchTable->GetFVarPatchParamBuffer(fvarChannel));
│ │ │ │ +
1160 }
│ │ │ │ +
│ │ │ │ +
1161
│ │ │ │ +
1222 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1223 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1225 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1226 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1227 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1228 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1229 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
1230 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
1231 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
1232 int numPatchCoords,
│ │ │ │ +
1233 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1234 PATCH_TABLE *patchTable,
│ │ │ │ +
1235 int fvarChannel,
│ │ │ │ +
1236 CudaEvaluator const *instance,
│ │ │ │ +
1237 void * deviceContext = NULL) {
│ │ │ │ +
1238
│ │ │ │ +
1239 (void)instance; // unused
│ │ │ │ +
1240 (void)deviceContext; // unused
│ │ │ │ +
1241
│ │ │ │ +
1242 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
│ │ │ │ +
1243 dstBuffer->BindCudaBuffer(), dstDesc,
│ │ │ │ +
1244 duBuffer->BindCudaBuffer(), duDesc,
│ │ │ │ +
1245 dvBuffer->BindCudaBuffer(), dvDesc,
│ │ │ │ +
1246 duuBuffer->BindCudaBuffer(), duuDesc,
│ │ │ │ +
1247 duvBuffer->BindCudaBuffer(), duvDesc,
│ │ │ │ +
1248 dvvBuffer->BindCudaBuffer(), dvvDesc,
│ │ │ │ +
1249 numPatchCoords,
│ │ │ │ +
1250 (const PatchCoord *)patchCoords->BindCudaBuffer(),
│ │ │ │ +
1251 (const PatchArray *)patchTable->GetFVarPatchArrayBuffer(fvarChannel),
│ │ │ │ +
1252 (const int *)patchTable->GetFVarPatchIndexBuffer(fvarChannel),
│ │ │ │ +
1253 (const PatchParam *)patchTable->GetFVarPatchParamBuffer(fvarChannel));
│ │ │ │ +
1254 }
│ │ │ │ +
│ │ │ │ +
1255
│ │ │ │ +
1261 static void Synchronize(void *deviceContext = NULL);
│ │ │ │ +
1262};
│ │ │ │ +
│ │ │ │ +
1263
│ │ │ │ +
1264
│ │ │ │ +
1265} // end namespace Osd
│ │ │ │ +
1266
│ │ │ │ +
1267} // end namespace OPENSUBDIV_VERSION
│ │ │ │ +
1268using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
1269
│ │ │ │ +
1270} // end namespace OpenSubdiv
│ │ │ │ +
1271
│ │ │ │ +
1272
│ │ │ │ +
1273#endif // OPENSUBDIV3_OSD_CUDA_EVALUATOR_H
│ │ │ │ │ │ │ │ -
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ - │ │ │ │ -
void * GetFVarPatchArrayBuffer(int fvarChannel) const
Returns the cuda memory of the array of Osd::PatchArray buffer.
│ │ │ │ - │ │ │ │ -
static CudaPatchTable * Create(Far::PatchTable const *patchTable, void *deviceContext=NULL)
Creator. Returns NULL if error.
│ │ │ │ - │ │ │ │ -
void * GetVaryingPatchIndexBuffer() const
Returns the cuda memory of the array of varying control vertices.
│ │ │ │ - │ │ │ │ -
void * GetVaryingPatchArrayBuffer() const
Returns the cuda memory of the array of Osd::PatchArray buffer.
│ │ │ │ - │ │ │ │ - │ │ │ │ -
void * GetPatchArrayBuffer() const
Returns the cuda memory of the array of Osd::PatchArray buffer.
│ │ │ │ - │ │ │ │ -
bool allocate(Far::PatchTable const *patchTable)
│ │ │ │ -
void * GetPatchIndexBuffer() const
Returns the cuda memory of the patch control vertices.
│ │ │ │ -
int GetNumFVarChannels() const
Returns the number of face-varying channels buffers.
│ │ │ │ - │ │ │ │ -
void * GetPatchParamBuffer() const
Returns the cuda memory of the array of Osd::PatchParam buffer.
│ │ │ │ -
void * GetFVarPatchIndexBuffer(int fvarChannel=0) const
Returns the cuda memory of the array of face-varying control vertices.
│ │ │ │ -
void * GetFVarPatchParamBuffer(int fvarChannel=0) const
Returns the cuda memory of the array of face-varying param.
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
Stencil table class wrapping the template for compatibility.
│ │ │ │ +
Limit stencil table class wrapping the template for compatibility.
│ │ │ │ +
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
CudaStencilTable(Far::LimitStencilTable const *limitStencilTable)
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
static CudaStencilTable * Create(Far::LimitStencilTable const *limitStencilTable, void *deviceContext=NULL)
│ │ │ │ + │ │ │ │ + │ │ │ │ +
CudaStencilTable(Far::StencilTable const *stencilTable)
│ │ │ │ +
static CudaStencilTable * Create(Far::StencilTable const *stencilTable, void *deviceContext=NULL)
│ │ │ │ + │ │ │ │ +
static bool EvalPatches(const float *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, int numPatchCoords, const PatchCoord *patchCoords, const PatchArray *patchArrays, const int *patchIndices, const PatchParam *patchParams)
Static limit eval function. It takes an array of PatchCoord and evaluate limit values on given PatchT...
│ │ │ │ +
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, CudaEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ +
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, CudaEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function with derivatives. This function has a same signature as other device kern...
│ │ │ │ +
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 CudaEvaluator *instance=NULL, void *deviceContext=NULL)
Generic static eval stencils function with derivatives. This function has a same signature as other d...
│ │ │ │ +
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 cuda buffers for input and output.
│ │ │ │ +
static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, CudaEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ +
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 CudaEvaluator *instance=NULL, void *deviceContext=NULL)
Generic static eval stencils function with derivatives. This function has a same signature as other d...
│ │ │ │ +
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 *patchIndices, PatchParam const *patchParams)
Static limit eval function. It takes an array of PatchCoord and evaluate limit values on given PatchT...
│ │ │ │ +
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, CudaEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ +
static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, const void *instance=NULL, void *deviceContext=NULL)
Generic static compute function. This function has a same signature as other device kernels have so t...
│ │ │ │ +
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 cuda pointers for input and output.
│ │ │ │ +
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 cuda pointers for input and output.
│ │ │ │ +
static void Synchronize(void *deviceContext=NULL)
│ │ │ │ +
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 *patchIndices, PatchParam const *patchParams)
Static limit eval function. It takes an array of PatchCoord and evaluate limit values on given PatchT...
│ │ │ │ +
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, CudaEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ +
static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, CudaEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ +
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, CudaEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ +
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, CudaEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function with derivatives. This function has a same signature as other device kern...
│ │ │ │ +
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, CudaEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ +
Coordinates set on a patch table.
Definition types.h:42
│ │ │ │ + │ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,12 +1,12 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -cudaPatchTable.h │ │ │ │ │ +cudaEvaluator.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ 2// Copyright 2015 Pixar │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ @@ -24,167 +24,737 @@ │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ 24 │ │ │ │ │ -25#ifndef OPENSUBDIV3_OSD_CUDA_PATCH_TABLE_H │ │ │ │ │ -26#define OPENSUBDIV3_OSD_CUDA_PATCH_TABLE_H │ │ │ │ │ +25#ifndef OPENSUBDIV3_OSD_CUDA_EVALUATOR_H │ │ │ │ │ +26#define OPENSUBDIV3_OSD_CUDA_EVALUATOR_H │ │ │ │ │ 27 │ │ │ │ │ 28#include "../version.h" │ │ │ │ │ 29 │ │ │ │ │ -30#include "../osd/nonCopyable.h" │ │ │ │ │ -31#include "../osd/types.h" │ │ │ │ │ -32 │ │ │ │ │ -33#include │ │ │ │ │ -34 │ │ │ │ │ -35namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ -36namespace OPENSUBDIV_VERSION { │ │ │ │ │ -37 │ │ │ │ │ -38namespace Far{ │ │ │ │ │ -39 class PatchTable; │ │ │ │ │ -40}; │ │ │ │ │ -41 │ │ │ │ │ -42namespace Osd { │ │ │ │ │ -43 │ │ │ │ │ -_5_1class _C_u_d_a_P_a_t_c_h_T_a_b_l_e : private NonCopyable { │ │ │ │ │ -52public: │ │ │ │ │ -_5_4 static _C_u_d_a_P_a_t_c_h_T_a_b_l_e *_C_r_e_a_t_e(_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e const *patchTable, │ │ │ │ │ -55 void *deviceContext = NULL); │ │ │ │ │ -_5_7 _~_C_u_d_a_P_a_t_c_h_T_a_b_l_e(); │ │ │ │ │ -58 │ │ │ │ │ -_6_0 void *_G_e_t_P_a_t_c_h_A_r_r_a_y_B_u_f_f_e_r() const { return ___p_a_t_c_h_A_r_r_a_y_s; } │ │ │ │ │ -61 │ │ │ │ │ -_6_3 void *_G_e_t_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r() const { return ___i_n_d_e_x_B_u_f_f_e_r; } │ │ │ │ │ +30#include │ │ │ │ │ +31#include "../osd/bufferDescriptor.h" │ │ │ │ │ +32#include "../osd/types.h" │ │ │ │ │ +33 │ │ │ │ │ +34namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ +35namespace OPENSUBDIV_VERSION { │ │ │ │ │ +36 │ │ │ │ │ +37namespace Far { │ │ │ │ │ +38 class PatchTable; │ │ │ │ │ +39 class StencilTable; │ │ │ │ │ +40 class LimitStencilTable; │ │ │ │ │ +41} │ │ │ │ │ +42 │ │ │ │ │ +43namespace Osd { │ │ │ │ │ +44 │ │ │ │ │ +_5_2class _C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e { │ │ │ │ │ +53public: │ │ │ │ │ +_5_4 static _C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e *_C_r_e_a_t_e(_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e const *stencilTable, │ │ │ │ │ +55 void *deviceContext = NULL) { │ │ │ │ │ +56 (void)deviceContext; // unused │ │ │ │ │ +57 return new _C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e(stencilTable); │ │ │ │ │ +58 } │ │ │ │ │ +_5_9 static _C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e *_C_r_e_a_t_e(_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e const │ │ │ │ │ +*limitStencilTable, │ │ │ │ │ +60 void *deviceContext = NULL) { │ │ │ │ │ +61 (void)deviceContext; // unused │ │ │ │ │ +62 return new _C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e(limitStencilTable); │ │ │ │ │ +63 } │ │ │ │ │ 64 │ │ │ │ │ -_6_6 void *_G_e_t_P_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r() const { return ___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r; } │ │ │ │ │ -67 │ │ │ │ │ -_6_9 void *_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_B_u_f_f_e_r() const { │ │ │ │ │ -70 return ___v_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_s; │ │ │ │ │ -71 } │ │ │ │ │ -_7_3 void *_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r() const { │ │ │ │ │ -74 return ___v_a_r_y_i_n_g_I_n_d_e_x_B_u_f_f_e_r; │ │ │ │ │ -75 } │ │ │ │ │ -76 │ │ │ │ │ -_7_8 int _G_e_t_N_u_m_F_V_a_r_C_h_a_n_n_e_l_s() const { return (int)___f_v_a_r_P_a_t_c_h_A_r_r_a_y_s.size(); } │ │ │ │ │ -79 │ │ │ │ │ -_8_1 void *_G_e_t_F_V_a_r_P_a_t_c_h_A_r_r_a_y_B_u_f_f_e_r(int fvarChannel) const { │ │ │ │ │ -82 return ___f_v_a_r_P_a_t_c_h_A_r_r_a_y_s[fvarChannel]; │ │ │ │ │ -83 } │ │ │ │ │ -84 │ │ │ │ │ -_8_6 void *_G_e_t_F_V_a_r_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r(int fvarChannel = 0) const { │ │ │ │ │ -87 return ___f_v_a_r_I_n_d_e_x_B_u_f_f_e_r_s[fvarChannel]; │ │ │ │ │ -88 } │ │ │ │ │ -89 │ │ │ │ │ -_9_1 void *_G_e_t_F_V_a_r_P_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r(int fvarChannel = 0) const { │ │ │ │ │ -92 return ___f_v_a_r_P_a_r_a_m_B_u_f_f_e_r_s[fvarChannel]; │ │ │ │ │ -93 } │ │ │ │ │ -94 │ │ │ │ │ -95protected: │ │ │ │ │ -_9_6 _C_u_d_a_P_a_t_c_h_T_a_b_l_e(); │ │ │ │ │ -97 │ │ │ │ │ -_9_8 bool _a_l_l_o_c_a_t_e(_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e const *patchTable); │ │ │ │ │ -99 │ │ │ │ │ -_1_0_0 void *___p_a_t_c_h_A_r_r_a_y_s; │ │ │ │ │ -_1_0_1 void *___i_n_d_e_x_B_u_f_f_e_r; │ │ │ │ │ -_1_0_2 void *___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r; │ │ │ │ │ -103 │ │ │ │ │ -_1_0_4 void *___v_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_s; │ │ │ │ │ -_1_0_5 void *___v_a_r_y_i_n_g_I_n_d_e_x_B_u_f_f_e_r; │ │ │ │ │ -106 │ │ │ │ │ -_1_0_7 std::vector ___f_v_a_r_P_a_t_c_h_A_r_r_a_y_s; │ │ │ │ │ -_1_0_8 std::vector ___f_v_a_r_I_n_d_e_x_B_u_f_f_e_r_s; │ │ │ │ │ -_1_0_9 std::vector ___f_v_a_r_P_a_r_a_m_B_u_f_f_e_r_s; │ │ │ │ │ -110}; │ │ │ │ │ -111 │ │ │ │ │ -112} // end namespace Osd │ │ │ │ │ -113 │ │ │ │ │ -114} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ -115using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -116 │ │ │ │ │ -117} // end namespace OpenSubdiv │ │ │ │ │ -118 │ │ │ │ │ -119#endif // OPENSUBDIV3_OSD_CUDA_PATCH_TABLE_H │ │ │ │ │ +_6_5 explicit _C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e(_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e const *stencilTable); │ │ │ │ │ +_6_6 explicit _C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e(_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e const *limitStencilTable); │ │ │ │ │ +_6_7 _~_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e(); │ │ │ │ │ +68 │ │ │ │ │ +69 // interfaces needed for CudaCompute │ │ │ │ │ +_7_0 void *_G_e_t_S_i_z_e_s_B_u_f_f_e_r() const { return _sizes; } │ │ │ │ │ +_7_1 void *_G_e_t_O_f_f_s_e_t_s_B_u_f_f_e_r() const { return _offsets; } │ │ │ │ │ +_7_2 void *_G_e_t_I_n_d_i_c_e_s_B_u_f_f_e_r() const { return _indices; } │ │ │ │ │ +_7_3 void *_G_e_t_W_e_i_g_h_t_s_B_u_f_f_e_r() const { return _weights; } │ │ │ │ │ +_7_4 void *_G_e_t_D_u_W_e_i_g_h_t_s_B_u_f_f_e_r() const { return _duWeights; } │ │ │ │ │ +_7_5 void *_G_e_t_D_v_W_e_i_g_h_t_s_B_u_f_f_e_r() const { return _dvWeights; } │ │ │ │ │ +_7_6 void *_G_e_t_D_u_u_W_e_i_g_h_t_s_B_u_f_f_e_r() const { return _duuWeights; } │ │ │ │ │ +_7_7 void *_G_e_t_D_u_v_W_e_i_g_h_t_s_B_u_f_f_e_r() const { return _duvWeights; } │ │ │ │ │ +_7_8 void *_G_e_t_D_v_v_W_e_i_g_h_t_s_B_u_f_f_e_r() const { return _dvvWeights; } │ │ │ │ │ +_7_9 int _G_e_t_N_u_m_S_t_e_n_c_i_l_s() const { return _numStencils; } │ │ │ │ │ +80 │ │ │ │ │ +81private: │ │ │ │ │ +82 void * _sizes, │ │ │ │ │ +83 * _offsets, │ │ │ │ │ +84 * _indices, │ │ │ │ │ +85 * _weights, │ │ │ │ │ +86 * _duWeights, │ │ │ │ │ +87 * _dvWeights, │ │ │ │ │ +88 * _duuWeights, │ │ │ │ │ +89 * _duvWeights, │ │ │ │ │ +90 * _dvvWeights; │ │ │ │ │ +91 int _numStencils; │ │ │ │ │ +92}; │ │ │ │ │ +93 │ │ │ │ │ +_9_4class _C_u_d_a_E_v_a_l_u_a_t_o_r { │ │ │ │ │ +95public: │ │ │ │ │ +101 │ │ │ │ │ +125 template │ │ │ │ │ +_1_2_6 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ +127 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +128 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +129 STENCIL_TABLE const *stencilTable, │ │ │ │ │ +130 const void *instance = NULL, │ │ │ │ │ +131 void * deviceContext = NULL) { │ │ │ │ │ +132 │ │ │ │ │ +133 (void)instance; // unused │ │ │ │ │ +134 (void)deviceContext; // unused │ │ │ │ │ +135 return _E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer->BindCudaBuffer(), srcDesc, │ │ │ │ │ +136 dstBuffer->BindCudaBuffer(), dstDesc, │ │ │ │ │ +137 (int const *)stencilTable->GetSizesBuffer(), │ │ │ │ │ +138 (int const *)stencilTable->GetOffsetsBuffer(), │ │ │ │ │ +139 (int const *)stencilTable->GetIndicesBuffer(), │ │ │ │ │ +140 (float const *)stencilTable->GetWeightsBuffer(), │ │ │ │ │ +141 /*start = */ 0, │ │ │ │ │ +142 /*end = */ stencilTable->GetNumStencils()); │ │ │ │ │ +143 } │ │ │ │ │ +144 │ │ │ │ │ +_1_7_1 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ +172 const float *src, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +173 float *dst, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +174 const int * sizes, │ │ │ │ │ +175 const int * offsets, │ │ │ │ │ +176 const int * indices, │ │ │ │ │ +177 const float * weights, │ │ │ │ │ +178 int start, int end); │ │ │ │ │ +179 │ │ │ │ │ +217 template │ │ │ │ │ +_2_1_8 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ +219 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +220 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +221 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +222 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +223 STENCIL_TABLE const *stencilTable, │ │ │ │ │ +224 const _C_u_d_a_E_v_a_l_u_a_t_o_r *instance = NULL, │ │ │ │ │ +225 void * deviceContext = NULL) { │ │ │ │ │ +226 │ │ │ │ │ +227 (void)instance; // unused │ │ │ │ │ +228 (void)deviceContext; // unused │ │ │ │ │ +229 │ │ │ │ │ +230 return _E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer->BindCudaBuffer(), srcDesc, │ │ │ │ │ +231 dstBuffer->BindCudaBuffer(), dstDesc, │ │ │ │ │ +232 duBuffer->BindCudaBuffer(), duDesc, │ │ │ │ │ +233 dvBuffer->BindCudaBuffer(), dvDesc, │ │ │ │ │ +234 (int const *)stencilTable->GetSizesBuffer(), │ │ │ │ │ +235 (int const *)stencilTable->GetOffsetsBuffer(), │ │ │ │ │ +236 (int const *)stencilTable->GetIndicesBuffer(), │ │ │ │ │ +237 (float const *)stencilTable->GetWeightsBuffer(), │ │ │ │ │ +238 (float const *)stencilTable->GetDuWeightsBuffer(), │ │ │ │ │ +239 (float const *)stencilTable->GetDvWeightsBuffer(), │ │ │ │ │ +240 /*start = */ 0, │ │ │ │ │ +241 /*end = */ stencilTable->GetNumStencils()); │ │ │ │ │ +242 } │ │ │ │ │ +243 │ │ │ │ │ +_2_8_4 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ +285 const float *src, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +286 float *dst, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +287 float *du, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +288 float *dv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +289 const int * sizes, │ │ │ │ │ +290 const int * offsets, │ │ │ │ │ +291 const int * indices, │ │ │ │ │ +292 const float * weights, │ │ │ │ │ +293 const float * duWeights, │ │ │ │ │ +294 const float * dvWeights, │ │ │ │ │ +295 int start, int end); │ │ │ │ │ +296 │ │ │ │ │ +352 template │ │ │ │ │ +_3_5_3 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ +354 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +355 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +356 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +357 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +358 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +359 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +360 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +361 STENCIL_TABLE const *stencilTable, │ │ │ │ │ +362 const _C_u_d_a_E_v_a_l_u_a_t_o_r *instance = NULL, │ │ │ │ │ +363 void * deviceContext = NULL) { │ │ │ │ │ +364 │ │ │ │ │ +365 (void)instance; // unused │ │ │ │ │ +366 (void)deviceContext; // unused │ │ │ │ │ +367 │ │ │ │ │ +368 return _E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer->BindCudaBuffer(), srcDesc, │ │ │ │ │ +369 dstBuffer->BindCudaBuffer(), dstDesc, │ │ │ │ │ +370 duBuffer->BindCudaBuffer(), duDesc, │ │ │ │ │ +371 dvBuffer->BindCudaBuffer(), dvDesc, │ │ │ │ │ +372 duuBuffer->BindCudaBuffer(), duuDesc, │ │ │ │ │ +373 duvBuffer->BindCudaBuffer(), duvDesc, │ │ │ │ │ +374 dvvBuffer->BindCudaBuffer(), dvvDesc, │ │ │ │ │ +375 (int const *)stencilTable->GetSizesBuffer(), │ │ │ │ │ +376 (int const *)stencilTable->GetOffsetsBuffer(), │ │ │ │ │ +377 (int const *)stencilTable->GetIndicesBuffer(), │ │ │ │ │ +378 (float const *)stencilTable->GetWeightsBuffer(), │ │ │ │ │ +379 (float const *)stencilTable->GetDuWeightsBuffer(), │ │ │ │ │ +380 (float const *)stencilTable->GetDvWeightsBuffer(), │ │ │ │ │ +381 (float const *)stencilTable->GetDuuWeightsBuffer(), │ │ │ │ │ +382 (float const *)stencilTable->GetDuvWeightsBuffer(), │ │ │ │ │ +383 (float const *)stencilTable->GetDvvWeightsBuffer(), │ │ │ │ │ +384 /*start = */ 0, │ │ │ │ │ +385 /*end = */ stencilTable->GetNumStencils()); │ │ │ │ │ +386 } │ │ │ │ │ +387 │ │ │ │ │ +_4_4_9 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ +450 const float *src, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +451 float *dst, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +452 float *du, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +453 float *dv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +454 float *duu, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +455 float *duv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +456 float *dvv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +457 const int * sizes, │ │ │ │ │ +458 const int * offsets, │ │ │ │ │ +459 const int * indices, │ │ │ │ │ +460 const float * weights, │ │ │ │ │ +461 const float * duWeights, │ │ │ │ │ +462 const float * dvWeights, │ │ │ │ │ +463 const float * duuWeights, │ │ │ │ │ +464 const float * duvWeights, │ │ │ │ │ +465 const float * dvvWeights, │ │ │ │ │ +466 int start, int end); │ │ │ │ │ +467 │ │ │ │ │ +473 │ │ │ │ │ +502 template │ │ │ │ │ +_5_0_4 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ +505 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +506 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +507 int numPatchCoords, │ │ │ │ │ +508 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +509 PATCH_TABLE *patchTable, │ │ │ │ │ +510 _C_u_d_a_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +511 void * deviceContext = NULL) { │ │ │ │ │ +512 │ │ │ │ │ +513 (void)instance; // unused │ │ │ │ │ +514 (void)deviceContext; // unused │ │ │ │ │ +515 │ │ │ │ │ +516 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCudaBuffer(), srcDesc, │ │ │ │ │ +517 dstBuffer->BindCudaBuffer(), dstDesc, │ │ │ │ │ +518 numPatchCoords, │ │ │ │ │ +519 (const _P_a_t_c_h_C_o_o_r_d *)patchCoords->BindCudaBuffer(), │ │ │ │ │ +520 (const _P_a_t_c_h_A_r_r_a_y *)patchTable->GetPatchArrayBuffer(), │ │ │ │ │ +521 (const int *)patchTable->GetPatchIndexBuffer(), │ │ │ │ │ +522 (const _P_a_t_c_h_P_a_r_a_m *)patchTable->GetPatchParamBuffer()); │ │ │ │ │ +523 } │ │ │ │ │ +524 │ │ │ │ │ +563 template │ │ │ │ │ +_5_6_5 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ +566 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +567 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +568 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +569 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +570 int numPatchCoords, │ │ │ │ │ +571 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +572 PATCH_TABLE *patchTable, │ │ │ │ │ +573 _C_u_d_a_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +574 void * deviceContext = NULL) { │ │ │ │ │ +575 │ │ │ │ │ +576 (void)instance; // unused │ │ │ │ │ +577 (void)deviceContext; // unused │ │ │ │ │ +578 │ │ │ │ │ +579 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCudaBuffer(), srcDesc, │ │ │ │ │ +580 dstBuffer->BindCudaBuffer(), dstDesc, │ │ │ │ │ +581 duBuffer->BindCudaBuffer(), duDesc, │ │ │ │ │ +582 dvBuffer->BindCudaBuffer(), dvDesc, │ │ │ │ │ +583 numPatchCoords, │ │ │ │ │ +584 (const _P_a_t_c_h_C_o_o_r_d *)patchCoords->BindCudaBuffer(), │ │ │ │ │ +585 (const _P_a_t_c_h_A_r_r_a_y *)patchTable->GetPatchArrayBuffer(), │ │ │ │ │ +586 (const int *)patchTable->GetPatchIndexBuffer(), │ │ │ │ │ +587 (const _P_a_t_c_h_P_a_r_a_m *)patchTable->GetPatchParamBuffer()); │ │ │ │ │ +588 } │ │ │ │ │ +589 │ │ │ │ │ +646 template │ │ │ │ │ +_6_4_8 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ +649 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +650 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +651 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +652 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +653 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +654 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +655 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +656 int numPatchCoords, │ │ │ │ │ +657 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +658 PATCH_TABLE *patchTable, │ │ │ │ │ +659 _C_u_d_a_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +660 void * deviceContext = NULL) { │ │ │ │ │ +661 │ │ │ │ │ +662 (void)instance; // unused │ │ │ │ │ +663 (void)deviceContext; // unused │ │ │ │ │ +664 │ │ │ │ │ +665 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCudaBuffer(), srcDesc, │ │ │ │ │ +666 dstBuffer->BindCudaBuffer(), dstDesc, │ │ │ │ │ +667 duBuffer->BindCudaBuffer(), duDesc, │ │ │ │ │ +668 dvBuffer->BindCudaBuffer(), dvDesc, │ │ │ │ │ +669 duuBuffer->BindCudaBuffer(), duuDesc, │ │ │ │ │ +670 duvBuffer->BindCudaBuffer(), duvDesc, │ │ │ │ │ +671 dvvBuffer->BindCudaBuffer(), dvvDesc, │ │ │ │ │ +672 numPatchCoords, │ │ │ │ │ +673 (const _P_a_t_c_h_C_o_o_r_d *)patchCoords->BindCudaBuffer(), │ │ │ │ │ +674 (const _P_a_t_c_h_A_r_r_a_y *)patchTable->GetPatchArrayBuffer(), │ │ │ │ │ +675 (const int *)patchTable->GetPatchIndexBuffer(), │ │ │ │ │ +676 (const _P_a_t_c_h_P_a_r_a_m *)patchTable->GetPatchParamBuffer()); │ │ │ │ │ +677 } │ │ │ │ │ +678 │ │ │ │ │ +_7_0_6 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ +707 const float *src, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +708 float *dst, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +709 int numPatchCoords, │ │ │ │ │ +710 const _P_a_t_c_h_C_o_o_r_d *patchCoords, │ │ │ │ │ +711 const _P_a_t_c_h_A_r_r_a_y *patchArrays, │ │ │ │ │ +712 const int *patchIndices, │ │ │ │ │ +713 const _P_a_t_c_h_P_a_r_a_m *patchParams); │ │ │ │ │ +714 │ │ │ │ │ +_7_5_2 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ +753 const float *src, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +754 float *dst, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +755 float *du, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +756 float *dv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +757 int numPatchCoords, │ │ │ │ │ +758 _P_a_t_c_h_C_o_o_r_d const *patchCoords, │ │ │ │ │ +759 _P_a_t_c_h_A_r_r_a_y const *patchArrays, │ │ │ │ │ +760 const int *patchIndices, │ │ │ │ │ +761 _P_a_t_c_h_P_a_r_a_m const *patchParams); │ │ │ │ │ +762 │ │ │ │ │ +_8_1_5 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ +816 const float *src, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +817 float *dst, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +818 float *du, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +819 float *dv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +820 float *duu, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +821 float *duv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +822 float *dvv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +823 int numPatchCoords, │ │ │ │ │ +824 _P_a_t_c_h_C_o_o_r_d const *patchCoords, │ │ │ │ │ +825 _P_a_t_c_h_A_r_r_a_y const *patchArrays, │ │ │ │ │ +826 const int *patchIndices, │ │ │ │ │ +827 _P_a_t_c_h_P_a_r_a_m const *patchParams); │ │ │ │ │ +828 │ │ │ │ │ +857 template │ │ │ │ │ +_8_5_9 static bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +860 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +861 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +862 int numPatchCoords, │ │ │ │ │ +863 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +864 PATCH_TABLE *patchTable, │ │ │ │ │ +865 _C_u_d_a_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +866 void * deviceContext = NULL) { │ │ │ │ │ +867 │ │ │ │ │ +868 (void)instance; // unused │ │ │ │ │ +869 (void)deviceContext; // unused │ │ │ │ │ +870 │ │ │ │ │ +871 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCudaBuffer(), srcDesc, │ │ │ │ │ +872 dstBuffer->BindCudaBuffer(), dstDesc, │ │ │ │ │ +873 numPatchCoords, │ │ │ │ │ +874 (const _P_a_t_c_h_C_o_o_r_d *)patchCoords->BindCudaBuffer(), │ │ │ │ │ +875 (const _P_a_t_c_h_A_r_r_a_y *)patchTable->GetVaryingPatchArrayBuffer(), │ │ │ │ │ +876 (const int *)patchTable->GetVaryingPatchIndexBuffer(), │ │ │ │ │ +877 (const _P_a_t_c_h_P_a_r_a_m *)patchTable->GetPatchParamBuffer()); │ │ │ │ │ +878 } │ │ │ │ │ +879 │ │ │ │ │ +920 template │ │ │ │ │ +_9_2_2 static bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +923 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +924 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +925 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +926 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +927 int numPatchCoords, │ │ │ │ │ +928 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +929 PATCH_TABLE *patchTable, │ │ │ │ │ +930 _C_u_d_a_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +931 void * deviceContext = NULL) { │ │ │ │ │ +932 │ │ │ │ │ +933 (void)instance; // unused │ │ │ │ │ +934 (void)deviceContext; // unused │ │ │ │ │ +935 │ │ │ │ │ +936 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCudaBuffer(), srcDesc, │ │ │ │ │ +937 dstBuffer->BindCudaBuffer(), dstDesc, │ │ │ │ │ +938 duBuffer->BindCudaBuffer(), duDesc, │ │ │ │ │ +939 dvBuffer->BindCudaBuffer(), dvDesc, │ │ │ │ │ +940 numPatchCoords, │ │ │ │ │ +941 (const _P_a_t_c_h_C_o_o_r_d *)patchCoords->BindCudaBuffer(), │ │ │ │ │ +942 (const _P_a_t_c_h_A_r_r_a_y *)patchTable->GetVaryingPatchArrayBuffer(), │ │ │ │ │ +943 (const int *)patchTable->GetVaryingPatchIndexBuffer(), │ │ │ │ │ +944 (const _P_a_t_c_h_P_a_r_a_m *)patchTable->GetPatchParamBuffer()); │ │ │ │ │ +945 } │ │ │ │ │ +946 │ │ │ │ │ +1005 template │ │ │ │ │ +_1_0_0_7 static bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1008 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1009 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1010 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1011 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1012 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +1013 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +1014 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +1015 int numPatchCoords, │ │ │ │ │ +1016 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1017 PATCH_TABLE *patchTable, │ │ │ │ │ +1018 _C_u_d_a_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +1019 void * deviceContext = NULL) { │ │ │ │ │ +1020 │ │ │ │ │ +1021 (void)instance; // unused │ │ │ │ │ +1022 (void)deviceContext; // unused │ │ │ │ │ +1023 │ │ │ │ │ +1024 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCudaBuffer(), srcDesc, │ │ │ │ │ +1025 dstBuffer->BindCudaBuffer(), dstDesc, │ │ │ │ │ +1026 duBuffer->BindCudaBuffer(), duDesc, │ │ │ │ │ +1027 dvBuffer->BindCudaBuffer(), dvDesc, │ │ │ │ │ +1028 duuBuffer->BindCudaBuffer(), duuDesc, │ │ │ │ │ +1029 duvBuffer->BindCudaBuffer(), duvDesc, │ │ │ │ │ +1030 dvvBuffer->BindCudaBuffer(), dvvDesc, │ │ │ │ │ +1031 numPatchCoords, │ │ │ │ │ +1032 (const _P_a_t_c_h_C_o_o_r_d *)patchCoords->BindCudaBuffer(), │ │ │ │ │ +1033 (const _P_a_t_c_h_A_r_r_a_y *)patchTable->GetVaryingPatchArrayBuffer(), │ │ │ │ │ +1034 (const int *)patchTable->GetVaryingPatchIndexBuffer(), │ │ │ │ │ +1035 (const _P_a_t_c_h_P_a_r_a_m *)patchTable->GetPatchParamBuffer()); │ │ │ │ │ +1036 } │ │ │ │ │ +1037 │ │ │ │ │ +1068 template │ │ │ │ │ +_1_0_7_0 static bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1071 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1072 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1073 int numPatchCoords, │ │ │ │ │ +1074 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1075 PATCH_TABLE *patchTable, │ │ │ │ │ +1076 int fvarChannel, │ │ │ │ │ +1077 _C_u_d_a_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +1078 void * deviceContext = NULL) { │ │ │ │ │ +1079 │ │ │ │ │ +1080 (void)instance; // unused │ │ │ │ │ +1081 (void)deviceContext; // unused │ │ │ │ │ +1082 │ │ │ │ │ +1083 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCudaBuffer(), srcDesc, │ │ │ │ │ +1084 dstBuffer->BindCudaBuffer(), dstDesc, │ │ │ │ │ +1085 numPatchCoords, │ │ │ │ │ +1086 (const _P_a_t_c_h_C_o_o_r_d *)patchCoords->BindCudaBuffer(), │ │ │ │ │ +1087 (const _P_a_t_c_h_A_r_r_a_y *)patchTable->GetFVarPatchArrayBuffer(fvarChannel), │ │ │ │ │ +1088 (const int *)patchTable->GetFVarPatchIndexBuffer(fvarChannel), │ │ │ │ │ +1089 (const _P_a_t_c_h_P_a_r_a_m *)patchTable->GetFVarPatchParamBuffer(fvarChannel)); │ │ │ │ │ +1090 } │ │ │ │ │ +1091 │ │ │ │ │ +1134 template │ │ │ │ │ +_1_1_3_6 static bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1137 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1138 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1139 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1140 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1141 int numPatchCoords, │ │ │ │ │ +1142 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1143 PATCH_TABLE *patchTable, │ │ │ │ │ +1144 int fvarChannel, │ │ │ │ │ +1145 _C_u_d_a_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +1146 void * deviceContext = NULL) { │ │ │ │ │ +1147 │ │ │ │ │ +1148 (void)instance; // unused │ │ │ │ │ +1149 (void)deviceContext; // unused │ │ │ │ │ +1150 │ │ │ │ │ +1151 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCudaBuffer(), srcDesc, │ │ │ │ │ +1152 dstBuffer->BindCudaBuffer(), dstDesc, │ │ │ │ │ +1153 duBuffer->BindCudaBuffer(), duDesc, │ │ │ │ │ +1154 dvBuffer->BindCudaBuffer(), dvDesc, │ │ │ │ │ +1155 numPatchCoords, │ │ │ │ │ +1156 (const _P_a_t_c_h_C_o_o_r_d *)patchCoords->BindCudaBuffer(), │ │ │ │ │ +1157 (const _P_a_t_c_h_A_r_r_a_y *)patchTable->GetFVarPatchArrayBuffer(fvarChannel), │ │ │ │ │ +1158 (const int *)patchTable->GetFVarPatchIndexBuffer(fvarChannel), │ │ │ │ │ +1159 (const _P_a_t_c_h_P_a_r_a_m *)patchTable->GetFVarPatchParamBuffer(fvarChannel)); │ │ │ │ │ +1160 } │ │ │ │ │ +1161 │ │ │ │ │ +1222 template │ │ │ │ │ +_1_2_2_4 static bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1225 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1226 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1227 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1228 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1229 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +1230 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +1231 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +1232 int numPatchCoords, │ │ │ │ │ +1233 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1234 PATCH_TABLE *patchTable, │ │ │ │ │ +1235 int fvarChannel, │ │ │ │ │ +1236 _C_u_d_a_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +1237 void * deviceContext = NULL) { │ │ │ │ │ +1238 │ │ │ │ │ +1239 (void)instance; // unused │ │ │ │ │ +1240 (void)deviceContext; // unused │ │ │ │ │ +1241 │ │ │ │ │ +1242 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCudaBuffer(), srcDesc, │ │ │ │ │ +1243 dstBuffer->BindCudaBuffer(), dstDesc, │ │ │ │ │ +1244 duBuffer->BindCudaBuffer(), duDesc, │ │ │ │ │ +1245 dvBuffer->BindCudaBuffer(), dvDesc, │ │ │ │ │ +1246 duuBuffer->BindCudaBuffer(), duuDesc, │ │ │ │ │ +1247 duvBuffer->BindCudaBuffer(), duvDesc, │ │ │ │ │ +1248 dvvBuffer->BindCudaBuffer(), dvvDesc, │ │ │ │ │ +1249 numPatchCoords, │ │ │ │ │ +1250 (const _P_a_t_c_h_C_o_o_r_d *)patchCoords->BindCudaBuffer(), │ │ │ │ │ +1251 (const _P_a_t_c_h_A_r_r_a_y *)patchTable->GetFVarPatchArrayBuffer(fvarChannel), │ │ │ │ │ +1252 (const int *)patchTable->GetFVarPatchIndexBuffer(fvarChannel), │ │ │ │ │ +1253 (const _P_a_t_c_h_P_a_r_a_m *)patchTable->GetFVarPatchParamBuffer(fvarChannel)); │ │ │ │ │ +1254 } │ │ │ │ │ +1255 │ │ │ │ │ +_1_2_6_1 static void _S_y_n_c_h_r_o_n_i_z_e(void *deviceContext = NULL); │ │ │ │ │ +1262}; │ │ │ │ │ +1263 │ │ │ │ │ +1264 │ │ │ │ │ +1265} // end namespace Osd │ │ │ │ │ +1266 │ │ │ │ │ +1267} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ +1268using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +1269 │ │ │ │ │ +1270} // end namespace OpenSubdiv │ │ │ │ │ +1271 │ │ │ │ │ +1272 │ │ │ │ │ +1273#endif // OPENSUBDIV3_OSD_CUDA_EVALUATOR_H │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -Container for arrays of parametric patches. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_5_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -CUDA patch table. │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_5_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_A_r_r_a_y_B_u_f_f_e_r │ │ │ │ │ -void * GetFVarPatchArrayBuffer(int fvarChannel) const │ │ │ │ │ -Returns the cuda memory of the array of Osd::PatchArray buffer. │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_8_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:___f_v_a_r_P_a_r_a_m_B_u_f_f_e_r_s │ │ │ │ │ -std::vector< void * > _fvarParamBuffers │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_1_0_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ -static CudaPatchTable * Create(Far::PatchTable const *patchTable, void │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +Stencil table class wrapping the template for compatibility. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_7_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +Limit stencil table class wrapping the template for compatibility. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_8_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ +BufferDescriptor is a struct which describes buffer elements in interleaved │ │ │ │ │ +data buffers.... │ │ │ │ │ +DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_6_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +CUDA stencil table. │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_5_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_D_u_v_W_e_i_g_h_t_s_B_u_f_f_e_r │ │ │ │ │ +void * GetDuvWeightsBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_7_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_~_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +~CudaStencilTable() │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_D_u_W_e_i_g_h_t_s_B_u_f_f_e_r │ │ │ │ │ +void * GetDuWeightsBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_7_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_D_v_v_W_e_i_g_h_t_s_B_u_f_f_e_r │ │ │ │ │ +void * GetDvvWeightsBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_7_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_O_f_f_s_e_t_s_B_u_f_f_e_r │ │ │ │ │ +void * GetOffsetsBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_7_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +CudaStencilTable(Far::LimitStencilTable const *limitStencilTable) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_D_v_W_e_i_g_h_t_s_B_u_f_f_e_r │ │ │ │ │ +void * GetDvWeightsBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_7_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_N_u_m_S_t_e_n_c_i_l_s │ │ │ │ │ +int GetNumStencils() const │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_7_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_D_u_u_W_e_i_g_h_t_s_B_u_f_f_e_r │ │ │ │ │ +void * GetDuuWeightsBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_7_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_W_e_i_g_h_t_s_B_u_f_f_e_r │ │ │ │ │ +void * GetWeightsBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_7_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ +static CudaStencilTable * Create(Far::LimitStencilTable const │ │ │ │ │ +*limitStencilTable, void *deviceContext=NULL) │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_5_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_S_i_z_e_s_B_u_f_f_e_r │ │ │ │ │ +void * GetSizesBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_7_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_I_n_d_i_c_e_s_B_u_f_f_e_r │ │ │ │ │ +void * GetIndicesBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_7_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +CudaStencilTable(Far::StencilTable const *stencilTable) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ +static CudaStencilTable * Create(Far::StencilTable const *stencilTable, void │ │ │ │ │ *deviceContext=NULL) │ │ │ │ │ -Creator. Returns NULL if error. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:___v_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ -void * _varyingPatchArrays │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_1_0_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ -void * GetVaryingPatchIndexBuffer() const │ │ │ │ │ -Returns the cuda memory of the array of varying control vertices. │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_7_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:___f_v_a_r_I_n_d_e_x_B_u_f_f_e_r_s │ │ │ │ │ -std::vector< void * > _fvarIndexBuffers │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_1_0_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_B_u_f_f_e_r │ │ │ │ │ -void * GetVaryingPatchArrayBuffer() const │ │ │ │ │ -Returns the cuda memory of the array of Osd::PatchArray buffer. │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_6_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:___v_a_r_y_i_n_g_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ -void * _varyingIndexBuffer │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_1_0_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_~_C_u_d_a_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -~CudaPatchTable() │ │ │ │ │ -Destructor. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_A_r_r_a_y_B_u_f_f_e_r │ │ │ │ │ -void * GetPatchArrayBuffer() const │ │ │ │ │ -Returns the cuda memory of the array of Osd::PatchArray buffer. │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_6_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:___f_v_a_r_P_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ -std::vector< void * > _fvarPatchArrays │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_1_0_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_a_l_l_o_c_a_t_e │ │ │ │ │ -bool allocate(Far::PatchTable const *patchTable) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ -void * GetPatchIndexBuffer() const │ │ │ │ │ -Returns the cuda memory of the patch control vertices. │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_6_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_F_V_a_r_C_h_a_n_n_e_l_s │ │ │ │ │ -int GetNumFVarChannels() const │ │ │ │ │ -Returns the number of face-varying channels buffers. │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_7_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:___p_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ -void * _patchArrays │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_1_0_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r │ │ │ │ │ -void * GetPatchParamBuffer() const │ │ │ │ │ -Returns the cuda memory of the array of Osd::PatchParam buffer. │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_6_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ -void * GetFVarPatchIndexBuffer(int fvarChannel=0) const │ │ │ │ │ -Returns the cuda memory of the array of face-varying control vertices. │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_8_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r │ │ │ │ │ -void * GetFVarPatchParamBuffer(int fvarChannel=0) const │ │ │ │ │ -Returns the cuda memory of the array of face-varying param. │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_9_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -CudaPatchTable() │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r │ │ │ │ │ -void * _patchParamBuffer │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_1_0_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:___i_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ -void * _indexBuffer │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_1_0_1 │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_5_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_9_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +static bool EvalPatches(const float *src, BufferDescriptor const &srcDesc, │ │ │ │ │ +float *dst, BufferDescriptor const &dstDesc, int numPatchCoords, const │ │ │ │ │ +PatchCoord *patchCoords, const PatchArray *patchArrays, const int │ │ │ │ │ +*patchIndices, const PatchParam *patchParams) │ │ │ │ │ +Static limit eval function. It takes an array of PatchCoord and evaluate limit │ │ │ │ │ +values on given PatchT... │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ +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, CudaEvaluator const *instance, void │ │ │ │ │ +*deviceContext=NULL) │ │ │ │ │ +Generic limit eval function. This function has a same signature as other device │ │ │ │ │ +kernels have so that ... │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_9_2_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +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, CudaEvaluator const *instance, void │ │ │ │ │ +*deviceContext=NULL) │ │ │ │ │ +Generic limit eval function with derivatives. This function has a same │ │ │ │ │ +signature as other device kern... │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_6_4_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +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 CudaEvaluator *instance=NULL, void *deviceContext=NULL) │ │ │ │ │ +Generic static eval stencils function with derivatives. This function has a │ │ │ │ │ +same signature as other d... │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_3_5_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +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 cuda buffers for input and │ │ │ │ │ +output. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ +static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const │ │ │ │ │ +&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int │ │ │ │ │ +numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, │ │ │ │ │ +CudaEvaluator const *instance, void *deviceContext=NULL) │ │ │ │ │ +Generic limit eval function. This function has a same signature as other device │ │ │ │ │ +kernels have so that ... │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_8_5_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +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 │ │ │ │ │ +CudaEvaluator *instance=NULL, void *deviceContext=NULL) │ │ │ │ │ +Generic static eval stencils function with derivatives. This function has a │ │ │ │ │ +same signature as other d... │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_2_1_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +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 *patchIndices, │ │ │ │ │ +PatchParam const *patchParams) │ │ │ │ │ +Static limit eval function. It takes an array of PatchCoord and evaluate limit │ │ │ │ │ +values on given PatchT... │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ +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, CudaEvaluator const │ │ │ │ │ +*instance, void *deviceContext=NULL) │ │ │ │ │ +Generic limit eval function. This function has a same signature as other device │ │ │ │ │ +kernels have so that ... │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_1_1_3_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const │ │ │ │ │ +&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE │ │ │ │ │ +const *stencilTable, const void *instance=NULL, void *deviceContext=NULL) │ │ │ │ │ +Generic static compute function. This function has a same signature as other │ │ │ │ │ +device kernels have so t... │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_1_2_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +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 cuda pointers │ │ │ │ │ +for input and output. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +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 cuda pointers │ │ │ │ │ +for input and output. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_S_y_n_c_h_r_o_n_i_z_e │ │ │ │ │ +static void Synchronize(void *deviceContext=NULL) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +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 │ │ │ │ │ +*patchIndices, PatchParam const *patchParams) │ │ │ │ │ +Static limit eval function. It takes an array of PatchCoord and evaluate limit │ │ │ │ │ +values on given PatchT... │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ +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, CudaEvaluator const │ │ │ │ │ +*instance, void *deviceContext=NULL) │ │ │ │ │ +Generic limit eval function. This function has a same signature as other device │ │ │ │ │ +kernels have so that ... │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_1_0_0_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, │ │ │ │ │ +DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, │ │ │ │ │ +PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, CudaEvaluator const │ │ │ │ │ +*instance, void *deviceContext=NULL) │ │ │ │ │ +Generic limit eval function. This function has a same signature as other device │ │ │ │ │ +kernels have so that ... │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_5_0_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ +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, │ │ │ │ │ +CudaEvaluator const *instance, void *deviceContext=NULL) │ │ │ │ │ +Generic limit eval function. This function has a same signature as other device │ │ │ │ │ +kernels have so that ... │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_1_2_2_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +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, CudaEvaluator const *instance, void *deviceContext=NULL) │ │ │ │ │ +Generic limit eval function with derivatives. This function has a same │ │ │ │ │ +signature as other device kern... │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_5_6_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ +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, CudaEvaluator const *instance, void *deviceContext=NULL) │ │ │ │ │ +Generic limit eval function. This function has a same signature as other device │ │ │ │ │ +kernels have so that ... │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_1_0_7_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_C_o_o_r_d │ │ │ │ │ +Coordinates set on a patch table. │ │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e_s_._h_:_4_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_A_r_r_a_y │ │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e_s_._h_:_6_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_P_a_r_a_m │ │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e_s_._h_:_1_2_7 │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ + * _c_u_d_a_E_v_a_l_u_a_t_o_r_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00791.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/cudaEvaluator.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/osd/cudaPatchTable.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -90,30 +90,28 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
cudaEvaluator.h File Reference
│ │ │ │ +
cudaPatchTable.h File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include <vector>
│ │ │ │ -#include "../osd/bufferDescriptor.h"
│ │ │ │ +#include "../osd/nonCopyable.h"
│ │ │ │ #include "../osd/types.h"
│ │ │ │ +#include <vector>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  CudaStencilTable
 CUDA stencil table. More...
 
class  CudaEvaluator
class  CudaPatchTable
 CUDA patch table. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -124,13 +122,13 @@ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,30 +1,28 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -cudaEvaluator.h File Reference │ │ │ │ │ +cudaPatchTable.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_o_s_d_/_b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h" │ │ │ │ │ +#include "../osd/nonCopyable.h" │ │ │ │ │ #include "_._._/_o_s_d_/_t_y_p_e_s_._h" │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -  CUDA stencil table. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _C_u_d_a_E_v_a_l_u_a_t_o_r │ │ │ │ │ +class   _C_u_d_a_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +  CUDA patch table. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d │ │ │ │ │   │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _c_u_d_a_E_v_a_l_u_a_t_o_r_._h │ │ │ │ │ + * _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00791.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,4 +1,3 @@ │ │ │ │ │ var a00791 = [ │ │ │ │ │ - ["CudaStencilTable", "a01181.html", "a01181"], │ │ │ │ │ - ["CudaEvaluator", "a01185.html", null] │ │ │ │ │ + ["CudaPatchTable", "a01189.html", "a01189"] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00791_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/cudaEvaluator.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/osd/cudaPatchTable.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,15 +92,15 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
cudaEvaluator.h
│ │ │ │ +
cudaPatchTable.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │
2// Copyright 2015 Pixar
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │ @@ -119,582 +119,131 @@ │ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │
24
│ │ │ │ -
25#ifndef OPENSUBDIV3_OSD_CUDA_EVALUATOR_H
│ │ │ │ -
26#define OPENSUBDIV3_OSD_CUDA_EVALUATOR_H
│ │ │ │ +
25#ifndef OPENSUBDIV3_OSD_CUDA_PATCH_TABLE_H
│ │ │ │ +
26#define OPENSUBDIV3_OSD_CUDA_PATCH_TABLE_H
│ │ │ │
27
│ │ │ │
28#include "../version.h"
│ │ │ │
29
│ │ │ │ -
30#include <vector>
│ │ │ │ -
31#include "../osd/bufferDescriptor.h"
│ │ │ │ -
32#include "../osd/types.h"
│ │ │ │ -
33
│ │ │ │ -
34namespace OpenSubdiv {
│ │ │ │ -
35namespace OPENSUBDIV_VERSION {
│ │ │ │ -
36
│ │ │ │ -
37namespace Far {
│ │ │ │ -
38 class PatchTable;
│ │ │ │ -
39 class StencilTable;
│ │ │ │ -
40 class LimitStencilTable;
│ │ │ │ -
41}
│ │ │ │ -
42
│ │ │ │ -
43namespace Osd {
│ │ │ │ -
44
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
53public:
│ │ │ │ -
│ │ │ │ -
54 static CudaStencilTable *Create(Far::StencilTable const *stencilTable,
│ │ │ │ -
55 void *deviceContext = NULL) {
│ │ │ │ -
56 (void)deviceContext; // unused
│ │ │ │ -
57 return new CudaStencilTable(stencilTable);
│ │ │ │ -
58 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
59 static CudaStencilTable *Create(Far::LimitStencilTable const *limitStencilTable,
│ │ │ │ -
60 void *deviceContext = NULL) {
│ │ │ │ -
61 (void)deviceContext; // unused
│ │ │ │ -
62 return new CudaStencilTable(limitStencilTable);
│ │ │ │ -
63 }
│ │ │ │ -
│ │ │ │ +
30#include "../osd/nonCopyable.h"
│ │ │ │ +
31#include "../osd/types.h"
│ │ │ │ +
32
│ │ │ │ +
33#include <vector>
│ │ │ │ +
34
│ │ │ │ +
35namespace OpenSubdiv {
│ │ │ │ +
36namespace OPENSUBDIV_VERSION {
│ │ │ │ +
37
│ │ │ │ +
38namespace Far{
│ │ │ │ +
39 class PatchTable;
│ │ │ │ +
40};
│ │ │ │ +
41
│ │ │ │ +
42namespace Osd {
│ │ │ │ +
43
│ │ │ │ +
│ │ │ │ +
51class CudaPatchTable : private NonCopyable<CudaPatchTable> {
│ │ │ │ +
52public:
│ │ │ │ +
54 static CudaPatchTable *Create(Far::PatchTable const *patchTable,
│ │ │ │ +
55 void *deviceContext = NULL);
│ │ │ │ + │ │ │ │ +
58
│ │ │ │ +
60 void *GetPatchArrayBuffer() const { return _patchArrays; }
│ │ │ │ +
61
│ │ │ │ +
63 void *GetPatchIndexBuffer() const { return _indexBuffer; }
│ │ │ │
64
│ │ │ │ -
65 explicit CudaStencilTable(Far::StencilTable const *stencilTable);
│ │ │ │ -
66 explicit CudaStencilTable(Far::LimitStencilTable const *limitStencilTable);
│ │ │ │ - │ │ │ │ -
68
│ │ │ │ -
69 // interfaces needed for CudaCompute
│ │ │ │ -
70 void *GetSizesBuffer() const { return _sizes; }
│ │ │ │ -
71 void *GetOffsetsBuffer() const { return _offsets; }
│ │ │ │ -
72 void *GetIndicesBuffer() const { return _indices; }
│ │ │ │ -
73 void *GetWeightsBuffer() const { return _weights; }
│ │ │ │ -
74 void *GetDuWeightsBuffer() const { return _duWeights; }
│ │ │ │ -
75 void *GetDvWeightsBuffer() const { return _dvWeights; }
│ │ │ │ -
76 void *GetDuuWeightsBuffer() const { return _duuWeights; }
│ │ │ │ -
77 void *GetDuvWeightsBuffer() const { return _duvWeights; }
│ │ │ │ -
78 void *GetDvvWeightsBuffer() const { return _dvvWeights; }
│ │ │ │ -
79 int GetNumStencils() const { return _numStencils; }
│ │ │ │ -
80
│ │ │ │ -
81private:
│ │ │ │ -
82 void * _sizes,
│ │ │ │ -
83 * _offsets,
│ │ │ │ -
84 * _indices,
│ │ │ │ -
85 * _weights,
│ │ │ │ -
86 * _duWeights,
│ │ │ │ -
87 * _dvWeights,
│ │ │ │ -
88 * _duuWeights,
│ │ │ │ -
89 * _duvWeights,
│ │ │ │ -
90 * _dvvWeights;
│ │ │ │ -
91 int _numStencils;
│ │ │ │ -
92};
│ │ │ │ -
│ │ │ │ -
93
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
95public:
│ │ │ │ -
101
│ │ │ │ -
125 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ -
│ │ │ │ -
126 static bool EvalStencils(
│ │ │ │ -
127 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
128 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
129 STENCIL_TABLE const *stencilTable,
│ │ │ │ -
130 const void *instance = NULL,
│ │ │ │ -
131 void * deviceContext = NULL) {
│ │ │ │ -
132
│ │ │ │ -
133 (void)instance; // unused
│ │ │ │ -
134 (void)deviceContext; // unused
│ │ │ │ -
135 return EvalStencils(srcBuffer->BindCudaBuffer(), srcDesc,
│ │ │ │ -
136 dstBuffer->BindCudaBuffer(), dstDesc,
│ │ │ │ -
137 (int const *)stencilTable->GetSizesBuffer(),
│ │ │ │ -
138 (int const *)stencilTable->GetOffsetsBuffer(),
│ │ │ │ -
139 (int const *)stencilTable->GetIndicesBuffer(),
│ │ │ │ -
140 (float const *)stencilTable->GetWeightsBuffer(),
│ │ │ │ -
141 /*start = */ 0,
│ │ │ │ -
142 /*end = */ stencilTable->GetNumStencils());
│ │ │ │ -
143 }
│ │ │ │ -
│ │ │ │ -
144
│ │ │ │ -
171 static bool EvalStencils(
│ │ │ │ -
172 const float *src, BufferDescriptor const &srcDesc,
│ │ │ │ -
173 float *dst, BufferDescriptor const &dstDesc,
│ │ │ │ -
174 const int * sizes,
│ │ │ │ -
175 const int * offsets,
│ │ │ │ -
176 const int * indices,
│ │ │ │ -
177 const float * weights,
│ │ │ │ -
178 int start, int end);
│ │ │ │ -
179
│ │ │ │ -
217 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ -
│ │ │ │ -
218 static bool EvalStencils(
│ │ │ │ -
219 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
220 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
221 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
222 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
223 STENCIL_TABLE const *stencilTable,
│ │ │ │ -
224 const CudaEvaluator *instance = NULL,
│ │ │ │ -
225 void * deviceContext = NULL) {
│ │ │ │ -
226
│ │ │ │ -
227 (void)instance; // unused
│ │ │ │ -
228 (void)deviceContext; // unused
│ │ │ │ -
229
│ │ │ │ -
230 return EvalStencils(srcBuffer->BindCudaBuffer(), srcDesc,
│ │ │ │ -
231 dstBuffer->BindCudaBuffer(), dstDesc,
│ │ │ │ -
232 duBuffer->BindCudaBuffer(), duDesc,
│ │ │ │ -
233 dvBuffer->BindCudaBuffer(), dvDesc,
│ │ │ │ -
234 (int const *)stencilTable->GetSizesBuffer(),
│ │ │ │ -
235 (int const *)stencilTable->GetOffsetsBuffer(),
│ │ │ │ -
236 (int const *)stencilTable->GetIndicesBuffer(),
│ │ │ │ -
237 (float const *)stencilTable->GetWeightsBuffer(),
│ │ │ │ -
238 (float const *)stencilTable->GetDuWeightsBuffer(),
│ │ │ │ -
239 (float const *)stencilTable->GetDvWeightsBuffer(),
│ │ │ │ -
240 /*start = */ 0,
│ │ │ │ -
241 /*end = */ stencilTable->GetNumStencils());
│ │ │ │ -
242 }
│ │ │ │ -
│ │ │ │ -
243
│ │ │ │ -
284 static bool EvalStencils(
│ │ │ │ -
285 const float *src, BufferDescriptor const &srcDesc,
│ │ │ │ -
286 float *dst, BufferDescriptor const &dstDesc,
│ │ │ │ -
287 float *du, BufferDescriptor const &duDesc,
│ │ │ │ -
288 float *dv, BufferDescriptor const &dvDesc,
│ │ │ │ -
289 const int * sizes,
│ │ │ │ -
290 const int * offsets,
│ │ │ │ -
291 const int * indices,
│ │ │ │ -
292 const float * weights,
│ │ │ │ -
293 const float * duWeights,
│ │ │ │ -
294 const float * dvWeights,
│ │ │ │ -
295 int start, int end);
│ │ │ │ -
296
│ │ │ │ -
352 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ -
│ │ │ │ -
353 static bool EvalStencils(
│ │ │ │ -
354 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
355 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
356 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
357 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
358 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
359 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
360 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
361 STENCIL_TABLE const *stencilTable,
│ │ │ │ -
362 const CudaEvaluator *instance = NULL,
│ │ │ │ -
363 void * deviceContext = NULL) {
│ │ │ │ -
364
│ │ │ │ -
365 (void)instance; // unused
│ │ │ │ -
366 (void)deviceContext; // unused
│ │ │ │ -
367
│ │ │ │ -
368 return EvalStencils(srcBuffer->BindCudaBuffer(), srcDesc,
│ │ │ │ -
369 dstBuffer->BindCudaBuffer(), dstDesc,
│ │ │ │ -
370 duBuffer->BindCudaBuffer(), duDesc,
│ │ │ │ -
371 dvBuffer->BindCudaBuffer(), dvDesc,
│ │ │ │ -
372 duuBuffer->BindCudaBuffer(), duuDesc,
│ │ │ │ -
373 duvBuffer->BindCudaBuffer(), duvDesc,
│ │ │ │ -
374 dvvBuffer->BindCudaBuffer(), dvvDesc,
│ │ │ │ -
375 (int const *)stencilTable->GetSizesBuffer(),
│ │ │ │ -
376 (int const *)stencilTable->GetOffsetsBuffer(),
│ │ │ │ -
377 (int const *)stencilTable->GetIndicesBuffer(),
│ │ │ │ -
378 (float const *)stencilTable->GetWeightsBuffer(),
│ │ │ │ -
379 (float const *)stencilTable->GetDuWeightsBuffer(),
│ │ │ │ -
380 (float const *)stencilTable->GetDvWeightsBuffer(),
│ │ │ │ -
381 (float const *)stencilTable->GetDuuWeightsBuffer(),
│ │ │ │ -
382 (float const *)stencilTable->GetDuvWeightsBuffer(),
│ │ │ │ -
383 (float const *)stencilTable->GetDvvWeightsBuffer(),
│ │ │ │ -
384 /*start = */ 0,
│ │ │ │ -
385 /*end = */ stencilTable->GetNumStencils());
│ │ │ │ -
386 }
│ │ │ │ -
│ │ │ │ -
387
│ │ │ │ -
449 static bool EvalStencils(
│ │ │ │ -
450 const float *src, BufferDescriptor const &srcDesc,
│ │ │ │ -
451 float *dst, BufferDescriptor const &dstDesc,
│ │ │ │ -
452 float *du, BufferDescriptor const &duDesc,
│ │ │ │ -
453 float *dv, BufferDescriptor const &dvDesc,
│ │ │ │ -
454 float *duu, BufferDescriptor const &duuDesc,
│ │ │ │ -
455 float *duv, BufferDescriptor const &duvDesc,
│ │ │ │ -
456 float *dvv, BufferDescriptor const &dvvDesc,
│ │ │ │ -
457 const int * sizes,
│ │ │ │ -
458 const int * offsets,
│ │ │ │ -
459 const int * indices,
│ │ │ │ -
460 const float * weights,
│ │ │ │ -
461 const float * duWeights,
│ │ │ │ -
462 const float * dvWeights,
│ │ │ │ -
463 const float * duuWeights,
│ │ │ │ -
464 const float * duvWeights,
│ │ │ │ -
465 const float * dvvWeights,
│ │ │ │ -
466 int start, int end);
│ │ │ │ -
467
│ │ │ │ -
473
│ │ │ │ -
502 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
503 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ -
504 static bool EvalPatches(
│ │ │ │ -
505 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
506 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
507 int numPatchCoords,
│ │ │ │ -
508 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
509 PATCH_TABLE *patchTable,
│ │ │ │ -
510 CudaEvaluator const *instance,
│ │ │ │ -
511 void * deviceContext = NULL) {
│ │ │ │ -
512
│ │ │ │ -
513 (void)instance; // unused
│ │ │ │ -
514 (void)deviceContext; // unused
│ │ │ │ -
515
│ │ │ │ -
516 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
│ │ │ │ -
517 dstBuffer->BindCudaBuffer(), dstDesc,
│ │ │ │ -
518 numPatchCoords,
│ │ │ │ -
519 (const PatchCoord *)patchCoords->BindCudaBuffer(),
│ │ │ │ -
520 (const PatchArray *)patchTable->GetPatchArrayBuffer(),
│ │ │ │ -
521 (const int *)patchTable->GetPatchIndexBuffer(),
│ │ │ │ -
522 (const PatchParam *)patchTable->GetPatchParamBuffer());
│ │ │ │ -
523 }
│ │ │ │ -
│ │ │ │ -
524
│ │ │ │ -
563 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
564 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ -
565 static bool EvalPatches(
│ │ │ │ -
566 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
567 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
568 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
569 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
570 int numPatchCoords,
│ │ │ │ -
571 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
572 PATCH_TABLE *patchTable,
│ │ │ │ -
573 CudaEvaluator const *instance,
│ │ │ │ -
574 void * deviceContext = NULL) {
│ │ │ │ -
575
│ │ │ │ -
576 (void)instance; // unused
│ │ │ │ -
577 (void)deviceContext; // unused
│ │ │ │ -
578
│ │ │ │ -
579 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
│ │ │ │ -
580 dstBuffer->BindCudaBuffer(), dstDesc,
│ │ │ │ -
581 duBuffer->BindCudaBuffer(), duDesc,
│ │ │ │ -
582 dvBuffer->BindCudaBuffer(), dvDesc,
│ │ │ │ -
583 numPatchCoords,
│ │ │ │ -
584 (const PatchCoord *)patchCoords->BindCudaBuffer(),
│ │ │ │ -
585 (const PatchArray *)patchTable->GetPatchArrayBuffer(),
│ │ │ │ -
586 (const int *)patchTable->GetPatchIndexBuffer(),
│ │ │ │ -
587 (const PatchParam *)patchTable->GetPatchParamBuffer());
│ │ │ │ -
588 }
│ │ │ │ -
│ │ │ │ -
589
│ │ │ │ -
646 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
647 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ -
648 static bool EvalPatches(
│ │ │ │ -
649 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
650 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
651 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
652 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
653 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
654 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
655 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
656 int numPatchCoords,
│ │ │ │ -
657 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
658 PATCH_TABLE *patchTable,
│ │ │ │ -
659 CudaEvaluator const *instance,
│ │ │ │ -
660 void * deviceContext = NULL) {
│ │ │ │ -
661
│ │ │ │ -
662 (void)instance; // unused
│ │ │ │ -
663 (void)deviceContext; // unused
│ │ │ │ -
664
│ │ │ │ -
665 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
│ │ │ │ -
666 dstBuffer->BindCudaBuffer(), dstDesc,
│ │ │ │ -
667 duBuffer->BindCudaBuffer(), duDesc,
│ │ │ │ -
668 dvBuffer->BindCudaBuffer(), dvDesc,
│ │ │ │ -
669 duuBuffer->BindCudaBuffer(), duuDesc,
│ │ │ │ -
670 duvBuffer->BindCudaBuffer(), duvDesc,
│ │ │ │ -
671 dvvBuffer->BindCudaBuffer(), dvvDesc,
│ │ │ │ -
672 numPatchCoords,
│ │ │ │ -
673 (const PatchCoord *)patchCoords->BindCudaBuffer(),
│ │ │ │ -
674 (const PatchArray *)patchTable->GetPatchArrayBuffer(),
│ │ │ │ -
675 (const int *)patchTable->GetPatchIndexBuffer(),
│ │ │ │ -
676 (const PatchParam *)patchTable->GetPatchParamBuffer());
│ │ │ │ -
677 }
│ │ │ │ -
│ │ │ │ -
678
│ │ │ │ -
706 static bool EvalPatches(
│ │ │ │ -
707 const float *src, BufferDescriptor const &srcDesc,
│ │ │ │ -
708 float *dst, BufferDescriptor const &dstDesc,
│ │ │ │ -
709 int numPatchCoords,
│ │ │ │ -
710 const PatchCoord *patchCoords,
│ │ │ │ -
711 const PatchArray *patchArrays,
│ │ │ │ -
712 const int *patchIndices,
│ │ │ │ -
713 const PatchParam *patchParams);
│ │ │ │ -
714
│ │ │ │ -
752 static bool EvalPatches(
│ │ │ │ -
753 const float *src, BufferDescriptor const &srcDesc,
│ │ │ │ -
754 float *dst, BufferDescriptor const &dstDesc,
│ │ │ │ -
755 float *du, BufferDescriptor const &duDesc,
│ │ │ │ -
756 float *dv, BufferDescriptor const &dvDesc,
│ │ │ │ -
757 int numPatchCoords,
│ │ │ │ -
758 PatchCoord const *patchCoords,
│ │ │ │ -
759 PatchArray const *patchArrays,
│ │ │ │ -
760 const int *patchIndices,
│ │ │ │ -
761 PatchParam const *patchParams);
│ │ │ │ -
762
│ │ │ │ -
815 static bool EvalPatches(
│ │ │ │ -
816 const float *src, BufferDescriptor const &srcDesc,
│ │ │ │ -
817 float *dst, BufferDescriptor const &dstDesc,
│ │ │ │ -
818 float *du, BufferDescriptor const &duDesc,
│ │ │ │ -
819 float *dv, BufferDescriptor const &dvDesc,
│ │ │ │ -
820 float *duu, BufferDescriptor const &duuDesc,
│ │ │ │ -
821 float *duv, BufferDescriptor const &duvDesc,
│ │ │ │ -
822 float *dvv, BufferDescriptor const &dvvDesc,
│ │ │ │ -
823 int numPatchCoords,
│ │ │ │ -
824 PatchCoord const *patchCoords,
│ │ │ │ -
825 PatchArray const *patchArrays,
│ │ │ │ -
826 const int *patchIndices,
│ │ │ │ -
827 PatchParam const *patchParams);
│ │ │ │ -
828
│ │ │ │ -
857 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
858 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
860 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
861 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
862 int numPatchCoords,
│ │ │ │ -
863 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
864 PATCH_TABLE *patchTable,
│ │ │ │ -
865 CudaEvaluator const *instance,
│ │ │ │ -
866 void * deviceContext = NULL) {
│ │ │ │ -
867
│ │ │ │ -
868 (void)instance; // unused
│ │ │ │ -
869 (void)deviceContext; // unused
│ │ │ │ -
870
│ │ │ │ -
871 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
│ │ │ │ -
872 dstBuffer->BindCudaBuffer(), dstDesc,
│ │ │ │ -
873 numPatchCoords,
│ │ │ │ -
874 (const PatchCoord *)patchCoords->BindCudaBuffer(),
│ │ │ │ -
875 (const PatchArray *)patchTable->GetVaryingPatchArrayBuffer(),
│ │ │ │ -
876 (const int *)patchTable->GetVaryingPatchIndexBuffer(),
│ │ │ │ -
877 (const PatchParam *)patchTable->GetPatchParamBuffer());
│ │ │ │ -
878 }
│ │ │ │ -
│ │ │ │ -
879
│ │ │ │ -
920 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
921 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
923 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
924 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
925 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
926 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
927 int numPatchCoords,
│ │ │ │ -
928 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
929 PATCH_TABLE *patchTable,
│ │ │ │ -
930 CudaEvaluator const *instance,
│ │ │ │ -
931 void * deviceContext = NULL) {
│ │ │ │ -
932
│ │ │ │ -
933 (void)instance; // unused
│ │ │ │ -
934 (void)deviceContext; // unused
│ │ │ │ -
935
│ │ │ │ -
936 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
│ │ │ │ -
937 dstBuffer->BindCudaBuffer(), dstDesc,
│ │ │ │ -
938 duBuffer->BindCudaBuffer(), duDesc,
│ │ │ │ -
939 dvBuffer->BindCudaBuffer(), dvDesc,
│ │ │ │ -
940 numPatchCoords,
│ │ │ │ -
941 (const PatchCoord *)patchCoords->BindCudaBuffer(),
│ │ │ │ -
942 (const PatchArray *)patchTable->GetVaryingPatchArrayBuffer(),
│ │ │ │ -
943 (const int *)patchTable->GetVaryingPatchIndexBuffer(),
│ │ │ │ -
944 (const PatchParam *)patchTable->GetPatchParamBuffer());
│ │ │ │ -
945 }
│ │ │ │ -
│ │ │ │ -
946
│ │ │ │ -
1005 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1006 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1008 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1009 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1010 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1011 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1012 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
1013 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
1014 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
1015 int numPatchCoords,
│ │ │ │ -
1016 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1017 PATCH_TABLE *patchTable,
│ │ │ │ -
1018 CudaEvaluator const *instance,
│ │ │ │ -
1019 void * deviceContext = NULL) {
│ │ │ │ -
1020
│ │ │ │ -
1021 (void)instance; // unused
│ │ │ │ -
1022 (void)deviceContext; // unused
│ │ │ │ -
1023
│ │ │ │ -
1024 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
│ │ │ │ -
1025 dstBuffer->BindCudaBuffer(), dstDesc,
│ │ │ │ -
1026 duBuffer->BindCudaBuffer(), duDesc,
│ │ │ │ -
1027 dvBuffer->BindCudaBuffer(), dvDesc,
│ │ │ │ -
1028 duuBuffer->BindCudaBuffer(), duuDesc,
│ │ │ │ -
1029 duvBuffer->BindCudaBuffer(), duvDesc,
│ │ │ │ -
1030 dvvBuffer->BindCudaBuffer(), dvvDesc,
│ │ │ │ -
1031 numPatchCoords,
│ │ │ │ -
1032 (const PatchCoord *)patchCoords->BindCudaBuffer(),
│ │ │ │ -
1033 (const PatchArray *)patchTable->GetVaryingPatchArrayBuffer(),
│ │ │ │ -
1034 (const int *)patchTable->GetVaryingPatchIndexBuffer(),
│ │ │ │ -
1035 (const PatchParam *)patchTable->GetPatchParamBuffer());
│ │ │ │ -
1036 }
│ │ │ │ -
│ │ │ │ -
1037
│ │ │ │ -
1068 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1069 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1071 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1072 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1073 int numPatchCoords,
│ │ │ │ -
1074 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1075 PATCH_TABLE *patchTable,
│ │ │ │ -
1076 int fvarChannel,
│ │ │ │ -
1077 CudaEvaluator const *instance,
│ │ │ │ -
1078 void * deviceContext = NULL) {
│ │ │ │ -
1079
│ │ │ │ -
1080 (void)instance; // unused
│ │ │ │ -
1081 (void)deviceContext; // unused
│ │ │ │ -
1082
│ │ │ │ -
1083 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
│ │ │ │ -
1084 dstBuffer->BindCudaBuffer(), dstDesc,
│ │ │ │ -
1085 numPatchCoords,
│ │ │ │ -
1086 (const PatchCoord *)patchCoords->BindCudaBuffer(),
│ │ │ │ -
1087 (const PatchArray *)patchTable->GetFVarPatchArrayBuffer(fvarChannel),
│ │ │ │ -
1088 (const int *)patchTable->GetFVarPatchIndexBuffer(fvarChannel),
│ │ │ │ -
1089 (const PatchParam *)patchTable->GetFVarPatchParamBuffer(fvarChannel));
│ │ │ │ -
1090 }
│ │ │ │ -
│ │ │ │ -
1091
│ │ │ │ -
1134 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1135 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1137 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1138 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1139 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1140 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1141 int numPatchCoords,
│ │ │ │ -
1142 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1143 PATCH_TABLE *patchTable,
│ │ │ │ -
1144 int fvarChannel,
│ │ │ │ -
1145 CudaEvaluator const *instance,
│ │ │ │ -
1146 void * deviceContext = NULL) {
│ │ │ │ -
1147
│ │ │ │ -
1148 (void)instance; // unused
│ │ │ │ -
1149 (void)deviceContext; // unused
│ │ │ │ -
1150
│ │ │ │ -
1151 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
│ │ │ │ -
1152 dstBuffer->BindCudaBuffer(), dstDesc,
│ │ │ │ -
1153 duBuffer->BindCudaBuffer(), duDesc,
│ │ │ │ -
1154 dvBuffer->BindCudaBuffer(), dvDesc,
│ │ │ │ -
1155 numPatchCoords,
│ │ │ │ -
1156 (const PatchCoord *)patchCoords->BindCudaBuffer(),
│ │ │ │ -
1157 (const PatchArray *)patchTable->GetFVarPatchArrayBuffer(fvarChannel),
│ │ │ │ -
1158 (const int *)patchTable->GetFVarPatchIndexBuffer(fvarChannel),
│ │ │ │ -
1159 (const PatchParam *)patchTable->GetFVarPatchParamBuffer(fvarChannel));
│ │ │ │ -
1160 }
│ │ │ │ -
│ │ │ │ -
1161
│ │ │ │ -
1222 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1223 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1225 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1226 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1227 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1228 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1229 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
1230 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
1231 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
1232 int numPatchCoords,
│ │ │ │ -
1233 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1234 PATCH_TABLE *patchTable,
│ │ │ │ -
1235 int fvarChannel,
│ │ │ │ -
1236 CudaEvaluator const *instance,
│ │ │ │ -
1237 void * deviceContext = NULL) {
│ │ │ │ -
1238
│ │ │ │ -
1239 (void)instance; // unused
│ │ │ │ -
1240 (void)deviceContext; // unused
│ │ │ │ -
1241
│ │ │ │ -
1242 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
│ │ │ │ -
1243 dstBuffer->BindCudaBuffer(), dstDesc,
│ │ │ │ -
1244 duBuffer->BindCudaBuffer(), duDesc,
│ │ │ │ -
1245 dvBuffer->BindCudaBuffer(), dvDesc,
│ │ │ │ -
1246 duuBuffer->BindCudaBuffer(), duuDesc,
│ │ │ │ -
1247 duvBuffer->BindCudaBuffer(), duvDesc,
│ │ │ │ -
1248 dvvBuffer->BindCudaBuffer(), dvvDesc,
│ │ │ │ -
1249 numPatchCoords,
│ │ │ │ -
1250 (const PatchCoord *)patchCoords->BindCudaBuffer(),
│ │ │ │ -
1251 (const PatchArray *)patchTable->GetFVarPatchArrayBuffer(fvarChannel),
│ │ │ │ -
1252 (const int *)patchTable->GetFVarPatchIndexBuffer(fvarChannel),
│ │ │ │ -
1253 (const PatchParam *)patchTable->GetFVarPatchParamBuffer(fvarChannel));
│ │ │ │ -
1254 }
│ │ │ │ -
│ │ │ │ -
1255
│ │ │ │ -
1261 static void Synchronize(void *deviceContext = NULL);
│ │ │ │ -
1262};
│ │ │ │ -
│ │ │ │ -
1263
│ │ │ │ -
1264
│ │ │ │ -
1265} // end namespace Osd
│ │ │ │ -
1266
│ │ │ │ -
1267} // end namespace OPENSUBDIV_VERSION
│ │ │ │ -
1268using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
1269
│ │ │ │ -
1270} // end namespace OpenSubdiv
│ │ │ │ -
1271
│ │ │ │ -
1272
│ │ │ │ -
1273#endif // OPENSUBDIV3_OSD_CUDA_EVALUATOR_H
│ │ │ │ +
66 void *GetPatchParamBuffer() const { return _patchParamBuffer; }
│ │ │ │ +
67
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
71 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
75 }
│ │ │ │ +
│ │ │ │ +
76
│ │ │ │ +
78 int GetNumFVarChannels() const { return (int)_fvarPatchArrays.size(); }
│ │ │ │ +
79
│ │ │ │ +
│ │ │ │ +
81 void *GetFVarPatchArrayBuffer(int fvarChannel) const {
│ │ │ │ +
82 return _fvarPatchArrays[fvarChannel];
│ │ │ │ +
83 }
│ │ │ │ +
│ │ │ │ +
84
│ │ │ │ +
│ │ │ │ +
86 void *GetFVarPatchIndexBuffer(int fvarChannel = 0) const {
│ │ │ │ +
87 return _fvarIndexBuffers[fvarChannel];
│ │ │ │ +
88 }
│ │ │ │ +
│ │ │ │ +
89
│ │ │ │ +
│ │ │ │ +
91 void *GetFVarPatchParamBuffer(int fvarChannel = 0) const {
│ │ │ │ +
92 return _fvarParamBuffers[fvarChannel];
│ │ │ │ +
93 }
│ │ │ │ +
│ │ │ │ +
94
│ │ │ │ +
95protected:
│ │ │ │ + │ │ │ │ +
97
│ │ │ │ +
98 bool allocate(Far::PatchTable const *patchTable);
│ │ │ │ +
99
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
103
│ │ │ │ + │ │ │ │ + │ │ │ │ +
106
│ │ │ │ +
107 std::vector<void *> _fvarPatchArrays;
│ │ │ │ +
108 std::vector<void *> _fvarIndexBuffers;
│ │ │ │ +
109 std::vector<void *> _fvarParamBuffers;
│ │ │ │ +
110};
│ │ │ │ +
│ │ │ │ +
111
│ │ │ │ +
112} // end namespace Osd
│ │ │ │ +
113
│ │ │ │ +
114} // end namespace OPENSUBDIV_VERSION
│ │ │ │ +
115using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
116
│ │ │ │ +
117} // end namespace OpenSubdiv
│ │ │ │ +
118
│ │ │ │ +
119#endif // OPENSUBDIV3_OSD_CUDA_PATCH_TABLE_H
│ │ │ │ │ │ │ │ -
Stencil table class wrapping the template for compatibility.
│ │ │ │ -
Limit stencil table class wrapping the template for compatibility.
│ │ │ │ -
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
CudaStencilTable(Far::LimitStencilTable const *limitStencilTable)
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
static CudaStencilTable * Create(Far::LimitStencilTable const *limitStencilTable, void *deviceContext=NULL)
│ │ │ │ - │ │ │ │ - │ │ │ │ -
CudaStencilTable(Far::StencilTable const *stencilTable)
│ │ │ │ -
static CudaStencilTable * Create(Far::StencilTable const *stencilTable, void *deviceContext=NULL)
│ │ │ │ - │ │ │ │ -
static bool EvalPatches(const float *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, int numPatchCoords, const PatchCoord *patchCoords, const PatchArray *patchArrays, const int *patchIndices, const PatchParam *patchParams)
Static limit eval function. It takes an array of PatchCoord and evaluate limit values on given PatchT...
│ │ │ │ -
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, CudaEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ -
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, CudaEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function with derivatives. This function has a same signature as other device kern...
│ │ │ │ -
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 CudaEvaluator *instance=NULL, void *deviceContext=NULL)
Generic static eval stencils function with derivatives. This function has a same signature as other d...
│ │ │ │ -
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 cuda buffers for input and output.
│ │ │ │ -
static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, CudaEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ -
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 CudaEvaluator *instance=NULL, void *deviceContext=NULL)
Generic static eval stencils function with derivatives. This function has a same signature as other d...
│ │ │ │ -
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 *patchIndices, PatchParam const *patchParams)
Static limit eval function. It takes an array of PatchCoord and evaluate limit values on given PatchT...
│ │ │ │ -
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, CudaEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ -
static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, const void *instance=NULL, void *deviceContext=NULL)
Generic static compute function. This function has a same signature as other device kernels have so t...
│ │ │ │ -
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 cuda pointers for input and output.
│ │ │ │ -
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 cuda pointers for input and output.
│ │ │ │ -
static void Synchronize(void *deviceContext=NULL)
│ │ │ │ -
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 *patchIndices, PatchParam const *patchParams)
Static limit eval function. It takes an array of PatchCoord and evaluate limit values on given PatchT...
│ │ │ │ -
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, CudaEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ -
static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, CudaEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ -
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, CudaEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ -
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, CudaEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function with derivatives. This function has a same signature as other device kern...
│ │ │ │ -
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, CudaEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ -
Coordinates set on a patch table.
Definition types.h:42
│ │ │ │ - │ │ │ │ - │ │ │ │ +
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ + │ │ │ │ +
void * GetFVarPatchArrayBuffer(int fvarChannel) const
Returns the cuda memory of the array of Osd::PatchArray buffer.
│ │ │ │ + │ │ │ │ +
static CudaPatchTable * Create(Far::PatchTable const *patchTable, void *deviceContext=NULL)
Creator. Returns NULL if error.
│ │ │ │ + │ │ │ │ +
void * GetVaryingPatchIndexBuffer() const
Returns the cuda memory of the array of varying control vertices.
│ │ │ │ + │ │ │ │ +
void * GetVaryingPatchArrayBuffer() const
Returns the cuda memory of the array of Osd::PatchArray buffer.
│ │ │ │ + │ │ │ │ + │ │ │ │ +
void * GetPatchArrayBuffer() const
Returns the cuda memory of the array of Osd::PatchArray buffer.
│ │ │ │ + │ │ │ │ +
bool allocate(Far::PatchTable const *patchTable)
│ │ │ │ +
void * GetPatchIndexBuffer() const
Returns the cuda memory of the patch control vertices.
│ │ │ │ +
int GetNumFVarChannels() const
Returns the number of face-varying channels buffers.
│ │ │ │ + │ │ │ │ +
void * GetPatchParamBuffer() const
Returns the cuda memory of the array of Osd::PatchParam buffer.
│ │ │ │ +
void * GetFVarPatchIndexBuffer(int fvarChannel=0) const
Returns the cuda memory of the array of face-varying control vertices.
│ │ │ │ +
void * GetFVarPatchParamBuffer(int fvarChannel=0) const
Returns the cuda memory of the array of face-varying param.
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,12 +1,12 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -cudaEvaluator.h │ │ │ │ │ +cudaPatchTable.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ 2// Copyright 2015 Pixar │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ @@ -24,737 +24,167 @@ │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ 24 │ │ │ │ │ -25#ifndef OPENSUBDIV3_OSD_CUDA_EVALUATOR_H │ │ │ │ │ -26#define OPENSUBDIV3_OSD_CUDA_EVALUATOR_H │ │ │ │ │ +25#ifndef OPENSUBDIV3_OSD_CUDA_PATCH_TABLE_H │ │ │ │ │ +26#define OPENSUBDIV3_OSD_CUDA_PATCH_TABLE_H │ │ │ │ │ 27 │ │ │ │ │ 28#include "../version.h" │ │ │ │ │ 29 │ │ │ │ │ -30#include │ │ │ │ │ -31#include "../osd/bufferDescriptor.h" │ │ │ │ │ -32#include "../osd/types.h" │ │ │ │ │ -33 │ │ │ │ │ -34namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ -35namespace OPENSUBDIV_VERSION { │ │ │ │ │ -36 │ │ │ │ │ -37namespace Far { │ │ │ │ │ -38 class PatchTable; │ │ │ │ │ -39 class StencilTable; │ │ │ │ │ -40 class LimitStencilTable; │ │ │ │ │ -41} │ │ │ │ │ -42 │ │ │ │ │ -43namespace Osd { │ │ │ │ │ -44 │ │ │ │ │ -_5_2class _C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e { │ │ │ │ │ -53public: │ │ │ │ │ -_5_4 static _C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e *_C_r_e_a_t_e(_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e const *stencilTable, │ │ │ │ │ -55 void *deviceContext = NULL) { │ │ │ │ │ -56 (void)deviceContext; // unused │ │ │ │ │ -57 return new _C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e(stencilTable); │ │ │ │ │ -58 } │ │ │ │ │ -_5_9 static _C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e *_C_r_e_a_t_e(_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e const │ │ │ │ │ -*limitStencilTable, │ │ │ │ │ -60 void *deviceContext = NULL) { │ │ │ │ │ -61 (void)deviceContext; // unused │ │ │ │ │ -62 return new _C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e(limitStencilTable); │ │ │ │ │ -63 } │ │ │ │ │ +30#include "../osd/nonCopyable.h" │ │ │ │ │ +31#include "../osd/types.h" │ │ │ │ │ +32 │ │ │ │ │ +33#include │ │ │ │ │ +34 │ │ │ │ │ +35namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ +36namespace OPENSUBDIV_VERSION { │ │ │ │ │ +37 │ │ │ │ │ +38namespace Far{ │ │ │ │ │ +39 class PatchTable; │ │ │ │ │ +40}; │ │ │ │ │ +41 │ │ │ │ │ +42namespace Osd { │ │ │ │ │ +43 │ │ │ │ │ +_5_1class _C_u_d_a_P_a_t_c_h_T_a_b_l_e : private NonCopyable { │ │ │ │ │ +52public: │ │ │ │ │ +_5_4 static _C_u_d_a_P_a_t_c_h_T_a_b_l_e *_C_r_e_a_t_e(_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e const *patchTable, │ │ │ │ │ +55 void *deviceContext = NULL); │ │ │ │ │ +_5_7 _~_C_u_d_a_P_a_t_c_h_T_a_b_l_e(); │ │ │ │ │ +58 │ │ │ │ │ +_6_0 void *_G_e_t_P_a_t_c_h_A_r_r_a_y_B_u_f_f_e_r() const { return ___p_a_t_c_h_A_r_r_a_y_s; } │ │ │ │ │ +61 │ │ │ │ │ +_6_3 void *_G_e_t_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r() const { return ___i_n_d_e_x_B_u_f_f_e_r; } │ │ │ │ │ 64 │ │ │ │ │ -_6_5 explicit _C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e(_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e const *stencilTable); │ │ │ │ │ -_6_6 explicit _C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e(_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e const *limitStencilTable); │ │ │ │ │ -_6_7 _~_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e(); │ │ │ │ │ -68 │ │ │ │ │ -69 // interfaces needed for CudaCompute │ │ │ │ │ -_7_0 void *_G_e_t_S_i_z_e_s_B_u_f_f_e_r() const { return _sizes; } │ │ │ │ │ -_7_1 void *_G_e_t_O_f_f_s_e_t_s_B_u_f_f_e_r() const { return _offsets; } │ │ │ │ │ -_7_2 void *_G_e_t_I_n_d_i_c_e_s_B_u_f_f_e_r() const { return _indices; } │ │ │ │ │ -_7_3 void *_G_e_t_W_e_i_g_h_t_s_B_u_f_f_e_r() const { return _weights; } │ │ │ │ │ -_7_4 void *_G_e_t_D_u_W_e_i_g_h_t_s_B_u_f_f_e_r() const { return _duWeights; } │ │ │ │ │ -_7_5 void *_G_e_t_D_v_W_e_i_g_h_t_s_B_u_f_f_e_r() const { return _dvWeights; } │ │ │ │ │ -_7_6 void *_G_e_t_D_u_u_W_e_i_g_h_t_s_B_u_f_f_e_r() const { return _duuWeights; } │ │ │ │ │ -_7_7 void *_G_e_t_D_u_v_W_e_i_g_h_t_s_B_u_f_f_e_r() const { return _duvWeights; } │ │ │ │ │ -_7_8 void *_G_e_t_D_v_v_W_e_i_g_h_t_s_B_u_f_f_e_r() const { return _dvvWeights; } │ │ │ │ │ -_7_9 int _G_e_t_N_u_m_S_t_e_n_c_i_l_s() const { return _numStencils; } │ │ │ │ │ -80 │ │ │ │ │ -81private: │ │ │ │ │ -82 void * _sizes, │ │ │ │ │ -83 * _offsets, │ │ │ │ │ -84 * _indices, │ │ │ │ │ -85 * _weights, │ │ │ │ │ -86 * _duWeights, │ │ │ │ │ -87 * _dvWeights, │ │ │ │ │ -88 * _duuWeights, │ │ │ │ │ -89 * _duvWeights, │ │ │ │ │ -90 * _dvvWeights; │ │ │ │ │ -91 int _numStencils; │ │ │ │ │ -92}; │ │ │ │ │ -93 │ │ │ │ │ -_9_4class _C_u_d_a_E_v_a_l_u_a_t_o_r { │ │ │ │ │ -95public: │ │ │ │ │ -101 │ │ │ │ │ -125 template │ │ │ │ │ -_1_2_6 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ -127 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -128 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -129 STENCIL_TABLE const *stencilTable, │ │ │ │ │ -130 const void *instance = NULL, │ │ │ │ │ -131 void * deviceContext = NULL) { │ │ │ │ │ -132 │ │ │ │ │ -133 (void)instance; // unused │ │ │ │ │ -134 (void)deviceContext; // unused │ │ │ │ │ -135 return _E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer->BindCudaBuffer(), srcDesc, │ │ │ │ │ -136 dstBuffer->BindCudaBuffer(), dstDesc, │ │ │ │ │ -137 (int const *)stencilTable->GetSizesBuffer(), │ │ │ │ │ -138 (int const *)stencilTable->GetOffsetsBuffer(), │ │ │ │ │ -139 (int const *)stencilTable->GetIndicesBuffer(), │ │ │ │ │ -140 (float const *)stencilTable->GetWeightsBuffer(), │ │ │ │ │ -141 /*start = */ 0, │ │ │ │ │ -142 /*end = */ stencilTable->GetNumStencils()); │ │ │ │ │ -143 } │ │ │ │ │ -144 │ │ │ │ │ -_1_7_1 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ -172 const float *src, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -173 float *dst, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -174 const int * sizes, │ │ │ │ │ -175 const int * offsets, │ │ │ │ │ -176 const int * indices, │ │ │ │ │ -177 const float * weights, │ │ │ │ │ -178 int start, int end); │ │ │ │ │ -179 │ │ │ │ │ -217 template │ │ │ │ │ -_2_1_8 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ -219 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -220 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -221 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -222 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -223 STENCIL_TABLE const *stencilTable, │ │ │ │ │ -224 const _C_u_d_a_E_v_a_l_u_a_t_o_r *instance = NULL, │ │ │ │ │ -225 void * deviceContext = NULL) { │ │ │ │ │ -226 │ │ │ │ │ -227 (void)instance; // unused │ │ │ │ │ -228 (void)deviceContext; // unused │ │ │ │ │ -229 │ │ │ │ │ -230 return _E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer->BindCudaBuffer(), srcDesc, │ │ │ │ │ -231 dstBuffer->BindCudaBuffer(), dstDesc, │ │ │ │ │ -232 duBuffer->BindCudaBuffer(), duDesc, │ │ │ │ │ -233 dvBuffer->BindCudaBuffer(), dvDesc, │ │ │ │ │ -234 (int const *)stencilTable->GetSizesBuffer(), │ │ │ │ │ -235 (int const *)stencilTable->GetOffsetsBuffer(), │ │ │ │ │ -236 (int const *)stencilTable->GetIndicesBuffer(), │ │ │ │ │ -237 (float const *)stencilTable->GetWeightsBuffer(), │ │ │ │ │ -238 (float const *)stencilTable->GetDuWeightsBuffer(), │ │ │ │ │ -239 (float const *)stencilTable->GetDvWeightsBuffer(), │ │ │ │ │ -240 /*start = */ 0, │ │ │ │ │ -241 /*end = */ stencilTable->GetNumStencils()); │ │ │ │ │ -242 } │ │ │ │ │ -243 │ │ │ │ │ -_2_8_4 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ -285 const float *src, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -286 float *dst, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -287 float *du, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -288 float *dv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -289 const int * sizes, │ │ │ │ │ -290 const int * offsets, │ │ │ │ │ -291 const int * indices, │ │ │ │ │ -292 const float * weights, │ │ │ │ │ -293 const float * duWeights, │ │ │ │ │ -294 const float * dvWeights, │ │ │ │ │ -295 int start, int end); │ │ │ │ │ -296 │ │ │ │ │ -352 template │ │ │ │ │ -_3_5_3 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ -354 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -355 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -356 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -357 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -358 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -359 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -360 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -361 STENCIL_TABLE const *stencilTable, │ │ │ │ │ -362 const _C_u_d_a_E_v_a_l_u_a_t_o_r *instance = NULL, │ │ │ │ │ -363 void * deviceContext = NULL) { │ │ │ │ │ -364 │ │ │ │ │ -365 (void)instance; // unused │ │ │ │ │ -366 (void)deviceContext; // unused │ │ │ │ │ -367 │ │ │ │ │ -368 return _E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer->BindCudaBuffer(), srcDesc, │ │ │ │ │ -369 dstBuffer->BindCudaBuffer(), dstDesc, │ │ │ │ │ -370 duBuffer->BindCudaBuffer(), duDesc, │ │ │ │ │ -371 dvBuffer->BindCudaBuffer(), dvDesc, │ │ │ │ │ -372 duuBuffer->BindCudaBuffer(), duuDesc, │ │ │ │ │ -373 duvBuffer->BindCudaBuffer(), duvDesc, │ │ │ │ │ -374 dvvBuffer->BindCudaBuffer(), dvvDesc, │ │ │ │ │ -375 (int const *)stencilTable->GetSizesBuffer(), │ │ │ │ │ -376 (int const *)stencilTable->GetOffsetsBuffer(), │ │ │ │ │ -377 (int const *)stencilTable->GetIndicesBuffer(), │ │ │ │ │ -378 (float const *)stencilTable->GetWeightsBuffer(), │ │ │ │ │ -379 (float const *)stencilTable->GetDuWeightsBuffer(), │ │ │ │ │ -380 (float const *)stencilTable->GetDvWeightsBuffer(), │ │ │ │ │ -381 (float const *)stencilTable->GetDuuWeightsBuffer(), │ │ │ │ │ -382 (float const *)stencilTable->GetDuvWeightsBuffer(), │ │ │ │ │ -383 (float const *)stencilTable->GetDvvWeightsBuffer(), │ │ │ │ │ -384 /*start = */ 0, │ │ │ │ │ -385 /*end = */ stencilTable->GetNumStencils()); │ │ │ │ │ -386 } │ │ │ │ │ -387 │ │ │ │ │ -_4_4_9 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ -450 const float *src, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -451 float *dst, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -452 float *du, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -453 float *dv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -454 float *duu, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -455 float *duv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -456 float *dvv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -457 const int * sizes, │ │ │ │ │ -458 const int * offsets, │ │ │ │ │ -459 const int * indices, │ │ │ │ │ -460 const float * weights, │ │ │ │ │ -461 const float * duWeights, │ │ │ │ │ -462 const float * dvWeights, │ │ │ │ │ -463 const float * duuWeights, │ │ │ │ │ -464 const float * duvWeights, │ │ │ │ │ -465 const float * dvvWeights, │ │ │ │ │ -466 int start, int end); │ │ │ │ │ -467 │ │ │ │ │ -473 │ │ │ │ │ -502 template │ │ │ │ │ -_5_0_4 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ -505 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -506 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -507 int numPatchCoords, │ │ │ │ │ -508 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -509 PATCH_TABLE *patchTable, │ │ │ │ │ -510 _C_u_d_a_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -511 void * deviceContext = NULL) { │ │ │ │ │ -512 │ │ │ │ │ -513 (void)instance; // unused │ │ │ │ │ -514 (void)deviceContext; // unused │ │ │ │ │ -515 │ │ │ │ │ -516 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCudaBuffer(), srcDesc, │ │ │ │ │ -517 dstBuffer->BindCudaBuffer(), dstDesc, │ │ │ │ │ -518 numPatchCoords, │ │ │ │ │ -519 (const _P_a_t_c_h_C_o_o_r_d *)patchCoords->BindCudaBuffer(), │ │ │ │ │ -520 (const _P_a_t_c_h_A_r_r_a_y *)patchTable->GetPatchArrayBuffer(), │ │ │ │ │ -521 (const int *)patchTable->GetPatchIndexBuffer(), │ │ │ │ │ -522 (const _P_a_t_c_h_P_a_r_a_m *)patchTable->GetPatchParamBuffer()); │ │ │ │ │ -523 } │ │ │ │ │ -524 │ │ │ │ │ -563 template │ │ │ │ │ -_5_6_5 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ -566 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -567 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -568 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -569 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -570 int numPatchCoords, │ │ │ │ │ -571 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -572 PATCH_TABLE *patchTable, │ │ │ │ │ -573 _C_u_d_a_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -574 void * deviceContext = NULL) { │ │ │ │ │ -575 │ │ │ │ │ -576 (void)instance; // unused │ │ │ │ │ -577 (void)deviceContext; // unused │ │ │ │ │ -578 │ │ │ │ │ -579 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCudaBuffer(), srcDesc, │ │ │ │ │ -580 dstBuffer->BindCudaBuffer(), dstDesc, │ │ │ │ │ -581 duBuffer->BindCudaBuffer(), duDesc, │ │ │ │ │ -582 dvBuffer->BindCudaBuffer(), dvDesc, │ │ │ │ │ -583 numPatchCoords, │ │ │ │ │ -584 (const _P_a_t_c_h_C_o_o_r_d *)patchCoords->BindCudaBuffer(), │ │ │ │ │ -585 (const _P_a_t_c_h_A_r_r_a_y *)patchTable->GetPatchArrayBuffer(), │ │ │ │ │ -586 (const int *)patchTable->GetPatchIndexBuffer(), │ │ │ │ │ -587 (const _P_a_t_c_h_P_a_r_a_m *)patchTable->GetPatchParamBuffer()); │ │ │ │ │ -588 } │ │ │ │ │ -589 │ │ │ │ │ -646 template │ │ │ │ │ -_6_4_8 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ -649 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -650 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -651 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -652 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -653 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -654 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -655 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -656 int numPatchCoords, │ │ │ │ │ -657 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -658 PATCH_TABLE *patchTable, │ │ │ │ │ -659 _C_u_d_a_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -660 void * deviceContext = NULL) { │ │ │ │ │ -661 │ │ │ │ │ -662 (void)instance; // unused │ │ │ │ │ -663 (void)deviceContext; // unused │ │ │ │ │ -664 │ │ │ │ │ -665 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCudaBuffer(), srcDesc, │ │ │ │ │ -666 dstBuffer->BindCudaBuffer(), dstDesc, │ │ │ │ │ -667 duBuffer->BindCudaBuffer(), duDesc, │ │ │ │ │ -668 dvBuffer->BindCudaBuffer(), dvDesc, │ │ │ │ │ -669 duuBuffer->BindCudaBuffer(), duuDesc, │ │ │ │ │ -670 duvBuffer->BindCudaBuffer(), duvDesc, │ │ │ │ │ -671 dvvBuffer->BindCudaBuffer(), dvvDesc, │ │ │ │ │ -672 numPatchCoords, │ │ │ │ │ -673 (const _P_a_t_c_h_C_o_o_r_d *)patchCoords->BindCudaBuffer(), │ │ │ │ │ -674 (const _P_a_t_c_h_A_r_r_a_y *)patchTable->GetPatchArrayBuffer(), │ │ │ │ │ -675 (const int *)patchTable->GetPatchIndexBuffer(), │ │ │ │ │ -676 (const _P_a_t_c_h_P_a_r_a_m *)patchTable->GetPatchParamBuffer()); │ │ │ │ │ -677 } │ │ │ │ │ -678 │ │ │ │ │ -_7_0_6 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ -707 const float *src, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -708 float *dst, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -709 int numPatchCoords, │ │ │ │ │ -710 const _P_a_t_c_h_C_o_o_r_d *patchCoords, │ │ │ │ │ -711 const _P_a_t_c_h_A_r_r_a_y *patchArrays, │ │ │ │ │ -712 const int *patchIndices, │ │ │ │ │ -713 const _P_a_t_c_h_P_a_r_a_m *patchParams); │ │ │ │ │ -714 │ │ │ │ │ -_7_5_2 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ -753 const float *src, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -754 float *dst, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -755 float *du, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -756 float *dv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -757 int numPatchCoords, │ │ │ │ │ -758 _P_a_t_c_h_C_o_o_r_d const *patchCoords, │ │ │ │ │ -759 _P_a_t_c_h_A_r_r_a_y const *patchArrays, │ │ │ │ │ -760 const int *patchIndices, │ │ │ │ │ -761 _P_a_t_c_h_P_a_r_a_m const *patchParams); │ │ │ │ │ -762 │ │ │ │ │ -_8_1_5 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ -816 const float *src, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -817 float *dst, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -818 float *du, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -819 float *dv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -820 float *duu, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -821 float *duv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -822 float *dvv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -823 int numPatchCoords, │ │ │ │ │ -824 _P_a_t_c_h_C_o_o_r_d const *patchCoords, │ │ │ │ │ -825 _P_a_t_c_h_A_r_r_a_y const *patchArrays, │ │ │ │ │ -826 const int *patchIndices, │ │ │ │ │ -827 _P_a_t_c_h_P_a_r_a_m const *patchParams); │ │ │ │ │ -828 │ │ │ │ │ -857 template │ │ │ │ │ -_8_5_9 static bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -860 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -861 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -862 int numPatchCoords, │ │ │ │ │ -863 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -864 PATCH_TABLE *patchTable, │ │ │ │ │ -865 _C_u_d_a_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -866 void * deviceContext = NULL) { │ │ │ │ │ -867 │ │ │ │ │ -868 (void)instance; // unused │ │ │ │ │ -869 (void)deviceContext; // unused │ │ │ │ │ -870 │ │ │ │ │ -871 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCudaBuffer(), srcDesc, │ │ │ │ │ -872 dstBuffer->BindCudaBuffer(), dstDesc, │ │ │ │ │ -873 numPatchCoords, │ │ │ │ │ -874 (const _P_a_t_c_h_C_o_o_r_d *)patchCoords->BindCudaBuffer(), │ │ │ │ │ -875 (const _P_a_t_c_h_A_r_r_a_y *)patchTable->GetVaryingPatchArrayBuffer(), │ │ │ │ │ -876 (const int *)patchTable->GetVaryingPatchIndexBuffer(), │ │ │ │ │ -877 (const _P_a_t_c_h_P_a_r_a_m *)patchTable->GetPatchParamBuffer()); │ │ │ │ │ -878 } │ │ │ │ │ -879 │ │ │ │ │ -920 template │ │ │ │ │ -_9_2_2 static bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -923 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -924 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -925 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -926 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -927 int numPatchCoords, │ │ │ │ │ -928 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -929 PATCH_TABLE *patchTable, │ │ │ │ │ -930 _C_u_d_a_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -931 void * deviceContext = NULL) { │ │ │ │ │ -932 │ │ │ │ │ -933 (void)instance; // unused │ │ │ │ │ -934 (void)deviceContext; // unused │ │ │ │ │ -935 │ │ │ │ │ -936 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCudaBuffer(), srcDesc, │ │ │ │ │ -937 dstBuffer->BindCudaBuffer(), dstDesc, │ │ │ │ │ -938 duBuffer->BindCudaBuffer(), duDesc, │ │ │ │ │ -939 dvBuffer->BindCudaBuffer(), dvDesc, │ │ │ │ │ -940 numPatchCoords, │ │ │ │ │ -941 (const _P_a_t_c_h_C_o_o_r_d *)patchCoords->BindCudaBuffer(), │ │ │ │ │ -942 (const _P_a_t_c_h_A_r_r_a_y *)patchTable->GetVaryingPatchArrayBuffer(), │ │ │ │ │ -943 (const int *)patchTable->GetVaryingPatchIndexBuffer(), │ │ │ │ │ -944 (const _P_a_t_c_h_P_a_r_a_m *)patchTable->GetPatchParamBuffer()); │ │ │ │ │ -945 } │ │ │ │ │ -946 │ │ │ │ │ -1005 template │ │ │ │ │ -_1_0_0_7 static bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1008 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1009 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1010 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1011 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1012 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -1013 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -1014 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -1015 int numPatchCoords, │ │ │ │ │ -1016 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1017 PATCH_TABLE *patchTable, │ │ │ │ │ -1018 _C_u_d_a_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -1019 void * deviceContext = NULL) { │ │ │ │ │ -1020 │ │ │ │ │ -1021 (void)instance; // unused │ │ │ │ │ -1022 (void)deviceContext; // unused │ │ │ │ │ -1023 │ │ │ │ │ -1024 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCudaBuffer(), srcDesc, │ │ │ │ │ -1025 dstBuffer->BindCudaBuffer(), dstDesc, │ │ │ │ │ -1026 duBuffer->BindCudaBuffer(), duDesc, │ │ │ │ │ -1027 dvBuffer->BindCudaBuffer(), dvDesc, │ │ │ │ │ -1028 duuBuffer->BindCudaBuffer(), duuDesc, │ │ │ │ │ -1029 duvBuffer->BindCudaBuffer(), duvDesc, │ │ │ │ │ -1030 dvvBuffer->BindCudaBuffer(), dvvDesc, │ │ │ │ │ -1031 numPatchCoords, │ │ │ │ │ -1032 (const _P_a_t_c_h_C_o_o_r_d *)patchCoords->BindCudaBuffer(), │ │ │ │ │ -1033 (const _P_a_t_c_h_A_r_r_a_y *)patchTable->GetVaryingPatchArrayBuffer(), │ │ │ │ │ -1034 (const int *)patchTable->GetVaryingPatchIndexBuffer(), │ │ │ │ │ -1035 (const _P_a_t_c_h_P_a_r_a_m *)patchTable->GetPatchParamBuffer()); │ │ │ │ │ -1036 } │ │ │ │ │ -1037 │ │ │ │ │ -1068 template │ │ │ │ │ -_1_0_7_0 static bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1071 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1072 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1073 int numPatchCoords, │ │ │ │ │ -1074 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1075 PATCH_TABLE *patchTable, │ │ │ │ │ -1076 int fvarChannel, │ │ │ │ │ -1077 _C_u_d_a_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -1078 void * deviceContext = NULL) { │ │ │ │ │ -1079 │ │ │ │ │ -1080 (void)instance; // unused │ │ │ │ │ -1081 (void)deviceContext; // unused │ │ │ │ │ -1082 │ │ │ │ │ -1083 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCudaBuffer(), srcDesc, │ │ │ │ │ -1084 dstBuffer->BindCudaBuffer(), dstDesc, │ │ │ │ │ -1085 numPatchCoords, │ │ │ │ │ -1086 (const _P_a_t_c_h_C_o_o_r_d *)patchCoords->BindCudaBuffer(), │ │ │ │ │ -1087 (const _P_a_t_c_h_A_r_r_a_y *)patchTable->GetFVarPatchArrayBuffer(fvarChannel), │ │ │ │ │ -1088 (const int *)patchTable->GetFVarPatchIndexBuffer(fvarChannel), │ │ │ │ │ -1089 (const _P_a_t_c_h_P_a_r_a_m *)patchTable->GetFVarPatchParamBuffer(fvarChannel)); │ │ │ │ │ -1090 } │ │ │ │ │ -1091 │ │ │ │ │ -1134 template │ │ │ │ │ -_1_1_3_6 static bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1137 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1138 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1139 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1140 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1141 int numPatchCoords, │ │ │ │ │ -1142 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1143 PATCH_TABLE *patchTable, │ │ │ │ │ -1144 int fvarChannel, │ │ │ │ │ -1145 _C_u_d_a_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -1146 void * deviceContext = NULL) { │ │ │ │ │ -1147 │ │ │ │ │ -1148 (void)instance; // unused │ │ │ │ │ -1149 (void)deviceContext; // unused │ │ │ │ │ -1150 │ │ │ │ │ -1151 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCudaBuffer(), srcDesc, │ │ │ │ │ -1152 dstBuffer->BindCudaBuffer(), dstDesc, │ │ │ │ │ -1153 duBuffer->BindCudaBuffer(), duDesc, │ │ │ │ │ -1154 dvBuffer->BindCudaBuffer(), dvDesc, │ │ │ │ │ -1155 numPatchCoords, │ │ │ │ │ -1156 (const _P_a_t_c_h_C_o_o_r_d *)patchCoords->BindCudaBuffer(), │ │ │ │ │ -1157 (const _P_a_t_c_h_A_r_r_a_y *)patchTable->GetFVarPatchArrayBuffer(fvarChannel), │ │ │ │ │ -1158 (const int *)patchTable->GetFVarPatchIndexBuffer(fvarChannel), │ │ │ │ │ -1159 (const _P_a_t_c_h_P_a_r_a_m *)patchTable->GetFVarPatchParamBuffer(fvarChannel)); │ │ │ │ │ -1160 } │ │ │ │ │ -1161 │ │ │ │ │ -1222 template │ │ │ │ │ -_1_2_2_4 static bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1225 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1226 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1227 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1228 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1229 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -1230 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -1231 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -1232 int numPatchCoords, │ │ │ │ │ -1233 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1234 PATCH_TABLE *patchTable, │ │ │ │ │ -1235 int fvarChannel, │ │ │ │ │ -1236 _C_u_d_a_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -1237 void * deviceContext = NULL) { │ │ │ │ │ -1238 │ │ │ │ │ -1239 (void)instance; // unused │ │ │ │ │ -1240 (void)deviceContext; // unused │ │ │ │ │ -1241 │ │ │ │ │ -1242 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCudaBuffer(), srcDesc, │ │ │ │ │ -1243 dstBuffer->BindCudaBuffer(), dstDesc, │ │ │ │ │ -1244 duBuffer->BindCudaBuffer(), duDesc, │ │ │ │ │ -1245 dvBuffer->BindCudaBuffer(), dvDesc, │ │ │ │ │ -1246 duuBuffer->BindCudaBuffer(), duuDesc, │ │ │ │ │ -1247 duvBuffer->BindCudaBuffer(), duvDesc, │ │ │ │ │ -1248 dvvBuffer->BindCudaBuffer(), dvvDesc, │ │ │ │ │ -1249 numPatchCoords, │ │ │ │ │ -1250 (const _P_a_t_c_h_C_o_o_r_d *)patchCoords->BindCudaBuffer(), │ │ │ │ │ -1251 (const _P_a_t_c_h_A_r_r_a_y *)patchTable->GetFVarPatchArrayBuffer(fvarChannel), │ │ │ │ │ -1252 (const int *)patchTable->GetFVarPatchIndexBuffer(fvarChannel), │ │ │ │ │ -1253 (const _P_a_t_c_h_P_a_r_a_m *)patchTable->GetFVarPatchParamBuffer(fvarChannel)); │ │ │ │ │ -1254 } │ │ │ │ │ -1255 │ │ │ │ │ -_1_2_6_1 static void _S_y_n_c_h_r_o_n_i_z_e(void *deviceContext = NULL); │ │ │ │ │ -1262}; │ │ │ │ │ -1263 │ │ │ │ │ -1264 │ │ │ │ │ -1265} // end namespace Osd │ │ │ │ │ -1266 │ │ │ │ │ -1267} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ -1268using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -1269 │ │ │ │ │ -1270} // end namespace OpenSubdiv │ │ │ │ │ -1271 │ │ │ │ │ -1272 │ │ │ │ │ -1273#endif // OPENSUBDIV3_OSD_CUDA_EVALUATOR_H │ │ │ │ │ +_6_6 void *_G_e_t_P_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r() const { return ___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r; } │ │ │ │ │ +67 │ │ │ │ │ +_6_9 void *_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_B_u_f_f_e_r() const { │ │ │ │ │ +70 return ___v_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_s; │ │ │ │ │ +71 } │ │ │ │ │ +_7_3 void *_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r() const { │ │ │ │ │ +74 return ___v_a_r_y_i_n_g_I_n_d_e_x_B_u_f_f_e_r; │ │ │ │ │ +75 } │ │ │ │ │ +76 │ │ │ │ │ +_7_8 int _G_e_t_N_u_m_F_V_a_r_C_h_a_n_n_e_l_s() const { return (int)___f_v_a_r_P_a_t_c_h_A_r_r_a_y_s.size(); } │ │ │ │ │ +79 │ │ │ │ │ +_8_1 void *_G_e_t_F_V_a_r_P_a_t_c_h_A_r_r_a_y_B_u_f_f_e_r(int fvarChannel) const { │ │ │ │ │ +82 return ___f_v_a_r_P_a_t_c_h_A_r_r_a_y_s[fvarChannel]; │ │ │ │ │ +83 } │ │ │ │ │ +84 │ │ │ │ │ +_8_6 void *_G_e_t_F_V_a_r_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r(int fvarChannel = 0) const { │ │ │ │ │ +87 return ___f_v_a_r_I_n_d_e_x_B_u_f_f_e_r_s[fvarChannel]; │ │ │ │ │ +88 } │ │ │ │ │ +89 │ │ │ │ │ +_9_1 void *_G_e_t_F_V_a_r_P_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r(int fvarChannel = 0) const { │ │ │ │ │ +92 return ___f_v_a_r_P_a_r_a_m_B_u_f_f_e_r_s[fvarChannel]; │ │ │ │ │ +93 } │ │ │ │ │ +94 │ │ │ │ │ +95protected: │ │ │ │ │ +_9_6 _C_u_d_a_P_a_t_c_h_T_a_b_l_e(); │ │ │ │ │ +97 │ │ │ │ │ +_9_8 bool _a_l_l_o_c_a_t_e(_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e const *patchTable); │ │ │ │ │ +99 │ │ │ │ │ +_1_0_0 void *___p_a_t_c_h_A_r_r_a_y_s; │ │ │ │ │ +_1_0_1 void *___i_n_d_e_x_B_u_f_f_e_r; │ │ │ │ │ +_1_0_2 void *___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r; │ │ │ │ │ +103 │ │ │ │ │ +_1_0_4 void *___v_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_s; │ │ │ │ │ +_1_0_5 void *___v_a_r_y_i_n_g_I_n_d_e_x_B_u_f_f_e_r; │ │ │ │ │ +106 │ │ │ │ │ +_1_0_7 std::vector ___f_v_a_r_P_a_t_c_h_A_r_r_a_y_s; │ │ │ │ │ +_1_0_8 std::vector ___f_v_a_r_I_n_d_e_x_B_u_f_f_e_r_s; │ │ │ │ │ +_1_0_9 std::vector ___f_v_a_r_P_a_r_a_m_B_u_f_f_e_r_s; │ │ │ │ │ +110}; │ │ │ │ │ +111 │ │ │ │ │ +112} // end namespace Osd │ │ │ │ │ +113 │ │ │ │ │ +114} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ +115using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +116 │ │ │ │ │ +117} // end namespace OpenSubdiv │ │ │ │ │ +118 │ │ │ │ │ +119#endif // OPENSUBDIV3_OSD_CUDA_PATCH_TABLE_H │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -Stencil table class wrapping the template for compatibility. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_7_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -Limit stencil table class wrapping the template for compatibility. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_8_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ -BufferDescriptor is a struct which describes buffer elements in interleaved │ │ │ │ │ -data buffers.... │ │ │ │ │ -DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_6_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -CUDA stencil table. │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_5_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_D_u_v_W_e_i_g_h_t_s_B_u_f_f_e_r │ │ │ │ │ -void * GetDuvWeightsBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_7_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_~_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -~CudaStencilTable() │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_D_u_W_e_i_g_h_t_s_B_u_f_f_e_r │ │ │ │ │ -void * GetDuWeightsBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_7_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_D_v_v_W_e_i_g_h_t_s_B_u_f_f_e_r │ │ │ │ │ -void * GetDvvWeightsBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_7_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_O_f_f_s_e_t_s_B_u_f_f_e_r │ │ │ │ │ -void * GetOffsetsBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_7_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -CudaStencilTable(Far::LimitStencilTable const *limitStencilTable) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_D_v_W_e_i_g_h_t_s_B_u_f_f_e_r │ │ │ │ │ -void * GetDvWeightsBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_7_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_N_u_m_S_t_e_n_c_i_l_s │ │ │ │ │ -int GetNumStencils() const │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_7_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_D_u_u_W_e_i_g_h_t_s_B_u_f_f_e_r │ │ │ │ │ -void * GetDuuWeightsBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_7_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_W_e_i_g_h_t_s_B_u_f_f_e_r │ │ │ │ │ -void * GetWeightsBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_7_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ -static CudaStencilTable * Create(Far::LimitStencilTable const │ │ │ │ │ -*limitStencilTable, void *deviceContext=NULL) │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_5_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_S_i_z_e_s_B_u_f_f_e_r │ │ │ │ │ -void * GetSizesBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_7_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_I_n_d_i_c_e_s_B_u_f_f_e_r │ │ │ │ │ -void * GetIndicesBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_7_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -CudaStencilTable(Far::StencilTable const *stencilTable) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_S_t_e_n_c_i_l_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ -static CudaStencilTable * Create(Far::StencilTable const *stencilTable, void │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +Container for arrays of parametric patches. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_5_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +CUDA patch table. │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_5_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_A_r_r_a_y_B_u_f_f_e_r │ │ │ │ │ +void * GetFVarPatchArrayBuffer(int fvarChannel) const │ │ │ │ │ +Returns the cuda memory of the array of Osd::PatchArray buffer. │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_8_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:___f_v_a_r_P_a_r_a_m_B_u_f_f_e_r_s │ │ │ │ │ +std::vector< void * > _fvarParamBuffers │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_1_0_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ +static CudaPatchTable * Create(Far::PatchTable const *patchTable, void │ │ │ │ │ *deviceContext=NULL) │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_5_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_9_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -static bool EvalPatches(const float *src, BufferDescriptor const &srcDesc, │ │ │ │ │ -float *dst, BufferDescriptor const &dstDesc, int numPatchCoords, const │ │ │ │ │ -PatchCoord *patchCoords, const PatchArray *patchArrays, const int │ │ │ │ │ -*patchIndices, const PatchParam *patchParams) │ │ │ │ │ -Static limit eval function. It takes an array of PatchCoord and evaluate limit │ │ │ │ │ -values on given PatchT... │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ -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, CudaEvaluator const *instance, void │ │ │ │ │ -*deviceContext=NULL) │ │ │ │ │ -Generic limit eval function. This function has a same signature as other device │ │ │ │ │ -kernels have so that ... │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_9_2_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -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, CudaEvaluator const *instance, void │ │ │ │ │ -*deviceContext=NULL) │ │ │ │ │ -Generic limit eval function with derivatives. This function has a same │ │ │ │ │ -signature as other device kern... │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_6_4_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -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 CudaEvaluator *instance=NULL, void *deviceContext=NULL) │ │ │ │ │ -Generic static eval stencils function with derivatives. This function has a │ │ │ │ │ -same signature as other d... │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_3_5_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -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 cuda buffers for input and │ │ │ │ │ -output. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ -static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const │ │ │ │ │ -&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int │ │ │ │ │ -numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, │ │ │ │ │ -CudaEvaluator const *instance, void *deviceContext=NULL) │ │ │ │ │ -Generic limit eval function. This function has a same signature as other device │ │ │ │ │ -kernels have so that ... │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_8_5_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -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 │ │ │ │ │ -CudaEvaluator *instance=NULL, void *deviceContext=NULL) │ │ │ │ │ -Generic static eval stencils function with derivatives. This function has a │ │ │ │ │ -same signature as other d... │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_2_1_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -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 *patchIndices, │ │ │ │ │ -PatchParam const *patchParams) │ │ │ │ │ -Static limit eval function. It takes an array of PatchCoord and evaluate limit │ │ │ │ │ -values on given PatchT... │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ -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, CudaEvaluator const │ │ │ │ │ -*instance, void *deviceContext=NULL) │ │ │ │ │ -Generic limit eval function. This function has a same signature as other device │ │ │ │ │ -kernels have so that ... │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_1_1_3_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const │ │ │ │ │ -&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE │ │ │ │ │ -const *stencilTable, const void *instance=NULL, void *deviceContext=NULL) │ │ │ │ │ -Generic static compute function. This function has a same signature as other │ │ │ │ │ -device kernels have so t... │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_1_2_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -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 cuda pointers │ │ │ │ │ -for input and output. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -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 cuda pointers │ │ │ │ │ -for input and output. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_S_y_n_c_h_r_o_n_i_z_e │ │ │ │ │ -static void Synchronize(void *deviceContext=NULL) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -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 │ │ │ │ │ -*patchIndices, PatchParam const *patchParams) │ │ │ │ │ -Static limit eval function. It takes an array of PatchCoord and evaluate limit │ │ │ │ │ -values on given PatchT... │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ -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, CudaEvaluator const │ │ │ │ │ -*instance, void *deviceContext=NULL) │ │ │ │ │ -Generic limit eval function. This function has a same signature as other device │ │ │ │ │ -kernels have so that ... │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_1_0_0_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, │ │ │ │ │ -DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, │ │ │ │ │ -PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, CudaEvaluator const │ │ │ │ │ -*instance, void *deviceContext=NULL) │ │ │ │ │ -Generic limit eval function. This function has a same signature as other device │ │ │ │ │ -kernels have so that ... │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_5_0_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ -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, │ │ │ │ │ -CudaEvaluator const *instance, void *deviceContext=NULL) │ │ │ │ │ -Generic limit eval function. This function has a same signature as other device │ │ │ │ │ -kernels have so that ... │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_1_2_2_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -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, CudaEvaluator const *instance, void *deviceContext=NULL) │ │ │ │ │ -Generic limit eval function with derivatives. This function has a same │ │ │ │ │ -signature as other device kern... │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_5_6_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ -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, CudaEvaluator const *instance, void *deviceContext=NULL) │ │ │ │ │ -Generic limit eval function. This function has a same signature as other device │ │ │ │ │ -kernels have so that ... │ │ │ │ │ -DDeeffiinniittiioonn _c_u_d_a_E_v_a_l_u_a_t_o_r_._h_:_1_0_7_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_C_o_o_r_d │ │ │ │ │ -Coordinates set on a patch table. │ │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e_s_._h_:_4_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_A_r_r_a_y │ │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e_s_._h_:_6_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_P_a_r_a_m │ │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e_s_._h_:_1_2_7 │ │ │ │ │ +Creator. Returns NULL if error. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:___v_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ +void * _varyingPatchArrays │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_1_0_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ +void * GetVaryingPatchIndexBuffer() const │ │ │ │ │ +Returns the cuda memory of the array of varying control vertices. │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_7_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:___f_v_a_r_I_n_d_e_x_B_u_f_f_e_r_s │ │ │ │ │ +std::vector< void * > _fvarIndexBuffers │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_1_0_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_B_u_f_f_e_r │ │ │ │ │ +void * GetVaryingPatchArrayBuffer() const │ │ │ │ │ +Returns the cuda memory of the array of Osd::PatchArray buffer. │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_6_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:___v_a_r_y_i_n_g_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ +void * _varyingIndexBuffer │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_1_0_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_~_C_u_d_a_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +~CudaPatchTable() │ │ │ │ │ +Destructor. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_A_r_r_a_y_B_u_f_f_e_r │ │ │ │ │ +void * GetPatchArrayBuffer() const │ │ │ │ │ +Returns the cuda memory of the array of Osd::PatchArray buffer. │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_6_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:___f_v_a_r_P_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ +std::vector< void * > _fvarPatchArrays │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_1_0_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_a_l_l_o_c_a_t_e │ │ │ │ │ +bool allocate(Far::PatchTable const *patchTable) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ +void * GetPatchIndexBuffer() const │ │ │ │ │ +Returns the cuda memory of the patch control vertices. │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_6_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_F_V_a_r_C_h_a_n_n_e_l_s │ │ │ │ │ +int GetNumFVarChannels() const │ │ │ │ │ +Returns the number of face-varying channels buffers. │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_7_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:___p_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ +void * _patchArrays │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_1_0_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r │ │ │ │ │ +void * GetPatchParamBuffer() const │ │ │ │ │ +Returns the cuda memory of the array of Osd::PatchParam buffer. │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_6_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ +void * GetFVarPatchIndexBuffer(int fvarChannel=0) const │ │ │ │ │ +Returns the cuda memory of the array of face-varying control vertices. │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_8_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r │ │ │ │ │ +void * GetFVarPatchParamBuffer(int fvarChannel=0) const │ │ │ │ │ +Returns the cuda memory of the array of face-varying param. │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_9_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +CudaPatchTable() │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r │ │ │ │ │ +void * _patchParamBuffer │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_1_0_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_u_d_a_P_a_t_c_h_T_a_b_l_e_:_:___i_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ +void * _indexBuffer │ │ │ │ │ +DDeeffiinniittiioonn _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h_:_1_0_1 │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _c_u_d_a_E_v_a_l_u_a_t_o_r_._h │ │ │ │ │ + * _c_u_d_a_P_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00800.html │ │ │ │ @@ -96,15 +96,15 @@ │ │ │ │ Namespaces │ │ │ │
clEvaluator.h File Reference
│ │ │ │ │ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ #include "../osd/opencl.h"
│ │ │ │ #include "../osd/types.h"
│ │ │ │ -#include "../osd/bufferDescriptor.h"
│ │ │ │ +#include "../osd/bufferDescriptor.h"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00800_source.html │ │ │ │ @@ -1325,17 +1325,17 @@ │ │ │ │
2631using namespace OPENSUBDIV_VERSION;
│ │ │ │
2632
│ │ │ │
2633} // end namespace OpenSubdiv
│ │ │ │
2634
│ │ │ │
2635
│ │ │ │
2636#endif // OPENSUBDIV3_OSD_CL_EVALUATOR_H
│ │ │ │ │ │ │ │ -
Stencil table class wrapping the template for compatibility.
│ │ │ │ -
Limit stencil table class wrapping the template for compatibility.
│ │ │ │ -
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ +
Stencil table class wrapping the template for compatibility.
│ │ │ │ +
Limit stencil table class wrapping the template for compatibility.
│ │ │ │ +
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ │ │ │ │ │ │ │ │
CLStencilTable(Far::StencilTable const *stencilTable, cl_context clContext)
│ │ │ │ │ │ │ │
static CLStencilTable * Create(Far::LimitStencilTable const *limitStencilTable, DEVICE_CONTEXT context)
Definition clEvaluator.h:61
│ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00803_source.html │ │ │ │ @@ -201,15 +201,15 @@ │ │ │ │
114} // end namespace OPENSUBDIV_VERSION
│ │ │ │
115using namespace OPENSUBDIV_VERSION;
│ │ │ │
116
│ │ │ │
117} // end namespace OpenSubdiv
│ │ │ │
118
│ │ │ │
119#endif // OPENSUBDIV3_OSD_CL_PATCH_TABLE_H
│ │ │ │ │ │ │ │ -
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ +
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
cl_mem GetPatchParamBuffer() const
Returns the CL memory of the array of Osd::PatchParam buffer.
│ │ │ │ │ │ │ │
cl_mem GetFVarPatchArrayBuffer(int fvarChannel=0) const
Returns the CL memory of the array of Osd::PatchArray buffer.
│ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00812.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/mtlPatchTable.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/osd/mtlMesh.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -88,47 +88,43 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -Classes | │ │ │ │ -Namespaces
│ │ │ │ -
mtlPatchTable.h File Reference
│ │ │ │ +Namespaces | │ │ │ │ +Typedefs
│ │ │ │ +
mtlMesh.h File Reference
│ │ │ │ │ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include "../far/patchDescriptor.h"
│ │ │ │ -#include "../osd/nonCopyable.h"
│ │ │ │ -#include "../osd/types.h"
│ │ │ │ -#include "../osd/mtlCommon.h"
│ │ │ │ +#include "../osd/mesh.h"
│ │ │ │ +#include "../osd/mtlPatchTable.h"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │

│ │ │ │ Classes

class  CLStencilTable
 OpenCL stencil table. More...
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Classes

class  MTLPatchTable
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ │ │ │ │ │ │ │ │ +

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Far
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │

│ │ │ │ +Typedefs

typedef MeshInterface< MTLPatchTableMTLMeshInterface
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,28 +1,24 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -mtlPatchTable.h File Reference │ │ │ │ │ +_N_a_m_e_s_p_a_c_e_s | _T_y_p_e_d_e_f_s │ │ │ │ │ +mtlMesh.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ -#include "_._._/_f_a_r_/_p_a_t_c_h_D_e_s_c_r_i_p_t_o_r_._h" │ │ │ │ │ -#include "../osd/nonCopyable.h" │ │ │ │ │ -#include "_._._/_o_s_d_/_t_y_p_e_s_._h" │ │ │ │ │ -#include "_._._/_o_s_d_/_m_t_l_C_o_m_m_o_n_._h" │ │ │ │ │ +#include "_._._/_o_s_d_/_m_e_s_h_._h" │ │ │ │ │ +#include "_._._/_o_s_d_/_m_t_l_P_a_t_c_h_T_a_b_l_e_._h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ -CCllaasssseess │ │ │ │ │ -class   _M_T_L_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -  │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ -namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r │ │ │ │ │ -  │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d │ │ │ │ │   │ │ │ │ │ +TTyyppeeddeeffss │ │ │ │ │ +typedef _M_e_s_h_I_n_t_e_r_f_a_c_e< _M_T_L_P_a_t_c_h_T_a_b_l_e >  _M_T_L_M_e_s_h_I_n_t_e_r_f_a_c_e │ │ │ │ │ +  │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _m_t_l_P_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ + * _m_t_l_M_e_s_h_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00812.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,3 +1,3 @@ │ │ │ │ │ var a00812 = [ │ │ │ │ │ - ["MTLPatchTable", "a01305.html", "a01305"] │ │ │ │ │ + ["MTLMeshInterface", "a00812.html#aa41e5b43fe46eeb0f97ff6ebdb1935aa", null] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00812_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/mtlPatchTable.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/osd/mtlMesh.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,15 +92,15 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
mtlPatchTable.h
│ │ │ │ +
mtlMesh.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │
2// Copyright 2013 Pixar
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │ @@ -119,123 +119,44 @@ │ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │
24
│ │ │ │ -
25#ifndef OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H
│ │ │ │ -
26#define OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H
│ │ │ │ +
25#ifndef OPENSUBDIV3_OSD_MTL_MESH_H
│ │ │ │ +
26#define OPENSUBDIV3_OSD_MTL_MESH_H
│ │ │ │
27
│ │ │ │
28#include "../version.h"
│ │ │ │ -
29#include "../far/patchDescriptor.h"
│ │ │ │ -
30#include "../osd/nonCopyable.h"
│ │ │ │ -
31#include "../osd/types.h"
│ │ │ │ -
32#include "../osd/mtlCommon.h"
│ │ │ │ -
33
│ │ │ │ -
34@protocol MTLDevice;
│ │ │ │ -
35@protocol MTLBuffer;
│ │ │ │ -
36
│ │ │ │ -
37namespace OpenSubdiv {
│ │ │ │ -
38namespace OPENSUBDIV_VERSION {
│ │ │ │ +
29#include "../osd/mesh.h"
│ │ │ │ +
30#include "../osd/mtlPatchTable.h"
│ │ │ │ +
31
│ │ │ │ +
32
│ │ │ │ +
33namespace OpenSubdiv {
│ │ │ │ +
34namespace OPENSUBDIV_VERSION {
│ │ │ │ +
35
│ │ │ │ +
36namespace Osd {
│ │ │ │ +
37
│ │ │ │ + │ │ │ │
39
│ │ │ │ -
40namespace Far {
│ │ │ │ -
41 class PatchTable;
│ │ │ │ -
42};
│ │ │ │ -
43
│ │ │ │ -
44namespace Osd {
│ │ │ │ -
45
│ │ │ │ -
│ │ │ │ -
46class MTLPatchTable : private NonCopyable<MTLPatchTable> {
│ │ │ │ -
47public:
│ │ │ │ -
48 typedef id<MTLBuffer> VertexBufferBinding;
│ │ │ │ -
49
│ │ │ │ - │ │ │ │ - │ │ │ │ -
52
│ │ │ │ -
53 template<typename DEVICE_CONTEXT>
│ │ │ │ -
│ │ │ │ -
54 static MTLPatchTable *Create(Far::PatchTable const *farPatchTable, DEVICE_CONTEXT context)
│ │ │ │ -
55 {
│ │ │ │ -
56 return Create(farPatchTable, context);
│ │ │ │ -
57 }
│ │ │ │ -
│ │ │ │ -
58
│ │ │ │ -
59 static MTLPatchTable *Create(Far::PatchTable const *farPatchTable, MTLContext* context);
│ │ │ │ -
60
│ │ │ │ -
61 PatchArrayVector const &GetPatchArrays() const { return _patchArrays; }
│ │ │ │ -
62 id<MTLBuffer> GetPatchIndexBuffer() const { return _indexBuffer; }
│ │ │ │ -
63 id<MTLBuffer> GetPatchParamBuffer() const { return _patchParamBuffer; }
│ │ │ │ -
64
│ │ │ │ - │ │ │ │ -
66 id<MTLBuffer> GetVaryingPatchIndexBuffer() const { return _varyingPatchIndexBuffer; }
│ │ │ │ -
67
│ │ │ │ -
68 int GetNumFVarChannels() const { return (int)_fvarPatchArrays.size(); }
│ │ │ │ -
69 PatchArrayVector const &GetFVarPatchArrays(int fvarChannel = 0) const { return _fvarPatchArrays[fvarChannel]; }
│ │ │ │ -
70 id<MTLBuffer> GetFVarPatchIndexBuffer(int fvarChannel = 0) const { return _fvarIndexBuffers[fvarChannel]; }
│ │ │ │ -
71 id<MTLBuffer> GetFVarPatchParamBuffer(int fvarChannel = 0) const { return _fvarParamBuffers[fvarChannel]; }
│ │ │ │ -
72
│ │ │ │ -
73protected:
│ │ │ │ -
74 bool allocate(Far::PatchTable const *farPatchTable, MTLContext* context);
│ │ │ │ -
75
│ │ │ │ - │ │ │ │ -
77
│ │ │ │ -
78 id<MTLBuffer> _indexBuffer;
│ │ │ │ -
79 id<MTLBuffer> _patchParamBuffer;
│ │ │ │ -
80
│ │ │ │ - │ │ │ │ -
82
│ │ │ │ - │ │ │ │ -
84
│ │ │ │ -
85 std::vector<PatchArrayVector> _fvarPatchArrays;
│ │ │ │ -
86 std::vector<id<MTLBuffer>> _fvarIndexBuffers;
│ │ │ │ -
87 std::vector<id<MTLBuffer>> _fvarParamBuffers;
│ │ │ │ -
88};
│ │ │ │ -
│ │ │ │ -
89
│ │ │ │ -
90} // end namespace Osd
│ │ │ │ -
91
│ │ │ │ -
92} //end namespace OPENSUBDIV_VERSION
│ │ │ │ -
93using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
94
│ │ │ │ -
95} //end namespace OpenSubdiv
│ │ │ │ -
96
│ │ │ │ -
97#endif //end OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H
│ │ │ │ +
40} // end namespace Osd
│ │ │ │ +
41
│ │ │ │ +
42} // end namespace OPENSUBDIV_VERSION
│ │ │ │ +
43using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
44
│ │ │ │ +
45} // end namespace OpenSubdiv
│ │ │ │ +
46
│ │ │ │ +
47#endif // OPENSUBDIV3_OSD_MTL_MESH_H
│ │ │ │ │ │ │ │ -
std::vector< PatchArray > PatchArrayVector
Definition types.h:132
│ │ │ │ -
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ - │ │ │ │ - │ │ │ │ -
PatchArrayVector const & GetPatchArrays() const
│ │ │ │ -
bool allocate(Far::PatchTable const *farPatchTable, MTLContext *context)
│ │ │ │ -
static MTLPatchTable * Create(Far::PatchTable const *farPatchTable, MTLContext *context)
│ │ │ │ - │ │ │ │ -
std::vector< id< MTLBuffer > > _fvarIndexBuffers
│ │ │ │ -
id< MTLBuffer > GetFVarPatchParamBuffer(int fvarChannel=0) const
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
PatchArrayVector const & GetFVarPatchArrays(int fvarChannel=0) const
│ │ │ │ - │ │ │ │ -
std::vector< id< MTLBuffer > > _fvarParamBuffers
│ │ │ │ -
std::vector< PatchArrayVector > _fvarPatchArrays
│ │ │ │ - │ │ │ │ - │ │ │ │ -
static MTLPatchTable * Create(Far::PatchTable const *farPatchTable, DEVICE_CONTEXT context)
│ │ │ │ - │ │ │ │ -
id< MTLBuffer > GetFVarPatchIndexBuffer(int fvarChannel=0) const
│ │ │ │ -
PatchArrayVector const & GetVaryingPatchArrays() const
│ │ │ │ - │ │ │ │ +
MeshInterface< MTLPatchTable > MTLMeshInterface
Definition mtlMesh.h:38
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,12 +1,12 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -mtlPatchTable.h │ │ │ │ │ +mtlMesh.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ 2// Copyright 2013 Pixar │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ @@ -24,170 +24,41 @@ │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ 24 │ │ │ │ │ -25#ifndef OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H │ │ │ │ │ -26#define OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H │ │ │ │ │ +25#ifndef OPENSUBDIV3_OSD_MTL_MESH_H │ │ │ │ │ +26#define OPENSUBDIV3_OSD_MTL_MESH_H │ │ │ │ │ 27 │ │ │ │ │ 28#include "../version.h" │ │ │ │ │ -29#include "../far/patchDescriptor.h" │ │ │ │ │ -30#include "../osd/nonCopyable.h" │ │ │ │ │ -31#include "../osd/types.h" │ │ │ │ │ -32#include "../osd/mtlCommon.h" │ │ │ │ │ -33 │ │ │ │ │ -34@protocol MTLDevice; │ │ │ │ │ -35@protocol MTLBuffer; │ │ │ │ │ -36 │ │ │ │ │ -37namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ -38namespace OPENSUBDIV_VERSION { │ │ │ │ │ +29#include "../osd/mesh.h" │ │ │ │ │ +30#include "../osd/mtlPatchTable.h" │ │ │ │ │ +31 │ │ │ │ │ +32 │ │ │ │ │ +33namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ +34namespace OPENSUBDIV_VERSION { │ │ │ │ │ +35 │ │ │ │ │ +36namespace Osd { │ │ │ │ │ +37 │ │ │ │ │ +_3_8typedef _M_e_s_h_I_n_t_e_r_f_a_c_e_<_M_T_L_P_a_t_c_h_T_a_b_l_e_> _M_T_L_M_e_s_h_I_n_t_e_r_f_a_c_e; │ │ │ │ │ 39 │ │ │ │ │ -40namespace Far { │ │ │ │ │ -41 class PatchTable; │ │ │ │ │ -42}; │ │ │ │ │ -43 │ │ │ │ │ -44namespace Osd { │ │ │ │ │ -45 │ │ │ │ │ -_4_6class _M_T_L_P_a_t_c_h_T_a_b_l_e : private NonCopyable { │ │ │ │ │ -47public: │ │ │ │ │ -_4_8 typedef id _V_e_r_t_e_x_B_u_f_f_e_r_B_i_n_d_i_n_g; │ │ │ │ │ -49 │ │ │ │ │ -_5_0 _M_T_L_P_a_t_c_h_T_a_b_l_e(); │ │ │ │ │ -_5_1 _~_M_T_L_P_a_t_c_h_T_a_b_l_e(); │ │ │ │ │ -52 │ │ │ │ │ -53 template │ │ │ │ │ -_5_4 static _M_T_L_P_a_t_c_h_T_a_b_l_e *_C_r_e_a_t_e(_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e const *farPatchTable, │ │ │ │ │ -DEVICE_CONTEXT context) │ │ │ │ │ -55 { │ │ │ │ │ -56 return _C_r_e_a_t_e(farPatchTable, context); │ │ │ │ │ -57 } │ │ │ │ │ -58 │ │ │ │ │ -_5_9 static _M_T_L_P_a_t_c_h_T_a_b_l_e *_C_r_e_a_t_e(_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e const *farPatchTable, │ │ │ │ │ -_M_T_L_C_o_n_t_e_x_t* context); │ │ │ │ │ -60 │ │ │ │ │ -_6_1 _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r const &_G_e_t_P_a_t_c_h_A_r_r_a_y_s() const { return ___p_a_t_c_h_A_r_r_a_y_s; } │ │ │ │ │ -_6_2 id _G_e_t_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r() const { return ___i_n_d_e_x_B_u_f_f_e_r; } │ │ │ │ │ -_6_3 id _G_e_t_P_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r() const { return ___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r; } │ │ │ │ │ -64 │ │ │ │ │ -_6_5 _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r const &_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_s() const { return │ │ │ │ │ -___v_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_s; } │ │ │ │ │ -_6_6 id _G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r() const { return │ │ │ │ │ -___v_a_r_y_i_n_g_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r; } │ │ │ │ │ -67 │ │ │ │ │ -_6_8 int _G_e_t_N_u_m_F_V_a_r_C_h_a_n_n_e_l_s() const { return (int)___f_v_a_r_P_a_t_c_h_A_r_r_a_y_s.size(); } │ │ │ │ │ -_6_9 _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r const &_G_e_t_F_V_a_r_P_a_t_c_h_A_r_r_a_y_s(int fvarChannel = 0) const │ │ │ │ │ -{ return ___f_v_a_r_P_a_t_c_h_A_r_r_a_y_s[fvarChannel]; } │ │ │ │ │ -_7_0 id _G_e_t_F_V_a_r_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r(int fvarChannel = 0) const { return │ │ │ │ │ -___f_v_a_r_I_n_d_e_x_B_u_f_f_e_r_s[fvarChannel]; } │ │ │ │ │ -_7_1 id _G_e_t_F_V_a_r_P_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r(int fvarChannel = 0) const { return │ │ │ │ │ -___f_v_a_r_P_a_r_a_m_B_u_f_f_e_r_s[fvarChannel]; } │ │ │ │ │ -72 │ │ │ │ │ -73protected: │ │ │ │ │ -_7_4 bool _a_l_l_o_c_a_t_e(_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e const *farPatchTable, _M_T_L_C_o_n_t_e_x_t* context); │ │ │ │ │ -75 │ │ │ │ │ -_7_6 _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r ___p_a_t_c_h_A_r_r_a_y_s; │ │ │ │ │ -77 │ │ │ │ │ -_7_8 id ___i_n_d_e_x_B_u_f_f_e_r; │ │ │ │ │ -_7_9 id ___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r; │ │ │ │ │ -80 │ │ │ │ │ -_8_1 _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r ___v_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_s; │ │ │ │ │ -82 │ │ │ │ │ -_8_3 id ___v_a_r_y_i_n_g_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r; │ │ │ │ │ -84 │ │ │ │ │ -_8_5 std::vector ___f_v_a_r_P_a_t_c_h_A_r_r_a_y_s; │ │ │ │ │ -_8_6 std::vector> ___f_v_a_r_I_n_d_e_x_B_u_f_f_e_r_s; │ │ │ │ │ -_8_7 std::vector> ___f_v_a_r_P_a_r_a_m_B_u_f_f_e_r_s; │ │ │ │ │ -88}; │ │ │ │ │ -89 │ │ │ │ │ -90} // end namespace Osd │ │ │ │ │ -91 │ │ │ │ │ -92} //end namespace OPENSUBDIV_VERSION │ │ │ │ │ -93using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -94 │ │ │ │ │ -95} //end namespace OpenSubdiv │ │ │ │ │ -96 │ │ │ │ │ -97#endif //end OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H │ │ │ │ │ +40} // end namespace Osd │ │ │ │ │ +41 │ │ │ │ │ +42} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ +43using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +44 │ │ │ │ │ +45} // end namespace OpenSubdiv │ │ │ │ │ +46 │ │ │ │ │ +47#endif // OPENSUBDIV3_OSD_MTL_MESH_H │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r │ │ │ │ │ -std::vector< PatchArray > PatchArrayVector │ │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e_s_._h_:_1_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -Container for arrays of parametric patches. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_5_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_n_t_e_x_t │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_m_o_n_._h_:_4_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_4_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ -PatchArrayVector const & GetPatchArrays() const │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_6_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_a_l_l_o_c_a_t_e │ │ │ │ │ -bool allocate(Far::PatchTable const *farPatchTable, MTLContext *context) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ -static MTLPatchTable * Create(Far::PatchTable const *farPatchTable, MTLContext │ │ │ │ │ -*context) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ -id< MTLBuffer > GetVaryingPatchIndexBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_6_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:___f_v_a_r_I_n_d_e_x_B_u_f_f_e_r_s │ │ │ │ │ -std::vector< id< MTLBuffer > > _fvarIndexBuffers │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_8_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r │ │ │ │ │ -id< MTLBuffer > GetFVarPatchParamBuffer(int fvarChannel=0) const │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_7_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -MTLPatchTable() │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r │ │ │ │ │ -id< MTLBuffer > GetPatchParamBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_6_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ -id< MTLBuffer > GetPatchIndexBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_6_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:___p_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ -PatchArrayVector _patchArrays │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_7_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_V_e_r_t_e_x_B_u_f_f_e_r_B_i_n_d_i_n_g │ │ │ │ │ -id< MTLBuffer > VertexBufferBinding │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_4_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_F_V_a_r_C_h_a_n_n_e_l_s │ │ │ │ │ -int GetNumFVarChannels() const │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_6_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ -PatchArrayVector const & GetFVarPatchArrays(int fvarChannel=0) const │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_6_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:___v_a_r_y_i_n_g_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ -id< MTLBuffer > _varyingPatchIndexBuffer │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_8_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:___f_v_a_r_P_a_r_a_m_B_u_f_f_e_r_s │ │ │ │ │ -std::vector< id< MTLBuffer > > _fvarParamBuffers │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_8_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:___f_v_a_r_P_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ -std::vector< PatchArrayVector > _fvarPatchArrays │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_8_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r │ │ │ │ │ -id< MTLBuffer > _patchParamBuffer │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_7_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:___v_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ -PatchArrayVector _varyingPatchArrays │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_8_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ -static MTLPatchTable * Create(Far::PatchTable const *farPatchTable, │ │ │ │ │ -DEVICE_CONTEXT context) │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_5_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_~_M_T_L_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -~MTLPatchTable() │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ -id< MTLBuffer > GetFVarPatchIndexBuffer(int fvarChannel=0) const │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_7_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ -PatchArrayVector const & GetVaryingPatchArrays() const │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_6_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:___i_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ -id< MTLBuffer > _indexBuffer │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_7_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_M_e_s_h_I_n_t_e_r_f_a_c_e │ │ │ │ │ +MeshInterface< MTLPatchTable > MTLMeshInterface │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_M_e_s_h_._h_:_3_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_e_s_h_I_n_t_e_r_f_a_c_e │ │ │ │ │ +DDeeffiinniittiioonn _m_e_s_h_._h_:_6_8 │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _m_t_l_P_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ + * _m_t_l_M_e_s_h_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00815.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/mtlMesh.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/osd/mtlPatchTable.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -88,43 +88,47 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -Namespaces | │ │ │ │ -Typedefs
│ │ │ │ -
mtlMesh.h File Reference
│ │ │ │ +Classes | │ │ │ │ +Namespaces
│ │ │ │ +
mtlPatchTable.h File Reference
│ │ │ │ │ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include "../osd/mesh.h"
│ │ │ │ -#include "../osd/mtlPatchTable.h"
│ │ │ │ +#include "../far/patchDescriptor.h"
│ │ │ │ +#include "../osd/nonCopyable.h"
│ │ │ │ +#include "../osd/types.h"
│ │ │ │ +#include "../osd/mtlCommon.h"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Classes

class  MTLPatchTable
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ -

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Far
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │

│ │ │ │ -Typedefs

typedef MeshInterface< MTLPatchTableMTLMeshInterface
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,28 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -_N_a_m_e_s_p_a_c_e_s | _T_y_p_e_d_e_f_s │ │ │ │ │ -mtlMesh.h File Reference │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ +mtlPatchTable.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ -#include "_._._/_o_s_d_/_m_e_s_h_._h" │ │ │ │ │ -#include "_._._/_o_s_d_/_m_t_l_P_a_t_c_h_T_a_b_l_e_._h" │ │ │ │ │ +#include "_._._/_f_a_r_/_p_a_t_c_h_D_e_s_c_r_i_p_t_o_r_._h" │ │ │ │ │ +#include "../osd/nonCopyable.h" │ │ │ │ │ +#include "_._._/_o_s_d_/_t_y_p_e_s_._h" │ │ │ │ │ +#include "_._._/_o_s_d_/_m_t_l_C_o_m_m_o_n_._h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ +CCllaasssseess │ │ │ │ │ +class   _M_T_L_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +  │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ -namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d │ │ │ │ │ +namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r │ │ │ │ │   │ │ │ │ │ -TTyyppeeddeeffss │ │ │ │ │ -typedef _M_e_s_h_I_n_t_e_r_f_a_c_e< _M_T_L_P_a_t_c_h_T_a_b_l_e >  _M_T_L_M_e_s_h_I_n_t_e_r_f_a_c_e │ │ │ │ │ +namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d │ │ │ │ │   │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _m_t_l_M_e_s_h_._h │ │ │ │ │ + * _m_t_l_P_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00815.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,3 +1,3 @@ │ │ │ │ │ var a00815 = [ │ │ │ │ │ - ["MTLMeshInterface", "a00815.html#aa41e5b43fe46eeb0f97ff6ebdb1935aa", null] │ │ │ │ │ + ["MTLPatchTable", "a01305.html", "a01305"] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00815_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/mtlMesh.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/osd/mtlPatchTable.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,15 +92,15 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
mtlMesh.h
│ │ │ │ +
mtlPatchTable.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │
2// Copyright 2013 Pixar
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │ @@ -119,44 +119,123 @@ │ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │
24
│ │ │ │ -
25#ifndef OPENSUBDIV3_OSD_MTL_MESH_H
│ │ │ │ -
26#define OPENSUBDIV3_OSD_MTL_MESH_H
│ │ │ │ +
25#ifndef OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H
│ │ │ │ +
26#define OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H
│ │ │ │
27
│ │ │ │
28#include "../version.h"
│ │ │ │ -
29#include "../osd/mesh.h"
│ │ │ │ -
30#include "../osd/mtlPatchTable.h"
│ │ │ │ -
31
│ │ │ │ -
32
│ │ │ │ -
33namespace OpenSubdiv {
│ │ │ │ -
34namespace OPENSUBDIV_VERSION {
│ │ │ │ -
35
│ │ │ │ -
36namespace Osd {
│ │ │ │ -
37
│ │ │ │ - │ │ │ │ +
29#include "../far/patchDescriptor.h"
│ │ │ │ +
30#include "../osd/nonCopyable.h"
│ │ │ │ +
31#include "../osd/types.h"
│ │ │ │ +
32#include "../osd/mtlCommon.h"
│ │ │ │ +
33
│ │ │ │ +
34@protocol MTLDevice;
│ │ │ │ +
35@protocol MTLBuffer;
│ │ │ │ +
36
│ │ │ │ +
37namespace OpenSubdiv {
│ │ │ │ +
38namespace OPENSUBDIV_VERSION {
│ │ │ │
39
│ │ │ │ -
40} // end namespace Osd
│ │ │ │ -
41
│ │ │ │ -
42} // end namespace OPENSUBDIV_VERSION
│ │ │ │ -
43using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
44
│ │ │ │ -
45} // end namespace OpenSubdiv
│ │ │ │ -
46
│ │ │ │ -
47#endif // OPENSUBDIV3_OSD_MTL_MESH_H
│ │ │ │ +
40namespace Far {
│ │ │ │ +
41 class PatchTable;
│ │ │ │ +
42};
│ │ │ │ +
43
│ │ │ │ +
44namespace Osd {
│ │ │ │ +
45
│ │ │ │ +
│ │ │ │ +
46class MTLPatchTable : private NonCopyable<MTLPatchTable> {
│ │ │ │ +
47public:
│ │ │ │ +
48 typedef id<MTLBuffer> VertexBufferBinding;
│ │ │ │ +
49
│ │ │ │ + │ │ │ │ + │ │ │ │ +
52
│ │ │ │ +
53 template<typename DEVICE_CONTEXT>
│ │ │ │ +
│ │ │ │ +
54 static MTLPatchTable *Create(Far::PatchTable const *farPatchTable, DEVICE_CONTEXT context)
│ │ │ │ +
55 {
│ │ │ │ +
56 return Create(farPatchTable, context);
│ │ │ │ +
57 }
│ │ │ │ +
│ │ │ │ +
58
│ │ │ │ +
59 static MTLPatchTable *Create(Far::PatchTable const *farPatchTable, MTLContext* context);
│ │ │ │ +
60
│ │ │ │ +
61 PatchArrayVector const &GetPatchArrays() const { return _patchArrays; }
│ │ │ │ +
62 id<MTLBuffer> GetPatchIndexBuffer() const { return _indexBuffer; }
│ │ │ │ +
63 id<MTLBuffer> GetPatchParamBuffer() const { return _patchParamBuffer; }
│ │ │ │ +
64
│ │ │ │ + │ │ │ │ +
66 id<MTLBuffer> GetVaryingPatchIndexBuffer() const { return _varyingPatchIndexBuffer; }
│ │ │ │ +
67
│ │ │ │ +
68 int GetNumFVarChannels() const { return (int)_fvarPatchArrays.size(); }
│ │ │ │ +
69 PatchArrayVector const &GetFVarPatchArrays(int fvarChannel = 0) const { return _fvarPatchArrays[fvarChannel]; }
│ │ │ │ +
70 id<MTLBuffer> GetFVarPatchIndexBuffer(int fvarChannel = 0) const { return _fvarIndexBuffers[fvarChannel]; }
│ │ │ │ +
71 id<MTLBuffer> GetFVarPatchParamBuffer(int fvarChannel = 0) const { return _fvarParamBuffers[fvarChannel]; }
│ │ │ │ +
72
│ │ │ │ +
73protected:
│ │ │ │ +
74 bool allocate(Far::PatchTable const *farPatchTable, MTLContext* context);
│ │ │ │ +
75
│ │ │ │ + │ │ │ │ +
77
│ │ │ │ +
78 id<MTLBuffer> _indexBuffer;
│ │ │ │ +
79 id<MTLBuffer> _patchParamBuffer;
│ │ │ │ +
80
│ │ │ │ + │ │ │ │ +
82
│ │ │ │ + │ │ │ │ +
84
│ │ │ │ +
85 std::vector<PatchArrayVector> _fvarPatchArrays;
│ │ │ │ +
86 std::vector<id<MTLBuffer>> _fvarIndexBuffers;
│ │ │ │ +
87 std::vector<id<MTLBuffer>> _fvarParamBuffers;
│ │ │ │ +
88};
│ │ │ │ +
│ │ │ │ +
89
│ │ │ │ +
90} // end namespace Osd
│ │ │ │ +
91
│ │ │ │ +
92} //end namespace OPENSUBDIV_VERSION
│ │ │ │ +
93using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
94
│ │ │ │ +
95} //end namespace OpenSubdiv
│ │ │ │ +
96
│ │ │ │ +
97#endif //end OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H
│ │ │ │ │ │ │ │ -
MeshInterface< MTLPatchTable > MTLMeshInterface
Definition mtlMesh.h:38
│ │ │ │ - │ │ │ │ +
std::vector< PatchArray > PatchArrayVector
Definition types.h:132
│ │ │ │ +
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ + │ │ │ │ + │ │ │ │ +
PatchArrayVector const & GetPatchArrays() const
│ │ │ │ +
bool allocate(Far::PatchTable const *farPatchTable, MTLContext *context)
│ │ │ │ +
static MTLPatchTable * Create(Far::PatchTable const *farPatchTable, MTLContext *context)
│ │ │ │ + │ │ │ │ +
std::vector< id< MTLBuffer > > _fvarIndexBuffers
│ │ │ │ +
id< MTLBuffer > GetFVarPatchParamBuffer(int fvarChannel=0) const
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
PatchArrayVector const & GetFVarPatchArrays(int fvarChannel=0) const
│ │ │ │ + │ │ │ │ +
std::vector< id< MTLBuffer > > _fvarParamBuffers
│ │ │ │ +
std::vector< PatchArrayVector > _fvarPatchArrays
│ │ │ │ + │ │ │ │ + │ │ │ │ +
static MTLPatchTable * Create(Far::PatchTable const *farPatchTable, DEVICE_CONTEXT context)
│ │ │ │ + │ │ │ │ +
id< MTLBuffer > GetFVarPatchIndexBuffer(int fvarChannel=0) const
│ │ │ │ +
PatchArrayVector const & GetVaryingPatchArrays() const
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,12 +1,12 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -mtlMesh.h │ │ │ │ │ +mtlPatchTable.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ 2// Copyright 2013 Pixar │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ @@ -24,41 +24,170 @@ │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ 24 │ │ │ │ │ -25#ifndef OPENSUBDIV3_OSD_MTL_MESH_H │ │ │ │ │ -26#define OPENSUBDIV3_OSD_MTL_MESH_H │ │ │ │ │ +25#ifndef OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H │ │ │ │ │ +26#define OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H │ │ │ │ │ 27 │ │ │ │ │ 28#include "../version.h" │ │ │ │ │ -29#include "../osd/mesh.h" │ │ │ │ │ -30#include "../osd/mtlPatchTable.h" │ │ │ │ │ -31 │ │ │ │ │ -32 │ │ │ │ │ -33namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ -34namespace OPENSUBDIV_VERSION { │ │ │ │ │ -35 │ │ │ │ │ -36namespace Osd { │ │ │ │ │ -37 │ │ │ │ │ -_3_8typedef _M_e_s_h_I_n_t_e_r_f_a_c_e_<_M_T_L_P_a_t_c_h_T_a_b_l_e_> _M_T_L_M_e_s_h_I_n_t_e_r_f_a_c_e; │ │ │ │ │ +29#include "../far/patchDescriptor.h" │ │ │ │ │ +30#include "../osd/nonCopyable.h" │ │ │ │ │ +31#include "../osd/types.h" │ │ │ │ │ +32#include "../osd/mtlCommon.h" │ │ │ │ │ +33 │ │ │ │ │ +34@protocol MTLDevice; │ │ │ │ │ +35@protocol MTLBuffer; │ │ │ │ │ +36 │ │ │ │ │ +37namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ +38namespace OPENSUBDIV_VERSION { │ │ │ │ │ 39 │ │ │ │ │ -40} // end namespace Osd │ │ │ │ │ -41 │ │ │ │ │ -42} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ -43using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -44 │ │ │ │ │ -45} // end namespace OpenSubdiv │ │ │ │ │ -46 │ │ │ │ │ -47#endif // OPENSUBDIV3_OSD_MTL_MESH_H │ │ │ │ │ +40namespace Far { │ │ │ │ │ +41 class PatchTable; │ │ │ │ │ +42}; │ │ │ │ │ +43 │ │ │ │ │ +44namespace Osd { │ │ │ │ │ +45 │ │ │ │ │ +_4_6class _M_T_L_P_a_t_c_h_T_a_b_l_e : private NonCopyable { │ │ │ │ │ +47public: │ │ │ │ │ +_4_8 typedef id _V_e_r_t_e_x_B_u_f_f_e_r_B_i_n_d_i_n_g; │ │ │ │ │ +49 │ │ │ │ │ +_5_0 _M_T_L_P_a_t_c_h_T_a_b_l_e(); │ │ │ │ │ +_5_1 _~_M_T_L_P_a_t_c_h_T_a_b_l_e(); │ │ │ │ │ +52 │ │ │ │ │ +53 template │ │ │ │ │ +_5_4 static _M_T_L_P_a_t_c_h_T_a_b_l_e *_C_r_e_a_t_e(_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e const *farPatchTable, │ │ │ │ │ +DEVICE_CONTEXT context) │ │ │ │ │ +55 { │ │ │ │ │ +56 return _C_r_e_a_t_e(farPatchTable, context); │ │ │ │ │ +57 } │ │ │ │ │ +58 │ │ │ │ │ +_5_9 static _M_T_L_P_a_t_c_h_T_a_b_l_e *_C_r_e_a_t_e(_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e const *farPatchTable, │ │ │ │ │ +_M_T_L_C_o_n_t_e_x_t* context); │ │ │ │ │ +60 │ │ │ │ │ +_6_1 _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r const &_G_e_t_P_a_t_c_h_A_r_r_a_y_s() const { return ___p_a_t_c_h_A_r_r_a_y_s; } │ │ │ │ │ +_6_2 id _G_e_t_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r() const { return ___i_n_d_e_x_B_u_f_f_e_r; } │ │ │ │ │ +_6_3 id _G_e_t_P_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r() const { return ___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r; } │ │ │ │ │ +64 │ │ │ │ │ +_6_5 _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r const &_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_s() const { return │ │ │ │ │ +___v_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_s; } │ │ │ │ │ +_6_6 id _G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r() const { return │ │ │ │ │ +___v_a_r_y_i_n_g_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r; } │ │ │ │ │ +67 │ │ │ │ │ +_6_8 int _G_e_t_N_u_m_F_V_a_r_C_h_a_n_n_e_l_s() const { return (int)___f_v_a_r_P_a_t_c_h_A_r_r_a_y_s.size(); } │ │ │ │ │ +_6_9 _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r const &_G_e_t_F_V_a_r_P_a_t_c_h_A_r_r_a_y_s(int fvarChannel = 0) const │ │ │ │ │ +{ return ___f_v_a_r_P_a_t_c_h_A_r_r_a_y_s[fvarChannel]; } │ │ │ │ │ +_7_0 id _G_e_t_F_V_a_r_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r(int fvarChannel = 0) const { return │ │ │ │ │ +___f_v_a_r_I_n_d_e_x_B_u_f_f_e_r_s[fvarChannel]; } │ │ │ │ │ +_7_1 id _G_e_t_F_V_a_r_P_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r(int fvarChannel = 0) const { return │ │ │ │ │ +___f_v_a_r_P_a_r_a_m_B_u_f_f_e_r_s[fvarChannel]; } │ │ │ │ │ +72 │ │ │ │ │ +73protected: │ │ │ │ │ +_7_4 bool _a_l_l_o_c_a_t_e(_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e const *farPatchTable, _M_T_L_C_o_n_t_e_x_t* context); │ │ │ │ │ +75 │ │ │ │ │ +_7_6 _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r ___p_a_t_c_h_A_r_r_a_y_s; │ │ │ │ │ +77 │ │ │ │ │ +_7_8 id ___i_n_d_e_x_B_u_f_f_e_r; │ │ │ │ │ +_7_9 id ___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r; │ │ │ │ │ +80 │ │ │ │ │ +_8_1 _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r ___v_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_s; │ │ │ │ │ +82 │ │ │ │ │ +_8_3 id ___v_a_r_y_i_n_g_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r; │ │ │ │ │ +84 │ │ │ │ │ +_8_5 std::vector ___f_v_a_r_P_a_t_c_h_A_r_r_a_y_s; │ │ │ │ │ +_8_6 std::vector> ___f_v_a_r_I_n_d_e_x_B_u_f_f_e_r_s; │ │ │ │ │ +_8_7 std::vector> ___f_v_a_r_P_a_r_a_m_B_u_f_f_e_r_s; │ │ │ │ │ +88}; │ │ │ │ │ +89 │ │ │ │ │ +90} // end namespace Osd │ │ │ │ │ +91 │ │ │ │ │ +92} //end namespace OPENSUBDIV_VERSION │ │ │ │ │ +93using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +94 │ │ │ │ │ +95} //end namespace OpenSubdiv │ │ │ │ │ +96 │ │ │ │ │ +97#endif //end OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_M_e_s_h_I_n_t_e_r_f_a_c_e │ │ │ │ │ -MeshInterface< MTLPatchTable > MTLMeshInterface │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_M_e_s_h_._h_:_3_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_e_s_h_I_n_t_e_r_f_a_c_e │ │ │ │ │ -DDeeffiinniittiioonn _m_e_s_h_._h_:_6_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r │ │ │ │ │ +std::vector< PatchArray > PatchArrayVector │ │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e_s_._h_:_1_3_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +Container for arrays of parametric patches. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_5_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_n_t_e_x_t │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_m_o_n_._h_:_4_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_4_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ +PatchArrayVector const & GetPatchArrays() const │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_6_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_a_l_l_o_c_a_t_e │ │ │ │ │ +bool allocate(Far::PatchTable const *farPatchTable, MTLContext *context) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ +static MTLPatchTable * Create(Far::PatchTable const *farPatchTable, MTLContext │ │ │ │ │ +*context) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ +id< MTLBuffer > GetVaryingPatchIndexBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_6_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:___f_v_a_r_I_n_d_e_x_B_u_f_f_e_r_s │ │ │ │ │ +std::vector< id< MTLBuffer > > _fvarIndexBuffers │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_8_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r │ │ │ │ │ +id< MTLBuffer > GetFVarPatchParamBuffer(int fvarChannel=0) const │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_7_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +MTLPatchTable() │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r │ │ │ │ │ +id< MTLBuffer > GetPatchParamBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_6_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ +id< MTLBuffer > GetPatchIndexBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_6_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:___p_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ +PatchArrayVector _patchArrays │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_7_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_V_e_r_t_e_x_B_u_f_f_e_r_B_i_n_d_i_n_g │ │ │ │ │ +id< MTLBuffer > VertexBufferBinding │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_4_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_F_V_a_r_C_h_a_n_n_e_l_s │ │ │ │ │ +int GetNumFVarChannels() const │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_6_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ +PatchArrayVector const & GetFVarPatchArrays(int fvarChannel=0) const │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_6_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:___v_a_r_y_i_n_g_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ +id< MTLBuffer > _varyingPatchIndexBuffer │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_8_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:___f_v_a_r_P_a_r_a_m_B_u_f_f_e_r_s │ │ │ │ │ +std::vector< id< MTLBuffer > > _fvarParamBuffers │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_8_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:___f_v_a_r_P_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ +std::vector< PatchArrayVector > _fvarPatchArrays │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_8_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r │ │ │ │ │ +id< MTLBuffer > _patchParamBuffer │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_7_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:___v_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ +PatchArrayVector _varyingPatchArrays │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_8_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ +static MTLPatchTable * Create(Far::PatchTable const *farPatchTable, │ │ │ │ │ +DEVICE_CONTEXT context) │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_5_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_~_M_T_L_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +~MTLPatchTable() │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ +id< MTLBuffer > GetFVarPatchIndexBuffer(int fvarChannel=0) const │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_7_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ +PatchArrayVector const & GetVaryingPatchArrays() const │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_6_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_P_a_t_c_h_T_a_b_l_e_:_:___i_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ +id< MTLBuffer > _indexBuffer │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_P_a_t_c_h_T_a_b_l_e_._h_:_7_8 │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _m_t_l_M_e_s_h_._h │ │ │ │ │ + * _m_t_l_P_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00818.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/mtlLegacyGregoryPatchTable.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/osd/mtlComputeEvaluator.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -90,42 +90,46 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
mtlLegacyGregoryPatchTable.h File Reference
│ │ │ │ +
mtlComputeEvaluator.h File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include "../far/patchTable.h"
│ │ │ │ -#include "../osd/nonCopyable.h"
│ │ │ │ +#include "../osd/types.h"
│ │ │ │ +#include "../osd/bufferDescriptor.h"
│ │ │ │ #include "../osd/mtlCommon.h"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  MTLLegacyGregoryPatchTable
class  MTLStencilTable
 
class  MTLComputeEvaluator
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Far
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,25 +1,29 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -mtlLegacyGregoryPatchTable.h File Reference │ │ │ │ │ +mtlComputeEvaluator.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ -#include "_._._/_f_a_r_/_p_a_t_c_h_T_a_b_l_e_._h" │ │ │ │ │ -#include "../osd/nonCopyable.h" │ │ │ │ │ +#include "_._._/_o_s_d_/_t_y_p_e_s_._h" │ │ │ │ │ +#include "_._._/_o_s_d_/_b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h" │ │ │ │ │ #include "_._._/_o_s_d_/_m_t_l_C_o_m_m_o_n_._h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +class   _M_T_L_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +  │ │ │ │ │ +class   _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ +namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r │ │ │ │ │ +  │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d │ │ │ │ │   │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _m_t_l_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ + * _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00818.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,3 +1,4 @@ │ │ │ │ │ var a00818 = [ │ │ │ │ │ - ["MTLLegacyGregoryPatchTable", "a01297.html", "a01297"] │ │ │ │ │ + ["MTLStencilTable", "a01289.html", "a01289"], │ │ │ │ │ + ["MTLComputeEvaluator", "a01293.html", "a01293"] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00818_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/mtlLegacyGregoryPatchTable.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/osd/mtlComputeEvaluator.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,15 +92,15 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
mtlLegacyGregoryPatchTable.h
│ │ │ │ +
mtlComputeEvaluator.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │
2// Copyright 2013 Pixar
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │ @@ -119,112 +119,1138 @@ │ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │
24
│ │ │ │ -
25#ifndef OPENSUBDIV3_OSD_MTL_LEGACY_GREGORY_PATCH_TABLE_H
│ │ │ │ -
26#define OPENSUBDIV3_OSD_MTL_LEGACY_GREGORY_PATCH_TABLE_H
│ │ │ │ +
25#ifndef OPENSUBDIV3_OSD_MTL_COMPUTE_EVALUATOR_H
│ │ │ │ +
26#define OPENSUBDIV3_OSD_MTL_COMPUTE_EVALUATOR_H
│ │ │ │
27
│ │ │ │
28#include "../version.h"
│ │ │ │ -
29#include "../far/patchTable.h"
│ │ │ │ -
30#include "../osd/nonCopyable.h"
│ │ │ │ -
31#include "../osd/mtlCommon.h"
│ │ │ │ -
32
│ │ │ │ -
33@protocol MTLDevice;
│ │ │ │ -
34@protocol MTLBuffer;
│ │ │ │ -
35
│ │ │ │ -
36namespace OpenSubdiv {
│ │ │ │ -
37namespace OPENSUBDIV_VERSION {
│ │ │ │ +
29
│ │ │ │ +
30#include "../osd/types.h"
│ │ │ │ +
31#include "../osd/bufferDescriptor.h"
│ │ │ │ +
32#include "../osd/mtlCommon.h"
│ │ │ │ +
33
│ │ │ │ +
34@protocol MTLDevice;
│ │ │ │ +
35@protocol MTLBuffer;
│ │ │ │ +
36@protocol MTLLibrary;
│ │ │ │ +
37@protocol MTLComputePipelineState;
│ │ │ │
38
│ │ │ │ -
39namespace Osd {
│ │ │ │ -
40
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
42: private NonCopyable<MTLLegacyGregoryPatchTable>
│ │ │ │ -
43{
│ │ │ │ -
44public:
│ │ │ │ - │ │ │ │ -
46
│ │ │ │ -
47 template<typename DEVICE_CONTEXT>
│ │ │ │ -
│ │ │ │ -
48 static MTLLegacyGregoryPatchTable* Create(Far::PatchTable const* farPatchTable, DEVICE_CONTEXT context) {
│ │ │ │ -
49 return Create(farPatchTable, context);
│ │ │ │ -
50 }
│ │ │ │ -
│ │ │ │ -
51
│ │ │ │ -
52 static MTLLegacyGregoryPatchTable* Create(Far::PatchTable const* farPatchTable, MTLContext* context);
│ │ │ │ -
53
│ │ │ │ -
54 void UpdateVertexBuffer(id<MTLBuffer> vbo, int numVertices, int numVertexElements, MTLContext* context);
│ │ │ │ -
55
│ │ │ │ -
│ │ │ │ -
56 id<MTLBuffer> GetVertexBuffer() const
│ │ │ │ -
57 {
│ │ │ │ -
58 return _vertexBuffer;
│ │ │ │ -
59 }
│ │ │ │ +
39namespace OpenSubdiv {
│ │ │ │ +
40namespace OPENSUBDIV_VERSION {
│ │ │ │ +
41
│ │ │ │ +
42namespace Far {
│ │ │ │ +
43 class PatchTable;
│ │ │ │ +
44 class StencilTable;
│ │ │ │ +
45 class LimitStencilTable;
│ │ │ │ +
46}
│ │ │ │ +
47
│ │ │ │ +
48namespace Osd {
│ │ │ │ +
49
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
51{
│ │ │ │ +
52public:
│ │ │ │ +
53 template<typename STENCIL_TABLE, typename DEVICE_CONTEXT>
│ │ │ │ +
│ │ │ │ +
54 static MTLStencilTable* Create(STENCIL_TABLE* stencilTable,
│ │ │ │ +
55 DEVICE_CONTEXT context)
│ │ │ │ +
56 {
│ │ │ │ +
57 return new MTLStencilTable(stencilTable, context);
│ │ │ │ +
58 }
│ │ │ │
│ │ │ │ +
59
│ │ │ │
60
│ │ │ │ -
│ │ │ │ -
61 id<MTLBuffer> GetVertexValenceBuffer() const
│ │ │ │ -
62 {
│ │ │ │ -
63 return _vertexValenceBuffer;
│ │ │ │ -
64 }
│ │ │ │ -
│ │ │ │ -
65
│ │ │ │ -
│ │ │ │ -
66 id<MTLBuffer> GetQuadOffsetsBuffer() const
│ │ │ │ -
67 {
│ │ │ │ -
68 return _quadOffsetsBuffer;
│ │ │ │ -
69 }
│ │ │ │ -
│ │ │ │ -
70
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
72 {
│ │ │ │ - │ │ │ │ -
74 return _quadOffsetsBase[1];
│ │ │ │ -
75 return _quadOffsetsBase[0];
│ │ │ │ -
76 }
│ │ │ │ -
│ │ │ │ -
77
│ │ │ │ -
78private:
│ │ │ │ -
79 id<MTLBuffer> _vertexBuffer;
│ │ │ │ -
80 id<MTLBuffer> _vertexValenceBuffer;
│ │ │ │ -
81 id<MTLBuffer> _quadOffsetsBuffer;
│ │ │ │ -
82 int _quadOffsetsBase[2];
│ │ │ │ -
83};
│ │ │ │ -
│ │ │ │ -
84
│ │ │ │ -
85} //end namespace Osd
│ │ │ │ -
86
│ │ │ │ -
87} //end namespace OPENSUBDIV_VERSION
│ │ │ │ -
88using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
89
│ │ │ │ -
90} //end namespace OpenSuddiv
│ │ │ │ -
91
│ │ │ │ -
92#endif // OPENSUBDIV3_OSD_MTL_LEGACY_GREGORY_PATCH_TABLE_H
│ │ │ │ +
61 MTLStencilTable(Far::StencilTable const* stencilTable, MTLContext* context);
│ │ │ │ +
62 MTLStencilTable(Far::LimitStencilTable const* stencilTable, MTLContext* context);
│ │ │ │ + │ │ │ │ +
64
│ │ │ │ +
65 id<MTLBuffer> GetSizesBuffer() const { return _sizesBuffer; }
│ │ │ │ +
66 id<MTLBuffer> GetOffsetsBuffer() const { return _offsetsBuffer; }
│ │ │ │ +
67 id<MTLBuffer> GetIndicesBuffer() const { return _indicesBuffer; }
│ │ │ │ +
68 id<MTLBuffer> GetWeightsBuffer() const { return _weightsBuffer; }
│ │ │ │ +
69 id<MTLBuffer> GetDuWeightsBuffer() const { return _duWeightsBuffer; }
│ │ │ │ +
70 id<MTLBuffer> GetDvWeightsBuffer() const { return _dvWeightsBuffer; }
│ │ │ │ +
71 id<MTLBuffer> GetDuuWeightsBuffer() const { return _duuWeightsBuffer; }
│ │ │ │ +
72 id<MTLBuffer> GetDuvWeightsBuffer() const { return _duvWeightsBuffer; }
│ │ │ │ +
73 id<MTLBuffer> GetDvvWeightsBuffer() const { return _dvvWeightsBuffer; }
│ │ │ │ +
74
│ │ │ │ +
75 int GetNumStencils() const { return _numStencils; }
│ │ │ │ +
76
│ │ │ │ +
77private:
│ │ │ │ +
78 id<MTLBuffer> _sizesBuffer;
│ │ │ │ +
79 id<MTLBuffer> _offsetsBuffer;
│ │ │ │ +
80 id<MTLBuffer> _indicesBuffer;
│ │ │ │ +
81 id<MTLBuffer> _weightsBuffer;
│ │ │ │ +
82 id<MTLBuffer> _duWeightsBuffer;
│ │ │ │ +
83 id<MTLBuffer> _dvWeightsBuffer;
│ │ │ │ +
84 id<MTLBuffer> _duuWeightsBuffer;
│ │ │ │ +
85 id<MTLBuffer> _duvWeightsBuffer;
│ │ │ │ +
86 id<MTLBuffer> _dvvWeightsBuffer;
│ │ │ │ +
87
│ │ │ │ +
88 int _numStencils;
│ │ │ │ +
89};
│ │ │ │ +
│ │ │ │ +
90
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
92{
│ │ │ │ +
93public:
│ │ │ │ +
94 typedef bool Instantiatable;
│ │ │ │ +
95
│ │ │ │ + │ │ │ │ +
97 BufferDescriptor const &dstDesc,
│ │ │ │ +
98 BufferDescriptor const &duDesc,
│ │ │ │ +
99 BufferDescriptor const &dvDesc,
│ │ │ │ +
100 MTLContext* context);
│ │ │ │ +
101
│ │ │ │ + │ │ │ │ +
103 BufferDescriptor const &dstDesc,
│ │ │ │ +
104 BufferDescriptor const &duDesc,
│ │ │ │ +
105 BufferDescriptor const &dvDesc,
│ │ │ │ +
106 BufferDescriptor const &duuDesc,
│ │ │ │ +
107 BufferDescriptor const &duvDesc,
│ │ │ │ +
108 BufferDescriptor const &dvvDesc,
│ │ │ │ +
109 MTLContext* context);
│ │ │ │ +
110
│ │ │ │ + │ │ │ │ + │ │ │ │ +
113
│ │ │ │ +
119
│ │ │ │ +
148 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ +
│ │ │ │ +
149 static bool EvalStencils(
│ │ │ │ +
150 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
151 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
152 STENCIL_TABLE const *stencilTable,
│ │ │ │ +
153 MTLComputeEvaluator const *instance,
│ │ │ │ +
154 MTLContext* context)
│ │ │ │ +
155 {
│ │ │ │ +
156 if (instance) {
│ │ │ │ +
157 return instance->EvalStencils(srcBuffer, srcDesc,
│ │ │ │ +
158 dstBuffer, dstDesc,
│ │ │ │ +
159 stencilTable,
│ │ │ │ +
160 context);
│ │ │ │ +
161 } else {
│ │ │ │ +
162 // Create an instance on demand (slow)
│ │ │ │ +
163 instance = Create(srcDesc, dstDesc,
│ │ │ │ + │ │ │ │ + │ │ │ │ +
166 context);
│ │ │ │ +
167 if (instance) {
│ │ │ │ +
168 bool r = instance->EvalStencils(srcBuffer, srcDesc,
│ │ │ │ +
169 dstBuffer, dstDesc,
│ │ │ │ +
170 stencilTable,
│ │ │ │ +
171 context);
│ │ │ │ +
172 delete instance;
│ │ │ │ +
173 return r;
│ │ │ │ +
174 }
│ │ │ │ +
175 return false;
│ │ │ │ +
176 }
│ │ │ │ +
177 }
│ │ │ │ +
│ │ │ │ +
178
│ │ │ │ +
219 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ +
│ │ │ │ +
220 static bool EvalStencils(
│ │ │ │ +
221 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
222 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
223 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
224 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
225 STENCIL_TABLE const *stencilTable,
│ │ │ │ +
226 MTLComputeEvaluator const *instance,
│ │ │ │ +
227 MTLContext* context) {
│ │ │ │ +
228
│ │ │ │ +
229 if (instance) {
│ │ │ │ +
230 return instance->EvalStencils(srcBuffer, srcDesc,
│ │ │ │ +
231 dstBuffer, dstDesc,
│ │ │ │ +
232 duBuffer, duDesc,
│ │ │ │ +
233 dvBuffer, dvDesc,
│ │ │ │ +
234 stencilTable,
│ │ │ │ +
235 context);
│ │ │ │ +
236 } else {
│ │ │ │ +
237 // Create an instance on demand (slow)
│ │ │ │ +
238 instance = Create(srcDesc, dstDesc, duDesc, dvDesc, context);
│ │ │ │ +
239 if (instance) {
│ │ │ │ +
240 bool r = instance->EvalStencils(srcBuffer, srcDesc,
│ │ │ │ +
241 dstBuffer, dstDesc,
│ │ │ │ +
242 duBuffer, duDesc,
│ │ │ │ +
243 dvBuffer, dvDesc,
│ │ │ │ +
244 stencilTable,
│ │ │ │ +
245 context);
│ │ │ │ +
246 delete instance;
│ │ │ │ +
247 return r;
│ │ │ │ +
248 }
│ │ │ │ +
249 return false;
│ │ │ │ +
250 }
│ │ │ │ +
251 }
│ │ │ │ +
│ │ │ │ +
252
│ │ │ │ +
311 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ +
│ │ │ │ +
312 static bool EvalStencils(
│ │ │ │ +
313 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
314 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
315 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
316 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
317 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
318 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
319 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
320 STENCIL_TABLE const *stencilTable,
│ │ │ │ +
321 MTLComputeEvaluator const *instance,
│ │ │ │ +
322 MTLContext* context) {
│ │ │ │ +
323
│ │ │ │ +
324 if (instance) {
│ │ │ │ +
325 return instance->EvalStencils(srcBuffer, srcDesc,
│ │ │ │ +
326 dstBuffer, dstDesc,
│ │ │ │ +
327 duBuffer, duDesc,
│ │ │ │ +
328 dvBuffer, dvDesc,
│ │ │ │ +
329 duuBuffer, duuDesc,
│ │ │ │ +
330 duvBuffer, duvDesc,
│ │ │ │ +
331 dvvBuffer, dvvDesc,
│ │ │ │ +
332 stencilTable,
│ │ │ │ +
333 context);
│ │ │ │ +
334 } else {
│ │ │ │ +
335 // Create an instance on demand (slow)
│ │ │ │ +
336 instance = Create(srcDesc, dstDesc, duDesc, dvDesc,
│ │ │ │ +
337 duuDesc, duvDesc, dvvDesc, context);
│ │ │ │ +
338 if (instance) {
│ │ │ │ +
339 bool r = instance->EvalStencils(srcBuffer, srcDesc,
│ │ │ │ +
340 dstBuffer, dstDesc,
│ │ │ │ +
341 duBuffer, duDesc,
│ │ │ │ +
342 dvBuffer, dvDesc,
│ │ │ │ +
343 duuBuffer, duuDesc,
│ │ │ │ +
344 duvBuffer, duvDesc,
│ │ │ │ +
345 dvvBuffer, dvvDesc,
│ │ │ │ +
346 stencilTable,
│ │ │ │ +
347 context);
│ │ │ │ +
348 delete instance;
│ │ │ │ +
349 return r;
│ │ │ │ +
350 }
│ │ │ │ +
351 return false;
│ │ │ │ +
352 }
│ │ │ │ +
353 }
│ │ │ │ +
│ │ │ │ +
354
│ │ │ │ +
375 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
377 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
378 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
379 STENCIL_TABLE const *stencilTable,
│ │ │ │ +
380 MTLContext* context) const
│ │ │ │ +
381 {
│ │ │ │ +
382 return EvalStencils(srcBuffer->BindMTLBuffer(context), srcDesc,
│ │ │ │ +
383 dstBuffer->BindMTLBuffer(context), dstDesc,
│ │ │ │ +
384 0, BufferDescriptor(),
│ │ │ │ +
385 0, BufferDescriptor(),
│ │ │ │ +
386 stencilTable->GetSizesBuffer(),
│ │ │ │ +
387 stencilTable->GetOffsetsBuffer(),
│ │ │ │ +
388 stencilTable->GetIndicesBuffer(),
│ │ │ │ +
389 stencilTable->GetWeightsBuffer(),
│ │ │ │ +
390 0,
│ │ │ │ +
391 0,
│ │ │ │ +
392 /* start = */ 0,
│ │ │ │ +
393 /* end = */ stencilTable->GetNumStencils(),
│ │ │ │ +
394 context);
│ │ │ │ +
395 }
│ │ │ │ +
│ │ │ │ +
396
│ │ │ │ +
429 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
431 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
432 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
433 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
434 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
435 STENCIL_TABLE const *stencilTable,
│ │ │ │ +
436 MTLContext* context) const
│ │ │ │ +
437 {
│ │ │ │ +
438 return EvalStencils(srcBuffer->BindMTLBuffer(context), srcDesc,
│ │ │ │ +
439 dstBuffer->BindMTLBuffer(context), dstDesc,
│ │ │ │ +
440 duBuffer->BindMTLBuffer(context), duDesc,
│ │ │ │ +
441 dvBuffer->BindMTLBuffer(context), dvDesc,
│ │ │ │ +
442 stencilTable->GetSizesBuffer(),
│ │ │ │ +
443 stencilTable->GetOffsetsBuffer(),
│ │ │ │ +
444 stencilTable->GetIndicesBuffer(),
│ │ │ │ +
445 stencilTable->GetWeightsBuffer(),
│ │ │ │ +
446 stencilTable->GetDuWeightsBuffer(),
│ │ │ │ +
447 stencilTable->GetDvWeightsBuffer(),
│ │ │ │ +
448 /* start = */ 0,
│ │ │ │ +
449 /* end = */ stencilTable->GetNumStencils(),
│ │ │ │ +
450 context);
│ │ │ │ +
451 }
│ │ │ │ +
│ │ │ │ +
452
│ │ │ │ +
503 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
505 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
506 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
507 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
508 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
509 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
510 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
511 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
512 STENCIL_TABLE const *stencilTable,
│ │ │ │ +
513 MTLContext* context) const
│ │ │ │ +
514 {
│ │ │ │ +
515 return EvalStencils(srcBuffer->BindMTLBuffer(context), srcDesc,
│ │ │ │ +
516 dstBuffer->BindMTLBuffer(context), dstDesc,
│ │ │ │ +
517 duBuffer->BindMTLBuffer(context), duDesc,
│ │ │ │ +
518 dvBuffer->BindMTLBuffer(context), dvDesc,
│ │ │ │ +
519 duuBuffer->BindMTLBuffer(context), duuDesc,
│ │ │ │ +
520 duvBuffer->BindMTLBuffer(context), duvDesc,
│ │ │ │ +
521 dvvBuffer->BindMTLBuffer(context), dvvDesc,
│ │ │ │ +
522 stencilTable->GetSizesBuffer(),
│ │ │ │ +
523 stencilTable->GetOffsetsBuffer(),
│ │ │ │ +
524 stencilTable->GetIndicesBuffer(),
│ │ │ │ +
525 stencilTable->GetWeightsBuffer(),
│ │ │ │ +
526 stencilTable->GetDuWeightsBuffer(),
│ │ │ │ +
527 stencilTable->GetDvWeightsBuffer(),
│ │ │ │ +
528 stencilTable->GetDuuWeightsBuffer(),
│ │ │ │ +
529 stencilTable->GetDuvWeightsBuffer(),
│ │ │ │ +
530 stencilTable->GetDvvWeightsBuffer(),
│ │ │ │ +
531 /* start = */ 0,
│ │ │ │ +
532 /* end = */ stencilTable->GetNumStencils(),
│ │ │ │ +
533 context);
│ │ │ │ +
534 }
│ │ │ │ +
│ │ │ │ +
535
│ │ │ │ +
574 bool EvalStencils(id<MTLBuffer> srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
575 id<MTLBuffer> dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
576 id<MTLBuffer> duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
577 id<MTLBuffer> dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
578 id<MTLBuffer> sizesBuffer,
│ │ │ │ +
579 id<MTLBuffer> offsetsBuffer,
│ │ │ │ +
580 id<MTLBuffer> indicesBuffer,
│ │ │ │ +
581 id<MTLBuffer> weightsBuffer,
│ │ │ │ +
582 id<MTLBuffer> duWeightsBuffer,
│ │ │ │ +
583 id<MTLBuffer> dvWeightsBuffer,
│ │ │ │ +
584 int start,
│ │ │ │ +
585 int end,
│ │ │ │ +
586 MTLContext* context) const;
│ │ │ │ +
587
│ │ │ │ +
644 bool EvalStencils(id<MTLBuffer> srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
645 id<MTLBuffer> dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
646 id<MTLBuffer> duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
647 id<MTLBuffer> dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
648 id<MTLBuffer> duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
649 id<MTLBuffer> duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
650 id<MTLBuffer> dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
651 id<MTLBuffer> sizesBuffer,
│ │ │ │ +
652 id<MTLBuffer> offsetsBuffer,
│ │ │ │ +
653 id<MTLBuffer> indicesBuffer,
│ │ │ │ +
654 id<MTLBuffer> weightsBuffer,
│ │ │ │ +
655 id<MTLBuffer> duWeightsBuffer,
│ │ │ │ +
656 id<MTLBuffer> dvWeightsBuffer,
│ │ │ │ +
657 id<MTLBuffer> duuWeightsBuffer,
│ │ │ │ +
658 id<MTLBuffer> duvWeightsBuffer,
│ │ │ │ +
659 id<MTLBuffer> dvvWeightsBuffer,
│ │ │ │ +
660 int start,
│ │ │ │ +
661 int end,
│ │ │ │ +
662 MTLContext* context) const;
│ │ │ │ +
663
│ │ │ │ +
669
│ │ │ │ +
703 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
704 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ +
705 static bool EvalPatches(
│ │ │ │ +
706 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
707 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
708 int numPatchCoords,
│ │ │ │ +
709 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
710 PATCH_TABLE *patchTable,
│ │ │ │ +
711 MTLComputeEvaluator const *instance,
│ │ │ │ +
712 MTLContext* context) {
│ │ │ │ +
713
│ │ │ │ +
714 if (instance) {
│ │ │ │ +
715 return instance->EvalPatches(srcBuffer, srcDesc,
│ │ │ │ +
716 dstBuffer, dstDesc,
│ │ │ │ +
717 numPatchCoords, patchCoords,
│ │ │ │ +
718 patchTable,
│ │ │ │ +
719 context);
│ │ │ │ +
720 } else {
│ │ │ │ +
721 // Create an instance on demand (slow)
│ │ │ │ +
722 instance = Create(srcDesc, dstDesc,
│ │ │ │ + │ │ │ │ + │ │ │ │ +
725 context);
│ │ │ │ +
726 if (instance) {
│ │ │ │ +
727 bool r = instance->EvalPatches(srcBuffer, srcDesc,
│ │ │ │ +
728 dstBuffer, dstDesc,
│ │ │ │ +
729 numPatchCoords, patchCoords,
│ │ │ │ +
730 patchTable,
│ │ │ │ +
731 context);
│ │ │ │ +
732 delete instance;
│ │ │ │ +
733 return r;
│ │ │ │ +
734 }
│ │ │ │ +
735 return false;
│ │ │ │ +
736 }
│ │ │ │ +
737 }
│ │ │ │ +
│ │ │ │ +
738
│ │ │ │ +
784 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
785 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ +
786 static bool EvalPatches(
│ │ │ │ +
787 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
788 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
789 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
790 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
791 int numPatchCoords,
│ │ │ │ +
792 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
793 PATCH_TABLE *patchTable,
│ │ │ │ +
794 MTLComputeEvaluator* instance,
│ │ │ │ +
795 MTLContext* context) {
│ │ │ │ +
796
│ │ │ │ +
797 if (instance) {
│ │ │ │ +
798 return instance->EvalPatches(srcBuffer, srcDesc,
│ │ │ │ +
799 dstBuffer, dstDesc,
│ │ │ │ +
800 duBuffer, duDesc,
│ │ │ │ +
801 dvBuffer, dvDesc,
│ │ │ │ +
802 numPatchCoords, patchCoords,
│ │ │ │ +
803 patchTable,
│ │ │ │ +
804 context);
│ │ │ │ +
805 } else {
│ │ │ │ +
806 // Create an instance on demand (slow)
│ │ │ │ +
807 instance = Create(srcDesc, dstDesc,
│ │ │ │ +
808 duDesc, dvDesc, context);
│ │ │ │ +
809 if (instance) {
│ │ │ │ +
810 bool r = instance->EvalPatches(srcBuffer, srcDesc,
│ │ │ │ +
811 dstBuffer, dstDesc,
│ │ │ │ +
812 duBuffer, duDesc,
│ │ │ │ +
813 dvBuffer, dvDesc,
│ │ │ │ +
814 numPatchCoords, patchCoords,
│ │ │ │ +
815 patchTable,
│ │ │ │ +
816 context);
│ │ │ │ +
817 delete instance;
│ │ │ │ +
818 return r;
│ │ │ │ +
819 }
│ │ │ │ +
820 return false;
│ │ │ │ +
821 }
│ │ │ │ +
822 }
│ │ │ │ +
│ │ │ │ +
823
│ │ │ │ +
887 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
888 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ +
889 static bool EvalPatches(
│ │ │ │ +
890 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
891 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
892 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
893 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
894 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
895 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
896 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
897 int numPatchCoords,
│ │ │ │ +
898 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
899 PATCH_TABLE *patchTable,
│ │ │ │ +
900 MTLComputeEvaluator* instance,
│ │ │ │ +
901 MTLContext* context) {
│ │ │ │ +
902
│ │ │ │ +
903 if (instance) {
│ │ │ │ +
904 return instance->EvalPatches(srcBuffer, srcDesc,
│ │ │ │ +
905 dstBuffer, dstDesc,
│ │ │ │ +
906 duBuffer, duDesc,
│ │ │ │ +
907 dvBuffer, dvDesc,
│ │ │ │ +
908 duuBuffer, duuDesc,
│ │ │ │ +
909 duvBuffer, duvDesc,
│ │ │ │ +
910 dvvBuffer, dvvDesc,
│ │ │ │ +
911 numPatchCoords, patchCoords,
│ │ │ │ +
912 patchTable,
│ │ │ │ +
913 context);
│ │ │ │ +
914 } else {
│ │ │ │ +
915 // Create an instance on demand (slow)
│ │ │ │ +
916 instance = Create(srcDesc, dstDesc,
│ │ │ │ +
917 duDesc, dvDesc,
│ │ │ │ +
918 duuDesc, duvDesc, dvvDesc, context);
│ │ │ │ +
919 if (instance) {
│ │ │ │ +
920 bool r = instance->EvalPatches(srcBuffer, srcDesc,
│ │ │ │ +
921 dstBuffer, dstDesc,
│ │ │ │ +
922 duBuffer, duDesc,
│ │ │ │ +
923 dvBuffer, dvDesc,
│ │ │ │ +
924 duuBuffer, duuDesc,
│ │ │ │ +
925 duvBuffer, duvDesc,
│ │ │ │ +
926 dvvBuffer, dvvDesc,
│ │ │ │ +
927 numPatchCoords, patchCoords,
│ │ │ │ +
928 patchTable,
│ │ │ │ +
929 context);
│ │ │ │ +
930 delete instance;
│ │ │ │ +
931 return r;
│ │ │ │ +
932 }
│ │ │ │ +
933 return false;
│ │ │ │ +
934 }
│ │ │ │ +
935 }
│ │ │ │ +
│ │ │ │ +
936
│ │ │ │ +
964 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
965 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
967 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
968 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
969 int numPatchCoords,
│ │ │ │ +
970 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
971 PATCH_TABLE *patchTable,
│ │ │ │ +
972 MTLContext* context) const {
│ │ │ │ +
973
│ │ │ │ +
974 return EvalPatches(srcBuffer->BindMTLBuffer(context), srcDesc,
│ │ │ │ +
975 dstBuffer->BindMTLBuffer(context), dstDesc,
│ │ │ │ +
976 0, BufferDescriptor(),
│ │ │ │ +
977 0, BufferDescriptor(),
│ │ │ │ +
978 numPatchCoords,
│ │ │ │ +
979 patchCoords->BindMTLBuffer(context),
│ │ │ │ +
980 patchTable->GetPatchArrays(),
│ │ │ │ +
981 patchTable->GetPatchIndexBuffer(),
│ │ │ │ +
982 patchTable->GetPatchParamBuffer(),
│ │ │ │ +
983 context);
│ │ │ │ +
984 }
│ │ │ │ +
│ │ │ │ +
985
│ │ │ │ +
1023 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1024 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1026 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1027 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1028 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1029 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1030 int numPatchCoords,
│ │ │ │ +
1031 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1032 PATCH_TABLE *patchTable,
│ │ │ │ +
1033 MTLContext* context) const {
│ │ │ │ +
1034
│ │ │ │ +
1035 return EvalPatches(srcBuffer->BindMTLBuffer(context), srcDesc,
│ │ │ │ +
1036 dstBuffer->BindMTLBuffer(context), dstDesc,
│ │ │ │ +
1037 duBuffer->BindMTLBuffer(context), duDesc,
│ │ │ │ +
1038 dvBuffer->BindMTLBuffer(context), dvDesc,
│ │ │ │ +
1039 numPatchCoords,
│ │ │ │ +
1040 patchCoords->BindMTLBuffer(context),
│ │ │ │ +
1041 patchTable->GetPatchArrays(),
│ │ │ │ +
1042 patchTable->GetPatchIndexBuffer(),
│ │ │ │ +
1043 patchTable->GetPatchParamBuffer(),
│ │ │ │ +
1044 context);
│ │ │ │ +
1045 }
│ │ │ │ +
│ │ │ │ +
1046
│ │ │ │ +
1102 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1103 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1105 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1106 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1107 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1108 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1109 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
1110 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
1111 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
1112 int numPatchCoords,
│ │ │ │ +
1113 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1114 PATCH_TABLE *patchTable,
│ │ │ │ +
1115 MTLContext* context) const {
│ │ │ │ +
1116
│ │ │ │ +
1117 return EvalPatches(srcBuffer->BindMTLBuffer(context), srcDesc,
│ │ │ │ +
1118 dstBuffer->BindMTLBuffer(context), dstDesc,
│ │ │ │ +
1119 duBuffer->BindMTLBuffer(context), duDesc,
│ │ │ │ +
1120 dvBuffer->BindMTLBuffer(context), dvDesc,
│ │ │ │ +
1121 duuBuffer->BindMTLBuffer(context), duuDesc,
│ │ │ │ +
1122 duvBuffer->BindMTLBuffer(context), duvDesc,
│ │ │ │ +
1123 dvvBuffer->BindMTLBuffer(context), dvvDesc,
│ │ │ │ +
1124 numPatchCoords,
│ │ │ │ +
1125 patchCoords->BindMTLBuffer(context),
│ │ │ │ +
1126 patchTable->GetPatchArrays(),
│ │ │ │ +
1127 patchTable->GetPatchIndexBuffer(),
│ │ │ │ +
1128 patchTable->GetPatchParamBuffer(),
│ │ │ │ +
1129 context);
│ │ │ │ +
1130 }
│ │ │ │ +
│ │ │ │ +
1131
│ │ │ │ +
1132 bool EvalPatches(id<MTLBuffer> srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1133 id<MTLBuffer> dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1134 id<MTLBuffer> duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1135 id<MTLBuffer> dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1136 int numPatchCoords,
│ │ │ │ +
1137 id<MTLBuffer> patchCoordsBuffer,
│ │ │ │ +
1138 const PatchArrayVector &patchArrays,
│ │ │ │ +
1139 id<MTLBuffer> patchIndexBuffer,
│ │ │ │ +
1140 id<MTLBuffer> patchParamsBuffer,
│ │ │ │ +
1141 MTLContext* context) const;
│ │ │ │ +
1142
│ │ │ │ +
1143 bool EvalPatches(id<MTLBuffer> srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1144 id<MTLBuffer> dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1145 id<MTLBuffer> duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1146 id<MTLBuffer> dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1147 id<MTLBuffer> duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
1148 id<MTLBuffer> duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
1149 id<MTLBuffer> dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
1150 int numPatchCoords,
│ │ │ │ +
1151 id<MTLBuffer> patchCoordsBuffer,
│ │ │ │ +
1152 const PatchArrayVector &patchArrays,
│ │ │ │ +
1153 id<MTLBuffer> patchIndexBuffer,
│ │ │ │ +
1154 id<MTLBuffer> patchParamsBuffer,
│ │ │ │ +
1155 MTLContext* context) const;
│ │ │ │ +
1156
│ │ │ │ +
1190 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1191 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1193 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1194 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1195 int numPatchCoords,
│ │ │ │ +
1196 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1197 PATCH_TABLE *patchTable,
│ │ │ │ +
1198 MTLComputeEvaluator const *instance,
│ │ │ │ +
1199 MTLContext* deviceContext) {
│ │ │ │ +
1200
│ │ │ │ +
1201 if (instance) {
│ │ │ │ +
1202 return instance->EvalPatchesVarying(
│ │ │ │ +
1203 srcBuffer, srcDesc,
│ │ │ │ +
1204 dstBuffer, dstDesc,
│ │ │ │ +
1205 numPatchCoords, patchCoords,
│ │ │ │ +
1206 patchTable,
│ │ │ │ +
1207 deviceContext);
│ │ │ │ +
1208 } else {
│ │ │ │ +
1209 // Create an instance on demand (slow)
│ │ │ │ +
1210 instance = Create(srcDesc, dstDesc,
│ │ │ │ + │ │ │ │ + │ │ │ │ +
1213 deviceContext);
│ │ │ │ +
1214 if (instance) {
│ │ │ │ +
1215 bool r = instance->EvalPatchesVarying(
│ │ │ │ +
1216 srcBuffer, srcDesc,
│ │ │ │ +
1217 dstBuffer, dstDesc,
│ │ │ │ +
1218 numPatchCoords, patchCoords,
│ │ │ │ +
1219 patchTable,
│ │ │ │ +
1220 deviceContext);
│ │ │ │ +
1221 delete instance;
│ │ │ │ +
1222 return r;
│ │ │ │ +
1223 }
│ │ │ │ +
1224 return false;
│ │ │ │ +
1225 }
│ │ │ │ +
1226 }
│ │ │ │ +
│ │ │ │ +
1227
│ │ │ │ +
1255 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1256 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1258 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1259 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1260 int numPatchCoords,
│ │ │ │ +
1261 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1262 PATCH_TABLE *patchTable,
│ │ │ │ +
1263 MTLContext* deviceContext) const {
│ │ │ │ +
1264
│ │ │ │ +
1265 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc,
│ │ │ │ +
1266 dstBuffer->BindMTLBuffer(deviceContext), dstDesc,
│ │ │ │ +
1267 0, BufferDescriptor(),
│ │ │ │ +
1268 0, BufferDescriptor(),
│ │ │ │ +
1269 numPatchCoords,
│ │ │ │ +
1270 patchCoords->BindMTLBuffer(deviceContext),
│ │ │ │ +
1271 patchTable->GetVaryingPatchArrays(),
│ │ │ │ +
1272 patchTable->GetVaryingPatchIndexBuffer(),
│ │ │ │ +
1273 patchTable->GetPatchParamBuffer(),
│ │ │ │ +
1274 deviceContext
│ │ │ │ +
1275 );
│ │ │ │ +
1276 }
│ │ │ │ +
│ │ │ │ +
1277
│ │ │ │ +
1323 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1324 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1326 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1327 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1328 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1329 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1330 int numPatchCoords,
│ │ │ │ +
1331 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1332 PATCH_TABLE *patchTable,
│ │ │ │ +
1333 MTLComputeEvaluator const *instance,
│ │ │ │ +
1334 MTLContext* deviceContext) {
│ │ │ │ +
1335
│ │ │ │ +
1336 if (instance) {
│ │ │ │ +
1337 return instance->EvalPatchesVarying(
│ │ │ │ +
1338 srcBuffer, srcDesc,
│ │ │ │ +
1339 dstBuffer, dstDesc,
│ │ │ │ +
1340 duBuffer, duDesc,
│ │ │ │ +
1341 dvBuffer, dvDesc,
│ │ │ │ +
1342 numPatchCoords, patchCoords,
│ │ │ │ +
1343 patchTable,
│ │ │ │ +
1344 deviceContext);
│ │ │ │ +
1345 } else {
│ │ │ │ +
1346 // Create an instance on demand (slow)
│ │ │ │ +
1347 instance = Create(srcDesc, dstDesc,
│ │ │ │ +
1348 duDesc, dvDesc,
│ │ │ │ +
1349 deviceContext);
│ │ │ │ +
1350 if (instance) {
│ │ │ │ +
1351 bool r = instance->EvalPatchesVarying(
│ │ │ │ +
1352 srcBuffer, srcDesc,
│ │ │ │ +
1353 dstBuffer, dstDesc,
│ │ │ │ +
1354 duBuffer, duDesc,
│ │ │ │ +
1355 dvBuffer, dvDesc,
│ │ │ │ +
1356 numPatchCoords, patchCoords,
│ │ │ │ +
1357 patchTable,
│ │ │ │ +
1358 deviceContext);
│ │ │ │ +
1359 delete instance;
│ │ │ │ +
1360 return r;
│ │ │ │ +
1361 }
│ │ │ │ +
1362 return false;
│ │ │ │ +
1363 }
│ │ │ │ +
1364 }
│ │ │ │ +
│ │ │ │ +
1365
│ │ │ │ +
1405 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1406 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1408 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1409 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1410 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1411 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1412 int numPatchCoords,
│ │ │ │ +
1413 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1414 PATCH_TABLE *patchTable,
│ │ │ │ +
1415 MTLContext* deviceContext) const {
│ │ │ │ +
1416
│ │ │ │ +
1417 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc,
│ │ │ │ +
1418 dstBuffer->BindMTLBuffer(deviceContext), dstDesc,
│ │ │ │ +
1419 duBuffer->BindMTLBuffer(deviceContext), duDesc,
│ │ │ │ +
1420 dvBuffer->BindMTLBuffer(deviceContext), dvDesc,
│ │ │ │ +
1421 numPatchCoords,
│ │ │ │ +
1422 patchCoords->BindMTLBuffer(deviceContext),
│ │ │ │ +
1423 patchTable->GetVaryingPatchArrays(),
│ │ │ │ +
1424 patchTable->GetVaryingPatchIndexBuffer(),
│ │ │ │ +
1425 patchTable->GetPatchParamBuffer(),
│ │ │ │ +
1426 deviceContext
│ │ │ │ +
1427 );
│ │ │ │ +
1428 }
│ │ │ │ +
│ │ │ │ +
1429
│ │ │ │ +
1430
│ │ │ │ +
1494 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1495 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1497 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1498 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1499 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1500 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1501 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
1502 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
1503 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
1504 int numPatchCoords,
│ │ │ │ +
1505 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1506 PATCH_TABLE *patchTable,
│ │ │ │ +
1507 MTLComputeEvaluator const *instance,
│ │ │ │ +
1508 MTLContext* deviceContext) {
│ │ │ │ +
1509
│ │ │ │ +
1510 if (instance) {
│ │ │ │ +
1511 return instance->EvalPatchesVarying(
│ │ │ │ +
1512 srcBuffer, srcDesc,
│ │ │ │ +
1513 dstBuffer, dstDesc,
│ │ │ │ +
1514 duBuffer, duDesc,
│ │ │ │ +
1515 dvBuffer, dvDesc,
│ │ │ │ +
1516 duuBuffer, duuDesc,
│ │ │ │ +
1517 duvBuffer, duvDesc,
│ │ │ │ +
1518 dvvBuffer, dvvDesc,
│ │ │ │ +
1519 numPatchCoords, patchCoords,
│ │ │ │ +
1520 patchTable,
│ │ │ │ +
1521 deviceContext);
│ │ │ │ +
1522 } else {
│ │ │ │ +
1523 // Create an instance on demand (slow)
│ │ │ │ +
1524 instance = Create(srcDesc, dstDesc,
│ │ │ │ +
1525 duDesc, dvDesc,
│ │ │ │ +
1526 duuDesc, duvDesc, dvvDesc,
│ │ │ │ +
1527 deviceContext);
│ │ │ │ +
1528 if (instance) {
│ │ │ │ +
1529 bool r = instance->EvalPatchesVarying(
│ │ │ │ +
1530 srcBuffer, srcDesc,
│ │ │ │ +
1531 dstBuffer, dstDesc,
│ │ │ │ +
1532 duBuffer, duDesc,
│ │ │ │ +
1533 dvBuffer, dvDesc,
│ │ │ │ +
1534 duuBuffer, duuDesc,
│ │ │ │ +
1535 duvBuffer, duvDesc,
│ │ │ │ +
1536 dvvBuffer, dvvDesc,
│ │ │ │ +
1537 numPatchCoords, patchCoords,
│ │ │ │ +
1538 patchTable,
│ │ │ │ +
1539 deviceContext);
│ │ │ │ +
1540 delete instance;
│ │ │ │ +
1541 return r;
│ │ │ │ +
1542 }
│ │ │ │ +
1543 return false;
│ │ │ │ +
1544 }
│ │ │ │ +
1545 }
│ │ │ │ +
│ │ │ │ +
1546
│ │ │ │ +
1604 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1605 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1607 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1608 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1609 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1610 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1611 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
1612 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
1613 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
1614 int numPatchCoords,
│ │ │ │ +
1615 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1616 PATCH_TABLE *patchTable,
│ │ │ │ +
1617 MTLContext* deviceContext) const {
│ │ │ │ +
1618
│ │ │ │ +
1619 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc,
│ │ │ │ +
1620 dstBuffer->BindMTLBuffer(deviceContext), dstDesc,
│ │ │ │ +
1621 duBuffer->BindMTLBuffer(deviceContext), duDesc,
│ │ │ │ +
1622 dvBuffer->BindMTLBuffer(deviceContext), dvDesc,
│ │ │ │ +
1623 duuBuffer->BindMTLBuffer(deviceContext), duuDesc,
│ │ │ │ +
1624 duvBuffer->BindMTLBuffer(deviceContext), duvDesc,
│ │ │ │ +
1625 dvvBuffer->BindMTLBuffer(deviceContext), dvvDesc,
│ │ │ │ +
1626 numPatchCoords,
│ │ │ │ +
1627 patchCoords->BindMTLBuffer(deviceContext),
│ │ │ │ +
1628 patchTable->GetVaryingPatchArrays(),
│ │ │ │ +
1629 patchTable->GetVaryingPatchIndexBuffer(),
│ │ │ │ +
1630 patchTable->GetPatchParamBuffer(),
│ │ │ │ +
1631 deviceContext
│ │ │ │ +
1632 );
│ │ │ │ +
1633 }
│ │ │ │ +
│ │ │ │ +
1634
│ │ │ │ +
1670 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1671 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1673 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1674 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1675 int numPatchCoords,
│ │ │ │ +
1676 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1677 PATCH_TABLE *patchTable,
│ │ │ │ +
1678 int fvarChannel,
│ │ │ │ +
1679 MTLComputeEvaluator const *instance,
│ │ │ │ +
1680 MTLContext* deviceContext) {
│ │ │ │ +
1681
│ │ │ │ +
1682 if (instance) {
│ │ │ │ +
1683 return instance->EvalPatchesFaceVarying(
│ │ │ │ +
1684 srcBuffer, srcDesc,
│ │ │ │ +
1685 dstBuffer, dstDesc,
│ │ │ │ +
1686 numPatchCoords, patchCoords,
│ │ │ │ +
1687 patchTable,
│ │ │ │ +
1688 fvarChannel,
│ │ │ │ +
1689 deviceContext);
│ │ │ │ +
1690 } else {
│ │ │ │ +
1691 // Create an instance on demand (slow)
│ │ │ │ +
1692 instance = Create(srcDesc, dstDesc,
│ │ │ │ + │ │ │ │ + │ │ │ │ +
1695 deviceContext);
│ │ │ │ +
1696 if (instance) {
│ │ │ │ +
1697 bool r = instance->EvalPatchesFaceVarying(
│ │ │ │ +
1698 srcBuffer, srcDesc,
│ │ │ │ +
1699 dstBuffer, dstDesc,
│ │ │ │ +
1700 numPatchCoords, patchCoords,
│ │ │ │ +
1701 patchTable,
│ │ │ │ +
1702 fvarChannel,
│ │ │ │ +
1703 deviceContext);
│ │ │ │ +
1704 delete instance;
│ │ │ │ +
1705 return r;
│ │ │ │ +
1706 }
│ │ │ │ +
1707 return false;
│ │ │ │ +
1708 }
│ │ │ │ +
1709 }
│ │ │ │ +
│ │ │ │ +
1710
│ │ │ │ +
1740 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1741 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1743 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1744 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1745 int numPatchCoords,
│ │ │ │ +
1746 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1747 PATCH_TABLE *patchTable,
│ │ │ │ +
1748 int fvarChannel,
│ │ │ │ +
1749 MTLContext* deviceContext) const {
│ │ │ │ +
1750
│ │ │ │ +
1751 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc,
│ │ │ │ +
1752 dstBuffer->BindMTLBuffer(deviceContext), dstDesc,
│ │ │ │ +
1753 0, BufferDescriptor(),
│ │ │ │ +
1754 0, BufferDescriptor(),
│ │ │ │ +
1755 numPatchCoords,
│ │ │ │ +
1756 patchCoords->BindMTLBuffer(deviceContext),
│ │ │ │ +
1757 patchTable->GetFVarPatchArrays(fvarChannel),
│ │ │ │ +
1758 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
│ │ │ │ +
1759 patchTable->GetFVarPatchParamBuffer(fvarChannel),
│ │ │ │ +
1760 deviceContext
│ │ │ │ +
1761 );
│ │ │ │ +
1762 }
│ │ │ │ +
│ │ │ │ +
1763
│ │ │ │ +
1811 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1812 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1814 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1815 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1816 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1817 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1818 int numPatchCoords,
│ │ │ │ +
1819 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1820 PATCH_TABLE *patchTable,
│ │ │ │ +
1821 int fvarChannel,
│ │ │ │ +
1822 MTLComputeEvaluator const *instance,
│ │ │ │ +
1823 MTLContext* deviceContext) {
│ │ │ │ +
1824
│ │ │ │ +
1825 if (instance) {
│ │ │ │ +
1826 return instance->EvalPatchesFaceVarying(
│ │ │ │ +
1827 srcBuffer, srcDesc,
│ │ │ │ +
1828 dstBuffer, dstDesc,
│ │ │ │ +
1829 duBuffer, duDesc,
│ │ │ │ +
1830 dvBuffer, dvDesc,
│ │ │ │ +
1831 numPatchCoords, patchCoords,
│ │ │ │ +
1832 patchTable,
│ │ │ │ +
1833 fvarChannel,
│ │ │ │ +
1834 deviceContext);
│ │ │ │ +
1835 } else {
│ │ │ │ +
1836 // Create an instance on demand (slow)
│ │ │ │ +
1837 instance = Create(srcDesc, dstDesc,
│ │ │ │ +
1838 duDesc, dvDesc,
│ │ │ │ +
1839 deviceContext);
│ │ │ │ +
1840 if (instance) {
│ │ │ │ +
1841 bool r = instance->EvalPatchesFaceVarying(
│ │ │ │ +
1842 srcBuffer, srcDesc,
│ │ │ │ +
1843 dstBuffer, dstDesc,
│ │ │ │ +
1844 duBuffer, duDesc,
│ │ │ │ +
1845 dvBuffer, dvDesc,
│ │ │ │ +
1846 numPatchCoords, patchCoords,
│ │ │ │ +
1847 patchTable,
│ │ │ │ +
1848 fvarChannel,
│ │ │ │ +
1849 deviceContext);
│ │ │ │ +
1850 delete instance;
│ │ │ │ +
1851 return r;
│ │ │ │ +
1852 }
│ │ │ │ +
1853 return false;
│ │ │ │ +
1854 }
│ │ │ │ +
1855 }
│ │ │ │ +
│ │ │ │ +
1856
│ │ │ │ +
1898 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1899 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1901 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1902 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1903 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1904 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1905 int numPatchCoords,
│ │ │ │ +
1906 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1907 PATCH_TABLE *patchTable,
│ │ │ │ +
1908 int fvarChannel,
│ │ │ │ +
1909 MTLContext* deviceContext) const {
│ │ │ │ +
1910
│ │ │ │ +
1911 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc,
│ │ │ │ +
1912 dstBuffer->BindMTLBuffer(deviceContext), dstDesc,
│ │ │ │ +
1913 duBuffer->BindMTLBuffer(deviceContext), duDesc,
│ │ │ │ +
1914 dvBuffer->BindMTLBuffer(deviceContext), dvDesc,
│ │ │ │ +
1915 numPatchCoords,
│ │ │ │ +
1916 patchCoords->BindMTLBuffer(deviceContext),
│ │ │ │ +
1917 patchTable->GetFVarPatchArrays(fvarChannel),
│ │ │ │ +
1918 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
│ │ │ │ +
1919 patchTable->GetFVarPatchParamBuffer(fvarChannel),
│ │ │ │ +
1920 deviceContext
│ │ │ │ +
1921 );
│ │ │ │ +
1922 }
│ │ │ │ +
│ │ │ │ +
1923
│ │ │ │ +
1989 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1990 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1992 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1993 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1994 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1995 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1996 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
1997 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
1998 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
1999 int numPatchCoords,
│ │ │ │ +
2000 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
2001 PATCH_TABLE *patchTable,
│ │ │ │ +
2002 int fvarChannel,
│ │ │ │ +
2003 MTLComputeEvaluator const *instance,
│ │ │ │ +
2004 MTLContext* deviceContext) {
│ │ │ │ +
2005
│ │ │ │ +
2006 if (instance) {
│ │ │ │ +
2007 return instance->EvalPatchesFaceVarying(
│ │ │ │ +
2008 srcBuffer, srcDesc,
│ │ │ │ +
2009 dstBuffer, dstDesc,
│ │ │ │ +
2010 duBuffer, duDesc,
│ │ │ │ +
2011 dvBuffer, dvDesc,
│ │ │ │ +
2012 duuBuffer, duuDesc,
│ │ │ │ +
2013 duvBuffer, duvDesc,
│ │ │ │ +
2014 dvvBuffer, dvvDesc,
│ │ │ │ +
2015 numPatchCoords, patchCoords,
│ │ │ │ +
2016 patchTable,
│ │ │ │ +
2017 fvarChannel,
│ │ │ │ +
2018 deviceContext);
│ │ │ │ +
2019 } else {
│ │ │ │ +
2020 // Create an instance on demand (slow)
│ │ │ │ +
2021 instance = Create(srcDesc, dstDesc,
│ │ │ │ +
2022 duDesc, dvDesc,
│ │ │ │ +
2023 duuDesc, duvDesc, dvvDesc,
│ │ │ │ +
2024 deviceContext);
│ │ │ │ +
2025 if (instance) {
│ │ │ │ +
2026 bool r = instance->EvalPatchesFaceVarying(
│ │ │ │ +
2027 srcBuffer, srcDesc,
│ │ │ │ +
2028 dstBuffer, dstDesc,
│ │ │ │ +
2029 duBuffer, duDesc,
│ │ │ │ +
2030 dvBuffer, dvDesc,
│ │ │ │ +
2031 duuBuffer, duuDesc,
│ │ │ │ +
2032 duvBuffer, duvDesc,
│ │ │ │ +
2033 dvvBuffer, dvvDesc,
│ │ │ │ +
2034 numPatchCoords, patchCoords,
│ │ │ │ +
2035 patchTable,
│ │ │ │ +
2036 fvarChannel,
│ │ │ │ +
2037 deviceContext);
│ │ │ │ +
2038 delete instance;
│ │ │ │ +
2039 return r;
│ │ │ │ +
2040 }
│ │ │ │ +
2041 return false;
│ │ │ │ +
2042 }
│ │ │ │ +
2043 }
│ │ │ │ +
│ │ │ │ +
2044
│ │ │ │ +
2104 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
2105 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
2107 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
2108 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
2109 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
2110 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
2111 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
2112 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
2113 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
2114 int numPatchCoords,
│ │ │ │ +
2115 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
2116 PATCH_TABLE *patchTable,
│ │ │ │ +
2117 int fvarChannel,
│ │ │ │ +
2118 MTLContext* deviceContext) const {
│ │ │ │ +
2119
│ │ │ │ +
2120 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc,
│ │ │ │ +
2121 dstBuffer->BindMTLBuffer(deviceContext), dstDesc,
│ │ │ │ +
2122 duBuffer->BindMTLBuffer(deviceContext), duDesc,
│ │ │ │ +
2123 dvBuffer->BindMTLBuffer(deviceContext), dvDesc,
│ │ │ │ +
2124 duuBuffer->BindMTLBuffer(deviceContext), duuDesc,
│ │ │ │ +
2125 duvBuffer->BindMTLBuffer(deviceContext), duvDesc,
│ │ │ │ +
2126 dvvBuffer->BindMTLBuffer(deviceContext), dvvDesc,
│ │ │ │ +
2127 numPatchCoords,
│ │ │ │ +
2128 patchCoords->BindMTLBuffer(deviceContext),
│ │ │ │ +
2129 patchTable->GetFVarPatchArrays(fvarChannel),
│ │ │ │ +
2130 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
│ │ │ │ +
2131 patchTable->GetFVarPatchParamBuffer(fvarChannel),
│ │ │ │ +
2132 fvarChannel,
│ │ │ │ +
2133 deviceContext
│ │ │ │ +
2134 );
│ │ │ │ +
2135 }
│ │ │ │ +
│ │ │ │ +
2136
│ │ │ │ +
2138 bool Compile(BufferDescriptor const &srcDesc,
│ │ │ │ +
2139 BufferDescriptor const &dstDesc,
│ │ │ │ +
2140 BufferDescriptor const &duDesc,
│ │ │ │ +
2141 BufferDescriptor const &dvDesc,
│ │ │ │ +
2142 BufferDescriptor const &duuDesc,
│ │ │ │ +
2143 BufferDescriptor const &duvDesc,
│ │ │ │ +
2144 BufferDescriptor const &dvvDesc,
│ │ │ │ +
2145 MTLContext* context);
│ │ │ │ +
2146
│ │ │ │ +
2148 static void Synchronize(MTLContext* context);
│ │ │ │ +
2149
│ │ │ │ +
2150 private:
│ │ │ │ +
2151
│ │ │ │ +
2152 id<MTLLibrary> _computeLibrary;
│ │ │ │ +
2153 id<MTLComputePipelineState> _evalStencils;
│ │ │ │ +
2154 id<MTLComputePipelineState> _evalPatches;
│ │ │ │ +
2155 id<MTLBuffer> _parameterBuffer;
│ │ │ │ +
2156
│ │ │ │ +
2157 int _workGroupSize;
│ │ │ │ +
2158};
│ │ │ │ +
│ │ │ │ +
2159
│ │ │ │ +
2160} //end namespace Osd
│ │ │ │ +
2161
│ │ │ │ +
2162} //end namespace OPENSUBDIV_VERSION
│ │ │ │ +
2163using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
2164
│ │ │ │ +
2165} //end namespace OpenSubdiv
│ │ │ │ +
2166
│ │ │ │ +
2167#endif // OPENSUBDIV3_OSD_MTL_COMPUTE_EVALUATOR_H
│ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ -
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ +
std::vector< PatchArray > PatchArrayVector
Definition types.h:132
│ │ │ │ +
Stencil table class wrapping the template for compatibility.
│ │ │ │ +
Limit stencil table class wrapping the template for compatibility.
│ │ │ │ +
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ -
static MTLLegacyGregoryPatchTable * Create(Far::PatchTable const *farPatchTable, DEVICE_CONTEXT context)
│ │ │ │ - │ │ │ │ - │ │ │ │ -
static MTLLegacyGregoryPatchTable * Create(Far::PatchTable const *farPatchTable, MTLContext *context)
│ │ │ │ -
void UpdateVertexBuffer(id< MTLBuffer > vbo, int numVertices, int numVertexElements, MTLContext *context)
│ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ +
MTLStencilTable(Far::LimitStencilTable const *stencilTable, MTLContext *context)
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
MTLStencilTable(Far::StencilTable const *stencilTable, MTLContext *context)
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
static MTLStencilTable * Create(STENCIL_TABLE *stencilTable, DEVICE_CONTEXT context)
│ │ │ │ + │ │ │ │ + │ │ │ │ +
bool EvalStencils(id< MTLBuffer > srcBuffer, BufferDescriptor const &srcDesc, id< MTLBuffer > dstBuffer, BufferDescriptor const &dstDesc, id< MTLBuffer > duBuffer, BufferDescriptor const &duDesc, id< MTLBuffer > dvBuffer, BufferDescriptor const &dvDesc, id< MTLBuffer > duuBuffer, BufferDescriptor const &duuDesc, id< MTLBuffer > duvBuffer, BufferDescriptor const &duvDesc, id< MTLBuffer > dvvBuffer, BufferDescriptor const &dvvDesc, id< MTLBuffer > sizesBuffer, id< MTLBuffer > offsetsBuffer, id< MTLBuffer > indicesBuffer, id< MTLBuffer > weightsBuffer, id< MTLBuffer > duWeightsBuffer, id< MTLBuffer > dvWeightsBuffer, id< MTLBuffer > duuWeightsBuffer, id< MTLBuffer > duvWeightsBuffer, id< MTLBuffer > dvvWeightsBuffer, int start, int end, MTLContext *context) const
Dispatch the MTL compute kernel on GPU asynchronously returns false if the kernel hasn't been compile...
│ │ │ │ +
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, MTLComputeEvaluator *instance, MTLContext *context)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ +
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, MTLComputeEvaluator const *instance, MTLContext *context)
Generic static stencil function. This function has a same signature as other device kernels have so t...
│ │ │ │ +
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, MTLComputeEvaluator const *instance, MTLContext *deviceContext)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ + │ │ │ │ + │ │ │ │ +
static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, MTLComputeEvaluator const *instance, MTLContext *context)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ + │ │ │ │ +
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, MTLContext *deviceContext) const
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ +
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, MTLComputeEvaluator const *instance, MTLContext *context)
Generic static stencil function. This function has a same signature as other device kernels have so t...
│ │ │ │ +
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, MTLContext *deviceContext) const
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ +
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, MTLComputeEvaluator const *instance, MTLContext *deviceContext)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ +
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, MTLComputeEvaluator const *instance, MTLContext *deviceContext)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ +
bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, MTLContext *context) const
Generic stencil function.
│ │ │ │ +
bool EvalPatches(id< MTLBuffer > srcBuffer, BufferDescriptor const &srcDesc, id< MTLBuffer > dstBuffer, BufferDescriptor const &dstDesc, id< MTLBuffer > duBuffer, BufferDescriptor const &duDesc, id< MTLBuffer > dvBuffer, BufferDescriptor const &dvDesc, id< MTLBuffer > duuBuffer, BufferDescriptor const &duuDesc, id< MTLBuffer > duvBuffer, BufferDescriptor const &duvDesc, id< MTLBuffer > dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, id< MTLBuffer > patchCoordsBuffer, const PatchArrayVector &patchArrays, id< MTLBuffer > patchIndexBuffer, id< MTLBuffer > patchParamsBuffer, MTLContext *context) const
│ │ │ │ +
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, MTLContext *deviceContext) const
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ +
static void Synchronize(MTLContext *context)
Wait for the dispatched kernel to finish.
│ │ │ │ +
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, MTLContext *context) const
Generic stencil function.
│ │ │ │ +
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, MTLComputeEvaluator *instance, MTLContext *context)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ +
bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, MTLContext *deviceContext) const
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ +
static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, MTLComputeEvaluator const *instance, MTLContext *deviceContext)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ +
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, MTLContext *context) const
Generic stencil function.
│ │ │ │ +
bool EvalStencils(id< MTLBuffer > srcBuffer, BufferDescriptor const &srcDesc, id< MTLBuffer > dstBuffer, BufferDescriptor const &dstDesc, id< MTLBuffer > duBuffer, BufferDescriptor const &duDesc, id< MTLBuffer > dvBuffer, BufferDescriptor const &dvDesc, id< MTLBuffer > sizesBuffer, id< MTLBuffer > offsetsBuffer, id< MTLBuffer > indicesBuffer, id< MTLBuffer > weightsBuffer, id< MTLBuffer > duWeightsBuffer, id< MTLBuffer > dvWeightsBuffer, int start, int end, MTLContext *context) const
Dispatch the MTL compute kernel on GPU asynchronously returns false if the kernel hasn't been compile...
│ │ │ │ +
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, MTLComputeEvaluator const *instance, MTLContext *deviceContext)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ +
bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, MTLContext *context) const
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ +
static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, MTLComputeEvaluator const *instance, MTLContext *context)
Generic static stencil function. This function has a same signature as other device kernels have so t...
│ │ │ │ +
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, MTLComputeEvaluator const *instance, MTLContext *deviceContext)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ +
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, MTLContext *context) const
Generic limit eval function with derivatives. This function has a same signature as other device kern...
│ │ │ │ +
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, MTLContext *context) const
Generic limit eval function with derivatives. This function has a same signature as other device kern...
│ │ │ │ +
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, MTLContext *deviceContext) const
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ +
bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, MTLContext *deviceContext) const
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ +
static MTLComputeEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, MTLContext *context)
│ │ │ │ +
static MTLComputeEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, MTLContext *context)
│ │ │ │ +
bool Compile(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, MTLContext *context)
Configure compute pipline state. Returns false if it fails to create the pipeline state.
│ │ │ │ +
bool EvalPatches(id< MTLBuffer > srcBuffer, BufferDescriptor const &srcDesc, id< MTLBuffer > dstBuffer, BufferDescriptor const &dstDesc, id< MTLBuffer > duBuffer, BufferDescriptor const &duDesc, id< MTLBuffer > dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, id< MTLBuffer > patchCoordsBuffer, const PatchArrayVector &patchArrays, id< MTLBuffer > patchIndexBuffer, id< MTLBuffer > patchParamsBuffer, MTLContext *context) const
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,12 +1,12 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -mtlLegacyGregoryPatchTable.h │ │ │ │ │ +mtlComputeEvaluator.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ 2// Copyright 2013 Pixar │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ @@ -24,127 +24,1382 @@ │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ 24 │ │ │ │ │ -25#ifndef OPENSUBDIV3_OSD_MTL_LEGACY_GREGORY_PATCH_TABLE_H │ │ │ │ │ -26#define OPENSUBDIV3_OSD_MTL_LEGACY_GREGORY_PATCH_TABLE_H │ │ │ │ │ +25#ifndef OPENSUBDIV3_OSD_MTL_COMPUTE_EVALUATOR_H │ │ │ │ │ +26#define OPENSUBDIV3_OSD_MTL_COMPUTE_EVALUATOR_H │ │ │ │ │ 27 │ │ │ │ │ 28#include "../version.h" │ │ │ │ │ -29#include "../far/patchTable.h" │ │ │ │ │ -30#include "../osd/nonCopyable.h" │ │ │ │ │ -31#include "../osd/mtlCommon.h" │ │ │ │ │ -32 │ │ │ │ │ -33@protocol MTLDevice; │ │ │ │ │ -34@protocol MTLBuffer; │ │ │ │ │ -35 │ │ │ │ │ -36namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ -37namespace OPENSUBDIV_VERSION { │ │ │ │ │ +29 │ │ │ │ │ +30#include "../osd/types.h" │ │ │ │ │ +31#include "../osd/bufferDescriptor.h" │ │ │ │ │ +32#include "../osd/mtlCommon.h" │ │ │ │ │ +33 │ │ │ │ │ +34@protocol MTLDevice; │ │ │ │ │ +35@protocol MTLBuffer; │ │ │ │ │ +36@protocol MTLLibrary; │ │ │ │ │ +37@protocol MTLComputePipelineState; │ │ │ │ │ 38 │ │ │ │ │ -39namespace Osd { │ │ │ │ │ -40 │ │ │ │ │ -_4_1class _M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -42: private NonCopyable │ │ │ │ │ -43{ │ │ │ │ │ -44public: │ │ │ │ │ -_4_5 _~_M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e(); │ │ │ │ │ -46 │ │ │ │ │ -47 template │ │ │ │ │ -_4_8 static _M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e* _C_r_e_a_t_e(_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e const* │ │ │ │ │ -farPatchTable, DEVICE_CONTEXT context) { │ │ │ │ │ -49 return Create(farPatchTable, context); │ │ │ │ │ -50 } │ │ │ │ │ -51 │ │ │ │ │ -_5_2 static _M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e* _C_r_e_a_t_e(_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e const* │ │ │ │ │ -farPatchTable, _M_T_L_C_o_n_t_e_x_t* context); │ │ │ │ │ -53 │ │ │ │ │ -_5_4 void _U_p_d_a_t_e_V_e_r_t_e_x_B_u_f_f_e_r(id vbo, int numVertices, int │ │ │ │ │ -numVertexElements, _M_T_L_C_o_n_t_e_x_t* context); │ │ │ │ │ -55 │ │ │ │ │ -_5_6 id _G_e_t_V_e_r_t_e_x_B_u_f_f_e_r() const │ │ │ │ │ -57 { │ │ │ │ │ -58 return _vertexBuffer; │ │ │ │ │ -59 } │ │ │ │ │ +39namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ +40namespace OPENSUBDIV_VERSION { │ │ │ │ │ +41 │ │ │ │ │ +42namespace Far { │ │ │ │ │ +43 class PatchTable; │ │ │ │ │ +44 class StencilTable; │ │ │ │ │ +45 class LimitStencilTable; │ │ │ │ │ +46} │ │ │ │ │ +47 │ │ │ │ │ +48namespace Osd { │ │ │ │ │ +49 │ │ │ │ │ +_5_0class _M_T_L_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +51{ │ │ │ │ │ +52public: │ │ │ │ │ +53 template │ │ │ │ │ +_5_4 static _M_T_L_S_t_e_n_c_i_l_T_a_b_l_e* _C_r_e_a_t_e(STENCIL_TABLE* stencilTable, │ │ │ │ │ +55 DEVICE_CONTEXT context) │ │ │ │ │ +56 { │ │ │ │ │ +57 return new _M_T_L_S_t_e_n_c_i_l_T_a_b_l_e(stencilTable, context); │ │ │ │ │ +58 } │ │ │ │ │ +59 │ │ │ │ │ 60 │ │ │ │ │ -_6_1 id _G_e_t_V_e_r_t_e_x_V_a_l_e_n_c_e_B_u_f_f_e_r() const │ │ │ │ │ -62 { │ │ │ │ │ -63 return _vertexValenceBuffer; │ │ │ │ │ -64 } │ │ │ │ │ -65 │ │ │ │ │ -_6_6 id _G_e_t_Q_u_a_d_O_f_f_s_e_t_s_B_u_f_f_e_r() const │ │ │ │ │ -67 { │ │ │ │ │ -68 return _quadOffsetsBuffer; │ │ │ │ │ -69 } │ │ │ │ │ -70 │ │ │ │ │ -_7_1 int _G_e_t_Q_u_a_d_O_f_f_s_e_t_s_B_a_s_e(_F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_:_:_T_y_p_e type) │ │ │ │ │ -72 { │ │ │ │ │ -73 if(type == _F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_:_:_G_R_E_G_O_R_Y___B_O_U_N_D_A_R_Y) │ │ │ │ │ -74 return _quadOffsetsBase[1]; │ │ │ │ │ -75 return _quadOffsetsBase[0]; │ │ │ │ │ -76 } │ │ │ │ │ -77 │ │ │ │ │ -78private: │ │ │ │ │ -79 id _vertexBuffer; │ │ │ │ │ -80 id _vertexValenceBuffer; │ │ │ │ │ -81 id _quadOffsetsBuffer; │ │ │ │ │ -82 int _quadOffsetsBase[2]; │ │ │ │ │ -83}; │ │ │ │ │ -84 │ │ │ │ │ -85} //end namespace Osd │ │ │ │ │ -86 │ │ │ │ │ -87} //end namespace OPENSUBDIV_VERSION │ │ │ │ │ -88using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -89 │ │ │ │ │ -90} //end namespace OpenSuddiv │ │ │ │ │ -91 │ │ │ │ │ -92#endif // OPENSUBDIV3_OSD_MTL_LEGACY_GREGORY_PATCH_TABLE_H │ │ │ │ │ +_6_1 _M_T_L_S_t_e_n_c_i_l_T_a_b_l_e(_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e const* stencilTable, _M_T_L_C_o_n_t_e_x_t* context); │ │ │ │ │ +_6_2 _M_T_L_S_t_e_n_c_i_l_T_a_b_l_e(_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e const* stencilTable, _M_T_L_C_o_n_t_e_x_t* │ │ │ │ │ +context); │ │ │ │ │ +_6_3 _~_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e(); │ │ │ │ │ +64 │ │ │ │ │ +_6_5 id _G_e_t_S_i_z_e_s_B_u_f_f_e_r() const { return _sizesBuffer; } │ │ │ │ │ +_6_6 id _G_e_t_O_f_f_s_e_t_s_B_u_f_f_e_r() const { return _offsetsBuffer; } │ │ │ │ │ +_6_7 id _G_e_t_I_n_d_i_c_e_s_B_u_f_f_e_r() const { return _indicesBuffer; } │ │ │ │ │ +_6_8 id _G_e_t_W_e_i_g_h_t_s_B_u_f_f_e_r() const { return _weightsBuffer; } │ │ │ │ │ +_6_9 id _G_e_t_D_u_W_e_i_g_h_t_s_B_u_f_f_e_r() const { return _duWeightsBuffer; } │ │ │ │ │ +_7_0 id _G_e_t_D_v_W_e_i_g_h_t_s_B_u_f_f_e_r() const { return _dvWeightsBuffer; } │ │ │ │ │ +_7_1 id _G_e_t_D_u_u_W_e_i_g_h_t_s_B_u_f_f_e_r() const { return _duuWeightsBuffer; } │ │ │ │ │ +_7_2 id _G_e_t_D_u_v_W_e_i_g_h_t_s_B_u_f_f_e_r() const { return _duvWeightsBuffer; } │ │ │ │ │ +_7_3 id _G_e_t_D_v_v_W_e_i_g_h_t_s_B_u_f_f_e_r() const { return _dvvWeightsBuffer; } │ │ │ │ │ +74 │ │ │ │ │ +_7_5 int _G_e_t_N_u_m_S_t_e_n_c_i_l_s() const { return _numStencils; } │ │ │ │ │ +76 │ │ │ │ │ +77private: │ │ │ │ │ +78 id _sizesBuffer; │ │ │ │ │ +79 id _offsetsBuffer; │ │ │ │ │ +80 id _indicesBuffer; │ │ │ │ │ +81 id _weightsBuffer; │ │ │ │ │ +82 id _duWeightsBuffer; │ │ │ │ │ +83 id _dvWeightsBuffer; │ │ │ │ │ +84 id _duuWeightsBuffer; │ │ │ │ │ +85 id _duvWeightsBuffer; │ │ │ │ │ +86 id _dvvWeightsBuffer; │ │ │ │ │ +87 │ │ │ │ │ +88 int _numStencils; │ │ │ │ │ +89}; │ │ │ │ │ +90 │ │ │ │ │ +_9_1class _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r │ │ │ │ │ +92{ │ │ │ │ │ +93public: │ │ │ │ │ +_9_4 typedef bool _I_n_s_t_a_n_t_i_a_t_a_b_l_e; │ │ │ │ │ +95 │ │ │ │ │ +_9_6 static _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r * _C_r_e_a_t_e(_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +97 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +98 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +99 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +100 _M_T_L_C_o_n_t_e_x_t* context); │ │ │ │ │ +101 │ │ │ │ │ +_1_0_2 static _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r * _C_r_e_a_t_e(_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +103 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +104 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +105 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +106 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +107 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +108 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +109 _M_T_L_C_o_n_t_e_x_t* context); │ │ │ │ │ +110 │ │ │ │ │ +_1_1_1 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r(); │ │ │ │ │ +_1_1_2 _~_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r(); │ │ │ │ │ +113 │ │ │ │ │ +119 │ │ │ │ │ +148 template │ │ │ │ │ +_1_4_9 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ +150 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +151 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +152 STENCIL_TABLE const *stencilTable, │ │ │ │ │ +153 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +154 _M_T_L_C_o_n_t_e_x_t* context) │ │ │ │ │ +155 { │ │ │ │ │ +156 if (instance) { │ │ │ │ │ +157 return instance->_E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer, srcDesc, │ │ │ │ │ +158 dstBuffer, dstDesc, │ │ │ │ │ +159 stencilTable, │ │ │ │ │ +160 context); │ │ │ │ │ +161 } else { │ │ │ │ │ +162 // Create an instance on demand (slow) │ │ │ │ │ +163 instance = Create(srcDesc, dstDesc, │ │ │ │ │ +164 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +165 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +166 context); │ │ │ │ │ +167 if (instance) { │ │ │ │ │ +168 bool r = instance->_E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer, srcDesc, │ │ │ │ │ +169 dstBuffer, dstDesc, │ │ │ │ │ +170 stencilTable, │ │ │ │ │ +171 context); │ │ │ │ │ +172 delete instance; │ │ │ │ │ +173 return r; │ │ │ │ │ +174 } │ │ │ │ │ +175 return false; │ │ │ │ │ +176 } │ │ │ │ │ +177 } │ │ │ │ │ +178 │ │ │ │ │ +219 template │ │ │ │ │ +_2_2_0 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ +221 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +222 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +223 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +224 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +225 STENCIL_TABLE const *stencilTable, │ │ │ │ │ +226 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +227 _M_T_L_C_o_n_t_e_x_t* context) { │ │ │ │ │ +228 │ │ │ │ │ +229 if (instance) { │ │ │ │ │ +230 return instance->_E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer, srcDesc, │ │ │ │ │ +231 dstBuffer, dstDesc, │ │ │ │ │ +232 duBuffer, duDesc, │ │ │ │ │ +233 dvBuffer, dvDesc, │ │ │ │ │ +234 stencilTable, │ │ │ │ │ +235 context); │ │ │ │ │ +236 } else { │ │ │ │ │ +237 // Create an instance on demand (slow) │ │ │ │ │ +238 instance = Create(srcDesc, dstDesc, duDesc, dvDesc, context); │ │ │ │ │ +239 if (instance) { │ │ │ │ │ +240 bool r = instance->_E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer, srcDesc, │ │ │ │ │ +241 dstBuffer, dstDesc, │ │ │ │ │ +242 duBuffer, duDesc, │ │ │ │ │ +243 dvBuffer, dvDesc, │ │ │ │ │ +244 stencilTable, │ │ │ │ │ +245 context); │ │ │ │ │ +246 delete instance; │ │ │ │ │ +247 return r; │ │ │ │ │ +248 } │ │ │ │ │ +249 return false; │ │ │ │ │ +250 } │ │ │ │ │ +251 } │ │ │ │ │ +252 │ │ │ │ │ +311 template │ │ │ │ │ +_3_1_2 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ +313 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +314 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +315 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +316 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +317 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +318 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +319 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +320 STENCIL_TABLE const *stencilTable, │ │ │ │ │ +321 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +322 _M_T_L_C_o_n_t_e_x_t* context) { │ │ │ │ │ +323 │ │ │ │ │ +324 if (instance) { │ │ │ │ │ +325 return instance->_E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer, srcDesc, │ │ │ │ │ +326 dstBuffer, dstDesc, │ │ │ │ │ +327 duBuffer, duDesc, │ │ │ │ │ +328 dvBuffer, dvDesc, │ │ │ │ │ +329 duuBuffer, duuDesc, │ │ │ │ │ +330 duvBuffer, duvDesc, │ │ │ │ │ +331 dvvBuffer, dvvDesc, │ │ │ │ │ +332 stencilTable, │ │ │ │ │ +333 context); │ │ │ │ │ +334 } else { │ │ │ │ │ +335 // Create an instance on demand (slow) │ │ │ │ │ +336 instance = Create(srcDesc, dstDesc, duDesc, dvDesc, │ │ │ │ │ +337 duuDesc, duvDesc, dvvDesc, context); │ │ │ │ │ +338 if (instance) { │ │ │ │ │ +339 bool r = instance->_E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer, srcDesc, │ │ │ │ │ +340 dstBuffer, dstDesc, │ │ │ │ │ +341 duBuffer, duDesc, │ │ │ │ │ +342 dvBuffer, dvDesc, │ │ │ │ │ +343 duuBuffer, duuDesc, │ │ │ │ │ +344 duvBuffer, duvDesc, │ │ │ │ │ +345 dvvBuffer, dvvDesc, │ │ │ │ │ +346 stencilTable, │ │ │ │ │ +347 context); │ │ │ │ │ +348 delete instance; │ │ │ │ │ +349 return r; │ │ │ │ │ +350 } │ │ │ │ │ +351 return false; │ │ │ │ │ +352 } │ │ │ │ │ +353 } │ │ │ │ │ +354 │ │ │ │ │ +375 template │ │ │ │ │ +_3_7_6 bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ +377 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +378 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +379 STENCIL_TABLE const *stencilTable, │ │ │ │ │ +380 _M_T_L_C_o_n_t_e_x_t* context) const │ │ │ │ │ +381 { │ │ │ │ │ +382 return EvalStencils(srcBuffer->BindMTLBuffer(context), srcDesc, │ │ │ │ │ +383 dstBuffer->BindMTLBuffer(context), dstDesc, │ │ │ │ │ +384 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +385 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +386 stencilTable->GetSizesBuffer(), │ │ │ │ │ +387 stencilTable->GetOffsetsBuffer(), │ │ │ │ │ +388 stencilTable->GetIndicesBuffer(), │ │ │ │ │ +389 stencilTable->GetWeightsBuffer(), │ │ │ │ │ +390 0, │ │ │ │ │ +391 0, │ │ │ │ │ +392 /* start = */ 0, │ │ │ │ │ +393 /* end = */ stencilTable->GetNumStencils(), │ │ │ │ │ +394 context); │ │ │ │ │ +395 } │ │ │ │ │ +396 │ │ │ │ │ +429 template │ │ │ │ │ +_4_3_0 bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ +431 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +432 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +433 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +434 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +435 STENCIL_TABLE const *stencilTable, │ │ │ │ │ +436 _M_T_L_C_o_n_t_e_x_t* context) const │ │ │ │ │ +437 { │ │ │ │ │ +438 return EvalStencils(srcBuffer->BindMTLBuffer(context), srcDesc, │ │ │ │ │ +439 dstBuffer->BindMTLBuffer(context), dstDesc, │ │ │ │ │ +440 duBuffer->BindMTLBuffer(context), duDesc, │ │ │ │ │ +441 dvBuffer->BindMTLBuffer(context), dvDesc, │ │ │ │ │ +442 stencilTable->GetSizesBuffer(), │ │ │ │ │ +443 stencilTable->GetOffsetsBuffer(), │ │ │ │ │ +444 stencilTable->GetIndicesBuffer(), │ │ │ │ │ +445 stencilTable->GetWeightsBuffer(), │ │ │ │ │ +446 stencilTable->GetDuWeightsBuffer(), │ │ │ │ │ +447 stencilTable->GetDvWeightsBuffer(), │ │ │ │ │ +448 /* start = */ 0, │ │ │ │ │ +449 /* end = */ stencilTable->GetNumStencils(), │ │ │ │ │ +450 context); │ │ │ │ │ +451 } │ │ │ │ │ +452 │ │ │ │ │ +503 template │ │ │ │ │ +_5_0_4 bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ +505 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +506 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +507 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +508 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +509 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +510 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +511 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +512 STENCIL_TABLE const *stencilTable, │ │ │ │ │ +513 _M_T_L_C_o_n_t_e_x_t* context) const │ │ │ │ │ +514 { │ │ │ │ │ +515 return EvalStencils(srcBuffer->BindMTLBuffer(context), srcDesc, │ │ │ │ │ +516 dstBuffer->BindMTLBuffer(context), dstDesc, │ │ │ │ │ +517 duBuffer->BindMTLBuffer(context), duDesc, │ │ │ │ │ +518 dvBuffer->BindMTLBuffer(context), dvDesc, │ │ │ │ │ +519 duuBuffer->BindMTLBuffer(context), duuDesc, │ │ │ │ │ +520 duvBuffer->BindMTLBuffer(context), duvDesc, │ │ │ │ │ +521 dvvBuffer->BindMTLBuffer(context), dvvDesc, │ │ │ │ │ +522 stencilTable->GetSizesBuffer(), │ │ │ │ │ +523 stencilTable->GetOffsetsBuffer(), │ │ │ │ │ +524 stencilTable->GetIndicesBuffer(), │ │ │ │ │ +525 stencilTable->GetWeightsBuffer(), │ │ │ │ │ +526 stencilTable->GetDuWeightsBuffer(), │ │ │ │ │ +527 stencilTable->GetDvWeightsBuffer(), │ │ │ │ │ +528 stencilTable->GetDuuWeightsBuffer(), │ │ │ │ │ +529 stencilTable->GetDuvWeightsBuffer(), │ │ │ │ │ +530 stencilTable->GetDvvWeightsBuffer(), │ │ │ │ │ +531 /* start = */ 0, │ │ │ │ │ +532 /* end = */ stencilTable->GetNumStencils(), │ │ │ │ │ +533 context); │ │ │ │ │ +534 } │ │ │ │ │ +535 │ │ │ │ │ +_5_7_4 bool _E_v_a_l_S_t_e_n_c_i_l_s(id srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +575 id dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +576 id duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +577 id dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +578 id sizesBuffer, │ │ │ │ │ +579 id offsetsBuffer, │ │ │ │ │ +580 id indicesBuffer, │ │ │ │ │ +581 id weightsBuffer, │ │ │ │ │ +582 id duWeightsBuffer, │ │ │ │ │ +583 id dvWeightsBuffer, │ │ │ │ │ +584 int start, │ │ │ │ │ +585 int end, │ │ │ │ │ +586 _M_T_L_C_o_n_t_e_x_t* context) const; │ │ │ │ │ +587 │ │ │ │ │ +_6_4_4 bool _E_v_a_l_S_t_e_n_c_i_l_s(id srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +645 id dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +646 id duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +647 id dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +648 id duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +649 id duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +650 id dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +651 id sizesBuffer, │ │ │ │ │ +652 id offsetsBuffer, │ │ │ │ │ +653 id indicesBuffer, │ │ │ │ │ +654 id weightsBuffer, │ │ │ │ │ +655 id duWeightsBuffer, │ │ │ │ │ +656 id dvWeightsBuffer, │ │ │ │ │ +657 id duuWeightsBuffer, │ │ │ │ │ +658 id duvWeightsBuffer, │ │ │ │ │ +659 id dvvWeightsBuffer, │ │ │ │ │ +660 int start, │ │ │ │ │ +661 int end, │ │ │ │ │ +662 _M_T_L_C_o_n_t_e_x_t* context) const; │ │ │ │ │ +663 │ │ │ │ │ +669 │ │ │ │ │ +703 template │ │ │ │ │ +_7_0_5 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ +706 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +707 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +708 int numPatchCoords, │ │ │ │ │ +709 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +710 PATCH_TABLE *patchTable, │ │ │ │ │ +711 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +712 _M_T_L_C_o_n_t_e_x_t* context) { │ │ │ │ │ +713 │ │ │ │ │ +714 if (instance) { │ │ │ │ │ +715 return instance->_E_v_a_l_P_a_t_c_h_e_s(srcBuffer, srcDesc, │ │ │ │ │ +716 dstBuffer, dstDesc, │ │ │ │ │ +717 numPatchCoords, patchCoords, │ │ │ │ │ +718 patchTable, │ │ │ │ │ +719 context); │ │ │ │ │ +720 } else { │ │ │ │ │ +721 // Create an instance on demand (slow) │ │ │ │ │ +722 instance = Create(srcDesc, dstDesc, │ │ │ │ │ +723 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +724 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +725 context); │ │ │ │ │ +726 if (instance) { │ │ │ │ │ +727 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s(srcBuffer, srcDesc, │ │ │ │ │ +728 dstBuffer, dstDesc, │ │ │ │ │ +729 numPatchCoords, patchCoords, │ │ │ │ │ +730 patchTable, │ │ │ │ │ +731 context); │ │ │ │ │ +732 delete instance; │ │ │ │ │ +733 return r; │ │ │ │ │ +734 } │ │ │ │ │ +735 return false; │ │ │ │ │ +736 } │ │ │ │ │ +737 } │ │ │ │ │ +738 │ │ │ │ │ +784 template │ │ │ │ │ +_7_8_6 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ +787 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +788 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +789 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +790 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +791 int numPatchCoords, │ │ │ │ │ +792 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +793 PATCH_TABLE *patchTable, │ │ │ │ │ +794 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r* instance, │ │ │ │ │ +795 _M_T_L_C_o_n_t_e_x_t* context) { │ │ │ │ │ +796 │ │ │ │ │ +797 if (instance) { │ │ │ │ │ +798 return instance->_E_v_a_l_P_a_t_c_h_e_s(srcBuffer, srcDesc, │ │ │ │ │ +799 dstBuffer, dstDesc, │ │ │ │ │ +800 duBuffer, duDesc, │ │ │ │ │ +801 dvBuffer, dvDesc, │ │ │ │ │ +802 numPatchCoords, patchCoords, │ │ │ │ │ +803 patchTable, │ │ │ │ │ +804 context); │ │ │ │ │ +805 } else { │ │ │ │ │ +806 // Create an instance on demand (slow) │ │ │ │ │ +807 instance = Create(srcDesc, dstDesc, │ │ │ │ │ +808 duDesc, dvDesc, context); │ │ │ │ │ +809 if (instance) { │ │ │ │ │ +810 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s(srcBuffer, srcDesc, │ │ │ │ │ +811 dstBuffer, dstDesc, │ │ │ │ │ +812 duBuffer, duDesc, │ │ │ │ │ +813 dvBuffer, dvDesc, │ │ │ │ │ +814 numPatchCoords, patchCoords, │ │ │ │ │ +815 patchTable, │ │ │ │ │ +816 context); │ │ │ │ │ +817 delete instance; │ │ │ │ │ +818 return r; │ │ │ │ │ +819 } │ │ │ │ │ +820 return false; │ │ │ │ │ +821 } │ │ │ │ │ +822 } │ │ │ │ │ +823 │ │ │ │ │ +887 template │ │ │ │ │ +_8_8_9 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ +890 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +891 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +892 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +893 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +894 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +895 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +896 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +897 int numPatchCoords, │ │ │ │ │ +898 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +899 PATCH_TABLE *patchTable, │ │ │ │ │ +900 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r* instance, │ │ │ │ │ +901 _M_T_L_C_o_n_t_e_x_t* context) { │ │ │ │ │ +902 │ │ │ │ │ +903 if (instance) { │ │ │ │ │ +904 return instance->_E_v_a_l_P_a_t_c_h_e_s(srcBuffer, srcDesc, │ │ │ │ │ +905 dstBuffer, dstDesc, │ │ │ │ │ +906 duBuffer, duDesc, │ │ │ │ │ +907 dvBuffer, dvDesc, │ │ │ │ │ +908 duuBuffer, duuDesc, │ │ │ │ │ +909 duvBuffer, duvDesc, │ │ │ │ │ +910 dvvBuffer, dvvDesc, │ │ │ │ │ +911 numPatchCoords, patchCoords, │ │ │ │ │ +912 patchTable, │ │ │ │ │ +913 context); │ │ │ │ │ +914 } else { │ │ │ │ │ +915 // Create an instance on demand (slow) │ │ │ │ │ +916 instance = Create(srcDesc, dstDesc, │ │ │ │ │ +917 duDesc, dvDesc, │ │ │ │ │ +918 duuDesc, duvDesc, dvvDesc, context); │ │ │ │ │ +919 if (instance) { │ │ │ │ │ +920 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s(srcBuffer, srcDesc, │ │ │ │ │ +921 dstBuffer, dstDesc, │ │ │ │ │ +922 duBuffer, duDesc, │ │ │ │ │ +923 dvBuffer, dvDesc, │ │ │ │ │ +924 duuBuffer, duuDesc, │ │ │ │ │ +925 duvBuffer, duvDesc, │ │ │ │ │ +926 dvvBuffer, dvvDesc, │ │ │ │ │ +927 numPatchCoords, patchCoords, │ │ │ │ │ +928 patchTable, │ │ │ │ │ +929 context); │ │ │ │ │ +930 delete instance; │ │ │ │ │ +931 return r; │ │ │ │ │ +932 } │ │ │ │ │ +933 return false; │ │ │ │ │ +934 } │ │ │ │ │ +935 } │ │ │ │ │ +936 │ │ │ │ │ +964 template │ │ │ │ │ +_9_6_6 bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ +967 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +968 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +969 int numPatchCoords, │ │ │ │ │ +970 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +971 PATCH_TABLE *patchTable, │ │ │ │ │ +972 _M_T_L_C_o_n_t_e_x_t* context) const { │ │ │ │ │ +973 │ │ │ │ │ +974 return EvalPatches(srcBuffer->BindMTLBuffer(context), srcDesc, │ │ │ │ │ +975 dstBuffer->BindMTLBuffer(context), dstDesc, │ │ │ │ │ +976 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +977 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +978 numPatchCoords, │ │ │ │ │ +979 patchCoords->BindMTLBuffer(context), │ │ │ │ │ +980 patchTable->GetPatchArrays(), │ │ │ │ │ +981 patchTable->GetPatchIndexBuffer(), │ │ │ │ │ +982 patchTable->GetPatchParamBuffer(), │ │ │ │ │ +983 context); │ │ │ │ │ +984 } │ │ │ │ │ +985 │ │ │ │ │ +1023 template │ │ │ │ │ +_1_0_2_5 bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ +1026 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1027 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1028 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1029 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1030 int numPatchCoords, │ │ │ │ │ +1031 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1032 PATCH_TABLE *patchTable, │ │ │ │ │ +1033 _M_T_L_C_o_n_t_e_x_t* context) const { │ │ │ │ │ +1034 │ │ │ │ │ +1035 return EvalPatches(srcBuffer->BindMTLBuffer(context), srcDesc, │ │ │ │ │ +1036 dstBuffer->BindMTLBuffer(context), dstDesc, │ │ │ │ │ +1037 duBuffer->BindMTLBuffer(context), duDesc, │ │ │ │ │ +1038 dvBuffer->BindMTLBuffer(context), dvDesc, │ │ │ │ │ +1039 numPatchCoords, │ │ │ │ │ +1040 patchCoords->BindMTLBuffer(context), │ │ │ │ │ +1041 patchTable->GetPatchArrays(), │ │ │ │ │ +1042 patchTable->GetPatchIndexBuffer(), │ │ │ │ │ +1043 patchTable->GetPatchParamBuffer(), │ │ │ │ │ +1044 context); │ │ │ │ │ +1045 } │ │ │ │ │ +1046 │ │ │ │ │ +1102 template │ │ │ │ │ +_1_1_0_4 bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ +1105 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1106 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1107 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1108 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1109 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +1110 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +1111 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +1112 int numPatchCoords, │ │ │ │ │ +1113 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1114 PATCH_TABLE *patchTable, │ │ │ │ │ +1115 _M_T_L_C_o_n_t_e_x_t* context) const { │ │ │ │ │ +1116 │ │ │ │ │ +1117 return EvalPatches(srcBuffer->BindMTLBuffer(context), srcDesc, │ │ │ │ │ +1118 dstBuffer->BindMTLBuffer(context), dstDesc, │ │ │ │ │ +1119 duBuffer->BindMTLBuffer(context), duDesc, │ │ │ │ │ +1120 dvBuffer->BindMTLBuffer(context), dvDesc, │ │ │ │ │ +1121 duuBuffer->BindMTLBuffer(context), duuDesc, │ │ │ │ │ +1122 duvBuffer->BindMTLBuffer(context), duvDesc, │ │ │ │ │ +1123 dvvBuffer->BindMTLBuffer(context), dvvDesc, │ │ │ │ │ +1124 numPatchCoords, │ │ │ │ │ +1125 patchCoords->BindMTLBuffer(context), │ │ │ │ │ +1126 patchTable->GetPatchArrays(), │ │ │ │ │ +1127 patchTable->GetPatchIndexBuffer(), │ │ │ │ │ +1128 patchTable->GetPatchParamBuffer(), │ │ │ │ │ +1129 context); │ │ │ │ │ +1130 } │ │ │ │ │ +1131 │ │ │ │ │ +_1_1_3_2 bool _E_v_a_l_P_a_t_c_h_e_s(id srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1133 id dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1134 id duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1135 id dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1136 int numPatchCoords, │ │ │ │ │ +1137 id patchCoordsBuffer, │ │ │ │ │ +1138 const _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r &patchArrays, │ │ │ │ │ +1139 id patchIndexBuffer, │ │ │ │ │ +1140 id patchParamsBuffer, │ │ │ │ │ +1141 _M_T_L_C_o_n_t_e_x_t* context) const; │ │ │ │ │ +1142 │ │ │ │ │ +_1_1_4_3 bool _E_v_a_l_P_a_t_c_h_e_s(id srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1144 id dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1145 id duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1146 id dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1147 id duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +1148 id duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +1149 id dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +1150 int numPatchCoords, │ │ │ │ │ +1151 id patchCoordsBuffer, │ │ │ │ │ +1152 const _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r &patchArrays, │ │ │ │ │ +1153 id patchIndexBuffer, │ │ │ │ │ +1154 id patchParamsBuffer, │ │ │ │ │ +1155 _M_T_L_C_o_n_t_e_x_t* context) const; │ │ │ │ │ +1156 │ │ │ │ │ +1190 template │ │ │ │ │ +_1_1_9_2 static bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1193 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1194 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1195 int numPatchCoords, │ │ │ │ │ +1196 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1197 PATCH_TABLE *patchTable, │ │ │ │ │ +1198 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +1199 _M_T_L_C_o_n_t_e_x_t* deviceContext) { │ │ │ │ │ +1200 │ │ │ │ │ +1201 if (instance) { │ │ │ │ │ +1202 return instance->_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1203 srcBuffer, srcDesc, │ │ │ │ │ +1204 dstBuffer, dstDesc, │ │ │ │ │ +1205 numPatchCoords, patchCoords, │ │ │ │ │ +1206 patchTable, │ │ │ │ │ +1207 deviceContext); │ │ │ │ │ +1208 } else { │ │ │ │ │ +1209 // Create an instance on demand (slow) │ │ │ │ │ +1210 instance = Create(srcDesc, dstDesc, │ │ │ │ │ +1211 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +1212 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +1213 deviceContext); │ │ │ │ │ +1214 if (instance) { │ │ │ │ │ +1215 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1216 srcBuffer, srcDesc, │ │ │ │ │ +1217 dstBuffer, dstDesc, │ │ │ │ │ +1218 numPatchCoords, patchCoords, │ │ │ │ │ +1219 patchTable, │ │ │ │ │ +1220 deviceContext); │ │ │ │ │ +1221 delete instance; │ │ │ │ │ +1222 return r; │ │ │ │ │ +1223 } │ │ │ │ │ +1224 return false; │ │ │ │ │ +1225 } │ │ │ │ │ +1226 } │ │ │ │ │ +1227 │ │ │ │ │ +1255 template │ │ │ │ │ +_1_2_5_7 bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1258 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1259 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1260 int numPatchCoords, │ │ │ │ │ +1261 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1262 PATCH_TABLE *patchTable, │ │ │ │ │ +1263 _M_T_L_C_o_n_t_e_x_t* deviceContext) const { │ │ │ │ │ +1264 │ │ │ │ │ +1265 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc, │ │ │ │ │ +1266 dstBuffer->BindMTLBuffer(deviceContext), dstDesc, │ │ │ │ │ +1267 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +1268 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +1269 numPatchCoords, │ │ │ │ │ +1270 patchCoords->BindMTLBuffer(deviceContext), │ │ │ │ │ +1271 patchTable->GetVaryingPatchArrays(), │ │ │ │ │ +1272 patchTable->GetVaryingPatchIndexBuffer(), │ │ │ │ │ +1273 patchTable->GetPatchParamBuffer(), │ │ │ │ │ +1274 deviceContext │ │ │ │ │ +1275 ); │ │ │ │ │ +1276 } │ │ │ │ │ +1277 │ │ │ │ │ +1323 template │ │ │ │ │ +_1_3_2_5 static bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1326 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1327 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1328 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1329 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1330 int numPatchCoords, │ │ │ │ │ +1331 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1332 PATCH_TABLE *patchTable, │ │ │ │ │ +1333 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +1334 _M_T_L_C_o_n_t_e_x_t* deviceContext) { │ │ │ │ │ +1335 │ │ │ │ │ +1336 if (instance) { │ │ │ │ │ +1337 return instance->_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1338 srcBuffer, srcDesc, │ │ │ │ │ +1339 dstBuffer, dstDesc, │ │ │ │ │ +1340 duBuffer, duDesc, │ │ │ │ │ +1341 dvBuffer, dvDesc, │ │ │ │ │ +1342 numPatchCoords, patchCoords, │ │ │ │ │ +1343 patchTable, │ │ │ │ │ +1344 deviceContext); │ │ │ │ │ +1345 } else { │ │ │ │ │ +1346 // Create an instance on demand (slow) │ │ │ │ │ +1347 instance = Create(srcDesc, dstDesc, │ │ │ │ │ +1348 duDesc, dvDesc, │ │ │ │ │ +1349 deviceContext); │ │ │ │ │ +1350 if (instance) { │ │ │ │ │ +1351 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1352 srcBuffer, srcDesc, │ │ │ │ │ +1353 dstBuffer, dstDesc, │ │ │ │ │ +1354 duBuffer, duDesc, │ │ │ │ │ +1355 dvBuffer, dvDesc, │ │ │ │ │ +1356 numPatchCoords, patchCoords, │ │ │ │ │ +1357 patchTable, │ │ │ │ │ +1358 deviceContext); │ │ │ │ │ +1359 delete instance; │ │ │ │ │ +1360 return r; │ │ │ │ │ +1361 } │ │ │ │ │ +1362 return false; │ │ │ │ │ +1363 } │ │ │ │ │ +1364 } │ │ │ │ │ +1365 │ │ │ │ │ +1405 template │ │ │ │ │ +_1_4_0_7 bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1408 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1409 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1410 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1411 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1412 int numPatchCoords, │ │ │ │ │ +1413 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1414 PATCH_TABLE *patchTable, │ │ │ │ │ +1415 _M_T_L_C_o_n_t_e_x_t* deviceContext) const { │ │ │ │ │ +1416 │ │ │ │ │ +1417 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc, │ │ │ │ │ +1418 dstBuffer->BindMTLBuffer(deviceContext), dstDesc, │ │ │ │ │ +1419 duBuffer->BindMTLBuffer(deviceContext), duDesc, │ │ │ │ │ +1420 dvBuffer->BindMTLBuffer(deviceContext), dvDesc, │ │ │ │ │ +1421 numPatchCoords, │ │ │ │ │ +1422 patchCoords->BindMTLBuffer(deviceContext), │ │ │ │ │ +1423 patchTable->GetVaryingPatchArrays(), │ │ │ │ │ +1424 patchTable->GetVaryingPatchIndexBuffer(), │ │ │ │ │ +1425 patchTable->GetPatchParamBuffer(), │ │ │ │ │ +1426 deviceContext │ │ │ │ │ +1427 ); │ │ │ │ │ +1428 } │ │ │ │ │ +1429 │ │ │ │ │ +1430 │ │ │ │ │ +1494 template │ │ │ │ │ +_1_4_9_6 static bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1497 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1498 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1499 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1500 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1501 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +1502 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +1503 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +1504 int numPatchCoords, │ │ │ │ │ +1505 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1506 PATCH_TABLE *patchTable, │ │ │ │ │ +1507 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +1508 _M_T_L_C_o_n_t_e_x_t* deviceContext) { │ │ │ │ │ +1509 │ │ │ │ │ +1510 if (instance) { │ │ │ │ │ +1511 return instance->_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1512 srcBuffer, srcDesc, │ │ │ │ │ +1513 dstBuffer, dstDesc, │ │ │ │ │ +1514 duBuffer, duDesc, │ │ │ │ │ +1515 dvBuffer, dvDesc, │ │ │ │ │ +1516 duuBuffer, duuDesc, │ │ │ │ │ +1517 duvBuffer, duvDesc, │ │ │ │ │ +1518 dvvBuffer, dvvDesc, │ │ │ │ │ +1519 numPatchCoords, patchCoords, │ │ │ │ │ +1520 patchTable, │ │ │ │ │ +1521 deviceContext); │ │ │ │ │ +1522 } else { │ │ │ │ │ +1523 // Create an instance on demand (slow) │ │ │ │ │ +1524 instance = Create(srcDesc, dstDesc, │ │ │ │ │ +1525 duDesc, dvDesc, │ │ │ │ │ +1526 duuDesc, duvDesc, dvvDesc, │ │ │ │ │ +1527 deviceContext); │ │ │ │ │ +1528 if (instance) { │ │ │ │ │ +1529 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1530 srcBuffer, srcDesc, │ │ │ │ │ +1531 dstBuffer, dstDesc, │ │ │ │ │ +1532 duBuffer, duDesc, │ │ │ │ │ +1533 dvBuffer, dvDesc, │ │ │ │ │ +1534 duuBuffer, duuDesc, │ │ │ │ │ +1535 duvBuffer, duvDesc, │ │ │ │ │ +1536 dvvBuffer, dvvDesc, │ │ │ │ │ +1537 numPatchCoords, patchCoords, │ │ │ │ │ +1538 patchTable, │ │ │ │ │ +1539 deviceContext); │ │ │ │ │ +1540 delete instance; │ │ │ │ │ +1541 return r; │ │ │ │ │ +1542 } │ │ │ │ │ +1543 return false; │ │ │ │ │ +1544 } │ │ │ │ │ +1545 } │ │ │ │ │ +1546 │ │ │ │ │ +1604 template │ │ │ │ │ +_1_6_0_6 bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1607 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1608 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1609 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1610 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1611 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +1612 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +1613 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +1614 int numPatchCoords, │ │ │ │ │ +1615 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1616 PATCH_TABLE *patchTable, │ │ │ │ │ +1617 _M_T_L_C_o_n_t_e_x_t* deviceContext) const { │ │ │ │ │ +1618 │ │ │ │ │ +1619 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc, │ │ │ │ │ +1620 dstBuffer->BindMTLBuffer(deviceContext), dstDesc, │ │ │ │ │ +1621 duBuffer->BindMTLBuffer(deviceContext), duDesc, │ │ │ │ │ +1622 dvBuffer->BindMTLBuffer(deviceContext), dvDesc, │ │ │ │ │ +1623 duuBuffer->BindMTLBuffer(deviceContext), duuDesc, │ │ │ │ │ +1624 duvBuffer->BindMTLBuffer(deviceContext), duvDesc, │ │ │ │ │ +1625 dvvBuffer->BindMTLBuffer(deviceContext), dvvDesc, │ │ │ │ │ +1626 numPatchCoords, │ │ │ │ │ +1627 patchCoords->BindMTLBuffer(deviceContext), │ │ │ │ │ +1628 patchTable->GetVaryingPatchArrays(), │ │ │ │ │ +1629 patchTable->GetVaryingPatchIndexBuffer(), │ │ │ │ │ +1630 patchTable->GetPatchParamBuffer(), │ │ │ │ │ +1631 deviceContext │ │ │ │ │ +1632 ); │ │ │ │ │ +1633 } │ │ │ │ │ +1634 │ │ │ │ │ +1670 template │ │ │ │ │ +_1_6_7_2 static bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1673 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1674 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1675 int numPatchCoords, │ │ │ │ │ +1676 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1677 PATCH_TABLE *patchTable, │ │ │ │ │ +1678 int fvarChannel, │ │ │ │ │ +1679 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +1680 _M_T_L_C_o_n_t_e_x_t* deviceContext) { │ │ │ │ │ +1681 │ │ │ │ │ +1682 if (instance) { │ │ │ │ │ +1683 return instance->_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1684 srcBuffer, srcDesc, │ │ │ │ │ +1685 dstBuffer, dstDesc, │ │ │ │ │ +1686 numPatchCoords, patchCoords, │ │ │ │ │ +1687 patchTable, │ │ │ │ │ +1688 fvarChannel, │ │ │ │ │ +1689 deviceContext); │ │ │ │ │ +1690 } else { │ │ │ │ │ +1691 // Create an instance on demand (slow) │ │ │ │ │ +1692 instance = Create(srcDesc, dstDesc, │ │ │ │ │ +1693 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +1694 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +1695 deviceContext); │ │ │ │ │ +1696 if (instance) { │ │ │ │ │ +1697 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1698 srcBuffer, srcDesc, │ │ │ │ │ +1699 dstBuffer, dstDesc, │ │ │ │ │ +1700 numPatchCoords, patchCoords, │ │ │ │ │ +1701 patchTable, │ │ │ │ │ +1702 fvarChannel, │ │ │ │ │ +1703 deviceContext); │ │ │ │ │ +1704 delete instance; │ │ │ │ │ +1705 return r; │ │ │ │ │ +1706 } │ │ │ │ │ +1707 return false; │ │ │ │ │ +1708 } │ │ │ │ │ +1709 } │ │ │ │ │ +1710 │ │ │ │ │ +1740 template │ │ │ │ │ +_1_7_4_2 bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1743 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1744 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1745 int numPatchCoords, │ │ │ │ │ +1746 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1747 PATCH_TABLE *patchTable, │ │ │ │ │ +1748 int fvarChannel, │ │ │ │ │ +1749 _M_T_L_C_o_n_t_e_x_t* deviceContext) const { │ │ │ │ │ +1750 │ │ │ │ │ +1751 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc, │ │ │ │ │ +1752 dstBuffer->BindMTLBuffer(deviceContext), dstDesc, │ │ │ │ │ +1753 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +1754 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +1755 numPatchCoords, │ │ │ │ │ +1756 patchCoords->BindMTLBuffer(deviceContext), │ │ │ │ │ +1757 patchTable->GetFVarPatchArrays(fvarChannel), │ │ │ │ │ +1758 patchTable->GetFVarPatchIndexBuffer(fvarChannel), │ │ │ │ │ +1759 patchTable->GetFVarPatchParamBuffer(fvarChannel), │ │ │ │ │ +1760 deviceContext │ │ │ │ │ +1761 ); │ │ │ │ │ +1762 } │ │ │ │ │ +1763 │ │ │ │ │ +1811 template │ │ │ │ │ +_1_8_1_3 static bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1814 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1815 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1816 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1817 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1818 int numPatchCoords, │ │ │ │ │ +1819 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1820 PATCH_TABLE *patchTable, │ │ │ │ │ +1821 int fvarChannel, │ │ │ │ │ +1822 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +1823 _M_T_L_C_o_n_t_e_x_t* deviceContext) { │ │ │ │ │ +1824 │ │ │ │ │ +1825 if (instance) { │ │ │ │ │ +1826 return instance->_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1827 srcBuffer, srcDesc, │ │ │ │ │ +1828 dstBuffer, dstDesc, │ │ │ │ │ +1829 duBuffer, duDesc, │ │ │ │ │ +1830 dvBuffer, dvDesc, │ │ │ │ │ +1831 numPatchCoords, patchCoords, │ │ │ │ │ +1832 patchTable, │ │ │ │ │ +1833 fvarChannel, │ │ │ │ │ +1834 deviceContext); │ │ │ │ │ +1835 } else { │ │ │ │ │ +1836 // Create an instance on demand (slow) │ │ │ │ │ +1837 instance = Create(srcDesc, dstDesc, │ │ │ │ │ +1838 duDesc, dvDesc, │ │ │ │ │ +1839 deviceContext); │ │ │ │ │ +1840 if (instance) { │ │ │ │ │ +1841 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1842 srcBuffer, srcDesc, │ │ │ │ │ +1843 dstBuffer, dstDesc, │ │ │ │ │ +1844 duBuffer, duDesc, │ │ │ │ │ +1845 dvBuffer, dvDesc, │ │ │ │ │ +1846 numPatchCoords, patchCoords, │ │ │ │ │ +1847 patchTable, │ │ │ │ │ +1848 fvarChannel, │ │ │ │ │ +1849 deviceContext); │ │ │ │ │ +1850 delete instance; │ │ │ │ │ +1851 return r; │ │ │ │ │ +1852 } │ │ │ │ │ +1853 return false; │ │ │ │ │ +1854 } │ │ │ │ │ +1855 } │ │ │ │ │ +1856 │ │ │ │ │ +1898 template │ │ │ │ │ +_1_9_0_0 bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1901 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1902 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1903 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1904 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1905 int numPatchCoords, │ │ │ │ │ +1906 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1907 PATCH_TABLE *patchTable, │ │ │ │ │ +1908 int fvarChannel, │ │ │ │ │ +1909 _M_T_L_C_o_n_t_e_x_t* deviceContext) const { │ │ │ │ │ +1910 │ │ │ │ │ +1911 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc, │ │ │ │ │ +1912 dstBuffer->BindMTLBuffer(deviceContext), dstDesc, │ │ │ │ │ +1913 duBuffer->BindMTLBuffer(deviceContext), duDesc, │ │ │ │ │ +1914 dvBuffer->BindMTLBuffer(deviceContext), dvDesc, │ │ │ │ │ +1915 numPatchCoords, │ │ │ │ │ +1916 patchCoords->BindMTLBuffer(deviceContext), │ │ │ │ │ +1917 patchTable->GetFVarPatchArrays(fvarChannel), │ │ │ │ │ +1918 patchTable->GetFVarPatchIndexBuffer(fvarChannel), │ │ │ │ │ +1919 patchTable->GetFVarPatchParamBuffer(fvarChannel), │ │ │ │ │ +1920 deviceContext │ │ │ │ │ +1921 ); │ │ │ │ │ +1922 } │ │ │ │ │ +1923 │ │ │ │ │ +1989 template │ │ │ │ │ +_1_9_9_1 static bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1992 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1993 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1994 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1995 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1996 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +1997 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +1998 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +1999 int numPatchCoords, │ │ │ │ │ +2000 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +2001 PATCH_TABLE *patchTable, │ │ │ │ │ +2002 int fvarChannel, │ │ │ │ │ +2003 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +2004 _M_T_L_C_o_n_t_e_x_t* deviceContext) { │ │ │ │ │ +2005 │ │ │ │ │ +2006 if (instance) { │ │ │ │ │ +2007 return instance->_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +2008 srcBuffer, srcDesc, │ │ │ │ │ +2009 dstBuffer, dstDesc, │ │ │ │ │ +2010 duBuffer, duDesc, │ │ │ │ │ +2011 dvBuffer, dvDesc, │ │ │ │ │ +2012 duuBuffer, duuDesc, │ │ │ │ │ +2013 duvBuffer, duvDesc, │ │ │ │ │ +2014 dvvBuffer, dvvDesc, │ │ │ │ │ +2015 numPatchCoords, patchCoords, │ │ │ │ │ +2016 patchTable, │ │ │ │ │ +2017 fvarChannel, │ │ │ │ │ +2018 deviceContext); │ │ │ │ │ +2019 } else { │ │ │ │ │ +2020 // Create an instance on demand (slow) │ │ │ │ │ +2021 instance = Create(srcDesc, dstDesc, │ │ │ │ │ +2022 duDesc, dvDesc, │ │ │ │ │ +2023 duuDesc, duvDesc, dvvDesc, │ │ │ │ │ +2024 deviceContext); │ │ │ │ │ +2025 if (instance) { │ │ │ │ │ +2026 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +2027 srcBuffer, srcDesc, │ │ │ │ │ +2028 dstBuffer, dstDesc, │ │ │ │ │ +2029 duBuffer, duDesc, │ │ │ │ │ +2030 dvBuffer, dvDesc, │ │ │ │ │ +2031 duuBuffer, duuDesc, │ │ │ │ │ +2032 duvBuffer, duvDesc, │ │ │ │ │ +2033 dvvBuffer, dvvDesc, │ │ │ │ │ +2034 numPatchCoords, patchCoords, │ │ │ │ │ +2035 patchTable, │ │ │ │ │ +2036 fvarChannel, │ │ │ │ │ +2037 deviceContext); │ │ │ │ │ +2038 delete instance; │ │ │ │ │ +2039 return r; │ │ │ │ │ +2040 } │ │ │ │ │ +2041 return false; │ │ │ │ │ +2042 } │ │ │ │ │ +2043 } │ │ │ │ │ +2044 │ │ │ │ │ +2104 template │ │ │ │ │ +_2_1_0_6 bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +2107 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +2108 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +2109 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +2110 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +2111 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +2112 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +2113 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +2114 int numPatchCoords, │ │ │ │ │ +2115 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +2116 PATCH_TABLE *patchTable, │ │ │ │ │ +2117 int fvarChannel, │ │ │ │ │ +2118 _M_T_L_C_o_n_t_e_x_t* deviceContext) const { │ │ │ │ │ +2119 │ │ │ │ │ +2120 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc, │ │ │ │ │ +2121 dstBuffer->BindMTLBuffer(deviceContext), dstDesc, │ │ │ │ │ +2122 duBuffer->BindMTLBuffer(deviceContext), duDesc, │ │ │ │ │ +2123 dvBuffer->BindMTLBuffer(deviceContext), dvDesc, │ │ │ │ │ +2124 duuBuffer->BindMTLBuffer(deviceContext), duuDesc, │ │ │ │ │ +2125 duvBuffer->BindMTLBuffer(deviceContext), duvDesc, │ │ │ │ │ +2126 dvvBuffer->BindMTLBuffer(deviceContext), dvvDesc, │ │ │ │ │ +2127 numPatchCoords, │ │ │ │ │ +2128 patchCoords->BindMTLBuffer(deviceContext), │ │ │ │ │ +2129 patchTable->GetFVarPatchArrays(fvarChannel), │ │ │ │ │ +2130 patchTable->GetFVarPatchIndexBuffer(fvarChannel), │ │ │ │ │ +2131 patchTable->GetFVarPatchParamBuffer(fvarChannel), │ │ │ │ │ +2132 fvarChannel, │ │ │ │ │ +2133 deviceContext │ │ │ │ │ +2134 ); │ │ │ │ │ +2135 } │ │ │ │ │ +2136 │ │ │ │ │ +_2_1_3_8 bool _C_o_m_p_i_l_e(_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +2139 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +2140 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +2141 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +2142 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +2143 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +2144 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +2145 _M_T_L_C_o_n_t_e_x_t* context); │ │ │ │ │ +2146 │ │ │ │ │ +_2_1_4_8 static void _S_y_n_c_h_r_o_n_i_z_e(_M_T_L_C_o_n_t_e_x_t* context); │ │ │ │ │ +2149 │ │ │ │ │ +2150 private: │ │ │ │ │ +2151 │ │ │ │ │ +2152 id _computeLibrary; │ │ │ │ │ +2153 id _evalStencils; │ │ │ │ │ +2154 id _evalPatches; │ │ │ │ │ +2155 id _parameterBuffer; │ │ │ │ │ +2156 │ │ │ │ │ +2157 int _workGroupSize; │ │ │ │ │ +2158}; │ │ │ │ │ +2159 │ │ │ │ │ +2160} //end namespace Osd │ │ │ │ │ +2161 │ │ │ │ │ +2162} //end namespace OPENSUBDIV_VERSION │ │ │ │ │ +2163using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +2164 │ │ │ │ │ +2165} //end namespace OpenSubdiv │ │ │ │ │ +2166 │ │ │ │ │ +2167#endif // OPENSUBDIV3_OSD_MTL_COMPUTE_EVALUATOR_H │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_:_:_T_y_p_e │ │ │ │ │ -Type │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_D_e_s_c_r_i_p_t_o_r_._h_:_4_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_:_:_G_R_E_G_O_R_Y___B_O_U_N_D_A_R_Y │ │ │ │ │ -@ GREGORY_BOUNDARY │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_D_e_s_c_r_i_p_t_o_r_._h_:_6_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -Container for arrays of parametric patches. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_5_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r │ │ │ │ │ +std::vector< PatchArray > PatchArrayVector │ │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e_s_._h_:_1_3_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +Stencil table class wrapping the template for compatibility. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_7_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +Limit stencil table class wrapping the template for compatibility. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_8_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ +BufferDescriptor is a struct which describes buffer elements in interleaved │ │ │ │ │ +data buffers.... │ │ │ │ │ +DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_6_1 │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_n_t_e_x_t │ │ │ │ │ DDeeffiinniittiioonn _m_t_l_C_o_m_m_o_n_._h_:_4_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h_:_4_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ -_G_e_t_Q_u_a_d_O_f_f_s_e_t_s_B_a_s_e │ │ │ │ │ -int GetQuadOffsetsBase(Far::PatchDescriptor::Type type) │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h_:_7_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ -static MTLLegacyGregoryPatchTable * Create(Far::PatchTable const │ │ │ │ │ -*farPatchTable, DEVICE_CONTEXT context) │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h_:_4_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ -_G_e_t_V_e_r_t_e_x_V_a_l_e_n_c_e_B_u_f_f_e_r │ │ │ │ │ -id< MTLBuffer > GetVertexValenceBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h_:_6_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ -_G_e_t_Q_u_a_d_O_f_f_s_e_t_s_B_u_f_f_e_r │ │ │ │ │ -id< MTLBuffer > GetQuadOffsetsBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h_:_6_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ -static MTLLegacyGregoryPatchTable * Create(Far::PatchTable const │ │ │ │ │ -*farPatchTable, MTLContext *context) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ -_U_p_d_a_t_e_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ -void UpdateVertexBuffer(id< MTLBuffer > vbo, int numVertices, int │ │ │ │ │ -numVertexElements, MTLContext *context) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ -_~_M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -~MTLLegacyGregoryPatchTable() │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ -_G_e_t_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ -id< MTLBuffer > GetVertexBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h_:_5_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_5_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +MTLStencilTable(Far::LimitStencilTable const *stencilTable, MTLContext │ │ │ │ │ +*context) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_D_u_W_e_i_g_h_t_s_B_u_f_f_e_r │ │ │ │ │ +id< MTLBuffer > GetDuWeightsBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_6_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_~_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +~MTLStencilTable() │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_D_v_v_W_e_i_g_h_t_s_B_u_f_f_e_r │ │ │ │ │ +id< MTLBuffer > GetDvvWeightsBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_7_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +MTLStencilTable(Far::StencilTable const *stencilTable, MTLContext *context) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_D_u_u_W_e_i_g_h_t_s_B_u_f_f_e_r │ │ │ │ │ +id< MTLBuffer > GetDuuWeightsBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_7_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_D_u_v_W_e_i_g_h_t_s_B_u_f_f_e_r │ │ │ │ │ +id< MTLBuffer > GetDuvWeightsBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_7_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_N_u_m_S_t_e_n_c_i_l_s │ │ │ │ │ +int GetNumStencils() const │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_7_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_I_n_d_i_c_e_s_B_u_f_f_e_r │ │ │ │ │ +id< MTLBuffer > GetIndicesBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_6_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_S_i_z_e_s_B_u_f_f_e_r │ │ │ │ │ +id< MTLBuffer > GetSizesBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_6_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_O_f_f_s_e_t_s_B_u_f_f_e_r │ │ │ │ │ +id< MTLBuffer > GetOffsetsBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_6_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_W_e_i_g_h_t_s_B_u_f_f_e_r │ │ │ │ │ +id< MTLBuffer > GetWeightsBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_6_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ +static MTLStencilTable * Create(STENCIL_TABLE *stencilTable, DEVICE_CONTEXT │ │ │ │ │ +context) │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_5_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_D_v_W_e_i_g_h_t_s_B_u_f_f_e_r │ │ │ │ │ +id< MTLBuffer > GetDvWeightsBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_7_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_9_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +bool EvalStencils(id< MTLBuffer > srcBuffer, BufferDescriptor const &srcDesc, │ │ │ │ │ +id< MTLBuffer > dstBuffer, BufferDescriptor const &dstDesc, id< MTLBuffer > │ │ │ │ │ +duBuffer, BufferDescriptor const &duDesc, id< MTLBuffer > dvBuffer, │ │ │ │ │ +BufferDescriptor const &dvDesc, id< MTLBuffer > duuBuffer, BufferDescriptor │ │ │ │ │ +const &duuDesc, id< MTLBuffer > duvBuffer, BufferDescriptor const &duvDesc, id< │ │ │ │ │ +MTLBuffer > dvvBuffer, BufferDescriptor const &dvvDesc, id< MTLBuffer > │ │ │ │ │ +sizesBuffer, id< MTLBuffer > offsetsBuffer, id< MTLBuffer > indicesBuffer, id< │ │ │ │ │ +MTLBuffer > weightsBuffer, id< MTLBuffer > duWeightsBuffer, id< MTLBuffer > │ │ │ │ │ +dvWeightsBuffer, id< MTLBuffer > duuWeightsBuffer, id< MTLBuffer > │ │ │ │ │ +duvWeightsBuffer, id< MTLBuffer > dvvWeightsBuffer, int start, int end, │ │ │ │ │ +MTLContext *context) const │ │ │ │ │ +Dispatch the MTL compute kernel on GPU asynchronously returns false if the │ │ │ │ │ +kernel hasn't been compile... │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +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, MTLComputeEvaluator *instance, MTLContext *context) │ │ │ │ │ +Generic limit eval function. This function has a same signature as other device │ │ │ │ │ +kernels have so that ... │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_7_8_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +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, │ │ │ │ │ +MTLComputeEvaluator const *instance, MTLContext *context) │ │ │ │ │ +Generic static stencil function. This function has a same signature as other │ │ │ │ │ +device kernels have so t... │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_3_1_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_: │ │ │ │ │ +_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ +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, │ │ │ │ │ +MTLComputeEvaluator const *instance, MTLContext *deviceContext) │ │ │ │ │ +Generic limit eval function. This function has a same signature as other device │ │ │ │ │ +kernels have so that ... │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_9_9_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r │ │ │ │ │ +MTLComputeEvaluator() │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_~_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r │ │ │ │ │ +~MTLComputeEvaluator() │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, │ │ │ │ │ +DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, │ │ │ │ │ +PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, MTLComputeEvaluator │ │ │ │ │ +const *instance, MTLContext *context) │ │ │ │ │ +Generic limit eval function. This function has a same signature as other device │ │ │ │ │ +kernels have so that ... │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_7_0_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_I_n_s_t_a_n_t_i_a_t_a_b_l_e │ │ │ │ │ +bool Instantiatable │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_9_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ +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, MTLContext *deviceContext) const │ │ │ │ │ +Generic limit eval function. This function has a same signature as other device │ │ │ │ │ +kernels have so that ... │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_6_0_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +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, │ │ │ │ │ +MTLComputeEvaluator const *instance, MTLContext *context) │ │ │ │ │ +Generic static stencil function. This function has a same signature as other │ │ │ │ │ +device kernels have so t... │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_2_2_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_: │ │ │ │ │ +_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ +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, MTLContext │ │ │ │ │ +*deviceContext) const │ │ │ │ │ +Generic limit eval function. This function has a same signature as other device │ │ │ │ │ +kernels have so that ... │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_9_0_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_: │ │ │ │ │ +_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ +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, MTLComputeEvaluator const *instance, MTLContext *deviceContext) │ │ │ │ │ +Generic limit eval function. This function has a same signature as other device │ │ │ │ │ +kernels have so that ... │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_6_7_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ +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, MTLComputeEvaluator │ │ │ │ │ +const *instance, MTLContext *deviceContext) │ │ │ │ │ +Generic limit eval function. This function has a same signature as other device │ │ │ │ │ +kernels have so that ... │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_4_9_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, │ │ │ │ │ +DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const │ │ │ │ │ +*stencilTable, MTLContext *context) const │ │ │ │ │ +Generic stencil function. │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_3_7_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +bool EvalPatches(id< MTLBuffer > srcBuffer, BufferDescriptor const &srcDesc, │ │ │ │ │ +id< MTLBuffer > dstBuffer, BufferDescriptor const &dstDesc, id< MTLBuffer > │ │ │ │ │ +duBuffer, BufferDescriptor const &duDesc, id< MTLBuffer > dvBuffer, │ │ │ │ │ +BufferDescriptor const &dvDesc, id< MTLBuffer > duuBuffer, BufferDescriptor │ │ │ │ │ +const &duuDesc, id< MTLBuffer > duvBuffer, BufferDescriptor const &duvDesc, id< │ │ │ │ │ +MTLBuffer > dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, id< │ │ │ │ │ +MTLBuffer > patchCoordsBuffer, const PatchArrayVector &patchArrays, id< │ │ │ │ │ +MTLBuffer > patchIndexBuffer, id< MTLBuffer > patchParamsBuffer, MTLContext │ │ │ │ │ +*context) const │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_: │ │ │ │ │ +_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ +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, │ │ │ │ │ +MTLContext *deviceContext) const │ │ │ │ │ +Generic limit eval function. This function has a same signature as other device │ │ │ │ │ +kernels have so that ... │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_2_1_0_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_S_y_n_c_h_r_o_n_i_z_e │ │ │ │ │ +static void Synchronize(MTLContext *context) │ │ │ │ │ +Wait for the dispatched kernel to finish. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +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, MTLContext *context) const │ │ │ │ │ +Generic stencil function. │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_4_3_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +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, MTLComputeEvaluator *instance, │ │ │ │ │ +MTLContext *context) │ │ │ │ │ +Generic limit eval function. This function has a same signature as other device │ │ │ │ │ +kernels have so that ... │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_8_8_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_: │ │ │ │ │ +_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ +bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const │ │ │ │ │ +&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int │ │ │ │ │ +numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int │ │ │ │ │ +fvarChannel, MTLContext *deviceContext) const │ │ │ │ │ +Generic limit eval function. This function has a same signature as other device │ │ │ │ │ +kernels have so that ... │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_7_4_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ +static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const │ │ │ │ │ +&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int │ │ │ │ │ +numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, │ │ │ │ │ +MTLComputeEvaluator const *instance, MTLContext *deviceContext) │ │ │ │ │ +Generic limit eval function. This function has a same signature as other device │ │ │ │ │ +kernels have so that ... │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_1_9_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +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, MTLContext │ │ │ │ │ +*context) const │ │ │ │ │ +Generic stencil function. │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_5_0_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +bool EvalStencils(id< MTLBuffer > srcBuffer, BufferDescriptor const &srcDesc, │ │ │ │ │ +id< MTLBuffer > dstBuffer, BufferDescriptor const &dstDesc, id< MTLBuffer > │ │ │ │ │ +duBuffer, BufferDescriptor const &duDesc, id< MTLBuffer > dvBuffer, │ │ │ │ │ +BufferDescriptor const &dvDesc, id< MTLBuffer > sizesBuffer, id< MTLBuffer > │ │ │ │ │ +offsetsBuffer, id< MTLBuffer > indicesBuffer, id< MTLBuffer > weightsBuffer, │ │ │ │ │ +id< MTLBuffer > duWeightsBuffer, id< MTLBuffer > dvWeightsBuffer, int start, │ │ │ │ │ +int end, MTLContext *context) const │ │ │ │ │ +Dispatch the MTL compute kernel on GPU asynchronously returns false if the │ │ │ │ │ +kernel hasn't been compile... │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_: │ │ │ │ │ +_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ +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, MTLComputeEvaluator │ │ │ │ │ +const *instance, MTLContext *deviceContext) │ │ │ │ │ +Generic limit eval function. This function has a same signature as other device │ │ │ │ │ +kernels have so that ... │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_8_1_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, │ │ │ │ │ +DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, │ │ │ │ │ +PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, MTLContext *context) │ │ │ │ │ +const │ │ │ │ │ +Generic limit eval function. This function has a same signature as other device │ │ │ │ │ +kernels have so that ... │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_9_6_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const │ │ │ │ │ +&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE │ │ │ │ │ +const *stencilTable, MTLComputeEvaluator const *instance, MTLContext *context) │ │ │ │ │ +Generic static stencil function. This function has a same signature as other │ │ │ │ │ +device kernels have so t... │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_4_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ +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, MTLComputeEvaluator const *instance, │ │ │ │ │ +MTLContext *deviceContext) │ │ │ │ │ +Generic limit eval function. This function has a same signature as other device │ │ │ │ │ +kernels have so that ... │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_3_2_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +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, MTLContext *context) const │ │ │ │ │ +Generic limit eval function with derivatives. This function has a same │ │ │ │ │ +signature as other device kern... │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_1_0_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +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, MTLContext *context) const │ │ │ │ │ +Generic limit eval function with derivatives. This function has a same │ │ │ │ │ +signature as other device kern... │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_0_2_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ +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, MTLContext *deviceContext) const │ │ │ │ │ +Generic limit eval function. This function has a same signature as other device │ │ │ │ │ +kernels have so that ... │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_4_0_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ +bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, │ │ │ │ │ +DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, │ │ │ │ │ +PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, MTLContext │ │ │ │ │ +*deviceContext) const │ │ │ │ │ +Generic limit eval function. This function has a same signature as other device │ │ │ │ │ +kernels have so that ... │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_2_5_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_C_r_e_a_t_e │ │ │ │ │ +static MTLComputeEvaluator * Create(BufferDescriptor const &srcDesc, │ │ │ │ │ +BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, │ │ │ │ │ +BufferDescriptor const &dvDesc, MTLContext *context) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_C_r_e_a_t_e │ │ │ │ │ +static MTLComputeEvaluator * Create(BufferDescriptor const &srcDesc, │ │ │ │ │ +BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, │ │ │ │ │ +BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, │ │ │ │ │ +BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, MTLContext │ │ │ │ │ +*context) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_C_o_m_p_i_l_e │ │ │ │ │ +bool Compile(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, │ │ │ │ │ +BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, │ │ │ │ │ +BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, │ │ │ │ │ +BufferDescriptor const &dvvDesc, MTLContext *context) │ │ │ │ │ +Configure compute pipline state. Returns false if it fails to create the │ │ │ │ │ +pipeline state. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +bool EvalPatches(id< MTLBuffer > srcBuffer, BufferDescriptor const &srcDesc, │ │ │ │ │ +id< MTLBuffer > dstBuffer, BufferDescriptor const &dstDesc, id< MTLBuffer > │ │ │ │ │ +duBuffer, BufferDescriptor const &duDesc, id< MTLBuffer > dvBuffer, │ │ │ │ │ +BufferDescriptor const &dvDesc, int numPatchCoords, id< MTLBuffer > │ │ │ │ │ +patchCoordsBuffer, const PatchArrayVector &patchArrays, id< MTLBuffer > │ │ │ │ │ +patchIndexBuffer, id< MTLBuffer > patchParamsBuffer, MTLContext *context) const │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _m_t_l_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ + * _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00821.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/mtlComputeEvaluator.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/osd/mtlLegacyGregoryPatchTable.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -90,46 +90,42 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
mtlComputeEvaluator.h File Reference
│ │ │ │ +
mtlLegacyGregoryPatchTable.h File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include "../osd/types.h"
│ │ │ │ -#include "../osd/bufferDescriptor.h"
│ │ │ │ +#include "../far/patchTable.h"
│ │ │ │ +#include "../osd/nonCopyable.h"
│ │ │ │ #include "../osd/mtlCommon.h"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  MTLStencilTable
 
class  MTLComputeEvaluator
class  MTLLegacyGregoryPatchTable
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Far
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,29 +1,25 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -mtlComputeEvaluator.h File Reference │ │ │ │ │ +mtlLegacyGregoryPatchTable.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ -#include "_._._/_o_s_d_/_t_y_p_e_s_._h" │ │ │ │ │ -#include "_._._/_o_s_d_/_b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h" │ │ │ │ │ +#include "_._._/_f_a_r_/_p_a_t_c_h_T_a_b_l_e_._h" │ │ │ │ │ +#include "../osd/nonCopyable.h" │ │ │ │ │ #include "_._._/_o_s_d_/_m_t_l_C_o_m_m_o_n_._h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _M_T_L_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -  │ │ │ │ │ -class   _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r │ │ │ │ │ +class   _M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ -namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r │ │ │ │ │ -  │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d │ │ │ │ │   │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h │ │ │ │ │ + * _m_t_l_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00821.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,4 +1,3 @@ │ │ │ │ │ var a00821 = [ │ │ │ │ │ - ["MTLStencilTable", "a01289.html", "a01289"], │ │ │ │ │ - ["MTLComputeEvaluator", "a01293.html", "a01293"] │ │ │ │ │ + ["MTLLegacyGregoryPatchTable", "a01297.html", "a01297"] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00821_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/mtlComputeEvaluator.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/osd/mtlLegacyGregoryPatchTable.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,15 +92,15 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
mtlComputeEvaluator.h
│ │ │ │ +
mtlLegacyGregoryPatchTable.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │
2// Copyright 2013 Pixar
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │ @@ -119,1138 +119,112 @@ │ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │
24
│ │ │ │ -
25#ifndef OPENSUBDIV3_OSD_MTL_COMPUTE_EVALUATOR_H
│ │ │ │ -
26#define OPENSUBDIV3_OSD_MTL_COMPUTE_EVALUATOR_H
│ │ │ │ +
25#ifndef OPENSUBDIV3_OSD_MTL_LEGACY_GREGORY_PATCH_TABLE_H
│ │ │ │ +
26#define OPENSUBDIV3_OSD_MTL_LEGACY_GREGORY_PATCH_TABLE_H
│ │ │ │
27
│ │ │ │
28#include "../version.h"
│ │ │ │ -
29
│ │ │ │ -
30#include "../osd/types.h"
│ │ │ │ -
31#include "../osd/bufferDescriptor.h"
│ │ │ │ -
32#include "../osd/mtlCommon.h"
│ │ │ │ -
33
│ │ │ │ -
34@protocol MTLDevice;
│ │ │ │ -
35@protocol MTLBuffer;
│ │ │ │ -
36@protocol MTLLibrary;
│ │ │ │ -
37@protocol MTLComputePipelineState;
│ │ │ │ +
29#include "../far/patchTable.h"
│ │ │ │ +
30#include "../osd/nonCopyable.h"
│ │ │ │ +
31#include "../osd/mtlCommon.h"
│ │ │ │ +
32
│ │ │ │ +
33@protocol MTLDevice;
│ │ │ │ +
34@protocol MTLBuffer;
│ │ │ │ +
35
│ │ │ │ +
36namespace OpenSubdiv {
│ │ │ │ +
37namespace OPENSUBDIV_VERSION {
│ │ │ │
38
│ │ │ │ -
39namespace OpenSubdiv {
│ │ │ │ -
40namespace OPENSUBDIV_VERSION {
│ │ │ │ -
41
│ │ │ │ -
42namespace Far {
│ │ │ │ -
43 class PatchTable;
│ │ │ │ -
44 class StencilTable;
│ │ │ │ -
45 class LimitStencilTable;
│ │ │ │ -
46}
│ │ │ │ -
47
│ │ │ │ -
48namespace Osd {
│ │ │ │ -
49
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
51{
│ │ │ │ -
52public:
│ │ │ │ -
53 template<typename STENCIL_TABLE, typename DEVICE_CONTEXT>
│ │ │ │ -
│ │ │ │ -
54 static MTLStencilTable* Create(STENCIL_TABLE* stencilTable,
│ │ │ │ -
55 DEVICE_CONTEXT context)
│ │ │ │ -
56 {
│ │ │ │ -
57 return new MTLStencilTable(stencilTable, context);
│ │ │ │ -
58 }
│ │ │ │ +
39namespace Osd {
│ │ │ │ +
40
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
42: private NonCopyable<MTLLegacyGregoryPatchTable>
│ │ │ │ +
43{
│ │ │ │ +
44public:
│ │ │ │ + │ │ │ │ +
46
│ │ │ │ +
47 template<typename DEVICE_CONTEXT>
│ │ │ │ +
│ │ │ │ +
48 static MTLLegacyGregoryPatchTable* Create(Far::PatchTable const* farPatchTable, DEVICE_CONTEXT context) {
│ │ │ │ +
49 return Create(farPatchTable, context);
│ │ │ │ +
50 }
│ │ │ │ +
│ │ │ │ +
51
│ │ │ │ +
52 static MTLLegacyGregoryPatchTable* Create(Far::PatchTable const* farPatchTable, MTLContext* context);
│ │ │ │ +
53
│ │ │ │ +
54 void UpdateVertexBuffer(id<MTLBuffer> vbo, int numVertices, int numVertexElements, MTLContext* context);
│ │ │ │ +
55
│ │ │ │ +
│ │ │ │ +
56 id<MTLBuffer> GetVertexBuffer() const
│ │ │ │ +
57 {
│ │ │ │ +
58 return _vertexBuffer;
│ │ │ │ +
59 }
│ │ │ │
│ │ │ │ -
59
│ │ │ │
60
│ │ │ │ -
61 MTLStencilTable(Far::StencilTable const* stencilTable, MTLContext* context);
│ │ │ │ -
62 MTLStencilTable(Far::LimitStencilTable const* stencilTable, MTLContext* context);
│ │ │ │ - │ │ │ │ -
64
│ │ │ │ -
65 id<MTLBuffer> GetSizesBuffer() const { return _sizesBuffer; }
│ │ │ │ -
66 id<MTLBuffer> GetOffsetsBuffer() const { return _offsetsBuffer; }
│ │ │ │ -
67 id<MTLBuffer> GetIndicesBuffer() const { return _indicesBuffer; }
│ │ │ │ -
68 id<MTLBuffer> GetWeightsBuffer() const { return _weightsBuffer; }
│ │ │ │ -
69 id<MTLBuffer> GetDuWeightsBuffer() const { return _duWeightsBuffer; }
│ │ │ │ -
70 id<MTLBuffer> GetDvWeightsBuffer() const { return _dvWeightsBuffer; }
│ │ │ │ -
71 id<MTLBuffer> GetDuuWeightsBuffer() const { return _duuWeightsBuffer; }
│ │ │ │ -
72 id<MTLBuffer> GetDuvWeightsBuffer() const { return _duvWeightsBuffer; }
│ │ │ │ -
73 id<MTLBuffer> GetDvvWeightsBuffer() const { return _dvvWeightsBuffer; }
│ │ │ │ -
74
│ │ │ │ -
75 int GetNumStencils() const { return _numStencils; }
│ │ │ │ -
76
│ │ │ │ -
77private:
│ │ │ │ -
78 id<MTLBuffer> _sizesBuffer;
│ │ │ │ -
79 id<MTLBuffer> _offsetsBuffer;
│ │ │ │ -
80 id<MTLBuffer> _indicesBuffer;
│ │ │ │ -
81 id<MTLBuffer> _weightsBuffer;
│ │ │ │ -
82 id<MTLBuffer> _duWeightsBuffer;
│ │ │ │ -
83 id<MTLBuffer> _dvWeightsBuffer;
│ │ │ │ -
84 id<MTLBuffer> _duuWeightsBuffer;
│ │ │ │ -
85 id<MTLBuffer> _duvWeightsBuffer;
│ │ │ │ -
86 id<MTLBuffer> _dvvWeightsBuffer;
│ │ │ │ -
87
│ │ │ │ -
88 int _numStencils;
│ │ │ │ -
89};
│ │ │ │ -
│ │ │ │ -
90
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
92{
│ │ │ │ -
93public:
│ │ │ │ -
94 typedef bool Instantiatable;
│ │ │ │ -
95
│ │ │ │ - │ │ │ │ -
97 BufferDescriptor const &dstDesc,
│ │ │ │ -
98 BufferDescriptor const &duDesc,
│ │ │ │ -
99 BufferDescriptor const &dvDesc,
│ │ │ │ -
100 MTLContext* context);
│ │ │ │ -
101
│ │ │ │ - │ │ │ │ -
103 BufferDescriptor const &dstDesc,
│ │ │ │ -
104 BufferDescriptor const &duDesc,
│ │ │ │ -
105 BufferDescriptor const &dvDesc,
│ │ │ │ -
106 BufferDescriptor const &duuDesc,
│ │ │ │ -
107 BufferDescriptor const &duvDesc,
│ │ │ │ -
108 BufferDescriptor const &dvvDesc,
│ │ │ │ -
109 MTLContext* context);
│ │ │ │ -
110
│ │ │ │ - │ │ │ │ - │ │ │ │ -
113
│ │ │ │ -
119
│ │ │ │ -
148 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ -
│ │ │ │ -
149 static bool EvalStencils(
│ │ │ │ -
150 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
151 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
152 STENCIL_TABLE const *stencilTable,
│ │ │ │ -
153 MTLComputeEvaluator const *instance,
│ │ │ │ -
154 MTLContext* context)
│ │ │ │ -
155 {
│ │ │ │ -
156 if (instance) {
│ │ │ │ -
157 return instance->EvalStencils(srcBuffer, srcDesc,
│ │ │ │ -
158 dstBuffer, dstDesc,
│ │ │ │ -
159 stencilTable,
│ │ │ │ -
160 context);
│ │ │ │ -
161 } else {
│ │ │ │ -
162 // Create an instance on demand (slow)
│ │ │ │ -
163 instance = Create(srcDesc, dstDesc,
│ │ │ │ - │ │ │ │ - │ │ │ │ -
166 context);
│ │ │ │ -
167 if (instance) {
│ │ │ │ -
168 bool r = instance->EvalStencils(srcBuffer, srcDesc,
│ │ │ │ -
169 dstBuffer, dstDesc,
│ │ │ │ -
170 stencilTable,
│ │ │ │ -
171 context);
│ │ │ │ -
172 delete instance;
│ │ │ │ -
173 return r;
│ │ │ │ -
174 }
│ │ │ │ -
175 return false;
│ │ │ │ -
176 }
│ │ │ │ -
177 }
│ │ │ │ -
│ │ │ │ -
178
│ │ │ │ -
219 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ -
│ │ │ │ -
220 static bool EvalStencils(
│ │ │ │ -
221 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
222 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
223 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
224 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
225 STENCIL_TABLE const *stencilTable,
│ │ │ │ -
226 MTLComputeEvaluator const *instance,
│ │ │ │ -
227 MTLContext* context) {
│ │ │ │ -
228
│ │ │ │ -
229 if (instance) {
│ │ │ │ -
230 return instance->EvalStencils(srcBuffer, srcDesc,
│ │ │ │ -
231 dstBuffer, dstDesc,
│ │ │ │ -
232 duBuffer, duDesc,
│ │ │ │ -
233 dvBuffer, dvDesc,
│ │ │ │ -
234 stencilTable,
│ │ │ │ -
235 context);
│ │ │ │ -
236 } else {
│ │ │ │ -
237 // Create an instance on demand (slow)
│ │ │ │ -
238 instance = Create(srcDesc, dstDesc, duDesc, dvDesc, context);
│ │ │ │ -
239 if (instance) {
│ │ │ │ -
240 bool r = instance->EvalStencils(srcBuffer, srcDesc,
│ │ │ │ -
241 dstBuffer, dstDesc,
│ │ │ │ -
242 duBuffer, duDesc,
│ │ │ │ -
243 dvBuffer, dvDesc,
│ │ │ │ -
244 stencilTable,
│ │ │ │ -
245 context);
│ │ │ │ -
246 delete instance;
│ │ │ │ -
247 return r;
│ │ │ │ -
248 }
│ │ │ │ -
249 return false;
│ │ │ │ -
250 }
│ │ │ │ -
251 }
│ │ │ │ -
│ │ │ │ -
252
│ │ │ │ -
311 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ -
│ │ │ │ -
312 static bool EvalStencils(
│ │ │ │ -
313 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
314 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
315 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
316 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
317 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
318 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
319 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
320 STENCIL_TABLE const *stencilTable,
│ │ │ │ -
321 MTLComputeEvaluator const *instance,
│ │ │ │ -
322 MTLContext* context) {
│ │ │ │ -
323
│ │ │ │ -
324 if (instance) {
│ │ │ │ -
325 return instance->EvalStencils(srcBuffer, srcDesc,
│ │ │ │ -
326 dstBuffer, dstDesc,
│ │ │ │ -
327 duBuffer, duDesc,
│ │ │ │ -
328 dvBuffer, dvDesc,
│ │ │ │ -
329 duuBuffer, duuDesc,
│ │ │ │ -
330 duvBuffer, duvDesc,
│ │ │ │ -
331 dvvBuffer, dvvDesc,
│ │ │ │ -
332 stencilTable,
│ │ │ │ -
333 context);
│ │ │ │ -
334 } else {
│ │ │ │ -
335 // Create an instance on demand (slow)
│ │ │ │ -
336 instance = Create(srcDesc, dstDesc, duDesc, dvDesc,
│ │ │ │ -
337 duuDesc, duvDesc, dvvDesc, context);
│ │ │ │ -
338 if (instance) {
│ │ │ │ -
339 bool r = instance->EvalStencils(srcBuffer, srcDesc,
│ │ │ │ -
340 dstBuffer, dstDesc,
│ │ │ │ -
341 duBuffer, duDesc,
│ │ │ │ -
342 dvBuffer, dvDesc,
│ │ │ │ -
343 duuBuffer, duuDesc,
│ │ │ │ -
344 duvBuffer, duvDesc,
│ │ │ │ -
345 dvvBuffer, dvvDesc,
│ │ │ │ -
346 stencilTable,
│ │ │ │ -
347 context);
│ │ │ │ -
348 delete instance;
│ │ │ │ -
349 return r;
│ │ │ │ -
350 }
│ │ │ │ -
351 return false;
│ │ │ │ -
352 }
│ │ │ │ -
353 }
│ │ │ │ -
│ │ │ │ -
354
│ │ │ │ -
375 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
377 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
378 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
379 STENCIL_TABLE const *stencilTable,
│ │ │ │ -
380 MTLContext* context) const
│ │ │ │ -
381 {
│ │ │ │ -
382 return EvalStencils(srcBuffer->BindMTLBuffer(context), srcDesc,
│ │ │ │ -
383 dstBuffer->BindMTLBuffer(context), dstDesc,
│ │ │ │ -
384 0, BufferDescriptor(),
│ │ │ │ -
385 0, BufferDescriptor(),
│ │ │ │ -
386 stencilTable->GetSizesBuffer(),
│ │ │ │ -
387 stencilTable->GetOffsetsBuffer(),
│ │ │ │ -
388 stencilTable->GetIndicesBuffer(),
│ │ │ │ -
389 stencilTable->GetWeightsBuffer(),
│ │ │ │ -
390 0,
│ │ │ │ -
391 0,
│ │ │ │ -
392 /* start = */ 0,
│ │ │ │ -
393 /* end = */ stencilTable->GetNumStencils(),
│ │ │ │ -
394 context);
│ │ │ │ -
395 }
│ │ │ │ -
│ │ │ │ -
396
│ │ │ │ -
429 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
431 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
432 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
433 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
434 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
435 STENCIL_TABLE const *stencilTable,
│ │ │ │ -
436 MTLContext* context) const
│ │ │ │ -
437 {
│ │ │ │ -
438 return EvalStencils(srcBuffer->BindMTLBuffer(context), srcDesc,
│ │ │ │ -
439 dstBuffer->BindMTLBuffer(context), dstDesc,
│ │ │ │ -
440 duBuffer->BindMTLBuffer(context), duDesc,
│ │ │ │ -
441 dvBuffer->BindMTLBuffer(context), dvDesc,
│ │ │ │ -
442 stencilTable->GetSizesBuffer(),
│ │ │ │ -
443 stencilTable->GetOffsetsBuffer(),
│ │ │ │ -
444 stencilTable->GetIndicesBuffer(),
│ │ │ │ -
445 stencilTable->GetWeightsBuffer(),
│ │ │ │ -
446 stencilTable->GetDuWeightsBuffer(),
│ │ │ │ -
447 stencilTable->GetDvWeightsBuffer(),
│ │ │ │ -
448 /* start = */ 0,
│ │ │ │ -
449 /* end = */ stencilTable->GetNumStencils(),
│ │ │ │ -
450 context);
│ │ │ │ -
451 }
│ │ │ │ -
│ │ │ │ -
452
│ │ │ │ -
503 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
505 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
506 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
507 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
508 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
509 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
510 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
511 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
512 STENCIL_TABLE const *stencilTable,
│ │ │ │ -
513 MTLContext* context) const
│ │ │ │ -
514 {
│ │ │ │ -
515 return EvalStencils(srcBuffer->BindMTLBuffer(context), srcDesc,
│ │ │ │ -
516 dstBuffer->BindMTLBuffer(context), dstDesc,
│ │ │ │ -
517 duBuffer->BindMTLBuffer(context), duDesc,
│ │ │ │ -
518 dvBuffer->BindMTLBuffer(context), dvDesc,
│ │ │ │ -
519 duuBuffer->BindMTLBuffer(context), duuDesc,
│ │ │ │ -
520 duvBuffer->BindMTLBuffer(context), duvDesc,
│ │ │ │ -
521 dvvBuffer->BindMTLBuffer(context), dvvDesc,
│ │ │ │ -
522 stencilTable->GetSizesBuffer(),
│ │ │ │ -
523 stencilTable->GetOffsetsBuffer(),
│ │ │ │ -
524 stencilTable->GetIndicesBuffer(),
│ │ │ │ -
525 stencilTable->GetWeightsBuffer(),
│ │ │ │ -
526 stencilTable->GetDuWeightsBuffer(),
│ │ │ │ -
527 stencilTable->GetDvWeightsBuffer(),
│ │ │ │ -
528 stencilTable->GetDuuWeightsBuffer(),
│ │ │ │ -
529 stencilTable->GetDuvWeightsBuffer(),
│ │ │ │ -
530 stencilTable->GetDvvWeightsBuffer(),
│ │ │ │ -
531 /* start = */ 0,
│ │ │ │ -
532 /* end = */ stencilTable->GetNumStencils(),
│ │ │ │ -
533 context);
│ │ │ │ -
534 }
│ │ │ │ -
│ │ │ │ -
535
│ │ │ │ -
574 bool EvalStencils(id<MTLBuffer> srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
575 id<MTLBuffer> dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
576 id<MTLBuffer> duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
577 id<MTLBuffer> dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
578 id<MTLBuffer> sizesBuffer,
│ │ │ │ -
579 id<MTLBuffer> offsetsBuffer,
│ │ │ │ -
580 id<MTLBuffer> indicesBuffer,
│ │ │ │ -
581 id<MTLBuffer> weightsBuffer,
│ │ │ │ -
582 id<MTLBuffer> duWeightsBuffer,
│ │ │ │ -
583 id<MTLBuffer> dvWeightsBuffer,
│ │ │ │ -
584 int start,
│ │ │ │ -
585 int end,
│ │ │ │ -
586 MTLContext* context) const;
│ │ │ │ -
587
│ │ │ │ -
644 bool EvalStencils(id<MTLBuffer> srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
645 id<MTLBuffer> dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
646 id<MTLBuffer> duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
647 id<MTLBuffer> dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
648 id<MTLBuffer> duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
649 id<MTLBuffer> duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
650 id<MTLBuffer> dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
651 id<MTLBuffer> sizesBuffer,
│ │ │ │ -
652 id<MTLBuffer> offsetsBuffer,
│ │ │ │ -
653 id<MTLBuffer> indicesBuffer,
│ │ │ │ -
654 id<MTLBuffer> weightsBuffer,
│ │ │ │ -
655 id<MTLBuffer> duWeightsBuffer,
│ │ │ │ -
656 id<MTLBuffer> dvWeightsBuffer,
│ │ │ │ -
657 id<MTLBuffer> duuWeightsBuffer,
│ │ │ │ -
658 id<MTLBuffer> duvWeightsBuffer,
│ │ │ │ -
659 id<MTLBuffer> dvvWeightsBuffer,
│ │ │ │ -
660 int start,
│ │ │ │ -
661 int end,
│ │ │ │ -
662 MTLContext* context) const;
│ │ │ │ -
663
│ │ │ │ -
669
│ │ │ │ -
703 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
704 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ -
705 static bool EvalPatches(
│ │ │ │ -
706 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
707 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
708 int numPatchCoords,
│ │ │ │ -
709 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
710 PATCH_TABLE *patchTable,
│ │ │ │ -
711 MTLComputeEvaluator const *instance,
│ │ │ │ -
712 MTLContext* context) {
│ │ │ │ -
713
│ │ │ │ -
714 if (instance) {
│ │ │ │ -
715 return instance->EvalPatches(srcBuffer, srcDesc,
│ │ │ │ -
716 dstBuffer, dstDesc,
│ │ │ │ -
717 numPatchCoords, patchCoords,
│ │ │ │ -
718 patchTable,
│ │ │ │ -
719 context);
│ │ │ │ -
720 } else {
│ │ │ │ -
721 // Create an instance on demand (slow)
│ │ │ │ -
722 instance = Create(srcDesc, dstDesc,
│ │ │ │ - │ │ │ │ - │ │ │ │ -
725 context);
│ │ │ │ -
726 if (instance) {
│ │ │ │ -
727 bool r = instance->EvalPatches(srcBuffer, srcDesc,
│ │ │ │ -
728 dstBuffer, dstDesc,
│ │ │ │ -
729 numPatchCoords, patchCoords,
│ │ │ │ -
730 patchTable,
│ │ │ │ -
731 context);
│ │ │ │ -
732 delete instance;
│ │ │ │ -
733 return r;
│ │ │ │ -
734 }
│ │ │ │ -
735 return false;
│ │ │ │ -
736 }
│ │ │ │ -
737 }
│ │ │ │ -
│ │ │ │ -
738
│ │ │ │ -
784 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
785 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ -
786 static bool EvalPatches(
│ │ │ │ -
787 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
788 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
789 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
790 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
791 int numPatchCoords,
│ │ │ │ -
792 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
793 PATCH_TABLE *patchTable,
│ │ │ │ -
794 MTLComputeEvaluator* instance,
│ │ │ │ -
795 MTLContext* context) {
│ │ │ │ -
796
│ │ │ │ -
797 if (instance) {
│ │ │ │ -
798 return instance->EvalPatches(srcBuffer, srcDesc,
│ │ │ │ -
799 dstBuffer, dstDesc,
│ │ │ │ -
800 duBuffer, duDesc,
│ │ │ │ -
801 dvBuffer, dvDesc,
│ │ │ │ -
802 numPatchCoords, patchCoords,
│ │ │ │ -
803 patchTable,
│ │ │ │ -
804 context);
│ │ │ │ -
805 } else {
│ │ │ │ -
806 // Create an instance on demand (slow)
│ │ │ │ -
807 instance = Create(srcDesc, dstDesc,
│ │ │ │ -
808 duDesc, dvDesc, context);
│ │ │ │ -
809 if (instance) {
│ │ │ │ -
810 bool r = instance->EvalPatches(srcBuffer, srcDesc,
│ │ │ │ -
811 dstBuffer, dstDesc,
│ │ │ │ -
812 duBuffer, duDesc,
│ │ │ │ -
813 dvBuffer, dvDesc,
│ │ │ │ -
814 numPatchCoords, patchCoords,
│ │ │ │ -
815 patchTable,
│ │ │ │ -
816 context);
│ │ │ │ -
817 delete instance;
│ │ │ │ -
818 return r;
│ │ │ │ -
819 }
│ │ │ │ -
820 return false;
│ │ │ │ -
821 }
│ │ │ │ -
822 }
│ │ │ │ -
│ │ │ │ -
823
│ │ │ │ -
887 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
888 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ -
889 static bool EvalPatches(
│ │ │ │ -
890 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
891 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
892 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
893 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
894 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
895 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
896 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
897 int numPatchCoords,
│ │ │ │ -
898 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
899 PATCH_TABLE *patchTable,
│ │ │ │ -
900 MTLComputeEvaluator* instance,
│ │ │ │ -
901 MTLContext* context) {
│ │ │ │ -
902
│ │ │ │ -
903 if (instance) {
│ │ │ │ -
904 return instance->EvalPatches(srcBuffer, srcDesc,
│ │ │ │ -
905 dstBuffer, dstDesc,
│ │ │ │ -
906 duBuffer, duDesc,
│ │ │ │ -
907 dvBuffer, dvDesc,
│ │ │ │ -
908 duuBuffer, duuDesc,
│ │ │ │ -
909 duvBuffer, duvDesc,
│ │ │ │ -
910 dvvBuffer, dvvDesc,
│ │ │ │ -
911 numPatchCoords, patchCoords,
│ │ │ │ -
912 patchTable,
│ │ │ │ -
913 context);
│ │ │ │ -
914 } else {
│ │ │ │ -
915 // Create an instance on demand (slow)
│ │ │ │ -
916 instance = Create(srcDesc, dstDesc,
│ │ │ │ -
917 duDesc, dvDesc,
│ │ │ │ -
918 duuDesc, duvDesc, dvvDesc, context);
│ │ │ │ -
919 if (instance) {
│ │ │ │ -
920 bool r = instance->EvalPatches(srcBuffer, srcDesc,
│ │ │ │ -
921 dstBuffer, dstDesc,
│ │ │ │ -
922 duBuffer, duDesc,
│ │ │ │ -
923 dvBuffer, dvDesc,
│ │ │ │ -
924 duuBuffer, duuDesc,
│ │ │ │ -
925 duvBuffer, duvDesc,
│ │ │ │ -
926 dvvBuffer, dvvDesc,
│ │ │ │ -
927 numPatchCoords, patchCoords,
│ │ │ │ -
928 patchTable,
│ │ │ │ -
929 context);
│ │ │ │ -
930 delete instance;
│ │ │ │ -
931 return r;
│ │ │ │ -
932 }
│ │ │ │ -
933 return false;
│ │ │ │ -
934 }
│ │ │ │ -
935 }
│ │ │ │ -
│ │ │ │ -
936
│ │ │ │ -
964 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
965 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
967 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
968 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
969 int numPatchCoords,
│ │ │ │ -
970 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
971 PATCH_TABLE *patchTable,
│ │ │ │ -
972 MTLContext* context) const {
│ │ │ │ -
973
│ │ │ │ -
974 return EvalPatches(srcBuffer->BindMTLBuffer(context), srcDesc,
│ │ │ │ -
975 dstBuffer->BindMTLBuffer(context), dstDesc,
│ │ │ │ -
976 0, BufferDescriptor(),
│ │ │ │ -
977 0, BufferDescriptor(),
│ │ │ │ -
978 numPatchCoords,
│ │ │ │ -
979 patchCoords->BindMTLBuffer(context),
│ │ │ │ -
980 patchTable->GetPatchArrays(),
│ │ │ │ -
981 patchTable->GetPatchIndexBuffer(),
│ │ │ │ -
982 patchTable->GetPatchParamBuffer(),
│ │ │ │ -
983 context);
│ │ │ │ -
984 }
│ │ │ │ -
│ │ │ │ -
985
│ │ │ │ -
1023 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1024 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1026 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1027 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1028 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1029 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1030 int numPatchCoords,
│ │ │ │ -
1031 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1032 PATCH_TABLE *patchTable,
│ │ │ │ -
1033 MTLContext* context) const {
│ │ │ │ -
1034
│ │ │ │ -
1035 return EvalPatches(srcBuffer->BindMTLBuffer(context), srcDesc,
│ │ │ │ -
1036 dstBuffer->BindMTLBuffer(context), dstDesc,
│ │ │ │ -
1037 duBuffer->BindMTLBuffer(context), duDesc,
│ │ │ │ -
1038 dvBuffer->BindMTLBuffer(context), dvDesc,
│ │ │ │ -
1039 numPatchCoords,
│ │ │ │ -
1040 patchCoords->BindMTLBuffer(context),
│ │ │ │ -
1041 patchTable->GetPatchArrays(),
│ │ │ │ -
1042 patchTable->GetPatchIndexBuffer(),
│ │ │ │ -
1043 patchTable->GetPatchParamBuffer(),
│ │ │ │ -
1044 context);
│ │ │ │ -
1045 }
│ │ │ │ -
│ │ │ │ -
1046
│ │ │ │ -
1102 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1103 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1105 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1106 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1107 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1108 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1109 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
1110 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
1111 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
1112 int numPatchCoords,
│ │ │ │ -
1113 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1114 PATCH_TABLE *patchTable,
│ │ │ │ -
1115 MTLContext* context) const {
│ │ │ │ -
1116
│ │ │ │ -
1117 return EvalPatches(srcBuffer->BindMTLBuffer(context), srcDesc,
│ │ │ │ -
1118 dstBuffer->BindMTLBuffer(context), dstDesc,
│ │ │ │ -
1119 duBuffer->BindMTLBuffer(context), duDesc,
│ │ │ │ -
1120 dvBuffer->BindMTLBuffer(context), dvDesc,
│ │ │ │ -
1121 duuBuffer->BindMTLBuffer(context), duuDesc,
│ │ │ │ -
1122 duvBuffer->BindMTLBuffer(context), duvDesc,
│ │ │ │ -
1123 dvvBuffer->BindMTLBuffer(context), dvvDesc,
│ │ │ │ -
1124 numPatchCoords,
│ │ │ │ -
1125 patchCoords->BindMTLBuffer(context),
│ │ │ │ -
1126 patchTable->GetPatchArrays(),
│ │ │ │ -
1127 patchTable->GetPatchIndexBuffer(),
│ │ │ │ -
1128 patchTable->GetPatchParamBuffer(),
│ │ │ │ -
1129 context);
│ │ │ │ -
1130 }
│ │ │ │ -
│ │ │ │ -
1131
│ │ │ │ -
1132 bool EvalPatches(id<MTLBuffer> srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1133 id<MTLBuffer> dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1134 id<MTLBuffer> duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1135 id<MTLBuffer> dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1136 int numPatchCoords,
│ │ │ │ -
1137 id<MTLBuffer> patchCoordsBuffer,
│ │ │ │ -
1138 const PatchArrayVector &patchArrays,
│ │ │ │ -
1139 id<MTLBuffer> patchIndexBuffer,
│ │ │ │ -
1140 id<MTLBuffer> patchParamsBuffer,
│ │ │ │ -
1141 MTLContext* context) const;
│ │ │ │ -
1142
│ │ │ │ -
1143 bool EvalPatches(id<MTLBuffer> srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1144 id<MTLBuffer> dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1145 id<MTLBuffer> duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1146 id<MTLBuffer> dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1147 id<MTLBuffer> duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
1148 id<MTLBuffer> duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
1149 id<MTLBuffer> dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
1150 int numPatchCoords,
│ │ │ │ -
1151 id<MTLBuffer> patchCoordsBuffer,
│ │ │ │ -
1152 const PatchArrayVector &patchArrays,
│ │ │ │ -
1153 id<MTLBuffer> patchIndexBuffer,
│ │ │ │ -
1154 id<MTLBuffer> patchParamsBuffer,
│ │ │ │ -
1155 MTLContext* context) const;
│ │ │ │ -
1156
│ │ │ │ -
1190 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1191 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1193 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1194 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1195 int numPatchCoords,
│ │ │ │ -
1196 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1197 PATCH_TABLE *patchTable,
│ │ │ │ -
1198 MTLComputeEvaluator const *instance,
│ │ │ │ -
1199 MTLContext* deviceContext) {
│ │ │ │ -
1200
│ │ │ │ -
1201 if (instance) {
│ │ │ │ -
1202 return instance->EvalPatchesVarying(
│ │ │ │ -
1203 srcBuffer, srcDesc,
│ │ │ │ -
1204 dstBuffer, dstDesc,
│ │ │ │ -
1205 numPatchCoords, patchCoords,
│ │ │ │ -
1206 patchTable,
│ │ │ │ -
1207 deviceContext);
│ │ │ │ -
1208 } else {
│ │ │ │ -
1209 // Create an instance on demand (slow)
│ │ │ │ -
1210 instance = Create(srcDesc, dstDesc,
│ │ │ │ - │ │ │ │ - │ │ │ │ -
1213 deviceContext);
│ │ │ │ -
1214 if (instance) {
│ │ │ │ -
1215 bool r = instance->EvalPatchesVarying(
│ │ │ │ -
1216 srcBuffer, srcDesc,
│ │ │ │ -
1217 dstBuffer, dstDesc,
│ │ │ │ -
1218 numPatchCoords, patchCoords,
│ │ │ │ -
1219 patchTable,
│ │ │ │ -
1220 deviceContext);
│ │ │ │ -
1221 delete instance;
│ │ │ │ -
1222 return r;
│ │ │ │ -
1223 }
│ │ │ │ -
1224 return false;
│ │ │ │ -
1225 }
│ │ │ │ -
1226 }
│ │ │ │ -
│ │ │ │ -
1227
│ │ │ │ -
1255 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1256 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1258 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1259 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1260 int numPatchCoords,
│ │ │ │ -
1261 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1262 PATCH_TABLE *patchTable,
│ │ │ │ -
1263 MTLContext* deviceContext) const {
│ │ │ │ -
1264
│ │ │ │ -
1265 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc,
│ │ │ │ -
1266 dstBuffer->BindMTLBuffer(deviceContext), dstDesc,
│ │ │ │ -
1267 0, BufferDescriptor(),
│ │ │ │ -
1268 0, BufferDescriptor(),
│ │ │ │ -
1269 numPatchCoords,
│ │ │ │ -
1270 patchCoords->BindMTLBuffer(deviceContext),
│ │ │ │ -
1271 patchTable->GetVaryingPatchArrays(),
│ │ │ │ -
1272 patchTable->GetVaryingPatchIndexBuffer(),
│ │ │ │ -
1273 patchTable->GetPatchParamBuffer(),
│ │ │ │ -
1274 deviceContext
│ │ │ │ -
1275 );
│ │ │ │ -
1276 }
│ │ │ │ -
│ │ │ │ -
1277
│ │ │ │ -
1323 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1324 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1326 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1327 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1328 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1329 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1330 int numPatchCoords,
│ │ │ │ -
1331 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1332 PATCH_TABLE *patchTable,
│ │ │ │ -
1333 MTLComputeEvaluator const *instance,
│ │ │ │ -
1334 MTLContext* deviceContext) {
│ │ │ │ -
1335
│ │ │ │ -
1336 if (instance) {
│ │ │ │ -
1337 return instance->EvalPatchesVarying(
│ │ │ │ -
1338 srcBuffer, srcDesc,
│ │ │ │ -
1339 dstBuffer, dstDesc,
│ │ │ │ -
1340 duBuffer, duDesc,
│ │ │ │ -
1341 dvBuffer, dvDesc,
│ │ │ │ -
1342 numPatchCoords, patchCoords,
│ │ │ │ -
1343 patchTable,
│ │ │ │ -
1344 deviceContext);
│ │ │ │ -
1345 } else {
│ │ │ │ -
1346 // Create an instance on demand (slow)
│ │ │ │ -
1347 instance = Create(srcDesc, dstDesc,
│ │ │ │ -
1348 duDesc, dvDesc,
│ │ │ │ -
1349 deviceContext);
│ │ │ │ -
1350 if (instance) {
│ │ │ │ -
1351 bool r = instance->EvalPatchesVarying(
│ │ │ │ -
1352 srcBuffer, srcDesc,
│ │ │ │ -
1353 dstBuffer, dstDesc,
│ │ │ │ -
1354 duBuffer, duDesc,
│ │ │ │ -
1355 dvBuffer, dvDesc,
│ │ │ │ -
1356 numPatchCoords, patchCoords,
│ │ │ │ -
1357 patchTable,
│ │ │ │ -
1358 deviceContext);
│ │ │ │ -
1359 delete instance;
│ │ │ │ -
1360 return r;
│ │ │ │ -
1361 }
│ │ │ │ -
1362 return false;
│ │ │ │ -
1363 }
│ │ │ │ -
1364 }
│ │ │ │ -
│ │ │ │ -
1365
│ │ │ │ -
1405 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1406 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1408 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1409 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1410 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1411 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1412 int numPatchCoords,
│ │ │ │ -
1413 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1414 PATCH_TABLE *patchTable,
│ │ │ │ -
1415 MTLContext* deviceContext) const {
│ │ │ │ -
1416
│ │ │ │ -
1417 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc,
│ │ │ │ -
1418 dstBuffer->BindMTLBuffer(deviceContext), dstDesc,
│ │ │ │ -
1419 duBuffer->BindMTLBuffer(deviceContext), duDesc,
│ │ │ │ -
1420 dvBuffer->BindMTLBuffer(deviceContext), dvDesc,
│ │ │ │ -
1421 numPatchCoords,
│ │ │ │ -
1422 patchCoords->BindMTLBuffer(deviceContext),
│ │ │ │ -
1423 patchTable->GetVaryingPatchArrays(),
│ │ │ │ -
1424 patchTable->GetVaryingPatchIndexBuffer(),
│ │ │ │ -
1425 patchTable->GetPatchParamBuffer(),
│ │ │ │ -
1426 deviceContext
│ │ │ │ -
1427 );
│ │ │ │ -
1428 }
│ │ │ │ -
│ │ │ │ -
1429
│ │ │ │ -
1430
│ │ │ │ -
1494 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1495 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1497 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1498 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1499 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1500 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1501 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
1502 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
1503 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
1504 int numPatchCoords,
│ │ │ │ -
1505 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1506 PATCH_TABLE *patchTable,
│ │ │ │ -
1507 MTLComputeEvaluator const *instance,
│ │ │ │ -
1508 MTLContext* deviceContext) {
│ │ │ │ -
1509
│ │ │ │ -
1510 if (instance) {
│ │ │ │ -
1511 return instance->EvalPatchesVarying(
│ │ │ │ -
1512 srcBuffer, srcDesc,
│ │ │ │ -
1513 dstBuffer, dstDesc,
│ │ │ │ -
1514 duBuffer, duDesc,
│ │ │ │ -
1515 dvBuffer, dvDesc,
│ │ │ │ -
1516 duuBuffer, duuDesc,
│ │ │ │ -
1517 duvBuffer, duvDesc,
│ │ │ │ -
1518 dvvBuffer, dvvDesc,
│ │ │ │ -
1519 numPatchCoords, patchCoords,
│ │ │ │ -
1520 patchTable,
│ │ │ │ -
1521 deviceContext);
│ │ │ │ -
1522 } else {
│ │ │ │ -
1523 // Create an instance on demand (slow)
│ │ │ │ -
1524 instance = Create(srcDesc, dstDesc,
│ │ │ │ -
1525 duDesc, dvDesc,
│ │ │ │ -
1526 duuDesc, duvDesc, dvvDesc,
│ │ │ │ -
1527 deviceContext);
│ │ │ │ -
1528 if (instance) {
│ │ │ │ -
1529 bool r = instance->EvalPatchesVarying(
│ │ │ │ -
1530 srcBuffer, srcDesc,
│ │ │ │ -
1531 dstBuffer, dstDesc,
│ │ │ │ -
1532 duBuffer, duDesc,
│ │ │ │ -
1533 dvBuffer, dvDesc,
│ │ │ │ -
1534 duuBuffer, duuDesc,
│ │ │ │ -
1535 duvBuffer, duvDesc,
│ │ │ │ -
1536 dvvBuffer, dvvDesc,
│ │ │ │ -
1537 numPatchCoords, patchCoords,
│ │ │ │ -
1538 patchTable,
│ │ │ │ -
1539 deviceContext);
│ │ │ │ -
1540 delete instance;
│ │ │ │ -
1541 return r;
│ │ │ │ -
1542 }
│ │ │ │ -
1543 return false;
│ │ │ │ -
1544 }
│ │ │ │ -
1545 }
│ │ │ │ -
│ │ │ │ -
1546
│ │ │ │ -
1604 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1605 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1607 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1608 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1609 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1610 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1611 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
1612 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
1613 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
1614 int numPatchCoords,
│ │ │ │ -
1615 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1616 PATCH_TABLE *patchTable,
│ │ │ │ -
1617 MTLContext* deviceContext) const {
│ │ │ │ -
1618
│ │ │ │ -
1619 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc,
│ │ │ │ -
1620 dstBuffer->BindMTLBuffer(deviceContext), dstDesc,
│ │ │ │ -
1621 duBuffer->BindMTLBuffer(deviceContext), duDesc,
│ │ │ │ -
1622 dvBuffer->BindMTLBuffer(deviceContext), dvDesc,
│ │ │ │ -
1623 duuBuffer->BindMTLBuffer(deviceContext), duuDesc,
│ │ │ │ -
1624 duvBuffer->BindMTLBuffer(deviceContext), duvDesc,
│ │ │ │ -
1625 dvvBuffer->BindMTLBuffer(deviceContext), dvvDesc,
│ │ │ │ -
1626 numPatchCoords,
│ │ │ │ -
1627 patchCoords->BindMTLBuffer(deviceContext),
│ │ │ │ -
1628 patchTable->GetVaryingPatchArrays(),
│ │ │ │ -
1629 patchTable->GetVaryingPatchIndexBuffer(),
│ │ │ │ -
1630 patchTable->GetPatchParamBuffer(),
│ │ │ │ -
1631 deviceContext
│ │ │ │ -
1632 );
│ │ │ │ -
1633 }
│ │ │ │ -
│ │ │ │ -
1634
│ │ │ │ -
1670 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1671 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1673 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1674 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1675 int numPatchCoords,
│ │ │ │ -
1676 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1677 PATCH_TABLE *patchTable,
│ │ │ │ -
1678 int fvarChannel,
│ │ │ │ -
1679 MTLComputeEvaluator const *instance,
│ │ │ │ -
1680 MTLContext* deviceContext) {
│ │ │ │ -
1681
│ │ │ │ -
1682 if (instance) {
│ │ │ │ -
1683 return instance->EvalPatchesFaceVarying(
│ │ │ │ -
1684 srcBuffer, srcDesc,
│ │ │ │ -
1685 dstBuffer, dstDesc,
│ │ │ │ -
1686 numPatchCoords, patchCoords,
│ │ │ │ -
1687 patchTable,
│ │ │ │ -
1688 fvarChannel,
│ │ │ │ -
1689 deviceContext);
│ │ │ │ -
1690 } else {
│ │ │ │ -
1691 // Create an instance on demand (slow)
│ │ │ │ -
1692 instance = Create(srcDesc, dstDesc,
│ │ │ │ - │ │ │ │ - │ │ │ │ -
1695 deviceContext);
│ │ │ │ -
1696 if (instance) {
│ │ │ │ -
1697 bool r = instance->EvalPatchesFaceVarying(
│ │ │ │ -
1698 srcBuffer, srcDesc,
│ │ │ │ -
1699 dstBuffer, dstDesc,
│ │ │ │ -
1700 numPatchCoords, patchCoords,
│ │ │ │ -
1701 patchTable,
│ │ │ │ -
1702 fvarChannel,
│ │ │ │ -
1703 deviceContext);
│ │ │ │ -
1704 delete instance;
│ │ │ │ -
1705 return r;
│ │ │ │ -
1706 }
│ │ │ │ -
1707 return false;
│ │ │ │ -
1708 }
│ │ │ │ -
1709 }
│ │ │ │ -
│ │ │ │ -
1710
│ │ │ │ -
1740 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1741 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1743 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1744 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1745 int numPatchCoords,
│ │ │ │ -
1746 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1747 PATCH_TABLE *patchTable,
│ │ │ │ -
1748 int fvarChannel,
│ │ │ │ -
1749 MTLContext* deviceContext) const {
│ │ │ │ -
1750
│ │ │ │ -
1751 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc,
│ │ │ │ -
1752 dstBuffer->BindMTLBuffer(deviceContext), dstDesc,
│ │ │ │ -
1753 0, BufferDescriptor(),
│ │ │ │ -
1754 0, BufferDescriptor(),
│ │ │ │ -
1755 numPatchCoords,
│ │ │ │ -
1756 patchCoords->BindMTLBuffer(deviceContext),
│ │ │ │ -
1757 patchTable->GetFVarPatchArrays(fvarChannel),
│ │ │ │ -
1758 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
│ │ │ │ -
1759 patchTable->GetFVarPatchParamBuffer(fvarChannel),
│ │ │ │ -
1760 deviceContext
│ │ │ │ -
1761 );
│ │ │ │ -
1762 }
│ │ │ │ -
│ │ │ │ -
1763
│ │ │ │ -
1811 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1812 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1814 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1815 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1816 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1817 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1818 int numPatchCoords,
│ │ │ │ -
1819 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1820 PATCH_TABLE *patchTable,
│ │ │ │ -
1821 int fvarChannel,
│ │ │ │ -
1822 MTLComputeEvaluator const *instance,
│ │ │ │ -
1823 MTLContext* deviceContext) {
│ │ │ │ -
1824
│ │ │ │ -
1825 if (instance) {
│ │ │ │ -
1826 return instance->EvalPatchesFaceVarying(
│ │ │ │ -
1827 srcBuffer, srcDesc,
│ │ │ │ -
1828 dstBuffer, dstDesc,
│ │ │ │ -
1829 duBuffer, duDesc,
│ │ │ │ -
1830 dvBuffer, dvDesc,
│ │ │ │ -
1831 numPatchCoords, patchCoords,
│ │ │ │ -
1832 patchTable,
│ │ │ │ -
1833 fvarChannel,
│ │ │ │ -
1834 deviceContext);
│ │ │ │ -
1835 } else {
│ │ │ │ -
1836 // Create an instance on demand (slow)
│ │ │ │ -
1837 instance = Create(srcDesc, dstDesc,
│ │ │ │ -
1838 duDesc, dvDesc,
│ │ │ │ -
1839 deviceContext);
│ │ │ │ -
1840 if (instance) {
│ │ │ │ -
1841 bool r = instance->EvalPatchesFaceVarying(
│ │ │ │ -
1842 srcBuffer, srcDesc,
│ │ │ │ -
1843 dstBuffer, dstDesc,
│ │ │ │ -
1844 duBuffer, duDesc,
│ │ │ │ -
1845 dvBuffer, dvDesc,
│ │ │ │ -
1846 numPatchCoords, patchCoords,
│ │ │ │ -
1847 patchTable,
│ │ │ │ -
1848 fvarChannel,
│ │ │ │ -
1849 deviceContext);
│ │ │ │ -
1850 delete instance;
│ │ │ │ -
1851 return r;
│ │ │ │ -
1852 }
│ │ │ │ -
1853 return false;
│ │ │ │ -
1854 }
│ │ │ │ -
1855 }
│ │ │ │ -
│ │ │ │ -
1856
│ │ │ │ -
1898 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1899 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1901 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1902 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1903 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1904 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1905 int numPatchCoords,
│ │ │ │ -
1906 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1907 PATCH_TABLE *patchTable,
│ │ │ │ -
1908 int fvarChannel,
│ │ │ │ -
1909 MTLContext* deviceContext) const {
│ │ │ │ -
1910
│ │ │ │ -
1911 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc,
│ │ │ │ -
1912 dstBuffer->BindMTLBuffer(deviceContext), dstDesc,
│ │ │ │ -
1913 duBuffer->BindMTLBuffer(deviceContext), duDesc,
│ │ │ │ -
1914 dvBuffer->BindMTLBuffer(deviceContext), dvDesc,
│ │ │ │ -
1915 numPatchCoords,
│ │ │ │ -
1916 patchCoords->BindMTLBuffer(deviceContext),
│ │ │ │ -
1917 patchTable->GetFVarPatchArrays(fvarChannel),
│ │ │ │ -
1918 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
│ │ │ │ -
1919 patchTable->GetFVarPatchParamBuffer(fvarChannel),
│ │ │ │ -
1920 deviceContext
│ │ │ │ -
1921 );
│ │ │ │ -
1922 }
│ │ │ │ -
│ │ │ │ -
1923
│ │ │ │ -
1989 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1990 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1992 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1993 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1994 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1995 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1996 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
1997 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
1998 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
1999 int numPatchCoords,
│ │ │ │ -
2000 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
2001 PATCH_TABLE *patchTable,
│ │ │ │ -
2002 int fvarChannel,
│ │ │ │ -
2003 MTLComputeEvaluator const *instance,
│ │ │ │ -
2004 MTLContext* deviceContext) {
│ │ │ │ -
2005
│ │ │ │ -
2006 if (instance) {
│ │ │ │ -
2007 return instance->EvalPatchesFaceVarying(
│ │ │ │ -
2008 srcBuffer, srcDesc,
│ │ │ │ -
2009 dstBuffer, dstDesc,
│ │ │ │ -
2010 duBuffer, duDesc,
│ │ │ │ -
2011 dvBuffer, dvDesc,
│ │ │ │ -
2012 duuBuffer, duuDesc,
│ │ │ │ -
2013 duvBuffer, duvDesc,
│ │ │ │ -
2014 dvvBuffer, dvvDesc,
│ │ │ │ -
2015 numPatchCoords, patchCoords,
│ │ │ │ -
2016 patchTable,
│ │ │ │ -
2017 fvarChannel,
│ │ │ │ -
2018 deviceContext);
│ │ │ │ -
2019 } else {
│ │ │ │ -
2020 // Create an instance on demand (slow)
│ │ │ │ -
2021 instance = Create(srcDesc, dstDesc,
│ │ │ │ -
2022 duDesc, dvDesc,
│ │ │ │ -
2023 duuDesc, duvDesc, dvvDesc,
│ │ │ │ -
2024 deviceContext);
│ │ │ │ -
2025 if (instance) {
│ │ │ │ -
2026 bool r = instance->EvalPatchesFaceVarying(
│ │ │ │ -
2027 srcBuffer, srcDesc,
│ │ │ │ -
2028 dstBuffer, dstDesc,
│ │ │ │ -
2029 duBuffer, duDesc,
│ │ │ │ -
2030 dvBuffer, dvDesc,
│ │ │ │ -
2031 duuBuffer, duuDesc,
│ │ │ │ -
2032 duvBuffer, duvDesc,
│ │ │ │ -
2033 dvvBuffer, dvvDesc,
│ │ │ │ -
2034 numPatchCoords, patchCoords,
│ │ │ │ -
2035 patchTable,
│ │ │ │ -
2036 fvarChannel,
│ │ │ │ -
2037 deviceContext);
│ │ │ │ -
2038 delete instance;
│ │ │ │ -
2039 return r;
│ │ │ │ -
2040 }
│ │ │ │ -
2041 return false;
│ │ │ │ -
2042 }
│ │ │ │ -
2043 }
│ │ │ │ -
│ │ │ │ -
2044
│ │ │ │ -
2104 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
2105 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
2107 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
2108 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
2109 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
2110 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
2111 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
2112 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
2113 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
2114 int numPatchCoords,
│ │ │ │ -
2115 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
2116 PATCH_TABLE *patchTable,
│ │ │ │ -
2117 int fvarChannel,
│ │ │ │ -
2118 MTLContext* deviceContext) const {
│ │ │ │ -
2119
│ │ │ │ -
2120 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc,
│ │ │ │ -
2121 dstBuffer->BindMTLBuffer(deviceContext), dstDesc,
│ │ │ │ -
2122 duBuffer->BindMTLBuffer(deviceContext), duDesc,
│ │ │ │ -
2123 dvBuffer->BindMTLBuffer(deviceContext), dvDesc,
│ │ │ │ -
2124 duuBuffer->BindMTLBuffer(deviceContext), duuDesc,
│ │ │ │ -
2125 duvBuffer->BindMTLBuffer(deviceContext), duvDesc,
│ │ │ │ -
2126 dvvBuffer->BindMTLBuffer(deviceContext), dvvDesc,
│ │ │ │ -
2127 numPatchCoords,
│ │ │ │ -
2128 patchCoords->BindMTLBuffer(deviceContext),
│ │ │ │ -
2129 patchTable->GetFVarPatchArrays(fvarChannel),
│ │ │ │ -
2130 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
│ │ │ │ -
2131 patchTable->GetFVarPatchParamBuffer(fvarChannel),
│ │ │ │ -
2132 fvarChannel,
│ │ │ │ -
2133 deviceContext
│ │ │ │ -
2134 );
│ │ │ │ -
2135 }
│ │ │ │ -
│ │ │ │ -
2136
│ │ │ │ -
2138 bool Compile(BufferDescriptor const &srcDesc,
│ │ │ │ -
2139 BufferDescriptor const &dstDesc,
│ │ │ │ -
2140 BufferDescriptor const &duDesc,
│ │ │ │ -
2141 BufferDescriptor const &dvDesc,
│ │ │ │ -
2142 BufferDescriptor const &duuDesc,
│ │ │ │ -
2143 BufferDescriptor const &duvDesc,
│ │ │ │ -
2144 BufferDescriptor const &dvvDesc,
│ │ │ │ -
2145 MTLContext* context);
│ │ │ │ -
2146
│ │ │ │ -
2148 static void Synchronize(MTLContext* context);
│ │ │ │ -
2149
│ │ │ │ -
2150 private:
│ │ │ │ -
2151
│ │ │ │ -
2152 id<MTLLibrary> _computeLibrary;
│ │ │ │ -
2153 id<MTLComputePipelineState> _evalStencils;
│ │ │ │ -
2154 id<MTLComputePipelineState> _evalPatches;
│ │ │ │ -
2155 id<MTLBuffer> _parameterBuffer;
│ │ │ │ -
2156
│ │ │ │ -
2157 int _workGroupSize;
│ │ │ │ -
2158};
│ │ │ │ -
│ │ │ │ -
2159
│ │ │ │ -
2160} //end namespace Osd
│ │ │ │ -
2161
│ │ │ │ -
2162} //end namespace OPENSUBDIV_VERSION
│ │ │ │ -
2163using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
2164
│ │ │ │ -
2165} //end namespace OpenSubdiv
│ │ │ │ -
2166
│ │ │ │ -
2167#endif // OPENSUBDIV3_OSD_MTL_COMPUTE_EVALUATOR_H
│ │ │ │ +
│ │ │ │ +
61 id<MTLBuffer> GetVertexValenceBuffer() const
│ │ │ │ +
62 {
│ │ │ │ +
63 return _vertexValenceBuffer;
│ │ │ │ +
64 }
│ │ │ │ +
│ │ │ │ +
65
│ │ │ │ +
│ │ │ │ +
66 id<MTLBuffer> GetQuadOffsetsBuffer() const
│ │ │ │ +
67 {
│ │ │ │ +
68 return _quadOffsetsBuffer;
│ │ │ │ +
69 }
│ │ │ │ +
│ │ │ │ +
70
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
72 {
│ │ │ │ + │ │ │ │ +
74 return _quadOffsetsBase[1];
│ │ │ │ +
75 return _quadOffsetsBase[0];
│ │ │ │ +
76 }
│ │ │ │ +
│ │ │ │ +
77
│ │ │ │ +
78private:
│ │ │ │ +
79 id<MTLBuffer> _vertexBuffer;
│ │ │ │ +
80 id<MTLBuffer> _vertexValenceBuffer;
│ │ │ │ +
81 id<MTLBuffer> _quadOffsetsBuffer;
│ │ │ │ +
82 int _quadOffsetsBase[2];
│ │ │ │ +
83};
│ │ │ │ +
│ │ │ │ +
84
│ │ │ │ +
85} //end namespace Osd
│ │ │ │ +
86
│ │ │ │ +
87} //end namespace OPENSUBDIV_VERSION
│ │ │ │ +
88using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
89
│ │ │ │ +
90} //end namespace OpenSuddiv
│ │ │ │ +
91
│ │ │ │ +
92#endif // OPENSUBDIV3_OSD_MTL_LEGACY_GREGORY_PATCH_TABLE_H
│ │ │ │ │ │ │ │ -
std::vector< PatchArray > PatchArrayVector
Definition types.h:132
│ │ │ │ -
Stencil table class wrapping the template for compatibility.
│ │ │ │ -
Limit stencil table class wrapping the template for compatibility.
│ │ │ │ -
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ + │ │ │ │ + │ │ │ │ +
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ │ │ │ │ - │ │ │ │ -
MTLStencilTable(Far::LimitStencilTable const *stencilTable, MTLContext *context)
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
MTLStencilTable(Far::StencilTable const *stencilTable, MTLContext *context)
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
static MTLStencilTable * Create(STENCIL_TABLE *stencilTable, DEVICE_CONTEXT context)
│ │ │ │ - │ │ │ │ - │ │ │ │ -
bool EvalStencils(id< MTLBuffer > srcBuffer, BufferDescriptor const &srcDesc, id< MTLBuffer > dstBuffer, BufferDescriptor const &dstDesc, id< MTLBuffer > duBuffer, BufferDescriptor const &duDesc, id< MTLBuffer > dvBuffer, BufferDescriptor const &dvDesc, id< MTLBuffer > duuBuffer, BufferDescriptor const &duuDesc, id< MTLBuffer > duvBuffer, BufferDescriptor const &duvDesc, id< MTLBuffer > dvvBuffer, BufferDescriptor const &dvvDesc, id< MTLBuffer > sizesBuffer, id< MTLBuffer > offsetsBuffer, id< MTLBuffer > indicesBuffer, id< MTLBuffer > weightsBuffer, id< MTLBuffer > duWeightsBuffer, id< MTLBuffer > dvWeightsBuffer, id< MTLBuffer > duuWeightsBuffer, id< MTLBuffer > duvWeightsBuffer, id< MTLBuffer > dvvWeightsBuffer, int start, int end, MTLContext *context) const
Dispatch the MTL compute kernel on GPU asynchronously returns false if the kernel hasn't been compile...
│ │ │ │ -
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, MTLComputeEvaluator *instance, MTLContext *context)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ -
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, MTLComputeEvaluator const *instance, MTLContext *context)
Generic static stencil function. This function has a same signature as other device kernels have so t...
│ │ │ │ -
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, MTLComputeEvaluator const *instance, MTLContext *deviceContext)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ - │ │ │ │ - │ │ │ │ -
static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, MTLComputeEvaluator const *instance, MTLContext *context)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ - │ │ │ │ -
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, MTLContext *deviceContext) const
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ -
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, MTLComputeEvaluator const *instance, MTLContext *context)
Generic static stencil function. This function has a same signature as other device kernels have so t...
│ │ │ │ -
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, MTLContext *deviceContext) const
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ -
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, MTLComputeEvaluator const *instance, MTLContext *deviceContext)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ -
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, MTLComputeEvaluator const *instance, MTLContext *deviceContext)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ -
bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, MTLContext *context) const
Generic stencil function.
│ │ │ │ -
bool EvalPatches(id< MTLBuffer > srcBuffer, BufferDescriptor const &srcDesc, id< MTLBuffer > dstBuffer, BufferDescriptor const &dstDesc, id< MTLBuffer > duBuffer, BufferDescriptor const &duDesc, id< MTLBuffer > dvBuffer, BufferDescriptor const &dvDesc, id< MTLBuffer > duuBuffer, BufferDescriptor const &duuDesc, id< MTLBuffer > duvBuffer, BufferDescriptor const &duvDesc, id< MTLBuffer > dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, id< MTLBuffer > patchCoordsBuffer, const PatchArrayVector &patchArrays, id< MTLBuffer > patchIndexBuffer, id< MTLBuffer > patchParamsBuffer, MTLContext *context) const
│ │ │ │ -
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, MTLContext *deviceContext) const
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ -
static void Synchronize(MTLContext *context)
Wait for the dispatched kernel to finish.
│ │ │ │ -
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, MTLContext *context) const
Generic stencil function.
│ │ │ │ -
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, MTLComputeEvaluator *instance, MTLContext *context)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ -
bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, MTLContext *deviceContext) const
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ -
static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, MTLComputeEvaluator const *instance, MTLContext *deviceContext)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ -
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, MTLContext *context) const
Generic stencil function.
│ │ │ │ -
bool EvalStencils(id< MTLBuffer > srcBuffer, BufferDescriptor const &srcDesc, id< MTLBuffer > dstBuffer, BufferDescriptor const &dstDesc, id< MTLBuffer > duBuffer, BufferDescriptor const &duDesc, id< MTLBuffer > dvBuffer, BufferDescriptor const &dvDesc, id< MTLBuffer > sizesBuffer, id< MTLBuffer > offsetsBuffer, id< MTLBuffer > indicesBuffer, id< MTLBuffer > weightsBuffer, id< MTLBuffer > duWeightsBuffer, id< MTLBuffer > dvWeightsBuffer, int start, int end, MTLContext *context) const
Dispatch the MTL compute kernel on GPU asynchronously returns false if the kernel hasn't been compile...
│ │ │ │ -
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, MTLComputeEvaluator const *instance, MTLContext *deviceContext)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ -
bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, MTLContext *context) const
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ -
static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, MTLComputeEvaluator const *instance, MTLContext *context)
Generic static stencil function. This function has a same signature as other device kernels have so t...
│ │ │ │ -
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, MTLComputeEvaluator const *instance, MTLContext *deviceContext)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ -
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, MTLContext *context) const
Generic limit eval function with derivatives. This function has a same signature as other device kern...
│ │ │ │ -
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, MTLContext *context) const
Generic limit eval function with derivatives. This function has a same signature as other device kern...
│ │ │ │ -
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, MTLContext *deviceContext) const
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ -
bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, MTLContext *deviceContext) const
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ -
static MTLComputeEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, MTLContext *context)
│ │ │ │ -
static MTLComputeEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, MTLContext *context)
│ │ │ │ -
bool Compile(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, MTLContext *context)
Configure compute pipline state. Returns false if it fails to create the pipeline state.
│ │ │ │ -
bool EvalPatches(id< MTLBuffer > srcBuffer, BufferDescriptor const &srcDesc, id< MTLBuffer > dstBuffer, BufferDescriptor const &dstDesc, id< MTLBuffer > duBuffer, BufferDescriptor const &duDesc, id< MTLBuffer > dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, id< MTLBuffer > patchCoordsBuffer, const PatchArrayVector &patchArrays, id< MTLBuffer > patchIndexBuffer, id< MTLBuffer > patchParamsBuffer, MTLContext *context) const
│ │ │ │ + │ │ │ │ + │ │ │ │ +
static MTLLegacyGregoryPatchTable * Create(Far::PatchTable const *farPatchTable, DEVICE_CONTEXT context)
│ │ │ │ + │ │ │ │ + │ │ │ │ +
static MTLLegacyGregoryPatchTable * Create(Far::PatchTable const *farPatchTable, MTLContext *context)
│ │ │ │ +
void UpdateVertexBuffer(id< MTLBuffer > vbo, int numVertices, int numVertexElements, MTLContext *context)
│ │ │ │ + │ │ │ │ + │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,12 +1,12 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -mtlComputeEvaluator.h │ │ │ │ │ +mtlLegacyGregoryPatchTable.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ 2// Copyright 2013 Pixar │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ @@ -24,1382 +24,127 @@ │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ 24 │ │ │ │ │ -25#ifndef OPENSUBDIV3_OSD_MTL_COMPUTE_EVALUATOR_H │ │ │ │ │ -26#define OPENSUBDIV3_OSD_MTL_COMPUTE_EVALUATOR_H │ │ │ │ │ +25#ifndef OPENSUBDIV3_OSD_MTL_LEGACY_GREGORY_PATCH_TABLE_H │ │ │ │ │ +26#define OPENSUBDIV3_OSD_MTL_LEGACY_GREGORY_PATCH_TABLE_H │ │ │ │ │ 27 │ │ │ │ │ 28#include "../version.h" │ │ │ │ │ -29 │ │ │ │ │ -30#include "../osd/types.h" │ │ │ │ │ -31#include "../osd/bufferDescriptor.h" │ │ │ │ │ -32#include "../osd/mtlCommon.h" │ │ │ │ │ -33 │ │ │ │ │ -34@protocol MTLDevice; │ │ │ │ │ -35@protocol MTLBuffer; │ │ │ │ │ -36@protocol MTLLibrary; │ │ │ │ │ -37@protocol MTLComputePipelineState; │ │ │ │ │ +29#include "../far/patchTable.h" │ │ │ │ │ +30#include "../osd/nonCopyable.h" │ │ │ │ │ +31#include "../osd/mtlCommon.h" │ │ │ │ │ +32 │ │ │ │ │ +33@protocol MTLDevice; │ │ │ │ │ +34@protocol MTLBuffer; │ │ │ │ │ +35 │ │ │ │ │ +36namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ +37namespace OPENSUBDIV_VERSION { │ │ │ │ │ 38 │ │ │ │ │ -39namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ -40namespace OPENSUBDIV_VERSION { │ │ │ │ │ -41 │ │ │ │ │ -42namespace Far { │ │ │ │ │ -43 class PatchTable; │ │ │ │ │ -44 class StencilTable; │ │ │ │ │ -45 class LimitStencilTable; │ │ │ │ │ -46} │ │ │ │ │ -47 │ │ │ │ │ -48namespace Osd { │ │ │ │ │ -49 │ │ │ │ │ -_5_0class _M_T_L_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -51{ │ │ │ │ │ -52public: │ │ │ │ │ -53 template │ │ │ │ │ -_5_4 static _M_T_L_S_t_e_n_c_i_l_T_a_b_l_e* _C_r_e_a_t_e(STENCIL_TABLE* stencilTable, │ │ │ │ │ -55 DEVICE_CONTEXT context) │ │ │ │ │ -56 { │ │ │ │ │ -57 return new _M_T_L_S_t_e_n_c_i_l_T_a_b_l_e(stencilTable, context); │ │ │ │ │ -58 } │ │ │ │ │ -59 │ │ │ │ │ +39namespace Osd { │ │ │ │ │ +40 │ │ │ │ │ +_4_1class _M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +42: private NonCopyable │ │ │ │ │ +43{ │ │ │ │ │ +44public: │ │ │ │ │ +_4_5 _~_M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e(); │ │ │ │ │ +46 │ │ │ │ │ +47 template │ │ │ │ │ +_4_8 static _M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e* _C_r_e_a_t_e(_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e const* │ │ │ │ │ +farPatchTable, DEVICE_CONTEXT context) { │ │ │ │ │ +49 return Create(farPatchTable, context); │ │ │ │ │ +50 } │ │ │ │ │ +51 │ │ │ │ │ +_5_2 static _M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e* _C_r_e_a_t_e(_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e const* │ │ │ │ │ +farPatchTable, _M_T_L_C_o_n_t_e_x_t* context); │ │ │ │ │ +53 │ │ │ │ │ +_5_4 void _U_p_d_a_t_e_V_e_r_t_e_x_B_u_f_f_e_r(id vbo, int numVertices, int │ │ │ │ │ +numVertexElements, _M_T_L_C_o_n_t_e_x_t* context); │ │ │ │ │ +55 │ │ │ │ │ +_5_6 id _G_e_t_V_e_r_t_e_x_B_u_f_f_e_r() const │ │ │ │ │ +57 { │ │ │ │ │ +58 return _vertexBuffer; │ │ │ │ │ +59 } │ │ │ │ │ 60 │ │ │ │ │ -_6_1 _M_T_L_S_t_e_n_c_i_l_T_a_b_l_e(_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e const* stencilTable, _M_T_L_C_o_n_t_e_x_t* context); │ │ │ │ │ -_6_2 _M_T_L_S_t_e_n_c_i_l_T_a_b_l_e(_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e const* stencilTable, _M_T_L_C_o_n_t_e_x_t* │ │ │ │ │ -context); │ │ │ │ │ -_6_3 _~_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e(); │ │ │ │ │ -64 │ │ │ │ │ -_6_5 id _G_e_t_S_i_z_e_s_B_u_f_f_e_r() const { return _sizesBuffer; } │ │ │ │ │ -_6_6 id _G_e_t_O_f_f_s_e_t_s_B_u_f_f_e_r() const { return _offsetsBuffer; } │ │ │ │ │ -_6_7 id _G_e_t_I_n_d_i_c_e_s_B_u_f_f_e_r() const { return _indicesBuffer; } │ │ │ │ │ -_6_8 id _G_e_t_W_e_i_g_h_t_s_B_u_f_f_e_r() const { return _weightsBuffer; } │ │ │ │ │ -_6_9 id _G_e_t_D_u_W_e_i_g_h_t_s_B_u_f_f_e_r() const { return _duWeightsBuffer; } │ │ │ │ │ -_7_0 id _G_e_t_D_v_W_e_i_g_h_t_s_B_u_f_f_e_r() const { return _dvWeightsBuffer; } │ │ │ │ │ -_7_1 id _G_e_t_D_u_u_W_e_i_g_h_t_s_B_u_f_f_e_r() const { return _duuWeightsBuffer; } │ │ │ │ │ -_7_2 id _G_e_t_D_u_v_W_e_i_g_h_t_s_B_u_f_f_e_r() const { return _duvWeightsBuffer; } │ │ │ │ │ -_7_3 id _G_e_t_D_v_v_W_e_i_g_h_t_s_B_u_f_f_e_r() const { return _dvvWeightsBuffer; } │ │ │ │ │ -74 │ │ │ │ │ -_7_5 int _G_e_t_N_u_m_S_t_e_n_c_i_l_s() const { return _numStencils; } │ │ │ │ │ -76 │ │ │ │ │ -77private: │ │ │ │ │ -78 id _sizesBuffer; │ │ │ │ │ -79 id _offsetsBuffer; │ │ │ │ │ -80 id _indicesBuffer; │ │ │ │ │ -81 id _weightsBuffer; │ │ │ │ │ -82 id _duWeightsBuffer; │ │ │ │ │ -83 id _dvWeightsBuffer; │ │ │ │ │ -84 id _duuWeightsBuffer; │ │ │ │ │ -85 id _duvWeightsBuffer; │ │ │ │ │ -86 id _dvvWeightsBuffer; │ │ │ │ │ -87 │ │ │ │ │ -88 int _numStencils; │ │ │ │ │ -89}; │ │ │ │ │ -90 │ │ │ │ │ -_9_1class _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r │ │ │ │ │ -92{ │ │ │ │ │ -93public: │ │ │ │ │ -_9_4 typedef bool _I_n_s_t_a_n_t_i_a_t_a_b_l_e; │ │ │ │ │ -95 │ │ │ │ │ -_9_6 static _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r * _C_r_e_a_t_e(_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -97 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -98 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -99 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -100 _M_T_L_C_o_n_t_e_x_t* context); │ │ │ │ │ -101 │ │ │ │ │ -_1_0_2 static _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r * _C_r_e_a_t_e(_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -103 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -104 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -105 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -106 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -107 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -108 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -109 _M_T_L_C_o_n_t_e_x_t* context); │ │ │ │ │ -110 │ │ │ │ │ -_1_1_1 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r(); │ │ │ │ │ -_1_1_2 _~_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r(); │ │ │ │ │ -113 │ │ │ │ │ -119 │ │ │ │ │ -148 template │ │ │ │ │ -_1_4_9 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ -150 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -151 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -152 STENCIL_TABLE const *stencilTable, │ │ │ │ │ -153 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -154 _M_T_L_C_o_n_t_e_x_t* context) │ │ │ │ │ -155 { │ │ │ │ │ -156 if (instance) { │ │ │ │ │ -157 return instance->_E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer, srcDesc, │ │ │ │ │ -158 dstBuffer, dstDesc, │ │ │ │ │ -159 stencilTable, │ │ │ │ │ -160 context); │ │ │ │ │ -161 } else { │ │ │ │ │ -162 // Create an instance on demand (slow) │ │ │ │ │ -163 instance = Create(srcDesc, dstDesc, │ │ │ │ │ -164 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -165 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -166 context); │ │ │ │ │ -167 if (instance) { │ │ │ │ │ -168 bool r = instance->_E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer, srcDesc, │ │ │ │ │ -169 dstBuffer, dstDesc, │ │ │ │ │ -170 stencilTable, │ │ │ │ │ -171 context); │ │ │ │ │ -172 delete instance; │ │ │ │ │ -173 return r; │ │ │ │ │ -174 } │ │ │ │ │ -175 return false; │ │ │ │ │ -176 } │ │ │ │ │ -177 } │ │ │ │ │ -178 │ │ │ │ │ -219 template │ │ │ │ │ -_2_2_0 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ -221 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -222 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -223 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -224 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -225 STENCIL_TABLE const *stencilTable, │ │ │ │ │ -226 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -227 _M_T_L_C_o_n_t_e_x_t* context) { │ │ │ │ │ -228 │ │ │ │ │ -229 if (instance) { │ │ │ │ │ -230 return instance->_E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer, srcDesc, │ │ │ │ │ -231 dstBuffer, dstDesc, │ │ │ │ │ -232 duBuffer, duDesc, │ │ │ │ │ -233 dvBuffer, dvDesc, │ │ │ │ │ -234 stencilTable, │ │ │ │ │ -235 context); │ │ │ │ │ -236 } else { │ │ │ │ │ -237 // Create an instance on demand (slow) │ │ │ │ │ -238 instance = Create(srcDesc, dstDesc, duDesc, dvDesc, context); │ │ │ │ │ -239 if (instance) { │ │ │ │ │ -240 bool r = instance->_E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer, srcDesc, │ │ │ │ │ -241 dstBuffer, dstDesc, │ │ │ │ │ -242 duBuffer, duDesc, │ │ │ │ │ -243 dvBuffer, dvDesc, │ │ │ │ │ -244 stencilTable, │ │ │ │ │ -245 context); │ │ │ │ │ -246 delete instance; │ │ │ │ │ -247 return r; │ │ │ │ │ -248 } │ │ │ │ │ -249 return false; │ │ │ │ │ -250 } │ │ │ │ │ -251 } │ │ │ │ │ -252 │ │ │ │ │ -311 template │ │ │ │ │ -_3_1_2 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ -313 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -314 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -315 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -316 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -317 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -318 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -319 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -320 STENCIL_TABLE const *stencilTable, │ │ │ │ │ -321 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -322 _M_T_L_C_o_n_t_e_x_t* context) { │ │ │ │ │ -323 │ │ │ │ │ -324 if (instance) { │ │ │ │ │ -325 return instance->_E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer, srcDesc, │ │ │ │ │ -326 dstBuffer, dstDesc, │ │ │ │ │ -327 duBuffer, duDesc, │ │ │ │ │ -328 dvBuffer, dvDesc, │ │ │ │ │ -329 duuBuffer, duuDesc, │ │ │ │ │ -330 duvBuffer, duvDesc, │ │ │ │ │ -331 dvvBuffer, dvvDesc, │ │ │ │ │ -332 stencilTable, │ │ │ │ │ -333 context); │ │ │ │ │ -334 } else { │ │ │ │ │ -335 // Create an instance on demand (slow) │ │ │ │ │ -336 instance = Create(srcDesc, dstDesc, duDesc, dvDesc, │ │ │ │ │ -337 duuDesc, duvDesc, dvvDesc, context); │ │ │ │ │ -338 if (instance) { │ │ │ │ │ -339 bool r = instance->_E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer, srcDesc, │ │ │ │ │ -340 dstBuffer, dstDesc, │ │ │ │ │ -341 duBuffer, duDesc, │ │ │ │ │ -342 dvBuffer, dvDesc, │ │ │ │ │ -343 duuBuffer, duuDesc, │ │ │ │ │ -344 duvBuffer, duvDesc, │ │ │ │ │ -345 dvvBuffer, dvvDesc, │ │ │ │ │ -346 stencilTable, │ │ │ │ │ -347 context); │ │ │ │ │ -348 delete instance; │ │ │ │ │ -349 return r; │ │ │ │ │ -350 } │ │ │ │ │ -351 return false; │ │ │ │ │ -352 } │ │ │ │ │ -353 } │ │ │ │ │ -354 │ │ │ │ │ -375 template │ │ │ │ │ -_3_7_6 bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ -377 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -378 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -379 STENCIL_TABLE const *stencilTable, │ │ │ │ │ -380 _M_T_L_C_o_n_t_e_x_t* context) const │ │ │ │ │ -381 { │ │ │ │ │ -382 return EvalStencils(srcBuffer->BindMTLBuffer(context), srcDesc, │ │ │ │ │ -383 dstBuffer->BindMTLBuffer(context), dstDesc, │ │ │ │ │ -384 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -385 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -386 stencilTable->GetSizesBuffer(), │ │ │ │ │ -387 stencilTable->GetOffsetsBuffer(), │ │ │ │ │ -388 stencilTable->GetIndicesBuffer(), │ │ │ │ │ -389 stencilTable->GetWeightsBuffer(), │ │ │ │ │ -390 0, │ │ │ │ │ -391 0, │ │ │ │ │ -392 /* start = */ 0, │ │ │ │ │ -393 /* end = */ stencilTable->GetNumStencils(), │ │ │ │ │ -394 context); │ │ │ │ │ -395 } │ │ │ │ │ -396 │ │ │ │ │ -429 template │ │ │ │ │ -_4_3_0 bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ -431 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -432 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -433 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -434 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -435 STENCIL_TABLE const *stencilTable, │ │ │ │ │ -436 _M_T_L_C_o_n_t_e_x_t* context) const │ │ │ │ │ -437 { │ │ │ │ │ -438 return EvalStencils(srcBuffer->BindMTLBuffer(context), srcDesc, │ │ │ │ │ -439 dstBuffer->BindMTLBuffer(context), dstDesc, │ │ │ │ │ -440 duBuffer->BindMTLBuffer(context), duDesc, │ │ │ │ │ -441 dvBuffer->BindMTLBuffer(context), dvDesc, │ │ │ │ │ -442 stencilTable->GetSizesBuffer(), │ │ │ │ │ -443 stencilTable->GetOffsetsBuffer(), │ │ │ │ │ -444 stencilTable->GetIndicesBuffer(), │ │ │ │ │ -445 stencilTable->GetWeightsBuffer(), │ │ │ │ │ -446 stencilTable->GetDuWeightsBuffer(), │ │ │ │ │ -447 stencilTable->GetDvWeightsBuffer(), │ │ │ │ │ -448 /* start = */ 0, │ │ │ │ │ -449 /* end = */ stencilTable->GetNumStencils(), │ │ │ │ │ -450 context); │ │ │ │ │ -451 } │ │ │ │ │ -452 │ │ │ │ │ -503 template │ │ │ │ │ -_5_0_4 bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ -505 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -506 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -507 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -508 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -509 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -510 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -511 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -512 STENCIL_TABLE const *stencilTable, │ │ │ │ │ -513 _M_T_L_C_o_n_t_e_x_t* context) const │ │ │ │ │ -514 { │ │ │ │ │ -515 return EvalStencils(srcBuffer->BindMTLBuffer(context), srcDesc, │ │ │ │ │ -516 dstBuffer->BindMTLBuffer(context), dstDesc, │ │ │ │ │ -517 duBuffer->BindMTLBuffer(context), duDesc, │ │ │ │ │ -518 dvBuffer->BindMTLBuffer(context), dvDesc, │ │ │ │ │ -519 duuBuffer->BindMTLBuffer(context), duuDesc, │ │ │ │ │ -520 duvBuffer->BindMTLBuffer(context), duvDesc, │ │ │ │ │ -521 dvvBuffer->BindMTLBuffer(context), dvvDesc, │ │ │ │ │ -522 stencilTable->GetSizesBuffer(), │ │ │ │ │ -523 stencilTable->GetOffsetsBuffer(), │ │ │ │ │ -524 stencilTable->GetIndicesBuffer(), │ │ │ │ │ -525 stencilTable->GetWeightsBuffer(), │ │ │ │ │ -526 stencilTable->GetDuWeightsBuffer(), │ │ │ │ │ -527 stencilTable->GetDvWeightsBuffer(), │ │ │ │ │ -528 stencilTable->GetDuuWeightsBuffer(), │ │ │ │ │ -529 stencilTable->GetDuvWeightsBuffer(), │ │ │ │ │ -530 stencilTable->GetDvvWeightsBuffer(), │ │ │ │ │ -531 /* start = */ 0, │ │ │ │ │ -532 /* end = */ stencilTable->GetNumStencils(), │ │ │ │ │ -533 context); │ │ │ │ │ -534 } │ │ │ │ │ -535 │ │ │ │ │ -_5_7_4 bool _E_v_a_l_S_t_e_n_c_i_l_s(id srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -575 id dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -576 id duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -577 id dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -578 id sizesBuffer, │ │ │ │ │ -579 id offsetsBuffer, │ │ │ │ │ -580 id indicesBuffer, │ │ │ │ │ -581 id weightsBuffer, │ │ │ │ │ -582 id duWeightsBuffer, │ │ │ │ │ -583 id dvWeightsBuffer, │ │ │ │ │ -584 int start, │ │ │ │ │ -585 int end, │ │ │ │ │ -586 _M_T_L_C_o_n_t_e_x_t* context) const; │ │ │ │ │ -587 │ │ │ │ │ -_6_4_4 bool _E_v_a_l_S_t_e_n_c_i_l_s(id srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -645 id dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -646 id duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -647 id dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -648 id duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -649 id duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -650 id dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -651 id sizesBuffer, │ │ │ │ │ -652 id offsetsBuffer, │ │ │ │ │ -653 id indicesBuffer, │ │ │ │ │ -654 id weightsBuffer, │ │ │ │ │ -655 id duWeightsBuffer, │ │ │ │ │ -656 id dvWeightsBuffer, │ │ │ │ │ -657 id duuWeightsBuffer, │ │ │ │ │ -658 id duvWeightsBuffer, │ │ │ │ │ -659 id dvvWeightsBuffer, │ │ │ │ │ -660 int start, │ │ │ │ │ -661 int end, │ │ │ │ │ -662 _M_T_L_C_o_n_t_e_x_t* context) const; │ │ │ │ │ -663 │ │ │ │ │ -669 │ │ │ │ │ -703 template │ │ │ │ │ -_7_0_5 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ -706 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -707 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -708 int numPatchCoords, │ │ │ │ │ -709 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -710 PATCH_TABLE *patchTable, │ │ │ │ │ -711 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -712 _M_T_L_C_o_n_t_e_x_t* context) { │ │ │ │ │ -713 │ │ │ │ │ -714 if (instance) { │ │ │ │ │ -715 return instance->_E_v_a_l_P_a_t_c_h_e_s(srcBuffer, srcDesc, │ │ │ │ │ -716 dstBuffer, dstDesc, │ │ │ │ │ -717 numPatchCoords, patchCoords, │ │ │ │ │ -718 patchTable, │ │ │ │ │ -719 context); │ │ │ │ │ -720 } else { │ │ │ │ │ -721 // Create an instance on demand (slow) │ │ │ │ │ -722 instance = Create(srcDesc, dstDesc, │ │ │ │ │ -723 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -724 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -725 context); │ │ │ │ │ -726 if (instance) { │ │ │ │ │ -727 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s(srcBuffer, srcDesc, │ │ │ │ │ -728 dstBuffer, dstDesc, │ │ │ │ │ -729 numPatchCoords, patchCoords, │ │ │ │ │ -730 patchTable, │ │ │ │ │ -731 context); │ │ │ │ │ -732 delete instance; │ │ │ │ │ -733 return r; │ │ │ │ │ -734 } │ │ │ │ │ -735 return false; │ │ │ │ │ -736 } │ │ │ │ │ -737 } │ │ │ │ │ -738 │ │ │ │ │ -784 template │ │ │ │ │ -_7_8_6 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ -787 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -788 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -789 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -790 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -791 int numPatchCoords, │ │ │ │ │ -792 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -793 PATCH_TABLE *patchTable, │ │ │ │ │ -794 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r* instance, │ │ │ │ │ -795 _M_T_L_C_o_n_t_e_x_t* context) { │ │ │ │ │ -796 │ │ │ │ │ -797 if (instance) { │ │ │ │ │ -798 return instance->_E_v_a_l_P_a_t_c_h_e_s(srcBuffer, srcDesc, │ │ │ │ │ -799 dstBuffer, dstDesc, │ │ │ │ │ -800 duBuffer, duDesc, │ │ │ │ │ -801 dvBuffer, dvDesc, │ │ │ │ │ -802 numPatchCoords, patchCoords, │ │ │ │ │ -803 patchTable, │ │ │ │ │ -804 context); │ │ │ │ │ -805 } else { │ │ │ │ │ -806 // Create an instance on demand (slow) │ │ │ │ │ -807 instance = Create(srcDesc, dstDesc, │ │ │ │ │ -808 duDesc, dvDesc, context); │ │ │ │ │ -809 if (instance) { │ │ │ │ │ -810 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s(srcBuffer, srcDesc, │ │ │ │ │ -811 dstBuffer, dstDesc, │ │ │ │ │ -812 duBuffer, duDesc, │ │ │ │ │ -813 dvBuffer, dvDesc, │ │ │ │ │ -814 numPatchCoords, patchCoords, │ │ │ │ │ -815 patchTable, │ │ │ │ │ -816 context); │ │ │ │ │ -817 delete instance; │ │ │ │ │ -818 return r; │ │ │ │ │ -819 } │ │ │ │ │ -820 return false; │ │ │ │ │ -821 } │ │ │ │ │ -822 } │ │ │ │ │ -823 │ │ │ │ │ -887 template │ │ │ │ │ -_8_8_9 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ -890 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -891 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -892 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -893 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -894 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -895 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -896 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -897 int numPatchCoords, │ │ │ │ │ -898 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -899 PATCH_TABLE *patchTable, │ │ │ │ │ -900 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r* instance, │ │ │ │ │ -901 _M_T_L_C_o_n_t_e_x_t* context) { │ │ │ │ │ -902 │ │ │ │ │ -903 if (instance) { │ │ │ │ │ -904 return instance->_E_v_a_l_P_a_t_c_h_e_s(srcBuffer, srcDesc, │ │ │ │ │ -905 dstBuffer, dstDesc, │ │ │ │ │ -906 duBuffer, duDesc, │ │ │ │ │ -907 dvBuffer, dvDesc, │ │ │ │ │ -908 duuBuffer, duuDesc, │ │ │ │ │ -909 duvBuffer, duvDesc, │ │ │ │ │ -910 dvvBuffer, dvvDesc, │ │ │ │ │ -911 numPatchCoords, patchCoords, │ │ │ │ │ -912 patchTable, │ │ │ │ │ -913 context); │ │ │ │ │ -914 } else { │ │ │ │ │ -915 // Create an instance on demand (slow) │ │ │ │ │ -916 instance = Create(srcDesc, dstDesc, │ │ │ │ │ -917 duDesc, dvDesc, │ │ │ │ │ -918 duuDesc, duvDesc, dvvDesc, context); │ │ │ │ │ -919 if (instance) { │ │ │ │ │ -920 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s(srcBuffer, srcDesc, │ │ │ │ │ -921 dstBuffer, dstDesc, │ │ │ │ │ -922 duBuffer, duDesc, │ │ │ │ │ -923 dvBuffer, dvDesc, │ │ │ │ │ -924 duuBuffer, duuDesc, │ │ │ │ │ -925 duvBuffer, duvDesc, │ │ │ │ │ -926 dvvBuffer, dvvDesc, │ │ │ │ │ -927 numPatchCoords, patchCoords, │ │ │ │ │ -928 patchTable, │ │ │ │ │ -929 context); │ │ │ │ │ -930 delete instance; │ │ │ │ │ -931 return r; │ │ │ │ │ -932 } │ │ │ │ │ -933 return false; │ │ │ │ │ -934 } │ │ │ │ │ -935 } │ │ │ │ │ -936 │ │ │ │ │ -964 template │ │ │ │ │ -_9_6_6 bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ -967 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -968 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -969 int numPatchCoords, │ │ │ │ │ -970 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -971 PATCH_TABLE *patchTable, │ │ │ │ │ -972 _M_T_L_C_o_n_t_e_x_t* context) const { │ │ │ │ │ -973 │ │ │ │ │ -974 return EvalPatches(srcBuffer->BindMTLBuffer(context), srcDesc, │ │ │ │ │ -975 dstBuffer->BindMTLBuffer(context), dstDesc, │ │ │ │ │ -976 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -977 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -978 numPatchCoords, │ │ │ │ │ -979 patchCoords->BindMTLBuffer(context), │ │ │ │ │ -980 patchTable->GetPatchArrays(), │ │ │ │ │ -981 patchTable->GetPatchIndexBuffer(), │ │ │ │ │ -982 patchTable->GetPatchParamBuffer(), │ │ │ │ │ -983 context); │ │ │ │ │ -984 } │ │ │ │ │ -985 │ │ │ │ │ -1023 template │ │ │ │ │ -_1_0_2_5 bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ -1026 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1027 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1028 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1029 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1030 int numPatchCoords, │ │ │ │ │ -1031 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1032 PATCH_TABLE *patchTable, │ │ │ │ │ -1033 _M_T_L_C_o_n_t_e_x_t* context) const { │ │ │ │ │ -1034 │ │ │ │ │ -1035 return EvalPatches(srcBuffer->BindMTLBuffer(context), srcDesc, │ │ │ │ │ -1036 dstBuffer->BindMTLBuffer(context), dstDesc, │ │ │ │ │ -1037 duBuffer->BindMTLBuffer(context), duDesc, │ │ │ │ │ -1038 dvBuffer->BindMTLBuffer(context), dvDesc, │ │ │ │ │ -1039 numPatchCoords, │ │ │ │ │ -1040 patchCoords->BindMTLBuffer(context), │ │ │ │ │ -1041 patchTable->GetPatchArrays(), │ │ │ │ │ -1042 patchTable->GetPatchIndexBuffer(), │ │ │ │ │ -1043 patchTable->GetPatchParamBuffer(), │ │ │ │ │ -1044 context); │ │ │ │ │ -1045 } │ │ │ │ │ -1046 │ │ │ │ │ -1102 template │ │ │ │ │ -_1_1_0_4 bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ -1105 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1106 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1107 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1108 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1109 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -1110 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -1111 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -1112 int numPatchCoords, │ │ │ │ │ -1113 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1114 PATCH_TABLE *patchTable, │ │ │ │ │ -1115 _M_T_L_C_o_n_t_e_x_t* context) const { │ │ │ │ │ -1116 │ │ │ │ │ -1117 return EvalPatches(srcBuffer->BindMTLBuffer(context), srcDesc, │ │ │ │ │ -1118 dstBuffer->BindMTLBuffer(context), dstDesc, │ │ │ │ │ -1119 duBuffer->BindMTLBuffer(context), duDesc, │ │ │ │ │ -1120 dvBuffer->BindMTLBuffer(context), dvDesc, │ │ │ │ │ -1121 duuBuffer->BindMTLBuffer(context), duuDesc, │ │ │ │ │ -1122 duvBuffer->BindMTLBuffer(context), duvDesc, │ │ │ │ │ -1123 dvvBuffer->BindMTLBuffer(context), dvvDesc, │ │ │ │ │ -1124 numPatchCoords, │ │ │ │ │ -1125 patchCoords->BindMTLBuffer(context), │ │ │ │ │ -1126 patchTable->GetPatchArrays(), │ │ │ │ │ -1127 patchTable->GetPatchIndexBuffer(), │ │ │ │ │ -1128 patchTable->GetPatchParamBuffer(), │ │ │ │ │ -1129 context); │ │ │ │ │ -1130 } │ │ │ │ │ -1131 │ │ │ │ │ -_1_1_3_2 bool _E_v_a_l_P_a_t_c_h_e_s(id srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1133 id dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1134 id duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1135 id dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1136 int numPatchCoords, │ │ │ │ │ -1137 id patchCoordsBuffer, │ │ │ │ │ -1138 const _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r &patchArrays, │ │ │ │ │ -1139 id patchIndexBuffer, │ │ │ │ │ -1140 id patchParamsBuffer, │ │ │ │ │ -1141 _M_T_L_C_o_n_t_e_x_t* context) const; │ │ │ │ │ -1142 │ │ │ │ │ -_1_1_4_3 bool _E_v_a_l_P_a_t_c_h_e_s(id srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1144 id dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1145 id duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1146 id dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1147 id duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -1148 id duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -1149 id dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -1150 int numPatchCoords, │ │ │ │ │ -1151 id patchCoordsBuffer, │ │ │ │ │ -1152 const _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r &patchArrays, │ │ │ │ │ -1153 id patchIndexBuffer, │ │ │ │ │ -1154 id patchParamsBuffer, │ │ │ │ │ -1155 _M_T_L_C_o_n_t_e_x_t* context) const; │ │ │ │ │ -1156 │ │ │ │ │ -1190 template │ │ │ │ │ -_1_1_9_2 static bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1193 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1194 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1195 int numPatchCoords, │ │ │ │ │ -1196 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1197 PATCH_TABLE *patchTable, │ │ │ │ │ -1198 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -1199 _M_T_L_C_o_n_t_e_x_t* deviceContext) { │ │ │ │ │ -1200 │ │ │ │ │ -1201 if (instance) { │ │ │ │ │ -1202 return instance->_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1203 srcBuffer, srcDesc, │ │ │ │ │ -1204 dstBuffer, dstDesc, │ │ │ │ │ -1205 numPatchCoords, patchCoords, │ │ │ │ │ -1206 patchTable, │ │ │ │ │ -1207 deviceContext); │ │ │ │ │ -1208 } else { │ │ │ │ │ -1209 // Create an instance on demand (slow) │ │ │ │ │ -1210 instance = Create(srcDesc, dstDesc, │ │ │ │ │ -1211 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -1212 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -1213 deviceContext); │ │ │ │ │ -1214 if (instance) { │ │ │ │ │ -1215 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1216 srcBuffer, srcDesc, │ │ │ │ │ -1217 dstBuffer, dstDesc, │ │ │ │ │ -1218 numPatchCoords, patchCoords, │ │ │ │ │ -1219 patchTable, │ │ │ │ │ -1220 deviceContext); │ │ │ │ │ -1221 delete instance; │ │ │ │ │ -1222 return r; │ │ │ │ │ -1223 } │ │ │ │ │ -1224 return false; │ │ │ │ │ -1225 } │ │ │ │ │ -1226 } │ │ │ │ │ -1227 │ │ │ │ │ -1255 template │ │ │ │ │ -_1_2_5_7 bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1258 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1259 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1260 int numPatchCoords, │ │ │ │ │ -1261 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1262 PATCH_TABLE *patchTable, │ │ │ │ │ -1263 _M_T_L_C_o_n_t_e_x_t* deviceContext) const { │ │ │ │ │ -1264 │ │ │ │ │ -1265 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc, │ │ │ │ │ -1266 dstBuffer->BindMTLBuffer(deviceContext), dstDesc, │ │ │ │ │ -1267 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -1268 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -1269 numPatchCoords, │ │ │ │ │ -1270 patchCoords->BindMTLBuffer(deviceContext), │ │ │ │ │ -1271 patchTable->GetVaryingPatchArrays(), │ │ │ │ │ -1272 patchTable->GetVaryingPatchIndexBuffer(), │ │ │ │ │ -1273 patchTable->GetPatchParamBuffer(), │ │ │ │ │ -1274 deviceContext │ │ │ │ │ -1275 ); │ │ │ │ │ -1276 } │ │ │ │ │ -1277 │ │ │ │ │ -1323 template │ │ │ │ │ -_1_3_2_5 static bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1326 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1327 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1328 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1329 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1330 int numPatchCoords, │ │ │ │ │ -1331 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1332 PATCH_TABLE *patchTable, │ │ │ │ │ -1333 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -1334 _M_T_L_C_o_n_t_e_x_t* deviceContext) { │ │ │ │ │ -1335 │ │ │ │ │ -1336 if (instance) { │ │ │ │ │ -1337 return instance->_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1338 srcBuffer, srcDesc, │ │ │ │ │ -1339 dstBuffer, dstDesc, │ │ │ │ │ -1340 duBuffer, duDesc, │ │ │ │ │ -1341 dvBuffer, dvDesc, │ │ │ │ │ -1342 numPatchCoords, patchCoords, │ │ │ │ │ -1343 patchTable, │ │ │ │ │ -1344 deviceContext); │ │ │ │ │ -1345 } else { │ │ │ │ │ -1346 // Create an instance on demand (slow) │ │ │ │ │ -1347 instance = Create(srcDesc, dstDesc, │ │ │ │ │ -1348 duDesc, dvDesc, │ │ │ │ │ -1349 deviceContext); │ │ │ │ │ -1350 if (instance) { │ │ │ │ │ -1351 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1352 srcBuffer, srcDesc, │ │ │ │ │ -1353 dstBuffer, dstDesc, │ │ │ │ │ -1354 duBuffer, duDesc, │ │ │ │ │ -1355 dvBuffer, dvDesc, │ │ │ │ │ -1356 numPatchCoords, patchCoords, │ │ │ │ │ -1357 patchTable, │ │ │ │ │ -1358 deviceContext); │ │ │ │ │ -1359 delete instance; │ │ │ │ │ -1360 return r; │ │ │ │ │ -1361 } │ │ │ │ │ -1362 return false; │ │ │ │ │ -1363 } │ │ │ │ │ -1364 } │ │ │ │ │ -1365 │ │ │ │ │ -1405 template │ │ │ │ │ -_1_4_0_7 bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1408 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1409 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1410 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1411 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1412 int numPatchCoords, │ │ │ │ │ -1413 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1414 PATCH_TABLE *patchTable, │ │ │ │ │ -1415 _M_T_L_C_o_n_t_e_x_t* deviceContext) const { │ │ │ │ │ -1416 │ │ │ │ │ -1417 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc, │ │ │ │ │ -1418 dstBuffer->BindMTLBuffer(deviceContext), dstDesc, │ │ │ │ │ -1419 duBuffer->BindMTLBuffer(deviceContext), duDesc, │ │ │ │ │ -1420 dvBuffer->BindMTLBuffer(deviceContext), dvDesc, │ │ │ │ │ -1421 numPatchCoords, │ │ │ │ │ -1422 patchCoords->BindMTLBuffer(deviceContext), │ │ │ │ │ -1423 patchTable->GetVaryingPatchArrays(), │ │ │ │ │ -1424 patchTable->GetVaryingPatchIndexBuffer(), │ │ │ │ │ -1425 patchTable->GetPatchParamBuffer(), │ │ │ │ │ -1426 deviceContext │ │ │ │ │ -1427 ); │ │ │ │ │ -1428 } │ │ │ │ │ -1429 │ │ │ │ │ -1430 │ │ │ │ │ -1494 template │ │ │ │ │ -_1_4_9_6 static bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1497 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1498 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1499 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1500 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1501 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -1502 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -1503 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -1504 int numPatchCoords, │ │ │ │ │ -1505 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1506 PATCH_TABLE *patchTable, │ │ │ │ │ -1507 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -1508 _M_T_L_C_o_n_t_e_x_t* deviceContext) { │ │ │ │ │ -1509 │ │ │ │ │ -1510 if (instance) { │ │ │ │ │ -1511 return instance->_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1512 srcBuffer, srcDesc, │ │ │ │ │ -1513 dstBuffer, dstDesc, │ │ │ │ │ -1514 duBuffer, duDesc, │ │ │ │ │ -1515 dvBuffer, dvDesc, │ │ │ │ │ -1516 duuBuffer, duuDesc, │ │ │ │ │ -1517 duvBuffer, duvDesc, │ │ │ │ │ -1518 dvvBuffer, dvvDesc, │ │ │ │ │ -1519 numPatchCoords, patchCoords, │ │ │ │ │ -1520 patchTable, │ │ │ │ │ -1521 deviceContext); │ │ │ │ │ -1522 } else { │ │ │ │ │ -1523 // Create an instance on demand (slow) │ │ │ │ │ -1524 instance = Create(srcDesc, dstDesc, │ │ │ │ │ -1525 duDesc, dvDesc, │ │ │ │ │ -1526 duuDesc, duvDesc, dvvDesc, │ │ │ │ │ -1527 deviceContext); │ │ │ │ │ -1528 if (instance) { │ │ │ │ │ -1529 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1530 srcBuffer, srcDesc, │ │ │ │ │ -1531 dstBuffer, dstDesc, │ │ │ │ │ -1532 duBuffer, duDesc, │ │ │ │ │ -1533 dvBuffer, dvDesc, │ │ │ │ │ -1534 duuBuffer, duuDesc, │ │ │ │ │ -1535 duvBuffer, duvDesc, │ │ │ │ │ -1536 dvvBuffer, dvvDesc, │ │ │ │ │ -1537 numPatchCoords, patchCoords, │ │ │ │ │ -1538 patchTable, │ │ │ │ │ -1539 deviceContext); │ │ │ │ │ -1540 delete instance; │ │ │ │ │ -1541 return r; │ │ │ │ │ -1542 } │ │ │ │ │ -1543 return false; │ │ │ │ │ -1544 } │ │ │ │ │ -1545 } │ │ │ │ │ -1546 │ │ │ │ │ -1604 template │ │ │ │ │ -_1_6_0_6 bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1607 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1608 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1609 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1610 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1611 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -1612 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -1613 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -1614 int numPatchCoords, │ │ │ │ │ -1615 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1616 PATCH_TABLE *patchTable, │ │ │ │ │ -1617 _M_T_L_C_o_n_t_e_x_t* deviceContext) const { │ │ │ │ │ -1618 │ │ │ │ │ -1619 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc, │ │ │ │ │ -1620 dstBuffer->BindMTLBuffer(deviceContext), dstDesc, │ │ │ │ │ -1621 duBuffer->BindMTLBuffer(deviceContext), duDesc, │ │ │ │ │ -1622 dvBuffer->BindMTLBuffer(deviceContext), dvDesc, │ │ │ │ │ -1623 duuBuffer->BindMTLBuffer(deviceContext), duuDesc, │ │ │ │ │ -1624 duvBuffer->BindMTLBuffer(deviceContext), duvDesc, │ │ │ │ │ -1625 dvvBuffer->BindMTLBuffer(deviceContext), dvvDesc, │ │ │ │ │ -1626 numPatchCoords, │ │ │ │ │ -1627 patchCoords->BindMTLBuffer(deviceContext), │ │ │ │ │ -1628 patchTable->GetVaryingPatchArrays(), │ │ │ │ │ -1629 patchTable->GetVaryingPatchIndexBuffer(), │ │ │ │ │ -1630 patchTable->GetPatchParamBuffer(), │ │ │ │ │ -1631 deviceContext │ │ │ │ │ -1632 ); │ │ │ │ │ -1633 } │ │ │ │ │ -1634 │ │ │ │ │ -1670 template │ │ │ │ │ -_1_6_7_2 static bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1673 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1674 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1675 int numPatchCoords, │ │ │ │ │ -1676 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1677 PATCH_TABLE *patchTable, │ │ │ │ │ -1678 int fvarChannel, │ │ │ │ │ -1679 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -1680 _M_T_L_C_o_n_t_e_x_t* deviceContext) { │ │ │ │ │ -1681 │ │ │ │ │ -1682 if (instance) { │ │ │ │ │ -1683 return instance->_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1684 srcBuffer, srcDesc, │ │ │ │ │ -1685 dstBuffer, dstDesc, │ │ │ │ │ -1686 numPatchCoords, patchCoords, │ │ │ │ │ -1687 patchTable, │ │ │ │ │ -1688 fvarChannel, │ │ │ │ │ -1689 deviceContext); │ │ │ │ │ -1690 } else { │ │ │ │ │ -1691 // Create an instance on demand (slow) │ │ │ │ │ -1692 instance = Create(srcDesc, dstDesc, │ │ │ │ │ -1693 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -1694 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -1695 deviceContext); │ │ │ │ │ -1696 if (instance) { │ │ │ │ │ -1697 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1698 srcBuffer, srcDesc, │ │ │ │ │ -1699 dstBuffer, dstDesc, │ │ │ │ │ -1700 numPatchCoords, patchCoords, │ │ │ │ │ -1701 patchTable, │ │ │ │ │ -1702 fvarChannel, │ │ │ │ │ -1703 deviceContext); │ │ │ │ │ -1704 delete instance; │ │ │ │ │ -1705 return r; │ │ │ │ │ -1706 } │ │ │ │ │ -1707 return false; │ │ │ │ │ -1708 } │ │ │ │ │ -1709 } │ │ │ │ │ -1710 │ │ │ │ │ -1740 template │ │ │ │ │ -_1_7_4_2 bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1743 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1744 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1745 int numPatchCoords, │ │ │ │ │ -1746 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1747 PATCH_TABLE *patchTable, │ │ │ │ │ -1748 int fvarChannel, │ │ │ │ │ -1749 _M_T_L_C_o_n_t_e_x_t* deviceContext) const { │ │ │ │ │ -1750 │ │ │ │ │ -1751 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc, │ │ │ │ │ -1752 dstBuffer->BindMTLBuffer(deviceContext), dstDesc, │ │ │ │ │ -1753 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -1754 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -1755 numPatchCoords, │ │ │ │ │ -1756 patchCoords->BindMTLBuffer(deviceContext), │ │ │ │ │ -1757 patchTable->GetFVarPatchArrays(fvarChannel), │ │ │ │ │ -1758 patchTable->GetFVarPatchIndexBuffer(fvarChannel), │ │ │ │ │ -1759 patchTable->GetFVarPatchParamBuffer(fvarChannel), │ │ │ │ │ -1760 deviceContext │ │ │ │ │ -1761 ); │ │ │ │ │ -1762 } │ │ │ │ │ -1763 │ │ │ │ │ -1811 template │ │ │ │ │ -_1_8_1_3 static bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1814 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1815 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1816 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1817 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1818 int numPatchCoords, │ │ │ │ │ -1819 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1820 PATCH_TABLE *patchTable, │ │ │ │ │ -1821 int fvarChannel, │ │ │ │ │ -1822 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -1823 _M_T_L_C_o_n_t_e_x_t* deviceContext) { │ │ │ │ │ -1824 │ │ │ │ │ -1825 if (instance) { │ │ │ │ │ -1826 return instance->_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1827 srcBuffer, srcDesc, │ │ │ │ │ -1828 dstBuffer, dstDesc, │ │ │ │ │ -1829 duBuffer, duDesc, │ │ │ │ │ -1830 dvBuffer, dvDesc, │ │ │ │ │ -1831 numPatchCoords, patchCoords, │ │ │ │ │ -1832 patchTable, │ │ │ │ │ -1833 fvarChannel, │ │ │ │ │ -1834 deviceContext); │ │ │ │ │ -1835 } else { │ │ │ │ │ -1836 // Create an instance on demand (slow) │ │ │ │ │ -1837 instance = Create(srcDesc, dstDesc, │ │ │ │ │ -1838 duDesc, dvDesc, │ │ │ │ │ -1839 deviceContext); │ │ │ │ │ -1840 if (instance) { │ │ │ │ │ -1841 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1842 srcBuffer, srcDesc, │ │ │ │ │ -1843 dstBuffer, dstDesc, │ │ │ │ │ -1844 duBuffer, duDesc, │ │ │ │ │ -1845 dvBuffer, dvDesc, │ │ │ │ │ -1846 numPatchCoords, patchCoords, │ │ │ │ │ -1847 patchTable, │ │ │ │ │ -1848 fvarChannel, │ │ │ │ │ -1849 deviceContext); │ │ │ │ │ -1850 delete instance; │ │ │ │ │ -1851 return r; │ │ │ │ │ -1852 } │ │ │ │ │ -1853 return false; │ │ │ │ │ -1854 } │ │ │ │ │ -1855 } │ │ │ │ │ -1856 │ │ │ │ │ -1898 template │ │ │ │ │ -_1_9_0_0 bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1901 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1902 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1903 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1904 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1905 int numPatchCoords, │ │ │ │ │ -1906 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1907 PATCH_TABLE *patchTable, │ │ │ │ │ -1908 int fvarChannel, │ │ │ │ │ -1909 _M_T_L_C_o_n_t_e_x_t* deviceContext) const { │ │ │ │ │ -1910 │ │ │ │ │ -1911 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc, │ │ │ │ │ -1912 dstBuffer->BindMTLBuffer(deviceContext), dstDesc, │ │ │ │ │ -1913 duBuffer->BindMTLBuffer(deviceContext), duDesc, │ │ │ │ │ -1914 dvBuffer->BindMTLBuffer(deviceContext), dvDesc, │ │ │ │ │ -1915 numPatchCoords, │ │ │ │ │ -1916 patchCoords->BindMTLBuffer(deviceContext), │ │ │ │ │ -1917 patchTable->GetFVarPatchArrays(fvarChannel), │ │ │ │ │ -1918 patchTable->GetFVarPatchIndexBuffer(fvarChannel), │ │ │ │ │ -1919 patchTable->GetFVarPatchParamBuffer(fvarChannel), │ │ │ │ │ -1920 deviceContext │ │ │ │ │ -1921 ); │ │ │ │ │ -1922 } │ │ │ │ │ -1923 │ │ │ │ │ -1989 template │ │ │ │ │ -_1_9_9_1 static bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1992 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1993 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1994 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1995 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1996 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -1997 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -1998 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -1999 int numPatchCoords, │ │ │ │ │ -2000 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -2001 PATCH_TABLE *patchTable, │ │ │ │ │ -2002 int fvarChannel, │ │ │ │ │ -2003 _M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -2004 _M_T_L_C_o_n_t_e_x_t* deviceContext) { │ │ │ │ │ -2005 │ │ │ │ │ -2006 if (instance) { │ │ │ │ │ -2007 return instance->_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -2008 srcBuffer, srcDesc, │ │ │ │ │ -2009 dstBuffer, dstDesc, │ │ │ │ │ -2010 duBuffer, duDesc, │ │ │ │ │ -2011 dvBuffer, dvDesc, │ │ │ │ │ -2012 duuBuffer, duuDesc, │ │ │ │ │ -2013 duvBuffer, duvDesc, │ │ │ │ │ -2014 dvvBuffer, dvvDesc, │ │ │ │ │ -2015 numPatchCoords, patchCoords, │ │ │ │ │ -2016 patchTable, │ │ │ │ │ -2017 fvarChannel, │ │ │ │ │ -2018 deviceContext); │ │ │ │ │ -2019 } else { │ │ │ │ │ -2020 // Create an instance on demand (slow) │ │ │ │ │ -2021 instance = Create(srcDesc, dstDesc, │ │ │ │ │ -2022 duDesc, dvDesc, │ │ │ │ │ -2023 duuDesc, duvDesc, dvvDesc, │ │ │ │ │ -2024 deviceContext); │ │ │ │ │ -2025 if (instance) { │ │ │ │ │ -2026 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -2027 srcBuffer, srcDesc, │ │ │ │ │ -2028 dstBuffer, dstDesc, │ │ │ │ │ -2029 duBuffer, duDesc, │ │ │ │ │ -2030 dvBuffer, dvDesc, │ │ │ │ │ -2031 duuBuffer, duuDesc, │ │ │ │ │ -2032 duvBuffer, duvDesc, │ │ │ │ │ -2033 dvvBuffer, dvvDesc, │ │ │ │ │ -2034 numPatchCoords, patchCoords, │ │ │ │ │ -2035 patchTable, │ │ │ │ │ -2036 fvarChannel, │ │ │ │ │ -2037 deviceContext); │ │ │ │ │ -2038 delete instance; │ │ │ │ │ -2039 return r; │ │ │ │ │ -2040 } │ │ │ │ │ -2041 return false; │ │ │ │ │ -2042 } │ │ │ │ │ -2043 } │ │ │ │ │ -2044 │ │ │ │ │ -2104 template │ │ │ │ │ -_2_1_0_6 bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -2107 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -2108 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -2109 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -2110 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -2111 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -2112 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -2113 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -2114 int numPatchCoords, │ │ │ │ │ -2115 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -2116 PATCH_TABLE *patchTable, │ │ │ │ │ -2117 int fvarChannel, │ │ │ │ │ -2118 _M_T_L_C_o_n_t_e_x_t* deviceContext) const { │ │ │ │ │ -2119 │ │ │ │ │ -2120 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc, │ │ │ │ │ -2121 dstBuffer->BindMTLBuffer(deviceContext), dstDesc, │ │ │ │ │ -2122 duBuffer->BindMTLBuffer(deviceContext), duDesc, │ │ │ │ │ -2123 dvBuffer->BindMTLBuffer(deviceContext), dvDesc, │ │ │ │ │ -2124 duuBuffer->BindMTLBuffer(deviceContext), duuDesc, │ │ │ │ │ -2125 duvBuffer->BindMTLBuffer(deviceContext), duvDesc, │ │ │ │ │ -2126 dvvBuffer->BindMTLBuffer(deviceContext), dvvDesc, │ │ │ │ │ -2127 numPatchCoords, │ │ │ │ │ -2128 patchCoords->BindMTLBuffer(deviceContext), │ │ │ │ │ -2129 patchTable->GetFVarPatchArrays(fvarChannel), │ │ │ │ │ -2130 patchTable->GetFVarPatchIndexBuffer(fvarChannel), │ │ │ │ │ -2131 patchTable->GetFVarPatchParamBuffer(fvarChannel), │ │ │ │ │ -2132 fvarChannel, │ │ │ │ │ -2133 deviceContext │ │ │ │ │ -2134 ); │ │ │ │ │ -2135 } │ │ │ │ │ -2136 │ │ │ │ │ -_2_1_3_8 bool _C_o_m_p_i_l_e(_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -2139 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -2140 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -2141 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -2142 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -2143 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -2144 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -2145 _M_T_L_C_o_n_t_e_x_t* context); │ │ │ │ │ -2146 │ │ │ │ │ -_2_1_4_8 static void _S_y_n_c_h_r_o_n_i_z_e(_M_T_L_C_o_n_t_e_x_t* context); │ │ │ │ │ -2149 │ │ │ │ │ -2150 private: │ │ │ │ │ -2151 │ │ │ │ │ -2152 id _computeLibrary; │ │ │ │ │ -2153 id _evalStencils; │ │ │ │ │ -2154 id _evalPatches; │ │ │ │ │ -2155 id _parameterBuffer; │ │ │ │ │ -2156 │ │ │ │ │ -2157 int _workGroupSize; │ │ │ │ │ -2158}; │ │ │ │ │ -2159 │ │ │ │ │ -2160} //end namespace Osd │ │ │ │ │ -2161 │ │ │ │ │ -2162} //end namespace OPENSUBDIV_VERSION │ │ │ │ │ -2163using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -2164 │ │ │ │ │ -2165} //end namespace OpenSubdiv │ │ │ │ │ -2166 │ │ │ │ │ -2167#endif // OPENSUBDIV3_OSD_MTL_COMPUTE_EVALUATOR_H │ │ │ │ │ +_6_1 id _G_e_t_V_e_r_t_e_x_V_a_l_e_n_c_e_B_u_f_f_e_r() const │ │ │ │ │ +62 { │ │ │ │ │ +63 return _vertexValenceBuffer; │ │ │ │ │ +64 } │ │ │ │ │ +65 │ │ │ │ │ +_6_6 id _G_e_t_Q_u_a_d_O_f_f_s_e_t_s_B_u_f_f_e_r() const │ │ │ │ │ +67 { │ │ │ │ │ +68 return _quadOffsetsBuffer; │ │ │ │ │ +69 } │ │ │ │ │ +70 │ │ │ │ │ +_7_1 int _G_e_t_Q_u_a_d_O_f_f_s_e_t_s_B_a_s_e(_F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_:_:_T_y_p_e type) │ │ │ │ │ +72 { │ │ │ │ │ +73 if(type == _F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_:_:_G_R_E_G_O_R_Y___B_O_U_N_D_A_R_Y) │ │ │ │ │ +74 return _quadOffsetsBase[1]; │ │ │ │ │ +75 return _quadOffsetsBase[0]; │ │ │ │ │ +76 } │ │ │ │ │ +77 │ │ │ │ │ +78private: │ │ │ │ │ +79 id _vertexBuffer; │ │ │ │ │ +80 id _vertexValenceBuffer; │ │ │ │ │ +81 id _quadOffsetsBuffer; │ │ │ │ │ +82 int _quadOffsetsBase[2]; │ │ │ │ │ +83}; │ │ │ │ │ +84 │ │ │ │ │ +85} //end namespace Osd │ │ │ │ │ +86 │ │ │ │ │ +87} //end namespace OPENSUBDIV_VERSION │ │ │ │ │ +88using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +89 │ │ │ │ │ +90} //end namespace OpenSuddiv │ │ │ │ │ +91 │ │ │ │ │ +92#endif // OPENSUBDIV3_OSD_MTL_LEGACY_GREGORY_PATCH_TABLE_H │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r │ │ │ │ │ -std::vector< PatchArray > PatchArrayVector │ │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e_s_._h_:_1_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -Stencil table class wrapping the template for compatibility. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_7_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -Limit stencil table class wrapping the template for compatibility. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_8_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ -BufferDescriptor is a struct which describes buffer elements in interleaved │ │ │ │ │ -data buffers.... │ │ │ │ │ -DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_6_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_:_:_T_y_p_e │ │ │ │ │ +Type │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_D_e_s_c_r_i_p_t_o_r_._h_:_4_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_:_:_G_R_E_G_O_R_Y___B_O_U_N_D_A_R_Y │ │ │ │ │ +@ GREGORY_BOUNDARY │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_D_e_s_c_r_i_p_t_o_r_._h_:_6_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +Container for arrays of parametric patches. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_5_5 │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_n_t_e_x_t │ │ │ │ │ DDeeffiinniittiioonn _m_t_l_C_o_m_m_o_n_._h_:_4_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_5_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -MTLStencilTable(Far::LimitStencilTable const *stencilTable, MTLContext │ │ │ │ │ -*context) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_D_u_W_e_i_g_h_t_s_B_u_f_f_e_r │ │ │ │ │ -id< MTLBuffer > GetDuWeightsBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_6_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_~_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -~MTLStencilTable() │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_D_v_v_W_e_i_g_h_t_s_B_u_f_f_e_r │ │ │ │ │ -id< MTLBuffer > GetDvvWeightsBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_7_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -MTLStencilTable(Far::StencilTable const *stencilTable, MTLContext *context) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_D_u_u_W_e_i_g_h_t_s_B_u_f_f_e_r │ │ │ │ │ -id< MTLBuffer > GetDuuWeightsBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_7_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_D_u_v_W_e_i_g_h_t_s_B_u_f_f_e_r │ │ │ │ │ -id< MTLBuffer > GetDuvWeightsBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_7_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_N_u_m_S_t_e_n_c_i_l_s │ │ │ │ │ -int GetNumStencils() const │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_7_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_I_n_d_i_c_e_s_B_u_f_f_e_r │ │ │ │ │ -id< MTLBuffer > GetIndicesBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_6_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_S_i_z_e_s_B_u_f_f_e_r │ │ │ │ │ -id< MTLBuffer > GetSizesBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_6_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_O_f_f_s_e_t_s_B_u_f_f_e_r │ │ │ │ │ -id< MTLBuffer > GetOffsetsBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_6_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_W_e_i_g_h_t_s_B_u_f_f_e_r │ │ │ │ │ -id< MTLBuffer > GetWeightsBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_6_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ -static MTLStencilTable * Create(STENCIL_TABLE *stencilTable, DEVICE_CONTEXT │ │ │ │ │ -context) │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_5_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_S_t_e_n_c_i_l_T_a_b_l_e_:_:_G_e_t_D_v_W_e_i_g_h_t_s_B_u_f_f_e_r │ │ │ │ │ -id< MTLBuffer > GetDvWeightsBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_7_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_9_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -bool EvalStencils(id< MTLBuffer > srcBuffer, BufferDescriptor const &srcDesc, │ │ │ │ │ -id< MTLBuffer > dstBuffer, BufferDescriptor const &dstDesc, id< MTLBuffer > │ │ │ │ │ -duBuffer, BufferDescriptor const &duDesc, id< MTLBuffer > dvBuffer, │ │ │ │ │ -BufferDescriptor const &dvDesc, id< MTLBuffer > duuBuffer, BufferDescriptor │ │ │ │ │ -const &duuDesc, id< MTLBuffer > duvBuffer, BufferDescriptor const &duvDesc, id< │ │ │ │ │ -MTLBuffer > dvvBuffer, BufferDescriptor const &dvvDesc, id< MTLBuffer > │ │ │ │ │ -sizesBuffer, id< MTLBuffer > offsetsBuffer, id< MTLBuffer > indicesBuffer, id< │ │ │ │ │ -MTLBuffer > weightsBuffer, id< MTLBuffer > duWeightsBuffer, id< MTLBuffer > │ │ │ │ │ -dvWeightsBuffer, id< MTLBuffer > duuWeightsBuffer, id< MTLBuffer > │ │ │ │ │ -duvWeightsBuffer, id< MTLBuffer > dvvWeightsBuffer, int start, int end, │ │ │ │ │ -MTLContext *context) const │ │ │ │ │ -Dispatch the MTL compute kernel on GPU asynchronously returns false if the │ │ │ │ │ -kernel hasn't been compile... │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -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, MTLComputeEvaluator *instance, MTLContext *context) │ │ │ │ │ -Generic limit eval function. This function has a same signature as other device │ │ │ │ │ -kernels have so that ... │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_7_8_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -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, │ │ │ │ │ -MTLComputeEvaluator const *instance, MTLContext *context) │ │ │ │ │ -Generic static stencil function. This function has a same signature as other │ │ │ │ │ -device kernels have so t... │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_3_1_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_: │ │ │ │ │ -_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ -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, │ │ │ │ │ -MTLComputeEvaluator const *instance, MTLContext *deviceContext) │ │ │ │ │ -Generic limit eval function. This function has a same signature as other device │ │ │ │ │ -kernels have so that ... │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_9_9_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r │ │ │ │ │ -MTLComputeEvaluator() │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_~_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r │ │ │ │ │ -~MTLComputeEvaluator() │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, │ │ │ │ │ -DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, │ │ │ │ │ -PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, MTLComputeEvaluator │ │ │ │ │ -const *instance, MTLContext *context) │ │ │ │ │ -Generic limit eval function. This function has a same signature as other device │ │ │ │ │ -kernels have so that ... │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_7_0_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_I_n_s_t_a_n_t_i_a_t_a_b_l_e │ │ │ │ │ -bool Instantiatable │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_9_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ -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, MTLContext *deviceContext) const │ │ │ │ │ -Generic limit eval function. This function has a same signature as other device │ │ │ │ │ -kernels have so that ... │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_6_0_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -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, │ │ │ │ │ -MTLComputeEvaluator const *instance, MTLContext *context) │ │ │ │ │ -Generic static stencil function. This function has a same signature as other │ │ │ │ │ -device kernels have so t... │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_2_2_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_: │ │ │ │ │ -_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ -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, MTLContext │ │ │ │ │ -*deviceContext) const │ │ │ │ │ -Generic limit eval function. This function has a same signature as other device │ │ │ │ │ -kernels have so that ... │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_9_0_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_: │ │ │ │ │ -_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ -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, MTLComputeEvaluator const *instance, MTLContext *deviceContext) │ │ │ │ │ -Generic limit eval function. This function has a same signature as other device │ │ │ │ │ -kernels have so that ... │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_6_7_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ -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, MTLComputeEvaluator │ │ │ │ │ -const *instance, MTLContext *deviceContext) │ │ │ │ │ -Generic limit eval function. This function has a same signature as other device │ │ │ │ │ -kernels have so that ... │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_4_9_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, │ │ │ │ │ -DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const │ │ │ │ │ -*stencilTable, MTLContext *context) const │ │ │ │ │ -Generic stencil function. │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_3_7_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -bool EvalPatches(id< MTLBuffer > srcBuffer, BufferDescriptor const &srcDesc, │ │ │ │ │ -id< MTLBuffer > dstBuffer, BufferDescriptor const &dstDesc, id< MTLBuffer > │ │ │ │ │ -duBuffer, BufferDescriptor const &duDesc, id< MTLBuffer > dvBuffer, │ │ │ │ │ -BufferDescriptor const &dvDesc, id< MTLBuffer > duuBuffer, BufferDescriptor │ │ │ │ │ -const &duuDesc, id< MTLBuffer > duvBuffer, BufferDescriptor const &duvDesc, id< │ │ │ │ │ -MTLBuffer > dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, id< │ │ │ │ │ -MTLBuffer > patchCoordsBuffer, const PatchArrayVector &patchArrays, id< │ │ │ │ │ -MTLBuffer > patchIndexBuffer, id< MTLBuffer > patchParamsBuffer, MTLContext │ │ │ │ │ -*context) const │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_: │ │ │ │ │ -_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ -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, │ │ │ │ │ -MTLContext *deviceContext) const │ │ │ │ │ -Generic limit eval function. This function has a same signature as other device │ │ │ │ │ -kernels have so that ... │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_2_1_0_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_S_y_n_c_h_r_o_n_i_z_e │ │ │ │ │ -static void Synchronize(MTLContext *context) │ │ │ │ │ -Wait for the dispatched kernel to finish. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -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, MTLContext *context) const │ │ │ │ │ -Generic stencil function. │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_4_3_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -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, MTLComputeEvaluator *instance, │ │ │ │ │ -MTLContext *context) │ │ │ │ │ -Generic limit eval function. This function has a same signature as other device │ │ │ │ │ -kernels have so that ... │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_8_8_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_: │ │ │ │ │ -_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ -bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const │ │ │ │ │ -&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int │ │ │ │ │ -numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int │ │ │ │ │ -fvarChannel, MTLContext *deviceContext) const │ │ │ │ │ -Generic limit eval function. This function has a same signature as other device │ │ │ │ │ -kernels have so that ... │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_7_4_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ -static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const │ │ │ │ │ -&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int │ │ │ │ │ -numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, │ │ │ │ │ -MTLComputeEvaluator const *instance, MTLContext *deviceContext) │ │ │ │ │ -Generic limit eval function. This function has a same signature as other device │ │ │ │ │ -kernels have so that ... │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_1_9_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -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, MTLContext │ │ │ │ │ -*context) const │ │ │ │ │ -Generic stencil function. │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_5_0_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -bool EvalStencils(id< MTLBuffer > srcBuffer, BufferDescriptor const &srcDesc, │ │ │ │ │ -id< MTLBuffer > dstBuffer, BufferDescriptor const &dstDesc, id< MTLBuffer > │ │ │ │ │ -duBuffer, BufferDescriptor const &duDesc, id< MTLBuffer > dvBuffer, │ │ │ │ │ -BufferDescriptor const &dvDesc, id< MTLBuffer > sizesBuffer, id< MTLBuffer > │ │ │ │ │ -offsetsBuffer, id< MTLBuffer > indicesBuffer, id< MTLBuffer > weightsBuffer, │ │ │ │ │ -id< MTLBuffer > duWeightsBuffer, id< MTLBuffer > dvWeightsBuffer, int start, │ │ │ │ │ -int end, MTLContext *context) const │ │ │ │ │ -Dispatch the MTL compute kernel on GPU asynchronously returns false if the │ │ │ │ │ -kernel hasn't been compile... │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_: │ │ │ │ │ -_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ -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, MTLComputeEvaluator │ │ │ │ │ -const *instance, MTLContext *deviceContext) │ │ │ │ │ -Generic limit eval function. This function has a same signature as other device │ │ │ │ │ -kernels have so that ... │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_8_1_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, │ │ │ │ │ -DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, │ │ │ │ │ -PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, MTLContext *context) │ │ │ │ │ -const │ │ │ │ │ -Generic limit eval function. This function has a same signature as other device │ │ │ │ │ -kernels have so that ... │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_9_6_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const │ │ │ │ │ -&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE │ │ │ │ │ -const *stencilTable, MTLComputeEvaluator const *instance, MTLContext *context) │ │ │ │ │ -Generic static stencil function. This function has a same signature as other │ │ │ │ │ -device kernels have so t... │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_4_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ -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, MTLComputeEvaluator const *instance, │ │ │ │ │ -MTLContext *deviceContext) │ │ │ │ │ -Generic limit eval function. This function has a same signature as other device │ │ │ │ │ -kernels have so that ... │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_3_2_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -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, MTLContext *context) const │ │ │ │ │ -Generic limit eval function with derivatives. This function has a same │ │ │ │ │ -signature as other device kern... │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_1_0_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -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, MTLContext *context) const │ │ │ │ │ -Generic limit eval function with derivatives. This function has a same │ │ │ │ │ -signature as other device kern... │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_0_2_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ -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, MTLContext *deviceContext) const │ │ │ │ │ -Generic limit eval function. This function has a same signature as other device │ │ │ │ │ -kernels have so that ... │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_4_0_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ -bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, │ │ │ │ │ -DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, │ │ │ │ │ -PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, MTLContext │ │ │ │ │ -*deviceContext) const │ │ │ │ │ -Generic limit eval function. This function has a same signature as other device │ │ │ │ │ -kernels have so that ... │ │ │ │ │ -DDeeffiinniittiioonn _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h_:_1_2_5_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_C_r_e_a_t_e │ │ │ │ │ -static MTLComputeEvaluator * Create(BufferDescriptor const &srcDesc, │ │ │ │ │ -BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, │ │ │ │ │ -BufferDescriptor const &dvDesc, MTLContext *context) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_C_r_e_a_t_e │ │ │ │ │ -static MTLComputeEvaluator * Create(BufferDescriptor const &srcDesc, │ │ │ │ │ -BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, │ │ │ │ │ -BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, │ │ │ │ │ -BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, MTLContext │ │ │ │ │ -*context) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_C_o_m_p_i_l_e │ │ │ │ │ -bool Compile(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, │ │ │ │ │ -BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, │ │ │ │ │ -BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, │ │ │ │ │ -BufferDescriptor const &dvvDesc, MTLContext *context) │ │ │ │ │ -Configure compute pipline state. Returns false if it fails to create the │ │ │ │ │ -pipeline state. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -bool EvalPatches(id< MTLBuffer > srcBuffer, BufferDescriptor const &srcDesc, │ │ │ │ │ -id< MTLBuffer > dstBuffer, BufferDescriptor const &dstDesc, id< MTLBuffer > │ │ │ │ │ -duBuffer, BufferDescriptor const &duDesc, id< MTLBuffer > dvBuffer, │ │ │ │ │ -BufferDescriptor const &dvDesc, int numPatchCoords, id< MTLBuffer > │ │ │ │ │ -patchCoordsBuffer, const PatchArrayVector &patchArrays, id< MTLBuffer > │ │ │ │ │ -patchIndexBuffer, id< MTLBuffer > patchParamsBuffer, MTLContext *context) const │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h_:_4_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ +_G_e_t_Q_u_a_d_O_f_f_s_e_t_s_B_a_s_e │ │ │ │ │ +int GetQuadOffsetsBase(Far::PatchDescriptor::Type type) │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h_:_7_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ +static MTLLegacyGregoryPatchTable * Create(Far::PatchTable const │ │ │ │ │ +*farPatchTable, DEVICE_CONTEXT context) │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h_:_4_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ +_G_e_t_V_e_r_t_e_x_V_a_l_e_n_c_e_B_u_f_f_e_r │ │ │ │ │ +id< MTLBuffer > GetVertexValenceBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h_:_6_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ +_G_e_t_Q_u_a_d_O_f_f_s_e_t_s_B_u_f_f_e_r │ │ │ │ │ +id< MTLBuffer > GetQuadOffsetsBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h_:_6_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ +static MTLLegacyGregoryPatchTable * Create(Far::PatchTable const │ │ │ │ │ +*farPatchTable, MTLContext *context) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ +_U_p_d_a_t_e_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ +void UpdateVertexBuffer(id< MTLBuffer > vbo, int numVertices, int │ │ │ │ │ +numVertexElements, MTLContext *context) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ +_~_M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +~MTLLegacyGregoryPatchTable() │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_T_L_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ +_G_e_t_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ +id< MTLBuffer > GetVertexBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _m_t_l_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h_:_5_6 │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _m_t_l_C_o_m_p_u_t_e_E_v_a_l_u_a_t_o_r_._h │ │ │ │ │ + * _m_t_l_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00830.html │ │ │ │ @@ -95,15 +95,15 @@ │ │ │ │ Namespaces | │ │ │ │ Typedefs │ │ │ │
d3d11Mesh.h File Reference
│ │ │ │ │ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ #include "../osd/mesh.h"
│ │ │ │ -#include "../osd/d3d11PatchTable.h"
│ │ │ │ +#include "../osd/d3d11PatchTable.h"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00833.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/d3d11PatchTable.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/osd/d3d11VertexBuffer.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -90,45 +90,40 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
d3d11PatchTable.h File Reference
│ │ │ │ +
d3d11VertexBuffer.h File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include <vector>
│ │ │ │ -#include "../far/patchDescriptor.h"
│ │ │ │ -#include "../osd/nonCopyable.h"
│ │ │ │ -#include "../osd/types.h"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
│ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

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

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Far
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,28 +1,24 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -d3d11PatchTable.h File Reference │ │ │ │ │ +d3d11VertexBuffer.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_f_a_r_/_p_a_t_c_h_D_e_s_c_r_i_p_t_o_r_._h" │ │ │ │ │ -#include "../osd/nonCopyable.h" │ │ │ │ │ -#include "_._._/_o_s_d_/_t_y_p_e_s_._h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_3_D_1_1_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +class   _D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ +  Concrete vertex buffer class for DirectX subdivision and DirectX │ │ │ │ │ + drawing. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ -namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r │ │ │ │ │ -  │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d │ │ │ │ │   │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _d_3_d_1_1_P_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ + * _d_3_d_1_1_V_e_r_t_e_x_B_u_f_f_e_r_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00833.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,3 +1,3 @@ │ │ │ │ │ var a00833 = [ │ │ │ │ │ - ["D3D11PatchTable", "a01209.html", "a01209"] │ │ │ │ │ + ["D3D11VertexBuffer", "a01213.html", "a01213"] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00833_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/d3d11PatchTable.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/osd/d3d11VertexBuffer.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,19 +92,19 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
d3d11PatchTable.h
│ │ │ │ +
d3d11VertexBuffer.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │ -
2// Copyright 2015 Pixar
│ │ │ │ +
2// Copyright 2013 Pixar
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │
6// compliance with the Apache License and the following modification to it:
│ │ │ │
7// Section 6. Trademarks. is deleted and replaced with:
│ │ │ │
8//
│ │ │ │
9// 6. Trademarks. This License does not grant permission to use the trade
│ │ │ │ @@ -119,118 +119,93 @@ │ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │
24
│ │ │ │ -
25#ifndef OPENSUBDIV3_OSD_GL_PATCH_TABLE_H
│ │ │ │ -
26#define OPENSUBDIV3_OSD_GL_PATCH_TABLE_H
│ │ │ │ +
25#ifndef OPENSUBDIV3_OSD_D3D11_VERTEX_BUFFER_H
│ │ │ │ +
26#define OPENSUBDIV3_OSD_D3D11_VERTEX_BUFFER_H
│ │ │ │
27
│ │ │ │
28#include "../version.h"
│ │ │ │
29
│ │ │ │ -
30#include <vector>
│ │ │ │ -
31#include "../far/patchDescriptor.h"
│ │ │ │ -
32#include "../osd/nonCopyable.h"
│ │ │ │ -
33#include "../osd/types.h"
│ │ │ │ +
30struct ID3D11Buffer;
│ │ │ │ +
31struct ID3D11Device;
│ │ │ │ +
32struct ID3D11DeviceContext;
│ │ │ │ +
33struct ID3D11UnorderedAccessView;
│ │ │ │
34
│ │ │ │ -
35struct ID3D11Buffer;
│ │ │ │ -
36struct ID3D11ShaderResourceView;
│ │ │ │ -
37struct ID3D11Device;
│ │ │ │ -
38struct ID3D11DeviceContext;
│ │ │ │ +
35namespace OpenSubdiv {
│ │ │ │ +
36namespace OPENSUBDIV_VERSION {
│ │ │ │ +
37
│ │ │ │ +
38namespace Osd {
│ │ │ │
39
│ │ │ │ -
40namespace OpenSubdiv {
│ │ │ │ -
41namespace OPENSUBDIV_VERSION {
│ │ │ │ -
42
│ │ │ │ -
43namespace Far{
│ │ │ │ -
44 class PatchTable;
│ │ │ │ -
45};
│ │ │ │ -
46
│ │ │ │ -
47namespace Osd {
│ │ │ │ -
48
│ │ │ │ -
│ │ │ │ -
49class D3D11PatchTable : private NonCopyable<D3D11PatchTable> {
│ │ │ │ -
50public:
│ │ │ │ -
51 typedef ID3D11Buffer * VertexBufferBinding;
│ │ │ │ -
52
│ │ │ │ - │ │ │ │ - │ │ │ │ -
55
│ │ │ │ -
56 template<typename DEVICE_CONTEXT>
│ │ │ │ -
│ │ │ │ -
57 static D3D11PatchTable *Create(Far::PatchTable const *farPatchTable,
│ │ │ │ -
58 DEVICE_CONTEXT context) {
│ │ │ │ -
59 return Create(farPatchTable, context->GetDeviceContext());
│ │ │ │ -
60 }
│ │ │ │ -
│ │ │ │ -
61
│ │ │ │ -
62 static D3D11PatchTable *Create(Far::PatchTable const *farPatchTable,
│ │ │ │ -
63 ID3D11DeviceContext *deviceContext);
│ │ │ │ -
64
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
66 return _patchArrays;
│ │ │ │ -
67 }
│ │ │ │ -
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
47public:
│ │ │ │ +
49 static D3D11VertexBuffer * Create(int numElements, int numVertices,
│ │ │ │ +
50 ID3D11DeviceContext *deviceContext);
│ │ │ │ +
51
│ │ │ │ + │ │ │ │ +
54
│ │ │ │ +
57 void UpdateData(const float *src, int startVertex, int numVertices,
│ │ │ │ +
58 ID3D11DeviceContext *deviceContext);
│ │ │ │ +
59
│ │ │ │ +
61 int GetNumElements() const;
│ │ │ │ +
62
│ │ │ │ +
64 int GetNumVertices() const;
│ │ │ │ +
65
│ │ │ │ +
67 ID3D11Buffer *BindD3D11Buffer(ID3D11DeviceContext *deviceContext);
│ │ │ │
68
│ │ │ │
│ │ │ │ -
70 ID3D11Buffer* GetPatchIndexBuffer() const {
│ │ │ │ -
71 return _indexBuffer;
│ │ │ │ +
70 ID3D11Buffer *BindVBO(ID3D11DeviceContext *deviceContext) {
│ │ │ │ +
71 return BindD3D11Buffer(deviceContext);
│ │ │ │
72 }
│ │ │ │
│ │ │ │
73
│ │ │ │ -
│ │ │ │ -
75 ID3D11ShaderResourceView* GetPatchParamSRV() const {
│ │ │ │ - │ │ │ │ -
77 }
│ │ │ │ -
│ │ │ │ -
78
│ │ │ │ -
79protected:
│ │ │ │ -
80 // allocate buffers from patchTable
│ │ │ │ -
81 bool allocate(Far::PatchTable const *farPatchTable,
│ │ │ │ -
82 ID3D11DeviceContext *deviceContext);
│ │ │ │ +
75 ID3D11UnorderedAccessView *BindD3D11UAV(ID3D11DeviceContext *deviceContext);
│ │ │ │ +
76
│ │ │ │ +
77protected:
│ │ │ │ +
79 D3D11VertexBuffer(int numElements, int numVertices);
│ │ │ │ +
80
│ │ │ │ +
81 // Allocates D3D11 buffer
│ │ │ │ +
82 bool allocate(ID3D11Device *device);
│ │ │ │
83
│ │ │ │ - │ │ │ │ -
85
│ │ │ │ -
86 ID3D11Buffer *_indexBuffer;
│ │ │ │ -
87 ID3D11Buffer *_patchParamBuffer;
│ │ │ │ -
88 ID3D11ShaderResourceView *_patchParamBufferSRV;
│ │ │ │ -
89};
│ │ │ │ +
84private:
│ │ │ │ +
85 int _numElements;
│ │ │ │ +
86 int _numVertices;
│ │ │ │ +
87 ID3D11Buffer *_buffer;
│ │ │ │ +
88 ID3D11Buffer *_uploadBuffer;
│ │ │ │ +
89 ID3D11UnorderedAccessView *_uav;
│ │ │ │ +
90};
│ │ │ │
│ │ │ │ -
90
│ │ │ │
91
│ │ │ │
92} // end namespace Osd
│ │ │ │
93
│ │ │ │
94} // end namespace OPENSUBDIV_VERSION
│ │ │ │
95using namespace OPENSUBDIV_VERSION;
│ │ │ │
96
│ │ │ │
97} // end namespace OpenSubdiv
│ │ │ │
98
│ │ │ │ -
99#endif // OPENSUBDIV3_OSD_GL_PATCH_TABLE_H
│ │ │ │ +
99#endif // OPENSUBDIV3_OSD_D3D11_VERTEX_BUFFER_H
│ │ │ │ │ │ │ │ -
std::vector< PatchArray > PatchArrayVector
Definition types.h:132
│ │ │ │ -
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ - │ │ │ │ -
static D3D11PatchTable * Create(Far::PatchTable const *farPatchTable, DEVICE_CONTEXT context)
│ │ │ │ - │ │ │ │ -
bool allocate(Far::PatchTable const *farPatchTable, ID3D11DeviceContext *deviceContext)
│ │ │ │ - │ │ │ │ - │ │ │ │ -
ID3D11Buffer * GetPatchIndexBuffer() const
Returns the index buffer containing the patch control vertices.
│ │ │ │ - │ │ │ │ - │ │ │ │ -
static D3D11PatchTable * Create(Far::PatchTable const *farPatchTable, ID3D11DeviceContext *deviceContext)
│ │ │ │ - │ │ │ │ - │ │ │ │ -
ID3D11ShaderResourceView * GetPatchParamSRV() const
Returns the SRV containing the patch parameter.
│ │ │ │ - │ │ │ │ +
Concrete vertex buffer class for DirectX subdivision and DirectX drawing.
│ │ │ │ +
int GetNumElements() const
Returns how many elements defined in this vertex buffer.
│ │ │ │ +
void UpdateData(const float *src, int startVertex, int numVertices, ID3D11DeviceContext *deviceContext)
│ │ │ │ +
static D3D11VertexBuffer * Create(int numElements, int numVertices, ID3D11DeviceContext *deviceContext)
Creator. Returns NULL if error.
│ │ │ │ +
D3D11VertexBuffer(int numElements, int numVertices)
Constructor.
│ │ │ │ +
int GetNumVertices() const
Returns how many vertices allocated in this vertex buffer.
│ │ │ │ +
ID3D11Buffer * BindD3D11Buffer(ID3D11DeviceContext *deviceContext)
Returns the D3D11 buffer object.
│ │ │ │ + │ │ │ │ +
ID3D11UnorderedAccessView * BindD3D11UAV(ID3D11DeviceContext *deviceContext)
Returns the D3D11 UAV.
│ │ │ │ + │ │ │ │ +
ID3D11Buffer * BindVBO(ID3D11DeviceContext *deviceContext)
Returns the D3D11 buffer object (for Osd::Mesh interface)
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -d3d11PatchTable.h │ │ │ │ │ +d3d11VertexBuffer.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ -2// Copyright 2015 Pixar │ │ │ │ │ +2// Copyright 2013 Pixar │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ 7// Section 6. Trademarks. is deleted and replaced with: │ │ │ │ │ 8// │ │ │ │ │ 9// 6. Trademarks. This License does not grant permission to use the trade │ │ │ │ │ @@ -24,134 +24,106 @@ │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ 24 │ │ │ │ │ -25#ifndef OPENSUBDIV3_OSD_GL_PATCH_TABLE_H │ │ │ │ │ -26#define OPENSUBDIV3_OSD_GL_PATCH_TABLE_H │ │ │ │ │ +25#ifndef OPENSUBDIV3_OSD_D3D11_VERTEX_BUFFER_H │ │ │ │ │ +26#define OPENSUBDIV3_OSD_D3D11_VERTEX_BUFFER_H │ │ │ │ │ 27 │ │ │ │ │ 28#include "../version.h" │ │ │ │ │ 29 │ │ │ │ │ -30#include │ │ │ │ │ -31#include "../far/patchDescriptor.h" │ │ │ │ │ -32#include "../osd/nonCopyable.h" │ │ │ │ │ -33#include "../osd/types.h" │ │ │ │ │ +30struct ID3D11Buffer; │ │ │ │ │ +31struct ID3D11Device; │ │ │ │ │ +32struct ID3D11DeviceContext; │ │ │ │ │ +33struct ID3D11UnorderedAccessView; │ │ │ │ │ 34 │ │ │ │ │ -35struct ID3D11Buffer; │ │ │ │ │ -36struct ID3D11ShaderResourceView; │ │ │ │ │ -37struct ID3D11Device; │ │ │ │ │ -38struct ID3D11DeviceContext; │ │ │ │ │ +35namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ +36namespace OPENSUBDIV_VERSION { │ │ │ │ │ +37 │ │ │ │ │ +38namespace Osd { │ │ │ │ │ 39 │ │ │ │ │ -40namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ -41namespace OPENSUBDIV_VERSION { │ │ │ │ │ -42 │ │ │ │ │ -43namespace Far{ │ │ │ │ │ -44 class PatchTable; │ │ │ │ │ -45}; │ │ │ │ │ -46 │ │ │ │ │ -47namespace Osd { │ │ │ │ │ -48 │ │ │ │ │ -_4_9class _D_3_D_1_1_P_a_t_c_h_T_a_b_l_e : private NonCopyable { │ │ │ │ │ -50public: │ │ │ │ │ -_5_1 typedef ID3D11Buffer * _V_e_r_t_e_x_B_u_f_f_e_r_B_i_n_d_i_n_g; │ │ │ │ │ -52 │ │ │ │ │ -_5_3 _D_3_D_1_1_P_a_t_c_h_T_a_b_l_e(); │ │ │ │ │ -_5_4 _~_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e(); │ │ │ │ │ -55 │ │ │ │ │ -56 template │ │ │ │ │ -_5_7 static _D_3_D_1_1_P_a_t_c_h_T_a_b_l_e *_C_r_e_a_t_e(_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e const *farPatchTable, │ │ │ │ │ -58 DEVICE_CONTEXT context) { │ │ │ │ │ -59 return _C_r_e_a_t_e(farPatchTable, context->GetDeviceContext()); │ │ │ │ │ -60 } │ │ │ │ │ -61 │ │ │ │ │ -_6_2 static _D_3_D_1_1_P_a_t_c_h_T_a_b_l_e *_C_r_e_a_t_e(_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e const *farPatchTable, │ │ │ │ │ -63 ID3D11DeviceContext *deviceContext); │ │ │ │ │ -64 │ │ │ │ │ -_6_5 _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r const &_G_e_t_P_a_t_c_h_A_r_r_a_y_s() const { │ │ │ │ │ -66 return ___p_a_t_c_h_A_r_r_a_y_s; │ │ │ │ │ -67 } │ │ │ │ │ +_4_6class _D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r { │ │ │ │ │ +47public: │ │ │ │ │ +_4_9 static _D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r * _C_r_e_a_t_e(int numElements, int numVertices, │ │ │ │ │ +50 ID3D11DeviceContext *deviceContext); │ │ │ │ │ +51 │ │ │ │ │ +_5_3 virtual _~_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r(); │ │ │ │ │ +54 │ │ │ │ │ +_5_7 void _U_p_d_a_t_e_D_a_t_a(const float *src, int startVertex, int numVertices, │ │ │ │ │ +58 ID3D11DeviceContext *deviceContext); │ │ │ │ │ +59 │ │ │ │ │ +_6_1 int _G_e_t_N_u_m_E_l_e_m_e_n_t_s() const; │ │ │ │ │ +62 │ │ │ │ │ +_6_4 int _G_e_t_N_u_m_V_e_r_t_i_c_e_s() const; │ │ │ │ │ +65 │ │ │ │ │ +_6_7 ID3D11Buffer *_B_i_n_d_D_3_D_1_1_B_u_f_f_e_r(ID3D11DeviceContext *deviceContext); │ │ │ │ │ 68 │ │ │ │ │ -_7_0 ID3D11Buffer* _G_e_t_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r() const { │ │ │ │ │ -71 return ___i_n_d_e_x_B_u_f_f_e_r; │ │ │ │ │ +_7_0 ID3D11Buffer *_B_i_n_d_V_B_O(ID3D11DeviceContext *deviceContext) { │ │ │ │ │ +71 return _B_i_n_d_D_3_D_1_1_B_u_f_f_e_r(deviceContext); │ │ │ │ │ 72 } │ │ │ │ │ 73 │ │ │ │ │ -_7_5 ID3D11ShaderResourceView* _G_e_t_P_a_t_c_h_P_a_r_a_m_S_R_V() const { │ │ │ │ │ -76 return ___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r_S_R_V; │ │ │ │ │ -77 } │ │ │ │ │ -78 │ │ │ │ │ -79protected: │ │ │ │ │ -80 // allocate buffers from patchTable │ │ │ │ │ -_8_1 bool _a_l_l_o_c_a_t_e(_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e const *farPatchTable, │ │ │ │ │ -82 ID3D11DeviceContext *deviceContext); │ │ │ │ │ +_7_5 ID3D11UnorderedAccessView *_B_i_n_d_D_3_D_1_1_U_A_V(ID3D11DeviceContext *deviceContext); │ │ │ │ │ +76 │ │ │ │ │ +77protected: │ │ │ │ │ +_7_9 _D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r(int numElements, int numVertices); │ │ │ │ │ +80 │ │ │ │ │ +81 // Allocates D3D11 buffer │ │ │ │ │ +_8_2 bool _a_l_l_o_c_a_t_e(ID3D11Device *device); │ │ │ │ │ 83 │ │ │ │ │ -_8_4 _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r ___p_a_t_c_h_A_r_r_a_y_s; │ │ │ │ │ -85 │ │ │ │ │ -_8_6 ID3D11Buffer *___i_n_d_e_x_B_u_f_f_e_r; │ │ │ │ │ -_8_7 ID3D11Buffer *___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r; │ │ │ │ │ -_8_8 ID3D11ShaderResourceView *___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r_S_R_V; │ │ │ │ │ -89}; │ │ │ │ │ -90 │ │ │ │ │ +84private: │ │ │ │ │ +85 int _numElements; │ │ │ │ │ +86 int _numVertices; │ │ │ │ │ +87 ID3D11Buffer *_buffer; │ │ │ │ │ +88 ID3D11Buffer *_uploadBuffer; │ │ │ │ │ +89 ID3D11UnorderedAccessView *_uav; │ │ │ │ │ +90}; │ │ │ │ │ 91 │ │ │ │ │ 92} // end namespace Osd │ │ │ │ │ 93 │ │ │ │ │ 94} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ 95using namespace OPENSUBDIV_VERSION; │ │ │ │ │ 96 │ │ │ │ │ 97} // end namespace OpenSubdiv │ │ │ │ │ 98 │ │ │ │ │ -99#endif // OPENSUBDIV3_OSD_GL_PATCH_TABLE_H │ │ │ │ │ +99#endif // OPENSUBDIV3_OSD_D3D11_VERTEX_BUFFER_H │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r │ │ │ │ │ -std::vector< PatchArray > PatchArrayVector │ │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e_s_._h_:_1_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -Container for arrays of parametric patches. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_5_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -DDeeffiinniittiioonn _d_3_d_1_1_P_a_t_c_h_T_a_b_l_e_._h_:_4_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ -static D3D11PatchTable * Create(Far::PatchTable const *farPatchTable, │ │ │ │ │ -DEVICE_CONTEXT context) │ │ │ │ │ -DDeeffiinniittiioonn _d_3_d_1_1_P_a_t_c_h_T_a_b_l_e_._h_:_5_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ -PatchArrayVector const & GetPatchArrays() const │ │ │ │ │ -DDeeffiinniittiioonn _d_3_d_1_1_P_a_t_c_h_T_a_b_l_e_._h_:_6_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:_a_l_l_o_c_a_t_e │ │ │ │ │ -bool allocate(Far::PatchTable const *farPatchTable, ID3D11DeviceContext │ │ │ │ │ -*deviceContext) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:_V_e_r_t_e_x_B_u_f_f_e_r_B_i_n_d_i_n_g │ │ │ │ │ -ID3D11Buffer * VertexBufferBinding │ │ │ │ │ -DDeeffiinniittiioonn _d_3_d_1_1_P_a_t_c_h_T_a_b_l_e_._h_:_5_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:_~_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -~D3D11PatchTable() │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ -ID3D11Buffer * GetPatchIndexBuffer() const │ │ │ │ │ -Returns the index buffer containing the patch control vertices. │ │ │ │ │ -DDeeffiinniittiioonn _d_3_d_1_1_P_a_t_c_h_T_a_b_l_e_._h_:_7_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:___p_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ -PatchArrayVector _patchArrays │ │ │ │ │ -DDeeffiinniittiioonn _d_3_d_1_1_P_a_t_c_h_T_a_b_l_e_._h_:_8_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:___i_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ -ID3D11Buffer * _indexBuffer │ │ │ │ │ -DDeeffiinniittiioonn _d_3_d_1_1_P_a_t_c_h_T_a_b_l_e_._h_:_8_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ -static D3D11PatchTable * Create(Far::PatchTable const *farPatchTable, │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ +Concrete vertex buffer class for DirectX subdivision and DirectX drawing. │ │ │ │ │ +DDeeffiinniittiioonn _d_3_d_1_1_V_e_r_t_e_x_B_u_f_f_e_r_._h_:_4_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r_:_:_G_e_t_N_u_m_E_l_e_m_e_n_t_s │ │ │ │ │ +int GetNumElements() const │ │ │ │ │ +Returns how many elements defined in this vertex buffer. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r_:_:_U_p_d_a_t_e_D_a_t_a │ │ │ │ │ +void UpdateData(const float *src, int startVertex, int numVertices, │ │ │ │ │ ID3D11DeviceContext *deviceContext) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r_S_R_V │ │ │ │ │ -ID3D11ShaderResourceView * _patchParamBufferSRV │ │ │ │ │ -DDeeffiinniittiioonn _d_3_d_1_1_P_a_t_c_h_T_a_b_l_e_._h_:_8_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r │ │ │ │ │ -ID3D11Buffer * _patchParamBuffer │ │ │ │ │ -DDeeffiinniittiioonn _d_3_d_1_1_P_a_t_c_h_T_a_b_l_e_._h_:_8_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_P_a_r_a_m_S_R_V │ │ │ │ │ -ID3D11ShaderResourceView * GetPatchParamSRV() const │ │ │ │ │ -Returns the SRV containing the patch parameter. │ │ │ │ │ -DDeeffiinniittiioonn _d_3_d_1_1_P_a_t_c_h_T_a_b_l_e_._h_:_7_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -D3D11PatchTable() │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r_:_:_C_r_e_a_t_e │ │ │ │ │ +static D3D11VertexBuffer * Create(int numElements, int numVertices, │ │ │ │ │ +ID3D11DeviceContext *deviceContext) │ │ │ │ │ +Creator. Returns NULL if error. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r_:_:_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ +D3D11VertexBuffer(int numElements, int numVertices) │ │ │ │ │ +Constructor. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r_:_:_G_e_t_N_u_m_V_e_r_t_i_c_e_s │ │ │ │ │ +int GetNumVertices() const │ │ │ │ │ +Returns how many vertices allocated in this vertex buffer. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r_:_:_B_i_n_d_D_3_D_1_1_B_u_f_f_e_r │ │ │ │ │ +ID3D11Buffer * BindD3D11Buffer(ID3D11DeviceContext *deviceContext) │ │ │ │ │ +Returns the D3D11 buffer object. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r_:_:_~_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ +virtual ~D3D11VertexBuffer() │ │ │ │ │ +Destructor. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r_:_:_B_i_n_d_D_3_D_1_1_U_A_V │ │ │ │ │ +ID3D11UnorderedAccessView * BindD3D11UAV(ID3D11DeviceContext *deviceContext) │ │ │ │ │ +Returns the D3D11 UAV. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r_:_:_a_l_l_o_c_a_t_e │ │ │ │ │ +bool allocate(ID3D11Device *device) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r_:_:_B_i_n_d_V_B_O │ │ │ │ │ +ID3D11Buffer * BindVBO(ID3D11DeviceContext *deviceContext) │ │ │ │ │ +Returns the D3D11 buffer object (for Osd::Mesh interface) │ │ │ │ │ +DDeeffiinniittiioonn _d_3_d_1_1_V_e_r_t_e_x_B_u_f_f_e_r_._h_:_7_0 │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _d_3_d_1_1_P_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ + * _d_3_d_1_1_V_e_r_t_e_x_B_u_f_f_e_r_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00836.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/d3d11VertexBuffer.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/osd/d3d11LegacyGregoryPatchTable.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -90,25 +90,26 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
d3d11VertexBuffer.h File Reference
│ │ │ │ +
d3d11LegacyGregoryPatchTable.h File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ +#include "../far/patchTable.h"
│ │ │ │ +#include "../osd/nonCopyable.h"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  D3D11VertexBuffer
 Concrete vertex buffer class for DirectX subdivision and DirectX drawing. More...
class  D3D11LegacyGregoryPatchTable
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -117,13 +118,13 @@ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,24 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -d3d11VertexBuffer.h File Reference │ │ │ │ │ +d3d11LegacyGregoryPatchTable.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ +#include "_._._/_f_a_r_/_p_a_t_c_h_T_a_b_l_e_._h" │ │ │ │ │ +#include "../osd/nonCopyable.h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ -  Concrete vertex buffer class for DirectX subdivision and DirectX │ │ │ │ │ - drawing. _M_o_r_e_._._. │ │ │ │ │ +class   _D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d │ │ │ │ │   │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _d_3_d_1_1_V_e_r_t_e_x_B_u_f_f_e_r_._h │ │ │ │ │ + * _d_3_d_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00836.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,3 +1,3 @@ │ │ │ │ │ var a00836 = [ │ │ │ │ │ - ["D3D11VertexBuffer", "a01213.html", "a01213"] │ │ │ │ │ + ["D3D11LegacyGregoryPatchTable", "a01205.html", "a01205"] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00836_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/d3d11VertexBuffer.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/osd/d3d11LegacyGregoryPatchTable.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,19 +92,19 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
d3d11VertexBuffer.h
│ │ │ │ +
d3d11LegacyGregoryPatchTable.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │ -
2// Copyright 2013 Pixar
│ │ │ │ +
2// Copyright 2015 Pixar
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │
6// compliance with the Apache License and the following modification to it:
│ │ │ │
7// Section 6. Trademarks. is deleted and replaced with:
│ │ │ │
8//
│ │ │ │
9// 6. Trademarks. This License does not grant permission to use the trade
│ │ │ │ @@ -119,93 +119,122 @@ │ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │
24
│ │ │ │ -
25#ifndef OPENSUBDIV3_OSD_D3D11_VERTEX_BUFFER_H
│ │ │ │ -
26#define OPENSUBDIV3_OSD_D3D11_VERTEX_BUFFER_H
│ │ │ │ +
25#ifndef OPENSUBDIV3_OSD_D3D11_LEGACY_GREGORY_PATCH_TABLE_H
│ │ │ │ +
26#define OPENSUBDIV3_OSD_D3D11_LEGACY_GREGORY_PATCH_TABLE_H
│ │ │ │
27
│ │ │ │
28#include "../version.h"
│ │ │ │
29
│ │ │ │ -
30struct ID3D11Buffer;
│ │ │ │ -
31struct ID3D11Device;
│ │ │ │ -
32struct ID3D11DeviceContext;
│ │ │ │ -
33struct ID3D11UnorderedAccessView;
│ │ │ │ -
34
│ │ │ │ -
35namespace OpenSubdiv {
│ │ │ │ -
36namespace OPENSUBDIV_VERSION {
│ │ │ │ +
30#include "../far/patchTable.h"
│ │ │ │ +
31#include "../osd/nonCopyable.h"
│ │ │ │ +
32
│ │ │ │ +
33struct ID3D11Buffer;
│ │ │ │ +
34struct ID3D11ShaderResourceView;
│ │ │ │ +
35struct ID3D11Device;
│ │ │ │ +
36struct ID3D11DeviceContext;
│ │ │ │
37
│ │ │ │ -
38namespace Osd {
│ │ │ │ -
39
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
47public:
│ │ │ │ -
49 static D3D11VertexBuffer * Create(int numElements, int numVertices,
│ │ │ │ -
50 ID3D11DeviceContext *deviceContext);
│ │ │ │ -
51
│ │ │ │ - │ │ │ │ -
54
│ │ │ │ -
57 void UpdateData(const float *src, int startVertex, int numVertices,
│ │ │ │ -
58 ID3D11DeviceContext *deviceContext);
│ │ │ │ -
59
│ │ │ │ -
61 int GetNumElements() const;
│ │ │ │ -
62
│ │ │ │ -
64 int GetNumVertices() const;
│ │ │ │ +
38namespace OpenSubdiv {
│ │ │ │ +
39namespace OPENSUBDIV_VERSION {
│ │ │ │ +
40
│ │ │ │ +
41namespace Osd {
│ │ │ │ +
42
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
44 : private NonCopyable<D3D11LegacyGregoryPatchTable> {
│ │ │ │ +
45public:
│ │ │ │ + │ │ │ │ +
47
│ │ │ │ +
48 template<typename DEVICE_CONTEXT>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
50 Far::PatchTable const *farPatchTable, DEVICE_CONTEXT context) {
│ │ │ │ +
51 return Create(farPatchTable, context->GetDeviceContext());
│ │ │ │ +
52 }
│ │ │ │ +
│ │ │ │ +
53
│ │ │ │ + │ │ │ │ +
55 Far::PatchTable const *farPatchTable,
│ │ │ │ +
56 ID3D11DeviceContext *deviceContext);
│ │ │ │ +
57
│ │ │ │ +
58 void UpdateVertexBuffer(ID3D11Buffer *vbo,
│ │ │ │ +
59 int numVertices, int numVertexElements,
│ │ │ │ +
60 ID3D11DeviceContext *pd3d11DeviceContext);
│ │ │ │ +
61
│ │ │ │ +
│ │ │ │ +
62 ID3D11ShaderResourceView* GetVertexSRV() const {
│ │ │ │ +
63 return _vertexSRV;
│ │ │ │ +
64 }
│ │ │ │ +
│ │ │ │
65
│ │ │ │ -
67 ID3D11Buffer *BindD3D11Buffer(ID3D11DeviceContext *deviceContext);
│ │ │ │ -
68
│ │ │ │ +
│ │ │ │ +
66 ID3D11ShaderResourceView* GetVertexValenceSRV() const {
│ │ │ │ +
67 return _vertexValenceSRV;
│ │ │ │ +
68 }
│ │ │ │ +
│ │ │ │ +
69
│ │ │ │
│ │ │ │ -
70 ID3D11Buffer *BindVBO(ID3D11DeviceContext *deviceContext) {
│ │ │ │ -
71 return BindD3D11Buffer(deviceContext);
│ │ │ │ +
70 ID3D11ShaderResourceView* GetQuadOffsetsSRV() const {
│ │ │ │ +
71 return _quadOffsetsSRV;
│ │ │ │
72 }
│ │ │ │
│ │ │ │
73
│ │ │ │ -
75 ID3D11UnorderedAccessView *BindD3D11UAV(ID3D11DeviceContext *deviceContext);
│ │ │ │ -
76
│ │ │ │ -
77protected:
│ │ │ │ -
79 D3D11VertexBuffer(int numElements, int numVertices);
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
76 return _quadOffsetsBase[1];
│ │ │ │ +
77 }
│ │ │ │ +
78 return _quadOffsetsBase[0];
│ │ │ │ +
79 }
│ │ │ │ +
│ │ │ │
80
│ │ │ │ -
81 // Allocates D3D11 buffer
│ │ │ │ -
82 bool allocate(ID3D11Device *device);
│ │ │ │ +
81protected:
│ │ │ │ + │ │ │ │
83
│ │ │ │
84private:
│ │ │ │ -
85 int _numElements;
│ │ │ │ -
86 int _numVertices;
│ │ │ │ -
87 ID3D11Buffer *_buffer;
│ │ │ │ -
88 ID3D11Buffer *_uploadBuffer;
│ │ │ │ -
89 ID3D11UnorderedAccessView *_uav;
│ │ │ │ -
90};
│ │ │ │ +
85 ID3D11Buffer* _vertexValenceBuffer;
│ │ │ │ +
86 ID3D11Buffer* _quadOffsetsBuffer;
│ │ │ │ +
87 ID3D11ShaderResourceView* _vertexSRV;
│ │ │ │ +
88 ID3D11ShaderResourceView* _vertexValenceSRV;
│ │ │ │ +
89 ID3D11ShaderResourceView* _quadOffsetsSRV;
│ │ │ │ +
90 int _quadOffsetsBase[2]; // gregory, boundaryGregory
│ │ │ │ +
91};
│ │ │ │
│ │ │ │ -
91
│ │ │ │ -
92} // end namespace Osd
│ │ │ │ +
92
│ │ │ │
93
│ │ │ │ -
94} // end namespace OPENSUBDIV_VERSION
│ │ │ │ -
95using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
94
│ │ │ │ +
95} // end namespace Osd
│ │ │ │
96
│ │ │ │ -
97} // end namespace OpenSubdiv
│ │ │ │ -
98
│ │ │ │ -
99#endif // OPENSUBDIV3_OSD_D3D11_VERTEX_BUFFER_H
│ │ │ │ +
97} // end namespace OPENSUBDIV_VERSION
│ │ │ │ +
98using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
99
│ │ │ │ +
100} // end namespace OpenSubdiv
│ │ │ │ +
101
│ │ │ │ +
102#endif // OPENSUBDIV3_OSD_D3D11_LEGACY_GREGORY_PATCH_TABLE_H
│ │ │ │ │ │ │ │ -
Concrete vertex buffer class for DirectX subdivision and DirectX drawing.
│ │ │ │ -
int GetNumElements() const
Returns how many elements defined in this vertex buffer.
│ │ │ │ -
void UpdateData(const float *src, int startVertex, int numVertices, ID3D11DeviceContext *deviceContext)
│ │ │ │ -
static D3D11VertexBuffer * Create(int numElements, int numVertices, ID3D11DeviceContext *deviceContext)
Creator. Returns NULL if error.
│ │ │ │ -
D3D11VertexBuffer(int numElements, int numVertices)
Constructor.
│ │ │ │ -
int GetNumVertices() const
Returns how many vertices allocated in this vertex buffer.
│ │ │ │ -
ID3D11Buffer * BindD3D11Buffer(ID3D11DeviceContext *deviceContext)
Returns the D3D11 buffer object.
│ │ │ │ - │ │ │ │ -
ID3D11UnorderedAccessView * BindD3D11UAV(ID3D11DeviceContext *deviceContext)
Returns the D3D11 UAV.
│ │ │ │ - │ │ │ │ -
ID3D11Buffer * BindVBO(ID3D11DeviceContext *deviceContext)
Returns the D3D11 buffer object (for Osd::Mesh interface)
│ │ │ │ + │ │ │ │ + │ │ │ │ +
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ + │ │ │ │ +
void UpdateVertexBuffer(ID3D11Buffer *vbo, int numVertices, int numVertexElements, ID3D11DeviceContext *pd3d11DeviceContext)
│ │ │ │ + │ │ │ │ + │ │ │ │ +
static D3D11LegacyGregoryPatchTable * Create(Far::PatchTable const *farPatchTable, ID3D11DeviceContext *deviceContext)
│ │ │ │ + │ │ │ │ +
static D3D11LegacyGregoryPatchTable * Create(Far::PatchTable const *farPatchTable, DEVICE_CONTEXT context)
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -d3d11VertexBuffer.h │ │ │ │ │ +d3d11LegacyGregoryPatchTable.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ -2// Copyright 2013 Pixar │ │ │ │ │ +2// Copyright 2015 Pixar │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ 7// Section 6. Trademarks. is deleted and replaced with: │ │ │ │ │ 8// │ │ │ │ │ 9// 6. Trademarks. This License does not grant permission to use the trade │ │ │ │ │ @@ -24,106 +24,134 @@ │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ 24 │ │ │ │ │ -25#ifndef OPENSUBDIV3_OSD_D3D11_VERTEX_BUFFER_H │ │ │ │ │ -26#define OPENSUBDIV3_OSD_D3D11_VERTEX_BUFFER_H │ │ │ │ │ +25#ifndef OPENSUBDIV3_OSD_D3D11_LEGACY_GREGORY_PATCH_TABLE_H │ │ │ │ │ +26#define OPENSUBDIV3_OSD_D3D11_LEGACY_GREGORY_PATCH_TABLE_H │ │ │ │ │ 27 │ │ │ │ │ 28#include "../version.h" │ │ │ │ │ 29 │ │ │ │ │ -30struct ID3D11Buffer; │ │ │ │ │ -31struct ID3D11Device; │ │ │ │ │ -32struct ID3D11DeviceContext; │ │ │ │ │ -33struct ID3D11UnorderedAccessView; │ │ │ │ │ -34 │ │ │ │ │ -35namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ -36namespace OPENSUBDIV_VERSION { │ │ │ │ │ +30#include "../far/patchTable.h" │ │ │ │ │ +31#include "../osd/nonCopyable.h" │ │ │ │ │ +32 │ │ │ │ │ +33struct ID3D11Buffer; │ │ │ │ │ +34struct ID3D11ShaderResourceView; │ │ │ │ │ +35struct ID3D11Device; │ │ │ │ │ +36struct ID3D11DeviceContext; │ │ │ │ │ 37 │ │ │ │ │ -38namespace Osd { │ │ │ │ │ -39 │ │ │ │ │ -_4_6class _D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r { │ │ │ │ │ -47public: │ │ │ │ │ -_4_9 static _D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r * _C_r_e_a_t_e(int numElements, int numVertices, │ │ │ │ │ -50 ID3D11DeviceContext *deviceContext); │ │ │ │ │ -51 │ │ │ │ │ -_5_3 virtual _~_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r(); │ │ │ │ │ -54 │ │ │ │ │ -_5_7 void _U_p_d_a_t_e_D_a_t_a(const float *src, int startVertex, int numVertices, │ │ │ │ │ -58 ID3D11DeviceContext *deviceContext); │ │ │ │ │ -59 │ │ │ │ │ -_6_1 int _G_e_t_N_u_m_E_l_e_m_e_n_t_s() const; │ │ │ │ │ -62 │ │ │ │ │ -_6_4 int _G_e_t_N_u_m_V_e_r_t_i_c_e_s() const; │ │ │ │ │ +38namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ +39namespace OPENSUBDIV_VERSION { │ │ │ │ │ +40 │ │ │ │ │ +41namespace Osd { │ │ │ │ │ +42 │ │ │ │ │ +_4_3class _D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +44 : private NonCopyable { │ │ │ │ │ +45public: │ │ │ │ │ +_4_6 _~_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e(); │ │ │ │ │ +47 │ │ │ │ │ +48 template │ │ │ │ │ +_4_9 static _D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e *_C_r_e_a_t_e( │ │ │ │ │ +50 _F_a_r_:_:_P_a_t_c_h_T_a_b_l_e const *farPatchTable, DEVICE_CONTEXT context) { │ │ │ │ │ +51 return _C_r_e_a_t_e(farPatchTable, context->GetDeviceContext()); │ │ │ │ │ +52 } │ │ │ │ │ +53 │ │ │ │ │ +_5_4 static _D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e *_C_r_e_a_t_e( │ │ │ │ │ +55 _F_a_r_:_:_P_a_t_c_h_T_a_b_l_e const *farPatchTable, │ │ │ │ │ +56 ID3D11DeviceContext *deviceContext); │ │ │ │ │ +57 │ │ │ │ │ +_5_8 void _U_p_d_a_t_e_V_e_r_t_e_x_B_u_f_f_e_r(ID3D11Buffer *vbo, │ │ │ │ │ +59 int numVertices, int numVertexElements, │ │ │ │ │ +60 ID3D11DeviceContext *pd3d11DeviceContext); │ │ │ │ │ +61 │ │ │ │ │ +_6_2 ID3D11ShaderResourceView* _G_e_t_V_e_r_t_e_x_S_R_V() const { │ │ │ │ │ +63 return _vertexSRV; │ │ │ │ │ +64 } │ │ │ │ │ 65 │ │ │ │ │ -_6_7 ID3D11Buffer *_B_i_n_d_D_3_D_1_1_B_u_f_f_e_r(ID3D11DeviceContext *deviceContext); │ │ │ │ │ -68 │ │ │ │ │ -_7_0 ID3D11Buffer *_B_i_n_d_V_B_O(ID3D11DeviceContext *deviceContext) { │ │ │ │ │ -71 return _B_i_n_d_D_3_D_1_1_B_u_f_f_e_r(deviceContext); │ │ │ │ │ +_6_6 ID3D11ShaderResourceView* _G_e_t_V_e_r_t_e_x_V_a_l_e_n_c_e_S_R_V() const { │ │ │ │ │ +67 return _vertexValenceSRV; │ │ │ │ │ +68 } │ │ │ │ │ +69 │ │ │ │ │ +_7_0 ID3D11ShaderResourceView* _G_e_t_Q_u_a_d_O_f_f_s_e_t_s_S_R_V() const { │ │ │ │ │ +71 return _quadOffsetsSRV; │ │ │ │ │ 72 } │ │ │ │ │ 73 │ │ │ │ │ -_7_5 ID3D11UnorderedAccessView *_B_i_n_d_D_3_D_1_1_U_A_V(ID3D11DeviceContext *deviceContext); │ │ │ │ │ -76 │ │ │ │ │ -77protected: │ │ │ │ │ -_7_9 _D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r(int numElements, int numVertices); │ │ │ │ │ +_7_4 int _G_e_t_Q_u_a_d_O_f_f_s_e_t_s_B_a_s_e(_F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_:_:_T_y_p_e type) { │ │ │ │ │ +75 if (type == _F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_:_:_G_R_E_G_O_R_Y___B_O_U_N_D_A_R_Y) { │ │ │ │ │ +76 return _quadOffsetsBase[1]; │ │ │ │ │ +77 } │ │ │ │ │ +78 return _quadOffsetsBase[0]; │ │ │ │ │ +79 } │ │ │ │ │ 80 │ │ │ │ │ -81 // Allocates D3D11 buffer │ │ │ │ │ -_8_2 bool _a_l_l_o_c_a_t_e(ID3D11Device *device); │ │ │ │ │ +81protected: │ │ │ │ │ +_8_2 _D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e(); │ │ │ │ │ 83 │ │ │ │ │ 84private: │ │ │ │ │ -85 int _numElements; │ │ │ │ │ -86 int _numVertices; │ │ │ │ │ -87 ID3D11Buffer *_buffer; │ │ │ │ │ -88 ID3D11Buffer *_uploadBuffer; │ │ │ │ │ -89 ID3D11UnorderedAccessView *_uav; │ │ │ │ │ -90}; │ │ │ │ │ -91 │ │ │ │ │ -92} // end namespace Osd │ │ │ │ │ +85 ID3D11Buffer* _vertexValenceBuffer; │ │ │ │ │ +86 ID3D11Buffer* _quadOffsetsBuffer; │ │ │ │ │ +87 ID3D11ShaderResourceView* _vertexSRV; │ │ │ │ │ +88 ID3D11ShaderResourceView* _vertexValenceSRV; │ │ │ │ │ +89 ID3D11ShaderResourceView* _quadOffsetsSRV; │ │ │ │ │ +90 int _quadOffsetsBase[2]; // gregory, boundaryGregory │ │ │ │ │ +91}; │ │ │ │ │ +92 │ │ │ │ │ 93 │ │ │ │ │ -94} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ -95using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +94 │ │ │ │ │ +95} // end namespace Osd │ │ │ │ │ 96 │ │ │ │ │ -97} // end namespace OpenSubdiv │ │ │ │ │ -98 │ │ │ │ │ -99#endif // OPENSUBDIV3_OSD_D3D11_VERTEX_BUFFER_H │ │ │ │ │ +97} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ +98using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +99 │ │ │ │ │ +100} // end namespace OpenSubdiv │ │ │ │ │ +101 │ │ │ │ │ +102#endif // OPENSUBDIV3_OSD_D3D11_LEGACY_GREGORY_PATCH_TABLE_H │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ -Concrete vertex buffer class for DirectX subdivision and DirectX drawing. │ │ │ │ │ -DDeeffiinniittiioonn _d_3_d_1_1_V_e_r_t_e_x_B_u_f_f_e_r_._h_:_4_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r_:_:_G_e_t_N_u_m_E_l_e_m_e_n_t_s │ │ │ │ │ -int GetNumElements() const │ │ │ │ │ -Returns how many elements defined in this vertex buffer. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r_:_:_U_p_d_a_t_e_D_a_t_a │ │ │ │ │ -void UpdateData(const float *src, int startVertex, int numVertices, │ │ │ │ │ -ID3D11DeviceContext *deviceContext) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r_:_:_C_r_e_a_t_e │ │ │ │ │ -static D3D11VertexBuffer * Create(int numElements, int numVertices, │ │ │ │ │ -ID3D11DeviceContext *deviceContext) │ │ │ │ │ -Creator. Returns NULL if error. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r_:_:_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ -D3D11VertexBuffer(int numElements, int numVertices) │ │ │ │ │ -Constructor. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r_:_:_G_e_t_N_u_m_V_e_r_t_i_c_e_s │ │ │ │ │ -int GetNumVertices() const │ │ │ │ │ -Returns how many vertices allocated in this vertex buffer. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r_:_:_B_i_n_d_D_3_D_1_1_B_u_f_f_e_r │ │ │ │ │ -ID3D11Buffer * BindD3D11Buffer(ID3D11DeviceContext *deviceContext) │ │ │ │ │ -Returns the D3D11 buffer object. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r_:_:_~_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ -virtual ~D3D11VertexBuffer() │ │ │ │ │ -Destructor. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r_:_:_B_i_n_d_D_3_D_1_1_U_A_V │ │ │ │ │ -ID3D11UnorderedAccessView * BindD3D11UAV(ID3D11DeviceContext *deviceContext) │ │ │ │ │ -Returns the D3D11 UAV. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r_:_:_a_l_l_o_c_a_t_e │ │ │ │ │ -bool allocate(ID3D11Device *device) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_V_e_r_t_e_x_B_u_f_f_e_r_:_:_B_i_n_d_V_B_O │ │ │ │ │ -ID3D11Buffer * BindVBO(ID3D11DeviceContext *deviceContext) │ │ │ │ │ -Returns the D3D11 buffer object (for Osd::Mesh interface) │ │ │ │ │ -DDeeffiinniittiioonn _d_3_d_1_1_V_e_r_t_e_x_B_u_f_f_e_r_._h_:_7_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_:_:_T_y_p_e │ │ │ │ │ +Type │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_D_e_s_c_r_i_p_t_o_r_._h_:_4_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_:_:_G_R_E_G_O_R_Y___B_O_U_N_D_A_R_Y │ │ │ │ │ +@ GREGORY_BOUNDARY │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_D_e_s_c_r_i_p_t_o_r_._h_:_6_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +Container for arrays of parametric patches. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_5_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +DDeeffiinniittiioonn _d_3_d_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h_:_4_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ +_U_p_d_a_t_e_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ +void UpdateVertexBuffer(ID3D11Buffer *vbo, int numVertices, int │ │ │ │ │ +numVertexElements, ID3D11DeviceContext *pd3d11DeviceContext) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ +_G_e_t_Q_u_a_d_O_f_f_s_e_t_s_B_a_s_e │ │ │ │ │ +int GetQuadOffsetsBase(Far::PatchDescriptor::Type type) │ │ │ │ │ +DDeeffiinniittiioonn _d_3_d_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h_:_7_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ +_~_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +~D3D11LegacyGregoryPatchTable() │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ +static D3D11LegacyGregoryPatchTable * Create(Far::PatchTable const │ │ │ │ │ +*farPatchTable, ID3D11DeviceContext *deviceContext) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_V_e_r_t_e_x_S_R_V │ │ │ │ │ +ID3D11ShaderResourceView * GetVertexSRV() const │ │ │ │ │ +DDeeffiinniittiioonn _d_3_d_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h_:_6_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ +static D3D11LegacyGregoryPatchTable * Create(Far::PatchTable const │ │ │ │ │ +*farPatchTable, DEVICE_CONTEXT context) │ │ │ │ │ +DDeeffiinniittiioonn _d_3_d_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h_:_4_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ +_G_e_t_V_e_r_t_e_x_V_a_l_e_n_c_e_S_R_V │ │ │ │ │ +ID3D11ShaderResourceView * GetVertexValenceSRV() const │ │ │ │ │ +DDeeffiinniittiioonn _d_3_d_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h_:_6_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ +_G_e_t_Q_u_a_d_O_f_f_s_e_t_s_S_R_V │ │ │ │ │ +ID3D11ShaderResourceView * GetQuadOffsetsSRV() const │ │ │ │ │ +DDeeffiinniittiioonn _d_3_d_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h_:_7_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ +_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +D3D11LegacyGregoryPatchTable() │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _d_3_d_1_1_V_e_r_t_e_x_B_u_f_f_e_r_._h │ │ │ │ │ + * _d_3_d_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00839.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/d3d11LegacyGregoryPatchTable.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/osd/d3d11PatchTable.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -90,41 +90,45 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
d3d11LegacyGregoryPatchTable.h File Reference
│ │ │ │ +
d3d11PatchTable.h File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include "../far/patchTable.h"
│ │ │ │ +#include <vector>
│ │ │ │ +#include "../far/patchDescriptor.h"
│ │ │ │ #include "../osd/nonCopyable.h"
│ │ │ │ +#include "../osd/types.h"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  D3D11LegacyGregoryPatchTable
class  D3D11PatchTable
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Far
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,28 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -d3d11LegacyGregoryPatchTable.h File Reference │ │ │ │ │ +d3d11PatchTable.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ -#include "_._._/_f_a_r_/_p_a_t_c_h_T_a_b_l_e_._h" │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_f_a_r_/_p_a_t_c_h_D_e_s_c_r_i_p_t_o_r_._h" │ │ │ │ │ #include "../osd/nonCopyable.h" │ │ │ │ │ +#include "_._._/_o_s_d_/_t_y_p_e_s_._h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +class   _D_3_D_1_1_P_a_t_c_h_T_a_b_l_e │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ +namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r │ │ │ │ │ +  │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d │ │ │ │ │   │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _d_3_d_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ + * _d_3_d_1_1_P_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00839.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,3 +1,3 @@ │ │ │ │ │ var a00839 = [ │ │ │ │ │ - ["D3D11LegacyGregoryPatchTable", "a01205.html", "a01205"] │ │ │ │ │ + ["D3D11PatchTable", "a01209.html", "a01209"] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00839_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/d3d11LegacyGregoryPatchTable.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/osd/d3d11PatchTable.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,15 +92,15 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
d3d11LegacyGregoryPatchTable.h
│ │ │ │ +
d3d11PatchTable.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │
2// Copyright 2015 Pixar
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │ @@ -119,122 +119,118 @@ │ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │
24
│ │ │ │ -
25#ifndef OPENSUBDIV3_OSD_D3D11_LEGACY_GREGORY_PATCH_TABLE_H
│ │ │ │ -
26#define OPENSUBDIV3_OSD_D3D11_LEGACY_GREGORY_PATCH_TABLE_H
│ │ │ │ +
25#ifndef OPENSUBDIV3_OSD_GL_PATCH_TABLE_H
│ │ │ │ +
26#define OPENSUBDIV3_OSD_GL_PATCH_TABLE_H
│ │ │ │
27
│ │ │ │
28#include "../version.h"
│ │ │ │
29
│ │ │ │ -
30#include "../far/patchTable.h"
│ │ │ │ -
31#include "../osd/nonCopyable.h"
│ │ │ │ -
32
│ │ │ │ -
33struct ID3D11Buffer;
│ │ │ │ -
34struct ID3D11ShaderResourceView;
│ │ │ │ -
35struct ID3D11Device;
│ │ │ │ -
36struct ID3D11DeviceContext;
│ │ │ │ -
37
│ │ │ │ -
38namespace OpenSubdiv {
│ │ │ │ -
39namespace OPENSUBDIV_VERSION {
│ │ │ │ -
40
│ │ │ │ -
41namespace Osd {
│ │ │ │ +
30#include <vector>
│ │ │ │ +
31#include "../far/patchDescriptor.h"
│ │ │ │ +
32#include "../osd/nonCopyable.h"
│ │ │ │ +
33#include "../osd/types.h"
│ │ │ │ +
34
│ │ │ │ +
35struct ID3D11Buffer;
│ │ │ │ +
36struct ID3D11ShaderResourceView;
│ │ │ │ +
37struct ID3D11Device;
│ │ │ │ +
38struct ID3D11DeviceContext;
│ │ │ │ +
39
│ │ │ │ +
40namespace OpenSubdiv {
│ │ │ │ +
41namespace OPENSUBDIV_VERSION {
│ │ │ │
42
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
44 : private NonCopyable<D3D11LegacyGregoryPatchTable> {
│ │ │ │ -
45public:
│ │ │ │ - │ │ │ │ -
47
│ │ │ │ -
48 template<typename DEVICE_CONTEXT>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
50 Far::PatchTable const *farPatchTable, DEVICE_CONTEXT context) {
│ │ │ │ -
51 return Create(farPatchTable, context->GetDeviceContext());
│ │ │ │ -
52 }
│ │ │ │ -
│ │ │ │ -
53
│ │ │ │ - │ │ │ │ -
55 Far::PatchTable const *farPatchTable,
│ │ │ │ -
56 ID3D11DeviceContext *deviceContext);
│ │ │ │ -
57
│ │ │ │ -
58 void UpdateVertexBuffer(ID3D11Buffer *vbo,
│ │ │ │ -
59 int numVertices, int numVertexElements,
│ │ │ │ -
60 ID3D11DeviceContext *pd3d11DeviceContext);
│ │ │ │ +
43namespace Far{
│ │ │ │ +
44 class PatchTable;
│ │ │ │ +
45};
│ │ │ │ +
46
│ │ │ │ +
47namespace Osd {
│ │ │ │ +
48
│ │ │ │ +
│ │ │ │ +
49class D3D11PatchTable : private NonCopyable<D3D11PatchTable> {
│ │ │ │ +
50public:
│ │ │ │ +
51 typedef ID3D11Buffer * VertexBufferBinding;
│ │ │ │ +
52
│ │ │ │ + │ │ │ │ + │ │ │ │ +
55
│ │ │ │ +
56 template<typename DEVICE_CONTEXT>
│ │ │ │ +
│ │ │ │ +
57 static D3D11PatchTable *Create(Far::PatchTable const *farPatchTable,
│ │ │ │ +
58 DEVICE_CONTEXT context) {
│ │ │ │ +
59 return Create(farPatchTable, context->GetDeviceContext());
│ │ │ │ +
60 }
│ │ │ │ +
│ │ │ │
61
│ │ │ │ -
│ │ │ │ -
62 ID3D11ShaderResourceView* GetVertexSRV() const {
│ │ │ │ -
63 return _vertexSRV;
│ │ │ │ -
64 }
│ │ │ │ -
│ │ │ │ -
65
│ │ │ │ -
│ │ │ │ -
66 ID3D11ShaderResourceView* GetVertexValenceSRV() const {
│ │ │ │ -
67 return _vertexValenceSRV;
│ │ │ │ -
68 }
│ │ │ │ +
62 static D3D11PatchTable *Create(Far::PatchTable const *farPatchTable,
│ │ │ │ +
63 ID3D11DeviceContext *deviceContext);
│ │ │ │ +
64
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
66 return _patchArrays;
│ │ │ │ +
67 }
│ │ │ │
│ │ │ │ -
69
│ │ │ │ +
68
│ │ │ │
│ │ │ │ -
70 ID3D11ShaderResourceView* GetQuadOffsetsSRV() const {
│ │ │ │ -
71 return _quadOffsetsSRV;
│ │ │ │ +
70 ID3D11Buffer* GetPatchIndexBuffer() const {
│ │ │ │ +
71 return _indexBuffer;
│ │ │ │
72 }
│ │ │ │
│ │ │ │
73
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
76 return _quadOffsetsBase[1];
│ │ │ │ -
77 }
│ │ │ │ -
78 return _quadOffsetsBase[0];
│ │ │ │ -
79 }
│ │ │ │ -
│ │ │ │ -
80
│ │ │ │ -
81protected:
│ │ │ │ - │ │ │ │ +
│ │ │ │ +
75 ID3D11ShaderResourceView* GetPatchParamSRV() const {
│ │ │ │ + │ │ │ │ +
77 }
│ │ │ │ +
│ │ │ │ +
78
│ │ │ │ +
79protected:
│ │ │ │ +
80 // allocate buffers from patchTable
│ │ │ │ +
81 bool allocate(Far::PatchTable const *farPatchTable,
│ │ │ │ +
82 ID3D11DeviceContext *deviceContext);
│ │ │ │
83
│ │ │ │ -
84private:
│ │ │ │ -
85 ID3D11Buffer* _vertexValenceBuffer;
│ │ │ │ -
86 ID3D11Buffer* _quadOffsetsBuffer;
│ │ │ │ -
87 ID3D11ShaderResourceView* _vertexSRV;
│ │ │ │ -
88 ID3D11ShaderResourceView* _vertexValenceSRV;
│ │ │ │ -
89 ID3D11ShaderResourceView* _quadOffsetsSRV;
│ │ │ │ -
90 int _quadOffsetsBase[2]; // gregory, boundaryGregory
│ │ │ │ -
91};
│ │ │ │ -
│ │ │ │ -
92
│ │ │ │ + │ │ │ │ +
85
│ │ │ │ +
86 ID3D11Buffer *_indexBuffer;
│ │ │ │ +
87 ID3D11Buffer *_patchParamBuffer;
│ │ │ │ +
88 ID3D11ShaderResourceView *_patchParamBufferSRV;
│ │ │ │ +
89};
│ │ │ │ +
│ │ │ │ +
90
│ │ │ │ +
91
│ │ │ │ +
92} // end namespace Osd
│ │ │ │
93
│ │ │ │ -
94
│ │ │ │ -
95} // end namespace Osd
│ │ │ │ +
94} // end namespace OPENSUBDIV_VERSION
│ │ │ │ +
95using namespace OPENSUBDIV_VERSION;
│ │ │ │
96
│ │ │ │ -
97} // end namespace OPENSUBDIV_VERSION
│ │ │ │ -
98using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
99
│ │ │ │ -
100} // end namespace OpenSubdiv
│ │ │ │ -
101
│ │ │ │ -
102#endif // OPENSUBDIV3_OSD_D3D11_LEGACY_GREGORY_PATCH_TABLE_H
│ │ │ │ +
97} // end namespace OpenSubdiv
│ │ │ │ +
98
│ │ │ │ +
99#endif // OPENSUBDIV3_OSD_GL_PATCH_TABLE_H
│ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ -
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ - │ │ │ │ -
void UpdateVertexBuffer(ID3D11Buffer *vbo, int numVertices, int numVertexElements, ID3D11DeviceContext *pd3d11DeviceContext)
│ │ │ │ - │ │ │ │ - │ │ │ │ -
static D3D11LegacyGregoryPatchTable * Create(Far::PatchTable const *farPatchTable, ID3D11DeviceContext *deviceContext)
│ │ │ │ - │ │ │ │ -
static D3D11LegacyGregoryPatchTable * Create(Far::PatchTable const *farPatchTable, DEVICE_CONTEXT context)
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
std::vector< PatchArray > PatchArrayVector
Definition types.h:132
│ │ │ │ +
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ + │ │ │ │ +
static D3D11PatchTable * Create(Far::PatchTable const *farPatchTable, DEVICE_CONTEXT context)
│ │ │ │ + │ │ │ │ +
bool allocate(Far::PatchTable const *farPatchTable, ID3D11DeviceContext *deviceContext)
│ │ │ │ + │ │ │ │ + │ │ │ │ +
ID3D11Buffer * GetPatchIndexBuffer() const
Returns the index buffer containing the patch control vertices.
│ │ │ │ + │ │ │ │ + │ │ │ │ +
static D3D11PatchTable * Create(Far::PatchTable const *farPatchTable, ID3D11DeviceContext *deviceContext)
│ │ │ │ + │ │ │ │ + │ │ │ │ +
ID3D11ShaderResourceView * GetPatchParamSRV() const
Returns the SRV containing the patch parameter.
│ │ │ │ + │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,12 +1,12 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -d3d11LegacyGregoryPatchTable.h │ │ │ │ │ +d3d11PatchTable.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ 2// Copyright 2015 Pixar │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ @@ -24,134 +24,134 @@ │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ 24 │ │ │ │ │ -25#ifndef OPENSUBDIV3_OSD_D3D11_LEGACY_GREGORY_PATCH_TABLE_H │ │ │ │ │ -26#define OPENSUBDIV3_OSD_D3D11_LEGACY_GREGORY_PATCH_TABLE_H │ │ │ │ │ +25#ifndef OPENSUBDIV3_OSD_GL_PATCH_TABLE_H │ │ │ │ │ +26#define OPENSUBDIV3_OSD_GL_PATCH_TABLE_H │ │ │ │ │ 27 │ │ │ │ │ 28#include "../version.h" │ │ │ │ │ 29 │ │ │ │ │ -30#include "../far/patchTable.h" │ │ │ │ │ -31#include "../osd/nonCopyable.h" │ │ │ │ │ -32 │ │ │ │ │ -33struct ID3D11Buffer; │ │ │ │ │ -34struct ID3D11ShaderResourceView; │ │ │ │ │ -35struct ID3D11Device; │ │ │ │ │ -36struct ID3D11DeviceContext; │ │ │ │ │ -37 │ │ │ │ │ -38namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ -39namespace OPENSUBDIV_VERSION { │ │ │ │ │ -40 │ │ │ │ │ -41namespace Osd { │ │ │ │ │ +30#include │ │ │ │ │ +31#include "../far/patchDescriptor.h" │ │ │ │ │ +32#include "../osd/nonCopyable.h" │ │ │ │ │ +33#include "../osd/types.h" │ │ │ │ │ +34 │ │ │ │ │ +35struct ID3D11Buffer; │ │ │ │ │ +36struct ID3D11ShaderResourceView; │ │ │ │ │ +37struct ID3D11Device; │ │ │ │ │ +38struct ID3D11DeviceContext; │ │ │ │ │ +39 │ │ │ │ │ +40namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ +41namespace OPENSUBDIV_VERSION { │ │ │ │ │ 42 │ │ │ │ │ -_4_3class _D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -44 : private NonCopyable { │ │ │ │ │ -45public: │ │ │ │ │ -_4_6 _~_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e(); │ │ │ │ │ -47 │ │ │ │ │ -48 template │ │ │ │ │ -_4_9 static _D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e *_C_r_e_a_t_e( │ │ │ │ │ -50 _F_a_r_:_:_P_a_t_c_h_T_a_b_l_e const *farPatchTable, DEVICE_CONTEXT context) { │ │ │ │ │ -51 return _C_r_e_a_t_e(farPatchTable, context->GetDeviceContext()); │ │ │ │ │ -52 } │ │ │ │ │ -53 │ │ │ │ │ -_5_4 static _D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e *_C_r_e_a_t_e( │ │ │ │ │ -55 _F_a_r_:_:_P_a_t_c_h_T_a_b_l_e const *farPatchTable, │ │ │ │ │ -56 ID3D11DeviceContext *deviceContext); │ │ │ │ │ -57 │ │ │ │ │ -_5_8 void _U_p_d_a_t_e_V_e_r_t_e_x_B_u_f_f_e_r(ID3D11Buffer *vbo, │ │ │ │ │ -59 int numVertices, int numVertexElements, │ │ │ │ │ -60 ID3D11DeviceContext *pd3d11DeviceContext); │ │ │ │ │ +43namespace Far{ │ │ │ │ │ +44 class PatchTable; │ │ │ │ │ +45}; │ │ │ │ │ +46 │ │ │ │ │ +47namespace Osd { │ │ │ │ │ +48 │ │ │ │ │ +_4_9class _D_3_D_1_1_P_a_t_c_h_T_a_b_l_e : private NonCopyable { │ │ │ │ │ +50public: │ │ │ │ │ +_5_1 typedef ID3D11Buffer * _V_e_r_t_e_x_B_u_f_f_e_r_B_i_n_d_i_n_g; │ │ │ │ │ +52 │ │ │ │ │ +_5_3 _D_3_D_1_1_P_a_t_c_h_T_a_b_l_e(); │ │ │ │ │ +_5_4 _~_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e(); │ │ │ │ │ +55 │ │ │ │ │ +56 template │ │ │ │ │ +_5_7 static _D_3_D_1_1_P_a_t_c_h_T_a_b_l_e *_C_r_e_a_t_e(_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e const *farPatchTable, │ │ │ │ │ +58 DEVICE_CONTEXT context) { │ │ │ │ │ +59 return _C_r_e_a_t_e(farPatchTable, context->GetDeviceContext()); │ │ │ │ │ +60 } │ │ │ │ │ 61 │ │ │ │ │ -_6_2 ID3D11ShaderResourceView* _G_e_t_V_e_r_t_e_x_S_R_V() const { │ │ │ │ │ -63 return _vertexSRV; │ │ │ │ │ -64 } │ │ │ │ │ -65 │ │ │ │ │ -_6_6 ID3D11ShaderResourceView* _G_e_t_V_e_r_t_e_x_V_a_l_e_n_c_e_S_R_V() const { │ │ │ │ │ -67 return _vertexValenceSRV; │ │ │ │ │ -68 } │ │ │ │ │ -69 │ │ │ │ │ -_7_0 ID3D11ShaderResourceView* _G_e_t_Q_u_a_d_O_f_f_s_e_t_s_S_R_V() const { │ │ │ │ │ -71 return _quadOffsetsSRV; │ │ │ │ │ +_6_2 static _D_3_D_1_1_P_a_t_c_h_T_a_b_l_e *_C_r_e_a_t_e(_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e const *farPatchTable, │ │ │ │ │ +63 ID3D11DeviceContext *deviceContext); │ │ │ │ │ +64 │ │ │ │ │ +_6_5 _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r const &_G_e_t_P_a_t_c_h_A_r_r_a_y_s() const { │ │ │ │ │ +66 return ___p_a_t_c_h_A_r_r_a_y_s; │ │ │ │ │ +67 } │ │ │ │ │ +68 │ │ │ │ │ +_7_0 ID3D11Buffer* _G_e_t_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r() const { │ │ │ │ │ +71 return ___i_n_d_e_x_B_u_f_f_e_r; │ │ │ │ │ 72 } │ │ │ │ │ 73 │ │ │ │ │ -_7_4 int _G_e_t_Q_u_a_d_O_f_f_s_e_t_s_B_a_s_e(_F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_:_:_T_y_p_e type) { │ │ │ │ │ -75 if (type == _F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_:_:_G_R_E_G_O_R_Y___B_O_U_N_D_A_R_Y) { │ │ │ │ │ -76 return _quadOffsetsBase[1]; │ │ │ │ │ +_7_5 ID3D11ShaderResourceView* _G_e_t_P_a_t_c_h_P_a_r_a_m_S_R_V() const { │ │ │ │ │ +76 return ___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r_S_R_V; │ │ │ │ │ 77 } │ │ │ │ │ -78 return _quadOffsetsBase[0]; │ │ │ │ │ -79 } │ │ │ │ │ -80 │ │ │ │ │ -81protected: │ │ │ │ │ -_8_2 _D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e(); │ │ │ │ │ +78 │ │ │ │ │ +79protected: │ │ │ │ │ +80 // allocate buffers from patchTable │ │ │ │ │ +_8_1 bool _a_l_l_o_c_a_t_e(_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e const *farPatchTable, │ │ │ │ │ +82 ID3D11DeviceContext *deviceContext); │ │ │ │ │ 83 │ │ │ │ │ -84private: │ │ │ │ │ -85 ID3D11Buffer* _vertexValenceBuffer; │ │ │ │ │ -86 ID3D11Buffer* _quadOffsetsBuffer; │ │ │ │ │ -87 ID3D11ShaderResourceView* _vertexSRV; │ │ │ │ │ -88 ID3D11ShaderResourceView* _vertexValenceSRV; │ │ │ │ │ -89 ID3D11ShaderResourceView* _quadOffsetsSRV; │ │ │ │ │ -90 int _quadOffsetsBase[2]; // gregory, boundaryGregory │ │ │ │ │ -91}; │ │ │ │ │ -92 │ │ │ │ │ +_8_4 _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r ___p_a_t_c_h_A_r_r_a_y_s; │ │ │ │ │ +85 │ │ │ │ │ +_8_6 ID3D11Buffer *___i_n_d_e_x_B_u_f_f_e_r; │ │ │ │ │ +_8_7 ID3D11Buffer *___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r; │ │ │ │ │ +_8_8 ID3D11ShaderResourceView *___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r_S_R_V; │ │ │ │ │ +89}; │ │ │ │ │ +90 │ │ │ │ │ +91 │ │ │ │ │ +92} // end namespace Osd │ │ │ │ │ 93 │ │ │ │ │ -94 │ │ │ │ │ -95} // end namespace Osd │ │ │ │ │ +94} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ +95using namespace OPENSUBDIV_VERSION; │ │ │ │ │ 96 │ │ │ │ │ -97} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ -98using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -99 │ │ │ │ │ -100} // end namespace OpenSubdiv │ │ │ │ │ -101 │ │ │ │ │ -102#endif // OPENSUBDIV3_OSD_D3D11_LEGACY_GREGORY_PATCH_TABLE_H │ │ │ │ │ +97} // end namespace OpenSubdiv │ │ │ │ │ +98 │ │ │ │ │ +99#endif // OPENSUBDIV3_OSD_GL_PATCH_TABLE_H │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_:_:_T_y_p_e │ │ │ │ │ -Type │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_D_e_s_c_r_i_p_t_o_r_._h_:_4_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_:_:_G_R_E_G_O_R_Y___B_O_U_N_D_A_R_Y │ │ │ │ │ -@ GREGORY_BOUNDARY │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_D_e_s_c_r_i_p_t_o_r_._h_:_6_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r │ │ │ │ │ +std::vector< PatchArray > PatchArrayVector │ │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e_s_._h_:_1_3_2 │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ Container for arrays of parametric patches. │ │ │ │ │ DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_5_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -DDeeffiinniittiioonn _d_3_d_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h_:_4_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ -_U_p_d_a_t_e_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ -void UpdateVertexBuffer(ID3D11Buffer *vbo, int numVertices, int │ │ │ │ │ -numVertexElements, ID3D11DeviceContext *pd3d11DeviceContext) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ -_G_e_t_Q_u_a_d_O_f_f_s_e_t_s_B_a_s_e │ │ │ │ │ -int GetQuadOffsetsBase(Far::PatchDescriptor::Type type) │ │ │ │ │ -DDeeffiinniittiioonn _d_3_d_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h_:_7_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ -_~_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -~D3D11LegacyGregoryPatchTable() │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ -static D3D11LegacyGregoryPatchTable * Create(Far::PatchTable const │ │ │ │ │ -*farPatchTable, ID3D11DeviceContext *deviceContext) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_V_e_r_t_e_x_S_R_V │ │ │ │ │ -ID3D11ShaderResourceView * GetVertexSRV() const │ │ │ │ │ -DDeeffiinniittiioonn _d_3_d_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h_:_6_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ -static D3D11LegacyGregoryPatchTable * Create(Far::PatchTable const │ │ │ │ │ -*farPatchTable, DEVICE_CONTEXT context) │ │ │ │ │ -DDeeffiinniittiioonn _d_3_d_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h_:_4_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ -_G_e_t_V_e_r_t_e_x_V_a_l_e_n_c_e_S_R_V │ │ │ │ │ -ID3D11ShaderResourceView * GetVertexValenceSRV() const │ │ │ │ │ -DDeeffiinniittiioonn _d_3_d_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h_:_6_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ -_G_e_t_Q_u_a_d_O_f_f_s_e_t_s_S_R_V │ │ │ │ │ -ID3D11ShaderResourceView * GetQuadOffsetsSRV() const │ │ │ │ │ -DDeeffiinniittiioonn _d_3_d_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h_:_7_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_:_: │ │ │ │ │ -_D_3_D_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -D3D11LegacyGregoryPatchTable() │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +DDeeffiinniittiioonn _d_3_d_1_1_P_a_t_c_h_T_a_b_l_e_._h_:_4_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ +static D3D11PatchTable * Create(Far::PatchTable const *farPatchTable, │ │ │ │ │ +DEVICE_CONTEXT context) │ │ │ │ │ +DDeeffiinniittiioonn _d_3_d_1_1_P_a_t_c_h_T_a_b_l_e_._h_:_5_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ +PatchArrayVector const & GetPatchArrays() const │ │ │ │ │ +DDeeffiinniittiioonn _d_3_d_1_1_P_a_t_c_h_T_a_b_l_e_._h_:_6_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:_a_l_l_o_c_a_t_e │ │ │ │ │ +bool allocate(Far::PatchTable const *farPatchTable, ID3D11DeviceContext │ │ │ │ │ +*deviceContext) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:_V_e_r_t_e_x_B_u_f_f_e_r_B_i_n_d_i_n_g │ │ │ │ │ +ID3D11Buffer * VertexBufferBinding │ │ │ │ │ +DDeeffiinniittiioonn _d_3_d_1_1_P_a_t_c_h_T_a_b_l_e_._h_:_5_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:_~_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +~D3D11PatchTable() │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ +ID3D11Buffer * GetPatchIndexBuffer() const │ │ │ │ │ +Returns the index buffer containing the patch control vertices. │ │ │ │ │ +DDeeffiinniittiioonn _d_3_d_1_1_P_a_t_c_h_T_a_b_l_e_._h_:_7_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:___p_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ +PatchArrayVector _patchArrays │ │ │ │ │ +DDeeffiinniittiioonn _d_3_d_1_1_P_a_t_c_h_T_a_b_l_e_._h_:_8_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:___i_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ +ID3D11Buffer * _indexBuffer │ │ │ │ │ +DDeeffiinniittiioonn _d_3_d_1_1_P_a_t_c_h_T_a_b_l_e_._h_:_8_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ +static D3D11PatchTable * Create(Far::PatchTable const *farPatchTable, │ │ │ │ │ +ID3D11DeviceContext *deviceContext) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r_S_R_V │ │ │ │ │ +ID3D11ShaderResourceView * _patchParamBufferSRV │ │ │ │ │ +DDeeffiinniittiioonn _d_3_d_1_1_P_a_t_c_h_T_a_b_l_e_._h_:_8_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r │ │ │ │ │ +ID3D11Buffer * _patchParamBuffer │ │ │ │ │ +DDeeffiinniittiioonn _d_3_d_1_1_P_a_t_c_h_T_a_b_l_e_._h_:_8_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_P_a_r_a_m_S_R_V │ │ │ │ │ +ID3D11ShaderResourceView * GetPatchParamSRV() const │ │ │ │ │ +Returns the SRV containing the patch parameter. │ │ │ │ │ +DDeeffiinniittiioonn _d_3_d_1_1_P_a_t_c_h_T_a_b_l_e_._h_:_7_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e_:_:_D_3_D_1_1_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +D3D11PatchTable() │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _d_3_d_1_1_L_e_g_a_c_y_G_r_e_g_o_r_y_P_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ + * _d_3_d_1_1_P_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00842.html │ │ │ │ @@ -94,15 +94,15 @@ │ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │
d3d11ComputeEvaluator.h File Reference
│ │ │ │ │ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include "../osd/bufferDescriptor.h"
│ │ │ │ +#include "../osd/bufferDescriptor.h"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00842_source.html │ │ │ │ @@ -303,16 +303,16 @@ │ │ │ │
232using namespace OPENSUBDIV_VERSION;
│ │ │ │
233
│ │ │ │
234} // end namespace OpenSubdiv
│ │ │ │
235
│ │ │ │
236
│ │ │ │
237#endif // OPENSUBDIV3_OSD_D3D11_COMPUTE_EVALUATOR_H
│ │ │ │ │ │ │ │ -
Stencil table class wrapping the template for compatibility.
│ │ │ │ -
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ +
Stencil table class wrapping the template for compatibility.
│ │ │ │ +
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ │ │ │ │
static D3D11StencilTable * Create(Far::StencilTable const *stencilTable, DEVICE_CONTEXT context)
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
D3D11StencilTable(Far::StencilTable const *stencilTable, ID3D11DeviceContext *deviceContext)
│ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00848.html │ │ │ │ @@ -96,15 +96,15 @@ │ │ │ │ Namespaces │ │ │ │
glComputeEvaluator.h File Reference
│ │ │ │ │ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ #include "../osd/opengl.h"
│ │ │ │ #include "../osd/types.h"
│ │ │ │ -#include "../osd/bufferDescriptor.h"
│ │ │ │ +#include "../osd/bufferDescriptor.h"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │

│ │ │ │ Classes

class  D3D11StencilTable
 D3D11 stencil table. More...
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00848_source.html │ │ │ │ @@ -1178,17 +1178,17 @@ │ │ │ │
2111
│ │ │ │
2112} // end namespace OpenSubdiv
│ │ │ │
2113
│ │ │ │
2114
│ │ │ │
2115#endif // OPENSUBDIV3_OSD_GL_COMPUTE_EVALUATOR_H
│ │ │ │ │ │ │ │
std::vector< PatchArray > PatchArrayVector
Definition types.h:132
│ │ │ │ -
Stencil table class wrapping the template for compatibility.
│ │ │ │ -
Limit stencil table class wrapping the template for compatibility.
│ │ │ │ -
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ +
Stencil table class wrapping the template for compatibility.
│ │ │ │ +
Limit stencil table class wrapping the template for compatibility.
│ │ │ │ +
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
GLStencilTableSSBO(Far::LimitStencilTable const *limitStencilTable)
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00851.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/glXFBEvaluator.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/osd/glslPatchShaderSource.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -90,47 +90,42 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
glXFBEvaluator.h File Reference
│ │ │ │ +
glslPatchShaderSource.h File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include "../osd/opengl.h"
│ │ │ │ -#include "../osd/types.h"
│ │ │ │ -#include "../osd/bufferDescriptor.h"
│ │ │ │ +#include "../far/patchDescriptor.h"
│ │ │ │ +#include <string>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │

│ │ │ │ Classes

class  GLStencilTableSSBO
 GL stencil table (Shader Storage buffer) More...
│ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  GLStencilTableTBO
 GL TextureBuffer stencil table. More...
 
class  GLXFBEvaluator
class  GLSLPatchShaderSource
 Provides shader source which can be used by client code. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Far
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,30 +1,25 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -glXFBEvaluator.h File Reference │ │ │ │ │ +glslPatchShaderSource.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ -#include "_._._/_o_s_d_/_o_p_e_n_g_l_._h" │ │ │ │ │ -#include "_._._/_o_s_d_/_t_y_p_e_s_._h" │ │ │ │ │ -#include "_._._/_o_s_d_/_b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h" │ │ │ │ │ +#include "_._._/_f_a_r_/_p_a_t_c_h_D_e_s_c_r_i_p_t_o_r_._h" │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O │ │ │ │ │ -  GL TextureBuffer stencil table. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _G_L_X_F_B_E_v_a_l_u_a_t_o_r │ │ │ │ │ +class   _G_L_S_L_P_a_t_c_h_S_h_a_d_e_r_S_o_u_r_c_e │ │ │ │ │ +  Provides shader source which can be used by client code. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ -namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r │ │ │ │ │ -  │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d │ │ │ │ │   │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h │ │ │ │ │ + * _g_l_s_l_P_a_t_c_h_S_h_a_d_e_r_S_o_u_r_c_e_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00851.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,4 +1,3 @@ │ │ │ │ │ var a00851 = [ │ │ │ │ │ - ["GLStencilTableTBO", "a01249.html", "a01249"], │ │ │ │ │ - ["GLXFBEvaluator", "a01253.html", "a01253"] │ │ │ │ │ + ["GLSLPatchShaderSource", "a01241.html", null] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00851_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/glXFBEvaluator.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/osd/glslPatchShaderSource.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,15 +92,15 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
glXFBEvaluator.h
│ │ │ │ +
glslPatchShaderSource.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │
2// Copyright 2015 Pixar
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │ @@ -119,1205 +119,71 @@ │ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │
24
│ │ │ │ -
25#ifndef OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H
│ │ │ │ -
26#define OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H
│ │ │ │ +
25#ifndef OPENSUBDIV3_OSD_GLSL_PATCH_SHADER_SOURCE_H
│ │ │ │ +
26#define OPENSUBDIV3_OSD_GLSL_PATCH_SHADER_SOURCE_H
│ │ │ │
27
│ │ │ │
28#include "../version.h"
│ │ │ │
29
│ │ │ │ -
30#include "../osd/opengl.h"
│ │ │ │ -
31#include "../osd/types.h"
│ │ │ │ -
32#include "../osd/bufferDescriptor.h"
│ │ │ │ +
30#include "../far/patchDescriptor.h"
│ │ │ │ +
31
│ │ │ │ +
32#include <string>
│ │ │ │
33
│ │ │ │
34namespace OpenSubdiv {
│ │ │ │
35namespace OPENSUBDIV_VERSION {
│ │ │ │
36
│ │ │ │ -
37namespace Far {
│ │ │ │ -
38 class PatchTable;
│ │ │ │ -
39 class StencilTable;
│ │ │ │ -
40 class LimitStencilTable;
│ │ │ │ -
41}
│ │ │ │ -
42
│ │ │ │ -
43namespace Osd {
│ │ │ │ -
44
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
53public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
55 Far::StencilTable const *stencilTable, void *deviceContext = NULL) {
│ │ │ │ -
56 (void)deviceContext; // unused
│ │ │ │ -
57 return new GLStencilTableTBO(stencilTable);
│ │ │ │ -
58 }
│ │ │ │ -
│ │ │ │ +
37namespace Osd {
│ │ │ │ +
38
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
41public:
│ │ │ │ +
45 static std::string GetPatchBasisShaderSource();
│ │ │ │ +
46
│ │ │ │ +
50 static std::string GetPatchDrawingShaderSource();
│ │ │ │ +
51
│ │ │ │
59
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
61 Far::LimitStencilTable const *limitStencilTable,
│ │ │ │ -
62 void *deviceContext = NULL) {
│ │ │ │ -
63 (void)deviceContext; // unused
│ │ │ │ -
64 return new GLStencilTableTBO(limitStencilTable);
│ │ │ │ -
65 }
│ │ │ │ -
│ │ │ │ -
66
│ │ │ │ -
67 explicit GLStencilTableTBO(Far::StencilTable const *stencilTable);
│ │ │ │ -
68 explicit GLStencilTableTBO(Far::LimitStencilTable const *limitStencilTable);
│ │ │ │ - │ │ │ │ +
60 static std::string GetCommonShaderSource();
│ │ │ │ +
61
│ │ │ │ +
62 static std::string GetVertexShaderSource(
│ │ │ │ + │ │ │ │ +
64
│ │ │ │ +
65 static std::string GetTessControlShaderSource(
│ │ │ │ + │ │ │ │ +
67
│ │ │ │ +
68 static std::string GetTessEvalShaderSource(
│ │ │ │ + │ │ │ │
70
│ │ │ │ -
71 // interfaces needed for GLSLTransformFeedbackKernel
│ │ │ │ -
72 GLuint GetSizesTexture() const { return _sizes; }
│ │ │ │ -
73 GLuint GetOffsetsTexture() const { return _offsets; }
│ │ │ │ -
74 GLuint GetIndicesTexture() const { return _indices; }
│ │ │ │ -
75 GLuint GetWeightsTexture() const { return _weights; }
│ │ │ │ -
76 GLuint GetDuWeightsTexture() const { return _duWeights; }
│ │ │ │ -
77 GLuint GetDvWeightsTexture() const { return _dvWeights; }
│ │ │ │ -
78 GLuint GetDuuWeightsTexture() const { return _duuWeights; }
│ │ │ │ -
79 GLuint GetDuvWeightsTexture() const { return _duvWeights; }
│ │ │ │ -
80 GLuint GetDvvWeightsTexture() const { return _dvvWeights; }
│ │ │ │ -
81 int GetNumStencils() const { return _numStencils; }
│ │ │ │ -
82
│ │ │ │ -
83private:
│ │ │ │ -
84 GLuint _sizes;
│ │ │ │ -
85 GLuint _offsets;
│ │ │ │ -
86 GLuint _indices;
│ │ │ │ -
87 GLuint _weights;
│ │ │ │ -
88 GLuint _duWeights;
│ │ │ │ -
89 GLuint _dvWeights;
│ │ │ │ -
90 GLuint _duuWeights;
│ │ │ │ -
91 GLuint _duvWeights;
│ │ │ │ -
92 GLuint _dvvWeights;
│ │ │ │ -
93 int _numStencils;
│ │ │ │ -
94};
│ │ │ │ -
│ │ │ │ -
95
│ │ │ │ -
96// ---------------------------------------------------------------------------
│ │ │ │ -
97
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
99public:
│ │ │ │ -
100 typedef bool Instantiatable;
│ │ │ │ -
101
│ │ │ │ -
103 template <typename DEVICE_CONTEXT>
│ │ │ │ -
│ │ │ │ -
104 static GLXFBEvaluator *Create(BufferDescriptor const &srcDesc,
│ │ │ │ -
105 BufferDescriptor const &dstDesc,
│ │ │ │ -
106 BufferDescriptor const &duDesc,
│ │ │ │ -
107 BufferDescriptor const &dvDesc,
│ │ │ │ -
108 DEVICE_CONTEXT deviceContext) {
│ │ │ │ -
109 bool interleavedDerivativeBuffers = deviceContext
│ │ │ │ -
110 ? deviceContext->AreInterleavedDerivativeBuffers()
│ │ │ │ -
111 : false;
│ │ │ │ -
112 return Create(srcDesc, dstDesc, duDesc, dvDesc,
│ │ │ │ -
113 interleavedDerivativeBuffers);
│ │ │ │ -
114 }
│ │ │ │ -
│ │ │ │ -
115
│ │ │ │ -
│ │ │ │ -
117 static GLXFBEvaluator *Create(BufferDescriptor const &srcDesc,
│ │ │ │ -
118 BufferDescriptor const &dstDesc,
│ │ │ │ -
119 BufferDescriptor const &duDesc,
│ │ │ │ -
120 BufferDescriptor const &dvDesc,
│ │ │ │ -
121 void * deviceContext) {
│ │ │ │ -
122 (void)deviceContext; // not used
│ │ │ │ -
123 return Create(srcDesc, dstDesc, duDesc, dvDesc);
│ │ │ │ -
124 }
│ │ │ │ -
│ │ │ │ -
125
│ │ │ │ -
│ │ │ │ -
126 static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc,
│ │ │ │ -
127 BufferDescriptor const &dstDesc,
│ │ │ │ -
128 BufferDescriptor const &duDesc,
│ │ │ │ -
129 BufferDescriptor const &dvDesc,
│ │ │ │ -
130 bool interleavedDerivativeBuffers = false) {
│ │ │ │ -
131 GLXFBEvaluator *instance = new GLXFBEvaluator(interleavedDerivativeBuffers);
│ │ │ │ -
132 if (instance->Compile(srcDesc, dstDesc, duDesc, dvDesc))
│ │ │ │ -
133 return instance;
│ │ │ │ -
134 delete instance;
│ │ │ │ -
135 return NULL;
│ │ │ │ -
136 }
│ │ │ │ -
│ │ │ │ -
137
│ │ │ │ -
139 template <typename DEVICE_CONTEXT>
│ │ │ │ -
│ │ │ │ -
140 static GLXFBEvaluator *Create(BufferDescriptor const &srcDesc,
│ │ │ │ -
141 BufferDescriptor const &dstDesc,
│ │ │ │ -
142 BufferDescriptor const &duDesc,
│ │ │ │ -
143 BufferDescriptor const &dvDesc,
│ │ │ │ -
144 BufferDescriptor const &duuDesc,
│ │ │ │ -
145 BufferDescriptor const &duvDesc,
│ │ │ │ -
146 BufferDescriptor const &dvvDesc,
│ │ │ │ -
147 DEVICE_CONTEXT deviceContext) {
│ │ │ │ -
148 bool interleavedDerivativeBuffers = deviceContext
│ │ │ │ -
149 ? deviceContext->AreInterleavedDerivativeBuffers()
│ │ │ │ -
150 : false;
│ │ │ │ -
151 return Create(srcDesc, dstDesc, duDesc, dvDesc,
│ │ │ │ -
152 duuDesc, duvDesc, dvvDesc,
│ │ │ │ -
153 interleavedDerivativeBuffers);
│ │ │ │ -
154 }
│ │ │ │ -
│ │ │ │ -
155
│ │ │ │ -
│ │ │ │ -
157 static GLXFBEvaluator *Create(BufferDescriptor const &srcDesc,
│ │ │ │ -
158 BufferDescriptor const &dstDesc,
│ │ │ │ -
159 BufferDescriptor const &duDesc,
│ │ │ │ -
160 BufferDescriptor const &dvDesc,
│ │ │ │ -
161 BufferDescriptor const &duuDesc,
│ │ │ │ -
162 BufferDescriptor const &duvDesc,
│ │ │ │ -
163 BufferDescriptor const &dvvDesc,
│ │ │ │ -
164 void * deviceContext) {
│ │ │ │ -
165 (void)deviceContext; // not used
│ │ │ │ -
166 return Create(srcDesc, dstDesc, duDesc, dvDesc,
│ │ │ │ -
167 duuDesc, duvDesc, dvvDesc);
│ │ │ │ -
168 }
│ │ │ │ -
│ │ │ │ -
169
│ │ │ │ -
│ │ │ │ -
170 static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc,
│ │ │ │ -
171 BufferDescriptor const &dstDesc,
│ │ │ │ -
172 BufferDescriptor const &duDesc,
│ │ │ │ -
173 BufferDescriptor const &dvDesc,
│ │ │ │ -
174 BufferDescriptor const &duuDesc,
│ │ │ │ -
175 BufferDescriptor const &duvDesc,
│ │ │ │ -
176 BufferDescriptor const &dvvDesc,
│ │ │ │ -
177 bool interleavedDerivativeBuffers = false) {
│ │ │ │ -
178 GLXFBEvaluator *instance = new GLXFBEvaluator(interleavedDerivativeBuffers);
│ │ │ │ -
179 if (instance->Compile(srcDesc, dstDesc, duDesc, dvDesc,
│ │ │ │ -
180 duuDesc, duvDesc, dvvDesc))
│ │ │ │ -
181 return instance;
│ │ │ │ -
182 delete instance;
│ │ │ │ -
183 return NULL;
│ │ │ │ -
184 }
│ │ │ │ -
│ │ │ │ -
185
│ │ │ │ -
199 GLXFBEvaluator(bool interleavedDerivativeBuffers = false);
│ │ │ │ -
200
│ │ │ │ - │ │ │ │ -
203
│ │ │ │ -
209
│ │ │ │ -
237 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ -
│ │ │ │ -
238 static bool EvalStencils(
│ │ │ │ -
239 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
240 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
241 STENCIL_TABLE const *stencilTable,
│ │ │ │ -
242 GLXFBEvaluator const *instance,
│ │ │ │ -
243 void * deviceContext = NULL) {
│ │ │ │ -
244
│ │ │ │ -
245 if (instance) {
│ │ │ │ -
246 return instance->EvalStencils(srcBuffer, srcDesc,
│ │ │ │ -
247 dstBuffer, dstDesc,
│ │ │ │ -
248 stencilTable);
│ │ │ │ -
249 } else {
│ │ │ │ -
250 // Create an instance on demand (slow)
│ │ │ │ -
251 (void)deviceContext; // unused
│ │ │ │ -
252 instance = Create(srcDesc, dstDesc,
│ │ │ │ - │ │ │ │ - │ │ │ │ -
255 if (instance) {
│ │ │ │ -
256 bool r = instance->EvalStencils(srcBuffer, srcDesc,
│ │ │ │ -
257 dstBuffer, dstDesc,
│ │ │ │ -
258 stencilTable);
│ │ │ │ -
259 delete instance;
│ │ │ │ -
260 return r;
│ │ │ │ -
261 }
│ │ │ │ -
262 return false;
│ │ │ │ -
263 }
│ │ │ │ -
264 }
│ │ │ │ -
│ │ │ │ -
265
│ │ │ │ -
305 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ -
│ │ │ │ -
306 static bool EvalStencils(
│ │ │ │ -
307 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
308 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
309 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
310 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
311 STENCIL_TABLE const *stencilTable,
│ │ │ │ -
312 GLXFBEvaluator const *instance,
│ │ │ │ -
313 void * deviceContext = NULL) {
│ │ │ │ -
314
│ │ │ │ -
315 if (instance) {
│ │ │ │ -
316 return instance->EvalStencils(srcBuffer, srcDesc,
│ │ │ │ -
317 dstBuffer, dstDesc,
│ │ │ │ -
318 duBuffer, duDesc,
│ │ │ │ -
319 dvBuffer, dvDesc,
│ │ │ │ -
320 stencilTable);
│ │ │ │ -
321 } else {
│ │ │ │ -
322 // Create an instance on demand (slow)
│ │ │ │ -
323 (void)deviceContext; // unused
│ │ │ │ -
324 instance = Create(srcDesc, dstDesc, duDesc, dvDesc);
│ │ │ │ -
325 if (instance) {
│ │ │ │ -
326 bool r = instance->EvalStencils(srcBuffer, srcDesc,
│ │ │ │ -
327 dstBuffer, dstDesc,
│ │ │ │ -
328 duBuffer, duDesc,
│ │ │ │ -
329 dvBuffer, dvDesc,
│ │ │ │ -
330 stencilTable);
│ │ │ │ -
331 delete instance;
│ │ │ │ -
332 return r;
│ │ │ │ -
333 }
│ │ │ │ -
334 return false;
│ │ │ │ -
335 }
│ │ │ │ -
336 }
│ │ │ │ -
│ │ │ │ -
337
│ │ │ │ -
395 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ -
│ │ │ │ -
396 static bool EvalStencils(
│ │ │ │ -
397 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
398 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
399 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
400 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
401 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
402 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
403 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
404 STENCIL_TABLE const *stencilTable,
│ │ │ │ -
405 GLXFBEvaluator const *instance,
│ │ │ │ -
406 void * deviceContext = NULL) {
│ │ │ │ -
407
│ │ │ │ -
408 if (instance) {
│ │ │ │ -
409 return instance->EvalStencils(srcBuffer, srcDesc,
│ │ │ │ -
410 dstBuffer, dstDesc,
│ │ │ │ -
411 duBuffer, duDesc,
│ │ │ │ -
412 dvBuffer, dvDesc,
│ │ │ │ -
413 duuBuffer, duuDesc,
│ │ │ │ -
414 duvBuffer, duvDesc,
│ │ │ │ -
415 dvvBuffer, dvvDesc,
│ │ │ │ -
416 stencilTable);
│ │ │ │ -
417 } else {
│ │ │ │ -
418 // Create an instance on demand (slow)
│ │ │ │ -
419 (void)deviceContext; // unused
│ │ │ │ -
420 instance = Create(srcDesc, dstDesc,
│ │ │ │ -
421 duDesc, dvDesc,
│ │ │ │ -
422 duuDesc, duvDesc, dvvDesc);
│ │ │ │ -
423 if (instance) {
│ │ │ │ -
424 bool r = instance->EvalStencils(srcBuffer, srcDesc,
│ │ │ │ -
425 dstBuffer, dstDesc,
│ │ │ │ -
426 duBuffer, duDesc,
│ │ │ │ -
427 dvBuffer, dvDesc,
│ │ │ │ -
428 duuBuffer, duuDesc,
│ │ │ │ -
429 duvBuffer, duvDesc,
│ │ │ │ -
430 dvvBuffer, dvvDesc,
│ │ │ │ -
431 stencilTable);
│ │ │ │ -
432 delete instance;
│ │ │ │ -
433 return r;
│ │ │ │ -
434 }
│ │ │ │ -
435 return false;
│ │ │ │ -
436 }
│ │ │ │ -
437 }
│ │ │ │ -
│ │ │ │ -
438
│ │ │ │ -
456 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
458 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
459 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
460 STENCIL_TABLE const *stencilTable) const {
│ │ │ │ -
461
│ │ │ │ -
462 return EvalStencils(srcBuffer->BindVBO(), srcDesc,
│ │ │ │ -
463 dstBuffer->BindVBO(), dstDesc,
│ │ │ │ -
464 0, BufferDescriptor(),
│ │ │ │ -
465 0, BufferDescriptor(),
│ │ │ │ -
466 stencilTable->GetSizesTexture(),
│ │ │ │ -
467 stencilTable->GetOffsetsTexture(),
│ │ │ │ -
468 stencilTable->GetIndicesTexture(),
│ │ │ │ -
469 stencilTable->GetWeightsTexture(),
│ │ │ │ -
470 0,
│ │ │ │ -
471 0,
│ │ │ │ -
472 /* start = */ 0,
│ │ │ │ -
473 /* end = */ stencilTable->GetNumStencils());
│ │ │ │ -
474 }
│ │ │ │ -
│ │ │ │ -
475
│ │ │ │ -
505 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
507 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
508 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
509 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
510 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
511 STENCIL_TABLE const *stencilTable) const {
│ │ │ │ -
512
│ │ │ │ -
513 return EvalStencils(srcBuffer->BindVBO(), srcDesc,
│ │ │ │ -
514 dstBuffer->BindVBO(), dstDesc,
│ │ │ │ -
515 duBuffer->BindVBO(), duDesc,
│ │ │ │ -
516 dvBuffer->BindVBO(), dvDesc,
│ │ │ │ -
517 stencilTable->GetSizesTexture(),
│ │ │ │ -
518 stencilTable->GetOffsetsTexture(),
│ │ │ │ -
519 stencilTable->GetIndicesTexture(),
│ │ │ │ -
520 stencilTable->GetWeightsTexture(),
│ │ │ │ -
521 stencilTable->GetDuWeightsTexture(),
│ │ │ │ -
522 stencilTable->GetDvWeightsTexture(),
│ │ │ │ -
523 /* start = */ 0,
│ │ │ │ -
524 /* end = */ stencilTable->GetNumStencils());
│ │ │ │ -
525 }
│ │ │ │ -
│ │ │ │ -
526
│ │ │ │ -
574 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
576 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
577 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
578 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
579 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
580 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
581 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
582 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
583 STENCIL_TABLE const *stencilTable) const {
│ │ │ │ -
584
│ │ │ │ -
585 return EvalStencils(srcBuffer->BindVBO(), srcDesc,
│ │ │ │ -
586 dstBuffer->BindVBO(), dstDesc,
│ │ │ │ -
587 duBuffer->BindVBO(), duDesc,
│ │ │ │ -
588 dvBuffer->BindVBO(), dvDesc,
│ │ │ │ -
589 duuBuffer->BindVBO(), duuDesc,
│ │ │ │ -
590 duvBuffer->BindVBO(), duvDesc,
│ │ │ │ -
591 dvvBuffer->BindVBO(), dvvDesc,
│ │ │ │ -
592 stencilTable->GetSizesTexture(),
│ │ │ │ -
593 stencilTable->GetOffsetsTexture(),
│ │ │ │ -
594 stencilTable->GetIndicesTexture(),
│ │ │ │ -
595 stencilTable->GetWeightsTexture(),
│ │ │ │ -
596 stencilTable->GetDuWeightsTexture(),
│ │ │ │ -
597 stencilTable->GetDvWeightsTexture(),
│ │ │ │ -
598 stencilTable->GetDuuWeightsTexture(),
│ │ │ │ -
599 stencilTable->GetDuvWeightsTexture(),
│ │ │ │ -
600 stencilTable->GetDvvWeightsTexture(),
│ │ │ │ -
601 /* start = */ 0,
│ │ │ │ -
602 /* end = */ stencilTable->GetNumStencils());
│ │ │ │ -
603 }
│ │ │ │ -
│ │ │ │ -
604
│ │ │ │ -
640 bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
641 GLuint dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
642 GLuint duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
643 GLuint dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
644 GLuint sizesBuffer,
│ │ │ │ -
645 GLuint offsetsBuffer,
│ │ │ │ -
646 GLuint indicesBuffer,
│ │ │ │ -
647 GLuint weightsBuffer,
│ │ │ │ -
648 GLuint duWeightsBuffer,
│ │ │ │ -
649 GLuint dvWeightsBuffer,
│ │ │ │ -
650 int start,
│ │ │ │ -
651 int end) const;
│ │ │ │ -
652
│ │ │ │ -
706 bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
707 GLuint dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
708 GLuint duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
709 GLuint dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
710 GLuint duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
711 GLuint duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
712 GLuint dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
713 GLuint sizesBuffer,
│ │ │ │ -
714 GLuint offsetsBuffer,
│ │ │ │ -
715 GLuint indicesBuffer,
│ │ │ │ -
716 GLuint weightsBuffer,
│ │ │ │ -
717 GLuint duWeightsBuffer,
│ │ │ │ -
718 GLuint dvWeightsBuffer,
│ │ │ │ -
719 GLuint duuWeightsBuffer,
│ │ │ │ -
720 GLuint duvWeightsBuffer,
│ │ │ │ -
721 GLuint dvvWeightsBuffer,
│ │ │ │ -
722 int start,
│ │ │ │ -
723 int end) const;
│ │ │ │ -
724
│ │ │ │ -
730
│ │ │ │ -
763 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
764 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ -
765 static bool EvalPatches(
│ │ │ │ -
766 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
767 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
768 int numPatchCoords,
│ │ │ │ -
769 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
770 PATCH_TABLE *patchTable,
│ │ │ │ -
771 GLXFBEvaluator const *instance,
│ │ │ │ -
772 void * deviceContext = NULL) {
│ │ │ │ -
773
│ │ │ │ -
774 if (instance) {
│ │ │ │ -
775 return instance->EvalPatches(srcBuffer, srcDesc,
│ │ │ │ -
776 dstBuffer, dstDesc,
│ │ │ │ -
777 numPatchCoords, patchCoords,
│ │ │ │ -
778 patchTable);
│ │ │ │ -
779 } else {
│ │ │ │ -
780 // Create an instance on demand (slow)
│ │ │ │ -
781 (void)deviceContext; // unused
│ │ │ │ -
782 instance = Create(srcDesc, dstDesc,
│ │ │ │ - │ │ │ │ - │ │ │ │ -
785 if (instance) {
│ │ │ │ -
786 bool r = instance->EvalPatches(srcBuffer, srcDesc,
│ │ │ │ -
787 dstBuffer, dstDesc,
│ │ │ │ -
788 numPatchCoords, patchCoords,
│ │ │ │ -
789 patchTable);
│ │ │ │ -
790 delete instance;
│ │ │ │ -
791 return r;
│ │ │ │ -
792 }
│ │ │ │ -
793 return false;
│ │ │ │ -
794 }
│ │ │ │ -
795 }
│ │ │ │ -
│ │ │ │ -
796
│ │ │ │ -
841 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
842 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ -
843 static bool EvalPatches(
│ │ │ │ -
844 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
845 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
846 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
847 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
848 int numPatchCoords,
│ │ │ │ -
849 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
850 PATCH_TABLE *patchTable,
│ │ │ │ -
851 GLXFBEvaluator const *instance,
│ │ │ │ -
852 void * deviceContext = NULL) {
│ │ │ │ -
853
│ │ │ │ -
854 if (instance) {
│ │ │ │ -
855 return instance->EvalPatches(srcBuffer, srcDesc,
│ │ │ │ -
856 dstBuffer, dstDesc,
│ │ │ │ -
857 duBuffer, duDesc,
│ │ │ │ -
858 dvBuffer, dvDesc,
│ │ │ │ -
859 numPatchCoords, patchCoords,
│ │ │ │ -
860 patchTable);
│ │ │ │ -
861 } else {
│ │ │ │ -
862 // Create an instance on demand (slow)
│ │ │ │ -
863 (void)deviceContext; // unused
│ │ │ │ -
864 instance = Create(srcDesc, dstDesc, duDesc, dvDesc);
│ │ │ │ -
865 if (instance) {
│ │ │ │ -
866 bool r = instance->EvalPatches(srcBuffer, srcDesc,
│ │ │ │ -
867 dstBuffer, dstDesc,
│ │ │ │ -
868 duBuffer, duDesc,
│ │ │ │ -
869 dvBuffer, dvDesc,
│ │ │ │ -
870 numPatchCoords, patchCoords,
│ │ │ │ -
871 patchTable);
│ │ │ │ -
872 delete instance;
│ │ │ │ -
873 return r;
│ │ │ │ -
874 }
│ │ │ │ -
875 return false;
│ │ │ │ -
876 }
│ │ │ │ -
877 }
│ │ │ │ -
│ │ │ │ -
878
│ │ │ │ -
941 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
942 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ -
943 static bool EvalPatches(
│ │ │ │ -
944 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
945 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
946 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
947 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
948 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
949 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
950 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
951 int numPatchCoords,
│ │ │ │ -
952 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
953 PATCH_TABLE *patchTable,
│ │ │ │ -
954 GLXFBEvaluator const *instance,
│ │ │ │ -
955 void * deviceContext = NULL) {
│ │ │ │ -
956
│ │ │ │ -
957 if (instance) {
│ │ │ │ -
958 return instance->EvalPatches(srcBuffer, srcDesc,
│ │ │ │ -
959 dstBuffer, dstDesc,
│ │ │ │ -
960 duBuffer, duDesc,
│ │ │ │ -
961 dvBuffer, dvDesc,
│ │ │ │ -
962 duuBuffer, duuDesc,
│ │ │ │ -
963 duvBuffer, duvDesc,
│ │ │ │ -
964 dvvBuffer, dvvDesc,
│ │ │ │ -
965 numPatchCoords, patchCoords,
│ │ │ │ -
966 patchTable);
│ │ │ │ -
967 } else {
│ │ │ │ -
968 // Create an instance on demand (slow)
│ │ │ │ -
969 (void)deviceContext; // unused
│ │ │ │ -
970 instance = Create(srcDesc, dstDesc,
│ │ │ │ -
971 duDesc, dvDesc,
│ │ │ │ -
972 duuDesc, duvDesc, dvvDesc);
│ │ │ │ -
973 if (instance) {
│ │ │ │ -
974 bool r = instance->EvalPatches(srcBuffer, srcDesc,
│ │ │ │ -
975 dstBuffer, dstDesc,
│ │ │ │ -
976 duBuffer, duDesc,
│ │ │ │ -
977 dvBuffer, dvDesc,
│ │ │ │ -
978 duuBuffer, duuDesc,
│ │ │ │ -
979 duvBuffer, duvDesc,
│ │ │ │ -
980 dvvBuffer, dvvDesc,
│ │ │ │ -
981 numPatchCoords, patchCoords,
│ │ │ │ -
982 patchTable);
│ │ │ │ -
983 delete instance;
│ │ │ │ -
984 return r;
│ │ │ │ -
985 }
│ │ │ │ -
986 return false;
│ │ │ │ -
987 }
│ │ │ │ -
988 }
│ │ │ │ -
│ │ │ │ -
989
│ │ │ │ -
1014 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1015 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1017 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1018 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1019 int numPatchCoords,
│ │ │ │ -
1020 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1021 PATCH_TABLE *patchTable) const {
│ │ │ │ -
1022
│ │ │ │ -
1023 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
│ │ │ │ -
1024 dstBuffer->BindVBO(), dstDesc,
│ │ │ │ -
1025 0, BufferDescriptor(),
│ │ │ │ -
1026 0, BufferDescriptor(),
│ │ │ │ -
1027 numPatchCoords,
│ │ │ │ -
1028 patchCoords->BindVBO(),
│ │ │ │ -
1029 patchTable->GetPatchArrays(),
│ │ │ │ -
1030 patchTable->GetPatchIndexTextureBuffer(),
│ │ │ │ -
1031 patchTable->GetPatchParamTextureBuffer());
│ │ │ │ -
1032 }
│ │ │ │ -
│ │ │ │ -
1033
│ │ │ │ -
1068 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1069 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1071 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1072 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1073 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1074 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1075 int numPatchCoords,
│ │ │ │ -
1076 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1077 PATCH_TABLE *patchTable) const {
│ │ │ │ -
1078
│ │ │ │ -
1079 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
│ │ │ │ -
1080 dstBuffer->BindVBO(), dstDesc,
│ │ │ │ -
1081 duBuffer->BindVBO(), duDesc,
│ │ │ │ -
1082 dvBuffer->BindVBO(), dvDesc,
│ │ │ │ -
1083 numPatchCoords,
│ │ │ │ -
1084 patchCoords->BindVBO(),
│ │ │ │ -
1085 patchTable->GetPatchArrays(),
│ │ │ │ -
1086 patchTable->GetPatchIndexTextureBuffer(),
│ │ │ │ -
1087 patchTable->GetPatchParamTextureBuffer());
│ │ │ │ -
1088 }
│ │ │ │ -
│ │ │ │ -
1089
│ │ │ │ -
1142 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1143 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1145 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1146 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1147 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1148 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1149 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
1150 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
1151 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
1152 int numPatchCoords,
│ │ │ │ -
1153 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1154 PATCH_TABLE *patchTable) const {
│ │ │ │ -
1155
│ │ │ │ -
1156 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
│ │ │ │ -
1157 dstBuffer->BindVBO(), dstDesc,
│ │ │ │ -
1158 duBuffer->BindVBO(), duDesc,
│ │ │ │ -
1159 dvBuffer->BindVBO(), dvDesc,
│ │ │ │ -
1160 duuBuffer->BindVBO(), duuDesc,
│ │ │ │ -
1161 duvBuffer->BindVBO(), duvDesc,
│ │ │ │ -
1162 dvvBuffer->BindVBO(), dvvDesc,
│ │ │ │ -
1163 numPatchCoords,
│ │ │ │ -
1164 patchCoords->BindVBO(),
│ │ │ │ -
1165 patchTable->GetPatchArrays(),
│ │ │ │ -
1166 patchTable->GetPatchIndexTextureBuffer(),
│ │ │ │ -
1167 patchTable->GetPatchParamTextureBuffer());
│ │ │ │ -
1168 }
│ │ │ │ -
│ │ │ │ -
1169
│ │ │ │ -
1170 bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1171 GLuint dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1172 GLuint duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1173 GLuint dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1174 int numPatchCoords,
│ │ │ │ -
1175 GLuint patchCoordsBuffer,
│ │ │ │ -
1176 const PatchArrayVector &patchArrays,
│ │ │ │ -
1177 GLuint patchIndexBuffer,
│ │ │ │ -
1178 GLuint patchParamsBuffer) const;
│ │ │ │ -
1179
│ │ │ │ -
1180 bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1181 GLuint dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1182 GLuint duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1183 GLuint dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1184 GLuint duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
1185 GLuint duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
1186 GLuint dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
1187 int numPatchCoords,
│ │ │ │ -
1188 GLuint patchCoordsBuffer,
│ │ │ │ -
1189 const PatchArrayVector &patchArrays,
│ │ │ │ -
1190 GLuint patchIndexBuffer,
│ │ │ │ -
1191 GLuint patchParamsBuffer) const;
│ │ │ │ -
1192
│ │ │ │ -
1225 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1226 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1228 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1229 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1230 int numPatchCoords,
│ │ │ │ -
1231 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1232 PATCH_TABLE *patchTable,
│ │ │ │ -
1233 GLXFBEvaluator const *instance,
│ │ │ │ -
1234 void * deviceContext = NULL) {
│ │ │ │ -
1235
│ │ │ │ -
1236 if (instance) {
│ │ │ │ -
1237 return instance->EvalPatchesVarying(
│ │ │ │ -
1238 srcBuffer, srcDesc,
│ │ │ │ -
1239 dstBuffer, dstDesc,
│ │ │ │ -
1240 numPatchCoords, patchCoords,
│ │ │ │ -
1241 patchTable);
│ │ │ │ -
1242 } else {
│ │ │ │ -
1243 // Create an instance on demand (slow)
│ │ │ │ -
1244 (void)deviceContext; // unused
│ │ │ │ -
1245 instance = Create(srcDesc, dstDesc,
│ │ │ │ - │ │ │ │ - │ │ │ │ -
1248 if (instance) {
│ │ │ │ -
1249 bool r = instance->EvalPatchesVarying(
│ │ │ │ -
1250 srcBuffer, srcDesc,
│ │ │ │ -
1251 dstBuffer, dstDesc,
│ │ │ │ -
1252 numPatchCoords, patchCoords,
│ │ │ │ -
1253 patchTable);
│ │ │ │ -
1254 delete instance;
│ │ │ │ -
1255 return r;
│ │ │ │ -
1256 }
│ │ │ │ -
1257 return false;
│ │ │ │ -
1258 }
│ │ │ │ -
1259 }
│ │ │ │ -
│ │ │ │ -
1260
│ │ │ │ -
1285 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1286 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1288 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1289 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1290 int numPatchCoords,
│ │ │ │ -
1291 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1292 PATCH_TABLE *patchTable) const {
│ │ │ │ -
1293
│ │ │ │ -
1294 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
│ │ │ │ -
1295 dstBuffer->BindVBO(), dstDesc,
│ │ │ │ -
1296 0, BufferDescriptor(),
│ │ │ │ -
1297 0, BufferDescriptor(),
│ │ │ │ -
1298 numPatchCoords,
│ │ │ │ -
1299 patchCoords->BindVBO(),
│ │ │ │ -
1300 patchTable->GetVaryingPatchArrays(),
│ │ │ │ -
1301 patchTable->GetVaryingPatchIndexTextureBuffer(),
│ │ │ │ -
1302 patchTable->GetPatchParamTextureBuffer());
│ │ │ │ -
1303 }
│ │ │ │ -
│ │ │ │ -
1304
│ │ │ │ -
1349 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1350 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1352 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1353 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1354 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1355 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1356 int numPatchCoords,
│ │ │ │ -
1357 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1358 PATCH_TABLE *patchTable,
│ │ │ │ -
1359 GLXFBEvaluator const *instance,
│ │ │ │ -
1360 void * deviceContext = NULL) {
│ │ │ │ -
1361
│ │ │ │ -
1362 if (instance) {
│ │ │ │ -
1363 return instance->EvalPatchesVarying(
│ │ │ │ -
1364 srcBuffer, srcDesc,
│ │ │ │ -
1365 dstBuffer, dstDesc,
│ │ │ │ -
1366 duBuffer, duDesc,
│ │ │ │ -
1367 dvBuffer, dvDesc,
│ │ │ │ -
1368 numPatchCoords, patchCoords,
│ │ │ │ -
1369 patchTable);
│ │ │ │ -
1370 } else {
│ │ │ │ -
1371 // Create an instance on demand (slow)
│ │ │ │ -
1372 (void)deviceContext; // unused
│ │ │ │ -
1373 instance = Create(srcDesc, dstDesc,
│ │ │ │ -
1374 duDesc, dvDesc);
│ │ │ │ -
1375 if (instance) {
│ │ │ │ -
1376 bool r = instance->EvalPatchesVarying(
│ │ │ │ -
1377 srcBuffer, srcDesc,
│ │ │ │ -
1378 dstBuffer, dstDesc,
│ │ │ │ -
1379 duBuffer, duDesc,
│ │ │ │ -
1380 dvBuffer, dvDesc,
│ │ │ │ -
1381 numPatchCoords, patchCoords,
│ │ │ │ -
1382 patchTable);
│ │ │ │ -
1383 delete instance;
│ │ │ │ -
1384 return r;
│ │ │ │ -
1385 }
│ │ │ │ -
1386 return false;
│ │ │ │ -
1387 }
│ │ │ │ -
1388 }
│ │ │ │ -
│ │ │ │ -
1389
│ │ │ │ -
1426 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1427 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1429 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1430 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1431 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1432 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1433 int numPatchCoords,
│ │ │ │ -
1434 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1435 PATCH_TABLE *patchTable) const {
│ │ │ │ -
1436
│ │ │ │ -
1437 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
│ │ │ │ -
1438 dstBuffer->BindVBO(), dstDesc,
│ │ │ │ -
1439 duBuffer->BindVBO(), duDesc,
│ │ │ │ -
1440 dvBuffer->BindVBO(), dvDesc,
│ │ │ │ -
1441 numPatchCoords,
│ │ │ │ -
1442 patchCoords->BindVBO(),
│ │ │ │ -
1443 patchTable->GetVaryingPatchArrays(),
│ │ │ │ -
1444 patchTable->GetVaryingPatchIndexTextureBuffer(),
│ │ │ │ -
1445 patchTable->GetPatchParamTextureBuffer());
│ │ │ │ -
1446 }
│ │ │ │ -
│ │ │ │ -
1447
│ │ │ │ -
1510 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1511 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1513 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1514 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1515 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1516 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1517 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
1518 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
1519 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
1520 int numPatchCoords,
│ │ │ │ -
1521 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1522 PATCH_TABLE *patchTable,
│ │ │ │ -
1523 GLXFBEvaluator const *instance,
│ │ │ │ -
1524 void * deviceContext = NULL) {
│ │ │ │ -
1525
│ │ │ │ -
1526 if (instance) {
│ │ │ │ -
1527 return instance->EvalPatchesVarying(
│ │ │ │ -
1528 srcBuffer, srcDesc,
│ │ │ │ -
1529 dstBuffer, dstDesc,
│ │ │ │ -
1530 duBuffer, duDesc,
│ │ │ │ -
1531 dvBuffer, dvDesc,
│ │ │ │ -
1532 duuBuffer, duuDesc,
│ │ │ │ -
1533 duvBuffer, duvDesc,
│ │ │ │ -
1534 dvvBuffer, dvvDesc,
│ │ │ │ -
1535 numPatchCoords, patchCoords,
│ │ │ │ -
1536 patchTable);
│ │ │ │ -
1537 } else {
│ │ │ │ -
1538 // Create an instance on demand (slow)
│ │ │ │ -
1539 (void)deviceContext; // unused
│ │ │ │ -
1540 instance = Create(srcDesc, dstDesc,
│ │ │ │ -
1541 duDesc, dvDesc,
│ │ │ │ -
1542 duuDesc, duvDesc, dvvDesc);
│ │ │ │ -
1543 if (instance) {
│ │ │ │ -
1544 bool r = instance->EvalPatchesVarying(
│ │ │ │ -
1545 srcBuffer, srcDesc,
│ │ │ │ -
1546 dstBuffer, dstDesc,
│ │ │ │ -
1547 duBuffer, duDesc,
│ │ │ │ -
1548 dvBuffer, dvDesc,
│ │ │ │ -
1549 duuBuffer, duuDesc,
│ │ │ │ -
1550 duvBuffer, duvDesc,
│ │ │ │ -
1551 dvvBuffer, dvvDesc,
│ │ │ │ -
1552 numPatchCoords, patchCoords,
│ │ │ │ -
1553 patchTable);
│ │ │ │ -
1554 delete instance;
│ │ │ │ -
1555 return r;
│ │ │ │ -
1556 }
│ │ │ │ -
1557 return false;
│ │ │ │ -
1558 }
│ │ │ │ -
1559 }
│ │ │ │ -
│ │ │ │ -
1560
│ │ │ │ -
1615 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1616 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1618 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1619 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1620 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1621 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1622 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
1623 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
1624 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
1625 int numPatchCoords,
│ │ │ │ -
1626 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1627 PATCH_TABLE *patchTable) const {
│ │ │ │ -
1628
│ │ │ │ -
1629 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
│ │ │ │ -
1630 dstBuffer->BindVBO(), dstDesc,
│ │ │ │ -
1631 duBuffer->BindVBO(), duDesc,
│ │ │ │ -
1632 dvBuffer->BindVBO(), dvDesc,
│ │ │ │ -
1633 duuBuffer->BindVBO(), duuDesc,
│ │ │ │ -
1634 duvBuffer->BindVBO(), duvDesc,
│ │ │ │ -
1635 dvvBuffer->BindVBO(), dvvDesc,
│ │ │ │ -
1636 numPatchCoords,
│ │ │ │ -
1637 patchCoords->BindVBO(),
│ │ │ │ -
1638 patchTable->GetVaryingPatchArrays(),
│ │ │ │ -
1639 patchTable->GetVaryingPatchIndexTextureBuffer(),
│ │ │ │ -
1640 patchTable->GetPatchParamTextureBuffer());
│ │ │ │ -
1641 }
│ │ │ │ -
│ │ │ │ -
1642
│ │ │ │ -
1677 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1678 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1680 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1681 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1682 int numPatchCoords,
│ │ │ │ -
1683 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1684 PATCH_TABLE *patchTable,
│ │ │ │ -
1685 int fvarChannel,
│ │ │ │ -
1686 GLXFBEvaluator const *instance,
│ │ │ │ -
1687 void * deviceContext = NULL) {
│ │ │ │ -
1688
│ │ │ │ -
1689 if (instance) {
│ │ │ │ -
1690 return instance->EvalPatchesFaceVarying(
│ │ │ │ -
1691 srcBuffer, srcDesc,
│ │ │ │ -
1692 dstBuffer, dstDesc,
│ │ │ │ -
1693 numPatchCoords, patchCoords,
│ │ │ │ -
1694 patchTable, fvarChannel);
│ │ │ │ -
1695 } else {
│ │ │ │ -
1696 // Create an instance on demand (slow)
│ │ │ │ -
1697 (void)deviceContext; // unused
│ │ │ │ -
1698 instance = Create(srcDesc, dstDesc,
│ │ │ │ - │ │ │ │ - │ │ │ │ -
1701 if (instance) {
│ │ │ │ -
1702 bool r = instance->EvalPatchesFaceVarying(
│ │ │ │ -
1703 srcBuffer, srcDesc,
│ │ │ │ -
1704 dstBuffer, dstDesc,
│ │ │ │ -
1705 numPatchCoords, patchCoords,
│ │ │ │ -
1706 patchTable, fvarChannel);
│ │ │ │ -
1707 delete instance;
│ │ │ │ -
1708 return r;
│ │ │ │ -
1709 }
│ │ │ │ -
1710 return false;
│ │ │ │ -
1711 }
│ │ │ │ -
1712 }
│ │ │ │ -
│ │ │ │ -
1713
│ │ │ │ -
1740 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1741 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1743 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1744 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1745 int numPatchCoords,
│ │ │ │ -
1746 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1747 PATCH_TABLE *patchTable,
│ │ │ │ -
1748 int fvarChannel = 0) const {
│ │ │ │ -
1749
│ │ │ │ -
1750 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
│ │ │ │ -
1751 dstBuffer->BindVBO(), dstDesc,
│ │ │ │ -
1752 0, BufferDescriptor(),
│ │ │ │ -
1753 0, BufferDescriptor(),
│ │ │ │ -
1754 numPatchCoords,
│ │ │ │ -
1755 patchCoords->BindVBO(),
│ │ │ │ -
1756 patchTable->GetFVarPatchArrays(fvarChannel),
│ │ │ │ -
1757 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),
│ │ │ │ -
1758 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));
│ │ │ │ -
1759 }
│ │ │ │ -
│ │ │ │ -
1760
│ │ │ │ -
1807 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1808 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1810 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1811 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1812 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1813 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1814 int numPatchCoords,
│ │ │ │ -
1815 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1816 PATCH_TABLE *patchTable,
│ │ │ │ -
1817 int fvarChannel,
│ │ │ │ -
1818 GLXFBEvaluator const *instance,
│ │ │ │ -
1819 void * deviceContext = NULL) {
│ │ │ │ -
1820
│ │ │ │ -
1821 if (instance) {
│ │ │ │ -
1822 return instance->EvalPatchesFaceVarying(
│ │ │ │ -
1823 srcBuffer, srcDesc,
│ │ │ │ -
1824 dstBuffer, dstDesc,
│ │ │ │ -
1825 duBuffer, duDesc,
│ │ │ │ -
1826 dvBuffer, dvDesc,
│ │ │ │ -
1827 numPatchCoords, patchCoords,
│ │ │ │ -
1828 patchTable, fvarChannel);
│ │ │ │ -
1829 } else {
│ │ │ │ -
1830 // Create an instance on demand (slow)
│ │ │ │ -
1831 (void)deviceContext; // unused
│ │ │ │ -
1832 instance = Create(srcDesc, dstDesc,
│ │ │ │ -
1833 duDesc, dvDesc);
│ │ │ │ -
1834 if (instance) {
│ │ │ │ -
1835 bool r = instance->EvalPatchesFaceVarying(
│ │ │ │ -
1836 srcBuffer, srcDesc,
│ │ │ │ -
1837 dstBuffer, dstDesc,
│ │ │ │ -
1838 duBuffer, duDesc,
│ │ │ │ -
1839 dvBuffer, dvDesc,
│ │ │ │ -
1840 numPatchCoords, patchCoords,
│ │ │ │ -
1841 patchTable, fvarChannel);
│ │ │ │ -
1842 delete instance;
│ │ │ │ -
1843 return r;
│ │ │ │ -
1844 }
│ │ │ │ -
1845 return false;
│ │ │ │ -
1846 }
│ │ │ │ -
1847 }
│ │ │ │ -
│ │ │ │ -
1848
│ │ │ │ -
1887 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1888 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1890 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1891 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1892 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1893 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1894 int numPatchCoords,
│ │ │ │ -
1895 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1896 PATCH_TABLE *patchTable,
│ │ │ │ -
1897 int fvarChannel = 0) const {
│ │ │ │ -
1898
│ │ │ │ -
1899 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
│ │ │ │ -
1900 dstBuffer->BindVBO(), dstDesc,
│ │ │ │ -
1901 duBuffer->BindVBO(), duDesc,
│ │ │ │ -
1902 dvBuffer->BindVBO(), dvDesc,
│ │ │ │ -
1903 numPatchCoords,
│ │ │ │ -
1904 patchCoords->BindVBO(),
│ │ │ │ -
1905 patchTable->GetFVarPatchArrays(fvarChannel),
│ │ │ │ -
1906 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),
│ │ │ │ -
1907 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));
│ │ │ │ -
1908 }
│ │ │ │ -
│ │ │ │ -
1909
│ │ │ │ -
1974 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1975 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1977 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1978 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1979 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1980 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1981 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
1982 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
1983 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
1984 int numPatchCoords,
│ │ │ │ -
1985 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1986 PATCH_TABLE *patchTable,
│ │ │ │ -
1987 int fvarChannel,
│ │ │ │ -
1988 GLXFBEvaluator const *instance,
│ │ │ │ -
1989 void * deviceContext = NULL) {
│ │ │ │ -
1990
│ │ │ │ -
1991 if (instance) {
│ │ │ │ -
1992 return instance->EvalPatchesFaceVarying(
│ │ │ │ -
1993 srcBuffer, srcDesc,
│ │ │ │ -
1994 dstBuffer, dstDesc,
│ │ │ │ -
1995 duBuffer, duDesc,
│ │ │ │ -
1996 dvBuffer, dvDesc,
│ │ │ │ -
1997 duuBuffer, duuDesc,
│ │ │ │ -
1998 duvBuffer, duvDesc,
│ │ │ │ -
1999 dvvBuffer, dvvDesc,
│ │ │ │ -
2000 numPatchCoords, patchCoords,
│ │ │ │ -
2001 patchTable, fvarChannel);
│ │ │ │ -
2002 } else {
│ │ │ │ -
2003 // Create an instance on demand (slow)
│ │ │ │ -
2004 (void)deviceContext; // unused
│ │ │ │ -
2005 instance = Create(srcDesc, dstDesc,
│ │ │ │ -
2006 duDesc, dvDesc,
│ │ │ │ -
2007 duuDesc, duvDesc, dvvDesc);
│ │ │ │ -
2008 if (instance) {
│ │ │ │ -
2009 bool r = instance->EvalPatchesFaceVarying(
│ │ │ │ -
2010 srcBuffer, srcDesc,
│ │ │ │ -
2011 dstBuffer, dstDesc,
│ │ │ │ -
2012 duBuffer, duDesc,
│ │ │ │ -
2013 dvBuffer, dvDesc,
│ │ │ │ -
2014 duuBuffer, duuDesc,
│ │ │ │ -
2015 duvBuffer, duvDesc,
│ │ │ │ -
2016 dvvBuffer, dvvDesc,
│ │ │ │ -
2017 numPatchCoords, patchCoords,
│ │ │ │ -
2018 patchTable, fvarChannel);
│ │ │ │ -
2019 delete instance;
│ │ │ │ -
2020 return r;
│ │ │ │ -
2021 }
│ │ │ │ -
2022 return false;
│ │ │ │ -
2023 }
│ │ │ │ -
2024 }
│ │ │ │ -
│ │ │ │ -
2025
│ │ │ │ -
2082 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
2083 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
2085 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
2086 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
2087 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
2088 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
2089 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
2090 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
2091 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
2092 int numPatchCoords,
│ │ │ │ -
2093 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
2094 PATCH_TABLE *patchTable,
│ │ │ │ -
2095 int fvarChannel = 0) const {
│ │ │ │ -
2096
│ │ │ │ -
2097 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
│ │ │ │ -
2098 dstBuffer->BindVBO(), dstDesc,
│ │ │ │ -
2099 duBuffer->BindVBO(), duDesc,
│ │ │ │ -
2100 dvBuffer->BindVBO(), dvDesc,
│ │ │ │ -
2101 duuBuffer->BindVBO(), duuDesc,
│ │ │ │ -
2102 duvBuffer->BindVBO(), duvDesc,
│ │ │ │ -
2103 dvvBuffer->BindVBO(), dvvDesc,
│ │ │ │ -
2104 numPatchCoords,
│ │ │ │ -
2105 patchCoords->BindVBO(),
│ │ │ │ -
2106 patchTable->GetFVarPatchArrays(fvarChannel),
│ │ │ │ -
2107 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),
│ │ │ │ -
2108 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));
│ │ │ │ -
2109 }
│ │ │ │ -
│ │ │ │ -
2110
│ │ │ │ -
2116
│ │ │ │ -
2119 bool Compile(BufferDescriptor const &srcDesc,
│ │ │ │ -
2120 BufferDescriptor const &dstDesc,
│ │ │ │ -
2121 BufferDescriptor const &duDesc = BufferDescriptor(),
│ │ │ │ -
2122 BufferDescriptor const &dvDesc = BufferDescriptor(),
│ │ │ │ -
2123 BufferDescriptor const &duuDesc = BufferDescriptor(),
│ │ │ │ -
2124 BufferDescriptor const &duvDesc = BufferDescriptor(),
│ │ │ │ -
2125 BufferDescriptor const &dvvDesc = BufferDescriptor());
│ │ │ │ -
2126
│ │ │ │ -
2128 static void Synchronize(void *kernel);
│ │ │ │ -
2129
│ │ │ │ -
2130private:
│ │ │ │ -
2131 GLuint _srcBufferTexture;
│ │ │ │ -
2132 GLuint _patchArraysUBO;
│ │ │ │ -
2133 bool _interleavedDerivativeBuffers;
│ │ │ │ -
2134
│ │ │ │ -
2135 struct _StencilKernel {
│ │ │ │ -
2136 _StencilKernel();
│ │ │ │ -
2137 ~_StencilKernel();
│ │ │ │ -
2138 bool Compile(BufferDescriptor const &srcDesc,
│ │ │ │ -
2139 BufferDescriptor const &dstDesc,
│ │ │ │ -
2140 BufferDescriptor const &duDesc,
│ │ │ │ -
2141 BufferDescriptor const &dvDesc,
│ │ │ │ -
2142 BufferDescriptor const &duuDesc,
│ │ │ │ -
2143 BufferDescriptor const &duvDesc,
│ │ │ │ -
2144 BufferDescriptor const &dvvDesc,
│ │ │ │ -
2145 bool interleavedDerivativeBuffers);
│ │ │ │ -
2146 GLuint program;
│ │ │ │ -
2147 GLint uniformSrcBufferTexture;
│ │ │ │ -
2148 GLint uniformSrcOffset; // src buffer offset (in elements)
│ │ │ │ -
2149
│ │ │ │ -
2150 GLint uniformSizesTexture;
│ │ │ │ -
2151 GLint uniformOffsetsTexture;
│ │ │ │ -
2152 GLint uniformIndicesTexture;
│ │ │ │ -
2153 GLint uniformWeightsTexture;
│ │ │ │ -
2154 GLint uniformDuWeightsTexture;
│ │ │ │ -
2155 GLint uniformDvWeightsTexture;
│ │ │ │ -
2156 GLint uniformDuuWeightsTexture;
│ │ │ │ -
2157 GLint uniformDuvWeightsTexture;
│ │ │ │ -
2158 GLint uniformDvvWeightsTexture;
│ │ │ │ -
2159 GLint uniformStart; // range
│ │ │ │ -
2160 GLint uniformEnd;
│ │ │ │ -
2161 } _stencilKernel;
│ │ │ │ -
2162
│ │ │ │ -
2163 struct _PatchKernel {
│ │ │ │ -
2164 _PatchKernel();
│ │ │ │ -
2165 ~_PatchKernel();
│ │ │ │ -
2166 bool Compile(BufferDescriptor const &srcDesc,
│ │ │ │ -
2167 BufferDescriptor const &dstDesc,
│ │ │ │ -
2168 BufferDescriptor const &duDesc,
│ │ │ │ -
2169 BufferDescriptor const &dvDesc,
│ │ │ │ -
2170 BufferDescriptor const &duuDesc,
│ │ │ │ -
2171 BufferDescriptor const &duvDesc,
│ │ │ │ -
2172 BufferDescriptor const &dvvDesc,
│ │ │ │ -
2173 bool interleavedDerivativeBuffers);
│ │ │ │ -
2174 GLuint program;
│ │ │ │ -
2175 GLint uniformSrcBufferTexture;
│ │ │ │ -
2176 GLint uniformSrcOffset; // src buffer offset (in elements)
│ │ │ │ -
2177
│ │ │ │ -
2178 GLint uniformPatchArraysUBOBinding;
│ │ │ │ -
2179 GLint uniformPatchParamTexture;
│ │ │ │ -
2180 GLint uniformPatchIndexTexture;
│ │ │ │ -
2181 } _patchKernel;
│ │ │ │ -
2182
│ │ │ │ -
2183};
│ │ │ │ +
72};
│ │ │ │
│ │ │ │ -
2184
│ │ │ │ -
2185} // end namespace Osd
│ │ │ │ -
2186
│ │ │ │ -
2187} // end namespace OPENSUBDIV_VERSION
│ │ │ │ -
2188using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
2189
│ │ │ │ -
2190} // end namespace OpenSubdiv
│ │ │ │ -
2191
│ │ │ │ -
2192
│ │ │ │ -
2193#endif // OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H
│ │ │ │ +
73
│ │ │ │ +
74} // end namespace Osd
│ │ │ │ +
75
│ │ │ │ +
76} // end namespace OPENSUBDIV_VERSION
│ │ │ │ +
77using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
78
│ │ │ │ +
79} // end namespace OpenSubdiv
│ │ │ │ +
80
│ │ │ │ +
81#endif // OPENSUBDIV3_OSD_GLSL_PATCH_SHADER_SOURCE
│ │ │ │ │ │ │ │ -
std::vector< PatchArray > PatchArrayVector
Definition types.h:132
│ │ │ │ -
Stencil table class wrapping the template for compatibility.
│ │ │ │ -
Limit stencil table class wrapping the template for compatibility.
│ │ │ │ -
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ - │ │ │ │ - │ │ │ │ -
static GLStencilTableTBO * Create(Far::StencilTable const *stencilTable, void *deviceContext=NULL)
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
GLStencilTableTBO(Far::StencilTable const *stencilTable)
│ │ │ │ -
GLStencilTableTBO(Far::LimitStencilTable const *limitStencilTable)
│ │ │ │ - │ │ │ │ -
static GLStencilTableTBO * Create(Far::LimitStencilTable const *limitStencilTable, void *deviceContext=NULL)
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
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 ...
│ │ │ │ -
static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, bool interleavedDerivativeBuffers=false)
│ │ │ │ -
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.
│ │ │ │ -
GLXFBEvaluator(bool interleavedDerivativeBuffers=false)
Constructor.
│ │ │ │ -
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.
│ │ │ │ - │ │ │ │ -
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
│ │ │ │ -
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...
│ │ │ │ -
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...
│ │ │ │ -
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)
│ │ │ │ -
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.
│ │ │ │ -
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...
│ │ │ │ -
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 ...
│ │ │ │ -
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...
│ │ │ │ -
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 ...
│ │ │ │ -
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.
│ │ │ │ -
static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, DEVICE_CONTEXT deviceContext)
Generic creator template.
│ │ │ │ -
static void Synchronize(void *kernel)
Wait the dispatched kernel finishes.
│ │ │ │ -
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 ...
│ │ │ │ -
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 ...
│ │ │ │ -
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 ...
│ │ │ │ -
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 ...
│ │ │ │ -
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 ...
│ │ │ │ -
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 ...
│ │ │ │ -
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 ...
│ │ │ │ -
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...
│ │ │ │ -
bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable) const
Generic stencil function.
│ │ │ │ -
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
│ │ │ │ -
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.
│ │ │ │ -
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 ...
│ │ │ │ -
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 ...
│ │ │ │ -
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...
│ │ │ │ -
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 ...
│ │ │ │ -
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...
│ │ │ │ -
~GLXFBEvaluator()
Destructor. note that the GL context must be made current.
│ │ │ │ -
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())
│ │ │ │ -
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 ...
│ │ │ │ -
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 ...
│ │ │ │ -
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 ...
│ │ │ │ + │ │ │ │ +
Provides shader source which can be used by client code.
│ │ │ │ +
static std::string GetVertexShaderSource(Far::PatchDescriptor::Type type)
│ │ │ │ +
static std::string GetPatchDrawingShaderSource()
Returns shader source which can be used while drawing piecewise parametric patches resulting from sub...
│ │ │ │ +
static std::string GetTessEvalShaderSource(Far::PatchDescriptor::Type type)
│ │ │ │ +
static std::string GetPatchBasisShaderSource()
Returns shader source which can be used to evaluate position and first and second derivatives on piec...
│ │ │ │ + │ │ │ │ +
static std::string GetTessControlShaderSource(Far::PatchDescriptor::Type type)
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,12 +1,12 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -glXFBEvaluator.h │ │ │ │ │ +glslPatchShaderSource.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ 2// Copyright 2015 Pixar │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ @@ -24,1448 +24,83 @@ │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ 24 │ │ │ │ │ -25#ifndef OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H │ │ │ │ │ -26#define OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H │ │ │ │ │ +25#ifndef OPENSUBDIV3_OSD_GLSL_PATCH_SHADER_SOURCE_H │ │ │ │ │ +26#define OPENSUBDIV3_OSD_GLSL_PATCH_SHADER_SOURCE_H │ │ │ │ │ 27 │ │ │ │ │ 28#include "../version.h" │ │ │ │ │ 29 │ │ │ │ │ -30#include "../osd/opengl.h" │ │ │ │ │ -31#include "../osd/types.h" │ │ │ │ │ -32#include "../osd/bufferDescriptor.h" │ │ │ │ │ +30#include "../far/patchDescriptor.h" │ │ │ │ │ +31 │ │ │ │ │ +32#include │ │ │ │ │ 33 │ │ │ │ │ 34namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ 35namespace OPENSUBDIV_VERSION { │ │ │ │ │ 36 │ │ │ │ │ -37namespace Far { │ │ │ │ │ -38 class PatchTable; │ │ │ │ │ -39 class StencilTable; │ │ │ │ │ -40 class LimitStencilTable; │ │ │ │ │ -41} │ │ │ │ │ -42 │ │ │ │ │ -43namespace Osd { │ │ │ │ │ -44 │ │ │ │ │ -_5_2class _G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O { │ │ │ │ │ -53public: │ │ │ │ │ -_5_4 static _G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O *_C_r_e_a_t_e( │ │ │ │ │ -55 _F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e const *stencilTable, void *deviceContext = NULL) { │ │ │ │ │ -56 (void)deviceContext; // unused │ │ │ │ │ -57 return new _G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O(stencilTable); │ │ │ │ │ -58 } │ │ │ │ │ +37namespace Osd { │ │ │ │ │ +38 │ │ │ │ │ +_4_0class _G_L_S_L_P_a_t_c_h_S_h_a_d_e_r_S_o_u_r_c_e { │ │ │ │ │ +41public: │ │ │ │ │ +_4_5 static std::string _G_e_t_P_a_t_c_h_B_a_s_i_s_S_h_a_d_e_r_S_o_u_r_c_e(); │ │ │ │ │ +46 │ │ │ │ │ +_5_0 static std::string _G_e_t_P_a_t_c_h_D_r_a_w_i_n_g_S_h_a_d_e_r_S_o_u_r_c_e(); │ │ │ │ │ +51 │ │ │ │ │ 59 │ │ │ │ │ -_6_0 static _G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O *_C_r_e_a_t_e( │ │ │ │ │ -61 _F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e const *limitStencilTable, │ │ │ │ │ -62 void *deviceContext = NULL) { │ │ │ │ │ -63 (void)deviceContext; // unused │ │ │ │ │ -64 return new _G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O(limitStencilTable); │ │ │ │ │ -65 } │ │ │ │ │ -66 │ │ │ │ │ -_6_7 explicit _G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O(_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e const *stencilTable); │ │ │ │ │ -_6_8 explicit _G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O(_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e const *limitStencilTable); │ │ │ │ │ -_6_9 _~_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O(); │ │ │ │ │ +_6_0 static std::string _G_e_t_C_o_m_m_o_n_S_h_a_d_e_r_S_o_u_r_c_e(); │ │ │ │ │ +61 │ │ │ │ │ +_6_2 static std::string _G_e_t_V_e_r_t_e_x_S_h_a_d_e_r_S_o_u_r_c_e( │ │ │ │ │ +63 _F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_:_:_T_y_p_e type); │ │ │ │ │ +64 │ │ │ │ │ +_6_5 static std::string _G_e_t_T_e_s_s_C_o_n_t_r_o_l_S_h_a_d_e_r_S_o_u_r_c_e( │ │ │ │ │ +66 _F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_:_:_T_y_p_e type); │ │ │ │ │ +67 │ │ │ │ │ +_6_8 static std::string _G_e_t_T_e_s_s_E_v_a_l_S_h_a_d_e_r_S_o_u_r_c_e( │ │ │ │ │ +69 _F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_:_:_T_y_p_e type); │ │ │ │ │ 70 │ │ │ │ │ -71 // interfaces needed for GLSLTransformFeedbackKernel │ │ │ │ │ -_7_2 GLuint _G_e_t_S_i_z_e_s_T_e_x_t_u_r_e() const { return _sizes; } │ │ │ │ │ -_7_3 GLuint _G_e_t_O_f_f_s_e_t_s_T_e_x_t_u_r_e() const { return _offsets; } │ │ │ │ │ -_7_4 GLuint _G_e_t_I_n_d_i_c_e_s_T_e_x_t_u_r_e() const { return _indices; } │ │ │ │ │ -_7_5 GLuint _G_e_t_W_e_i_g_h_t_s_T_e_x_t_u_r_e() const { return _weights; } │ │ │ │ │ -_7_6 GLuint _G_e_t_D_u_W_e_i_g_h_t_s_T_e_x_t_u_r_e() const { return _duWeights; } │ │ │ │ │ -_7_7 GLuint _G_e_t_D_v_W_e_i_g_h_t_s_T_e_x_t_u_r_e() const { return _dvWeights; } │ │ │ │ │ -_7_8 GLuint _G_e_t_D_u_u_W_e_i_g_h_t_s_T_e_x_t_u_r_e() const { return _duuWeights; } │ │ │ │ │ -_7_9 GLuint _G_e_t_D_u_v_W_e_i_g_h_t_s_T_e_x_t_u_r_e() const { return _duvWeights; } │ │ │ │ │ -_8_0 GLuint _G_e_t_D_v_v_W_e_i_g_h_t_s_T_e_x_t_u_r_e() const { return _dvvWeights; } │ │ │ │ │ -_8_1 int _G_e_t_N_u_m_S_t_e_n_c_i_l_s() const { return _numStencils; } │ │ │ │ │ -82 │ │ │ │ │ -83private: │ │ │ │ │ -84 GLuint _sizes; │ │ │ │ │ -85 GLuint _offsets; │ │ │ │ │ -86 GLuint _indices; │ │ │ │ │ -87 GLuint _weights; │ │ │ │ │ -88 GLuint _duWeights; │ │ │ │ │ -89 GLuint _dvWeights; │ │ │ │ │ -90 GLuint _duuWeights; │ │ │ │ │ -91 GLuint _duvWeights; │ │ │ │ │ -92 GLuint _dvvWeights; │ │ │ │ │ -93 int _numStencils; │ │ │ │ │ -94}; │ │ │ │ │ -95 │ │ │ │ │ -96// -------------------------------------------------------------------------- │ │ │ │ │ -- │ │ │ │ │ -97 │ │ │ │ │ -_9_8class _G_L_X_F_B_E_v_a_l_u_a_t_o_r { │ │ │ │ │ -99public: │ │ │ │ │ -_1_0_0 typedef bool _I_n_s_t_a_n_t_i_a_t_a_b_l_e; │ │ │ │ │ -101 │ │ │ │ │ -103 template │ │ │ │ │ -_1_0_4 static _G_L_X_F_B_E_v_a_l_u_a_t_o_r *_C_r_e_a_t_e(_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -105 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -106 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -107 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -108 DEVICE_CONTEXT deviceContext) { │ │ │ │ │ -109 bool interleavedDerivativeBuffers = deviceContext │ │ │ │ │ -110 ? deviceContext->AreInterleavedDerivativeBuffers() │ │ │ │ │ -111 : false; │ │ │ │ │ -112 return _C_r_e_a_t_e(srcDesc, dstDesc, duDesc, dvDesc, │ │ │ │ │ -113 interleavedDerivativeBuffers); │ │ │ │ │ -114 } │ │ │ │ │ -115 │ │ │ │ │ -_1_1_7 static _G_L_X_F_B_E_v_a_l_u_a_t_o_r *_C_r_e_a_t_e(_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -118 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -119 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -120 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -121 void * deviceContext) { │ │ │ │ │ -122 (void)deviceContext; // not used │ │ │ │ │ -123 return _C_r_e_a_t_e(srcDesc, dstDesc, duDesc, dvDesc); │ │ │ │ │ -124 } │ │ │ │ │ -125 │ │ │ │ │ -_1_2_6 static _G_L_X_F_B_E_v_a_l_u_a_t_o_r * _C_r_e_a_t_e(_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -127 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -128 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -129 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -130 bool interleavedDerivativeBuffers = false) { │ │ │ │ │ -131 _G_L_X_F_B_E_v_a_l_u_a_t_o_r *instance = new _G_L_X_F_B_E_v_a_l_u_a_t_o_r │ │ │ │ │ -(interleavedDerivativeBuffers); │ │ │ │ │ -132 if (instance->_C_o_m_p_i_l_e(srcDesc, dstDesc, duDesc, dvDesc)) │ │ │ │ │ -133 return instance; │ │ │ │ │ -134 delete instance; │ │ │ │ │ -135 return NULL; │ │ │ │ │ -136 } │ │ │ │ │ -137 │ │ │ │ │ -139 template │ │ │ │ │ -_1_4_0 static _G_L_X_F_B_E_v_a_l_u_a_t_o_r *_C_r_e_a_t_e(_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -141 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -142 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -143 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -144 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -145 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -146 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -147 DEVICE_CONTEXT deviceContext) { │ │ │ │ │ -148 bool interleavedDerivativeBuffers = deviceContext │ │ │ │ │ -149 ? deviceContext->AreInterleavedDerivativeBuffers() │ │ │ │ │ -150 : false; │ │ │ │ │ -151 return _C_r_e_a_t_e(srcDesc, dstDesc, duDesc, dvDesc, │ │ │ │ │ -152 duuDesc, duvDesc, dvvDesc, │ │ │ │ │ -153 interleavedDerivativeBuffers); │ │ │ │ │ -154 } │ │ │ │ │ -155 │ │ │ │ │ -_1_5_7 static _G_L_X_F_B_E_v_a_l_u_a_t_o_r *_C_r_e_a_t_e(_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -158 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -159 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -160 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -161 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -162 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -163 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -164 void * deviceContext) { │ │ │ │ │ -165 (void)deviceContext; // not used │ │ │ │ │ -166 return _C_r_e_a_t_e(srcDesc, dstDesc, duDesc, dvDesc, │ │ │ │ │ -167 duuDesc, duvDesc, dvvDesc); │ │ │ │ │ -168 } │ │ │ │ │ -169 │ │ │ │ │ -_1_7_0 static _G_L_X_F_B_E_v_a_l_u_a_t_o_r * _C_r_e_a_t_e(_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -171 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -172 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -173 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -174 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -175 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -176 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -177 bool interleavedDerivativeBuffers = false) { │ │ │ │ │ -178 _G_L_X_F_B_E_v_a_l_u_a_t_o_r *instance = new _G_L_X_F_B_E_v_a_l_u_a_t_o_r │ │ │ │ │ -(interleavedDerivativeBuffers); │ │ │ │ │ -179 if (instance->_C_o_m_p_i_l_e(srcDesc, dstDesc, duDesc, dvDesc, │ │ │ │ │ -180 duuDesc, duvDesc, dvvDesc)) │ │ │ │ │ -181 return instance; │ │ │ │ │ -182 delete instance; │ │ │ │ │ -183 return NULL; │ │ │ │ │ -184 } │ │ │ │ │ -185 │ │ │ │ │ -_1_9_9 _G_L_X_F_B_E_v_a_l_u_a_t_o_r(bool interleavedDerivativeBuffers = false); │ │ │ │ │ -200 │ │ │ │ │ -_2_0_2 _~_G_L_X_F_B_E_v_a_l_u_a_t_o_r(); │ │ │ │ │ -203 │ │ │ │ │ -209 │ │ │ │ │ -237 template │ │ │ │ │ -_2_3_8 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ -239 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -240 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -241 STENCIL_TABLE const *stencilTable, │ │ │ │ │ -242 _G_L_X_F_B_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -243 void * deviceContext = NULL) { │ │ │ │ │ -244 │ │ │ │ │ -245 if (instance) { │ │ │ │ │ -246 return instance->_E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer, srcDesc, │ │ │ │ │ -247 dstBuffer, dstDesc, │ │ │ │ │ -248 stencilTable); │ │ │ │ │ -249 } else { │ │ │ │ │ -250 // Create an instance on demand (slow) │ │ │ │ │ -251 (void)deviceContext; // unused │ │ │ │ │ -252 instance = _C_r_e_a_t_e(srcDesc, dstDesc, │ │ │ │ │ -253 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -254 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r()); │ │ │ │ │ -255 if (instance) { │ │ │ │ │ -256 bool r = instance->_E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer, srcDesc, │ │ │ │ │ -257 dstBuffer, dstDesc, │ │ │ │ │ -258 stencilTable); │ │ │ │ │ -259 delete instance; │ │ │ │ │ -260 return r; │ │ │ │ │ -261 } │ │ │ │ │ -262 return false; │ │ │ │ │ -263 } │ │ │ │ │ -264 } │ │ │ │ │ -265 │ │ │ │ │ -305 template │ │ │ │ │ -_3_0_6 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ -307 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -308 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -309 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -310 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -311 STENCIL_TABLE const *stencilTable, │ │ │ │ │ -312 _G_L_X_F_B_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -313 void * deviceContext = NULL) { │ │ │ │ │ -314 │ │ │ │ │ -315 if (instance) { │ │ │ │ │ -316 return instance->_E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer, srcDesc, │ │ │ │ │ -317 dstBuffer, dstDesc, │ │ │ │ │ -318 duBuffer, duDesc, │ │ │ │ │ -319 dvBuffer, dvDesc, │ │ │ │ │ -320 stencilTable); │ │ │ │ │ -321 } else { │ │ │ │ │ -322 // Create an instance on demand (slow) │ │ │ │ │ -323 (void)deviceContext; // unused │ │ │ │ │ -324 instance = _C_r_e_a_t_e(srcDesc, dstDesc, duDesc, dvDesc); │ │ │ │ │ -325 if (instance) { │ │ │ │ │ -326 bool r = instance->_E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer, srcDesc, │ │ │ │ │ -327 dstBuffer, dstDesc, │ │ │ │ │ -328 duBuffer, duDesc, │ │ │ │ │ -329 dvBuffer, dvDesc, │ │ │ │ │ -330 stencilTable); │ │ │ │ │ -331 delete instance; │ │ │ │ │ -332 return r; │ │ │ │ │ -333 } │ │ │ │ │ -334 return false; │ │ │ │ │ -335 } │ │ │ │ │ -336 } │ │ │ │ │ -337 │ │ │ │ │ -395 template │ │ │ │ │ -_3_9_6 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ -397 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -398 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -399 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -400 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -401 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -402 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -403 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -404 STENCIL_TABLE const *stencilTable, │ │ │ │ │ -405 _G_L_X_F_B_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -406 void * deviceContext = NULL) { │ │ │ │ │ -407 │ │ │ │ │ -408 if (instance) { │ │ │ │ │ -409 return instance->_E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer, srcDesc, │ │ │ │ │ -410 dstBuffer, dstDesc, │ │ │ │ │ -411 duBuffer, duDesc, │ │ │ │ │ -412 dvBuffer, dvDesc, │ │ │ │ │ -413 duuBuffer, duuDesc, │ │ │ │ │ -414 duvBuffer, duvDesc, │ │ │ │ │ -415 dvvBuffer, dvvDesc, │ │ │ │ │ -416 stencilTable); │ │ │ │ │ -417 } else { │ │ │ │ │ -418 // Create an instance on demand (slow) │ │ │ │ │ -419 (void)deviceContext; // unused │ │ │ │ │ -420 instance = _C_r_e_a_t_e(srcDesc, dstDesc, │ │ │ │ │ -421 duDesc, dvDesc, │ │ │ │ │ -422 duuDesc, duvDesc, dvvDesc); │ │ │ │ │ -423 if (instance) { │ │ │ │ │ -424 bool r = instance->_E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer, srcDesc, │ │ │ │ │ -425 dstBuffer, dstDesc, │ │ │ │ │ -426 duBuffer, duDesc, │ │ │ │ │ -427 dvBuffer, dvDesc, │ │ │ │ │ -428 duuBuffer, duuDesc, │ │ │ │ │ -429 duvBuffer, duvDesc, │ │ │ │ │ -430 dvvBuffer, dvvDesc, │ │ │ │ │ -431 stencilTable); │ │ │ │ │ -432 delete instance; │ │ │ │ │ -433 return r; │ │ │ │ │ -434 } │ │ │ │ │ -435 return false; │ │ │ │ │ -436 } │ │ │ │ │ -437 } │ │ │ │ │ -438 │ │ │ │ │ -456 template │ │ │ │ │ -_4_5_7 bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ -458 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -459 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -460 STENCIL_TABLE const *stencilTable) const { │ │ │ │ │ -461 │ │ │ │ │ -462 return _E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer->BindVBO(), srcDesc, │ │ │ │ │ -463 dstBuffer->BindVBO(), dstDesc, │ │ │ │ │ -464 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -465 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -466 stencilTable->GetSizesTexture(), │ │ │ │ │ -467 stencilTable->GetOffsetsTexture(), │ │ │ │ │ -468 stencilTable->GetIndicesTexture(), │ │ │ │ │ -469 stencilTable->GetWeightsTexture(), │ │ │ │ │ -470 0, │ │ │ │ │ -471 0, │ │ │ │ │ -472 /* start = */ 0, │ │ │ │ │ -473 /* end = */ stencilTable->GetNumStencils()); │ │ │ │ │ -474 } │ │ │ │ │ -475 │ │ │ │ │ -505 template │ │ │ │ │ -_5_0_6 bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ -507 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -508 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -509 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -510 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -511 STENCIL_TABLE const *stencilTable) const { │ │ │ │ │ -512 │ │ │ │ │ -513 return _E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer->BindVBO(), srcDesc, │ │ │ │ │ -514 dstBuffer->BindVBO(), dstDesc, │ │ │ │ │ -515 duBuffer->BindVBO(), duDesc, │ │ │ │ │ -516 dvBuffer->BindVBO(), dvDesc, │ │ │ │ │ -517 stencilTable->GetSizesTexture(), │ │ │ │ │ -518 stencilTable->GetOffsetsTexture(), │ │ │ │ │ -519 stencilTable->GetIndicesTexture(), │ │ │ │ │ -520 stencilTable->GetWeightsTexture(), │ │ │ │ │ -521 stencilTable->GetDuWeightsTexture(), │ │ │ │ │ -522 stencilTable->GetDvWeightsTexture(), │ │ │ │ │ -523 /* start = */ 0, │ │ │ │ │ -524 /* end = */ stencilTable->GetNumStencils()); │ │ │ │ │ -525 } │ │ │ │ │ -526 │ │ │ │ │ -574 template │ │ │ │ │ -_5_7_5 bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ -576 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -577 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -578 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -579 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -580 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -581 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -582 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -583 STENCIL_TABLE const *stencilTable) const { │ │ │ │ │ -584 │ │ │ │ │ -585 return _E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer->BindVBO(), srcDesc, │ │ │ │ │ -586 dstBuffer->BindVBO(), dstDesc, │ │ │ │ │ -587 duBuffer->BindVBO(), duDesc, │ │ │ │ │ -588 dvBuffer->BindVBO(), dvDesc, │ │ │ │ │ -589 duuBuffer->BindVBO(), duuDesc, │ │ │ │ │ -590 duvBuffer->BindVBO(), duvDesc, │ │ │ │ │ -591 dvvBuffer->BindVBO(), dvvDesc, │ │ │ │ │ -592 stencilTable->GetSizesTexture(), │ │ │ │ │ -593 stencilTable->GetOffsetsTexture(), │ │ │ │ │ -594 stencilTable->GetIndicesTexture(), │ │ │ │ │ -595 stencilTable->GetWeightsTexture(), │ │ │ │ │ -596 stencilTable->GetDuWeightsTexture(), │ │ │ │ │ -597 stencilTable->GetDvWeightsTexture(), │ │ │ │ │ -598 stencilTable->GetDuuWeightsTexture(), │ │ │ │ │ -599 stencilTable->GetDuvWeightsTexture(), │ │ │ │ │ -600 stencilTable->GetDvvWeightsTexture(), │ │ │ │ │ -601 /* start = */ 0, │ │ │ │ │ -602 /* end = */ stencilTable->GetNumStencils()); │ │ │ │ │ -603 } │ │ │ │ │ -604 │ │ │ │ │ -_6_4_0 bool _E_v_a_l_S_t_e_n_c_i_l_s(GLuint srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -641 GLuint dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -642 GLuint duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -643 GLuint dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -644 GLuint sizesBuffer, │ │ │ │ │ -645 GLuint offsetsBuffer, │ │ │ │ │ -646 GLuint indicesBuffer, │ │ │ │ │ -647 GLuint weightsBuffer, │ │ │ │ │ -648 GLuint duWeightsBuffer, │ │ │ │ │ -649 GLuint dvWeightsBuffer, │ │ │ │ │ -650 int start, │ │ │ │ │ -651 int end) const; │ │ │ │ │ -652 │ │ │ │ │ -_7_0_6 bool _E_v_a_l_S_t_e_n_c_i_l_s(GLuint srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -707 GLuint dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -708 GLuint duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -709 GLuint dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -710 GLuint duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -711 GLuint duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -712 GLuint dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -713 GLuint sizesBuffer, │ │ │ │ │ -714 GLuint offsetsBuffer, │ │ │ │ │ -715 GLuint indicesBuffer, │ │ │ │ │ -716 GLuint weightsBuffer, │ │ │ │ │ -717 GLuint duWeightsBuffer, │ │ │ │ │ -718 GLuint dvWeightsBuffer, │ │ │ │ │ -719 GLuint duuWeightsBuffer, │ │ │ │ │ -720 GLuint duvWeightsBuffer, │ │ │ │ │ -721 GLuint dvvWeightsBuffer, │ │ │ │ │ -722 int start, │ │ │ │ │ -723 int end) const; │ │ │ │ │ -724 │ │ │ │ │ -730 │ │ │ │ │ -763 template │ │ │ │ │ -_7_6_5 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ -766 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -767 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -768 int numPatchCoords, │ │ │ │ │ -769 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -770 PATCH_TABLE *patchTable, │ │ │ │ │ -771 _G_L_X_F_B_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -772 void * deviceContext = NULL) { │ │ │ │ │ -773 │ │ │ │ │ -774 if (instance) { │ │ │ │ │ -775 return instance->_E_v_a_l_P_a_t_c_h_e_s(srcBuffer, srcDesc, │ │ │ │ │ -776 dstBuffer, dstDesc, │ │ │ │ │ -777 numPatchCoords, patchCoords, │ │ │ │ │ -778 patchTable); │ │ │ │ │ -779 } else { │ │ │ │ │ -780 // Create an instance on demand (slow) │ │ │ │ │ -781 (void)deviceContext; // unused │ │ │ │ │ -782 instance = _C_r_e_a_t_e(srcDesc, dstDesc, │ │ │ │ │ -783 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -784 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r()); │ │ │ │ │ -785 if (instance) { │ │ │ │ │ -786 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s(srcBuffer, srcDesc, │ │ │ │ │ -787 dstBuffer, dstDesc, │ │ │ │ │ -788 numPatchCoords, patchCoords, │ │ │ │ │ -789 patchTable); │ │ │ │ │ -790 delete instance; │ │ │ │ │ -791 return r; │ │ │ │ │ -792 } │ │ │ │ │ -793 return false; │ │ │ │ │ -794 } │ │ │ │ │ -795 } │ │ │ │ │ -796 │ │ │ │ │ -841 template │ │ │ │ │ -_8_4_3 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ -844 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -845 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -846 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -847 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -848 int numPatchCoords, │ │ │ │ │ -849 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -850 PATCH_TABLE *patchTable, │ │ │ │ │ -851 _G_L_X_F_B_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -852 void * deviceContext = NULL) { │ │ │ │ │ -853 │ │ │ │ │ -854 if (instance) { │ │ │ │ │ -855 return instance->_E_v_a_l_P_a_t_c_h_e_s(srcBuffer, srcDesc, │ │ │ │ │ -856 dstBuffer, dstDesc, │ │ │ │ │ -857 duBuffer, duDesc, │ │ │ │ │ -858 dvBuffer, dvDesc, │ │ │ │ │ -859 numPatchCoords, patchCoords, │ │ │ │ │ -860 patchTable); │ │ │ │ │ -861 } else { │ │ │ │ │ -862 // Create an instance on demand (slow) │ │ │ │ │ -863 (void)deviceContext; // unused │ │ │ │ │ -864 instance = _C_r_e_a_t_e(srcDesc, dstDesc, duDesc, dvDesc); │ │ │ │ │ -865 if (instance) { │ │ │ │ │ -866 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s(srcBuffer, srcDesc, │ │ │ │ │ -867 dstBuffer, dstDesc, │ │ │ │ │ -868 duBuffer, duDesc, │ │ │ │ │ -869 dvBuffer, dvDesc, │ │ │ │ │ -870 numPatchCoords, patchCoords, │ │ │ │ │ -871 patchTable); │ │ │ │ │ -872 delete instance; │ │ │ │ │ -873 return r; │ │ │ │ │ -874 } │ │ │ │ │ -875 return false; │ │ │ │ │ -876 } │ │ │ │ │ -877 } │ │ │ │ │ -878 │ │ │ │ │ -941 template │ │ │ │ │ -_9_4_3 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ -944 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -945 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -946 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -947 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -948 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -949 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -950 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -951 int numPatchCoords, │ │ │ │ │ -952 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -953 PATCH_TABLE *patchTable, │ │ │ │ │ -954 _G_L_X_F_B_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -955 void * deviceContext = NULL) { │ │ │ │ │ -956 │ │ │ │ │ -957 if (instance) { │ │ │ │ │ -958 return instance->_E_v_a_l_P_a_t_c_h_e_s(srcBuffer, srcDesc, │ │ │ │ │ -959 dstBuffer, dstDesc, │ │ │ │ │ -960 duBuffer, duDesc, │ │ │ │ │ -961 dvBuffer, dvDesc, │ │ │ │ │ -962 duuBuffer, duuDesc, │ │ │ │ │ -963 duvBuffer, duvDesc, │ │ │ │ │ -964 dvvBuffer, dvvDesc, │ │ │ │ │ -965 numPatchCoords, patchCoords, │ │ │ │ │ -966 patchTable); │ │ │ │ │ -967 } else { │ │ │ │ │ -968 // Create an instance on demand (slow) │ │ │ │ │ -969 (void)deviceContext; // unused │ │ │ │ │ -970 instance = _C_r_e_a_t_e(srcDesc, dstDesc, │ │ │ │ │ -971 duDesc, dvDesc, │ │ │ │ │ -972 duuDesc, duvDesc, dvvDesc); │ │ │ │ │ -973 if (instance) { │ │ │ │ │ -974 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s(srcBuffer, srcDesc, │ │ │ │ │ -975 dstBuffer, dstDesc, │ │ │ │ │ -976 duBuffer, duDesc, │ │ │ │ │ -977 dvBuffer, dvDesc, │ │ │ │ │ -978 duuBuffer, duuDesc, │ │ │ │ │ -979 duvBuffer, duvDesc, │ │ │ │ │ -980 dvvBuffer, dvvDesc, │ │ │ │ │ -981 numPatchCoords, patchCoords, │ │ │ │ │ -982 patchTable); │ │ │ │ │ -983 delete instance; │ │ │ │ │ -984 return r; │ │ │ │ │ -985 } │ │ │ │ │ -986 return false; │ │ │ │ │ -987 } │ │ │ │ │ -988 } │ │ │ │ │ -989 │ │ │ │ │ -1014 template │ │ │ │ │ -_1_0_1_6 bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ -1017 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1018 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1019 int numPatchCoords, │ │ │ │ │ -1020 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1021 PATCH_TABLE *patchTable) const { │ │ │ │ │ -1022 │ │ │ │ │ -1023 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindVBO(), srcDesc, │ │ │ │ │ -1024 dstBuffer->BindVBO(), dstDesc, │ │ │ │ │ -1025 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -1026 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -1027 numPatchCoords, │ │ │ │ │ -1028 patchCoords->BindVBO(), │ │ │ │ │ -1029 patchTable->GetPatchArrays(), │ │ │ │ │ -1030 patchTable->GetPatchIndexTextureBuffer(), │ │ │ │ │ -1031 patchTable->GetPatchParamTextureBuffer()); │ │ │ │ │ -1032 } │ │ │ │ │ -1033 │ │ │ │ │ -1068 template │ │ │ │ │ -_1_0_7_0 bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ -1071 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1072 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1073 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1074 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1075 int numPatchCoords, │ │ │ │ │ -1076 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1077 PATCH_TABLE *patchTable) const { │ │ │ │ │ -1078 │ │ │ │ │ -1079 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindVBO(), srcDesc, │ │ │ │ │ -1080 dstBuffer->BindVBO(), dstDesc, │ │ │ │ │ -1081 duBuffer->BindVBO(), duDesc, │ │ │ │ │ -1082 dvBuffer->BindVBO(), dvDesc, │ │ │ │ │ -1083 numPatchCoords, │ │ │ │ │ -1084 patchCoords->BindVBO(), │ │ │ │ │ -1085 patchTable->GetPatchArrays(), │ │ │ │ │ -1086 patchTable->GetPatchIndexTextureBuffer(), │ │ │ │ │ -1087 patchTable->GetPatchParamTextureBuffer()); │ │ │ │ │ -1088 } │ │ │ │ │ -1089 │ │ │ │ │ -1142 template │ │ │ │ │ -_1_1_4_4 bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ -1145 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1146 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1147 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1148 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1149 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -1150 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -1151 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -1152 int numPatchCoords, │ │ │ │ │ -1153 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1154 PATCH_TABLE *patchTable) const { │ │ │ │ │ -1155 │ │ │ │ │ -1156 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindVBO(), srcDesc, │ │ │ │ │ -1157 dstBuffer->BindVBO(), dstDesc, │ │ │ │ │ -1158 duBuffer->BindVBO(), duDesc, │ │ │ │ │ -1159 dvBuffer->BindVBO(), dvDesc, │ │ │ │ │ -1160 duuBuffer->BindVBO(), duuDesc, │ │ │ │ │ -1161 duvBuffer->BindVBO(), duvDesc, │ │ │ │ │ -1162 dvvBuffer->BindVBO(), dvvDesc, │ │ │ │ │ -1163 numPatchCoords, │ │ │ │ │ -1164 patchCoords->BindVBO(), │ │ │ │ │ -1165 patchTable->GetPatchArrays(), │ │ │ │ │ -1166 patchTable->GetPatchIndexTextureBuffer(), │ │ │ │ │ -1167 patchTable->GetPatchParamTextureBuffer()); │ │ │ │ │ -1168 } │ │ │ │ │ -1169 │ │ │ │ │ -_1_1_7_0 bool _E_v_a_l_P_a_t_c_h_e_s(GLuint srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1171 GLuint dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1172 GLuint duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1173 GLuint dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1174 int numPatchCoords, │ │ │ │ │ -1175 GLuint patchCoordsBuffer, │ │ │ │ │ -1176 const _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r &patchArrays, │ │ │ │ │ -1177 GLuint patchIndexBuffer, │ │ │ │ │ -1178 GLuint patchParamsBuffer) const; │ │ │ │ │ -1179 │ │ │ │ │ -_1_1_8_0 bool _E_v_a_l_P_a_t_c_h_e_s(GLuint srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1181 GLuint dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1182 GLuint duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1183 GLuint dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1184 GLuint duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -1185 GLuint duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -1186 GLuint dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -1187 int numPatchCoords, │ │ │ │ │ -1188 GLuint patchCoordsBuffer, │ │ │ │ │ -1189 const _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r &patchArrays, │ │ │ │ │ -1190 GLuint patchIndexBuffer, │ │ │ │ │ -1191 GLuint patchParamsBuffer) const; │ │ │ │ │ -1192 │ │ │ │ │ -1225 template │ │ │ │ │ -_1_2_2_7 static bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1228 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1229 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1230 int numPatchCoords, │ │ │ │ │ -1231 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1232 PATCH_TABLE *patchTable, │ │ │ │ │ -1233 _G_L_X_F_B_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -1234 void * deviceContext = NULL) { │ │ │ │ │ -1235 │ │ │ │ │ -1236 if (instance) { │ │ │ │ │ -1237 return instance->_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1238 srcBuffer, srcDesc, │ │ │ │ │ -1239 dstBuffer, dstDesc, │ │ │ │ │ -1240 numPatchCoords, patchCoords, │ │ │ │ │ -1241 patchTable); │ │ │ │ │ -1242 } else { │ │ │ │ │ -1243 // Create an instance on demand (slow) │ │ │ │ │ -1244 (void)deviceContext; // unused │ │ │ │ │ -1245 instance = _C_r_e_a_t_e(srcDesc, dstDesc, │ │ │ │ │ -1246 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -1247 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r()); │ │ │ │ │ -1248 if (instance) { │ │ │ │ │ -1249 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1250 srcBuffer, srcDesc, │ │ │ │ │ -1251 dstBuffer, dstDesc, │ │ │ │ │ -1252 numPatchCoords, patchCoords, │ │ │ │ │ -1253 patchTable); │ │ │ │ │ -1254 delete instance; │ │ │ │ │ -1255 return r; │ │ │ │ │ -1256 } │ │ │ │ │ -1257 return false; │ │ │ │ │ -1258 } │ │ │ │ │ -1259 } │ │ │ │ │ -1260 │ │ │ │ │ -1285 template │ │ │ │ │ -_1_2_8_7 bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1288 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1289 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1290 int numPatchCoords, │ │ │ │ │ -1291 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1292 PATCH_TABLE *patchTable) const { │ │ │ │ │ -1293 │ │ │ │ │ -1294 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindVBO(), srcDesc, │ │ │ │ │ -1295 dstBuffer->BindVBO(), dstDesc, │ │ │ │ │ -1296 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -1297 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -1298 numPatchCoords, │ │ │ │ │ -1299 patchCoords->BindVBO(), │ │ │ │ │ -1300 patchTable->GetVaryingPatchArrays(), │ │ │ │ │ -1301 patchTable->GetVaryingPatchIndexTextureBuffer(), │ │ │ │ │ -1302 patchTable->GetPatchParamTextureBuffer()); │ │ │ │ │ -1303 } │ │ │ │ │ -1304 │ │ │ │ │ -1349 template │ │ │ │ │ -_1_3_5_1 static bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1352 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1353 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1354 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1355 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1356 int numPatchCoords, │ │ │ │ │ -1357 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1358 PATCH_TABLE *patchTable, │ │ │ │ │ -1359 _G_L_X_F_B_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -1360 void * deviceContext = NULL) { │ │ │ │ │ -1361 │ │ │ │ │ -1362 if (instance) { │ │ │ │ │ -1363 return instance->_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1364 srcBuffer, srcDesc, │ │ │ │ │ -1365 dstBuffer, dstDesc, │ │ │ │ │ -1366 duBuffer, duDesc, │ │ │ │ │ -1367 dvBuffer, dvDesc, │ │ │ │ │ -1368 numPatchCoords, patchCoords, │ │ │ │ │ -1369 patchTable); │ │ │ │ │ -1370 } else { │ │ │ │ │ -1371 // Create an instance on demand (slow) │ │ │ │ │ -1372 (void)deviceContext; // unused │ │ │ │ │ -1373 instance = _C_r_e_a_t_e(srcDesc, dstDesc, │ │ │ │ │ -1374 duDesc, dvDesc); │ │ │ │ │ -1375 if (instance) { │ │ │ │ │ -1376 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1377 srcBuffer, srcDesc, │ │ │ │ │ -1378 dstBuffer, dstDesc, │ │ │ │ │ -1379 duBuffer, duDesc, │ │ │ │ │ -1380 dvBuffer, dvDesc, │ │ │ │ │ -1381 numPatchCoords, patchCoords, │ │ │ │ │ -1382 patchTable); │ │ │ │ │ -1383 delete instance; │ │ │ │ │ -1384 return r; │ │ │ │ │ -1385 } │ │ │ │ │ -1386 return false; │ │ │ │ │ -1387 } │ │ │ │ │ -1388 } │ │ │ │ │ -1389 │ │ │ │ │ -1426 template │ │ │ │ │ -_1_4_2_8 bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1429 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1430 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1431 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1432 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1433 int numPatchCoords, │ │ │ │ │ -1434 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1435 PATCH_TABLE *patchTable) const { │ │ │ │ │ -1436 │ │ │ │ │ -1437 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindVBO(), srcDesc, │ │ │ │ │ -1438 dstBuffer->BindVBO(), dstDesc, │ │ │ │ │ -1439 duBuffer->BindVBO(), duDesc, │ │ │ │ │ -1440 dvBuffer->BindVBO(), dvDesc, │ │ │ │ │ -1441 numPatchCoords, │ │ │ │ │ -1442 patchCoords->BindVBO(), │ │ │ │ │ -1443 patchTable->GetVaryingPatchArrays(), │ │ │ │ │ -1444 patchTable->GetVaryingPatchIndexTextureBuffer(), │ │ │ │ │ -1445 patchTable->GetPatchParamTextureBuffer()); │ │ │ │ │ -1446 } │ │ │ │ │ -1447 │ │ │ │ │ -1510 template │ │ │ │ │ -_1_5_1_2 static bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1513 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1514 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1515 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1516 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1517 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -1518 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -1519 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -1520 int numPatchCoords, │ │ │ │ │ -1521 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1522 PATCH_TABLE *patchTable, │ │ │ │ │ -1523 _G_L_X_F_B_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -1524 void * deviceContext = NULL) { │ │ │ │ │ -1525 │ │ │ │ │ -1526 if (instance) { │ │ │ │ │ -1527 return instance->_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1528 srcBuffer, srcDesc, │ │ │ │ │ -1529 dstBuffer, dstDesc, │ │ │ │ │ -1530 duBuffer, duDesc, │ │ │ │ │ -1531 dvBuffer, dvDesc, │ │ │ │ │ -1532 duuBuffer, duuDesc, │ │ │ │ │ -1533 duvBuffer, duvDesc, │ │ │ │ │ -1534 dvvBuffer, dvvDesc, │ │ │ │ │ -1535 numPatchCoords, patchCoords, │ │ │ │ │ -1536 patchTable); │ │ │ │ │ -1537 } else { │ │ │ │ │ -1538 // Create an instance on demand (slow) │ │ │ │ │ -1539 (void)deviceContext; // unused │ │ │ │ │ -1540 instance = _C_r_e_a_t_e(srcDesc, dstDesc, │ │ │ │ │ -1541 duDesc, dvDesc, │ │ │ │ │ -1542 duuDesc, duvDesc, dvvDesc); │ │ │ │ │ -1543 if (instance) { │ │ │ │ │ -1544 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1545 srcBuffer, srcDesc, │ │ │ │ │ -1546 dstBuffer, dstDesc, │ │ │ │ │ -1547 duBuffer, duDesc, │ │ │ │ │ -1548 dvBuffer, dvDesc, │ │ │ │ │ -1549 duuBuffer, duuDesc, │ │ │ │ │ -1550 duvBuffer, duvDesc, │ │ │ │ │ -1551 dvvBuffer, dvvDesc, │ │ │ │ │ -1552 numPatchCoords, patchCoords, │ │ │ │ │ -1553 patchTable); │ │ │ │ │ -1554 delete instance; │ │ │ │ │ -1555 return r; │ │ │ │ │ -1556 } │ │ │ │ │ -1557 return false; │ │ │ │ │ -1558 } │ │ │ │ │ -1559 } │ │ │ │ │ -1560 │ │ │ │ │ -1615 template │ │ │ │ │ -_1_6_1_7 bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -1618 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1619 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1620 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1621 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1622 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -1623 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -1624 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -1625 int numPatchCoords, │ │ │ │ │ -1626 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1627 PATCH_TABLE *patchTable) const { │ │ │ │ │ -1628 │ │ │ │ │ -1629 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindVBO(), srcDesc, │ │ │ │ │ -1630 dstBuffer->BindVBO(), dstDesc, │ │ │ │ │ -1631 duBuffer->BindVBO(), duDesc, │ │ │ │ │ -1632 dvBuffer->BindVBO(), dvDesc, │ │ │ │ │ -1633 duuBuffer->BindVBO(), duuDesc, │ │ │ │ │ -1634 duvBuffer->BindVBO(), duvDesc, │ │ │ │ │ -1635 dvvBuffer->BindVBO(), dvvDesc, │ │ │ │ │ -1636 numPatchCoords, │ │ │ │ │ -1637 patchCoords->BindVBO(), │ │ │ │ │ -1638 patchTable->GetVaryingPatchArrays(), │ │ │ │ │ -1639 patchTable->GetVaryingPatchIndexTextureBuffer(), │ │ │ │ │ -1640 patchTable->GetPatchParamTextureBuffer()); │ │ │ │ │ -1641 } │ │ │ │ │ -1642 │ │ │ │ │ -1677 template │ │ │ │ │ -_1_6_7_9 static bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1680 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1681 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1682 int numPatchCoords, │ │ │ │ │ -1683 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1684 PATCH_TABLE *patchTable, │ │ │ │ │ -1685 int fvarChannel, │ │ │ │ │ -1686 _G_L_X_F_B_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -1687 void * deviceContext = NULL) { │ │ │ │ │ -1688 │ │ │ │ │ -1689 if (instance) { │ │ │ │ │ -1690 return instance->_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1691 srcBuffer, srcDesc, │ │ │ │ │ -1692 dstBuffer, dstDesc, │ │ │ │ │ -1693 numPatchCoords, patchCoords, │ │ │ │ │ -1694 patchTable, fvarChannel); │ │ │ │ │ -1695 } else { │ │ │ │ │ -1696 // Create an instance on demand (slow) │ │ │ │ │ -1697 (void)deviceContext; // unused │ │ │ │ │ -1698 instance = _C_r_e_a_t_e(srcDesc, dstDesc, │ │ │ │ │ -1699 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -1700 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r()); │ │ │ │ │ -1701 if (instance) { │ │ │ │ │ -1702 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1703 srcBuffer, srcDesc, │ │ │ │ │ -1704 dstBuffer, dstDesc, │ │ │ │ │ -1705 numPatchCoords, patchCoords, │ │ │ │ │ -1706 patchTable, fvarChannel); │ │ │ │ │ -1707 delete instance; │ │ │ │ │ -1708 return r; │ │ │ │ │ -1709 } │ │ │ │ │ -1710 return false; │ │ │ │ │ -1711 } │ │ │ │ │ -1712 } │ │ │ │ │ -1713 │ │ │ │ │ -1740 template │ │ │ │ │ -_1_7_4_2 bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1743 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1744 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1745 int numPatchCoords, │ │ │ │ │ -1746 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1747 PATCH_TABLE *patchTable, │ │ │ │ │ -1748 int fvarChannel = 0) const { │ │ │ │ │ -1749 │ │ │ │ │ -1750 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindVBO(), srcDesc, │ │ │ │ │ -1751 dstBuffer->BindVBO(), dstDesc, │ │ │ │ │ -1752 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -1753 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -1754 numPatchCoords, │ │ │ │ │ -1755 patchCoords->BindVBO(), │ │ │ │ │ -1756 patchTable->GetFVarPatchArrays(fvarChannel), │ │ │ │ │ -1757 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel), │ │ │ │ │ -1758 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel)); │ │ │ │ │ -1759 } │ │ │ │ │ -1760 │ │ │ │ │ -1807 template │ │ │ │ │ -_1_8_0_9 static bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1810 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1811 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1812 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1813 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1814 int numPatchCoords, │ │ │ │ │ -1815 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1816 PATCH_TABLE *patchTable, │ │ │ │ │ -1817 int fvarChannel, │ │ │ │ │ -1818 _G_L_X_F_B_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -1819 void * deviceContext = NULL) { │ │ │ │ │ -1820 │ │ │ │ │ -1821 if (instance) { │ │ │ │ │ -1822 return instance->_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1823 srcBuffer, srcDesc, │ │ │ │ │ -1824 dstBuffer, dstDesc, │ │ │ │ │ -1825 duBuffer, duDesc, │ │ │ │ │ -1826 dvBuffer, dvDesc, │ │ │ │ │ -1827 numPatchCoords, patchCoords, │ │ │ │ │ -1828 patchTable, fvarChannel); │ │ │ │ │ -1829 } else { │ │ │ │ │ -1830 // Create an instance on demand (slow) │ │ │ │ │ -1831 (void)deviceContext; // unused │ │ │ │ │ -1832 instance = _C_r_e_a_t_e(srcDesc, dstDesc, │ │ │ │ │ -1833 duDesc, dvDesc); │ │ │ │ │ -1834 if (instance) { │ │ │ │ │ -1835 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1836 srcBuffer, srcDesc, │ │ │ │ │ -1837 dstBuffer, dstDesc, │ │ │ │ │ -1838 duBuffer, duDesc, │ │ │ │ │ -1839 dvBuffer, dvDesc, │ │ │ │ │ -1840 numPatchCoords, patchCoords, │ │ │ │ │ -1841 patchTable, fvarChannel); │ │ │ │ │ -1842 delete instance; │ │ │ │ │ -1843 return r; │ │ │ │ │ -1844 } │ │ │ │ │ -1845 return false; │ │ │ │ │ -1846 } │ │ │ │ │ -1847 } │ │ │ │ │ -1848 │ │ │ │ │ -1887 template │ │ │ │ │ -_1_8_8_9 bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1890 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1891 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1892 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1893 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1894 int numPatchCoords, │ │ │ │ │ -1895 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1896 PATCH_TABLE *patchTable, │ │ │ │ │ -1897 int fvarChannel = 0) const { │ │ │ │ │ -1898 │ │ │ │ │ -1899 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindVBO(), srcDesc, │ │ │ │ │ -1900 dstBuffer->BindVBO(), dstDesc, │ │ │ │ │ -1901 duBuffer->BindVBO(), duDesc, │ │ │ │ │ -1902 dvBuffer->BindVBO(), dvDesc, │ │ │ │ │ -1903 numPatchCoords, │ │ │ │ │ -1904 patchCoords->BindVBO(), │ │ │ │ │ -1905 patchTable->GetFVarPatchArrays(fvarChannel), │ │ │ │ │ -1906 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel), │ │ │ │ │ -1907 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel)); │ │ │ │ │ -1908 } │ │ │ │ │ -1909 │ │ │ │ │ -1974 template │ │ │ │ │ -_1_9_7_6 static bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1977 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1978 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1979 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1980 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1981 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -1982 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -1983 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -1984 int numPatchCoords, │ │ │ │ │ -1985 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1986 PATCH_TABLE *patchTable, │ │ │ │ │ -1987 int fvarChannel, │ │ │ │ │ -1988 _G_L_X_F_B_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ -1989 void * deviceContext = NULL) { │ │ │ │ │ -1990 │ │ │ │ │ -1991 if (instance) { │ │ │ │ │ -1992 return instance->_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1993 srcBuffer, srcDesc, │ │ │ │ │ -1994 dstBuffer, dstDesc, │ │ │ │ │ -1995 duBuffer, duDesc, │ │ │ │ │ -1996 dvBuffer, dvDesc, │ │ │ │ │ -1997 duuBuffer, duuDesc, │ │ │ │ │ -1998 duvBuffer, duvDesc, │ │ │ │ │ -1999 dvvBuffer, dvvDesc, │ │ │ │ │ -2000 numPatchCoords, patchCoords, │ │ │ │ │ -2001 patchTable, fvarChannel); │ │ │ │ │ -2002 } else { │ │ │ │ │ -2003 // Create an instance on demand (slow) │ │ │ │ │ -2004 (void)deviceContext; // unused │ │ │ │ │ -2005 instance = _C_r_e_a_t_e(srcDesc, dstDesc, │ │ │ │ │ -2006 duDesc, dvDesc, │ │ │ │ │ -2007 duuDesc, duvDesc, dvvDesc); │ │ │ │ │ -2008 if (instance) { │ │ │ │ │ -2009 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -2010 srcBuffer, srcDesc, │ │ │ │ │ -2011 dstBuffer, dstDesc, │ │ │ │ │ -2012 duBuffer, duDesc, │ │ │ │ │ -2013 dvBuffer, dvDesc, │ │ │ │ │ -2014 duuBuffer, duuDesc, │ │ │ │ │ -2015 duvBuffer, duvDesc, │ │ │ │ │ -2016 dvvBuffer, dvvDesc, │ │ │ │ │ -2017 numPatchCoords, patchCoords, │ │ │ │ │ -2018 patchTable, fvarChannel); │ │ │ │ │ -2019 delete instance; │ │ │ │ │ -2020 return r; │ │ │ │ │ -2021 } │ │ │ │ │ -2022 return false; │ │ │ │ │ -2023 } │ │ │ │ │ -2024 } │ │ │ │ │ -2025 │ │ │ │ │ -2082 template │ │ │ │ │ -_2_0_8_4 bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -2085 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -2086 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -2087 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -2088 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -2089 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -2090 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -2091 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -2092 int numPatchCoords, │ │ │ │ │ -2093 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -2094 PATCH_TABLE *patchTable, │ │ │ │ │ -2095 int fvarChannel = 0) const { │ │ │ │ │ -2096 │ │ │ │ │ -2097 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindVBO(), srcDesc, │ │ │ │ │ -2098 dstBuffer->BindVBO(), dstDesc, │ │ │ │ │ -2099 duBuffer->BindVBO(), duDesc, │ │ │ │ │ -2100 dvBuffer->BindVBO(), dvDesc, │ │ │ │ │ -2101 duuBuffer->BindVBO(), duuDesc, │ │ │ │ │ -2102 duvBuffer->BindVBO(), duvDesc, │ │ │ │ │ -2103 dvvBuffer->BindVBO(), dvvDesc, │ │ │ │ │ -2104 numPatchCoords, │ │ │ │ │ -2105 patchCoords->BindVBO(), │ │ │ │ │ -2106 patchTable->GetFVarPatchArrays(fvarChannel), │ │ │ │ │ -2107 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel), │ │ │ │ │ -2108 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel)); │ │ │ │ │ -2109 } │ │ │ │ │ -2110 │ │ │ │ │ -2116 │ │ │ │ │ -_2_1_1_9 bool _C_o_m_p_i_l_e(_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -2120 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -2121 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc = _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -2122 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc = _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -2123 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc = _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -2124 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc = _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ -2125 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc = _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r()); │ │ │ │ │ -2126 │ │ │ │ │ -_2_1_2_8 static void _S_y_n_c_h_r_o_n_i_z_e(void *kernel); │ │ │ │ │ -2129 │ │ │ │ │ -2130private: │ │ │ │ │ -2131 GLuint _srcBufferTexture; │ │ │ │ │ -2132 GLuint _patchArraysUBO; │ │ │ │ │ -2133 bool _interleavedDerivativeBuffers; │ │ │ │ │ -2134 │ │ │ │ │ -2135 struct _StencilKernel { │ │ │ │ │ -2136 _StencilKernel(); │ │ │ │ │ -2137 ~_StencilKernel(); │ │ │ │ │ -2138 bool Compile(_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -2139 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -2140 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -2141 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -2142 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -2143 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -2144 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -2145 bool interleavedDerivativeBuffers); │ │ │ │ │ -2146 GLuint program; │ │ │ │ │ -2147 GLint uniformSrcBufferTexture; │ │ │ │ │ -2148 GLint uniformSrcOffset; // src buffer offset (in elements) │ │ │ │ │ -2149 │ │ │ │ │ -2150 GLint uniformSizesTexture; │ │ │ │ │ -2151 GLint uniformOffsetsTexture; │ │ │ │ │ -2152 GLint uniformIndicesTexture; │ │ │ │ │ -2153 GLint uniformWeightsTexture; │ │ │ │ │ -2154 GLint uniformDuWeightsTexture; │ │ │ │ │ -2155 GLint uniformDvWeightsTexture; │ │ │ │ │ -2156 GLint uniformDuuWeightsTexture; │ │ │ │ │ -2157 GLint uniformDuvWeightsTexture; │ │ │ │ │ -2158 GLint uniformDvvWeightsTexture; │ │ │ │ │ -2159 GLint uniformStart; // range │ │ │ │ │ -2160 GLint uniformEnd; │ │ │ │ │ -2161 } _stencilKernel; │ │ │ │ │ -2162 │ │ │ │ │ -2163 struct _PatchKernel { │ │ │ │ │ -2164 _PatchKernel(); │ │ │ │ │ -2165 ~_PatchKernel(); │ │ │ │ │ -2166 bool Compile(_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -2167 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -2168 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -2169 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -2170 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -2171 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -2172 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -2173 bool interleavedDerivativeBuffers); │ │ │ │ │ -2174 GLuint program; │ │ │ │ │ -2175 GLint uniformSrcBufferTexture; │ │ │ │ │ -2176 GLint uniformSrcOffset; // src buffer offset (in elements) │ │ │ │ │ -2177 │ │ │ │ │ -2178 GLint uniformPatchArraysUBOBinding; │ │ │ │ │ -2179 GLint uniformPatchParamTexture; │ │ │ │ │ -2180 GLint uniformPatchIndexTexture; │ │ │ │ │ -2181 } _patchKernel; │ │ │ │ │ -2182 │ │ │ │ │ -2183}; │ │ │ │ │ -2184 │ │ │ │ │ -2185} // end namespace Osd │ │ │ │ │ -2186 │ │ │ │ │ -2187} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ -2188using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -2189 │ │ │ │ │ -2190} // end namespace OpenSubdiv │ │ │ │ │ -2191 │ │ │ │ │ -2192 │ │ │ │ │ -2193#endif // OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H │ │ │ │ │ +72}; │ │ │ │ │ +73 │ │ │ │ │ +74} // end namespace Osd │ │ │ │ │ +75 │ │ │ │ │ +76} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ +77using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +78 │ │ │ │ │ +79} // end namespace OpenSubdiv │ │ │ │ │ +80 │ │ │ │ │ +81#endif // OPENSUBDIV3_OSD_GLSL_PATCH_SHADER_SOURCE │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r │ │ │ │ │ -std::vector< PatchArray > PatchArrayVector │ │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e_s_._h_:_1_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -Stencil table class wrapping the template for compatibility. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_7_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ -Limit stencil table class wrapping the template for compatibility. │ │ │ │ │ -DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_8_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ -BufferDescriptor is a struct which describes buffer elements in interleaved │ │ │ │ │ -data buffers.... │ │ │ │ │ -DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_6_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O │ │ │ │ │ -GL TextureBuffer stencil table. │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_5_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_G_e_t_S_i_z_e_s_T_e_x_t_u_r_e │ │ │ │ │ -GLuint GetSizesTexture() const │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_7_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_C_r_e_a_t_e │ │ │ │ │ -static GLStencilTableTBO * Create(Far::StencilTable const *stencilTable, void │ │ │ │ │ -*deviceContext=NULL) │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_5_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_G_e_t_D_v_v_W_e_i_g_h_t_s_T_e_x_t_u_r_e │ │ │ │ │ -GLuint GetDvvWeightsTexture() const │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_8_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_G_e_t_N_u_m_S_t_e_n_c_i_l_s │ │ │ │ │ -int GetNumStencils() const │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_8_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_G_e_t_D_u_v_W_e_i_g_h_t_s_T_e_x_t_u_r_e │ │ │ │ │ -GLuint GetDuvWeightsTexture() const │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_7_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_G_e_t_D_u_u_W_e_i_g_h_t_s_T_e_x_t_u_r_e │ │ │ │ │ -GLuint GetDuuWeightsTexture() const │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_7_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_G_e_t_I_n_d_i_c_e_s_T_e_x_t_u_r_e │ │ │ │ │ -GLuint GetIndicesTexture() const │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_7_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_~_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O │ │ │ │ │ -~GLStencilTableTBO() │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O │ │ │ │ │ -GLStencilTableTBO(Far::StencilTable const *stencilTable) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O │ │ │ │ │ -GLStencilTableTBO(Far::LimitStencilTable const *limitStencilTable) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_G_e_t_W_e_i_g_h_t_s_T_e_x_t_u_r_e │ │ │ │ │ -GLuint GetWeightsTexture() const │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_7_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_C_r_e_a_t_e │ │ │ │ │ -static GLStencilTableTBO * Create(Far::LimitStencilTable const │ │ │ │ │ -*limitStencilTable, void *deviceContext=NULL) │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_6_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_G_e_t_D_v_W_e_i_g_h_t_s_T_e_x_t_u_r_e │ │ │ │ │ -GLuint GetDvWeightsTexture() const │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_7_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_G_e_t_D_u_W_e_i_g_h_t_s_T_e_x_t_u_r_e │ │ │ │ │ -GLuint GetDuWeightsTexture() const │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_7_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_G_e_t_O_f_f_s_e_t_s_T_e_x_t_u_r_e │ │ │ │ │ -GLuint GetOffsetsTexture() const │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_7_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_9_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ -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 ... │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_2_8_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_C_r_e_a_t_e │ │ │ │ │ -static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, │ │ │ │ │ -BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, │ │ │ │ │ -BufferDescriptor const &dvDesc, bool interleavedDerivativeBuffers=false) │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_2_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -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. │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_5_0_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r │ │ │ │ │ -GLXFBEvaluator(bool interleavedDerivativeBuffers=false) │ │ │ │ │ -Constructor. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -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. │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_5_7_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_I_n_s_t_a_n_t_i_a_t_a_b_l_e │ │ │ │ │ -bool Instantiatable │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_0_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -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 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -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... │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_3_9_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -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... │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_1_4_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_C_r_e_a_t_e │ │ │ │ │ -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) │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_7_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_C_r_e_a_t_e │ │ │ │ │ -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. │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_1_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -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... │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_3_0_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ -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 ... │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_3_5_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -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... │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -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 ... │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_8_4_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_C_r_e_a_t_e │ │ │ │ │ -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. │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_4_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_C_r_e_a_t_e │ │ │ │ │ -static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, │ │ │ │ │ -BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, │ │ │ │ │ -BufferDescriptor const &dvDesc, DEVICE_CONTEXT deviceContext) │ │ │ │ │ -Generic creator template. │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_0_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_S_y_n_c_h_r_o_n_i_z_e │ │ │ │ │ -static void Synchronize(void *kernel) │ │ │ │ │ -Wait the dispatched kernel finishes. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ -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 ... │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_2_2_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ -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 ... │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_6_1_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ -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 ... │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_8_8_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -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 ... │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_7_6_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ -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 ... │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_8_0_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -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 ... │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_0_1_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -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 ... │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_9_4_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -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... │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_0_7_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, │ │ │ │ │ -DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const │ │ │ │ │ -*stencilTable) const │ │ │ │ │ -Generic stencil function. │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_4_5_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -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 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_C_r_e_a_t_e │ │ │ │ │ -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. │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_5_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ -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 ... │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_2_0_8_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ -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 ... │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_5_1_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -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... │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ -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 ... │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_6_7_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -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... │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_2_3_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_~_G_L_X_F_B_E_v_a_l_u_a_t_o_r │ │ │ │ │ -~GLXFBEvaluator() │ │ │ │ │ -Destructor. note that the GL context must be made current. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_C_o_m_p_i_l_e │ │ │ │ │ -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()) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ -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 ... │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_4_2_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ -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 ... │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_7_4_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ -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 ... │ │ │ │ │ -DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_9_7_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_:_:_T_y_p_e │ │ │ │ │ +Type │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_D_e_s_c_r_i_p_t_o_r_._h_:_4_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_L_P_a_t_c_h_S_h_a_d_e_r_S_o_u_r_c_e │ │ │ │ │ +Provides shader source which can be used by client code. │ │ │ │ │ +DDeeffiinniittiioonn _g_l_s_l_P_a_t_c_h_S_h_a_d_e_r_S_o_u_r_c_e_._h_:_4_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_L_P_a_t_c_h_S_h_a_d_e_r_S_o_u_r_c_e_:_: │ │ │ │ │ +_G_e_t_V_e_r_t_e_x_S_h_a_d_e_r_S_o_u_r_c_e │ │ │ │ │ +static std::string GetVertexShaderSource(Far::PatchDescriptor::Type type) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_L_P_a_t_c_h_S_h_a_d_e_r_S_o_u_r_c_e_:_: │ │ │ │ │ +_G_e_t_P_a_t_c_h_D_r_a_w_i_n_g_S_h_a_d_e_r_S_o_u_r_c_e │ │ │ │ │ +static std::string GetPatchDrawingShaderSource() │ │ │ │ │ +Returns shader source which can be used while drawing piecewise parametric │ │ │ │ │ +patches resulting from sub... │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_L_P_a_t_c_h_S_h_a_d_e_r_S_o_u_r_c_e_:_: │ │ │ │ │ +_G_e_t_T_e_s_s_E_v_a_l_S_h_a_d_e_r_S_o_u_r_c_e │ │ │ │ │ +static std::string GetTessEvalShaderSource(Far::PatchDescriptor::Type type) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_L_P_a_t_c_h_S_h_a_d_e_r_S_o_u_r_c_e_:_: │ │ │ │ │ +_G_e_t_P_a_t_c_h_B_a_s_i_s_S_h_a_d_e_r_S_o_u_r_c_e │ │ │ │ │ +static std::string GetPatchBasisShaderSource() │ │ │ │ │ +Returns shader source which can be used to evaluate position and first and │ │ │ │ │ +second derivatives on piec... │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_L_P_a_t_c_h_S_h_a_d_e_r_S_o_u_r_c_e_:_: │ │ │ │ │ +_G_e_t_C_o_m_m_o_n_S_h_a_d_e_r_S_o_u_r_c_e │ │ │ │ │ +static std::string GetCommonShaderSource() │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_L_P_a_t_c_h_S_h_a_d_e_r_S_o_u_r_c_e_:_: │ │ │ │ │ +_G_e_t_T_e_s_s_C_o_n_t_r_o_l_S_h_a_d_e_r_S_o_u_r_c_e │ │ │ │ │ +static std::string GetTessControlShaderSource(Far::PatchDescriptor::Type type) │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h │ │ │ │ │ + * _g_l_s_l_P_a_t_c_h_S_h_a_d_e_r_S_o_u_r_c_e_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00854.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/glslPatchShaderSource.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/osd/glXFBEvaluator.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -90,42 +90,47 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
glslPatchShaderSource.h File Reference
│ │ │ │ +
glXFBEvaluator.h File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include "../far/patchDescriptor.h"
│ │ │ │ -#include <string>
│ │ │ │ +#include "../osd/opengl.h"
│ │ │ │ +#include "../osd/types.h"
│ │ │ │ +#include "../osd/bufferDescriptor.h"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  GLSLPatchShaderSource
 Provides shader source which can be used by client code. More...
class  GLStencilTableTBO
 GL TextureBuffer stencil table. More...
 
class  GLXFBEvaluator
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Far
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,25 +1,30 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -glslPatchShaderSource.h File Reference │ │ │ │ │ +glXFBEvaluator.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ -#include "_._._/_f_a_r_/_p_a_t_c_h_D_e_s_c_r_i_p_t_o_r_._h" │ │ │ │ │ -#include │ │ │ │ │ +#include "_._._/_o_s_d_/_o_p_e_n_g_l_._h" │ │ │ │ │ +#include "_._._/_o_s_d_/_t_y_p_e_s_._h" │ │ │ │ │ +#include "_._._/_o_s_d_/_b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _G_L_S_L_P_a_t_c_h_S_h_a_d_e_r_S_o_u_r_c_e │ │ │ │ │ -  Provides shader source which can be used by client code. _M_o_r_e_._._. │ │ │ │ │ +class   _G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O │ │ │ │ │ +  GL TextureBuffer stencil table. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _G_L_X_F_B_E_v_a_l_u_a_t_o_r │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ +namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r │ │ │ │ │ +  │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d │ │ │ │ │   │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _g_l_s_l_P_a_t_c_h_S_h_a_d_e_r_S_o_u_r_c_e_._h │ │ │ │ │ + * _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00854.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,3 +1,4 @@ │ │ │ │ │ var a00854 = [ │ │ │ │ │ - ["GLSLPatchShaderSource", "a01241.html", null] │ │ │ │ │ + ["GLStencilTableTBO", "a01249.html", "a01249"], │ │ │ │ │ + ["GLXFBEvaluator", "a01253.html", "a01253"] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00854_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/glslPatchShaderSource.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/osd/glXFBEvaluator.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,15 +92,15 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
glslPatchShaderSource.h
│ │ │ │ +
glXFBEvaluator.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │
2// Copyright 2015 Pixar
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │ @@ -119,71 +119,1205 @@ │ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │
24
│ │ │ │ -
25#ifndef OPENSUBDIV3_OSD_GLSL_PATCH_SHADER_SOURCE_H
│ │ │ │ -
26#define OPENSUBDIV3_OSD_GLSL_PATCH_SHADER_SOURCE_H
│ │ │ │ +
25#ifndef OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H
│ │ │ │ +
26#define OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H
│ │ │ │
27
│ │ │ │
28#include "../version.h"
│ │ │ │
29
│ │ │ │ -
30#include "../far/patchDescriptor.h"
│ │ │ │ -
31
│ │ │ │ -
32#include <string>
│ │ │ │ +
30#include "../osd/opengl.h"
│ │ │ │ +
31#include "../osd/types.h"
│ │ │ │ +
32#include "../osd/bufferDescriptor.h"
│ │ │ │
33
│ │ │ │
34namespace OpenSubdiv {
│ │ │ │
35namespace OPENSUBDIV_VERSION {
│ │ │ │
36
│ │ │ │ -
37namespace Osd {
│ │ │ │ -
38
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
41public:
│ │ │ │ -
45 static std::string GetPatchBasisShaderSource();
│ │ │ │ -
46
│ │ │ │ -
50 static std::string GetPatchDrawingShaderSource();
│ │ │ │ -
51
│ │ │ │ +
37namespace Far {
│ │ │ │ +
38 class PatchTable;
│ │ │ │ +
39 class StencilTable;
│ │ │ │ +
40 class LimitStencilTable;
│ │ │ │ +
41}
│ │ │ │ +
42
│ │ │ │ +
43namespace Osd {
│ │ │ │ +
44
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
53public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
55 Far::StencilTable const *stencilTable, void *deviceContext = NULL) {
│ │ │ │ +
56 (void)deviceContext; // unused
│ │ │ │ +
57 return new GLStencilTableTBO(stencilTable);
│ │ │ │ +
58 }
│ │ │ │ +
│ │ │ │
59
│ │ │ │ -
60 static std::string GetCommonShaderSource();
│ │ │ │ -
61
│ │ │ │ -
62 static std::string GetVertexShaderSource(
│ │ │ │ - │ │ │ │ -
64
│ │ │ │ -
65 static std::string GetTessControlShaderSource(
│ │ │ │ - │ │ │ │ -
67
│ │ │ │ -
68 static std::string GetTessEvalShaderSource(
│ │ │ │ - │ │ │ │ +
│ │ │ │ + │ │ │ │ +
61 Far::LimitStencilTable const *limitStencilTable,
│ │ │ │ +
62 void *deviceContext = NULL) {
│ │ │ │ +
63 (void)deviceContext; // unused
│ │ │ │ +
64 return new GLStencilTableTBO(limitStencilTable);
│ │ │ │ +
65 }
│ │ │ │ +
│ │ │ │ +
66
│ │ │ │ +
67 explicit GLStencilTableTBO(Far::StencilTable const *stencilTable);
│ │ │ │ +
68 explicit GLStencilTableTBO(Far::LimitStencilTable const *limitStencilTable);
│ │ │ │ + │ │ │ │
70
│ │ │ │ -
72};
│ │ │ │ +
71 // interfaces needed for GLSLTransformFeedbackKernel
│ │ │ │ +
72 GLuint GetSizesTexture() const { return _sizes; }
│ │ │ │ +
73 GLuint GetOffsetsTexture() const { return _offsets; }
│ │ │ │ +
74 GLuint GetIndicesTexture() const { return _indices; }
│ │ │ │ +
75 GLuint GetWeightsTexture() const { return _weights; }
│ │ │ │ +
76 GLuint GetDuWeightsTexture() const { return _duWeights; }
│ │ │ │ +
77 GLuint GetDvWeightsTexture() const { return _dvWeights; }
│ │ │ │ +
78 GLuint GetDuuWeightsTexture() const { return _duuWeights; }
│ │ │ │ +
79 GLuint GetDuvWeightsTexture() const { return _duvWeights; }
│ │ │ │ +
80 GLuint GetDvvWeightsTexture() const { return _dvvWeights; }
│ │ │ │ +
81 int GetNumStencils() const { return _numStencils; }
│ │ │ │ +
82
│ │ │ │ +
83private:
│ │ │ │ +
84 GLuint _sizes;
│ │ │ │ +
85 GLuint _offsets;
│ │ │ │ +
86 GLuint _indices;
│ │ │ │ +
87 GLuint _weights;
│ │ │ │ +
88 GLuint _duWeights;
│ │ │ │ +
89 GLuint _dvWeights;
│ │ │ │ +
90 GLuint _duuWeights;
│ │ │ │ +
91 GLuint _duvWeights;
│ │ │ │ +
92 GLuint _dvvWeights;
│ │ │ │ +
93 int _numStencils;
│ │ │ │ +
94};
│ │ │ │ +
│ │ │ │ +
95
│ │ │ │ +
96// ---------------------------------------------------------------------------
│ │ │ │ +
97
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
99public:
│ │ │ │ +
100 typedef bool Instantiatable;
│ │ │ │ +
101
│ │ │ │ +
103 template <typename DEVICE_CONTEXT>
│ │ │ │ +
│ │ │ │ +
104 static GLXFBEvaluator *Create(BufferDescriptor const &srcDesc,
│ │ │ │ +
105 BufferDescriptor const &dstDesc,
│ │ │ │ +
106 BufferDescriptor const &duDesc,
│ │ │ │ +
107 BufferDescriptor const &dvDesc,
│ │ │ │ +
108 DEVICE_CONTEXT deviceContext) {
│ │ │ │ +
109 bool interleavedDerivativeBuffers = deviceContext
│ │ │ │ +
110 ? deviceContext->AreInterleavedDerivativeBuffers()
│ │ │ │ +
111 : false;
│ │ │ │ +
112 return Create(srcDesc, dstDesc, duDesc, dvDesc,
│ │ │ │ +
113 interleavedDerivativeBuffers);
│ │ │ │ +
114 }
│ │ │ │ +
│ │ │ │ +
115
│ │ │ │ +
│ │ │ │ +
117 static GLXFBEvaluator *Create(BufferDescriptor const &srcDesc,
│ │ │ │ +
118 BufferDescriptor const &dstDesc,
│ │ │ │ +
119 BufferDescriptor const &duDesc,
│ │ │ │ +
120 BufferDescriptor const &dvDesc,
│ │ │ │ +
121 void * deviceContext) {
│ │ │ │ +
122 (void)deviceContext; // not used
│ │ │ │ +
123 return Create(srcDesc, dstDesc, duDesc, dvDesc);
│ │ │ │ +
124 }
│ │ │ │ +
│ │ │ │ +
125
│ │ │ │ +
│ │ │ │ +
126 static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc,
│ │ │ │ +
127 BufferDescriptor const &dstDesc,
│ │ │ │ +
128 BufferDescriptor const &duDesc,
│ │ │ │ +
129 BufferDescriptor const &dvDesc,
│ │ │ │ +
130 bool interleavedDerivativeBuffers = false) {
│ │ │ │ +
131 GLXFBEvaluator *instance = new GLXFBEvaluator(interleavedDerivativeBuffers);
│ │ │ │ +
132 if (instance->Compile(srcDesc, dstDesc, duDesc, dvDesc))
│ │ │ │ +
133 return instance;
│ │ │ │ +
134 delete instance;
│ │ │ │ +
135 return NULL;
│ │ │ │ +
136 }
│ │ │ │ +
│ │ │ │ +
137
│ │ │ │ +
139 template <typename DEVICE_CONTEXT>
│ │ │ │ +
│ │ │ │ +
140 static GLXFBEvaluator *Create(BufferDescriptor const &srcDesc,
│ │ │ │ +
141 BufferDescriptor const &dstDesc,
│ │ │ │ +
142 BufferDescriptor const &duDesc,
│ │ │ │ +
143 BufferDescriptor const &dvDesc,
│ │ │ │ +
144 BufferDescriptor const &duuDesc,
│ │ │ │ +
145 BufferDescriptor const &duvDesc,
│ │ │ │ +
146 BufferDescriptor const &dvvDesc,
│ │ │ │ +
147 DEVICE_CONTEXT deviceContext) {
│ │ │ │ +
148 bool interleavedDerivativeBuffers = deviceContext
│ │ │ │ +
149 ? deviceContext->AreInterleavedDerivativeBuffers()
│ │ │ │ +
150 : false;
│ │ │ │ +
151 return Create(srcDesc, dstDesc, duDesc, dvDesc,
│ │ │ │ +
152 duuDesc, duvDesc, dvvDesc,
│ │ │ │ +
153 interleavedDerivativeBuffers);
│ │ │ │ +
154 }
│ │ │ │ +
│ │ │ │ +
155
│ │ │ │ +
│ │ │ │ +
157 static GLXFBEvaluator *Create(BufferDescriptor const &srcDesc,
│ │ │ │ +
158 BufferDescriptor const &dstDesc,
│ │ │ │ +
159 BufferDescriptor const &duDesc,
│ │ │ │ +
160 BufferDescriptor const &dvDesc,
│ │ │ │ +
161 BufferDescriptor const &duuDesc,
│ │ │ │ +
162 BufferDescriptor const &duvDesc,
│ │ │ │ +
163 BufferDescriptor const &dvvDesc,
│ │ │ │ +
164 void * deviceContext) {
│ │ │ │ +
165 (void)deviceContext; // not used
│ │ │ │ +
166 return Create(srcDesc, dstDesc, duDesc, dvDesc,
│ │ │ │ +
167 duuDesc, duvDesc, dvvDesc);
│ │ │ │ +
168 }
│ │ │ │ +
│ │ │ │ +
169
│ │ │ │ +
│ │ │ │ +
170 static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc,
│ │ │ │ +
171 BufferDescriptor const &dstDesc,
│ │ │ │ +
172 BufferDescriptor const &duDesc,
│ │ │ │ +
173 BufferDescriptor const &dvDesc,
│ │ │ │ +
174 BufferDescriptor const &duuDesc,
│ │ │ │ +
175 BufferDescriptor const &duvDesc,
│ │ │ │ +
176 BufferDescriptor const &dvvDesc,
│ │ │ │ +
177 bool interleavedDerivativeBuffers = false) {
│ │ │ │ +
178 GLXFBEvaluator *instance = new GLXFBEvaluator(interleavedDerivativeBuffers);
│ │ │ │ +
179 if (instance->Compile(srcDesc, dstDesc, duDesc, dvDesc,
│ │ │ │ +
180 duuDesc, duvDesc, dvvDesc))
│ │ │ │ +
181 return instance;
│ │ │ │ +
182 delete instance;
│ │ │ │ +
183 return NULL;
│ │ │ │ +
184 }
│ │ │ │ +
│ │ │ │ +
185
│ │ │ │ +
199 GLXFBEvaluator(bool interleavedDerivativeBuffers = false);
│ │ │ │ +
200
│ │ │ │ + │ │ │ │ +
203
│ │ │ │ +
209
│ │ │ │ +
237 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ +
│ │ │ │ +
238 static bool EvalStencils(
│ │ │ │ +
239 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
240 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
241 STENCIL_TABLE const *stencilTable,
│ │ │ │ +
242 GLXFBEvaluator const *instance,
│ │ │ │ +
243 void * deviceContext = NULL) {
│ │ │ │ +
244
│ │ │ │ +
245 if (instance) {
│ │ │ │ +
246 return instance->EvalStencils(srcBuffer, srcDesc,
│ │ │ │ +
247 dstBuffer, dstDesc,
│ │ │ │ +
248 stencilTable);
│ │ │ │ +
249 } else {
│ │ │ │ +
250 // Create an instance on demand (slow)
│ │ │ │ +
251 (void)deviceContext; // unused
│ │ │ │ +
252 instance = Create(srcDesc, dstDesc,
│ │ │ │ + │ │ │ │ + │ │ │ │ +
255 if (instance) {
│ │ │ │ +
256 bool r = instance->EvalStencils(srcBuffer, srcDesc,
│ │ │ │ +
257 dstBuffer, dstDesc,
│ │ │ │ +
258 stencilTable);
│ │ │ │ +
259 delete instance;
│ │ │ │ +
260 return r;
│ │ │ │ +
261 }
│ │ │ │ +
262 return false;
│ │ │ │ +
263 }
│ │ │ │ +
264 }
│ │ │ │ +
│ │ │ │ +
265
│ │ │ │ +
305 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ +
│ │ │ │ +
306 static bool EvalStencils(
│ │ │ │ +
307 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
308 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
309 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
310 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
311 STENCIL_TABLE const *stencilTable,
│ │ │ │ +
312 GLXFBEvaluator const *instance,
│ │ │ │ +
313 void * deviceContext = NULL) {
│ │ │ │ +
314
│ │ │ │ +
315 if (instance) {
│ │ │ │ +
316 return instance->EvalStencils(srcBuffer, srcDesc,
│ │ │ │ +
317 dstBuffer, dstDesc,
│ │ │ │ +
318 duBuffer, duDesc,
│ │ │ │ +
319 dvBuffer, dvDesc,
│ │ │ │ +
320 stencilTable);
│ │ │ │ +
321 } else {
│ │ │ │ +
322 // Create an instance on demand (slow)
│ │ │ │ +
323 (void)deviceContext; // unused
│ │ │ │ +
324 instance = Create(srcDesc, dstDesc, duDesc, dvDesc);
│ │ │ │ +
325 if (instance) {
│ │ │ │ +
326 bool r = instance->EvalStencils(srcBuffer, srcDesc,
│ │ │ │ +
327 dstBuffer, dstDesc,
│ │ │ │ +
328 duBuffer, duDesc,
│ │ │ │ +
329 dvBuffer, dvDesc,
│ │ │ │ +
330 stencilTable);
│ │ │ │ +
331 delete instance;
│ │ │ │ +
332 return r;
│ │ │ │ +
333 }
│ │ │ │ +
334 return false;
│ │ │ │ +
335 }
│ │ │ │ +
336 }
│ │ │ │ +
│ │ │ │ +
337
│ │ │ │ +
395 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ +
│ │ │ │ +
396 static bool EvalStencils(
│ │ │ │ +
397 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
398 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
399 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
400 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
401 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
402 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
403 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
404 STENCIL_TABLE const *stencilTable,
│ │ │ │ +
405 GLXFBEvaluator const *instance,
│ │ │ │ +
406 void * deviceContext = NULL) {
│ │ │ │ +
407
│ │ │ │ +
408 if (instance) {
│ │ │ │ +
409 return instance->EvalStencils(srcBuffer, srcDesc,
│ │ │ │ +
410 dstBuffer, dstDesc,
│ │ │ │ +
411 duBuffer, duDesc,
│ │ │ │ +
412 dvBuffer, dvDesc,
│ │ │ │ +
413 duuBuffer, duuDesc,
│ │ │ │ +
414 duvBuffer, duvDesc,
│ │ │ │ +
415 dvvBuffer, dvvDesc,
│ │ │ │ +
416 stencilTable);
│ │ │ │ +
417 } else {
│ │ │ │ +
418 // Create an instance on demand (slow)
│ │ │ │ +
419 (void)deviceContext; // unused
│ │ │ │ +
420 instance = Create(srcDesc, dstDesc,
│ │ │ │ +
421 duDesc, dvDesc,
│ │ │ │ +
422 duuDesc, duvDesc, dvvDesc);
│ │ │ │ +
423 if (instance) {
│ │ │ │ +
424 bool r = instance->EvalStencils(srcBuffer, srcDesc,
│ │ │ │ +
425 dstBuffer, dstDesc,
│ │ │ │ +
426 duBuffer, duDesc,
│ │ │ │ +
427 dvBuffer, dvDesc,
│ │ │ │ +
428 duuBuffer, duuDesc,
│ │ │ │ +
429 duvBuffer, duvDesc,
│ │ │ │ +
430 dvvBuffer, dvvDesc,
│ │ │ │ +
431 stencilTable);
│ │ │ │ +
432 delete instance;
│ │ │ │ +
433 return r;
│ │ │ │ +
434 }
│ │ │ │ +
435 return false;
│ │ │ │ +
436 }
│ │ │ │ +
437 }
│ │ │ │ +
│ │ │ │ +
438
│ │ │ │ +
456 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
458 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
459 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
460 STENCIL_TABLE const *stencilTable) const {
│ │ │ │ +
461
│ │ │ │ +
462 return EvalStencils(srcBuffer->BindVBO(), srcDesc,
│ │ │ │ +
463 dstBuffer->BindVBO(), dstDesc,
│ │ │ │ +
464 0, BufferDescriptor(),
│ │ │ │ +
465 0, BufferDescriptor(),
│ │ │ │ +
466 stencilTable->GetSizesTexture(),
│ │ │ │ +
467 stencilTable->GetOffsetsTexture(),
│ │ │ │ +
468 stencilTable->GetIndicesTexture(),
│ │ │ │ +
469 stencilTable->GetWeightsTexture(),
│ │ │ │ +
470 0,
│ │ │ │ +
471 0,
│ │ │ │ +
472 /* start = */ 0,
│ │ │ │ +
473 /* end = */ stencilTable->GetNumStencils());
│ │ │ │ +
474 }
│ │ │ │ +
│ │ │ │ +
475
│ │ │ │ +
505 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
507 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
508 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
509 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
510 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
511 STENCIL_TABLE const *stencilTable) const {
│ │ │ │ +
512
│ │ │ │ +
513 return EvalStencils(srcBuffer->BindVBO(), srcDesc,
│ │ │ │ +
514 dstBuffer->BindVBO(), dstDesc,
│ │ │ │ +
515 duBuffer->BindVBO(), duDesc,
│ │ │ │ +
516 dvBuffer->BindVBO(), dvDesc,
│ │ │ │ +
517 stencilTable->GetSizesTexture(),
│ │ │ │ +
518 stencilTable->GetOffsetsTexture(),
│ │ │ │ +
519 stencilTable->GetIndicesTexture(),
│ │ │ │ +
520 stencilTable->GetWeightsTexture(),
│ │ │ │ +
521 stencilTable->GetDuWeightsTexture(),
│ │ │ │ +
522 stencilTable->GetDvWeightsTexture(),
│ │ │ │ +
523 /* start = */ 0,
│ │ │ │ +
524 /* end = */ stencilTable->GetNumStencils());
│ │ │ │ +
525 }
│ │ │ │ +
│ │ │ │ +
526
│ │ │ │ +
574 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
576 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
577 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
578 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
579 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
580 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
581 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
582 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
583 STENCIL_TABLE const *stencilTable) const {
│ │ │ │ +
584
│ │ │ │ +
585 return EvalStencils(srcBuffer->BindVBO(), srcDesc,
│ │ │ │ +
586 dstBuffer->BindVBO(), dstDesc,
│ │ │ │ +
587 duBuffer->BindVBO(), duDesc,
│ │ │ │ +
588 dvBuffer->BindVBO(), dvDesc,
│ │ │ │ +
589 duuBuffer->BindVBO(), duuDesc,
│ │ │ │ +
590 duvBuffer->BindVBO(), duvDesc,
│ │ │ │ +
591 dvvBuffer->BindVBO(), dvvDesc,
│ │ │ │ +
592 stencilTable->GetSizesTexture(),
│ │ │ │ +
593 stencilTable->GetOffsetsTexture(),
│ │ │ │ +
594 stencilTable->GetIndicesTexture(),
│ │ │ │ +
595 stencilTable->GetWeightsTexture(),
│ │ │ │ +
596 stencilTable->GetDuWeightsTexture(),
│ │ │ │ +
597 stencilTable->GetDvWeightsTexture(),
│ │ │ │ +
598 stencilTable->GetDuuWeightsTexture(),
│ │ │ │ +
599 stencilTable->GetDuvWeightsTexture(),
│ │ │ │ +
600 stencilTable->GetDvvWeightsTexture(),
│ │ │ │ +
601 /* start = */ 0,
│ │ │ │ +
602 /* end = */ stencilTable->GetNumStencils());
│ │ │ │ +
603 }
│ │ │ │ +
│ │ │ │ +
604
│ │ │ │ +
640 bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
641 GLuint dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
642 GLuint duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
643 GLuint dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
644 GLuint sizesBuffer,
│ │ │ │ +
645 GLuint offsetsBuffer,
│ │ │ │ +
646 GLuint indicesBuffer,
│ │ │ │ +
647 GLuint weightsBuffer,
│ │ │ │ +
648 GLuint duWeightsBuffer,
│ │ │ │ +
649 GLuint dvWeightsBuffer,
│ │ │ │ +
650 int start,
│ │ │ │ +
651 int end) const;
│ │ │ │ +
652
│ │ │ │ +
706 bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
707 GLuint dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
708 GLuint duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
709 GLuint dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
710 GLuint duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
711 GLuint duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
712 GLuint dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
713 GLuint sizesBuffer,
│ │ │ │ +
714 GLuint offsetsBuffer,
│ │ │ │ +
715 GLuint indicesBuffer,
│ │ │ │ +
716 GLuint weightsBuffer,
│ │ │ │ +
717 GLuint duWeightsBuffer,
│ │ │ │ +
718 GLuint dvWeightsBuffer,
│ │ │ │ +
719 GLuint duuWeightsBuffer,
│ │ │ │ +
720 GLuint duvWeightsBuffer,
│ │ │ │ +
721 GLuint dvvWeightsBuffer,
│ │ │ │ +
722 int start,
│ │ │ │ +
723 int end) const;
│ │ │ │ +
724
│ │ │ │ +
730
│ │ │ │ +
763 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
764 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ +
765 static bool EvalPatches(
│ │ │ │ +
766 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
767 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
768 int numPatchCoords,
│ │ │ │ +
769 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
770 PATCH_TABLE *patchTable,
│ │ │ │ +
771 GLXFBEvaluator const *instance,
│ │ │ │ +
772 void * deviceContext = NULL) {
│ │ │ │ +
773
│ │ │ │ +
774 if (instance) {
│ │ │ │ +
775 return instance->EvalPatches(srcBuffer, srcDesc,
│ │ │ │ +
776 dstBuffer, dstDesc,
│ │ │ │ +
777 numPatchCoords, patchCoords,
│ │ │ │ +
778 patchTable);
│ │ │ │ +
779 } else {
│ │ │ │ +
780 // Create an instance on demand (slow)
│ │ │ │ +
781 (void)deviceContext; // unused
│ │ │ │ +
782 instance = Create(srcDesc, dstDesc,
│ │ │ │ + │ │ │ │ + │ │ │ │ +
785 if (instance) {
│ │ │ │ +
786 bool r = instance->EvalPatches(srcBuffer, srcDesc,
│ │ │ │ +
787 dstBuffer, dstDesc,
│ │ │ │ +
788 numPatchCoords, patchCoords,
│ │ │ │ +
789 patchTable);
│ │ │ │ +
790 delete instance;
│ │ │ │ +
791 return r;
│ │ │ │ +
792 }
│ │ │ │ +
793 return false;
│ │ │ │ +
794 }
│ │ │ │ +
795 }
│ │ │ │ +
│ │ │ │ +
796
│ │ │ │ +
841 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
842 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ +
843 static bool EvalPatches(
│ │ │ │ +
844 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
845 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
846 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
847 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
848 int numPatchCoords,
│ │ │ │ +
849 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
850 PATCH_TABLE *patchTable,
│ │ │ │ +
851 GLXFBEvaluator const *instance,
│ │ │ │ +
852 void * deviceContext = NULL) {
│ │ │ │ +
853
│ │ │ │ +
854 if (instance) {
│ │ │ │ +
855 return instance->EvalPatches(srcBuffer, srcDesc,
│ │ │ │ +
856 dstBuffer, dstDesc,
│ │ │ │ +
857 duBuffer, duDesc,
│ │ │ │ +
858 dvBuffer, dvDesc,
│ │ │ │ +
859 numPatchCoords, patchCoords,
│ │ │ │ +
860 patchTable);
│ │ │ │ +
861 } else {
│ │ │ │ +
862 // Create an instance on demand (slow)
│ │ │ │ +
863 (void)deviceContext; // unused
│ │ │ │ +
864 instance = Create(srcDesc, dstDesc, duDesc, dvDesc);
│ │ │ │ +
865 if (instance) {
│ │ │ │ +
866 bool r = instance->EvalPatches(srcBuffer, srcDesc,
│ │ │ │ +
867 dstBuffer, dstDesc,
│ │ │ │ +
868 duBuffer, duDesc,
│ │ │ │ +
869 dvBuffer, dvDesc,
│ │ │ │ +
870 numPatchCoords, patchCoords,
│ │ │ │ +
871 patchTable);
│ │ │ │ +
872 delete instance;
│ │ │ │ +
873 return r;
│ │ │ │ +
874 }
│ │ │ │ +
875 return false;
│ │ │ │ +
876 }
│ │ │ │ +
877 }
│ │ │ │ +
│ │ │ │ +
878
│ │ │ │ +
941 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
942 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ +
943 static bool EvalPatches(
│ │ │ │ +
944 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
945 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
946 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
947 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
948 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
949 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
950 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
951 int numPatchCoords,
│ │ │ │ +
952 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
953 PATCH_TABLE *patchTable,
│ │ │ │ +
954 GLXFBEvaluator const *instance,
│ │ │ │ +
955 void * deviceContext = NULL) {
│ │ │ │ +
956
│ │ │ │ +
957 if (instance) {
│ │ │ │ +
958 return instance->EvalPatches(srcBuffer, srcDesc,
│ │ │ │ +
959 dstBuffer, dstDesc,
│ │ │ │ +
960 duBuffer, duDesc,
│ │ │ │ +
961 dvBuffer, dvDesc,
│ │ │ │ +
962 duuBuffer, duuDesc,
│ │ │ │ +
963 duvBuffer, duvDesc,
│ │ │ │ +
964 dvvBuffer, dvvDesc,
│ │ │ │ +
965 numPatchCoords, patchCoords,
│ │ │ │ +
966 patchTable);
│ │ │ │ +
967 } else {
│ │ │ │ +
968 // Create an instance on demand (slow)
│ │ │ │ +
969 (void)deviceContext; // unused
│ │ │ │ +
970 instance = Create(srcDesc, dstDesc,
│ │ │ │ +
971 duDesc, dvDesc,
│ │ │ │ +
972 duuDesc, duvDesc, dvvDesc);
│ │ │ │ +
973 if (instance) {
│ │ │ │ +
974 bool r = instance->EvalPatches(srcBuffer, srcDesc,
│ │ │ │ +
975 dstBuffer, dstDesc,
│ │ │ │ +
976 duBuffer, duDesc,
│ │ │ │ +
977 dvBuffer, dvDesc,
│ │ │ │ +
978 duuBuffer, duuDesc,
│ │ │ │ +
979 duvBuffer, duvDesc,
│ │ │ │ +
980 dvvBuffer, dvvDesc,
│ │ │ │ +
981 numPatchCoords, patchCoords,
│ │ │ │ +
982 patchTable);
│ │ │ │ +
983 delete instance;
│ │ │ │ +
984 return r;
│ │ │ │ +
985 }
│ │ │ │ +
986 return false;
│ │ │ │ +
987 }
│ │ │ │ +
988 }
│ │ │ │ +
│ │ │ │ +
989
│ │ │ │ +
1014 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1015 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1017 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1018 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1019 int numPatchCoords,
│ │ │ │ +
1020 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1021 PATCH_TABLE *patchTable) const {
│ │ │ │ +
1022
│ │ │ │ +
1023 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
│ │ │ │ +
1024 dstBuffer->BindVBO(), dstDesc,
│ │ │ │ +
1025 0, BufferDescriptor(),
│ │ │ │ +
1026 0, BufferDescriptor(),
│ │ │ │ +
1027 numPatchCoords,
│ │ │ │ +
1028 patchCoords->BindVBO(),
│ │ │ │ +
1029 patchTable->GetPatchArrays(),
│ │ │ │ +
1030 patchTable->GetPatchIndexTextureBuffer(),
│ │ │ │ +
1031 patchTable->GetPatchParamTextureBuffer());
│ │ │ │ +
1032 }
│ │ │ │ +
│ │ │ │ +
1033
│ │ │ │ +
1068 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1069 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1071 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1072 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1073 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1074 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1075 int numPatchCoords,
│ │ │ │ +
1076 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1077 PATCH_TABLE *patchTable) const {
│ │ │ │ +
1078
│ │ │ │ +
1079 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
│ │ │ │ +
1080 dstBuffer->BindVBO(), dstDesc,
│ │ │ │ +
1081 duBuffer->BindVBO(), duDesc,
│ │ │ │ +
1082 dvBuffer->BindVBO(), dvDesc,
│ │ │ │ +
1083 numPatchCoords,
│ │ │ │ +
1084 patchCoords->BindVBO(),
│ │ │ │ +
1085 patchTable->GetPatchArrays(),
│ │ │ │ +
1086 patchTable->GetPatchIndexTextureBuffer(),
│ │ │ │ +
1087 patchTable->GetPatchParamTextureBuffer());
│ │ │ │ +
1088 }
│ │ │ │ +
│ │ │ │ +
1089
│ │ │ │ +
1142 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1143 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1145 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1146 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1147 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1148 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1149 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
1150 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
1151 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
1152 int numPatchCoords,
│ │ │ │ +
1153 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1154 PATCH_TABLE *patchTable) const {
│ │ │ │ +
1155
│ │ │ │ +
1156 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
│ │ │ │ +
1157 dstBuffer->BindVBO(), dstDesc,
│ │ │ │ +
1158 duBuffer->BindVBO(), duDesc,
│ │ │ │ +
1159 dvBuffer->BindVBO(), dvDesc,
│ │ │ │ +
1160 duuBuffer->BindVBO(), duuDesc,
│ │ │ │ +
1161 duvBuffer->BindVBO(), duvDesc,
│ │ │ │ +
1162 dvvBuffer->BindVBO(), dvvDesc,
│ │ │ │ +
1163 numPatchCoords,
│ │ │ │ +
1164 patchCoords->BindVBO(),
│ │ │ │ +
1165 patchTable->GetPatchArrays(),
│ │ │ │ +
1166 patchTable->GetPatchIndexTextureBuffer(),
│ │ │ │ +
1167 patchTable->GetPatchParamTextureBuffer());
│ │ │ │ +
1168 }
│ │ │ │ +
│ │ │ │ +
1169
│ │ │ │ +
1170 bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1171 GLuint dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1172 GLuint duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1173 GLuint dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1174 int numPatchCoords,
│ │ │ │ +
1175 GLuint patchCoordsBuffer,
│ │ │ │ +
1176 const PatchArrayVector &patchArrays,
│ │ │ │ +
1177 GLuint patchIndexBuffer,
│ │ │ │ +
1178 GLuint patchParamsBuffer) const;
│ │ │ │ +
1179
│ │ │ │ +
1180 bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1181 GLuint dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1182 GLuint duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1183 GLuint dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1184 GLuint duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
1185 GLuint duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
1186 GLuint dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
1187 int numPatchCoords,
│ │ │ │ +
1188 GLuint patchCoordsBuffer,
│ │ │ │ +
1189 const PatchArrayVector &patchArrays,
│ │ │ │ +
1190 GLuint patchIndexBuffer,
│ │ │ │ +
1191 GLuint patchParamsBuffer) const;
│ │ │ │ +
1192
│ │ │ │ +
1225 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1226 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1228 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1229 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1230 int numPatchCoords,
│ │ │ │ +
1231 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1232 PATCH_TABLE *patchTable,
│ │ │ │ +
1233 GLXFBEvaluator const *instance,
│ │ │ │ +
1234 void * deviceContext = NULL) {
│ │ │ │ +
1235
│ │ │ │ +
1236 if (instance) {
│ │ │ │ +
1237 return instance->EvalPatchesVarying(
│ │ │ │ +
1238 srcBuffer, srcDesc,
│ │ │ │ +
1239 dstBuffer, dstDesc,
│ │ │ │ +
1240 numPatchCoords, patchCoords,
│ │ │ │ +
1241 patchTable);
│ │ │ │ +
1242 } else {
│ │ │ │ +
1243 // Create an instance on demand (slow)
│ │ │ │ +
1244 (void)deviceContext; // unused
│ │ │ │ +
1245 instance = Create(srcDesc, dstDesc,
│ │ │ │ + │ │ │ │ + │ │ │ │ +
1248 if (instance) {
│ │ │ │ +
1249 bool r = instance->EvalPatchesVarying(
│ │ │ │ +
1250 srcBuffer, srcDesc,
│ │ │ │ +
1251 dstBuffer, dstDesc,
│ │ │ │ +
1252 numPatchCoords, patchCoords,
│ │ │ │ +
1253 patchTable);
│ │ │ │ +
1254 delete instance;
│ │ │ │ +
1255 return r;
│ │ │ │ +
1256 }
│ │ │ │ +
1257 return false;
│ │ │ │ +
1258 }
│ │ │ │ +
1259 }
│ │ │ │ +
│ │ │ │ +
1260
│ │ │ │ +
1285 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1286 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1288 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1289 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1290 int numPatchCoords,
│ │ │ │ +
1291 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1292 PATCH_TABLE *patchTable) const {
│ │ │ │ +
1293
│ │ │ │ +
1294 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
│ │ │ │ +
1295 dstBuffer->BindVBO(), dstDesc,
│ │ │ │ +
1296 0, BufferDescriptor(),
│ │ │ │ +
1297 0, BufferDescriptor(),
│ │ │ │ +
1298 numPatchCoords,
│ │ │ │ +
1299 patchCoords->BindVBO(),
│ │ │ │ +
1300 patchTable->GetVaryingPatchArrays(),
│ │ │ │ +
1301 patchTable->GetVaryingPatchIndexTextureBuffer(),
│ │ │ │ +
1302 patchTable->GetPatchParamTextureBuffer());
│ │ │ │ +
1303 }
│ │ │ │ +
│ │ │ │ +
1304
│ │ │ │ +
1349 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1350 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1352 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1353 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1354 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1355 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1356 int numPatchCoords,
│ │ │ │ +
1357 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1358 PATCH_TABLE *patchTable,
│ │ │ │ +
1359 GLXFBEvaluator const *instance,
│ │ │ │ +
1360 void * deviceContext = NULL) {
│ │ │ │ +
1361
│ │ │ │ +
1362 if (instance) {
│ │ │ │ +
1363 return instance->EvalPatchesVarying(
│ │ │ │ +
1364 srcBuffer, srcDesc,
│ │ │ │ +
1365 dstBuffer, dstDesc,
│ │ │ │ +
1366 duBuffer, duDesc,
│ │ │ │ +
1367 dvBuffer, dvDesc,
│ │ │ │ +
1368 numPatchCoords, patchCoords,
│ │ │ │ +
1369 patchTable);
│ │ │ │ +
1370 } else {
│ │ │ │ +
1371 // Create an instance on demand (slow)
│ │ │ │ +
1372 (void)deviceContext; // unused
│ │ │ │ +
1373 instance = Create(srcDesc, dstDesc,
│ │ │ │ +
1374 duDesc, dvDesc);
│ │ │ │ +
1375 if (instance) {
│ │ │ │ +
1376 bool r = instance->EvalPatchesVarying(
│ │ │ │ +
1377 srcBuffer, srcDesc,
│ │ │ │ +
1378 dstBuffer, dstDesc,
│ │ │ │ +
1379 duBuffer, duDesc,
│ │ │ │ +
1380 dvBuffer, dvDesc,
│ │ │ │ +
1381 numPatchCoords, patchCoords,
│ │ │ │ +
1382 patchTable);
│ │ │ │ +
1383 delete instance;
│ │ │ │ +
1384 return r;
│ │ │ │ +
1385 }
│ │ │ │ +
1386 return false;
│ │ │ │ +
1387 }
│ │ │ │ +
1388 }
│ │ │ │ +
│ │ │ │ +
1389
│ │ │ │ +
1426 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1427 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1429 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1430 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1431 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1432 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1433 int numPatchCoords,
│ │ │ │ +
1434 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1435 PATCH_TABLE *patchTable) const {
│ │ │ │ +
1436
│ │ │ │ +
1437 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
│ │ │ │ +
1438 dstBuffer->BindVBO(), dstDesc,
│ │ │ │ +
1439 duBuffer->BindVBO(), duDesc,
│ │ │ │ +
1440 dvBuffer->BindVBO(), dvDesc,
│ │ │ │ +
1441 numPatchCoords,
│ │ │ │ +
1442 patchCoords->BindVBO(),
│ │ │ │ +
1443 patchTable->GetVaryingPatchArrays(),
│ │ │ │ +
1444 patchTable->GetVaryingPatchIndexTextureBuffer(),
│ │ │ │ +
1445 patchTable->GetPatchParamTextureBuffer());
│ │ │ │ +
1446 }
│ │ │ │ +
│ │ │ │ +
1447
│ │ │ │ +
1510 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1511 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1513 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1514 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1515 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1516 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1517 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
1518 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
1519 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
1520 int numPatchCoords,
│ │ │ │ +
1521 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1522 PATCH_TABLE *patchTable,
│ │ │ │ +
1523 GLXFBEvaluator const *instance,
│ │ │ │ +
1524 void * deviceContext = NULL) {
│ │ │ │ +
1525
│ │ │ │ +
1526 if (instance) {
│ │ │ │ +
1527 return instance->EvalPatchesVarying(
│ │ │ │ +
1528 srcBuffer, srcDesc,
│ │ │ │ +
1529 dstBuffer, dstDesc,
│ │ │ │ +
1530 duBuffer, duDesc,
│ │ │ │ +
1531 dvBuffer, dvDesc,
│ │ │ │ +
1532 duuBuffer, duuDesc,
│ │ │ │ +
1533 duvBuffer, duvDesc,
│ │ │ │ +
1534 dvvBuffer, dvvDesc,
│ │ │ │ +
1535 numPatchCoords, patchCoords,
│ │ │ │ +
1536 patchTable);
│ │ │ │ +
1537 } else {
│ │ │ │ +
1538 // Create an instance on demand (slow)
│ │ │ │ +
1539 (void)deviceContext; // unused
│ │ │ │ +
1540 instance = Create(srcDesc, dstDesc,
│ │ │ │ +
1541 duDesc, dvDesc,
│ │ │ │ +
1542 duuDesc, duvDesc, dvvDesc);
│ │ │ │ +
1543 if (instance) {
│ │ │ │ +
1544 bool r = instance->EvalPatchesVarying(
│ │ │ │ +
1545 srcBuffer, srcDesc,
│ │ │ │ +
1546 dstBuffer, dstDesc,
│ │ │ │ +
1547 duBuffer, duDesc,
│ │ │ │ +
1548 dvBuffer, dvDesc,
│ │ │ │ +
1549 duuBuffer, duuDesc,
│ │ │ │ +
1550 duvBuffer, duvDesc,
│ │ │ │ +
1551 dvvBuffer, dvvDesc,
│ │ │ │ +
1552 numPatchCoords, patchCoords,
│ │ │ │ +
1553 patchTable);
│ │ │ │ +
1554 delete instance;
│ │ │ │ +
1555 return r;
│ │ │ │ +
1556 }
│ │ │ │ +
1557 return false;
│ │ │ │ +
1558 }
│ │ │ │ +
1559 }
│ │ │ │ +
│ │ │ │ +
1560
│ │ │ │ +
1615 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1616 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1618 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1619 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1620 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1621 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1622 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
1623 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
1624 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
1625 int numPatchCoords,
│ │ │ │ +
1626 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1627 PATCH_TABLE *patchTable) const {
│ │ │ │ +
1628
│ │ │ │ +
1629 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
│ │ │ │ +
1630 dstBuffer->BindVBO(), dstDesc,
│ │ │ │ +
1631 duBuffer->BindVBO(), duDesc,
│ │ │ │ +
1632 dvBuffer->BindVBO(), dvDesc,
│ │ │ │ +
1633 duuBuffer->BindVBO(), duuDesc,
│ │ │ │ +
1634 duvBuffer->BindVBO(), duvDesc,
│ │ │ │ +
1635 dvvBuffer->BindVBO(), dvvDesc,
│ │ │ │ +
1636 numPatchCoords,
│ │ │ │ +
1637 patchCoords->BindVBO(),
│ │ │ │ +
1638 patchTable->GetVaryingPatchArrays(),
│ │ │ │ +
1639 patchTable->GetVaryingPatchIndexTextureBuffer(),
│ │ │ │ +
1640 patchTable->GetPatchParamTextureBuffer());
│ │ │ │ +
1641 }
│ │ │ │ +
│ │ │ │ +
1642
│ │ │ │ +
1677 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1678 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1680 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1681 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1682 int numPatchCoords,
│ │ │ │ +
1683 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1684 PATCH_TABLE *patchTable,
│ │ │ │ +
1685 int fvarChannel,
│ │ │ │ +
1686 GLXFBEvaluator const *instance,
│ │ │ │ +
1687 void * deviceContext = NULL) {
│ │ │ │ +
1688
│ │ │ │ +
1689 if (instance) {
│ │ │ │ +
1690 return instance->EvalPatchesFaceVarying(
│ │ │ │ +
1691 srcBuffer, srcDesc,
│ │ │ │ +
1692 dstBuffer, dstDesc,
│ │ │ │ +
1693 numPatchCoords, patchCoords,
│ │ │ │ +
1694 patchTable, fvarChannel);
│ │ │ │ +
1695 } else {
│ │ │ │ +
1696 // Create an instance on demand (slow)
│ │ │ │ +
1697 (void)deviceContext; // unused
│ │ │ │ +
1698 instance = Create(srcDesc, dstDesc,
│ │ │ │ + │ │ │ │ + │ │ │ │ +
1701 if (instance) {
│ │ │ │ +
1702 bool r = instance->EvalPatchesFaceVarying(
│ │ │ │ +
1703 srcBuffer, srcDesc,
│ │ │ │ +
1704 dstBuffer, dstDesc,
│ │ │ │ +
1705 numPatchCoords, patchCoords,
│ │ │ │ +
1706 patchTable, fvarChannel);
│ │ │ │ +
1707 delete instance;
│ │ │ │ +
1708 return r;
│ │ │ │ +
1709 }
│ │ │ │ +
1710 return false;
│ │ │ │ +
1711 }
│ │ │ │ +
1712 }
│ │ │ │ +
│ │ │ │ +
1713
│ │ │ │ +
1740 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1741 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1743 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1744 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1745 int numPatchCoords,
│ │ │ │ +
1746 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1747 PATCH_TABLE *patchTable,
│ │ │ │ +
1748 int fvarChannel = 0) const {
│ │ │ │ +
1749
│ │ │ │ +
1750 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
│ │ │ │ +
1751 dstBuffer->BindVBO(), dstDesc,
│ │ │ │ +
1752 0, BufferDescriptor(),
│ │ │ │ +
1753 0, BufferDescriptor(),
│ │ │ │ +
1754 numPatchCoords,
│ │ │ │ +
1755 patchCoords->BindVBO(),
│ │ │ │ +
1756 patchTable->GetFVarPatchArrays(fvarChannel),
│ │ │ │ +
1757 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),
│ │ │ │ +
1758 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));
│ │ │ │ +
1759 }
│ │ │ │ +
│ │ │ │ +
1760
│ │ │ │ +
1807 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1808 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1810 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1811 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1812 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1813 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1814 int numPatchCoords,
│ │ │ │ +
1815 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1816 PATCH_TABLE *patchTable,
│ │ │ │ +
1817 int fvarChannel,
│ │ │ │ +
1818 GLXFBEvaluator const *instance,
│ │ │ │ +
1819 void * deviceContext = NULL) {
│ │ │ │ +
1820
│ │ │ │ +
1821 if (instance) {
│ │ │ │ +
1822 return instance->EvalPatchesFaceVarying(
│ │ │ │ +
1823 srcBuffer, srcDesc,
│ │ │ │ +
1824 dstBuffer, dstDesc,
│ │ │ │ +
1825 duBuffer, duDesc,
│ │ │ │ +
1826 dvBuffer, dvDesc,
│ │ │ │ +
1827 numPatchCoords, patchCoords,
│ │ │ │ +
1828 patchTable, fvarChannel);
│ │ │ │ +
1829 } else {
│ │ │ │ +
1830 // Create an instance on demand (slow)
│ │ │ │ +
1831 (void)deviceContext; // unused
│ │ │ │ +
1832 instance = Create(srcDesc, dstDesc,
│ │ │ │ +
1833 duDesc, dvDesc);
│ │ │ │ +
1834 if (instance) {
│ │ │ │ +
1835 bool r = instance->EvalPatchesFaceVarying(
│ │ │ │ +
1836 srcBuffer, srcDesc,
│ │ │ │ +
1837 dstBuffer, dstDesc,
│ │ │ │ +
1838 duBuffer, duDesc,
│ │ │ │ +
1839 dvBuffer, dvDesc,
│ │ │ │ +
1840 numPatchCoords, patchCoords,
│ │ │ │ +
1841 patchTable, fvarChannel);
│ │ │ │ +
1842 delete instance;
│ │ │ │ +
1843 return r;
│ │ │ │ +
1844 }
│ │ │ │ +
1845 return false;
│ │ │ │ +
1846 }
│ │ │ │ +
1847 }
│ │ │ │ +
│ │ │ │ +
1848
│ │ │ │ +
1887 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1888 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1890 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1891 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1892 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1893 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1894 int numPatchCoords,
│ │ │ │ +
1895 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1896 PATCH_TABLE *patchTable,
│ │ │ │ +
1897 int fvarChannel = 0) const {
│ │ │ │ +
1898
│ │ │ │ +
1899 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
│ │ │ │ +
1900 dstBuffer->BindVBO(), dstDesc,
│ │ │ │ +
1901 duBuffer->BindVBO(), duDesc,
│ │ │ │ +
1902 dvBuffer->BindVBO(), dvDesc,
│ │ │ │ +
1903 numPatchCoords,
│ │ │ │ +
1904 patchCoords->BindVBO(),
│ │ │ │ +
1905 patchTable->GetFVarPatchArrays(fvarChannel),
│ │ │ │ +
1906 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),
│ │ │ │ +
1907 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));
│ │ │ │ +
1908 }
│ │ │ │ +
│ │ │ │ +
1909
│ │ │ │ +
1974 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1975 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1977 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1978 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1979 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1980 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1981 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
1982 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
1983 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
1984 int numPatchCoords,
│ │ │ │ +
1985 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1986 PATCH_TABLE *patchTable,
│ │ │ │ +
1987 int fvarChannel,
│ │ │ │ +
1988 GLXFBEvaluator const *instance,
│ │ │ │ +
1989 void * deviceContext = NULL) {
│ │ │ │ +
1990
│ │ │ │ +
1991 if (instance) {
│ │ │ │ +
1992 return instance->EvalPatchesFaceVarying(
│ │ │ │ +
1993 srcBuffer, srcDesc,
│ │ │ │ +
1994 dstBuffer, dstDesc,
│ │ │ │ +
1995 duBuffer, duDesc,
│ │ │ │ +
1996 dvBuffer, dvDesc,
│ │ │ │ +
1997 duuBuffer, duuDesc,
│ │ │ │ +
1998 duvBuffer, duvDesc,
│ │ │ │ +
1999 dvvBuffer, dvvDesc,
│ │ │ │ +
2000 numPatchCoords, patchCoords,
│ │ │ │ +
2001 patchTable, fvarChannel);
│ │ │ │ +
2002 } else {
│ │ │ │ +
2003 // Create an instance on demand (slow)
│ │ │ │ +
2004 (void)deviceContext; // unused
│ │ │ │ +
2005 instance = Create(srcDesc, dstDesc,
│ │ │ │ +
2006 duDesc, dvDesc,
│ │ │ │ +
2007 duuDesc, duvDesc, dvvDesc);
│ │ │ │ +
2008 if (instance) {
│ │ │ │ +
2009 bool r = instance->EvalPatchesFaceVarying(
│ │ │ │ +
2010 srcBuffer, srcDesc,
│ │ │ │ +
2011 dstBuffer, dstDesc,
│ │ │ │ +
2012 duBuffer, duDesc,
│ │ │ │ +
2013 dvBuffer, dvDesc,
│ │ │ │ +
2014 duuBuffer, duuDesc,
│ │ │ │ +
2015 duvBuffer, duvDesc,
│ │ │ │ +
2016 dvvBuffer, dvvDesc,
│ │ │ │ +
2017 numPatchCoords, patchCoords,
│ │ │ │ +
2018 patchTable, fvarChannel);
│ │ │ │ +
2019 delete instance;
│ │ │ │ +
2020 return r;
│ │ │ │ +
2021 }
│ │ │ │ +
2022 return false;
│ │ │ │ +
2023 }
│ │ │ │ +
2024 }
│ │ │ │ +
│ │ │ │ +
2025
│ │ │ │ +
2082 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
2083 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
2085 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
2086 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
2087 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
2088 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
2089 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
2090 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
2091 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
2092 int numPatchCoords,
│ │ │ │ +
2093 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
2094 PATCH_TABLE *patchTable,
│ │ │ │ +
2095 int fvarChannel = 0) const {
│ │ │ │ +
2096
│ │ │ │ +
2097 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
│ │ │ │ +
2098 dstBuffer->BindVBO(), dstDesc,
│ │ │ │ +
2099 duBuffer->BindVBO(), duDesc,
│ │ │ │ +
2100 dvBuffer->BindVBO(), dvDesc,
│ │ │ │ +
2101 duuBuffer->BindVBO(), duuDesc,
│ │ │ │ +
2102 duvBuffer->BindVBO(), duvDesc,
│ │ │ │ +
2103 dvvBuffer->BindVBO(), dvvDesc,
│ │ │ │ +
2104 numPatchCoords,
│ │ │ │ +
2105 patchCoords->BindVBO(),
│ │ │ │ +
2106 patchTable->GetFVarPatchArrays(fvarChannel),
│ │ │ │ +
2107 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),
│ │ │ │ +
2108 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));
│ │ │ │ +
2109 }
│ │ │ │ +
│ │ │ │ +
2110
│ │ │ │ +
2116
│ │ │ │ +
2119 bool Compile(BufferDescriptor const &srcDesc,
│ │ │ │ +
2120 BufferDescriptor const &dstDesc,
│ │ │ │ +
2121 BufferDescriptor const &duDesc = BufferDescriptor(),
│ │ │ │ +
2122 BufferDescriptor const &dvDesc = BufferDescriptor(),
│ │ │ │ +
2123 BufferDescriptor const &duuDesc = BufferDescriptor(),
│ │ │ │ +
2124 BufferDescriptor const &duvDesc = BufferDescriptor(),
│ │ │ │ +
2125 BufferDescriptor const &dvvDesc = BufferDescriptor());
│ │ │ │ +
2126
│ │ │ │ +
2128 static void Synchronize(void *kernel);
│ │ │ │ +
2129
│ │ │ │ +
2130private:
│ │ │ │ +
2131 GLuint _srcBufferTexture;
│ │ │ │ +
2132 GLuint _patchArraysUBO;
│ │ │ │ +
2133 bool _interleavedDerivativeBuffers;
│ │ │ │ +
2134
│ │ │ │ +
2135 struct _StencilKernel {
│ │ │ │ +
2136 _StencilKernel();
│ │ │ │ +
2137 ~_StencilKernel();
│ │ │ │ +
2138 bool Compile(BufferDescriptor const &srcDesc,
│ │ │ │ +
2139 BufferDescriptor const &dstDesc,
│ │ │ │ +
2140 BufferDescriptor const &duDesc,
│ │ │ │ +
2141 BufferDescriptor const &dvDesc,
│ │ │ │ +
2142 BufferDescriptor const &duuDesc,
│ │ │ │ +
2143 BufferDescriptor const &duvDesc,
│ │ │ │ +
2144 BufferDescriptor const &dvvDesc,
│ │ │ │ +
2145 bool interleavedDerivativeBuffers);
│ │ │ │ +
2146 GLuint program;
│ │ │ │ +
2147 GLint uniformSrcBufferTexture;
│ │ │ │ +
2148 GLint uniformSrcOffset; // src buffer offset (in elements)
│ │ │ │ +
2149
│ │ │ │ +
2150 GLint uniformSizesTexture;
│ │ │ │ +
2151 GLint uniformOffsetsTexture;
│ │ │ │ +
2152 GLint uniformIndicesTexture;
│ │ │ │ +
2153 GLint uniformWeightsTexture;
│ │ │ │ +
2154 GLint uniformDuWeightsTexture;
│ │ │ │ +
2155 GLint uniformDvWeightsTexture;
│ │ │ │ +
2156 GLint uniformDuuWeightsTexture;
│ │ │ │ +
2157 GLint uniformDuvWeightsTexture;
│ │ │ │ +
2158 GLint uniformDvvWeightsTexture;
│ │ │ │ +
2159 GLint uniformStart; // range
│ │ │ │ +
2160 GLint uniformEnd;
│ │ │ │ +
2161 } _stencilKernel;
│ │ │ │ +
2162
│ │ │ │ +
2163 struct _PatchKernel {
│ │ │ │ +
2164 _PatchKernel();
│ │ │ │ +
2165 ~_PatchKernel();
│ │ │ │ +
2166 bool Compile(BufferDescriptor const &srcDesc,
│ │ │ │ +
2167 BufferDescriptor const &dstDesc,
│ │ │ │ +
2168 BufferDescriptor const &duDesc,
│ │ │ │ +
2169 BufferDescriptor const &dvDesc,
│ │ │ │ +
2170 BufferDescriptor const &duuDesc,
│ │ │ │ +
2171 BufferDescriptor const &duvDesc,
│ │ │ │ +
2172 BufferDescriptor const &dvvDesc,
│ │ │ │ +
2173 bool interleavedDerivativeBuffers);
│ │ │ │ +
2174 GLuint program;
│ │ │ │ +
2175 GLint uniformSrcBufferTexture;
│ │ │ │ +
2176 GLint uniformSrcOffset; // src buffer offset (in elements)
│ │ │ │ +
2177
│ │ │ │ +
2178 GLint uniformPatchArraysUBOBinding;
│ │ │ │ +
2179 GLint uniformPatchParamTexture;
│ │ │ │ +
2180 GLint uniformPatchIndexTexture;
│ │ │ │ +
2181 } _patchKernel;
│ │ │ │ +
2182
│ │ │ │ +
2183};
│ │ │ │
│ │ │ │ -
73
│ │ │ │ -
74} // end namespace Osd
│ │ │ │ -
75
│ │ │ │ -
76} // end namespace OPENSUBDIV_VERSION
│ │ │ │ -
77using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
78
│ │ │ │ -
79} // end namespace OpenSubdiv
│ │ │ │ -
80
│ │ │ │ -
81#endif // OPENSUBDIV3_OSD_GLSL_PATCH_SHADER_SOURCE
│ │ │ │ +
2184
│ │ │ │ +
2185} // end namespace Osd
│ │ │ │ +
2186
│ │ │ │ +
2187} // end namespace OPENSUBDIV_VERSION
│ │ │ │ +
2188using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
2189
│ │ │ │ +
2190} // end namespace OpenSubdiv
│ │ │ │ +
2191
│ │ │ │ +
2192
│ │ │ │ +
2193#endif // OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H
│ │ │ │ │ │ │ │ - │ │ │ │ -
Provides shader source which can be used by client code.
│ │ │ │ -
static std::string GetVertexShaderSource(Far::PatchDescriptor::Type type)
│ │ │ │ -
static std::string GetPatchDrawingShaderSource()
Returns shader source which can be used while drawing piecewise parametric patches resulting from sub...
│ │ │ │ -
static std::string GetTessEvalShaderSource(Far::PatchDescriptor::Type type)
│ │ │ │ -
static std::string GetPatchBasisShaderSource()
Returns shader source which can be used to evaluate position and first and second derivatives on piec...
│ │ │ │ - │ │ │ │ -
static std::string GetTessControlShaderSource(Far::PatchDescriptor::Type type)
│ │ │ │ +
std::vector< PatchArray > PatchArrayVector
Definition types.h:132
│ │ │ │ +
Stencil table class wrapping the template for compatibility.
│ │ │ │ +
Limit stencil table class wrapping the template for compatibility.
│ │ │ │ +
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ + │ │ │ │ + │ │ │ │ +
static GLStencilTableTBO * Create(Far::StencilTable const *stencilTable, void *deviceContext=NULL)
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
GLStencilTableTBO(Far::StencilTable const *stencilTable)
│ │ │ │ +
GLStencilTableTBO(Far::LimitStencilTable const *limitStencilTable)
│ │ │ │ + │ │ │ │ +
static GLStencilTableTBO * Create(Far::LimitStencilTable const *limitStencilTable, void *deviceContext=NULL)
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
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 ...
│ │ │ │ +
static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, bool interleavedDerivativeBuffers=false)
│ │ │ │ +
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.
│ │ │ │ +
GLXFBEvaluator(bool interleavedDerivativeBuffers=false)
Constructor.
│ │ │ │ +
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.
│ │ │ │ + │ │ │ │ +
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
│ │ │ │ +
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...
│ │ │ │ +
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...
│ │ │ │ +
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)
│ │ │ │ +
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.
│ │ │ │ +
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...
│ │ │ │ +
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 ...
│ │ │ │ +
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...
│ │ │ │ +
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 ...
│ │ │ │ +
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.
│ │ │ │ +
static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, DEVICE_CONTEXT deviceContext)
Generic creator template.
│ │ │ │ +
static void Synchronize(void *kernel)
Wait the dispatched kernel finishes.
│ │ │ │ +
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 ...
│ │ │ │ +
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 ...
│ │ │ │ +
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 ...
│ │ │ │ +
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 ...
│ │ │ │ +
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 ...
│ │ │ │ +
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 ...
│ │ │ │ +
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 ...
│ │ │ │ +
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...
│ │ │ │ +
bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable) const
Generic stencil function.
│ │ │ │ +
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
│ │ │ │ +
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.
│ │ │ │ +
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 ...
│ │ │ │ +
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 ...
│ │ │ │ +
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...
│ │ │ │ +
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 ...
│ │ │ │ +
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...
│ │ │ │ +
~GLXFBEvaluator()
Destructor. note that the GL context must be made current.
│ │ │ │ +
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())
│ │ │ │ +
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 ...
│ │ │ │ +
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 ...
│ │ │ │ +
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 ...
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,12 +1,12 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -glslPatchShaderSource.h │ │ │ │ │ +glXFBEvaluator.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ 2// Copyright 2015 Pixar │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ @@ -24,83 +24,1448 @@ │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ 24 │ │ │ │ │ -25#ifndef OPENSUBDIV3_OSD_GLSL_PATCH_SHADER_SOURCE_H │ │ │ │ │ -26#define OPENSUBDIV3_OSD_GLSL_PATCH_SHADER_SOURCE_H │ │ │ │ │ +25#ifndef OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H │ │ │ │ │ +26#define OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H │ │ │ │ │ 27 │ │ │ │ │ 28#include "../version.h" │ │ │ │ │ 29 │ │ │ │ │ -30#include "../far/patchDescriptor.h" │ │ │ │ │ -31 │ │ │ │ │ -32#include │ │ │ │ │ +30#include "../osd/opengl.h" │ │ │ │ │ +31#include "../osd/types.h" │ │ │ │ │ +32#include "../osd/bufferDescriptor.h" │ │ │ │ │ 33 │ │ │ │ │ 34namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ 35namespace OPENSUBDIV_VERSION { │ │ │ │ │ 36 │ │ │ │ │ -37namespace Osd { │ │ │ │ │ -38 │ │ │ │ │ -_4_0class _G_L_S_L_P_a_t_c_h_S_h_a_d_e_r_S_o_u_r_c_e { │ │ │ │ │ -41public: │ │ │ │ │ -_4_5 static std::string _G_e_t_P_a_t_c_h_B_a_s_i_s_S_h_a_d_e_r_S_o_u_r_c_e(); │ │ │ │ │ -46 │ │ │ │ │ -_5_0 static std::string _G_e_t_P_a_t_c_h_D_r_a_w_i_n_g_S_h_a_d_e_r_S_o_u_r_c_e(); │ │ │ │ │ -51 │ │ │ │ │ +37namespace Far { │ │ │ │ │ +38 class PatchTable; │ │ │ │ │ +39 class StencilTable; │ │ │ │ │ +40 class LimitStencilTable; │ │ │ │ │ +41} │ │ │ │ │ +42 │ │ │ │ │ +43namespace Osd { │ │ │ │ │ +44 │ │ │ │ │ +_5_2class _G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O { │ │ │ │ │ +53public: │ │ │ │ │ +_5_4 static _G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O *_C_r_e_a_t_e( │ │ │ │ │ +55 _F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e const *stencilTable, void *deviceContext = NULL) { │ │ │ │ │ +56 (void)deviceContext; // unused │ │ │ │ │ +57 return new _G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O(stencilTable); │ │ │ │ │ +58 } │ │ │ │ │ 59 │ │ │ │ │ -_6_0 static std::string _G_e_t_C_o_m_m_o_n_S_h_a_d_e_r_S_o_u_r_c_e(); │ │ │ │ │ -61 │ │ │ │ │ -_6_2 static std::string _G_e_t_V_e_r_t_e_x_S_h_a_d_e_r_S_o_u_r_c_e( │ │ │ │ │ -63 _F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_:_:_T_y_p_e type); │ │ │ │ │ -64 │ │ │ │ │ -_6_5 static std::string _G_e_t_T_e_s_s_C_o_n_t_r_o_l_S_h_a_d_e_r_S_o_u_r_c_e( │ │ │ │ │ -66 _F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_:_:_T_y_p_e type); │ │ │ │ │ -67 │ │ │ │ │ -_6_8 static std::string _G_e_t_T_e_s_s_E_v_a_l_S_h_a_d_e_r_S_o_u_r_c_e( │ │ │ │ │ -69 _F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_:_:_T_y_p_e type); │ │ │ │ │ +_6_0 static _G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O *_C_r_e_a_t_e( │ │ │ │ │ +61 _F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e const *limitStencilTable, │ │ │ │ │ +62 void *deviceContext = NULL) { │ │ │ │ │ +63 (void)deviceContext; // unused │ │ │ │ │ +64 return new _G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O(limitStencilTable); │ │ │ │ │ +65 } │ │ │ │ │ +66 │ │ │ │ │ +_6_7 explicit _G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O(_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e const *stencilTable); │ │ │ │ │ +_6_8 explicit _G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O(_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e const *limitStencilTable); │ │ │ │ │ +_6_9 _~_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O(); │ │ │ │ │ 70 │ │ │ │ │ -72}; │ │ │ │ │ -73 │ │ │ │ │ -74} // end namespace Osd │ │ │ │ │ -75 │ │ │ │ │ -76} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ -77using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -78 │ │ │ │ │ -79} // end namespace OpenSubdiv │ │ │ │ │ -80 │ │ │ │ │ -81#endif // OPENSUBDIV3_OSD_GLSL_PATCH_SHADER_SOURCE │ │ │ │ │ +71 // interfaces needed for GLSLTransformFeedbackKernel │ │ │ │ │ +_7_2 GLuint _G_e_t_S_i_z_e_s_T_e_x_t_u_r_e() const { return _sizes; } │ │ │ │ │ +_7_3 GLuint _G_e_t_O_f_f_s_e_t_s_T_e_x_t_u_r_e() const { return _offsets; } │ │ │ │ │ +_7_4 GLuint _G_e_t_I_n_d_i_c_e_s_T_e_x_t_u_r_e() const { return _indices; } │ │ │ │ │ +_7_5 GLuint _G_e_t_W_e_i_g_h_t_s_T_e_x_t_u_r_e() const { return _weights; } │ │ │ │ │ +_7_6 GLuint _G_e_t_D_u_W_e_i_g_h_t_s_T_e_x_t_u_r_e() const { return _duWeights; } │ │ │ │ │ +_7_7 GLuint _G_e_t_D_v_W_e_i_g_h_t_s_T_e_x_t_u_r_e() const { return _dvWeights; } │ │ │ │ │ +_7_8 GLuint _G_e_t_D_u_u_W_e_i_g_h_t_s_T_e_x_t_u_r_e() const { return _duuWeights; } │ │ │ │ │ +_7_9 GLuint _G_e_t_D_u_v_W_e_i_g_h_t_s_T_e_x_t_u_r_e() const { return _duvWeights; } │ │ │ │ │ +_8_0 GLuint _G_e_t_D_v_v_W_e_i_g_h_t_s_T_e_x_t_u_r_e() const { return _dvvWeights; } │ │ │ │ │ +_8_1 int _G_e_t_N_u_m_S_t_e_n_c_i_l_s() const { return _numStencils; } │ │ │ │ │ +82 │ │ │ │ │ +83private: │ │ │ │ │ +84 GLuint _sizes; │ │ │ │ │ +85 GLuint _offsets; │ │ │ │ │ +86 GLuint _indices; │ │ │ │ │ +87 GLuint _weights; │ │ │ │ │ +88 GLuint _duWeights; │ │ │ │ │ +89 GLuint _dvWeights; │ │ │ │ │ +90 GLuint _duuWeights; │ │ │ │ │ +91 GLuint _duvWeights; │ │ │ │ │ +92 GLuint _dvvWeights; │ │ │ │ │ +93 int _numStencils; │ │ │ │ │ +94}; │ │ │ │ │ +95 │ │ │ │ │ +96// -------------------------------------------------------------------------- │ │ │ │ │ +- │ │ │ │ │ +97 │ │ │ │ │ +_9_8class _G_L_X_F_B_E_v_a_l_u_a_t_o_r { │ │ │ │ │ +99public: │ │ │ │ │ +_1_0_0 typedef bool _I_n_s_t_a_n_t_i_a_t_a_b_l_e; │ │ │ │ │ +101 │ │ │ │ │ +103 template │ │ │ │ │ +_1_0_4 static _G_L_X_F_B_E_v_a_l_u_a_t_o_r *_C_r_e_a_t_e(_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +105 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +106 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +107 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +108 DEVICE_CONTEXT deviceContext) { │ │ │ │ │ +109 bool interleavedDerivativeBuffers = deviceContext │ │ │ │ │ +110 ? deviceContext->AreInterleavedDerivativeBuffers() │ │ │ │ │ +111 : false; │ │ │ │ │ +112 return _C_r_e_a_t_e(srcDesc, dstDesc, duDesc, dvDesc, │ │ │ │ │ +113 interleavedDerivativeBuffers); │ │ │ │ │ +114 } │ │ │ │ │ +115 │ │ │ │ │ +_1_1_7 static _G_L_X_F_B_E_v_a_l_u_a_t_o_r *_C_r_e_a_t_e(_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +118 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +119 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +120 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +121 void * deviceContext) { │ │ │ │ │ +122 (void)deviceContext; // not used │ │ │ │ │ +123 return _C_r_e_a_t_e(srcDesc, dstDesc, duDesc, dvDesc); │ │ │ │ │ +124 } │ │ │ │ │ +125 │ │ │ │ │ +_1_2_6 static _G_L_X_F_B_E_v_a_l_u_a_t_o_r * _C_r_e_a_t_e(_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +127 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +128 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +129 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +130 bool interleavedDerivativeBuffers = false) { │ │ │ │ │ +131 _G_L_X_F_B_E_v_a_l_u_a_t_o_r *instance = new _G_L_X_F_B_E_v_a_l_u_a_t_o_r │ │ │ │ │ +(interleavedDerivativeBuffers); │ │ │ │ │ +132 if (instance->_C_o_m_p_i_l_e(srcDesc, dstDesc, duDesc, dvDesc)) │ │ │ │ │ +133 return instance; │ │ │ │ │ +134 delete instance; │ │ │ │ │ +135 return NULL; │ │ │ │ │ +136 } │ │ │ │ │ +137 │ │ │ │ │ +139 template │ │ │ │ │ +_1_4_0 static _G_L_X_F_B_E_v_a_l_u_a_t_o_r *_C_r_e_a_t_e(_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +141 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +142 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +143 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +144 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +145 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +146 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +147 DEVICE_CONTEXT deviceContext) { │ │ │ │ │ +148 bool interleavedDerivativeBuffers = deviceContext │ │ │ │ │ +149 ? deviceContext->AreInterleavedDerivativeBuffers() │ │ │ │ │ +150 : false; │ │ │ │ │ +151 return _C_r_e_a_t_e(srcDesc, dstDesc, duDesc, dvDesc, │ │ │ │ │ +152 duuDesc, duvDesc, dvvDesc, │ │ │ │ │ +153 interleavedDerivativeBuffers); │ │ │ │ │ +154 } │ │ │ │ │ +155 │ │ │ │ │ +_1_5_7 static _G_L_X_F_B_E_v_a_l_u_a_t_o_r *_C_r_e_a_t_e(_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +158 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +159 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +160 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +161 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +162 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +163 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +164 void * deviceContext) { │ │ │ │ │ +165 (void)deviceContext; // not used │ │ │ │ │ +166 return _C_r_e_a_t_e(srcDesc, dstDesc, duDesc, dvDesc, │ │ │ │ │ +167 duuDesc, duvDesc, dvvDesc); │ │ │ │ │ +168 } │ │ │ │ │ +169 │ │ │ │ │ +_1_7_0 static _G_L_X_F_B_E_v_a_l_u_a_t_o_r * _C_r_e_a_t_e(_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +171 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +172 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +173 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +174 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +175 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +176 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +177 bool interleavedDerivativeBuffers = false) { │ │ │ │ │ +178 _G_L_X_F_B_E_v_a_l_u_a_t_o_r *instance = new _G_L_X_F_B_E_v_a_l_u_a_t_o_r │ │ │ │ │ +(interleavedDerivativeBuffers); │ │ │ │ │ +179 if (instance->_C_o_m_p_i_l_e(srcDesc, dstDesc, duDesc, dvDesc, │ │ │ │ │ +180 duuDesc, duvDesc, dvvDesc)) │ │ │ │ │ +181 return instance; │ │ │ │ │ +182 delete instance; │ │ │ │ │ +183 return NULL; │ │ │ │ │ +184 } │ │ │ │ │ +185 │ │ │ │ │ +_1_9_9 _G_L_X_F_B_E_v_a_l_u_a_t_o_r(bool interleavedDerivativeBuffers = false); │ │ │ │ │ +200 │ │ │ │ │ +_2_0_2 _~_G_L_X_F_B_E_v_a_l_u_a_t_o_r(); │ │ │ │ │ +203 │ │ │ │ │ +209 │ │ │ │ │ +237 template │ │ │ │ │ +_2_3_8 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ +239 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +240 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +241 STENCIL_TABLE const *stencilTable, │ │ │ │ │ +242 _G_L_X_F_B_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +243 void * deviceContext = NULL) { │ │ │ │ │ +244 │ │ │ │ │ +245 if (instance) { │ │ │ │ │ +246 return instance->_E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer, srcDesc, │ │ │ │ │ +247 dstBuffer, dstDesc, │ │ │ │ │ +248 stencilTable); │ │ │ │ │ +249 } else { │ │ │ │ │ +250 // Create an instance on demand (slow) │ │ │ │ │ +251 (void)deviceContext; // unused │ │ │ │ │ +252 instance = _C_r_e_a_t_e(srcDesc, dstDesc, │ │ │ │ │ +253 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +254 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r()); │ │ │ │ │ +255 if (instance) { │ │ │ │ │ +256 bool r = instance->_E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer, srcDesc, │ │ │ │ │ +257 dstBuffer, dstDesc, │ │ │ │ │ +258 stencilTable); │ │ │ │ │ +259 delete instance; │ │ │ │ │ +260 return r; │ │ │ │ │ +261 } │ │ │ │ │ +262 return false; │ │ │ │ │ +263 } │ │ │ │ │ +264 } │ │ │ │ │ +265 │ │ │ │ │ +305 template │ │ │ │ │ +_3_0_6 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ +307 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +308 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +309 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +310 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +311 STENCIL_TABLE const *stencilTable, │ │ │ │ │ +312 _G_L_X_F_B_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +313 void * deviceContext = NULL) { │ │ │ │ │ +314 │ │ │ │ │ +315 if (instance) { │ │ │ │ │ +316 return instance->_E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer, srcDesc, │ │ │ │ │ +317 dstBuffer, dstDesc, │ │ │ │ │ +318 duBuffer, duDesc, │ │ │ │ │ +319 dvBuffer, dvDesc, │ │ │ │ │ +320 stencilTable); │ │ │ │ │ +321 } else { │ │ │ │ │ +322 // Create an instance on demand (slow) │ │ │ │ │ +323 (void)deviceContext; // unused │ │ │ │ │ +324 instance = _C_r_e_a_t_e(srcDesc, dstDesc, duDesc, dvDesc); │ │ │ │ │ +325 if (instance) { │ │ │ │ │ +326 bool r = instance->_E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer, srcDesc, │ │ │ │ │ +327 dstBuffer, dstDesc, │ │ │ │ │ +328 duBuffer, duDesc, │ │ │ │ │ +329 dvBuffer, dvDesc, │ │ │ │ │ +330 stencilTable); │ │ │ │ │ +331 delete instance; │ │ │ │ │ +332 return r; │ │ │ │ │ +333 } │ │ │ │ │ +334 return false; │ │ │ │ │ +335 } │ │ │ │ │ +336 } │ │ │ │ │ +337 │ │ │ │ │ +395 template │ │ │ │ │ +_3_9_6 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ +397 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +398 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +399 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +400 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +401 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +402 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +403 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +404 STENCIL_TABLE const *stencilTable, │ │ │ │ │ +405 _G_L_X_F_B_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +406 void * deviceContext = NULL) { │ │ │ │ │ +407 │ │ │ │ │ +408 if (instance) { │ │ │ │ │ +409 return instance->_E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer, srcDesc, │ │ │ │ │ +410 dstBuffer, dstDesc, │ │ │ │ │ +411 duBuffer, duDesc, │ │ │ │ │ +412 dvBuffer, dvDesc, │ │ │ │ │ +413 duuBuffer, duuDesc, │ │ │ │ │ +414 duvBuffer, duvDesc, │ │ │ │ │ +415 dvvBuffer, dvvDesc, │ │ │ │ │ +416 stencilTable); │ │ │ │ │ +417 } else { │ │ │ │ │ +418 // Create an instance on demand (slow) │ │ │ │ │ +419 (void)deviceContext; // unused │ │ │ │ │ +420 instance = _C_r_e_a_t_e(srcDesc, dstDesc, │ │ │ │ │ +421 duDesc, dvDesc, │ │ │ │ │ +422 duuDesc, duvDesc, dvvDesc); │ │ │ │ │ +423 if (instance) { │ │ │ │ │ +424 bool r = instance->_E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer, srcDesc, │ │ │ │ │ +425 dstBuffer, dstDesc, │ │ │ │ │ +426 duBuffer, duDesc, │ │ │ │ │ +427 dvBuffer, dvDesc, │ │ │ │ │ +428 duuBuffer, duuDesc, │ │ │ │ │ +429 duvBuffer, duvDesc, │ │ │ │ │ +430 dvvBuffer, dvvDesc, │ │ │ │ │ +431 stencilTable); │ │ │ │ │ +432 delete instance; │ │ │ │ │ +433 return r; │ │ │ │ │ +434 } │ │ │ │ │ +435 return false; │ │ │ │ │ +436 } │ │ │ │ │ +437 } │ │ │ │ │ +438 │ │ │ │ │ +456 template │ │ │ │ │ +_4_5_7 bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ +458 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +459 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +460 STENCIL_TABLE const *stencilTable) const { │ │ │ │ │ +461 │ │ │ │ │ +462 return _E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer->BindVBO(), srcDesc, │ │ │ │ │ +463 dstBuffer->BindVBO(), dstDesc, │ │ │ │ │ +464 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +465 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +466 stencilTable->GetSizesTexture(), │ │ │ │ │ +467 stencilTable->GetOffsetsTexture(), │ │ │ │ │ +468 stencilTable->GetIndicesTexture(), │ │ │ │ │ +469 stencilTable->GetWeightsTexture(), │ │ │ │ │ +470 0, │ │ │ │ │ +471 0, │ │ │ │ │ +472 /* start = */ 0, │ │ │ │ │ +473 /* end = */ stencilTable->GetNumStencils()); │ │ │ │ │ +474 } │ │ │ │ │ +475 │ │ │ │ │ +505 template │ │ │ │ │ +_5_0_6 bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ +507 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +508 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +509 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +510 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +511 STENCIL_TABLE const *stencilTable) const { │ │ │ │ │ +512 │ │ │ │ │ +513 return _E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer->BindVBO(), srcDesc, │ │ │ │ │ +514 dstBuffer->BindVBO(), dstDesc, │ │ │ │ │ +515 duBuffer->BindVBO(), duDesc, │ │ │ │ │ +516 dvBuffer->BindVBO(), dvDesc, │ │ │ │ │ +517 stencilTable->GetSizesTexture(), │ │ │ │ │ +518 stencilTable->GetOffsetsTexture(), │ │ │ │ │ +519 stencilTable->GetIndicesTexture(), │ │ │ │ │ +520 stencilTable->GetWeightsTexture(), │ │ │ │ │ +521 stencilTable->GetDuWeightsTexture(), │ │ │ │ │ +522 stencilTable->GetDvWeightsTexture(), │ │ │ │ │ +523 /* start = */ 0, │ │ │ │ │ +524 /* end = */ stencilTable->GetNumStencils()); │ │ │ │ │ +525 } │ │ │ │ │ +526 │ │ │ │ │ +574 template │ │ │ │ │ +_5_7_5 bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ +576 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +577 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +578 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +579 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +580 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +581 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +582 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +583 STENCIL_TABLE const *stencilTable) const { │ │ │ │ │ +584 │ │ │ │ │ +585 return _E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer->BindVBO(), srcDesc, │ │ │ │ │ +586 dstBuffer->BindVBO(), dstDesc, │ │ │ │ │ +587 duBuffer->BindVBO(), duDesc, │ │ │ │ │ +588 dvBuffer->BindVBO(), dvDesc, │ │ │ │ │ +589 duuBuffer->BindVBO(), duuDesc, │ │ │ │ │ +590 duvBuffer->BindVBO(), duvDesc, │ │ │ │ │ +591 dvvBuffer->BindVBO(), dvvDesc, │ │ │ │ │ +592 stencilTable->GetSizesTexture(), │ │ │ │ │ +593 stencilTable->GetOffsetsTexture(), │ │ │ │ │ +594 stencilTable->GetIndicesTexture(), │ │ │ │ │ +595 stencilTable->GetWeightsTexture(), │ │ │ │ │ +596 stencilTable->GetDuWeightsTexture(), │ │ │ │ │ +597 stencilTable->GetDvWeightsTexture(), │ │ │ │ │ +598 stencilTable->GetDuuWeightsTexture(), │ │ │ │ │ +599 stencilTable->GetDuvWeightsTexture(), │ │ │ │ │ +600 stencilTable->GetDvvWeightsTexture(), │ │ │ │ │ +601 /* start = */ 0, │ │ │ │ │ +602 /* end = */ stencilTable->GetNumStencils()); │ │ │ │ │ +603 } │ │ │ │ │ +604 │ │ │ │ │ +_6_4_0 bool _E_v_a_l_S_t_e_n_c_i_l_s(GLuint srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +641 GLuint dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +642 GLuint duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +643 GLuint dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +644 GLuint sizesBuffer, │ │ │ │ │ +645 GLuint offsetsBuffer, │ │ │ │ │ +646 GLuint indicesBuffer, │ │ │ │ │ +647 GLuint weightsBuffer, │ │ │ │ │ +648 GLuint duWeightsBuffer, │ │ │ │ │ +649 GLuint dvWeightsBuffer, │ │ │ │ │ +650 int start, │ │ │ │ │ +651 int end) const; │ │ │ │ │ +652 │ │ │ │ │ +_7_0_6 bool _E_v_a_l_S_t_e_n_c_i_l_s(GLuint srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +707 GLuint dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +708 GLuint duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +709 GLuint dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +710 GLuint duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +711 GLuint duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +712 GLuint dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +713 GLuint sizesBuffer, │ │ │ │ │ +714 GLuint offsetsBuffer, │ │ │ │ │ +715 GLuint indicesBuffer, │ │ │ │ │ +716 GLuint weightsBuffer, │ │ │ │ │ +717 GLuint duWeightsBuffer, │ │ │ │ │ +718 GLuint dvWeightsBuffer, │ │ │ │ │ +719 GLuint duuWeightsBuffer, │ │ │ │ │ +720 GLuint duvWeightsBuffer, │ │ │ │ │ +721 GLuint dvvWeightsBuffer, │ │ │ │ │ +722 int start, │ │ │ │ │ +723 int end) const; │ │ │ │ │ +724 │ │ │ │ │ +730 │ │ │ │ │ +763 template │ │ │ │ │ +_7_6_5 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ +766 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +767 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +768 int numPatchCoords, │ │ │ │ │ +769 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +770 PATCH_TABLE *patchTable, │ │ │ │ │ +771 _G_L_X_F_B_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +772 void * deviceContext = NULL) { │ │ │ │ │ +773 │ │ │ │ │ +774 if (instance) { │ │ │ │ │ +775 return instance->_E_v_a_l_P_a_t_c_h_e_s(srcBuffer, srcDesc, │ │ │ │ │ +776 dstBuffer, dstDesc, │ │ │ │ │ +777 numPatchCoords, patchCoords, │ │ │ │ │ +778 patchTable); │ │ │ │ │ +779 } else { │ │ │ │ │ +780 // Create an instance on demand (slow) │ │ │ │ │ +781 (void)deviceContext; // unused │ │ │ │ │ +782 instance = _C_r_e_a_t_e(srcDesc, dstDesc, │ │ │ │ │ +783 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +784 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r()); │ │ │ │ │ +785 if (instance) { │ │ │ │ │ +786 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s(srcBuffer, srcDesc, │ │ │ │ │ +787 dstBuffer, dstDesc, │ │ │ │ │ +788 numPatchCoords, patchCoords, │ │ │ │ │ +789 patchTable); │ │ │ │ │ +790 delete instance; │ │ │ │ │ +791 return r; │ │ │ │ │ +792 } │ │ │ │ │ +793 return false; │ │ │ │ │ +794 } │ │ │ │ │ +795 } │ │ │ │ │ +796 │ │ │ │ │ +841 template │ │ │ │ │ +_8_4_3 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ +844 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +845 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +846 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +847 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +848 int numPatchCoords, │ │ │ │ │ +849 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +850 PATCH_TABLE *patchTable, │ │ │ │ │ +851 _G_L_X_F_B_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +852 void * deviceContext = NULL) { │ │ │ │ │ +853 │ │ │ │ │ +854 if (instance) { │ │ │ │ │ +855 return instance->_E_v_a_l_P_a_t_c_h_e_s(srcBuffer, srcDesc, │ │ │ │ │ +856 dstBuffer, dstDesc, │ │ │ │ │ +857 duBuffer, duDesc, │ │ │ │ │ +858 dvBuffer, dvDesc, │ │ │ │ │ +859 numPatchCoords, patchCoords, │ │ │ │ │ +860 patchTable); │ │ │ │ │ +861 } else { │ │ │ │ │ +862 // Create an instance on demand (slow) │ │ │ │ │ +863 (void)deviceContext; // unused │ │ │ │ │ +864 instance = _C_r_e_a_t_e(srcDesc, dstDesc, duDesc, dvDesc); │ │ │ │ │ +865 if (instance) { │ │ │ │ │ +866 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s(srcBuffer, srcDesc, │ │ │ │ │ +867 dstBuffer, dstDesc, │ │ │ │ │ +868 duBuffer, duDesc, │ │ │ │ │ +869 dvBuffer, dvDesc, │ │ │ │ │ +870 numPatchCoords, patchCoords, │ │ │ │ │ +871 patchTable); │ │ │ │ │ +872 delete instance; │ │ │ │ │ +873 return r; │ │ │ │ │ +874 } │ │ │ │ │ +875 return false; │ │ │ │ │ +876 } │ │ │ │ │ +877 } │ │ │ │ │ +878 │ │ │ │ │ +941 template │ │ │ │ │ +_9_4_3 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ +944 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +945 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +946 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +947 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +948 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +949 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +950 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +951 int numPatchCoords, │ │ │ │ │ +952 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +953 PATCH_TABLE *patchTable, │ │ │ │ │ +954 _G_L_X_F_B_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +955 void * deviceContext = NULL) { │ │ │ │ │ +956 │ │ │ │ │ +957 if (instance) { │ │ │ │ │ +958 return instance->_E_v_a_l_P_a_t_c_h_e_s(srcBuffer, srcDesc, │ │ │ │ │ +959 dstBuffer, dstDesc, │ │ │ │ │ +960 duBuffer, duDesc, │ │ │ │ │ +961 dvBuffer, dvDesc, │ │ │ │ │ +962 duuBuffer, duuDesc, │ │ │ │ │ +963 duvBuffer, duvDesc, │ │ │ │ │ +964 dvvBuffer, dvvDesc, │ │ │ │ │ +965 numPatchCoords, patchCoords, │ │ │ │ │ +966 patchTable); │ │ │ │ │ +967 } else { │ │ │ │ │ +968 // Create an instance on demand (slow) │ │ │ │ │ +969 (void)deviceContext; // unused │ │ │ │ │ +970 instance = _C_r_e_a_t_e(srcDesc, dstDesc, │ │ │ │ │ +971 duDesc, dvDesc, │ │ │ │ │ +972 duuDesc, duvDesc, dvvDesc); │ │ │ │ │ +973 if (instance) { │ │ │ │ │ +974 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s(srcBuffer, srcDesc, │ │ │ │ │ +975 dstBuffer, dstDesc, │ │ │ │ │ +976 duBuffer, duDesc, │ │ │ │ │ +977 dvBuffer, dvDesc, │ │ │ │ │ +978 duuBuffer, duuDesc, │ │ │ │ │ +979 duvBuffer, duvDesc, │ │ │ │ │ +980 dvvBuffer, dvvDesc, │ │ │ │ │ +981 numPatchCoords, patchCoords, │ │ │ │ │ +982 patchTable); │ │ │ │ │ +983 delete instance; │ │ │ │ │ +984 return r; │ │ │ │ │ +985 } │ │ │ │ │ +986 return false; │ │ │ │ │ +987 } │ │ │ │ │ +988 } │ │ │ │ │ +989 │ │ │ │ │ +1014 template │ │ │ │ │ +_1_0_1_6 bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ +1017 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1018 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1019 int numPatchCoords, │ │ │ │ │ +1020 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1021 PATCH_TABLE *patchTable) const { │ │ │ │ │ +1022 │ │ │ │ │ +1023 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindVBO(), srcDesc, │ │ │ │ │ +1024 dstBuffer->BindVBO(), dstDesc, │ │ │ │ │ +1025 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +1026 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +1027 numPatchCoords, │ │ │ │ │ +1028 patchCoords->BindVBO(), │ │ │ │ │ +1029 patchTable->GetPatchArrays(), │ │ │ │ │ +1030 patchTable->GetPatchIndexTextureBuffer(), │ │ │ │ │ +1031 patchTable->GetPatchParamTextureBuffer()); │ │ │ │ │ +1032 } │ │ │ │ │ +1033 │ │ │ │ │ +1068 template │ │ │ │ │ +_1_0_7_0 bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ +1071 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1072 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1073 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1074 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1075 int numPatchCoords, │ │ │ │ │ +1076 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1077 PATCH_TABLE *patchTable) const { │ │ │ │ │ +1078 │ │ │ │ │ +1079 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindVBO(), srcDesc, │ │ │ │ │ +1080 dstBuffer->BindVBO(), dstDesc, │ │ │ │ │ +1081 duBuffer->BindVBO(), duDesc, │ │ │ │ │ +1082 dvBuffer->BindVBO(), dvDesc, │ │ │ │ │ +1083 numPatchCoords, │ │ │ │ │ +1084 patchCoords->BindVBO(), │ │ │ │ │ +1085 patchTable->GetPatchArrays(), │ │ │ │ │ +1086 patchTable->GetPatchIndexTextureBuffer(), │ │ │ │ │ +1087 patchTable->GetPatchParamTextureBuffer()); │ │ │ │ │ +1088 } │ │ │ │ │ +1089 │ │ │ │ │ +1142 template │ │ │ │ │ +_1_1_4_4 bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ +1145 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1146 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1147 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1148 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1149 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +1150 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +1151 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +1152 int numPatchCoords, │ │ │ │ │ +1153 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1154 PATCH_TABLE *patchTable) const { │ │ │ │ │ +1155 │ │ │ │ │ +1156 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindVBO(), srcDesc, │ │ │ │ │ +1157 dstBuffer->BindVBO(), dstDesc, │ │ │ │ │ +1158 duBuffer->BindVBO(), duDesc, │ │ │ │ │ +1159 dvBuffer->BindVBO(), dvDesc, │ │ │ │ │ +1160 duuBuffer->BindVBO(), duuDesc, │ │ │ │ │ +1161 duvBuffer->BindVBO(), duvDesc, │ │ │ │ │ +1162 dvvBuffer->BindVBO(), dvvDesc, │ │ │ │ │ +1163 numPatchCoords, │ │ │ │ │ +1164 patchCoords->BindVBO(), │ │ │ │ │ +1165 patchTable->GetPatchArrays(), │ │ │ │ │ +1166 patchTable->GetPatchIndexTextureBuffer(), │ │ │ │ │ +1167 patchTable->GetPatchParamTextureBuffer()); │ │ │ │ │ +1168 } │ │ │ │ │ +1169 │ │ │ │ │ +_1_1_7_0 bool _E_v_a_l_P_a_t_c_h_e_s(GLuint srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1171 GLuint dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1172 GLuint duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1173 GLuint dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1174 int numPatchCoords, │ │ │ │ │ +1175 GLuint patchCoordsBuffer, │ │ │ │ │ +1176 const _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r &patchArrays, │ │ │ │ │ +1177 GLuint patchIndexBuffer, │ │ │ │ │ +1178 GLuint patchParamsBuffer) const; │ │ │ │ │ +1179 │ │ │ │ │ +_1_1_8_0 bool _E_v_a_l_P_a_t_c_h_e_s(GLuint srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1181 GLuint dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1182 GLuint duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1183 GLuint dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1184 GLuint duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +1185 GLuint duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +1186 GLuint dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +1187 int numPatchCoords, │ │ │ │ │ +1188 GLuint patchCoordsBuffer, │ │ │ │ │ +1189 const _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r &patchArrays, │ │ │ │ │ +1190 GLuint patchIndexBuffer, │ │ │ │ │ +1191 GLuint patchParamsBuffer) const; │ │ │ │ │ +1192 │ │ │ │ │ +1225 template │ │ │ │ │ +_1_2_2_7 static bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1228 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1229 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1230 int numPatchCoords, │ │ │ │ │ +1231 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1232 PATCH_TABLE *patchTable, │ │ │ │ │ +1233 _G_L_X_F_B_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +1234 void * deviceContext = NULL) { │ │ │ │ │ +1235 │ │ │ │ │ +1236 if (instance) { │ │ │ │ │ +1237 return instance->_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1238 srcBuffer, srcDesc, │ │ │ │ │ +1239 dstBuffer, dstDesc, │ │ │ │ │ +1240 numPatchCoords, patchCoords, │ │ │ │ │ +1241 patchTable); │ │ │ │ │ +1242 } else { │ │ │ │ │ +1243 // Create an instance on demand (slow) │ │ │ │ │ +1244 (void)deviceContext; // unused │ │ │ │ │ +1245 instance = _C_r_e_a_t_e(srcDesc, dstDesc, │ │ │ │ │ +1246 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +1247 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r()); │ │ │ │ │ +1248 if (instance) { │ │ │ │ │ +1249 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1250 srcBuffer, srcDesc, │ │ │ │ │ +1251 dstBuffer, dstDesc, │ │ │ │ │ +1252 numPatchCoords, patchCoords, │ │ │ │ │ +1253 patchTable); │ │ │ │ │ +1254 delete instance; │ │ │ │ │ +1255 return r; │ │ │ │ │ +1256 } │ │ │ │ │ +1257 return false; │ │ │ │ │ +1258 } │ │ │ │ │ +1259 } │ │ │ │ │ +1260 │ │ │ │ │ +1285 template │ │ │ │ │ +_1_2_8_7 bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1288 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1289 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1290 int numPatchCoords, │ │ │ │ │ +1291 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1292 PATCH_TABLE *patchTable) const { │ │ │ │ │ +1293 │ │ │ │ │ +1294 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindVBO(), srcDesc, │ │ │ │ │ +1295 dstBuffer->BindVBO(), dstDesc, │ │ │ │ │ +1296 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +1297 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +1298 numPatchCoords, │ │ │ │ │ +1299 patchCoords->BindVBO(), │ │ │ │ │ +1300 patchTable->GetVaryingPatchArrays(), │ │ │ │ │ +1301 patchTable->GetVaryingPatchIndexTextureBuffer(), │ │ │ │ │ +1302 patchTable->GetPatchParamTextureBuffer()); │ │ │ │ │ +1303 } │ │ │ │ │ +1304 │ │ │ │ │ +1349 template │ │ │ │ │ +_1_3_5_1 static bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1352 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1353 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1354 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1355 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1356 int numPatchCoords, │ │ │ │ │ +1357 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1358 PATCH_TABLE *patchTable, │ │ │ │ │ +1359 _G_L_X_F_B_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +1360 void * deviceContext = NULL) { │ │ │ │ │ +1361 │ │ │ │ │ +1362 if (instance) { │ │ │ │ │ +1363 return instance->_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1364 srcBuffer, srcDesc, │ │ │ │ │ +1365 dstBuffer, dstDesc, │ │ │ │ │ +1366 duBuffer, duDesc, │ │ │ │ │ +1367 dvBuffer, dvDesc, │ │ │ │ │ +1368 numPatchCoords, patchCoords, │ │ │ │ │ +1369 patchTable); │ │ │ │ │ +1370 } else { │ │ │ │ │ +1371 // Create an instance on demand (slow) │ │ │ │ │ +1372 (void)deviceContext; // unused │ │ │ │ │ +1373 instance = _C_r_e_a_t_e(srcDesc, dstDesc, │ │ │ │ │ +1374 duDesc, dvDesc); │ │ │ │ │ +1375 if (instance) { │ │ │ │ │ +1376 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1377 srcBuffer, srcDesc, │ │ │ │ │ +1378 dstBuffer, dstDesc, │ │ │ │ │ +1379 duBuffer, duDesc, │ │ │ │ │ +1380 dvBuffer, dvDesc, │ │ │ │ │ +1381 numPatchCoords, patchCoords, │ │ │ │ │ +1382 patchTable); │ │ │ │ │ +1383 delete instance; │ │ │ │ │ +1384 return r; │ │ │ │ │ +1385 } │ │ │ │ │ +1386 return false; │ │ │ │ │ +1387 } │ │ │ │ │ +1388 } │ │ │ │ │ +1389 │ │ │ │ │ +1426 template │ │ │ │ │ +_1_4_2_8 bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1429 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1430 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1431 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1432 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1433 int numPatchCoords, │ │ │ │ │ +1434 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1435 PATCH_TABLE *patchTable) const { │ │ │ │ │ +1436 │ │ │ │ │ +1437 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindVBO(), srcDesc, │ │ │ │ │ +1438 dstBuffer->BindVBO(), dstDesc, │ │ │ │ │ +1439 duBuffer->BindVBO(), duDesc, │ │ │ │ │ +1440 dvBuffer->BindVBO(), dvDesc, │ │ │ │ │ +1441 numPatchCoords, │ │ │ │ │ +1442 patchCoords->BindVBO(), │ │ │ │ │ +1443 patchTable->GetVaryingPatchArrays(), │ │ │ │ │ +1444 patchTable->GetVaryingPatchIndexTextureBuffer(), │ │ │ │ │ +1445 patchTable->GetPatchParamTextureBuffer()); │ │ │ │ │ +1446 } │ │ │ │ │ +1447 │ │ │ │ │ +1510 template │ │ │ │ │ +_1_5_1_2 static bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1513 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1514 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1515 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1516 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1517 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +1518 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +1519 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +1520 int numPatchCoords, │ │ │ │ │ +1521 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1522 PATCH_TABLE *patchTable, │ │ │ │ │ +1523 _G_L_X_F_B_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +1524 void * deviceContext = NULL) { │ │ │ │ │ +1525 │ │ │ │ │ +1526 if (instance) { │ │ │ │ │ +1527 return instance->_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1528 srcBuffer, srcDesc, │ │ │ │ │ +1529 dstBuffer, dstDesc, │ │ │ │ │ +1530 duBuffer, duDesc, │ │ │ │ │ +1531 dvBuffer, dvDesc, │ │ │ │ │ +1532 duuBuffer, duuDesc, │ │ │ │ │ +1533 duvBuffer, duvDesc, │ │ │ │ │ +1534 dvvBuffer, dvvDesc, │ │ │ │ │ +1535 numPatchCoords, patchCoords, │ │ │ │ │ +1536 patchTable); │ │ │ │ │ +1537 } else { │ │ │ │ │ +1538 // Create an instance on demand (slow) │ │ │ │ │ +1539 (void)deviceContext; // unused │ │ │ │ │ +1540 instance = _C_r_e_a_t_e(srcDesc, dstDesc, │ │ │ │ │ +1541 duDesc, dvDesc, │ │ │ │ │ +1542 duuDesc, duvDesc, dvvDesc); │ │ │ │ │ +1543 if (instance) { │ │ │ │ │ +1544 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1545 srcBuffer, srcDesc, │ │ │ │ │ +1546 dstBuffer, dstDesc, │ │ │ │ │ +1547 duBuffer, duDesc, │ │ │ │ │ +1548 dvBuffer, dvDesc, │ │ │ │ │ +1549 duuBuffer, duuDesc, │ │ │ │ │ +1550 duvBuffer, duvDesc, │ │ │ │ │ +1551 dvvBuffer, dvvDesc, │ │ │ │ │ +1552 numPatchCoords, patchCoords, │ │ │ │ │ +1553 patchTable); │ │ │ │ │ +1554 delete instance; │ │ │ │ │ +1555 return r; │ │ │ │ │ +1556 } │ │ │ │ │ +1557 return false; │ │ │ │ │ +1558 } │ │ │ │ │ +1559 } │ │ │ │ │ +1560 │ │ │ │ │ +1615 template │ │ │ │ │ +_1_6_1_7 bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +1618 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1619 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1620 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1621 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1622 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +1623 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +1624 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +1625 int numPatchCoords, │ │ │ │ │ +1626 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1627 PATCH_TABLE *patchTable) const { │ │ │ │ │ +1628 │ │ │ │ │ +1629 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindVBO(), srcDesc, │ │ │ │ │ +1630 dstBuffer->BindVBO(), dstDesc, │ │ │ │ │ +1631 duBuffer->BindVBO(), duDesc, │ │ │ │ │ +1632 dvBuffer->BindVBO(), dvDesc, │ │ │ │ │ +1633 duuBuffer->BindVBO(), duuDesc, │ │ │ │ │ +1634 duvBuffer->BindVBO(), duvDesc, │ │ │ │ │ +1635 dvvBuffer->BindVBO(), dvvDesc, │ │ │ │ │ +1636 numPatchCoords, │ │ │ │ │ +1637 patchCoords->BindVBO(), │ │ │ │ │ +1638 patchTable->GetVaryingPatchArrays(), │ │ │ │ │ +1639 patchTable->GetVaryingPatchIndexTextureBuffer(), │ │ │ │ │ +1640 patchTable->GetPatchParamTextureBuffer()); │ │ │ │ │ +1641 } │ │ │ │ │ +1642 │ │ │ │ │ +1677 template │ │ │ │ │ +_1_6_7_9 static bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1680 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1681 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1682 int numPatchCoords, │ │ │ │ │ +1683 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1684 PATCH_TABLE *patchTable, │ │ │ │ │ +1685 int fvarChannel, │ │ │ │ │ +1686 _G_L_X_F_B_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +1687 void * deviceContext = NULL) { │ │ │ │ │ +1688 │ │ │ │ │ +1689 if (instance) { │ │ │ │ │ +1690 return instance->_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1691 srcBuffer, srcDesc, │ │ │ │ │ +1692 dstBuffer, dstDesc, │ │ │ │ │ +1693 numPatchCoords, patchCoords, │ │ │ │ │ +1694 patchTable, fvarChannel); │ │ │ │ │ +1695 } else { │ │ │ │ │ +1696 // Create an instance on demand (slow) │ │ │ │ │ +1697 (void)deviceContext; // unused │ │ │ │ │ +1698 instance = _C_r_e_a_t_e(srcDesc, dstDesc, │ │ │ │ │ +1699 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +1700 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r()); │ │ │ │ │ +1701 if (instance) { │ │ │ │ │ +1702 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1703 srcBuffer, srcDesc, │ │ │ │ │ +1704 dstBuffer, dstDesc, │ │ │ │ │ +1705 numPatchCoords, patchCoords, │ │ │ │ │ +1706 patchTable, fvarChannel); │ │ │ │ │ +1707 delete instance; │ │ │ │ │ +1708 return r; │ │ │ │ │ +1709 } │ │ │ │ │ +1710 return false; │ │ │ │ │ +1711 } │ │ │ │ │ +1712 } │ │ │ │ │ +1713 │ │ │ │ │ +1740 template │ │ │ │ │ +_1_7_4_2 bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1743 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1744 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1745 int numPatchCoords, │ │ │ │ │ +1746 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1747 PATCH_TABLE *patchTable, │ │ │ │ │ +1748 int fvarChannel = 0) const { │ │ │ │ │ +1749 │ │ │ │ │ +1750 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindVBO(), srcDesc, │ │ │ │ │ +1751 dstBuffer->BindVBO(), dstDesc, │ │ │ │ │ +1752 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +1753 0, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +1754 numPatchCoords, │ │ │ │ │ +1755 patchCoords->BindVBO(), │ │ │ │ │ +1756 patchTable->GetFVarPatchArrays(fvarChannel), │ │ │ │ │ +1757 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel), │ │ │ │ │ +1758 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel)); │ │ │ │ │ +1759 } │ │ │ │ │ +1760 │ │ │ │ │ +1807 template │ │ │ │ │ +_1_8_0_9 static bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1810 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1811 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1812 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1813 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1814 int numPatchCoords, │ │ │ │ │ +1815 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1816 PATCH_TABLE *patchTable, │ │ │ │ │ +1817 int fvarChannel, │ │ │ │ │ +1818 _G_L_X_F_B_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +1819 void * deviceContext = NULL) { │ │ │ │ │ +1820 │ │ │ │ │ +1821 if (instance) { │ │ │ │ │ +1822 return instance->_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1823 srcBuffer, srcDesc, │ │ │ │ │ +1824 dstBuffer, dstDesc, │ │ │ │ │ +1825 duBuffer, duDesc, │ │ │ │ │ +1826 dvBuffer, dvDesc, │ │ │ │ │ +1827 numPatchCoords, patchCoords, │ │ │ │ │ +1828 patchTable, fvarChannel); │ │ │ │ │ +1829 } else { │ │ │ │ │ +1830 // Create an instance on demand (slow) │ │ │ │ │ +1831 (void)deviceContext; // unused │ │ │ │ │ +1832 instance = _C_r_e_a_t_e(srcDesc, dstDesc, │ │ │ │ │ +1833 duDesc, dvDesc); │ │ │ │ │ +1834 if (instance) { │ │ │ │ │ +1835 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1836 srcBuffer, srcDesc, │ │ │ │ │ +1837 dstBuffer, dstDesc, │ │ │ │ │ +1838 duBuffer, duDesc, │ │ │ │ │ +1839 dvBuffer, dvDesc, │ │ │ │ │ +1840 numPatchCoords, patchCoords, │ │ │ │ │ +1841 patchTable, fvarChannel); │ │ │ │ │ +1842 delete instance; │ │ │ │ │ +1843 return r; │ │ │ │ │ +1844 } │ │ │ │ │ +1845 return false; │ │ │ │ │ +1846 } │ │ │ │ │ +1847 } │ │ │ │ │ +1848 │ │ │ │ │ +1887 template │ │ │ │ │ +_1_8_8_9 bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1890 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1891 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1892 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1893 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1894 int numPatchCoords, │ │ │ │ │ +1895 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1896 PATCH_TABLE *patchTable, │ │ │ │ │ +1897 int fvarChannel = 0) const { │ │ │ │ │ +1898 │ │ │ │ │ +1899 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindVBO(), srcDesc, │ │ │ │ │ +1900 dstBuffer->BindVBO(), dstDesc, │ │ │ │ │ +1901 duBuffer->BindVBO(), duDesc, │ │ │ │ │ +1902 dvBuffer->BindVBO(), dvDesc, │ │ │ │ │ +1903 numPatchCoords, │ │ │ │ │ +1904 patchCoords->BindVBO(), │ │ │ │ │ +1905 patchTable->GetFVarPatchArrays(fvarChannel), │ │ │ │ │ +1906 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel), │ │ │ │ │ +1907 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel)); │ │ │ │ │ +1908 } │ │ │ │ │ +1909 │ │ │ │ │ +1974 template │ │ │ │ │ +_1_9_7_6 static bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1977 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1978 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1979 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1980 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1981 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +1982 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +1983 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +1984 int numPatchCoords, │ │ │ │ │ +1985 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1986 PATCH_TABLE *patchTable, │ │ │ │ │ +1987 int fvarChannel, │ │ │ │ │ +1988 _G_L_X_F_B_E_v_a_l_u_a_t_o_r const *instance, │ │ │ │ │ +1989 void * deviceContext = NULL) { │ │ │ │ │ +1990 │ │ │ │ │ +1991 if (instance) { │ │ │ │ │ +1992 return instance->_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1993 srcBuffer, srcDesc, │ │ │ │ │ +1994 dstBuffer, dstDesc, │ │ │ │ │ +1995 duBuffer, duDesc, │ │ │ │ │ +1996 dvBuffer, dvDesc, │ │ │ │ │ +1997 duuBuffer, duuDesc, │ │ │ │ │ +1998 duvBuffer, duvDesc, │ │ │ │ │ +1999 dvvBuffer, dvvDesc, │ │ │ │ │ +2000 numPatchCoords, patchCoords, │ │ │ │ │ +2001 patchTable, fvarChannel); │ │ │ │ │ +2002 } else { │ │ │ │ │ +2003 // Create an instance on demand (slow) │ │ │ │ │ +2004 (void)deviceContext; // unused │ │ │ │ │ +2005 instance = _C_r_e_a_t_e(srcDesc, dstDesc, │ │ │ │ │ +2006 duDesc, dvDesc, │ │ │ │ │ +2007 duuDesc, duvDesc, dvvDesc); │ │ │ │ │ +2008 if (instance) { │ │ │ │ │ +2009 bool r = instance->_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +2010 srcBuffer, srcDesc, │ │ │ │ │ +2011 dstBuffer, dstDesc, │ │ │ │ │ +2012 duBuffer, duDesc, │ │ │ │ │ +2013 dvBuffer, dvDesc, │ │ │ │ │ +2014 duuBuffer, duuDesc, │ │ │ │ │ +2015 duvBuffer, duvDesc, │ │ │ │ │ +2016 dvvBuffer, dvvDesc, │ │ │ │ │ +2017 numPatchCoords, patchCoords, │ │ │ │ │ +2018 patchTable, fvarChannel); │ │ │ │ │ +2019 delete instance; │ │ │ │ │ +2020 return r; │ │ │ │ │ +2021 } │ │ │ │ │ +2022 return false; │ │ │ │ │ +2023 } │ │ │ │ │ +2024 } │ │ │ │ │ +2025 │ │ │ │ │ +2082 template │ │ │ │ │ +_2_0_8_4 bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +2085 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +2086 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +2087 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +2088 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +2089 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +2090 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +2091 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +2092 int numPatchCoords, │ │ │ │ │ +2093 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +2094 PATCH_TABLE *patchTable, │ │ │ │ │ +2095 int fvarChannel = 0) const { │ │ │ │ │ +2096 │ │ │ │ │ +2097 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindVBO(), srcDesc, │ │ │ │ │ +2098 dstBuffer->BindVBO(), dstDesc, │ │ │ │ │ +2099 duBuffer->BindVBO(), duDesc, │ │ │ │ │ +2100 dvBuffer->BindVBO(), dvDesc, │ │ │ │ │ +2101 duuBuffer->BindVBO(), duuDesc, │ │ │ │ │ +2102 duvBuffer->BindVBO(), duvDesc, │ │ │ │ │ +2103 dvvBuffer->BindVBO(), dvvDesc, │ │ │ │ │ +2104 numPatchCoords, │ │ │ │ │ +2105 patchCoords->BindVBO(), │ │ │ │ │ +2106 patchTable->GetFVarPatchArrays(fvarChannel), │ │ │ │ │ +2107 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel), │ │ │ │ │ +2108 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel)); │ │ │ │ │ +2109 } │ │ │ │ │ +2110 │ │ │ │ │ +2116 │ │ │ │ │ +_2_1_1_9 bool _C_o_m_p_i_l_e(_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +2120 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +2121 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc = _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +2122 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc = _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +2123 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc = _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +2124 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc = _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(), │ │ │ │ │ +2125 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc = _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r()); │ │ │ │ │ +2126 │ │ │ │ │ +_2_1_2_8 static void _S_y_n_c_h_r_o_n_i_z_e(void *kernel); │ │ │ │ │ +2129 │ │ │ │ │ +2130private: │ │ │ │ │ +2131 GLuint _srcBufferTexture; │ │ │ │ │ +2132 GLuint _patchArraysUBO; │ │ │ │ │ +2133 bool _interleavedDerivativeBuffers; │ │ │ │ │ +2134 │ │ │ │ │ +2135 struct _StencilKernel { │ │ │ │ │ +2136 _StencilKernel(); │ │ │ │ │ +2137 ~_StencilKernel(); │ │ │ │ │ +2138 bool Compile(_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +2139 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +2140 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +2141 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +2142 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +2143 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +2144 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +2145 bool interleavedDerivativeBuffers); │ │ │ │ │ +2146 GLuint program; │ │ │ │ │ +2147 GLint uniformSrcBufferTexture; │ │ │ │ │ +2148 GLint uniformSrcOffset; // src buffer offset (in elements) │ │ │ │ │ +2149 │ │ │ │ │ +2150 GLint uniformSizesTexture; │ │ │ │ │ +2151 GLint uniformOffsetsTexture; │ │ │ │ │ +2152 GLint uniformIndicesTexture; │ │ │ │ │ +2153 GLint uniformWeightsTexture; │ │ │ │ │ +2154 GLint uniformDuWeightsTexture; │ │ │ │ │ +2155 GLint uniformDvWeightsTexture; │ │ │ │ │ +2156 GLint uniformDuuWeightsTexture; │ │ │ │ │ +2157 GLint uniformDuvWeightsTexture; │ │ │ │ │ +2158 GLint uniformDvvWeightsTexture; │ │ │ │ │ +2159 GLint uniformStart; // range │ │ │ │ │ +2160 GLint uniformEnd; │ │ │ │ │ +2161 } _stencilKernel; │ │ │ │ │ +2162 │ │ │ │ │ +2163 struct _PatchKernel { │ │ │ │ │ +2164 _PatchKernel(); │ │ │ │ │ +2165 ~_PatchKernel(); │ │ │ │ │ +2166 bool Compile(_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +2167 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +2168 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +2169 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +2170 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +2171 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +2172 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +2173 bool interleavedDerivativeBuffers); │ │ │ │ │ +2174 GLuint program; │ │ │ │ │ +2175 GLint uniformSrcBufferTexture; │ │ │ │ │ +2176 GLint uniformSrcOffset; // src buffer offset (in elements) │ │ │ │ │ +2177 │ │ │ │ │ +2178 GLint uniformPatchArraysUBOBinding; │ │ │ │ │ +2179 GLint uniformPatchParamTexture; │ │ │ │ │ +2180 GLint uniformPatchIndexTexture; │ │ │ │ │ +2181 } _patchKernel; │ │ │ │ │ +2182 │ │ │ │ │ +2183}; │ │ │ │ │ +2184 │ │ │ │ │ +2185} // end namespace Osd │ │ │ │ │ +2186 │ │ │ │ │ +2187} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ +2188using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +2189 │ │ │ │ │ +2190} // end namespace OpenSubdiv │ │ │ │ │ +2191 │ │ │ │ │ +2192 │ │ │ │ │ +2193#endif // OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_D_e_s_c_r_i_p_t_o_r_:_:_T_y_p_e │ │ │ │ │ -Type │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_D_e_s_c_r_i_p_t_o_r_._h_:_4_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_L_P_a_t_c_h_S_h_a_d_e_r_S_o_u_r_c_e │ │ │ │ │ -Provides shader source which can be used by client code. │ │ │ │ │ -DDeeffiinniittiioonn _g_l_s_l_P_a_t_c_h_S_h_a_d_e_r_S_o_u_r_c_e_._h_:_4_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_L_P_a_t_c_h_S_h_a_d_e_r_S_o_u_r_c_e_:_: │ │ │ │ │ -_G_e_t_V_e_r_t_e_x_S_h_a_d_e_r_S_o_u_r_c_e │ │ │ │ │ -static std::string GetVertexShaderSource(Far::PatchDescriptor::Type type) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_L_P_a_t_c_h_S_h_a_d_e_r_S_o_u_r_c_e_:_: │ │ │ │ │ -_G_e_t_P_a_t_c_h_D_r_a_w_i_n_g_S_h_a_d_e_r_S_o_u_r_c_e │ │ │ │ │ -static std::string GetPatchDrawingShaderSource() │ │ │ │ │ -Returns shader source which can be used while drawing piecewise parametric │ │ │ │ │ -patches resulting from sub... │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_L_P_a_t_c_h_S_h_a_d_e_r_S_o_u_r_c_e_:_: │ │ │ │ │ -_G_e_t_T_e_s_s_E_v_a_l_S_h_a_d_e_r_S_o_u_r_c_e │ │ │ │ │ -static std::string GetTessEvalShaderSource(Far::PatchDescriptor::Type type) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_L_P_a_t_c_h_S_h_a_d_e_r_S_o_u_r_c_e_:_: │ │ │ │ │ -_G_e_t_P_a_t_c_h_B_a_s_i_s_S_h_a_d_e_r_S_o_u_r_c_e │ │ │ │ │ -static std::string GetPatchBasisShaderSource() │ │ │ │ │ -Returns shader source which can be used to evaluate position and first and │ │ │ │ │ -second derivatives on piec... │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_L_P_a_t_c_h_S_h_a_d_e_r_S_o_u_r_c_e_:_: │ │ │ │ │ -_G_e_t_C_o_m_m_o_n_S_h_a_d_e_r_S_o_u_r_c_e │ │ │ │ │ -static std::string GetCommonShaderSource() │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_L_P_a_t_c_h_S_h_a_d_e_r_S_o_u_r_c_e_:_: │ │ │ │ │ -_G_e_t_T_e_s_s_C_o_n_t_r_o_l_S_h_a_d_e_r_S_o_u_r_c_e │ │ │ │ │ -static std::string GetTessControlShaderSource(Far::PatchDescriptor::Type type) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r │ │ │ │ │ +std::vector< PatchArray > PatchArrayVector │ │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e_s_._h_:_1_3_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +Stencil table class wrapping the template for compatibility. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_2_7_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_L_i_m_i_t_S_t_e_n_c_i_l_T_a_b_l_e │ │ │ │ │ +Limit stencil table class wrapping the template for compatibility. │ │ │ │ │ +DDeeffiinniittiioonn _s_t_e_n_c_i_l_T_a_b_l_e_._h_:_5_8_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ +BufferDescriptor is a struct which describes buffer elements in interleaved │ │ │ │ │ +data buffers.... │ │ │ │ │ +DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_6_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O │ │ │ │ │ +GL TextureBuffer stencil table. │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_5_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_G_e_t_S_i_z_e_s_T_e_x_t_u_r_e │ │ │ │ │ +GLuint GetSizesTexture() const │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_7_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_C_r_e_a_t_e │ │ │ │ │ +static GLStencilTableTBO * Create(Far::StencilTable const *stencilTable, void │ │ │ │ │ +*deviceContext=NULL) │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_5_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_G_e_t_D_v_v_W_e_i_g_h_t_s_T_e_x_t_u_r_e │ │ │ │ │ +GLuint GetDvvWeightsTexture() const │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_8_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_G_e_t_N_u_m_S_t_e_n_c_i_l_s │ │ │ │ │ +int GetNumStencils() const │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_8_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_G_e_t_D_u_v_W_e_i_g_h_t_s_T_e_x_t_u_r_e │ │ │ │ │ +GLuint GetDuvWeightsTexture() const │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_7_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_G_e_t_D_u_u_W_e_i_g_h_t_s_T_e_x_t_u_r_e │ │ │ │ │ +GLuint GetDuuWeightsTexture() const │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_7_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_G_e_t_I_n_d_i_c_e_s_T_e_x_t_u_r_e │ │ │ │ │ +GLuint GetIndicesTexture() const │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_7_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_~_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O │ │ │ │ │ +~GLStencilTableTBO() │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O │ │ │ │ │ +GLStencilTableTBO(Far::StencilTable const *stencilTable) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O │ │ │ │ │ +GLStencilTableTBO(Far::LimitStencilTable const *limitStencilTable) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_G_e_t_W_e_i_g_h_t_s_T_e_x_t_u_r_e │ │ │ │ │ +GLuint GetWeightsTexture() const │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_7_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_C_r_e_a_t_e │ │ │ │ │ +static GLStencilTableTBO * Create(Far::LimitStencilTable const │ │ │ │ │ +*limitStencilTable, void *deviceContext=NULL) │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_6_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_G_e_t_D_v_W_e_i_g_h_t_s_T_e_x_t_u_r_e │ │ │ │ │ +GLuint GetDvWeightsTexture() const │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_7_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_G_e_t_D_u_W_e_i_g_h_t_s_T_e_x_t_u_r_e │ │ │ │ │ +GLuint GetDuWeightsTexture() const │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_7_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_S_t_e_n_c_i_l_T_a_b_l_e_T_B_O_:_:_G_e_t_O_f_f_s_e_t_s_T_e_x_t_u_r_e │ │ │ │ │ +GLuint GetOffsetsTexture() const │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_7_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_9_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ +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 ... │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_2_8_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_C_r_e_a_t_e │ │ │ │ │ +static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, │ │ │ │ │ +BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, │ │ │ │ │ +BufferDescriptor const &dvDesc, bool interleavedDerivativeBuffers=false) │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_2_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +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. │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_5_0_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r │ │ │ │ │ +GLXFBEvaluator(bool interleavedDerivativeBuffers=false) │ │ │ │ │ +Constructor. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +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. │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_5_7_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_I_n_s_t_a_n_t_i_a_t_a_b_l_e │ │ │ │ │ +bool Instantiatable │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_0_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +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 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +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... │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_3_9_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +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... │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_1_4_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_C_r_e_a_t_e │ │ │ │ │ +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) │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_7_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_C_r_e_a_t_e │ │ │ │ │ +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. │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_1_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +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... │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_3_0_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ +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 ... │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_3_5_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +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... │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +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 ... │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_8_4_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_C_r_e_a_t_e │ │ │ │ │ +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. │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_4_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_C_r_e_a_t_e │ │ │ │ │ +static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, │ │ │ │ │ +BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, │ │ │ │ │ +BufferDescriptor const &dvDesc, DEVICE_CONTEXT deviceContext) │ │ │ │ │ +Generic creator template. │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_0_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_S_y_n_c_h_r_o_n_i_z_e │ │ │ │ │ +static void Synchronize(void *kernel) │ │ │ │ │ +Wait the dispatched kernel finishes. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ +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 ... │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_2_2_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ +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 ... │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_6_1_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ +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 ... │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_8_8_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +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 ... │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_7_6_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ +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 ... │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_8_0_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +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 ... │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_0_1_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +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 ... │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_9_4_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +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... │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_0_7_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, │ │ │ │ │ +DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const │ │ │ │ │ +*stencilTable) const │ │ │ │ │ +Generic stencil function. │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_4_5_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +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 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_C_r_e_a_t_e │ │ │ │ │ +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. │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_5_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ +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 ... │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_2_0_8_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ +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 ... │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_5_1_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +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... │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ +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 ... │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_6_7_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +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... │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_2_3_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_~_G_L_X_F_B_E_v_a_l_u_a_t_o_r │ │ │ │ │ +~GLXFBEvaluator() │ │ │ │ │ +Destructor. note that the GL context must be made current. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_C_o_m_p_i_l_e │ │ │ │ │ +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()) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ +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 ... │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_4_2_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ +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 ... │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_7_4_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_X_F_B_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ +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 ... │ │ │ │ │ +DDeeffiinniittiioonn _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h_:_1_9_7_6 │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _g_l_s_l_P_a_t_c_h_S_h_a_d_e_r_S_o_u_r_c_e_._h │ │ │ │ │ + * _g_l_X_F_B_E_v_a_l_u_a_t_o_r_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00857.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/glVertexBuffer.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/osd/glMesh.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -88,44 +88,43 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -Classes | │ │ │ │ -Namespaces
│ │ │ │ -
glVertexBuffer.h File Reference
│ │ │ │ +Namespaces | │ │ │ │ +Typedefs
│ │ │ │ +
glMesh.h File Reference
│ │ │ │ │ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include "../osd/opengl.h"
│ │ │ │ -#include <cstddef>
│ │ │ │ +#include "../osd/mesh.h"
│ │ │ │ +#include "../osd/glPatchTable.h"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Classes

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

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │

│ │ │ │ +Typedefs

typedef MeshInterface< GLPatchTableGLMeshInterface
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,26 +1,24 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -glVertexBuffer.h File Reference │ │ │ │ │ +_N_a_m_e_s_p_a_c_e_s | _T_y_p_e_d_e_f_s │ │ │ │ │ +glMesh.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ -#include "_._._/_o_s_d_/_o_p_e_n_g_l_._h" │ │ │ │ │ -#include │ │ │ │ │ +#include "_._._/_o_s_d_/_m_e_s_h_._h" │ │ │ │ │ +#include "_._._/_o_s_d_/_g_l_P_a_t_c_h_T_a_b_l_e_._h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ -CCllaasssseess │ │ │ │ │ -class   _G_L_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ -  Concrete vertex buffer class for GLSL subdivision and OpenGL drawing. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d │ │ │ │ │   │ │ │ │ │ +TTyyppeeddeeffss │ │ │ │ │ +typedef _M_e_s_h_I_n_t_e_r_f_a_c_e< _G_L_P_a_t_c_h_T_a_b_l_e >  _G_L_M_e_s_h_I_n_t_e_r_f_a_c_e │ │ │ │ │ +  │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _g_l_V_e_r_t_e_x_B_u_f_f_e_r_._h │ │ │ │ │ + * _g_l_M_e_s_h_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00857.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,3 +1,3 @@ │ │ │ │ │ var a00857 = [ │ │ │ │ │ - ["GLVertexBuffer", "a01245.html", "a01245"] │ │ │ │ │ + ["GLMeshInterface", "a00857.html#a7f9cf2b729178bdbb847fc4afd91af9e", null] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00857_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/glVertexBuffer.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/osd/glMesh.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,15 +92,15 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
glVertexBuffer.h
│ │ │ │ +
glMesh.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │
2// Copyright 2013 Pixar
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │ @@ -119,78 +119,45 @@ │ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │
24
│ │ │ │ -
25#ifndef OPENSUBDIV3_OSD_GL_VERTEX_BUFFER_H
│ │ │ │ -
26#define OPENSUBDIV3_OSD_GL_VERTEX_BUFFER_H
│ │ │ │ +
25#ifndef OPENSUBDIV3_OSD_GL_MESH_H
│ │ │ │ +
26#define OPENSUBDIV3_OSD_GL_MESH_H
│ │ │ │
27
│ │ │ │
28#include "../version.h"
│ │ │ │
29
│ │ │ │ -
30#include "../osd/opengl.h"
│ │ │ │ -
31#include <cstddef>
│ │ │ │ +
30#include "../osd/mesh.h"
│ │ │ │ +
31#include "../osd/glPatchTable.h"
│ │ │ │
32
│ │ │ │
33namespace OpenSubdiv {
│ │ │ │
34namespace OPENSUBDIV_VERSION {
│ │ │ │
35
│ │ │ │
36namespace Osd {
│ │ │ │
37
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
45public:
│ │ │ │ -
47 static GLVertexBuffer * Create(int numElements, int numVertices,
│ │ │ │ -
48 void *deviceContext = NULL);
│ │ │ │ -
49
│ │ │ │ - │ │ │ │ -
52
│ │ │ │ -
55 void UpdateData(const float *src, int startVertex, int numVertices,
│ │ │ │ -
56 void *deviceContext = NULL);
│ │ │ │ -
57
│ │ │ │ -
59 int GetNumElements() const;
│ │ │ │ -
60
│ │ │ │ -
62 int GetNumVertices() const;
│ │ │ │ -
63
│ │ │ │ -
65 GLuint BindVBO(void *deviceContext = NULL);
│ │ │ │ -
66
│ │ │ │ -
67protected:
│ │ │ │ -
69 GLVertexBuffer(int numElements, int numVertices);
│ │ │ │ -
70
│ │ │ │ -
73 bool allocate();
│ │ │ │ -
74
│ │ │ │ -
75private:
│ │ │ │ -
76 int _numElements;
│ │ │ │ -
77 int _numVertices;
│ │ │ │ -
78 GLuint _vbo;
│ │ │ │ -
79};
│ │ │ │ -
│ │ │ │ -
80
│ │ │ │ -
81} // end namespace Osd
│ │ │ │ -
82
│ │ │ │ -
83} // end namespace OPENSUBDIV_VERSION
│ │ │ │ -
84using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
85
│ │ │ │ -
86} // end namespace OpenSubdiv
│ │ │ │ -
87
│ │ │ │ -
88#endif // OPENSUBDIV3_OSD_GL_VERTEX_BUFFER_H
│ │ │ │ + │ │ │ │ +
39
│ │ │ │ +
40
│ │ │ │ +
41} // end namespace Osd
│ │ │ │ +
42
│ │ │ │ +
43} // end namespace OPENSUBDIV_VERSION
│ │ │ │ +
44using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
45
│ │ │ │ +
46} // end namespace OpenSubdiv
│ │ │ │ +
47
│ │ │ │ +
48#endif // OPENSUBDIV3_OSD_GL_MESH_H
│ │ │ │ │ │ │ │ -
Concrete vertex buffer class for GLSL subdivision and OpenGL drawing.
│ │ │ │ - │ │ │ │ -
GLuint BindVBO(void *deviceContext=NULL)
Returns the GL buffer object.
│ │ │ │ -
int GetNumElements() const
Returns how many elements defined in this vertex buffer.
│ │ │ │ -
void UpdateData(const float *src, int startVertex, int numVertices, void *deviceContext=NULL)
│ │ │ │ -
GLVertexBuffer(int numElements, int numVertices)
Constructor.
│ │ │ │ -
int GetNumVertices() const
Returns how many vertices allocated in this vertex buffer.
│ │ │ │ -
static GLVertexBuffer * Create(int numElements, int numVertices, void *deviceContext=NULL)
Creator. Returns NULL if error.
│ │ │ │ - │ │ │ │ +
MeshInterface< GLPatchTable > GLMeshInterface
Definition glMesh.h:38
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,12 +1,12 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -glVertexBuffer.h │ │ │ │ │ +glMesh.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ 2// Copyright 2013 Pixar │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ @@ -24,88 +24,42 @@ │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ 24 │ │ │ │ │ -25#ifndef OPENSUBDIV3_OSD_GL_VERTEX_BUFFER_H │ │ │ │ │ -26#define OPENSUBDIV3_OSD_GL_VERTEX_BUFFER_H │ │ │ │ │ +25#ifndef OPENSUBDIV3_OSD_GL_MESH_H │ │ │ │ │ +26#define OPENSUBDIV3_OSD_GL_MESH_H │ │ │ │ │ 27 │ │ │ │ │ 28#include "../version.h" │ │ │ │ │ 29 │ │ │ │ │ -30#include "../osd/opengl.h" │ │ │ │ │ -31#include │ │ │ │ │ +30#include "../osd/mesh.h" │ │ │ │ │ +31#include "../osd/glPatchTable.h" │ │ │ │ │ 32 │ │ │ │ │ 33namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ 34namespace OPENSUBDIV_VERSION { │ │ │ │ │ 35 │ │ │ │ │ 36namespace Osd { │ │ │ │ │ 37 │ │ │ │ │ -_4_4class _G_L_V_e_r_t_e_x_B_u_f_f_e_r { │ │ │ │ │ -45public: │ │ │ │ │ -_4_7 static _G_L_V_e_r_t_e_x_B_u_f_f_e_r * _C_r_e_a_t_e(int numElements, int numVertices, │ │ │ │ │ -48 void *deviceContext = NULL); │ │ │ │ │ -49 │ │ │ │ │ -_5_1 _~_G_L_V_e_r_t_e_x_B_u_f_f_e_r(); │ │ │ │ │ -52 │ │ │ │ │ -_5_5 void _U_p_d_a_t_e_D_a_t_a(const float *src, int startVertex, int numVertices, │ │ │ │ │ -56 void *deviceContext = NULL); │ │ │ │ │ -57 │ │ │ │ │ -_5_9 int _G_e_t_N_u_m_E_l_e_m_e_n_t_s() const; │ │ │ │ │ -60 │ │ │ │ │ -_6_2 int _G_e_t_N_u_m_V_e_r_t_i_c_e_s() const; │ │ │ │ │ -63 │ │ │ │ │ -_6_5 GLuint _B_i_n_d_V_B_O(void *deviceContext = NULL); │ │ │ │ │ -66 │ │ │ │ │ -67protected: │ │ │ │ │ -_6_9 _G_L_V_e_r_t_e_x_B_u_f_f_e_r(int numElements, int numVertices); │ │ │ │ │ -70 │ │ │ │ │ -_7_3 bool _a_l_l_o_c_a_t_e(); │ │ │ │ │ -74 │ │ │ │ │ -75private: │ │ │ │ │ -76 int _numElements; │ │ │ │ │ -77 int _numVertices; │ │ │ │ │ -78 GLuint _vbo; │ │ │ │ │ -79}; │ │ │ │ │ -80 │ │ │ │ │ -81} // end namespace Osd │ │ │ │ │ -82 │ │ │ │ │ -83} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ -84using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -85 │ │ │ │ │ -86} // end namespace OpenSubdiv │ │ │ │ │ -87 │ │ │ │ │ -88#endif // OPENSUBDIV3_OSD_GL_VERTEX_BUFFER_H │ │ │ │ │ +_3_8typedef _M_e_s_h_I_n_t_e_r_f_a_c_e_<_G_L_P_a_t_c_h_T_a_b_l_e_> _G_L_M_e_s_h_I_n_t_e_r_f_a_c_e; │ │ │ │ │ +39 │ │ │ │ │ +40 │ │ │ │ │ +41} // end namespace Osd │ │ │ │ │ +42 │ │ │ │ │ +43} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ +44using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +45 │ │ │ │ │ +46} // end namespace OpenSubdiv │ │ │ │ │ +47 │ │ │ │ │ +48#endif // OPENSUBDIV3_OSD_GL_MESH_H │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ -Concrete vertex buffer class for GLSL subdivision and OpenGL drawing. │ │ │ │ │ -DDeeffiinniittiioonn _g_l_V_e_r_t_e_x_B_u_f_f_e_r_._h_:_4_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_V_e_r_t_e_x_B_u_f_f_e_r_:_:_~_G_L_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ -~GLVertexBuffer() │ │ │ │ │ -Destructor. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_V_e_r_t_e_x_B_u_f_f_e_r_:_:_B_i_n_d_V_B_O │ │ │ │ │ -GLuint BindVBO(void *deviceContext=NULL) │ │ │ │ │ -Returns the GL buffer object. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_V_e_r_t_e_x_B_u_f_f_e_r_:_:_G_e_t_N_u_m_E_l_e_m_e_n_t_s │ │ │ │ │ -int GetNumElements() const │ │ │ │ │ -Returns how many elements defined in this vertex buffer. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_V_e_r_t_e_x_B_u_f_f_e_r_:_:_U_p_d_a_t_e_D_a_t_a │ │ │ │ │ -void UpdateData(const float *src, int startVertex, int numVertices, void │ │ │ │ │ -*deviceContext=NULL) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_V_e_r_t_e_x_B_u_f_f_e_r_:_:_G_L_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ -GLVertexBuffer(int numElements, int numVertices) │ │ │ │ │ -Constructor. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_V_e_r_t_e_x_B_u_f_f_e_r_:_:_G_e_t_N_u_m_V_e_r_t_i_c_e_s │ │ │ │ │ -int GetNumVertices() const │ │ │ │ │ -Returns how many vertices allocated in this vertex buffer. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_V_e_r_t_e_x_B_u_f_f_e_r_:_:_C_r_e_a_t_e │ │ │ │ │ -static GLVertexBuffer * Create(int numElements, int numVertices, void │ │ │ │ │ -*deviceContext=NULL) │ │ │ │ │ -Creator. Returns NULL if error. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_V_e_r_t_e_x_B_u_f_f_e_r_:_:_a_l_l_o_c_a_t_e │ │ │ │ │ -bool allocate() │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_M_e_s_h_I_n_t_e_r_f_a_c_e │ │ │ │ │ +MeshInterface< GLPatchTable > GLMeshInterface │ │ │ │ │ +DDeeffiinniittiioonn _g_l_M_e_s_h_._h_:_3_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_e_s_h_I_n_t_e_r_f_a_c_e │ │ │ │ │ +DDeeffiinniittiioonn _m_e_s_h_._h_:_6_8 │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _g_l_V_e_r_t_e_x_B_u_f_f_e_r_._h │ │ │ │ │ + * _g_l_M_e_s_h_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00860.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/glMesh.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/osd/glVertexBuffer.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -88,43 +88,44 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -Namespaces | │ │ │ │ -Typedefs
│ │ │ │ -
glMesh.h File Reference
│ │ │ │ +Classes | │ │ │ │ +Namespaces
│ │ │ │ +
glVertexBuffer.h File Reference
│ │ │ │ │ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include "../osd/mesh.h"
│ │ │ │ -#include "../osd/glPatchTable.h"
│ │ │ │ +#include "../osd/opengl.h"
│ │ │ │ +#include <cstddef>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Classes

class  GLVertexBuffer
 Concrete vertex buffer class for GLSL subdivision and OpenGL drawing. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │

│ │ │ │ -Typedefs

typedef MeshInterface< GLPatchTableGLMeshInterface
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,26 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -_N_a_m_e_s_p_a_c_e_s | _T_y_p_e_d_e_f_s │ │ │ │ │ -glMesh.h File Reference │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ +glVertexBuffer.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ -#include "_._._/_o_s_d_/_m_e_s_h_._h" │ │ │ │ │ -#include "_._._/_o_s_d_/_g_l_P_a_t_c_h_T_a_b_l_e_._h" │ │ │ │ │ +#include "_._._/_o_s_d_/_o_p_e_n_g_l_._h" │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ +CCllaasssseess │ │ │ │ │ +class   _G_L_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ +  Concrete vertex buffer class for GLSL subdivision and OpenGL drawing. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d │ │ │ │ │   │ │ │ │ │ -TTyyppeeddeeffss │ │ │ │ │ -typedef _M_e_s_h_I_n_t_e_r_f_a_c_e< _G_L_P_a_t_c_h_T_a_b_l_e >  _G_L_M_e_s_h_I_n_t_e_r_f_a_c_e │ │ │ │ │ -  │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _g_l_M_e_s_h_._h │ │ │ │ │ + * _g_l_V_e_r_t_e_x_B_u_f_f_e_r_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00860.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,3 +1,3 @@ │ │ │ │ │ var a00860 = [ │ │ │ │ │ - ["GLMeshInterface", "a00860.html#a7f9cf2b729178bdbb847fc4afd91af9e", null] │ │ │ │ │ + ["GLVertexBuffer", "a01245.html", "a01245"] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00860_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/glMesh.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/osd/glVertexBuffer.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,15 +92,15 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
glMesh.h
│ │ │ │ +
glVertexBuffer.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │
2// Copyright 2013 Pixar
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │ @@ -119,45 +119,78 @@ │ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │
24
│ │ │ │ -
25#ifndef OPENSUBDIV3_OSD_GL_MESH_H
│ │ │ │ -
26#define OPENSUBDIV3_OSD_GL_MESH_H
│ │ │ │ +
25#ifndef OPENSUBDIV3_OSD_GL_VERTEX_BUFFER_H
│ │ │ │ +
26#define OPENSUBDIV3_OSD_GL_VERTEX_BUFFER_H
│ │ │ │
27
│ │ │ │
28#include "../version.h"
│ │ │ │
29
│ │ │ │ -
30#include "../osd/mesh.h"
│ │ │ │ -
31#include "../osd/glPatchTable.h"
│ │ │ │ +
30#include "../osd/opengl.h"
│ │ │ │ +
31#include <cstddef>
│ │ │ │
32
│ │ │ │
33namespace OpenSubdiv {
│ │ │ │
34namespace OPENSUBDIV_VERSION {
│ │ │ │
35
│ │ │ │
36namespace Osd {
│ │ │ │
37
│ │ │ │ - │ │ │ │ -
39
│ │ │ │ -
40
│ │ │ │ -
41} // end namespace Osd
│ │ │ │ -
42
│ │ │ │ -
43} // end namespace OPENSUBDIV_VERSION
│ │ │ │ -
44using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
45
│ │ │ │ -
46} // end namespace OpenSubdiv
│ │ │ │ -
47
│ │ │ │ -
48#endif // OPENSUBDIV3_OSD_GL_MESH_H
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
45public:
│ │ │ │ +
47 static GLVertexBuffer * Create(int numElements, int numVertices,
│ │ │ │ +
48 void *deviceContext = NULL);
│ │ │ │ +
49
│ │ │ │ + │ │ │ │ +
52
│ │ │ │ +
55 void UpdateData(const float *src, int startVertex, int numVertices,
│ │ │ │ +
56 void *deviceContext = NULL);
│ │ │ │ +
57
│ │ │ │ +
59 int GetNumElements() const;
│ │ │ │ +
60
│ │ │ │ +
62 int GetNumVertices() const;
│ │ │ │ +
63
│ │ │ │ +
65 GLuint BindVBO(void *deviceContext = NULL);
│ │ │ │ +
66
│ │ │ │ +
67protected:
│ │ │ │ +
69 GLVertexBuffer(int numElements, int numVertices);
│ │ │ │ +
70
│ │ │ │ +
73 bool allocate();
│ │ │ │ +
74
│ │ │ │ +
75private:
│ │ │ │ +
76 int _numElements;
│ │ │ │ +
77 int _numVertices;
│ │ │ │ +
78 GLuint _vbo;
│ │ │ │ +
79};
│ │ │ │ +
│ │ │ │ +
80
│ │ │ │ +
81} // end namespace Osd
│ │ │ │ +
82
│ │ │ │ +
83} // end namespace OPENSUBDIV_VERSION
│ │ │ │ +
84using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
85
│ │ │ │ +
86} // end namespace OpenSubdiv
│ │ │ │ +
87
│ │ │ │ +
88#endif // OPENSUBDIV3_OSD_GL_VERTEX_BUFFER_H
│ │ │ │ │ │ │ │ -
MeshInterface< GLPatchTable > GLMeshInterface
Definition glMesh.h:38
│ │ │ │ - │ │ │ │ +
Concrete vertex buffer class for GLSL subdivision and OpenGL drawing.
│ │ │ │ + │ │ │ │ +
GLuint BindVBO(void *deviceContext=NULL)
Returns the GL buffer object.
│ │ │ │ +
int GetNumElements() const
Returns how many elements defined in this vertex buffer.
│ │ │ │ +
void UpdateData(const float *src, int startVertex, int numVertices, void *deviceContext=NULL)
│ │ │ │ +
GLVertexBuffer(int numElements, int numVertices)
Constructor.
│ │ │ │ +
int GetNumVertices() const
Returns how many vertices allocated in this vertex buffer.
│ │ │ │ +
static GLVertexBuffer * Create(int numElements, int numVertices, void *deviceContext=NULL)
Creator. Returns NULL if error.
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,12 +1,12 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -glMesh.h │ │ │ │ │ +glVertexBuffer.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ 2// Copyright 2013 Pixar │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ @@ -24,42 +24,88 @@ │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ 24 │ │ │ │ │ -25#ifndef OPENSUBDIV3_OSD_GL_MESH_H │ │ │ │ │ -26#define OPENSUBDIV3_OSD_GL_MESH_H │ │ │ │ │ +25#ifndef OPENSUBDIV3_OSD_GL_VERTEX_BUFFER_H │ │ │ │ │ +26#define OPENSUBDIV3_OSD_GL_VERTEX_BUFFER_H │ │ │ │ │ 27 │ │ │ │ │ 28#include "../version.h" │ │ │ │ │ 29 │ │ │ │ │ -30#include "../osd/mesh.h" │ │ │ │ │ -31#include "../osd/glPatchTable.h" │ │ │ │ │ +30#include "../osd/opengl.h" │ │ │ │ │ +31#include │ │ │ │ │ 32 │ │ │ │ │ 33namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ 34namespace OPENSUBDIV_VERSION { │ │ │ │ │ 35 │ │ │ │ │ 36namespace Osd { │ │ │ │ │ 37 │ │ │ │ │ -_3_8typedef _M_e_s_h_I_n_t_e_r_f_a_c_e_<_G_L_P_a_t_c_h_T_a_b_l_e_> _G_L_M_e_s_h_I_n_t_e_r_f_a_c_e; │ │ │ │ │ -39 │ │ │ │ │ -40 │ │ │ │ │ -41} // end namespace Osd │ │ │ │ │ -42 │ │ │ │ │ -43} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ -44using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -45 │ │ │ │ │ -46} // end namespace OpenSubdiv │ │ │ │ │ -47 │ │ │ │ │ -48#endif // OPENSUBDIV3_OSD_GL_MESH_H │ │ │ │ │ +_4_4class _G_L_V_e_r_t_e_x_B_u_f_f_e_r { │ │ │ │ │ +45public: │ │ │ │ │ +_4_7 static _G_L_V_e_r_t_e_x_B_u_f_f_e_r * _C_r_e_a_t_e(int numElements, int numVertices, │ │ │ │ │ +48 void *deviceContext = NULL); │ │ │ │ │ +49 │ │ │ │ │ +_5_1 _~_G_L_V_e_r_t_e_x_B_u_f_f_e_r(); │ │ │ │ │ +52 │ │ │ │ │ +_5_5 void _U_p_d_a_t_e_D_a_t_a(const float *src, int startVertex, int numVertices, │ │ │ │ │ +56 void *deviceContext = NULL); │ │ │ │ │ +57 │ │ │ │ │ +_5_9 int _G_e_t_N_u_m_E_l_e_m_e_n_t_s() const; │ │ │ │ │ +60 │ │ │ │ │ +_6_2 int _G_e_t_N_u_m_V_e_r_t_i_c_e_s() const; │ │ │ │ │ +63 │ │ │ │ │ +_6_5 GLuint _B_i_n_d_V_B_O(void *deviceContext = NULL); │ │ │ │ │ +66 │ │ │ │ │ +67protected: │ │ │ │ │ +_6_9 _G_L_V_e_r_t_e_x_B_u_f_f_e_r(int numElements, int numVertices); │ │ │ │ │ +70 │ │ │ │ │ +_7_3 bool _a_l_l_o_c_a_t_e(); │ │ │ │ │ +74 │ │ │ │ │ +75private: │ │ │ │ │ +76 int _numElements; │ │ │ │ │ +77 int _numVertices; │ │ │ │ │ +78 GLuint _vbo; │ │ │ │ │ +79}; │ │ │ │ │ +80 │ │ │ │ │ +81} // end namespace Osd │ │ │ │ │ +82 │ │ │ │ │ +83} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ +84using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +85 │ │ │ │ │ +86} // end namespace OpenSubdiv │ │ │ │ │ +87 │ │ │ │ │ +88#endif // OPENSUBDIV3_OSD_GL_VERTEX_BUFFER_H │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_M_e_s_h_I_n_t_e_r_f_a_c_e │ │ │ │ │ -MeshInterface< GLPatchTable > GLMeshInterface │ │ │ │ │ -DDeeffiinniittiioonn _g_l_M_e_s_h_._h_:_3_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_M_e_s_h_I_n_t_e_r_f_a_c_e │ │ │ │ │ -DDeeffiinniittiioonn _m_e_s_h_._h_:_6_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ +Concrete vertex buffer class for GLSL subdivision and OpenGL drawing. │ │ │ │ │ +DDeeffiinniittiioonn _g_l_V_e_r_t_e_x_B_u_f_f_e_r_._h_:_4_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_V_e_r_t_e_x_B_u_f_f_e_r_:_:_~_G_L_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ +~GLVertexBuffer() │ │ │ │ │ +Destructor. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_V_e_r_t_e_x_B_u_f_f_e_r_:_:_B_i_n_d_V_B_O │ │ │ │ │ +GLuint BindVBO(void *deviceContext=NULL) │ │ │ │ │ +Returns the GL buffer object. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_V_e_r_t_e_x_B_u_f_f_e_r_:_:_G_e_t_N_u_m_E_l_e_m_e_n_t_s │ │ │ │ │ +int GetNumElements() const │ │ │ │ │ +Returns how many elements defined in this vertex buffer. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_V_e_r_t_e_x_B_u_f_f_e_r_:_:_U_p_d_a_t_e_D_a_t_a │ │ │ │ │ +void UpdateData(const float *src, int startVertex, int numVertices, void │ │ │ │ │ +*deviceContext=NULL) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_V_e_r_t_e_x_B_u_f_f_e_r_:_:_G_L_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ +GLVertexBuffer(int numElements, int numVertices) │ │ │ │ │ +Constructor. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_V_e_r_t_e_x_B_u_f_f_e_r_:_:_G_e_t_N_u_m_V_e_r_t_i_c_e_s │ │ │ │ │ +int GetNumVertices() const │ │ │ │ │ +Returns how many vertices allocated in this vertex buffer. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_V_e_r_t_e_x_B_u_f_f_e_r_:_:_C_r_e_a_t_e │ │ │ │ │ +static GLVertexBuffer * Create(int numElements, int numVertices, void │ │ │ │ │ +*deviceContext=NULL) │ │ │ │ │ +Creator. Returns NULL if error. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_G_L_V_e_r_t_e_x_B_u_f_f_e_r_:_:_a_l_l_o_c_a_t_e │ │ │ │ │ +bool allocate() │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _g_l_M_e_s_h_._h │ │ │ │ │ + * _g_l_V_e_r_t_e_x_B_u_f_f_e_r_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00863_source.html │ │ │ │ @@ -267,15 +267,15 @@ │ │ │ │
152using namespace OPENSUBDIV_VERSION;
│ │ │ │
153
│ │ │ │
154} // end namespace OpenSubdiv
│ │ │ │
155
│ │ │ │
156#endif // OPENSUBDIV3_OSD_GL_PATCH_TABLE_H
│ │ │ │ │ │ │ │
std::vector< PatchArray > PatchArrayVector
Definition types.h:132
│ │ │ │ -
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ +
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
PatchArrayVector const & GetPatchArrays() const
Returns the patch arrays for vertex index buffer data.
│ │ │ │
GLuint GetFVarPatchIndexBuffer(int fvarChannel=0) const
Returns the GL index buffer containing face-varying control vertices.
│ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00866.html │ │ │ │ @@ -94,15 +94,15 @@ │ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │
glLegacyGregoryPatchTable.h File Reference
│ │ │ │ │ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include "../far/patchTable.h"
│ │ │ │ +#include "../far/patchTable.h"
│ │ │ │ #include "../osd/nonCopyable.h"
│ │ │ │ #include "../osd/opengl.h"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00866_source.html │ │ │ │ @@ -194,15 +194,15 @@ │ │ │ │
83
│ │ │ │
84} // end namespace OpenSubdiv
│ │ │ │
85
│ │ │ │
86#endif // OPENSUBDIV3_OSD_GL_LEGACY_GREGORY_PATCH_TABLE_H
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ +
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00872_source.html │ │ │ │ @@ -213,15 +213,15 @@ │ │ │ │
112
│ │ │ │
113} // end namespace OpenSubdiv
│ │ │ │
114
│ │ │ │
115#endif // OPENSUBDIV3_OSD_TBB_KERNEL_H
│ │ │ │ │ │ │ │
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)
│ │ │ │
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)
│ │ │ │ -
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ +
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │
Coordinates set on a patch table.
Definition types.h:42
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include "../osd/bufferDescriptor.h"
│ │ │ │ +#include "../osd/bufferDescriptor.h"
│ │ │ │ #include "../osd/types.h"
│ │ │ │ #include <cstddef>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │

│ │ │ │ Classes

│ │ │ │ │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00875_source.html │ │ │ │ @@ -604,15 +604,15 @@ │ │ │ │
1240using namespace OPENSUBDIV_VERSION;
│ │ │ │
1241
│ │ │ │
1242} // end namespace OpenSubdiv
│ │ │ │
1243
│ │ │ │
1244
│ │ │ │
1245#endif // OPENSUBDIV3_OSD_TBB_EVALUATOR_H
│ │ │ │ │ │ │ │ -
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ +
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ │ │ │ │
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...
│ │ │ │
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 ...
│ │ │ │
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...
│ │ │ │
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.
│ │ │ │
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 ...
│ │ │ │
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, TbbEvaluator const *instance=NULL, void *deviceContext=NULL)
Generic limit eval function with derivatives. This function has a same signature as other device kern...
│ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00878_source.html │ │ │ │ @@ -182,15 +182,15 @@ │ │ │ │
81using namespace OPENSUBDIV_VERSION;
│ │ │ │
82
│ │ │ │
83} // end namespace OpenSubdiv
│ │ │ │
84
│ │ │ │
85#endif // OPENSUBDIV3_OSD_OMP_KERNEL_H
│ │ │ │ │ │ │ │
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)
│ │ │ │ -
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ +
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include "../osd/bufferDescriptor.h"
│ │ │ │ +#include "../osd/bufferDescriptor.h"
│ │ │ │ #include "../osd/types.h"
│ │ │ │ #include <cstddef>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │

│ │ │ │ Classes

│ │ │ │ │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00881_source.html │ │ │ │ @@ -604,15 +604,15 @@ │ │ │ │
1236using namespace OPENSUBDIV_VERSION;
│ │ │ │
1237
│ │ │ │
1238} // end namespace OpenSubdiv
│ │ │ │
1239
│ │ │ │
1240
│ │ │ │
1241#endif // OPENSUBDIV3_OSD_OMP_EVALUATOR_H
│ │ │ │ │ │ │ │ -
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ +
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ │ │ │ │
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 ...
│ │ │ │
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.
│ │ │ │
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 ...
│ │ │ │
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...
│ │ │ │
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.
│ │ │ │
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 ...
│ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00887.html │ │ │ │ @@ -102,18 +102,18 @@ │ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ #include <bitset>
│ │ │ │ #include <cassert>
│ │ │ │ #include <cstring>
│ │ │ │ #include <vector>
│ │ │ │ #include "../far/topologyRefiner.h"
│ │ │ │ -#include "../far/patchTableFactory.h"
│ │ │ │ -#include "../far/stencilTable.h"
│ │ │ │ -#include "../far/stencilTableFactory.h"
│ │ │ │ -#include "../osd/bufferDescriptor.h"
│ │ │ │ +#include "../far/patchTableFactory.h"
│ │ │ │ +#include "../far/stencilTable.h"
│ │ │ │ +#include "../far/stencilTableFactory.h"
│ │ │ │ +#include "../osd/bufferDescriptor.h"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │

│ │ │ │ Classes

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00887_source.html │ │ │ │ @@ -895,48 +895,48 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
Far::StencilTable const * convertToCompatibleStencilTable< Far::StencilTable, Far::StencilTable, void >(Far::StencilTable const *table, void *)
Definition mesh.h:149
│ │ │ │
Far::LimitStencilTable const * convertToCompatibleStencilTable< Far::LimitStencilTable, Far::LimitStencilTable, void >(Far::LimitStencilTable const *table, void *)
Definition mesh.h:159
│ │ │ │
std::bitset< NUM_MESH_BITS > MeshBitset
Definition mesh.h:63
│ │ │ │
Far::StencilTable const * convertToCompatibleStencilTable< Far::StencilTable, Far::StencilTable, ID3D11DeviceContext >(Far::StencilTable const *table, ID3D11DeviceContext *)
Definition mesh.h:169
│ │ │ │ -
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ -
int GetMaxValence() const
Returns max vertex valence.
Definition patchTable.h:92
│ │ │ │ -
StencilTable const * GetLocalPointStencilTable() const
Returns the stencil table to compute local point vertex values.
Definition patchTable.h:778
│ │ │ │ -
StencilTable const * GetLocalPointVaryingStencilTable() const
Returns the stencil table to compute local point varying values.
Definition patchTable.h:783
│ │ │ │ +
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ +
int GetMaxValence() const
Returns max vertex valence.
Definition patchTable.h:92
│ │ │ │ +
StencilTable const * GetLocalPointStencilTable() const
Returns the stencil table to compute local point vertex values.
Definition patchTable.h:778
│ │ │ │ +
StencilTable const * GetLocalPointVaryingStencilTable() const
Returns the stencil table to compute local point varying values.
Definition patchTable.h:783
│ │ │ │
static PatchTable * Create(TopologyRefiner const &refiner, Options options=Options(), ConstIndexArray selectedFaces=ConstIndexArray())
Instantiates a PatchTable from a client-provided TopologyRefiner.
│ │ │ │ - │ │ │ │ -
@ ENDCAP_LEGACY_GREGORY
legacy option for 2.x style Gregory patches (Catmark only)
│ │ │ │ -
@ ENDCAP_GREGORY_BASIS
use Gregory patches (highest quality, recommended default)
│ │ │ │ -
@ ENDCAP_BILINEAR_BASIS
use linear patches (simple quads or tris)
│ │ │ │ -
@ ENDCAP_BSPLINE_BASIS
use BSpline-like patches (same patch type as regular)
│ │ │ │ - │ │ │ │ -
int GetNumControlVertices() const
Returns the number of control vertices indexed in the table.
│ │ │ │ -
int GetNumStencils() const
Returns the number of stencils in the table.
│ │ │ │ -
Stencil table class wrapping the template for compatibility.
│ │ │ │ -
Limit stencil table class wrapping the template for compatibility.
│ │ │ │ -
static StencilTable const * Create(TopologyRefiner const &refiner, Options options=Options())
│ │ │ │ -
static StencilTable const * AppendLocalPointStencilTable(TopologyRefiner const &refiner, StencilTable const *baseStencilTable, StencilTable const *localPointStencilTable, bool factorize=true)
│ │ │ │ + │ │ │ │ +
@ ENDCAP_LEGACY_GREGORY
legacy option for 2.x style Gregory patches (Catmark only)
│ │ │ │ +
@ ENDCAP_GREGORY_BASIS
use Gregory patches (highest quality, recommended default)
│ │ │ │ +
@ ENDCAP_BILINEAR_BASIS
use linear patches (simple quads or tris)
│ │ │ │ +
@ ENDCAP_BSPLINE_BASIS
use BSpline-like patches (same patch type as regular)
│ │ │ │ + │ │ │ │ +
int GetNumControlVertices() const
Returns the number of control vertices indexed in the table.
│ │ │ │ +
int GetNumStencils() const
Returns the number of stencils in the table.
│ │ │ │ +
Stencil table class wrapping the template for compatibility.
│ │ │ │ +
Limit stencil table class wrapping the template for compatibility.
│ │ │ │ +
static StencilTable const * Create(TopologyRefiner const &refiner, Options options=Options())
│ │ │ │ +
static StencilTable const * AppendLocalPointStencilTable(TopologyRefiner const &refiner, StencilTable const *baseStencilTable, StencilTable const *localPointStencilTable, bool factorize=true)
│ │ │ │
int GetNumVertices() const
Return the number of vertices in this level.
│ │ │ │
Stores topology data for a specified set of refinement options.
│ │ │ │
bool IsUniform() const
Returns true if uniform refinement has been applied.
│ │ │ │
int GetNumFVarChannels() const
Returns the number of face-varying channels in the tables.
│ │ │ │
void RefineUniform(UniformOptions options)
Refine the topology uniformly.
│ │ │ │
TopologyLevel const & GetLevel(int level) const
Returns a handle to access data specific to a particular level.
│ │ │ │
void RefineAdaptive(AdaptiveOptions options, ConstIndexArray selectedFaces=ConstIndexArray())
Feature Adaptive topology refinement.
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │
virtual Far::PatchTable const * GetFarPatchTable() const =0
│ │ │ │
static void refineMesh(Far::TopologyRefiner &refiner, int level, MeshBitset bits)
Definition mesh.h:117
│ │ │ │ │ │ │ │ │ │ │ │
virtual void UpdateVaryingBuffer(float const *varyingData, int startVertex, int numVerts)=0
│ │ │ │
static void refineMesh(Far::TopologyRefiner &refiner, int level, bool adaptive, bool singleCreasePatch)
Definition mesh.h:101
│ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00890.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/cpuVertexBuffer.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/osd/cpuPatchTable.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -90,41 +90,46 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
cpuVertexBuffer.h File Reference
│ │ │ │ +
cpuPatchTable.h File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include <cstddef>
│ │ │ │ +#include <vector>
│ │ │ │ +#include "../far/patchDescriptor.h"
│ │ │ │ +#include "../osd/nonCopyable.h"
│ │ │ │ +#include "../osd/types.h"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │

│ │ │ │ Classes

class  MeshInterface< PATCH_TABLE >
 
│ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  CpuVertexBuffer
 Concrete vertex buffer class for CPU subdivision. More...
class  CpuPatchTable
 Cpu patch table. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Far
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,29 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -cpuVertexBuffer.h File Reference │ │ │ │ │ +cpuPatchTable.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ -#include │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_f_a_r_/_p_a_t_c_h_D_e_s_c_r_i_p_t_o_r_._h" │ │ │ │ │ +#include "../osd/nonCopyable.h" │ │ │ │ │ +#include "_._._/_o_s_d_/_t_y_p_e_s_._h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _C_p_u_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ -  Concrete vertex buffer class for CPU subdivision. _M_o_r_e_._._. │ │ │ │ │ +class   _C_p_u_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +  Cpu patch table. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ +namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r │ │ │ │ │ +  │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d │ │ │ │ │   │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _c_p_u_V_e_r_t_e_x_B_u_f_f_e_r_._h │ │ │ │ │ + * _c_p_u_P_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00890.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,3 +1,3 @@ │ │ │ │ │ var a00890 = [ │ │ │ │ │ - ["CpuVertexBuffer", "a01177.html", "a01177"] │ │ │ │ │ + ["CpuPatchTable", "a01173.html", "a01173"] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00890_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/cpuVertexBuffer.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/osd/cpuPatchTable.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,19 +92,19 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
cpuVertexBuffer.h
│ │ │ │ +
cpuPatchTable.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │ -
2// Copyright 2013 Pixar
│ │ │ │ +
2// Copyright 2015 Pixar
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │
6// compliance with the Apache License and the following modification to it:
│ │ │ │
7// Section 6. Trademarks. is deleted and replaced with:
│ │ │ │
8//
│ │ │ │
9// 6. Trademarks. This License does not grant permission to use the trade
│ │ │ │ @@ -119,75 +119,193 @@ │ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │
24
│ │ │ │ -
25#ifndef OPENSUBDIV3_OSD_CPU_VERTEX_BUFFER_H
│ │ │ │ -
26#define OPENSUBDIV3_OSD_CPU_VERTEX_BUFFER_H
│ │ │ │ +
25#ifndef OPENSUBDIV3_OSD_CPU_PATCH_TABLE_H
│ │ │ │ +
26#define OPENSUBDIV3_OSD_CPU_PATCH_TABLE_H
│ │ │ │
27
│ │ │ │
28#include "../version.h"
│ │ │ │
29
│ │ │ │ -
30#include <cstddef>
│ │ │ │ -
31
│ │ │ │ -
32namespace OpenSubdiv {
│ │ │ │ -
33namespace OPENSUBDIV_VERSION {
│ │ │ │ +
30#include <vector>
│ │ │ │ +
31#include "../far/patchDescriptor.h"
│ │ │ │ +
32#include "../osd/nonCopyable.h"
│ │ │ │ +
33#include "../osd/types.h"
│ │ │ │
34
│ │ │ │ -
35namespace Osd {
│ │ │ │ +
35#include <vector>
│ │ │ │
36
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
43public:
│ │ │ │ -
45 static CpuVertexBuffer * Create(int numElements, int numVertices,
│ │ │ │ -
46 void *deviceContext = NULL);
│ │ │ │ -
47
│ │ │ │ - │ │ │ │ -
50
│ │ │ │ -
53 void UpdateData(const float *src, int startVertex, int numVertices,
│ │ │ │ -
54 void *deviceContext = NULL);
│ │ │ │ -
55
│ │ │ │ -
57 int GetNumElements() const;
│ │ │ │ -
58
│ │ │ │ -
60 int GetNumVertices() const;
│ │ │ │ -
61
│ │ │ │ -
63 float * BindCpuBuffer();
│ │ │ │ -
64
│ │ │ │ -
65protected:
│ │ │ │ -
67 CpuVertexBuffer(int numElements, int numVertices);
│ │ │ │ -
68
│ │ │ │ -
69private:
│ │ │ │ -
70 int _numElements;
│ │ │ │ -
71 int _numVertices;
│ │ │ │ -
72 float *_cpuBuffer;
│ │ │ │ -
73};
│ │ │ │ -
│ │ │ │ -
74
│ │ │ │ -
75
│ │ │ │ -
76} // end namespace Osd
│ │ │ │ -
77
│ │ │ │ -
78} // end namespace OPENSUBDIV_VERSION
│ │ │ │ -
79using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
80
│ │ │ │ -
81} // end namespace OpenSubdiv
│ │ │ │ -
82
│ │ │ │ -
83#endif // OPENSUBDIV3_OSD_CPU_VERTEX_BUFFER_H
│ │ │ │ +
37namespace OpenSubdiv {
│ │ │ │ +
38namespace OPENSUBDIV_VERSION {
│ │ │ │ +
39
│ │ │ │ +
40namespace Far{
│ │ │ │ +
41 class PatchTable;
│ │ │ │ +
42};
│ │ │ │ +
43
│ │ │ │ +
44namespace Osd {
│ │ │ │ +
45
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
60public:
│ │ │ │ +
│ │ │ │ +
61 static CpuPatchTable *Create(const Far::PatchTable *patchTable,
│ │ │ │ +
62 void *deviceContext = NULL) {
│ │ │ │ +
63 (void)deviceContext; // unused
│ │ │ │ +
64 return new CpuPatchTable(patchTable);
│ │ │ │ +
65 }
│ │ │ │ +
│ │ │ │ +
66
│ │ │ │ +
67 explicit CpuPatchTable(const Far::PatchTable *patchTable);
│ │ │ │ + │ │ │ │ +
69
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
71 return &_patchArrays[0];
│ │ │ │ +
72 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
73 const int *GetPatchIndexBuffer() const {
│ │ │ │ +
74 return &_indexBuffer[0];
│ │ │ │ +
75 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
77 return &_patchParamBuffer[0];
│ │ │ │ +
78 }
│ │ │ │ +
│ │ │ │ +
79
│ │ │ │ +
│ │ │ │ +
80 size_t GetNumPatchArrays() const {
│ │ │ │ +
81 return _patchArrays.size();
│ │ │ │ +
82 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
83 size_t GetPatchIndexSize() const {
│ │ │ │ +
84 return _indexBuffer.size();
│ │ │ │ +
85 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
86 size_t GetPatchParamSize() const {
│ │ │ │ +
87 return _patchParamBuffer.size();
│ │ │ │ +
88 }
│ │ │ │ +
│ │ │ │ +
89
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
91 if (_varyingPatchArrays.empty()) {
│ │ │ │ +
92 return NULL;
│ │ │ │ +
93 }
│ │ │ │ +
94 return &_varyingPatchArrays[0];
│ │ │ │ +
95 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
96 const int *GetVaryingPatchIndexBuffer() const {
│ │ │ │ +
97 if (_varyingIndexBuffer.empty()) {
│ │ │ │ +
98 return NULL;
│ │ │ │ +
99 }
│ │ │ │ +
100 return &_varyingIndexBuffer[0];
│ │ │ │ +
101 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
103 return _varyingIndexBuffer.size();
│ │ │ │ +
104 }
│ │ │ │ +
│ │ │ │ +
105
│ │ │ │ +
│ │ │ │ +
106 int GetNumFVarChannels() const {
│ │ │ │ +
107 return (int)_fvarPatchArrays.size();
│ │ │ │ +
108 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
109 const PatchArray *GetFVarPatchArrayBuffer(int fvarChannel = 0) const {
│ │ │ │ +
110 return &_fvarPatchArrays[fvarChannel][0];
│ │ │ │ +
111 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
112 const int *GetFVarPatchIndexBuffer(int fvarChannel = 0) const {
│ │ │ │ +
113 return &_fvarIndexBuffers[fvarChannel][0];
│ │ │ │ +
114 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
115 size_t GetFVarPatchIndexSize(int fvarChannel = 0) const {
│ │ │ │ +
116 return _fvarIndexBuffers[fvarChannel].size();
│ │ │ │ +
117 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
118 const PatchParam *GetFVarPatchParamBuffer(int fvarChannel= 0) const {
│ │ │ │ +
119 return &_fvarParamBuffers[fvarChannel][0];
│ │ │ │ +
120 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
121 size_t GetFVarPatchParamSize(int fvarChannel = 0) const {
│ │ │ │ +
122 return _fvarParamBuffers[fvarChannel].size();
│ │ │ │ +
123 }
│ │ │ │ +
│ │ │ │ +
124
│ │ │ │ +
125protected:
│ │ │ │ + │ │ │ │ +
127 std::vector<int> _indexBuffer;
│ │ │ │ + │ │ │ │ +
129
│ │ │ │ + │ │ │ │ +
131 std::vector<int> _varyingIndexBuffer;
│ │ │ │ +
132
│ │ │ │ +
133 std::vector< PatchArrayVector > _fvarPatchArrays;
│ │ │ │ +
134 std::vector< std::vector<int> > _fvarIndexBuffers;
│ │ │ │ +
135 std::vector< PatchParamVector > _fvarParamBuffers;
│ │ │ │ +
136};
│ │ │ │ +
│ │ │ │ +
137
│ │ │ │ +
138} // end namespace Osd
│ │ │ │ +
139
│ │ │ │ +
140} // end namespace OPENSUBDIV_VERSION
│ │ │ │ +
141using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
142
│ │ │ │ +
143} // end namespace OpenSubdiv
│ │ │ │ +
144
│ │ │ │ +
145#endif // OPENSUBDIV3_OSD_CPU_PATCH_TABLE_H
│ │ │ │ │ │ │ │ -
Concrete vertex buffer class for CPU subdivision.
│ │ │ │ -
int GetNumElements() const
Returns how many elements defined in this vertex buffer.
│ │ │ │ -
static CpuVertexBuffer * Create(int numElements, int numVertices, void *deviceContext=NULL)
Creator. Returns NULL if error.
│ │ │ │ -
void UpdateData(const float *src, int startVertex, int numVertices, void *deviceContext=NULL)
│ │ │ │ -
int GetNumVertices() const
Returns how many vertices allocated in this vertex buffer.
│ │ │ │ - │ │ │ │ -
float * BindCpuBuffer()
Returns the address of CPU buffer.
│ │ │ │ -
CpuVertexBuffer(int numElements, int numVertices)
Constructor.
│ │ │ │ +
std::vector< PatchParam > PatchParamVector
Definition types.h:133
│ │ │ │ +
std::vector< PatchArray > PatchArrayVector
Definition types.h:132
│ │ │ │ +
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ + │ │ │ │ +
const PatchArray * GetFVarPatchArrayBuffer(int fvarChannel=0) const
│ │ │ │ + │ │ │ │ + │ │ │ │ +
size_t GetFVarPatchParamSize(int fvarChannel=0) const
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
static CpuPatchTable * Create(const Far::PatchTable *patchTable, void *deviceContext=NULL)
│ │ │ │ +
std::vector< PatchParamVector > _fvarParamBuffers
│ │ │ │ +
CpuPatchTable(const Far::PatchTable *patchTable)
│ │ │ │ +
std::vector< std::vector< int > > _fvarIndexBuffers
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
size_t GetFVarPatchIndexSize(int fvarChannel=0) const
│ │ │ │ +
const int * GetFVarPatchIndexBuffer(int fvarChannel=0) const
│ │ │ │ +
const PatchParam * GetFVarPatchParamBuffer(int fvarChannel=0) const
│ │ │ │ + │ │ │ │ + │ │ │ │ +
const PatchArray * GetVaryingPatchArrayBuffer() const
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
std::vector< PatchArrayVector > _fvarPatchArrays
│ │ │ │ + │ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -cpuVertexBuffer.h │ │ │ │ │ +cpuPatchTable.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ -2// Copyright 2013 Pixar │ │ │ │ │ +2// Copyright 2015 Pixar │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ 7// Section 6. Trademarks. is deleted and replaced with: │ │ │ │ │ 8// │ │ │ │ │ 9// 6. Trademarks. This License does not grant permission to use the trade │ │ │ │ │ @@ -24,84 +24,215 @@ │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ 24 │ │ │ │ │ -25#ifndef OPENSUBDIV3_OSD_CPU_VERTEX_BUFFER_H │ │ │ │ │ -26#define OPENSUBDIV3_OSD_CPU_VERTEX_BUFFER_H │ │ │ │ │ +25#ifndef OPENSUBDIV3_OSD_CPU_PATCH_TABLE_H │ │ │ │ │ +26#define OPENSUBDIV3_OSD_CPU_PATCH_TABLE_H │ │ │ │ │ 27 │ │ │ │ │ 28#include "../version.h" │ │ │ │ │ 29 │ │ │ │ │ -30#include │ │ │ │ │ -31 │ │ │ │ │ -32namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ -33namespace OPENSUBDIV_VERSION { │ │ │ │ │ +30#include │ │ │ │ │ +31#include "../far/patchDescriptor.h" │ │ │ │ │ +32#include "../osd/nonCopyable.h" │ │ │ │ │ +33#include "../osd/types.h" │ │ │ │ │ 34 │ │ │ │ │ -35namespace Osd { │ │ │ │ │ +35#include │ │ │ │ │ 36 │ │ │ │ │ -_4_2class _C_p_u_V_e_r_t_e_x_B_u_f_f_e_r { │ │ │ │ │ -43public: │ │ │ │ │ -_4_5 static _C_p_u_V_e_r_t_e_x_B_u_f_f_e_r * _C_r_e_a_t_e(int numElements, int numVertices, │ │ │ │ │ -46 void *deviceContext = NULL); │ │ │ │ │ -47 │ │ │ │ │ -_4_9 _~_C_p_u_V_e_r_t_e_x_B_u_f_f_e_r(); │ │ │ │ │ -50 │ │ │ │ │ -_5_3 void _U_p_d_a_t_e_D_a_t_a(const float *src, int startVertex, int numVertices, │ │ │ │ │ -54 void *deviceContext = NULL); │ │ │ │ │ -55 │ │ │ │ │ -_5_7 int _G_e_t_N_u_m_E_l_e_m_e_n_t_s() const; │ │ │ │ │ -58 │ │ │ │ │ -_6_0 int _G_e_t_N_u_m_V_e_r_t_i_c_e_s() const; │ │ │ │ │ -61 │ │ │ │ │ -_6_3 float * _B_i_n_d_C_p_u_B_u_f_f_e_r(); │ │ │ │ │ -64 │ │ │ │ │ -65protected: │ │ │ │ │ -_6_7 _C_p_u_V_e_r_t_e_x_B_u_f_f_e_r(int numElements, int numVertices); │ │ │ │ │ -68 │ │ │ │ │ -69private: │ │ │ │ │ -70 int _numElements; │ │ │ │ │ -71 int _numVertices; │ │ │ │ │ -72 float *_cpuBuffer; │ │ │ │ │ -73}; │ │ │ │ │ -74 │ │ │ │ │ -75 │ │ │ │ │ -76} // end namespace Osd │ │ │ │ │ -77 │ │ │ │ │ -78} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ -79using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -80 │ │ │ │ │ -81} // end namespace OpenSubdiv │ │ │ │ │ -82 │ │ │ │ │ -83#endif // OPENSUBDIV3_OSD_CPU_VERTEX_BUFFER_H │ │ │ │ │ +37namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ +38namespace OPENSUBDIV_VERSION { │ │ │ │ │ +39 │ │ │ │ │ +40namespace Far{ │ │ │ │ │ +41 class PatchTable; │ │ │ │ │ +42}; │ │ │ │ │ +43 │ │ │ │ │ +44namespace Osd { │ │ │ │ │ +45 │ │ │ │ │ +_5_9class _C_p_u_P_a_t_c_h_T_a_b_l_e { │ │ │ │ │ +60public: │ │ │ │ │ +_6_1 static _C_p_u_P_a_t_c_h_T_a_b_l_e *_C_r_e_a_t_e(const _F_a_r_:_:_P_a_t_c_h_T_a_b_l_e *patchTable, │ │ │ │ │ +62 void *deviceContext = NULL) { │ │ │ │ │ +63 (void)deviceContext; // unused │ │ │ │ │ +64 return new _C_p_u_P_a_t_c_h_T_a_b_l_e(patchTable); │ │ │ │ │ +65 } │ │ │ │ │ +66 │ │ │ │ │ +_6_7 explicit _C_p_u_P_a_t_c_h_T_a_b_l_e(const _F_a_r_:_:_P_a_t_c_h_T_a_b_l_e *patchTable); │ │ │ │ │ +_6_8 _~_C_p_u_P_a_t_c_h_T_a_b_l_e() {} │ │ │ │ │ +69 │ │ │ │ │ +_7_0 const _P_a_t_c_h_A_r_r_a_y *_G_e_t_P_a_t_c_h_A_r_r_a_y_B_u_f_f_e_r() const { │ │ │ │ │ +71 return &___p_a_t_c_h_A_r_r_a_y_s[0]; │ │ │ │ │ +72 } │ │ │ │ │ +_7_3 const int *_G_e_t_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r() const { │ │ │ │ │ +74 return &___i_n_d_e_x_B_u_f_f_e_r[0]; │ │ │ │ │ +75 } │ │ │ │ │ +_7_6 const _P_a_t_c_h_P_a_r_a_m *_G_e_t_P_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r() const { │ │ │ │ │ +77 return &___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r[0]; │ │ │ │ │ +78 } │ │ │ │ │ +79 │ │ │ │ │ +_8_0 size_t _G_e_t_N_u_m_P_a_t_c_h_A_r_r_a_y_s() const { │ │ │ │ │ +81 return ___p_a_t_c_h_A_r_r_a_y_s.size(); │ │ │ │ │ +82 } │ │ │ │ │ +_8_3 size_t _G_e_t_P_a_t_c_h_I_n_d_e_x_S_i_z_e() const { │ │ │ │ │ +84 return ___i_n_d_e_x_B_u_f_f_e_r.size(); │ │ │ │ │ +85 } │ │ │ │ │ +_8_6 size_t _G_e_t_P_a_t_c_h_P_a_r_a_m_S_i_z_e() const { │ │ │ │ │ +87 return ___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r.size(); │ │ │ │ │ +88 } │ │ │ │ │ +89 │ │ │ │ │ +_9_0 const _P_a_t_c_h_A_r_r_a_y *_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_B_u_f_f_e_r() const { │ │ │ │ │ +91 if (___v_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_s.empty()) { │ │ │ │ │ +92 return NULL; │ │ │ │ │ +93 } │ │ │ │ │ +94 return &___v_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_s[0]; │ │ │ │ │ +95 } │ │ │ │ │ +_9_6 const int *_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r() const { │ │ │ │ │ +97 if (___v_a_r_y_i_n_g_I_n_d_e_x_B_u_f_f_e_r.empty()) { │ │ │ │ │ +98 return NULL; │ │ │ │ │ +99 } │ │ │ │ │ +100 return &___v_a_r_y_i_n_g_I_n_d_e_x_B_u_f_f_e_r[0]; │ │ │ │ │ +101 } │ │ │ │ │ +_1_0_2 size_t _G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_I_n_d_e_x_S_i_z_e() const { │ │ │ │ │ +103 return ___v_a_r_y_i_n_g_I_n_d_e_x_B_u_f_f_e_r.size(); │ │ │ │ │ +104 } │ │ │ │ │ +105 │ │ │ │ │ +_1_0_6 int _G_e_t_N_u_m_F_V_a_r_C_h_a_n_n_e_l_s() const { │ │ │ │ │ +107 return (int)___f_v_a_r_P_a_t_c_h_A_r_r_a_y_s.size(); │ │ │ │ │ +108 } │ │ │ │ │ +_1_0_9 const _P_a_t_c_h_A_r_r_a_y *_G_e_t_F_V_a_r_P_a_t_c_h_A_r_r_a_y_B_u_f_f_e_r(int fvarChannel = 0) const { │ │ │ │ │ +110 return &___f_v_a_r_P_a_t_c_h_A_r_r_a_y_s[fvarChannel][0]; │ │ │ │ │ +111 } │ │ │ │ │ +_1_1_2 const int *_G_e_t_F_V_a_r_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r(int fvarChannel = 0) const { │ │ │ │ │ +113 return &___f_v_a_r_I_n_d_e_x_B_u_f_f_e_r_s[fvarChannel][0]; │ │ │ │ │ +114 } │ │ │ │ │ +_1_1_5 size_t _G_e_t_F_V_a_r_P_a_t_c_h_I_n_d_e_x_S_i_z_e(int fvarChannel = 0) const { │ │ │ │ │ +116 return ___f_v_a_r_I_n_d_e_x_B_u_f_f_e_r_s[fvarChannel].size(); │ │ │ │ │ +117 } │ │ │ │ │ +_1_1_8 const _P_a_t_c_h_P_a_r_a_m *_G_e_t_F_V_a_r_P_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r(int fvarChannel= 0) const { │ │ │ │ │ +119 return &___f_v_a_r_P_a_r_a_m_B_u_f_f_e_r_s[fvarChannel][0]; │ │ │ │ │ +120 } │ │ │ │ │ +_1_2_1 size_t _G_e_t_F_V_a_r_P_a_t_c_h_P_a_r_a_m_S_i_z_e(int fvarChannel = 0) const { │ │ │ │ │ +122 return ___f_v_a_r_P_a_r_a_m_B_u_f_f_e_r_s[fvarChannel].size(); │ │ │ │ │ +123 } │ │ │ │ │ +124 │ │ │ │ │ +125protected: │ │ │ │ │ +_1_2_6 _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r ___p_a_t_c_h_A_r_r_a_y_s; │ │ │ │ │ +_1_2_7 std::vector ___i_n_d_e_x_B_u_f_f_e_r; │ │ │ │ │ +_1_2_8 _P_a_t_c_h_P_a_r_a_m_V_e_c_t_o_r ___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r; │ │ │ │ │ +129 │ │ │ │ │ +_1_3_0 _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r ___v_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_s; │ │ │ │ │ +_1_3_1 std::vector ___v_a_r_y_i_n_g_I_n_d_e_x_B_u_f_f_e_r; │ │ │ │ │ +132 │ │ │ │ │ +_1_3_3 std::vector< PatchArrayVector > ___f_v_a_r_P_a_t_c_h_A_r_r_a_y_s; │ │ │ │ │ +_1_3_4 std::vector< std::vector > ___f_v_a_r_I_n_d_e_x_B_u_f_f_e_r_s; │ │ │ │ │ +_1_3_5 std::vector< PatchParamVector > ___f_v_a_r_P_a_r_a_m_B_u_f_f_e_r_s; │ │ │ │ │ +136}; │ │ │ │ │ +137 │ │ │ │ │ +138} // end namespace Osd │ │ │ │ │ +139 │ │ │ │ │ +140} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ +141using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +142 │ │ │ │ │ +143} // end namespace OpenSubdiv │ │ │ │ │ +144 │ │ │ │ │ +145#endif // OPENSUBDIV3_OSD_CPU_PATCH_TABLE_H │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ -Concrete vertex buffer class for CPU subdivision. │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_V_e_r_t_e_x_B_u_f_f_e_r_._h_:_4_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_V_e_r_t_e_x_B_u_f_f_e_r_:_:_G_e_t_N_u_m_E_l_e_m_e_n_t_s │ │ │ │ │ -int GetNumElements() const │ │ │ │ │ -Returns how many elements defined in this vertex buffer. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_V_e_r_t_e_x_B_u_f_f_e_r_:_:_C_r_e_a_t_e │ │ │ │ │ -static CpuVertexBuffer * Create(int numElements, int numVertices, void │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_P_a_r_a_m_V_e_c_t_o_r │ │ │ │ │ +std::vector< PatchParam > PatchParamVector │ │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e_s_._h_:_1_3_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r │ │ │ │ │ +std::vector< PatchArray > PatchArrayVector │ │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e_s_._h_:_1_3_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +Container for arrays of parametric patches. │ │ │ │ │ +DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_5_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +Cpu patch table. │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_5_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_A_r_r_a_y_B_u_f_f_e_r │ │ │ │ │ +const PatchArray * GetFVarPatchArrayBuffer(int fvarChannel=0) const │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_0_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ +const int * GetVaryingPatchIndexBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_9_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:___v_a_r_y_i_n_g_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ +std::vector< int > _varyingIndexBuffer │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_3_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_P_a_r_a_m_S_i_z_e │ │ │ │ │ +size_t GetFVarPatchParamSize(int fvarChannel=0) const │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_2_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_~_C_p_u_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +~CpuPatchTable() │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_6_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r │ │ │ │ │ +PatchParamVector _patchParamBuffer │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_2_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ +const int * GetPatchIndexBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_7_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ +static CpuPatchTable * Create(const Far::PatchTable *patchTable, void │ │ │ │ │ *deviceContext=NULL) │ │ │ │ │ -Creator. Returns NULL if error. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_V_e_r_t_e_x_B_u_f_f_e_r_:_:_U_p_d_a_t_e_D_a_t_a │ │ │ │ │ -void UpdateData(const float *src, int startVertex, int numVertices, void │ │ │ │ │ -*deviceContext=NULL) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_V_e_r_t_e_x_B_u_f_f_e_r_:_:_G_e_t_N_u_m_V_e_r_t_i_c_e_s │ │ │ │ │ -int GetNumVertices() const │ │ │ │ │ -Returns how many vertices allocated in this vertex buffer. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_V_e_r_t_e_x_B_u_f_f_e_r_:_:_~_C_p_u_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ -~CpuVertexBuffer() │ │ │ │ │ -Destructor. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_V_e_r_t_e_x_B_u_f_f_e_r_:_:_B_i_n_d_C_p_u_B_u_f_f_e_r │ │ │ │ │ -float * BindCpuBuffer() │ │ │ │ │ -Returns the address of CPU buffer. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_V_e_r_t_e_x_B_u_f_f_e_r_:_:_C_p_u_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ -CpuVertexBuffer(int numElements, int numVertices) │ │ │ │ │ -Constructor. │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_6_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:___f_v_a_r_P_a_r_a_m_B_u_f_f_e_r_s │ │ │ │ │ +std::vector< PatchParamVector > _fvarParamBuffers │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_3_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ +CpuPatchTable(const Far::PatchTable *patchTable) │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:___f_v_a_r_I_n_d_e_x_B_u_f_f_e_r_s │ │ │ │ │ +std::vector< std::vector< int > > _fvarIndexBuffers │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_3_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_I_n_d_e_x_S_i_z_e │ │ │ │ │ +size_t GetPatchIndexSize() const │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_8_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:___p_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ +PatchArrayVector _patchArrays │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_2_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r │ │ │ │ │ +const PatchParam * GetPatchParamBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_7_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:___i_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ +std::vector< int > _indexBuffer │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_2_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_I_n_d_e_x_S_i_z_e │ │ │ │ │ +size_t GetFVarPatchIndexSize(int fvarChannel=0) const │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_1_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ +const int * GetFVarPatchIndexBuffer(int fvarChannel=0) const │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_1_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r │ │ │ │ │ +const PatchParam * GetFVarPatchParamBuffer(int fvarChannel=0) const │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_1_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_P_a_r_a_m_S_i_z_e │ │ │ │ │ +size_t GetPatchParamSize() const │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_8_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_I_n_d_e_x_S_i_z_e │ │ │ │ │ +size_t GetVaryingPatchIndexSize() const │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_0_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_B_u_f_f_e_r │ │ │ │ │ +const PatchArray * GetVaryingPatchArrayBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_9_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_F_V_a_r_C_h_a_n_n_e_l_s │ │ │ │ │ +int GetNumFVarChannels() const │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_0_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_P_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ +size_t GetNumPatchArrays() const │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_8_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_A_r_r_a_y_B_u_f_f_e_r │ │ │ │ │ +const PatchArray * GetPatchArrayBuffer() const │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_7_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:___v_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ +PatchArrayVector _varyingPatchArrays │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_3_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:___f_v_a_r_P_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ +std::vector< PatchArrayVector > _fvarPatchArrays │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_3_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_A_r_r_a_y │ │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e_s_._h_:_6_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_P_a_r_a_m │ │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e_s_._h_:_1_2_7 │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _c_p_u_V_e_r_t_e_x_B_u_f_f_e_r_._h │ │ │ │ │ + * _c_p_u_P_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00893.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/cpuEvaluator.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/osd/cpuVertexBuffer.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -90,27 +90,26 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
cpuEvaluator.h File Reference
│ │ │ │ +
cpuVertexBuffer.h File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include "../osd/bufferDescriptor.h"
│ │ │ │ -#include "../osd/types.h"
│ │ │ │ #include <cstddef>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  CpuEvaluator
class  CpuVertexBuffer
 Concrete vertex buffer class for CPU subdivision. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -119,13 +118,13 @@ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,25 +1,24 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -cpuEvaluator.h File Reference │ │ │ │ │ +cpuVertexBuffer.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ -#include "_._._/_o_s_d_/_b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h" │ │ │ │ │ -#include "_._._/_o_s_d_/_t_y_p_e_s_._h" │ │ │ │ │ #include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _C_p_u_E_v_a_l_u_a_t_o_r │ │ │ │ │ +class   _C_p_u_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ +  Concrete vertex buffer class for CPU subdivision. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d │ │ │ │ │   │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _c_p_u_E_v_a_l_u_a_t_o_r_._h │ │ │ │ │ + * _c_p_u_V_e_r_t_e_x_B_u_f_f_e_r_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00893.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,3 +1,3 @@ │ │ │ │ │ var a00893 = [ │ │ │ │ │ - ["CpuEvaluator", "a01165.html", null] │ │ │ │ │ + ["CpuVertexBuffer", "a01177.html", "a01177"] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00893_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/cpuEvaluator.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/osd/cpuVertexBuffer.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,19 +92,19 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
cpuEvaluator.h
│ │ │ │ +
cpuVertexBuffer.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │ -
2// Copyright 2015 Pixar
│ │ │ │ +
2// Copyright 2013 Pixar
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │
6// compliance with the Apache License and the following modification to it:
│ │ │ │
7// Section 6. Trademarks. is deleted and replaced with:
│ │ │ │
8//
│ │ │ │
9// 6. Trademarks. This License does not grant permission to use the trade
│ │ │ │ @@ -119,529 +119,75 @@ │ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │
24
│ │ │ │ -
25#ifndef OPENSUBDIV3_OSD_CPU_EVALUATOR_H
│ │ │ │ -
26#define OPENSUBDIV3_OSD_CPU_EVALUATOR_H
│ │ │ │ +
25#ifndef OPENSUBDIV3_OSD_CPU_VERTEX_BUFFER_H
│ │ │ │ +
26#define OPENSUBDIV3_OSD_CPU_VERTEX_BUFFER_H
│ │ │ │
27
│ │ │ │
28#include "../version.h"
│ │ │ │ -
29#include "../osd/bufferDescriptor.h"
│ │ │ │ -
30#include "../osd/types.h"
│ │ │ │ +
29
│ │ │ │ +
30#include <cstddef>
│ │ │ │
31
│ │ │ │ -
32#include <cstddef>
│ │ │ │ -
33
│ │ │ │ -
34namespace OpenSubdiv {
│ │ │ │ -
35namespace OPENSUBDIV_VERSION {
│ │ │ │ +
32namespace OpenSubdiv {
│ │ │ │ +
33namespace OPENSUBDIV_VERSION {
│ │ │ │ +
34
│ │ │ │ +
35namespace Osd {
│ │ │ │
36
│ │ │ │ -
37namespace Osd {
│ │ │ │ -
38
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
40public:
│ │ │ │ -
46
│ │ │ │ -
71 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ -
│ │ │ │ -
72 static bool EvalStencils(
│ │ │ │ -
73 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
74 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
75 STENCIL_TABLE const *stencilTable,
│ │ │ │ -
76 const CpuEvaluator *instance = NULL,
│ │ │ │ -
77 void * deviceContext = NULL) {
│ │ │ │ -
78
│ │ │ │ -
79 (void)instance; // unused
│ │ │ │ -
80 (void)deviceContext; // unused
│ │ │ │ -
81
│ │ │ │ -
82 if (stencilTable->GetNumStencils() == 0)
│ │ │ │ -
83 return false;
│ │ │ │ -
84
│ │ │ │ -
85 return EvalStencils(srcBuffer->BindCpuBuffer(), srcDesc,
│ │ │ │ -
86 dstBuffer->BindCpuBuffer(), dstDesc,
│ │ │ │ -
87 &stencilTable->GetSizes()[0],
│ │ │ │ -
88 &stencilTable->GetOffsets()[0],
│ │ │ │ -
89 &stencilTable->GetControlIndices()[0],
│ │ │ │ -
90 &stencilTable->GetWeights()[0],
│ │ │ │ -
91 /*start = */ 0,
│ │ │ │ -
92 /*end = */ stencilTable->GetNumStencils());
│ │ │ │ -
93 }
│ │ │ │ -
│ │ │ │ -
94
│ │ │ │ -
121 static bool EvalStencils(
│ │ │ │ -
122 const float *src, BufferDescriptor const &srcDesc,
│ │ │ │ -
123 float *dst, BufferDescriptor const &dstDesc,
│ │ │ │ -
124 const int * sizes,
│ │ │ │ -
125 const int * offsets,
│ │ │ │ -
126 const int * indices,
│ │ │ │ -
127 const float * weights,
│ │ │ │ -
128 int start, int end);
│ │ │ │ -
129
│ │ │ │ -
167 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ -
│ │ │ │ -
168 static bool EvalStencils(
│ │ │ │ -
169 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
170 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
171 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
172 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
173 STENCIL_TABLE const *stencilTable,
│ │ │ │ -
174 const CpuEvaluator *instance = NULL,
│ │ │ │ -
175 void * deviceContext = NULL) {
│ │ │ │ -
176
│ │ │ │ -
177 (void)instance; // unused
│ │ │ │ -
178 (void)deviceContext; // unused
│ │ │ │ -
179
│ │ │ │ -
180 return EvalStencils(srcBuffer->BindCpuBuffer(), srcDesc,
│ │ │ │ -
181 dstBuffer->BindCpuBuffer(), dstDesc,
│ │ │ │ -
182 duBuffer->BindCpuBuffer(), duDesc,
│ │ │ │ -
183 dvBuffer->BindCpuBuffer(), dvDesc,
│ │ │ │ -
184 &stencilTable->GetSizes()[0],
│ │ │ │ -
185 &stencilTable->GetOffsets()[0],
│ │ │ │ -
186 &stencilTable->GetControlIndices()[0],
│ │ │ │ -
187 &stencilTable->GetWeights()[0],
│ │ │ │ -
188 &stencilTable->GetDuWeights()[0],
│ │ │ │ -
189 &stencilTable->GetDvWeights()[0],
│ │ │ │ -
190 /*start = */ 0,
│ │ │ │ -
191 /*end = */ stencilTable->GetNumStencils());
│ │ │ │ -
192 }
│ │ │ │ -
│ │ │ │ -
193
│ │ │ │ -
234 static bool EvalStencils(
│ │ │ │ -
235 const float *src, BufferDescriptor const &srcDesc,
│ │ │ │ -
236 float *dst, BufferDescriptor const &dstDesc,
│ │ │ │ -
237 float *du, BufferDescriptor const &duDesc,
│ │ │ │ -
238 float *dv, BufferDescriptor const &dvDesc,
│ │ │ │ -
239 const int * sizes,
│ │ │ │ -
240 const int * offsets,
│ │ │ │ -
241 const int * indices,
│ │ │ │ -
242 const float * weights,
│ │ │ │ -
243 const float * duWeights,
│ │ │ │ -
244 const float * dvWeights,
│ │ │ │ -
245 int start, int end);
│ │ │ │ -
246
│ │ │ │ -
302 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ -
│ │ │ │ -
303 static bool EvalStencils(
│ │ │ │ -
304 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
305 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
306 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
307 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
308 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
309 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
310 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
311 STENCIL_TABLE const *stencilTable,
│ │ │ │ -
312 const CpuEvaluator *instance = NULL,
│ │ │ │ -
313 void * deviceContext = NULL) {
│ │ │ │ -
314
│ │ │ │ -
315 (void)instance; // unused
│ │ │ │ -
316 (void)deviceContext; // unused
│ │ │ │ -
317
│ │ │ │ -
318 return EvalStencils(srcBuffer->BindCpuBuffer(), srcDesc,
│ │ │ │ -
319 dstBuffer->BindCpuBuffer(), dstDesc,
│ │ │ │ -
320 duBuffer->BindCpuBuffer(), duDesc,
│ │ │ │ -
321 dvBuffer->BindCpuBuffer(), dvDesc,
│ │ │ │ -
322 duuBuffer->BindCpuBuffer(), duuDesc,
│ │ │ │ -
323 duvBuffer->BindCpuBuffer(), duvDesc,
│ │ │ │ -
324 dvvBuffer->BindCpuBuffer(), dvvDesc,
│ │ │ │ -
325 &stencilTable->GetSizes()[0],
│ │ │ │ -
326 &stencilTable->GetOffsets()[0],
│ │ │ │ -
327 &stencilTable->GetControlIndices()[0],
│ │ │ │ -
328 &stencilTable->GetWeights()[0],
│ │ │ │ -
329 &stencilTable->GetDuWeights()[0],
│ │ │ │ -
330 &stencilTable->GetDvWeights()[0],
│ │ │ │ -
331 &stencilTable->GetDuuWeights()[0],
│ │ │ │ -
332 &stencilTable->GetDuvWeights()[0],
│ │ │ │ -
333 &stencilTable->GetDvvWeights()[0],
│ │ │ │ -
334 /*start = */ 0,
│ │ │ │ -
335 /*end = */ stencilTable->GetNumStencils());
│ │ │ │ -
336 }
│ │ │ │ -
│ │ │ │ -
337
│ │ │ │ -
399 static bool EvalStencils(
│ │ │ │ -
400 const float *src, BufferDescriptor const &srcDesc,
│ │ │ │ -
401 float *dst, BufferDescriptor const &dstDesc,
│ │ │ │ -
402 float *du, BufferDescriptor const &duDesc,
│ │ │ │ -
403 float *dv, BufferDescriptor const &dvDesc,
│ │ │ │ -
404 float *duu, BufferDescriptor const &duuDesc,
│ │ │ │ -
405 float *duv, BufferDescriptor const &duvDesc,
│ │ │ │ -
406 float *dvv, BufferDescriptor const &dvvDesc,
│ │ │ │ -
407 const int * sizes,
│ │ │ │ -
408 const int * offsets,
│ │ │ │ -
409 const int * indices,
│ │ │ │ -
410 const float * weights,
│ │ │ │ -
411 const float * duWeights,
│ │ │ │ -
412 const float * dvWeights,
│ │ │ │ -
413 const float * duuWeights,
│ │ │ │ -
414 const float * duvWeights,
│ │ │ │ -
415 const float * dvvWeights,
│ │ │ │ -
416 int start, int end);
│ │ │ │ -
417
│ │ │ │ -
423
│ │ │ │ -
452 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
453 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ -
454 static bool EvalPatches(
│ │ │ │ -
455 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
456 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
457 int numPatchCoords,
│ │ │ │ -
458 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
459 PATCH_TABLE *patchTable,
│ │ │ │ -
460 CpuEvaluator const *instance = NULL,
│ │ │ │ -
461 void * deviceContext = NULL) {
│ │ │ │ -
462
│ │ │ │ -
463 (void)instance; // unused
│ │ │ │ -
464 (void)deviceContext; // unused
│ │ │ │ -
465
│ │ │ │ -
466 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
│ │ │ │ -
467 dstBuffer->BindCpuBuffer(), dstDesc,
│ │ │ │ -
468 numPatchCoords,
│ │ │ │ -
469 (const PatchCoord*)patchCoords->BindCpuBuffer(),
│ │ │ │ -
470 patchTable->GetPatchArrayBuffer(),
│ │ │ │ -
471 patchTable->GetPatchIndexBuffer(),
│ │ │ │ -
472 patchTable->GetPatchParamBuffer());
│ │ │ │ -
473 }
│ │ │ │ -
│ │ │ │ -
474
│ │ │ │ -
515 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
516 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ -
517 static bool EvalPatches(
│ │ │ │ -
518 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
519 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
520 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
521 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
522 int numPatchCoords,
│ │ │ │ -
523 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
524 PATCH_TABLE *patchTable,
│ │ │ │ -
525 CpuEvaluator const *instance = NULL,
│ │ │ │ -
526 void * deviceContext = NULL) {
│ │ │ │ -
527
│ │ │ │ -
528 (void)instance; // unused
│ │ │ │ -
529 (void)deviceContext; // unused
│ │ │ │ -
530
│ │ │ │ -
531 // XXX: PatchCoords is somewhat abusing vertex primvar buffer interop.
│ │ │ │ -
532 // ideally all buffer classes should have templated by datatype
│ │ │ │ -
533 // so that downcast isn't needed there.
│ │ │ │ -
534 // (e.g. Osd::CpuBuffer<PatchCoord> )
│ │ │ │ -
535 //
│ │ │ │ -
536 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
│ │ │ │ -
537 dstBuffer->BindCpuBuffer(), dstDesc,
│ │ │ │ -
538 duBuffer->BindCpuBuffer(), duDesc,
│ │ │ │ -
539 dvBuffer->BindCpuBuffer(), dvDesc,
│ │ │ │ -
540 numPatchCoords,
│ │ │ │ -
541 (const PatchCoord*)patchCoords->BindCpuBuffer(),
│ │ │ │ -
542 patchTable->GetPatchArrayBuffer(),
│ │ │ │ -
543 patchTable->GetPatchIndexBuffer(),
│ │ │ │ -
544 patchTable->GetPatchParamBuffer());
│ │ │ │ -
545 }
│ │ │ │ -
│ │ │ │ -
546
│ │ │ │ -
605 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
606 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ -
607 static bool EvalPatches(
│ │ │ │ -
608 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
609 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
610 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
611 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
612 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
613 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
614 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
615 int numPatchCoords,
│ │ │ │ -
616 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
617 PATCH_TABLE *patchTable,
│ │ │ │ -
618 CpuEvaluator const *instance = NULL,
│ │ │ │ -
619 void * deviceContext = NULL) {
│ │ │ │ -
620
│ │ │ │ -
621 (void)instance; // unused
│ │ │ │ -
622 (void)deviceContext; // unused
│ │ │ │ -
623
│ │ │ │ -
624 // XXX: PatchCoords is somewhat abusing vertex primvar buffer interop.
│ │ │ │ -
625 // ideally all buffer classes should have templated by datatype
│ │ │ │ -
626 // so that downcast isn't needed there.
│ │ │ │ -
627 // (e.g. Osd::CpuBuffer<PatchCoord> )
│ │ │ │ -
628 //
│ │ │ │ -
629 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
│ │ │ │ -
630 dstBuffer->BindCpuBuffer(), dstDesc,
│ │ │ │ -
631 duBuffer->BindCpuBuffer(), duDesc,
│ │ │ │ -
632 dvBuffer->BindCpuBuffer(), dvDesc,
│ │ │ │ -
633 duuBuffer->BindCpuBuffer(), duuDesc,
│ │ │ │ -
634 duvBuffer->BindCpuBuffer(), duvDesc,
│ │ │ │ -
635 dvvBuffer->BindCpuBuffer(), dvvDesc,
│ │ │ │ -
636 numPatchCoords,
│ │ │ │ -
637 (const PatchCoord*)patchCoords->BindCpuBuffer(),
│ │ │ │ -
638 patchTable->GetPatchArrayBuffer(),
│ │ │ │ -
639 patchTable->GetPatchIndexBuffer(),
│ │ │ │ -
640 patchTable->GetPatchParamBuffer());
│ │ │ │ -
641 }
│ │ │ │ -
│ │ │ │ -
642
│ │ │ │ -
670 static bool EvalPatches(
│ │ │ │ -
671 const float *src, BufferDescriptor const &srcDesc,
│ │ │ │ -
672 float *dst, BufferDescriptor const &dstDesc,
│ │ │ │ -
673 int numPatchCoords,
│ │ │ │ -
674 const PatchCoord *patchCoords,
│ │ │ │ -
675 const PatchArray *patchArrays,
│ │ │ │ -
676 const int *patchIndexBuffer,
│ │ │ │ -
677 const PatchParam *patchParamBuffer);
│ │ │ │ -
678
│ │ │ │ -
716 static bool EvalPatches(
│ │ │ │ -
717 const float *src, BufferDescriptor const &srcDesc,
│ │ │ │ -
718 float *dst, BufferDescriptor const &dstDesc,
│ │ │ │ -
719 float *du, BufferDescriptor const &duDesc,
│ │ │ │ -
720 float *dv, BufferDescriptor const &dvDesc,
│ │ │ │ -
721 int numPatchCoords,
│ │ │ │ -
722 PatchCoord const *patchCoords,
│ │ │ │ -
723 PatchArray const *patchArrays,
│ │ │ │ -
724 const int *patchIndexBuffer,
│ │ │ │ -
725 PatchParam const *patchParamBuffer);
│ │ │ │ -
726
│ │ │ │ -
779 static bool EvalPatches(
│ │ │ │ -
780 const float *src, BufferDescriptor const &srcDesc,
│ │ │ │ -
781 float *dst, BufferDescriptor const &dstDesc,
│ │ │ │ -
782 float *du, BufferDescriptor const &duDesc,
│ │ │ │ -
783 float *dv, BufferDescriptor const &dvDesc,
│ │ │ │ -
784 float *duu, BufferDescriptor const &duuDesc,
│ │ │ │ -
785 float *duv, BufferDescriptor const &duvDesc,
│ │ │ │ -
786 float *dvv, BufferDescriptor const &dvvDesc,
│ │ │ │ -
787 int numPatchCoords,
│ │ │ │ -
788 PatchCoord const *patchCoords,
│ │ │ │ -
789 PatchArray const *patchArrays,
│ │ │ │ -
790 const int *patchIndexBuffer,
│ │ │ │ -
791 PatchParam const *patchParamBuffer);
│ │ │ │ -
792
│ │ │ │ -
821 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
822 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
824 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
825 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
826 int numPatchCoords,
│ │ │ │ -
827 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
828 PATCH_TABLE *patchTable,
│ │ │ │ -
829 CpuEvaluator const *instance = NULL,
│ │ │ │ -
830 void * deviceContext = NULL) {
│ │ │ │ -
831
│ │ │ │ -
832 (void)instance; // unused
│ │ │ │ -
833 (void)deviceContext; // unused
│ │ │ │ -
834
│ │ │ │ -
835 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
│ │ │ │ -
836 dstBuffer->BindCpuBuffer(), dstDesc,
│ │ │ │ -
837 numPatchCoords,
│ │ │ │ -
838 (const PatchCoord*)patchCoords->BindCpuBuffer(),
│ │ │ │ -
839 patchTable->GetVaryingPatchArrayBuffer(),
│ │ │ │ -
840 patchTable->GetVaryingPatchIndexBuffer(),
│ │ │ │ -
841 patchTable->GetPatchParamBuffer());
│ │ │ │ -
842 }
│ │ │ │ -
│ │ │ │ -
843
│ │ │ │ -
884 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
885 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
887 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
888 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
889 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
890 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
891 int numPatchCoords,
│ │ │ │ -
892 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
893 PATCH_TABLE *patchTable,
│ │ │ │ -
894 CpuEvaluator const *instance = NULL,
│ │ │ │ -
895 void * deviceContext = NULL) {
│ │ │ │ -
896
│ │ │ │ -
897 (void)instance; // unused
│ │ │ │ -
898 (void)deviceContext; // unused
│ │ │ │ -
899
│ │ │ │ -
900 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
│ │ │ │ -
901 dstBuffer->BindCpuBuffer(), dstDesc,
│ │ │ │ -
902 duBuffer->BindCpuBuffer(), duDesc,
│ │ │ │ -
903 dvBuffer->BindCpuBuffer(), dvDesc,
│ │ │ │ -
904 numPatchCoords,
│ │ │ │ -
905 (const PatchCoord*)patchCoords->BindCpuBuffer(),
│ │ │ │ -
906 patchTable->GetVaryingPatchArrayBuffer(),
│ │ │ │ -
907 patchTable->GetVaryingPatchIndexBuffer(),
│ │ │ │ -
908 patchTable->GetPatchParamBuffer());
│ │ │ │ -
909 }
│ │ │ │ -
│ │ │ │ -
910
│ │ │ │ -
969 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
970 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
972 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
973 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
974 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
975 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
976 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
977 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
978 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
979 int numPatchCoords,
│ │ │ │ -
980 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
981 PATCH_TABLE *patchTable,
│ │ │ │ -
982 CpuEvaluator const *instance = NULL,
│ │ │ │ -
983 void * deviceContext = NULL) {
│ │ │ │ -
984
│ │ │ │ -
985 (void)instance; // unused
│ │ │ │ -
986 (void)deviceContext; // unused
│ │ │ │ -
987
│ │ │ │ -
988 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
│ │ │ │ -
989 dstBuffer->BindCpuBuffer(), dstDesc,
│ │ │ │ -
990 duBuffer->BindCpuBuffer(), duDesc,
│ │ │ │ -
991 dvBuffer->BindCpuBuffer(), dvDesc,
│ │ │ │ -
992 duuBuffer->BindCpuBuffer(), duuDesc,
│ │ │ │ -
993 duvBuffer->BindCpuBuffer(), duvDesc,
│ │ │ │ -
994 dvvBuffer->BindCpuBuffer(), dvvDesc,
│ │ │ │ -
995 numPatchCoords,
│ │ │ │ -
996 (const PatchCoord*)patchCoords->BindCpuBuffer(),
│ │ │ │ -
997 patchTable->GetVaryingPatchArrayBuffer(),
│ │ │ │ -
998 patchTable->GetVaryingPatchIndexBuffer(),
│ │ │ │ -
999 patchTable->GetPatchParamBuffer());
│ │ │ │ -
1000 }
│ │ │ │ -
│ │ │ │ -
1001
│ │ │ │ -
1032 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1033 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1035 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1036 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1037 int numPatchCoords,
│ │ │ │ -
1038 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1039 PATCH_TABLE *patchTable,
│ │ │ │ -
1040 int fvarChannel,
│ │ │ │ -
1041 CpuEvaluator const *instance = NULL,
│ │ │ │ -
1042 void * deviceContext = NULL) {
│ │ │ │ -
1043
│ │ │ │ -
1044 (void)instance; // unused
│ │ │ │ -
1045 (void)deviceContext; // unused
│ │ │ │ -
1046
│ │ │ │ -
1047 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
│ │ │ │ -
1048 dstBuffer->BindCpuBuffer(), dstDesc,
│ │ │ │ -
1049 numPatchCoords,
│ │ │ │ -
1050 (const PatchCoord*)patchCoords->BindCpuBuffer(),
│ │ │ │ -
1051 patchTable->GetFVarPatchArrayBuffer(fvarChannel),
│ │ │ │ -
1052 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
│ │ │ │ -
1053 patchTable->GetFVarPatchParamBuffer(fvarChannel));
│ │ │ │ -
1054 }
│ │ │ │ -
│ │ │ │ -
1055
│ │ │ │ -
1098 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1099 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1101 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1102 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1103 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1104 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1105 int numPatchCoords,
│ │ │ │ -
1106 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1107 PATCH_TABLE *patchTable,
│ │ │ │ -
1108 int fvarChannel,
│ │ │ │ -
1109 CpuEvaluator const *instance = NULL,
│ │ │ │ -
1110 void * deviceContext = NULL) {
│ │ │ │ -
1111
│ │ │ │ -
1112 (void)instance; // unused
│ │ │ │ -
1113 (void)deviceContext; // unused
│ │ │ │ -
1114
│ │ │ │ -
1115 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
│ │ │ │ -
1116 dstBuffer->BindCpuBuffer(), dstDesc,
│ │ │ │ -
1117 duBuffer->BindCpuBuffer(), duDesc,
│ │ │ │ -
1118 dvBuffer->BindCpuBuffer(), dvDesc,
│ │ │ │ -
1119 numPatchCoords,
│ │ │ │ -
1120 (const PatchCoord*)patchCoords->BindCpuBuffer(),
│ │ │ │ -
1121 patchTable->GetFVarPatchArrayBuffer(fvarChannel),
│ │ │ │ -
1122 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
│ │ │ │ -
1123 patchTable->GetFVarPatchParamBuffer(fvarChannel));
│ │ │ │ -
1124 }
│ │ │ │ -
│ │ │ │ -
1125
│ │ │ │ -
1186 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ -
1187 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
1189 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ -
1190 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ -
1191 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ -
1192 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ -
1193 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ -
1194 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ -
1195 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ -
1196 int numPatchCoords,
│ │ │ │ -
1197 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ -
1198 PATCH_TABLE *patchTable,
│ │ │ │ -
1199 int fvarChannel,
│ │ │ │ -
1200 CpuEvaluator const *instance = NULL,
│ │ │ │ -
1201 void * deviceContext = NULL) {
│ │ │ │ -
1202
│ │ │ │ -
1203 (void)instance; // unused
│ │ │ │ -
1204 (void)deviceContext; // unused
│ │ │ │ -
1205
│ │ │ │ -
1206 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
│ │ │ │ -
1207 dstBuffer->BindCpuBuffer(), dstDesc,
│ │ │ │ -
1208 duBuffer->BindCpuBuffer(), duDesc,
│ │ │ │ -
1209 dvBuffer->BindCpuBuffer(), dvDesc,
│ │ │ │ -
1210 duuBuffer->BindCpuBuffer(), duuDesc,
│ │ │ │ -
1211 duvBuffer->BindCpuBuffer(), duvDesc,
│ │ │ │ -
1212 dvvBuffer->BindCpuBuffer(), dvvDesc,
│ │ │ │ -
1213 numPatchCoords,
│ │ │ │ -
1214 (const PatchCoord*)patchCoords->BindCpuBuffer(),
│ │ │ │ -
1215 patchTable->GetFVarPatchArrayBuffer(fvarChannel),
│ │ │ │ -
1216 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
│ │ │ │ -
1217 patchTable->GetFVarPatchParamBuffer(fvarChannel));
│ │ │ │ -
1218 }
│ │ │ │ -
│ │ │ │ -
1219
│ │ │ │ -
1225
│ │ │ │ -
│ │ │ │ -
1227 static void Synchronize(void * /*deviceContext = NULL*/) {
│ │ │ │ -
1228 // nothing.
│ │ │ │ -
1229 }
│ │ │ │ -
│ │ │ │ -
1230};
│ │ │ │ -
│ │ │ │ -
1231
│ │ │ │ -
1232
│ │ │ │ -
1233} // end namespace Osd
│ │ │ │ -
1234
│ │ │ │ -
1235} // end namespace OPENSUBDIV_VERSION
│ │ │ │ -
1236using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
1237
│ │ │ │ -
1238} // end namespace OpenSubdiv
│ │ │ │ -
1239
│ │ │ │ -
1240
│ │ │ │ -
1241#endif // OPENSUBDIV3_OSD_CPU_EVALUATOR_H
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
43public:
│ │ │ │ +
45 static CpuVertexBuffer * Create(int numElements, int numVertices,
│ │ │ │ +
46 void *deviceContext = NULL);
│ │ │ │ +
47
│ │ │ │ + │ │ │ │ +
50
│ │ │ │ +
53 void UpdateData(const float *src, int startVertex, int numVertices,
│ │ │ │ +
54 void *deviceContext = NULL);
│ │ │ │ +
55
│ │ │ │ +
57 int GetNumElements() const;
│ │ │ │ +
58
│ │ │ │ +
60 int GetNumVertices() const;
│ │ │ │ +
61
│ │ │ │ +
63 float * BindCpuBuffer();
│ │ │ │ +
64
│ │ │ │ +
65protected:
│ │ │ │ +
67 CpuVertexBuffer(int numElements, int numVertices);
│ │ │ │ +
68
│ │ │ │ +
69private:
│ │ │ │ +
70 int _numElements;
│ │ │ │ +
71 int _numVertices;
│ │ │ │ +
72 float *_cpuBuffer;
│ │ │ │ +
73};
│ │ │ │ +
│ │ │ │ +
74
│ │ │ │ +
75
│ │ │ │ +
76} // end namespace Osd
│ │ │ │ +
77
│ │ │ │ +
78} // end namespace OPENSUBDIV_VERSION
│ │ │ │ +
79using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
80
│ │ │ │ +
81} // end namespace OpenSubdiv
│ │ │ │ +
82
│ │ │ │ +
83#endif // OPENSUBDIV3_OSD_CPU_VERTEX_BUFFER_H
│ │ │ │ │ │ │ │ -
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ - │ │ │ │ -
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 ...
│ │ │ │ -
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 ...
│ │ │ │ -
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.
│ │ │ │ -
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 ...
│ │ │ │ -
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 ...
│ │ │ │ -
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.
│ │ │ │ -
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.
│ │ │ │ -
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...
│ │ │ │ -
static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, 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 ...
│ │ │ │ -
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, CpuEvaluator const *instance=NULL, void *deviceContext=NULL)
Generic limit eval function with derivatives. This function has a same signature as other device kern...
│ │ │ │ -
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...
│ │ │ │ -
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 CpuEvaluator *instance=NULL, void *deviceContext=NULL)
Generic static eval stencils function with derivatives. This function has a same signature as other d...
│ │ │ │ -
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...
│ │ │ │ -
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, CpuEvaluator const *instance=NULL, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ -
static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, 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 ...
│ │ │ │ -
static void Synchronize(void *)
synchronize all asynchronous computation invoked on this device.
│ │ │ │ -
static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, const CpuEvaluator *instance=NULL, void *deviceContext=NULL)
Generic static eval stencils function. This function has a same signature as other device kernels hav...
│ │ │ │ -
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, CpuEvaluator const *instance=NULL, void *deviceContext=NULL)
Generic limit eval function with derivatives. This function has a same signature as other device kern...
│ │ │ │ -
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 CpuEvaluator *instance=NULL, void *deviceContext=NULL)
Generic static eval stencils function with derivatives. This function has a same signature as other d...
│ │ │ │ -
Coordinates set on a patch table.
Definition types.h:42
│ │ │ │ - │ │ │ │ - │ │ │ │ +
Concrete vertex buffer class for CPU subdivision.
│ │ │ │ +
int GetNumElements() const
Returns how many elements defined in this vertex buffer.
│ │ │ │ +
static CpuVertexBuffer * Create(int numElements, int numVertices, void *deviceContext=NULL)
Creator. Returns NULL if error.
│ │ │ │ +
void UpdateData(const float *src, int startVertex, int numVertices, void *deviceContext=NULL)
│ │ │ │ +
int GetNumVertices() const
Returns how many vertices allocated in this vertex buffer.
│ │ │ │ + │ │ │ │ +
float * BindCpuBuffer()
Returns the address of CPU buffer.
│ │ │ │ +
CpuVertexBuffer(int numElements, int numVertices)
Constructor.
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -cpuEvaluator.h │ │ │ │ │ +cpuVertexBuffer.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ -2// Copyright 2015 Pixar │ │ │ │ │ +2// Copyright 2013 Pixar │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ 7// Section 6. Trademarks. is deleted and replaced with: │ │ │ │ │ 8// │ │ │ │ │ 9// 6. Trademarks. This License does not grant permission to use the trade │ │ │ │ │ @@ -24,655 +24,84 @@ │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ 24 │ │ │ │ │ -25#ifndef OPENSUBDIV3_OSD_CPU_EVALUATOR_H │ │ │ │ │ -26#define OPENSUBDIV3_OSD_CPU_EVALUATOR_H │ │ │ │ │ +25#ifndef OPENSUBDIV3_OSD_CPU_VERTEX_BUFFER_H │ │ │ │ │ +26#define OPENSUBDIV3_OSD_CPU_VERTEX_BUFFER_H │ │ │ │ │ 27 │ │ │ │ │ 28#include "../version.h" │ │ │ │ │ -29#include "../osd/bufferDescriptor.h" │ │ │ │ │ -30#include "../osd/types.h" │ │ │ │ │ +29 │ │ │ │ │ +30#include │ │ │ │ │ 31 │ │ │ │ │ -32#include │ │ │ │ │ -33 │ │ │ │ │ -34namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ -35namespace OPENSUBDIV_VERSION { │ │ │ │ │ +32namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ +33namespace OPENSUBDIV_VERSION { │ │ │ │ │ +34 │ │ │ │ │ +35namespace Osd { │ │ │ │ │ 36 │ │ │ │ │ -37namespace Osd { │ │ │ │ │ -38 │ │ │ │ │ -_3_9class _C_p_u_E_v_a_l_u_a_t_o_r { │ │ │ │ │ -40public: │ │ │ │ │ -46 │ │ │ │ │ -71 template │ │ │ │ │ -_7_2 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ -73 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -74 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -75 STENCIL_TABLE const *stencilTable, │ │ │ │ │ -76 const _C_p_u_E_v_a_l_u_a_t_o_r *instance = NULL, │ │ │ │ │ -77 void * deviceContext = NULL) { │ │ │ │ │ -78 │ │ │ │ │ -79 (void)instance; // unused │ │ │ │ │ -80 (void)deviceContext; // unused │ │ │ │ │ -81 │ │ │ │ │ -82 if (stencilTable->GetNumStencils() == 0) │ │ │ │ │ -83 return false; │ │ │ │ │ -84 │ │ │ │ │ -85 return _E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer->BindCpuBuffer(), srcDesc, │ │ │ │ │ -86 dstBuffer->BindCpuBuffer(), dstDesc, │ │ │ │ │ -87 &stencilTable->GetSizes()[0], │ │ │ │ │ -88 &stencilTable->GetOffsets()[0], │ │ │ │ │ -89 &stencilTable->GetControlIndices()[0], │ │ │ │ │ -90 &stencilTable->GetWeights()[0], │ │ │ │ │ -91 /*start = */ 0, │ │ │ │ │ -92 /*end = */ stencilTable->GetNumStencils()); │ │ │ │ │ -93 } │ │ │ │ │ -94 │ │ │ │ │ -_1_2_1 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ -122 const float *src, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -123 float *dst, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -124 const int * sizes, │ │ │ │ │ -125 const int * offsets, │ │ │ │ │ -126 const int * indices, │ │ │ │ │ -127 const float * weights, │ │ │ │ │ -128 int start, int end); │ │ │ │ │ -129 │ │ │ │ │ -167 template │ │ │ │ │ -_1_6_8 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ -169 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -170 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -171 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -172 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -173 STENCIL_TABLE const *stencilTable, │ │ │ │ │ -174 const _C_p_u_E_v_a_l_u_a_t_o_r *instance = NULL, │ │ │ │ │ -175 void * deviceContext = NULL) { │ │ │ │ │ -176 │ │ │ │ │ -177 (void)instance; // unused │ │ │ │ │ -178 (void)deviceContext; // unused │ │ │ │ │ -179 │ │ │ │ │ -180 return _E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer->BindCpuBuffer(), srcDesc, │ │ │ │ │ -181 dstBuffer->BindCpuBuffer(), dstDesc, │ │ │ │ │ -182 duBuffer->BindCpuBuffer(), duDesc, │ │ │ │ │ -183 dvBuffer->BindCpuBuffer(), dvDesc, │ │ │ │ │ -184 &stencilTable->GetSizes()[0], │ │ │ │ │ -185 &stencilTable->GetOffsets()[0], │ │ │ │ │ -186 &stencilTable->GetControlIndices()[0], │ │ │ │ │ -187 &stencilTable->GetWeights()[0], │ │ │ │ │ -188 &stencilTable->GetDuWeights()[0], │ │ │ │ │ -189 &stencilTable->GetDvWeights()[0], │ │ │ │ │ -190 /*start = */ 0, │ │ │ │ │ -191 /*end = */ stencilTable->GetNumStencils()); │ │ │ │ │ -192 } │ │ │ │ │ -193 │ │ │ │ │ -_2_3_4 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ -235 const float *src, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -236 float *dst, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -237 float *du, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -238 float *dv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -239 const int * sizes, │ │ │ │ │ -240 const int * offsets, │ │ │ │ │ -241 const int * indices, │ │ │ │ │ -242 const float * weights, │ │ │ │ │ -243 const float * duWeights, │ │ │ │ │ -244 const float * dvWeights, │ │ │ │ │ -245 int start, int end); │ │ │ │ │ -246 │ │ │ │ │ -302 template │ │ │ │ │ -_3_0_3 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ -304 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -305 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -306 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -307 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -308 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -309 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -310 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -311 STENCIL_TABLE const *stencilTable, │ │ │ │ │ -312 const _C_p_u_E_v_a_l_u_a_t_o_r *instance = NULL, │ │ │ │ │ -313 void * deviceContext = NULL) { │ │ │ │ │ -314 │ │ │ │ │ -315 (void)instance; // unused │ │ │ │ │ -316 (void)deviceContext; // unused │ │ │ │ │ -317 │ │ │ │ │ -318 return _E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer->BindCpuBuffer(), srcDesc, │ │ │ │ │ -319 dstBuffer->BindCpuBuffer(), dstDesc, │ │ │ │ │ -320 duBuffer->BindCpuBuffer(), duDesc, │ │ │ │ │ -321 dvBuffer->BindCpuBuffer(), dvDesc, │ │ │ │ │ -322 duuBuffer->BindCpuBuffer(), duuDesc, │ │ │ │ │ -323 duvBuffer->BindCpuBuffer(), duvDesc, │ │ │ │ │ -324 dvvBuffer->BindCpuBuffer(), dvvDesc, │ │ │ │ │ -325 &stencilTable->GetSizes()[0], │ │ │ │ │ -326 &stencilTable->GetOffsets()[0], │ │ │ │ │ -327 &stencilTable->GetControlIndices()[0], │ │ │ │ │ -328 &stencilTable->GetWeights()[0], │ │ │ │ │ -329 &stencilTable->GetDuWeights()[0], │ │ │ │ │ -330 &stencilTable->GetDvWeights()[0], │ │ │ │ │ -331 &stencilTable->GetDuuWeights()[0], │ │ │ │ │ -332 &stencilTable->GetDuvWeights()[0], │ │ │ │ │ -333 &stencilTable->GetDvvWeights()[0], │ │ │ │ │ -334 /*start = */ 0, │ │ │ │ │ -335 /*end = */ stencilTable->GetNumStencils()); │ │ │ │ │ -336 } │ │ │ │ │ -337 │ │ │ │ │ -_3_9_9 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ -400 const float *src, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -401 float *dst, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -402 float *du, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -403 float *dv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -404 float *duu, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -405 float *duv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -406 float *dvv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -407 const int * sizes, │ │ │ │ │ -408 const int * offsets, │ │ │ │ │ -409 const int * indices, │ │ │ │ │ -410 const float * weights, │ │ │ │ │ -411 const float * duWeights, │ │ │ │ │ -412 const float * dvWeights, │ │ │ │ │ -413 const float * duuWeights, │ │ │ │ │ -414 const float * duvWeights, │ │ │ │ │ -415 const float * dvvWeights, │ │ │ │ │ -416 int start, int end); │ │ │ │ │ -417 │ │ │ │ │ -423 │ │ │ │ │ -452 template │ │ │ │ │ -_4_5_4 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ -455 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -456 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -457 int numPatchCoords, │ │ │ │ │ -458 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -459 PATCH_TABLE *patchTable, │ │ │ │ │ -460 _C_p_u_E_v_a_l_u_a_t_o_r const *instance = NULL, │ │ │ │ │ -461 void * deviceContext = NULL) { │ │ │ │ │ -462 │ │ │ │ │ -463 (void)instance; // unused │ │ │ │ │ -464 (void)deviceContext; // unused │ │ │ │ │ -465 │ │ │ │ │ -466 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCpuBuffer(), srcDesc, │ │ │ │ │ -467 dstBuffer->BindCpuBuffer(), dstDesc, │ │ │ │ │ -468 numPatchCoords, │ │ │ │ │ -469 (const _P_a_t_c_h_C_o_o_r_d*)patchCoords->BindCpuBuffer(), │ │ │ │ │ -470 patchTable->GetPatchArrayBuffer(), │ │ │ │ │ -471 patchTable->GetPatchIndexBuffer(), │ │ │ │ │ -472 patchTable->GetPatchParamBuffer()); │ │ │ │ │ -473 } │ │ │ │ │ -474 │ │ │ │ │ -515 template │ │ │ │ │ -_5_1_7 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ -518 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -519 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -520 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -521 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -522 int numPatchCoords, │ │ │ │ │ -523 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -524 PATCH_TABLE *patchTable, │ │ │ │ │ -525 _C_p_u_E_v_a_l_u_a_t_o_r const *instance = NULL, │ │ │ │ │ -526 void * deviceContext = NULL) { │ │ │ │ │ -527 │ │ │ │ │ -528 (void)instance; // unused │ │ │ │ │ -529 (void)deviceContext; // unused │ │ │ │ │ -530 │ │ │ │ │ -531 // XXX: PatchCoords is somewhat abusing vertex primvar buffer interop. │ │ │ │ │ -532 // ideally all buffer classes should have templated by datatype │ │ │ │ │ -533 // so that downcast isn't needed there. │ │ │ │ │ -534 // (e.g. Osd::CpuBuffer ) │ │ │ │ │ -535 // │ │ │ │ │ -536 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCpuBuffer(), srcDesc, │ │ │ │ │ -537 dstBuffer->BindCpuBuffer(), dstDesc, │ │ │ │ │ -538 duBuffer->BindCpuBuffer(), duDesc, │ │ │ │ │ -539 dvBuffer->BindCpuBuffer(), dvDesc, │ │ │ │ │ -540 numPatchCoords, │ │ │ │ │ -541 (const _P_a_t_c_h_C_o_o_r_d*)patchCoords->BindCpuBuffer(), │ │ │ │ │ -542 patchTable->GetPatchArrayBuffer(), │ │ │ │ │ -543 patchTable->GetPatchIndexBuffer(), │ │ │ │ │ -544 patchTable->GetPatchParamBuffer()); │ │ │ │ │ -545 } │ │ │ │ │ -546 │ │ │ │ │ -605 template │ │ │ │ │ -_6_0_7 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ -608 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -609 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -610 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -611 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -612 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -613 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -614 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -615 int numPatchCoords, │ │ │ │ │ -616 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -617 PATCH_TABLE *patchTable, │ │ │ │ │ -618 _C_p_u_E_v_a_l_u_a_t_o_r const *instance = NULL, │ │ │ │ │ -619 void * deviceContext = NULL) { │ │ │ │ │ -620 │ │ │ │ │ -621 (void)instance; // unused │ │ │ │ │ -622 (void)deviceContext; // unused │ │ │ │ │ -623 │ │ │ │ │ -624 // XXX: PatchCoords is somewhat abusing vertex primvar buffer interop. │ │ │ │ │ -625 // ideally all buffer classes should have templated by datatype │ │ │ │ │ -626 // so that downcast isn't needed there. │ │ │ │ │ -627 // (e.g. Osd::CpuBuffer ) │ │ │ │ │ -628 // │ │ │ │ │ -629 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCpuBuffer(), srcDesc, │ │ │ │ │ -630 dstBuffer->BindCpuBuffer(), dstDesc, │ │ │ │ │ -631 duBuffer->BindCpuBuffer(), duDesc, │ │ │ │ │ -632 dvBuffer->BindCpuBuffer(), dvDesc, │ │ │ │ │ -633 duuBuffer->BindCpuBuffer(), duuDesc, │ │ │ │ │ -634 duvBuffer->BindCpuBuffer(), duvDesc, │ │ │ │ │ -635 dvvBuffer->BindCpuBuffer(), dvvDesc, │ │ │ │ │ -636 numPatchCoords, │ │ │ │ │ -637 (const _P_a_t_c_h_C_o_o_r_d*)patchCoords->BindCpuBuffer(), │ │ │ │ │ -638 patchTable->GetPatchArrayBuffer(), │ │ │ │ │ -639 patchTable->GetPatchIndexBuffer(), │ │ │ │ │ -640 patchTable->GetPatchParamBuffer()); │ │ │ │ │ -641 } │ │ │ │ │ -642 │ │ │ │ │ -_6_7_0 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ -671 const float *src, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -672 float *dst, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -673 int numPatchCoords, │ │ │ │ │ -674 const _P_a_t_c_h_C_o_o_r_d *patchCoords, │ │ │ │ │ -675 const _P_a_t_c_h_A_r_r_a_y *patchArrays, │ │ │ │ │ -676 const int *patchIndexBuffer, │ │ │ │ │ -677 const _P_a_t_c_h_P_a_r_a_m *patchParamBuffer); │ │ │ │ │ -678 │ │ │ │ │ -_7_1_6 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ -717 const float *src, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -718 float *dst, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -719 float *du, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -720 float *dv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -721 int numPatchCoords, │ │ │ │ │ -722 _P_a_t_c_h_C_o_o_r_d const *patchCoords, │ │ │ │ │ -723 _P_a_t_c_h_A_r_r_a_y const *patchArrays, │ │ │ │ │ -724 const int *patchIndexBuffer, │ │ │ │ │ -725 _P_a_t_c_h_P_a_r_a_m const *patchParamBuffer); │ │ │ │ │ -726 │ │ │ │ │ -_7_7_9 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ -780 const float *src, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -781 float *dst, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -782 float *du, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -783 float *dv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -784 float *duu, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -785 float *duv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -786 float *dvv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -787 int numPatchCoords, │ │ │ │ │ -788 _P_a_t_c_h_C_o_o_r_d const *patchCoords, │ │ │ │ │ -789 _P_a_t_c_h_A_r_r_a_y const *patchArrays, │ │ │ │ │ -790 const int *patchIndexBuffer, │ │ │ │ │ -791 _P_a_t_c_h_P_a_r_a_m const *patchParamBuffer); │ │ │ │ │ -792 │ │ │ │ │ -821 template │ │ │ │ │ -_8_2_3 static bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -824 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -825 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -826 int numPatchCoords, │ │ │ │ │ -827 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -828 PATCH_TABLE *patchTable, │ │ │ │ │ -829 _C_p_u_E_v_a_l_u_a_t_o_r const *instance = NULL, │ │ │ │ │ -830 void * deviceContext = NULL) { │ │ │ │ │ -831 │ │ │ │ │ -832 (void)instance; // unused │ │ │ │ │ -833 (void)deviceContext; // unused │ │ │ │ │ -834 │ │ │ │ │ -835 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCpuBuffer(), srcDesc, │ │ │ │ │ -836 dstBuffer->BindCpuBuffer(), dstDesc, │ │ │ │ │ -837 numPatchCoords, │ │ │ │ │ -838 (const _P_a_t_c_h_C_o_o_r_d*)patchCoords->BindCpuBuffer(), │ │ │ │ │ -839 patchTable->GetVaryingPatchArrayBuffer(), │ │ │ │ │ -840 patchTable->GetVaryingPatchIndexBuffer(), │ │ │ │ │ -841 patchTable->GetPatchParamBuffer()); │ │ │ │ │ -842 } │ │ │ │ │ -843 │ │ │ │ │ -884 template │ │ │ │ │ -_8_8_6 static bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -887 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -888 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -889 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -890 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -891 int numPatchCoords, │ │ │ │ │ -892 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -893 PATCH_TABLE *patchTable, │ │ │ │ │ -894 _C_p_u_E_v_a_l_u_a_t_o_r const *instance = NULL, │ │ │ │ │ -895 void * deviceContext = NULL) { │ │ │ │ │ -896 │ │ │ │ │ -897 (void)instance; // unused │ │ │ │ │ -898 (void)deviceContext; // unused │ │ │ │ │ -899 │ │ │ │ │ -900 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCpuBuffer(), srcDesc, │ │ │ │ │ -901 dstBuffer->BindCpuBuffer(), dstDesc, │ │ │ │ │ -902 duBuffer->BindCpuBuffer(), duDesc, │ │ │ │ │ -903 dvBuffer->BindCpuBuffer(), dvDesc, │ │ │ │ │ -904 numPatchCoords, │ │ │ │ │ -905 (const _P_a_t_c_h_C_o_o_r_d*)patchCoords->BindCpuBuffer(), │ │ │ │ │ -906 patchTable->GetVaryingPatchArrayBuffer(), │ │ │ │ │ -907 patchTable->GetVaryingPatchIndexBuffer(), │ │ │ │ │ -908 patchTable->GetPatchParamBuffer()); │ │ │ │ │ -909 } │ │ │ │ │ -910 │ │ │ │ │ -969 template │ │ │ │ │ -_9_7_1 static bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ -972 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -973 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -974 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -975 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -976 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -977 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -978 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -979 int numPatchCoords, │ │ │ │ │ -980 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -981 PATCH_TABLE *patchTable, │ │ │ │ │ -982 _C_p_u_E_v_a_l_u_a_t_o_r const *instance = NULL, │ │ │ │ │ -983 void * deviceContext = NULL) { │ │ │ │ │ -984 │ │ │ │ │ -985 (void)instance; // unused │ │ │ │ │ -986 (void)deviceContext; // unused │ │ │ │ │ -987 │ │ │ │ │ -988 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCpuBuffer(), srcDesc, │ │ │ │ │ -989 dstBuffer->BindCpuBuffer(), dstDesc, │ │ │ │ │ -990 duBuffer->BindCpuBuffer(), duDesc, │ │ │ │ │ -991 dvBuffer->BindCpuBuffer(), dvDesc, │ │ │ │ │ -992 duuBuffer->BindCpuBuffer(), duuDesc, │ │ │ │ │ -993 duvBuffer->BindCpuBuffer(), duvDesc, │ │ │ │ │ -994 dvvBuffer->BindCpuBuffer(), dvvDesc, │ │ │ │ │ -995 numPatchCoords, │ │ │ │ │ -996 (const _P_a_t_c_h_C_o_o_r_d*)patchCoords->BindCpuBuffer(), │ │ │ │ │ -997 patchTable->GetVaryingPatchArrayBuffer(), │ │ │ │ │ -998 patchTable->GetVaryingPatchIndexBuffer(), │ │ │ │ │ -999 patchTable->GetPatchParamBuffer()); │ │ │ │ │ -1000 } │ │ │ │ │ -1001 │ │ │ │ │ -1032 template │ │ │ │ │ -_1_0_3_4 static bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1035 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1036 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1037 int numPatchCoords, │ │ │ │ │ -1038 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1039 PATCH_TABLE *patchTable, │ │ │ │ │ -1040 int fvarChannel, │ │ │ │ │ -1041 _C_p_u_E_v_a_l_u_a_t_o_r const *instance = NULL, │ │ │ │ │ -1042 void * deviceContext = NULL) { │ │ │ │ │ -1043 │ │ │ │ │ -1044 (void)instance; // unused │ │ │ │ │ -1045 (void)deviceContext; // unused │ │ │ │ │ -1046 │ │ │ │ │ -1047 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCpuBuffer(), srcDesc, │ │ │ │ │ -1048 dstBuffer->BindCpuBuffer(), dstDesc, │ │ │ │ │ -1049 numPatchCoords, │ │ │ │ │ -1050 (const _P_a_t_c_h_C_o_o_r_d*)patchCoords->BindCpuBuffer(), │ │ │ │ │ -1051 patchTable->GetFVarPatchArrayBuffer(fvarChannel), │ │ │ │ │ -1052 patchTable->GetFVarPatchIndexBuffer(fvarChannel), │ │ │ │ │ -1053 patchTable->GetFVarPatchParamBuffer(fvarChannel)); │ │ │ │ │ -1054 } │ │ │ │ │ -1055 │ │ │ │ │ -1098 template │ │ │ │ │ -_1_1_0_0 static bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1101 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1102 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1103 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1104 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1105 int numPatchCoords, │ │ │ │ │ -1106 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1107 PATCH_TABLE *patchTable, │ │ │ │ │ -1108 int fvarChannel, │ │ │ │ │ -1109 _C_p_u_E_v_a_l_u_a_t_o_r const *instance = NULL, │ │ │ │ │ -1110 void * deviceContext = NULL) { │ │ │ │ │ -1111 │ │ │ │ │ -1112 (void)instance; // unused │ │ │ │ │ -1113 (void)deviceContext; // unused │ │ │ │ │ -1114 │ │ │ │ │ -1115 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCpuBuffer(), srcDesc, │ │ │ │ │ -1116 dstBuffer->BindCpuBuffer(), dstDesc, │ │ │ │ │ -1117 duBuffer->BindCpuBuffer(), duDesc, │ │ │ │ │ -1118 dvBuffer->BindCpuBuffer(), dvDesc, │ │ │ │ │ -1119 numPatchCoords, │ │ │ │ │ -1120 (const _P_a_t_c_h_C_o_o_r_d*)patchCoords->BindCpuBuffer(), │ │ │ │ │ -1121 patchTable->GetFVarPatchArrayBuffer(fvarChannel), │ │ │ │ │ -1122 patchTable->GetFVarPatchIndexBuffer(fvarChannel), │ │ │ │ │ -1123 patchTable->GetFVarPatchParamBuffer(fvarChannel)); │ │ │ │ │ -1124 } │ │ │ │ │ -1125 │ │ │ │ │ -1186 template │ │ │ │ │ -_1_1_8_8 static bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ -1189 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ -1190 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ -1191 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ -1192 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ -1193 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ -1194 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ -1195 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ -1196 int numPatchCoords, │ │ │ │ │ -1197 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ -1198 PATCH_TABLE *patchTable, │ │ │ │ │ -1199 int fvarChannel, │ │ │ │ │ -1200 _C_p_u_E_v_a_l_u_a_t_o_r const *instance = NULL, │ │ │ │ │ -1201 void * deviceContext = NULL) { │ │ │ │ │ -1202 │ │ │ │ │ -1203 (void)instance; // unused │ │ │ │ │ -1204 (void)deviceContext; // unused │ │ │ │ │ -1205 │ │ │ │ │ -1206 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCpuBuffer(), srcDesc, │ │ │ │ │ -1207 dstBuffer->BindCpuBuffer(), dstDesc, │ │ │ │ │ -1208 duBuffer->BindCpuBuffer(), duDesc, │ │ │ │ │ -1209 dvBuffer->BindCpuBuffer(), dvDesc, │ │ │ │ │ -1210 duuBuffer->BindCpuBuffer(), duuDesc, │ │ │ │ │ -1211 duvBuffer->BindCpuBuffer(), duvDesc, │ │ │ │ │ -1212 dvvBuffer->BindCpuBuffer(), dvvDesc, │ │ │ │ │ -1213 numPatchCoords, │ │ │ │ │ -1214 (const _P_a_t_c_h_C_o_o_r_d*)patchCoords->BindCpuBuffer(), │ │ │ │ │ -1215 patchTable->GetFVarPatchArrayBuffer(fvarChannel), │ │ │ │ │ -1216 patchTable->GetFVarPatchIndexBuffer(fvarChannel), │ │ │ │ │ -1217 patchTable->GetFVarPatchParamBuffer(fvarChannel)); │ │ │ │ │ -1218 } │ │ │ │ │ -1219 │ │ │ │ │ -1225 │ │ │ │ │ -_1_2_2_7 static void _S_y_n_c_h_r_o_n_i_z_e(void * /*deviceContext = NULL*/) { │ │ │ │ │ -1228 // nothing. │ │ │ │ │ -1229 } │ │ │ │ │ -1230}; │ │ │ │ │ -1231 │ │ │ │ │ -1232 │ │ │ │ │ -1233} // end namespace Osd │ │ │ │ │ -1234 │ │ │ │ │ -1235} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ -1236using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -1237 │ │ │ │ │ -1238} // end namespace OpenSubdiv │ │ │ │ │ -1239 │ │ │ │ │ -1240 │ │ │ │ │ -1241#endif // OPENSUBDIV3_OSD_CPU_EVALUATOR_H │ │ │ │ │ +_4_2class _C_p_u_V_e_r_t_e_x_B_u_f_f_e_r { │ │ │ │ │ +43public: │ │ │ │ │ +_4_5 static _C_p_u_V_e_r_t_e_x_B_u_f_f_e_r * _C_r_e_a_t_e(int numElements, int numVertices, │ │ │ │ │ +46 void *deviceContext = NULL); │ │ │ │ │ +47 │ │ │ │ │ +_4_9 _~_C_p_u_V_e_r_t_e_x_B_u_f_f_e_r(); │ │ │ │ │ +50 │ │ │ │ │ +_5_3 void _U_p_d_a_t_e_D_a_t_a(const float *src, int startVertex, int numVertices, │ │ │ │ │ +54 void *deviceContext = NULL); │ │ │ │ │ +55 │ │ │ │ │ +_5_7 int _G_e_t_N_u_m_E_l_e_m_e_n_t_s() const; │ │ │ │ │ +58 │ │ │ │ │ +_6_0 int _G_e_t_N_u_m_V_e_r_t_i_c_e_s() const; │ │ │ │ │ +61 │ │ │ │ │ +_6_3 float * _B_i_n_d_C_p_u_B_u_f_f_e_r(); │ │ │ │ │ +64 │ │ │ │ │ +65protected: │ │ │ │ │ +_6_7 _C_p_u_V_e_r_t_e_x_B_u_f_f_e_r(int numElements, int numVertices); │ │ │ │ │ +68 │ │ │ │ │ +69private: │ │ │ │ │ +70 int _numElements; │ │ │ │ │ +71 int _numVertices; │ │ │ │ │ +72 float *_cpuBuffer; │ │ │ │ │ +73}; │ │ │ │ │ +74 │ │ │ │ │ +75 │ │ │ │ │ +76} // end namespace Osd │ │ │ │ │ +77 │ │ │ │ │ +78} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ +79using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +80 │ │ │ │ │ +81} // end namespace OpenSubdiv │ │ │ │ │ +82 │ │ │ │ │ +83#endif // OPENSUBDIV3_OSD_CPU_VERTEX_BUFFER_H │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ -BufferDescriptor is a struct which describes buffer elements in interleaved │ │ │ │ │ -data buffers.... │ │ │ │ │ -DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_6_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_3_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ -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 ... │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_1_0_3_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ -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 ... │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_1_1_0_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -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. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ -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 ... │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_1_1_8_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ -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 ... │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_9_7_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -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. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -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. │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -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... │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, │ │ │ │ │ -DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, 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 ... │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_4_5_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -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, CpuEvaluator const *instance=NULL, void *deviceContext=NULL) │ │ │ │ │ -Generic limit eval function with derivatives. This function has a same │ │ │ │ │ -signature as other device kern... │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_5_1_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -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... │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -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 CpuEvaluator *instance=NULL, void *deviceContext=NULL) │ │ │ │ │ -Generic static eval stencils function with derivatives. This function has a │ │ │ │ │ -same signature as other d... │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_3_0_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -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... │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ -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, CpuEvaluator const *instance=NULL, void │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ +Concrete vertex buffer class for CPU subdivision. │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_V_e_r_t_e_x_B_u_f_f_e_r_._h_:_4_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_V_e_r_t_e_x_B_u_f_f_e_r_:_:_G_e_t_N_u_m_E_l_e_m_e_n_t_s │ │ │ │ │ +int GetNumElements() const │ │ │ │ │ +Returns how many elements defined in this vertex buffer. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_V_e_r_t_e_x_B_u_f_f_e_r_:_:_C_r_e_a_t_e │ │ │ │ │ +static CpuVertexBuffer * Create(int numElements, int numVertices, void │ │ │ │ │ *deviceContext=NULL) │ │ │ │ │ -Generic limit eval function. This function has a same signature as other device │ │ │ │ │ -kernels have so that ... │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_8_8_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ -static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const │ │ │ │ │ -&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, 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 ... │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_8_2_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_S_y_n_c_h_r_o_n_i_z_e │ │ │ │ │ -static void Synchronize(void *) │ │ │ │ │ -synchronize all asynchronous computation invoked on this device. │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_1_2_2_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const │ │ │ │ │ -&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE │ │ │ │ │ -const *stencilTable, const CpuEvaluator *instance=NULL, void │ │ │ │ │ +Creator. Returns NULL if error. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_V_e_r_t_e_x_B_u_f_f_e_r_:_:_U_p_d_a_t_e_D_a_t_a │ │ │ │ │ +void UpdateData(const float *src, int startVertex, int numVertices, void │ │ │ │ │ *deviceContext=NULL) │ │ │ │ │ -Generic static eval stencils function. This function has a same signature as │ │ │ │ │ -other device kernels hav... │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_7_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ -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, CpuEvaluator const *instance=NULL, void │ │ │ │ │ -*deviceContext=NULL) │ │ │ │ │ -Generic limit eval function with derivatives. This function has a same │ │ │ │ │ -signature as other device kern... │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_6_0_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ -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 │ │ │ │ │ -CpuEvaluator *instance=NULL, void *deviceContext=NULL) │ │ │ │ │ -Generic static eval stencils function with derivatives. This function has a │ │ │ │ │ -same signature as other d... │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_1_6_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_C_o_o_r_d │ │ │ │ │ -Coordinates set on a patch table. │ │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e_s_._h_:_4_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_A_r_r_a_y │ │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e_s_._h_:_6_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_P_a_r_a_m │ │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e_s_._h_:_1_2_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_V_e_r_t_e_x_B_u_f_f_e_r_:_:_G_e_t_N_u_m_V_e_r_t_i_c_e_s │ │ │ │ │ +int GetNumVertices() const │ │ │ │ │ +Returns how many vertices allocated in this vertex buffer. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_V_e_r_t_e_x_B_u_f_f_e_r_:_:_~_C_p_u_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ +~CpuVertexBuffer() │ │ │ │ │ +Destructor. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_V_e_r_t_e_x_B_u_f_f_e_r_:_:_B_i_n_d_C_p_u_B_u_f_f_e_r │ │ │ │ │ +float * BindCpuBuffer() │ │ │ │ │ +Returns the address of CPU buffer. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_V_e_r_t_e_x_B_u_f_f_e_r_:_:_C_p_u_V_e_r_t_e_x_B_u_f_f_e_r │ │ │ │ │ +CpuVertexBuffer(int numElements, int numVertices) │ │ │ │ │ +Constructor. │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _c_p_u_E_v_a_l_u_a_t_o_r_._h │ │ │ │ │ + * _c_p_u_V_e_r_t_e_x_B_u_f_f_e_r_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00896.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/cpuPatchTable.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/osd/bufferDescriptor.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -90,46 +90,41 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
cpuPatchTable.h File Reference
│ │ │ │ +
bufferDescriptor.h File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include <vector>
│ │ │ │ -#include "../far/patchDescriptor.h"
│ │ │ │ -#include "../osd/nonCopyable.h"
│ │ │ │ -#include "../osd/types.h"
│ │ │ │ +#include <string.h>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  CpuPatchTable
 Cpu patch table. More...
struct  BufferDescriptor
 BufferDescriptor is a struct which describes buffer elements in interleaved data buffers. Almost all Osd Evaluator APIs take BufferDescriptors along with device-specific buffer objects. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Far
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION::Osd
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,29 +1,26 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -cpuPatchTable.h File Reference │ │ │ │ │ +bufferDescriptor.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_f_a_r_/_p_a_t_c_h_D_e_s_c_r_i_p_t_o_r_._h" │ │ │ │ │ -#include "../osd/nonCopyable.h" │ │ │ │ │ -#include "_._._/_o_s_d_/_t_y_p_e_s_._h" │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _C_p_u_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -  Cpu patch table. _M_o_r_e_._._. │ │ │ │ │ +struct   _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ + _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r is a struct which describes buffer elements in │ │ │ │ │ +  interleaved data buffers. Almost all _O_s_d Evaluator APIs take │ │ │ │ │ + BufferDescriptors along with device-specific buffer objects. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ -namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r │ │ │ │ │ -  │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d │ │ │ │ │   │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _c_p_u_P_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ + * _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00896.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,3 +1,3 @@ │ │ │ │ │ var a00896 = [ │ │ │ │ │ - ["CpuPatchTable", "a01173.html", "a01173"] │ │ │ │ │ + ["BufferDescriptor", "a01141.html", "a01141"] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00896_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/cpuPatchTable.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/osd/bufferDescriptor.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,15 +92,15 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
cpuPatchTable.h
│ │ │ │ +
bufferDescriptor.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │
2// Copyright 2015 Pixar
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │ @@ -119,193 +119,112 @@ │ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │
24
│ │ │ │ -
25#ifndef OPENSUBDIV3_OSD_CPU_PATCH_TABLE_H
│ │ │ │ -
26#define OPENSUBDIV3_OSD_CPU_PATCH_TABLE_H
│ │ │ │ +
25#ifndef OPENSUBDIV3_OSD_BUFFER_DESCRIPTOR_H
│ │ │ │ +
26#define OPENSUBDIV3_OSD_BUFFER_DESCRIPTOR_H
│ │ │ │
27
│ │ │ │
28#include "../version.h"
│ │ │ │ -
29
│ │ │ │ -
30#include <vector>
│ │ │ │ -
31#include "../far/patchDescriptor.h"
│ │ │ │ -
32#include "../osd/nonCopyable.h"
│ │ │ │ -
33#include "../osd/types.h"
│ │ │ │ -
34
│ │ │ │ -
35#include <vector>
│ │ │ │ -
36
│ │ │ │ -
37namespace OpenSubdiv {
│ │ │ │ -
38namespace OPENSUBDIV_VERSION {
│ │ │ │ -
39
│ │ │ │ -
40namespace Far{
│ │ │ │ -
41 class PatchTable;
│ │ │ │ -
42};
│ │ │ │ -
43
│ │ │ │ -
44namespace Osd {
│ │ │ │ -
45
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
60public:
│ │ │ │ -
│ │ │ │ -
61 static CpuPatchTable *Create(const Far::PatchTable *patchTable,
│ │ │ │ -
62 void *deviceContext = NULL) {
│ │ │ │ -
63 (void)deviceContext; // unused
│ │ │ │ -
64 return new CpuPatchTable(patchTable);
│ │ │ │ -
65 }
│ │ │ │ -
│ │ │ │ -
66
│ │ │ │ -
67 explicit CpuPatchTable(const Far::PatchTable *patchTable);
│ │ │ │ - │ │ │ │ -
69
│ │ │ │ +
29#include <string.h>
│ │ │ │ +
30
│ │ │ │ +
31namespace OpenSubdiv {
│ │ │ │ +
32namespace OPENSUBDIV_VERSION {
│ │ │ │ +
33
│ │ │ │ +
│ │ │ │ +
34namespace Osd {
│ │ │ │ +
35
│ │ │ │ +
46
│ │ │ │ +
47// example:
│ │ │ │ +
48// n
│ │ │ │ +
49// -----+----------------------------------------+-------------------------
│ │ │ │ +
50// | vertex 0 |
│ │ │ │ +
51// -----+----------------------------------------+-------------------------
│ │ │ │ +
52// | X Y Z R G B A Xu Yu Zu Xv Yv Zv |
│ │ │ │ +
53// -----+----------------------------------------+-------------------------
│ │ │ │ +
54// <------------- stride = 13 -------------->
│ │ │ │ +
55//
│ │ │ │ +
56// - XYZ (offset = n+0, length = 3, stride = 13)
│ │ │ │ +
57// - RGBA (offset = n+3, length = 4, stride = 13)
│ │ │ │ +
58// - uTangent (offset = n+7, length = 3, stride = 13)
│ │ │ │ +
59// - vTangent (offset = n+10, length = 3, stride = 13)
│ │ │ │ +
60//
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
62
│ │ │ │ + │ │ │ │ +
65
│ │ │ │ +
67 BufferDescriptor(int o, int l, int s) : offset(o), length(l), stride(s) { }
│ │ │ │ +
68
│ │ │ │
│ │ │ │ - │ │ │ │ -
71 return &_patchArrays[0];
│ │ │ │ +
70 int GetLocalOffset() const {
│ │ │ │ +
71 return stride > 0 ? offset % stride : 0;
│ │ │ │
72 }
│ │ │ │
│ │ │ │ -
│ │ │ │ -
73 const int *GetPatchIndexBuffer() const {
│ │ │ │ -
74 return &_indexBuffer[0];
│ │ │ │ -
75 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
77 return &_patchParamBuffer[0];
│ │ │ │ +
73
│ │ │ │ +
│ │ │ │ +
75 bool IsValid() const {
│ │ │ │ +
76 return ((length > 0) &&
│ │ │ │ + │ │ │ │
78 }
│ │ │ │
│ │ │ │
79
│ │ │ │ -
│ │ │ │ -
80 size_t GetNumPatchArrays() const {
│ │ │ │ -
81 return _patchArrays.size();
│ │ │ │ -
82 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
83 size_t GetPatchIndexSize() const {
│ │ │ │ -
84 return _indexBuffer.size();
│ │ │ │ -
85 }
│ │ │ │ +
│ │ │ │ +
81 void Reset() {
│ │ │ │ +
82 offset = length = stride = 0;
│ │ │ │ +
83 }
│ │ │ │
│ │ │ │ +
84
│ │ │ │
│ │ │ │ -
86 size_t GetPatchParamSize() const {
│ │ │ │ -
87 return _patchParamBuffer.size();
│ │ │ │ -
88 }
│ │ │ │ -
│ │ │ │ -
89
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
91 if (_varyingPatchArrays.empty()) {
│ │ │ │ -
92 return NULL;
│ │ │ │ -
93 }
│ │ │ │ -
94 return &_varyingPatchArrays[0];
│ │ │ │ +
86 bool operator == (BufferDescriptor const &other) const {
│ │ │ │ +
87 return (offset == other.offset &&
│ │ │ │ +
88 length == other.length &&
│ │ │ │ +
89 stride == other.stride);
│ │ │ │ +
90 }
│ │ │ │ +
│ │ │ │ +
91
│ │ │ │ +
│ │ │ │ +
93 bool operator != (BufferDescriptor const &other) const {
│ │ │ │ +
94 return !(this->operator==(other));
│ │ │ │
95 }
│ │ │ │
│ │ │ │ -
│ │ │ │ -
96 const int *GetVaryingPatchIndexBuffer() const {
│ │ │ │ -
97 if (_varyingIndexBuffer.empty()) {
│ │ │ │ -
98 return NULL;
│ │ │ │ -
99 }
│ │ │ │ -
100 return &_varyingIndexBuffer[0];
│ │ │ │ -
101 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
103 return _varyingIndexBuffer.size();
│ │ │ │ -
104 }
│ │ │ │ -
│ │ │ │ -
105
│ │ │ │ -
│ │ │ │ -
106 int GetNumFVarChannels() const {
│ │ │ │ -
107 return (int)_fvarPatchArrays.size();
│ │ │ │ -
108 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
109 const PatchArray *GetFVarPatchArrayBuffer(int fvarChannel = 0) const {
│ │ │ │ -
110 return &_fvarPatchArrays[fvarChannel][0];
│ │ │ │ -
111 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
112 const int *GetFVarPatchIndexBuffer(int fvarChannel = 0) const {
│ │ │ │ -
113 return &_fvarIndexBuffers[fvarChannel][0];
│ │ │ │ -
114 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
115 size_t GetFVarPatchIndexSize(int fvarChannel = 0) const {
│ │ │ │ -
116 return _fvarIndexBuffers[fvarChannel].size();
│ │ │ │ -
117 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
118 const PatchParam *GetFVarPatchParamBuffer(int fvarChannel= 0) const {
│ │ │ │ -
119 return &_fvarParamBuffers[fvarChannel][0];
│ │ │ │ -
120 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
121 size_t GetFVarPatchParamSize(int fvarChannel = 0) const {
│ │ │ │ -
122 return _fvarParamBuffers[fvarChannel].size();
│ │ │ │ -
123 }
│ │ │ │ -
│ │ │ │ -
124
│ │ │ │ -
125protected:
│ │ │ │ - │ │ │ │ -
127 std::vector<int> _indexBuffer;
│ │ │ │ - │ │ │ │ -
129
│ │ │ │ - │ │ │ │ -
131 std::vector<int> _varyingIndexBuffer;
│ │ │ │ -
132
│ │ │ │ -
133 std::vector< PatchArrayVector > _fvarPatchArrays;
│ │ │ │ -
134 std::vector< std::vector<int> > _fvarIndexBuffers;
│ │ │ │ -
135 std::vector< PatchParamVector > _fvarParamBuffers;
│ │ │ │ -
136};
│ │ │ │ -
│ │ │ │ -
137
│ │ │ │ -
138} // end namespace Osd
│ │ │ │ -
139
│ │ │ │ -
140} // end namespace OPENSUBDIV_VERSION
│ │ │ │ -
141using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
142
│ │ │ │ -
143} // end namespace OpenSubdiv
│ │ │ │ -
144
│ │ │ │ -
145#endif // OPENSUBDIV3_OSD_CPU_PATCH_TABLE_H
│ │ │ │ +
96
│ │ │ │ +
98 int offset;
│ │ │ │ + │ │ │ │ + │ │ │ │ +
103};
│ │ │ │ +
│ │ │ │ +
104
│ │ │ │ +
105} // end namespace Osd
│ │ │ │ +
│ │ │ │ +
106
│ │ │ │ +
107} // end namespace OPENSUBDIV_VERSION
│ │ │ │ +
108using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
109
│ │ │ │ +
110} // end namespace OpenSubdiv
│ │ │ │ +
111
│ │ │ │ +
112#endif // OPENSUBDIV3_OSD_BUFFER_DESCRIPTOR_H
│ │ │ │ │ │ │ │ -
std::vector< PatchParam > PatchParamVector
Definition types.h:133
│ │ │ │ -
std::vector< PatchArray > PatchArrayVector
Definition types.h:132
│ │ │ │ -
Container for arrays of parametric patches.
Definition patchTable.h:55
│ │ │ │ - │ │ │ │ -
const PatchArray * GetFVarPatchArrayBuffer(int fvarChannel=0) const
│ │ │ │ - │ │ │ │ - │ │ │ │ -
size_t GetFVarPatchParamSize(int fvarChannel=0) const
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
static CpuPatchTable * Create(const Far::PatchTable *patchTable, void *deviceContext=NULL)
│ │ │ │ -
std::vector< PatchParamVector > _fvarParamBuffers
│ │ │ │ -
CpuPatchTable(const Far::PatchTable *patchTable)
│ │ │ │ -
std::vector< std::vector< int > > _fvarIndexBuffers
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
size_t GetFVarPatchIndexSize(int fvarChannel=0) const
│ │ │ │ -
const int * GetFVarPatchIndexBuffer(int fvarChannel=0) const
│ │ │ │ -
const PatchParam * GetFVarPatchParamBuffer(int fvarChannel=0) const
│ │ │ │ - │ │ │ │ - │ │ │ │ -
const PatchArray * GetVaryingPatchArrayBuffer() const
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
std::vector< PatchArrayVector > _fvarPatchArrays
│ │ │ │ - │ │ │ │ - │ │ │ │ +
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ + │ │ │ │ +
void Reset()
Resets the descriptor to default.
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
bool operator!=(BufferDescriptor const &other) const
True if the descriptors are not identical.
│ │ │ │ +
bool operator==(BufferDescriptor const &other) const
True if the descriptors are identical.
│ │ │ │ +
bool IsValid() const
True if the descriptor values are internally consistent.
│ │ │ │ +
int GetLocalOffset() const
Returns the relative offset within a stride.
│ │ │ │ + │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,12 +1,12 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -cpuPatchTable.h │ │ │ │ │ +bufferDescriptor.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ 2// Copyright 2015 Pixar │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ @@ -24,215 +24,125 @@ │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ 24 │ │ │ │ │ -25#ifndef OPENSUBDIV3_OSD_CPU_PATCH_TABLE_H │ │ │ │ │ -26#define OPENSUBDIV3_OSD_CPU_PATCH_TABLE_H │ │ │ │ │ +25#ifndef OPENSUBDIV3_OSD_BUFFER_DESCRIPTOR_H │ │ │ │ │ +26#define OPENSUBDIV3_OSD_BUFFER_DESCRIPTOR_H │ │ │ │ │ 27 │ │ │ │ │ 28#include "../version.h" │ │ │ │ │ -29 │ │ │ │ │ -30#include │ │ │ │ │ -31#include "../far/patchDescriptor.h" │ │ │ │ │ -32#include "../osd/nonCopyable.h" │ │ │ │ │ -33#include "../osd/types.h" │ │ │ │ │ -34 │ │ │ │ │ -35#include │ │ │ │ │ -36 │ │ │ │ │ -37namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ -38namespace OPENSUBDIV_VERSION { │ │ │ │ │ -39 │ │ │ │ │ -40namespace Far{ │ │ │ │ │ -41 class PatchTable; │ │ │ │ │ -42}; │ │ │ │ │ -43 │ │ │ │ │ -44namespace Osd { │ │ │ │ │ -45 │ │ │ │ │ -_5_9class _C_p_u_P_a_t_c_h_T_a_b_l_e { │ │ │ │ │ -60public: │ │ │ │ │ -_6_1 static _C_p_u_P_a_t_c_h_T_a_b_l_e *_C_r_e_a_t_e(const _F_a_r_:_:_P_a_t_c_h_T_a_b_l_e *patchTable, │ │ │ │ │ -62 void *deviceContext = NULL) { │ │ │ │ │ -63 (void)deviceContext; // unused │ │ │ │ │ -64 return new _C_p_u_P_a_t_c_h_T_a_b_l_e(patchTable); │ │ │ │ │ -65 } │ │ │ │ │ -66 │ │ │ │ │ -_6_7 explicit _C_p_u_P_a_t_c_h_T_a_b_l_e(const _F_a_r_:_:_P_a_t_c_h_T_a_b_l_e *patchTable); │ │ │ │ │ -_6_8 _~_C_p_u_P_a_t_c_h_T_a_b_l_e() {} │ │ │ │ │ -69 │ │ │ │ │ -_7_0 const _P_a_t_c_h_A_r_r_a_y *_G_e_t_P_a_t_c_h_A_r_r_a_y_B_u_f_f_e_r() const { │ │ │ │ │ -71 return &___p_a_t_c_h_A_r_r_a_y_s[0]; │ │ │ │ │ +29#include │ │ │ │ │ +30 │ │ │ │ │ +31namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ +32namespace OPENSUBDIV_VERSION { │ │ │ │ │ +33 │ │ │ │ │ +_3_4namespace Osd { │ │ │ │ │ +35 │ │ │ │ │ +46 │ │ │ │ │ +47// example: │ │ │ │ │ +48// n │ │ │ │ │ +49// -----+----------------------------------------+------------------------- │ │ │ │ │ +50// | vertex 0 | │ │ │ │ │ +51// -----+----------------------------------------+------------------------- │ │ │ │ │ +52// | X Y Z R G B A Xu Yu Zu Xv Yv Zv | │ │ │ │ │ +53// -----+----------------------------------------+------------------------- │ │ │ │ │ +54// <------------- stride = 13 --------------> │ │ │ │ │ +55// │ │ │ │ │ +56// - XYZ (offset = n+0, length = 3, stride = 13) │ │ │ │ │ +57// - RGBA (offset = n+3, length = 4, stride = 13) │ │ │ │ │ +58// - uTangent (offset = n+7, length = 3, stride = 13) │ │ │ │ │ +59// - vTangent (offset = n+10, length = 3, stride = 13) │ │ │ │ │ +60// │ │ │ │ │ +_6_1struct _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r { │ │ │ │ │ +62 │ │ │ │ │ +_6_4 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r() : _o_f_f_s_e_t(0), _l_e_n_g_t_h(0), _s_t_r_i_d_e(0) { } │ │ │ │ │ +65 │ │ │ │ │ +_6_7 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(int o, int l, int s) : _o_f_f_s_e_t(o), _l_e_n_g_t_h(l), _s_t_r_i_d_e(s) { } │ │ │ │ │ +68 │ │ │ │ │ +_7_0 int _G_e_t_L_o_c_a_l_O_f_f_s_e_t() const { │ │ │ │ │ +71 return _s_t_r_i_d_e > 0 ? _o_f_f_s_e_t % _s_t_r_i_d_e : 0; │ │ │ │ │ 72 } │ │ │ │ │ -_7_3 const int *_G_e_t_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r() const { │ │ │ │ │ -74 return &___i_n_d_e_x_B_u_f_f_e_r[0]; │ │ │ │ │ -75 } │ │ │ │ │ -_7_6 const _P_a_t_c_h_P_a_r_a_m *_G_e_t_P_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r() const { │ │ │ │ │ -77 return &___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r[0]; │ │ │ │ │ +73 │ │ │ │ │ +_7_5 bool _I_s_V_a_l_i_d() const { │ │ │ │ │ +76 return ((_l_e_n_g_t_h > 0) && │ │ │ │ │ +77 (_l_e_n_g_t_h <= _s_t_r_i_d_e - _G_e_t_L_o_c_a_l_O_f_f_s_e_t())); │ │ │ │ │ 78 } │ │ │ │ │ 79 │ │ │ │ │ -_8_0 size_t _G_e_t_N_u_m_P_a_t_c_h_A_r_r_a_y_s() const { │ │ │ │ │ -81 return ___p_a_t_c_h_A_r_r_a_y_s.size(); │ │ │ │ │ -82 } │ │ │ │ │ -_8_3 size_t _G_e_t_P_a_t_c_h_I_n_d_e_x_S_i_z_e() const { │ │ │ │ │ -84 return ___i_n_d_e_x_B_u_f_f_e_r.size(); │ │ │ │ │ -85 } │ │ │ │ │ -_8_6 size_t _G_e_t_P_a_t_c_h_P_a_r_a_m_S_i_z_e() const { │ │ │ │ │ -87 return ___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r.size(); │ │ │ │ │ -88 } │ │ │ │ │ -89 │ │ │ │ │ -_9_0 const _P_a_t_c_h_A_r_r_a_y *_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_B_u_f_f_e_r() const { │ │ │ │ │ -91 if (___v_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_s.empty()) { │ │ │ │ │ -92 return NULL; │ │ │ │ │ -93 } │ │ │ │ │ -94 return &___v_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_s[0]; │ │ │ │ │ +_8_1 void _R_e_s_e_t() { │ │ │ │ │ +82 _o_f_f_s_e_t = _l_e_n_g_t_h = _s_t_r_i_d_e = 0; │ │ │ │ │ +83 } │ │ │ │ │ +84 │ │ │ │ │ +_8_6 bool _o_p_e_r_a_t_o_r_ _=_=_ (_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &other) const { │ │ │ │ │ +87 return (_o_f_f_s_e_t == other._o_f_f_s_e_t && │ │ │ │ │ +88 _l_e_n_g_t_h == other._l_e_n_g_t_h && │ │ │ │ │ +89 _s_t_r_i_d_e == other._s_t_r_i_d_e); │ │ │ │ │ +90 } │ │ │ │ │ +91 │ │ │ │ │ +_9_3 bool _o_p_e_r_a_t_o_r_ _!_=_ (_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &other) const { │ │ │ │ │ +94 return !(this->_o_p_e_r_a_t_o_r_=_=(other)); │ │ │ │ │ 95 } │ │ │ │ │ -_9_6 const int *_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r() const { │ │ │ │ │ -97 if (___v_a_r_y_i_n_g_I_n_d_e_x_B_u_f_f_e_r.empty()) { │ │ │ │ │ -98 return NULL; │ │ │ │ │ -99 } │ │ │ │ │ -100 return &___v_a_r_y_i_n_g_I_n_d_e_x_B_u_f_f_e_r[0]; │ │ │ │ │ -101 } │ │ │ │ │ -_1_0_2 size_t _G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_I_n_d_e_x_S_i_z_e() const { │ │ │ │ │ -103 return ___v_a_r_y_i_n_g_I_n_d_e_x_B_u_f_f_e_r.size(); │ │ │ │ │ -104 } │ │ │ │ │ -105 │ │ │ │ │ -_1_0_6 int _G_e_t_N_u_m_F_V_a_r_C_h_a_n_n_e_l_s() const { │ │ │ │ │ -107 return (int)___f_v_a_r_P_a_t_c_h_A_r_r_a_y_s.size(); │ │ │ │ │ -108 } │ │ │ │ │ -_1_0_9 const _P_a_t_c_h_A_r_r_a_y *_G_e_t_F_V_a_r_P_a_t_c_h_A_r_r_a_y_B_u_f_f_e_r(int fvarChannel = 0) const { │ │ │ │ │ -110 return &___f_v_a_r_P_a_t_c_h_A_r_r_a_y_s[fvarChannel][0]; │ │ │ │ │ -111 } │ │ │ │ │ -_1_1_2 const int *_G_e_t_F_V_a_r_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r(int fvarChannel = 0) const { │ │ │ │ │ -113 return &___f_v_a_r_I_n_d_e_x_B_u_f_f_e_r_s[fvarChannel][0]; │ │ │ │ │ -114 } │ │ │ │ │ -_1_1_5 size_t _G_e_t_F_V_a_r_P_a_t_c_h_I_n_d_e_x_S_i_z_e(int fvarChannel = 0) const { │ │ │ │ │ -116 return ___f_v_a_r_I_n_d_e_x_B_u_f_f_e_r_s[fvarChannel].size(); │ │ │ │ │ -117 } │ │ │ │ │ -_1_1_8 const _P_a_t_c_h_P_a_r_a_m *_G_e_t_F_V_a_r_P_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r(int fvarChannel= 0) const { │ │ │ │ │ -119 return &___f_v_a_r_P_a_r_a_m_B_u_f_f_e_r_s[fvarChannel][0]; │ │ │ │ │ -120 } │ │ │ │ │ -_1_2_1 size_t _G_e_t_F_V_a_r_P_a_t_c_h_P_a_r_a_m_S_i_z_e(int fvarChannel = 0) const { │ │ │ │ │ -122 return ___f_v_a_r_P_a_r_a_m_B_u_f_f_e_r_s[fvarChannel].size(); │ │ │ │ │ -123 } │ │ │ │ │ -124 │ │ │ │ │ -125protected: │ │ │ │ │ -_1_2_6 _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r ___p_a_t_c_h_A_r_r_a_y_s; │ │ │ │ │ -_1_2_7 std::vector ___i_n_d_e_x_B_u_f_f_e_r; │ │ │ │ │ -_1_2_8 _P_a_t_c_h_P_a_r_a_m_V_e_c_t_o_r ___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r; │ │ │ │ │ -129 │ │ │ │ │ -_1_3_0 _P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r ___v_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_s; │ │ │ │ │ -_1_3_1 std::vector ___v_a_r_y_i_n_g_I_n_d_e_x_B_u_f_f_e_r; │ │ │ │ │ -132 │ │ │ │ │ -_1_3_3 std::vector< PatchArrayVector > ___f_v_a_r_P_a_t_c_h_A_r_r_a_y_s; │ │ │ │ │ -_1_3_4 std::vector< std::vector > ___f_v_a_r_I_n_d_e_x_B_u_f_f_e_r_s; │ │ │ │ │ -_1_3_5 std::vector< PatchParamVector > ___f_v_a_r_P_a_r_a_m_B_u_f_f_e_r_s; │ │ │ │ │ -136}; │ │ │ │ │ -137 │ │ │ │ │ -138} // end namespace Osd │ │ │ │ │ -139 │ │ │ │ │ -140} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ -141using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -142 │ │ │ │ │ -143} // end namespace OpenSubdiv │ │ │ │ │ -144 │ │ │ │ │ -145#endif // OPENSUBDIV3_OSD_CPU_PATCH_TABLE_H │ │ │ │ │ +96 │ │ │ │ │ +_9_8 int _o_f_f_s_e_t; │ │ │ │ │ +_1_0_0 int _l_e_n_g_t_h; │ │ │ │ │ +_1_0_2 int _s_t_r_i_d_e; │ │ │ │ │ +103}; │ │ │ │ │ +104 │ │ │ │ │ +105} // end namespace Osd │ │ │ │ │ +106 │ │ │ │ │ +107} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ +108using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +109 │ │ │ │ │ +110} // end namespace OpenSubdiv │ │ │ │ │ +111 │ │ │ │ │ +112#endif // OPENSUBDIV3_OSD_BUFFER_DESCRIPTOR_H │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_P_a_r_a_m_V_e_c_t_o_r │ │ │ │ │ -std::vector< PatchParam > PatchParamVector │ │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e_s_._h_:_1_3_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_A_r_r_a_y_V_e_c_t_o_r │ │ │ │ │ -std::vector< PatchArray > PatchArrayVector │ │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e_s_._h_:_1_3_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_F_a_r_:_:_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -Container for arrays of parametric patches. │ │ │ │ │ -DDeeffiinniittiioonn _p_a_t_c_h_T_a_b_l_e_._h_:_5_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -Cpu patch table. │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_5_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_A_r_r_a_y_B_u_f_f_e_r │ │ │ │ │ -const PatchArray * GetFVarPatchArrayBuffer(int fvarChannel=0) const │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_0_9 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ -const int * GetVaryingPatchIndexBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_9_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:___v_a_r_y_i_n_g_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ -std::vector< int > _varyingIndexBuffer │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_3_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_P_a_r_a_m_S_i_z_e │ │ │ │ │ -size_t GetFVarPatchParamSize(int fvarChannel=0) const │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_2_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_~_C_p_u_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -~CpuPatchTable() │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_6_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:___p_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r │ │ │ │ │ -PatchParamVector _patchParamBuffer │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_2_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ -const int * GetPatchIndexBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_7_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_C_r_e_a_t_e │ │ │ │ │ -static CpuPatchTable * Create(const Far::PatchTable *patchTable, void │ │ │ │ │ -*deviceContext=NULL) │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_6_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:___f_v_a_r_P_a_r_a_m_B_u_f_f_e_r_s │ │ │ │ │ -std::vector< PatchParamVector > _fvarParamBuffers │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_3_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e │ │ │ │ │ -CpuPatchTable(const Far::PatchTable *patchTable) │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:___f_v_a_r_I_n_d_e_x_B_u_f_f_e_r_s │ │ │ │ │ -std::vector< std::vector< int > > _fvarIndexBuffers │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_3_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_I_n_d_e_x_S_i_z_e │ │ │ │ │ -size_t GetPatchIndexSize() const │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_8_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:___p_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ -PatchArrayVector _patchArrays │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_2_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r │ │ │ │ │ -const PatchParam * GetPatchParamBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_7_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:___i_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ -std::vector< int > _indexBuffer │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_2_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_I_n_d_e_x_S_i_z_e │ │ │ │ │ -size_t GetFVarPatchIndexSize(int fvarChannel=0) const │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_1_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_I_n_d_e_x_B_u_f_f_e_r │ │ │ │ │ -const int * GetFVarPatchIndexBuffer(int fvarChannel=0) const │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_1_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_F_V_a_r_P_a_t_c_h_P_a_r_a_m_B_u_f_f_e_r │ │ │ │ │ -const PatchParam * GetFVarPatchParamBuffer(int fvarChannel=0) const │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_1_8 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_P_a_r_a_m_S_i_z_e │ │ │ │ │ -size_t GetPatchParamSize() const │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_8_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_I_n_d_e_x_S_i_z_e │ │ │ │ │ -size_t GetVaryingPatchIndexSize() const │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_0_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_V_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_B_u_f_f_e_r │ │ │ │ │ -const PatchArray * GetVaryingPatchArrayBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_9_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_F_V_a_r_C_h_a_n_n_e_l_s │ │ │ │ │ -int GetNumFVarChannels() const │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_0_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_N_u_m_P_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ -size_t GetNumPatchArrays() const │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_8_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:_G_e_t_P_a_t_c_h_A_r_r_a_y_B_u_f_f_e_r │ │ │ │ │ -const PatchArray * GetPatchArrayBuffer() const │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_7_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:___v_a_r_y_i_n_g_P_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ -PatchArrayVector _varyingPatchArrays │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_3_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_P_a_t_c_h_T_a_b_l_e_:_:___f_v_a_r_P_a_t_c_h_A_r_r_a_y_s │ │ │ │ │ -std::vector< PatchArrayVector > _fvarPatchArrays │ │ │ │ │ -DDeeffiinniittiioonn _c_p_u_P_a_t_c_h_T_a_b_l_e_._h_:_1_3_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_A_r_r_a_y │ │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e_s_._h_:_6_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_P_a_r_a_m │ │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e_s_._h_:_1_2_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ +BufferDescriptor is a struct which describes buffer elements in interleaved │ │ │ │ │ +data buffers.... │ │ │ │ │ +DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_6_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_:_:_s_t_r_i_d_e │ │ │ │ │ +int stride │ │ │ │ │ +stride to the next element │ │ │ │ │ +DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_1_0_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_:_:_R_e_s_e_t │ │ │ │ │ +void Reset() │ │ │ │ │ +Resets the descriptor to default. │ │ │ │ │ +DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_8_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ +BufferDescriptor() │ │ │ │ │ +Default Constructor. │ │ │ │ │ +DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_6_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ +BufferDescriptor(int o, int l, int s) │ │ │ │ │ +Constructor. │ │ │ │ │ +DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_6_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_:_:_l_e_n_g_t_h │ │ │ │ │ +int length │ │ │ │ │ +number or length of the data │ │ │ │ │ +DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_1_0_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_:_:_o_p_e_r_a_t_o_r_!_= │ │ │ │ │ +bool operator!=(BufferDescriptor const &other) const │ │ │ │ │ +True if the descriptors are not identical. │ │ │ │ │ +DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_9_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_:_:_o_p_e_r_a_t_o_r_=_= │ │ │ │ │ +bool operator==(BufferDescriptor const &other) const │ │ │ │ │ +True if the descriptors are identical. │ │ │ │ │ +DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_8_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_:_:_I_s_V_a_l_i_d │ │ │ │ │ +bool IsValid() const │ │ │ │ │ +True if the descriptor values are internally consistent. │ │ │ │ │ +DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_7_5 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_:_:_G_e_t_L_o_c_a_l_O_f_f_s_e_t │ │ │ │ │ +int GetLocalOffset() const │ │ │ │ │ +Returns the relative offset within a stride. │ │ │ │ │ +DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_7_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_:_:_o_f_f_s_e_t │ │ │ │ │ +int offset │ │ │ │ │ +offset to desired element data │ │ │ │ │ +DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_9_8 │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _c_p_u_P_a_t_c_h_T_a_b_l_e_._h │ │ │ │ │ + * _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00899.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/bufferDescriptor.h File Reference │ │ │ │ +OpenSubdiv: opensubdiv/osd/cpuEvaluator.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -90,26 +90,27 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
bufferDescriptor.h File Reference
│ │ │ │ +
cpuEvaluator.h File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include <string.h>
│ │ │ │ +#include "../osd/bufferDescriptor.h"
│ │ │ │ +#include "../osd/types.h"
│ │ │ │ +#include <cstddef>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  BufferDescriptor
 BufferDescriptor is a struct which describes buffer elements in interleaved data buffers. Almost all Osd Evaluator APIs take BufferDescriptors along with device-specific buffer objects. More...
class  CpuEvaluator
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -118,13 +119,13 @@ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  OpenSubdiv
 
namespace  OpenSubdiv::OPENSUBDIV_VERSION
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,26 +1,25 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -bufferDescriptor.h File Reference │ │ │ │ │ +cpuEvaluator.h File Reference │ │ │ │ │ #include "../version.h" │ │ │ │ │ -#include │ │ │ │ │ +#include "_._._/_o_s_d_/_b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h" │ │ │ │ │ +#include "_._._/_o_s_d_/_t_y_p_e_s_._h" │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ - _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r is a struct which describes buffer elements in │ │ │ │ │ -  interleaved data buffers. Almost all _O_s_d Evaluator APIs take │ │ │ │ │ - BufferDescriptors along with device-specific buffer objects. _M_o_r_e_._._. │ │ │ │ │ +class   _C_p_u_E_v_a_l_u_a_t_o_r │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N │ │ │ │ │   │ │ │ │ │ namespace   _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d │ │ │ │ │   │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h │ │ │ │ │ + * _c_p_u_E_v_a_l_u_a_t_o_r_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00899.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,3 +1,3 @@ │ │ │ │ │ var a00899 = [ │ │ │ │ │ - ["BufferDescriptor", "a01141.html", "a01141"] │ │ │ │ │ + ["CpuEvaluator", "a01165.html", null] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00899_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -OpenSubdiv: opensubdiv/osd/bufferDescriptor.h Source File │ │ │ │ +OpenSubdiv: opensubdiv/osd/cpuEvaluator.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -92,15 +92,15 @@ │ │ │ │
No Matches
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
bufferDescriptor.h
│ │ │ │ +
cpuEvaluator.h
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1//
│ │ │ │
2// Copyright 2015 Pixar
│ │ │ │
3//
│ │ │ │
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
│ │ │ │
5// with the following modification; you may not use this file except in
│ │ │ │ @@ -119,112 +119,529 @@ │ │ │ │
18// Unless required by applicable law or agreed to in writing, software
│ │ │ │
19// distributed under the Apache License with the above modification is
│ │ │ │
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
│ │ │ │
21// KIND, either express or implied. See the Apache License for the specific
│ │ │ │
22// language governing permissions and limitations under the Apache License.
│ │ │ │
23//
│ │ │ │
24
│ │ │ │ -
25#ifndef OPENSUBDIV3_OSD_BUFFER_DESCRIPTOR_H
│ │ │ │ -
26#define OPENSUBDIV3_OSD_BUFFER_DESCRIPTOR_H
│ │ │ │ +
25#ifndef OPENSUBDIV3_OSD_CPU_EVALUATOR_H
│ │ │ │ +
26#define OPENSUBDIV3_OSD_CPU_EVALUATOR_H
│ │ │ │
27
│ │ │ │
28#include "../version.h"
│ │ │ │ -
29#include <string.h>
│ │ │ │ -
30
│ │ │ │ -
31namespace OpenSubdiv {
│ │ │ │ -
32namespace OPENSUBDIV_VERSION {
│ │ │ │ +
29#include "../osd/bufferDescriptor.h"
│ │ │ │ +
30#include "../osd/types.h"
│ │ │ │ +
31
│ │ │ │ +
32#include <cstddef>
│ │ │ │
33
│ │ │ │ -
│ │ │ │ -
34namespace Osd {
│ │ │ │ -
35
│ │ │ │ +
34namespace OpenSubdiv {
│ │ │ │ +
35namespace OPENSUBDIV_VERSION {
│ │ │ │ +
36
│ │ │ │ +
37namespace Osd {
│ │ │ │ +
38
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
40public:
│ │ │ │
46
│ │ │ │ -
47// example:
│ │ │ │ -
48// n
│ │ │ │ -
49// -----+----------------------------------------+-------------------------
│ │ │ │ -
50// | vertex 0 |
│ │ │ │ -
51// -----+----------------------------------------+-------------------------
│ │ │ │ -
52// | X Y Z R G B A Xu Yu Zu Xv Yv Zv |
│ │ │ │ -
53// -----+----------------------------------------+-------------------------
│ │ │ │ -
54// <------------- stride = 13 -------------->
│ │ │ │ -
55//
│ │ │ │ -
56// - XYZ (offset = n+0, length = 3, stride = 13)
│ │ │ │ -
57// - RGBA (offset = n+3, length = 4, stride = 13)
│ │ │ │ -
58// - uTangent (offset = n+7, length = 3, stride = 13)
│ │ │ │ -
59// - vTangent (offset = n+10, length = 3, stride = 13)
│ │ │ │ -
60//
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
62
│ │ │ │ - │ │ │ │ -
65
│ │ │ │ -
67 BufferDescriptor(int o, int l, int s) : offset(o), length(l), stride(s) { }
│ │ │ │ -
68
│ │ │ │ -
│ │ │ │ -
70 int GetLocalOffset() const {
│ │ │ │ -
71 return stride > 0 ? offset % stride : 0;
│ │ │ │ -
72 }
│ │ │ │ -
│ │ │ │ -
73
│ │ │ │ -
│ │ │ │ -
75 bool IsValid() const {
│ │ │ │ -
76 return ((length > 0) &&
│ │ │ │ - │ │ │ │ -
78 }
│ │ │ │ -
│ │ │ │ -
79
│ │ │ │ -
│ │ │ │ -
81 void Reset() {
│ │ │ │ -
82 offset = length = stride = 0;
│ │ │ │ -
83 }
│ │ │ │ -
│ │ │ │ +
71 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ +
│ │ │ │ +
72 static bool EvalStencils(
│ │ │ │ +
73 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
74 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
75 STENCIL_TABLE const *stencilTable,
│ │ │ │ +
76 const CpuEvaluator *instance = NULL,
│ │ │ │ +
77 void * deviceContext = NULL) {
│ │ │ │ +
78
│ │ │ │ +
79 (void)instance; // unused
│ │ │ │ +
80 (void)deviceContext; // unused
│ │ │ │ +
81
│ │ │ │ +
82 if (stencilTable->GetNumStencils() == 0)
│ │ │ │ +
83 return false;
│ │ │ │
84
│ │ │ │ -
│ │ │ │ -
86 bool operator == (BufferDescriptor const &other) const {
│ │ │ │ -
87 return (offset == other.offset &&
│ │ │ │ -
88 length == other.length &&
│ │ │ │ -
89 stride == other.stride);
│ │ │ │ -
90 }
│ │ │ │ -
│ │ │ │ -
91
│ │ │ │ -
│ │ │ │ -
93 bool operator != (BufferDescriptor const &other) const {
│ │ │ │ -
94 return !(this->operator==(other));
│ │ │ │ -
95 }
│ │ │ │ -
│ │ │ │ -
96
│ │ │ │ -
98 int offset;
│ │ │ │ - │ │ │ │ - │ │ │ │ -
103};
│ │ │ │ -
│ │ │ │ -
104
│ │ │ │ -
105} // end namespace Osd
│ │ │ │ -
│ │ │ │ -
106
│ │ │ │ -
107} // end namespace OPENSUBDIV_VERSION
│ │ │ │ -
108using namespace OPENSUBDIV_VERSION;
│ │ │ │ -
109
│ │ │ │ -
110} // end namespace OpenSubdiv
│ │ │ │ -
111
│ │ │ │ -
112#endif // OPENSUBDIV3_OSD_BUFFER_DESCRIPTOR_H
│ │ │ │ +
85 return EvalStencils(srcBuffer->BindCpuBuffer(), srcDesc,
│ │ │ │ +
86 dstBuffer->BindCpuBuffer(), dstDesc,
│ │ │ │ +
87 &stencilTable->GetSizes()[0],
│ │ │ │ +
88 &stencilTable->GetOffsets()[0],
│ │ │ │ +
89 &stencilTable->GetControlIndices()[0],
│ │ │ │ +
90 &stencilTable->GetWeights()[0],
│ │ │ │ +
91 /*start = */ 0,
│ │ │ │ +
92 /*end = */ stencilTable->GetNumStencils());
│ │ │ │ +
93 }
│ │ │ │ +
│ │ │ │ +
94
│ │ │ │ +
121 static bool EvalStencils(
│ │ │ │ +
122 const float *src, BufferDescriptor const &srcDesc,
│ │ │ │ +
123 float *dst, BufferDescriptor const &dstDesc,
│ │ │ │ +
124 const int * sizes,
│ │ │ │ +
125 const int * offsets,
│ │ │ │ +
126 const int * indices,
│ │ │ │ +
127 const float * weights,
│ │ │ │ +
128 int start, int end);
│ │ │ │ +
129
│ │ │ │ +
167 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ +
│ │ │ │ +
168 static bool EvalStencils(
│ │ │ │ +
169 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
170 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
171 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
172 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
173 STENCIL_TABLE const *stencilTable,
│ │ │ │ +
174 const CpuEvaluator *instance = NULL,
│ │ │ │ +
175 void * deviceContext = NULL) {
│ │ │ │ +
176
│ │ │ │ +
177 (void)instance; // unused
│ │ │ │ +
178 (void)deviceContext; // unused
│ │ │ │ +
179
│ │ │ │ +
180 return EvalStencils(srcBuffer->BindCpuBuffer(), srcDesc,
│ │ │ │ +
181 dstBuffer->BindCpuBuffer(), dstDesc,
│ │ │ │ +
182 duBuffer->BindCpuBuffer(), duDesc,
│ │ │ │ +
183 dvBuffer->BindCpuBuffer(), dvDesc,
│ │ │ │ +
184 &stencilTable->GetSizes()[0],
│ │ │ │ +
185 &stencilTable->GetOffsets()[0],
│ │ │ │ +
186 &stencilTable->GetControlIndices()[0],
│ │ │ │ +
187 &stencilTable->GetWeights()[0],
│ │ │ │ +
188 &stencilTable->GetDuWeights()[0],
│ │ │ │ +
189 &stencilTable->GetDvWeights()[0],
│ │ │ │ +
190 /*start = */ 0,
│ │ │ │ +
191 /*end = */ stencilTable->GetNumStencils());
│ │ │ │ +
192 }
│ │ │ │ +
│ │ │ │ +
193
│ │ │ │ +
234 static bool EvalStencils(
│ │ │ │ +
235 const float *src, BufferDescriptor const &srcDesc,
│ │ │ │ +
236 float *dst, BufferDescriptor const &dstDesc,
│ │ │ │ +
237 float *du, BufferDescriptor const &duDesc,
│ │ │ │ +
238 float *dv, BufferDescriptor const &dvDesc,
│ │ │ │ +
239 const int * sizes,
│ │ │ │ +
240 const int * offsets,
│ │ │ │ +
241 const int * indices,
│ │ │ │ +
242 const float * weights,
│ │ │ │ +
243 const float * duWeights,
│ │ │ │ +
244 const float * dvWeights,
│ │ │ │ +
245 int start, int end);
│ │ │ │ +
246
│ │ │ │ +
302 template <typename SRC_BUFFER, typename DST_BUFFER, typename STENCIL_TABLE>
│ │ │ │ +
│ │ │ │ +
303 static bool EvalStencils(
│ │ │ │ +
304 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
305 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
306 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
307 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
308 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
309 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
310 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
311 STENCIL_TABLE const *stencilTable,
│ │ │ │ +
312 const CpuEvaluator *instance = NULL,
│ │ │ │ +
313 void * deviceContext = NULL) {
│ │ │ │ +
314
│ │ │ │ +
315 (void)instance; // unused
│ │ │ │ +
316 (void)deviceContext; // unused
│ │ │ │ +
317
│ │ │ │ +
318 return EvalStencils(srcBuffer->BindCpuBuffer(), srcDesc,
│ │ │ │ +
319 dstBuffer->BindCpuBuffer(), dstDesc,
│ │ │ │ +
320 duBuffer->BindCpuBuffer(), duDesc,
│ │ │ │ +
321 dvBuffer->BindCpuBuffer(), dvDesc,
│ │ │ │ +
322 duuBuffer->BindCpuBuffer(), duuDesc,
│ │ │ │ +
323 duvBuffer->BindCpuBuffer(), duvDesc,
│ │ │ │ +
324 dvvBuffer->BindCpuBuffer(), dvvDesc,
│ │ │ │ +
325 &stencilTable->GetSizes()[0],
│ │ │ │ +
326 &stencilTable->GetOffsets()[0],
│ │ │ │ +
327 &stencilTable->GetControlIndices()[0],
│ │ │ │ +
328 &stencilTable->GetWeights()[0],
│ │ │ │ +
329 &stencilTable->GetDuWeights()[0],
│ │ │ │ +
330 &stencilTable->GetDvWeights()[0],
│ │ │ │ +
331 &stencilTable->GetDuuWeights()[0],
│ │ │ │ +
332 &stencilTable->GetDuvWeights()[0],
│ │ │ │ +
333 &stencilTable->GetDvvWeights()[0],
│ │ │ │ +
334 /*start = */ 0,
│ │ │ │ +
335 /*end = */ stencilTable->GetNumStencils());
│ │ │ │ +
336 }
│ │ │ │ +
│ │ │ │ +
337
│ │ │ │ +
399 static bool EvalStencils(
│ │ │ │ +
400 const float *src, BufferDescriptor const &srcDesc,
│ │ │ │ +
401 float *dst, BufferDescriptor const &dstDesc,
│ │ │ │ +
402 float *du, BufferDescriptor const &duDesc,
│ │ │ │ +
403 float *dv, BufferDescriptor const &dvDesc,
│ │ │ │ +
404 float *duu, BufferDescriptor const &duuDesc,
│ │ │ │ +
405 float *duv, BufferDescriptor const &duvDesc,
│ │ │ │ +
406 float *dvv, BufferDescriptor const &dvvDesc,
│ │ │ │ +
407 const int * sizes,
│ │ │ │ +
408 const int * offsets,
│ │ │ │ +
409 const int * indices,
│ │ │ │ +
410 const float * weights,
│ │ │ │ +
411 const float * duWeights,
│ │ │ │ +
412 const float * dvWeights,
│ │ │ │ +
413 const float * duuWeights,
│ │ │ │ +
414 const float * duvWeights,
│ │ │ │ +
415 const float * dvvWeights,
│ │ │ │ +
416 int start, int end);
│ │ │ │ +
417
│ │ │ │ +
423
│ │ │ │ +
452 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
453 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ +
454 static bool EvalPatches(
│ │ │ │ +
455 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
456 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
457 int numPatchCoords,
│ │ │ │ +
458 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
459 PATCH_TABLE *patchTable,
│ │ │ │ +
460 CpuEvaluator const *instance = NULL,
│ │ │ │ +
461 void * deviceContext = NULL) {
│ │ │ │ +
462
│ │ │ │ +
463 (void)instance; // unused
│ │ │ │ +
464 (void)deviceContext; // unused
│ │ │ │ +
465
│ │ │ │ +
466 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
│ │ │ │ +
467 dstBuffer->BindCpuBuffer(), dstDesc,
│ │ │ │ +
468 numPatchCoords,
│ │ │ │ +
469 (const PatchCoord*)patchCoords->BindCpuBuffer(),
│ │ │ │ +
470 patchTable->GetPatchArrayBuffer(),
│ │ │ │ +
471 patchTable->GetPatchIndexBuffer(),
│ │ │ │ +
472 patchTable->GetPatchParamBuffer());
│ │ │ │ +
473 }
│ │ │ │ +
│ │ │ │ +
474
│ │ │ │ +
515 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
516 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ +
517 static bool EvalPatches(
│ │ │ │ +
518 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
519 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
520 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
521 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
522 int numPatchCoords,
│ │ │ │ +
523 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
524 PATCH_TABLE *patchTable,
│ │ │ │ +
525 CpuEvaluator const *instance = NULL,
│ │ │ │ +
526 void * deviceContext = NULL) {
│ │ │ │ +
527
│ │ │ │ +
528 (void)instance; // unused
│ │ │ │ +
529 (void)deviceContext; // unused
│ │ │ │ +
530
│ │ │ │ +
531 // XXX: PatchCoords is somewhat abusing vertex primvar buffer interop.
│ │ │ │ +
532 // ideally all buffer classes should have templated by datatype
│ │ │ │ +
533 // so that downcast isn't needed there.
│ │ │ │ +
534 // (e.g. Osd::CpuBuffer<PatchCoord> )
│ │ │ │ +
535 //
│ │ │ │ +
536 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
│ │ │ │ +
537 dstBuffer->BindCpuBuffer(), dstDesc,
│ │ │ │ +
538 duBuffer->BindCpuBuffer(), duDesc,
│ │ │ │ +
539 dvBuffer->BindCpuBuffer(), dvDesc,
│ │ │ │ +
540 numPatchCoords,
│ │ │ │ +
541 (const PatchCoord*)patchCoords->BindCpuBuffer(),
│ │ │ │ +
542 patchTable->GetPatchArrayBuffer(),
│ │ │ │ +
543 patchTable->GetPatchIndexBuffer(),
│ │ │ │ +
544 patchTable->GetPatchParamBuffer());
│ │ │ │ +
545 }
│ │ │ │ +
│ │ │ │ +
546
│ │ │ │ +
605 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
606 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ +
607 static bool EvalPatches(
│ │ │ │ +
608 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
609 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
610 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
611 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
612 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
613 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
614 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
615 int numPatchCoords,
│ │ │ │ +
616 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
617 PATCH_TABLE *patchTable,
│ │ │ │ +
618 CpuEvaluator const *instance = NULL,
│ │ │ │ +
619 void * deviceContext = NULL) {
│ │ │ │ +
620
│ │ │ │ +
621 (void)instance; // unused
│ │ │ │ +
622 (void)deviceContext; // unused
│ │ │ │ +
623
│ │ │ │ +
624 // XXX: PatchCoords is somewhat abusing vertex primvar buffer interop.
│ │ │ │ +
625 // ideally all buffer classes should have templated by datatype
│ │ │ │ +
626 // so that downcast isn't needed there.
│ │ │ │ +
627 // (e.g. Osd::CpuBuffer<PatchCoord> )
│ │ │ │ +
628 //
│ │ │ │ +
629 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
│ │ │ │ +
630 dstBuffer->BindCpuBuffer(), dstDesc,
│ │ │ │ +
631 duBuffer->BindCpuBuffer(), duDesc,
│ │ │ │ +
632 dvBuffer->BindCpuBuffer(), dvDesc,
│ │ │ │ +
633 duuBuffer->BindCpuBuffer(), duuDesc,
│ │ │ │ +
634 duvBuffer->BindCpuBuffer(), duvDesc,
│ │ │ │ +
635 dvvBuffer->BindCpuBuffer(), dvvDesc,
│ │ │ │ +
636 numPatchCoords,
│ │ │ │ +
637 (const PatchCoord*)patchCoords->BindCpuBuffer(),
│ │ │ │ +
638 patchTable->GetPatchArrayBuffer(),
│ │ │ │ +
639 patchTable->GetPatchIndexBuffer(),
│ │ │ │ +
640 patchTable->GetPatchParamBuffer());
│ │ │ │ +
641 }
│ │ │ │ +
│ │ │ │ +
642
│ │ │ │ +
670 static bool EvalPatches(
│ │ │ │ +
671 const float *src, BufferDescriptor const &srcDesc,
│ │ │ │ +
672 float *dst, BufferDescriptor const &dstDesc,
│ │ │ │ +
673 int numPatchCoords,
│ │ │ │ +
674 const PatchCoord *patchCoords,
│ │ │ │ +
675 const PatchArray *patchArrays,
│ │ │ │ +
676 const int *patchIndexBuffer,
│ │ │ │ +
677 const PatchParam *patchParamBuffer);
│ │ │ │ +
678
│ │ │ │ +
716 static bool EvalPatches(
│ │ │ │ +
717 const float *src, BufferDescriptor const &srcDesc,
│ │ │ │ +
718 float *dst, BufferDescriptor const &dstDesc,
│ │ │ │ +
719 float *du, BufferDescriptor const &duDesc,
│ │ │ │ +
720 float *dv, BufferDescriptor const &dvDesc,
│ │ │ │ +
721 int numPatchCoords,
│ │ │ │ +
722 PatchCoord const *patchCoords,
│ │ │ │ +
723 PatchArray const *patchArrays,
│ │ │ │ +
724 const int *patchIndexBuffer,
│ │ │ │ +
725 PatchParam const *patchParamBuffer);
│ │ │ │ +
726
│ │ │ │ +
779 static bool EvalPatches(
│ │ │ │ +
780 const float *src, BufferDescriptor const &srcDesc,
│ │ │ │ +
781 float *dst, BufferDescriptor const &dstDesc,
│ │ │ │ +
782 float *du, BufferDescriptor const &duDesc,
│ │ │ │ +
783 float *dv, BufferDescriptor const &dvDesc,
│ │ │ │ +
784 float *duu, BufferDescriptor const &duuDesc,
│ │ │ │ +
785 float *duv, BufferDescriptor const &duvDesc,
│ │ │ │ +
786 float *dvv, BufferDescriptor const &dvvDesc,
│ │ │ │ +
787 int numPatchCoords,
│ │ │ │ +
788 PatchCoord const *patchCoords,
│ │ │ │ +
789 PatchArray const *patchArrays,
│ │ │ │ +
790 const int *patchIndexBuffer,
│ │ │ │ +
791 PatchParam const *patchParamBuffer);
│ │ │ │ +
792
│ │ │ │ +
821 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
822 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
824 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
825 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
826 int numPatchCoords,
│ │ │ │ +
827 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
828 PATCH_TABLE *patchTable,
│ │ │ │ +
829 CpuEvaluator const *instance = NULL,
│ │ │ │ +
830 void * deviceContext = NULL) {
│ │ │ │ +
831
│ │ │ │ +
832 (void)instance; // unused
│ │ │ │ +
833 (void)deviceContext; // unused
│ │ │ │ +
834
│ │ │ │ +
835 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
│ │ │ │ +
836 dstBuffer->BindCpuBuffer(), dstDesc,
│ │ │ │ +
837 numPatchCoords,
│ │ │ │ +
838 (const PatchCoord*)patchCoords->BindCpuBuffer(),
│ │ │ │ +
839 patchTable->GetVaryingPatchArrayBuffer(),
│ │ │ │ +
840 patchTable->GetVaryingPatchIndexBuffer(),
│ │ │ │ +
841 patchTable->GetPatchParamBuffer());
│ │ │ │ +
842 }
│ │ │ │ +
│ │ │ │ +
843
│ │ │ │ +
884 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
885 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
887 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
888 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
889 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
890 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
891 int numPatchCoords,
│ │ │ │ +
892 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
893 PATCH_TABLE *patchTable,
│ │ │ │ +
894 CpuEvaluator const *instance = NULL,
│ │ │ │ +
895 void * deviceContext = NULL) {
│ │ │ │ +
896
│ │ │ │ +
897 (void)instance; // unused
│ │ │ │ +
898 (void)deviceContext; // unused
│ │ │ │ +
899
│ │ │ │ +
900 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
│ │ │ │ +
901 dstBuffer->BindCpuBuffer(), dstDesc,
│ │ │ │ +
902 duBuffer->BindCpuBuffer(), duDesc,
│ │ │ │ +
903 dvBuffer->BindCpuBuffer(), dvDesc,
│ │ │ │ +
904 numPatchCoords,
│ │ │ │ +
905 (const PatchCoord*)patchCoords->BindCpuBuffer(),
│ │ │ │ +
906 patchTable->GetVaryingPatchArrayBuffer(),
│ │ │ │ +
907 patchTable->GetVaryingPatchIndexBuffer(),
│ │ │ │ +
908 patchTable->GetPatchParamBuffer());
│ │ │ │ +
909 }
│ │ │ │ +
│ │ │ │ +
910
│ │ │ │ +
969 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
970 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
972 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
973 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
974 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
975 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
976 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
977 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
978 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
979 int numPatchCoords,
│ │ │ │ +
980 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
981 PATCH_TABLE *patchTable,
│ │ │ │ +
982 CpuEvaluator const *instance = NULL,
│ │ │ │ +
983 void * deviceContext = NULL) {
│ │ │ │ +
984
│ │ │ │ +
985 (void)instance; // unused
│ │ │ │ +
986 (void)deviceContext; // unused
│ │ │ │ +
987
│ │ │ │ +
988 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
│ │ │ │ +
989 dstBuffer->BindCpuBuffer(), dstDesc,
│ │ │ │ +
990 duBuffer->BindCpuBuffer(), duDesc,
│ │ │ │ +
991 dvBuffer->BindCpuBuffer(), dvDesc,
│ │ │ │ +
992 duuBuffer->BindCpuBuffer(), duuDesc,
│ │ │ │ +
993 duvBuffer->BindCpuBuffer(), duvDesc,
│ │ │ │ +
994 dvvBuffer->BindCpuBuffer(), dvvDesc,
│ │ │ │ +
995 numPatchCoords,
│ │ │ │ +
996 (const PatchCoord*)patchCoords->BindCpuBuffer(),
│ │ │ │ +
997 patchTable->GetVaryingPatchArrayBuffer(),
│ │ │ │ +
998 patchTable->GetVaryingPatchIndexBuffer(),
│ │ │ │ +
999 patchTable->GetPatchParamBuffer());
│ │ │ │ +
1000 }
│ │ │ │ +
│ │ │ │ +
1001
│ │ │ │ +
1032 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1033 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1035 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1036 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1037 int numPatchCoords,
│ │ │ │ +
1038 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1039 PATCH_TABLE *patchTable,
│ │ │ │ +
1040 int fvarChannel,
│ │ │ │ +
1041 CpuEvaluator const *instance = NULL,
│ │ │ │ +
1042 void * deviceContext = NULL) {
│ │ │ │ +
1043
│ │ │ │ +
1044 (void)instance; // unused
│ │ │ │ +
1045 (void)deviceContext; // unused
│ │ │ │ +
1046
│ │ │ │ +
1047 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
│ │ │ │ +
1048 dstBuffer->BindCpuBuffer(), dstDesc,
│ │ │ │ +
1049 numPatchCoords,
│ │ │ │ +
1050 (const PatchCoord*)patchCoords->BindCpuBuffer(),
│ │ │ │ +
1051 patchTable->GetFVarPatchArrayBuffer(fvarChannel),
│ │ │ │ +
1052 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
│ │ │ │ +
1053 patchTable->GetFVarPatchParamBuffer(fvarChannel));
│ │ │ │ +
1054 }
│ │ │ │ +
│ │ │ │ +
1055
│ │ │ │ +
1098 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1099 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1101 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1102 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1103 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1104 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1105 int numPatchCoords,
│ │ │ │ +
1106 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1107 PATCH_TABLE *patchTable,
│ │ │ │ +
1108 int fvarChannel,
│ │ │ │ +
1109 CpuEvaluator const *instance = NULL,
│ │ │ │ +
1110 void * deviceContext = NULL) {
│ │ │ │ +
1111
│ │ │ │ +
1112 (void)instance; // unused
│ │ │ │ +
1113 (void)deviceContext; // unused
│ │ │ │ +
1114
│ │ │ │ +
1115 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
│ │ │ │ +
1116 dstBuffer->BindCpuBuffer(), dstDesc,
│ │ │ │ +
1117 duBuffer->BindCpuBuffer(), duDesc,
│ │ │ │ +
1118 dvBuffer->BindCpuBuffer(), dvDesc,
│ │ │ │ +
1119 numPatchCoords,
│ │ │ │ +
1120 (const PatchCoord*)patchCoords->BindCpuBuffer(),
│ │ │ │ +
1121 patchTable->GetFVarPatchArrayBuffer(fvarChannel),
│ │ │ │ +
1122 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
│ │ │ │ +
1123 patchTable->GetFVarPatchParamBuffer(fvarChannel));
│ │ │ │ +
1124 }
│ │ │ │ +
│ │ │ │ +
1125
│ │ │ │ +
1186 template <typename SRC_BUFFER, typename DST_BUFFER,
│ │ │ │ +
1187 typename PATCHCOORD_BUFFER, typename PATCH_TABLE>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
1189 SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc,
│ │ │ │ +
1190 DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc,
│ │ │ │ +
1191 DST_BUFFER *duBuffer, BufferDescriptor const &duDesc,
│ │ │ │ +
1192 DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc,
│ │ │ │ +
1193 DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc,
│ │ │ │ +
1194 DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc,
│ │ │ │ +
1195 DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc,
│ │ │ │ +
1196 int numPatchCoords,
│ │ │ │ +
1197 PATCHCOORD_BUFFER *patchCoords,
│ │ │ │ +
1198 PATCH_TABLE *patchTable,
│ │ │ │ +
1199 int fvarChannel,
│ │ │ │ +
1200 CpuEvaluator const *instance = NULL,
│ │ │ │ +
1201 void * deviceContext = NULL) {
│ │ │ │ +
1202
│ │ │ │ +
1203 (void)instance; // unused
│ │ │ │ +
1204 (void)deviceContext; // unused
│ │ │ │ +
1205
│ │ │ │ +
1206 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
│ │ │ │ +
1207 dstBuffer->BindCpuBuffer(), dstDesc,
│ │ │ │ +
1208 duBuffer->BindCpuBuffer(), duDesc,
│ │ │ │ +
1209 dvBuffer->BindCpuBuffer(), dvDesc,
│ │ │ │ +
1210 duuBuffer->BindCpuBuffer(), duuDesc,
│ │ │ │ +
1211 duvBuffer->BindCpuBuffer(), duvDesc,
│ │ │ │ +
1212 dvvBuffer->BindCpuBuffer(), dvvDesc,
│ │ │ │ +
1213 numPatchCoords,
│ │ │ │ +
1214 (const PatchCoord*)patchCoords->BindCpuBuffer(),
│ │ │ │ +
1215 patchTable->GetFVarPatchArrayBuffer(fvarChannel),
│ │ │ │ +
1216 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
│ │ │ │ +
1217 patchTable->GetFVarPatchParamBuffer(fvarChannel));
│ │ │ │ +
1218 }
│ │ │ │ +
│ │ │ │ +
1219
│ │ │ │ +
1225
│ │ │ │ +
│ │ │ │ +
1227 static void Synchronize(void * /*deviceContext = NULL*/) {
│ │ │ │ +
1228 // nothing.
│ │ │ │ +
1229 }
│ │ │ │ +
│ │ │ │ +
1230};
│ │ │ │ +
│ │ │ │ +
1231
│ │ │ │ +
1232
│ │ │ │ +
1233} // end namespace Osd
│ │ │ │ +
1234
│ │ │ │ +
1235} // end namespace OPENSUBDIV_VERSION
│ │ │ │ +
1236using namespace OPENSUBDIV_VERSION;
│ │ │ │ +
1237
│ │ │ │ +
1238} // end namespace OpenSubdiv
│ │ │ │ +
1239
│ │ │ │ +
1240
│ │ │ │ +
1241#endif // OPENSUBDIV3_OSD_CPU_EVALUATOR_H
│ │ │ │ │ │ │ │ -
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ - │ │ │ │ -
void Reset()
Resets the descriptor to default.
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
bool operator!=(BufferDescriptor const &other) const
True if the descriptors are not identical.
│ │ │ │ -
bool operator==(BufferDescriptor const &other) const
True if the descriptors are identical.
│ │ │ │ -
bool IsValid() const
True if the descriptor values are internally consistent.
│ │ │ │ -
int GetLocalOffset() const
Returns the relative offset within a stride.
│ │ │ │ - │ │ │ │ +
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
│ │ │ │ + │ │ │ │ +
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 ...
│ │ │ │ +
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 ...
│ │ │ │ +
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.
│ │ │ │ +
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 ...
│ │ │ │ +
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 ...
│ │ │ │ +
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.
│ │ │ │ +
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.
│ │ │ │ +
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...
│ │ │ │ +
static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, 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 ...
│ │ │ │ +
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, CpuEvaluator const *instance=NULL, void *deviceContext=NULL)
Generic limit eval function with derivatives. This function has a same signature as other device kern...
│ │ │ │ +
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...
│ │ │ │ +
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 CpuEvaluator *instance=NULL, void *deviceContext=NULL)
Generic static eval stencils function with derivatives. This function has a same signature as other d...
│ │ │ │ +
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...
│ │ │ │ +
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, CpuEvaluator const *instance=NULL, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
│ │ │ │ +
static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, 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 ...
│ │ │ │ +
static void Synchronize(void *)
synchronize all asynchronous computation invoked on this device.
│ │ │ │ +
static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, const CpuEvaluator *instance=NULL, void *deviceContext=NULL)
Generic static eval stencils function. This function has a same signature as other device kernels hav...
│ │ │ │ +
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, CpuEvaluator const *instance=NULL, void *deviceContext=NULL)
Generic limit eval function with derivatives. This function has a same signature as other device kern...
│ │ │ │ +
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 CpuEvaluator *instance=NULL, void *deviceContext=NULL)
Generic static eval stencils function with derivatives. This function has a same signature as other d...
│ │ │ │ +
Coordinates set on a patch table.
Definition types.h:42
│ │ │ │ + │ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,12 +1,12 @@ │ │ │ │ │ [Logo] OpenSubdiv │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ -bufferDescriptor.h │ │ │ │ │ +cpuEvaluator.h │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// │ │ │ │ │ 2// Copyright 2015 Pixar │ │ │ │ │ 3// │ │ │ │ │ 4// Licensed under the Apache License, Version 2.0 (the "Apache License") │ │ │ │ │ 5// with the following modification; you may not use this file except in │ │ │ │ │ 6// compliance with the Apache License and the following modification to it: │ │ │ │ │ @@ -24,125 +24,655 @@ │ │ │ │ │ 18// Unless required by applicable law or agreed to in writing, software │ │ │ │ │ 19// distributed under the Apache License with the above modification is │ │ │ │ │ 20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY │ │ │ │ │ 21// KIND, either express or implied. See the Apache License for the specific │ │ │ │ │ 22// language governing permissions and limitations under the Apache License. │ │ │ │ │ 23// │ │ │ │ │ 24 │ │ │ │ │ -25#ifndef OPENSUBDIV3_OSD_BUFFER_DESCRIPTOR_H │ │ │ │ │ -26#define OPENSUBDIV3_OSD_BUFFER_DESCRIPTOR_H │ │ │ │ │ +25#ifndef OPENSUBDIV3_OSD_CPU_EVALUATOR_H │ │ │ │ │ +26#define OPENSUBDIV3_OSD_CPU_EVALUATOR_H │ │ │ │ │ 27 │ │ │ │ │ 28#include "../version.h" │ │ │ │ │ -29#include │ │ │ │ │ -30 │ │ │ │ │ -31namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ -32namespace OPENSUBDIV_VERSION { │ │ │ │ │ +29#include "../osd/bufferDescriptor.h" │ │ │ │ │ +30#include "../osd/types.h" │ │ │ │ │ +31 │ │ │ │ │ +32#include │ │ │ │ │ 33 │ │ │ │ │ -_3_4namespace Osd { │ │ │ │ │ -35 │ │ │ │ │ +34namespace _O_p_e_n_S_u_b_d_i_v { │ │ │ │ │ +35namespace OPENSUBDIV_VERSION { │ │ │ │ │ +36 │ │ │ │ │ +37namespace Osd { │ │ │ │ │ +38 │ │ │ │ │ +_3_9class _C_p_u_E_v_a_l_u_a_t_o_r { │ │ │ │ │ +40public: │ │ │ │ │ 46 │ │ │ │ │ -47// example: │ │ │ │ │ -48// n │ │ │ │ │ -49// -----+----------------------------------------+------------------------- │ │ │ │ │ -50// | vertex 0 | │ │ │ │ │ -51// -----+----------------------------------------+------------------------- │ │ │ │ │ -52// | X Y Z R G B A Xu Yu Zu Xv Yv Zv | │ │ │ │ │ -53// -----+----------------------------------------+------------------------- │ │ │ │ │ -54// <------------- stride = 13 --------------> │ │ │ │ │ -55// │ │ │ │ │ -56// - XYZ (offset = n+0, length = 3, stride = 13) │ │ │ │ │ -57// - RGBA (offset = n+3, length = 4, stride = 13) │ │ │ │ │ -58// - uTangent (offset = n+7, length = 3, stride = 13) │ │ │ │ │ -59// - vTangent (offset = n+10, length = 3, stride = 13) │ │ │ │ │ -60// │ │ │ │ │ -_6_1struct _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r { │ │ │ │ │ -62 │ │ │ │ │ -_6_4 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r() : _o_f_f_s_e_t(0), _l_e_n_g_t_h(0), _s_t_r_i_d_e(0) { } │ │ │ │ │ -65 │ │ │ │ │ -_6_7 _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r(int o, int l, int s) : _o_f_f_s_e_t(o), _l_e_n_g_t_h(l), _s_t_r_i_d_e(s) { } │ │ │ │ │ -68 │ │ │ │ │ -_7_0 int _G_e_t_L_o_c_a_l_O_f_f_s_e_t() const { │ │ │ │ │ -71 return _s_t_r_i_d_e > 0 ? _o_f_f_s_e_t % _s_t_r_i_d_e : 0; │ │ │ │ │ -72 } │ │ │ │ │ -73 │ │ │ │ │ -_7_5 bool _I_s_V_a_l_i_d() const { │ │ │ │ │ -76 return ((_l_e_n_g_t_h > 0) && │ │ │ │ │ -77 (_l_e_n_g_t_h <= _s_t_r_i_d_e - _G_e_t_L_o_c_a_l_O_f_f_s_e_t())); │ │ │ │ │ -78 } │ │ │ │ │ -79 │ │ │ │ │ -_8_1 void _R_e_s_e_t() { │ │ │ │ │ -82 _o_f_f_s_e_t = _l_e_n_g_t_h = _s_t_r_i_d_e = 0; │ │ │ │ │ -83 } │ │ │ │ │ +71 template │ │ │ │ │ +_7_2 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ +73 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +74 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +75 STENCIL_TABLE const *stencilTable, │ │ │ │ │ +76 const _C_p_u_E_v_a_l_u_a_t_o_r *instance = NULL, │ │ │ │ │ +77 void * deviceContext = NULL) { │ │ │ │ │ +78 │ │ │ │ │ +79 (void)instance; // unused │ │ │ │ │ +80 (void)deviceContext; // unused │ │ │ │ │ +81 │ │ │ │ │ +82 if (stencilTable->GetNumStencils() == 0) │ │ │ │ │ +83 return false; │ │ │ │ │ 84 │ │ │ │ │ -_8_6 bool _o_p_e_r_a_t_o_r_ _=_=_ (_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &other) const { │ │ │ │ │ -87 return (_o_f_f_s_e_t == other._o_f_f_s_e_t && │ │ │ │ │ -88 _l_e_n_g_t_h == other._l_e_n_g_t_h && │ │ │ │ │ -89 _s_t_r_i_d_e == other._s_t_r_i_d_e); │ │ │ │ │ -90 } │ │ │ │ │ -91 │ │ │ │ │ -_9_3 bool _o_p_e_r_a_t_o_r_ _!_=_ (_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &other) const { │ │ │ │ │ -94 return !(this->_o_p_e_r_a_t_o_r_=_=(other)); │ │ │ │ │ -95 } │ │ │ │ │ -96 │ │ │ │ │ -_9_8 int _o_f_f_s_e_t; │ │ │ │ │ -_1_0_0 int _l_e_n_g_t_h; │ │ │ │ │ -_1_0_2 int _s_t_r_i_d_e; │ │ │ │ │ -103}; │ │ │ │ │ -104 │ │ │ │ │ -105} // end namespace Osd │ │ │ │ │ -106 │ │ │ │ │ -107} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ -108using namespace OPENSUBDIV_VERSION; │ │ │ │ │ -109 │ │ │ │ │ -110} // end namespace OpenSubdiv │ │ │ │ │ -111 │ │ │ │ │ -112#endif // OPENSUBDIV3_OSD_BUFFER_DESCRIPTOR_H │ │ │ │ │ +85 return _E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer->BindCpuBuffer(), srcDesc, │ │ │ │ │ +86 dstBuffer->BindCpuBuffer(), dstDesc, │ │ │ │ │ +87 &stencilTable->GetSizes()[0], │ │ │ │ │ +88 &stencilTable->GetOffsets()[0], │ │ │ │ │ +89 &stencilTable->GetControlIndices()[0], │ │ │ │ │ +90 &stencilTable->GetWeights()[0], │ │ │ │ │ +91 /*start = */ 0, │ │ │ │ │ +92 /*end = */ stencilTable->GetNumStencils()); │ │ │ │ │ +93 } │ │ │ │ │ +94 │ │ │ │ │ +_1_2_1 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ +122 const float *src, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +123 float *dst, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +124 const int * sizes, │ │ │ │ │ +125 const int * offsets, │ │ │ │ │ +126 const int * indices, │ │ │ │ │ +127 const float * weights, │ │ │ │ │ +128 int start, int end); │ │ │ │ │ +129 │ │ │ │ │ +167 template │ │ │ │ │ +_1_6_8 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ +169 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +170 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +171 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +172 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +173 STENCIL_TABLE const *stencilTable, │ │ │ │ │ +174 const _C_p_u_E_v_a_l_u_a_t_o_r *instance = NULL, │ │ │ │ │ +175 void * deviceContext = NULL) { │ │ │ │ │ +176 │ │ │ │ │ +177 (void)instance; // unused │ │ │ │ │ +178 (void)deviceContext; // unused │ │ │ │ │ +179 │ │ │ │ │ +180 return _E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer->BindCpuBuffer(), srcDesc, │ │ │ │ │ +181 dstBuffer->BindCpuBuffer(), dstDesc, │ │ │ │ │ +182 duBuffer->BindCpuBuffer(), duDesc, │ │ │ │ │ +183 dvBuffer->BindCpuBuffer(), dvDesc, │ │ │ │ │ +184 &stencilTable->GetSizes()[0], │ │ │ │ │ +185 &stencilTable->GetOffsets()[0], │ │ │ │ │ +186 &stencilTable->GetControlIndices()[0], │ │ │ │ │ +187 &stencilTable->GetWeights()[0], │ │ │ │ │ +188 &stencilTable->GetDuWeights()[0], │ │ │ │ │ +189 &stencilTable->GetDvWeights()[0], │ │ │ │ │ +190 /*start = */ 0, │ │ │ │ │ +191 /*end = */ stencilTable->GetNumStencils()); │ │ │ │ │ +192 } │ │ │ │ │ +193 │ │ │ │ │ +_2_3_4 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ +235 const float *src, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +236 float *dst, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +237 float *du, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +238 float *dv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +239 const int * sizes, │ │ │ │ │ +240 const int * offsets, │ │ │ │ │ +241 const int * indices, │ │ │ │ │ +242 const float * weights, │ │ │ │ │ +243 const float * duWeights, │ │ │ │ │ +244 const float * dvWeights, │ │ │ │ │ +245 int start, int end); │ │ │ │ │ +246 │ │ │ │ │ +302 template │ │ │ │ │ +_3_0_3 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ +304 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +305 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +306 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +307 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +308 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +309 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +310 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +311 STENCIL_TABLE const *stencilTable, │ │ │ │ │ +312 const _C_p_u_E_v_a_l_u_a_t_o_r *instance = NULL, │ │ │ │ │ +313 void * deviceContext = NULL) { │ │ │ │ │ +314 │ │ │ │ │ +315 (void)instance; // unused │ │ │ │ │ +316 (void)deviceContext; // unused │ │ │ │ │ +317 │ │ │ │ │ +318 return _E_v_a_l_S_t_e_n_c_i_l_s(srcBuffer->BindCpuBuffer(), srcDesc, │ │ │ │ │ +319 dstBuffer->BindCpuBuffer(), dstDesc, │ │ │ │ │ +320 duBuffer->BindCpuBuffer(), duDesc, │ │ │ │ │ +321 dvBuffer->BindCpuBuffer(), dvDesc, │ │ │ │ │ +322 duuBuffer->BindCpuBuffer(), duuDesc, │ │ │ │ │ +323 duvBuffer->BindCpuBuffer(), duvDesc, │ │ │ │ │ +324 dvvBuffer->BindCpuBuffer(), dvvDesc, │ │ │ │ │ +325 &stencilTable->GetSizes()[0], │ │ │ │ │ +326 &stencilTable->GetOffsets()[0], │ │ │ │ │ +327 &stencilTable->GetControlIndices()[0], │ │ │ │ │ +328 &stencilTable->GetWeights()[0], │ │ │ │ │ +329 &stencilTable->GetDuWeights()[0], │ │ │ │ │ +330 &stencilTable->GetDvWeights()[0], │ │ │ │ │ +331 &stencilTable->GetDuuWeights()[0], │ │ │ │ │ +332 &stencilTable->GetDuvWeights()[0], │ │ │ │ │ +333 &stencilTable->GetDvvWeights()[0], │ │ │ │ │ +334 /*start = */ 0, │ │ │ │ │ +335 /*end = */ stencilTable->GetNumStencils()); │ │ │ │ │ +336 } │ │ │ │ │ +337 │ │ │ │ │ +_3_9_9 static bool _E_v_a_l_S_t_e_n_c_i_l_s( │ │ │ │ │ +400 const float *src, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +401 float *dst, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +402 float *du, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +403 float *dv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +404 float *duu, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +405 float *duv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +406 float *dvv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +407 const int * sizes, │ │ │ │ │ +408 const int * offsets, │ │ │ │ │ +409 const int * indices, │ │ │ │ │ +410 const float * weights, │ │ │ │ │ +411 const float * duWeights, │ │ │ │ │ +412 const float * dvWeights, │ │ │ │ │ +413 const float * duuWeights, │ │ │ │ │ +414 const float * duvWeights, │ │ │ │ │ +415 const float * dvvWeights, │ │ │ │ │ +416 int start, int end); │ │ │ │ │ +417 │ │ │ │ │ +423 │ │ │ │ │ +452 template │ │ │ │ │ +_4_5_4 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ +455 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +456 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +457 int numPatchCoords, │ │ │ │ │ +458 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +459 PATCH_TABLE *patchTable, │ │ │ │ │ +460 _C_p_u_E_v_a_l_u_a_t_o_r const *instance = NULL, │ │ │ │ │ +461 void * deviceContext = NULL) { │ │ │ │ │ +462 │ │ │ │ │ +463 (void)instance; // unused │ │ │ │ │ +464 (void)deviceContext; // unused │ │ │ │ │ +465 │ │ │ │ │ +466 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCpuBuffer(), srcDesc, │ │ │ │ │ +467 dstBuffer->BindCpuBuffer(), dstDesc, │ │ │ │ │ +468 numPatchCoords, │ │ │ │ │ +469 (const _P_a_t_c_h_C_o_o_r_d*)patchCoords->BindCpuBuffer(), │ │ │ │ │ +470 patchTable->GetPatchArrayBuffer(), │ │ │ │ │ +471 patchTable->GetPatchIndexBuffer(), │ │ │ │ │ +472 patchTable->GetPatchParamBuffer()); │ │ │ │ │ +473 } │ │ │ │ │ +474 │ │ │ │ │ +515 template │ │ │ │ │ +_5_1_7 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ +518 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +519 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +520 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +521 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +522 int numPatchCoords, │ │ │ │ │ +523 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +524 PATCH_TABLE *patchTable, │ │ │ │ │ +525 _C_p_u_E_v_a_l_u_a_t_o_r const *instance = NULL, │ │ │ │ │ +526 void * deviceContext = NULL) { │ │ │ │ │ +527 │ │ │ │ │ +528 (void)instance; // unused │ │ │ │ │ +529 (void)deviceContext; // unused │ │ │ │ │ +530 │ │ │ │ │ +531 // XXX: PatchCoords is somewhat abusing vertex primvar buffer interop. │ │ │ │ │ +532 // ideally all buffer classes should have templated by datatype │ │ │ │ │ +533 // so that downcast isn't needed there. │ │ │ │ │ +534 // (e.g. Osd::CpuBuffer ) │ │ │ │ │ +535 // │ │ │ │ │ +536 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCpuBuffer(), srcDesc, │ │ │ │ │ +537 dstBuffer->BindCpuBuffer(), dstDesc, │ │ │ │ │ +538 duBuffer->BindCpuBuffer(), duDesc, │ │ │ │ │ +539 dvBuffer->BindCpuBuffer(), dvDesc, │ │ │ │ │ +540 numPatchCoords, │ │ │ │ │ +541 (const _P_a_t_c_h_C_o_o_r_d*)patchCoords->BindCpuBuffer(), │ │ │ │ │ +542 patchTable->GetPatchArrayBuffer(), │ │ │ │ │ +543 patchTable->GetPatchIndexBuffer(), │ │ │ │ │ +544 patchTable->GetPatchParamBuffer()); │ │ │ │ │ +545 } │ │ │ │ │ +546 │ │ │ │ │ +605 template │ │ │ │ │ +_6_0_7 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ +608 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +609 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +610 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +611 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +612 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +613 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +614 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +615 int numPatchCoords, │ │ │ │ │ +616 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +617 PATCH_TABLE *patchTable, │ │ │ │ │ +618 _C_p_u_E_v_a_l_u_a_t_o_r const *instance = NULL, │ │ │ │ │ +619 void * deviceContext = NULL) { │ │ │ │ │ +620 │ │ │ │ │ +621 (void)instance; // unused │ │ │ │ │ +622 (void)deviceContext; // unused │ │ │ │ │ +623 │ │ │ │ │ +624 // XXX: PatchCoords is somewhat abusing vertex primvar buffer interop. │ │ │ │ │ +625 // ideally all buffer classes should have templated by datatype │ │ │ │ │ +626 // so that downcast isn't needed there. │ │ │ │ │ +627 // (e.g. Osd::CpuBuffer ) │ │ │ │ │ +628 // │ │ │ │ │ +629 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCpuBuffer(), srcDesc, │ │ │ │ │ +630 dstBuffer->BindCpuBuffer(), dstDesc, │ │ │ │ │ +631 duBuffer->BindCpuBuffer(), duDesc, │ │ │ │ │ +632 dvBuffer->BindCpuBuffer(), dvDesc, │ │ │ │ │ +633 duuBuffer->BindCpuBuffer(), duuDesc, │ │ │ │ │ +634 duvBuffer->BindCpuBuffer(), duvDesc, │ │ │ │ │ +635 dvvBuffer->BindCpuBuffer(), dvvDesc, │ │ │ │ │ +636 numPatchCoords, │ │ │ │ │ +637 (const _P_a_t_c_h_C_o_o_r_d*)patchCoords->BindCpuBuffer(), │ │ │ │ │ +638 patchTable->GetPatchArrayBuffer(), │ │ │ │ │ +639 patchTable->GetPatchIndexBuffer(), │ │ │ │ │ +640 patchTable->GetPatchParamBuffer()); │ │ │ │ │ +641 } │ │ │ │ │ +642 │ │ │ │ │ +_6_7_0 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ +671 const float *src, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +672 float *dst, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +673 int numPatchCoords, │ │ │ │ │ +674 const _P_a_t_c_h_C_o_o_r_d *patchCoords, │ │ │ │ │ +675 const _P_a_t_c_h_A_r_r_a_y *patchArrays, │ │ │ │ │ +676 const int *patchIndexBuffer, │ │ │ │ │ +677 const _P_a_t_c_h_P_a_r_a_m *patchParamBuffer); │ │ │ │ │ +678 │ │ │ │ │ +_7_1_6 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ +717 const float *src, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +718 float *dst, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +719 float *du, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +720 float *dv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +721 int numPatchCoords, │ │ │ │ │ +722 _P_a_t_c_h_C_o_o_r_d const *patchCoords, │ │ │ │ │ +723 _P_a_t_c_h_A_r_r_a_y const *patchArrays, │ │ │ │ │ +724 const int *patchIndexBuffer, │ │ │ │ │ +725 _P_a_t_c_h_P_a_r_a_m const *patchParamBuffer); │ │ │ │ │ +726 │ │ │ │ │ +_7_7_9 static bool _E_v_a_l_P_a_t_c_h_e_s( │ │ │ │ │ +780 const float *src, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +781 float *dst, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +782 float *du, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +783 float *dv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +784 float *duu, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +785 float *duv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +786 float *dvv, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +787 int numPatchCoords, │ │ │ │ │ +788 _P_a_t_c_h_C_o_o_r_d const *patchCoords, │ │ │ │ │ +789 _P_a_t_c_h_A_r_r_a_y const *patchArrays, │ │ │ │ │ +790 const int *patchIndexBuffer, │ │ │ │ │ +791 _P_a_t_c_h_P_a_r_a_m const *patchParamBuffer); │ │ │ │ │ +792 │ │ │ │ │ +821 template │ │ │ │ │ +_8_2_3 static bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +824 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +825 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +826 int numPatchCoords, │ │ │ │ │ +827 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +828 PATCH_TABLE *patchTable, │ │ │ │ │ +829 _C_p_u_E_v_a_l_u_a_t_o_r const *instance = NULL, │ │ │ │ │ +830 void * deviceContext = NULL) { │ │ │ │ │ +831 │ │ │ │ │ +832 (void)instance; // unused │ │ │ │ │ +833 (void)deviceContext; // unused │ │ │ │ │ +834 │ │ │ │ │ +835 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCpuBuffer(), srcDesc, │ │ │ │ │ +836 dstBuffer->BindCpuBuffer(), dstDesc, │ │ │ │ │ +837 numPatchCoords, │ │ │ │ │ +838 (const _P_a_t_c_h_C_o_o_r_d*)patchCoords->BindCpuBuffer(), │ │ │ │ │ +839 patchTable->GetVaryingPatchArrayBuffer(), │ │ │ │ │ +840 patchTable->GetVaryingPatchIndexBuffer(), │ │ │ │ │ +841 patchTable->GetPatchParamBuffer()); │ │ │ │ │ +842 } │ │ │ │ │ +843 │ │ │ │ │ +884 template │ │ │ │ │ +_8_8_6 static bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +887 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +888 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +889 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +890 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +891 int numPatchCoords, │ │ │ │ │ +892 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +893 PATCH_TABLE *patchTable, │ │ │ │ │ +894 _C_p_u_E_v_a_l_u_a_t_o_r const *instance = NULL, │ │ │ │ │ +895 void * deviceContext = NULL) { │ │ │ │ │ +896 │ │ │ │ │ +897 (void)instance; // unused │ │ │ │ │ +898 (void)deviceContext; // unused │ │ │ │ │ +899 │ │ │ │ │ +900 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCpuBuffer(), srcDesc, │ │ │ │ │ +901 dstBuffer->BindCpuBuffer(), dstDesc, │ │ │ │ │ +902 duBuffer->BindCpuBuffer(), duDesc, │ │ │ │ │ +903 dvBuffer->BindCpuBuffer(), dvDesc, │ │ │ │ │ +904 numPatchCoords, │ │ │ │ │ +905 (const _P_a_t_c_h_C_o_o_r_d*)patchCoords->BindCpuBuffer(), │ │ │ │ │ +906 patchTable->GetVaryingPatchArrayBuffer(), │ │ │ │ │ +907 patchTable->GetVaryingPatchIndexBuffer(), │ │ │ │ │ +908 patchTable->GetPatchParamBuffer()); │ │ │ │ │ +909 } │ │ │ │ │ +910 │ │ │ │ │ +969 template │ │ │ │ │ +_9_7_1 static bool _E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g( │ │ │ │ │ +972 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +973 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +974 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +975 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +976 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +977 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +978 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +979 int numPatchCoords, │ │ │ │ │ +980 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +981 PATCH_TABLE *patchTable, │ │ │ │ │ +982 _C_p_u_E_v_a_l_u_a_t_o_r const *instance = NULL, │ │ │ │ │ +983 void * deviceContext = NULL) { │ │ │ │ │ +984 │ │ │ │ │ +985 (void)instance; // unused │ │ │ │ │ +986 (void)deviceContext; // unused │ │ │ │ │ +987 │ │ │ │ │ +988 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCpuBuffer(), srcDesc, │ │ │ │ │ +989 dstBuffer->BindCpuBuffer(), dstDesc, │ │ │ │ │ +990 duBuffer->BindCpuBuffer(), duDesc, │ │ │ │ │ +991 dvBuffer->BindCpuBuffer(), dvDesc, │ │ │ │ │ +992 duuBuffer->BindCpuBuffer(), duuDesc, │ │ │ │ │ +993 duvBuffer->BindCpuBuffer(), duvDesc, │ │ │ │ │ +994 dvvBuffer->BindCpuBuffer(), dvvDesc, │ │ │ │ │ +995 numPatchCoords, │ │ │ │ │ +996 (const _P_a_t_c_h_C_o_o_r_d*)patchCoords->BindCpuBuffer(), │ │ │ │ │ +997 patchTable->GetVaryingPatchArrayBuffer(), │ │ │ │ │ +998 patchTable->GetVaryingPatchIndexBuffer(), │ │ │ │ │ +999 patchTable->GetPatchParamBuffer()); │ │ │ │ │ +1000 } │ │ │ │ │ +1001 │ │ │ │ │ +1032 template │ │ │ │ │ +_1_0_3_4 static bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1035 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1036 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1037 int numPatchCoords, │ │ │ │ │ +1038 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1039 PATCH_TABLE *patchTable, │ │ │ │ │ +1040 int fvarChannel, │ │ │ │ │ +1041 _C_p_u_E_v_a_l_u_a_t_o_r const *instance = NULL, │ │ │ │ │ +1042 void * deviceContext = NULL) { │ │ │ │ │ +1043 │ │ │ │ │ +1044 (void)instance; // unused │ │ │ │ │ +1045 (void)deviceContext; // unused │ │ │ │ │ +1046 │ │ │ │ │ +1047 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCpuBuffer(), srcDesc, │ │ │ │ │ +1048 dstBuffer->BindCpuBuffer(), dstDesc, │ │ │ │ │ +1049 numPatchCoords, │ │ │ │ │ +1050 (const _P_a_t_c_h_C_o_o_r_d*)patchCoords->BindCpuBuffer(), │ │ │ │ │ +1051 patchTable->GetFVarPatchArrayBuffer(fvarChannel), │ │ │ │ │ +1052 patchTable->GetFVarPatchIndexBuffer(fvarChannel), │ │ │ │ │ +1053 patchTable->GetFVarPatchParamBuffer(fvarChannel)); │ │ │ │ │ +1054 } │ │ │ │ │ +1055 │ │ │ │ │ +1098 template │ │ │ │ │ +_1_1_0_0 static bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1101 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1102 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1103 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1104 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1105 int numPatchCoords, │ │ │ │ │ +1106 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1107 PATCH_TABLE *patchTable, │ │ │ │ │ +1108 int fvarChannel, │ │ │ │ │ +1109 _C_p_u_E_v_a_l_u_a_t_o_r const *instance = NULL, │ │ │ │ │ +1110 void * deviceContext = NULL) { │ │ │ │ │ +1111 │ │ │ │ │ +1112 (void)instance; // unused │ │ │ │ │ +1113 (void)deviceContext; // unused │ │ │ │ │ +1114 │ │ │ │ │ +1115 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCpuBuffer(), srcDesc, │ │ │ │ │ +1116 dstBuffer->BindCpuBuffer(), dstDesc, │ │ │ │ │ +1117 duBuffer->BindCpuBuffer(), duDesc, │ │ │ │ │ +1118 dvBuffer->BindCpuBuffer(), dvDesc, │ │ │ │ │ +1119 numPatchCoords, │ │ │ │ │ +1120 (const _P_a_t_c_h_C_o_o_r_d*)patchCoords->BindCpuBuffer(), │ │ │ │ │ +1121 patchTable->GetFVarPatchArrayBuffer(fvarChannel), │ │ │ │ │ +1122 patchTable->GetFVarPatchIndexBuffer(fvarChannel), │ │ │ │ │ +1123 patchTable->GetFVarPatchParamBuffer(fvarChannel)); │ │ │ │ │ +1124 } │ │ │ │ │ +1125 │ │ │ │ │ +1186 template │ │ │ │ │ +_1_1_8_8 static bool _E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g( │ │ │ │ │ +1189 SRC_BUFFER *srcBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &srcDesc, │ │ │ │ │ +1190 DST_BUFFER *dstBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dstDesc, │ │ │ │ │ +1191 DST_BUFFER *duBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duDesc, │ │ │ │ │ +1192 DST_BUFFER *dvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvDesc, │ │ │ │ │ +1193 DST_BUFFER *duuBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duuDesc, │ │ │ │ │ +1194 DST_BUFFER *duvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &duvDesc, │ │ │ │ │ +1195 DST_BUFFER *dvvBuffer, _B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r const &dvvDesc, │ │ │ │ │ +1196 int numPatchCoords, │ │ │ │ │ +1197 PATCHCOORD_BUFFER *patchCoords, │ │ │ │ │ +1198 PATCH_TABLE *patchTable, │ │ │ │ │ +1199 int fvarChannel, │ │ │ │ │ +1200 _C_p_u_E_v_a_l_u_a_t_o_r const *instance = NULL, │ │ │ │ │ +1201 void * deviceContext = NULL) { │ │ │ │ │ +1202 │ │ │ │ │ +1203 (void)instance; // unused │ │ │ │ │ +1204 (void)deviceContext; // unused │ │ │ │ │ +1205 │ │ │ │ │ +1206 return _E_v_a_l_P_a_t_c_h_e_s(srcBuffer->BindCpuBuffer(), srcDesc, │ │ │ │ │ +1207 dstBuffer->BindCpuBuffer(), dstDesc, │ │ │ │ │ +1208 duBuffer->BindCpuBuffer(), duDesc, │ │ │ │ │ +1209 dvBuffer->BindCpuBuffer(), dvDesc, │ │ │ │ │ +1210 duuBuffer->BindCpuBuffer(), duuDesc, │ │ │ │ │ +1211 duvBuffer->BindCpuBuffer(), duvDesc, │ │ │ │ │ +1212 dvvBuffer->BindCpuBuffer(), dvvDesc, │ │ │ │ │ +1213 numPatchCoords, │ │ │ │ │ +1214 (const _P_a_t_c_h_C_o_o_r_d*)patchCoords->BindCpuBuffer(), │ │ │ │ │ +1215 patchTable->GetFVarPatchArrayBuffer(fvarChannel), │ │ │ │ │ +1216 patchTable->GetFVarPatchIndexBuffer(fvarChannel), │ │ │ │ │ +1217 patchTable->GetFVarPatchParamBuffer(fvarChannel)); │ │ │ │ │ +1218 } │ │ │ │ │ +1219 │ │ │ │ │ +1225 │ │ │ │ │ +_1_2_2_7 static void _S_y_n_c_h_r_o_n_i_z_e(void * /*deviceContext = NULL*/) { │ │ │ │ │ +1228 // nothing. │ │ │ │ │ +1229 } │ │ │ │ │ +1230}; │ │ │ │ │ +1231 │ │ │ │ │ +1232 │ │ │ │ │ +1233} // end namespace Osd │ │ │ │ │ +1234 │ │ │ │ │ +1235} // end namespace OPENSUBDIV_VERSION │ │ │ │ │ +1236using namespace OPENSUBDIV_VERSION; │ │ │ │ │ +1237 │ │ │ │ │ +1238} // end namespace OpenSubdiv │ │ │ │ │ +1239 │ │ │ │ │ +1240 │ │ │ │ │ +1241#endif // OPENSUBDIV3_OSD_CPU_EVALUATOR_H │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v │ │ │ │ │ DDeeffiinniittiioonn _l_i_m_i_t_s_._h_:_3_2 │ │ │ │ │ _O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ BufferDescriptor is a struct which describes buffer elements in interleaved │ │ │ │ │ data buffers.... │ │ │ │ │ DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_6_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_:_:_s_t_r_i_d_e │ │ │ │ │ -int stride │ │ │ │ │ -stride to the next element │ │ │ │ │ -DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_1_0_2 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_:_:_R_e_s_e_t │ │ │ │ │ -void Reset() │ │ │ │ │ -Resets the descriptor to default. │ │ │ │ │ -DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_8_1 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ -BufferDescriptor() │ │ │ │ │ -Default Constructor. │ │ │ │ │ -DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_6_4 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r │ │ │ │ │ -BufferDescriptor(int o, int l, int s) │ │ │ │ │ -Constructor. │ │ │ │ │ -DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_6_7 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_:_:_l_e_n_g_t_h │ │ │ │ │ -int length │ │ │ │ │ -number or length of the data │ │ │ │ │ -DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_1_0_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_:_:_o_p_e_r_a_t_o_r_!_= │ │ │ │ │ -bool operator!=(BufferDescriptor const &other) const │ │ │ │ │ -True if the descriptors are not identical. │ │ │ │ │ -DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_9_3 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_:_:_o_p_e_r_a_t_o_r_=_= │ │ │ │ │ -bool operator==(BufferDescriptor const &other) const │ │ │ │ │ -True if the descriptors are identical. │ │ │ │ │ -DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_8_6 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_:_:_I_s_V_a_l_i_d │ │ │ │ │ -bool IsValid() const │ │ │ │ │ -True if the descriptor values are internally consistent. │ │ │ │ │ -DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_7_5 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_:_:_G_e_t_L_o_c_a_l_O_f_f_s_e_t │ │ │ │ │ -int GetLocalOffset() const │ │ │ │ │ -Returns the relative offset within a stride. │ │ │ │ │ -DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_7_0 │ │ │ │ │ -_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_B_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_:_:_o_f_f_s_e_t │ │ │ │ │ -int offset │ │ │ │ │ -offset to desired element data │ │ │ │ │ -DDeeffiinniittiioonn _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h_:_9_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_3_9 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ +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 ... │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_1_0_3_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ +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 ... │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_1_1_0_0 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +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. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_F_a_c_e_V_a_r_y_i_n_g │ │ │ │ │ +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 ... │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_1_1_8_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ +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 ... │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_9_7_1 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +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. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +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. │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +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... │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, │ │ │ │ │ +DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, 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 ... │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_4_5_4 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +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, CpuEvaluator const *instance=NULL, void *deviceContext=NULL) │ │ │ │ │ +Generic limit eval function with derivatives. This function has a same │ │ │ │ │ +signature as other device kern... │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_5_1_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +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... │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +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 CpuEvaluator *instance=NULL, void *deviceContext=NULL) │ │ │ │ │ +Generic static eval stencils function with derivatives. This function has a │ │ │ │ │ +same signature as other d... │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_3_0_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +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... │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ +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, CpuEvaluator const *instance=NULL, void │ │ │ │ │ +*deviceContext=NULL) │ │ │ │ │ +Generic limit eval function. This function has a same signature as other device │ │ │ │ │ +kernels have so that ... │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_8_8_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s_V_a_r_y_i_n_g │ │ │ │ │ +static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const │ │ │ │ │ +&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, 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 ... │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_8_2_3 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_S_y_n_c_h_r_o_n_i_z_e │ │ │ │ │ +static void Synchronize(void *) │ │ │ │ │ +synchronize all asynchronous computation invoked on this device. │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_1_2_2_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const │ │ │ │ │ +&srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE │ │ │ │ │ +const *stencilTable, const CpuEvaluator *instance=NULL, void │ │ │ │ │ +*deviceContext=NULL) │ │ │ │ │ +Generic static eval stencils function. This function has a same signature as │ │ │ │ │ +other device kernels hav... │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_7_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_P_a_t_c_h_e_s │ │ │ │ │ +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, CpuEvaluator const *instance=NULL, void │ │ │ │ │ +*deviceContext=NULL) │ │ │ │ │ +Generic limit eval function with derivatives. This function has a same │ │ │ │ │ +signature as other device kern... │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_6_0_7 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_C_p_u_E_v_a_l_u_a_t_o_r_:_:_E_v_a_l_S_t_e_n_c_i_l_s │ │ │ │ │ +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 │ │ │ │ │ +CpuEvaluator *instance=NULL, void *deviceContext=NULL) │ │ │ │ │ +Generic static eval stencils function with derivatives. This function has a │ │ │ │ │ +same signature as other d... │ │ │ │ │ +DDeeffiinniittiioonn _c_p_u_E_v_a_l_u_a_t_o_r_._h_:_1_6_8 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_C_o_o_r_d │ │ │ │ │ +Coordinates set on a patch table. │ │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e_s_._h_:_4_2 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_A_r_r_a_y │ │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e_s_._h_:_6_6 │ │ │ │ │ +_O_p_e_n_S_u_b_d_i_v_:_:_O_P_E_N_S_U_B_D_I_V___V_E_R_S_I_O_N_:_:_O_s_d_:_:_P_a_t_c_h_P_a_r_a_m │ │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e_s_._h_:_1_2_7 │ │ │ │ │ * _o_p_e_n_s_u_b_d_i_v │ │ │ │ │ * _o_s_d │ │ │ │ │ - * _b_u_f_f_e_r_D_e_s_c_r_i_p_t_o_r_._h │ │ │ │ │ + * _c_p_u_E_v_a_l_u_a_t_o_r_._h │ │ │ │ │ * Generated on Mon Jun 17 2024 18:57:37 for OpenSubdiv by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00912.html │ │ │ │ @@ -310,15 +310,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
typedef MeshInterface<GLPatchTable> GLMeshInterface
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 38 of file glMesh.h.

│ │ │ │ +

Definition at line 38 of file glMesh.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ MeshBitset

│ │ │ │ │ │ │ │
│ │ │ │ @@ -342,15 +342,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
typedef MeshInterface<MTLPatchTable> MTLMeshInterface
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 38 of file mtlMesh.h.

│ │ │ │ +

Definition at line 38 of file mtlMesh.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ PatchArrayVector

│ │ │ │ │ │ │ │
│ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a00961.html │ │ │ │ @@ -97,15 +97,15 @@ │ │ │ │
Tessellation Class Reference
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

Encapsulates a specific tessellation pattern of a Parameterization. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <tessellation.h>

│ │ │ │ +

#include <tessellation.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ 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...
 
│ │ │ │ @@ -219,15 +219,15 @@ │ │ │ │ │ │ │ │
 
│ │ │ │

Detailed Description

│ │ │ │

Encapsulates a specific tessellation pattern of a Parameterization.

│ │ │ │

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.

│ │ │ │

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).

│ │ │ │ │ │ │ │ -

Definition at line 51 of file tessellation.h.

│ │ │ │ +

Definition at line 51 of file tessellation.h.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ Tessellation() [1/4]

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -445,15 +445,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

Retrieve the coordinates for the entire pattern.

│ │ │ │ │ │ │ │ -

Definition at line 372 of file tessellation.h.

│ │ │ │ +

Definition at line 372 of file tessellation.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ GetCoordStride()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -474,15 +474,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Return the number of elements between each coordinate.

│ │ │ │ │ │ │ │ -

Definition at line 208 of file tessellation.h.

│ │ │ │ +

Definition at line 208 of file tessellation.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ GetEdgeCoords()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -535,15 +535,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Return the size of the face.

│ │ │ │ │ │ │ │ -

Definition at line 182 of file tessellation.h.

│ │ │ │ +

Definition at line 182 of file tessellation.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetFacets()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -584,15 +584,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Return the number of indices assigned to each facet.

│ │ │ │ │ │ │ │ -

Definition at line 258 of file tessellation.h.

│ │ │ │ +

Definition at line 258 of file tessellation.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetFacetStride()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -613,15 +613,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Return the number of elements between each facet.

│ │ │ │ │ │ │ │ -

Definition at line 261 of file tessellation.h.

│ │ │ │ +

Definition at line 261 of file tessellation.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetInteriorCoords()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -664,15 +664,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Return the number of boundary coordinates.

│ │ │ │ │ │ │ │ -

Definition at line 211 of file tessellation.h.

│ │ │ │ +

Definition at line 211 of file tessellation.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetNumCoords()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -693,15 +693,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Return the number of coordinates in the entire pattern.

│ │ │ │ │ │ │ │ -

Definition at line 205 of file tessellation.h.

│ │ │ │ +

Definition at line 205 of file tessellation.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetNumEdgeCoords()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -723,15 +723,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 218 of file tessellation.h.

│ │ │ │ +

Definition at line 218 of file tessellation.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetNumFacets()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -752,15 +752,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Return the number of facets in the entire pattern.

│ │ │ │ │ │ │ │ -

Definition at line 255 of file tessellation.h.

│ │ │ │ +

Definition at line 255 of file tessellation.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetNumInteriorCoords()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -781,15 +781,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Return the number of interior coordinates.

│ │ │ │ │ │ │ │ -

Definition at line 214 of file tessellation.h.

│ │ │ │ +

Definition at line 214 of file tessellation.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetParameterization()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -810,15 +810,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Return the Parameterization.

│ │ │ │ │ │ │ │ -

Definition at line 179 of file tessellation.h.

│ │ │ │ +

Definition at line 179 of file tessellation.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetRates()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -872,15 +872,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Retrieve the coordinate for a given vertex of the face.

│ │ │ │ │ │ │ │ -

Definition at line 365 of file tessellation.h.

│ │ │ │ +

Definition at line 365 of file tessellation.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ IsUniform()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -901,15 +901,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Return if the pattern is uniform.

│ │ │ │ │ │ │ │ -

Definition at line 188 of file tessellation.h.

│ │ │ │ +

Definition at line 188 of file tessellation.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ IsValid()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -930,15 +930,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Return true if correctly initialized.

│ │ │ │ │ │ │ │ -

Definition at line 162 of file tessellation.h.

│ │ │ │ +

Definition at line 162 of file tessellation.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ operator=()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1063,15 +1063,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

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

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

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...

│ │ │ │ │ │ │ │ -

#include <tessellation.h>

│ │ │ │ +

#include <tessellation.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -132,15 +132,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

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

Detailed Description

│ │ │ │

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.

│ │ │ │

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

│ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 65 of file tessellation.h.

│ │ │ │ +

Definition at line 65 of file tessellation.h.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ Options()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -157,15 +157,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ inline
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 67 of file tessellation.h.

│ │ │ │ +

Definition at line 67 of file tessellation.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

Member Function Documentation

│ │ │ │ │ │ │ │

◆ GetCoordStride()

│ │ │ │ │ │ │ │ @@ -187,15 +187,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Return the stride between (u,v) pairs.

│ │ │ │ │ │ │ │ -

Definition at line 90 of file tessellation.h.

│ │ │ │ +

Definition at line 90 of file tessellation.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetFacetSize()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -214,15 +214,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 80 of file tessellation.h.

│ │ │ │ +

Definition at line 80 of file tessellation.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetFacetStride()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -243,15 +243,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Return the stride between facets.

│ │ │ │ │ │ │ │ -

Definition at line 85 of file tessellation.h.

│ │ │ │ +

Definition at line 85 of file tessellation.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ PreserveQuads() [1/2]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -272,15 +272,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Return if preservation of quads is set.

│ │ │ │ │ │ │ │ -

Definition at line 74 of file tessellation.h.

│ │ │ │ +

Definition at line 74 of file tessellation.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ PreserveQuads() [2/2]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -302,15 +302,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 343 of file tessellation.h.

│ │ │ │ +

Definition at line 343 of file tessellation.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ SetCoordStride()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -332,15 +332,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 358 of file tessellation.h.

│ │ │ │ +

Definition at line 358 of file tessellation.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ SetFacetSize()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -362,15 +362,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 348 of file tessellation.h.

│ │ │ │ +

Definition at line 348 of file tessellation.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ SetFacetStride()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -392,20 +392,20 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Assign the stride between facets (default is facet size)

│ │ │ │ │ │ │ │ -

Definition at line 353 of file tessellation.h.

│ │ │ │ +

Definition at line 353 of file tessellation.h.

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

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

│ │ │ │ │ │ │ │ -

#include <vertexDescriptor.h>

│ │ │ │ +

#include <vertexDescriptor.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -178,15 +178,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ 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.

│ │ │ │
bool Initialize (int numIncidentFaces)
 
│ │ │ │

Detailed Description

│ │ │ │

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

│ │ │ │

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.

│ │ │ │

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).

│ │ │ │ │ │ │ │ -

Definition at line 131 of file vertexDescriptor.h.

│ │ │ │ +

Definition at line 131 of file vertexDescriptor.h.

│ │ │ │

Member Function Documentation

│ │ │ │ │ │ │ │

◆ ClearEdgeSharpness()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -205,15 +205,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

Remove any sharpness assigned to the incident edges.

│ │ │ │ │ │ │ │ -

Definition at line 398 of file vertexDescriptor.h.

│ │ │ │ +

Definition at line 398 of file vertexDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ ClearIncidentFaceSizes()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -234,15 +234,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Remove any assigned sizes of incident faces.

│ │ │ │ │ │ │ │ -

Definition at line 350 of file vertexDescriptor.h.

│ │ │ │ +

Definition at line 350 of file vertexDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ ClearVertexSharpness()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -263,15 +263,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Remove any sharpness assigned to the vertex.

│ │ │ │ │ │ │ │ -

Definition at line 377 of file vertexDescriptor.h.

│ │ │ │ +

Definition at line 377 of file vertexDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ Finalize()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -328,15 +328,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Return the sharpness assigned to edges of an incident face.

│ │ │ │ │ │ │ │ -

Definition at line 436 of file vertexDescriptor.h.

│ │ │ │ +

Definition at line 436 of file vertexDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetIncidentFaceSize()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -358,15 +358,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Return the size of an incident face.

│ │ │ │ │ │ │ │ -

Definition at line 362 of file vertexDescriptor.h.

│ │ │ │ +

Definition at line 362 of file vertexDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetManifoldEdgeSharpness()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -388,15 +388,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Return the sharpness assigned to a manifold edge.

│ │ │ │ │ │ │ │ -

Definition at line 420 of file vertexDescriptor.h.

│ │ │ │ +

Definition at line 420 of file vertexDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetVertexSharpness()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -417,15 +417,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Return the sharpness of the vertex.

│ │ │ │ │ │ │ │ -

Definition at line 386 of file vertexDescriptor.h.

│ │ │ │ +

Definition at line 386 of file vertexDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ HasEdgeSharpness()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -446,15 +446,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Return if sharpness was assigned to the incident edges.

│ │ │ │ │ │ │ │ -

Definition at line 394 of file vertexDescriptor.h.

│ │ │ │ +

Definition at line 394 of file vertexDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ HasIncidentFaceSizes()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -475,15 +475,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Return if the sizes of incident faces are assigned.

│ │ │ │ │ │ │ │ -

Definition at line 346 of file vertexDescriptor.h.

│ │ │ │ +

Definition at line 346 of file vertexDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ HasVertexSharpness()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -504,15 +504,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Return if sharpness was assigned to the vertex.

│ │ │ │ │ │ │ │ -

Definition at line 373 of file vertexDescriptor.h.

│ │ │ │ +

Definition at line 373 of file vertexDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ Initialize()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -553,15 +553,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Return if vertex neighborhood is on a boundary.

│ │ │ │ │ │ │ │ -

Definition at line 338 of file vertexDescriptor.h.

│ │ │ │ +

Definition at line 338 of file vertexDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ IsManifold()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -582,15 +582,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Return if vertex neighborhood is manifold.

│ │ │ │ │ │ │ │ -

Definition at line 329 of file vertexDescriptor.h.

│ │ │ │ +

Definition at line 329 of file vertexDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ IsValid()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -611,15 +611,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Return if instance is valid.

│ │ │ │ │ │ │ │ -

Definition at line 320 of file vertexDescriptor.h.

│ │ │ │ +

Definition at line 320 of file vertexDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ SetBoundary()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -641,15 +641,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Declare the vertex neighborhood as being on a boundary.

│ │ │ │ │ │ │ │ -

Definition at line 334 of file vertexDescriptor.h.

│ │ │ │ +

Definition at line 334 of file vertexDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ SetIncidentFaceEdgeSharpness()

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

Definition at line 427 of file vertexDescriptor.h.

│ │ │ │ +

Definition at line 427 of file vertexDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ SetIncidentFaceSize()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -736,15 +736,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Assign the size of an incident face.

│ │ │ │ │ │ │ │ -

Definition at line 355 of file vertexDescriptor.h.

│ │ │ │ +

Definition at line 355 of file vertexDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ SetManifold()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -766,15 +766,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Declare the vertex neighborhood as manifold (ordered)

│ │ │ │ │ │ │ │ -

Definition at line 325 of file vertexDescriptor.h.

│ │ │ │ +

Definition at line 325 of file vertexDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ SetManifoldEdgeSharpness()

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

Definition at line 403 of file vertexDescriptor.h.

│ │ │ │ +

Definition at line 403 of file vertexDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ SetVertexSharpness()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -844,20 +844,20 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Assign sharpness to the vertex.

│ │ │ │ │ │ │ │ -

Definition at line 382 of file vertexDescriptor.h.

│ │ │ │ +

Definition at line 382 of file vertexDescriptor.h.

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

Container for arrays of parametric patches. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <patchTable.h>

│ │ │ │ +

#include <patchTable.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Classes

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

Detailed Description

│ │ │ │

Container for arrays of parametric patches.

│ │ │ │

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.

│ │ │ │

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

│ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 55 of file patchTable.h.

│ │ │ │ +

Definition at line 55 of file patchTable.h.

│ │ │ │

Member Typedef Documentation

│ │ │ │ │ │ │ │

◆ ConstQuadOffsetsArray

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

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

│ │ │ │ │ │ │ │ -

Definition at line 259 of file patchTable.h.

│ │ │ │ +

Definition at line 259 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ PatchVertsTable

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

Definition at line 375 of file patchTable.h.

│ │ │ │ +

Definition at line 375 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ QuadOffsetsTable

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

Definition at line 389 of file patchTable.h.

│ │ │ │ +

Definition at line 389 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ VertexValenceTable

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

Definition at line 264 of file patchTable.h.

│ │ │ │ +

Definition at line 264 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ PatchTable() [1/2]

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

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.

│ │ │ │ │ │ │ │ -

Definition at line 826 of file patchTable.h.

│ │ │ │ +

Definition at line 826 of file patchTable.h.

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

◆ ComputeLocalPointValuesFaceVarying()

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

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.

│ │ │ │ │ │ │ │ -

Definition at line 844 of file patchTable.h.

│ │ │ │ +

Definition at line 844 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ ComputeLocalPointValuesVarying()

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

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.

│ │ │ │ │ │ │ │ -

Definition at line 835 of file patchTable.h.

│ │ │ │ +

Definition at line 835 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvaluateBasis() [1/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -790,15 +790,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 865 of file patchTable.h.

│ │ │ │ +

Definition at line 865 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvaluateBasis() [2/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -872,15 +872,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 858 of file patchTable.h.

│ │ │ │ +

Definition at line 858 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvaluateBasis() [3/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1048,15 +1048,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 895 of file patchTable.h.

│ │ │ │ +

Definition at line 895 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvaluateBasisFaceVarying() [2/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1136,15 +1136,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 888 of file patchTable.h.

│ │ │ │ +

Definition at line 888 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvaluateBasisFaceVarying() [3/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1313,15 +1313,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 880 of file patchTable.h.

│ │ │ │ +

Definition at line 880 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvaluateBasisVarying() [2/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1395,15 +1395,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 873 of file patchTable.h.

│ │ │ │ +

Definition at line 873 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvaluateBasisVarying() [3/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1654,15 +1654,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 812 of file patchTable.h.

│ │ │ │ +

Definition at line 812 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetLocalPointFaceVaryingStencilTable() [2/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1684,15 +1684,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 789 of file patchTable.h.

│ │ │ │ +

Definition at line 789 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetLocalPointFaceVaryingStencilTable() [3/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1735,15 +1735,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the stencil table to compute local point vertex values.

│ │ │ │ │ │ │ │ -

Definition at line 778 of file patchTable.h.

│ │ │ │ +

Definition at line 778 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetLocalPointStencilTable() [2/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1785,15 +1785,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 800 of file patchTable.h.

│ │ │ │ +

Definition at line 800 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetLocalPointVaryingStencilTable() [1/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1814,15 +1814,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the stencil table to compute local point varying values.

│ │ │ │ │ │ │ │ -

Definition at line 783 of file patchTable.h.

│ │ │ │ +

Definition at line 783 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetLocalPointVaryingStencilTable() [2/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1864,15 +1864,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 806 of file patchTable.h.

│ │ │ │ +

Definition at line 806 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetMaxValence()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1893,15 +1893,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns max vertex valence.

│ │ │ │ │ │ │ │ -

Definition at line 92 of file patchTable.h.

│ │ │ │ +

Definition at line 92 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetNumControlVertices()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1942,15 +1942,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 84 of file patchTable.h.

│ │ │ │ +

Definition at line 84 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetNumFVarChannels()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2106,15 +2106,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the total number of ptex faces in the mesh.

│ │ │ │ │ │ │ │ -

Definition at line 95 of file patchTable.h.

│ │ │ │ +

Definition at line 95 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetPatchArrayDescriptor()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2255,15 +2255,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Get the table of patch control vertices.

│ │ │ │ │ │ │ │ -

Definition at line 378 of file patchTable.h.

│ │ │ │ +

Definition at line 378 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetPatchDescriptor()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2568,15 +2568,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the PatchParamTable (PatchParams order matches patch array sorting)

│ │ │ │ │ │ │ │ -

Definition at line 381 of file patchTable.h.

│ │ │ │ +

Definition at line 381 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetPatchQuadOffsets()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2717,15 +2717,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the quad-offsets table.

│ │ │ │ │ │ │ │ -

Definition at line 392 of file patchTable.h.

│ │ │ │ +

Definition at line 392 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetSharpnessIndexTable()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2746,15 +2746,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 384 of file patchTable.h.

│ │ │ │ +

Definition at line 384 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ getSharpnessIndices()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2801,15 +2801,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns sharpness values table.

│ │ │ │ │ │ │ │ -

Definition at line 387 of file patchTable.h.

│ │ │ │ +

Definition at line 387 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ getSharpnessValues()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2944,15 +2944,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the 'VertexValences' table (vertex neighborhoods table)

│ │ │ │ │ │ │ │ -

Definition at line 267 of file patchTable.h.

│ │ │ │ +

Definition at line 267 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ IsFeatureAdaptive()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -3013,15 +3013,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 756 of file patchTable.h.

│ │ │ │ +

Definition at line 756 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ LocalPointFaceVaryingStencilPrecisionMatchesType() [3/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -3042,15 +3042,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 769 of file patchTable.h.

│ │ │ │ +

Definition at line 769 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ LocalPointStencilPrecisionMatchesType() [1/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -3092,15 +3092,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 748 of file patchTable.h.

│ │ │ │ +

Definition at line 748 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ LocalPointStencilPrecisionMatchesType() [3/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -3121,15 +3121,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 761 of file patchTable.h.

│ │ │ │ +

Definition at line 761 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ LocalPointVaryingStencilPrecisionMatchesType() [1/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -3171,15 +3171,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 752 of file patchTable.h.

│ │ │ │ +

Definition at line 752 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ LocalPointVaryingStencilPrecisionMatchesType() [3/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -3200,15 +3200,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 765 of file patchTable.h.

│ │ │ │ +

Definition at line 765 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ print()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -3244,20 +3244,20 @@ │ │ │ │ │ │ │ │ │ │ │ │ friend │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 531 of file patchTable.h.

│ │ │ │ +

Definition at line 531 of file patchTable.h.

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

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

│ │ │ │ │ │ │ │ -

#include <patchTable.h>

│ │ │ │ +

#include <patchTable.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -119,15 +119,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Attributes

Index arrayIndex
 
Index patchIndex
 
 
class PatchMap
 
│ │ │ │

Detailed Description

│ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 60 of file patchTable.h.

│ │ │ │ +

Definition at line 60 of file patchTable.h.

│ │ │ │

Friends And Related Symbol Documentation

│ │ │ │ │ │ │ │

◆ PatchMap

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -141,15 +141,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ friend
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 65 of file patchTable.h.

│ │ │ │ +

Definition at line 65 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ PatchTable

│ │ │ │ │ │ │ │
│ │ │ │ @@ -165,15 +165,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ friend │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 64 of file patchTable.h.

│ │ │ │ +

Definition at line 64 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

Member Data Documentation

│ │ │ │ │ │ │ │

◆ arrayIndex

│ │ │ │ │ │ │ │ @@ -182,15 +182,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
Index arrayIndex
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 67 of file patchTable.h.

│ │ │ │ +

Definition at line 67 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ patchIndex

│ │ │ │ │ │ │ │
│ │ │ │ @@ -198,15 +198,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
Index patchIndex
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 68 of file patchTable.h.

│ │ │ │ +

Definition at line 68 of file patchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ vertIndex

│ │ │ │ │ │ │ │
│ │ │ │ @@ -214,20 +214,20 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
Index vertIndex
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 69 of file patchTable.h.

│ │ │ │ +

Definition at line 69 of file patchTable.h.

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

Factory for constructing a PatchTable from a TopologyRefiner. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <patchTableFactory.h>

│ │ │ │ +

#include <patchTableFactory.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -124,29 +124,29 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ 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.
 
│ │ │ │

Detailed Description

│ │ │ │

Factory for constructing a PatchTable from a TopologyRefiner.

│ │ │ │ │ │ │ │ -

Definition at line 40 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 40 of file patchTableFactory.h.

│ │ │ │

Member Typedef Documentation

│ │ │ │ │ │ │ │

◆ PatchTagVector

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
typedef std::vector<PatchFaceTag> PatchTagVector
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 208 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 208 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

Member Function Documentation

│ │ │ │ │ │ │ │

◆ Create()

│ │ │ │ │ │ │ │ @@ -200,15 +200,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
Returns
A new instance of PatchTable
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Public options for the PatchTable factory. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <patchTableFactory.h>

│ │ │ │ +

#include <patchTableFactory.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

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

Detailed Description

│ │ │ │

Public options for the PatchTable factory.

│ │ │ │ │ │ │ │ -

Definition at line 45 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 45 of file patchTableFactory.h.

│ │ │ │

Member Enumeration Documentation

│ │ │ │ │ │ │ │

◆ EndCapType

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -237,15 +237,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
ENDCAP_GREGORY_BASIS 

use Gregory patches (highest quality, recommended default)

│ │ │ │
ENDCAP_LEGACY_GREGORY 

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

│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 55 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 55 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ Options()

│ │ │ │ │ │ │ │ @@ -266,15 +266,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 63 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 63 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Member Function Documentation

│ │ │ │ │ │ │ │

◆ GetEndCapType()

│ │ │ │ │ │ │ │ @@ -296,15 +296,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Get endcap basis type.

│ │ │ │ │ │ │ │ -

Definition at line 85 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 85 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetRefineAdaptiveOptions()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -325,15 +325,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Determine adaptive refinement options to match assigned patch options.

│ │ │ │ │ │ │ │ -

Definition at line 100 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 100 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ SetEndCapType()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -355,15 +355,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Set endcap basis type.

│ │ │ │ │ │ │ │ -

Definition at line 88 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 88 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ SetFVarPatchPrecision() [1/2]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -403,15 +403,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 215 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 215 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ SetMaxIsolationLevel()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -433,15 +433,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Set maximum isolation level.

│ │ │ │ │ │ │ │ -

Definition at line 91 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 91 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ SetPatchPrecision() [1/2]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -481,15 +481,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 212 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 212 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Member Data Documentation

│ │ │ │ │ │ │ │

◆ endCapType

│ │ │ │ │ │ │ │ @@ -500,15 +500,15 @@ │ │ │ │ unsigned int endCapType │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

EndCapType.

│ │ │ │ │ │ │ │ -

Definition at line 120 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 120 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ fvarChannelIndices

│ │ │ │ │ │ │ │
│ │ │ │ @@ -518,15 +518,15 @@ │ │ │ │ int const* fvarChannelIndices │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 140 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 140 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ fvarPatchPrecisionDouble

│ │ │ │ │ │ │ │
│ │ │ │ @@ -536,15 +536,15 @@ │ │ │ │ unsigned int fvarPatchPrecisionDouble │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Generate double-precision stencils for face-varying patches.

│ │ │ │ │ │ │ │ -

Definition at line 133 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 133 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ generateAllLevels

│ │ │ │ │ │ │ │
│ │ │ │ @@ -554,15 +554,15 @@ │ │ │ │ unsigned int generateAllLevels │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 110 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 110 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ generateFVarLegacyLinearPatches

│ │ │ │ │ │ │ │
│ │ │ │ @@ -572,15 +572,15 @@ │ │ │ │ unsigned int generateFVarLegacyLinearPatches │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Generate all linear face-varying patches (legacy)

│ │ │ │ │ │ │ │ -

Definition at line 136 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 136 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ generateFVarTables

│ │ │ │ │ │ │ │
│ │ │ │ @@ -590,15 +590,15 @@ │ │ │ │ unsigned int generateFVarTables │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Generate face-varying patch tables.

│ │ │ │ │ │ │ │ -

Definition at line 129 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 129 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ generateLegacySharpCornerPatches

│ │ │ │ │ │ │ │
│ │ │ │ @@ -608,15 +608,15 @@ │ │ │ │ unsigned int generateLegacySharpCornerPatches │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Generate sharp regular patches at smooth corners (legacy)

│ │ │ │ │ │ │ │ -

Definition at line 137 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 137 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ generateVaryingLocalPoints

│ │ │ │ │ │ │ │
│ │ │ │ @@ -626,15 +626,15 @@ │ │ │ │ unsigned int generateVaryingLocalPoints │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Generate local points with varying patches.

│ │ │ │ │ │ │ │ -

Definition at line 126 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 126 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ generateVaryingTables

│ │ │ │ │ │ │ │
│ │ │ │ @@ -644,15 +644,15 @@ │ │ │ │ unsigned int generateVaryingTables │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Generate varying patch tables.

│ │ │ │ │ │ │ │ -

Definition at line 125 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 125 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ includeBaseLevelIndices

│ │ │ │ │ │ │ │
│ │ │ │ @@ -662,15 +662,15 @@ │ │ │ │ unsigned int includeBaseLevelIndices │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 111 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 111 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ includeFVarBaseLevelIndices

│ │ │ │ │ │ │ │
│ │ │ │ @@ -680,15 +680,15 @@ │ │ │ │ unsigned int includeFVarBaseLevelIndices │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 112 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 112 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ maxIsolationLevel

│ │ │ │ │ │ │ │
│ │ │ │ @@ -698,15 +698,15 @@ │ │ │ │ unsigned int maxIsolationLevel │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 117 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 117 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ numFVarChannels

│ │ │ │ │ │ │ │
│ │ │ │ @@ -716,15 +716,15 @@ │ │ │ │ int numFVarChannels │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Number of channel indices and interpolation modes passed.

│ │ │ │ │ │ │ │ -

Definition at line 139 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 139 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ patchPrecisionDouble

│ │ │ │ │ │ │ │
│ │ │ │ @@ -734,15 +734,15 @@ │ │ │ │ unsigned int patchPrecisionDouble │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Generate double-precision stencils for vertex patches.

│ │ │ │ │ │ │ │ -

Definition at line 132 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 132 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ shareEndCapPatchPoints

│ │ │ │ │ │ │ │
│ │ │ │ @@ -751,15 +751,15 @@ │ │ │ │ │ │ │ │ unsigned int shareEndCapPatchPoints │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 121 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 121 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ triangulateQuads

│ │ │ │ │ │ │ │
│ │ │ │ @@ -769,15 +769,15 @@ │ │ │ │ unsigned int triangulateQuads │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Triangulate 'QUADS' primitives (Uniform mode only)

│ │ │ │ │ │ │ │ -

Definition at line 113 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 113 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ useInfSharpPatch

│ │ │ │ │ │ │ │
│ │ │ │ @@ -787,15 +787,15 @@ │ │ │ │ unsigned int useInfSharpPatch │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Use infinitely-sharp patch.

│ │ │ │ │ │ │ │ -

Definition at line 116 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 116 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ useSingleCreasePatch

│ │ │ │ │ │ │ │
│ │ │ │ @@ -805,20 +805,20 @@ │ │ │ │ unsigned int useSingleCreasePatch │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Use single crease patch.

│ │ │ │ │ │ │ │ -

Definition at line 115 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 115 of file patchTableFactory.h.

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

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

│ │ │ │ │ │ │ │ -

#include <patchTableFactory.h>

│ │ │ │ +

#include <patchTableFactory.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -133,15 +133,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

void clear ()
 
void assignBoundaryPropertiesFromEdgeMask (int boundaryEdgeMask)
 
 
unsigned int _isSingleCrease: 1
 
│ │ │ │

Detailed Description

│ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 192 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 192 of file patchTableFactory.h.

│ │ │ │

Member Function Documentation

│ │ │ │ │ │ │ │

◆ assignBoundaryPropertiesFromEdgeMask()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -219,15 +219,15 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
unsigned int _boundaryCount
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 199 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 199 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ _boundaryIndex

│ │ │ │ │ │ │ │
│ │ │ │ @@ -235,15 +235,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
unsigned int _boundaryIndex
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 198 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 198 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ _boundaryMask

│ │ │ │ │ │ │ │
│ │ │ │ @@ -251,15 +251,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
unsigned int _boundaryMask
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 197 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 197 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _hasBoundaryEdge

│ │ │ │ │ │ │ │
│ │ │ │ @@ -267,15 +267,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
unsigned int _hasBoundaryEdge
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 200 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 200 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _hasPatch

│ │ │ │ │ │ │ │
│ │ │ │ @@ -283,15 +283,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
unsigned int _hasPatch
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 194 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 194 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _isRegular

│ │ │ │ │ │ │ │
│ │ │ │ @@ -299,15 +299,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
unsigned int _isRegular
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 195 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 195 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _isSingleCrease

│ │ │ │ │ │ │ │
│ │ │ │ @@ -315,15 +315,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
unsigned int _isSingleCrease
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 201 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 201 of file patchTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _transitionMask

│ │ │ │ │ │ │ │
│ │ │ │ @@ -331,20 +331,20 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
unsigned int _transitionMask
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 196 of file patchTableFactory.h.

│ │ │ │ +

Definition at line 196 of file patchTableFactory.h.

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

Object used to compute and query ptex face indices. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <ptexIndices.h>

│ │ │ │ +

#include <ptexIndices.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -121,15 +121,15 @@ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

 PtexIndices (TopologyRefiner const &refiner)
 Constructor.
 
 ~PtexIndices ()
 Returns ptex face adjacency information for a given coarse face.
 
│ │ │ │

Detailed Description

│ │ │ │

Object used to compute and query ptex face indices.

│ │ │ │

Given a refiner, constructing a PtexIndices object builds the mapping from coarse faces to ptex ids. Once built, the object can be used to query the mapping.

│ │ │ │ │ │ │ │ -

Definition at line 46 of file ptexIndices.h.

│ │ │ │ +

Definition at line 46 of file ptexIndices.h.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ PtexIndices()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -262,15 +262,15 @@ │ │ │ │ │ │ │ │

Returns the number of ptex faces in the mesh.

│ │ │ │

Ptex

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

A specialized factory for StencilTable. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <stencilTableFactory.h>

│ │ │ │ +

#include <stencilTableFactory.h>

│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Options
 
│ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ @@ -140,15 +140,15 @@ │ │ │ │

 Utility function for stencil splicing for local point face-varying stencils.
 
│ │ │ │

Detailed Description

│ │ │ │
template<typename REAL>
│ │ │ │ class OpenSubdiv::OPENSUBDIV_VERSION::Far::StencilTableFactoryReal< REAL >

A specialized factory for StencilTable.

│ │ │ │ │ │ │ │ -

Definition at line 51 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 51 of file stencilTableFactory.h.

│ │ │ │

Member Enumeration Documentation

│ │ │ │ │ │ │ │

◆ Mode

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ @@ -164,15 +164,15 @@ │ │ │ │ │ │ │ │ INTERPOLATE_VARYING 

varying primvar stencils

│ │ │ │ │ │ │ │ INTERPOLATE_FACE_VARYING 

face-varying primvar stencils

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 55 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 55 of file stencilTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

Member Function Documentation

│ │ │ │ │ │ │ │

◆ AppendLocalPointStencilTable()

│ │ │ │ │ │ │ │ @@ -357,15 +357,15 @@ │ │ │ │ baseStencilTableInput StencilTable for refined vertices │ │ │ │ localPointStencilTableStencilTable for the change of basis patch points. │ │ │ │ factorizeIf factorize is set to true, endcap stencils will be factorized with supporting vertices from baseStencil table so that the endcap points can be computed directly from control vertices. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 148 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 148 of file stencilTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ Create() [1/2]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -458,16 +458,16 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following files: │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

A specialized factory for LimitStencilTable. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <stencilTableFactory.h>

│ │ │ │ +

#include <stencilTableFactory.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -135,15 +135,15 @@ │ │ │ │

│ │ │ │ Classes

struct  LocationArray
 Descriptor for limit surface locations. More...
 
struct  Options
│ │ │ │

Detailed Description

│ │ │ │
template<typename REAL>
│ │ │ │ class OpenSubdiv::OPENSUBDIV_VERSION::Far::LimitStencilTableFactoryReal< REAL >

A specialized factory for LimitStencilTable.

│ │ │ │

The LimitStencilTableFactory creates a table of limit stencils. Limit stencils can interpolate any arbitrary location on the limit surface. The stencils will be bilinear if the surface is refined uniformly, and bicubic if feature adaptive isolation is used instead.

│ │ │ │

Surface locations are expressed as a combination of ptex face index and normalized (s,t) patch coordinates. The factory exposes the LocationArray struct as a container for these location descriptors.

│ │ │ │ │ │ │ │ -

Definition at line 209 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 209 of file stencilTableFactory.h.

│ │ │ │

Member Typedef Documentation

│ │ │ │ │ │ │ │

◆ LocationArrayVec

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ @@ -151,15 +151,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
typedef std::vector<LocationArray> LocationArrayVec
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 244 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 244 of file stencilTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

Member Enumeration Documentation

│ │ │ │ │ │ │ │

◆ Mode

│ │ │ │ │ │ │ │ @@ -178,15 +178,15 @@ │ │ │ │ │ │ │ │ INTERPOLATE_VARYING 

varying primvar stencils

│ │ │ │ │ │ │ │ INTERPOLATE_FACE_VARYING 

face-varying primvar stencils

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 213 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 213 of file stencilTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

Member Function Documentation

│ │ │ │ │ │ │ │

◆ Create()

│ │ │ │ │ │ │ │ @@ -252,16 +252,16 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
The documentation for this class was generated from the following files: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Vertex stencil descriptor. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <stencilTable.h>

│ │ │ │ +

#include <stencilTable.h>

│ │ │ │
│ │ │ │ Inheritance diagram for StencilReal< REAL >:
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ LimitStencilReal< float > │ │ │ │ @@ -160,15 +160,15 @@ │ │ │ │   │ │ │ │ │ │ │ │

Detailed Description

│ │ │ │
template<typename REAL>
│ │ │ │ class OpenSubdiv::OPENSUBDIV_VERSION::Far::StencilReal< REAL >

Vertex stencil descriptor.

│ │ │ │

Allows access and manipulation of a single stencil in a StencilTable.

│ │ │ │ │ │ │ │ -

Definition at line 53 of file stencilTable.h.

│ │ │ │ +

Definition at line 53 of file stencilTable.h.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ StencilReal() [1/3]

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ @@ -189,15 +189,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Default constructor.

│ │ │ │ │ │ │ │ -

Definition at line 57 of file stencilTable.h.

│ │ │ │ +

Definition at line 57 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ StencilReal() [2/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -245,15 +245,15 @@ │ │ │ │ sizeTable pointer to the size of the stencil │ │ │ │ indicesTable pointer to the vertex indices of the stencil │ │ │ │ weightsTable pointer to the vertex weights of the stencil │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 67 of file stencilTable.h.

│ │ │ │ +

Definition at line 67 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ StencilReal() [3/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -277,15 +277,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Copy constructor.

│ │ │ │ │ │ │ │ -

Definition at line 71 of file stencilTable.h.

│ │ │ │ +

Definition at line 71 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

Member Function Documentation

│ │ │ │ │ │ │ │

◆ GetSize()

│ │ │ │ │ │ │ │ @@ -309,15 +309,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the size of the stencil.

│ │ │ │ │ │ │ │ -

Definition at line 78 of file stencilTable.h.

│ │ │ │ +

Definition at line 78 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ GetSizePtr()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -340,15 +340,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the size of the stencil as a pointer.

│ │ │ │ │ │ │ │ -

Definition at line 83 of file stencilTable.h.

│ │ │ │ +

Definition at line 83 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetVertexIndices()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -371,15 +371,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the control vertices' indices.

│ │ │ │ │ │ │ │ -

Definition at line 88 of file stencilTable.h.

│ │ │ │ +

Definition at line 88 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetWeights()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -402,15 +402,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the interpolation weights.

│ │ │ │ │ │ │ │ -

Definition at line 93 of file stencilTable.h.

│ │ │ │ +

Definition at line 93 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ Next()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -433,15 +433,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Advance to the next stencil in the table.

│ │ │ │ │ │ │ │ -

Definition at line 98 of file stencilTable.h.

│ │ │ │ +

Definition at line 98 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Friends And Related Symbol Documentation

│ │ │ │ │ │ │ │

◆ LimitStencilTableFactoryReal< REAL >

│ │ │ │ │ │ │ │ @@ -460,15 +460,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ friend │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 98 of file stencilTable.h.

│ │ │ │ +

Definition at line 98 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ StencilTableFactoryReal< REAL >

│ │ │ │ │ │ │ │
│ │ │ │ @@ -486,15 +486,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ friend │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 98 of file stencilTable.h.

│ │ │ │ +

Definition at line 98 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Member Data Documentation

│ │ │ │ │ │ │ │

◆ _indices

│ │ │ │ │ │ │ │ @@ -513,15 +513,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 110 of file stencilTable.h.

│ │ │ │ +

Definition at line 110 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _size

│ │ │ │ │ │ │ │
│ │ │ │ @@ -539,15 +539,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 109 of file stencilTable.h.

│ │ │ │ +

Definition at line 109 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _weights

│ │ │ │ │ │ │ │
│ │ │ │ @@ -565,20 +565,20 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 111 of file stencilTable.h.

│ │ │ │ +

Definition at line 111 of file stencilTable.h.

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

Vertex stencil class wrapping the template for compatibility. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <stencilTable.h>

│ │ │ │ +

#include <stencilTable.h>

│ │ │ │
│ │ │ │ Inheritance diagram for Stencil:
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ StencilReal< float > │ │ │ │ @@ -161,15 +161,15 @@ │ │ │ │   │ │ │ │ float * _weights │ │ │ │   │ │ │ │ │ │ │ │

Detailed Description

│ │ │ │

Vertex stencil class wrapping the template for compatibility.

│ │ │ │ │ │ │ │ -

Definition at line 116 of file stencilTable.h.

│ │ │ │ +

Definition at line 116 of file stencilTable.h.

│ │ │ │

Member Typedef Documentation

│ │ │ │ │ │ │ │

◆ BaseStencil

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -183,15 +183,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ protected
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 118 of file stencilTable.h.

│ │ │ │ +

Definition at line 118 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ Stencil() [1/3]

│ │ │ │ │ │ │ │ @@ -211,15 +211,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 121 of file stencilTable.h.

│ │ │ │ +

Definition at line 121 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ Stencil() [2/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -239,15 +239,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 122 of file stencilTable.h.

│ │ │ │ +

Definition at line 122 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ Stencil() [3/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -283,20 +283,20 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 123 of file stencilTable.h.

│ │ │ │ +

Definition at line 123 of file stencilTable.h.

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

Table of subdivision stencils. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <stencilTable.h>

│ │ │ │ +

#include <stencilTable.h>

│ │ │ │
│ │ │ │ Inheritance diagram for StencilTableReal< REAL >:
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ LimitStencilTableReal< float > │ │ │ │ @@ -209,15 +209,15 @@ │ │ │ │ │ │ │ │

Detailed Description

│ │ │ │
template<typename REAL>
│ │ │ │ class OpenSubdiv::OPENSUBDIV_VERSION::Far::StencilTableReal< REAL >

Table of subdivision stencils.

│ │ │ │

Stencils are the most direct method of evaluation of locations on the limit of a surface. Every point of a limit surface can be computed by linearly blending a collection of coarse control vertices.

│ │ │ │

A stencil assigns a series of control vertex indices with a blending weight that corresponds to a unique parametric location of the limit surface. When the control vertices move in space, the limit location can be very efficiently recomputed simply by applying the blending weights to the series of coarse control vertices.

│ │ │ │ │ │ │ │ -

Definition at line 141 of file stencilTable.h.

│ │ │ │ +

Definition at line 141 of file stencilTable.h.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ StencilTableReal() [1/3]

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ @@ -304,15 +304,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlinevirtual │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 153 of file stencilTable.h.

│ │ │ │ +

Definition at line 153 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ StencilTableReal() [2/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -333,15 +333,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 255 of file stencilTable.h.

│ │ │ │ +

Definition at line 255 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ StencilTableReal() [3/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -363,15 +363,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 256 of file stencilTable.h.

│ │ │ │ +

Definition at line 256 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

Member Function Documentation

│ │ │ │ │ │ │ │

◆ Clear()

│ │ │ │ │ │ │ │ @@ -414,15 +414,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 714 of file stencilTable.h.

│ │ │ │ +

Definition at line 714 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ generateOffsets()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -443,15 +443,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 678 of file stencilTable.h.

│ │ │ │ +

Definition at line 678 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetControlIndices()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -474,15 +474,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the indices of the control vertices.

│ │ │ │ │ │ │ │ -

Definition at line 179 of file stencilTable.h.

│ │ │ │ +

Definition at line 179 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetNumControlVertices()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -505,15 +505,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the number of control vertices indexed in the table.

│ │ │ │ │ │ │ │ -

Definition at line 161 of file stencilTable.h.

│ │ │ │ +

Definition at line 161 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetNumStencils()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -536,15 +536,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the number of stencils in the table.

│ │ │ │ │ │ │ │ -

Definition at line 156 of file stencilTable.h.

│ │ │ │ +

Definition at line 156 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetOffsets()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -567,15 +567,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the offset to a given stencil (factory may leave empty)

│ │ │ │ │ │ │ │ -

Definition at line 174 of file stencilTable.h.

│ │ │ │ +

Definition at line 174 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetSizes()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -598,15 +598,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the number of control vertices of each stencil in the table.

│ │ │ │ │ │ │ │ -

Definition at line 169 of file stencilTable.h.

│ │ │ │ +

Definition at line 169 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetStencil()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -630,15 +630,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns a Stencil at index i in the table.

│ │ │ │ │ │ │ │ -

Definition at line 722 of file stencilTable.h.

│ │ │ │ +

Definition at line 722 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetWeights()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -661,15 +661,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the stencil interpolation weights.

│ │ │ │ │ │ │ │ -

Definition at line 184 of file stencilTable.h.

│ │ │ │ +

Definition at line 184 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ operator[]()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -693,15 +693,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the stencil at index i in the table.

│ │ │ │ │ │ │ │ -

Definition at line 734 of file stencilTable.h.

│ │ │ │ +

Definition at line 734 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ reserve()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -733,15 +733,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 698 of file stencilTable.h.

│ │ │ │ +

Definition at line 698 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ resize()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -773,15 +773,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 690 of file stencilTable.h.

│ │ │ │ +

Definition at line 690 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ shrinkToFit()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -802,15 +802,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 706 of file stencilTable.h.

│ │ │ │ +

Definition at line 706 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ update() [1/2]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -862,15 +862,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 650 of file stencilTable.h.

│ │ │ │ +

Definition at line 650 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ update() [2/2]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -934,15 +934,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 618 of file stencilTable.h.

│ │ │ │ +

Definition at line 618 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ UpdateValues() [1/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1000,15 +1000,15 @@ │ │ │ │ dstValuesDestination buffer for the interpolated primvar data │ │ │ │ startIndex of first destination value to update │ │ │ │ endIndex of last destination value to update │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 205 of file stencilTable.h.

│ │ │ │ +

Definition at line 205 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ UpdateValues() [2/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1054,15 +1054,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 217 of file stencilTable.h.

│ │ │ │ +

Definition at line 217 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ UpdateValues() [3/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1120,15 +1120,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 210 of file stencilTable.h.

│ │ │ │ +

Definition at line 210 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ UpdateValues() [4/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1186,15 +1186,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 221 of file stencilTable.h.

│ │ │ │ +

Definition at line 221 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Friends And Related Symbol Documentation

│ │ │ │ │ │ │ │

◆ Far::PatchTableBuilder

│ │ │ │ │ │ │ │ @@ -1213,15 +1213,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ friend │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 261 of file stencilTable.h.

│ │ │ │ +

Definition at line 261 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ StencilTableFactoryReal< REAL >

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1239,15 +1239,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ friend │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 256 of file stencilTable.h.

│ │ │ │ +

Definition at line 256 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Member Data Documentation

│ │ │ │ │ │ │ │

◆ _indices

│ │ │ │ │ │ │ │ @@ -1266,15 +1266,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 267 of file stencilTable.h.

│ │ │ │ +

Definition at line 267 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _numControlVertices

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1292,15 +1292,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 263 of file stencilTable.h.

│ │ │ │ +

Definition at line 263 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _offsets

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1318,15 +1318,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 266 of file stencilTable.h.

│ │ │ │ +

Definition at line 266 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _sizes

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1344,15 +1344,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 265 of file stencilTable.h.

│ │ │ │ +

Definition at line 265 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _weights

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1370,20 +1370,20 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 268 of file stencilTable.h.

│ │ │ │ +

Definition at line 268 of file stencilTable.h.

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

Stencil table class wrapping the template for compatibility. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <stencilTable.h>

│ │ │ │ +

#include <stencilTable.h>

│ │ │ │
│ │ │ │ Inheritance diagram for StencilTable:
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ StencilTableReal< float > │ │ │ │ @@ -208,15 +208,15 @@ │ │ │ │   │ │ │ │ std::vector< float > _weights │ │ │ │   │ │ │ │ │ │ │ │

Detailed Description

│ │ │ │

Stencil table class wrapping the template for compatibility.

│ │ │ │ │ │ │ │ -

Definition at line 273 of file stencilTable.h.

│ │ │ │ +

Definition at line 273 of file stencilTable.h.

│ │ │ │

Member Typedef Documentation

│ │ │ │ │ │ │ │

◆ BaseTable

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -230,15 +230,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ protected
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 275 of file stencilTable.h.

│ │ │ │ +

Definition at line 275 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ StencilTable() [1/3]

│ │ │ │ │ │ │ │ @@ -258,15 +258,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 286 of file stencilTable.h.

│ │ │ │ +

Definition at line 286 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ StencilTable() [2/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -286,15 +286,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 287 of file stencilTable.h.

│ │ │ │ +

Definition at line 287 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ StencilTable() [3/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -354,15 +354,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 288 of file stencilTable.h.

│ │ │ │ +

Definition at line 288 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Member Function Documentation

│ │ │ │ │ │ │ │

◆ GetStencil()

│ │ │ │ │ │ │ │ @@ -383,15 +383,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 278 of file stencilTable.h.

│ │ │ │ +

Definition at line 278 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ operator[]()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -411,20 +411,20 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 281 of file stencilTable.h.

│ │ │ │ +

Definition at line 281 of file stencilTable.h.

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

Limit point stencil descriptor. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <stencilTable.h>

│ │ │ │ +

#include <stencilTable.h>

│ │ │ │
│ │ │ │ Inheritance diagram for LimitStencilReal< REAL >:
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ StencilReal< REAL > │ │ │ │ @@ -179,15 +179,15 @@ │ │ │ │ REAL * _weights │ │ │ │   │ │ │ │ │ │ │ │

Detailed Description

│ │ │ │
template<typename REAL>
│ │ │ │ class OpenSubdiv::OPENSUBDIV_VERSION::Far::LimitStencilReal< REAL >

Limit point stencil descriptor.

│ │ │ │ │ │ │ │ -

Definition at line 303 of file stencilTable.h.

│ │ │ │ +

Definition at line 303 of file stencilTable.h.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ LimitStencilReal()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ @@ -268,15 +268,15 @@ │ │ │ │ duuWeightsTable pointer to the 'uu' derivative weights │ │ │ │ duvWeightsTable pointer to the 'uv' derivative weights │ │ │ │ dvvWeightsTable pointer to the 'vv' derivative weights │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 324 of file stencilTable.h.

│ │ │ │ +

Definition at line 324 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

Member Function Documentation

│ │ │ │ │ │ │ │

◆ GetDuuWeights()

│ │ │ │ │ │ │ │ @@ -300,15 +300,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the uu derivative weights.

│ │ │ │ │ │ │ │ -

Definition at line 351 of file stencilTable.h.

│ │ │ │ +

Definition at line 351 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ GetDuvWeights()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -331,15 +331,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the uv derivative weights.

│ │ │ │ │ │ │ │ -

Definition at line 356 of file stencilTable.h.

│ │ │ │ +

Definition at line 356 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ GetDuWeights()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -362,15 +362,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the u derivative weights.

│ │ │ │ │ │ │ │ -

Definition at line 341 of file stencilTable.h.

│ │ │ │ +

Definition at line 341 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ GetDvvWeights()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -393,15 +393,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the vv derivative weights.

│ │ │ │ │ │ │ │ -

Definition at line 361 of file stencilTable.h.

│ │ │ │ +

Definition at line 361 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetDvWeights()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -424,15 +424,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the v derivative weights.

│ │ │ │ │ │ │ │ -

Definition at line 346 of file stencilTable.h.

│ │ │ │ +

Definition at line 346 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ Next()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -455,15 +455,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Advance to the next stencil in the table.

│ │ │ │ │ │ │ │ -

Definition at line 366 of file stencilTable.h.

│ │ │ │ +

Definition at line 366 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Friends And Related Symbol Documentation

│ │ │ │ │ │ │ │

◆ LimitStencilTableFactoryReal< REAL >

│ │ │ │ │ │ │ │ @@ -482,15 +482,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ friend │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 366 of file stencilTable.h.

│ │ │ │ +

Definition at line 366 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ StencilTableFactoryReal< REAL >

│ │ │ │ │ │ │ │
│ │ │ │ @@ -508,20 +508,20 @@ │ │ │ │ │ │ │ │ │ │ │ │ friend │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 366 of file stencilTable.h.

│ │ │ │ +

Definition at line 366 of file stencilTable.h.

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

Limit point stencil class wrapping the template for compatibility. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <stencilTable.h>

│ │ │ │ +

#include <stencilTable.h>

│ │ │ │
│ │ │ │ Inheritance diagram for LimitStencil:
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ LimitStencilReal< float > │ │ │ │ @@ -182,15 +182,15 @@ │ │ │ │   │ │ │ │ REAL * _weights │ │ │ │   │ │ │ │ │ │ │ │

Detailed Description

│ │ │ │

Limit point stencil class wrapping the template for compatibility.

│ │ │ │ │ │ │ │ -

Definition at line 392 of file stencilTable.h.

│ │ │ │ +

Definition at line 392 of file stencilTable.h.

│ │ │ │

Member Typedef Documentation

│ │ │ │ │ │ │ │

◆ BaseStencil

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -204,15 +204,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ protected
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 394 of file stencilTable.h.

│ │ │ │ +

Definition at line 394 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ LimitStencil() [1/2]

│ │ │ │ │ │ │ │ @@ -233,15 +233,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 397 of file stencilTable.h.

│ │ │ │ +

Definition at line 397 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ LimitStencil() [2/2]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -307,20 +307,20 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 398 of file stencilTable.h.

│ │ │ │ +

Definition at line 398 of file stencilTable.h.

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

Table of limit subdivision stencils. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <stencilTable.h>

│ │ │ │ +

#include <stencilTable.h>

│ │ │ │
│ │ │ │ Inheritance diagram for LimitStencilTableReal< REAL >:
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ StencilTableReal< REAL > │ │ │ │ @@ -257,15 +257,15 @@ │ │ │ │ std::vector< REAL > _weights │ │ │ │   │ │ │ │ │ │ │ │

Detailed Description

│ │ │ │
template<typename REAL>
│ │ │ │ class OpenSubdiv::OPENSUBDIV_VERSION::Far::LimitStencilTableReal< REAL >

Table of limit subdivision stencils.

│ │ │ │ │ │ │ │ -

Definition at line 409 of file stencilTable.h.

│ │ │ │ +

Definition at line 409 of file stencilTable.h.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ LimitStencilTableReal()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ @@ -406,15 +406,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the 'uu' derivative stencil interpolation weights.

│ │ │ │ │ │ │ │ -

Definition at line 444 of file stencilTable.h.

│ │ │ │ +

Definition at line 444 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ GetDuvWeights()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -437,15 +437,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the 'uv' derivative stencil interpolation weights.

│ │ │ │ │ │ │ │ -

Definition at line 449 of file stencilTable.h.

│ │ │ │ +

Definition at line 449 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ GetDuWeights()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -468,15 +468,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the 'u' derivative stencil interpolation weights.

│ │ │ │ │ │ │ │ -

Definition at line 434 of file stencilTable.h.

│ │ │ │ +

Definition at line 434 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ GetDvvWeights()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -499,15 +499,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the 'vv' derivative stencil interpolation weights.

│ │ │ │ │ │ │ │ -

Definition at line 454 of file stencilTable.h.

│ │ │ │ +

Definition at line 454 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ GetDvWeights()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -530,15 +530,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the 'v' derivative stencil interpolation weights.

│ │ │ │ │ │ │ │ -

Definition at line 439 of file stencilTable.h.

│ │ │ │ +

Definition at line 439 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ GetLimitStencil()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -562,15 +562,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns a LimitStencil at index i in the table.

│ │ │ │ │ │ │ │ -

Definition at line 749 of file stencilTable.h.

│ │ │ │ +

Definition at line 749 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ operator[]()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -594,15 +594,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the limit stencil at index i in the table.

│ │ │ │ │ │ │ │ -

Definition at line 782 of file stencilTable.h.

│ │ │ │ +

Definition at line 782 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ Update2ndDerivs() [1/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -674,15 +674,15 @@ │ │ │ │ vvderivsDestination buffer for the interpolated 'vv' derivative primvar data │ │ │ │ startIndex of first destination derivative to update │ │ │ │ endIndex of last destination derivative to update │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 528 of file stencilTable.h.

│ │ │ │ +

Definition at line 528 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ Update2ndDerivs() [2/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -740,15 +740,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 548 of file stencilTable.h.

│ │ │ │ +

Definition at line 548 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ Update2ndDerivs() [3/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -818,15 +818,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 538 of file stencilTable.h.

│ │ │ │ +

Definition at line 538 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ Update2ndDerivs() [4/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -896,15 +896,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 556 of file stencilTable.h.

│ │ │ │ +

Definition at line 556 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ UpdateDerivs() [1/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -969,15 +969,15 @@ │ │ │ │ vderivsDestination buffer for the interpolated 'v' derivative primvar data │ │ │ │ startIndex of first destination derivative to update │ │ │ │ endIndex of last destination derivative to update │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 476 of file stencilTable.h.

│ │ │ │ +

Definition at line 476 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ UpdateDerivs() [2/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1029,15 +1029,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 493 of file stencilTable.h.

│ │ │ │ +

Definition at line 493 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ UpdateDerivs() [3/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1101,15 +1101,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 484 of file stencilTable.h.

│ │ │ │ +

Definition at line 484 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ UpdateDerivs() [4/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1173,15 +1173,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 500 of file stencilTable.h.

│ │ │ │ +

Definition at line 500 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Friends And Related Symbol Documentation

│ │ │ │ │ │ │ │

◆ LimitStencilTableFactoryReal< REAL >

│ │ │ │ │ │ │ │ @@ -1200,20 +1200,20 @@ │ │ │ │ │ │ │ │ │ │ │ │ friend │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 565 of file stencilTable.h.

│ │ │ │ +

Definition at line 565 of file stencilTable.h.

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

Limit stencil table class wrapping the template for compatibility. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <stencilTable.h>

│ │ │ │ +

#include <stencilTable.h>

│ │ │ │
│ │ │ │ Inheritance diagram for LimitStencilTable:
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ LimitStencilTableReal< float > │ │ │ │ @@ -257,15 +257,15 @@ │ │ │ │   │ │ │ │ std::vector< REAL > _weights │ │ │ │   │ │ │ │ │ │ │ │

Detailed Description

│ │ │ │

Limit stencil table class wrapping the template for compatibility.

│ │ │ │ │ │ │ │ -

Definition at line 583 of file stencilTable.h.

│ │ │ │ +

Definition at line 583 of file stencilTable.h.

│ │ │ │

Member Typedef Documentation

│ │ │ │ │ │ │ │

◆ BaseTable

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -279,15 +279,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ protected
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 585 of file stencilTable.h.

│ │ │ │ +

Definition at line 585 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ LimitStencilTable()

│ │ │ │ │ │ │ │ @@ -378,15 +378,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 596 of file stencilTable.h.

│ │ │ │ +

Definition at line 596 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

Member Function Documentation

│ │ │ │ │ │ │ │

◆ GetLimitStencil()

│ │ │ │ │ │ │ │ @@ -407,15 +407,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 588 of file stencilTable.h.

│ │ │ │ +

Definition at line 588 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ operator[]()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -435,20 +435,20 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 591 of file stencilTable.h.

│ │ │ │ +

Definition at line 591 of file stencilTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
StencilTableFactoryReal< REAL >::Options Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <stencilTableFactory.h>

│ │ │ │ +

#include <stencilTableFactory.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

 Options ()
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ @@ -127,15 +127,15 @@ │ │ │ │

 
unsigned int fvarChannel
 
│ │ │ │

Detailed Description

│ │ │ │
template<typename REAL>
│ │ │ │ struct OpenSubdiv::OPENSUBDIV_VERSION::Far::StencilTableFactoryReal< REAL >::Options
│ │ │ │ -

Definition at line 61 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 61 of file stencilTableFactory.h.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ Options()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ @@ -154,15 +154,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 63 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 63 of file stencilTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

Member Data Documentation

│ │ │ │ │ │ │ │

◆ factorizeIntermediateLevels

│ │ │ │ │ │ │ │ @@ -174,15 +174,15 @@ │ │ │ │ │ │ │ │ unsigned int factorizeIntermediateLevels │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │

accumulate stencil weights from control vertices or from the stencils of the previous level

│ │ │ │ │ │ │ │ -

Definition at line 75 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 75 of file stencilTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ fvarChannel

│ │ │ │ │ │ │ │
│ │ │ │ @@ -193,15 +193,15 @@ │ │ │ │ │ │ │ │ unsigned int fvarChannel │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │

face-varying channel to use when generating face-varying stencils

│ │ │ │ │ │ │ │ -

Definition at line 79 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 79 of file stencilTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ generateControlVerts

│ │ │ │ │ │ │ │
│ │ │ │ @@ -213,15 +213,15 @@ │ │ │ │ unsigned int generateControlVerts │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

generate stencils for control-vertices

│ │ │ │ │ │ │ │ -

Definition at line 73 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 73 of file stencilTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ generateIntermediateLevels

│ │ │ │ │ │ │ │
│ │ │ │ @@ -233,15 +233,15 @@ │ │ │ │ unsigned int generateIntermediateLevels │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

vertices at all levels or highest only

│ │ │ │ │ │ │ │ -

Definition at line 74 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 74 of file stencilTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ generateOffsets

│ │ │ │ │ │ │ │
│ │ │ │ @@ -253,15 +253,15 @@ │ │ │ │ unsigned int generateOffsets │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

populate optional "_offsets" field

│ │ │ │ │ │ │ │ -

Definition at line 72 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 72 of file stencilTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ interpolationMode

│ │ │ │ │ │ │ │
│ │ │ │ @@ -273,15 +273,15 @@ │ │ │ │ unsigned int interpolationMode │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

interpolation mode

│ │ │ │ │ │ │ │ -

Definition at line 71 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 71 of file stencilTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ maxLevel

│ │ │ │ │ │ │ │
│ │ │ │ @@ -293,20 +293,20 @@ │ │ │ │ unsigned int maxLevel │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

generate stencils up to 'maxLevel'

│ │ │ │ │ │ │ │ -

Definition at line 78 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 78 of file stencilTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
LimitStencilTableFactoryReal< REAL >::Options Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <stencilTableFactory.h>

│ │ │ │ +

#include <stencilTableFactory.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

 Options ()
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ @@ -120,15 +120,15 @@ │ │ │ │

unsigned int fvarChannel
 face-varying channel to use
 
│ │ │ │

Detailed Description

│ │ │ │
template<typename REAL>
│ │ │ │ struct OpenSubdiv::OPENSUBDIV_VERSION::Far::LimitStencilTableFactoryReal< REAL >::Options
│ │ │ │ -

Definition at line 219 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 219 of file stencilTableFactory.h.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ Options()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ @@ -147,15 +147,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 221 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 221 of file stencilTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

Member Data Documentation

│ │ │ │ │ │ │ │

◆ fvarChannel

│ │ │ │ │ │ │ │ @@ -168,15 +168,15 @@ │ │ │ │ unsigned int fvarChannel │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

face-varying channel to use

│ │ │ │ │ │ │ │ -

Definition at line 229 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 229 of file stencilTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ generate1stDerivatives

│ │ │ │ │ │ │ │
│ │ │ │ @@ -188,15 +188,15 @@ │ │ │ │ unsigned int generate1stDerivatives │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Generate weights for 1st derivatives.

│ │ │ │ │ │ │ │ -

Definition at line 227 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 227 of file stencilTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ generate2ndDerivatives

│ │ │ │ │ │ │ │
│ │ │ │ @@ -208,15 +208,15 @@ │ │ │ │ unsigned int generate2ndDerivatives │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Generate weights for 2nd derivatives.

│ │ │ │ │ │ │ │ -

Definition at line 228 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 228 of file stencilTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ interpolationMode

│ │ │ │ │ │ │ │
│ │ │ │ @@ -228,20 +228,20 @@ │ │ │ │ unsigned int interpolationMode │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

interpolation mode

│ │ │ │ │ │ │ │ -

Definition at line 226 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 226 of file stencilTableFactory.h.

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

Descriptor for limit surface locations. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <stencilTableFactory.h>

│ │ │ │ +

#include <stencilTableFactory.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

 LocationArray ()
 
│ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ @@ -124,15 +124,15 @@ │ │ │ │

 array of v coordinates
 
│ │ │ │

Detailed Description

│ │ │ │
template<typename REAL>
│ │ │ │ struct OpenSubdiv::OPENSUBDIV_VERSION::Far::LimitStencilTableFactoryReal< REAL >::LocationArray

Descriptor for limit surface locations.

│ │ │ │ │ │ │ │ -

Definition at line 233 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 233 of file stencilTableFactory.h.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ LocationArray()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ @@ -151,15 +151,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 235 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 235 of file stencilTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

Member Data Documentation

│ │ │ │ │ │ │ │

◆ numLocations

│ │ │ │ │ │ │ │ @@ -172,15 +172,15 @@ │ │ │ │ int numLocations │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

number of (u,v) coordinates in the array

│ │ │ │ │ │ │ │ -

Definition at line 238 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 238 of file stencilTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ ptexIdx

│ │ │ │ │ │ │ │
│ │ │ │ @@ -192,15 +192,15 @@ │ │ │ │ int ptexIdx │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

ptex face index

│ │ │ │ │ │ │ │ -

Definition at line 237 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 237 of file stencilTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ s

│ │ │ │ │ │ │ │
│ │ │ │ @@ -212,15 +212,15 @@ │ │ │ │ REAL const* s │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

array of u coordinates

│ │ │ │ │ │ │ │ -

Definition at line 240 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 240 of file stencilTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ t

│ │ │ │ │ │ │ │
│ │ │ │ @@ -232,20 +232,20 @@ │ │ │ │ REAL const * t │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

array of v coordinates

│ │ │ │ │ │ │ │ -

Definition at line 241 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 241 of file stencilTableFactory.h.

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

Stencil table factory class wrapping the template for compatibility. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <stencilTableFactory.h>

│ │ │ │ +

#include <stencilTableFactory.h>

│ │ │ │
│ │ │ │ Inheritance diagram for StencilTableFactory:
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ StencilTableFactoryReal< float > │ │ │ │ @@ -146,15 +146,15 @@ │ │ │ │ - Public Types inherited from StencilTableFactoryReal< float > │ │ │ │ enum  Mode │ │ │ │   │ │ │ │ │ │ │ │

Detailed Description

│ │ │ │

Stencil table factory class wrapping the template for compatibility.

│ │ │ │ │ │ │ │ -

Definition at line 287 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 287 of file stencilTableFactory.h.

│ │ │ │

Member Function Documentation

│ │ │ │ │ │ │ │

◆ AppendLocalPointStencilTable()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -194,15 +194,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ inlinestatic
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 308 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 308 of file stencilTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ AppendLocalPointStencilTableFaceVarying()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -250,15 +250,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlinestatic │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 334 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 334 of file stencilTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ AppendLocalPointStencilTableVarying()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -300,15 +300,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlinestatic │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 321 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 321 of file stencilTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ Create() [1/2]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -338,15 +338,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlinestatic │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 300 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 300 of file stencilTableFactory.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ Create() [2/2]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -376,20 +376,20 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlinestatic │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 293 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 293 of file stencilTableFactory.h.

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

Stencil table factory class wrapping the template for compatibility. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <stencilTableFactory.h>

│ │ │ │ +

#include <stencilTableFactory.h>

│ │ │ │
│ │ │ │ Inheritance diagram for LimitStencilTableFactory:
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ LimitStencilTableFactoryReal< float > │ │ │ │ @@ -128,15 +128,15 @@ │ │ │ │   │ │ │ │ typedef std::vector< LocationArray > LocationArrayVec │ │ │ │   │ │ │ │ │ │ │ │

Detailed Description

│ │ │ │

Stencil table factory class wrapping the template for compatibility.

│ │ │ │ │ │ │ │ -

Definition at line 354 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 354 of file stencilTableFactory.h.

│ │ │ │

Member Function Documentation

│ │ │ │ │ │ │ │

◆ Create()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -182,20 +182,20 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ inlinestatic
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 360 of file stencilTableFactory.h.

│ │ │ │ +

Definition at line 360 of file stencilTableFactory.h.

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

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

│ │ │ │ │ │ │ │ -

#include <topologyDescriptor.h>

│ │ │ │ +

#include <topologyDescriptor.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  FVarChannel
 
│ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ @@ -148,15 +148,15 @@ │ │ │ │

FVarChannel const * fvarChannels
 
│ │ │ │

Detailed Description

│ │ │ │

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

│ │ │ │

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.

│ │ │ │ │ │ │ │ -

Definition at line 49 of file topologyDescriptor.h.

│ │ │ │ +

Definition at line 49 of file topologyDescriptor.h.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ TopologyDescriptor()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -180,15 +180,15 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
Index const* cornerVertexIndices
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 62 of file topologyDescriptor.h.

│ │ │ │ +

Definition at line 62 of file topologyDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ cornerWeights

│ │ │ │ │ │ │ │
│ │ │ │ @@ -196,15 +196,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
float const* cornerWeights
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 63 of file topologyDescriptor.h.

│ │ │ │ +

Definition at line 63 of file topologyDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ creaseVertexIndexPairs

│ │ │ │ │ │ │ │
│ │ │ │ @@ -212,15 +212,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
Index const* creaseVertexIndexPairs
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 58 of file topologyDescriptor.h.

│ │ │ │ +

Definition at line 58 of file topologyDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ creaseWeights

│ │ │ │ │ │ │ │
│ │ │ │ @@ -228,15 +228,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
float const* creaseWeights
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 59 of file topologyDescriptor.h.

│ │ │ │ +

Definition at line 59 of file topologyDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ fvarChannels

│ │ │ │ │ │ │ │
│ │ │ │ @@ -244,15 +244,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
FVarChannel const* fvarChannels
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 82 of file topologyDescriptor.h.

│ │ │ │ +

Definition at line 82 of file topologyDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ holeIndices

│ │ │ │ │ │ │ │
│ │ │ │ @@ -260,15 +260,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
Index const* holeIndices
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 66 of file topologyDescriptor.h.

│ │ │ │ +

Definition at line 66 of file topologyDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ isLeftHanded

│ │ │ │ │ │ │ │
│ │ │ │ @@ -276,15 +276,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
bool isLeftHanded
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 68 of file topologyDescriptor.h.

│ │ │ │ +

Definition at line 68 of file topologyDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ numCorners

│ │ │ │ │ │ │ │
│ │ │ │ @@ -292,15 +292,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
int numCorners
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 61 of file topologyDescriptor.h.

│ │ │ │ +

Definition at line 61 of file topologyDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ numCreases

│ │ │ │ │ │ │ │
│ │ │ │ @@ -308,15 +308,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
int numCreases
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 57 of file topologyDescriptor.h.

│ │ │ │ +

Definition at line 57 of file topologyDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ numFaces

│ │ │ │ │ │ │ │
│ │ │ │ @@ -324,15 +324,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
int numFaces
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 52 of file topologyDescriptor.h.

│ │ │ │ +

Definition at line 52 of file topologyDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ numFVarChannels

│ │ │ │ │ │ │ │
│ │ │ │ @@ -340,15 +340,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
int numFVarChannels
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 81 of file topologyDescriptor.h.

│ │ │ │ +

Definition at line 81 of file topologyDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ numHoles

│ │ │ │ │ │ │ │
│ │ │ │ @@ -356,15 +356,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
int numHoles
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 65 of file topologyDescriptor.h.

│ │ │ │ +

Definition at line 65 of file topologyDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ numVertices

│ │ │ │ │ │ │ │
│ │ │ │ @@ -372,15 +372,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
int numVertices
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 51 of file topologyDescriptor.h.

│ │ │ │ +

Definition at line 51 of file topologyDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ numVertsPerFace

│ │ │ │ │ │ │ │
│ │ │ │ @@ -388,15 +388,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
int const* numVertsPerFace
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 54 of file topologyDescriptor.h.

│ │ │ │ +

Definition at line 54 of file topologyDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ vertIndicesPerFace

│ │ │ │ │ │ │ │
│ │ │ │ @@ -404,20 +404,20 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
Index const* vertIndicesPerFace
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 55 of file topologyDescriptor.h.

│ │ │ │ +

Definition at line 55 of file topologyDescriptor.h.

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

#include <topologyDescriptor.h>

│ │ │ │ +

#include <topologyDescriptor.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

 FVarChannel ()
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ @@ -111,15 +111,15 @@ │ │ │ │

int numValues
 
Index const * valueIndices
 
│ │ │ │

Detailed Description

│ │ │ │
│ │ │ │ -

Definition at line 73 of file topologyDescriptor.h.

│ │ │ │ +

Definition at line 73 of file topologyDescriptor.h.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ FVarChannel()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -136,15 +136,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ inline
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 78 of file topologyDescriptor.h.

│ │ │ │ +

Definition at line 78 of file topologyDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

Member Data Documentation

│ │ │ │ │ │ │ │

◆ numValues

│ │ │ │ │ │ │ │ @@ -153,15 +153,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
int numValues
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 75 of file topologyDescriptor.h.

│ │ │ │ +

Definition at line 75 of file topologyDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ valueIndices

│ │ │ │ │ │ │ │
│ │ │ │ @@ -169,20 +169,20 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
Index const* valueIndices
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 76 of file topologyDescriptor.h.

│ │ │ │ +

Definition at line 76 of file topologyDescriptor.h.

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

BufferDescriptor is a struct which describes buffer elements in interleaved data buffers. Almost all Osd Evaluator APIs take BufferDescriptors along with device-specific buffer objects. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <bufferDescriptor.h>

│ │ │ │ +

#include <bufferDescriptor.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -143,15 +143,15 @@ │ │ │ │

Detailed Description

│ │ │ │

BufferDescriptor is a struct which describes buffer elements in interleaved data buffers. Almost all Osd Evaluator APIs take BufferDescriptors along with device-specific buffer objects.

│ │ │ │

The offset of BufferDescriptor can also be used to express a batching offset if the data buffer is combined across multiple objects together.

│ │ │ │
    │ │ │ │
  • Note that each element has the same data type (float)
  • │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 61 of file bufferDescriptor.h.

│ │ │ │ +

Definition at line 61 of file bufferDescriptor.h.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ BufferDescriptor() [1/2]

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

│ │ │ │ Public Member Functions

 BufferDescriptor ()
 Default Constructor.
 
 BufferDescriptor (int o, int l, int s)
│ │ │ │ @@ -170,15 +170,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

Default Constructor.

│ │ │ │ │ │ │ │ -

Definition at line 64 of file bufferDescriptor.h.

│ │ │ │ +

Definition at line 64 of file bufferDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ BufferDescriptor() [2/2]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -216,15 +216,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Constructor.

│ │ │ │ │ │ │ │ -

Definition at line 67 of file bufferDescriptor.h.

│ │ │ │ +

Definition at line 67 of file bufferDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Member Function Documentation

│ │ │ │ │ │ │ │

◆ GetLocalOffset()

│ │ │ │ │ │ │ │ @@ -246,15 +246,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the relative offset within a stride.

│ │ │ │ │ │ │ │ -

Definition at line 70 of file bufferDescriptor.h.

│ │ │ │ +

Definition at line 70 of file bufferDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ IsValid()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -275,15 +275,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

True if the descriptor values are internally consistent.

│ │ │ │ │ │ │ │ -

Definition at line 75 of file bufferDescriptor.h.

│ │ │ │ +

Definition at line 75 of file bufferDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ operator!=()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -305,15 +305,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

True if the descriptors are not identical.

│ │ │ │ │ │ │ │ -

Definition at line 93 of file bufferDescriptor.h.

│ │ │ │ +

Definition at line 93 of file bufferDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ operator==()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -335,15 +335,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

True if the descriptors are identical.

│ │ │ │ │ │ │ │ -

Definition at line 86 of file bufferDescriptor.h.

│ │ │ │ +

Definition at line 86 of file bufferDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ Reset()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -364,15 +364,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Resets the descriptor to default.

│ │ │ │ │ │ │ │ -

Definition at line 81 of file bufferDescriptor.h.

│ │ │ │ +

Definition at line 81 of file bufferDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Member Data Documentation

│ │ │ │ │ │ │ │

◆ length

│ │ │ │ │ │ │ │ @@ -383,15 +383,15 @@ │ │ │ │ int length │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

number or length of the data

│ │ │ │ │ │ │ │ -

Definition at line 100 of file bufferDescriptor.h.

│ │ │ │ +

Definition at line 100 of file bufferDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ offset

│ │ │ │ │ │ │ │
│ │ │ │ @@ -401,15 +401,15 @@ │ │ │ │ int offset │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

offset to desired element data

│ │ │ │ │ │ │ │ -

Definition at line 98 of file bufferDescriptor.h.

│ │ │ │ +

Definition at line 98 of file bufferDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ stride

│ │ │ │ │ │ │ │
│ │ │ │ @@ -419,20 +419,20 @@ │ │ │ │ int stride │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

stride to the next element

│ │ │ │ │ │ │ │ -

Definition at line 102 of file bufferDescriptor.h.

│ │ │ │ +

Definition at line 102 of file bufferDescriptor.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <cpuEvaluator.h>

│ │ │ │ +

#include <cpuEvaluator.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -170,15 +170,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ 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 CpuEvaluator *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 *)
 synchronize all asynchronous computation invoked on this device.
 
│ │ │ │

Detailed Description

│ │ │ │
│ │ │ │ -

Definition at line 39 of file cpuEvaluator.h.

│ │ │ │ +

Definition at line 39 of file cpuEvaluator.h.

│ │ │ │

Member Function Documentation

│ │ │ │ │ │ │ │

◆ EvalPatches() [1/6]

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -716,15 +716,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
patchTableCpuPatchTable or equivalent XXX: currently Far::PatchTable can't be used due to interface mismatch
instancenot used in the cpu evaluator
deviceContextnot used in the cpu evaluator
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 607 of file cpuEvaluator.h.

│ │ │ │ +

Definition at line 607 of file cpuEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ EvalPatches() [5/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -842,15 +842,15 @@ │ │ │ │ patchTableCpuPatchTable or equivalent XXX: currently Far::PatchTable can't be used due to interface mismatch │ │ │ │ instancenot used in the cpu evaluator │ │ │ │ deviceContextnot used in the cpu evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 517 of file cpuEvaluator.h.

│ │ │ │ +

Definition at line 517 of file cpuEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ EvalPatches() [6/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -943,15 +943,15 @@ │ │ │ │ patchTableCpuPatchTable or equivalent XXX: currently Far::PatchTable can't be used due to interface mismatch │ │ │ │ instancenot used in the cpu evaluator │ │ │ │ deviceContextnot used in the cpu evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 454 of file cpuEvaluator.h.

│ │ │ │ +

Definition at line 454 of file cpuEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesFaceVarying() [1/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1118,15 +1118,15 @@ │ │ │ │ fvarChannelface-varying channel │ │ │ │ instancenot used in the cpu evaluator │ │ │ │ deviceContextnot used in the cpu evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1188 of file cpuEvaluator.h.

│ │ │ │ +

Definition at line 1188 of file cpuEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesFaceVarying() [2/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1251,15 +1251,15 @@ │ │ │ │ fvarChannelface-varying channel │ │ │ │ instancenot used in the cpu evaluator │ │ │ │ deviceContextnot used in the cpu evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1100 of file cpuEvaluator.h.

│ │ │ │ +

Definition at line 1100 of file cpuEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesFaceVarying() [3/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1356,15 +1356,15 @@ │ │ │ │ fvarChannelface-varying channel │ │ │ │ instancenot used in the cpu evaluator │ │ │ │ deviceContextnot used in the cpu evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1034 of file cpuEvaluator.h.

│ │ │ │ +

Definition at line 1034 of file cpuEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesVarying() [1/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1524,15 +1524,15 @@ │ │ │ │ patchTableCpuPatchTable or equivalent XXX: currently Far::PatchTable can't be used due to interface mismatch │ │ │ │ instancenot used in the cpu evaluator │ │ │ │ deviceContextnot used in the cpu evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 971 of file cpuEvaluator.h.

│ │ │ │ +

Definition at line 971 of file cpuEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesVarying() [2/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1650,15 +1650,15 @@ │ │ │ │ patchTableCpuPatchTable or equivalent XXX: currently Far::PatchTable can't be used due to interface mismatch │ │ │ │ instancenot used in the cpu evaluator │ │ │ │ deviceContextnot used in the cpu evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 886 of file cpuEvaluator.h.

│ │ │ │ +

Definition at line 886 of file cpuEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesVarying() [3/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1748,15 +1748,15 @@ │ │ │ │ patchTableCpuPatchTable or equivalent XXX: currently Far::PatchTable can't be used due to interface mismatch │ │ │ │ instancenot used in the cpu evaluator │ │ │ │ deviceContextnot used in the cpu evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 823 of file cpuEvaluator.h.

│ │ │ │ +

Definition at line 823 of file cpuEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalStencils() [1/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2352,15 +2352,15 @@ │ │ │ │ stencilTableFar::StencilTable or equivalent │ │ │ │ instancenot used in the cpu kernel (declared as a typed pointer to prevent undesirable template resolution) │ │ │ │ deviceContextnot used in the cpu kernel │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 303 of file cpuEvaluator.h.

│ │ │ │ +

Definition at line 303 of file cpuEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalStencils() [5/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2464,15 +2464,15 @@ │ │ │ │ stencilTableFar::StencilTable or equivalent │ │ │ │ instancenot used in the cpu kernel (declared as a typed pointer to prevent undesirable template resolution) │ │ │ │ deviceContextnot used in the cpu kernel │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 168 of file cpuEvaluator.h.

│ │ │ │ +

Definition at line 168 of file cpuEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalStencils() [6/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2551,15 +2551,15 @@ │ │ │ │ stencilTableFar::StencilTable or equivalent │ │ │ │ instancenot used in the cpu kernel (declared as a typed pointer to prevent undesirable template resolution) │ │ │ │ deviceContextnot used in the cpu kernel │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 72 of file cpuEvaluator.h.

│ │ │ │ +

Definition at line 72 of file cpuEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ Synchronize()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2584,20 +2584,20 @@ │ │ │ │
│ │ │ │ │ │ │ │

synchronize all asynchronous computation invoked on this device.

│ │ │ │
│ │ │ │

Other methods

│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 1227 of file cpuEvaluator.h.

│ │ │ │ +

Definition at line 1227 of file cpuEvaluator.h.

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

Cpu patch table. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <cpuPatchTable.h>

│ │ │ │ +

#include <cpuPatchTable.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -168,15 +168,15 @@ │ │ │ │

│ │ │ │ Public Member Functions

 CpuPatchTable (const Far::PatchTable *patchTable)
 
 ~CpuPatchTable ()
 
│ │ │ │

Detailed Description

│ │ │ │

Cpu patch table.

│ │ │ │

XXX: We can use just Far::PatchTable for typical CpuEval use cases.

│ │ │ │

Currently this class exists because of the template resolution for the CpuEvaluator's generic interface functions (glEvalLimit example uses), and device-specific patch tables such as GLPatchTables internally use as a staging buffer to splice patcharray and interleave sharpnesses.

│ │ │ │

Ideally Far::PatchTables should have the same data representation and accessors so that we don't have to copy data unnecessarily.

│ │ │ │ │ │ │ │ -

Definition at line 59 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 59 of file cpuPatchTable.h.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ CpuPatchTable()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -219,15 +219,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ inline
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 68 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 68 of file cpuPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

Member Function Documentation

│ │ │ │ │ │ │ │

◆ Create()

│ │ │ │ │ │ │ │ @@ -258,15 +258,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlinestatic │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 61 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 61 of file cpuPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetFVarPatchArrayBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -286,15 +286,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 109 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 109 of file cpuPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetFVarPatchIndexBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -314,15 +314,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 112 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 112 of file cpuPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetFVarPatchIndexSize()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -342,15 +342,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 115 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 115 of file cpuPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetFVarPatchParamBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -370,15 +370,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 118 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 118 of file cpuPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetFVarPatchParamSize()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -398,15 +398,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 121 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 121 of file cpuPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetNumFVarChannels()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -425,15 +425,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 106 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 106 of file cpuPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetNumPatchArrays()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -452,15 +452,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 80 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 80 of file cpuPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetPatchArrayBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -479,15 +479,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 70 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 70 of file cpuPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetPatchIndexBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -506,15 +506,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 73 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 73 of file cpuPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetPatchIndexSize()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -533,15 +533,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 83 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 83 of file cpuPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetPatchParamBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -560,15 +560,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 76 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 76 of file cpuPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetPatchParamSize()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -587,15 +587,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 86 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 86 of file cpuPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetVaryingPatchArrayBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -614,15 +614,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 90 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 90 of file cpuPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetVaryingPatchIndexBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -641,15 +641,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 96 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 96 of file cpuPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetVaryingPatchIndexSize()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -668,15 +668,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 102 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 102 of file cpuPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Member Data Documentation

│ │ │ │ │ │ │ │

◆ _fvarIndexBuffers

│ │ │ │ │ │ │ │ @@ -693,15 +693,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 134 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 134 of file cpuPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _fvarParamBuffers

│ │ │ │ │ │ │ │
│ │ │ │ @@ -717,15 +717,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 135 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 135 of file cpuPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _fvarPatchArrays

│ │ │ │ │ │ │ │
│ │ │ │ @@ -741,15 +741,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 133 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 133 of file cpuPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _indexBuffer

│ │ │ │ │ │ │ │
│ │ │ │ @@ -765,15 +765,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 127 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 127 of file cpuPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _patchArrays

│ │ │ │ │ │ │ │
│ │ │ │ @@ -789,15 +789,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 126 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 126 of file cpuPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _patchParamBuffer

│ │ │ │ │ │ │ │
│ │ │ │ @@ -813,15 +813,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 128 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 128 of file cpuPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _varyingIndexBuffer

│ │ │ │ │ │ │ │
│ │ │ │ @@ -837,15 +837,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 131 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 131 of file cpuPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _varyingPatchArrays

│ │ │ │ │ │ │ │
│ │ │ │ @@ -861,20 +861,20 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 130 of file cpuPatchTable.h.

│ │ │ │ +

Definition at line 130 of file cpuPatchTable.h.

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

Concrete vertex buffer class for CPU subdivision. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <cpuVertexBuffer.h>

│ │ │ │ +

#include <cpuVertexBuffer.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -134,15 +134,15 @@ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

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

Detailed Description

│ │ │ │

Concrete vertex buffer class for CPU subdivision.

│ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 42 of file cpuVertexBuffer.h.

│ │ │ │ +

Definition at line 42 of file cpuVertexBuffer.h.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ ~CpuVertexBuffer()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -337,15 +337,15 @@ │ │ │ │
│ │ │ │
│ │ │ │

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

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

CUDA stencil table. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <cudaEvaluator.h>

│ │ │ │ +

#include <cudaEvaluator.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -141,15 +141,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

 CudaStencilTable (Far::StencilTable const *stencilTable)
 
 CudaStencilTable (Far::LimitStencilTable const *limitStencilTable)
 
 
│ │ │ │

Detailed Description

│ │ │ │

CUDA stencil table.

│ │ │ │

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

│ │ │ │

CudaEvaluator consumes this table to apply stencils

│ │ │ │ │ │ │ │ -

Definition at line 52 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 52 of file cudaEvaluator.h.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ CudaStencilTable() [1/2]

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -247,15 +247,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ inlinestatic
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 59 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 59 of file cudaEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ Create() [2/2]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -285,15 +285,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlinestatic │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 54 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 54 of file cudaEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ GetDuuWeightsBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -312,15 +312,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 76 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 76 of file cudaEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetDuvWeightsBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -339,15 +339,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 77 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 77 of file cudaEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetDuWeightsBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -366,15 +366,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 74 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 74 of file cudaEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetDvvWeightsBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -393,15 +393,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 78 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 78 of file cudaEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetDvWeightsBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -420,15 +420,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 75 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 75 of file cudaEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetIndicesBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -447,15 +447,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 72 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 72 of file cudaEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetNumStencils()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -474,15 +474,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 79 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 79 of file cudaEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetOffsetsBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -501,15 +501,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 71 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 71 of file cudaEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetSizesBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -528,15 +528,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 70 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 70 of file cudaEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetWeightsBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -555,20 +555,20 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 73 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 73 of file cudaEvaluator.h.

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

#include <cudaEvaluator.h>

│ │ │ │ +

#include <cudaEvaluator.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -169,15 +169,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ 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 void *instance=NULL, void *deviceContext=NULL)
 Generic static compute function. This function has a same signature as other device kernels have so that it can be called transparently from OsdMesh template interface.
 
 Generic limit eval function. This function has a same signature as other device kernels have so that it can be called in the same way.
 
static void Synchronize (void *deviceContext=NULL)
 
│ │ │ │

Detailed Description

│ │ │ │
│ │ │ │ -

Definition at line 94 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 94 of file cudaEvaluator.h.

│ │ │ │

Member Function Documentation

│ │ │ │ │ │ │ │

◆ EvalPatches() [1/6]

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -715,15 +715,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
patchTableCudaPatchTable or equivalent
instancenot used in the cuda evaluator
deviceContextnot used in the cuda evaluator
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 648 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 648 of file cudaEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ EvalPatches() [5/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -841,15 +841,15 @@ │ │ │ │ patchTableCudaPatchTable or equivalent │ │ │ │ instancenot used in the cuda evaluator │ │ │ │ deviceContextnot used in the cuda evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 565 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 565 of file cudaEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ EvalPatches() [6/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -942,15 +942,15 @@ │ │ │ │ patchTableCudaPatchTable or equivalent │ │ │ │ instancenot used in the cuda evaluator │ │ │ │ deviceContextnot used in the cuda evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 504 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 504 of file cudaEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesFaceVarying() [1/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1117,15 +1117,15 @@ │ │ │ │ fvarChannelface-varying channel │ │ │ │ instancenot used in the cuda evaluator │ │ │ │ deviceContextnot used in the cuda evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1224 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 1224 of file cudaEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesFaceVarying() [2/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1250,15 +1250,15 @@ │ │ │ │ fvarChannelface-varying channel │ │ │ │ instancenot used in the cuda evaluator │ │ │ │ deviceContextnot used in the cuda evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1136 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 1136 of file cudaEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesFaceVarying() [3/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1355,15 +1355,15 @@ │ │ │ │ fvarChannelface-varying channel │ │ │ │ instancenot used in the cuda evaluator │ │ │ │ deviceContextnot used in the cuda evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1070 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 1070 of file cudaEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesVarying() [1/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1523,15 +1523,15 @@ │ │ │ │ patchTableCudaPatchTable or equivalent │ │ │ │ instancenot used in the cuda evaluator │ │ │ │ deviceContextnot used in the cuda evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1007 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 1007 of file cudaEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesVarying() [2/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1649,15 +1649,15 @@ │ │ │ │ patchTableCudaPatchTable or equivalent │ │ │ │ instancenot used in the cuda evaluator │ │ │ │ deviceContextnot used in the cuda evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 922 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 922 of file cudaEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesVarying() [3/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1747,15 +1747,15 @@ │ │ │ │ patchTableCudaPatchTable or equivalent │ │ │ │ instancenot used in the cuda evaluator │ │ │ │ deviceContextnot used in the cuda evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 859 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 859 of file cudaEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalStencils() [1/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2351,15 +2351,15 @@ │ │ │ │ stencilTablestencil table to be applied. │ │ │ │ instancenot used in the cuda kernel (declared as a typed pointer to prevent undesirable template resolution) │ │ │ │ deviceContextnot used in the cuda kernel │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 353 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 353 of file cudaEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalStencils() [5/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2463,15 +2463,15 @@ │ │ │ │ stencilTablestencil table to be applied. │ │ │ │ instancenot used in the cuda kernel (declared as a typed pointer to prevent undesirable template resolution) │ │ │ │ deviceContextnot used in the cuda kernel │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 218 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 218 of file cudaEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalStencils() [6/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2550,15 +2550,15 @@ │ │ │ │ stencilTablestencil table to be applied. The table must have Cuda memory interfaces. │ │ │ │ instancenot used in the CudaEvaluator │ │ │ │ deviceContextnot used in the CudaEvaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 126 of file cudaEvaluator.h.

│ │ │ │ +

Definition at line 126 of file cudaEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ Synchronize()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2584,15 +2584,15 @@ │ │ │ │
│ │ │ │

Other methods

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

CUDA patch table. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <cudaPatchTable.h>

│ │ │ │ +

#include <cudaPatchTable.h>

│ │ │ │
│ │ │ │ Inheritance diagram for CudaPatchTable:
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ @@ -178,15 +178,15 @@ │ │ │ │ │ │ │ │
 
│ │ │ │

Detailed Description

│ │ │ │

CUDA patch table.

│ │ │ │

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

│ │ │ │

CudaEvaluator consumes this table to evaluate on the patches.

│ │ │ │ │ │ │ │ -

Definition at line 51 of file cudaPatchTable.h.

│ │ │ │ +

Definition at line 51 of file cudaPatchTable.h.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ ~CudaPatchTable()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -315,15 +315,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 81 of file cudaPatchTable.h.

│ │ │ │ +

Definition at line 81 of file cudaPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ GetFVarPatchIndexBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -345,15 +345,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 86 of file cudaPatchTable.h.

│ │ │ │ +

Definition at line 86 of file cudaPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ GetFVarPatchParamBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -375,15 +375,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 91 of file cudaPatchTable.h.

│ │ │ │ +

Definition at line 91 of file cudaPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetNumFVarChannels()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -404,15 +404,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the number of face-varying channels buffers.

│ │ │ │ │ │ │ │ -

Definition at line 78 of file cudaPatchTable.h.

│ │ │ │ +

Definition at line 78 of file cudaPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetPatchArrayBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -433,15 +433,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 60 of file cudaPatchTable.h.

│ │ │ │ +

Definition at line 60 of file cudaPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetPatchIndexBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -462,15 +462,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the cuda memory of the patch control vertices.

│ │ │ │ │ │ │ │ -

Definition at line 63 of file cudaPatchTable.h.

│ │ │ │ +

Definition at line 63 of file cudaPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetPatchParamBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -491,15 +491,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 66 of file cudaPatchTable.h.

│ │ │ │ +

Definition at line 66 of file cudaPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetVaryingPatchArrayBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -520,15 +520,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 69 of file cudaPatchTable.h.

│ │ │ │ +

Definition at line 69 of file cudaPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetVaryingPatchIndexBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -549,15 +549,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 73 of file cudaPatchTable.h.

│ │ │ │ +

Definition at line 73 of file cudaPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Member Data Documentation

│ │ │ │ │ │ │ │

◆ _fvarIndexBuffers

│ │ │ │ │ │ │ │ @@ -574,15 +574,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 108 of file cudaPatchTable.h.

│ │ │ │ +

Definition at line 108 of file cudaPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _fvarParamBuffers

│ │ │ │ │ │ │ │
│ │ │ │ @@ -598,15 +598,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 109 of file cudaPatchTable.h.

│ │ │ │ +

Definition at line 109 of file cudaPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _fvarPatchArrays

│ │ │ │ │ │ │ │
│ │ │ │ @@ -622,15 +622,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 107 of file cudaPatchTable.h.

│ │ │ │ +

Definition at line 107 of file cudaPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _indexBuffer

│ │ │ │ │ │ │ │
│ │ │ │ @@ -646,15 +646,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 101 of file cudaPatchTable.h.

│ │ │ │ +

Definition at line 101 of file cudaPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _patchArrays

│ │ │ │ │ │ │ │
│ │ │ │ @@ -670,15 +670,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 100 of file cudaPatchTable.h.

│ │ │ │ +

Definition at line 100 of file cudaPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _patchParamBuffer

│ │ │ │ │ │ │ │
│ │ │ │ @@ -694,15 +694,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 102 of file cudaPatchTable.h.

│ │ │ │ +

Definition at line 102 of file cudaPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _varyingIndexBuffer

│ │ │ │ │ │ │ │
│ │ │ │ @@ -718,15 +718,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 105 of file cudaPatchTable.h.

│ │ │ │ +

Definition at line 105 of file cudaPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _varyingPatchArrays

│ │ │ │ │ │ │ │
│ │ │ │ @@ -742,20 +742,20 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 104 of file cudaPatchTable.h.

│ │ │ │ +

Definition at line 104 of file cudaPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
D3D11LegacyGregoryPatchTable Class Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <d3d11LegacyGregoryPatchTable.h>

│ │ │ │ +

#include <d3d11LegacyGregoryPatchTable.h>

│ │ │ │
│ │ │ │ Inheritance diagram for D3D11LegacyGregoryPatchTable:
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ @@ -134,15 +134,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Protected Member Functions

 D3D11LegacyGregoryPatchTable ()
 
│ │ │ │

Detailed Description

│ │ │ │
│ │ │ │ -

Definition at line 43 of file d3d11LegacyGregoryPatchTable.h.

│ │ │ │ +

Definition at line 43 of file d3d11LegacyGregoryPatchTable.h.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ ~D3D11LegacyGregoryPatchTable()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -215,15 +215,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ inlinestatic
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 49 of file d3d11LegacyGregoryPatchTable.h.

│ │ │ │ +

Definition at line 49 of file d3d11LegacyGregoryPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ Create() [2/2]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -279,15 +279,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 74 of file d3d11LegacyGregoryPatchTable.h.

│ │ │ │ +

Definition at line 74 of file d3d11LegacyGregoryPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ GetQuadOffsetsSRV()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -306,15 +306,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 70 of file d3d11LegacyGregoryPatchTable.h.

│ │ │ │ +

Definition at line 70 of file d3d11LegacyGregoryPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetVertexSRV()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -333,15 +333,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 62 of file d3d11LegacyGregoryPatchTable.h.

│ │ │ │ +

Definition at line 62 of file d3d11LegacyGregoryPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetVertexValenceSRV()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -360,15 +360,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 66 of file d3d11LegacyGregoryPatchTable.h.

│ │ │ │ +

Definition at line 66 of file d3d11LegacyGregoryPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ UpdateVertexBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -405,15 +405,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
D3D11PatchTable Class Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <d3d11PatchTable.h>

│ │ │ │ +

#include <d3d11PatchTable.h>

│ │ │ │
│ │ │ │ Inheritance diagram for D3D11PatchTable:
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ @@ -152,29 +152,29 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
ID3D11Buffer * _patchParamBuffer
 
ID3D11ShaderResourceView * _patchParamBufferSRV
 
│ │ │ │

Detailed Description

│ │ │ │
│ │ │ │ -

Definition at line 49 of file d3d11PatchTable.h.

│ │ │ │ +

Definition at line 49 of file d3d11PatchTable.h.

│ │ │ │

Member Typedef Documentation

│ │ │ │ │ │ │ │

◆ VertexBufferBinding

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
typedef ID3D11Buffer* VertexBufferBinding
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 51 of file d3d11PatchTable.h.

│ │ │ │ +

Definition at line 51 of file d3d11PatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ D3D11PatchTable()

│ │ │ │ │ │ │ │ @@ -278,15 +278,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlinestatic │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 57 of file d3d11PatchTable.h.

│ │ │ │ +

Definition at line 57 of file d3d11PatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ Create() [2/2]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -341,15 +341,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 65 of file d3d11PatchTable.h.

│ │ │ │ +

Definition at line 65 of file d3d11PatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetPatchIndexBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -370,15 +370,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the index buffer containing the patch control vertices.

│ │ │ │ │ │ │ │ -

Definition at line 70 of file d3d11PatchTable.h.

│ │ │ │ +

Definition at line 70 of file d3d11PatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetPatchParamSRV()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -399,15 +399,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Returns the SRV containing the patch parameter.

│ │ │ │ │ │ │ │ -

Definition at line 75 of file d3d11PatchTable.h.

│ │ │ │ +

Definition at line 75 of file d3d11PatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Member Data Documentation

│ │ │ │ │ │ │ │

◆ _indexBuffer

│ │ │ │ │ │ │ │ @@ -424,15 +424,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 86 of file d3d11PatchTable.h.

│ │ │ │ +

Definition at line 86 of file d3d11PatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _patchArrays

│ │ │ │ │ │ │ │
│ │ │ │ @@ -448,15 +448,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 84 of file d3d11PatchTable.h.

│ │ │ │ +

Definition at line 84 of file d3d11PatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _patchParamBuffer

│ │ │ │ │ │ │ │
│ │ │ │ @@ -472,15 +472,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 87 of file d3d11PatchTable.h.

│ │ │ │ +

Definition at line 87 of file d3d11PatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _patchParamBufferSRV

│ │ │ │ │ │ │ │
│ │ │ │ @@ -496,20 +496,20 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 88 of file d3d11PatchTable.h.

│ │ │ │ +

Definition at line 88 of file d3d11PatchTable.h.

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

Concrete vertex buffer class for DirectX subdivision and DirectX drawing. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <d3d11VertexBuffer.h>

│ │ │ │ +

#include <d3d11VertexBuffer.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -142,15 +142,15 @@ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

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

Detailed Description

│ │ │ │

Concrete vertex buffer class for DirectX subdivision and DirectX drawing.

│ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 46 of file d3d11VertexBuffer.h.

│ │ │ │ +

Definition at line 46 of file d3d11VertexBuffer.h.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ ~D3D11VertexBuffer()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -302,15 +302,15 @@ │ │ │ │ inline │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 70 of file d3d11VertexBuffer.h.

│ │ │ │ +

Definition at line 70 of file d3d11VertexBuffer.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ Create()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -430,15 +430,15 @@ │ │ │ │ │ │ │ │
│ │ │ │

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

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

Provides shader source which can be used by client code. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <glslPatchShaderSource.h>

│ │ │ │ +

#include <glslPatchShaderSource.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -122,15 +122,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Static Public Member Functions

static std::string GetPatchBasisShaderSource ()
 Returns shader source which can be used to evaluate position and first and second derivatives on piecewise parametric patches resulting from subdivision refinement.
 
static std::string GetPatchDrawingShaderSource ()
 
static std::string GetTessEvalShaderSource (Far::PatchDescriptor::Type type)
 
│ │ │ │

Detailed Description

│ │ │ │

Provides shader source which can be used by client code.

│ │ │ │ │ │ │ │ -

Definition at line 40 of file glslPatchShaderSource.h.

│ │ │ │ +

Definition at line 40 of file glslPatchShaderSource.h.

│ │ │ │

Member Function Documentation

│ │ │ │ │ │ │ │

◆ GetCommonShaderSource()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -282,15 +282,15 @@ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

#include <glVertexBuffer.h>

│ │ │ │ +

#include <glVertexBuffer.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -136,15 +136,15 @@ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

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

Detailed Description

│ │ │ │

Concrete vertex buffer class for GLSL subdivision and OpenGL drawing.

│ │ │ │

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

│ │ │ │ │ │ │ │ -

Definition at line 44 of file glVertexBuffer.h.

│ │ │ │ +

Definition at line 44 of file glVertexBuffer.h.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ ~GLVertexBuffer()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -366,15 +366,15 @@ │ │ │ │
│ │ │ │
│ │ │ │

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

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

GL TextureBuffer stencil table. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <glXFBEvaluator.h>

│ │ │ │ +

#include <glXFBEvaluator.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -141,15 +141,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

 GLStencilTableTBO (Far::StencilTable const *stencilTable)
 
 GLStencilTableTBO (Far::LimitStencilTable const *limitStencilTable)
 
 
│ │ │ │

Detailed Description

│ │ │ │

GL TextureBuffer stencil table.

│ │ │ │

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

│ │ │ │

GLSLTransformFeedback consumes this table to apply stencils

│ │ │ │ │ │ │ │ -

Definition at line 52 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 52 of file glXFBEvaluator.h.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ GLStencilTableTBO() [1/2]

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -247,15 +247,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ inlinestatic
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 60 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 60 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ Create() [2/2]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -285,15 +285,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlinestatic │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 54 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 54 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ GetDuuWeightsTexture()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -312,15 +312,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 78 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 78 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetDuvWeightsTexture()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -339,15 +339,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 79 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 79 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetDuWeightsTexture()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -366,15 +366,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 76 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 76 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetDvvWeightsTexture()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -393,15 +393,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 80 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 80 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetDvWeightsTexture()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -420,15 +420,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 77 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 77 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetIndicesTexture()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -447,15 +447,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 74 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 74 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetNumStencils()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -474,15 +474,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 81 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 81 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetOffsetsTexture()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -501,15 +501,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 73 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 73 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetSizesTexture()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -528,15 +528,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 72 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 72 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetWeightsTexture()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -555,20 +555,20 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 75 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 75 of file glXFBEvaluator.h.

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

#include <glXFBEvaluator.h>

│ │ │ │ +

#include <glXFBEvaluator.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef bool Instantiatable
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ @@ -247,29 +247,29 @@ │ │ │ │

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

Detailed Description

│ │ │ │
│ │ │ │ -

Definition at line 98 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 98 of file glXFBEvaluator.h.

│ │ │ │

Member Typedef Documentation

│ │ │ │ │ │ │ │

◆ Instantiatable

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
typedef bool Instantiatable
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 100 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 100 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ GLXFBEvaluator()

│ │ │ │ │ │ │ │ @@ -421,15 +421,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlinestatic │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 126 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 126 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ Create() [2/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -495,15 +495,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlinestatic │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 170 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 170 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ Create() [3/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -573,15 +573,15 @@ │ │ │ │ inlinestatic │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Generic creator template.

│ │ │ │ │ │ │ │ -

Definition at line 140 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 140 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ Create() [4/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -649,15 +649,15 @@ │ │ │ │ inlinestatic │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Specialization to allow creation without a device context.

│ │ │ │ │ │ │ │ -

Definition at line 157 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 157 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ Create() [5/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -709,15 +709,15 @@ │ │ │ │ inlinestatic │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Generic creator template.

│ │ │ │ │ │ │ │ -

Definition at line 104 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 104 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ Create() [6/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -767,15 +767,15 @@ │ │ │ │ inlinestatic │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Specialization to allow creation without a device context.

│ │ │ │ │ │ │ │ -

Definition at line 117 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 117 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatches() [1/8]

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

Definition at line 1144 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 1144 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatches() [4/8]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1313,15 +1313,15 @@ │ │ │ │ patchTableGLPatchTable or equivalent │ │ │ │ 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. │ │ │ │ deviceContextnot used in the GLXFB evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 943 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 943 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatches() [5/8]

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

Definition at line 1070 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 1070 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatches() [6/8]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1551,15 +1551,15 @@ │ │ │ │ patchTableGLPatchTable or equivalent │ │ │ │ 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. │ │ │ │ deviceContextnot used in the GLXFB evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 843 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 843 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatches() [7/8]

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

Definition at line 1016 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 1016 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatches() [8/8]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1736,15 +1736,15 @@ │ │ │ │ patchTableGLPatchTable or equivalent │ │ │ │ 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. │ │ │ │ deviceContextnot used in the GLXFB evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 765 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 765 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesFaceVarying() [1/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1911,15 +1911,15 @@ │ │ │ │ fvarChannelface-varying channel │ │ │ │ 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. │ │ │ │ deviceContextnot used in the GLXFB evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1976 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 1976 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesFaceVarying() [2/6]

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

Definition at line 2084 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 2084 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesFaceVarying() [3/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2205,15 +2205,15 @@ │ │ │ │ fvarChannelface-varying channel │ │ │ │ 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. │ │ │ │ deviceContextnot used in the GLXFB evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1809 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 1809 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesFaceVarying() [4/6]

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

Definition at line 1889 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 1889 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesFaceVarying() [5/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2429,15 +2429,15 @@ │ │ │ │ fvarChannelface-varying channel │ │ │ │ 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. │ │ │ │ deviceContextnot used in the GLXFB evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1679 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 1679 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesFaceVarying() [6/6]

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

Definition at line 1742 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 1742 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesVarying() [1/6]

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

Definition at line 1617 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 1617 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesVarying() [2/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2842,15 +2842,15 @@ │ │ │ │ patchTableGLPatchTable or equivalent │ │ │ │ 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. │ │ │ │ deviceContextnot used in the GLXFB evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1512 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 1512 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesVarying() [3/6]

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

Definition at line 1428 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 1428 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesVarying() [4/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -3080,15 +3080,15 @@ │ │ │ │ patchTableGLPatchTable or equivalent │ │ │ │ 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. │ │ │ │ deviceContextnot used in the GLXFB evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1351 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 1351 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesVarying() [5/6]

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

Definition at line 1287 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 1287 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesVarying() [6/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -3262,15 +3262,15 @@ │ │ │ │ patchTableGLPatchTable or equivalent │ │ │ │ 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. │ │ │ │ deviceContextnot used in the GLXFB evaluator │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1227 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 1227 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalStencils() [1/8]

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

Definition at line 575 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 575 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalStencils() [4/8]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -3889,15 +3889,15 @@ │ │ │ │ stencilTablestencil table to be applied. The table must have Texture Buffer Object interfaces. │ │ │ │ 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. │ │ │ │ deviceContextnot used in the GLSLTransformFeedback kernel │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 396 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 396 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalStencils() [5/8]

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

Definition at line 506 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 506 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalStencils() [6/8]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -4099,15 +4099,15 @@ │ │ │ │ stencilTablestencil table to be applied. The table must have Texture Buffer Object interfaces. │ │ │ │ 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. │ │ │ │ deviceContextnot used in the GLSLTransformFeedback kernel │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 306 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 306 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalStencils() [7/8]

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

Definition at line 457 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 457 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalStencils() [8/8]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -4256,15 +4256,15 @@ │ │ │ │ stencilTablestencil table to be applied. The table must have Texture Buffer Object interfaces. │ │ │ │ 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. │ │ │ │ deviceContextnot used in the GLSLTransformFeedback kernel │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 238 of file glXFBEvaluator.h.

│ │ │ │ +

Definition at line 238 of file glXFBEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ Synchronize()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -4289,15 +4289,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

Wait the dispatched kernel finishes.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
MTLStencilTable Class Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <mtlComputeEvaluator.h>

│ │ │ │ +

#include <mtlComputeEvaluator.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -134,15 +134,15 @@ │ │ │ │ Static Public Member Functions │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

 MTLStencilTable (Far::StencilTable const *stencilTable, MTLContext *context)
 
 MTLStencilTable (Far::LimitStencilTable const *stencilTable, MTLContext *context)
 
template<typename STENCIL_TABLE , typename DEVICE_CONTEXT >
static MTLStencilTableCreate (STENCIL_TABLE *stencilTable, DEVICE_CONTEXT context)
 
│ │ │ │

Detailed Description

│ │ │ │
│ │ │ │ -

Definition at line 50 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 50 of file mtlComputeEvaluator.h.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ MTLStencilTable() [1/2]

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -246,15 +246,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ inlinestatic
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 54 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 54 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ GetDuuWeightsBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -273,15 +273,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 71 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 71 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ GetDuvWeightsBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -300,15 +300,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 72 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 72 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetDuWeightsBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -327,15 +327,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 69 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 69 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetDvvWeightsBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -354,15 +354,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 73 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 73 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetDvWeightsBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -381,15 +381,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 70 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 70 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetIndicesBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -408,15 +408,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 67 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 67 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetNumStencils()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -435,15 +435,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 75 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 75 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetOffsetsBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -462,15 +462,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 66 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 66 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetSizesBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -489,15 +489,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 65 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 65 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetWeightsBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -516,20 +516,20 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 68 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 68 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
MTLComputeEvaluator Class Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <mtlComputeEvaluator.h>

│ │ │ │ +

#include <mtlComputeEvaluator.h>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef bool Instantiatable
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ @@ -231,29 +231,29 @@ │ │ │ │

 
static void Synchronize (MTLContext *context)
 Wait for the dispatched kernel to finish.
 
│ │ │ │

Detailed Description

│ │ │ │
│ │ │ │ -

Definition at line 91 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 91 of file mtlComputeEvaluator.h.

│ │ │ │

Member Typedef Documentation

│ │ │ │ │ │ │ │

◆ Instantiatable

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
typedef bool Instantiatable
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 94 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 94 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ MTLComputeEvaluator()

│ │ │ │ │ │ │ │ @@ -877,15 +877,15 @@ │ │ │ │ patchTableMTLPatchTable or equivalent │ │ │ │ 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. │ │ │ │ contextused to obtain the MTLDevice object and command queue to obtain command buffers from. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 889 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 889 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatches() [4/8]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1038,15 +1038,15 @@ │ │ │ │ patchCoordsarray of locations to be evaluated. │ │ │ │ patchTableMTLPatchTable or equivalent │ │ │ │ contextused to obtain the MTLDevice object and command queue to obtain command buffers from. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1104 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 1104 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatches() [5/8]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1164,15 +1164,15 @@ │ │ │ │ patchTableMTLPatchTable or equivalent │ │ │ │ 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. │ │ │ │ contextused to obtain the MTLDevice object and command queue to obtain command buffers from. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 786 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 786 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatches() [6/8]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1283,15 +1283,15 @@ │ │ │ │ patchCoordsarray of locations to be evaluated. │ │ │ │ patchTableMTLPatchTable or equivalent │ │ │ │ contextused to obtain the MTLDevice object and command queue to obtain command buffers from. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1025 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 1025 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatches() [7/8]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1384,15 +1384,15 @@ │ │ │ │ patchTableMTLPatchTable or equivalent │ │ │ │ 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. │ │ │ │ contextused to obtain the MTLDevice object and command queue to obtain command buffers from. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 705 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 705 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatches() [8/8]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1475,15 +1475,15 @@ │ │ │ │ patchCoordsarray of locations to be evaluated. must have BindVBO() method returning an array of PatchCoord struct in VBO. │ │ │ │ patchTableMTLPatchTable or equivalent │ │ │ │ contextused to obtain the MTLDevice object and command queue to obtain command buffers from. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 966 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 966 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesFaceVarying() [1/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1650,15 +1650,15 @@ │ │ │ │ fvarChannelface-varying channel │ │ │ │ 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. │ │ │ │ deviceContextused to obtain the MTLDevice object and command queue to obtain command buffers from. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1991 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 1991 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesFaceVarying() [2/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1818,15 +1818,15 @@ │ │ │ │ patchTableMTLPatchTable or equivalent │ │ │ │ fvarChannelface-varying channel │ │ │ │ deviceContextused to obtain the MTLDevice object and command queue to obtain command buffers from. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 2106 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 2106 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesFaceVarying() [3/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1951,15 +1951,15 @@ │ │ │ │ fvarChannelface-varying channel │ │ │ │ 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. │ │ │ │ deviceContextused to obtain the MTLDevice object and command queue to obtain command buffers from. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1813 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 1813 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesFaceVarying() [4/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2077,15 +2077,15 @@ │ │ │ │ patchTableMTLPatchTable or equivalent │ │ │ │ fvarChannelface-varying channel │ │ │ │ deviceContextused to obtain the MTLDevice object and command queue to obtain command buffers from. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1900 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 1900 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesFaceVarying() [5/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2182,15 +2182,15 @@ │ │ │ │ fvarChannelface-varying channel │ │ │ │ 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. │ │ │ │ deviceContextused to obtain the MTLDevice object and command queue to obtain command buffers from. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1672 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 1672 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesFaceVarying() [6/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2280,15 +2280,15 @@ │ │ │ │ patchTableMTLPatchTable or equivalent │ │ │ │ fvarChannelface-varying channel │ │ │ │ deviceContextused to obtain the MTLDevice object and command queue to obtain command buffers from. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1742 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 1742 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesVarying() [1/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2448,15 +2448,15 @@ │ │ │ │ patchTableMTLPatchTable or equivalent │ │ │ │ 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. │ │ │ │ deviceContextused to obtain the MTLDevice object and command queue to obtain command buffers from. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1496 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 1496 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesVarying() [2/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2609,15 +2609,15 @@ │ │ │ │ patchCoordsarray of locations to be evaluated. must have BindVBO() method returning an array of PatchCoord struct in VBO. │ │ │ │ patchTableMTLPatchTable or equivalent │ │ │ │ deviceContextused to obtain the MTLDevice object and command queue to obtain command buffers from. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1606 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 1606 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesVarying() [3/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2735,15 +2735,15 @@ │ │ │ │ patchTableMTLPatchTable or equivalent │ │ │ │ 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. │ │ │ │ deviceContextused to obtain the MTLDevice object and command queue to obtain command buffers from. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1325 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 1325 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesVarying() [4/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2854,15 +2854,15 @@ │ │ │ │ patchCoordsarray of locations to be evaluated. must have BindVBO() method returning an array of PatchCoord struct in VBO. │ │ │ │ patchTableMTLPatchTable or equivalent │ │ │ │ deviceContextused to obtain the MTLDevice object and command queue to obtain command buffers from. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1407 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 1407 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesVarying() [5/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2952,15 +2952,15 @@ │ │ │ │ patchTableMTLPatchTable or equivalent │ │ │ │ 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. │ │ │ │ deviceContextused to obtain the MTLDevice object and command queue to obtain command buffers from. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1192 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 1192 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalPatchesVarying() [6/6]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -3043,15 +3043,15 @@ │ │ │ │ patchCoordsarray of locations to be evaluated. must have BindVBO() method returning an array of PatchCoord struct in VBO. │ │ │ │ patchTableMTLPatchTable or equivalent │ │ │ │ deviceContextused to obtain the MTLDevice object and command queue to obtain command buffers from. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 1257 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 1257 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalStencils() [1/8]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -3544,15 +3544,15 @@ │ │ │ │ stencilTablestencil table to be applied. The table must have MTLBuffer interfaces. │ │ │ │ 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. │ │ │ │ contextused to obtain the MTLDevice object and command queue to obtain command buffers from. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 312 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 312 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalStencils() [4/8]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -3691,15 +3691,15 @@ │ │ │ │ dvvDescvertex buffer descriptor for the dvvBuffer │ │ │ │ stencilTablestencil table to be applied. The table must have MTLBuffer interfaces. │ │ │ │ contextused to obtain the MTLDevice object and command queue to obtain command buffers from. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 504 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 504 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalStencils() [5/8]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -3803,15 +3803,15 @@ │ │ │ │ stencilTablestencil table to be applied. The table must have MTLBuffer interfaces. │ │ │ │ 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. │ │ │ │ contextused to obtain the MTLDevice object and command queue to obtain command buffers from. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 220 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 220 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalStencils() [6/8]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -3908,15 +3908,15 @@ │ │ │ │ dvDescvertex buffer descriptor for the dvBuffer │ │ │ │ stencilTablestencil table to be applied. The table must have MTLBuffer interfaces. │ │ │ │ contextused to obtain the MTLDevice object and command queue to obtain command buffers from. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 430 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 430 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalStencils() [7/8]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -3995,15 +3995,15 @@ │ │ │ │ stencilTablestencil table to be applied. The table must have MTLBuffer interfaces. │ │ │ │ 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. │ │ │ │ contextused to obtain the MTLDevice object and command queue to obtain command buffers from. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 149 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 149 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ EvalStencils() [8/8]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -4072,15 +4072,15 @@ │ │ │ │ dstDescvertex buffer descriptor for the output buffer │ │ │ │ stencilTablestencil table to be applied. The table must have MTLBuffer interfaces. │ │ │ │ contextused to obtain the MTLDevice object and command queue to obtain command buffers from. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

Definition at line 376 of file mtlComputeEvaluator.h.

│ │ │ │ +

Definition at line 376 of file mtlComputeEvaluator.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ Synchronize()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -4105,15 +4105,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

Wait for the dispatched kernel to finish.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
MTLLegacyGregoryPatchTable Class Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <mtlLegacyGregoryPatchTable.h>

│ │ │ │ +

#include <mtlLegacyGregoryPatchTable.h>

│ │ │ │
│ │ │ │ Inheritance diagram for MTLLegacyGregoryPatchTable:
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ @@ -128,15 +128,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
static MTLLegacyGregoryPatchTableCreate (Far::PatchTable const *farPatchTable, DEVICE_CONTEXT context)
 
static MTLLegacyGregoryPatchTableCreate (Far::PatchTable const *farPatchTable, MTLContext *context)
 
│ │ │ │

Detailed Description

│ │ │ │
│ │ │ │ -

Definition at line 41 of file mtlLegacyGregoryPatchTable.h.

│ │ │ │ +

Definition at line 41 of file mtlLegacyGregoryPatchTable.h.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ ~MTLLegacyGregoryPatchTable()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ @@ -184,15 +184,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ inlinestatic
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 48 of file mtlLegacyGregoryPatchTable.h.

│ │ │ │ +

Definition at line 48 of file mtlLegacyGregoryPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ Create() [2/2]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -248,15 +248,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 71 of file mtlLegacyGregoryPatchTable.h.

│ │ │ │ +

Definition at line 71 of file mtlLegacyGregoryPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ GetQuadOffsetsBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -275,15 +275,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 66 of file mtlLegacyGregoryPatchTable.h.

│ │ │ │ +

Definition at line 66 of file mtlLegacyGregoryPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetVertexBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -302,15 +302,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 56 of file mtlLegacyGregoryPatchTable.h.

│ │ │ │ +

Definition at line 56 of file mtlLegacyGregoryPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetVertexValenceBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -329,15 +329,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 61 of file mtlLegacyGregoryPatchTable.h.

│ │ │ │ +

Definition at line 61 of file mtlLegacyGregoryPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ UpdateVertexBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -374,15 +374,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
MTLPatchTable Class Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <mtlPatchTable.h>

│ │ │ │ +

#include <mtlPatchTable.h>

│ │ │ │
│ │ │ │ Inheritance diagram for MTLPatchTable:
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ @@ -170,29 +170,29 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
std::vector< id< MTLBuffer > > _fvarIndexBuffers
 
std::vector< id< MTLBuffer > > _fvarParamBuffers
 
│ │ │ │

Detailed Description

│ │ │ │
│ │ │ │ -

Definition at line 46 of file mtlPatchTable.h.

│ │ │ │ +

Definition at line 46 of file mtlPatchTable.h.

│ │ │ │

Member Typedef Documentation

│ │ │ │ │ │ │ │

◆ VertexBufferBinding

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
typedef id<MTLBuffer> VertexBufferBinding
│ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 48 of file mtlPatchTable.h.

│ │ │ │ +

Definition at line 48 of file mtlPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ MTLPatchTable()

│ │ │ │ │ │ │ │ @@ -296,15 +296,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlinestatic │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 54 of file mtlPatchTable.h.

│ │ │ │ +

Definition at line 54 of file mtlPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ Create() [2/2]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -360,15 +360,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 69 of file mtlPatchTable.h.

│ │ │ │ +

Definition at line 69 of file mtlPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetFVarPatchIndexBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -388,15 +388,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 70 of file mtlPatchTable.h.

│ │ │ │ +

Definition at line 70 of file mtlPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetFVarPatchParamBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -416,15 +416,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 71 of file mtlPatchTable.h.

│ │ │ │ +

Definition at line 71 of file mtlPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetNumFVarChannels()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -443,15 +443,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 68 of file mtlPatchTable.h.

│ │ │ │ +

Definition at line 68 of file mtlPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetPatchArrays()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -470,15 +470,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 61 of file mtlPatchTable.h.

│ │ │ │ +

Definition at line 61 of file mtlPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetPatchIndexBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -497,15 +497,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 62 of file mtlPatchTable.h.

│ │ │ │ +

Definition at line 62 of file mtlPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetPatchParamBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -524,15 +524,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 63 of file mtlPatchTable.h.

│ │ │ │ +

Definition at line 63 of file mtlPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetVaryingPatchArrays()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -551,15 +551,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 65 of file mtlPatchTable.h.

│ │ │ │ +

Definition at line 65 of file mtlPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetVaryingPatchIndexBuffer()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -578,15 +578,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 66 of file mtlPatchTable.h.

│ │ │ │ +

Definition at line 66 of file mtlPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Member Data Documentation

│ │ │ │ │ │ │ │

◆ _fvarIndexBuffers

│ │ │ │ │ │ │ │ @@ -603,15 +603,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 86 of file mtlPatchTable.h.

│ │ │ │ +

Definition at line 86 of file mtlPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _fvarParamBuffers

│ │ │ │ │ │ │ │
│ │ │ │ @@ -627,15 +627,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 87 of file mtlPatchTable.h.

│ │ │ │ +

Definition at line 87 of file mtlPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _fvarPatchArrays

│ │ │ │ │ │ │ │
│ │ │ │ @@ -651,15 +651,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 85 of file mtlPatchTable.h.

│ │ │ │ +

Definition at line 85 of file mtlPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _indexBuffer

│ │ │ │ │ │ │ │
│ │ │ │ @@ -675,15 +675,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 78 of file mtlPatchTable.h.

│ │ │ │ +

Definition at line 78 of file mtlPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _patchArrays

│ │ │ │ │ │ │ │
│ │ │ │ @@ -699,15 +699,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 76 of file mtlPatchTable.h.

│ │ │ │ +

Definition at line 76 of file mtlPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _patchParamBuffer

│ │ │ │ │ │ │ │
│ │ │ │ @@ -723,15 +723,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 79 of file mtlPatchTable.h.

│ │ │ │ +

Definition at line 79 of file mtlPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _varyingPatchArrays

│ │ │ │ │ │ │ │
│ │ │ │ @@ -747,15 +747,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 81 of file mtlPatchTable.h.

│ │ │ │ +

Definition at line 81 of file mtlPatchTable.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ _varyingPatchIndexBuffer

│ │ │ │ │ │ │ │
│ │ │ │ @@ -771,20 +771,20 @@ │ │ │ │ │ │ │ │ │ │ │ │ protected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 83 of file mtlPatchTable.h.

│ │ │ │ +

Definition at line 83 of file mtlPatchTable.h.

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

Definition at line 84 of file bilinearScheme.h.

│ │ │ │ +

Definition at line 84 of file bilinearScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ assignCornerLimitMask() [2/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -407,15 +407,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 208 of file catmarkScheme.h.

│ │ │ │ +

Definition at line 208 of file catmarkScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ assignCornerLimitMask() [3/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -529,15 +529,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 118 of file bilinearScheme.h.

│ │ │ │ +

Definition at line 118 of file bilinearScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ assignCornerLimitTangentMasks() [2/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -619,15 +619,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 301 of file catmarkScheme.h.

│ │ │ │ +

Definition at line 301 of file catmarkScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ assignCornerLimitTangentMasks() [4/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -833,15 +833,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 221 of file catmarkScheme.h.

│ │ │ │ +

Definition at line 221 of file catmarkScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ assignCreaseLimitMask() [3/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -921,15 +921,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 97 of file bilinearScheme.h.

│ │ │ │ +

Definition at line 97 of file bilinearScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ assignCreaseLimitTangentMasks() [1/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1023,15 +1023,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 334 of file catmarkScheme.h.

│ │ │ │ +

Definition at line 334 of file catmarkScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ assignCreaseLimitTangentMasks() [3/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1123,15 +1123,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 143 of file bilinearScheme.h.

│ │ │ │ +

Definition at line 143 of file bilinearScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ assignCreaseMaskForEdge() [1/2]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1293,15 +1293,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 148 of file catmarkScheme.h.

│ │ │ │ +

Definition at line 148 of file catmarkScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ assignCreaseMaskForVertex() [3/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1415,15 +1415,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 106 of file bilinearScheme.h.

│ │ │ │ +

Definition at line 106 of file bilinearScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ assignSmoothLimitMask() [3/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1453,15 +1453,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 247 of file catmarkScheme.h.

│ │ │ │ +

Definition at line 247 of file catmarkScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ assignSmoothLimitMask() [4/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1581,15 +1581,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 152 of file bilinearScheme.h.

│ │ │ │ +

Definition at line 152 of file bilinearScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ assignSmoothLimitTangentMasks() [3/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1625,15 +1625,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 453 of file catmarkScheme.h.

│ │ │ │ +

Definition at line 453 of file catmarkScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ assignSmoothLimitTangentMasks() [4/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1707,15 +1707,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 71 of file catmarkScheme.h.

│ │ │ │ +

Definition at line 71 of file catmarkScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ assignSmoothMaskForEdge() [2/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1863,15 +1863,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inlineprotected │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 173 of file catmarkScheme.h.

│ │ │ │ +

Definition at line 173 of file catmarkScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ assignSmoothMaskForVertex() [3/3]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1943,15 +1943,15 @@ │ │ │ │ │ │ │ │ ) │ │ │ │ const │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 62 of file bilinearScheme.h.

│ │ │ │ +

Definition at line 62 of file bilinearScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ ComputeEdgeVertexMask() [2/2]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2166,15 +2166,15 @@ │ │ │ │ │ │ │ │ ) │ │ │ │ const │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 71 of file bilinearScheme.h.

│ │ │ │ +

Definition at line 71 of file bilinearScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ ComputeVertexVertexMask() [2/2]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2241,15 +2241,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 53 of file bilinearScheme.h.

│ │ │ │ +

Definition at line 53 of file bilinearScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetLocalNeighborhoodSize() [2/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2268,15 +2268,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 56 of file catmarkScheme.h.

│ │ │ │ +

Definition at line 56 of file catmarkScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetLocalNeighborhoodSize() [3/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2378,15 +2378,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 47 of file bilinearScheme.h.

│ │ │ │ +

Definition at line 47 of file bilinearScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetRegularFaceSize() [2/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2405,15 +2405,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 50 of file catmarkScheme.h.

│ │ │ │ +

Definition at line 50 of file catmarkScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetRegularFaceSize() [3/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2486,15 +2486,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 50 of file bilinearScheme.h.

│ │ │ │ +

Definition at line 50 of file bilinearScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetRegularVertexValence() [2/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2513,15 +2513,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 53 of file catmarkScheme.h.

│ │ │ │ +

Definition at line 53 of file catmarkScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetRegularVertexValence() [3/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2594,15 +2594,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 44 of file bilinearScheme.h.

│ │ │ │ +

Definition at line 44 of file bilinearScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetTopologicalSplitType() [2/4]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2621,15 +2621,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

Definition at line 47 of file catmarkScheme.h.

│ │ │ │ +

Definition at line 47 of file catmarkScheme.h.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ GetTopologicalSplitType() [3/4]

│ │ │ │ │ │ │ │
│ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a01489.html │ │ │ │ @@ -95,15 +95,15 @@ │ │ │ │ Classes | │ │ │ │ Namespaces | │ │ │ │ Typedefs
│ │ │ │
types.h File Reference
│ │ │ │ │ │ │ │
│ │ │ │
#include "../version.h"
│ │ │ │ -#include "../far/patchTable.h"
│ │ │ │ +#include "../far/patchTable.h"
│ │ │ │ #include <algorithm>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/a01489_source.html │ │ │ │ @@ -266,18 +266,18 @@ │ │ │ │
143#endif // OPENSUBDIV3_OSD_TYPES_H
│ │ │ │ │ │ │ │
std::vector< PatchParam > PatchParamVector
Definition types.h:133
│ │ │ │
std::vector< PatchArray > PatchArrayVector
Definition types.h:132
│ │ │ │ │ │ │ │
Type GetType() const
Returns the type of the patch.
│ │ │ │ │ │ │ │ -
Handle that can be used as unique patch identifier within PatchTable.
Definition patchTable.h:60
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
Handle that can be used as unique patch identifier within PatchTable.
Definition patchTable.h:60
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Coordinates set on a patch table.
Definition types.h:42
│ │ │ │
Far::PatchTable::PatchHandle handle
patch handle
Definition types.h:62
│ │ │ │ │ │ │ │ │ │ │ │
PatchCoord(Far::PatchTable::PatchHandle handleArg, float sArg, float tArg)
Constructor.
Definition types.h:53
│ │ │ │
float t
parametric location on patch
Definition types.h:63
│ │ │ │ │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/dir_2483050b711c1829a6434006d0beb10c.html │ │ │ │ @@ -93,77 +93,77 @@ │ │ │ │
│ │ │ │
osd Directory Reference
│ │ │ │
│ │ │ │
│ │ │ │

│ │ │ │ Classes

struct  PatchCoord
│ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/dir_2483050b711c1829a6434006d0beb10c.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,40 +1,40 @@ │ │ │ │ │ var dir_2483050b711c1829a6434006d0beb10c = [ │ │ │ │ │ - ["bufferDescriptor.h", "a00899.html", "a00899"], │ │ │ │ │ + ["bufferDescriptor.h", "a00896.html", "a00896"], │ │ │ │ │ ["clEvaluator.h", "a00800.html", "a00800"], │ │ │ │ │ ["clPatchTable.h", "a00803.html", "a00803"], │ │ │ │ │ ["clVertexBuffer.h", "a00797.html", "a00797"], │ │ │ │ │ ["cpuD3D11VertexBuffer.h", "a00845.html", "a00845"], │ │ │ │ │ - ["cpuEvaluator.h", "a00893.html", "a00893"], │ │ │ │ │ + ["cpuEvaluator.h", "a00899.html", "a00899"], │ │ │ │ │ ["cpuGLVertexBuffer.h", "a00869.html", "a00869"], │ │ │ │ │ - ["cpuPatchTable.h", "a00896.html", "a00896"], │ │ │ │ │ - ["cpuVertexBuffer.h", "a00890.html", "a00890"], │ │ │ │ │ - ["cudaEvaluator.h", "a00791.html", "a00791"], │ │ │ │ │ - ["cudaPatchTable.h", "a00788.html", "a00788"], │ │ │ │ │ + ["cpuPatchTable.h", "a00890.html", "a00890"], │ │ │ │ │ + ["cpuVertexBuffer.h", "a00893.html", "a00893"], │ │ │ │ │ + ["cudaEvaluator.h", "a00788.html", "a00788"], │ │ │ │ │ + ["cudaPatchTable.h", "a00791.html", "a00791"], │ │ │ │ │ ["cudaVertexBuffer.h", "a00902.html", "a00902"], │ │ │ │ │ ["d3d11ComputeEvaluator.h", "a00842.html", "a00842"], │ │ │ │ │ - ["d3d11LegacyGregoryPatchTable.h", "a00839.html", "a00839"], │ │ │ │ │ + ["d3d11LegacyGregoryPatchTable.h", "a00836.html", "a00836"], │ │ │ │ │ ["d3d11Mesh.h", "a00830.html", "a00830"], │ │ │ │ │ - ["d3d11PatchTable.h", "a00833.html", "a00833"], │ │ │ │ │ - ["d3d11VertexBuffer.h", "a00836.html", "a00836"], │ │ │ │ │ + ["d3d11PatchTable.h", "a00839.html", "a00839"], │ │ │ │ │ + ["d3d11VertexBuffer.h", "a00833.html", "a00833"], │ │ │ │ │ ["glComputeEvaluator.h", "a00848.html", "a00848"], │ │ │ │ │ ["glLegacyGregoryPatchTable.h", "a00866.html", "a00866"], │ │ │ │ │ - ["glMesh.h", "a00860.html", "a00860"], │ │ │ │ │ + ["glMesh.h", "a00857.html", "a00857"], │ │ │ │ │ ["glPatchTable.h", "a00863.html", "a00863"], │ │ │ │ │ - ["glslPatchShaderSource.h", "a00854.html", "a00854"], │ │ │ │ │ - ["glVertexBuffer.h", "a00857.html", "a00857"], │ │ │ │ │ - ["glXFBEvaluator.h", "a00851.html", "a00851"], │ │ │ │ │ + ["glslPatchShaderSource.h", "a00851.html", "a00851"], │ │ │ │ │ + ["glVertexBuffer.h", "a00860.html", "a00860"], │ │ │ │ │ + ["glXFBEvaluator.h", "a00854.html", "a00854"], │ │ │ │ │ ["hlslPatchShaderSource.h", "a00827.html", "a00827"], │ │ │ │ │ ["mesh.h", "a00887.html", "a00887"], │ │ │ │ │ ["mtlCommon.h", "a00806.html", "a00806"], │ │ │ │ │ - ["mtlComputeEvaluator.h", "a00821.html", "a00821"], │ │ │ │ │ - ["mtlLegacyGregoryPatchTable.h", "a00818.html", "a00818"], │ │ │ │ │ - ["mtlMesh.h", "a00815.html", "a00815"], │ │ │ │ │ + ["mtlComputeEvaluator.h", "a00818.html", "a00818"], │ │ │ │ │ + ["mtlLegacyGregoryPatchTable.h", "a00821.html", "a00821"], │ │ │ │ │ + ["mtlMesh.h", "a00812.html", "a00812"], │ │ │ │ │ ["mtlPatchShaderSource.h", "a00809.html", "a00809"], │ │ │ │ │ - ["mtlPatchTable.h", "a00812.html", "a00812"], │ │ │ │ │ + ["mtlPatchTable.h", "a00815.html", "a00815"], │ │ │ │ │ ["mtlVertexBuffer.h", "a00824.html", "a00824"], │ │ │ │ │ ["ompEvaluator.h", "a00881.html", "a00881"], │ │ │ │ │ ["ompKernel.h", "a00878.html", "a00878"], │ │ │ │ │ ["opencl.h", "a00794.html", null], │ │ │ │ │ ["opengl.h", "a00884.html", null], │ │ │ │ │ ["tbbEvaluator.h", "a00875.html", "a00875"], │ │ │ │ │ ["tbbKernel.h", "a00872.html", "a00872"], │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/dir_7f420b72a822828cfa8b0561c695a5cc.html │ │ │ │ @@ -101,27 +101,27 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/dir_7f420b72a822828cfa8b0561c695a5cc.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,17 +1,17 @@ │ │ │ │ │ var dir_7f420b72a822828cfa8b0561c695a5cc = [ │ │ │ │ │ ["error.h", "a00743.html", "a00743"], │ │ │ │ │ ["patchDescriptor.h", "a00740.html", "a00740"], │ │ │ │ │ ["patchMap.h", "a00734.html", "a00734"], │ │ │ │ │ ["patchParam.h", "a00737.html", "a00737"], │ │ │ │ │ - ["patchTable.h", "a00728.html", "a00728"], │ │ │ │ │ - ["patchTableFactory.h", "a00731.html", "a00731"], │ │ │ │ │ + ["patchTable.h", "a00731.html", "a00731"], │ │ │ │ │ + ["patchTableFactory.h", "a00728.html", "a00728"], │ │ │ │ │ ["primvarRefiner.h", "a00725.html", "a00725"], │ │ │ │ │ - ["ptexIndices.h", "a00719.html", "a00719"], │ │ │ │ │ - ["stencilTable.h", "a00722.html", "a00722"], │ │ │ │ │ - ["stencilTableFactory.h", "a00713.html", "a00713"], │ │ │ │ │ - ["topologyDescriptor.h", "a00716.html", "a00716"], │ │ │ │ │ + ["ptexIndices.h", "a00722.html", "a00722"], │ │ │ │ │ + ["stencilTable.h", "a00716.html", "a00716"], │ │ │ │ │ + ["stencilTableFactory.h", "a00719.html", "a00719"], │ │ │ │ │ + ["topologyDescriptor.h", "a00713.html", "a00713"], │ │ │ │ │ ["topologyLevel.h", "a00710.html", "a00710"], │ │ │ │ │ ["topologyRefiner.h", "a00707.html", "a00707"], │ │ │ │ │ ["topologyRefinerFactory.h", "a00704.html", "a00704"], │ │ │ │ │ ["types.h", "a01486.html", "a01486"] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/dir_bd5473d7d5841d48919aaa9ad0cb1f9b.html │ │ │ │ @@ -103,17 +103,17 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Files

 bufferDescriptor.h
 bufferDescriptor.h
 
 clEvaluator.h
 
 clPatchTable.h
 
 clVertexBuffer.h
 
 cpuD3D11VertexBuffer.h
 
 cpuEvaluator.h
 cpuEvaluator.h
 
 cpuGLVertexBuffer.h
 
 cpuPatchTable.h
 cpuPatchTable.h
 
 cpuVertexBuffer.h
 cpuVertexBuffer.h
 
 cudaEvaluator.h
 cudaEvaluator.h
 
 cudaPatchTable.h
 cudaPatchTable.h
 
 cudaVertexBuffer.h
 
 d3d11ComputeEvaluator.h
 
 d3d11LegacyGregoryPatchTable.h
 d3d11LegacyGregoryPatchTable.h
 
 d3d11Mesh.h
 
 d3d11PatchTable.h
 d3d11PatchTable.h
 
 d3d11VertexBuffer.h
 d3d11VertexBuffer.h
 
 glComputeEvaluator.h
 
 glLegacyGregoryPatchTable.h
 
 glMesh.h
 glMesh.h
 
 glPatchTable.h
 
 glslPatchShaderSource.h
 glslPatchShaderSource.h
 
 glVertexBuffer.h
 glVertexBuffer.h
 
 glXFBEvaluator.h
 glXFBEvaluator.h
 
 hlslPatchShaderSource.h
 
 mesh.h
 
 mtlCommon.h
 
 mtlComputeEvaluator.h
 mtlComputeEvaluator.h
 
 mtlLegacyGregoryPatchTable.h
 mtlLegacyGregoryPatchTable.h
 
 mtlMesh.h
 mtlMesh.h
 
 mtlPatchShaderSource.h
 
 mtlPatchTable.h
 mtlPatchTable.h
 
 mtlVertexBuffer.h
 
 ompEvaluator.h
 
 ompKernel.h
 
 
 patchDescriptor.h
 
 patchMap.h
 
 patchParam.h
 
 patchTable.h
 patchTable.h
 
 patchTableFactory.h
 patchTableFactory.h
 
 primvarRefiner.h
 
 ptexIndices.h
 ptexIndices.h
 
 stencilTable.h
 stencilTable.h
 
 stencilTableFactory.h
 stencilTableFactory.h
 
 topologyDescriptor.h
 topologyDescriptor.h
 
 topologyLevel.h
 
 topologyRefiner.h
 
 topologyRefinerFactory.h
 
 
 fvarLevel.h
 
 fvarRefinement.h
 
 level.h
 
 refinement.h
 refinement.h
 
 sparseSelector.h
 sparseSelector.h
 
 stackBuffer.h
 
 types.h
 
│ │ │ │
│ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/dir_bd5473d7d5841d48919aaa9ad0cb1f9b.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,11 +1,11 @@ │ │ │ │ │ var dir_bd5473d7d5841d48919aaa9ad0cb1f9b = [ │ │ │ │ │ ["array.h", "a00767.html", "a00767"], │ │ │ │ │ ["componentInterfaces.h", "a00764.html", null], │ │ │ │ │ ["fvarLevel.h", "a00761.html", null], │ │ │ │ │ ["fvarRefinement.h", "a00758.html", null], │ │ │ │ │ ["level.h", "a00755.html", null], │ │ │ │ │ - ["refinement.h", "a00752.html", null], │ │ │ │ │ - ["sparseSelector.h", "a00749.html", null], │ │ │ │ │ + ["refinement.h", "a00749.html", null], │ │ │ │ │ + ["sparseSelector.h", "a00752.html", null], │ │ │ │ │ ["stackBuffer.h", "a00746.html", null], │ │ │ │ │ ["types.h", "a01495.html", "a01495"] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/dir_f61368944c63c2c1f8c69bc232e59c39.html │ │ │ │ @@ -93,17 +93,17 @@ │ │ │ │
│ │ │ │
sdc Directory Reference
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/dir_f61368944c63c2c1f8c69bc232e59c39.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,9 +1,9 @@ │ │ │ │ │ var dir_f61368944c63c2c1f8c69bc232e59c39 = [ │ │ │ │ │ - ["bilinearScheme.h", "a00782.html", null], │ │ │ │ │ - ["catmarkScheme.h", "a00785.html", null], │ │ │ │ │ + ["bilinearScheme.h", "a00785.html", null], │ │ │ │ │ + ["catmarkScheme.h", "a00782.html", null], │ │ │ │ │ ["crease.h", "a00779.html", "a00779"], │ │ │ │ │ ["loopScheme.h", "a00776.html", null], │ │ │ │ │ ["options.h", "a00773.html", "a00773"], │ │ │ │ │ ["scheme.h", "a00770.html", "a00770"], │ │ │ │ │ ["types.h", "a01492.html", "a01492"] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/dir_fa5edef2a780a73fbfb6a11f1af88ceb.html │ │ │ │ @@ -107,17 +107,17 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Files

 bilinearScheme.h
 bilinearScheme.h
 
 catmarkScheme.h
 catmarkScheme.h
 
 crease.h
 
 loopScheme.h
 
 options.h
 
 
 surfaceFactory.h
 
 surfaceFactoryCache.h
 
 surfaceFactoryMeshAdapter.h
 
 tessellation.h
 tessellation.h
 
 vertexDescriptor.h
 vertexDescriptor.h
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/navtreeindex0.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,12 +1,12 @@ │ │ │ │ │ var NAVTREEINDEX0 = { │ │ │ │ │ - "a00674.html": [2, 0, 0, 0, 8], │ │ │ │ │ - "a00674_source.html": [2, 0, 0, 0, 8], │ │ │ │ │ - "a00677.html": [2, 0, 0, 0, 7], │ │ │ │ │ - "a00677_source.html": [2, 0, 0, 0, 7], │ │ │ │ │ + "a00674.html": [2, 0, 0, 0, 7], │ │ │ │ │ + "a00674_source.html": [2, 0, 0, 0, 7], │ │ │ │ │ + "a00677.html": [2, 0, 0, 0, 8], │ │ │ │ │ + "a00677_source.html": [2, 0, 0, 0, 8], │ │ │ │ │ "a00680.html": [2, 0, 0, 0, 5], │ │ │ │ │ "a00680_source.html": [2, 0, 0, 0, 5], │ │ │ │ │ "a00683.html": [2, 0, 0, 0, 6], │ │ │ │ │ "a00683_source.html": [2, 0, 0, 0, 6], │ │ │ │ │ "a00686.html": [2, 0, 0, 0, 4], │ │ │ │ │ "a00686_source.html": [2, 0, 0, 0, 4], │ │ │ │ │ "a00689.html": [2, 0, 0, 0, 3], │ │ │ │ │ @@ -19,28 +19,28 @@ │ │ │ │ │ "a00698_source.html": [2, 0, 0, 0, 0], │ │ │ │ │ "a00704.html": [2, 0, 0, 1, 13], │ │ │ │ │ "a00704_source.html": [2, 0, 0, 1, 13], │ │ │ │ │ "a00707.html": [2, 0, 0, 1, 12], │ │ │ │ │ "a00707_source.html": [2, 0, 0, 1, 12], │ │ │ │ │ "a00710.html": [2, 0, 0, 1, 11], │ │ │ │ │ "a00710_source.html": [2, 0, 0, 1, 11], │ │ │ │ │ - "a00713.html": [2, 0, 0, 1, 9], │ │ │ │ │ - "a00713_source.html": [2, 0, 0, 1, 9], │ │ │ │ │ - "a00716.html": [2, 0, 0, 1, 10], │ │ │ │ │ - "a00716_source.html": [2, 0, 0, 1, 10], │ │ │ │ │ - "a00719.html": [2, 0, 0, 1, 7], │ │ │ │ │ - "a00719_source.html": [2, 0, 0, 1, 7], │ │ │ │ │ - "a00722.html": [2, 0, 0, 1, 8], │ │ │ │ │ - "a00722_source.html": [2, 0, 0, 1, 8], │ │ │ │ │ + "a00713.html": [2, 0, 0, 1, 10], │ │ │ │ │ + "a00713_source.html": [2, 0, 0, 1, 10], │ │ │ │ │ + "a00716.html": [2, 0, 0, 1, 8], │ │ │ │ │ + "a00716_source.html": [2, 0, 0, 1, 8], │ │ │ │ │ + "a00719.html": [2, 0, 0, 1, 9], │ │ │ │ │ + "a00719_source.html": [2, 0, 0, 1, 9], │ │ │ │ │ + "a00722.html": [2, 0, 0, 1, 7], │ │ │ │ │ + "a00722_source.html": [2, 0, 0, 1, 7], │ │ │ │ │ "a00725.html": [2, 0, 0, 1, 6], │ │ │ │ │ "a00725_source.html": [2, 0, 0, 1, 6], │ │ │ │ │ - "a00728.html": [2, 0, 0, 1, 4], │ │ │ │ │ - "a00728_source.html": [2, 0, 0, 1, 4], │ │ │ │ │ - "a00731.html": [2, 0, 0, 1, 5], │ │ │ │ │ - "a00731_source.html": [2, 0, 0, 1, 5], │ │ │ │ │ + "a00728.html": [2, 0, 0, 1, 5], │ │ │ │ │ + "a00728_source.html": [2, 0, 0, 1, 5], │ │ │ │ │ + "a00731.html": [2, 0, 0, 1, 4], │ │ │ │ │ + "a00731_source.html": [2, 0, 0, 1, 4], │ │ │ │ │ "a00734.html": [2, 0, 0, 1, 2], │ │ │ │ │ "a00734_source.html": [2, 0, 0, 1, 2], │ │ │ │ │ "a00737.html": [2, 0, 0, 1, 3], │ │ │ │ │ "a00737.html#a3139c7c52ddf26b2403e8e95ff63eeb3": [2, 0, 0, 1, 3, 1], │ │ │ │ │ "a00737.html#a46ea68db89cc3d55c4191ef7648281ce": [2, 0, 0, 1, 3, 3], │ │ │ │ │ "a00737.html#abe07210a029a01571c54276ae28b4d88": [2, 0, 0, 1, 3, 2], │ │ │ │ │ "a00737_source.html": [2, 0, 0, 1, 3], │ │ │ │ │ @@ -59,18 +59,18 @@ │ │ │ │ │ "a00743.html#ab0df38968e4f03a3f1f6d6df0f31f45aa3efe6cb2ec7e23769d53919dfb3291b5": [2, 0, 0, 1, 0, 2, 2], │ │ │ │ │ "a00743.html#ab0df38968e4f03a3f1f6d6df0f31f45aa9b2839feb039937015e9668f601e4d32": [2, 0, 0, 1, 0, 2, 3], │ │ │ │ │ "a00743.html#ab0df38968e4f03a3f1f6d6df0f31f45aabeca977bc439b451aea1325f48a52a0b": [2, 0, 0, 1, 0, 2, 0], │ │ │ │ │ "a00743.html#ab0df38968e4f03a3f1f6d6df0f31f45aac565fa39d681e2766584dd87246c3bdd": [2, 0, 0, 1, 0, 2, 4], │ │ │ │ │ "a00743_source.html": [2, 0, 0, 1, 0], │ │ │ │ │ "a00746.html": [2, 0, 0, 4, 7], │ │ │ │ │ "a00746_source.html": [2, 0, 0, 4, 7], │ │ │ │ │ - "a00749.html": [2, 0, 0, 4, 6], │ │ │ │ │ - "a00749_source.html": [2, 0, 0, 4, 6], │ │ │ │ │ - "a00752.html": [2, 0, 0, 4, 5], │ │ │ │ │ - "a00752_source.html": [2, 0, 0, 4, 5], │ │ │ │ │ + "a00749.html": [2, 0, 0, 4, 5], │ │ │ │ │ + "a00749_source.html": [2, 0, 0, 4, 5], │ │ │ │ │ + "a00752.html": [2, 0, 0, 4, 6], │ │ │ │ │ + "a00752_source.html": [2, 0, 0, 4, 6], │ │ │ │ │ "a00755.html": [2, 0, 0, 4, 4], │ │ │ │ │ "a00755_source.html": [2, 0, 0, 4, 4], │ │ │ │ │ "a00758.html": [2, 0, 0, 4, 3], │ │ │ │ │ "a00758_source.html": [2, 0, 0, 4, 3], │ │ │ │ │ "a00761.html": [2, 0, 0, 4, 2], │ │ │ │ │ "a00761_source.html": [2, 0, 0, 4, 2], │ │ │ │ │ "a00764.html": [2, 0, 0, 4, 1], │ │ │ │ │ @@ -81,71 +81,71 @@ │ │ │ │ │ "a00770_source.html": [2, 0, 0, 3, 5], │ │ │ │ │ "a00773.html": [2, 0, 0, 3, 4], │ │ │ │ │ "a00773_source.html": [2, 0, 0, 3, 4], │ │ │ │ │ "a00776.html": [2, 0, 0, 3, 3], │ │ │ │ │ "a00776_source.html": [2, 0, 0, 3, 3], │ │ │ │ │ "a00779.html": [2, 0, 0, 3, 2], │ │ │ │ │ "a00779_source.html": [2, 0, 0, 3, 2], │ │ │ │ │ - "a00782.html": [2, 0, 0, 3, 0], │ │ │ │ │ - "a00782_source.html": [2, 0, 0, 3, 0], │ │ │ │ │ - "a00785.html": [2, 0, 0, 3, 1], │ │ │ │ │ - "a00785_source.html": [2, 0, 0, 3, 1], │ │ │ │ │ - "a00788.html": [2, 0, 0, 2, 10], │ │ │ │ │ - "a00788_source.html": [2, 0, 0, 2, 10], │ │ │ │ │ - "a00791.html": [2, 0, 0, 2, 9], │ │ │ │ │ - "a00791_source.html": [2, 0, 0, 2, 9], │ │ │ │ │ + "a00782.html": [2, 0, 0, 3, 1], │ │ │ │ │ + "a00782_source.html": [2, 0, 0, 3, 1], │ │ │ │ │ + "a00785.html": [2, 0, 0, 3, 0], │ │ │ │ │ + "a00785_source.html": [2, 0, 0, 3, 0], │ │ │ │ │ + "a00788.html": [2, 0, 0, 2, 9], │ │ │ │ │ + "a00788_source.html": [2, 0, 0, 2, 9], │ │ │ │ │ + "a00791.html": [2, 0, 0, 2, 10], │ │ │ │ │ + "a00791_source.html": [2, 0, 0, 2, 10], │ │ │ │ │ "a00794.html": [2, 0, 0, 2, 35], │ │ │ │ │ "a00794_source.html": [2, 0, 0, 2, 35], │ │ │ │ │ "a00797.html": [2, 0, 0, 2, 3], │ │ │ │ │ "a00797_source.html": [2, 0, 0, 2, 3], │ │ │ │ │ "a00800.html": [2, 0, 0, 2, 1], │ │ │ │ │ "a00800_source.html": [2, 0, 0, 2, 1], │ │ │ │ │ "a00803.html": [2, 0, 0, 2, 2], │ │ │ │ │ "a00803_source.html": [2, 0, 0, 2, 2], │ │ │ │ │ "a00806.html": [2, 0, 0, 2, 26], │ │ │ │ │ "a00806_source.html": [2, 0, 0, 2, 26], │ │ │ │ │ "a00809.html": [2, 0, 0, 2, 30], │ │ │ │ │ "a00809_source.html": [2, 0, 0, 2, 30], │ │ │ │ │ - "a00812.html": [2, 0, 0, 2, 31], │ │ │ │ │ - "a00812_source.html": [2, 0, 0, 2, 31], │ │ │ │ │ - "a00815.html": [2, 0, 0, 2, 29], │ │ │ │ │ - "a00815.html#aa41e5b43fe46eeb0f97ff6ebdb1935aa": [2, 0, 0, 2, 29, 0], │ │ │ │ │ - "a00815_source.html": [2, 0, 0, 2, 29], │ │ │ │ │ - "a00818.html": [2, 0, 0, 2, 28], │ │ │ │ │ - "a00818_source.html": [2, 0, 0, 2, 28], │ │ │ │ │ - "a00821.html": [2, 0, 0, 2, 27], │ │ │ │ │ - "a00821_source.html": [2, 0, 0, 2, 27], │ │ │ │ │ + "a00812.html": [2, 0, 0, 2, 29], │ │ │ │ │ + "a00812.html#aa41e5b43fe46eeb0f97ff6ebdb1935aa": [2, 0, 0, 2, 29, 0], │ │ │ │ │ + "a00812_source.html": [2, 0, 0, 2, 29], │ │ │ │ │ + "a00815.html": [2, 0, 0, 2, 31], │ │ │ │ │ + "a00815_source.html": [2, 0, 0, 2, 31], │ │ │ │ │ + "a00818.html": [2, 0, 0, 2, 27], │ │ │ │ │ + "a00818_source.html": [2, 0, 0, 2, 27], │ │ │ │ │ + "a00821.html": [2, 0, 0, 2, 28], │ │ │ │ │ + "a00821_source.html": [2, 0, 0, 2, 28], │ │ │ │ │ "a00824.html": [2, 0, 0, 2, 32], │ │ │ │ │ "a00824_source.html": [2, 0, 0, 2, 32], │ │ │ │ │ "a00827.html": [2, 0, 0, 2, 24], │ │ │ │ │ "a00827_source.html": [2, 0, 0, 2, 24], │ │ │ │ │ "a00830.html": [2, 0, 0, 2, 14], │ │ │ │ │ "a00830.html#ae5c8e80d05d6eaee105d8eecfa9ab609": [2, 0, 0, 2, 14, 0], │ │ │ │ │ "a00830_source.html": [2, 0, 0, 2, 14], │ │ │ │ │ - "a00833.html": [2, 0, 0, 2, 15], │ │ │ │ │ - "a00833_source.html": [2, 0, 0, 2, 15], │ │ │ │ │ - "a00836.html": [2, 0, 0, 2, 16], │ │ │ │ │ - "a00836_source.html": [2, 0, 0, 2, 16], │ │ │ │ │ - "a00839.html": [2, 0, 0, 2, 13], │ │ │ │ │ - "a00839_source.html": [2, 0, 0, 2, 13], │ │ │ │ │ + "a00833.html": [2, 0, 0, 2, 16], │ │ │ │ │ + "a00833_source.html": [2, 0, 0, 2, 16], │ │ │ │ │ + "a00836.html": [2, 0, 0, 2, 13], │ │ │ │ │ + "a00836_source.html": [2, 0, 0, 2, 13], │ │ │ │ │ + "a00839.html": [2, 0, 0, 2, 15], │ │ │ │ │ + "a00839_source.html": [2, 0, 0, 2, 15], │ │ │ │ │ "a00842.html": [2, 0, 0, 2, 12], │ │ │ │ │ "a00842_source.html": [2, 0, 0, 2, 12], │ │ │ │ │ "a00845.html": [2, 0, 0, 2, 4], │ │ │ │ │ "a00845_source.html": [2, 0, 0, 2, 4], │ │ │ │ │ "a00848.html": [2, 0, 0, 2, 17], │ │ │ │ │ "a00848_source.html": [2, 0, 0, 2, 17], │ │ │ │ │ - "a00851.html": [2, 0, 0, 2, 23], │ │ │ │ │ - "a00851_source.html": [2, 0, 0, 2, 23], │ │ │ │ │ - "a00854.html": [2, 0, 0, 2, 21], │ │ │ │ │ - "a00854_source.html": [2, 0, 0, 2, 21], │ │ │ │ │ - "a00857.html": [2, 0, 0, 2, 22], │ │ │ │ │ - "a00857_source.html": [2, 0, 0, 2, 22], │ │ │ │ │ - "a00860.html": [2, 0, 0, 2, 19], │ │ │ │ │ - "a00860.html#a7f9cf2b729178bdbb847fc4afd91af9e": [2, 0, 0, 2, 19, 0], │ │ │ │ │ - "a00860_source.html": [2, 0, 0, 2, 19], │ │ │ │ │ + "a00851.html": [2, 0, 0, 2, 21], │ │ │ │ │ + "a00851_source.html": [2, 0, 0, 2, 21], │ │ │ │ │ + "a00854.html": [2, 0, 0, 2, 23], │ │ │ │ │ + "a00854_source.html": [2, 0, 0, 2, 23], │ │ │ │ │ + "a00857.html": [2, 0, 0, 2, 19], │ │ │ │ │ + "a00857.html#a7f9cf2b729178bdbb847fc4afd91af9e": [2, 0, 0, 2, 19, 0], │ │ │ │ │ + "a00857_source.html": [2, 0, 0, 2, 19], │ │ │ │ │ + "a00860.html": [2, 0, 0, 2, 22], │ │ │ │ │ + "a00860_source.html": [2, 0, 0, 2, 22], │ │ │ │ │ "a00863.html": [2, 0, 0, 2, 20], │ │ │ │ │ "a00863_source.html": [2, 0, 0, 2, 20], │ │ │ │ │ "a00866.html": [2, 0, 0, 2, 18], │ │ │ │ │ "a00866_source.html": [2, 0, 0, 2, 18], │ │ │ │ │ "a00869.html": [2, 0, 0, 2, 6], │ │ │ │ │ "a00869_source.html": [2, 0, 0, 2, 6], │ │ │ │ │ "a00872.html": [2, 0, 0, 2, 38], │ │ │ │ │ @@ -182,22 +182,22 @@ │ │ │ │ │ "a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492ac10e41fef659f3b3a1b730319bdedb45": [2, 0, 0, 2, 25, 5, 2], │ │ │ │ │ "a00887.html#a1af6b50e9f8ae13d3d2f9d5b03b35492adef344bcbdd50a1a93136eb53183c718": [2, 0, 0, 2, 25, 5, 0], │ │ │ │ │ "a00887.html#a33f9830228f847fae1c30c9dffe02b5a": [2, 0, 0, 2, 25, 9], │ │ │ │ │ "a00887.html#a4c2520cc1a8a5a03e3f53584629d7318": [2, 0, 0, 2, 25, 7], │ │ │ │ │ "a00887.html#a85ba9df501aea9af1ec9da1558c255bc": [2, 0, 0, 2, 25, 4], │ │ │ │ │ "a00887.html#ab5753a2b0a0995c8e2259d2c4765f7df": [2, 0, 0, 2, 25, 8], │ │ │ │ │ "a00887_source.html": [2, 0, 0, 2, 25], │ │ │ │ │ - "a00890.html": [2, 0, 0, 2, 8], │ │ │ │ │ - "a00890_source.html": [2, 0, 0, 2, 8], │ │ │ │ │ - "a00893.html": [2, 0, 0, 2, 5], │ │ │ │ │ - "a00893_source.html": [2, 0, 0, 2, 5], │ │ │ │ │ - "a00896.html": [2, 0, 0, 2, 7], │ │ │ │ │ - "a00896_source.html": [2, 0, 0, 2, 7], │ │ │ │ │ - "a00899.html": [2, 0, 0, 2, 0], │ │ │ │ │ - "a00899_source.html": [2, 0, 0, 2, 0], │ │ │ │ │ + "a00890.html": [2, 0, 0, 2, 7], │ │ │ │ │ + "a00890_source.html": [2, 0, 0, 2, 7], │ │ │ │ │ + "a00893.html": [2, 0, 0, 2, 8], │ │ │ │ │ + "a00893_source.html": [2, 0, 0, 2, 8], │ │ │ │ │ + "a00896.html": [2, 0, 0, 2, 0], │ │ │ │ │ + "a00896_source.html": [2, 0, 0, 2, 0], │ │ │ │ │ + "a00899.html": [2, 0, 0, 2, 5], │ │ │ │ │ + "a00899_source.html": [2, 0, 0, 2, 5], │ │ │ │ │ "a00902.html": [2, 0, 0, 2, 11], │ │ │ │ │ "a00902_source.html": [2, 0, 0, 2, 11], │ │ │ │ │ "a00905.html": [0, 0, 0], │ │ │ │ │ "a00906.html": [0, 0, 0, 0], │ │ │ │ │ "a00907.html": [0, 0, 0, 0, 0], │ │ │ │ │ "a00908.html": [0, 0, 0, 0, 1], │ │ │ │ │ "a00908.html#a200172f1c19545bc01f292afa2167e2f": [0, 0, 0, 0, 1, 32], │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/search/all_10.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -2,15 +2,15 @@ │ │ │ │ │ ['reference_0', ['reference', ['../a01353.html#a9025ff89fc9afe7d9054abb58123bbda', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Vtr::ConstArray::reference'], │ │ │ │ │ ['../a01357.html#a9025ff89fc9afe7d9054abb58123bbda', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Vtr::Array::reference'] │ │ │ │ │ ]], │ │ │ │ │ ['refine_1', ['refine', ['../a01269.html#a9a90398ba2073fe3da454f6b00deb33c', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::MeshInterface::Refine()'], │ │ │ │ │ ['../a01281.html#a32c8d641fe9ea1565be646a10c5d6c85', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::Mesh::Refine()'] │ │ │ │ │ ]], │ │ │ │ │ ['refineadaptive_2', ['RefineAdaptive', ['../a01121.html#aff92309935db19988908471bee4fef4d', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyRefiner']]], │ │ │ │ │ - ['refinement_2eh_3', ['refinement.h', ['../a00752.html', 1, '']]], │ │ │ │ │ + ['refinement_2eh_3', ['refinement.h', ['../a00749.html', 1, '']]], │ │ │ │ │ ['refinementlevel_4', ['refinementLevel', ['../a01125.html#a240d1e5f5b743486e8122db6223d4562', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyRefiner::UniformOptions']]], │ │ │ │ │ ['refinemesh_5', ['refinemesh', ['../a01269.html#a51f237c3f08f6ddc2ea7ba5cb0d00b36', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::MeshInterface::refineMesh(Far::TopologyRefiner &refiner, int level, bool adaptive, bool singleCreasePatch)'], │ │ │ │ │ ['../a01269.html#a173851f742adc30ac139af96fe63732d', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::MeshInterface::refineMesh(Far::TopologyRefiner &refiner, int level, MeshBitset bits)'] │ │ │ │ │ ]], │ │ │ │ │ ['refinersurfacefactory_6', ['refinersurfacefactory', ['../a00929.html#af74dafe122d798d4069b675c52f6665a', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::RefinerSurfaceFactory::RefinerSurfaceFactory()'], │ │ │ │ │ ['../a00929.html', 1, 'RefinerSurfaceFactory< CACHE_TYPE >'] │ │ │ │ │ ]], │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/search/all_11.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ │ ['shrinktofit_62', ['shrinkToFit', ['../a01061.html#a84fb9ead4f0f7458491b5d310592cea9', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::StencilTableReal']]], │ │ │ │ │ ['size_63', ['size', ['../a00937.html#a439227feff9d7f55384e8780cfc2eb82', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Surface::PointDescriptor::size'], │ │ │ │ │ ['../a01353.html#a60304b65bf89363bcc3165d3cde67f86', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Vtr::ConstArray::size() const'] │ │ │ │ │ ]], │ │ │ │ │ ['size_5ftype_64', ['size_type', ['../a01353.html#aafd1e3ba4133ad908bdbc99c4b356e5f', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Vtr::ConstArray::size_type'], │ │ │ │ │ ['../a01357.html#aafd1e3ba4133ad908bdbc99c4b356e5f', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Vtr::Array::size_type'] │ │ │ │ │ ]], │ │ │ │ │ - ['sparseselector_2eh_65', ['sparseSelector.h', ['../a00749.html', 1, '']]], │ │ │ │ │ + ['sparseselector_2eh_65', ['sparseSelector.h', ['../a00752.html', 1, '']]], │ │ │ │ │ ['split_66', ['Split', ['../a00913.html#a61ef2f8f765ba17f8036bcc0f0fa887b', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc']]], │ │ │ │ │ ['split_5fhybrid_67', ['SPLIT_HYBRID', ['../a00913.html#a61ef2f8f765ba17f8036bcc0f0fa887ba6ebca125aa2292ebbdfd6539d3656d28', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc']]], │ │ │ │ │ ['split_5fto_5fquads_68', ['SPLIT_TO_QUADS', ['../a00913.html#a61ef2f8f765ba17f8036bcc0f0fa887ba56eed514f6a5971f198c9e421054b513', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc']]], │ │ │ │ │ ['split_5fto_5ftris_69', ['SPLIT_TO_TRIS', ['../a00913.html#a61ef2f8f765ba17f8036bcc0f0fa887ba31959b36c678fcb560f478ecb7c051f5', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc']]], │ │ │ │ │ ['srcdesc_70', ['srcDesc', ['../a01277.html#a5d0b0430c7584408dbcd788f52b80fd4', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::EvaluatorCacheT::Entry']]], │ │ │ │ │ ['stackbuffer_2eh_71', ['stackBuffer.h', ['../a00746.html', 1, '']]], │ │ │ │ │ ['stencil_72', ['stencil', ['../a01057.html', 1, 'Stencil'], │ │ │ │ │ @@ -101,17 +101,17 @@ │ │ │ │ │ ['stencilreal_3c_20float_20_3e_74', ['StencilReal< float >', ['../a01053.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far']]], │ │ │ │ │ ['stenciltable_75', ['stenciltable', ['../a01065.html#a3d12830eb0d421206de500d7abc9decf', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::StencilTable::StencilTable(int numControlVerts, std::vector< int > const &offsets, std::vector< int > const &sizes, std::vector< int > const &sources, std::vector< float > const &weights, bool includeCoarseVerts, size_t firstOffset)'], │ │ │ │ │ ['../a01065.html#a54db76b34112b5cb3c623be8789dd8f4', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::StencilTable::StencilTable(int numControlVerts)'], │ │ │ │ │ ['../a01065.html#acc553d2d5624ab2a790ae9613812393e', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::StencilTable::StencilTable()'], │ │ │ │ │ ['../a01281.html#a6b90e8290c540c78bedd053e2cc42f31', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::Mesh::StencilTable'], │ │ │ │ │ ['../a01065.html', 1, 'StencilTable'] │ │ │ │ │ ]], │ │ │ │ │ - ['stenciltable_2eh_76', ['stencilTable.h', ['../a00722.html', 1, '']]], │ │ │ │ │ + ['stenciltable_2eh_76', ['stencilTable.h', ['../a00716.html', 1, '']]], │ │ │ │ │ ['stenciltablefactory_77', ['StencilTableFactory', ['../a01097.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far']]], │ │ │ │ │ - ['stenciltablefactory_2eh_78', ['stencilTableFactory.h', ['../a00713.html', 1, '']]], │ │ │ │ │ + ['stenciltablefactory_2eh_78', ['stencilTableFactory.h', ['../a00719.html', 1, '']]], │ │ │ │ │ ['stenciltablefactoryreal_79', ['StencilTableFactoryReal', ['../a01045.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far']]], │ │ │ │ │ ['stenciltablefactoryreal_3c_20float_20_3e_80', ['StencilTableFactoryReal< float >', ['../a01045.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far']]], │ │ │ │ │ ['stenciltablefactoryreal_3c_20real_20_3e_81', ['stenciltablefactoryreal< real >', ['../a01053.html#af58f6a3f9b167c3330097c1a69ca36a8', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::StencilReal::StencilTableFactoryReal< REAL >'], │ │ │ │ │ ['../a01061.html#af58f6a3f9b167c3330097c1a69ca36a8', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::StencilTableReal::StencilTableFactoryReal< REAL >'], │ │ │ │ │ ['../a01069.html#af58f6a3f9b167c3330097c1a69ca36a8', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::LimitStencilReal::StencilTableFactoryReal< REAL >'] │ │ │ │ │ ]], │ │ │ │ │ ['stenciltablereal_82', ['stenciltablereal', ['../a01061.html', 1, 'StencilTableReal< REAL >'], │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/search/all_12.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -14,20 +14,20 @@ │ │ │ │ │ ['tbbkernel_2eh_5', ['tbbKernel.h', ['../a00872.html', 1, '']]], │ │ │ │ │ ['tessellation_6', ['tessellation', ['../a00961.html', 1, 'Tessellation'], │ │ │ │ │ ['../a00961.html#ab03191ef31cf0d8b0bcc44f226804e87', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Tessellation::Tessellation(Tessellation const &)=delete'], │ │ │ │ │ ['../a00961.html#a7a3e89992f3cc492804ec9bc184a1674', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Tessellation::Tessellation()=delete'], │ │ │ │ │ ['../a00961.html#a65ee652b3607c97bb2b04a64c55d7f99', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Tessellation::Tessellation(Parameterization const &p, int numRates, int const rates[], Options const &options=Options())'], │ │ │ │ │ ['../a00961.html#a7f0af117d53701f7ca6e3eb2368b89bb', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Tessellation::Tessellation(Parameterization const &p, int uniformRate, Options const &options=Options())'] │ │ │ │ │ ]], │ │ │ │ │ - ['tessellation_2eh_7', ['tessellation.h', ['../a00677.html', 1, '']]], │ │ │ │ │ + ['tessellation_2eh_7', ['tessellation.h', ['../a00674.html', 1, '']]], │ │ │ │ │ ['topologycallback_8', ['TopologyCallback', ['../a01133.html#a896a964625491e084b3d776acd10f053', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyRefinerFactoryBase']]], │ │ │ │ │ ['topologydescriptor_9', ['topologydescriptor', ['../a01105.html', 1, 'TopologyDescriptor'], │ │ │ │ │ ['../a01105.html#a8209f1b69b0162ee2e7065d91088113d', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyDescriptor::TopologyDescriptor()'] │ │ │ │ │ ]], │ │ │ │ │ - ['topologydescriptor_2eh_10', ['topologyDescriptor.h', ['../a00716.html', 1, '']]], │ │ │ │ │ + ['topologydescriptor_2eh_10', ['topologyDescriptor.h', ['../a00713.html', 1, '']]], │ │ │ │ │ ['topologyerror_11', ['TopologyError', ['../a01117.html#a5458be6ce3f2e63c8d8555f4ab3b2b62', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyRefinerFactory']]], │ │ │ │ │ ['topologylevel_12', ['topologylevel', ['../a01113.html', 1, 'TopologyLevel'], │ │ │ │ │ ['../a01113.html#a03a8183081b34983ade155e3636ba835', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyLevel::TopologyLevel()'] │ │ │ │ │ ]], │ │ │ │ │ ['topologylevel_2eh_13', ['topologyLevel.h', ['../a00710.html', 1, '']]], │ │ │ │ │ ['topologyrefiner_14', ['topologyrefiner', ['../a01121.html', 1, 'TopologyRefiner'], │ │ │ │ │ ['../a01113.html#a094d2e51437ecd5ecc6a0cf2c4ce1e78', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyLevel::TopologyRefiner'], │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/search/all_14.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -9,15 +9,15 @@ │ │ │ │ │ ['vertexbufferbinding_5', ['vertexbufferbinding', ['../a01209.html#a2d85a5ed6ddcef5023c9ef2e6fdd38a5', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::D3D11PatchTable::VertexBufferBinding'], │ │ │ │ │ ['../a01237.html#a02af2ea2e9328a776b5b0bb3edf88864', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLPatchTable::VertexBufferBinding'], │ │ │ │ │ ['../a01269.html#a9cf40ecf1b9b5c29507fe92a03f37a3c', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::MeshInterface::VertexBufferBinding'], │ │ │ │ │ ['../a01281.html#a9cf40ecf1b9b5c29507fe92a03f37a3c', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::Mesh::VertexBufferBinding'], │ │ │ │ │ ['../a01305.html#aa00654dc321a5c8dc370a900b0f404da', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::MTLPatchTable::VertexBufferBinding'] │ │ │ │ │ ]], │ │ │ │ │ ['vertexdescriptor_6', ['VertexDescriptor', ['../a00969.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr']]], │ │ │ │ │ - ['vertexdescriptor_2eh_7', ['vertexDescriptor.h', ['../a00674.html', 1, '']]], │ │ │ │ │ + ['vertexdescriptor_2eh_7', ['vertexDescriptor.h', ['../a00677.html', 1, '']]], │ │ │ │ │ ['vertexvalencetable_8', ['VertexValenceTable', ['../a00993.html#a2fbf111cac9d122eeaec5c0cb73fa77d', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTable']]], │ │ │ │ │ ['vertexweight_9', ['vertexweight', ['../a01345.html#aec5c2abfdfbde4dd934c061625994791', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Scheme::LocalMask::VertexWeight(int index) const'], │ │ │ │ │ ['../a01345.html#a92e98987f9a4220b9edd041401c9ed76', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Scheme::LocalMask::VertexWeight(int index)'] │ │ │ │ │ ]], │ │ │ │ │ ['vertindex_10', ['vertIndex', ['../a00997.html#a46d1a8129375c3ee40a33a81d44b685a', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTable::PatchHandle']]], │ │ │ │ │ ['vertindicesperface_11', ['vertIndicesPerFace', ['../a01105.html#a3f2274c4d3dd54c4e24144e504972b34', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyDescriptor']]], │ │ │ │ │ ['vtx_5fboundary_5fedge_5fand_5fcorner_12', ['VTX_BOUNDARY_EDGE_AND_CORNER', ['../a01337.html#acbf78f1a6abfc8db080ef7fb3c3f417eac6e5f52f358d3b6d62cc2b708a5a8757', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Options']]], │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/search/all_2.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -4,15 +4,15 @@ │ │ │ │ │ ]], │ │ │ │ │ ['basetable_1', ['basetable', ['../a01065.html#a54f0bb223290a17a59f51f4cbcfbc2e2', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::StencilTable::BaseTable'], │ │ │ │ │ ['../a01081.html#a13d2ee8ca9cdc9073905193ea1cefd95', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::LimitStencilTable::BaseTable'] │ │ │ │ │ ]], │ │ │ │ │ ['begin_2', ['begin', ['../a01353.html#a29305669b60ca1680752e2fc3592ba99', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Vtr::ConstArray::begin()'], │ │ │ │ │ ['../a01357.html#ad69bd11391be1a1dba5c8202259664f8', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Vtr::Array::begin()'] │ │ │ │ │ ]], │ │ │ │ │ - ['bilinearscheme_2eh_3', ['bilinearScheme.h', ['../a00782.html', 1, '']]], │ │ │ │ │ + ['bilinearscheme_2eh_3', ['bilinearScheme.h', ['../a00785.html', 1, '']]], │ │ │ │ │ ['bindclbuffer_4', ['BindCLBuffer', ['../a01157.html#ad9c25d5b96f9d5e971f677d32b406ec6', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CLVertexBuffer']]], │ │ │ │ │ ['bindcpubuffer_5', ['bindcpubuffer', ['../a01161.html#adf7a9df5d3fc4d803bf5f1f374d90274', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CpuD3D11VertexBuffer::BindCpuBuffer()'], │ │ │ │ │ ['../a01169.html#adf7a9df5d3fc4d803bf5f1f374d90274', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CpuGLVertexBuffer::BindCpuBuffer()'], │ │ │ │ │ ['../a01177.html#adf7a9df5d3fc4d803bf5f1f374d90274', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CpuVertexBuffer::BindCpuBuffer()'], │ │ │ │ │ ['../a01309.html#adf7a9df5d3fc4d803bf5f1f374d90274', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CPUMTLVertexBuffer::BindCpuBuffer()'] │ │ │ │ │ ]], │ │ │ │ │ ['bindcudabuffer_6', ['BindCudaBuffer', ['../a01193.html#a59eb144c23606529ba730ae15598af09', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CudaVertexBuffer']]], │ │ │ │ │ @@ -35,9 +35,9 @@ │ │ │ │ │ ]], │ │ │ │ │ ['boundcontrolpoints_13', ['BoundControlPoints', ['../a00933.html#a22604a4489ed5fdedb0ef272de0fa637', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Surface']]], │ │ │ │ │ ['boundcontrolpointsfrommesh_14', ['BoundControlPointsFromMesh', ['../a00933.html#a8df5cf06cea51aeb6419fd698651ae3b', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Surface']]], │ │ │ │ │ ['bufferdescriptor_15', ['bufferdescriptor', ['../a01141.html', 1, 'BufferDescriptor'], │ │ │ │ │ ['../a01141.html#a958068066d1d10ae2a452ac57d9c0401', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::BufferDescriptor::BufferDescriptor(int o, int l, int s)'], │ │ │ │ │ ['../a01141.html#a446218762f5de8c77d06ee61e14b6b61', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::BufferDescriptor::BufferDescriptor()'] │ │ │ │ │ ]], │ │ │ │ │ - ['bufferdescriptor_2eh_16', ['bufferDescriptor.h', ['../a00899.html', 1, '']]] │ │ │ │ │ + ['bufferdescriptor_2eh_16', ['bufferDescriptor.h', ['../a00896.html', 1, '']]] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/search/all_3.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,9 +1,9 @@ │ │ │ │ │ var searchData = [ │ │ │ │ │ - ['catmarkscheme_2eh_0', ['catmarkScheme.h', ['../a00785.html', 1, '']]], │ │ │ │ │ + ['catmarkscheme_2eh_0', ['catmarkScheme.h', ['../a00782.html', 1, '']]], │ │ │ │ │ ['child_1', ['Child', ['../a00985.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchMap::QuadNode']]], │ │ │ │ │ ['clear_2', ['clear', ['../a01025.html#ac8bb3912a3ce86b15842e79d0b421204', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTableFactory::PatchFaceTag::clear()'], │ │ │ │ │ ['../a01077.html#aa71d36872f416feaa853788a7a7a7ef8', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::LimitStencilTableReal::Clear()'], │ │ │ │ │ ['../a01061.html#aa71d36872f416feaa853788a7a7a7ef8', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::StencilTableReal::Clear()'], │ │ │ │ │ ['../a00989.html#aa71d36872f416feaa853788a7a7a7ef8', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchParam::Clear()'], │ │ │ │ │ ['../a00933.html#aa71d36872f416feaa853788a7a7a7ef8', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Surface::Clear()'] │ │ │ │ │ ]], │ │ │ │ │ @@ -79,30 +79,30 @@ │ │ │ │ │ ['cornervertexindices_43', ['cornerVertexIndices', ['../a01105.html#a3bf794743edda29fbee0653b65b75ba4', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyDescriptor']]], │ │ │ │ │ ['cornerweights_44', ['cornerWeights', ['../a01105.html#a6d938f6b0a9ff0fa377ef675aa2c7fda', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyDescriptor']]], │ │ │ │ │ ['cpud3d11vertexbuffer_45', ['cpud3d11vertexbuffer', ['../a01161.html', 1, 'CpuD3D11VertexBuffer'], │ │ │ │ │ ['../a01161.html#a632143bc1ec4fbbca2148b0e9e87bc08', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CpuD3D11VertexBuffer::CpuD3D11VertexBuffer()'] │ │ │ │ │ ]], │ │ │ │ │ ['cpud3d11vertexbuffer_2eh_46', ['cpuD3D11VertexBuffer.h', ['../a00845.html', 1, '']]], │ │ │ │ │ ['cpuevaluator_47', ['CpuEvaluator', ['../a01165.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]], │ │ │ │ │ - ['cpuevaluator_2eh_48', ['cpuEvaluator.h', ['../a00893.html', 1, '']]], │ │ │ │ │ + ['cpuevaluator_2eh_48', ['cpuEvaluator.h', ['../a00899.html', 1, '']]], │ │ │ │ │ ['cpuglvertexbuffer_49', ['cpuglvertexbuffer', ['../a01169.html', 1, 'CpuGLVertexBuffer'], │ │ │ │ │ ['../a01169.html#a32dd2317d622c1b079e3219f97c86955', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CpuGLVertexBuffer::CpuGLVertexBuffer()'] │ │ │ │ │ ]], │ │ │ │ │ ['cpuglvertexbuffer_2eh_50', ['cpuGLVertexBuffer.h', ['../a00869.html', 1, '']]], │ │ │ │ │ ['cpumtlvertexbuffer_51', ['cpumtlvertexbuffer', ['../a01309.html', 1, 'CPUMTLVertexBuffer'], │ │ │ │ │ ['../a01309.html#a1457f342bc3007386104aa3d29277a67', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CPUMTLVertexBuffer::CPUMTLVertexBuffer()'] │ │ │ │ │ ]], │ │ │ │ │ ['cpupatchtable_52', ['cpupatchtable', ['../a01173.html', 1, 'CpuPatchTable'], │ │ │ │ │ ['../a01173.html#a3c19d1748852f36ba69a6557e5069e08', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CpuPatchTable::CpuPatchTable()'] │ │ │ │ │ ]], │ │ │ │ │ - ['cpupatchtable_2eh_53', ['cpuPatchTable.h', ['../a00896.html', 1, '']]], │ │ │ │ │ + ['cpupatchtable_2eh_53', ['cpuPatchTable.h', ['../a00890.html', 1, '']]], │ │ │ │ │ ['cpuvertexbuffer_54', ['cpuvertexbuffer', ['../a01177.html#afa9168f4f1f046aea4ff94933ac48972', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CpuVertexBuffer::CpuVertexBuffer()'], │ │ │ │ │ ['../a01177.html', 1, 'CpuVertexBuffer'] │ │ │ │ │ ]], │ │ │ │ │ - ['cpuvertexbuffer_2eh_55', ['cpuVertexBuffer.h', ['../a00890.html', 1, '']]], │ │ │ │ │ + ['cpuvertexbuffer_2eh_55', ['cpuVertexBuffer.h', ['../a00893.html', 1, '']]], │ │ │ │ │ ['crease_56', ['crease', ['../a01333.html#a9659c3f2c73b80d9dc22763a6054079b', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Crease::Crease()'], │ │ │ │ │ ['../a01333.html#a75d5d7e54170ccf6481932916e0fa9c1', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Crease::Crease(Options const &options)'], │ │ │ │ │ ['../a01333.html', 1, 'Crease'] │ │ │ │ │ ]], │ │ │ │ │ ['crease_2eh_57', ['crease.h', ['../a00779.html', 1, '']]], │ │ │ │ │ ['crease_5fchaikin_58', ['CREASE_CHAIKIN', ['../a01337.html#a16ec522dc0398bf1435a912cd669ffb0a1e31a583663dd65a7b2feffeb24268b5', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Options']]], │ │ │ │ │ ['crease_5funiform_59', ['CREASE_UNIFORM', ['../a01337.html#a16ec522dc0398bf1435a912cd669ffb0a10f2956db48d2975424be2e52ebd544d', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Options']]], │ │ │ │ │ @@ -174,19 +174,19 @@ │ │ │ │ │ ]], │ │ │ │ │ ['createfacevaryingsurface_65', ['createfacevaryingsurface', ['../a00941.html#a67a5dcab87b052d231634dd9fcf5dee2', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::SurfaceFactory::CreateFaceVaryingSurface(Index faceIndex) const'], │ │ │ │ │ ['../a00941.html#a59227e292ea63aa9641a090521cfd457', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::SurfaceFactory::CreateFaceVaryingSurface(Index faceIndex, FVarID id) const'] │ │ │ │ │ ]], │ │ │ │ │ ['createvaryingsurface_66', ['CreateVaryingSurface', ['../a00941.html#a81638f2ff6818fd96aa7cd1ad3ed0703', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::SurfaceFactory']]], │ │ │ │ │ ['createvertexsurface_67', ['CreateVertexSurface', ['../a00941.html#a676cf019574c99fa77341ac09889192d', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::SurfaceFactory']]], │ │ │ │ │ ['cudaevaluator_68', ['CudaEvaluator', ['../a01185.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]], │ │ │ │ │ - ['cudaevaluator_2eh_69', ['cudaEvaluator.h', ['../a00791.html', 1, '']]], │ │ │ │ │ + ['cudaevaluator_2eh_69', ['cudaEvaluator.h', ['../a00788.html', 1, '']]], │ │ │ │ │ ['cudapatchtable_70', ['cudapatchtable', ['../a01189.html', 1, 'CudaPatchTable'], │ │ │ │ │ ['../a01189.html#aefa9c1a9175327a40e7cf46ed32ced2f', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CudaPatchTable::CudaPatchTable()'] │ │ │ │ │ ]], │ │ │ │ │ - ['cudapatchtable_2eh_71', ['cudaPatchTable.h', ['../a00788.html', 1, '']]], │ │ │ │ │ + ['cudapatchtable_2eh_71', ['cudaPatchTable.h', ['../a00791.html', 1, '']]], │ │ │ │ │ ['cudastenciltable_72', ['cudastenciltable', ['../a01181.html#a45150c630c07bbeabd4b91145cecf087', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CudaStencilTable::CudaStencilTable()'], │ │ │ │ │ ['../a01181.html', 1, 'CudaStencilTable'], │ │ │ │ │ ['../a01181.html#af872fc469b3696a745d30d22c2b89c4c', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CudaStencilTable::CudaStencilTable()'] │ │ │ │ │ ]], │ │ │ │ │ ['cudavertexbuffer_73', ['cudavertexbuffer', ['../a01193.html#af6cb32d896f7815cac1969c857845ba8', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::CudaVertexBuffer::CudaVertexBuffer()'], │ │ │ │ │ ['../a01193.html', 1, 'CudaVertexBuffer'] │ │ │ │ │ ]], │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/search/all_4.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -2,28 +2,28 @@ │ │ │ │ │ ['d3d11computeevaluator_0', ['d3d11computeevaluator', ['../a01201.html', 1, 'D3D11ComputeEvaluator'], │ │ │ │ │ ['../a01201.html#aa81511d3938d70d67a62217951cb8eb7', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::D3D11ComputeEvaluator::D3D11ComputeEvaluator()'] │ │ │ │ │ ]], │ │ │ │ │ ['d3d11computeevaluator_2eh_1', ['d3d11ComputeEvaluator.h', ['../a00842.html', 1, '']]], │ │ │ │ │ ['d3d11legacygregorypatchtable_2', ['d3d11legacygregorypatchtable', ['../a01205.html', 1, 'D3D11LegacyGregoryPatchTable'], │ │ │ │ │ ['../a01205.html#af138b4535e4db5f013225c5924e0b243', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::D3D11LegacyGregoryPatchTable::D3D11LegacyGregoryPatchTable()'] │ │ │ │ │ ]], │ │ │ │ │ - ['d3d11legacygregorypatchtable_2eh_3', ['d3d11LegacyGregoryPatchTable.h', ['../a00839.html', 1, '']]], │ │ │ │ │ + ['d3d11legacygregorypatchtable_2eh_3', ['d3d11LegacyGregoryPatchTable.h', ['../a00836.html', 1, '']]], │ │ │ │ │ ['d3d11mesh_2eh_4', ['d3d11Mesh.h', ['../a00830.html', 1, '']]], │ │ │ │ │ ['d3d11meshinterface_5', ['D3D11MeshInterface', ['../a00912.html#ae5c8e80d05d6eaee105d8eecfa9ab609', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]], │ │ │ │ │ ['d3d11patchtable_6', ['d3d11patchtable', ['../a01209.html#ac81ed5f09e3d3a2aae5a01802b343a6d', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::D3D11PatchTable::D3D11PatchTable()'], │ │ │ │ │ ['../a01209.html', 1, 'D3D11PatchTable'] │ │ │ │ │ ]], │ │ │ │ │ - ['d3d11patchtable_2eh_7', ['d3d11PatchTable.h', ['../a00833.html', 1, '']]], │ │ │ │ │ + ['d3d11patchtable_2eh_7', ['d3d11PatchTable.h', ['../a00839.html', 1, '']]], │ │ │ │ │ ['d3d11stenciltable_8', ['d3d11stenciltable', ['../a01197.html', 1, 'D3D11StencilTable'], │ │ │ │ │ ['../a01197.html#a7e3a2f5c281c55308400138222797dbc', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::D3D11StencilTable::D3D11StencilTable()'] │ │ │ │ │ ]], │ │ │ │ │ ['d3d11vertexbuffer_9', ['d3d11vertexbuffer', ['../a01213.html', 1, 'D3D11VertexBuffer'], │ │ │ │ │ ['../a01213.html#aacfe93ef7f7ede21dcf7088b62467742', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::D3D11VertexBuffer::D3D11VertexBuffer()'] │ │ │ │ │ ]], │ │ │ │ │ - ['d3d11vertexbuffer_2eh_10', ['d3d11VertexBuffer.h', ['../a00836.html', 1, '']]], │ │ │ │ │ + ['d3d11vertexbuffer_2eh_10', ['d3d11VertexBuffer.h', ['../a00833.html', 1, '']]], │ │ │ │ │ ['decrementsharpness_11', ['decrementSharpness', ['../a01333.html#a453a232c0edcafd9d484197d46ed39ec', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Crease']]], │ │ │ │ │ ['desc_12', ['desc', ['../a01325.html#ac84ff682fda703f1f552a05977050f20', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::PatchArray']]], │ │ │ │ │ ['determinevertexvertexrule_13', ['determinevertexvertexrule', ['../a01333.html#a41ebb75d28c5973328e0e3883495aeba', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Crease::DetermineVertexVertexRule(float vertexSharpness, int incidentEdgeCount, float const *incidentEdgeSharpness) const'], │ │ │ │ │ ['../a01333.html#a500fadaa8cec78ab9690ad7331dba3d6', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Sdc::Crease::DetermineVertexVertexRule(float vertexSharpness, int sharpEdgeCount) const'] │ │ │ │ │ ]], │ │ │ │ │ ['device_14', ['device', ['../a01285.html#a7d70f5acf4efd89092645b4c44e480cf', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::MTLContext']]], │ │ │ │ │ ['devicecontext_15', ['DeviceContext', ['../a01281.html#a3e2f358c45731eceb819ae70e7c8ca6e', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::Mesh']]], │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/search/all_7.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -530,36 +530,36 @@ │ │ │ │ │ ['../a01221.html', 1, 'GLComputeEvaluator'] │ │ │ │ │ ]], │ │ │ │ │ ['glcomputeevaluator_2eh_270', ['glComputeEvaluator.h', ['../a00848.html', 1, '']]], │ │ │ │ │ ['gllegacygregorypatchtable_271', ['gllegacygregorypatchtable', ['../a01233.html#a5b78188b846b316c5c0cdb42f4ee9563', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLLegacyGregoryPatchTable::GLLegacyGregoryPatchTable()'], │ │ │ │ │ ['../a01233.html', 1, 'GLLegacyGregoryPatchTable'] │ │ │ │ │ ]], │ │ │ │ │ ['gllegacygregorypatchtable_2eh_272', ['glLegacyGregoryPatchTable.h', ['../a00866.html', 1, '']]], │ │ │ │ │ - ['glmesh_2eh_273', ['glMesh.h', ['../a00860.html', 1, '']]], │ │ │ │ │ + ['glmesh_2eh_273', ['glMesh.h', ['../a00857.html', 1, '']]], │ │ │ │ │ ['glmeshinterface_274', ['GLMeshInterface', ['../a00912.html#a7f9cf2b729178bdbb847fc4afd91af9e', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]], │ │ │ │ │ ['glpatchtable_275', ['glpatchtable', ['../a01237.html#a88c12681f62189c398c1d2dc32111264', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLPatchTable::GLPatchTable()'], │ │ │ │ │ ['../a01237.html', 1, 'GLPatchTable'] │ │ │ │ │ ]], │ │ │ │ │ ['glpatchtable_2eh_276', ['glPatchTable.h', ['../a00863.html', 1, '']]], │ │ │ │ │ ['glslpatchshadersource_277', ['GLSLPatchShaderSource', ['../a01241.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]], │ │ │ │ │ - ['glslpatchshadersource_2eh_278', ['glslPatchShaderSource.h', ['../a00854.html', 1, '']]], │ │ │ │ │ + ['glslpatchshadersource_2eh_278', ['glslPatchShaderSource.h', ['../a00851.html', 1, '']]], │ │ │ │ │ ['glstenciltablessbo_279', ['glstenciltablessbo', ['../a01217.html', 1, 'GLStencilTableSSBO'], │ │ │ │ │ ['../a01217.html#aaacee6173a99bb3d7bbfb0a352ef9828', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLStencilTableSSBO::GLStencilTableSSBO(Far::StencilTable const *stencilTable)'], │ │ │ │ │ ['../a01217.html#a27a911fea9736fbe935c0edc4de9b998', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLStencilTableSSBO::GLStencilTableSSBO(Far::LimitStencilTable const *limitStencilTable)'] │ │ │ │ │ ]], │ │ │ │ │ ['glstenciltabletbo_280', ['glstenciltabletbo', ['../a01249.html', 1, 'GLStencilTableTBO'], │ │ │ │ │ ['../a01249.html#abbba46ba67be00a0eac751e3e731db6e', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLStencilTableTBO::GLStencilTableTBO(Far::StencilTable const *stencilTable)'], │ │ │ │ │ ['../a01249.html#ac74a769daf1fe45575a16b738bb761cd', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLStencilTableTBO::GLStencilTableTBO(Far::LimitStencilTable const *limitStencilTable)'] │ │ │ │ │ ]], │ │ │ │ │ ['glvertexbuffer_281', ['glvertexbuffer', ['../a01245.html', 1, 'GLVertexBuffer'], │ │ │ │ │ ['../a01245.html#aa6f38a53fba4a64d600b9c4695477049', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLVertexBuffer::GLVertexBuffer()'] │ │ │ │ │ ]], │ │ │ │ │ - ['glvertexbuffer_2eh_282', ['glVertexBuffer.h', ['../a00857.html', 1, '']]], │ │ │ │ │ + ['glvertexbuffer_2eh_282', ['glVertexBuffer.h', ['../a00860.html', 1, '']]], │ │ │ │ │ ['glxfbevaluator_283', ['glxfbevaluator', ['../a01253.html#a1932f725b28e271ab11ca768ba3bb01e', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::GLXFBEvaluator::GLXFBEvaluator()'], │ │ │ │ │ ['../a01253.html', 1, 'GLXFBEvaluator'] │ │ │ │ │ ]], │ │ │ │ │ - ['glxfbevaluator_2eh_284', ['glXFBEvaluator.h', ['../a00851.html', 1, '']]], │ │ │ │ │ + ['glxfbevaluator_2eh_284', ['glXFBEvaluator.h', ['../a00854.html', 1, '']]], │ │ │ │ │ ['gregory_285', ['GREGORY', ['../a00973.html#a1d1cfd8ffb84e947f82999c682b666a7ae765e809376e5557d348d3e991a7273e', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchDescriptor']]], │ │ │ │ │ ['gregory_5fbasis_286', ['GREGORY_BASIS', ['../a00973.html#a1d1cfd8ffb84e947f82999c682b666a7ad7d1a88a40ae8938e07af7a7745054b0', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchDescriptor']]], │ │ │ │ │ ['gregory_5fboundary_287', ['GREGORY_BOUNDARY', ['../a00973.html#a1d1cfd8ffb84e947f82999c682b666a7ac4ae10df9c13e44880ca7be341e44f2a', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchDescriptor']]], │ │ │ │ │ ['gregory_5ftriangle_288', ['GREGORY_TRIANGLE', ['../a00973.html#a1d1cfd8ffb84e947f82999c682b666a7a8bf2cfb939c78155cae7549621ea73f6', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchDescriptor']]] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/search/all_b.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -26,25 +26,25 @@ │ │ │ │ │ ['mode_20', ['mode', ['../a01045.html#a46c8a310cf4c094f8c80e1cb8dc1f911', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::StencilTableFactoryReal::Mode'], │ │ │ │ │ ['../a01049.html#a46c8a310cf4c094f8c80e1cb8dc1f911', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::LimitStencilTableFactoryReal::Mode'] │ │ │ │ │ ]], │ │ │ │ │ ['mtlcommon_2eh_21', ['mtlCommon.h', ['../a00806.html', 1, '']]], │ │ │ │ │ ['mtlcomputeevaluator_22', ['mtlcomputeevaluator', ['../a01293.html#a10015b2c4f90f3a11e60cc88dcbb9d6b', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::MTLComputeEvaluator::MTLComputeEvaluator()'], │ │ │ │ │ ['../a01293.html', 1, 'MTLComputeEvaluator'] │ │ │ │ │ ]], │ │ │ │ │ - ['mtlcomputeevaluator_2eh_23', ['mtlComputeEvaluator.h', ['../a00821.html', 1, '']]], │ │ │ │ │ + ['mtlcomputeevaluator_2eh_23', ['mtlComputeEvaluator.h', ['../a00818.html', 1, '']]], │ │ │ │ │ ['mtlcontext_24', ['MTLContext', ['../a01285.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]], │ │ │ │ │ ['mtllegacygregorypatchtable_25', ['MTLLegacyGregoryPatchTable', ['../a01297.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]], │ │ │ │ │ - ['mtllegacygregorypatchtable_2eh_26', ['mtlLegacyGregoryPatchTable.h', ['../a00818.html', 1, '']]], │ │ │ │ │ - ['mtlmesh_2eh_27', ['mtlMesh.h', ['../a00815.html', 1, '']]], │ │ │ │ │ + ['mtllegacygregorypatchtable_2eh_26', ['mtlLegacyGregoryPatchTable.h', ['../a00821.html', 1, '']]], │ │ │ │ │ + ['mtlmesh_2eh_27', ['mtlMesh.h', ['../a00812.html', 1, '']]], │ │ │ │ │ ['mtlmeshinterface_28', ['MTLMeshInterface', ['../a00912.html#aa41e5b43fe46eeb0f97ff6ebdb1935aa', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]], │ │ │ │ │ ['mtlpatchshadersource_29', ['MTLPatchShaderSource', ['../a01301.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd']]], │ │ │ │ │ ['mtlpatchshadersource_2eh_30', ['mtlPatchShaderSource.h', ['../a00809.html', 1, '']]], │ │ │ │ │ ['mtlpatchtable_31', ['mtlpatchtable', ['../a01305.html', 1, 'MTLPatchTable'], │ │ │ │ │ ['../a01305.html#a3f197c2ae3862390d72e7443a2525187', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::MTLPatchTable::MTLPatchTable()'] │ │ │ │ │ ]], │ │ │ │ │ - ['mtlpatchtable_2eh_32', ['mtlPatchTable.h', ['../a00812.html', 1, '']]], │ │ │ │ │ + ['mtlpatchtable_2eh_32', ['mtlPatchTable.h', ['../a00815.html', 1, '']]], │ │ │ │ │ ['mtlstenciltable_33', ['mtlstenciltable', ['../a01289.html', 1, 'MTLStencilTable'], │ │ │ │ │ ['../a01289.html#a015dc72c3360b4841ee2b3feb06c106f', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::MTLStencilTable::MTLStencilTable(Far::LimitStencilTable const *stencilTable, MTLContext *context)'], │ │ │ │ │ ['../a01289.html#a45e329ffe9fe4e32a1b21bfc89a6763f', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::MTLStencilTable::MTLStencilTable(Far::StencilTable const *stencilTable, MTLContext *context)'] │ │ │ │ │ ]], │ │ │ │ │ ['mtlvertexbuffer_2eh_34', ['mtlVertexBuffer.h', ['../a00824.html', 1, '']]] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/search/all_e.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -40,20 +40,20 @@ │ │ │ │ │ ['patchtable_19', ['patchtable', ['../a00993.html', 1, 'PatchTable'], │ │ │ │ │ ['../a00993.html#a37e24b0244219eef61cc1ab2a5a5450e', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTable::PatchTable(int maxvalence)'], │ │ │ │ │ ['../a00993.html#a3419c5d57330d6787f8c14a7677b8d9b', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTable::PatchTable(PatchTable const &src)'], │ │ │ │ │ ['../a00997.html#ad4867d502f9704b7e45a7974e8918dc3', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTable::PatchHandle::PatchTable'], │ │ │ │ │ ['../a01281.html#adf9352136d44e5999629c6b4530bf4e0', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::Mesh::PatchTable'], │ │ │ │ │ ['../a01269.html#adf9352136d44e5999629c6b4530bf4e0', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Osd::MeshInterface::PatchTable'] │ │ │ │ │ ]], │ │ │ │ │ - ['patchtable_2eh_20', ['patchTable.h', ['../a00728.html', 1, '']]], │ │ │ │ │ + ['patchtable_2eh_20', ['patchTable.h', ['../a00731.html', 1, '']]], │ │ │ │ │ ['patchtablebuilder_21', ['patchtablebuilder', ['../a00993.html#ad452cef79832abb71eef0c3d88acc1a0', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTable::PatchTableBuilder'], │ │ │ │ │ ['../a01121.html#ad452cef79832abb71eef0c3d88acc1a0', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyRefiner::PatchTableBuilder'] │ │ │ │ │ ]], │ │ │ │ │ ['patchtablefactory_22', ['PatchTableFactory', ['../a01017.html', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far']]], │ │ │ │ │ - ['patchtablefactory_2eh_23', ['patchTableFactory.h', ['../a00731.html', 1, '']]], │ │ │ │ │ + ['patchtablefactory_2eh_23', ['patchTableFactory.h', ['../a00728.html', 1, '']]], │ │ │ │ │ ['patchtagvector_24', ['PatchTagVector', ['../a01017.html#a37218ea13f75caee4c93cc4e94d26060', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTableFactory']]], │ │ │ │ │ ['patchvertstable_25', ['PatchVertsTable', ['../a00993.html#a9484ab8a323750c2f639ee8709b1349b', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PatchTable']]], │ │ │ │ │ ['pointdescriptor_26', ['pointdescriptor', ['../a00937.html', 1, 'Surface< REAL >::PointDescriptor'], │ │ │ │ │ ['../a00937.html#ac60ab7fa3966237e2de95cc60defa4de', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Surface::PointDescriptor::PointDescriptor()'], │ │ │ │ │ ['../a00937.html#a69d66788e741236b1176159a1d609189', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Surface::PointDescriptor::PointDescriptor(int n)'], │ │ │ │ │ ['../a00937.html#a6e6069bdfef867e798fe863f40f4274a', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Bfr::Surface::PointDescriptor::PointDescriptor(int n, int m)'] │ │ │ │ │ ]], │ │ │ │ │ @@ -84,9 +84,9 @@ │ │ │ │ │ ]], │ │ │ │ │ ['printtopology_43', ['PrintTopology', ['../a01113.html#a3f963f5352658762e7a2e8d82fb888a0', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyLevel']]], │ │ │ │ │ ['ptexidx_44', ['ptexIdx', ['../a01093.html#afb60a8380cb9df186de7183b32bd84e2', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::LimitStencilTableFactoryReal::LocationArray']]], │ │ │ │ │ ['ptexindices_45', ['ptexindices', ['../a01121.html#a3e6c896f40ac50aec4b28f19bc4eae9c', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::TopologyRefiner::PtexIndices'], │ │ │ │ │ ['../a01041.html#a7b5dd5f4c76d684d924adf477eeea0a3', 1, 'OpenSubdiv::OPENSUBDIV_VERSION::Far::PtexIndices::PtexIndices()'], │ │ │ │ │ ['../a01041.html', 1, 'PtexIndices'] │ │ │ │ │ ]], │ │ │ │ │ - ['ptexindices_2eh_46', ['ptexIndices.h', ['../a00719.html', 1, '']]] │ │ │ │ │ + ['ptexindices_2eh_46', ['ptexIndices.h', ['../a00722.html', 1, '']]] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/search/files_1.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,4 +1,4 @@ │ │ │ │ │ var searchData = [ │ │ │ │ │ - ['bilinearscheme_2eh_0', ['bilinearScheme.h', ['../a00782.html', 1, '']]], │ │ │ │ │ - ['bufferdescriptor_2eh_1', ['bufferDescriptor.h', ['../a00899.html', 1, '']]] │ │ │ │ │ + ['bilinearscheme_2eh_0', ['bilinearScheme.h', ['../a00785.html', 1, '']]], │ │ │ │ │ + ['bufferdescriptor_2eh_1', ['bufferDescriptor.h', ['../a00896.html', 1, '']]] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/search/files_2.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,16 +1,16 @@ │ │ │ │ │ var searchData = [ │ │ │ │ │ - ['catmarkscheme_2eh_0', ['catmarkScheme.h', ['../a00785.html', 1, '']]], │ │ │ │ │ + ['catmarkscheme_2eh_0', ['catmarkScheme.h', ['../a00782.html', 1, '']]], │ │ │ │ │ ['clevaluator_2eh_1', ['clEvaluator.h', ['../a00800.html', 1, '']]], │ │ │ │ │ ['clpatchtable_2eh_2', ['clPatchTable.h', ['../a00803.html', 1, '']]], │ │ │ │ │ ['clvertexbuffer_2eh_3', ['clVertexBuffer.h', ['../a00797.html', 1, '']]], │ │ │ │ │ ['componentinterfaces_2eh_4', ['componentInterfaces.h', ['../a00764.html', 1, '']]], │ │ │ │ │ ['cpud3d11vertexbuffer_2eh_5', ['cpuD3D11VertexBuffer.h', ['../a00845.html', 1, '']]], │ │ │ │ │ - ['cpuevaluator_2eh_6', ['cpuEvaluator.h', ['../a00893.html', 1, '']]], │ │ │ │ │ + ['cpuevaluator_2eh_6', ['cpuEvaluator.h', ['../a00899.html', 1, '']]], │ │ │ │ │ ['cpuglvertexbuffer_2eh_7', ['cpuGLVertexBuffer.h', ['../a00869.html', 1, '']]], │ │ │ │ │ - ['cpupatchtable_2eh_8', ['cpuPatchTable.h', ['../a00896.html', 1, '']]], │ │ │ │ │ - ['cpuvertexbuffer_2eh_9', ['cpuVertexBuffer.h', ['../a00890.html', 1, '']]], │ │ │ │ │ + ['cpupatchtable_2eh_8', ['cpuPatchTable.h', ['../a00890.html', 1, '']]], │ │ │ │ │ + ['cpuvertexbuffer_2eh_9', ['cpuVertexBuffer.h', ['../a00893.html', 1, '']]], │ │ │ │ │ ['crease_2eh_10', ['crease.h', ['../a00779.html', 1, '']]], │ │ │ │ │ - ['cudaevaluator_2eh_11', ['cudaEvaluator.h', ['../a00791.html', 1, '']]], │ │ │ │ │ - ['cudapatchtable_2eh_12', ['cudaPatchTable.h', ['../a00788.html', 1, '']]], │ │ │ │ │ + ['cudaevaluator_2eh_11', ['cudaEvaluator.h', ['../a00788.html', 1, '']]], │ │ │ │ │ + ['cudapatchtable_2eh_12', ['cudaPatchTable.h', ['../a00791.html', 1, '']]], │ │ │ │ │ ['cudavertexbuffer_2eh_13', ['cudaVertexBuffer.h', ['../a00902.html', 1, '']]] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/search/files_3.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,7 +1,7 @@ │ │ │ │ │ var searchData = [ │ │ │ │ │ ['d3d11computeevaluator_2eh_0', ['d3d11ComputeEvaluator.h', ['../a00842.html', 1, '']]], │ │ │ │ │ - ['d3d11legacygregorypatchtable_2eh_1', ['d3d11LegacyGregoryPatchTable.h', ['../a00839.html', 1, '']]], │ │ │ │ │ + ['d3d11legacygregorypatchtable_2eh_1', ['d3d11LegacyGregoryPatchTable.h', ['../a00836.html', 1, '']]], │ │ │ │ │ ['d3d11mesh_2eh_2', ['d3d11Mesh.h', ['../a00830.html', 1, '']]], │ │ │ │ │ - ['d3d11patchtable_2eh_3', ['d3d11PatchTable.h', ['../a00833.html', 1, '']]], │ │ │ │ │ - ['d3d11vertexbuffer_2eh_4', ['d3d11VertexBuffer.h', ['../a00836.html', 1, '']]] │ │ │ │ │ + ['d3d11patchtable_2eh_3', ['d3d11PatchTable.h', ['../a00839.html', 1, '']]], │ │ │ │ │ + ['d3d11vertexbuffer_2eh_4', ['d3d11VertexBuffer.h', ['../a00833.html', 1, '']]] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/search/files_6.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,9 +1,9 @@ │ │ │ │ │ var searchData = [ │ │ │ │ │ ['glcomputeevaluator_2eh_0', ['glComputeEvaluator.h', ['../a00848.html', 1, '']]], │ │ │ │ │ ['gllegacygregorypatchtable_2eh_1', ['glLegacyGregoryPatchTable.h', ['../a00866.html', 1, '']]], │ │ │ │ │ - ['glmesh_2eh_2', ['glMesh.h', ['../a00860.html', 1, '']]], │ │ │ │ │ + ['glmesh_2eh_2', ['glMesh.h', ['../a00857.html', 1, '']]], │ │ │ │ │ ['glpatchtable_2eh_3', ['glPatchTable.h', ['../a00863.html', 1, '']]], │ │ │ │ │ - ['glslpatchshadersource_2eh_4', ['glslPatchShaderSource.h', ['../a00854.html', 1, '']]], │ │ │ │ │ - ['glvertexbuffer_2eh_5', ['glVertexBuffer.h', ['../a00857.html', 1, '']]], │ │ │ │ │ - ['glxfbevaluator_2eh_6', ['glXFBEvaluator.h', ['../a00851.html', 1, '']]] │ │ │ │ │ + ['glslpatchshadersource_2eh_4', ['glslPatchShaderSource.h', ['../a00851.html', 1, '']]], │ │ │ │ │ + ['glvertexbuffer_2eh_5', ['glVertexBuffer.h', ['../a00860.html', 1, '']]], │ │ │ │ │ + ['glxfbevaluator_2eh_6', ['glXFBEvaluator.h', ['../a00854.html', 1, '']]] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/search/files_9.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,10 +1,10 @@ │ │ │ │ │ var searchData = [ │ │ │ │ │ ['mesh_2eh_0', ['mesh.h', ['../a00887.html', 1, '']]], │ │ │ │ │ ['mtlcommon_2eh_1', ['mtlCommon.h', ['../a00806.html', 1, '']]], │ │ │ │ │ - ['mtlcomputeevaluator_2eh_2', ['mtlComputeEvaluator.h', ['../a00821.html', 1, '']]], │ │ │ │ │ - ['mtllegacygregorypatchtable_2eh_3', ['mtlLegacyGregoryPatchTable.h', ['../a00818.html', 1, '']]], │ │ │ │ │ - ['mtlmesh_2eh_4', ['mtlMesh.h', ['../a00815.html', 1, '']]], │ │ │ │ │ + ['mtlcomputeevaluator_2eh_2', ['mtlComputeEvaluator.h', ['../a00818.html', 1, '']]], │ │ │ │ │ + ['mtllegacygregorypatchtable_2eh_3', ['mtlLegacyGregoryPatchTable.h', ['../a00821.html', 1, '']]], │ │ │ │ │ + ['mtlmesh_2eh_4', ['mtlMesh.h', ['../a00812.html', 1, '']]], │ │ │ │ │ ['mtlpatchshadersource_2eh_5', ['mtlPatchShaderSource.h', ['../a00809.html', 1, '']]], │ │ │ │ │ - ['mtlpatchtable_2eh_6', ['mtlPatchTable.h', ['../a00812.html', 1, '']]], │ │ │ │ │ + ['mtlpatchtable_2eh_6', ['mtlPatchTable.h', ['../a00815.html', 1, '']]], │ │ │ │ │ ['mtlvertexbuffer_2eh_7', ['mtlVertexBuffer.h', ['../a00824.html', 1, '']]] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/search/files_b.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,10 +1,10 @@ │ │ │ │ │ var searchData = [ │ │ │ │ │ ['parameterization_2eh_0', ['parameterization.h', ['../a00695.html', 1, '']]], │ │ │ │ │ ['patchdescriptor_2eh_1', ['patchDescriptor.h', ['../a00740.html', 1, '']]], │ │ │ │ │ ['patchmap_2eh_2', ['patchMap.h', ['../a00734.html', 1, '']]], │ │ │ │ │ ['patchparam_2eh_3', ['patchParam.h', ['../a00737.html', 1, '']]], │ │ │ │ │ - ['patchtable_2eh_4', ['patchTable.h', ['../a00728.html', 1, '']]], │ │ │ │ │ - ['patchtablefactory_2eh_5', ['patchTableFactory.h', ['../a00731.html', 1, '']]], │ │ │ │ │ + ['patchtable_2eh_4', ['patchTable.h', ['../a00731.html', 1, '']]], │ │ │ │ │ + ['patchtablefactory_2eh_5', ['patchTableFactory.h', ['../a00728.html', 1, '']]], │ │ │ │ │ ['primvarrefiner_2eh_6', ['primvarRefiner.h', ['../a00725.html', 1, '']]], │ │ │ │ │ - ['ptexindices_2eh_7', ['ptexIndices.h', ['../a00719.html', 1, '']]] │ │ │ │ │ + ['ptexindices_2eh_7', ['ptexIndices.h', ['../a00722.html', 1, '']]] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/search/files_c.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,4 +1,4 @@ │ │ │ │ │ var searchData = [ │ │ │ │ │ - ['refinement_2eh_0', ['refinement.h', ['../a00752.html', 1, '']]], │ │ │ │ │ + ['refinement_2eh_0', ['refinement.h', ['../a00749.html', 1, '']]], │ │ │ │ │ ['refinersurfacefactory_2eh_1', ['refinerSurfaceFactory.h', ['../a00692.html', 1, '']]] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/search/files_d.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,11 +1,11 @@ │ │ │ │ │ var searchData = [ │ │ │ │ │ ['scheme_2eh_0', ['scheme.h', ['../a00770.html', 1, '']]], │ │ │ │ │ - ['sparseselector_2eh_1', ['sparseSelector.h', ['../a00749.html', 1, '']]], │ │ │ │ │ + ['sparseselector_2eh_1', ['sparseSelector.h', ['../a00752.html', 1, '']]], │ │ │ │ │ ['stackbuffer_2eh_2', ['stackBuffer.h', ['../a00746.html', 1, '']]], │ │ │ │ │ - ['stenciltable_2eh_3', ['stencilTable.h', ['../a00722.html', 1, '']]], │ │ │ │ │ - ['stenciltablefactory_2eh_4', ['stencilTableFactory.h', ['../a00713.html', 1, '']]], │ │ │ │ │ + ['stenciltable_2eh_3', ['stencilTable.h', ['../a00716.html', 1, '']]], │ │ │ │ │ + ['stenciltablefactory_2eh_4', ['stencilTableFactory.h', ['../a00719.html', 1, '']]], │ │ │ │ │ ['surface_2eh_5', ['surface.h', ['../a00689.html', 1, '']]], │ │ │ │ │ ['surfacefactory_2eh_6', ['surfaceFactory.h', ['../a00686.html', 1, '']]], │ │ │ │ │ ['surfacefactorycache_2eh_7', ['surfaceFactoryCache.h', ['../a00680.html', 1, '']]], │ │ │ │ │ ['surfacefactorymeshadapter_2eh_8', ['surfaceFactoryMeshAdapter.h', ['../a00683.html', 1, '']]] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/search/files_e.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,12 +1,12 @@ │ │ │ │ │ var searchData = [ │ │ │ │ │ ['tbbevaluator_2eh_0', ['tbbEvaluator.h', ['../a00875.html', 1, '']]], │ │ │ │ │ ['tbbkernel_2eh_1', ['tbbKernel.h', ['../a00872.html', 1, '']]], │ │ │ │ │ - ['tessellation_2eh_2', ['tessellation.h', ['../a00677.html', 1, '']]], │ │ │ │ │ - ['topologydescriptor_2eh_3', ['topologyDescriptor.h', ['../a00716.html', 1, '']]], │ │ │ │ │ + ['tessellation_2eh_2', ['tessellation.h', ['../a00674.html', 1, '']]], │ │ │ │ │ + ['topologydescriptor_2eh_3', ['topologyDescriptor.h', ['../a00713.html', 1, '']]], │ │ │ │ │ ['topologylevel_2eh_4', ['topologyLevel.h', ['../a00710.html', 1, '']]], │ │ │ │ │ ['topologyrefiner_2eh_5', ['topologyRefiner.h', ['../a00707.html', 1, '']]], │ │ │ │ │ ['topologyrefinerfactory_2eh_6', ['topologyRefinerFactory.h', ['../a00704.html', 1, '']]], │ │ │ │ │ ['types_2eh_7', ['types.h', ['../a01486.html', 1, '(Global Namespace)'], │ │ │ │ │ ['../a01489.html', 1, '(Global Namespace)'], │ │ │ │ │ ['../a01492.html', 1, '(Global Namespace)'], │ │ │ │ │ ['../a01495.html', 1, '(Global Namespace)'] │ │ │ ├── ./usr/share/doc/opensubdiv/doxy_html/search/files_f.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,3 +1,3 @@ │ │ │ │ │ var searchData = [ │ │ │ │ │ - ['vertexdescriptor_2eh_0', ['vertexDescriptor.h', ['../a00674.html', 1, '']]] │ │ │ │ │ + ['vertexdescriptor_2eh_0', ['vertexDescriptor.h', ['../a00677.html', 1, '']]] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/opensubdiv/tipuesearch/tipuesearch_content.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -6,24 +6,24 @@ │ │ │ │ │ "loc": "osd_tutorial_0.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "bfr_tutorial_3_2.cpp", │ │ │ │ │ "text": "bfr_tutorial_3_2.cpp bfr_tutorial_3_2.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "bfr_tutorial_3_2.html" │ │ │ │ │ }, { │ │ │ │ │ - "title": "bfr_tutorial_3_1.cpp", │ │ │ │ │ - "text": "bfr_tutorial_3_1.cpp bfr_tutorial_3_1.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ - "tags": "", │ │ │ │ │ - "loc": "bfr_tutorial_3_1.html" │ │ │ │ │ - }, { │ │ │ │ │ "title": "bfr_tutorial_2_2.cpp", │ │ │ │ │ "text": "bfr_tutorial_2_2.cpp bfr_tutorial_2_2.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "bfr_tutorial_2_2.html" │ │ │ │ │ }, { │ │ │ │ │ + "title": "bfr_tutorial_3_1.cpp", │ │ │ │ │ + "text": "bfr_tutorial_3_1.cpp bfr_tutorial_3_1.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ + "tags": "", │ │ │ │ │ + "loc": "bfr_tutorial_3_1.html" │ │ │ │ │ + }, { │ │ │ │ │ "title": "bfr_tutorial_1_5.cpp", │ │ │ │ │ "text": "bfr_tutorial_1_5.cpp bfr_tutorial_1_5.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "bfr_tutorial_1_5.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "bfr_tutorial_2_1.cpp", │ │ │ │ │ "text": "bfr_tutorial_2_1.cpp bfr_tutorial_2_1.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ @@ -31,39 +31,39 @@ │ │ │ │ │ "loc": "bfr_tutorial_2_1.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "bfr_tutorial_1_4.cpp", │ │ │ │ │ "text": "bfr_tutorial_1_4.cpp bfr_tutorial_1_4.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "bfr_tutorial_1_4.html" │ │ │ │ │ }, { │ │ │ │ │ - "title": "far_tutorial_5_3.cpp", │ │ │ │ │ - "text": "far_tutorial_5_3.cpp far_tutorial_5_3.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ - "tags": "", │ │ │ │ │ - "loc": "far_tutorial_5_3.html" │ │ │ │ │ - }, { │ │ │ │ │ "title": "bfr_tutorial_1_3.cpp", │ │ │ │ │ "text": "bfr_tutorial_1_3.cpp bfr_tutorial_1_3.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "bfr_tutorial_1_3.html" │ │ │ │ │ }, { │ │ │ │ │ + "title": "bfr_tutorial_1_2.cpp", │ │ │ │ │ + "text": "bfr_tutorial_1_2.cpp bfr_tutorial_1_2.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ + "tags": "", │ │ │ │ │ + "loc": "bfr_tutorial_1_2.html" │ │ │ │ │ + }, { │ │ │ │ │ "title": "far_tutorial_5_2.cpp", │ │ │ │ │ "text": "far_tutorial_5_2.cpp far_tutorial_5_2.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "far_tutorial_5_2.html" │ │ │ │ │ }, { │ │ │ │ │ + "title": "far_tutorial_5_3.cpp", │ │ │ │ │ + "text": "far_tutorial_5_3.cpp far_tutorial_5_3.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ + "tags": "", │ │ │ │ │ + "loc": "far_tutorial_5_3.html" │ │ │ │ │ + }, { │ │ │ │ │ "title": "bfr_tutorial_1_1.cpp", │ │ │ │ │ "text": "bfr_tutorial_1_1.cpp bfr_tutorial_1_1.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "bfr_tutorial_1_1.html" │ │ │ │ │ }, { │ │ │ │ │ - "title": "bfr_tutorial_1_2.cpp", │ │ │ │ │ - "text": "bfr_tutorial_1_2.cpp bfr_tutorial_1_2.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ - "tags": "", │ │ │ │ │ - "loc": "bfr_tutorial_1_2.html" │ │ │ │ │ - }, { │ │ │ │ │ "title": "far_tutorial_5_1.cpp", │ │ │ │ │ "text": "far_tutorial_5_1.cpp far_tutorial_5_1.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "far_tutorial_5_1.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "far_tutorial_4_3.cpp", │ │ │ │ │ "text": "far_tutorial_4_3.cpp far_tutorial_4_3.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ @@ -71,44 +71,44 @@ │ │ │ │ │ "loc": "far_tutorial_4_3.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "far_tutorial_4_2.cpp", │ │ │ │ │ "text": "far_tutorial_4_2.cpp far_tutorial_4_2.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "far_tutorial_4_2.html" │ │ │ │ │ }, { │ │ │ │ │ + "title": "far_tutorial_4_1.cpp", │ │ │ │ │ + "text": "far_tutorial_4_1.cpp far_tutorial_4_1.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ + "tags": "", │ │ │ │ │ + "loc": "far_tutorial_4_1.html" │ │ │ │ │ + }, { │ │ │ │ │ "title": "far_tutorial_2_3.cpp", │ │ │ │ │ "text": "far_tutorial_2_3.cpp far_tutorial_2_3.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "far_tutorial_2_3.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "far_tutorial_3_1.cpp", │ │ │ │ │ "text": "far_tutorial_3_1.cpp far_tutorial_3_1.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "far_tutorial_3_1.html" │ │ │ │ │ }, { │ │ │ │ │ - "title": "far_tutorial_4_1.cpp", │ │ │ │ │ - "text": "far_tutorial_4_1.cpp far_tutorial_4_1.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ - "tags": "", │ │ │ │ │ - "loc": "far_tutorial_4_1.html" │ │ │ │ │ - }, { │ │ │ │ │ "title": "far_tutorial_2_2.cpp", │ │ │ │ │ "text": "far_tutorial_2_2.cpp far_tutorial_2_2.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "far_tutorial_2_2.html" │ │ │ │ │ }, { │ │ │ │ │ - "title": "far_tutorial_1_2.cpp", │ │ │ │ │ - "text": "far_tutorial_1_2.cpp far_tutorial_1_2.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ - "tags": "", │ │ │ │ │ - "loc": "far_tutorial_1_2.html" │ │ │ │ │ - }, { │ │ │ │ │ "title": "far_tutorial_2_1.cpp", │ │ │ │ │ "text": "far_tutorial_2_1.cpp far_tutorial_2_1.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "far_tutorial_2_1.html" │ │ │ │ │ }, { │ │ │ │ │ + "title": "far_tutorial_1_2.cpp", │ │ │ │ │ + "text": "far_tutorial_1_2.cpp far_tutorial_1_2.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ + "tags": "", │ │ │ │ │ + "loc": "far_tutorial_1_2.html" │ │ │ │ │ + }, { │ │ │ │ │ "title": "far_tutorial_1_1.cpp", │ │ │ │ │ "text": "far_tutorial_1_1.cpp far_tutorial_1_1.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "far_tutorial_1_1.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "hbr_tutorial_2.cpp", │ │ │ │ │ "text": "hbr_tutorial_2.cpp hbr_tutorial_2.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ @@ -116,29 +116,29 @@ │ │ │ │ │ "loc": "hbr_tutorial_2.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "hbr_tutorial_1.cpp", │ │ │ │ │ "text": "hbr_tutorial_1.cpp hbr_tutorial_1.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "hbr_tutorial_1.html" │ │ │ │ │ }, { │ │ │ │ │ + "title": "Using Hbr", │ │ │ │ │ + "text": "Using Hbr Using Hbr 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ + "tags": "", │ │ │ │ │ + "loc": "using_osd_hbr.html" │ │ │ │ │ + }, { │ │ │ │ │ "title": "hbr_tutorial_0.cpp", │ │ │ │ │ "text": "hbr_tutorial_0.cpp hbr_tutorial_0.cpp 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "hbr_tutorial_0.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "Vtr Overview", │ │ │ │ │ "text": "Vtr Overview Vtr Overview 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "vtr_overview.html" │ │ │ │ │ }, { │ │ │ │ │ - "title": "Using Hbr", │ │ │ │ │ - "text": "Using Hbr Using Hbr 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ - "tags": "", │ │ │ │ │ - "loc": "using_osd_hbr.html" │ │ │ │ │ - }, { │ │ │ │ │ "title": "Subdivision Surfaces", │ │ │ │ │ "text": "Subdivision Surfaces Subdivision Surfaces 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "subdivision_surfaces.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "Tutorials", │ │ │ │ │ "text": "Tutorials Tutorials 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ @@ -156,44 +156,44 @@ │ │ │ │ │ "loc": "release_notes_2x.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "3.0 - 3.6 Release Notes", │ │ │ │ │ "text": "3.0 - 3.6 Release Notes 3.0 - 3.6 Release Notes 3.6.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Release 3.6 Release 3.6.0 - Sep 2023 Release 3.5 Release 3.5.1 - July 2023 Release 3.5.0 - Sep 2022 Release 3.4 Release 3.4.4 - Feb 2021 Release 3.4.3 - Apr 2020 Release 3.4.0 - Jun 2019 Release 3.3 Release 3.3.3 - Jul 2018 Release 3.3.2 - Jun 2018 Release 3.3.1 - Feb 1018 Release 3.3.0 - Aug 2017 Release 3.2 Release 3.2.0 - Feb 2017 Release 3.1 Release 3.1.1 - Jan 2017 Release 3.1.0 - Oct 2016 Release 3.0 Release 3.0.5 - Mar 2016 Release 3.0.4 - Feb 2016 Release 3.0.3 - Oct 2015 Release 3.0.2 - Aug 2015 Release 3.0.1 - Aug 2015 Release 3.0.0 - Jun 2015 Release 3.0.0 RC2 Release 3.0.0 RC1 Previous 2.x Release Notes Release 3.6 Release 3.6.0 - Sep 2023 Release 3.6.0 is a significant release with new features, several configuration improvements, and bug fixes. For more information on the following, see Release 3.6 Changes Updated Osd patch drawing shader source to exclude legacy shader constructs to improve compatibility with Vulkan, DX12, etc. GitHub 1320 Installed Osd patch evaluation headers to allow use from client shaders and compute kernels GitHub 1321 Updated CMake build to locate TBB using TBBs CMake config in order to support oneTBB GitHub 1319 Updated CMake FindOpenCL module to support parsing version information from recent OpenCL headers GitHub 1322 Removed obsolete .travis.yml GitHub 1324 Bug Fixes Fixed inconsistent warning levels for MSVC builds when using Ninja GitHub 1318 Fixed documentation build errors when using Ninja GitHub 1323 Fixed build errors resulting from oneTBB API changes GitHub 1317 Release 3.5 Release 3.5.1 - July 2023 Release 3.5.1 is a minor release including bug fixes and configuration improvements. Changes Updated CMake to set fallback CMAKE_CXX_STANDARD to C14 GitHub 1276 Updated CMake with OpenGL import targets to avoid link errors GitHub 1277 Updated CMake to set gpu architecture fallback only for older CUDA versions GitHub 965 1299 Updated CMake to use append for CMAKE_MODULE_PATH GitHub 1296 Fixed interface includes for CMake config GitHub 1278 Fixed warnings with newer and stricter use of Clang GitHub 1275 1289 1290 Fixed potential float constant cast errors for OpenCL GitHub 1285 Fixed generation of Apple Frameworks with no OSD_GPU targets enabled GitHub 1224 1236 Bug Fixes Fixed BfrSurface construction bug for rare topological case GitHub 1301 Fixed CUDA example dependencies with GLX on Linux GitHub 1294 Release 3.5.0 - Sep 2022 Release 3.5.0 is a significant release with new features, several configuration improvements, and a few other improvements and bug fixes. For more information on the following, see Release 3.5 Deprecation Announcements Hbr is deprecated and will be removed from subsequent releases New Features Simplified Surface Evaluation Bfr Tessellation Patterns Bfr Changes 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 Release 3.4 Release 3.4.4 - Feb 2021 Release 3.4.4 is a minor release including bug fixes and configuration improvements Changes The master branch on GitHub has been renamed release GitHub 1218 1219 The CMake configuration has been updated to allow use as a sub-project GitHub 1206 Removed obsolete references to hbr from examplesfarViewer GitHub 1217 Bug Fixes Fixed bug with sparse PatchTables and irregular face-varying seams GitHub 1203 Fixed loss of precision when using double precision stencil tables GitHub 1207 Fixed reset of FarTopologyRefinerGetMaxLevel after call to Unrefine GitHub 1208 Fixed linking with -ldl on unix systems GitHub 1196 Fixed naming and installation of macOS frameworks GitHub 1194 1201 Fixed GL version and extension processing and dynamic loading on macOS GitHub 1216 Fixed FindDocutils.cmake to be more robust GitHub 1213 1220 Fixed errors using build_scriptsbuild_osd.py with Python3 GitHub 1206 Release 3.4.3 - Apr 2020 Release 3.4.3 is a minor release including bug fixes and configuration improvements Changes GLEW is no longer required by default GitHub 1183 1184 Removed false Ptex link dependency from libosdCPU GitHub 1174 Removed false GLFW link dependency from DX11 and Metal examples GitHub 1178 Removed link dependency on unused TBB libraries GitHub 1064 Added option to disable building of dynamic shared libraries GitHub 1169 Added new tutorial for FarLimitStencilTable GitHub 1176 Updated use of EXT_direct_state_access to ARB_direct_state_access GitHub 1184 Fixed C strict aliasing warnings GitHub 1182 Fixed MSVC warnings in example code GitHub 1158 1172 Fixed compatibility with Visual Studio 2019 GitHub 1173 1189 Fixed CMake CMP0054 warnings GitHub 1180 Added prefix to OpenSubdiv CMake macros GitHub 1157 Moved utilities in examplescommon to regressioncommon GitHub 1167 Minor fixes to Far tutorials GitHub 1175 1177 Switched to Azure Pipelines for continuous integration testing instead of Travis-CI and AppVeyor GitHub 1168 1190 Bug Fixes Fixed selective boundary interpolation for case SdcOptionsVTX_BOUNDARY_NONE GitHub 1170 1171 Fixed static library linking to address missing symbols GitHub 1192 Additional fixes for dynamic and static linking GitHub 1193 Release 3.4.0 - Jun 2019 Release 3.4.0 is a significant release with several new features, bug fixes, and general code and configuration improvements. For more information on the following, please see Release 3.4 New Features Triangular Patches for Loop subdivision Improvements to Introductory Documentation Sparse Patch Tables and Adaptive Refinement Full Support for Double Precision in Far Changes 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 Release 3.3 Release 3.3.3 - Jul 2018 Release 3.3.3 is bug-fix release addressing regressions from release 3.3.2 Bug Fixes Fixed a regression in PatchTable construction with varying patches GitHub 976 Fixed a regression in PatchTable construction for face-varying patches GitHub 972 Fixed a bug in the initialization of FarSourcePatch GitHub 971 Release 3.3.2 - Jun 2018 Release 3.3.2 is a minor release with potentially significant performance improvements to the patch pre-processing stages Changes Improved performance of PatchTable construction GitHub 966 The resulting improved accuracy will produce slight numerical differences in computations involving patches, e.g. StencilTable and PatchTable evaluation Bug Fixes FarPatchTableFactory now supports PatchTable construction with ENDCAP_BILINEAR_BASIS specified Release 3.3.1 - Feb 1018 Release 3.3.1 is a minor bug-fix release Bug Fixes Fixed GLSLHLSLMetal patch shader code to resolve degenerate normals GitHub 947 Fixed problems with face-varying patches in uniform PatchTables GitHub 946 Fixed integer overflow bugs for large meshes in PatchTable factories GitHub 957 Fixed computation of PatchParam for triangle refinement GitHub 962 Changes Added build options NO_GLFW and NO_GLFW_X11 Added additional shapes with infinitely sharp creases to the Metal and DX11 example viewers Disabled GL tests during CI runs on Linux Improved stability of examplesglImaging in CI runs by testing GL version Release 3.3.0 - Aug 2017 Release 3.3.0 is significant release adding an Osd implementation for Apples Metal API New Features Added an Osd implementation for Apples Metal API Added the mtlViewer example Changes Fixed several instances of local variable shadowing that could cause build warnings Updated continuous-integration build scripts and added testing on macOS Release 3.2 Release 3.2.0 - Feb 2017 Release 3.2.0 is a minor release containing API additions and bug fixes New Features Extended FarStencilTableFactory to support face-varying Extended Osd Evaluator classes to support evaluation of 1st and 2nd derivatives Added an option to disable generation of legacy sharp corner patches Changes 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 Release 3.1 Release 3.1.1 - Jan 2017 Release 3.1.1 is a minor bug-fix release. Bug Fixes Fixed a bug with non-manifold face-varying topology causing a crash during patch table creation Fixed GLEW compilation and linking with dynamic GLEW libraries on Windows Fixed GLFW linking with GLFW 3.2 on X11 platforms Release 3.1.0 - Oct 2016 Release 3.1.0 is a significant release with several new features, bug fixes, and general code and configuration improvements. For more information on the following, please see Release 3.1 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 Changes 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 Release 3.0 Release 3.0.5 - Mar 2016 Release 3.0.5 is a minor stability release with performance and correctness bug fixes. Bug Fixes The previous release reduced transient memory use during PatchTable construction, but increased the amount of memory consumed by the resulting PatchTable itself, this regression has been fixed. The example Ptex texture sampling code has been fixed to prevent sampling beyond the texels for a face when multisample rasterization is enabled. Release 3.0.4 - Feb 2016 Release 3.0.4 is a minor stability release which includes important performance and bug fixes. New Features Added accessor methods to FarLimitStencilTable to retrieve limit stencil data including derivative weights Added support for OpenCL event control to OsdCLVertexBuffer and OsdCLEvaluator Changes Major reduction in memory use during FarPatchTable construction for topologies with large numbers of extraordinary features Improved performance for GL and D3D11 tessellation control hull shader execution when drawing BSpline patches with the single crease patch optimization enabled Bug Fixes Restored support for drawing with fractional tessellation Fixed far_tutorial_6 to refine primvar data only up to the number of levels produced by topological refinement Fixed build warnings and errors reported by Visual Studio 2015 Release 3.0.3 - Oct 2015 Release 3.0.3 is a minor stability release which includes important performance and bug fixes. New Features Smooth normal generation tutorial, far_tutorial_8 Changes Major performance improvement in PatchTable construction Improved patch approximations for non-manifold features Bug Fixes Fixed double delete in GLSL Compute controller Fixed buffer layout for GLSL Compute kernel Fixed GL buffer leak in OsdGLPatchTable Fixed out-of-bounds data access for TBB and OMP stencil evaluation Fixed WIN32_LEAN_AND_MEAN typo Fixed Loop-related shader issues glFVarViewer Release 3.0.2 - Aug 2015 Release 3.0.2 is a minor release for a specific fix. Bug Fixes Fixed drawing of single crease patches Release 3.0.1 - Aug 2015 Release 3.0.1 is a minor release focused on stability and correctness. Changes Added a references section to the documentation, please see References Removed references to AddVaryingWithWeight from examples and tutorials Added more regression test shapes Addressed general compiler warnings e.g. signed vs unsigned comparisons Addressed compiler warnings in the core libraries reported by GCCs -Wshadow Eased GCC version restriction, earlier requirement for version 4.8 or newer is no longer needed Replaced topology initialization assertions with errors Improved compatibility with ICC Improved descriptive content and formatting of Far error messages Improved build when configured to include no GPU specific code Bug Fixes Fixed handling of unconnected vertices to avoid out of bounds data access Fixed non-zero starting offsets for TbbEvalStencils and OmpEvalStencils Fixed FarStencilTableFactoryOptionsfactorizeIntermediateLevels Fixed FarPatchTablesFactoryOptionsgenerateAllLevels Fixed the behavior of VTX_BOUNDARY_NONE for meshes with bilinear scheme Fixed some template method specializations which produced duplicate definitions Disabled depth buffering when drawing the UI in the example viewers Disabled the fractional tessellation spacing option in example viewers since this mode is currently not supported Release 3.0.0 - Jun 2015 Release 3.0.0 is a major release with many significant improvements and changes. For more information on the following, please see Release 3.0 New Features Faster subdivision using less memory Support for non-manifold topology Face-Varying data specified topologically Elimination of fixed valence tables Single-crease patch for semi-sharp edges Additional irregular patch approximations Introduction of Stencil Tables Faster, simpler GPU kernels Unified adaptive shaders Updated coding style with namespaces More documentation and tutorials Bug Fixes Smooth Face-Varying interpolation around creases Release 3.0.0 RC2 New Features Documentation updates far_tutorial_3 updates for the multiple face-varying channels maya example plugin interpolates a UV channel and a vertex color channel Bug Fixes Fixed a LimitStencilTableFactory bug, which returns an invalid table PatchParam encoding changed to support refinement levels up to 10 Added Xinerama link dependency Fixed MSVC 32bit build problem Fixed minor cmake issues Fixed glViewerfarViewer stability bugs Release 3.0.0 RC1 Changes FarTopologyRefiner was split into several classes to clarify and focus the API. Interpolation of Vertex and Varying primvars in a single pass is no longer supported. The Osd layer was largely refactored. Previous 2.x Release Notes Previous releases Generated on 2024-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "release_notes.html" │ │ │ │ │ }, { │ │ │ │ │ - "title": "Overview of Release 3.6", │ │ │ │ │ - "text": "Overview of Release 3.6 Overview of Release 3.6 3.6.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE New Features Modern Graphics APIs and Parallel Computation Updated Third-party APIs and Tools API Additions Additions to OsdPatchShaderSource Osd extensions for patch evaluation from client shaders and compute kernels Other Changes Deprecation Announcements Improvements Bug Fixes New Features The purpose of this release is to address concerns which improve support for current typical use cases and provide support for significant new use cases. Modern Graphics APIs and Parallel Computation OpenSubdiv is organized as a set of components for working with subdivision surface representations, i.e. Bfr, Far, Vtr, Sdc along with a collection of back-end components in Osd supporting the use of specific low-level subsystems to work with subdivision surface data. These back-end components in Osd have taken many forms including in some cases specific complete GPU shaders along with controller classes to manage compilation and execution of these shaders. In practice it has been more effective for Osd to simply supply the functions needed to operate on subdivision surface data, allowing the client application or client library to take care of using these functions from client provided shaders and computation kernels using client provided execution controllers. This has been the direction for the Osd library for some time and the changes implemented in this release make this even more straightforward. The existing methods OsdGLSLPatchShaderSourceGetPatchBasisShaderSource OsdHLSLPatchShaderSourceGetPatchBasisShaderSource OsdMTLPatchShaderSourceGetPatchBasisShaderSource continue to return shader source strings at runtime which contain definitions and functions allowing client shader code to evaluate values and first and second derivatives on the piecewise parametric patches resulting from subdivison refinement. The identical code is now available at compile time as opensubdivosdpatchBasis.h and is essentially a shader interface that can be used from client kernels including those implemented using TBB, CUDA, C, etc. Similarly, the new methods OsdGLSLPatchShaderSourceGetPatchDrawingShaderSource OsdHLSLPatchShaderSourceGetPatchDrawingShaderSource OsdMTLPatchShaderSourceGetPatchDrawingShaderSource return shader source strings at runtime which contain definitions and functions allowing clients to draw the piecewise parametric patches resulting from subdivision, e.g. using GPU tessellation shaders or GPU mesh shaders. The returned shader source has been stripped of resource binding and other potentially problematic defintions since these are usually best handled by client shader code. These methods have been tested successfully with new client code using Vulkan and DirectX 12 in addition to existing client code using OpenGL, Metal, DirectX 11, etc. Updated Third-party APIs and Tools While the methods described above will be the most effective way to use OpenSubdiv, some of the existing back-end components have been updated to accommodate evolving third-party APIs and tools. Specifically, the TBB implementation has been updated to allow use with the oneTBB API while continuing to maintain compatibility with earlier releases of TBB. Also, there have been minor fixes to the CMake build to accommodate using the Ninja build system and also systems with OpenCL 3.0. API Additions See associated Doxygen for full details. Additions to OsdPatchShaderSource GLSLPatchShaderSourceGetPatchDrawingShaderSource HLSLPatchShaderSourceGetPatchDrawingShaderSource MTLPatchShaderSourceGetPatchDrawingShaderSource Osd extensions for patch evaluation from client shaders and compute kernels 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 Other Changes Deprecation Announcements The methods OsdTbbEvaluatorSetNumThreads and OsdOmpEvaluatorSetNumThreads have been marked deprecated. Improvements Updated Osd patch drawing shader source to exclude legacy shader constructs to improve compatibility with Vulkan, DX12, etc. GitHub 1320 Installed Osd patch evaluation headers to allow use from client shaders and compute kernels GitHub 1321 Updated CMake build to locate TBB using TBBs CMake config in order to support oneTBB GitHub 1319 Updated CMake FindOpenCL module to support parsing version information from recent OpenCL headers GitHub 1322 Removed obsolete .travis.yml GitHub 1324 Bug Fixes Fixed inconsistent warning levels for MSVC builds when using Ninja GitHub 1318 Fixed documentation build errors when using Ninja GitHub 1323 Fixed build errors resulting from oneTBB API changes GitHub 1317 Generated on 2024-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ - "tags": "", │ │ │ │ │ - "loc": "release_36.html" │ │ │ │ │ - }, { │ │ │ │ │ "title": "Overview of Release 3.5", │ │ │ │ │ "text": "Overview of Release 3.5 Overview of Release 3.5 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "release_35.html" │ │ │ │ │ }, { │ │ │ │ │ + "title": "Overview of Release 3.6", │ │ │ │ │ + "text": "Overview of Release 3.6 Overview of Release 3.6 3.6.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE New Features Modern Graphics APIs and Parallel Computation Updated Third-party APIs and Tools API Additions Additions to OsdPatchShaderSource Osd extensions for patch evaluation from client shaders and compute kernels Other Changes Deprecation Announcements Improvements Bug Fixes New Features The purpose of this release is to address concerns which improve support for current typical use cases and provide support for significant new use cases. Modern Graphics APIs and Parallel Computation OpenSubdiv is organized as a set of components for working with subdivision surface representations, i.e. Bfr, Far, Vtr, Sdc along with a collection of back-end components in Osd supporting the use of specific low-level subsystems to work with subdivision surface data. These back-end components in Osd have taken many forms including in some cases specific complete GPU shaders along with controller classes to manage compilation and execution of these shaders. In practice it has been more effective for Osd to simply supply the functions needed to operate on subdivision surface data, allowing the client application or client library to take care of using these functions from client provided shaders and computation kernels using client provided execution controllers. This has been the direction for the Osd library for some time and the changes implemented in this release make this even more straightforward. The existing methods OsdGLSLPatchShaderSourceGetPatchBasisShaderSource OsdHLSLPatchShaderSourceGetPatchBasisShaderSource OsdMTLPatchShaderSourceGetPatchBasisShaderSource continue to return shader source strings at runtime which contain definitions and functions allowing client shader code to evaluate values and first and second derivatives on the piecewise parametric patches resulting from subdivison refinement. The identical code is now available at compile time as opensubdivosdpatchBasis.h and is essentially a shader interface that can be used from client kernels including those implemented using TBB, CUDA, C, etc. Similarly, the new methods OsdGLSLPatchShaderSourceGetPatchDrawingShaderSource OsdHLSLPatchShaderSourceGetPatchDrawingShaderSource OsdMTLPatchShaderSourceGetPatchDrawingShaderSource return shader source strings at runtime which contain definitions and functions allowing clients to draw the piecewise parametric patches resulting from subdivision, e.g. using GPU tessellation shaders or GPU mesh shaders. The returned shader source has been stripped of resource binding and other potentially problematic defintions since these are usually best handled by client shader code. These methods have been tested successfully with new client code using Vulkan and DirectX 12 in addition to existing client code using OpenGL, Metal, DirectX 11, etc. Updated Third-party APIs and Tools While the methods described above will be the most effective way to use OpenSubdiv, some of the existing back-end components have been updated to accommodate evolving third-party APIs and tools. Specifically, the TBB implementation has been updated to allow use with the oneTBB API while continuing to maintain compatibility with earlier releases of TBB. Also, there have been minor fixes to the CMake build to accommodate using the Ninja build system and also systems with OpenCL 3.0. API Additions See associated Doxygen for full details. Additions to OsdPatchShaderSource GLSLPatchShaderSourceGetPatchDrawingShaderSource HLSLPatchShaderSourceGetPatchDrawingShaderSource MTLPatchShaderSourceGetPatchDrawingShaderSource Osd extensions for patch evaluation from client shaders and compute kernels 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 Other Changes Deprecation Announcements The methods OsdTbbEvaluatorSetNumThreads and OsdOmpEvaluatorSetNumThreads have been marked deprecated. Improvements Updated Osd patch drawing shader source to exclude legacy shader constructs to improve compatibility with Vulkan, DX12, etc. GitHub 1320 Installed Osd patch evaluation headers to allow use from client shaders and compute kernels GitHub 1321 Updated CMake build to locate TBB using TBBs CMake config in order to support oneTBB GitHub 1319 Updated CMake FindOpenCL module to support parsing version information from recent OpenCL headers GitHub 1322 Removed obsolete .travis.yml GitHub 1324 Bug Fixes Fixed inconsistent warning levels for MSVC builds when using Ninja GitHub 1318 Fixed documentation build errors when using Ninja GitHub 1323 Fixed build errors resulting from oneTBB API changes GitHub 1317 Generated on 2024-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ + "tags": "", │ │ │ │ │ + "loc": "release_36.html" │ │ │ │ │ + }, { │ │ │ │ │ "title": "Overview of Release 3.4", │ │ │ │ │ "text": "Overview of Release 3.4 Overview of Release 3.4 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "release_34.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "Overview of Release 3.3", │ │ │ │ │ "text": "Overview of Release 3.3 Overview of Release 3.3 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "release_33.html" │ │ │ │ │ }, { │ │ │ │ │ - "title": "Overview of Release 3.1", │ │ │ │ │ - "text": "Overview of Release 3.1 Overview of Release 3.1 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ - "tags": "", │ │ │ │ │ - "loc": "release_31.html" │ │ │ │ │ - }, { │ │ │ │ │ "title": "Overview of Release 3.2", │ │ │ │ │ "text": "Overview of Release 3.2 Overview of Release 3.2 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "release_32.html" │ │ │ │ │ }, { │ │ │ │ │ + "title": "Overview of Release 3.1", │ │ │ │ │ + "text": "Overview of Release 3.1 Overview of Release 3.1 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ + "tags": "", │ │ │ │ │ + "loc": "release_31.html" │ │ │ │ │ + }, { │ │ │ │ │ "title": "Overview of Release 3.0", │ │ │ │ │ "text": "Overview of Release 3.0 Overview of Release 3.0 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "release_30.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "References", │ │ │ │ │ "text": "References References 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ @@ -201,29 +201,29 @@ │ │ │ │ │ "loc": "references.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "Porting Guide 2.x to 3.0", │ │ │ │ │ "text": "Porting Guide 2.x to 3.0 Porting Guide 2.x to 3.0 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "porting.html" │ │ │ │ │ }, { │ │ │ │ │ + "title": "OSD Tessellation shader Interface", │ │ │ │ │ + "text": "OSD Tessellation shader Interface OSD Tessellation shader Interface 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ + "tags": "", │ │ │ │ │ + "loc": "osd_shader_interface.html" │ │ │ │ │ + }, { │ │ │ │ │ "title": "mtlPtexViewer", │ │ │ │ │ "text": "mtlPtexViewer mtlPtexViewer 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "mtlptexviewer.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "OSD Overview", │ │ │ │ │ "text": "OSD Overview OSD Overview 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "osd_overview.html" │ │ │ │ │ }, { │ │ │ │ │ - "title": "OSD Tessellation shader Interface", │ │ │ │ │ - "text": "OSD Tessellation shader Interface OSD Tessellation shader Interface 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ - "tags": "", │ │ │ │ │ - "loc": "osd_shader_interface.html" │ │ │ │ │ - }, { │ │ │ │ │ "title": "mtlViewer", │ │ │ │ │ "text": "mtlViewer mtlViewer 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "mtlviewer.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "Modeling Tips", │ │ │ │ │ "text": "Modeling Tips Modeling Tips 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ @@ -231,53 +231,53 @@ │ │ │ │ │ "loc": "mod_notes.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "License", │ │ │ │ │ "text": "License License 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "license.html" │ │ │ │ │ }, { │ │ │ │ │ - "title": "HBR Overview", │ │ │ │ │ - "text": "HBR Overview HBR Overview 3.6.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Hierarchical Boundary Representation Hbr Half-edge Data Structure Half-edge cycles and Manifold Topology Templated Vertex Class Boundary Interpolation Rules Hierarchical Boundary Representation Hbr Hbr is an interconnected topological data representation. The high level of vertex connectivity information makes this representation well suited for creation and editing purposes. It is however inefficient for interactive refinement operations Separate objects are allocated for each vertex and edge with pointers to neighboring vertices and edges. Hbr is also the lowest-level subdivision library in Pixars Photorealistic RenderMan . 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 Half-edge Data Structure The current implementation is based on a half-edge data structure. Half-edge cycles and Manifold Topology Because half-edges only carry a reference to their opposite half-edge, a given edge can only access a single neighboring edge cycle. This is a fundamental limitation of the half-edge data structure, in that it cannot represent non-manifold geometry, in particular fan-type topologies. A different approach to topology will probably be necessary in order to accommodate non-manifold geometry. Templated Vertex Class The vertex class has been abstracted into a set of templated function accesses. Providing Hbr with a template vertex class that does not implement these functions allows client-code to use Hbr as a pure topological analysis tool without having to pay any costs for data interpolation. It also allows client-code to remain in complete control of the layout of the vertex data interleaved or non-interleaved. Boundary Interpolation Rules Hbr recognizes 4 rule-sets of boundary interpolation Interpolation Rule-Sets k_InterpolateBoundaryNone k_InterpolateBoundaryEdgeOnly k_InterpolateBoundaryEdgeAndCorner k_InterpolateBoundaryAlwaysSharp This enum is shared for both vertex and face-varying interpolation, with the following distinctions vertex boundaries the BoundaryNone rule skips all boundary vertices results are undefined the AlwaysSharp rule does not apply face-varying boundaries the BoundaryNone rule selects bilinear face-varying interpolation Generated on 2024-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ - "tags": "", │ │ │ │ │ - "loc": "hbr_overview.html" │ │ │ │ │ - }, { │ │ │ │ │ "title": "Introduction", │ │ │ │ │ "text": "Introduction Introduction 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "intro.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "Hierarchical Edits", │ │ │ │ │ "text": "Hierarchical Edits Hierarchical Edits 3.6.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Hierarchical Edits Hierarchical Edits Paths Vertex Edits Edge Edits Face Edits Hierarchical Edits To understand the hierarchical aspect of subdivision, we realize that subdivision itself leads to a natural hierarchy after the first level of subdivision, each face in a subdivision mesh subdivides to four quads in the Catmull-Clark scheme, or four triangles in the Loop scheme. This creates a parent and child relationship between the original face and the resulting four subdivided faces, which in turn leads to a hierarchy of subdivision as each child in turn subdivides. A hierarchical edit is an edit made to any one of the faces, edges, or vertices that arise anywhere during subdivision. Normally these subdivision components inherit values from their parents based on a set of subdivision rules that depend on the subdivision scheme. A hierarchical edit overrides these values. This allows for a compact specification of localized detail on a subdivision surface, without having to express information about the rest of the subdivision surface at the same level of detail. Release Notes 3.0.0 Hierarchical Edits have been marked as extended specification and support for hierarchical features has been removed from the 3.0 release. This decision allows for great simplifications of many areas of the subdivision algorithms. If we can identify legitimate use-cases for hierarchical tags, we will consider re-implementing them in future releases, as time and resources allow. Hierarchical Edits Paths In order to perform a hierarchical edit, we need to be able to name the subdivision component we are interested in, no matter where it may occur in the subdivision hierarchy. This leads us to a hierarchical path specification for faces, since once we have a face we can navigate to an incident edge or vertex by association. We note that in a subdivision mesh, a face always has incident vertices, which are labelled in relation to the face with an integer index starting at zero and in consecutive order according to the usual winding rules for subdivision surfaces. Faces also have incident edges, and these are labelled according to the origin vertex of the edge. In this diagram, the indices of the vertices of the base face are marked in red so on the left we have an extraordinary Catmull-Clark face with five vertices labeled 0-4 and on the right we have a regular Catmull-Clark face with four vertices labelled 0-3 . The indices of the child faces are blue note that in both the extraordinary and regular cases, the child faces are indexed the same way, i.e. the sub-face labeled n has one incident vertex that is the result of the subdivision of the parent vertex also labeled n in the parent face. Specifically, we note that the sub-face 1 in both the regular and extraordinary face is nearest to the vertex labelled 1 in the parent. The indices of the vertices of the child faces are labeled green , and this is where the difference lies between the extraordinary and regular case in the extraordinary case, vertex to vertex subdivision always results in a vertex labeled 0 , while in the regular case, vertex to vertex subdivision assigns the same index to the child vertex. Again, specifically, we note that the parent vertex indexed 1 in the extraordinary case has a child vertex 0 , while in the regular case the parent vertex indexed 1 actually has a child vertex that is indexed 1 . Note that this indexing scheme was chosen to maintain the property that the vertex labeled 0 always has the lowest uv parametric value on the face. By appending a vertex index to a face index, we can create a vertex path specification. For example, 655 2 3 0 specifies the 1st. vertex of the 3 rd. child face of the 2 nd. child face of the of the 655 th. face of the subdivision mesh. Vertex Edits Vertex hierarchical edits can modify the value or the sharpness of primitive variables for vertices and sub-vertices anywhere in the subdivision hierarchy. The edits are performed using either an add or a set operator. set indicates the primitive variable value or sharpness is to be set directly to the values specified. add adds a value to the normal result computed via standard subdivision rules. In other words, this operation allows value offsets to be applied to the mesh at any level of the hierarchy. Edge Edits Edge hierarchical edits can only modify the sharpness of primitive variables for edges and sub-edges anywhere in the subdivision hierarchy. Face Edits Face hierarchical edits can modify several properties of faces and sub-faces anywhere in the subdivision hierarchy. Modifiable properties include The set or add operators modify the value of primitive variables associated with faces. The hole operation introduces holes missing faces into the subdivision mesh at any level in the subdivision hierarchy. The faces will be deleted, and none of their children will appear you cannot unhole a face if any ancestor is a hole. This operation takes no float or string arguments. Generated on 2024-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "hedits.html" │ │ │ │ │ }, { │ │ │ │ │ - "title": "glStencilViewer", │ │ │ │ │ - "text": "glStencilViewer glStencilViewer 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ + "title": "HBR Overview", │ │ │ │ │ + "text": "HBR Overview HBR Overview 3.6.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Hierarchical Boundary Representation Hbr Half-edge Data Structure Half-edge cycles and Manifold Topology Templated Vertex Class Boundary Interpolation Rules Hierarchical Boundary Representation Hbr Hbr is an interconnected topological data representation. The high level of vertex connectivity information makes this representation well suited for creation and editing purposes. It is however inefficient for interactive refinement operations Separate objects are allocated for each vertex and edge with pointers to neighboring vertices and edges. Hbr is also the lowest-level subdivision library in Pixars Photorealistic RenderMan . 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 Half-edge Data Structure The current implementation is based on a half-edge data structure. Half-edge cycles and Manifold Topology Because half-edges only carry a reference to their opposite half-edge, a given edge can only access a single neighboring edge cycle. This is a fundamental limitation of the half-edge data structure, in that it cannot represent non-manifold geometry, in particular fan-type topologies. A different approach to topology will probably be necessary in order to accommodate non-manifold geometry. Templated Vertex Class The vertex class has been abstracted into a set of templated function accesses. Providing Hbr with a template vertex class that does not implement these functions allows client-code to use Hbr as a pure topological analysis tool without having to pay any costs for data interpolation. It also allows client-code to remain in complete control of the layout of the vertex data interleaved or non-interleaved. Boundary Interpolation Rules Hbr recognizes 4 rule-sets of boundary interpolation Interpolation Rule-Sets k_InterpolateBoundaryNone k_InterpolateBoundaryEdgeOnly k_InterpolateBoundaryEdgeAndCorner k_InterpolateBoundaryAlwaysSharp This enum is shared for both vertex and face-varying interpolation, with the following distinctions vertex boundaries the BoundaryNone rule skips all boundary vertices results are undefined the AlwaysSharp rule does not apply face-varying boundaries the BoundaryNone rule selects bilinear face-varying interpolation Generated on 2024-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ - "loc": "glstencilviewer.html" │ │ │ │ │ + "loc": "hbr_overview.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "glViewer", │ │ │ │ │ "text": "glViewer glViewer 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "glviewer.html" │ │ │ │ │ }, { │ │ │ │ │ - "title": "glShareTopology", │ │ │ │ │ - "text": "glShareTopology glShareTopology 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ + "title": "glStencilViewer", │ │ │ │ │ + "text": "glStencilViewer glStencilViewer 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ - "loc": "glsharetopology.html" │ │ │ │ │ + "loc": "glstencilviewer.html" │ │ │ │ │ + }, { │ │ │ │ │ + "title": "glPtexViewer", │ │ │ │ │ + "text": "glPtexViewer glPtexViewer 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ + "tags": "", │ │ │ │ │ + "loc": "glptexviewer.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "glPaintTest", │ │ │ │ │ "text": "glPaintTest glPaintTest 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "glpainttest.html" │ │ │ │ │ }, { │ │ │ │ │ - "title": "glPtexViewer", │ │ │ │ │ - "text": "glPtexViewer glPtexViewer 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ + "title": "glShareTopology", │ │ │ │ │ + "text": "glShareTopology glShareTopology 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ - "loc": "glptexviewer.html" │ │ │ │ │ + "loc": "glsharetopology.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "glFVarViewer", │ │ │ │ │ "text": "glFVarViewer glFVarViewer 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "glfvarviewer.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "glEvalLimit", │ │ │ │ │ @@ -296,49 +296,49 @@ │ │ │ │ │ "loc": "far_overview.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "dxPtexViewer", │ │ │ │ │ "text": "dxPtexViewer dxPtexViewer 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "dxptexviewer.html" │ │ │ │ │ }, { │ │ │ │ │ - "title": "Contributing to OpenSubdiv", │ │ │ │ │ - "text": "Contributing to OpenSubdiv Contributing to OpenSubdiv 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ + "title": "dxViewer", │ │ │ │ │ + "text": "dxViewer dxViewer 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ - "loc": "contributing.html" │ │ │ │ │ + "loc": "dxviewer.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "Downloads", │ │ │ │ │ "text": "Downloads Downloads 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "downloads.html" │ │ │ │ │ }, { │ │ │ │ │ - "title": "dxViewer", │ │ │ │ │ - "text": "dxViewer dxViewer 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ + "title": "Contributing to OpenSubdiv", │ │ │ │ │ + "text": "Contributing to OpenSubdiv Contributing to OpenSubdiv 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ - "loc": "dxviewer.html" │ │ │ │ │ + "loc": "contributing.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "Subdivision Compatibility", │ │ │ │ │ "text": "Subdivision Compatibility Subdivision Compatibility 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "compatibility.html" │ │ │ │ │ }, { │ │ │ │ │ - "title": "BFR Overview", │ │ │ │ │ - "text": "BFR Overview BFR Overview 3.6.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Base Face Representation Bfr Evaluation BfrSurfaceFactory BfrSurface Parameterization BfrParameterization Discontinuous Parameterizations Tessellation BfrTessellation Tessellation Rates Differences from Hardware Tessellation More on BfrSurfaceFactory BfrSurfaceFactoryCache Defining a Thread-Safe SurfaceFactory Internal versus External SurfaceFactoryCache Customizing a BfrSurfaceFactory The BfrSurfaceFactoryMeshAdapter Interface Customizing the Subclass Interface Base Face Representation Bfr Bfr is an alternate API layer that treats a subdivision mesh provided by a client as a piecewise parameteric surface primitive . The name Bfr derives from the fact that the concepts and classes of this interface all relate to the base faces of a mesh. Concepts such as parameterization , evaluation and tessellation all refer to and are embodied by classes that deal with a specific face of the original unrefined mesh. The Bfr interfaces allow the limit surface for a single face to be identified and evaluated independently of all other faces without any global pre-processing. While concepts and utilities from the Far interface are used internally, the details of their usage is hidden. There is no need to coordinate adaptive refinement with tables of patches, stencils, Ptex indices, patch maps, etc. The resulting evaluation interface is much simpler, more flexible and more scalable than those assembled with the Far classes -- providing a preferable alternative for many CPU-based use cases. The main classes in Bfr include SurfaceFactory A light-weight interface to a mesh that constructs pieces of limit surface for specified faces of a mesh in the form of Surfaces. Surface A class encapsulating the limit surface of a face with methods for complete parametric evaluation. Parameterization A simple class defining the available parameterizations of faces and for identifying that of a particular face. Tessellation A simple class providing information about a specified tessellation pattern for a given Parameterization. Bfr is well suited to cases where evaluation of the mesh may be sparse, dynamically determined or iterative Newton, gradient descent, etc. It is not intended to replace the cases for which Far has been designed i.e. repeated evaluation of a fixed set of points but is intended to complement them. While simplicity, flexibility and reasonable performance were the main goals of Bfr , its current implementation often outperforms the table-based solutions of Far for many common use cases -- both in terms of execution time and memory use. An area that Bfr does not address, and where Far remains more suited, is capturing a specific representation of the limit surface for external use. Bfr intentionally keeps internal implementation details private to allow future improvements or extensions. Those representation details may be publicly exposed in future releases, but until then, use of Far is required for such purposes. Evaluation Since subdivision surfaces are piecewise parametric surfaces, the main operation of interest is evaluation. Bfr deals with the limit surface of a mesh as a whole by associating pieces of surface with each face of the mesh. These pieces of surface are referred to in the context of Bfr simply as surfaces and represented by BfrSurface. Each face of the mesh has an implicit local 2D parameterization and individual coordinates of that parameterization are used to evaluate its corresponding Surface. In general, 3- and 4-sided faces use the same parameterizations for quad and triangular patches used elsewhere in OpenSubdiv Parameterizations are defined for other faces more details to follow, so Surfaces for all faces can be evaluated given any 2D parametric coordinate of its face. Given an instance of a mesh, usage first requires the creation of a BfrSurfaceFactory corresponding to that mesh -- from which Surfaces can then be created for evaluation. Construction of the SurfaceFactory involves no pre-processing and Surfaces can be created and discarded as needed. The processes of constructing and evaluating Surfaces are described in more detail below. BfrSurfaceFactory Construction of BfrSurfaces requires an instance of BfrSurfaceFactory. An instance of SurfaceFactory is a light-weight interface to an instance of a mesh that requires little to no construction cost or memory. The SurfaceFactory does no work until a Surface is requested for a particular face -- at which point the factory inspects the mesh topology around that face to assemble the Surface. SurfaceFactory is actually a base class that is inherited to provide a consistent construction interface for Surfaces. Subclasses are derived to support a particular class of connected mesh -- to implement the topology inspection around each face required to construct the Surface. Use of these subclasses is very simple given the public interface of SurfaceFactory, but defining such a subclass is not. That more complex use case of SurfaceFactory will be described in detail later with other more advanced topics. In many cases, it is not necessary to explicitly define a subclass of SurfaceFactory, as the tutorials for Bfr illustrate. If already using OpenSubdiv for other reasons, a FarTopologyRefiner will have been constructed to represent the initial base mesh before refinement. Bfr provides a subclass of SurfaceFactory using FarTopologyRefiner as the base mesh ignoring any levels of refinement for immediate use in such cases. For those cases when no connected mesh representation is available at all i.e. only raw, unconnected mesh data exists construction of a FarTopologyRefiner provides a reasonably efficient connected mesh representation see the Far tutorials for construction details, whose provided subclass for SurfaceFactory is then readily available. Given the different interpolation types for mesh data i.e. vertex, varying and face-varying, the common interface for SurfaceFactory provides methods to construct Surfaces explicitly for all data types. So for positions, the methods for vertex data must be used to obtain the desired Surface, while for texture coordinates the methods for face-varying are usually required, e.g. Surface CreateVertexSurface Index faceIndex const Surface CreateVaryingSurface Index faceIndex const Surface CreateFaceVaryingSurface Index faceIndex const The Surfaces created by these construction methods may all be distinct as the underlying representations of the Surfaces and the indices of the data that define them will often differ. For example, the position data may require a bicubic patch while the face-varying texture data may be linear or a different type of bicubic patch given the different interpolation rules for face-varying and the possibility of seams. While the internal representations of the Surfaces constructed for different data interpolation types may differ, since they are all constructed as Surfaces, the functionality used to evaluate them is identical. BfrSurface The Surface class encapsulates the piece of limit surface associated with a particular face of the mesh. The term surface is used rather than patch to emphasize that the Surface may itself be a piecewise parametric surface composed of more than one patch potentially even a complex set of patches. Surface is also a class template selected by floating point precision, and so typically declared as BfrSurfacefloat. Just as a simpler type name is likely to be declared when used, the simple name Surface will be used to refer to it here. And where code fragments may be warranted, float will be substituted for the template parameter for clarity. Once created, there are two steps required to evaluate a Surface preparation of associated data points from the mesh the actual calls to evaluation methods using these data points The latter is straight-forward, but the former warrants a little more explanation. The shape of a Surface for a base face is influenced by the set of data points associated with both the vertices of the face and a subset of those in its immediate neighborhood. These control points are identified when the Surface is initialized and are publicly available for inspection if desired. The control points are sufficient to define the Surface if the face and its neighborhood are regular, but any irregularity an extra-ordinary vertex, crease, etc. usually requires additional, intermediate points to be computed from those control points in order to evaluate the Surface efficiently. Having previously avoided use of the term patch in favor of surface, the term patch points is now used to refer to these intermediate points. Patch points always include the control points as a subset and may be followed by points needed for any additional patches required to represent a more complex Surface. While the patch points are assembled in a local array for direct use by the Surface, the control points can either be gathered and accessed locally or indexed from buffers associated with the mesh for other purposes e.g. computing a bounding box of the Surface Once the patch points for a Surface are prepared, they can be passed to the main evaluation methods with the desired parametric coordinates. As previously noted, since the Surface class is a template for floating point precision, evaluation is supported in single or double precision by constructing a Surface for the desired precision. Evaluation methods are overloaded to obtain simply position or including all first or second derivatives. So preparation and evaluation can be achieved with the following Preparing patch points void PreparePatchPoints float const meshPoints , PointDescriptor meshPointDescriptor , float patchPoints , PointDescriptor patchPointDescriptor const Evaluating position and 1st derivatives void Evaluate float const uv 2 , float const patchPoints , PointDescriptor patchPointDescriptor , float P , float dPdu , float dPdv const The PointDescriptor class here is a simple struct defining the size and stride of the associated array of points. Any use of mesh points, control points or patch points generally requires an accompanying descriptor. Depending on the complexity of the limit surface, this preparation of patch points can be costly -- especially if only evaluating the Surface once or twice. In such cases, it is worth considering evaluating limit stencils, i.e. sets of coefficients that combine the original control vertices of the mesh without requiring the computation of intermediate values. The cost of evaluating stencils is considerably higher than direct evaluation, but that added overhead is often offset by avoiding the use of patch points. Surfaces should be considered a class for transient use as retaining them for longer term usage can reduce their benefits. The relatively high cost of initialization of irregular Surfaces can be a deterrent and often motivates their retention despite increased memory costs. Retaining all Surfaces of a mesh for random sampling is a situation that should be undertaken with caution and will be discussed in more detail later with other advanced topics. Parameterization Each face of a mesh has an implicit local 2D parameterization whose 2D coordinates are used to evaluate the Surface for that face. Bfr adopts the parameterizations defined elsewhere in OpenSubdiv for quadrilateral and triangular patches, for use quadrilateral and triangular faces But the parameterization of a face is also dependent on the subdivision scheme applied to it. Subdivision schemes that divide faces into quads are ultimately represented by quadrilateral patches. So a face that is a quad can be parameterized as a single quad, but other non-quad faces are parameterized as a set of quad sub-faces, i.e. faces resulting from subdivision A triangle subdivided with a quad-based scheme e.g. Catmull-Clark will therefore not have the parameterization of the triangular patch indicated previously, but another defined by its quad sub-faces illustrated above to be described in more detail below. Subdivision schemes that divide faces into triangles are currently restricted to triangles only, so all faces are parameterized as single triangles. If Loop subdivision is extended to non-triangles in future, a parameterization involving triangular sub-faces will be necessary. Note that triangles are often parameterized elsewhere in terms of barycentric coordinates u,v,w where w 1 - u - v . As is the case elsewhere in OpenSubdiv, Bfr considers parametric coordinates as 2D u,v pairs for all purposes. All faces have an implicit 2D local parameterization and all interfaces requiring parametric coordinates consider only the u,v pair. If interaction with some other tool set requiring barycentric coordinates for triangles is necessary, it is left to users to compute the implicit w accordingly. BfrParameterization BfrParameterization is a simple class that fully defines the parameterization for a particular face. An instance of Parameterization is fully defined on construction given the size of a face and the subdivision scheme applied to it where the face size is its number of verticesedges. Since any parameterization of N -sided faces requires N in some form, the face size is stored as a member and made publicly available. Each Surface has the Parameterization of its face assigned internally as part of its construction, and that is used internally by the Surface in many of its methods. The need to deal directly with the explicit details of the Parameterization class is not generally necessary. Often it is sufficient to retrieve the Parameterization from a Surface for use in some other context e.g. passed to BfrTessellation. The enumerated type ParameterizationType currently defines three kinds of parameterizations -- one of which is assigned to each instance on construction according to the properties of the face QUAD Applied to quadrilateral faces with a quad-based subdivision scheme e.g. Catmark or Bilinear. TRI Applied to triangular faces with a triangle-based subdivision scheme e.g. Loop. QUAD_SUBFACES Applied to non-quad faces with a quad-based subdivision scheme -- dividing the face into quadrilateral sub-faces. Parameterizations that involve subdivision into sub-faces, e.g. QUAD_SUBFACES, may warrant some care as they are not continuous. Depending on how they are defined, the sub-faces may be disjoint e.g. Bfr or overlap in parametric space e.g. Ptex. To help these situations, methods to detect the presence of sub-faces and deal with their local parameterizations are made available. Discontinuous Parameterizations When a face does not have a regular parameterization, the division of the parameterization into sub-faces can create complications -- as noted and addressed elsewhere in OpenSubdiv. BfrParameterization defines a quadrangulated sub-face parameterization differently from the Far and Osd interfaces. For an N -sided face, Far uses a parameterization adopted by Ptex. In this case, all quad sub-faces are parameterized over the unit square and require an additional index of the sub-face to identify them. So Ptex coordinates require three values the index and u,v of the sub-face. To embed sub-face coordinates in a single u,v pair, Bfr tiles the sub-faces in disjoint regions in parameter space. This tiling is similar to the Udim convention for textures, where a UDim on the order of sqrtN is used to preserve accuracy for increasing N Note also that the edges of each sub-face are of parametric length 0.5, which results in a total parametric length of 1.0 for all base edges. This differs again from Ptex, which parameterizes sub-faces with edge lengths of 1.0, and so can lead to inconsistencies in parametric scale typically with derivatives across edges of the mesh if not careful. As previously mentioned, care may be necessary when dealing with the discontinuities that exist in parameterizations with sub-faces. This is particularly true if evaluating data at sampled locations of the face and needing to evaluate at other locations interpolated from these. Interpolation between parametric locations, e.g. A, B and C, should be avoided when discontinuous. In many cases, dealing directly with coordinates of the sub-faces is unavoidable, e.g. interpolating Ptex coordinates for sampling of textures assigned explicitly to the sub-faces. Methods are provided to convert from Bfr s tiled parameterization to and from other representations that use a local parameterization for each sub-face. Tessellation Once a Surface can be evaluated it can be tessellated. Given a 2D parameterization, a tessellation consists of two parts a set of parametric coordinates sampling the Parameterization a set of faces connecting these coordinates that covers the entire Parameterization Once evaluated, the resulting set of sample points and the faces connecting them effectively define a mesh for that parameterization. For the sake of brevity both here and in the programming interface, the parametric coordinates or sample points are referred to simply as coords or Coords -- avoiding the term points, which is already a heavily overloaded term. Similarly the faces connecting the coords are referred to as facets or Facets -- avoiding the term face to avoid confusion with the base face of the mesh being tessellated. Bfr provides a simple class to support a variety of tessellation patterns for the different Parameterization types and methods for retrieving its associated coords and facets. In many cases the patterns they define are similar to those of GPU hardware tessellation -- which may be more familiar to many -- but they do differ in several ways, as noted below. BfrTessellation In Bfr a Tessellation is a simple class defined by a Parameterization and a given set of tessellation rates and a few additional options. These two elements define a specific tessellation pattern for all faces sharing that Parameterization. An instance of Tessellation can then be inspected to identify all or subsets of its coords or facets. The process of tessellation in other contexts usually generates triangular facets, but that is not the case with Bfr . While producing triangular facets is the default, options are available to have Tessellation include quads in patterns for parameterizations associated with quad-based subdivision schemes. For simple uniform patterns, these produce patterns that are similar in topology to those resulting from subdivision Tessellation of 4- and 5-sided faces of a quad-based scheme using quadrilateral facets left and triangular right The name Tessellation was chosen rather than Tessellator as it is a passive class that simply holds information define its pattern. It doesnt do much other than providing information about the pattern when requested. A few general properties about the pattern are determined and retained on construction, after which an instance is immutable. So it does not maintain any additional state between queries. In order to provide flexibility when dealing with tessellations of adjacent faces, the coords arising from an instance of Tessellation are ordered and are retrievable in ways to help identify points along edges that may be shared between two or more faces. The coords of a Tessellation are generated in concentric rings, beginning with the outer ring and starting with the first vertex Ordering of coords around boundary for quad and tri parameterizations. Methods of the Tessellation class allow the coords associated with specific vertices or edges to be identified, as well as providing the coords for the entire ring around the boundary separately from those of the interior if desired. While the ordering of coords in the interior is not defined and so not to be relied upon, the ordering of the boundary coords is specifically fixed to support the correlation of potentially shared coords between faces. The Tessellation class is completely independent of the Surface class. Tessellation simply takes a Parameterization and tessellation rates and provides the coords and facets that define its pattern. So Tessellation can be used in any other evaluation context where the Parameterizations are appropriate. Tessellation Rates For a particular Parameterization, the various tessellation patterns are determined by one or more tessellation rates. The simplest set of patterns uses a single tessellation rate and is said to be uniform, i.e. all edges and the interior of the face are split to a similar degree Uniform tessellation of a quadrilateral and triangle with rates of 5 and 8. More complex non-uniform patterns allow the edges of the face to be split independently from the interior of the face. Given rates for each edge, a suitable uniform rate for the interior can be either inferred or specified explicitly. These are typically referred to as the outer rates and the inner rate. The single rate specified for a simple uniform tessellation is essentially the specification of a single inner rate while the outer rates for all edges are inferred as the same. Non-uniform tessellation of a quadrilateral, triangle and 5-sided face with various outer and inner rates. In the case of Parameterizations for quads, it is common elsewhere to associate two inner rates with the opposing edges. So two separate inner rates are available for quad parameterizations -- to be specified or otherwise inferred Quad tessellations with differing inner rates with matching left and varying outer rates right. Differences from Hardware Tessellation Since the specifications for hardware tessellation often leave some details of the patterns as implementation dependent, no two hardware implementations are necessarily the same. Typically there may be subtle differences in the non-uniform tessellation patterns along boundaries, and that is to be executed here. Bfr does provide some obvious additional functionality not present in hardware tessellation and vice versa, e.g. Bfr provides the following not supported by hardware tessellation patterns for parameterizations other than quads and tris e.g. N-sided preservation of quad facets of quad-based parameterizations while hardware tessellation provides the following not supported by Bfr patterns for so-called fractional tessellation non-integer rates The lack of fractional tessellation in Bfr is something that may be addressed in a future release. Where the functionality of Bfr and hardware tessellation overlap, a few other differences are worth noting indexing of edges and their associated outer tessellation rates uniform tessellation patterns for triangles differ significantly For the indexing of edges and rates, when specifying an outer rate associated with an edge, the array index for rate i is expected to correspond to edge i . Bfr follows the convention established elsewhere in OpenSubdiv of labelingindexing edges 0, 1, etc. between vertex pairs 0,1, 1,2, etc. So outer rate 0 corresponds to the edge between vertices 0,1. In contrast, hardware tessellation associates the rate for the edge between vertices 0,1 as outer rate 1 -- its outer rate 0 is between vertices N-1,0. So an offset of 1 is warranted when comparing the two. Outer edge tessellation rates of 1,3,5,7 applied to a quad with Bfr left and GPU tessellation right. For the uniform tessellation of triangles, its well known that the needs of hardware implementation led designers to factor the patterns for triangles to make use of the same hardware necessary for quads. As a result, many edges are introduced into a simple tessellation of a triangle that are not parallel to one of its three edges. Bfr uses patterns more consistent with those resulting from the subdivision of triangles. Only edges parallel to the edges of the triangle are introduced, which creates more uniform facets both edge lengths and area and reduces their number by one third. This can reduce artifacts that sometimes arise with use of the hardware patterns at lower tessellation rates Uniform tessellation of a triangle with Bfr left and GPU tessellation right. These triangular patterns have been referred to as integer spacing for triangular patches in early work on hardware tessellation. But use of these patterns was generally discarded in favor of techniques that split the triangle into three quads -- allowing the hardware solution for quad tessellation to be reused. More on BfrSurfaceFactory The primary function of BfrSurfaceFactory is to identify and construct a representation of the limit surface for a given face of a mesh. It achieves this by inspecting the topology around the given face and constructing a suitable representation encapsulated in a Surface. The regions around a face can be divided into two categories based on their topology those that are regular and those that are not, i.e. those that are irregular. Recalling the illustration from Irregular versus Irregular Features Patches of regular Surfaces Potential patches of irregular Surfaces The representation of the limit surface for regular regions is trivial -- it is a single parametric patch whose basis is determined by the subdivision scheme e.g. uniform bicubic B-spline for Catmull-Clark. In contrast, the representation of the limit surface for an irregular region cannot be accurately represented so simply. It can be far more complex depending on the features present extra-ordinary vertices, creasing of edges, etc.. It may be as simple as a different kind of parametric patch whose points are derived from those of the mesh, or it may often be a set of patches in a hierarchy resulting from local subdivision. Bfr intentionally hides the details of these representations to allow future improvement. The cost of determining and assembling the representations of irregular Surfaces is therefore often significant. Some of the performance benefits of the SurfaceFactory are achieved by having it cache the complexities of the irregular surfaces that it encounters. In many common use cases, awareness and management of this caching is not necessary as illustrated by the tutorials. But the thread-safe construction of Surfaces is one area where some awareness is required. Other use cases that share the cache between meshes are also worth exploring as they can further reduce potentially significant costs. BfrSurfaceFactoryCache The SurfaceFactoryCache is the class used by SurfaceFactory to cache the topological information that it can reuse for other similarly irregular faces of the mesh. Though it is a publicly accessible class, the SurfaceFactoryCache has little to no public interface other than construction made available to support more advanced cases covered later and in most cases it can be completely ignored. Typically an instance of SurfaceFactory has an internal SurfaceFactoryCache member which is used by that factory for its lifetime. Since that cache member is mutable -- potentially updated when an irregular Surface is created -- it does need to be thread-safe if the SurfaceFactory is to be used in a threaded context. To accommodate this need, SurfaceFactoryCache is defined as a base class with an accompanying class template to allow the trivial declaration of thread-safe subclasses template typename MUTEX_TYPE , typename READ_LOCK_GUARD_TYPE , typename WRITE_LOCK_GUARD_TYPE class SurfaceFactoryCacheThreaded public SurfaceFactoryCache ... For example, a local type for a thread-safe cache using stdshared_mutex from C17 could be simply declared as follows include shared_mutex typedef Bfr SurfaceFactoryCacheThreaded std shared_mutex , std shared_lock std shared_mutex , std unique_lock std shared_mutex ThreadSafeCache Such thread-safe cache types are essential when distributing the work of a single SurfaceFactory across multiple threads. They can be encapsulated in the definitions of subclasses of SurfaceFactory or used to define external cache instances for use with any subclass of SurfaceFactory. Defining a Thread-Safe SurfaceFactory The thread-safety of a SurfaceFactory is purely dependent on the thread-safety of the SurfaceFactoryCache that it uses. With caching disabled, any SurfaceFactory is thread-safe but will be far less efficient in dealing with irregular Surfaces. When a subclass of SurfaceFactory is defined discussed in more detail later, one of its responsibilities is to identify and manage an instance of SurfaceFactoryCache for its internal use. Defining such a subclass is a simple matter of declaring a thread-safe SurfaceFactoryCache type as noted above along with a local member of that type to be used by each instance. Given the widespread use of the FarTopologyRefiner in OpenSubdiv, and the lack of a connected mesh representation in many contexts, a subclass of SurfaceFactory is made available to use a TopologyRefiner as a mesh, i.e. the BfrRefinerSurfaceFactory subclass. Since many OpenSubdiv users may make use of the RefinerSurfaceFactory subclass, and they may have different preferences of threading model, the RefinerSurfaceFactory subclass is similarly defined as a class template to enable threading flexibility. In this case, the template is parameterized by the desired type of SurfaceFactoryCache, which embodies the threading specifications as noted above, i.e. template class CACHE_TYPE SurfaceFactoryCache class RefinerSurfaceFactory public ... ... The default template is the base SurfaceFactoryCache which is not thread-safe, but a simple declaration of a thread-safe cache type is sufficient to declare a similarly thread-safe RefinerSurfaceFactory type include opensubdivbfrsurfaceFactoryCache.h Declare thread-safe cache type see stdshared_mutex example above typedef Bfr SurfaceFactoryCacheThreaded ... ThreadSafeCache Declare thread-safe factory type typedef Bfr RefinerSurfaceFactory ThreadSafeCache ThreadSafeFactory The resulting factory type safely allows the construction of Surfaces and their subsequent evaluation and tessellation to be distributed over multiple threads. Internal versus External SurfaceFactoryCache Typical usage of the SurfaceFactoryCache by the SurfaceFactory is to have the factory create an internal cache member to be used for the lifetime of the factory associated with a mesh. But the data stored in the cache is not in any way dependent on the factory or mesh used to create it. So a cache can potentially be shared by multiple factories. While such sharing is possible -- and the Bfr interfaces intentionally permit it -- any exploration should proceed with caution. Greater public knowledge and control of the cache is ultimately necessary to manage its potentially unbounded memory increase, and support in the public interface is currently limited. A cache stored as a member varialbe and managed exclusively by the factory is said to be internal while one managed exclusively by its client is said to be external. In both cases, the factory deals with retrieving data from or adding data to the cache -- only management of the caches ownership differs, and that ownership is never transferred. A subset of the methods of SurfaceFactoryOptions provide the means of specifying the use of an internal or external cache, or no caching at all Assign an external cache to override the internal Options SetExternalCache SurfaceFactoryCache cache Enable or disable caching default is true Options EnableCaching bool on As noted here, specifying an external cache will override use of a factorys internal cache. Disabling caching takes precedence over both, but is generally not practical and exists mainly to aide debugging. The common use of the internal cache is to create a SurfaceFactory and distribute processing of the Surfaces of its faces over multiple threads, or to construct Surfaces for the mesh for any other purpose while the mesh remains in scope. There is no need to deal explicitly with the SurfaceFactoryCache in these cases. Use cases for an external cache are more varied and explicit, including creating a single external cache to process a sequence of meshes on a single thread cache thread-safety not required creating a separate external cache on each thread to process a set of meshes distributed over multiple threads cache thread-safety not required creating a single external cache for multiple meshes distributed over multiple threads cache thread-safety required, and beware of unbounded memory growth here Future extensions to the public interface of SurfaceFactoryCache may be made to support common use cases as their common needs are made clearer. Customizing a BfrSurfaceFactory One of the goals of Bfr is to provide a lightweight interface for the evaluation of Surfaces from any connected mesh representation. In order to do so, the factory needs to gather topological information from that mesh representation. That information is provide to the factory through inheritance a subclass of SurfaceFactory is defined that fulfills all requirements of the factory. It must be made clear that a subclass can only be created from a connected mesh representation, i.e. a representation that includes connectivity or adjacency relationships between its components vertices, faces and edges. Classes for simple containers of mesh topology used for external formats e.g. USD, Alembic, etc. are generally not connected . Many applications construct a connected mesh representation for internal use when loading such mesh data -- using a variety of techniques including half-edges, winged-edges or table-based relationships. There are many choices here that offer a variety of trade-offs depending on usage e.g. fixed vs dynamic topology and so no best solution. Once constructed and available within an application, Bfr strives to take advantage of that representation. As a minimum requirement for supporting a subclass of SurfaceFactory, a connected mesh representation must be able to efficiently identify the incident faces of any given vertex. As noted earlier, when no such representation is available, users can construct a FarTopologyRefiner for their connected mesh and use BfrRefinerSurfaceFactory. There are three requirements of a subclass of SurfaceFactory fulfill the interface required to adapt the connected mesh to the factory provide an internal cache for the factory of the preferred type extend the existing SurfaceFactory interface for the connected mesh type The first of these is the most significant and is the focus here. The second was mentioned previously with the SurfaceFactoryCache and is trivial. The last should also be trivial and is generally optional at minimum the subclass will need a constructor to create an instance of the factory from a given mesh, but anything more is not strictly essential. It is important to note that anyone attempting to write such a subclass must have an intimate understanding of the topological capabilities and limitations of the mesh representation involved. The SurfaceFactory is topologically robust in that it will support meshes with a wide range of degenerate or non-manifold features, but in order to process topology efficiently, a subclass needs to indicate when and where those degeneracies may occur. A simplified implementation of the BfrRefinerSurfaceFactory is provided in the tutorials for illustration purposes. The BfrSurfaceFactoryMeshAdapter Interface The SurfaceFactoryMeshAdapter class defines the interface used to satisfy the topological requirements of the SurfaceFactory. An implementation for a particular mesh class provides the base factory with everything needed to identify the limit surface of a given face from its surrounding topology. The SurfaceFactory actually inherits the SurfaceFactoryMeshAdapter interface but does not implement it -- deferring that to its subclasses -- since separate subclasses of SurfaceFactoryMeshAdapter serve no other purpose. The limit surface for a face is fully defined by the complete set of incident vertices, faces and edges surrounding the face. But it is difficult to accurately and efficiently assemble and represent all of that required information in a single class or query for all possible cases. So the mesh adapter interface provides a suite of methods to allow the factory to gather only what it needs for the Surface required -- which may differ considerably according to whether the Surface is for vertex or face-varying data, linear or non-linear, etc. The virtual methods required can be organized into small groups devoted to particular aspects of construction. A description of the methods and purposes for each group follows, with more details and exact signatures available in the accompanying Doxygen for the SurfaceFactoryMeshAdapter class. Basic Properties of a Face A small set of simple methods indicate whether the SurfaceFactory needs to create a Surface for a face, and if so, how virtual bool isFaceHole Index faceIndex const 0 virtual int getFaceSize Index faceIndex const 0 These are trivial and self-explanatory. Identifying Indices for an Entire Face If the Surface requested turns out to be linearly interpolated e.g. for varying or linear face-varying data indices for the control point data are all assigned to the face and can be trivially identified virtual int getFaceVertexIndices Index faceIndex , Index vertexIndices const 0 virtual int getFaceFVarValueIndices Index faceIndex , FVarID faceVaryingID , Index faceVaryingIndices const 0 Since multiple sets of face-varying data with different topology may be assigned to the mesh, an identifier needs to be specified both in the public interface when requesting a Surface and here when the factory assembles it. How a face-varying identifier is interpreted is completely determined by the subclass through the implementation of the methods that require it. Specifying the Neighborhood Around a Vertex When the Surface requested is not linear, the entire neighborhood around the face must be determined. This is achieved by specifying the neighborhoods around each of the vertices of the face, which the factory then assembles. For the neighborhood of each face-vertex, the factory obtains a complete specification in a simple VertexDescriptor class. An instance of VertexDescriptor is provided and populated with the following method virtual int populateFaceVertexDescriptor Index faceIndex , int faceVertex , VertexDescriptor vertexDescriptor const 0 Within this method, the given VertexDescriptor instance is initialized using a small suite of VertexDescriptor methods that specify the following information about the vertex and its neighborhood whether the neighborhood is manifold ordered counter-clockwise whether the vertex is on a boundary the sizes of all or each incident face the sharpness of the vertex the sharpness of edges of incident faces These methods are specified between Initialize and Finalize methods, so an interior vertex of valence 4 with three incident quads and one incident triangle might be specified as follows int vertexValence 4 vertexDescriptor . Initialize vertexValence vertexDescriptor . SetManifold true vertexDescriptor . SetBoundary false vertexDescriptor . SetIncidentFaceSize 0 , 4 vertexDescriptor . SetIncidentFaceSize 1 , 4 vertexDescriptor . SetIncidentFaceSize 2 , 3 vertexDescriptor . SetIncidentFaceSize 3 , 4 vertexDescriptor . Finalize Specifying the vertex neighborhood as manifold is critical to allowing the factory to inspect the neighborhood efficiently. A manifold vertex has its incident faces and edges ordered in a counter-clockwise orientation and is free of degeneracies. If it is not clear that a vertex is manifold, it should not be set as such or the factorys inspection of associated data will not be correct. Identifying Indices Around a Vertex When the Surface requested is not linear, the indices of control point data for the entire neighborhood of the face are ultimately required, and that entire set is similarly determined by identifying the indices for each of the neighborhoods of the face-vertices virtual int getFaceVertexIncidentFaceVertexIndices Index faceIndex , int faceVertex , Index vertexIndices const 0 virtual int getFaceVertexIncidentFaceFVarValueIndices Index faceIndex , int faceVertex , FVarID faceVaryingID , Index faceVaryingIndices const 0 As was the case with the methods retrieving indices for the entire face, one exists for identifying indices vertex data while another exists to identify indices for a specified set of face-varying data. Customizing the Subclass Interface Once the topological requirements of a subclass have been satisfied for its mesh representation, minor customizations of the inherited interface of SurfaceFactory may be useful. Consider a class called Mesh and its associated subclass of SurfaceFactory called MeshSurfaceFactory. At minimum, a constructor of MeshSurfaceFactory is necessary to construct an instance for a particular instance of mesh. This is typically achieved as follows MeshSurfaceFactory Mesh const mesh , Options const options In addition to the Mesh instance, such a constructor passes a set of Options i.e. SurfaceFactoryOptions to the base SurfaceFactory. Any additional arguments are possible here, e.g. perhaps only a single face-varying UV set is supported, and that might be specified by identifying it on construction. Given that mesh representations often have their own associated classes that internally contain the actual data, it may be useful to provide a few other conveniences to simplify working with a Mesh. For example, if mesh data is stored in a class called MeshPrimvar, a method to construct a Surface from a given MeshPrimvar may be useful, e.g. bool InitPrimvarSurface int faceIndex , MeshPrimvar const meshPrimvar , Surface float surface which would then determine the nature of the MeshPrimvar data interpolated as vertex, varying or face-varying and act accordingly. It may also be worth simplifying the template complexity here if only one precision is ever required. Generated on 2024-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ - "tags": "", │ │ │ │ │ - "loc": "bfr_overview.html" │ │ │ │ │ - }, { │ │ │ │ │ "title": "Code Examples", │ │ │ │ │ "text": "Code Examples Code Examples 3.6.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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "code_examples.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "Building with CMake", │ │ │ │ │ "text": "Building with CMake Building with CMake 3.6.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 - DCMAKE_PREFIX_PATH semicolon - separated list of directories specifying installation prefixes to be searched by the find_package command default empty list - DCUDA_TOOLKIT_ROOT_DIR path to CUDA - DOSD_CUDA_NVCC_FLAGS CUDA options , e . g . -- gpu - architecture - DPTEX_LOCATION path to Ptex - DGLFW_LOCATION path to GLFW - 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-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "cmake_build.html" │ │ │ │ │ }, { │ │ │ │ │ + "title": "BFR Overview", │ │ │ │ │ + "text": "BFR Overview BFR Overview 3.6.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Base Face Representation Bfr Evaluation BfrSurfaceFactory BfrSurface Parameterization BfrParameterization Discontinuous Parameterizations Tessellation BfrTessellation Tessellation Rates Differences from Hardware Tessellation More on BfrSurfaceFactory BfrSurfaceFactoryCache Defining a Thread-Safe SurfaceFactory Internal versus External SurfaceFactoryCache Customizing a BfrSurfaceFactory The BfrSurfaceFactoryMeshAdapter Interface Customizing the Subclass Interface Base Face Representation Bfr Bfr is an alternate API layer that treats a subdivision mesh provided by a client as a piecewise parameteric surface primitive . The name Bfr derives from the fact that the concepts and classes of this interface all relate to the base faces of a mesh. Concepts such as parameterization , evaluation and tessellation all refer to and are embodied by classes that deal with a specific face of the original unrefined mesh. The Bfr interfaces allow the limit surface for a single face to be identified and evaluated independently of all other faces without any global pre-processing. While concepts and utilities from the Far interface are used internally, the details of their usage is hidden. There is no need to coordinate adaptive refinement with tables of patches, stencils, Ptex indices, patch maps, etc. The resulting evaluation interface is much simpler, more flexible and more scalable than those assembled with the Far classes -- providing a preferable alternative for many CPU-based use cases. The main classes in Bfr include SurfaceFactory A light-weight interface to a mesh that constructs pieces of limit surface for specified faces of a mesh in the form of Surfaces. Surface A class encapsulating the limit surface of a face with methods for complete parametric evaluation. Parameterization A simple class defining the available parameterizations of faces and for identifying that of a particular face. Tessellation A simple class providing information about a specified tessellation pattern for a given Parameterization. Bfr is well suited to cases where evaluation of the mesh may be sparse, dynamically determined or iterative Newton, gradient descent, etc. It is not intended to replace the cases for which Far has been designed i.e. repeated evaluation of a fixed set of points but is intended to complement them. While simplicity, flexibility and reasonable performance were the main goals of Bfr , its current implementation often outperforms the table-based solutions of Far for many common use cases -- both in terms of execution time and memory use. An area that Bfr does not address, and where Far remains more suited, is capturing a specific representation of the limit surface for external use. Bfr intentionally keeps internal implementation details private to allow future improvements or extensions. Those representation details may be publicly exposed in future releases, but until then, use of Far is required for such purposes. Evaluation Since subdivision surfaces are piecewise parametric surfaces, the main operation of interest is evaluation. Bfr deals with the limit surface of a mesh as a whole by associating pieces of surface with each face of the mesh. These pieces of surface are referred to in the context of Bfr simply as surfaces and represented by BfrSurface. Each face of the mesh has an implicit local 2D parameterization and individual coordinates of that parameterization are used to evaluate its corresponding Surface. In general, 3- and 4-sided faces use the same parameterizations for quad and triangular patches used elsewhere in OpenSubdiv Parameterizations are defined for other faces more details to follow, so Surfaces for all faces can be evaluated given any 2D parametric coordinate of its face. Given an instance of a mesh, usage first requires the creation of a BfrSurfaceFactory corresponding to that mesh -- from which Surfaces can then be created for evaluation. Construction of the SurfaceFactory involves no pre-processing and Surfaces can be created and discarded as needed. The processes of constructing and evaluating Surfaces are described in more detail below. BfrSurfaceFactory Construction of BfrSurfaces requires an instance of BfrSurfaceFactory. An instance of SurfaceFactory is a light-weight interface to an instance of a mesh that requires little to no construction cost or memory. The SurfaceFactory does no work until a Surface is requested for a particular face -- at which point the factory inspects the mesh topology around that face to assemble the Surface. SurfaceFactory is actually a base class that is inherited to provide a consistent construction interface for Surfaces. Subclasses are derived to support a particular class of connected mesh -- to implement the topology inspection around each face required to construct the Surface. Use of these subclasses is very simple given the public interface of SurfaceFactory, but defining such a subclass is not. That more complex use case of SurfaceFactory will be described in detail later with other more advanced topics. In many cases, it is not necessary to explicitly define a subclass of SurfaceFactory, as the tutorials for Bfr illustrate. If already using OpenSubdiv for other reasons, a FarTopologyRefiner will have been constructed to represent the initial base mesh before refinement. Bfr provides a subclass of SurfaceFactory using FarTopologyRefiner as the base mesh ignoring any levels of refinement for immediate use in such cases. For those cases when no connected mesh representation is available at all i.e. only raw, unconnected mesh data exists construction of a FarTopologyRefiner provides a reasonably efficient connected mesh representation see the Far tutorials for construction details, whose provided subclass for SurfaceFactory is then readily available. Given the different interpolation types for mesh data i.e. vertex, varying and face-varying, the common interface for SurfaceFactory provides methods to construct Surfaces explicitly for all data types. So for positions, the methods for vertex data must be used to obtain the desired Surface, while for texture coordinates the methods for face-varying are usually required, e.g. Surface CreateVertexSurface Index faceIndex const Surface CreateVaryingSurface Index faceIndex const Surface CreateFaceVaryingSurface Index faceIndex const The Surfaces created by these construction methods may all be distinct as the underlying representations of the Surfaces and the indices of the data that define them will often differ. For example, the position data may require a bicubic patch while the face-varying texture data may be linear or a different type of bicubic patch given the different interpolation rules for face-varying and the possibility of seams. While the internal representations of the Surfaces constructed for different data interpolation types may differ, since they are all constructed as Surfaces, the functionality used to evaluate them is identical. BfrSurface The Surface class encapsulates the piece of limit surface associated with a particular face of the mesh. The term surface is used rather than patch to emphasize that the Surface may itself be a piecewise parametric surface composed of more than one patch potentially even a complex set of patches. Surface is also a class template selected by floating point precision, and so typically declared as BfrSurfacefloat. Just as a simpler type name is likely to be declared when used, the simple name Surface will be used to refer to it here. And where code fragments may be warranted, float will be substituted for the template parameter for clarity. Once created, there are two steps required to evaluate a Surface preparation of associated data points from the mesh the actual calls to evaluation methods using these data points The latter is straight-forward, but the former warrants a little more explanation. The shape of a Surface for a base face is influenced by the set of data points associated with both the vertices of the face and a subset of those in its immediate neighborhood. These control points are identified when the Surface is initialized and are publicly available for inspection if desired. The control points are sufficient to define the Surface if the face and its neighborhood are regular, but any irregularity an extra-ordinary vertex, crease, etc. usually requires additional, intermediate points to be computed from those control points in order to evaluate the Surface efficiently. Having previously avoided use of the term patch in favor of surface, the term patch points is now used to refer to these intermediate points. Patch points always include the control points as a subset and may be followed by points needed for any additional patches required to represent a more complex Surface. While the patch points are assembled in a local array for direct use by the Surface, the control points can either be gathered and accessed locally or indexed from buffers associated with the mesh for other purposes e.g. computing a bounding box of the Surface Once the patch points for a Surface are prepared, they can be passed to the main evaluation methods with the desired parametric coordinates. As previously noted, since the Surface class is a template for floating point precision, evaluation is supported in single or double precision by constructing a Surface for the desired precision. Evaluation methods are overloaded to obtain simply position or including all first or second derivatives. So preparation and evaluation can be achieved with the following Preparing patch points void PreparePatchPoints float const meshPoints , PointDescriptor meshPointDescriptor , float patchPoints , PointDescriptor patchPointDescriptor const Evaluating position and 1st derivatives void Evaluate float const uv 2 , float const patchPoints , PointDescriptor patchPointDescriptor , float P , float dPdu , float dPdv const The PointDescriptor class here is a simple struct defining the size and stride of the associated array of points. Any use of mesh points, control points or patch points generally requires an accompanying descriptor. Depending on the complexity of the limit surface, this preparation of patch points can be costly -- especially if only evaluating the Surface once or twice. In such cases, it is worth considering evaluating limit stencils, i.e. sets of coefficients that combine the original control vertices of the mesh without requiring the computation of intermediate values. The cost of evaluating stencils is considerably higher than direct evaluation, but that added overhead is often offset by avoiding the use of patch points. Surfaces should be considered a class for transient use as retaining them for longer term usage can reduce their benefits. The relatively high cost of initialization of irregular Surfaces can be a deterrent and often motivates their retention despite increased memory costs. Retaining all Surfaces of a mesh for random sampling is a situation that should be undertaken with caution and will be discussed in more detail later with other advanced topics. Parameterization Each face of a mesh has an implicit local 2D parameterization whose 2D coordinates are used to evaluate the Surface for that face. Bfr adopts the parameterizations defined elsewhere in OpenSubdiv for quadrilateral and triangular patches, for use quadrilateral and triangular faces But the parameterization of a face is also dependent on the subdivision scheme applied to it. Subdivision schemes that divide faces into quads are ultimately represented by quadrilateral patches. So a face that is a quad can be parameterized as a single quad, but other non-quad faces are parameterized as a set of quad sub-faces, i.e. faces resulting from subdivision A triangle subdivided with a quad-based scheme e.g. Catmull-Clark will therefore not have the parameterization of the triangular patch indicated previously, but another defined by its quad sub-faces illustrated above to be described in more detail below. Subdivision schemes that divide faces into triangles are currently restricted to triangles only, so all faces are parameterized as single triangles. If Loop subdivision is extended to non-triangles in future, a parameterization involving triangular sub-faces will be necessary. Note that triangles are often parameterized elsewhere in terms of barycentric coordinates u,v,w where w 1 - u - v . As is the case elsewhere in OpenSubdiv, Bfr considers parametric coordinates as 2D u,v pairs for all purposes. All faces have an implicit 2D local parameterization and all interfaces requiring parametric coordinates consider only the u,v pair. If interaction with some other tool set requiring barycentric coordinates for triangles is necessary, it is left to users to compute the implicit w accordingly. BfrParameterization BfrParameterization is a simple class that fully defines the parameterization for a particular face. An instance of Parameterization is fully defined on construction given the size of a face and the subdivision scheme applied to it where the face size is its number of verticesedges. Since any parameterization of N -sided faces requires N in some form, the face size is stored as a member and made publicly available. Each Surface has the Parameterization of its face assigned internally as part of its construction, and that is used internally by the Surface in many of its methods. The need to deal directly with the explicit details of the Parameterization class is not generally necessary. Often it is sufficient to retrieve the Parameterization from a Surface for use in some other context e.g. passed to BfrTessellation. The enumerated type ParameterizationType currently defines three kinds of parameterizations -- one of which is assigned to each instance on construction according to the properties of the face QUAD Applied to quadrilateral faces with a quad-based subdivision scheme e.g. Catmark or Bilinear. TRI Applied to triangular faces with a triangle-based subdivision scheme e.g. Loop. QUAD_SUBFACES Applied to non-quad faces with a quad-based subdivision scheme -- dividing the face into quadrilateral sub-faces. Parameterizations that involve subdivision into sub-faces, e.g. QUAD_SUBFACES, may warrant some care as they are not continuous. Depending on how they are defined, the sub-faces may be disjoint e.g. Bfr or overlap in parametric space e.g. Ptex. To help these situations, methods to detect the presence of sub-faces and deal with their local parameterizations are made available. Discontinuous Parameterizations When a face does not have a regular parameterization, the division of the parameterization into sub-faces can create complications -- as noted and addressed elsewhere in OpenSubdiv. BfrParameterization defines a quadrangulated sub-face parameterization differently from the Far and Osd interfaces. For an N -sided face, Far uses a parameterization adopted by Ptex. In this case, all quad sub-faces are parameterized over the unit square and require an additional index of the sub-face to identify them. So Ptex coordinates require three values the index and u,v of the sub-face. To embed sub-face coordinates in a single u,v pair, Bfr tiles the sub-faces in disjoint regions in parameter space. This tiling is similar to the Udim convention for textures, where a UDim on the order of sqrtN is used to preserve accuracy for increasing N Note also that the edges of each sub-face are of parametric length 0.5, which results in a total parametric length of 1.0 for all base edges. This differs again from Ptex, which parameterizes sub-faces with edge lengths of 1.0, and so can lead to inconsistencies in parametric scale typically with derivatives across edges of the mesh if not careful. As previously mentioned, care may be necessary when dealing with the discontinuities that exist in parameterizations with sub-faces. This is particularly true if evaluating data at sampled locations of the face and needing to evaluate at other locations interpolated from these. Interpolation between parametric locations, e.g. A, B and C, should be avoided when discontinuous. In many cases, dealing directly with coordinates of the sub-faces is unavoidable, e.g. interpolating Ptex coordinates for sampling of textures assigned explicitly to the sub-faces. Methods are provided to convert from Bfr s tiled parameterization to and from other representations that use a local parameterization for each sub-face. Tessellation Once a Surface can be evaluated it can be tessellated. Given a 2D parameterization, a tessellation consists of two parts a set of parametric coordinates sampling the Parameterization a set of faces connecting these coordinates that covers the entire Parameterization Once evaluated, the resulting set of sample points and the faces connecting them effectively define a mesh for that parameterization. For the sake of brevity both here and in the programming interface, the parametric coordinates or sample points are referred to simply as coords or Coords -- avoiding the term points, which is already a heavily overloaded term. Similarly the faces connecting the coords are referred to as facets or Facets -- avoiding the term face to avoid confusion with the base face of the mesh being tessellated. Bfr provides a simple class to support a variety of tessellation patterns for the different Parameterization types and methods for retrieving its associated coords and facets. In many cases the patterns they define are similar to those of GPU hardware tessellation -- which may be more familiar to many -- but they do differ in several ways, as noted below. BfrTessellation In Bfr a Tessellation is a simple class defined by a Parameterization and a given set of tessellation rates and a few additional options. These two elements define a specific tessellation pattern for all faces sharing that Parameterization. An instance of Tessellation can then be inspected to identify all or subsets of its coords or facets. The process of tessellation in other contexts usually generates triangular facets, but that is not the case with Bfr . While producing triangular facets is the default, options are available to have Tessellation include quads in patterns for parameterizations associated with quad-based subdivision schemes. For simple uniform patterns, these produce patterns that are similar in topology to those resulting from subdivision Tessellation of 4- and 5-sided faces of a quad-based scheme using quadrilateral facets left and triangular right The name Tessellation was chosen rather than Tessellator as it is a passive class that simply holds information define its pattern. It doesnt do much other than providing information about the pattern when requested. A few general properties about the pattern are determined and retained on construction, after which an instance is immutable. So it does not maintain any additional state between queries. In order to provide flexibility when dealing with tessellations of adjacent faces, the coords arising from an instance of Tessellation are ordered and are retrievable in ways to help identify points along edges that may be shared between two or more faces. The coords of a Tessellation are generated in concentric rings, beginning with the outer ring and starting with the first vertex Ordering of coords around boundary for quad and tri parameterizations. Methods of the Tessellation class allow the coords associated with specific vertices or edges to be identified, as well as providing the coords for the entire ring around the boundary separately from those of the interior if desired. While the ordering of coords in the interior is not defined and so not to be relied upon, the ordering of the boundary coords is specifically fixed to support the correlation of potentially shared coords between faces. The Tessellation class is completely independent of the Surface class. Tessellation simply takes a Parameterization and tessellation rates and provides the coords and facets that define its pattern. So Tessellation can be used in any other evaluation context where the Parameterizations are appropriate. Tessellation Rates For a particular Parameterization, the various tessellation patterns are determined by one or more tessellation rates. The simplest set of patterns uses a single tessellation rate and is said to be uniform, i.e. all edges and the interior of the face are split to a similar degree Uniform tessellation of a quadrilateral and triangle with rates of 5 and 8. More complex non-uniform patterns allow the edges of the face to be split independently from the interior of the face. Given rates for each edge, a suitable uniform rate for the interior can be either inferred or specified explicitly. These are typically referred to as the outer rates and the inner rate. The single rate specified for a simple uniform tessellation is essentially the specification of a single inner rate while the outer rates for all edges are inferred as the same. Non-uniform tessellation of a quadrilateral, triangle and 5-sided face with various outer and inner rates. In the case of Parameterizations for quads, it is common elsewhere to associate two inner rates with the opposing edges. So two separate inner rates are available for quad parameterizations -- to be specified or otherwise inferred Quad tessellations with differing inner rates with matching left and varying outer rates right. Differences from Hardware Tessellation Since the specifications for hardware tessellation often leave some details of the patterns as implementation dependent, no two hardware implementations are necessarily the same. Typically there may be subtle differences in the non-uniform tessellation patterns along boundaries, and that is to be executed here. Bfr does provide some obvious additional functionality not present in hardware tessellation and vice versa, e.g. Bfr provides the following not supported by hardware tessellation patterns for parameterizations other than quads and tris e.g. N-sided preservation of quad facets of quad-based parameterizations while hardware tessellation provides the following not supported by Bfr patterns for so-called fractional tessellation non-integer rates The lack of fractional tessellation in Bfr is something that may be addressed in a future release. Where the functionality of Bfr and hardware tessellation overlap, a few other differences are worth noting indexing of edges and their associated outer tessellation rates uniform tessellation patterns for triangles differ significantly For the indexing of edges and rates, when specifying an outer rate associated with an edge, the array index for rate i is expected to correspond to edge i . Bfr follows the convention established elsewhere in OpenSubdiv of labelingindexing edges 0, 1, etc. between vertex pairs 0,1, 1,2, etc. So outer rate 0 corresponds to the edge between vertices 0,1. In contrast, hardware tessellation associates the rate for the edge between vertices 0,1 as outer rate 1 -- its outer rate 0 is between vertices N-1,0. So an offset of 1 is warranted when comparing the two. Outer edge tessellation rates of 1,3,5,7 applied to a quad with Bfr left and GPU tessellation right. For the uniform tessellation of triangles, its well known that the needs of hardware implementation led designers to factor the patterns for triangles to make use of the same hardware necessary for quads. As a result, many edges are introduced into a simple tessellation of a triangle that are not parallel to one of its three edges. Bfr uses patterns more consistent with those resulting from the subdivision of triangles. Only edges parallel to the edges of the triangle are introduced, which creates more uniform facets both edge lengths and area and reduces their number by one third. This can reduce artifacts that sometimes arise with use of the hardware patterns at lower tessellation rates Uniform tessellation of a triangle with Bfr left and GPU tessellation right. These triangular patterns have been referred to as integer spacing for triangular patches in early work on hardware tessellation. But use of these patterns was generally discarded in favor of techniques that split the triangle into three quads -- allowing the hardware solution for quad tessellation to be reused. More on BfrSurfaceFactory The primary function of BfrSurfaceFactory is to identify and construct a representation of the limit surface for a given face of a mesh. It achieves this by inspecting the topology around the given face and constructing a suitable representation encapsulated in a Surface. The regions around a face can be divided into two categories based on their topology those that are regular and those that are not, i.e. those that are irregular. Recalling the illustration from Irregular versus Irregular Features Patches of regular Surfaces Potential patches of irregular Surfaces The representation of the limit surface for regular regions is trivial -- it is a single parametric patch whose basis is determined by the subdivision scheme e.g. uniform bicubic B-spline for Catmull-Clark. In contrast, the representation of the limit surface for an irregular region cannot be accurately represented so simply. It can be far more complex depending on the features present extra-ordinary vertices, creasing of edges, etc.. It may be as simple as a different kind of parametric patch whose points are derived from those of the mesh, or it may often be a set of patches in a hierarchy resulting from local subdivision. Bfr intentionally hides the details of these representations to allow future improvement. The cost of determining and assembling the representations of irregular Surfaces is therefore often significant. Some of the performance benefits of the SurfaceFactory are achieved by having it cache the complexities of the irregular surfaces that it encounters. In many common use cases, awareness and management of this caching is not necessary as illustrated by the tutorials. But the thread-safe construction of Surfaces is one area where some awareness is required. Other use cases that share the cache between meshes are also worth exploring as they can further reduce potentially significant costs. BfrSurfaceFactoryCache The SurfaceFactoryCache is the class used by SurfaceFactory to cache the topological information that it can reuse for other similarly irregular faces of the mesh. Though it is a publicly accessible class, the SurfaceFactoryCache has little to no public interface other than construction made available to support more advanced cases covered later and in most cases it can be completely ignored. Typically an instance of SurfaceFactory has an internal SurfaceFactoryCache member which is used by that factory for its lifetime. Since that cache member is mutable -- potentially updated when an irregular Surface is created -- it does need to be thread-safe if the SurfaceFactory is to be used in a threaded context. To accommodate this need, SurfaceFactoryCache is defined as a base class with an accompanying class template to allow the trivial declaration of thread-safe subclasses template typename MUTEX_TYPE , typename READ_LOCK_GUARD_TYPE , typename WRITE_LOCK_GUARD_TYPE class SurfaceFactoryCacheThreaded public SurfaceFactoryCache ... For example, a local type for a thread-safe cache using stdshared_mutex from C17 could be simply declared as follows include shared_mutex typedef Bfr SurfaceFactoryCacheThreaded std shared_mutex , std shared_lock std shared_mutex , std unique_lock std shared_mutex ThreadSafeCache Such thread-safe cache types are essential when distributing the work of a single SurfaceFactory across multiple threads. They can be encapsulated in the definitions of subclasses of SurfaceFactory or used to define external cache instances for use with any subclass of SurfaceFactory. Defining a Thread-Safe SurfaceFactory The thread-safety of a SurfaceFactory is purely dependent on the thread-safety of the SurfaceFactoryCache that it uses. With caching disabled, any SurfaceFactory is thread-safe but will be far less efficient in dealing with irregular Surfaces. When a subclass of SurfaceFactory is defined discussed in more detail later, one of its responsibilities is to identify and manage an instance of SurfaceFactoryCache for its internal use. Defining such a subclass is a simple matter of declaring a thread-safe SurfaceFactoryCache type as noted above along with a local member of that type to be used by each instance. Given the widespread use of the FarTopologyRefiner in OpenSubdiv, and the lack of a connected mesh representation in many contexts, a subclass of SurfaceFactory is made available to use a TopologyRefiner as a mesh, i.e. the BfrRefinerSurfaceFactory subclass. Since many OpenSubdiv users may make use of the RefinerSurfaceFactory subclass, and they may have different preferences of threading model, the RefinerSurfaceFactory subclass is similarly defined as a class template to enable threading flexibility. In this case, the template is parameterized by the desired type of SurfaceFactoryCache, which embodies the threading specifications as noted above, i.e. template class CACHE_TYPE SurfaceFactoryCache class RefinerSurfaceFactory public ... ... The default template is the base SurfaceFactoryCache which is not thread-safe, but a simple declaration of a thread-safe cache type is sufficient to declare a similarly thread-safe RefinerSurfaceFactory type include opensubdivbfrsurfaceFactoryCache.h Declare thread-safe cache type see stdshared_mutex example above typedef Bfr SurfaceFactoryCacheThreaded ... ThreadSafeCache Declare thread-safe factory type typedef Bfr RefinerSurfaceFactory ThreadSafeCache ThreadSafeFactory The resulting factory type safely allows the construction of Surfaces and their subsequent evaluation and tessellation to be distributed over multiple threads. Internal versus External SurfaceFactoryCache Typical usage of the SurfaceFactoryCache by the SurfaceFactory is to have the factory create an internal cache member to be used for the lifetime of the factory associated with a mesh. But the data stored in the cache is not in any way dependent on the factory or mesh used to create it. So a cache can potentially be shared by multiple factories. While such sharing is possible -- and the Bfr interfaces intentionally permit it -- any exploration should proceed with caution. Greater public knowledge and control of the cache is ultimately necessary to manage its potentially unbounded memory increase, and support in the public interface is currently limited. A cache stored as a member varialbe and managed exclusively by the factory is said to be internal while one managed exclusively by its client is said to be external. In both cases, the factory deals with retrieving data from or adding data to the cache -- only management of the caches ownership differs, and that ownership is never transferred. A subset of the methods of SurfaceFactoryOptions provide the means of specifying the use of an internal or external cache, or no caching at all Assign an external cache to override the internal Options SetExternalCache SurfaceFactoryCache cache Enable or disable caching default is true Options EnableCaching bool on As noted here, specifying an external cache will override use of a factorys internal cache. Disabling caching takes precedence over both, but is generally not practical and exists mainly to aide debugging. The common use of the internal cache is to create a SurfaceFactory and distribute processing of the Surfaces of its faces over multiple threads, or to construct Surfaces for the mesh for any other purpose while the mesh remains in scope. There is no need to deal explicitly with the SurfaceFactoryCache in these cases. Use cases for an external cache are more varied and explicit, including creating a single external cache to process a sequence of meshes on a single thread cache thread-safety not required creating a separate external cache on each thread to process a set of meshes distributed over multiple threads cache thread-safety not required creating a single external cache for multiple meshes distributed over multiple threads cache thread-safety required, and beware of unbounded memory growth here Future extensions to the public interface of SurfaceFactoryCache may be made to support common use cases as their common needs are made clearer. Customizing a BfrSurfaceFactory One of the goals of Bfr is to provide a lightweight interface for the evaluation of Surfaces from any connected mesh representation. In order to do so, the factory needs to gather topological information from that mesh representation. That information is provide to the factory through inheritance a subclass of SurfaceFactory is defined that fulfills all requirements of the factory. It must be made clear that a subclass can only be created from a connected mesh representation, i.e. a representation that includes connectivity or adjacency relationships between its components vertices, faces and edges. Classes for simple containers of mesh topology used for external formats e.g. USD, Alembic, etc. are generally not connected . Many applications construct a connected mesh representation for internal use when loading such mesh data -- using a variety of techniques including half-edges, winged-edges or table-based relationships. There are many choices here that offer a variety of trade-offs depending on usage e.g. fixed vs dynamic topology and so no best solution. Once constructed and available within an application, Bfr strives to take advantage of that representation. As a minimum requirement for supporting a subclass of SurfaceFactory, a connected mesh representation must be able to efficiently identify the incident faces of any given vertex. As noted earlier, when no such representation is available, users can construct a FarTopologyRefiner for their connected mesh and use BfrRefinerSurfaceFactory. There are three requirements of a subclass of SurfaceFactory fulfill the interface required to adapt the connected mesh to the factory provide an internal cache for the factory of the preferred type extend the existing SurfaceFactory interface for the connected mesh type The first of these is the most significant and is the focus here. The second was mentioned previously with the SurfaceFactoryCache and is trivial. The last should also be trivial and is generally optional at minimum the subclass will need a constructor to create an instance of the factory from a given mesh, but anything more is not strictly essential. It is important to note that anyone attempting to write such a subclass must have an intimate understanding of the topological capabilities and limitations of the mesh representation involved. The SurfaceFactory is topologically robust in that it will support meshes with a wide range of degenerate or non-manifold features, but in order to process topology efficiently, a subclass needs to indicate when and where those degeneracies may occur. A simplified implementation of the BfrRefinerSurfaceFactory is provided in the tutorials for illustration purposes. The BfrSurfaceFactoryMeshAdapter Interface The SurfaceFactoryMeshAdapter class defines the interface used to satisfy the topological requirements of the SurfaceFactory. An implementation for a particular mesh class provides the base factory with everything needed to identify the limit surface of a given face from its surrounding topology. The SurfaceFactory actually inherits the SurfaceFactoryMeshAdapter interface but does not implement it -- deferring that to its subclasses -- since separate subclasses of SurfaceFactoryMeshAdapter serve no other purpose. The limit surface for a face is fully defined by the complete set of incident vertices, faces and edges surrounding the face. But it is difficult to accurately and efficiently assemble and represent all of that required information in a single class or query for all possible cases. So the mesh adapter interface provides a suite of methods to allow the factory to gather only what it needs for the Surface required -- which may differ considerably according to whether the Surface is for vertex or face-varying data, linear or non-linear, etc. The virtual methods required can be organized into small groups devoted to particular aspects of construction. A description of the methods and purposes for each group follows, with more details and exact signatures available in the accompanying Doxygen for the SurfaceFactoryMeshAdapter class. Basic Properties of a Face A small set of simple methods indicate whether the SurfaceFactory needs to create a Surface for a face, and if so, how virtual bool isFaceHole Index faceIndex const 0 virtual int getFaceSize Index faceIndex const 0 These are trivial and self-explanatory. Identifying Indices for an Entire Face If the Surface requested turns out to be linearly interpolated e.g. for varying or linear face-varying data indices for the control point data are all assigned to the face and can be trivially identified virtual int getFaceVertexIndices Index faceIndex , Index vertexIndices const 0 virtual int getFaceFVarValueIndices Index faceIndex , FVarID faceVaryingID , Index faceVaryingIndices const 0 Since multiple sets of face-varying data with different topology may be assigned to the mesh, an identifier needs to be specified both in the public interface when requesting a Surface and here when the factory assembles it. How a face-varying identifier is interpreted is completely determined by the subclass through the implementation of the methods that require it. Specifying the Neighborhood Around a Vertex When the Surface requested is not linear, the entire neighborhood around the face must be determined. This is achieved by specifying the neighborhoods around each of the vertices of the face, which the factory then assembles. For the neighborhood of each face-vertex, the factory obtains a complete specification in a simple VertexDescriptor class. An instance of VertexDescriptor is provided and populated with the following method virtual int populateFaceVertexDescriptor Index faceIndex , int faceVertex , VertexDescriptor vertexDescriptor const 0 Within this method, the given VertexDescriptor instance is initialized using a small suite of VertexDescriptor methods that specify the following information about the vertex and its neighborhood whether the neighborhood is manifold ordered counter-clockwise whether the vertex is on a boundary the sizes of all or each incident face the sharpness of the vertex the sharpness of edges of incident faces These methods are specified between Initialize and Finalize methods, so an interior vertex of valence 4 with three incident quads and one incident triangle might be specified as follows int vertexValence 4 vertexDescriptor . Initialize vertexValence vertexDescriptor . SetManifold true vertexDescriptor . SetBoundary false vertexDescriptor . SetIncidentFaceSize 0 , 4 vertexDescriptor . SetIncidentFaceSize 1 , 4 vertexDescriptor . SetIncidentFaceSize 2 , 3 vertexDescriptor . SetIncidentFaceSize 3 , 4 vertexDescriptor . Finalize Specifying the vertex neighborhood as manifold is critical to allowing the factory to inspect the neighborhood efficiently. A manifold vertex has its incident faces and edges ordered in a counter-clockwise orientation and is free of degeneracies. If it is not clear that a vertex is manifold, it should not be set as such or the factorys inspection of associated data will not be correct. Identifying Indices Around a Vertex When the Surface requested is not linear, the indices of control point data for the entire neighborhood of the face are ultimately required, and that entire set is similarly determined by identifying the indices for each of the neighborhoods of the face-vertices virtual int getFaceVertexIncidentFaceVertexIndices Index faceIndex , int faceVertex , Index vertexIndices const 0 virtual int getFaceVertexIncidentFaceFVarValueIndices Index faceIndex , int faceVertex , FVarID faceVaryingID , Index faceVaryingIndices const 0 As was the case with the methods retrieving indices for the entire face, one exists for identifying indices vertex data while another exists to identify indices for a specified set of face-varying data. Customizing the Subclass Interface Once the topological requirements of a subclass have been satisfied for its mesh representation, minor customizations of the inherited interface of SurfaceFactory may be useful. Consider a class called Mesh and its associated subclass of SurfaceFactory called MeshSurfaceFactory. At minimum, a constructor of MeshSurfaceFactory is necessary to construct an instance for a particular instance of mesh. This is typically achieved as follows MeshSurfaceFactory Mesh const mesh , Options const options In addition to the Mesh instance, such a constructor passes a set of Options i.e. SurfaceFactoryOptions to the base SurfaceFactory. Any additional arguments are possible here, e.g. perhaps only a single face-varying UV set is supported, and that might be specified by identifying it on construction. Given that mesh representations often have their own associated classes that internally contain the actual data, it may be useful to provide a few other conveniences to simplify working with a Mesh. For example, if mesh data is stored in a class called MeshPrimvar, a method to construct a Surface from a given MeshPrimvar may be useful, e.g. bool InitPrimvarSurface int faceIndex , MeshPrimvar const meshPrimvar , Surface float surface which would then determine the nature of the MeshPrimvar data interpolated as vertex, varying or face-varying and act accordingly. It may also be worth simplifying the template complexity here if only one precision is ever required. Generated on 2024-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ + "tags": "", │ │ │ │ │ + "loc": "bfr_overview.html" │ │ │ │ │ + }, { │ │ │ │ │ "title": "API Overview", │ │ │ │ │ "text": "API Overview API Overview 3.6.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE API Layers Using the Right Tools Use case 1 Simple refinement Use case 2 GL adaptive tessellation drawing of animating mesh Tutorials and Examples API Layers OpenSubdiv is structured as a set of layered libraries. This structure facilitates operation on a variety of computing resources, and allows developers to only opt-in to the layers and feature sets that they require. From a top-down point of view, OpenSubdiv is comprised of several layers, some public, and some private. Layers list Sdc Subdivision Core Sdc Overview The lowest level layer, implements the core subdivision details to facilitate the generation of consistent results. Most cases will only require the use of simple public types and constants from Sdc. Vtr Vectorized Topological Representation Vtr Overview A suite of classes to provide an intermediate representation of topology that supports efficient refinement. Vtr is intended for internal use only. Far Feature Adaptive Representation Far Overview The central interface that processes client-supplied geometry and turns it into a serialized data representation ready for parallel processing in Osd . Far also provides a fully-featured single-threaded implementation of subdivision interpolation algorithms. Bfr Bace Face Representation Bfr Overview A suite of classes to provide parameterization, evaluation and tessellation on the CPU. Bfr is more flexible and more scalable than Osd but potentially less efficient. Osd OpenSubdiv cross platform Osd Overview A suite of classes to provide parallel subdivision kernels and drawing utilities on a variety of platforms such as TBB, CUDA, OpenCL, GLSL and DirectX. Client mesh data enters the API through the Far layer. Typically, results will be collected from the Osd layer. However, it is possible to use functionality from Far without introducing any dependency on Osd. Although there are several entry-points to provide topology and primitive variable data to OpenSubdiv, eventually everything must pass through the private Vtr and Sdc representations for topological analysis. Using the Right Tools OpenSubdivs tiered interface offers a lot flexibility to make your application both fast and robust. Because navigating through the large collection of classes and features can be challenging, here are use cases that should help sketch the broad lines of going about using subdivisions in your application. General client application requirements Surface Limit For some applications, a polygonal approximation of the smooth surface is enough. Others require C 2 continuous differentiable bi-cubic patches ex deformable displacement mapping, smooth normals and semi-sharp creases... Deforming Surface Applications such as off-line image renderers often process a single frame at a time. Others, such as interactive games need to evaluate deforming character surface every frame. Because we can amortize many computations if the topology of the mesh does not change, OpenSubdiv provides stencil tables in order to leverage subdivision refinement into a pre-computation step. Multi-threading OpenSubdiv also provides dedicated interfaces to leverage parallelism on a wide variety of platforms and API standards, including both CPUs and GPUs. GPU Draw If the application requires interactive drawing on screen, OpenSubdiv provides several back-end implementations, including D3D11 and OpenGL. These back-ends provide full support for programmable shading. Use case 1 Simple refinement The following example shows the most simple case to get your mesh refined uniformly. Define a class for the primvar you want to refine. Its required to have Clear and AddWithWeight functions. struct Vertex void Clear x y z 0 void AddWithWeight Vertex const src , float weight x weight src . x y weight src . y z weight src . z float x , y , z 2. Instantiate a FarTopologyRefiner from the FarTopologyDescriptor . Far TopologyDescriptor desc desc . numVertices the number of vertices desc . numFaces the number of faces desc . numVertsPerFace array of the number of verts per face desc . vertIndicesPerFace array of vert indices Far TopologyRefiner refiner Far TopologyRefinerFactory Descriptor Create desc Call RefineUniform to refine the topology up to maxlevel. refiner - RefineUniform Far TopologyRefiner UniformOptions maxlevel 4. Interpolate vertex primvar data at level using FarPrimvarRefiner Far PrimvarRefiner primvarRefiner refiner Vertex const src coarse vertices Vertex dst refined vertices primvarRefiner . Interpolate level , src , dst The topology at the refined level can be obtained from FarTopologyLevel Far TopologyLevel const refLastLevel refiner - GetLevel maxlevel int nverts refLastLevel . GetNumVertices int nfaces refLastLevel . GetNumFaces for int face 0 face nfaces face Far ConstIndexArray fverts refLastLevel . GetFaceVertices face do something with dst and fverts Done See Far tutorial 1.1 for the complete code example. Use case 2 GL adaptive tessellation drawing of animating mesh The next example is showing how to draw adaptive tessellated patches in GL using OpenSubdiv. The osd layer helps you to interact with GL and other device specific APIs. Also for an efficient refinement of animating mesh on a static topology, we create a stencil table to refine the positions changing over time. The following example code uses an OsdGLMesh utility class which composites a stencil table, patch table, vertex buffer and evaluator in osd layer. You can also use those classes independently. 1. Instantiate a FarTopologyRefiner from the FarTopologyDescriptor , same as usecase 1. Setup OsdMesh. In this example we use b-spline endcap. int numVertexElements 3 x, y, z Osd MeshBitset bits bits . set Osd MeshAdaptive , true set adaptive bits . set Osd MeshEndCapBSplineBasis , true use b-spline basis patch for endcap. Osd GLMeshInterface mesh new Osd Mesh Osd CpuGLVertexBuffer , Far StencilTable , Osd CpuEvaluator , Osd GLPatchTable refiner , numVertexElements , 0 , level , bits 3. Update coarse vertices and refine OsdMeshRefine calls OsdCpuEvaluatorEvalStencils mesh - UpdateVertexBuffer vertex 0 , 0 , nverts mesh - Refine Bind index buffer, PatchParamBuffer and vertex buffer index buffer glBindBuffer GL_ELEMENT_ARRAY_BUFFER , mesh - GetPatchTable - GetPatchIndexBuffer vertex buffer glBindBuffer GL_ARRAY_BUFFER , mesh - BindVertexBuffer glEnableVertexAttribArray 0 glVertexAttribPointer 0 , numVertexElements , GL_FLOAT , GL_FALSE , numVertexElements sizeof float , 0 patch param buffer glActiveTexture GL_TEXTURE0 glBindTexture GL_TEXTURE_BUFFER , mesh - GetPatchTable - GetPatchParamTextureBuffer Draw. Since we use b-spline endcaps in this example, there is only one PatchArray in the patch table. You may need to iterate patch arrays as you use other type of endcap. To configure GLSL program for each patch type, see osd shader interface for more details. Osd PatchArray const patch mesh - GetPatchTable - GetPatchArrays 0 Far PatchDescriptor desc patch . GetDescriptor int numVertsPerPatch desc . GetNumControlVertices 16 for B-spline patches glUseProgram BSplinePatchProgram glPatchParameteri GL_PATCH_VERTICES , numVertsPerPatch glDrawElements GL_PATCHES , patch . GetNumPatches numVertsPerPatch , GL_UNSIGNED_INT , 0 As the mesh animates, repeat from step 3 to update positions, refine, and draw. See glViewer and other examples for more complete usage. Tutorials and Examples For more use cases, please see Tutorials and Examples Generated on 2024-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use", │ │ │ │ │ "tags": "", │ │ │ │ │ "loc": "api_overview.html" │ │ │ │ │ }, { │ │ │ │ │ "title": "Additional Resources", │ │ │ │ │ "text": "Additional Resources Additional Resources 3.6.0 User Docs API Docs Release Notes Forum Github OSD_ARTICLE_TITLE Links Videos Feature Adaptive GPU Rendering of Catmull-Clark Subdivision Surfaces 2012 Open Subdivision Technology Review 2012 Autodesk User Group At Anaheim 2013 Why Model with Subdivisions 2013 Meet the Experts The OpenSubdiv Project 2013 Links OpenSubdiv Github Repository OpenSubdiv with Mudbox and Maya Videos Feature Adaptive GPU Rendering of Catmull-Clark Subdivision Surfaces 2012 Open Subdivision Technology Review 2012 Autodesk User Group At Anaheim 2013 Why Model with Subdivisions 2013 Meet the Experts The OpenSubdiv Project 2013 Join special guests, Bill Polson, Dirk Van Gelder, Manuel Kraemer, Takahito Tejima, David G. Yu and Dale Ruffolo, from Pixar Animation Studios GPU team, as they show how real time display of subdivision surfaces helps artists be more productive, and how this code is open source and engineered for ease of integration. Generated on 2024-06-17 1857 UTC. User Docs API Docs Release Notes Forum TM 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. Terms of Use",