From 210fdfbabe1716be9fb7e902f77120e6448f6de3 Mon Sep 17 00:00:00 2001 From: redphx <96280+redphx@users.noreply.github.com> Date: Fri, 19 Jul 2024 17:41:52 +0700 Subject: [PATCH] Add "GPU configuration" setting --- src/modules/player/webgl2-player.ts | 5 ++++- src/modules/stream-player.ts | 17 ++++++++++++++--- src/modules/stream/stream-settings-utils.ts | 4 ++++ src/modules/stream/stream-settings.ts | 11 +++++++++++ src/utils/preferences.ts | 10 ++++++++++ src/utils/translation.ts | 3 +++ 6 files changed, 46 insertions(+), 4 deletions(-) diff --git a/src/modules/player/webgl2-player.ts b/src/modules/player/webgl2-player.ts index df009a3..e90c7b6 100644 --- a/src/modules/player/webgl2-player.ts +++ b/src/modules/player/webgl2-player.ts @@ -1,6 +1,7 @@ import vertClarityBoost from "./shaders/clarity_boost.vert" with { type: "text" }; import fsClarityBoost from "./shaders/clarity_boost.fs" with { type: "text" }; import { BxLogger } from "@/utils/bx-logger"; +import { getPref, PrefKey } from "@/utils/preferences"; const LOG_TAG = 'WebGL2Player'; @@ -120,11 +121,13 @@ export class WebGL2Player { } #setupShaders() { + BxLogger.info(LOG_TAG, 'Setting up', getPref(PrefKey.VIDEO_POWER_PREFERENCE)); + const gl = this.#$canvas.getContext('webgl2', { isBx: true, antialias: true, alpha: false, - powerPreference: 'high-performance', + powerPreference: getPref(PrefKey.VIDEO_POWER_PREFERENCE), }) as WebGL2RenderingContext; this.#gl = gl; diff --git a/src/modules/stream-player.ts b/src/modules/stream-player.ts index f71da02..2ba5037 100644 --- a/src/modules/stream-player.ts +++ b/src/modules/stream-player.ts @@ -260,9 +260,20 @@ export class StreamPlayer { this.#resizePlayer(); } + reloadPlayer() { + this.#cleanUpWebGL2Player(); + + this.#playerType = StreamPlayerType.VIDEO; + this.setPlayerType(StreamPlayerType.WEBGL2, false); + } + + #cleanUpWebGL2Player() { + // Clean up WebGL2 Player + this.#webGL2Player?.destroy(); + this.#webGL2Player = null; + } + destroy() { - // Cleanup WebGL2 Player - this.#webGL2Player?.destroy(); - this.#webGL2Player = null; + this.#cleanUpWebGL2Player(); } } diff --git a/src/modules/stream/stream-settings-utils.ts b/src/modules/stream/stream-settings-utils.ts index 5ec0353..d3bcbfd 100644 --- a/src/modules/stream/stream-settings-utils.ts +++ b/src/modules/stream/stream-settings-utils.ts @@ -8,6 +8,7 @@ export function onChangeVideoPlayerType() { const playerType = getPref(PrefKey.VIDEO_PLAYER_TYPE); const $videoProcessing = document.getElementById('bx_setting_video_processing') as HTMLSelectElement; const $videoSharpness = document.getElementById('bx_setting_video_sharpness') as HTMLElement; + const $videoPowerPreference = document.getElementById('bx_setting_video_power_preference') as HTMLElement; let isDisabled = false; @@ -28,6 +29,9 @@ export function onChangeVideoPlayerType() { $videoProcessing.disabled = isDisabled; $videoSharpness.dataset.disabled = isDisabled.toString(); + // Hide Power Preference setting if renderer isn't WebGL2 + $videoPowerPreference.closest('.bx-stream-settings-row')!.classList.toggle('bx-gone', playerType !== StreamPlayerType.WEBGL2); + updateVideoPlayer(); } diff --git a/src/modules/stream/stream-settings.ts b/src/modules/stream/stream-settings.ts index 437a55e..3eef01a 100644 --- a/src/modules/stream/stream-settings.ts +++ b/src/modules/stream/stream-settings.ts @@ -112,6 +112,17 @@ export class StreamSettings { }, { pref: PrefKey.VIDEO_PROCESSING, onChange: updateVideoPlayer, + }, { + pref: PrefKey.VIDEO_POWER_PREFERENCE, + onChange: () => { + const streamPlayer = STATES.currentStream.streamPlayer; + if (!streamPlayer) { + return; + } + + streamPlayer.reloadPlayer(); + updateVideoPlayer(); + }, }, { pref: PrefKey.VIDEO_SHARPNESS, onChange: updateVideoPlayer, diff --git a/src/utils/preferences.ts b/src/utils/preferences.ts index 6fae903..6256e36 100644 --- a/src/utils/preferences.ts +++ b/src/utils/preferences.ts @@ -82,6 +82,7 @@ export enum PrefKey { VIDEO_PLAYER_TYPE = 'video_player_type', VIDEO_PROCESSING = 'video_processing', + VIDEO_POWER_PREFERENCE = 'video_power_preference', VIDEO_SHARPNESS = 'video_sharpness', VIDEO_RATIO = 'video_ratio', VIDEO_BRIGHTNESS = 'video_brightness', @@ -637,6 +638,15 @@ export class Preferences { [StreamVideoProcessing.CAS]: t('amd-fidelity-cas'), }, }, + [PrefKey.VIDEO_POWER_PREFERENCE]: { + label: t('gpu-configuration'), + default: 'default', + options: { + 'default': t('default'), + 'high-performance': t('high-performance'), + 'low-power': t('low-power'), + }, + }, [PrefKey.VIDEO_SHARPNESS]: { label: t('sharpness'), type: SettingElementType.NUMBER_STEPPER, diff --git a/src/utils/translation.ts b/src/utils/translation.ts index dac4e12..5d2fb97 100644 --- a/src/utils/translation.ts +++ b/src/utils/translation.ts @@ -110,6 +110,7 @@ const Texts = { "fortnite-force-console-version": "Fortnite: force console version", "game-bar": "Game Bar", "getting-consoles-list": "Getting the list of consoles...", + "gpu-configuration": "GPU configuration", "help": "Help", "hide": "Hide", "hide-idle-cursor": "Hide mouse cursor on idle", @@ -117,6 +118,7 @@ const Texts = { "hide-sections": "Hide sections", "hide-system-menu-icon": "Hide System menu's icon", "hide-touch-controller": "Hide touch controller", + "high-performance": "High performance", "horizontal-scroll-sensitivity": "Horizontal scroll sensitivity", "horizontal-sensitivity": "Horizontal sensitivity", "ignore": "Ignore", @@ -130,6 +132,7 @@ const Texts = { "left-stick": "Left stick", "loading-screen": "Loading screen", "local-co-op": "Local co-op", + "low-power": "Low power", "map-mouse-to": "Map mouse to", "may-not-work-properly": "May not work properly!", "menu": "Menu",