9#include <opensubdiv/osd/glslPatchShaderSource.h>
24 const float *positions,
25 const int start_vertex_index,
26 const int num_vertices)
32 const float *vertex_data,
33 const int start_vertex_index,
34 const int num_vertices)
40 const float *varying_data,
41 const int start_vertex_index,
42 const int num_vertices)
48 const int face_varying_channel,
49 const float *face_varying_data,
50 const int start_vertex_index,
51 const int num_vertices)
54 face_varying_channel, face_varying_data, start_vertex_index, num_vertices);
59 const int start_offset,
61 const int start_vertex_index,
62 const int num_vertices)
65 buffer, start_offset, stride, start_vertex_index, num_vertices);
70 const int start_offset,
72 const int start_vertex_index,
73 const int num_vertices)
76 buffer, start_offset, stride, start_vertex_index, num_vertices);
80 const int face_varying_channel,
82 const int start_offset,
84 const int start_vertex_index,
85 const int num_vertices)
88 face_varying_channel, buffer, start_offset, stride, start_vertex_index, num_vertices);
97 const int ptex_face_index,
109 const int num_patch_coords,
115 patch_coords, num_patch_coords,
P, dPdu, dPdv);
119 const int ptex_face_index,
122 float vertex_data[3])
128 const int ptex_face_index,
137 const int face_varying_channel,
138 const int ptex_face_index,
141 float face_varying[2])
144 face_varying_channel, ptex_face_index, face_u, face_v, face_varying);
153 int *patches_are_triangular)
160 patches_are_triangular);
194 const int face_varying_channel,
202 const int face_varying_channel,
209 const int face_varying_channel,
216 const int face_varying_channel,
273 topology_refiner, evaluator_type, evaluator_cache ? evaluator_cache->
impl :
nullptr);
281 MEM_delete(evaluator);
288 return evaluator_cache;
293 if (!evaluator_cache) {
298 MEM_delete(evaluator_cache);
304 static std::string patch_basis_source;
305 if (patch_basis_source.empty()) {
306 patch_basis_source = OpenSubdiv::Osd::GLSLPatchShaderSource::GetPatchBasisShaderSource();
308 return patch_basis_source.c_str();
Read Guarded memory(de)allocation.
void setVaryingData(const float *varying_data, const int start_vertex_index, const int num_vertices)
void wrapSrcBuffer(OpenSubdiv_Buffer *src_buffer)
void wrapFVarSrcBuffer(const int face_varying_channel, OpenSubdiv_Buffer *src_buffer)
void evaluatePatchesLimit(const OpenSubdiv_PatchCoord *patch_coords, const int num_patch_coords, float *P, float *dPdu, float *dPdv)
void wrapPatchIndexBuffer(OpenSubdiv_Buffer *patch_index_buffer)
void fillPatchArraysBuffer(OpenSubdiv_Buffer *patch_arrays_buffer)
void setSettings(const OpenSubdiv_EvaluatorSettings *settings)
void wrapPatchParamBuffer(OpenSubdiv_Buffer *patch_param_buffer)
void evaluateLimit(const int ptex_face_index, float face_u, float face_v, float P[3], float dPdu[3], float dPdv[3])
void evaluateFaceVarying(const int face_varying_channel, const int ptes_face_index, float face_u, float face_v, float face_varying[2])
void setFaceVaryingData(const int face_varying_channel, const float *varying_data, const int start_vertex_index, const int num_vertices)
void getPatchMap(OpenSubdiv_Buffer *patch_map_handles, OpenSubdiv_Buffer *patch_map_quadtree, int *min_patch_face, int *max_patch_face, int *max_depth, int *patches_are_triangular)
void wrapFVarPatchIndexBuffer(const int face_varying_channel, OpenSubdiv_Buffer *patch_index_buffer)
void fillFVarPatchArraysBuffer(const int face_varying_channel, OpenSubdiv_Buffer *patch_arrays_buffer)
void wrapSrcVertexDataBuffer(OpenSubdiv_Buffer *src_buffer)
void evaluateVertexData(const int ptes_face_index, float face_u, float face_v, float data[])
void setCoarsePositionsFromBuffer(const void *buffer, const int start_offset, const int stride, const int start_vertex_index, const int num_vertices)
void wrapFVarPatchParamBuffer(const int face_varying_channel, OpenSubdiv_Buffer *patch_param_buffer)
void setVaryingDataFromBuffer(const void *buffer, const int start_offset, const int stride, const int start_vertex_index, const int num_vertices)
bool hasVertexData() const
void evaluateVarying(const int ptes_face_index, float face_u, float face_v, float varying[3])
void setFaceVaryingDataFromBuffer(const int face_varying_channel, const void *buffer, const int start_offset, const int stride, const int start_vertex_index, const int num_vertices)
void setVertexData(const float *data, const int start_vertex_index, const int num_vertices)
void setCoarsePositions(const float *positions, const int start_vertex_index, const int num_vertices)
OpenSubdiv_EvaluatorCacheImpl * openSubdiv_createEvaluatorCacheInternal(eOpenSubdivEvaluator evaluator_type)
void openSubdiv_deleteEvaluatorCacheInternal(OpenSubdiv_EvaluatorCacheImpl *evaluator_cache)
static void fillFVarPatchArraysBuffer(struct OpenSubdiv_Evaluator *evaluator, const int face_varying_channel, struct OpenSubdiv_Buffer *patch_array_buffer)
static void setFaceVaryingDataFromBuffer(OpenSubdiv_Evaluator *evaluator, const int face_varying_channel, const void *buffer, const int start_offset, const int stride, const int start_vertex_index, const int num_vertices)
static void fillPatchArraysBuffer(struct OpenSubdiv_Evaluator *evaluator, struct OpenSubdiv_Buffer *patch_array_buffer)
static void evaluateVertexData(OpenSubdiv_Evaluator *evaluator, const int ptex_face_index, float face_u, float face_v, float vertex_data[3])
static void wrapFVarSrcBuffer(struct OpenSubdiv_Evaluator *evaluator, const int face_varying_channel, struct OpenSubdiv_Buffer *src_buffer)
static void setVaryingDataFromBuffer(OpenSubdiv_Evaluator *evaluator, const void *buffer, const int start_offset, const int stride, const int start_vertex_index, const int num_vertices)
void openSubdiv_deleteEvaluatorCache(OpenSubdiv_EvaluatorCache *evaluator_cache)
static void wrapPatchParamBuffer(struct OpenSubdiv_Evaluator *evaluator, struct OpenSubdiv_Buffer *patch_param_buffer)
static void refine(OpenSubdiv_Evaluator *evaluator)
static void setCoarsePositionsFromBuffer(OpenSubdiv_Evaluator *evaluator, const void *buffer, const int start_offset, const int stride, const int start_vertex_index, const int num_vertices)
static void getPatchMap(struct OpenSubdiv_Evaluator *evaluator, struct OpenSubdiv_Buffer *patch_map_handles, struct OpenSubdiv_Buffer *patch_map_quadtree, int *min_patch_face, int *max_patch_face, int *max_depth, int *patches_are_triangular)
static void evaluateLimit(OpenSubdiv_Evaluator *evaluator, const int ptex_face_index, const float face_u, const float face_v, float P[3], float dPdu[3], float dPdv[3])
static void setFaceVaryingData(OpenSubdiv_Evaluator *evaluator, const int face_varying_channel, const float *face_varying_data, const int start_vertex_index, const int num_vertices)
static void wrapFVarPatchIndexBuffer(struct OpenSubdiv_Evaluator *evaluator, const int face_varying_channel, struct OpenSubdiv_Buffer *patch_index_buffer)
static void evaluatePatchesLimit(OpenSubdiv_Evaluator *evaluator, const OpenSubdiv_PatchCoord *patch_coords, const int num_patch_coords, float *P, float *dPdu, float *dPdv)
static void evaluateVarying(OpenSubdiv_Evaluator *evaluator, const int ptex_face_index, float face_u, float face_v, float varying[3])
static void evaluateFaceVarying(OpenSubdiv_Evaluator *evaluator, const int face_varying_channel, const int ptex_face_index, float face_u, float face_v, float face_varying[2])
static void setSettings(struct OpenSubdiv_Evaluator *evaluator, const OpenSubdiv_EvaluatorSettings *settings)
static void wrapPatchIndexBuffer(struct OpenSubdiv_Evaluator *evaluator, struct OpenSubdiv_Buffer *patch_index_buffer)
static void assignFunctionPointers(OpenSubdiv_Evaluator *evaluator)
static void wrapFVarPatchParamBuffer(struct OpenSubdiv_Evaluator *evaluator, const int face_varying_channel, struct OpenSubdiv_Buffer *patch_param_buffer)
static bool hasVertexData(struct OpenSubdiv_Evaluator *evaluator)
static void wrapSrcBuffer(struct OpenSubdiv_Evaluator *evaluator, struct OpenSubdiv_Buffer *src_buffer)
OpenSubdiv_Evaluator * openSubdiv_createEvaluatorFromTopologyRefiner(blender::opensubdiv::TopologyRefinerImpl *topology_refiner, eOpenSubdivEvaluator evaluator_type, OpenSubdiv_EvaluatorCache *evaluator_cache)
static void setVertexData(OpenSubdiv_Evaluator *evaluator, const float *vertex_data, const int start_vertex_index, const int num_vertices)
static void wrapSrcVertexDataBuffer(struct OpenSubdiv_Evaluator *evaluator, struct OpenSubdiv_Buffer *src_buffer)
static void setCoarsePositions(OpenSubdiv_Evaluator *evaluator, const float *positions, const int start_vertex_index, const int num_vertices)
const char * openSubdiv_getGLSLPatchBasisSource(void)
void openSubdiv_deleteEvaluator(OpenSubdiv_Evaluator *evaluator)
static void setVaryingData(OpenSubdiv_Evaluator *evaluator, const float *varying_data, const int start_vertex_index, const int num_vertices)
OpenSubdiv_EvaluatorCache * openSubdiv_createEvaluatorCache(eOpenSubdivEvaluator evaluator_type)
void openSubdiv_deleteEvaluatorInternal(OpenSubdiv_EvaluatorImpl *evaluator)
OpenSubdiv_EvaluatorImpl * openSubdiv_createEvaluatorInternal(blender::opensubdiv::TopologyRefinerImpl *topology_refiner, eOpenSubdivEvaluator evaluator_type, OpenSubdiv_EvaluatorCacheImpl *evaluator_cache_descr)
OpenSubdiv_EvaluatorCacheImpl * impl
blender::opensubdiv::EvalOutputAPI * eval_output
void(* evaluateLimit)(OpenSubdiv_Evaluator *evaluator, const int ptex_face_index, float face_u, float face_v, float P[3], float dPdu[3], float dPdv[3])
void(* evaluateVertexData)(OpenSubdiv_Evaluator *evaluator, const int ptex_face_index, float face_u, float face_v, float data[])
void(* setVaryingDataFromBuffer)(OpenSubdiv_Evaluator *evaluator, const void *buffer, const int start_offset, const int stride, const int start_vertex_index, const int num_vertices)
void(* setCoarsePositions)(OpenSubdiv_Evaluator *evaluator, const float *positions, const int start_vertex_index, const int num_vertices)
void(* evaluatePatchesLimit)(OpenSubdiv_Evaluator *evaluator, const OpenSubdiv_PatchCoord *patch_coords, const int num_patch_coords, float *P, float *dPdu, float *dPdv)
void(* wrapFVarPatchIndexBuffer)(OpenSubdiv_Evaluator *evaluator, const int face_varying_channel, OpenSubdiv_Buffer *patch_index_buffer)
void(* refine)(OpenSubdiv_Evaluator *evaluator)
void(* evaluateFaceVarying)(OpenSubdiv_Evaluator *evaluator, const int face_varying_channel, const int ptex_face_index, float face_u, float face_v, float face_varying[2])
void(* wrapPatchIndexBuffer)(OpenSubdiv_Evaluator *evaluator, OpenSubdiv_Buffer *patch_index_buffer)
void(* wrapFVarSrcBuffer)(OpenSubdiv_Evaluator *evaluator, const int face_varying_channel, OpenSubdiv_Buffer *src_buffer)
void(* fillPatchArraysBuffer)(OpenSubdiv_Evaluator *evaluator, OpenSubdiv_Buffer *patch_array_buffer)
void(* setFaceVaryingData)(OpenSubdiv_Evaluator *evaluator, const int face_varying_channel, const float *face_varying_data, const int start_vertex_index, const int num_vertices)
void(* evaluateVarying)(OpenSubdiv_Evaluator *evaluator, const int ptex_face_index, float face_u, float face_v, float varying[3])
OpenSubdiv_EvaluatorImpl * impl
bool(* hasVertexData)(OpenSubdiv_Evaluator *evaluator)
void(* setVaryingData)(OpenSubdiv_Evaluator *evaluator, const float *varying_data, const int start_vertex_index, const int num_vertices)
void(* getPatchMap)(OpenSubdiv_Evaluator *evaluator, OpenSubdiv_Buffer *patch_map_handles, OpenSubdiv_Buffer *patch_map_quadtree, int *min_patch_face, int *max_patch_face, int *max_depth, int *patches_are_triangular)
void(* wrapSrcVertexDataBuffer)(OpenSubdiv_Evaluator *evaluator, OpenSubdiv_Buffer *src_buffer)
void(* setFaceVaryingDataFromBuffer)(OpenSubdiv_Evaluator *evaluator, const int face_varying_channel, const void *buffer, const int start_offset, const int stride, const int start_vertex_index, const int num_vertices)
void(* wrapPatchParamBuffer)(OpenSubdiv_Evaluator *evaluator, OpenSubdiv_Buffer *patch_param_buffer)
void(* setSettings)(OpenSubdiv_Evaluator *evaluator, const OpenSubdiv_EvaluatorSettings *settings)
void(* wrapFVarPatchParamBuffer)(OpenSubdiv_Evaluator *evaluator, const int face_varying_channel, OpenSubdiv_Buffer *patch_param_buffer)
void(* wrapSrcBuffer)(OpenSubdiv_Evaluator *evaluator, OpenSubdiv_Buffer *src_buffer)
void(* fillFVarPatchArraysBuffer)(OpenSubdiv_Evaluator *evaluator, const int face_varying_channel, OpenSubdiv_Buffer *patch_array_buffer)
void(* setCoarsePositionsFromBuffer)(OpenSubdiv_Evaluator *evaluator, const void *buffer, const int start_offset, const int stride, const int start_vertex_index, const int num_vertices)
eOpenSubdivEvaluator type
void(* setVertexData)(OpenSubdiv_Evaluator *evaluator, const float *data, const int start_vertex_index, const int num_vertices)