# external references that will be documented eventually ...
#External
 DirectWrite TrueType Windows Linux Android iOS __ANDROID_API__ AHardwareBuffer
 FreeType FreeType-based Harfbuzz
 LCD RGB sRGB BGR RGBA ARGB YUV YUVA HSV SDTV HDTV
 Unicode Unicode5 UTF-8 UTF-16 UTF-32 ASCII Unichar
 API
 BMP GIF HEIF ICO JPEG PNG WBMP WebP
 CPU
 GPU GPU-backed OpenGL Vulkan VkDevice I/O MSAA
 PDF XPS
 RFC
 NaN NaNs
 bool U16CPU int int8_t int16_t int32_t int64_t uint8_t uint16_t uint32_t uint64_t size_t
 nullptr
 malloc() calloc() assert() std::move()
 C C++ SIZE_MAX C_FILE FILE
 CSS HTML

 affine destructor multitexturing representable subclasses descender descenders grayscale kerning
 unhinted no-parameter

 Sa Da Sc Dc 0xAARRGGBB # temporary until figure out what to do

 SkUserConfig.h  # not external, but still thinking about how markup refers to this
 SkXXX.h        # ditto
 SkXXX_Reference # ditto
 Skia           # ditto
 SK_ABORT       # ditto
 SK_DEBUG       # ditto
 SK_RELEASE     # ditto
 SK_USE_FREETYPE_EMBOLDEN # ditto
 SK_BUILD_FOR_ANDROID_FRAMEWORK # ditto
 SK_BUILD_FOR_MAC # ditto
 SK_BUILD_FOR_IOS # ditto
 SK_SUPPORT_GPU # ditto
 SK_HAS_JPEG_LIBRARY # ditto
 SK_HAS_PNG_LIBRARY # ditto
 SK_HAS_WEBP_LIBRARY # ditto
 SK_IGNORE_GPU_DITHER # ditto
 SK_PMCOLOR_BYTE_ORDER # ditto

# FreeType related
FT_LOAD_TARGET_LIGHT
FT_LOAD_TARGET_NORMAL
FT_LOAD_TARGET_LCD
FT_LOAD_TARGET_LCD_V
FT_LOAD_NO_HINTING
FT_Load_Glyph

#External ##

# this jargon requires a substitute to space the phrase.
#Topic Little_Endian
#Substitute little endian
##

#Topic Big_Endian
#Substitute big endian
##

#Topic YUV_Component_Y
#Substitute YUV component y
##

#Topic YUV_Component_U
#Substitute YUV component u
##

#Topic YUV_Component_V
#Substitute YUV component v
##

#Topic UV_Mapping
#Substitute UV mapping
##

#Topic Multi_Sample_Anti_Aliasing
#Substitute multi-sample anti-aliasing
##

#Topic GPU_Share_Group
#Substitute GPU share group
##

#Topic Bezier_Curve
#Substitute Bezier cruve
##

#Topic Coons_Patch
#Substitute Coons patch
##

#Topic Cartesian_Coordinate
#Substitute Cartesian coordinate
##

#Topic Euclidean_Distance
#Substitute Euclidean distance
##

#Topic Euclidean_Space
#Substitute Euclidean space
##

#Topic HTML_Gray
#Substitute HTML gray
##

#Topic HTML_Silver
#Substitute HTML silver
##

#Topic HTML_Lime
#Substitute HTML lime
##

#Topic HTML_Green
#Substitute HTML green
##

#Topic HTML_Aqua
#Substitute HTML aqua
##

#Topic HTML_Fuchsia
#Substitute HTML fuchsia
##

#Topic SVG_lightgray
#Substitute SVG light gray
##

#Topic SVG_darkgray
#Substitute SVG dark gray
##

# start of topics to be documented in the future

#Topic Alias
#Alias Aliased ##
#Alias Aliasing ##
##

#Topic Arc
#Alias Arcs ##
#Topic ##

#Topic Backend_Semaphore
#Alias Backend_Semaphores ##
#Class GrBackendSemaphore
##
##

#Topic BBH_Factory
#Class SkBBHFactory
##
##


#Topic Circle
#Alias Circles ##
#Topic ##

#Topic Clip_Op
#EnumClass SkClipOp
    #Const kDifference 0
    ##
    #Const kIntersect 1
    ##
##
##

#Topic Color_Filter
#Class SkColorFilter
#Class ##
##

