Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SciView: fix VR toggling to change to stereo rendering #590

Merged
merged 2 commits into from
May 21, 2024
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 13 additions & 7 deletions src/main/kotlin/sc/iview/SciView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -1668,6 +1668,8 @@ class SciView : SceneryBase, CalibratedRealInterval<CalibratedAxis> {
* Enable VR rendering
*/
fun toggleVRRendering() {
var renderer = renderer ?: return

vrActive = !vrActive
val cam = scene.activeObserver as? DetachedHeadCamera ?: return
var ti: TrackerInput? = null
Expand All @@ -1690,25 +1692,29 @@ class SciView : SceneryBase, CalibratedRealInterval<CalibratedAxis> {
}
if (vrActive && ti != null) {
cam.tracker = ti
logger.info("tracker set")
smlpt marked this conversation as resolved.
Show resolved Hide resolved
} else {
cam.tracker = null
}
renderer!!.pushMode = false
renderer.pushMode = false

// we need to force reloading the renderer as the HMD might require device or instance extensions
if (renderer is VulkanRenderer && hmdAdded) {
replaceRenderer((renderer as VulkanRenderer).javaClass.simpleName, true, true)
(renderer as VulkanRenderer).toggleVR()
while (!(renderer as VulkanRenderer).initialized /* || !getRenderer().getFirstImageReady()*/) {
logger.debug("Waiting for renderer reinitialisation")
replaceRenderer(renderer.javaClass.simpleName, true, true)

logger.info("renderer replaced")
smlpt marked this conversation as resolved.
Show resolved Hide resolved
while (renderer.initialized == false || renderer.firstImageReady == false) {
renderer = this.renderer!!
logger.info("Waiting for renderer reinitialisation (init: ${renderer.initialized} ready: ${renderer.firstImageReady}")
try {
Thread.sleep(200)
} catch (e: InterruptedException) {
e.printStackTrace()
}
}
} else {
renderer!!.toggleVR()
}

renderer.toggleVR()
smlpt marked this conversation as resolved.
Show resolved Hide resolved
}

/**
Expand Down
Loading