25 #ifndef OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H 26 #define OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H 28 #include "../version.h" 30 #include "../osd/opengl.h" 31 #include "../osd/types.h" 32 #include "../osd/bufferDescriptor.h" 35 namespace OPENSUBDIV_VERSION {
40 class LimitStencilTable;
62 void *deviceContext = NULL) {
99 void * deviceContext = NULL) {
102 if (instance->
Compile(srcDesc, dstDesc, duDesc, dvDesc))
147 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
151 STENCIL_TABLE
const *stencilTable,
153 void * deviceContext = NULL) {
162 instance = Create(srcDesc, dstDesc,
215 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
221 STENCIL_TABLE
const *stencilTable,
223 void * deviceContext = NULL) {
234 instance = Create(srcDesc, dstDesc, duDesc, dvDesc);
264 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
268 STENCIL_TABLE
const *stencilTable)
const {
270 return EvalStencils(srcBuffer->BindVBO(), srcDesc,
271 dstBuffer->BindVBO(), dstDesc,
274 stencilTable->GetSizesTexture(),
275 stencilTable->GetOffsetsTexture(),
276 stencilTable->GetIndicesTexture(),
277 stencilTable->GetWeightsTexture(),
281 stencilTable->GetNumStencils());
308 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
314 STENCIL_TABLE
const *stencilTable)
const {
316 return EvalStencils(srcBuffer->BindVBO(), srcDesc,
317 dstBuffer->BindVBO(), dstDesc,
318 duBuffer->BindVBO(), duDesc,
319 dvBuffer->BindVBO(), dvDesc,
320 stencilTable->GetSizesTexture(),
321 stencilTable->GetOffsetsTexture(),
322 stencilTable->GetIndicesTexture(),
323 stencilTable->GetWeightsTexture(),
324 stencilTable->GetDuWeightsTexture(),
325 stencilTable->GetDvWeightsTexture(),
327 stencilTable->GetNumStencils());
370 GLuint offsetsBuffer,
371 GLuint indicesBuffer,
372 GLuint weightsBuffer,
373 GLuint duWeightsBuffer,
374 GLuint dvWeightsBuffer,
416 template <
typename SRC_BUFFER,
typename DST_BUFFER,
417 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
422 PATCHCOORD_BUFFER *patchCoords,
423 PATCH_TABLE *patchTable,
425 void * deviceContext = NULL) {
430 numPatchCoords, patchCoords,
435 instance = Create(srcDesc, dstDesc,
441 numPatchCoords, patchCoords,
490 template <
typename SRC_BUFFER,
typename DST_BUFFER,
491 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
498 PATCHCOORD_BUFFER *patchCoords,
499 PATCH_TABLE *patchTable,
501 void * deviceContext = NULL) {
508 numPatchCoords, patchCoords,
513 instance = Create(srcDesc, dstDesc, duDesc, dvDesc);
519 numPatchCoords, patchCoords,
552 template <
typename SRC_BUFFER,
typename DST_BUFFER,
553 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
558 PATCHCOORD_BUFFER *patchCoords,
559 PATCH_TABLE *patchTable)
const {
561 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
562 dstBuffer->BindVBO(), dstDesc,
566 patchCoords->BindVBO(),
567 patchTable->GetPatchArrays(),
568 patchTable->GetPatchIndexTextureBuffer(),
569 patchTable->GetPatchParamTextureBuffer());
606 template <
typename SRC_BUFFER,
typename DST_BUFFER,
607 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
614 PATCHCOORD_BUFFER *patchCoords,
615 PATCH_TABLE *patchTable)
const {
617 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
618 dstBuffer->BindVBO(), dstDesc,
619 duBuffer->BindVBO(), duDesc,
620 dvBuffer->BindVBO(), dvDesc,
622 patchCoords->BindVBO(),
623 patchTable->GetPatchArrays(),
624 patchTable->GetPatchIndexTextureBuffer(),
625 patchTable->GetPatchParamTextureBuffer());
633 GLuint patchCoordsBuffer,
635 GLuint patchIndexBuffer,
636 GLuint patchParamsBuffer)
const;
671 template <
typename SRC_BUFFER,
typename DST_BUFFER,
672 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
677 PATCHCOORD_BUFFER *patchCoords,
678 PATCH_TABLE *patchTable,
680 void * deviceContext = NULL) {
686 numPatchCoords, patchCoords,
691 instance = Create(srcDesc, dstDesc,
698 numPatchCoords, patchCoords,
731 template <
typename SRC_BUFFER,
typename DST_BUFFER,
732 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
737 PATCHCOORD_BUFFER *patchCoords,
738 PATCH_TABLE *patchTable)
const {
740 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
741 dstBuffer->BindVBO(), dstDesc,
745 patchCoords->BindVBO(),
746 patchTable->GetVaryingPatchArrays(),
747 patchTable->GetVaryingPatchIndexTextureBuffer(),
748 patchTable->GetPatchParamTextureBuffer());
786 template <
typename SRC_BUFFER,
typename DST_BUFFER,
787 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
792 PATCHCOORD_BUFFER *patchCoords,
793 PATCH_TABLE *patchTable,
796 void * deviceContext = NULL) {
802 numPatchCoords, patchCoords,
803 patchTable, fvarChannel);
807 instance = Create(srcDesc, dstDesc,
814 numPatchCoords, patchCoords,
815 patchTable, fvarChannel);
849 template <
typename SRC_BUFFER,
typename DST_BUFFER,
850 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
855 PATCHCOORD_BUFFER *patchCoords,
856 PATCH_TABLE *patchTable,
857 int fvarChannel = 0)
const {
859 return EvalPatches(srcBuffer->BindVBO(), srcDesc,
860 dstBuffer->BindVBO(), dstDesc,
864 patchCoords->BindVBO(),
865 patchTable->GetFVarPatchArrays(fvarChannel),
866 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),
867 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));
884 static void Synchronize(
void *kernel);
887 GLuint _srcBufferTexture;
889 struct _StencilKernel {
897 GLint uniformSrcBufferTexture;
898 GLint uniformSrcOffset;
900 GLint uniformSizesTexture;
901 GLint uniformOffsetsTexture;
902 GLint uniformIndicesTexture;
903 GLint uniformWeightsTexture;
904 GLint uniformDuWeightsTexture;
905 GLint uniformDvWeightsTexture;
910 struct _PatchKernel {
918 GLint uniformSrcBufferTexture;
919 GLint uniformSrcOffset;
921 GLint uniformPatchArray;
922 GLint uniformPatchParamTexture;
923 GLint uniformPatchIndexTexture;
931 using namespace OPENSUBDIV_VERSION;
936 #endif // OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H
GLuint GetSizesTexture() const
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 ...
Table of subdivision stencils.
GL TextureBuffer stencil table.
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...
Table of limit subdivision stencils.
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 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 eval stencils function with derivative evaluation.
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 ...
GLuint GetDvWeightsTexture() const
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 GLStencilTableTBO * Create(Far::StencilTable const *stencilTable, void *deviceContext=NULL)
std::vector< PatchArray > PatchArrayVector
GLuint GetWeightsTexture() const
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.
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 Compile(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc)
bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable) const
Generic eval stencils function.
int GetNumStencils() const
GLuint GetDuWeightsTexture() const
GLuint GetOffsetsTexture() const
GLuint GetIndicesTexture() const
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, 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, 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 GLStencilTableTBO * Create(Far::LimitStencilTable const *limitStencilTable, void *deviceContext=NULL)
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...