All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends
mtlPatchTable.h
Go to the documentation of this file.
1 //
2 // Copyright 2013 Pixar
3 //
4 // Licensed under the Apache License, Version 2.0 (the "Apache License")
5 // with the following modification; you may not use this file except in
6 // compliance with the Apache License and the following modification to it:
7 // Section 6. Trademarks. is deleted and replaced with:
8 //
9 // 6. Trademarks. This License does not grant permission to use the trade
10 // names, trademarks, service marks, or product names of the Licensor
11 // and its affiliates, except as required to comply with Section 4(c) of
12 // the License and to reproduce the content of the NOTICE file.
13 //
14 // You may obtain a copy of the Apache License at
15 //
16 // http://www.apache.org/licenses/LICENSE-2.0
17 //
18 // Unless required by applicable law or agreed to in writing, software
19 // distributed under the Apache License with the above modification is
20 // distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21 // KIND, either express or implied. See the Apache License for the specific
22 // language governing permissions and limitations under the Apache License.
23 //
24 
25 #ifndef OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H
26 #define OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H
27 
28 #include "../version.h"
29 #include "../far/patchDescriptor.h"
30 #include "../osd/nonCopyable.h"
31 #include "../osd/types.h"
32 #include "../osd/mtlCommon.h"
33 
34 @protocol MTLDevice;
35 @protocol MTLBuffer;
36 
37 namespace OpenSubdiv {
38 namespace OPENSUBDIV_VERSION {
39 
40 namespace Far {
41  class PatchTable;
42 };
43 
44 namespace Osd {
45 
46 class MTLPatchTable : private NonCopyable<MTLPatchTable> {
47 public:
48  typedef id<MTLBuffer> VertexBufferBinding;
49 
50  MTLPatchTable();
51  ~MTLPatchTable();
52 
53  template<typename DEVICE_CONTEXT>
54  static MTLPatchTable *Create(Far::PatchTable const *farPatchTable, DEVICE_CONTEXT context)
55  {
56  return Create(farPatchTable, context);
57  }
58 
59  static MTLPatchTable *Create(Far::PatchTable const *farPatchTable, MTLContext* context);
60 
61  PatchArrayVector const &GetPatchArrays() const { return _patchArrays; }
62  id<MTLBuffer> GetPatchIndexBuffer() const { return _indexBuffer; }
63  id<MTLBuffer> GetPatchParamBuffer() const { return _patchParamBuffer; }
64 
65  PatchArrayVector const &GetVaryingPatchArrays() const { return _varyingPatchArrays; }
66  id<MTLBuffer> GetVaryingPatchIndexBuffer() const { return _varyingPatchIndexBuffer; }
67 
68  int GetNumFVarChannels() const { return (int)_fvarPatchArrays.size(); }
69  PatchArrayVector const &GetFVarPatchArrays(int fvarChannel = 0) const { return _fvarPatchArrays[fvarChannel]; }
70  id<MTLBuffer> GetFVarPatchIndexBuffer(int fvarChannel = 0) const { return _fvarIndexBuffers[fvarChannel]; }
71  id<MTLBuffer> GetFVarPatchParamBuffer(int fvarChannel = 0) const { return _fvarParamBuffers[fvarChannel]; }
72 
73 protected:
74  bool allocate(Far::PatchTable const *farPatchTable, MTLContext* context);
75 
76  PatchArrayVector _patchArrays;
77 
78  id<MTLBuffer> _indexBuffer;
79  id<MTLBuffer> _patchParamBuffer;
80 
81  PatchArrayVector _varyingPatchArrays;
82 
83  id<MTLBuffer> _varyingPatchIndexBuffer;
84 
85  std::vector<PatchArrayVector> _fvarPatchArrays;
86  std::vector<id<MTLBuffer>> _fvarIndexBuffers;
87  std::vector<id<MTLBuffer>> _fvarParamBuffers;
88 };
89 
90 } // end namespace Osd
91 
92 } //end namespace OPENSUBDIV_VERSION
93 using namespace OPENSUBDIV_VERSION;
94 
95 } //end namespace OpenSubdiv
96 
97 #endif //end OPENSUBDIV3_OSD_MTL_PATCH_TABLE_H
std::vector< PatchArray > PatchArrayVector
Definition: types.h:132