diff options
-rw-r--r-- | tools/sk_app/DisplayParams.h | 9 | ||||
-rw-r--r-- | tools/sk_app/GLWindowContext.cpp | 2 | ||||
-rw-r--r-- | tools/sk_app/VulkanWindowContext.cpp | 2 | ||||
-rw-r--r-- | tools/sk_app/Window.h | 1 | ||||
-rw-r--r-- | tools/sk_app/WindowContext.h | 7 | ||||
-rw-r--r-- | tools/sk_app/unix/RasterWindowContext_unix.cpp | 2 | ||||
-rw-r--r-- | tools/viewer/Viewer.cpp | 103 | ||||
-rw-r--r-- | tools/viewer/Viewer.h | 1 |
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; }; |