Forum Replies Created
-
AuthorPosts
-
Mar 22, 2026 at 1:07am in reply to: Request to disable burn-in protection — medical use case (PTSD eye therapy) #222958
Maximus0079ParticipantHi Ralf,
Thanks for the insight — that confirms what we experienced. We actually tried hooking GetTrackedDeviceActivityLevel first but could never intercept the calls. Your note about vpenvr_api.dll being a renamed openxr_api.dll explains why we were hooking the wrong thing!
What ended up working is patching vpenvr_api.dll directly at runtime. We identified the function that gates frame submission (we’re calling it PrepFrame internally). It has three nested conditionals that all need to pass before Submit gets called:
1. A range check on an internal state variable (JA)
2. A result check from an internal validation call (JZ)
3. A flag check on a struct member (another JZ)We NOP all three jumps via a proxy DLL (yours gets renamed to vpenvr_api_real.dll, we forward all OpenVR calls transparently). This forces PrepFrame to always reach the success path → Submit proceeds → no more idle/GAP trigger.
Works great with **Z-Buffer rendering** — rock solid, zero idle triggers. But we’ve noticed it **doesn’t work in Geometry 3D mode** — the idle behavior comes back. Same game, same setup, only the vorpX rendering mode changes. Does Geometry mode use a different frame submission pipeline that would bypass PrepFrame entirely?
Any pointer would be much appreciated. Thanks again!
-
AuthorPosts
