Allow changing the transfer function in xform canvas mode
Used this to test out some theories for different color correction
approaches.
Bug: skia:
Change-Id: I072130733eaea736c9aa129af74887b028f035b4
Reviewed-on: https://skia-review.googlesource.com/69221
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp
index 220a482..2975014 100644
--- a/tools/viewer/Viewer.cpp
+++ b/tools/viewer/Viewer.cpp
@@ -17,6 +17,7 @@
#include "SkATrace.h"
#include "SkCanvas.h"
#include "SkColorSpace_Base.h"
+#include "SkColorSpacePriv.h"
#include "SkColorSpaceXformCanvas.h"
#include "SkCommandLineFlags.h"
#include "SkCommonFlagsGpuThreads.h"
@@ -270,6 +271,8 @@
, fBackendType(sk_app::Window::kNativeGL_BackendType)
, fColorMode(ColorMode::kLegacy)
, fColorSpacePrimaries(gSrgbPrimaries)
+ // Our UI can only tweak gamma (currently), so start out gamma-only
+ , fColorSpaceTransferFn(g2Dot2_TransferFn)
, fZoomLevel(0.0f)
, fGestureDevice(GestureDevice::kNone)
{
@@ -620,6 +623,10 @@
}
}
title.appendf(" %s", curPrimaries >= 0 ? gNamedPrimaries[curPrimaries].fName : "Custom");
+
+ if (ColorMode::kColorManagedSRGB8888_NonLinearBlending == fColorMode) {
+ title.appendf(" Gamma %f", fColorSpaceTransferFn.fG);
+ }
}
if (fDisplayStats) {
@@ -812,7 +819,11 @@
? SkColorSpace::kLinear_RenderTargetGamma : SkColorSpace::kSRGB_RenderTargetGamma;
SkMatrix44 toXYZ(SkMatrix44::kIdentity_Constructor);
SkAssertResult(fColorSpacePrimaries.toXYZD50(&toXYZ));
- cs = SkColorSpace::MakeRGB(transferFn, toXYZ);
+ if (ColorMode::kColorManagedSRGB8888_NonLinearBlending == fColorMode) {
+ cs = SkColorSpace::MakeRGB(fColorSpaceTransferFn, toXYZ);
+ } else {
+ cs = SkColorSpace::MakeRGB(transferFn, toXYZ);
+ }
}
// If we're in F16, or we're zooming, or we're in color correct 8888 and the gamut isn't sRGB,
@@ -1237,6 +1248,11 @@
}
}
+ // When we're in xform canvas mode, we can alter the transfer function, too
+ if (ColorMode::kColorManagedSRGB8888_NonLinearBlending == fColorMode) {
+ ImGui::SliderFloat("Gamma", &fColorSpaceTransferFn.fG, 0.5f, 3.5f);
+ }
+
if (ImGui::Combo("Primaries", &primariesIdx,
"sRGB\0AdobeRGB\0P3\0Rec. 2020\0Custom\0\0")) {
if (primariesIdx >= 0 && primariesIdx <= 3) {
diff --git a/tools/viewer/Viewer.h b/tools/viewer/Viewer.h
index e37a945..8f24832 100644
--- a/tools/viewer/Viewer.h
+++ b/tools/viewer/Viewer.h
@@ -88,6 +88,7 @@
// Color properties for slide rendering
ColorMode fColorMode;
SkColorSpacePrimaries fColorSpacePrimaries;
+ SkColorSpaceTransferFn fColorSpaceTransferFn;
// transform data
SkScalar fZoomLevel;