#Topic Color_Space
#Class SkColorSpace
    #Method static sk_sp<SkColorSpace> MakeSRGBLinear()
    ##
    #Method bool gammaCloseToSRGB() const
    ##
    #Method static bool Equals(const SkColorSpace* src, const SkColorSpace* dst)
    ##
##
##

#Topic Create_Color_Space_Xform_Canvas
#Method std::unique_ptr<SkCanvas> SkCreateColorSpaceXformCanvas(SkCanvas* target,
                                                                sk_sp<SkColorSpace> targetCS)
##
##

#Topic Core_Graphics
#Substitute Core Graphics
##

#Topic Core_Text
#Substitute Core Text
##

#Topic Curve
#Alias Curves ##
##

#Topic Data
#Class SkData
##
##

#Topic Debug_Canvas
#Class SkDebugCanvas
##
##

#Topic Debugging
#Method void SkDebugf(const char format[], ...)
##
##

#Topic Deferred_Display_List
#Class SkDeferredDisplayList
##
#Subtopic Recorder
#Class SkDeferredDisplayListRecorder
##
##
##

#Topic Deserial_Procs
#Struct SkDeserialProcs
#Member SkDeserialPictureProc   fPictureProc
##
#Member void*   fPictureCtx
##
#Member SkDeserialTypefaceProc   fTypefaceProc
##
#Member void*   fTypefaceCtx
##
##
##

#Topic Device
#Class SkBaseDevice
##
##

#Topic Document
#Class SkDocument
    #Method SkCanvas* beginPage(SkScalar width, SkScalar height,
                        const SkRect* content = NULL)
    ##
##
#Subtopic PDF
##
##

#Topic Draw_Layer
##

#Topic Draw_Looper
#Class SkDrawLooper
#Class ##
##

#Topic Drawable
#Class SkDrawable
    #Method void draw(SkCanvas*, const SkMatrix* = NULL)
    ##
##
##

# to be in topic Encoded_Image_Format
#EnumClass SkEncodedImageFormat
    #Const kUnknown 0
    ##
    #Const kBMP 1
    ##
    #Const kGIF 2
    ##
    #Const kICO 3
    ##
    #Const kJPEG 4
    ##
    #Const kPNG 5
    ##
    #Const kWBMP 6
    ##
    #Const kWEBP 7
    ##
    #Const kPKM 8
    ##
    #Const kKTX 9
    ##
    #Const kASTC 10
    ##
    #Const kDNG 11
    ##
    #Const kHEIF 12
    ##
##
# end of topic Encoded_Image_Format

#Topic Filter_Quality
#Enum SkFilterQuality
    #Const kNone_SkFilterQuality 0
    ##
    #Const kLow_SkFilterQuality 1
    ##
    #Const kMedium_SkFilterQuality 2
    ##
    #Const kHigh_SkFilterQuality 3
    ##
#Enum ##
#Subtopic Nearest_Neighbor
#Substitute nearest neighbor filter
##
#Subtopic Bilerp
#Substitute bilerp filter
##
#Subtopic MipMap
#Substitute mip-map filter
##
#Subtopic BiCubic
#Substitute bicubic filter
##
#Topic ##

#Topic Text_Encoding
#Enum SkTextEncoding
#Const kUTF8_SkTextEncoding 0
##
#Const kUTF16_SkTextEncoding 1
##
#Const kUTF32_SkTextEncoding 2
##
#Const kGlyphID_SkTextEncoding 3
##
TextEncoding determines whether text specifies character codes and their encoded
size, or glyph indices. Characters are encoded as specified by the
#A Unicode standard # https://unicode.org/standard/standard.html ##
.

Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
All character code formats are able to represent all of Unicode, differing only
in the total storage required.

#A UTF-8 (RFC 3629) # https://tools.ietf.org/html/rfc3629 ##
encodes each character as one or more 8-bit bytes.

#A UTF-16 (RFC 2781) # https://tools.ietf.org/html/rfc2781 ##
encodes each character as one or two 16-bit words.

#A UTF-32 # https://www.unicode.org/versions/Unicode5.0.0/ch03.pdf ##
encodes each character as one 32-bit word.

Font_Manager uses font data to convert character code points into glyph indices.
A glyph index is a 16-bit word.
#Enum SkTextEncoding ##
#Topic Text_Encoding ##

