From 2fc48e09bec4e3d702a30b87f67d83dadeea47e9 Mon Sep 17 00:00:00 2001 From: to_matih Date: Mon, 26 May 2025 16:08:32 +0100 Subject: [PATCH 1/6] Dummy monitor selector --- .../net/vulkanmod/config/option/Options.java | 12 ++++++++ .../config/video/VideoModeManager.java | 28 +++++++++++++++++-- .../assets/vulkanmod/lang/en_us.json | 4 ++- 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/vulkanmod/config/option/Options.java b/src/main/java/net/vulkanmod/config/option/Options.java index c52a8de73..1ebd6639b 100644 --- a/src/main/java/net/vulkanmod/config/option/Options.java +++ b/src/main/java/net/vulkanmod/config/option/Options.java @@ -15,6 +15,8 @@ import net.vulkanmod.vulkan.Renderer; import net.vulkanmod.vulkan.device.DeviceManager; +import static org.lwjgl.glfw.GLFW.glfwGetMonitorName; + import java.util.stream.IntStream; public abstract class Options { @@ -36,6 +38,15 @@ public static OptionBlock[] getVideoOpts() { VideoModeManager.selectedVideoMode = videoMode; var refreshRates = videoModeSet.getRefreshRates(); + CyclingOption monitorOption = (CyclingOption) new CyclingOption( + Component.translatable("vulkanmod.options.monitor"), + VideoModeManager.getMonitors(), + (value) -> { + VideoModeManager.selectedMonitor = value; + }, + () -> VideoModeManager.selectedMonitor + ).setTranslator(monitor_address -> Component.nullToEmpty(glfwGetMonitorName(monitor_address))); + CyclingOption RefreshRate = (CyclingOption) new CyclingOption<>( Component.translatable("vulkanmod.options.refreshRate"), refreshRates.toArray(new Integer[0]), @@ -77,6 +88,7 @@ public static OptionBlock[] getVideoOpts() { return new OptionBlock[]{ new OptionBlock("", new Option[]{ + monitorOption, resolutionOption, RefreshRate, new CyclingOption<>(Component.translatable("vulkanmod.options.windowMode"), diff --git a/src/main/java/net/vulkanmod/config/video/VideoModeManager.java b/src/main/java/net/vulkanmod/config/video/VideoModeManager.java index 985455a63..eccfd5687 100644 --- a/src/main/java/net/vulkanmod/config/video/VideoModeManager.java +++ b/src/main/java/net/vulkanmod/config/video/VideoModeManager.java @@ -10,15 +10,18 @@ import static org.lwjgl.glfw.GLFW.*; public abstract class VideoModeManager { + private static Long[] monitors; private static VideoModeSet.VideoMode osVideoMode; private static VideoModeSet[] videoModeSets; + public static long selectedMonitor; public static VideoModeSet.VideoMode selectedVideoMode; public static void init() { - long monitor = glfwGetPrimaryMonitor(); - osVideoMode = getCurrentVideoMode(monitor); - videoModeSets = populateVideoResolutions(GLFW.glfwGetPrimaryMonitor()); + selectedMonitor = glfwGetPrimaryMonitor(); + monitors = populateMonitors(); + osVideoMode = getCurrentVideoMode(selectedMonitor); + videoModeSets = populateVideoResolutions(selectedMonitor); } public static void applySelectedVideoMode() { @@ -93,4 +96,23 @@ public static VideoModeSet getFromVideoMode(VideoModeSet.VideoMode videoMode) { return null; } + + public static Long[] populateMonitors(){ + List monitors = new ArrayList<>(); + + var monitors_raw = glfwGetMonitors(); + for (int i = 0; i Date: Mon, 26 May 2025 16:18:24 +0100 Subject: [PATCH 2/6] Fullscreen target update --- src/main/java/net/vulkanmod/config/option/Options.java | 6 +++++- src/main/java/net/vulkanmod/mixin/window/WindowMixin.java | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/vulkanmod/config/option/Options.java b/src/main/java/net/vulkanmod/config/option/Options.java index 1ebd6639b..2f8dad277 100644 --- a/src/main/java/net/vulkanmod/config/option/Options.java +++ b/src/main/java/net/vulkanmod/config/option/Options.java @@ -16,6 +16,7 @@ import net.vulkanmod.vulkan.device.DeviceManager; import static org.lwjgl.glfw.GLFW.glfwGetMonitorName; +import static org.lwjgl.glfw.GLFW.glfwSetWindowMonitor; import java.util.stream.IntStream; @@ -38,11 +39,14 @@ public static OptionBlock[] getVideoOpts() { VideoModeManager.selectedVideoMode = videoMode; var refreshRates = videoModeSet.getRefreshRates(); - CyclingOption monitorOption = (CyclingOption) new CyclingOption( + CyclingOption monitorOption = (CyclingOption) new CyclingOption<>( Component.translatable("vulkanmod.options.monitor"), VideoModeManager.getMonitors(), (value) -> { VideoModeManager.selectedMonitor = value; + + if (minecraftOptions.fullscreen().get()) + fullscreenDirty = true; }, () -> VideoModeManager.selectedMonitor ).setTranslator(monitor_address -> Component.nullToEmpty(glfwGetMonitorName(monitor_address))); diff --git a/src/main/java/net/vulkanmod/mixin/window/WindowMixin.java b/src/main/java/net/vulkanmod/mixin/window/WindowMixin.java index 5f4c71ce8..a0a971d58 100644 --- a/src/main/java/net/vulkanmod/mixin/window/WindowMixin.java +++ b/src/main/java/net/vulkanmod/mixin/window/WindowMixin.java @@ -128,7 +128,7 @@ public void updateDisplay() { private void setMode() { Config config = Initializer.CONFIG; - long monitor = GLFW.glfwGetPrimaryMonitor(); + long monitor = VideoModeManager.selectedMonitor; if (this.fullscreen) { { VideoModeSet.VideoMode videoMode = config.videoMode; From 0c9e139a1ba13a5e110f84e3ad7bcfa0a02960a6 Mon Sep 17 00:00:00 2001 From: to_matih Date: Mon, 26 May 2025 17:28:30 +0100 Subject: [PATCH 3/6] Update resolution and refresh rate options --- .../net/vulkanmod/config/option/Options.java | 29 ++++++++++--------- .../config/video/VideoModeManager.java | 18 +++++++++--- .../vulkanmod/mixin/window/WindowMixin.java | 2 +- 3 files changed, 31 insertions(+), 18 deletions(-) diff --git a/src/main/java/net/vulkanmod/config/option/Options.java b/src/main/java/net/vulkanmod/config/option/Options.java index 2f8dad277..6c430cea2 100644 --- a/src/main/java/net/vulkanmod/config/option/Options.java +++ b/src/main/java/net/vulkanmod/config/option/Options.java @@ -39,18 +39,6 @@ public static OptionBlock[] getVideoOpts() { VideoModeManager.selectedVideoMode = videoMode; var refreshRates = videoModeSet.getRefreshRates(); - CyclingOption monitorOption = (CyclingOption) new CyclingOption<>( - Component.translatable("vulkanmod.options.monitor"), - VideoModeManager.getMonitors(), - (value) -> { - VideoModeManager.selectedMonitor = value; - - if (minecraftOptions.fullscreen().get()) - fullscreenDirty = true; - }, - () -> VideoModeManager.selectedMonitor - ).setTranslator(monitor_address -> Component.nullToEmpty(glfwGetMonitorName(monitor_address))); - CyclingOption RefreshRate = (CyclingOption) new CyclingOption<>( Component.translatable("vulkanmod.options.refreshRate"), refreshRates.toArray(new Integer[0]), @@ -64,7 +52,7 @@ public static OptionBlock[] getVideoOpts() { () -> VideoModeManager.selectedVideoMode.refreshRate) .setTranslator(refreshRate -> Component.nullToEmpty(refreshRate.toString())); - Option resolutionOption = new CyclingOption<>( + CyclingOption resolutionOption = (CyclingOption) new CyclingOption<>( Component.translatable("options.fullscreen.resolution"), VideoModeManager.getVideoResolutions(), (value) -> { @@ -90,6 +78,21 @@ public static OptionBlock[] getVideoOpts() { RefreshRate.setNewValue(newRefreshRates[newRefreshRates.length - 1]); }); + CyclingOption monitorOption = (CyclingOption) new CyclingOption<>( + Component.translatable("vulkanmod.options.monitor"), + VideoModeManager.getMonitors(), + (value) -> { + VideoModeManager.setSelectedMonitor(value); + + if (minecraftOptions.fullscreen().get()) + fullscreenDirty = true; + + resolutionOption.setValues(VideoModeManager.getVideoResolutions()); + resolutionOption.setNewValue(VideoModeManager.getFirstAvailable()); + }, + VideoModeManager::getSelectedMonitor + ).setTranslator(monitor_address -> Component.nullToEmpty(glfwGetMonitorName(monitor_address))); + return new OptionBlock[]{ new OptionBlock("", new Option[]{ monitorOption, diff --git a/src/main/java/net/vulkanmod/config/video/VideoModeManager.java b/src/main/java/net/vulkanmod/config/video/VideoModeManager.java index eccfd5687..79adae55f 100644 --- a/src/main/java/net/vulkanmod/config/video/VideoModeManager.java +++ b/src/main/java/net/vulkanmod/config/video/VideoModeManager.java @@ -14,14 +14,13 @@ public abstract class VideoModeManager { private static VideoModeSet.VideoMode osVideoMode; private static VideoModeSet[] videoModeSets; - public static long selectedMonitor; + private static long selectedMonitor; public static VideoModeSet.VideoMode selectedVideoMode; public static void init() { - selectedMonitor = glfwGetPrimaryMonitor(); monitors = populateMonitors(); - osVideoMode = getCurrentVideoMode(selectedMonitor); - videoModeSets = populateVideoResolutions(selectedMonitor); + setSelectedMonitor(glfwGetPrimaryMonitor()); + } public static void applySelectedVideoMode() { @@ -115,4 +114,15 @@ public static Long[] populateMonitors(){ public static Long[] getMonitors(){ return monitors; } + + public static long getSelectedMonitor() { + return selectedMonitor; + } + + public static void setSelectedMonitor(long new_monitor){ + selectedMonitor = new_monitor; + osVideoMode = getCurrentVideoMode(selectedMonitor); + videoModeSets = populateVideoResolutions(selectedMonitor); + selectedVideoMode = getFirstAvailable().getVideoMode(); + } } diff --git a/src/main/java/net/vulkanmod/mixin/window/WindowMixin.java b/src/main/java/net/vulkanmod/mixin/window/WindowMixin.java index a0a971d58..da6b86893 100644 --- a/src/main/java/net/vulkanmod/mixin/window/WindowMixin.java +++ b/src/main/java/net/vulkanmod/mixin/window/WindowMixin.java @@ -128,7 +128,7 @@ public void updateDisplay() { private void setMode() { Config config = Initializer.CONFIG; - long monitor = VideoModeManager.selectedMonitor; + long monitor = VideoModeManager.getSelectedMonitor(); if (this.fullscreen) { { VideoModeSet.VideoMode videoMode = config.videoMode; From d978a69ffe6d5ea4b35c58b20929d1d79e5daa00 Mon Sep 17 00:00:00 2001 From: to_matih Date: Mon, 26 May 2025 18:45:37 +0100 Subject: [PATCH 4/6] Choice persistence --- src/main/java/net/vulkanmod/config/Config.java | 1 + .../java/net/vulkanmod/config/option/Options.java | 2 ++ .../vulkanmod/config/video/VideoModeManager.java | 4 ++++ .../net/vulkanmod/mixin/window/WindowMixin.java | 15 ++++++++++++++- 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/vulkanmod/config/Config.java b/src/main/java/net/vulkanmod/config/Config.java index 05b4e7c62..f5b2a6277 100644 --- a/src/main/java/net/vulkanmod/config/Config.java +++ b/src/main/java/net/vulkanmod/config/Config.java @@ -15,6 +15,7 @@ public class Config { public VideoModeSet.VideoMode videoMode = VideoModeManager.getFirstAvailable().getVideoMode(); public int windowMode = 0; + public String monitor = ""; public int advCulling = 2; public boolean indirectDraw = true; diff --git a/src/main/java/net/vulkanmod/config/option/Options.java b/src/main/java/net/vulkanmod/config/option/Options.java index 6c430cea2..d0edf91c2 100644 --- a/src/main/java/net/vulkanmod/config/option/Options.java +++ b/src/main/java/net/vulkanmod/config/option/Options.java @@ -83,6 +83,8 @@ public static OptionBlock[] getVideoOpts() { VideoModeManager.getMonitors(), (value) -> { VideoModeManager.setSelectedMonitor(value); + VideoModeManager.applySelectedMonitor(); + VideoModeManager.applySelectedVideoMode(); if (minecraftOptions.fullscreen().get()) fullscreenDirty = true; diff --git a/src/main/java/net/vulkanmod/config/video/VideoModeManager.java b/src/main/java/net/vulkanmod/config/video/VideoModeManager.java index 79adae55f..db79d3747 100644 --- a/src/main/java/net/vulkanmod/config/video/VideoModeManager.java +++ b/src/main/java/net/vulkanmod/config/video/VideoModeManager.java @@ -125,4 +125,8 @@ public static void setSelectedMonitor(long new_monitor){ videoModeSets = populateVideoResolutions(selectedMonitor); selectedVideoMode = getFirstAvailable().getVideoMode(); } + + public static void applySelectedMonitor() { + Initializer.CONFIG.monitor = glfwGetMonitorName(selectedMonitor); + } } diff --git a/src/main/java/net/vulkanmod/mixin/window/WindowMixin.java b/src/main/java/net/vulkanmod/mixin/window/WindowMixin.java index da6b86893..4f3bcf60f 100644 --- a/src/main/java/net/vulkanmod/mixin/window/WindowMixin.java +++ b/src/main/java/net/vulkanmod/mixin/window/WindowMixin.java @@ -24,6 +24,8 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import java.util.Objects; + import static org.lwjgl.glfw.GLFW.*; @Mixin(Window.class) @@ -128,7 +130,18 @@ public void updateDisplay() { private void setMode() { Config config = Initializer.CONFIG; - long monitor = VideoModeManager.getSelectedMonitor(); + long monitor = 0; + for (var m : VideoModeManager.getMonitors()){ + var name = glfwGetMonitorName(m); + if (name.equals(config.monitor)){ + monitor = m; + break; + } + } + if(monitor == 0){ + monitor = glfwGetPrimaryMonitor(); + } + VideoModeManager.setSelectedMonitor(monitor); if (this.fullscreen) { { VideoModeSet.VideoMode videoMode = config.videoMode; From 05bb7540415f5d404a57062195cda65a3ecc03ba Mon Sep 17 00:00:00 2001 From: to_matih Date: Mon, 26 May 2025 19:03:52 +0100 Subject: [PATCH 5/6] Cleanup --- src/main/java/net/vulkanmod/config/Config.java | 2 +- .../java/net/vulkanmod/config/option/Options.java | 1 - .../net/vulkanmod/config/video/VideoModeManager.java | 12 ++++++------ .../java/net/vulkanmod/mixin/window/WindowMixin.java | 12 ++++++------ 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/main/java/net/vulkanmod/config/Config.java b/src/main/java/net/vulkanmod/config/Config.java index f5b2a6277..e2654055e 100644 --- a/src/main/java/net/vulkanmod/config/Config.java +++ b/src/main/java/net/vulkanmod/config/Config.java @@ -15,7 +15,7 @@ public class Config { public VideoModeSet.VideoMode videoMode = VideoModeManager.getFirstAvailable().getVideoMode(); public int windowMode = 0; - public String monitor = ""; + public String monitor = ""; // monitor is a pointer and can't be resued so name is used instead public int advCulling = 2; public boolean indirectDraw = true; diff --git a/src/main/java/net/vulkanmod/config/option/Options.java b/src/main/java/net/vulkanmod/config/option/Options.java index d0edf91c2..a134ae526 100644 --- a/src/main/java/net/vulkanmod/config/option/Options.java +++ b/src/main/java/net/vulkanmod/config/option/Options.java @@ -16,7 +16,6 @@ import net.vulkanmod.vulkan.device.DeviceManager; import static org.lwjgl.glfw.GLFW.glfwGetMonitorName; -import static org.lwjgl.glfw.GLFW.glfwSetWindowMonitor; import java.util.stream.IntStream; diff --git a/src/main/java/net/vulkanmod/config/video/VideoModeManager.java b/src/main/java/net/vulkanmod/config/video/VideoModeManager.java index db79d3747..a35e00b2f 100644 --- a/src/main/java/net/vulkanmod/config/video/VideoModeManager.java +++ b/src/main/java/net/vulkanmod/config/video/VideoModeManager.java @@ -96,12 +96,12 @@ public static VideoModeSet getFromVideoMode(VideoModeSet.VideoMode videoMode) { return null; } - public static Long[] populateMonitors(){ + public static Long[] populateMonitors() { List monitors = new ArrayList<>(); - var monitors_raw = glfwGetMonitors(); - for (int i = 0; i Date: Sat, 5 Jul 2025 18:30:56 +0100 Subject: [PATCH 6/6] Typo fix --- src/main/java/net/vulkanmod/config/Config.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/vulkanmod/config/Config.java b/src/main/java/net/vulkanmod/config/Config.java index e2654055e..511ef5eb2 100644 --- a/src/main/java/net/vulkanmod/config/Config.java +++ b/src/main/java/net/vulkanmod/config/Config.java @@ -15,7 +15,7 @@ public class Config { public VideoModeSet.VideoMode videoMode = VideoModeManager.getFirstAvailable().getVideoMode(); public int windowMode = 0; - public String monitor = ""; // monitor is a pointer and can't be resued so name is used instead + public String monitor = ""; // monitor is a pointer and can't be reused so name is used instead public int advCulling = 2; public boolean indirectDraw = true;