mirror of
https://github.com/DramaticShape/DramaticShapeVoxelMod.git
synced 2026-08-12 20:00:51 +02:00
62 lines
2.1 KiB
Lua
62 lines
2.1 KiB
Lua
-- Scratch driver: exercise the VR stack against the real machine -- the
|
|
-- FFI cdefs compile, the loader DLL loads, LOVE's GL context and canvas
|
|
-- framebuffers are discoverable, and the OpenXR instance either comes up
|
|
-- (headset present) or reports exactly why not (no runtime / no HMD).
|
|
-- With a headset connected and the runtime up, it holds a VR session open
|
|
-- for ten seconds of frames: diorama first, then the 1ST rung.
|
|
--
|
|
-- POKEPORT_DRIVER=mods/DramaticShapeVoxelMod/tests/vr_probe.lua \
|
|
-- lovec.exe .
|
|
return function(game)
|
|
local U = dofile("tests/drivers/util.lua")
|
|
local Pipelines = require("src.render.Pipelines")
|
|
|
|
local handle = game.mods.exports["DRAMATIC_SHAPE"]
|
|
if not (handle and handle.lib) then
|
|
print("[vr] DRAMATIC_SHAPE mod not loaded")
|
|
return love.event.quit()
|
|
end
|
|
local V = handle.lib
|
|
local VR = V.require("VR")
|
|
local VRGL = V.require("VRGL")
|
|
local Voxel = V.require("VoxelState")
|
|
|
|
U.teleport(game, "PALLET_TOWN", 10, 12, "down")
|
|
Pipelines.setLevel("voxel", 2)
|
|
U.wait(30)
|
|
|
|
-- the GL floor the whole thing stands on
|
|
local okGL = VRGL.load()
|
|
print("[vr] GL interop: " .. tostring(okGL) .. " -- " .. VRGL.status())
|
|
local hdc, hglrc = VRGL.contexts()
|
|
print("[vr] wgl contexts: " .. tostring(hdc) .. " / " .. tostring(hglrc))
|
|
local okC, c = pcall(love.graphics.newCanvas, 64, 64)
|
|
if okC then
|
|
print("[vr] canvas FBO discovery: " .. tostring(VRGL.canvasFBO(c)))
|
|
end
|
|
|
|
-- the OpenXR stack, driven by the same row the player would use
|
|
VR.setting:sync(true)
|
|
for _ = 1, 300 do
|
|
U.wait(1)
|
|
if VR.active() or VR.status():find("XR_ERROR") then break end
|
|
end
|
|
print("[vr] status: " .. VR.status())
|
|
print("[vr] active: " .. tostring(VR.active()))
|
|
|
|
if VR.active() then
|
|
print("[vr] holding a diorama session for ~5s of frames")
|
|
U.wait(450)
|
|
print("[vr] switching to 1ST for ~5s of frames")
|
|
Pipelines.setLevel("voxel", Voxel.FP_LEVEL)
|
|
U.wait(450)
|
|
print("[vr] still active: " .. tostring(VR.active())
|
|
.. " -- " .. VR.status())
|
|
end
|
|
|
|
VR.setting:sync(false)
|
|
U.wait(10)
|
|
print("[vr] after toggle off: " .. VR.status())
|
|
love.event.quit()
|
|
end
|