#Topic Font_Hinting
#Line # glyph outline adjustment ##
#EnumClass SkFontHinting
#Const kNone 0
#Line # glyph outlines unchanged ##
    Leaves glyph outlines unchanged from their native representation.
    With FreeType, this is equivalent to the FT_LOAD_NO_HINTING
    bit-field constant supplied to FT_Load_Glyph, which indicates that the vector
    outline being loaded should not be fitted to the pixel grid but simply scaled
    to 26.6 fractional pixels.
##
#Const kSlight 1
#Line # minimal modification to improve contrast ##
    Modifies glyph outlines minimally to improve contrast.
    With FreeType, this is equivalent in spirit to the
    FT_LOAD_TARGET_LIGHT value supplied to FT_Load_Glyph. It chooses a
    lighter hinting algorithm for non-monochrome modes.
    Generated Glyphs may be fuzzy but better resemble their original shape.
##
#Const kNormal 2
#Line # glyph outlines modified to improve contrast ##
    Modifies glyph outlines to improve contrast. This is the default.
    With FreeType, this supplies FT_LOAD_TARGET_NORMAL to FT_Load_Glyph,
    choosing the default hinting algorithm, which is optimized for standard
    gray-level rendering.
##
#Const kFull 3
#Line # modifies glyph outlines for maximum contrast ##
    Modifies glyph outlines for maximum contrast. With FreeType, this selects
    FT_LOAD_TARGET_LCD or FT_LOAD_TARGET_LCD_V if kLCDRenderText_Flag is set.
    FT_LOAD_TARGET_LCD is a variant of FT_LOAD_TARGET_NORMAL optimized for
    horizontally decimated LCD displays; FT_LOAD_TARGET_LCD_V is a
    variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays.
##
#EnumClass SkFontHinting ##
#Topic Font_Hinting ##

#Topic Font_Metrics
#Struct SkFontMetrics
#Line # values computed by Font_Manager using Typeface ##

    SkFontMetrics is filled out by SkPaint::getFontMetrics. SkFontMetrics contents
    reflect the values
    computed by Font_Manager using Typeface. Values are set to zero if they are
    not available.

    All vertical values are relative to the baseline, on a y-axis pointing down.
    Zero is on the baseline, negative values are above the baseline, and positive
    values are below the baseline.

    fUnderlineThickness and fUnderlinePosition have a bit set in fFlags if their values
    are valid, since their value may be zero.

    fStrikeoutThickness and fStrikeoutPosition have a bit set in fFlags if their values
    are valid, since their value may be zero.

    #Enum FontMetricsFlags
    #Line # valid Font_Metrics ##

    FontMetricsFlags are set in fFlags when underline and strikeout metrics are valid;
    the underline or strikeout metric may be valid and zero.
    Fonts with embedded bitmaps may not have valid underline or strikeout metrics.

        #Const kUnderlineThicknessIsValid_Flag 0x0001
        #Line # set if fUnderlineThickness is valid ##
        ##
        #Const kUnderlinePositionIsValid_Flag  0x0002
        #Line # set if fUnderlinePosition is valid ##
        ##
        #Const kStrikeoutThicknessIsValid_Flag 0x0004
        #Line # set if fStrikeoutThickness is valid ##
        ##
        #Const kStrikeoutPositionIsValid_Flag  0x0008
        #Line # set if fStrikeoutPosition is valid ##
        ##

    #Enum ##

    #Member uint32_t    fFlags
    #Line # is set to FontMetricsFlags when metrics are valid ##
    ##

    #Member SkScalar    fTop
    #Line # extent above baseline ##
        Greatest extent above the baseline for any glyph.
        Typically less than zero.
    ##

    #Member SkScalar    fAscent
    #Line # distance to reserve above baseline ##
        Recommended distance above the baseline to reserve for a line of text.
        Typically less than zero.
    ##

    #Member SkScalar    fDescent
    #Line # distance to reserve below baseline ##
        Recommended distance below the baseline to reserve for a line of text.
        Typically greater than zero.
    ##

    #Member SkScalar    fBottom
    #Line # extent below baseline ##
        Greatest extent below the baseline for any glyph.
        Typically greater than zero.
    ##

    #Member SkScalar    fLeading
    #Line # distance to add between lines ##
        Recommended distance to add between lines of text.
        Typically greater than or equal to zero.
    ##

    #Member SkScalar    fAvgCharWidth
    #Line # average character width ##
        Average character width, if it is available.
        Zero if no average width is stored in the font.
    ##

    #Member SkScalar    fMaxCharWidth
    #Line # maximum character width ##
    ##

    #Member SkScalar    fXMin
    #Line # minimum x ##
        Minimum bounding box x-axis value for all Glyphs.
        Typically less than zero.
    ##

    #Member SkScalar    fXMax
    #Line # maximum x ##
        Maximum bounding box x-axis value for all Glyphs.
        Typically greater than zero.
    ##

    #Member SkScalar    fXHeight
    #Line # height of lower-case 'x' ##
        May be zero if no lower-case height is stored in the font.
    ##

    #Member SkScalar    fCapHeight
    #Line # height of an upper-case letter ##
        May be zero if no upper-case height is stored in the font.
    ##

    #Member SkScalar    fUnderlineThickness
    #Line # underline thickness ##
        If the metric is valid, the kUnderlineThicknessIsValid_Flag is set in fFlags.
        If kUnderlineThicknessIsValid_Flag is clear, fUnderlineThickness is zero.
    ##

    #Member SkScalar    fUnderlinePosition
    #Line # underline position relative to baseline ##
       Position of the top of the underline stroke relative to the baseline.
       Typically positive when valid.

       If the metric is valid, the kUnderlinePositionIsValid_Flag is set in fFlags.
       If kUnderlinePositionIsValid_Flag is clear, fUnderlinePosition is zero.
    ##

    #Member SkScalar    fStrikeoutThickness
    #Line # strikeout thickness ##

        If the metric is valid, the kStrikeoutThicknessIsValid_Flag is set in fFlags.
        If kStrikeoutThicknessIsValid_Flag is clear, fStrikeoutThickness is zero.
    ##

    #Member SkScalar    fStrikeoutPosition
    #Line # strikeout position relative to baseline ##
        Position of the bottom of the strikeout stroke relative to the baseline.
        Typically negative when valid.

        If the metric is valid, the kStrikeoutPositionIsValid_Flag is set in fFlags.
        If kStrikeoutPositionIsValid_Flag is clear, fStrikeoutPosition is zero.
    ##

    #Method bool hasUnderlineThickness(SkScalar* thickness) const
    #Line # returns underline thickness if set ##

