void OsdUtilAdaptiveEvaluator::EvaluateLimit( const OsdEvalCoords &coords, float P[3], float dPdu[3], float dPdv[3]) { // This controller is an empty object, essentially a namespace. OsdCpuEvalLimitController cpuEvalLimitController; static OsdVertexBufferDescriptor desc(0,3,3); // Setup evaluation controller. Values are offset, length, stride */ OsdVertexBufferDescriptor in_desc(0, 3, 3), out_desc(0, 0, 0); cpuEvalLimitController.BindVertexBuffers<OsdCpuVertexBuffer,OsdCpuVertexBuffer>(in_desc, _vertexBuffer, out_desc, NULL); cpuEvalLimitController.EvalLimitSample(coords, _evalLimitContext, desc, P, dPdu, dPdv); }
OpenSubdPatch(OsdFarMesh *farmesh, OsdCpuVertexBuffer *vbuf_base) { face_id = 0; /* create buffers for evaluation */ vbuf_P = OsdCpuVertexBuffer::Create(3, 1); vbuf_dPdu = OsdCpuVertexBuffer::Create(3, 1); vbuf_dPdv = OsdCpuVertexBuffer::Create(3, 1); P = vbuf_P->BindCpuBuffer(); dPdu = vbuf_dPdu->BindCpuBuffer(); dPdv = vbuf_dPdv->BindCpuBuffer(); /* setup evaluation context */ OsdVertexBufferDescriptor in_desc(0, 3, 3), out_desc(0, 3, 3); /* offset, length, stride */ evalctx = OsdCpuEvalLimitContext::Create(farmesh, false); evalctx->GetVertexData().Bind(in_desc, vbuf_base, out_desc, vbuf_P, vbuf_dPdu, vbuf_dPdv); }