Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
1130c21
get deps
ferriarnus Oct 1, 2023
a316765
Error setting session
ferriarnus Oct 3, 2023
33a781f
setup rendering [broken]
ferriarnus Oct 4, 2023
f0d04f4
renders something
ferriarnus Oct 5, 2023
22c3f9a
it renders the game
ferriarnus Oct 5, 2023
1d07459
add destroy logic
ferriarnus Oct 8, 2023
ff03fc6
add some key action registry
ferriarnus Nov 1, 2023
912c187
add default binds for the vive
ferriarnus Nov 2, 2023
21983e1
Update MCOpenXR.java
ferriarnus Nov 2, 2023
7dbcbea
Update MCOpenXR.java
ferriarnus Nov 3, 2023
4e88bae
remove openVR from binds
ferriarnus Nov 3, 2023
6ead94d
remove more openVR
ferriarnus Nov 3, 2023
654777c
better bindings and setup for controller poses
ferriarnus Nov 4, 2023
26ef486
more tracking stuff
ferriarnus Nov 5, 2023
86ec8f4
add HMD tracking
ferriarnus Nov 5, 2023
055f8a1
Update MCOpenXR.java
ferriarnus Nov 5, 2023
8c460fd
fix rotation partially
ferriarnus Nov 6, 2023
24e9638
more aim stuff
ferriarnus Nov 6, 2023
4333a8a
Update MCOpenXR.java
ferriarnus Nov 6, 2023
dd8ac11
Update MCOpenXR.java
ferriarnus Nov 6, 2023
7fd6d93
fix pose delay and add origin method
ferriarnus Nov 7, 2023
55e7d80
fix hands, colors and originame(temp)
ferriarnus Nov 7, 2023
3c3c5ba
add reverse hands and haptics
ferriarnus Nov 7, 2023
e29dbc0
fix session and instance destruction
ferriarnus Nov 7, 2023
52fa806
start quest + hotswap support
ferriarnus Dec 5, 2023
0577c62
"fix" prev commit
ferriarnus Dec 5, 2023
54def9a
fix tracking
ferriarnus Dec 6, 2023
1292fb9
fix mirror
ferriarnus Dec 12, 2023
58efefa
fix hotswitching
ferriarnus Dec 13, 2023
935cd3e
Merge remote-tracking branch 'upstream/Multiloader-1.20' into test
ferriarnus Jan 20, 2024
bf36f2b
Update VRState.java
ferriarnus Jan 20, 2024
24f52af
settings
ferriarnus Jan 21, 2024
04d7a3a
Merge branch 'Multiloader-1.20.4' into test
ferriarnus Mar 28, 2024
42956e3
update *yet again*
ferriarnus Mar 28, 2024
0f2c201
Update GuiRenderOpticsSettings.java
ferriarnus Mar 28, 2024
68411fe
fix cosmos key capitalization
fayer3 Apr 3, 2024
71c3c64
Update build.gradle
ferriarnus Apr 4, 2024
c35565d
fix quest 3 detection
fayer3 Apr 16, 2024
efd2c2b
fix wrong method call for createAction
fayer3 Apr 16, 2024
1ca4990
log all the errors
fayer3 Apr 16, 2024
7c6a806
Merge branch 'Multiloader-1.20.4' into test
ferriarnus Aug 1, 2024
cb2e183
small update
ferriarnus Aug 1, 2024
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
5 changes: 5 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ subprojects {
implementation("org.lwjgl:lwjgl-openvr:3.3.2:natives-linux")
implementation("org.lwjgl:lwjgl-openvr:3.3.2:natives-macos")
implementation("org.lwjgl:lwjgl-openvr:3.3.2:natives-windows")

implementation("org.lwjgl:lwjgl-openxr:3.3.2")
implementation("org.lwjgl:lwjgl-openxr:3.3.2:natives-linux")
//implementation("org.lwjgl:lwjgl-openxr:3.3.2:natives-macos")
implementation("org.lwjgl:lwjgl-openxr:3.3.2:natives-windows")
}

