hgiInterop.h
1 //
2 // Copyright 2020 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 #ifndef PXR_IMAGING_HGIINTEROP_HGIINTEROP_H
25 #define PXR_IMAGING_HGIINTEROP_HGIINTEROP_H
26 
27 #include "pxr/pxr.h"
28 #include "pxr/base/tf/token.h"
29 #include "pxr/base/gf/vec4i.h"
30 #include "pxr/imaging/hgiInterop/api.h"
31 #include "pxr/imaging/hgi/texture.h"
32 
33 #include <memory>
34 
35 PXR_NAMESPACE_OPEN_SCOPE
36 
37 class Hgi;
38 class HgiInteropMetal;
39 class HgiInteropOpenGL;
40 class HgiInteropVulkan;
41 class VtValue;
42 
50 class HgiInterop final
51 {
52 public:
53  HGIINTEROP_API
54  HgiInterop();
55 
56  HGIINTEROP_API
57  ~HgiInterop();
58 
90  HGIINTEROP_API
91  void TransferToApp(
92  Hgi *srcHgi,
93  HgiTextureHandle const &srcColor,
94  HgiTextureHandle const &srcDepth,
95  TfToken const &dstApi,
96  VtValue const &dstFramebuffer,
97  GfVec4i const &dstRegion);
98 
99 private:
100  HgiInterop & operator=(const HgiInterop&) = delete;
101  HgiInterop(const HgiInterop&) = delete;
102 
103 #if defined(PXR_METAL_SUPPORT_ENABLED)
104  std::unique_ptr<HgiInteropMetal> _metalToOpenGL;
105 #elif defined(PXR_VULKAN_SUPPORT_ENABLED)
106  std::unique_ptr<HgiInteropVulkan> _vulkanToOpenGL;
107 #else
108  std::unique_ptr<HgiInteropOpenGL> _openGLToOpenGL;
109 #endif
110 };
111 
112 
113 PXR_NAMESPACE_CLOSE_SCOPE
114 
115 #endif
Basic type for a vector of 4 int components.
Definition: vec4i.h:61
HGIINTEROP_API void TransferToApp(Hgi *srcHgi, HgiTextureHandle const &srcColor, HgiTextureHandle const &srcDepth, TfToken const &dstApi, VtValue const &dstFramebuffer, GfVec4i const &dstRegion)
Composite the provided textures over the application / viewer's framebuffer contents.
Token for efficient comparison, assignment, and hashing of known strings.
Definition: token.h:87
Hydra Graphics Interface.
Definition: hgi.h:110
Hydra Graphics Interface Interop.
Definition: hgiInterop.h:50
Provides a container which may hold any type, and provides introspection and iteration over array typ...
Definition: value.h:166
TfToken class for efficient string referencing and hashing, plus conversions to and from stl string c...