1682c269a1511200322916af83053e26004c0ec40bsalomon/* 2682c269a1511200322916af83053e26004c0ec40bsalomon * Copyright 2015 Google Inc. 3682c269a1511200322916af83053e26004c0ec40bsalomon * 4682c269a1511200322916af83053e26004c0ec40bsalomon * Use of this source code is governed by a BSD-style license that can be 5682c269a1511200322916af83053e26004c0ec40bsalomon * found in the LICENSE file. 6682c269a1511200322916af83053e26004c0ec40bsalomon */ 7682c269a1511200322916af83053e26004c0ec40bsalomon 8682c269a1511200322916af83053e26004c0ec40bsalomon#ifndef GrContextOptions_DEFINED 9682c269a1511200322916af83053e26004c0ec40bsalomon#define GrContextOptions_DEFINED 10682c269a1511200322916af83053e26004c0ec40bsalomon 11d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas#include "SkData.h" 12682c269a1511200322916af83053e26004c0ec40bsalomon#include "SkTypes.h" 13008b9d80ab9adbf2656eceaf54d11cd15e4dda05csmartdalton#include "GrTypes.h" 14195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman#include "../private/GrTypesPriv.h" 15682c269a1511200322916af83053e26004c0ec40bsalomon 16d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas#include <vector> 17d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas 1851279987957a64d0f1a9cf7d299a8689734a0e50Brian Osmanclass SkExecutor; 1951279987957a64d0f1a9cf7d299a8689734a0e50Brian Osman 20682c269a1511200322916af83053e26004c0ec40bsalomonstruct GrContextOptions { 2143f8bf0f784f4182ed0fca9053ecf570caf7ad70Brian Salomon enum class Enable { 2243f8bf0f784f4182ed0fca9053ecf570caf7ad70Brian Salomon /** Forces an option to be disabled. */ 2343f8bf0f784f4182ed0fca9053ecf570caf7ad70Brian Salomon kNo, 2443f8bf0f784f4182ed0fca9053ecf570caf7ad70Brian Salomon /** Forces an option to be enabled. */ 2543f8bf0f784f4182ed0fca9053ecf570caf7ad70Brian Salomon kYes, 2643f8bf0f784f4182ed0fca9053ecf570caf7ad70Brian Salomon /** 2743f8bf0f784f4182ed0fca9053ecf570caf7ad70Brian Salomon * Uses Skia's default behavior, which may use runtime properties (e.g. driver version). 2843f8bf0f784f4182ed0fca9053ecf570caf7ad70Brian Salomon */ 2943f8bf0f784f4182ed0fca9053ecf570caf7ad70Brian Salomon kDefault 3043f8bf0f784f4182ed0fca9053ecf570caf7ad70Brian Salomon }; 3143f8bf0f784f4182ed0fca9053ecf570caf7ad70Brian Salomon 32d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas /** 33d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas * Abstract class which stores Skia data in a cache that persists between sessions. Currently, 34d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas * Skia stores compiled shader binaries (only when glProgramBinary / glGetProgramBinary are 35d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas * supported) when provided a persistent cache, but this may extend to other data in the future. 36d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas */ 37d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas class PersistentCache { 38d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas public: 39d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas virtual ~PersistentCache() {} 40d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas 41d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas /** 42d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas * Returns the data for the key if it exists in the cache, otherwise returns null. 43d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas */ 44d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas virtual sk_sp<SkData> load(const SkData& key) = 0; 45d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas 46d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas virtual void store(const SkData& key, const SkData& data) = 0; 47d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas }; 48d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas 49fc6c37b981daeece7474ce61070c707c37eefa62Mike Klein GrContextOptions() {} 50682c269a1511200322916af83053e26004c0ec40bsalomon 51682c269a1511200322916af83053e26004c0ec40bsalomon // Suppress prints for the GrContext. 526b2552f10983d1b6d33303e3e9965ae71944c1d5bsalomon bool fSuppressPrints = false; 534ee6bd86c500d9b464e2f8cb3565544b8c97c0a9bsalomon 544ee6bd86c500d9b464e2f8cb3565544b8c97c0a9bsalomon /** Overrides: These options override feature detection using backend API queries. These 554ee6bd86c500d9b464e2f8cb3565544b8c97c0a9bsalomon overrides can only reduce the feature set or limits, never increase them beyond the 564ee6bd86c500d9b464e2f8cb3565544b8c97c0a9bsalomon detected values. */ 574ee6bd86c500d9b464e2f8cb3565544b8c97c0a9bsalomon 586b2552f10983d1b6d33303e3e9965ae71944c1d5bsalomon int fMaxTextureSizeOverride = SK_MaxS32; 596b2552f10983d1b6d33303e3e9965ae71944c1d5bsalomon 60e5b74c68564baab3639b21a95ce5b4b92949ca27joshualitt /** the threshold in bytes above which we will use a buffer mapping API to map vertex and index 61e5b74c68564baab3639b21a95ce5b4b92949ca27joshualitt buffers to CPU memory in order to update them. A value of -1 means the GrContext should 62e5b74c68564baab3639b21a95ce5b4b92949ca27joshualitt deduce the optimal value for this platform. */ 636b2552f10983d1b6d33303e3e9965ae71944c1d5bsalomon int fBufferMapThreshold = -1; 6483bc22970364f1ff94751b99c4b4048b3c66e1a2joshualitt 6551279987957a64d0f1a9cf7d299a8689734a0e50Brian Osman /** 6651279987957a64d0f1a9cf7d299a8689734a0e50Brian Osman * Executor to handle threaded work within Ganesh. If this is nullptr, then all work will be 6751279987957a64d0f1a9cf7d299a8689734a0e50Brian Osman * done serially on the main thread. To have worker threads assist with various tasks, set this 6851279987957a64d0f1a9cf7d299a8689734a0e50Brian Osman * to a valid SkExecutor instance. Currently, used for software path rendering, but may be used 6951279987957a64d0f1a9cf7d299a8689734a0e50Brian Osman * for other tasks. 7051279987957a64d0f1a9cf7d299a8689734a0e50Brian Osman */ 7151279987957a64d0f1a9cf7d299a8689734a0e50Brian Osman SkExecutor* fExecutor = nullptr; 7251279987957a64d0f1a9cf7d299a8689734a0e50Brian Osman 739a3fbf7e559ca59a7b67a62be743496da1e31724brianosman /** Construct mipmaps manually, via repeated downsampling draw-calls. This is used when 749a3fbf7e559ca59a7b67a62be743496da1e31724brianosman the driver's implementation (glGenerateMipmap) contains bugs. This requires mipmap 759a3fbf7e559ca59a7b67a62be743496da1e31724brianosman level and LOD control (ie desktop or ES3). */ 766b2552f10983d1b6d33303e3e9965ae71944c1d5bsalomon bool fDoManualMipmapping = false; 77e0d362929d6569e8737d80dead791c640390e819csmartdalton 7839ef7fb885d7be648b9f0ecd027bc400d1213cecbsalomon /** 79b350ae24d5356ac094982aee2f45c90216db35dbBrian Osman * Disables distance field rendering for paths. Distance field computation can be expensive, 80b350ae24d5356ac094982aee2f45c90216db35dbBrian Osman * and yields no benefit if a path is not rendered multiple times with different transforms. 81b350ae24d5356ac094982aee2f45c90216db35dbBrian Osman */ 82b350ae24d5356ac094982aee2f45c90216db35dbBrian Osman bool fDisableDistanceFieldPaths = false; 83b350ae24d5356ac094982aee2f45c90216db35dbBrian Osman 84b350ae24d5356ac094982aee2f45c90216db35dbBrian Osman /** 8539ef7fb885d7be648b9f0ecd027bc400d1213cecbsalomon * If true this allows path mask textures to be cached. This is only really useful if paths 8639ef7fb885d7be648b9f0ecd027bc400d1213cecbsalomon * are commonly rendered at the same scale and fractional translation. 8739ef7fb885d7be648b9f0ecd027bc400d1213cecbsalomon */ 8836dcd7f25d1ffee8571a7d424eb02f60cd474fa7Brian Osman bool fAllowPathMaskCaching = true; 8939ef7fb885d7be648b9f0ecd027bc400d1213cecbsalomon 9039ef7fb885d7be648b9f0ecd027bc400d1213cecbsalomon /** 9120471894eaa441193d5ae8f2395e8244c91c55afbrianosman * If true, sRGB support will not be enabled unless sRGB decoding can be disabled (via an 9220471894eaa441193d5ae8f2395e8244c91c55afbrianosman * extension). If mixed use of "legacy" mode and sRGB/color-correct mode is not required, this 9320471894eaa441193d5ae8f2395e8244c91c55afbrianosman * can be set to false, which will significantly expand the number of devices that qualify for 9420471894eaa441193d5ae8f2395e8244c91c55afbrianosman * sRGB support. 9520471894eaa441193d5ae8f2395e8244c91c55afbrianosman */ 9620471894eaa441193d5ae8f2395e8244c91c55afbrianosman bool fRequireDecodeDisableForSRGB = true; 9746da1cc9f20c277f7789355038d426931195aa65Brian Osman 9846da1cc9f20c277f7789355038d426931195aa65Brian Osman /** 9946da1cc9f20c277f7789355038d426931195aa65Brian Osman * If true, the GPU will not be used to perform YUV -> RGB conversion when generating 10046da1cc9f20c277f7789355038d426931195aa65Brian Osman * textures from codec-backed images. 10146da1cc9f20c277f7789355038d426931195aa65Brian Osman */ 10246da1cc9f20c277f7789355038d426931195aa65Brian Osman bool fDisableGpuYUVConversion = false; 103008b9d80ab9adbf2656eceaf54d11cd15e4dda05csmartdalton 104008b9d80ab9adbf2656eceaf54d11cd15e4dda05csmartdalton /** 105195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman * The maximum size of cache textures used for Skia's Glyph cache. 106008b9d80ab9adbf2656eceaf54d11cd15e4dda05csmartdalton */ 107195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman float fGlyphCacheTextureMaximumBytes = 2048 * 1024 * 4; 108008b9d80ab9adbf2656eceaf54d11cd15e4dda05csmartdalton 109008b9d80ab9adbf2656eceaf54d11cd15e4dda05csmartdalton /** 110af597481143ca4b17884360604be954a71cc34cfBrian Salomon * Below this threshold size in device space distance field fonts won't be used. Distance field 111af597481143ca4b17884360604be954a71cc34cfBrian Salomon * fonts don't support hinting which is more important at smaller sizes. A negative value means 112af597481143ca4b17884360604be954a71cc34cfBrian Salomon * use the default threshold. 113af597481143ca4b17884360604be954a71cc34cfBrian Salomon */ 114af597481143ca4b17884360604be954a71cc34cfBrian Salomon float fMinDistanceFieldFontSize = -1.f; 115af597481143ca4b17884360604be954a71cc34cfBrian Salomon 116af597481143ca4b17884360604be954a71cc34cfBrian Salomon /** 117af597481143ca4b17884360604be954a71cc34cfBrian Salomon * Above this threshold size in device space glyphs are drawn as individual paths. A negative 118af597481143ca4b17884360604be954a71cc34cfBrian Salomon * value means use the default threshold. 119af597481143ca4b17884360604be954a71cc34cfBrian Salomon */ 120af597481143ca4b17884360604be954a71cc34cfBrian Salomon float fGlyphsAsPathsFontSize = -1.f; 121af597481143ca4b17884360604be954a71cc34cfBrian Salomon 122af597481143ca4b17884360604be954a71cc34cfBrian Salomon /** 1239f545bc18a1fdff64d40104028c6d8449e660a6eBrian Salomon * Can the glyph atlas use multiple textures. If allowed, the each texture's size is bound by 1249f545bc18a1fdff64d40104028c6d8449e660a6eBrian Salomon * fGlypheCacheTextureMaximumBytes. 1259f545bc18a1fdff64d40104028c6d8449e660a6eBrian Salomon */ 1269f545bc18a1fdff64d40104028c6d8449e660a6eBrian Salomon Enable fAllowMultipleGlyphCacheTextures = Enable::kDefault; 1279f545bc18a1fdff64d40104028c6d8449e660a6eBrian Salomon 1289f545bc18a1fdff64d40104028c6d8449e660a6eBrian Salomon /** 129195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman * Bugs on certain drivers cause stencil buffers to leak. This flag causes Skia to avoid 130195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman * allocating stencil buffers and use alternate rasterization paths, avoiding the leak. 131fbdc080d3cae3695544ffbc05c6ff6f5b4514c02Jim Van Verth */ 132195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman bool fAvoidStencilBuffers = false; 133fbdc080d3cae3695544ffbc05c6ff6f5b4514c02Jim Van Verth 13443f8bf0f784f4182ed0fca9053ecf570caf7ad70Brian Salomon /** 135f2ec024c445ed17e80a5d351c797841f93ce8a7eRobert Phillips * When specifing new data for a vertex/index buffer that replaces old data Ganesh can give 136f2ec024c445ed17e80a5d351c797841f93ce8a7eRobert Phillips * a hint to the driver that the previous data will not be used in future draws like this: 137f2ec024c445ed17e80a5d351c797841f93ce8a7eRobert Phillips * glBufferData(GL_..._BUFFER, size, NULL, usage); //<--hint, NULL means 138f2ec024c445ed17e80a5d351c797841f93ce8a7eRobert Phillips * glBufferSubData(GL_..._BUFFER, 0, lessThanSize, data) // old data can't be 139f2ec024c445ed17e80a5d351c797841f93ce8a7eRobert Phillips * // used again. 140f2ec024c445ed17e80a5d351c797841f93ce8a7eRobert Phillips * However, this can be an unoptimization on some platforms, esp. Chrome. 141f2ec024c445ed17e80a5d351c797841f93ce8a7eRobert Phillips * Chrome's cmd buffer will create a new allocation and memset the whole thing 142f2ec024c445ed17e80a5d351c797841f93ce8a7eRobert Phillips * to zero (for security reasons). 143f2ec024c445ed17e80a5d351c797841f93ce8a7eRobert Phillips * Defaults to the value of GR_GL_USE_BUFFER_DATA_NULL_HINT #define (which is, by default, 1). 144f2ec024c445ed17e80a5d351c797841f93ce8a7eRobert Phillips */ 145f2ec024c445ed17e80a5d351c797841f93ce8a7eRobert Phillips Enable fUseGLBufferDataNullHint = Enable::kDefault; 146f2ec024c445ed17e80a5d351c797841f93ce8a7eRobert Phillips 147f2ec024c445ed17e80a5d351c797841f93ce8a7eRobert Phillips /** 1488a83ca4e9afc9e3c08b4e8c33a74392f9b3154d7Brian Osman * If true, texture fetches from mip-mapped textures will be biased to read larger MIP levels. 1498a83ca4e9afc9e3c08b4e8c33a74392f9b3154d7Brian Osman * This has the effect of sharpening those textures, at the cost of some aliasing, and possible 1508a83ca4e9afc9e3c08b4e8c33a74392f9b3154d7Brian Osman * performance impact. 1518a83ca4e9afc9e3c08b4e8c33a74392f9b3154d7Brian Osman */ 1528a83ca4e9afc9e3c08b4e8c33a74392f9b3154d7Brian Osman bool fSharpenMipmappedTextures = false; 1538a83ca4e9afc9e3c08b4e8c33a74392f9b3154d7Brian Osman 1548a83ca4e9afc9e3c08b4e8c33a74392f9b3154d7Brian Osman /** 15543f8bf0f784f4182ed0fca9053ecf570caf7ad70Brian Salomon * Enables driver workaround to use draws instead of glClear. This only applies to 15643f8bf0f784f4182ed0fca9053ecf570caf7ad70Brian Salomon * kOpenGL_GrBackend. 15743f8bf0f784f4182ed0fca9053ecf570caf7ad70Brian Salomon */ 15843f8bf0f784f4182ed0fca9053ecf570caf7ad70Brian Salomon Enable fUseDrawInsteadOfGLClear = Enable::kDefault; 15943f8bf0f784f4182ed0fca9053ecf570caf7ad70Brian Salomon 160d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas /** 1614150eea6c49ecec882a8d3e1c61d6a25fcd1e905Robert Phillips * Allow Ganesh to explicitly allocate resources at flush time rather than incrementally while 1624150eea6c49ecec882a8d3e1c61d6a25fcd1e905Robert Phillips * drawing. This will eventually just be the way it is but, for now, it is optional. 1634150eea6c49ecec882a8d3e1c61d6a25fcd1e905Robert Phillips */ 164a3f70261ccf4c14648505fed8bdc517ceb1b925eRobert Phillips Enable fExplicitlyAllocateGPUResources = Enable::kDefault; 1654150eea6c49ecec882a8d3e1c61d6a25fcd1e905Robert Phillips 1664150eea6c49ecec882a8d3e1c61d6a25fcd1e905Robert Phillips /** 1674150eea6c49ecec882a8d3e1c61d6a25fcd1e905Robert Phillips * Allow Ganesh to sort the opLists prior to allocating resources. This is an optional 1684150eea6c49ecec882a8d3e1c61d6a25fcd1e905Robert Phillips * behavior that is only relevant when 'fExplicitlyAllocateGPUResources' is enabled. 1694150eea6c49ecec882a8d3e1c61d6a25fcd1e905Robert Phillips * Eventually this will just be what is done and will not be optional. 1704150eea6c49ecec882a8d3e1c61d6a25fcd1e905Robert Phillips */ 171a3f70261ccf4c14648505fed8bdc517ceb1b925eRobert Phillips Enable fSortRenderTargets = Enable::kDefault; 1724150eea6c49ecec882a8d3e1c61d6a25fcd1e905Robert Phillips 1734150eea6c49ecec882a8d3e1c61d6a25fcd1e905Robert Phillips /** 17401b476a02825b926436dff8d0bcb2e0e07640b56Brian Salomon * Disables correctness workarounds that are enabled for particular GPUs, OSes, or drivers. 17501b476a02825b926436dff8d0bcb2e0e07640b56Brian Salomon * This does not affect code path choices that are made for perfomance reasons nor does it 17601b476a02825b926436dff8d0bcb2e0e07640b56Brian Salomon * override other GrContextOption settings. 17701b476a02825b926436dff8d0bcb2e0e07640b56Brian Salomon */ 17801b476a02825b926436dff8d0bcb2e0e07640b56Brian Salomon bool fDisableDriverCorrectnessWorkarounds = false; 17901b476a02825b926436dff8d0bcb2e0e07640b56Brian Salomon 18001b476a02825b926436dff8d0bcb2e0e07640b56Brian Salomon /** 181d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas * Cache in which to store compiled shader binaries between runs. 182d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas */ 183d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas PersistentCache* fPersistentCache = nullptr; 184d1b2eec0d0f95977b52669025cb25038618c0335Ethan Nicholas 185195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman#if GR_TEST_UTILS 186fbdc080d3cae3695544ffbc05c6ff6f5b4514c02Jim Van Verth /** 187195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman * Private options that are only meant for testing within Skia's tools. 188008b9d80ab9adbf2656eceaf54d11cd15e4dda05csmartdalton */ 189008b9d80ab9adbf2656eceaf54d11cd15e4dda05csmartdalton 190195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman /** 191195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman * If non-zero, overrides the maximum size of a tile for sw-backed images and bitmaps rendered 192195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman * by SkGpuDevice. 193195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman */ 194195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman int fMaxTileSizeOverride = 0; 1956d342285a4546b54cb17570aae7eeb8a123c81aeEric Karl 1966d342285a4546b54cb17570aae7eeb8a123c81aeEric Karl /** 197195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman * Prevents use of dual source blending, to test that all xfer modes work correctly without it. 1986d342285a4546b54cb17570aae7eeb8a123c81aeEric Karl */ 199195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman bool fSuppressDualSourceBlending = false; 2005c77975e4c00e18e644c72b56f369858acd11b15Eric Karl 2015c77975e4c00e18e644c72b56f369858acd11b15Eric Karl /** 202195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman * If true, the caps will never report driver support for path rendering. 2035c77975e4c00e18e644c72b56f369858acd11b15Eric Karl */ 204195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman bool fSuppressPathRendering = false; 205682c269a1511200322916af83053e26004c0ec40bsalomon 206195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman /** 207040238bded7b932b916c84912cbaec1207aa29c0Chris Dalton * If true, the caps will never support geometry shaders. 208040238bded7b932b916c84912cbaec1207aa29c0Chris Dalton */ 209040238bded7b932b916c84912cbaec1207aa29c0Chris Dalton bool fSuppressGeometryShaders = false; 210040238bded7b932b916c84912cbaec1207aa29c0Chris Dalton 211040238bded7b932b916c84912cbaec1207aa29c0Chris Dalton /** 212195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman * Render everything in wireframe 213195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman */ 214195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman bool fWireframeMode = false; 215195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman 216195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman /** 217195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman * Include or exclude specific GPU path renderers. 218195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman */ 219195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman GpuPathRenderers fGpuPathRenderers = GpuPathRenderers::kDefault; 2200b4d8aa108f2fd14f1ee4de1affacab166d7a357Brian Salomon 2210b4d8aa108f2fd14f1ee4de1affacab166d7a357Brian Salomon /** 2220b4d8aa108f2fd14f1ee4de1affacab166d7a357Brian Salomon * Disables using multiple texture units to batch multiple images into a single draw on 2230b4d8aa108f2fd14f1ee4de1affacab166d7a357Brian Salomon * supported GPUs. 2240b4d8aa108f2fd14f1ee4de1affacab166d7a357Brian Salomon */ 2250b4d8aa108f2fd14f1ee4de1affacab166d7a357Brian Salomon bool fDisableImageMultitexturing = false; 226195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman#endif 227b5086961f335d6757a88ce7507c445485aaba2e6Brian Salomon 228b5086961f335d6757a88ce7507c445485aaba2e6Brian Salomon#if SK_SUPPORT_ATLAS_TEXT 229b5086961f335d6757a88ce7507c445485aaba2e6Brian Salomon /** 230b5086961f335d6757a88ce7507c445485aaba2e6Brian Salomon * Controls whether distance field glyph vertices always have 3 components even when the view 231b5086961f335d6757a88ce7507c445485aaba2e6Brian Salomon * matrix does not have perspective. 232b5086961f335d6757a88ce7507c445485aaba2e6Brian Salomon */ 233b5086961f335d6757a88ce7507c445485aaba2e6Brian Salomon Enable fDistanceFieldGlyphVerticesAlwaysHaveW = Enable::kDefault; 234b5086961f335d6757a88ce7507c445485aaba2e6Brian Salomon#endif 235195c05b6d5afbd65f803816938e24eebd51292c8Brian Osman}; 236008b9d80ab9adbf2656eceaf54d11cd15e4dda05csmartdalton 237682c269a1511200322916af83053e26004c0ec40bsalomon#endif 238