23 using OpenSubdiv::Osd::PatchArray;
24 using OpenSubdiv::Osd::PatchArrayVector;
27 namespace opensubdiv {
31 static void buildPatchArraysBufferFromVector(
const PatchArrayVector &patch_arrays,
34 const size_t patch_array_size =
sizeof(PatchArray);
35 const size_t patch_array_byte_site = patch_array_size * patch_arrays.size();
36 patch_arrays_buffer->
device_alloc(patch_arrays_buffer, patch_arrays.size());
37 patch_arrays_buffer->
bind_gpu(patch_arrays_buffer);
39 patch_arrays_buffer, 0, patch_array_byte_site, &patch_arrays[0]);
45 const StencilTable *varying_stencils,
46 const vector<const StencilTable *> &all_face_varying_stencils,
47 const int face_varying_width,
48 const PatchTable *patch_table,
56 all_face_varying_stencils,
66 buildPatchArraysBufferFromVector(patch_table->GetPatchArrays(), patch_arrays_buffer);
72 patch_index_buffer->
wrap_device_handle(patch_index_buffer, patch_table->GetPatchIndexBuffer());
78 patch_param_buffer->
wrap_device_handle(patch_param_buffer, patch_table->GetPatchParamBuffer());
97 buildPatchArraysBufferFromVector(patch_table->GetFVarPatchArrays(face_varying_channel),
106 patch_index_buffer, patch_table->GetFVarPatchIndexBuffer(face_varying_channel));
114 patch_param_buffer, patch_table->GetFVarPatchParamBuffer(face_varying_channel));
GL stencil table (Shader Storage buffer)
void fillFVarPatchArraysBuffer(const int face_varying_channel, OpenSubdiv_Buffer *patch_arrays_buffer) override
void wrapPatchIndexBuffer(OpenSubdiv_Buffer *patch_index_buffer) override
void wrapSrcBuffer(OpenSubdiv_Buffer *src_buffer) override
void fillPatchArraysBuffer(OpenSubdiv_Buffer *patch_arrays_buffer) override
GpuEvalOutput(const StencilTable *vertex_stencils, const StencilTable *varying_stencils, const vector< const StencilTable * > &all_face_varying_stencils, const int face_varying_width, const PatchTable *patch_table, EvaluatorCache *evaluator_cache=NULL)
void wrapPatchParamBuffer(OpenSubdiv_Buffer *patch_param_buffer) override
void wrapFVarPatchIndexBuffer(const int face_varying_channel, OpenSubdiv_Buffer *patch_index_buffer) override
void wrapFVarPatchParamBuffer(const int face_varying_channel, OpenSubdiv_Buffer *patch_param_buffer) override
void wrapFVarSrcBuffer(const int face_varying_channel, OpenSubdiv_Buffer *src_buffer) override
void wrapSrcVertexDataBuffer(OpenSubdiv_Buffer *src_buffer) override
OpenSubdiv::Osd::EvaluatorCacheT< EVALUATOR > EvaluatorCache
GLPatchTable * getFVarPatchTable(const int face_varying_channel) const
GLVertexBuffer * getSrcVertexDataBuffer() const
GLVertexBuffer * getFVarSrcBuffer(const int face_varying_channel) const
int getFVarSrcBufferOffset(const int face_varying_channel) const
GLVertexBuffer * getSrcBuffer() const
GLPatchTable * getPatchTable() const
void(* wrap_device_handle)(const struct OpenSubdiv_Buffer *buffer, uint64_t device_ptr)
void(* bind_gpu)(const struct OpenSubdiv_Buffer *buffer)
void(* device_update)(const struct OpenSubdiv_Buffer *buffer, unsigned int start, unsigned int len, const void *data)
void(* device_alloc)(const struct OpenSubdiv_Buffer *buffer, const unsigned int size)