From eb1c32ee61d4d4098feb1441ea5bf3b73f520780 Mon Sep 17 00:00:00 2001 From: xXJSONDeruloXx Date: Wed, 16 Jul 2025 10:42:54 -0400 Subject: initial add of fps cap ui toggle --- src/hooks/useLsfgHooks.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/hooks') diff --git a/src/hooks/useLsfgHooks.ts b/src/hooks/useLsfgHooks.ts index ad04305..f765ce6 100644 --- a/src/hooks/useLsfgHooks.ts +++ b/src/hooks/useLsfgHooks.ts @@ -77,6 +77,7 @@ export function useLsfgConfig() { const [perfMode, setPerfMode] = useState(true); const [immediateMode, setImmediateMode] = useState(false); const [disableVkbasalt, setDisableVkbasalt] = useState(true); + const [frameCap, setFrameCap] = useState(0); const loadLsfgConfig = async () => { try { @@ -89,6 +90,7 @@ export function useLsfgConfig() { setPerfMode(result.config.perf_mode); setImmediateMode(result.config.immediate_mode); setDisableVkbasalt(result.config.disable_vkbasalt); + setFrameCap(result.config.frame_cap); console.log("Loaded lsfg config:", result.config); } else { console.log("lsfg config not available, using defaults:", result.error); @@ -105,7 +107,8 @@ export function useLsfgConfig() { newHdr: boolean, newPerfMode: boolean, newImmediateMode: boolean, - newDisableVkbasalt: boolean + newDisableVkbasalt: boolean, + newFrameCap: number ): Promise => { try { const result = await updateLsfgConfig( @@ -115,7 +118,8 @@ export function useLsfgConfig() { newHdr, newPerfMode, newImmediateMode, - newDisableVkbasalt + newDisableVkbasalt, + newFrameCap ); if (!result.success) { toaster.toast({ @@ -145,7 +149,8 @@ export function useLsfgConfig() { hdr, perfMode, immediateMode, - disableVkbasalt + disableVkbasalt, + frameCap }, setters: { setEnableLsfg, @@ -154,7 +159,8 @@ export function useLsfgConfig() { setHdr, setPerfMode, setImmediateMode, - setDisableVkbasalt + setDisableVkbasalt, + setFrameCap }, loadLsfgConfig, updateConfig -- cgit v1.2.3 From 7868396718b13443209e7c5d83a2c96cd7eee31e Mon Sep 17 00:00:00 2001 From: xXJSONDeruloXx Date: Wed, 16 Jul 2025 13:54:09 -0400 Subject: centralized configuration system for lsfg-vk params --- src/hooks/useLsfgHooks.ts | 91 ++++++++++++++--------------------------------- 1 file changed, 26 insertions(+), 65 deletions(-) (limited to 'src/hooks') diff --git a/src/hooks/useLsfgHooks.ts b/src/hooks/useLsfgHooks.ts index f765ce6..8ff9061 100644 --- a/src/hooks/useLsfgHooks.ts +++ b/src/hooks/useLsfgHooks.ts @@ -1,12 +1,13 @@ -import { useState, useEffect } from "react"; +import { useState, useEffect, useCallback } from "react"; import { toaster } from "@decky/api"; import { checkLsfgVkInstalled, checkLosslessScalingDll, getLsfgConfig, - updateLsfgConfig, + updateLsfgConfigFromObject, type ConfigUpdateResult } from "../api/lsfgApi"; +import { ConfigurationData, ConfigurationManager } from "../config/configSchema"; export function useInstallationStatus() { const [isInstalled, setIsInstalled] = useState(false); @@ -70,58 +71,30 @@ export function useDllDetection() { } export function useLsfgConfig() { - const [enableLsfg, setEnableLsfg] = useState(true); - const [multiplier, setMultiplier] = useState(2); - const [flowScale, setFlowScale] = useState(0.8); - const [hdr, setHdr] = useState(false); - const [perfMode, setPerfMode] = useState(true); - const [immediateMode, setImmediateMode] = useState(false); - const [disableVkbasalt, setDisableVkbasalt] = useState(true); - const [frameCap, setFrameCap] = useState(0); + // Use centralized configuration for initial state + const [config, setConfig] = useState(() => ConfigurationManager.getDefaults()); - const loadLsfgConfig = async () => { + const loadLsfgConfig = useCallback(async () => { try { const result = await getLsfgConfig(); if (result.success && result.config) { - setEnableLsfg(result.config.enable_lsfg); - setMultiplier(result.config.multiplier); - setFlowScale(result.config.flow_scale); - setHdr(result.config.hdr); - setPerfMode(result.config.perf_mode); - setImmediateMode(result.config.immediate_mode); - setDisableVkbasalt(result.config.disable_vkbasalt); - setFrameCap(result.config.frame_cap); - console.log("Loaded lsfg config:", result.config); + setConfig(result.config); } else { console.log("lsfg config not available, using defaults:", result.error); + setConfig(ConfigurationManager.getDefaults()); } } catch (error) { console.error("Error loading lsfg config:", error); + setConfig(ConfigurationManager.getDefaults()); } - }; + }, []); - const updateConfig = async ( - newEnableLsfg: boolean, - newMultiplier: number, - newFlowScale: number, - newHdr: boolean, - newPerfMode: boolean, - newImmediateMode: boolean, - newDisableVkbasalt: boolean, - newFrameCap: number - ): Promise => { + const updateConfig = useCallback(async (newConfig: ConfigurationData): Promise => { try { - const result = await updateLsfgConfig( - newEnableLsfg, - newMultiplier, - newFlowScale, - newHdr, - newPerfMode, - newImmediateMode, - newDisableVkbasalt, - newFrameCap - ); - if (!result.success) { + const result = await updateLsfgConfigFromObject(newConfig); + if (result.success) { + setConfig(newConfig); + } else { toaster.toast({ title: "Update Failed", body: result.error || "Failed to update configuration" @@ -135,34 +108,22 @@ export function useLsfgConfig() { }); return { success: false, error: String(error) }; } - }; + }, []); + + const updateField = useCallback(async (fieldName: keyof ConfigurationData, value: boolean | number): Promise => { + const newConfig = { ...config, [fieldName]: value }; + return updateConfig(newConfig); + }, [config, updateConfig]); useEffect(() => { loadLsfgConfig(); - }, []); + }, []); // Empty dependency array to prevent infinite loop return { - config: { - enableLsfg, - multiplier, - flowScale, - hdr, - perfMode, - immediateMode, - disableVkbasalt, - frameCap - }, - setters: { - setEnableLsfg, - setMultiplier, - setFlowScale, - setHdr, - setPerfMode, - setImmediateMode, - setDisableVkbasalt, - setFrameCap - }, + config, + setConfig, loadLsfgConfig, - updateConfig + updateConfig, + updateField }; } -- cgit v1.2.3