#NoExample
        ##
    ##

    #Method bool hasUnderlinePosition(SkScalar* position) const
    #Line # returns underline position if set ##

#NoExample
        ##
    ##

    #Method bool hasStrikeoutThickness(SkScalar* thickness) const
    #Line # returns strikeout thickness if set ##

#NoExample
        ##
    ##

    #Method bool hasStrikeoutPosition(SkScalar* position) const
    #Line # returns strikeout position if set ##

#NoExample
        ##
    ##

#Struct ##
#Topic ##

#Topic Font_Manager
#Topic ##

#Topic Glyph
#Subtopic ID
##
#Alias Glyphs ##
##

#Topic GPU_Context
#Substitute GPU context
#Class GrContext
#Method void abandonContext()
##
#Method void flush()
##
##
##

#Topic GPU_Surface
#Substitute GPU surface
##

#Topic GPU_Texture
#Substitute GPU texture
##

#Topic HTML_Canvas
    #Substitute HTML Canvas
    #Subtopic ArcTo
        #Substitute HTML Canvas arcTo
    ##
##

#Topic Image_Filter
#Class SkImageFilter
#Class ##
#Topic ##

#Class SkImageGenerator
##

#Topic Image_Scaling
##

#Topic ISize
#Struct SkISize
#Method int32_t width() const
##
#Method int32_t height() const
##
##
##

#Topic Left_Side_Bearing
##

#Topic Line
#Alias Lines ##
#Topic ##

# to be in Topic Malloc_Pixel_Ref
#Class SkMallocPixelRef
    #Method static sk_sp<SkPixelRef> MakeZeroed(const SkImageInfo&, size_t rowBytes)
    ##
    #Method static sk_sp<SkPixelRef> MakeAllocate(const SkImageInfo&, size_t rowBytes)
    ##
##
# end of Topic Malloc_Pixel_Ref

#Struct SkMask
##

#Topic Mask_Alpha
#Topic ##

#Topic Mask_Filter
#Class SkMaskFilter
#Class ##
#Topic ##

