1 // 2 // Copyright 2015 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_GL_PATCH_TABLE_H 26 #define OPENSUBDIV3_OSD_GL_PATCH_TABLE_H 27 28 #include "../version.h" 29 30 #include <vector> 31 #include "../far/patchDescriptor.h" 32 #include "../osd/nonCopyable.h" 33 #include "../osd/types.h" 34 35 struct ID3D11Buffer; 36 struct ID3D11ShaderResourceView; 37 struct ID3D11Device; 38 struct ID3D11DeviceContext; 39 40 namespace OpenSubdiv { 41 namespace OPENSUBDIV_VERSION { 42 43 namespace Far{ 44 class PatchTable; 45 }; 46 47 namespace Osd { 48 49 class D3D11PatchTable : private NonCopyable<D3D11PatchTable> { 50 public: 51 typedef ID3D11Buffer * VertexBufferBinding; 52 53 D3D11PatchTable(); 54 ~D3D11PatchTable(); 55 56 template<typename DEVICE_CONTEXT> Create(Far::PatchTable const * farPatchTable,DEVICE_CONTEXT context)57 static D3D11PatchTable *Create(Far::PatchTable const *farPatchTable, 58 DEVICE_CONTEXT context) { 59 return Create(farPatchTable, context->GetDeviceContext()); 60 } 61 62 static D3D11PatchTable *Create(Far::PatchTable const *farPatchTable, 63 ID3D11DeviceContext *deviceContext); 64 GetPatchArrays()65 PatchArrayVector const &GetPatchArrays() const { 66 return _patchArrays; 67 } 68 69 /// Returns the index buffer containing the patch control vertices GetPatchIndexBuffer()70 ID3D11Buffer* GetPatchIndexBuffer() const { 71 return _indexBuffer; 72 } 73 74 /// Returns the SRV containing the patch parameter GetPatchParamSRV()75 ID3D11ShaderResourceView* GetPatchParamSRV() const { 76 return _patchParamBufferSRV; 77 } 78 79 protected: 80 // allocate buffers from patchTable 81 bool allocate(Far::PatchTable const *farPatchTable, 82 ID3D11DeviceContext *deviceContext); 83 84 PatchArrayVector _patchArrays; 85 86 ID3D11Buffer *_indexBuffer; 87 ID3D11Buffer *_patchParamBuffer; 88 ID3D11ShaderResourceView *_patchParamBufferSRV; 89 }; 90 91 92 } // end namespace Osd 93 94 } // end namespace OPENSUBDIV_VERSION 95 using namespace OPENSUBDIV_VERSION; 96 97 } // end namespace OpenSubdiv 98 99 #endif // OPENSUBDIV3_OSD_GL_PATCH_TABLE_H 100