HDK
Main Page
Related Pages
Modules
Namespaces
Classes
Files
Examples
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
hgiInterop.h
Go to the documentation of this file.
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
VtValue
;
39
40
struct
HgiInteropImpl;
41
42
/// \class HgiInterop
43
///
44
/// Hydra Graphics Interface Interop.
45
///
46
/// HgiInterop provides functionality to transfer render targets between
47
/// supported APIs as efficiently as possible.
48
///
49
class
HgiInterop
final
50
{
51
public
:
52
HGIINTEROP_API
53
HgiInterop
();
54
55
HGIINTEROP_API
56
~HgiInterop
();
57
58
/// Composite the provided textures over the application / viewer's
59
/// framebuffer contents.
60
/// `srcHgi`:
61
/// Determines the source format/platform of the textures.
62
/// Eg. if hgi is of type HgiMetal, the textures are HgiMetalTexture.
63
/// `srcColor`: is the source color aov texture to composite to screen.
64
/// `srcDepth`: (optional) is the depth aov texture to composite to screen.
65
/// `dstApi`:
66
/// Determines what target format/platform the application is using.
67
/// E.g. If hgi==HgiMetal and dstApi==OpenGL then TransferToApp
68
/// will present the metal textures to the gl application.
69
/// `dstFramebuffer`:
70
/// The framebuffer that the source textures are presented into. This
71
/// is a VtValue that encoding a framebuffer in a dstApi specific way.
72
/// E.g., a uint32_t (aka GLuint) for framebuffer object for
73
/// dstApi==OpenGL. For backwards compatibility, the currently bound
74
/// framebuffer is used when the VtValue is empty.
75
///
76
/// `dstRegion`:
77
/// Subrect region of the framebuffer over which to composite.
78
/// Coordinates are (left, BOTTOM, width, height) which is the same
79
/// convention as OpenGL viewport coordinates.
80
///
81
/// Note:
82
/// To composite correctly, blending is enabled.
83
/// If `srcDepth` is provided, depth testing is enabled.
84
/// As a result, the contents of the application framebuffer matter.
85
/// In order to use the contents of `srcColor` and `srcDepth` as-is
86
/// (i.e., blit), the color attachment should be cleared to (0,0,0,0) and
87
/// the depth attachment needs to be cleared to 1.
88
///
89
HGIINTEROP_API
90
void
TransferToApp
(
91
Hgi
*srcHgi,
92
HgiTextureHandle
const
&srcColor,
93
HgiTextureHandle
const
&
srcDepth
,
94
TfToken
const
&dstApi,
95
VtValue
const
&dstFramebuffer,
96
GfVec4i
const
&dstRegion);
97
98
private
:
99
HgiInterop & operator=(
const
HgiInterop&) =
delete
;
100
HgiInterop
(
const
HgiInterop&) =
delete
;
101
102
std::unique_ptr<HgiInteropImpl> _hgiInteropImpl;
103
};
104
105
106
PXR_NAMESPACE_CLOSE_SCOPE
107
108
#endif
GfVec4i
Definition:
vec4i.h:60
HGIINTEROP_API
#define HGIINTEROP_API
Definition:
api.h:40
api.h
HgiTextureHandle
int HgiHandle< class HgiTexture > HgiTextureHandle
Definition:
ptexTextureObject.h:53
TfToken
Definition:
token.h:87
vec4i.h
pxr.h
texture.h
HgiInterop::TransferToApp
HGIINTEROP_API void TransferToApp(Hgi *srcHgi, HgiTextureHandle const &srcColor, HgiTextureHandle const &srcDepth, TfToken const &dstApi, VtValue const &dstFramebuffer, GfVec4i const &dstRegion)
srcDepth
GLenum GLint GLint GLint GLint GLuint GLenum GLint GLint GLint GLint GLsizei GLsizei GLsizei srcDepth
Definition:
glcorearb.h:2510
Hgi
Definition:
hgi.h:110
PXR_NAMESPACE_OPEN_SCOPE
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
Definition:
path.h:1432
HgiInterop::~HgiInterop
HGIINTEROP_API ~HgiInterop()
HgiInterop
Definition:
hgiInterop.h:49
HgiInterop::HgiInterop
HGIINTEROP_API HgiInterop()
PXR_NAMESPACE_CLOSE_SCOPE
#define PXR_NAMESPACE_CLOSE_SCOPE
Definition:
pxr.h:91
VtValue
Definition:
value.h:164
token.h
pxr
imaging
hgiInterop
hgiInterop.h
Generated on Tue Dec 17 2024 03:41:22 for HDK by
1.8.6