Skip to content

Instantly share code, notes, and snippets.

@XenHat
Forked from natyusha/KeepUI_FFXIV.fx
Last active June 30, 2024 01:55
Show Gist options
  • Save XenHat/b5028ba55e0a53262cff979a09b3a6b0 to your computer and use it in GitHub Desktop.
Save XenHat/b5028ba55e0a53262cff979a09b3a6b0 to your computer and use it in GitHub Desktop.
Keep UI for FFXIV Mirror
// KeepUI for FFXIV (ReShade version)
// Author: seri14
//
// This is free and unencumbered software released into the public domain.
//
// Anyone is free to copy, modify, publish, use, compile, sell, or
// distribute this software, either in source code form or as a compiled
// binary, for any purpose, commercial or non-commercial, and by any
// means.
//
// In jurisdictions that recognize copyright laws, the author or authors
// of this software dedicate any and all copyright interest in the
// software to the public domain. We make this dedication for the benefit
// of the public at large and to the detriment of our heirs and
// successors. We intend this dedication to be an overt act of
// relinquishment in perpetuity of all present and future rights to this
// software under copyright law.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
// Lightly optimized by Marot Satil for the GShade project.
// Special thanks to Sleeps_Hungry for the addition of the OccludeUI technique.
// Tweaks by XenHat
#include "ReShade.fxh"
#ifndef KEEPUI_DEBUG
#define KEEPUI_DEBUG 0 // [0 or 1] If enabled, show debug tools for this shader
#endif
#ifndef KEEPUI_OCCLUDE_ASSISTANCE
#define KEEPUI_OCCLUDE_ASSISTANCE 0 // [0 or 1] If enabled, darkens the edges of the UI elements to help other shaders telling them apart from the world
#endif
#if KEEPUI_DEBUG
uniform bool bTroubleshootOpacityIssue <
ui_label = "Enable UI Highlighting";
ui_category = "Debug";
ui_category_closed = true;
ui_tooltip = "If you notice invalid colors on objects, enable FXAA in Final Fantasy XIV's Graphics Settings.\n"
"Open [System Configuration]\n"
" -> [Graphics Settings]\n"
" -> [General]\n"
" Set [Edge Smoothing (Anti-aliasing)] from \"Off\" to \"FXAA\"";
> = 0;
uniform int keepui_iBlendSource <
ui_label = "Blend Type";
ui_type = "combo";
ui_category = "Debug";
ui_items = "Checkerboard\0Negative\0";
> = 0;
#endif // KEEPUI_DEBUG
texture KeepUI_Tex { Width = BUFFER_WIDTH; Height = BUFFER_HEIGHT; };
sampler KeepUI_Sampler { Texture = KeepUI_Tex; };
void keepui_saveUITexture(float4 pos : SV_Position, float2 texcoord : TEXCOORD, out float4 color : SV_Target)
{
color = tex2D(ReShade::BackBuffer, texcoord);
}
void keepui_DoOccludeUI(float4 pos : SV_Position, float2 texcoord : TEXCOORD, out float4 color : SV_Target)
{
const float4 keep = tex2D(KeepUI_Sampler, texcoord);
#if KEEPUI_OCCLUDE_ASSISTANCE
const float4 back = tex2D(ReShade::BackBuffer, texcoord);
color = lerp(back, float4(0,0,0,0), keep.a);
color.a = keep.a;
#else
color = keep;
#endif
}
void keepui_restoreUITexture(float4 pos : SV_Position, float2 texcoord : TEXCOORD, out float4 color : SV_Target)
{
const float4 keep = tex2D(KeepUI_Sampler, texcoord);
const float4 back = tex2D(ReShade::BackBuffer, texcoord);
#if KEEPUI_DEBUG
if (bTroubleshootOpacityIssue)
{
if (0 == keepui_iBlendSource)
{
if (step(1, pos.x / 32 % 2) == step(1, pos.y / 32 % 2))
color = lerp(0.45, keep, keep.a);
else
color = lerp(0.55, keep, keep.a);
color.a = keep.a;
}
else
{
if (step(1.19209e-07, keep.a))
color = lerp(1 - keep, keep, 1-keep.a);
else
color = lerp(keep, keep, 1 - keep.a);
color.a = keep.a;
}
}
else
{
color = lerp(back, keep, keep.a);
color.a = keep.a;
}
#else
color = lerp(back, keep, keep.a);
color.a = keep.a;
#endif // KEEPUI_OCCLUDE_ASSISTANCE
}
technique FFKeepUI <
ui_tooltip = "Place this at the top of your Technique list to save the UI into a texture for restoration with RestoreUI.\n"
"To use this Technique, you must also enable \"RestoreUI\".\n";
>
{
pass
{
VertexShader = PostProcessVS;
PixelShader = keepui_saveUITexture;
RenderTarget = KeepUI_Tex;
}
pass
{
VertexShader = PostProcessVS;
PixelShader = keepui_DoOccludeUI;
}
}
technique FFRestoreUI <
ui_tooltip = "Place this at the bottom of your Technique list to restore the UI texture saved by KeepUI.\n"
"To use this Technique, you must also enable \"KeepUI\".\n";
>
{
pass
{
VertexShader = PostProcessVS;
PixelShader = keepui_restoreUITexture;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment