aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--tools/sk_app/DisplayParams.h9
-rw-r--r--tools/sk_app/GLWindowContext.cpp2
-rw-r--r--tools/sk_app/VulkanWindowContext.cpp2
-rw-r--r--tools/sk_app/Window.h1
-rw-r--r--tools/sk_app/WindowContext.h7
-rw-r--r--tools/sk_app/unix/RasterWindowContext_unix.cpp2
-rw-r--r--tools/viewer/Viewer.cpp103
-rw-r--r--tools/viewer/Viewer.h1
8 files changed, 114 insertions, 13 deletions
diff --git a/tools/sk_app/DisplayParams.h b/tools/sk_app/DisplayParams.h
index 203e8bdeca..54e9135749 100644
--- a/tools/sk_app/DisplayParams.h
+++ b/tools/sk_app/DisplayParams.h
@@ -9,16 +9,23 @@
#include "GrContextOptions.h"
#include "SkImageInfo.h"
+#include "SkSurfaceProps.h"
namespace sk_app {
struct DisplayParams {
- DisplayParams() : fColorType(kN32_SkColorType), fColorSpace(nullptr), fMSAASampleCount(1) {}
+ DisplayParams()
+ : fColorType(kN32_SkColorType)
+ , fColorSpace(nullptr)
+ , fMSAASampleCount(1)
+ , fSurfaceProps(SkSurfaceProps::kLegacyFontHost_InitType)
+ {}
SkColorType fColorType;
sk_sp<SkColorSpace> fColorSpace;
int fMSAASampleCount;
GrContextOptions fGrContextOptions;
+ SkSurfaceProps fSurfaceProps;
};
} // namespace sk_app
diff --git a/tools/sk_app/GLWindowContext.cpp b/tools/sk_app/GLWindowContext.cpp
index 9d042cf19e..7dddede9aa 100644
--- a/tools/sk_app/GLWindowContext.cpp
+++ b/tools/sk_app/GLWindowContext.cpp
@@ -74,7 +74,7 @@ sk_sp<SkSurface> GLWindowContext::getBackbufferSurface() {
kBottomLeft_GrSurfaceOrigin,
kRGBA_8888_SkColorType,
fDisplayParams.fColorSpace,
- &fSurfaceProps);
+ &fDisplayParams.fSurfaceProps);
}
}
diff --git a/tools/sk_app/VulkanWindowContext.cpp b/tools/sk_app/VulkanWindowContext.cpp
index ecf6d80b2c..7021504f2b 100644
--- a/tools/sk_app/VulkanWindowContext.cpp
+++ b/tools/sk_app/VulkanWindowContext.cpp
@@ -300,7 +300,7 @@ void VulkanWindowContext::createBuffers(VkFormat format, SkColorType colorType)
kTopLeft_GrSurfaceOrigin,
colorType,
fDisplayParams.fColorSpace,
- &fSurfaceProps);
+ &fDisplayParams.fSurfaceProps);
}
// create the command pool for the command buffers
diff --git a/tools/sk_app/Window.h b/tools/sk_app/Window.h
index 927d8a9677..8a71f3566f 100644
--- a/tools/sk_app/Window.h
+++ b/tools/sk_app/Window.h
@@ -16,6 +16,7 @@
class GrContext;
class SkCanvas;
class SkSurface;
+class SkSurfaceProps;
namespace sk_app {
diff --git a/tools/sk_app/WindowContext.h b/tools/sk_app/WindowContext.h
index 9a12f2c04b..8b91011828 100644
--- a/tools/sk_app/WindowContext.h
+++ b/tools/sk_app/WindowContext.h
@@ -23,7 +23,6 @@ public:
WindowContext(const DisplayParams& params)
: fContext(nullptr)
, fDisplayParams(params)
- , fSurfaceProps(SkSurfaceProps::kLegacyFontHost_InitType)
, fSampleCount(1)
, fStencilBits(0) {}
@@ -40,11 +39,6 @@ public:
const DisplayParams& getDisplayParams() { return fDisplayParams; }
virtual void setDisplayParams(const DisplayParams& params) = 0;
- SkSurfaceProps getSurfaceProps() const { return fSurfaceProps; }
- void setSurfaceProps(const SkSurfaceProps& props) {
- fSurfaceProps = props;
- }
-
GrContext* getGrContext() const { return fContext.get(); }
int width() const { return fWidth; }
@@ -60,7 +54,6 @@ protected:
int fWidth;
int fHeight;
DisplayParams fDisplayParams;
- SkSurfaceProps fSurfaceProps;
// parameters obtained from the native window
// Note that the platform .cpp file is responsible for
diff --git a/tools/sk_app/unix/RasterWindowContext_unix.cpp b/tools/sk_app/unix/RasterWindowContext_unix.cpp
index 6bfa6fd0be..d0e700cb2e 100644
--- a/tools/sk_app/unix/RasterWindowContext_unix.cpp
+++ b/tools/sk_app/unix/RasterWindowContext_unix.cpp
@@ -54,7 +54,7 @@ void RasterWindowContext_xlib::setDisplayParams(const DisplayParams& params) {
void RasterWindowContext_xlib::resize(int w, int h) {
SkImageInfo info = SkImageInfo::Make(w, h, fDisplayParams.fColorType, kPremul_SkAlphaType,
fDisplayParams.fColorSpace);
- fBackbufferSurface = SkSurface::MakeRaster(info);
+ fBackbufferSurface = SkSurface::MakeRaster(info, &fDisplayParams.fSurfaceProps);
}
diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp
index 9b6a89adf1..7695aab05a 100644
--- a/tools/viewer/Viewer.cpp
+++ b/tools/viewer/Viewer.cpp
@@ -346,6 +346,36 @@ Viewer::Viewer(int argc, char** argv, void* platformData)
fSaveToSKP = true;
fWindow->inval();
});
+ fCommands.addCommand('G', "Modes", "Geometry", [this]() {
+ DisplayParams params = fWindow->getRequestedDisplayParams();
+ uint32_t flags = params.fSurfaceProps.flags();
+ if (!fPixelGeometryOverrides) {
+ fPixelGeometryOverrides = true;
+ params.fSurfaceProps = SkSurfaceProps(flags, kUnknown_SkPixelGeometry);
+ } else {
+ switch (params.fSurfaceProps.pixelGeometry()) {
+ case kUnknown_SkPixelGeometry:
+ params.fSurfaceProps = SkSurfaceProps(flags, kRGB_H_SkPixelGeometry);
+ break;
+ case kRGB_H_SkPixelGeometry:
+ params.fSurfaceProps = SkSurfaceProps(flags, kBGR_H_SkPixelGeometry);
+ break;
+ case kBGR_H_SkPixelGeometry:
+ params.fSurfaceProps = SkSurfaceProps(flags, kRGB_V_SkPixelGeometry);
+ break;
+ case kRGB_V_SkPixelGeometry:
+ params.fSurfaceProps = SkSurfaceProps(flags, kBGR_V_SkPixelGeometry);
+ break;
+ case kBGR_V_SkPixelGeometry:
+ params.fSurfaceProps = SkSurfaceProps(flags, SkSurfaceProps::kLegacyFontHost_InitType);
+ fPixelGeometryOverrides = false;
+ break;
+ }
+ }
+ fWindow->setRequestedDisplayParams(params);
+ this->updateTitle();
+ fWindow->inval();
+ });
fCommands.addCommand('H', "Paint", "Hinting mode", [this]() {
if (!fPaintOverrides.fHinting) {
fPaintOverrides.fHinting = true;
@@ -418,6 +448,15 @@ Viewer::Viewer(int argc, char** argv, void* platformData)
this->updateTitle();
fWindow->inval();
});
+ fCommands.addCommand('D', "Modes", "DFT", [this]() {
+ DisplayParams params = fWindow->getRequestedDisplayParams();
+ uint32_t flags = params.fSurfaceProps.flags();
+ flags ^= SkSurfaceProps::kUseDeviceIndependentFonts_Flag;
+ params.fSurfaceProps = SkSurfaceProps(flags, params.fSurfaceProps.pixelGeometry());
+ fWindow->setRequestedDisplayParams(params);
+ this->updateTitle();
+ fWindow->inval();
+ });
fCommands.addCommand('L', "Paint", "Subpixel Antialias Mode", [this]() {
if (!(fPaintOverrides.fFlags & SkPaint::kLCDRenderText_Flag)) {
fPaintOverrides.fFlags |= SkPaint::kLCDRenderText_Flag;
@@ -703,6 +742,31 @@ void Viewer::updateTitle() {
}
}
+ const DisplayParams& params = fWindow->getRequestedDisplayParams();
+ if (fPixelGeometryOverrides) {
+ switch (params.fSurfaceProps.pixelGeometry()) {
+ case kUnknown_SkPixelGeometry:
+ title.append( " Flat");
+ break;
+ case kRGB_H_SkPixelGeometry:
+ title.append( " RGB");
+ break;
+ case kBGR_H_SkPixelGeometry:
+ title.append( " BGR");
+ break;
+ case kRGB_V_SkPixelGeometry:
+ title.append( " RGBV");
+ break;
+ case kBGR_V_SkPixelGeometry:
+ title.append( " BGRV");
+ break;
+ }
+ }
+
+ if (params.fSurfaceProps.isUseDeviceIndependentFonts()) {
+ title.append(" DFT");
+ }
+
title.append(" [");
title.append(kBackendTypeStrings[fBackendType]);
int msaa = fWindow->sampleCount();
@@ -951,8 +1015,11 @@ void Viewer::drawSlide(SkCanvas* canvas) {
(ColorMode::kColorManagedSRGB8888_NonLinearBlending == fColorMode) ? nullptr : cs;
SkImageInfo info = SkImageInfo::Make(fWindow->width(), fWindow->height(), colorType,
kPremul_SkAlphaType, std::move(offscreenColorSpace));
- offscreenSurface = Window::kRaster_BackendType == fBackendType ? SkSurface::MakeRaster(info)
- : canvas->makeSurface(info);
+ SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType);
+ canvas->getProps(&props);
+ offscreenSurface = Window::kRaster_BackendType == fBackendType
+ ? SkSurface::MakeRaster(info, &props)
+ : canvas->makeSurface(info);
SkPixmap offscreenPixmap;
if (fTileCnt > 0 && offscreenSurface->peekPixels(&offscreenPixmap)) {
SkBitmap offscreenBitmap;
@@ -1203,6 +1270,38 @@ void Viewer::drawImGui() {
}
}
+ int pixelGeometryIdx = 0;
+ if (fPixelGeometryOverrides) {
+ pixelGeometryIdx = params.fSurfaceProps.pixelGeometry() + 1;
+ }
+ if (ImGui::Combo("Pixel Geometry", &pixelGeometryIdx,
+ "Default\0Flat\0RGB\0BGR\0RGBV\0BGRV\0\0"))
+ {
+ uint32_t flags = params.fSurfaceProps.flags();
+ if (pixelGeometryIdx == 0) {
+ fPixelGeometryOverrides = false;
+ params.fSurfaceProps = SkSurfaceProps(flags, SkSurfaceProps::kLegacyFontHost_InitType);
+ } else {
+ fPixelGeometryOverrides = true;
+ SkPixelGeometry pixelGeometry = SkTo<SkPixelGeometry>(pixelGeometryIdx - 1);
+ params.fSurfaceProps = SkSurfaceProps(flags, pixelGeometry);
+ }
+ paramsChanged = true;
+ }
+
+ bool useDFT = params.fSurfaceProps.isUseDeviceIndependentFonts();
+ if (ImGui::Checkbox("DFT", &useDFT)) {
+ uint32_t flags = params.fSurfaceProps.flags();
+ if (useDFT) {
+ flags |= SkSurfaceProps::kUseDeviceIndependentFonts_Flag;
+ } else {
+ flags &= ~SkSurfaceProps::kUseDeviceIndependentFonts_Flag;
+ }
+ SkPixelGeometry pixelGeometry = params.fSurfaceProps.pixelGeometry();
+ params.fSurfaceProps = SkSurfaceProps(flags, pixelGeometry);
+ paramsChanged = true;
+ }
+
if (ImGui::TreeNode("Path Renderers")) {
GpuPathRenderers prevPr = params.fGrContextOptions.fGpuPathRenderers;
auto prButton = [&](GpuPathRenderers x) {
diff --git a/tools/viewer/Viewer.h b/tools/viewer/Viewer.h
index 8a1e227ce3..2a8f12b466 100644
--- a/tools/viewer/Viewer.h
+++ b/tools/viewer/Viewer.h
@@ -165,6 +165,7 @@ private:
SkPaint fPaint;
SkPaintFields fPaintOverrides;
+ bool fPixelGeometryOverrides = false;
};