5#ifndef OPENSUBDIV_GL_COMPUTE_EVALUATOR_H_
6#define OPENSUBDIV_GL_COMPUTE_EVALUATOR_H_
8#include <opensubdiv/osd/bufferDescriptor.h>
9#include <opensubdiv/osd/opengl.h>
10#include <opensubdiv/osd/types.h>
11#include <opensubdiv/version.h>
14namespace OPENSUBDIV_VERSION {
16class LimitStencilTable;
33 void *deviceContext =
NULL)
39 void *deviceContext =
NULL)
110 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
111 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
112 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
113 void *deviceContext =
NULL)
119 OpenSubdiv::Osd::BufferDescriptor(),
120 OpenSubdiv::Osd::BufferDescriptor(),
121 OpenSubdiv::Osd::BufferDescriptor(),
126 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
127 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
128 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
129 OpenSubdiv::Osd::BufferDescriptor
const &duuDesc,
130 OpenSubdiv::Osd::BufferDescriptor
const &duvDesc,
131 OpenSubdiv::Osd::BufferDescriptor
const &dvvDesc,
132 void *deviceContext =
NULL)
136 if (instance->Compile(srcDesc, dstDesc, duDesc, dvDesc, duuDesc, duvDesc, dvvDesc)) {
182 template<
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
184 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
185 DST_BUFFER *dstBuffer,
186 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
187 STENCIL_TABLE
const *stencilTable,
189 void *deviceContext =
NULL)
193 return instance->EvalStencils(srcBuffer, srcDesc, dstBuffer, dstDesc, stencilTable);
198 instance =
Create(srcDesc,
200 OpenSubdiv::Osd::BufferDescriptor(),
201 OpenSubdiv::Osd::BufferDescriptor());
203 bool r = instance->EvalStencils(srcBuffer, srcDesc, dstBuffer, dstDesc, stencilTable);
250 template<
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
252 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
253 DST_BUFFER *dstBuffer,
254 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
255 DST_BUFFER *duBuffer,
256 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
257 DST_BUFFER *dvBuffer,
258 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
259 STENCIL_TABLE
const *stencilTable,
261 void *deviceContext =
NULL)
265 return instance->EvalStencils(srcBuffer,
278 instance =
Create(srcDesc, dstDesc, duDesc, dvDesc);
280 bool r = instance->EvalStencils(srcBuffer,
353 template<
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
355 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
356 DST_BUFFER *dstBuffer,
357 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
358 DST_BUFFER *duBuffer,
359 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
360 DST_BUFFER *dvBuffer,
361 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
362 DST_BUFFER *duuBuffer,
363 OpenSubdiv::Osd::BufferDescriptor
const &duuDesc,
364 DST_BUFFER *duvBuffer,
365 OpenSubdiv::Osd::BufferDescriptor
const &duvDesc,
366 DST_BUFFER *dvvBuffer,
367 OpenSubdiv::Osd::BufferDescriptor
const &dvvDesc,
368 STENCIL_TABLE
const *stencilTable,
370 void *deviceContext =
NULL)
374 return instance->EvalStencils(srcBuffer,
393 instance =
Create(srcDesc, dstDesc, duDesc, dvDesc, duuDesc, duvDesc, dvvDesc);
395 bool r = instance->EvalStencils(srcBuffer,
434 template<
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
436 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
437 DST_BUFFER *dstBuffer,
438 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
439 STENCIL_TABLE
const *stencilTable)
const
443 dstBuffer->BindVBO(),
446 OpenSubdiv::Osd::BufferDescriptor(),
448 OpenSubdiv::Osd::BufferDescriptor(),
449 stencilTable->GetSizesBuffer(),
450 stencilTable->GetOffsetsBuffer(),
451 stencilTable->GetIndicesBuffer(),
452 stencilTable->GetWeightsBuffer(),
456 stencilTable->GetNumStencils());
488 template<
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
490 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
491 DST_BUFFER *dstBuffer,
492 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
493 DST_BUFFER *duBuffer,
494 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
495 DST_BUFFER *dvBuffer,
496 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
497 STENCIL_TABLE
const *stencilTable)
const
501 dstBuffer->BindVBO(),
507 stencilTable->GetSizesBuffer(),
508 stencilTable->GetOffsetsBuffer(),
509 stencilTable->GetIndicesBuffer(),
510 stencilTable->GetWeightsBuffer(),
511 stencilTable->GetDuWeightsBuffer(),
512 stencilTable->GetDvWeightsBuffer(),
514 stencilTable->GetNumStencils());
564 template<
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
566 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
567 DST_BUFFER *dstBuffer,
568 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
569 DST_BUFFER *duBuffer,
570 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
571 DST_BUFFER *dvBuffer,
572 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
573 DST_BUFFER *duuBuffer,
574 OpenSubdiv::Osd::BufferDescriptor
const &duuDesc,
575 DST_BUFFER *duvBuffer,
576 OpenSubdiv::Osd::BufferDescriptor
const &duvDesc,
577 DST_BUFFER *dvvBuffer,
578 OpenSubdiv::Osd::BufferDescriptor
const &dvvDesc,
579 STENCIL_TABLE
const *stencilTable)
const
583 dstBuffer->BindVBO(),
589 duuBuffer->BindVBO(),
591 duvBuffer->BindVBO(),
593 dvvBuffer->BindVBO(),
595 stencilTable->GetSizesBuffer(),
596 stencilTable->GetOffsetsBuffer(),
597 stencilTable->GetIndicesBuffer(),
598 stencilTable->GetWeightsBuffer(),
599 stencilTable->GetDuWeightsBuffer(),
600 stencilTable->GetDvWeightsBuffer(),
601 stencilTable->GetDuuWeightsBuffer(),
602 stencilTable->GetDuvWeightsBuffer(),
603 stencilTable->GetDvvWeightsBuffer(),
605 stencilTable->GetNumStencils());
644 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
646 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
648 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
650 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
652 GLuint offsetsBuffer,
653 GLuint indicesBuffer,
654 GLuint weightsBuffer,
655 GLuint duWeightsBuffer,
656 GLuint dvWeightsBuffer,
714 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
716 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
718 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
720 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
722 OpenSubdiv::Osd::BufferDescriptor
const &duuDesc,
724 OpenSubdiv::Osd::BufferDescriptor
const &duvDesc,
726 OpenSubdiv::Osd::BufferDescriptor
const &dvvDesc,
728 GLuint offsetsBuffer,
729 GLuint indicesBuffer,
730 GLuint weightsBuffer,
731 GLuint duWeightsBuffer,
732 GLuint dvWeightsBuffer,
733 GLuint duuWeightsBuffer,
734 GLuint duvWeightsBuffer,
735 GLuint dvvWeightsBuffer,
777 template<
typename SRC_BUFFER,
779 typename PATCHCOORD_BUFFER,
780 typename PATCH_TABLE>
782 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
783 DST_BUFFER *dstBuffer,
784 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
786 PATCHCOORD_BUFFER *patchCoords,
787 PATCH_TABLE *patchTable,
789 void *deviceContext =
NULL)
793 return instance->EvalPatches(
794 srcBuffer, srcDesc, dstBuffer, dstDesc, numPatchCoords, patchCoords, patchTable);
799 instance =
Create(srcDesc,
801 OpenSubdiv::Osd::BufferDescriptor(),
802 OpenSubdiv::Osd::BufferDescriptor());
804 bool r = instance->EvalPatches(
805 srcBuffer, srcDesc, dstBuffer, dstDesc, numPatchCoords, patchCoords, patchTable);
857 template<
typename SRC_BUFFER,
859 typename PATCHCOORD_BUFFER,
860 typename PATCH_TABLE>
862 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
863 DST_BUFFER *dstBuffer,
864 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
865 DST_BUFFER *duBuffer,
866 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
867 DST_BUFFER *dvBuffer,
868 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
870 PATCHCOORD_BUFFER *patchCoords,
871 PATCH_TABLE *patchTable,
873 void *deviceContext =
NULL)
877 return instance->EvalPatches(srcBuffer,
892 instance =
Create(srcDesc, dstDesc, duDesc, dvDesc);
894 bool r = instance->EvalPatches(srcBuffer,
974 template<
typename SRC_BUFFER,
976 typename PATCHCOORD_BUFFER,
977 typename PATCH_TABLE>
979 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
980 DST_BUFFER *dstBuffer,
981 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
982 DST_BUFFER *duBuffer,
983 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
984 DST_BUFFER *dvBuffer,
985 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
986 DST_BUFFER *duuBuffer,
987 OpenSubdiv::Osd::BufferDescriptor
const &duuDesc,
988 DST_BUFFER *duvBuffer,
989 OpenSubdiv::Osd::BufferDescriptor
const &duvDesc,
990 DST_BUFFER *dvvBuffer,
991 OpenSubdiv::Osd::BufferDescriptor
const &dvvDesc,
993 PATCHCOORD_BUFFER *patchCoords,
994 PATCH_TABLE *patchTable,
996 void *deviceContext =
NULL)
1000 return instance->EvalPatches(srcBuffer,
1020 (void)deviceContext;
1021 instance =
Create(srcDesc, dstDesc, duDesc, dvDesc, duuDesc, duvDesc, dvvDesc);
1023 bool r = instance->EvalPatches(srcBuffer,
1071 template<
typename SRC_BUFFER,
1072 typename DST_BUFFER,
1073 typename PATCHCOORD_BUFFER,
1074 typename PATCH_TABLE>
1076 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
1077 DST_BUFFER *dstBuffer,
1078 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
1080 PATCHCOORD_BUFFER *patchCoords,
1081 PATCH_TABLE *patchTable)
const
1086 dstBuffer->BindVBO(),
1089 OpenSubdiv::Osd::BufferDescriptor(),
1091 OpenSubdiv::Osd::BufferDescriptor(),
1093 patchCoords->BindVBO(),
1094 patchTable->GetPatchArrays(),
1095 patchTable->GetPatchIndexBuffer(),
1096 patchTable->GetPatchParamBuffer());
1133 template<
typename SRC_BUFFER,
1134 typename DST_BUFFER,
1135 typename PATCHCOORD_BUFFER,
1136 typename PATCH_TABLE>
1138 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
1139 DST_BUFFER *dstBuffer,
1140 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
1141 DST_BUFFER *duBuffer,
1142 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
1143 DST_BUFFER *dvBuffer,
1144 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
1146 PATCHCOORD_BUFFER *patchCoords,
1147 PATCH_TABLE *patchTable)
const
1152 dstBuffer->BindVBO(),
1154 duBuffer->BindVBO(),
1156 dvBuffer->BindVBO(),
1159 patchCoords->BindVBO(),
1160 patchTable->GetPatchArrays(),
1161 patchTable->GetPatchIndexBuffer(),
1162 patchTable->GetPatchParamBuffer());
1217 template<
typename SRC_BUFFER,
1218 typename DST_BUFFER,
1219 typename PATCHCOORD_BUFFER,
1220 typename PATCH_TABLE>
1222 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
1223 DST_BUFFER *dstBuffer,
1224 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
1225 DST_BUFFER *duBuffer,
1226 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
1227 DST_BUFFER *dvBuffer,
1228 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
1229 DST_BUFFER *duuBuffer,
1230 OpenSubdiv::Osd::BufferDescriptor
const &duuDesc,
1231 DST_BUFFER *duvBuffer,
1232 OpenSubdiv::Osd::BufferDescriptor
const &duvDesc,
1233 DST_BUFFER *dvvBuffer,
1234 OpenSubdiv::Osd::BufferDescriptor
const &dvvDesc,
1236 PATCHCOORD_BUFFER *patchCoords,
1237 PATCH_TABLE *patchTable)
const
1242 dstBuffer->BindVBO(),
1244 duBuffer->BindVBO(),
1246 dvBuffer->BindVBO(),
1248 duuBuffer->BindVBO(),
1250 duvBuffer->BindVBO(),
1252 dvvBuffer->BindVBO(),
1255 patchCoords->BindVBO(),
1256 patchTable->GetPatchArrays(),
1257 patchTable->GetPatchIndexBuffer(),
1258 patchTable->GetPatchParamBuffer());
1262 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
1264 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
1266 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
1268 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
1270 GLuint patchCoordsBuffer,
1271 const OpenSubdiv::Osd::PatchArrayVector &patchArrays,
1272 GLuint patchIndexBuffer,
1273 GLuint patchParamsBuffer)
const;
1276 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
1278 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
1280 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
1282 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
1284 OpenSubdiv::Osd::BufferDescriptor
const &duuDesc,
1286 OpenSubdiv::Osd::BufferDescriptor
const &duvDesc,
1288 OpenSubdiv::Osd::BufferDescriptor
const &dvvDesc,
1290 GLuint patchCoordsBuffer,
1291 const OpenSubdiv::Osd::PatchArrayVector &patchArrays,
1292 GLuint patchIndexBuffer,
1293 GLuint patchParamsBuffer)
const;
1327 template<
typename SRC_BUFFER,
1328 typename DST_BUFFER,
1329 typename PATCHCOORD_BUFFER,
1330 typename PATCH_TABLE>
1332 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
1333 DST_BUFFER *dstBuffer,
1334 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
1336 PATCHCOORD_BUFFER *patchCoords,
1337 PATCH_TABLE *patchTable,
1339 void *deviceContext =
NULL)
1343 return instance->EvalPatchesVarying(
1344 srcBuffer, srcDesc, dstBuffer, dstDesc, numPatchCoords, patchCoords, patchTable);
1348 (void)deviceContext;
1349 instance =
Create(srcDesc,
1351 OpenSubdiv::Osd::BufferDescriptor(),
1352 OpenSubdiv::Osd::BufferDescriptor());
1354 bool r = instance->EvalPatchesVarying(
1355 srcBuffer, srcDesc, dstBuffer, dstDesc, numPatchCoords, patchCoords, patchTable);
1387 template<
typename SRC_BUFFER,
1388 typename DST_BUFFER,
1389 typename PATCHCOORD_BUFFER,
1390 typename PATCH_TABLE>
1392 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
1393 DST_BUFFER *dstBuffer,
1394 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
1396 PATCHCOORD_BUFFER *patchCoords,
1397 PATCH_TABLE *patchTable)
const
1402 dstBuffer->BindVBO(),
1405 OpenSubdiv::Osd::BufferDescriptor(),
1407 OpenSubdiv::Osd::BufferDescriptor(),
1409 patchCoords->BindVBO(),
1410 patchTable->GetVaryingPatchArrays(),
1411 patchTable->GetVaryingPatchIndexBuffer(),
1412 patchTable->GetPatchParamBuffer());
1459 template<
typename SRC_BUFFER,
1460 typename DST_BUFFER,
1461 typename PATCHCOORD_BUFFER,
1462 typename PATCH_TABLE>
1464 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
1465 DST_BUFFER *dstBuffer,
1466 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
1467 DST_BUFFER *duBuffer,
1468 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
1469 DST_BUFFER *dvBuffer,
1470 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
1472 PATCHCOORD_BUFFER *patchCoords,
1473 PATCH_TABLE *patchTable,
1475 void *deviceContext =
NULL)
1479 return instance->EvalPatchesVarying(srcBuffer,
1493 (void)deviceContext;
1494 instance =
Create(srcDesc, dstDesc, duDesc, dvDesc);
1496 bool r = instance->EvalPatchesVarying(srcBuffer,
1550 template<
typename SRC_BUFFER,
1551 typename DST_BUFFER,
1552 typename PATCHCOORD_BUFFER,
1553 typename PATCH_TABLE>
1555 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
1556 DST_BUFFER *dstBuffer,
1557 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
1558 DST_BUFFER *duBuffer,
1559 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
1560 DST_BUFFER *dvBuffer,
1561 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
1563 PATCHCOORD_BUFFER *patchCoords,
1564 PATCH_TABLE *patchTable)
const
1569 dstBuffer->BindVBO(),
1571 duBuffer->BindVBO(),
1573 dvBuffer->BindVBO(),
1576 patchCoords->BindVBO(),
1577 patchTable->GetVaryingPatchArrays(),
1578 patchTable->GetVaryingPatchIndexBuffer(),
1579 patchTable->GetPatchParamBuffer());
1644 template<
typename SRC_BUFFER,
1645 typename DST_BUFFER,
1646 typename PATCHCOORD_BUFFER,
1647 typename PATCH_TABLE>
1649 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
1650 DST_BUFFER *dstBuffer,
1651 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
1652 DST_BUFFER *duBuffer,
1653 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
1654 DST_BUFFER *dvBuffer,
1655 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
1656 DST_BUFFER *duuBuffer,
1657 OpenSubdiv::Osd::BufferDescriptor
const &duuDesc,
1658 DST_BUFFER *duvBuffer,
1659 OpenSubdiv::Osd::BufferDescriptor
const &duvDesc,
1660 DST_BUFFER *dvvBuffer,
1661 OpenSubdiv::Osd::BufferDescriptor
const &dvvDesc,
1663 PATCHCOORD_BUFFER *patchCoords,
1664 PATCH_TABLE *patchTable,
1666 void *deviceContext =
NULL)
1670 return instance->EvalPatchesVarying(srcBuffer,
1690 (void)deviceContext;
1691 instance =
Create(srcDesc, dstDesc, duDesc, dvDesc, duuDesc, duvDesc, dvvDesc);
1693 bool r = instance->EvalPatchesVarying(srcBuffer,
1771 template<
typename SRC_BUFFER,
1772 typename DST_BUFFER,
1773 typename PATCHCOORD_BUFFER,
1774 typename PATCH_TABLE>
1776 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
1777 DST_BUFFER *dstBuffer,
1778 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
1779 DST_BUFFER *duBuffer,
1780 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
1781 DST_BUFFER *dvBuffer,
1782 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
1783 DST_BUFFER *duuBuffer,
1784 OpenSubdiv::Osd::BufferDescriptor
const &duuDesc,
1785 DST_BUFFER *duvBuffer,
1786 OpenSubdiv::Osd::BufferDescriptor
const &duvDesc,
1787 DST_BUFFER *dvvBuffer,
1788 OpenSubdiv::Osd::BufferDescriptor
const &dvvDesc,
1790 PATCHCOORD_BUFFER *patchCoords,
1791 PATCH_TABLE *patchTable)
const
1796 dstBuffer->BindVBO(),
1798 duBuffer->BindVBO(),
1800 dvBuffer->BindVBO(),
1802 duuBuffer->BindVBO(),
1804 duvBuffer->BindVBO(),
1806 dvvBuffer->BindVBO(),
1809 patchCoords->BindVBO(),
1810 patchTable->GetVaryingPatchArrays(),
1811 patchTable->GetVaryingPatchIndexBuffer(),
1812 patchTable->GetPatchParamBuffer());
1849 template<
typename SRC_BUFFER,
1850 typename DST_BUFFER,
1851 typename PATCHCOORD_BUFFER,
1852 typename PATCH_TABLE>
1854 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
1855 DST_BUFFER *dstBuffer,
1856 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
1858 PATCHCOORD_BUFFER *patchCoords,
1859 PATCH_TABLE *patchTable,
1862 void *deviceContext =
NULL)
1866 return instance->EvalPatchesFaceVarying(srcBuffer,
1877 (void)deviceContext;
1878 instance =
Create(srcDesc,
1880 OpenSubdiv::Osd::BufferDescriptor(),
1881 OpenSubdiv::Osd::BufferDescriptor());
1883 bool r = instance->EvalPatchesFaceVarying(srcBuffer,
1924 template<
typename SRC_BUFFER,
1925 typename DST_BUFFER,
1926 typename PATCHCOORD_BUFFER,
1927 typename PATCH_TABLE>
1929 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
1930 DST_BUFFER *dstBuffer,
1931 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
1933 PATCHCOORD_BUFFER *patchCoords,
1934 PATCH_TABLE *patchTable,
1935 int fvarChannel = 0)
const
1940 dstBuffer->BindVBO(),
1943 OpenSubdiv::Osd::BufferDescriptor(),
1945 OpenSubdiv::Osd::BufferDescriptor(),
1947 patchCoords->BindVBO(),
1948 patchTable->GetFVarPatchArrays(fvarChannel),
1949 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
1950 patchTable->GetFVarPatchParamBuffer(fvarChannel));
1999 template<
typename SRC_BUFFER,
2000 typename DST_BUFFER,
2001 typename PATCHCOORD_BUFFER,
2002 typename PATCH_TABLE>
2004 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
2005 DST_BUFFER *dstBuffer,
2006 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
2007 DST_BUFFER *duBuffer,
2008 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
2009 DST_BUFFER *dvBuffer,
2010 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
2012 PATCHCOORD_BUFFER *patchCoords,
2013 PATCH_TABLE *patchTable,
2016 void *deviceContext =
NULL)
2020 return instance->EvalPatchesFaceVarying(srcBuffer,
2035 (void)deviceContext;
2036 instance =
Create(srcDesc, dstDesc, duDesc, dvDesc);
2038 bool r = instance->EvalPatchesFaceVarying(srcBuffer,
2095 template<
typename SRC_BUFFER,
2096 typename DST_BUFFER,
2097 typename PATCHCOORD_BUFFER,
2098 typename PATCH_TABLE>
2100 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
2101 DST_BUFFER *dstBuffer,
2102 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
2103 DST_BUFFER *duBuffer,
2104 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
2105 DST_BUFFER *dvBuffer,
2106 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
2108 PATCHCOORD_BUFFER *patchCoords,
2109 PATCH_TABLE *patchTable,
2110 int fvarChannel = 0)
const
2115 dstBuffer->BindVBO(),
2117 duBuffer->BindVBO(),
2119 dvBuffer->BindVBO(),
2122 patchCoords->BindVBO(),
2123 patchTable->GetFVarPatchArrays(fvarChannel),
2124 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
2125 patchTable->GetFVarPatchParamBuffer(fvarChannel));
2192 template<
typename SRC_BUFFER,
2193 typename DST_BUFFER,
2194 typename PATCHCOORD_BUFFER,
2195 typename PATCH_TABLE>
2197 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
2198 DST_BUFFER *dstBuffer,
2199 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
2200 DST_BUFFER *duBuffer,
2201 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
2202 DST_BUFFER *dvBuffer,
2203 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
2204 DST_BUFFER *duuBuffer,
2205 OpenSubdiv::Osd::BufferDescriptor
const &duuDesc,
2206 DST_BUFFER *duvBuffer,
2207 OpenSubdiv::Osd::BufferDescriptor
const &duvDesc,
2208 DST_BUFFER *dvvBuffer,
2209 OpenSubdiv::Osd::BufferDescriptor
const &dvvDesc,
2211 PATCHCOORD_BUFFER *patchCoords,
2212 PATCH_TABLE *patchTable,
2215 void *deviceContext =
NULL)
2219 return instance->EvalPatchesFaceVarying(srcBuffer,
2240 (void)deviceContext;
2241 instance =
Create(srcDesc, dstDesc, duDesc, dvDesc, duuDesc, duvDesc, dvvDesc);
2243 bool r = instance->EvalPatchesFaceVarying(srcBuffer,
2324 template<
typename SRC_BUFFER,
2325 typename DST_BUFFER,
2326 typename PATCHCOORD_BUFFER,
2327 typename PATCH_TABLE>
2329 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
2330 DST_BUFFER *dstBuffer,
2331 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
2332 DST_BUFFER *duBuffer,
2333 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
2334 DST_BUFFER *dvBuffer,
2335 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
2336 DST_BUFFER *duuBuffer,
2337 OpenSubdiv::Osd::BufferDescriptor
const &duuDesc,
2338 DST_BUFFER *duvBuffer,
2339 OpenSubdiv::Osd::BufferDescriptor
const &duvDesc,
2340 DST_BUFFER *dvvBuffer,
2341 OpenSubdiv::Osd::BufferDescriptor
const &dvvDesc,
2343 PATCHCOORD_BUFFER *patchCoords,
2344 PATCH_TABLE *patchTable,
2345 int fvarChannel = 0)
const
2350 dstBuffer->BindVBO(),
2352 duBuffer->BindVBO(),
2354 dvBuffer->BindVBO(),
2356 duuBuffer->BindVBO(),
2358 duvBuffer->BindVBO(),
2360 dvvBuffer->BindVBO(),
2363 patchCoords->BindVBO(),
2364 patchTable->GetFVarPatchArrays(fvarChannel),
2365 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
2366 patchTable->GetFVarPatchParamBuffer(fvarChannel));
2378 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
2379 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
2380 OpenSubdiv::Osd::BufferDescriptor
const &duDesc = OpenSubdiv::Osd::BufferDescriptor(),
2381 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc = OpenSubdiv::Osd::BufferDescriptor(),
2382 OpenSubdiv::Osd::BufferDescriptor
const &duuDesc = OpenSubdiv::Osd::BufferDescriptor(),
2383 OpenSubdiv::Osd::BufferDescriptor
const &duvDesc = OpenSubdiv::Osd::BufferDescriptor(),
2384 OpenSubdiv::Osd::BufferDescriptor
const &dvvDesc = OpenSubdiv::Osd::BufferDescriptor());
2390 struct _StencilKernel {
2393 bool Compile(OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
2394 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
2395 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
2396 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
2397 OpenSubdiv::Osd::BufferDescriptor
const &duuDesc,
2398 OpenSubdiv::Osd::BufferDescriptor
const &duvDesc,
2399 OpenSubdiv::Osd::BufferDescriptor
const &dvvDesc,
2402 GLuint uniformStart;
2404 GLuint uniformSrcOffset;
2405 GLuint uniformDstOffset;
2406 GLuint uniformDuDesc;
2407 GLuint uniformDvDesc;
2408 GLuint uniformDuuDesc;
2409 GLuint uniformDuvDesc;
2410 GLuint uniformDvvDesc;
2413 struct _PatchKernel {
2416 bool Compile(OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
2417 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
2418 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
2419 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
2420 OpenSubdiv::Osd::BufferDescriptor
const &duuDesc,
2421 OpenSubdiv::Osd::BufferDescriptor
const &duvDesc,
2422 OpenSubdiv::Osd::BufferDescriptor
const &dvvDesc,
2425 GLuint uniformSrcOffset;
2426 GLuint uniformDstOffset;
2427 GLuint uniformPatchArray;
2428 GLuint uniformDuDesc;
2429 GLuint uniformDvDesc;
2430 GLuint uniformDuuDesc;
2431 GLuint uniformDuvDesc;
2432 GLuint uniformDvvDesc;
2436 GLuint _patchArraysSSBO;
2438 int GetDispatchSize(
int count)
const;
2440 void DispatchCompute(
int totalDispatchSize)
const;
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object instance
bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, OpenSubdiv::Osd::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, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, OpenSubdiv::Osd::BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, OpenSubdiv::Osd::BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, OpenSubdiv::Osd::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 EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, OpenSubdiv::Osd::BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, OpenSubdiv::Osd::BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, GLComputeEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, OpenSubdiv::Osd::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 EvalPatchesVarying(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, OpenSubdiv::Osd::BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, OpenSubdiv::Osd::BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
static GLComputeEvaluator * Create(OpenSubdiv::Osd::BufferDescriptor const &srcDesc, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, OpenSubdiv::Osd::BufferDescriptor const &duDesc, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, void *deviceContext=NULL)
bool EvalPatches(GLuint srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, GLuint dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, GLuint duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, GLuint dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, GLuint duuBuffer, OpenSubdiv::Osd::BufferDescriptor const &duuDesc, GLuint duvBuffer, OpenSubdiv::Osd::BufferDescriptor const &duvDesc, GLuint dvvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvvDesc, int numPatchCoords, GLuint patchCoordsBuffer, const OpenSubdiv::Osd::PatchArrayVector &patchArrays, GLuint patchIndexBuffer, GLuint patchParamsBuffer) const
bool EvalPatches(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::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 ...
bool Compile(OpenSubdiv::Osd::BufferDescriptor const &srcDesc, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, OpenSubdiv::Osd::BufferDescriptor const &duDesc=OpenSubdiv::Osd::BufferDescriptor(), OpenSubdiv::Osd::BufferDescriptor const &dvDesc=OpenSubdiv::Osd::BufferDescriptor(), OpenSubdiv::Osd::BufferDescriptor const &duuDesc=OpenSubdiv::Osd::BufferDescriptor(), OpenSubdiv::Osd::BufferDescriptor const &duvDesc=OpenSubdiv::Osd::BufferDescriptor(), OpenSubdiv::Osd::BufferDescriptor const &dvvDesc=OpenSubdiv::Osd::BufferDescriptor())
static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
static bool EvalStencils(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, OpenSubdiv::Osd::BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, OpenSubdiv::Osd::BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvvDesc, STENCIL_TABLE const *stencilTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
Generic static stencil function. This function has a same signature as other device kernels have so t...
bool EvalPatches(GLuint srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, GLuint dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, GLuint duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, GLuint dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, int numPatchCoords, GLuint patchCoordsBuffer, const OpenSubdiv::Osd::PatchArrayVector &patchArrays, GLuint patchIndexBuffer, GLuint patchParamsBuffer) const
bool EvalStencils(GLuint srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, GLuint dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, GLuint duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, GLuint dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, GLuint sizesBuffer, GLuint offsetsBuffer, GLuint indicesBuffer, GLuint weightsBuffer, GLuint duWeightsBuffer, GLuint dvWeightsBuffer, int start, int end) const
Dispatch the GLSL compute kernel on GPU asynchronously returns false if the kernel hasn't been compil...
bool EvalStencils(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, STENCIL_TABLE const *stencilTable) const
Generic stencil function.
static bool EvalPatches(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
static bool EvalPatches(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
static bool EvalStencils(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
Generic static stencil function. This function has a same signature as other device kernels have so t...
bool EvalStencils(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, OpenSubdiv::Osd::BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, OpenSubdiv::Osd::BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvvDesc, STENCIL_TABLE const *stencilTable) const
Generic stencil function.
static bool EvalStencils(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, STENCIL_TABLE const *stencilTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
Generic static stencil function. This function has a same signature as other device kernels have so t...
bool EvalStencils(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable) const
Generic stencil function.
static GLComputeEvaluator * Create(OpenSubdiv::Osd::BufferDescriptor const &srcDesc, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, OpenSubdiv::Osd::BufferDescriptor const &duDesc, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, OpenSubdiv::Osd::BufferDescriptor const &duuDesc, OpenSubdiv::Osd::BufferDescriptor const &duvDesc, OpenSubdiv::Osd::BufferDescriptor const &dvvDesc, void *deviceContext=NULL)
bool EvalPatches(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, OpenSubdiv::Osd::BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, OpenSubdiv::Osd::BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, OpenSubdiv::Osd::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 void Synchronize(void *deviceContext)
Wait the dispatched kernel finishes.
static bool EvalPatches(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, OpenSubdiv::Osd::BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, OpenSubdiv::Osd::BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, OpenSubdiv::Osd::BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, OpenSubdiv::Osd::BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, OpenSubdiv::Osd::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 EvalStencils(GLuint srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, GLuint dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, GLuint duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, GLuint dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, GLuint duuBuffer, OpenSubdiv::Osd::BufferDescriptor const &duuDesc, GLuint duvBuffer, OpenSubdiv::Osd::BufferDescriptor const &duvDesc, GLuint dvvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvvDesc, GLuint sizesBuffer, GLuint offsetsBuffer, GLuint indicesBuffer, GLuint weightsBuffer, GLuint duWeightsBuffer, GLuint dvWeightsBuffer, GLuint duuWeightsBuffer, GLuint duvWeightsBuffer, GLuint dvvWeightsBuffer, int start, int end) const
Dispatch the GLSL compute kernel on GPU asynchronously returns false if the kernel hasn't been compil...
static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, GLComputeEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, GLComputeEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
~GLComputeEvaluator()
Destructor. note that the GL context must be made current.
bool EvalPatches(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, OpenSubdiv::Osd::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...
GLComputeEvaluator()
Constructor.
bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::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 ...
bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::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 ...
GL stencil table (Shader Storage buffer)
GLuint GetIndicesBuffer() const
int GetNumStencils() const
GLuint GetDuvWeightsBuffer() const
GLuint GetDvvWeightsBuffer() const
GLStencilTableSSBO(OpenSubdiv::Far::LimitStencilTable const *limitStencilTable)
GLuint GetDuuWeightsBuffer() const
static GLStencilTableSSBO * Create(OpenSubdiv::Far::StencilTable const *stencilTable, void *deviceContext=NULL)
static GLStencilTableSSBO * Create(OpenSubdiv::Far::LimitStencilTable const *limitStencilTable, void *deviceContext=NULL)
GLStencilTableSSBO(OpenSubdiv::Far::StencilTable const *stencilTable)
GLuint GetWeightsBuffer() const
GLuint GetDuWeightsBuffer() const
GLuint GetDvWeightsBuffer() const
GLuint GetOffsetsBuffer() const
GLuint GetSizesBuffer() const