# to be in Topic Math
    #Method Luminosity(dstColor)
    # this permits using Luminosity() in documentation
    ##
    #Method Saturation(dstColor)
    # this permits using Saturation() in documentation
    ##
    #Method SetLuminosity(srcSaturation, dstLuminosity)
    # this permits using SetLuminosity() in documentation
    ##
    #Method SetSaturation(srcSaturation, dstSaturation)
    # this permits using SetSaturation() in documentation
    ##
    #Method SkIntToScalar(x)
    ##
    #Method SkScalarRoundToInt(x)
    ##
    #Method SkScalarFloorToInt(x)
    ##
    #Method SkScalarCeilToInt(x)
    ##
    #Method SkScalarFloorToScalar(x)
    ##
    #Method SkScalarCeilToScalar(x)
    ##
    #Method SkScalarIsFinite(x)
    ##
    #Method SkScalarIsNaN(x)
    ##
    #Method template <typename D, typename S> inline bool SkTFitsIn(S s)
    ##
    #Method float abs(float x)
    # this permits using abs(x) in documentation
    ##
    #Method float max(float x)
    # this permits using max(x) in documentation
    ##
    #Method float min(float x)
    # this permits using max(x) in documentation
    ##
    #Method float sizeof(float x)
    # this permits using sizeof(x) in documentation
    ##
    #Method float sqrt(float x)
    # this permits using sqrt(x) in documentation
    ##
    #Method static inline bool sk_64_isS32(int64_t value)
    ##
# end of Topic Math

#Topic Mip_Map
#Substitute mip map
##

#Topic Nine_Patch
##

# to be in Topic Number_Types ?
    #Typedef uint16_t SkGlyphID
    #Typedef ##
    #Topic Scalar
    #Alias Scalars ##
    #Typedef float SkScalar
    #Typedef ##
    ##
    #Const SK_MinS32FitsInFloat
    to be written
    ##
    #Const SK_MaxS32FitsInFloat
    to be written
    ##
    #Const SK_ScalarMin
    to be written
    ##
    #Const SK_ScalarMax
    to be written
    ##
    #Const SK_ScalarInfinity
    to be written
    ##
    #Const SK_ScalarNegativeInfinity
    to be written
    ##
    #Const SK_ScalarNaN
    to be written
    ##
    #Const SK_ScalarNearlyZero
    to be written
    ##
    #Const SK_MinS32
    to be written
    ##
    #Const SK_MaxS32
    to be written
    ##
    #Typedef int32_t SkUnichar
    #Typedef ##
    #Typedef unsigned U8CPU
    #Typedef ##
# end of Topic Number_Types

#Topic OS_X
#Substitute OS X
##

#Topic Oval
#Alias Ovals ##
#Topic ##

#Topic Paint_Defaults
#Const SkPaintDefaults_Hinting 2
##
#Const SkPaintDefaults_TextSize 12
##
#Const SkPaintDefaults_MiterLimit 4
##
#Topic ##

#Topic Patch
#Alias Patches ##
#Topic ##

#Topic Path_Effect
    #Class SkPathEffect
    #Class ##
#Topic ##

# to be in Topic Path_Measure
    #Class SkPathMeasure
            #Method void dump() const
            ##
    ##
# end of Topic Path_Measure

#Topic PathOps
    #Enum SkPathOp
    ##
    #Method bool Op(const SkPath& one, const SkPath& two, SkPathOp op, SkPath* result)
    ##
#Topic ##

#Topic Picture_Recorder
    #Class SkPictureRecorder
        #Method SkCanvas* beginRecording(const SkRect& bounds,
                             SkBBHFactory* bbhFactory = NULL,
                             uint32_t recordFlags = 0)
        ##
    ##
##

#Topic Pixel
#Subtopic Storage
##
##

#Topic Pixel_Ref
#Class SkPixelRef
    #Method int width() const
    ##
    #Method int height() const
    ##
    #Method bool isImmutable() const
    ##
    #Method void setImmutable()
    ##
##
##

#Enum SkPixelGeometry
##

#Topic Point3
#Struct SkPoint3
##
#Topic ##

#Topic PostScript
#Substitute PostScript
#Subtopic Arct
#Substitute PostScript arct
##
##

#Topic Premultiply
#Alias Premultiplied ##
#Alias Premultiplies ##
##

#Topic Raster_Engine
##

