Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
I
instant-ngp-tomography
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Thomas Pickles
instant-ngp-tomography
Commits
fe2112ff
Commit
fe2112ff
authored
2 years ago
by
Thomas Müller
Browse files
Options
Downloads
Patches
Plain Diff
VR: attempt to fix XR/AR video passthrough
parent
8268e2ce
No related branches found
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
include/neural-graphics-primitives/openxr_hmd.h
+13
-13
13 additions, 13 deletions
include/neural-graphics-primitives/openxr_hmd.h
src/openxr_hmd.cu
+11
-7
11 additions, 7 deletions
src/openxr_hmd.cu
src/testbed.cu
+2
-2
2 additions, 2 deletions
src/testbed.cu
with
26 additions
and
22 deletions
include/neural-graphics-primitives/openxr_hmd.h
+
13
−
13
View file @
fe2112ff
...
...
@@ -47,24 +47,24 @@
NGP_NAMESPACE_BEGIN
enum
class
EnvironmentBlendMode
{
enum
class
E
EnvironmentBlendMode
{
Opaque
=
XR_ENVIRONMENT_BLEND_MODE_OPAQUE
,
Additive
=
XR_ENVIRONMENT_BLEND_MODE_ADDITIVE
,
AlphaBlend
=
XR_ENVIRONMENT_BLEND_MODE_ALPHA_BLEND
,
};
inline
std
::
string
to_string
(
EnvironmentBlendMode
mode
)
{
inline
std
::
string
to_string
(
E
EnvironmentBlendMode
mode
)
{
switch
(
mode
)
{
case
EnvironmentBlendMode
::
Opaque
:
return
"Opaque"
;
case
EnvironmentBlendMode
::
Additive
:
return
"Additive"
;
case
EnvironmentBlendMode
::
AlphaBlend
:
return
"Blend"
;
case
E
EnvironmentBlendMode
::
Opaque
:
return
"Opaque"
;
case
E
EnvironmentBlendMode
::
Additive
:
return
"Additive"
;
case
E
EnvironmentBlendMode
::
AlphaBlend
:
return
"Blend"
;
default:
throw
std
::
runtime_error
{
"Invalid blend mode."
};
}
}
class
OpenXRHMD
{
public:
enum
class
ControlFlow
{
enum
class
E
ControlFlow
{
Continue
,
Restart
,
Quit
,
...
...
@@ -116,22 +116,22 @@ public:
void
clear
();
// poll events, handle state changes, return control flow information
ControlFlow
poll_events
();
E
ControlFlow
poll_events
();
// begin OpenXR frame, return views to render
FrameInfoPtr
begin_frame
();
// must be called for each begin_frame
void
end_frame
(
FrameInfoPtr
frame_info
,
float
znear
,
float
zfar
);
void
set_environment_blend_mode
(
EnvironmentBlendMode
mode
)
{
void
set_environment_blend_mode
(
E
EnvironmentBlendMode
mode
)
{
m_environment_blend_mode
=
mode
;
}
EnvironmentBlendMode
environment_blend_mode
()
const
{
E
EnvironmentBlendMode
environment_blend_mode
()
const
{
return
m_environment_blend_mode
;
}
const
std
::
vector
<
EnvironmentBlendMode
>&
supported_environment_blend_modes
()
const
{
const
std
::
vector
<
E
EnvironmentBlendMode
>&
supported_environment_blend_modes
()
const
{
return
m_supported_environment_blend_modes
;
}
...
...
@@ -177,7 +177,7 @@ private:
void
init_open_gl_shaders
();
// session state change
void
session_state_change
(
XrSessionState
state
,
ControlFlow
&
flow
);
void
session_state_change
(
XrSessionState
state
,
E
ControlFlow
&
flow
);
std
::
shared_ptr
<
Buffer2D
<
uint8_t
>>
rasterize_hidden_area_mask
(
uint32_t
view_index
,
const
XrCompositionLayerProjectionView
&
view
);
// system/instance
...
...
@@ -192,9 +192,9 @@ private:
XrViewConfigurationType
m_view_configuration_type
=
{};
XrViewConfigurationProperties
m_view_configuration_properties
=
{
XR_TYPE_VIEW_CONFIGURATION_PROPERTIES
};
std
::
vector
<
XrViewConfigurationView
>
m_view_configuration_views
;
std
::
vector
<
EnvironmentBlendMode
>
m_supported_environment_blend_modes
;
std
::
vector
<
E
EnvironmentBlendMode
>
m_supported_environment_blend_modes
;
std
::
vector
<
char
>
m_supported_environment_blend_modes_imgui_string
;
EnvironmentBlendMode
m_environment_blend_mode
=
EnvironmentBlendMode
::
Opaque
;
E
EnvironmentBlendMode
m_environment_blend_mode
=
E
EnvironmentBlendMode
::
Opaque
;
// actions
std
::
array
<
XrPath
,
2
>
m_hand_paths
;
...
...
This diff is collapsed.
Click to expand it.
src/openxr_hmd.cu
+
11
−
7
View file @
fe2112ff
...
...
@@ -451,7 +451,7 @@ void OpenXRHMD::init_check_for_xr_blend_mode() {
tlog
::
info
()
<<
fmt
::
format
(
"
\t
{}"
,
XrEnumStr
(
supported_blend_modes
[
i
]));
}
auto
b
=
(
EnvironmentBlendMode
)
supported_blend_modes
[
i
];
auto
b
=
(
E
EnvironmentBlendMode
)
supported_blend_modes
[
i
];
m_supported_environment_blend_modes
[
i
]
=
b
;
auto
b_str
=
to_string
(
b
);
...
...
@@ -802,7 +802,7 @@ void OpenXRHMD::init_open_gl_shaders() {
}
}
void
OpenXRHMD
::
session_state_change
(
XrSessionState
state
,
ControlFlow
&
flow
)
{
void
OpenXRHMD
::
session_state_change
(
XrSessionState
state
,
E
ControlFlow
&
flow
)
{
//tlog::info() << fmt::format("New session state {}", XrEnumStr(state));
switch
(
state
)
{
case
XR_SESSION_STATE_READY
:
{
...
...
@@ -816,11 +816,11 @@ void OpenXRHMD::session_state_change(XrSessionState state, ControlFlow& flow) {
break
;
}
case
XR_SESSION_STATE_EXITING
:
{
flow
=
ControlFlow
::
Quit
;
flow
=
E
ControlFlow
::
Quit
;
break
;
}
case
XR_SESSION_STATE_LOSS_PENDING
:
{
flow
=
ControlFlow
::
Restart
;
flow
=
E
ControlFlow
::
Restart
;
break
;
}
default
:
{
...
...
@@ -829,9 +829,9 @@ void OpenXRHMD::session_state_change(XrSessionState state, ControlFlow& flow) {
}
}
OpenXRHMD
::
ControlFlow
OpenXRHMD
::
poll_events
()
{
OpenXRHMD
::
E
ControlFlow
OpenXRHMD
::
poll_events
()
{
bool
more
=
true
;
ControlFlow
flow
=
ControlFlow
::
Continue
;
E
ControlFlow
flow
=
E
ControlFlow
::
Continue
;
while
(
more
)
{
// poll events
XrEventDataBuffer
event
{
XR_TYPE_EVENT_DATA_BUFFER
,
nullptr
};
...
...
@@ -852,7 +852,7 @@ OpenXRHMD::ControlFlow OpenXRHMD::poll_events() {
}
case
XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING
:
{
flow
=
ControlFlow
::
Restart
;
flow
=
E
ControlFlow
::
Restart
;
break
;
}
...
...
@@ -1234,6 +1234,10 @@ void OpenXRHMD::end_frame(FrameInfoPtr frame_info, float znear, float zfar) {
XrCompositionLayerProjection
layer
{
XR_TYPE_COMPOSITION_LAYER_PROJECTION
};
layer
.
space
=
m_space
;
if
(
m_environment_blend_mode
!=
EEnvironmentBlendMode
::
Opaque
)
{
layer
.
layerFlags
=
XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT
;
}
layer
.
viewCount
=
uint32_t
(
layer_projection_views
.
size
());
layer
.
views
=
layer_projection_views
.
data
();
...
...
This diff is collapsed.
Click to expand it.
src/testbed.cu
+
2
−
2
View file @
fe2112ff
...
...
@@ -2872,7 +2872,7 @@ void Testbed::update_vr_performance_settings() {
// If the environment is blended in (such as in XR/AR applications),
// DLSS causes jittering at object sillhouettes (doesn't deal well with alpha),
// and hence stays disabled.
m_dlss
=
(
blend_mode
==
EnvironmentBlendMode
::
Opaque
)
&&
m_dlss_provider
;
m_dlss
=
(
blend_mode
==
E
EnvironmentBlendMode
::
Opaque
)
&&
m_dlss_provider
;
// Foveated rendering is similarly vital in getting high performance without losing
// resolution in the middle of the view.
...
...
@@ -2887,7 +2887,7 @@ void Testbed::update_vr_performance_settings() {
// set background color to transparent and, in spherical_checkerboard_kernel(...),
// blend a checkerboard. If the user desires a solid background nonetheless, they can
// set the background color to have an alpha value of 1.0 manually via the GUI or via Python.
m_render_transparency_as_checkerboard
=
(
blend_mode
==
EnvironmentBlendMode
::
Opaque
);
m_render_transparency_as_checkerboard
=
(
blend_mode
==
E
EnvironmentBlendMode
::
Opaque
);
}
else
{
m_dlss
=
(
m_testbed_mode
==
ETestbedMode
::
Nerf
)
&&
m_dlss_provider
;
m_foveated_rendering
=
false
;
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment