mirror of
https://gitea.shironeko-all.duckdns.org/shironeko/Hytale-F2P-2.git
synced 2026-02-26 10:41:46 -03:00
Merge GPU preference feature branch to main branch version 2.0.2 for testing (#3)
* modernized UI for GPU Preference option * feat: auto-detect dedicated GPU on hybrid laptops (iGPU+dGPU) * feat: detailed GPU info in auto-detection feature on startup * feat: add GPU options for launcher - Add GPU preference setting (Auto/Integrated/Dedicated) - Implement Linux GPU selection with DRI_PRIME and NVIDIA env vars - Add GPU detection using Electron's app.getGPUInfo() - Update settings UI with GPU preference dropdown - Integrate GPU preference into game launch process * feat: auto-detect dedicated GPU on hybrid laptops (iGPU+dGPU) * added fallbacks to and option to use integrated GPU. * add package-lock and fix deps version * changed 'Nvidia' string to 'NVIDIA' * fix: selecting `dedicated` option while using nvidia GPU did not set its specific env variables * remove unused `CONFIG_FILE` variable on launcher core modules * fix: duplicated save-load gpu detection functions * move game option settings to the top, while custom java to the bottom * fix: settings-header margin-bottom from 3rem to 1rem and supress line-clamp warning
This commit is contained in:
@@ -5,6 +5,7 @@ let customJavaPath;
|
||||
let browseJavaBtn;
|
||||
let settingsPlayerName;
|
||||
let discordRPCCheck;
|
||||
let gpuPreferenceRadios;
|
||||
|
||||
// UUID Management elements
|
||||
let currentUuidDisplay;
|
||||
@@ -142,6 +143,7 @@ function showCustomConfirm(message, title = 'Confirm Action', onConfirm, onCance
|
||||
document.addEventListener('keydown', handleEscape);
|
||||
}
|
||||
|
||||
|
||||
export function initSettings() {
|
||||
setupSettingsElements();
|
||||
loadAllSettings();
|
||||
@@ -154,6 +156,7 @@ function setupSettingsElements() {
|
||||
browseJavaBtn = document.getElementById('browseJavaBtn');
|
||||
settingsPlayerName = document.getElementById('settingsPlayerName');
|
||||
discordRPCCheck = document.getElementById('discordRPCCheck');
|
||||
gpuPreferenceRadios = document.querySelectorAll('input[name="gpuPreference"]');
|
||||
|
||||
// UUID Management elements
|
||||
currentUuidDisplay = document.getElementById('currentUuid');
|
||||
@@ -226,6 +229,15 @@ function setupSettingsElements() {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (gpuPreferenceRadios) {
|
||||
gpuPreferenceRadios.forEach(radio => {
|
||||
radio.addEventListener('change', async () => {
|
||||
await saveGpuPreference();
|
||||
await updateGpuLabel();
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function toggleCustomJava() {
|
||||
@@ -361,11 +373,85 @@ async function loadPlayerName() {
|
||||
}
|
||||
}
|
||||
|
||||
async function saveGpuPreference() {
|
||||
try {
|
||||
if (window.electronAPI && window.electronAPI.saveGpuPreference && gpuPreferenceRadios) {
|
||||
const gpuPreference = Array.from(gpuPreferenceRadios).find(radio => radio.checked)?.value || 'auto';
|
||||
await window.electronAPI.saveGpuPreference(gpuPreference);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error saving GPU preference:', error);
|
||||
}
|
||||
}
|
||||
|
||||
async function updateGpuLabel() {
|
||||
const detectionInfo = document.getElementById('gpu-detection-info');
|
||||
if (!detectionInfo) return;
|
||||
|
||||
if (gpuPreferenceRadios) {
|
||||
const checked = Array.from(gpuPreferenceRadios).find(radio => radio.checked);
|
||||
if (checked) {
|
||||
try {
|
||||
if (window.electronAPI && window.electronAPI.getDetectedGpu) {
|
||||
const detected = await window.electronAPI.getDetectedGpu();
|
||||
if (checked.value === 'auto') {
|
||||
if (detected.dedicatedName) {
|
||||
detectionInfo.textContent = `dGPU detected, using ${detected.dedicatedName}`;
|
||||
} else {
|
||||
detectionInfo.textContent = `dGPU not detected, using iGPU (${detected.integratedName}) instead`;
|
||||
}
|
||||
detectionInfo.style.display = 'block';
|
||||
} else if (checked.value === 'integrated') {
|
||||
detectionInfo.textContent = `Detected: ${detected.integratedName}`;
|
||||
detectionInfo.style.display = 'block';
|
||||
} else if (checked.value === 'dedicated') {
|
||||
if (detected.dedicatedName) {
|
||||
detectionInfo.textContent = `Detected: ${detected.dedicatedName}`;
|
||||
} else {
|
||||
detectionInfo.textContent = `No dedicated GPU detected`;
|
||||
}
|
||||
detectionInfo.style.display = 'block';
|
||||
} else {
|
||||
detectionInfo.style.display = 'none';
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error getting detected GPU:', error);
|
||||
detectionInfo.style.display = 'none';
|
||||
}
|
||||
} else {
|
||||
detectionInfo.style.display = 'none';
|
||||
}
|
||||
} else {
|
||||
detectionInfo.style.display = 'none';
|
||||
}
|
||||
}
|
||||
|
||||
async function loadGpuPreference() {
|
||||
try {
|
||||
if (window.electronAPI && window.electronAPI.loadGpuPreference && gpuPreferenceRadios) {
|
||||
const savedPreference = await window.electronAPI.loadGpuPreference();
|
||||
if (savedPreference) {
|
||||
for (const radio of gpuPreferenceRadios) {
|
||||
if (radio.value === savedPreference) {
|
||||
radio.checked = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
await updateGpuLabel();
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error loading GPU preference:', error);
|
||||
}
|
||||
}
|
||||
|
||||
async function loadAllSettings() {
|
||||
await loadCustomJavaPath();
|
||||
await loadPlayerName();
|
||||
await loadCurrentUuid();
|
||||
await loadDiscordRPC();
|
||||
await loadGpuPreference();
|
||||
}
|
||||
|
||||
async function openGameLocation() {
|
||||
|
||||
Reference in New Issue
Block a user