tasks.withType(JavaCompile) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ public interface RenderTargetExtension {

void vivecraft$setTextid(int texid);

void vivecraft$setColorid(int colorid);

void vivecraft$setUseStencil(boolean useStencil);

boolean vivecraft$getUseStencil();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public class GuiRenderOpticsSettings extends GuiVROptionsBase {
VRSettings.VrOptions.HANDHELD_CAMERA_RENDER_SCALE,
VRSettings.VrOptions.HANDHELD_CAMERA_FOV,
VRSettings.VrOptions.RELOAD_EXTERNAL_CAMERA,
VRSettings.VrOptions.MIRROR_EYE
VRSettings.VrOptions.MIRROR_EYE,
};
static VRSettings.VrOptions[] MROptions = new VRSettings.VrOptions[]{
VRSettings.VrOptions.MIXED_REALITY_UNITY_LIKE,
Expand Down
36 changes: 19 additions & 17 deletions common/src/main/java/org/vivecraft/client_vr/VRState.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import org.vivecraft.client_vr.menuworlds.MenuWorldRenderer;
import org.vivecraft.client_vr.provider.nullvr.NullVR;
import org.vivecraft.client_vr.provider.openvr_lwjgl.MCOpenVR;
import org.vivecraft.client_vr.provider.openxr.MCOpenXR;
import org.vivecraft.client_vr.render.RenderConfigException;
import org.vivecraft.client_vr.settings.VRSettings;
import org.vivecraft.client_xr.render_pass.RenderPassManager;
Expand Down Expand Up @@ -40,33 +41,34 @@ public static void initializeVR() {

vrInitialized = true;
ClientDataHolderVR dh = ClientDataHolderVR.getInstance();
if (dh.vrSettings.stereoProviderPluginID == VRSettings.VRProvider.OPENVR) {
// make sure the lwjgl version is the right one
// TODO: move this into the init, does mean all callocs need to be done later
// check that the right lwjgl version is loaded that we ship the openvr part of
if (!Version.getVersion().startsWith("3.3.2")) {
String suppliedJar = "";
try {
suppliedJar = new File(Version.class.getProtectionDomain().getCodeSource().getLocation().getPath()).getName();
} catch (Exception e) {
VRSettings.logger.error("couldn't check lwjgl source:", e);
}

throw new RenderConfigException("VR Init Error", Component.translatable("vivecraft.messages.rendersetupfailed", I18n.get("vivecraft.messages.invalidlwjgl", Version.getVersion(), "3.3.2", suppliedJar), "OpenVR_LWJGL"));
Minecraft instance = Minecraft.getInstance();
// make sure the lwjgl version is the right one
// TODO: move this into the init, does mean all callocs need to be done later
// check that the right lwjgl version is loaded that we ship the openvr part of
if (!Version.getVersion().startsWith("3.3.2")) {
String suppliedJar = "";
try {
suppliedJar = new File(Version.class.getProtectionDomain().getCodeSource().getLocation().getPath()).getName();
} catch (Exception e) {
VRSettings.logger.error("couldn't check lwjgl source:", e);
}

dh.vr = new MCOpenVR(Minecraft.getInstance(), dh);
} else {
dh.vr = new NullVR(Minecraft.getInstance(), dh);
throw new RenderConfigException("VR Init Error", Component.translatable("vivecraft.messages.rendersetupfailed", I18n.get("vivecraft.messages.invalidlwjgl", Version.getVersion(), "3.3.2", suppliedJar), "OpenVR_LWJGL"));
}
switch (dh.vrSettings.stereoProviderPluginID) {
case OPENVR -> dh.vr = new MCOpenVR(instance, dh);
case OPENXR -> dh.vr = new MCOpenXR(instance, dh);
default -> dh.vr = new NullVR(instance, dh);
}

if (!dh.vr.init()) {
throw new RenderConfigException("VR Init Error", Component.translatable("vivecraft.messages.rendersetupfailed", dh.vr.initStatus, dh.vr.getName()));
}

dh.vrRenderer = dh.vr.createVRRenderer();
dh.vrRenderer.lastGuiScale = Minecraft.getInstance().options.guiScale().get();

dh.vrRenderer.setupRenderConfiguration();
dh.vrRenderer.setupRenderConfiguration(false); //TODO look into why I have the boolean
RenderPassManager.setVanillaRenderPass();

dh.vrPlayer = new VRPlayer();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
package org.vivecraft.client_vr;

import com.mojang.blaze3d.pipeline.RenderTarget;
import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.Minecraft;
import org.lwjgl.opengl.GL30;
import org.vivecraft.client.Xplat;
import org.vivecraft.client.extensions.RenderTargetExtension;

public class VRTextureTarget extends RenderTarget {

private final String name;

public VRTextureTarget(String name, int width, int height, boolean usedepth, boolean onMac, int texid, boolean depthtex, boolean linearFilter, boolean useStencil) {
super(usedepth);
this.name = name;
Expand All @@ -23,6 +25,17 @@ public VRTextureTarget(String name, int width, int height, boolean usedepth, boo
this.setClearColor(0, 0, 0, 0);
}

public VRTextureTarget(String name, int width, int height, int colorid, int index) {
super(true);
this.name = name;
RenderSystem.assertOnGameThreadOrInit();
this.resize(width, height, Minecraft.ON_OSX);
((RenderTargetExtension) this).vivecraft$setColorid(colorid);
GlStateManager._glBindFramebuffer(GL30.GL_FRAMEBUFFER, frameBufferId);
GL30.glFramebufferTextureLayer(GL30.GL_FRAMEBUFFER, GL30.GL_COLOR_ATTACHMENT0, colorid, 0, index);
this.setClearColor(0, 0, 0, 0);
}

@Override
public String toString() {
StringBuilder stringbuilder = new StringBuilder();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import net.minecraft.network.chat.Component;
import org.vivecraft.client.gui.framework.TwoHandedScreen;
import org.vivecraft.client_vr.provider.MCVR;
import org.vivecraft.client_vr.provider.openvr_lwjgl.VRInputAction;
import org.vivecraft.client_vr.provider.control.VRInputAction;

public class GuiRadial extends TwoHandedScreen {
private boolean isShift = false;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package org.vivecraft.client_vr.provider;

import org.vivecraft.client_vr.provider.openvr_lwjgl.control.VRInputActionSet;
import org.vivecraft.client_vr.provider.control.VRInputActionSet;

public class ActionParams {
public final VRInputActionSet actionSetOverride;
Expand Down
126 changes: 122 additions & 4 deletions common/src/main/java/org/vivecraft/client_vr/provider/MCVR.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.vivecraft.client_vr.provider;

import com.mojang.blaze3d.platform.InputConstants;
import net.minecraft.client.KeyMapping;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.ChatScreen;
Expand All @@ -25,9 +26,10 @@
import org.vivecraft.client_vr.gameplay.screenhandlers.GuiHandler;
import org.vivecraft.client_vr.gameplay.screenhandlers.KeyboardHandler;
import org.vivecraft.client_vr.gameplay.screenhandlers.RadialHandler;
import org.vivecraft.client_vr.provider.openvr_lwjgl.VRInputAction;
import org.vivecraft.client_vr.provider.openvr_lwjgl.control.VRInputActionSet;
import org.vivecraft.client_vr.provider.openvr_lwjgl.control.VivecraftMovementInput;
import org.vivecraft.client_vr.provider.control.TrackpadSwipeSampler;
import org.vivecraft.client_vr.provider.control.VRInputAction;
import org.vivecraft.client_vr.provider.control.VRInputActionSet;
import org.vivecraft.client_vr.provider.control.VivecraftMovementInput;
import org.vivecraft.client_vr.render.RenderConfigException;
import org.vivecraft.client_vr.render.RenderPass;
import org.vivecraft.client_vr.settings.VRHotkeys;
Expand Down Expand Up @@ -108,6 +110,8 @@ public abstract class MCVR {
protected int quickTorchPreviousSlot;
protected Map<String, VRInputAction> inputActions = new HashMap<>();
protected Map<String, VRInputAction> inputActionsByKeyBinding = new HashMap<>();
protected final Map<String, TrackpadSwipeSampler> trackpadSwipeSamplers = new HashMap<>();
protected boolean inputInitialized;

public MCVR(Minecraft mc, ClientDataHolderVR dh, VivecraftVRMod vrMod) {
this.mc = mc;
Expand All @@ -131,7 +135,50 @@ public static MCVR get() {

public abstract String getID();

public abstract void processInputs();
public void processInputs() {
if (!this.dh.vrSettings.seated && !ClientDataHolderVR.viewonly && this.inputInitialized) {
for (VRInputAction vrinputaction : this.inputActions.values()) {
if (vrinputaction.isHanded()) {
for (ControllerType controllertype : ControllerType.values()) {
vrinputaction.setCurrentHand(controllertype);
this.processInputAction(vrinputaction);
}
} else {
this.processInputAction(vrinputaction);
}
}

this.processScrollInput(GuiHandler.keyScrollAxis, () ->
{
InputSimulator.scrollMouse(0.0D, 1.0D);
}, () ->
{
InputSimulator.scrollMouse(0.0D, -1.0D);
});
this.processScrollInput(VivecraftVRMod.INSTANCE.keyHotbarScroll, () ->
{
this.changeHotbar(-1);
}, () ->
{
this.changeHotbar(1);
});
this.processSwipeInput(VivecraftVRMod.INSTANCE.keyHotbarSwipeX, () ->
{
this.changeHotbar(1);
}, () ->
{
this.changeHotbar(-1);
}, null, null);
this.processSwipeInput(VivecraftVRMod.INSTANCE.keyHotbarSwipeY, null, null, () ->
{
this.changeHotbar(-1);
}, () ->
{
this.changeHotbar(1);
});
this.ignorePressesNextFrame = false;
}
}

public abstract void destroy();

Expand Down Expand Up @@ -1145,6 +1192,76 @@ protected void changeHotbar(int dir) {
}
}

protected void processInputAction(VRInputAction action) {
if (action.isActive() && action.isEnabledRaw()
// try to prevent double left clicks
&& (!ClientDataHolderVR.getInstance().vrSettings.ingameBindingsInGui
|| !(action.actionSet == VRInputActionSet.INGAME && action.keyBinding.key.getType() == InputConstants.Type.MOUSE && action.keyBinding.key.getValue() == 0 && mc.screen != null))) {
if (action.isButtonChanged()) {
if (action.isButtonPressed() && action.isEnabled()) {
if (!this.ignorePressesNextFrame) {
action.pressBinding();
}
} else {
action.unpressBinding();
}
}
} else {
action.unpressBinding();
}
}

protected void processScrollInput(KeyMapping keyBinding, Runnable upCallback, Runnable downCallback) {
VRInputAction vrinputaction = this.getInputAction(keyBinding);

if (vrinputaction.isEnabled() && vrinputaction.getLastOrigin() != 0L && vrinputaction.getAxis2D(true).getY() != 0.0F) {
float f = vrinputaction.getAxis2D(false).getY();

if (f > 0.0F) {
upCallback.run();
} else if (f < 0.0F) {
downCallback.run();
}
}
}

protected void processSwipeInput(KeyMapping keyBinding, Runnable leftCallback, Runnable rightCallback, Runnable upCallback, Runnable downCallback) {
VRInputAction vrinputaction = this.getInputAction(keyBinding);

if (vrinputaction.isEnabled() && vrinputaction.getLastOrigin() != 0L) {
ControllerType controllertype = this.findActiveBindingControllerType(keyBinding);

if (controllertype != null) {
if (!this.trackpadSwipeSamplers.containsKey(keyBinding.getName())) {
this.trackpadSwipeSamplers.put(keyBinding.getName(), new TrackpadSwipeSampler());
}

TrackpadSwipeSampler trackpadswipesampler = this.trackpadSwipeSamplers.get(keyBinding.getName());
trackpadswipesampler.update(controllertype, vrinputaction.getAxis2D(false));

if (trackpadswipesampler.isSwipedUp() && upCallback != null) {
this.triggerHapticPulse(controllertype, 0.001F, 400.0F, 0.5F);
upCallback.run();
}

if (trackpadswipesampler.isSwipedDown() && downCallback != null) {
this.triggerHapticPulse(controllertype, 0.001F, 400.0F, 0.5F);
downCallback.run();
}

if (trackpadswipesampler.isSwipedLeft() && leftCallback != null) {
this.triggerHapticPulse(controllertype, 0.001F, 400.0F, 0.5F);
leftCallback.run();
}

if (trackpadswipesampler.isSwipedRight() && rightCallback != null) {
this.triggerHapticPulse(controllertype, 0.001F, 400.0F, 0.5F);
rightCallback.run();
}
}
}
}

private void addActionParams(Map<String, ActionParams> map, KeyMapping keyBinding, String requirement, String type, VRInputActionSet actionSetOverride) {
ActionParams actionparams = new ActionParams(requirement, type, actionSetOverride);
map.put(keyBinding.getName(), actionparams);
Expand Down Expand Up @@ -1174,6 +1291,7 @@ private void addActionParams(Map<String, ActionParams> map, KeyMapping keyBindin

public abstract boolean isActive();

public abstract ControllerType getOriginControllerType(long i);
public boolean capFPS() {
return false;
}
Expand Down
Loading