/* * Copyright 2017 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SK_COMMON_FLAGS_PATH_RENDERER_H #define SK_COMMON_FLAGS_PATH_RENDERER_H #if SK_SUPPORT_GPU #include "GrContextOptions.h" #include "SkCommandLineFlags.h" #include "SkTypes.h" DECLARE_string(pr); #define DEFINE_pathrenderer_flag \ DEFINE_string(pr, "all", \ "Set of enabled gpu path renderers. Defined as a list of: " \ "[[~]all [~]dashline [~]nvpr [~]msaa [~]aahairline [~]aaconvex " \ "[~]aalinearizing [~]pls [~]sdf [~]tess [~]grdefault]") inline GrContextOptions::GpuPathRenderers get_named_pathrenderers_flags(const char* name) { using GpuPathRenderers = GrContextOptions::GpuPathRenderers; if (!strcmp(name, "all")) { return GpuPathRenderers::kAll; } else if (!strcmp(name, "dashline")) { return GpuPathRenderers::kDashLine; } else if (!strcmp(name, "nvpr")) { return GpuPathRenderers::kStencilAndCover; } else if (!strcmp(name, "msaa")) { return GpuPathRenderers::kMSAA; } else if (!strcmp(name, "aahairline")) { return GpuPathRenderers::kAAHairline; } else if (!strcmp(name, "aaconvex")) { return GpuPathRenderers::kAAConvex; } else if (!strcmp(name, "aalinearizing")) { return GpuPathRenderers::kAALinearizing; } else if (!strcmp(name, "pls")) { return GpuPathRenderers::kPLS; } else if (!strcmp(name, "sdf")) { return GpuPathRenderers::kDistanceField; } else if (!strcmp(name, "tess")) { return GpuPathRenderers::kTesselating; } else if (!strcmp(name, "grdefault")) { return GpuPathRenderers::kDefault; } SK_ABORT(SkStringPrintf("error: unknown named path renderer \"%s\"\n", name).c_str()); return GpuPathRenderers::kNone; } inline GrContextOptions::GpuPathRenderers CollectGpuPathRenderersFromFlags() { using GpuPathRenderers = GrContextOptions::GpuPathRenderers; if (FLAGS_pr.isEmpty()) { return GpuPathRenderers::kAll; } GpuPathRenderers gpuPathRenderers = '~' == FLAGS_pr[0][0] ? GpuPathRenderers::kAll : GpuPathRenderers::kNone; for (int i = 0; i < FLAGS_pr.count(); ++i) { const char* name = FLAGS_pr[i]; if (name[0] == '~') { gpuPathRenderers &= ~get_named_pathrenderers_flags(&name[1]); } else { gpuPathRenderers |= get_named_pathrenderers_flags(name); } } return gpuPathRenderers; } #endif // SK_SUPPORT_GPU #endif