HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
CE_OSDRefinement.h
Go to the documentation of this file.
1 /*
2  * PROPRIETARY INFORMATION. This software is proprietary to
3  * Side Effects Software Inc., and is not to be reproduced,
4  * transmitted, or disclosed in any way without written permission.
5  *
6  * NAME: CE_OSDRefinement.h ( CE Library, C++)
7  *
8  * COMMENTS: OpenSubdiv refinement data for OpenCL-based subdivision.
9  *
10  */
11 
12 #ifndef __CE_OSDRefinement__
13 #define __CE_OSDRefinement__
14 
15 #include "CE_API.h"
16 
17 #include <UT/UT_UniquePtr.h>
18 #include <opensubdiv/version.h>
19 
20 class CE_Context;
21 class CE_OSDRefinement;
23 
24 
25 namespace OpenSubdiv {
26  namespace OPENSUBDIV_VERSION {
27  namespace Far {
28  class TopologyRefiner;
29  }
30  }
31 }
32 
35  const OpenSubdiv::Far::TopologyRefiner &refiner,
36  CE_Context &context);
37 
39 {
40 public:
42  CE_OSDRefinement(const CE_OSDRefinement &) = delete;
43  CE_OSDRefinement &operator=(const CE_OSDRefinement &) = delete;
44 
45  int numCoarseVerts() const { return myNumCoarseVerts; }
46  int numRefinedVerts() const { return myNumRefinedVerts; }
47 
48  const CE_OSDRefinementState *state() const { return myState.get(); }
49  CE_OSDRefinementState *state() { return myState.get(); }
50 
51  bool hasStencilCL() const;
52 
53  /// CLPatchTable buffer accessors. Buffers are owned by this object
54  /// (retained on construction) and valid for the lifetime of this
55  /// CE_OSDRefinement.
56  const cl::Buffer &patchArrayBuffer() const { return myPatchArrayBuf; }
57  const cl::Buffer &patchIndexBuffer() const { return myPatchIndexBuf; }
58  const cl::Buffer &patchParamBuffer() const { return myPatchParamBuf; }
59  int numPatchArrays() const;
60  int numPatchesTotal() const;
61 
62  CE_OSDRefinement(int num_coarse_verts, int num_refined_verts);
63 
64 private:
66  CE_OSDCreateFromRefiner(const OpenSubdiv::Far::TopologyRefiner &,
67  CE_Context &);
68  void initPatchBuffers();
69 
71  int myNumCoarseVerts = 0;
72  int myNumRefinedVerts = 0;
73  cl::Buffer myPatchArrayBuf;
74  cl::Buffer myPatchIndexBuf;
75  cl::Buffer myPatchParamBuf;
76 };
77 
78 #endif
#define CE_API
Definition: CE_API.h:13
const CE_OSDRefinementState * state() const
const cl::Buffer & patchIndexBuffer() const
CE_API UT_UniquePtr< CE_OSDRefinement > CE_OSDCreateFromRefiner(const OpenSubdiv::Far::TopologyRefiner &refiner, CE_Context &context)
const cl::Buffer & patchParamBuffer() const
const cl::Buffer & patchArrayBuffer() const
std::unique_ptr< T, Deleter > UT_UniquePtr
A smart pointer for unique ownership of dynamically allocated objects.
Definition: UT_UniquePtr.h:39
CE_OSDRefinementState * state()
int numCoarseVerts() const
int numRefinedVerts() const
LeafData & operator=(const LeafData &)=delete
Memory buffer interface.
Definition: cl.hpp:1867