steamcompmgr: Fix setting lut override multiple times
This commit is contained in:
parent
15014f401e
commit
90de845cfc
2 changed files with 8 additions and 14 deletions
|
@ -342,7 +342,7 @@ using mat3x4 = std::array<std::array<float, 4>, 3>;
|
||||||
struct gamescope_color_mgmt_t
|
struct gamescope_color_mgmt_t
|
||||||
{
|
{
|
||||||
bool enabled;
|
bool enabled;
|
||||||
bool hasOverrides;
|
uint32_t externalDirtyCtr;
|
||||||
nightmode_t nightmode;
|
nightmode_t nightmode;
|
||||||
float sdrGamutWideness; // user property to widen gamut
|
float sdrGamutWideness; // user property to widen gamut
|
||||||
displaycolorimetry_t nativeDisplayColorimetry;
|
displaycolorimetry_t nativeDisplayColorimetry;
|
||||||
|
|
|
@ -145,7 +145,7 @@ update_color_mgmt()
|
||||||
EOTF planeEOTF = static_cast<EOTF>( i );
|
EOTF planeEOTF = static_cast<EOTF>( i );
|
||||||
calcColorTransform( &lut1d[0], nLutSize1d, &lut3d[0], nLutEdgeSize3d, syntheticInputColorimetry, nativeDisplayOutput, syntheticInputColorMapping, g_ColorMgmt.pending.nightmode, planeEOTF );
|
calcColorTransform( &lut1d[0], nLutSize1d, &lut3d[0], nLutEdgeSize3d, syntheticInputColorimetry, nativeDisplayOutput, syntheticInputColorMapping, g_ColorMgmt.pending.nightmode, planeEOTF );
|
||||||
|
|
||||||
if ( g_ColorMgmt.pending.hasOverrides )
|
if ( !g_ColorMgmtLutsOverride[i].lut3d.empty() && !g_ColorMgmtLutsOverride[i].lut3d.empty() )
|
||||||
g_ColorMgmtLuts[i] = g_ColorMgmtLutsOverride[i];
|
g_ColorMgmtLuts[i] = g_ColorMgmtLutsOverride[i];
|
||||||
else if ( !lut3d.empty() && !lut1d.empty() )
|
else if ( !lut3d.empty() && !lut1d.empty() )
|
||||||
g_ColorMgmtLuts[i] = gamescope_color_mgmt_luts{ lut3d, lut1d };
|
g_ColorMgmtLuts[i] = gamescope_color_mgmt_luts{ lut3d, lut1d };
|
||||||
|
@ -195,14 +195,12 @@ bool set_color_mgmt_enabled( bool bEnabled )
|
||||||
|
|
||||||
bool set_color_3dlut_override(const char *path)
|
bool set_color_3dlut_override(const char *path)
|
||||||
{
|
{
|
||||||
bool had_lut = !g_ColorMgmtLutsOverride[1].lut3d.empty();
|
|
||||||
|
|
||||||
g_ColorMgmtLutsOverride[1].lut3d.clear();
|
g_ColorMgmtLutsOverride[1].lut3d.clear();
|
||||||
g_ColorMgmt.pending.hasOverrides = !g_ColorMgmtLutsOverride[1].lut1d.empty() && !g_ColorMgmtLutsOverride[1].lut3d.empty();
|
g_ColorMgmt.pending.externalDirtyCtr++;
|
||||||
|
|
||||||
FILE *f = fopen(path, "rb");
|
FILE *f = fopen(path, "rb");
|
||||||
if (!f) {
|
if (!f) {
|
||||||
return had_lut;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
fseek(f, 0, SEEK_END);
|
fseek(f, 0, SEEK_END);
|
||||||
|
@ -212,28 +210,25 @@ bool set_color_3dlut_override(const char *path)
|
||||||
size_t elems = fsize / sizeof(uint16_t);
|
size_t elems = fsize / sizeof(uint16_t);
|
||||||
|
|
||||||
if (elems == 0) {
|
if (elems == 0) {
|
||||||
return had_lut;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto data = std::vector<uint16_t>(elems);
|
auto data = std::vector<uint16_t>(elems);
|
||||||
fread(data.data(), elems, sizeof(uint16_t), f);
|
fread(data.data(), elems, sizeof(uint16_t), f);
|
||||||
|
|
||||||
g_ColorMgmtLutsOverride[1].lut3d = std::move(data);
|
g_ColorMgmtLutsOverride[1].lut3d = std::move(data);
|
||||||
g_ColorMgmt.pending.hasOverrides = !g_ColorMgmtLutsOverride[1].lut1d.empty() && !g_ColorMgmtLutsOverride[1].lut3d.empty();
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool set_color_shaperlut_override(const char *path)
|
bool set_color_shaperlut_override(const char *path)
|
||||||
{
|
{
|
||||||
bool had_lut = !g_ColorMgmtLutsOverride[1].lut1d.empty();
|
|
||||||
|
|
||||||
g_ColorMgmtLutsOverride[1].lut1d.clear();
|
g_ColorMgmtLutsOverride[1].lut1d.clear();
|
||||||
g_ColorMgmt.pending.hasOverrides = !g_ColorMgmtLutsOverride[1].lut1d.empty() && !g_ColorMgmtLutsOverride[1].lut3d.empty();
|
g_ColorMgmt.pending.externalDirtyCtr++;
|
||||||
|
|
||||||
FILE *f = fopen(path, "rb");
|
FILE *f = fopen(path, "rb");
|
||||||
if (!f) {
|
if (!f) {
|
||||||
return had_lut;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
fseek(f, 0, SEEK_END);
|
fseek(f, 0, SEEK_END);
|
||||||
|
@ -243,14 +238,13 @@ bool set_color_shaperlut_override(const char *path)
|
||||||
size_t elems = fsize / sizeof(uint16_t);
|
size_t elems = fsize / sizeof(uint16_t);
|
||||||
|
|
||||||
if (elems == 0) {
|
if (elems == 0) {
|
||||||
return had_lut;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto data = std::vector<uint16_t>(elems);
|
auto data = std::vector<uint16_t>(elems);
|
||||||
fread(data.data(), elems, sizeof(uint16_t), f);
|
fread(data.data(), elems, sizeof(uint16_t), f);
|
||||||
|
|
||||||
g_ColorMgmtLutsOverride[1].lut1d = std::move(data);
|
g_ColorMgmtLutsOverride[1].lut1d = std::move(data);
|
||||||
g_ColorMgmt.pending.hasOverrides = !g_ColorMgmtLutsOverride[1].lut1d.empty() && !g_ColorMgmtLutsOverride[1].lut3d.empty();
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue