| /* |
| * 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 "GrContextFactory.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 |