#Topic Raster_Handle_Allocator
#Class SkRasterHandleAllocator
    #Typedef void* Handle
    ##
    #Struct Rec
    ##
    #Method static std::unique_ptr<SkCanvas> MakeCanvas(std::unique_ptr<SkRasterHandleAllocator>, const SkImageInfo&, const Rec* rec = nullptr)
    ##
##
##

#Topic Raster_Bitmap
##

#Topic Raster_Surface
##

# to be in Topic Rasterizer
#Class SkRasterizer
#Class ##
# end of Topic Rasterizer

#Topic Reference_Count
#Class SkRefCnt
#Class ##

#Template SkNVRefCnt
##
##

#Topic Smart_Pointer
#Class sk_sp
#Class ##
#Topic ##

#Topic Render_Target
#Class GrRenderTarget
##
##

#Topic Right_Side_Bearing
##

#Topic RSXform
#Struct SkRSXform
#Member SkScalar fSCos
##
#Member SkScalar fSSin
##
#Member SkScalar fTx
##
#Member SkScalar fTy
##
##
##

#Topic Serial_Procs
#Struct SkSerialProcs
#Member SkSerialPictureProc   fPictureProc
##
#Member void*   fPictureCtx
##
#Member SkSerialTypefaceProc   fTypefaceProc
##
#Member void*   fTypefaceCtx
##
##
##

#Topic Shader
#Class SkShader
    #Enum TileMode
        #Const kClamp_TileMode 0
        ##
        #Const kRepeat_TileMode 1
        ##
        #Const kMirror_TileMode 2
        ##
    ##
    #Method static sk_sp<SkShader> MakeBitmapShader(const SkBitmap& src, TileMode tmx, TileMode tmy,
                                            const SkMatrix* localMatrix = nullptr)
    ##
    #Method static sk_sp<SkShader> MakeCompose(sk_sp<SkShader> dst, sk_sp<SkShader> src,
                                       SkBlendMode mode, float lerp = 1)
    ##
#Class ##
#Topic ##

#Topic Size
#Struct SkSize
#Method int32_t width() const
##
#Method int32_t height() const
##
##
##

#Topic Sprite
#Alias Sprites ##
#Topic ##

#Topic Stream_Asset
#Class SkStreamAsset
##
#Topic ##

#Topic String
#Class SkString
#Class ##
#Topic ##

#Topic Supersampling
##

#Topic Surface_Characterization
#Class SkSurfaceCharacterization
##
##

#Topic Surface_Properties
    #Class SkSurfaceProps
        #Subtopic Legacy_Font_Host
        #Enum InitType
            #Const kLegacyFontHost_InitType 0
            ##
        ##
        #Topic ##
    ##
##

#Topic SVG
#Subtopic Canvas
##
#Subtopic Arc
##
#Subtopic Sweep_Flag
#Substitute SVG sweep-flag
##
##

#Topic Text
#Topic ##

#Topic Texture
#Class GrBackendTexture
    #Method bool isValid() const
    ##
##
##

#Topic YUV_Planes
#Class SkYUVAIndex
##
##

#Topic RenderTarget
#Class GrBackendRenderTarget
    #Method bool isValid() const
    ##
##
##

#Topic Transfer_Mode
##

#Topic Typeface
#Subtopic ID
#Typedef uint32_t SkFontID
##
##
#Class SkTypeface
    #Method SkFontID uniqueID() const
    ##
#Class ##
#Topic ##

# to be defined in types
    #Typedef intptr_t GrBackendObject
    #Typedef ##

    #EnumClass GrMipMapped
    #Const kNo 0
    ##
    #Const kYes 1
    ##
    #EnumClass ##

    #Enum GrSurfaceOrigin
    #Const kBottomLeft_GrSurfaceOrigin 0
    ##
    #Const kTopLeft_GrSurfaceOrigin 1
    ##
    #Enum ##

    #EnumClass SkBudgeted
    #Const kNo 0
    ##
    #Const kYes 1
    ##
    #EnumClass ##

    #EnumClass GrSemaphoresSubmitted
    #Const kNo 0
    ##
    #Const kYes 1
    ##
    #EnumClass ##
# end of defined in types

#Topic Unpremultiply
#Alias Unpremultiplied ##
##

#Topic Vertices
#Class SkVertices
#Class Bone
##
##
#Subtopic Colors
##
#Subtopic Texs
##
#Topic ##

#Topic Xfermode_Image_Filter
#Class SkXfermodeImageFilter
##
##
